@taskforcehq/taskforce 0.3.330 → 0.3.332
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +2 -2
- package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +2 -2
- package/dist/components/features/planning/PlanningModule.js +15 -3
- package/dist/components/features/planning/planningMetadata.d.ts +10 -0
- package/dist/components/features/planning/planningMetadata.js +8 -0
- package/dist/components/views/StandaloneLayout.js +35 -1
- package/dist/components/views/panels/PlanningDrawer.d.ts +2 -1
- package/dist/components/views/panels/PlanningDrawer.js +12 -8
- package/dist/config/envSchema.js +7 -0
- package/dist/core/McpTokenService.d.ts +2 -0
- package/dist/core/McpTokenService.js +13 -5
- package/dist/core/Taskforce.d.ts +11 -3
- package/dist/core/Taskforce.js +33 -3
- package/dist/core/types.d.ts +1 -0
- package/dist/documentReviews/DocumentReviewCommentStore.d.ts +2 -0
- package/dist/documentReviews/DocumentReviewCommentStore.js +28 -9
- package/dist/mcp/httpProtocolRouting.d.ts +1 -0
- package/dist/mcp/httpProtocolRouting.js +8 -5
- package/dist/mcp/runtime.js +24 -5
- package/dist/mcp/taskPlanningRegistrar.js +2 -2
- package/dist/mcp/toolProfiles.js +1 -0
- package/dist/mcp/toolRegistry.js +8 -8
- package/dist/server/buildInfo.d.ts +1 -0
- package/dist/server/buildInfo.js +5 -1
- package/dist/server/cloudMcpCapacityTelemetry.d.ts +68 -0
- package/dist/server/cloudMcpCapacityTelemetry.js +221 -0
- package/dist/server/localWorkspaceSyncServerRuntime.js +13 -5
- package/dist/server/routes/admin.js +14 -2
- package/dist/server/routes/shared.d.ts +3 -0
- package/dist/server/routes/shared.js +280 -240
- package/dist/service/localServiceCli.d.ts +2 -2
- package/dist/service/localServiceCli.js +4 -3
- package/dist/services/executorPhaseAIssuerCore.d.ts +13 -0
- package/dist/services/executorPhaseAIssuerCore.js +107 -0
- package/dist/services/taskforceAgentMcpBridge.d.ts +1 -1
- package/dist/services/taskforceAgentMcpBridge.js +35 -5
- package/dist/shared/executorPhaseASchemaValidation.js +1 -1
- package/dist/storage/postgresAdapter.js +3 -1
- package/dist/storage/postgresRequestDiagnostics.d.ts +9 -1
- package/dist/storage/postgresRequestDiagnostics.js +15 -2
- package/dist/storage/postgresWorker.js +13 -3
- package/dist/storage/postgresWorkerProtocol.d.ts +6 -0
- package/dist/storage/workflowStore.d.ts +2 -0
- package/dist/storage/workflowStore.js +39 -2
- package/dist/sync/cloudSyncApi.js +4 -2
- package/dist/sync/collaborationSyncState.js +5 -0
- package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +3 -1
- package/dist/sync/coordinator/localWorkspaceSyncRunner.js +18 -0
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +2 -0
- package/dist/sync/syncApplyHandlers.d.ts +1 -0
- package/dist/sync/syncApplyHandlers.js +72 -15
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +7 -7
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +50 -13
- package/dist/sync/v3/localOutboxRecoveryPreparationService.js +8 -2
- package/dist/sync/v3/localTaskCreateOutboxService.d.ts +3 -1
- package/dist/sync/v3/localTaskCreateOutboxService.js +6 -1
- package/dist/sync/v3/localTaskDeleteOutboxService.js +1 -0
- package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +2 -1
- package/dist/sync/v3/localTaskLifecycleOutboxService.js +5 -1
- package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -1
- package/dist/sync/v3/localTaskMetadataOutboxService.js +6 -2
- package/dist/sync/v3/localTaskStatusOutboxService.d.ts +2 -1
- package/dist/sync/v3/localTaskStatusOutboxService.js +20 -5
- package/dist/sync/v3/syncDurabilityStore.d.ts +2 -1
- package/dist/sync/v3/syncDurabilityStore.js +34 -6
- package/dist/sync/v3/workflowRuntimeMutationService.d.ts +5 -0
- package/dist/sync/v3/workflowRuntimeMutationService.js +124 -71
- package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +25 -3
- package/dist/sync/v3/workspaceSyncV3Feed.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3Feed.js +6 -1
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +2 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +49 -18
- package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +50 -5
- package/dist/ui/assets/{AiIdentityRosterCard-OcSz1PkK.js → AiIdentityRosterCard-CDMPtnbC.js} +1 -1
- package/dist/ui/assets/{AiProfilesModule-ByhYW5Xi.js → AiProfilesModule-Cww85C4E.js} +1 -1
- package/dist/ui/assets/{AnnotatedAttachmentWorkspace-BTM6nIg_.js → AnnotatedAttachmentWorkspace-Dt9TKYSH.js} +1 -1
- package/dist/ui/assets/{AssetTraySortControl-DabEG8L4.js → AssetTraySortControl-CKgapnxu.js} +1 -1
- package/dist/ui/assets/{ContextAttachmentManager-Coa8yVGM.js → ContextAttachmentManager-T-cEVcOZ.js} +2 -2
- package/dist/ui/assets/{DocumentWorkspace-BB0qhdix.js → DocumentWorkspace-HD4MUjAZ.js} +1 -1
- package/dist/ui/assets/{EntityActivityTimeline-CZ8x4UJE.js → EntityActivityTimeline-_V0zfMuh.js} +1 -1
- package/dist/ui/assets/PlanningModule-mTkBygsB.js +1 -0
- package/dist/ui/assets/{PlansPage-D86pZSSl.js → PlansPage-Btiq06VO.js} +1 -1
- package/dist/ui/assets/{TaskContextUpload-BVIkU9yT.js → TaskContextUpload-C00NVUpn.js} +1 -1
- package/dist/ui/assets/{TaskSettings-Cv1mNhv_.js → TaskSettings-Cp-L-4xh.js} +1 -1
- package/dist/ui/assets/{TaskforceAgentsModule-gmH-PD2q.js → TaskforceAgentsModule-Coq9-PUp.js} +2 -2
- package/dist/ui/assets/{WorkflowManagerModule-DbfnHJ-f.js → WorkflowManagerModule-CuqRzMmM.js} +1 -1
- package/dist/ui/assets/index-DSQINwt9.js +7 -0
- package/dist/ui/index.html +1 -1
- package/package.json +3 -1
- package/dist/ui/assets/PlanningModule-pRPjR7v5.js +0 -1
- package/dist/ui/assets/index-CTsDBaef.js +0 -7
package/dist/ui/assets/{TaskforceAgentsModule-gmH-PD2q.js → TaskforceAgentsModule-Coq9-PUp.js}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import{j as e,r as a,a as qa}from"./vendor-react-CKJs5o3c.js";import{f as gt,B as ss,C as ns,E as lt,t as r,F as si,w as Mn,G as ya,H as ni,J as ba,K as xa,L as ja,N as ka,O as Wt,Q as ai,S as qs,U as Sa,V as hs,W as ri,M as ii,X as oi,Y as Va,Z as li,_ as ci,$ as di,a0 as Vs,a1 as Ca}from"./index-
|
|
1
|
+
import{j as e,r as a,a as qa}from"./vendor-react-CKJs5o3c.js";import{f as gt,B as ss,C as ns,E as lt,t as r,F as si,w as Mn,G as ya,H as ni,J as ba,K as xa,L as ja,N as ka,O as Wt,Q as ai,S as qs,U as Sa,V as hs,W as ri,M as ii,X as oi,Y as Va,Z as li,_ as ci,$ as di,a0 as Vs,a1 as Ca}from"./index-DSQINwt9.js";import{a as Jt,A as ui,b as fi,w as Na,r as Aa}from"./AiIdentityRosterCard-CDMPtnbC.js";import{ay as vt,ba as tn,y as Cs,ao as mi,a0 as Wa,$ as pi,aJ as hi,aa as Dn,bb as gi,bc as ts,d as Lt,W as vi,bd as yi,q as bi,g as xi,be as ji,S as Bn,bf as ki,t as Pt,w as je,R as nn,a6 as On,u as Zt,X as yt,Z as st,bg as Si,Y as Ci,v as Ja,A as Ya,bh as Ws,ad as wa,ah as Qa,a2 as Xa,a7 as Za,ap as Ni,r as Ai,J as Xt,ak as wi,O as _a,bi as _i}from"./vendor-icons-Bsq-mcEn.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const An=1,Pe={name:80,shortDescription:240,purpose:2e3,listItem:1e3,listItems:24,workingGuidance:6e3,reference:200,promptContent:12e3};function Ta(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function Ie(t,n,i,o){t.push({code:n,path:i,message:o})}function Ra(t,n,i,o){const f=new Set(n);Object.keys(t).forEach(w=>{f.has(w)||Ie(o,"unknown_field",i?`${i}.${w}`:w,"This field is not part of Agent Role v1.")})}function wn(t,n,i,o){if(typeof t!="string")return Ie(o,"required_string",n,"A string value is required."),"";const f=t.trim();return f?f.length>i&&Ie(o,"string_too_long",n,`Must be ${i} characters or less.`):Ie(o,"required_string",n,"A non-empty value is required."),f}function Ti(t,n,i,o){if(t==null||t==="")return;if(typeof t!="string"){Ie(o,"invalid_string",n,"Must be a string when provided.");return}const f=t.trim();if(f)return f.length>i&&Ie(o,"string_too_long",n,`Must be ${i} characters or less.`),f}function Js(t,n,i,o){if(!Array.isArray(t))return Ie(o,"invalid_list",n,"Must be an array of strings."),[];i.required&&t.length===0&&Ie(o,"required_list",n,"Provide at least one item."),i.maxItems&&t.length>i.maxItems&&Ie(o,"too_many_items",n,`Provide no more than ${i.maxItems} items.`);const f=new Set,w=[];return t.forEach((N,x)=>{if(typeof N!="string"){Ie(o,"invalid_string",`${n}[${x}]`,"Must be a string.");return}const k=N.trim();if(!k){Ie(o,"empty_list_item",`${n}[${x}]`,"List items cannot be blank.");return}k.length>i.maxItemLength&&Ie(o,"string_too_long",`${n}[${x}]`,`Must be ${i.maxItemLength} characters or less.`),!f.has(k)&&(f.add(k),w.push(k))}),w}function er(t){const n=[];if(!Ta(t))return{definition:null,issues:[{code:"invalid_definition",path:"",message:"Agent Role definition must be an object."}]};Ra(t,["schemaVersion","name","shortDescription","purpose","responsibilities","expectedOutputs","workingGuidance","recommendations"],"",n),t.schemaVersion!==An&&Ie(n,"unsupported_schema_version","schemaVersion",`Agent Role schemaVersion must be ${An}.`);const i=wn(t.name,"name",Pe.name,n),o=wn(t.shortDescription,"shortDescription",Pe.shortDescription,n),f=wn(t.purpose,"purpose",Pe.purpose,n),w=Js(t.responsibilities,"responsibilities",{required:!0,maxItems:Pe.listItems,maxItemLength:Pe.listItem},n),N=Js(t.expectedOutputs,"expectedOutputs",{required:!0,maxItems:Pe.listItems,maxItemLength:Pe.listItem},n),x=Ti(t.workingGuidance,"workingGuidance",Pe.workingGuidance,n),k=Ta(t.recommendations)?t.recommendations:null;k?Ra(k,["skillRefs","capabilityGroups"],"recommendations",n):Ie(n,"invalid_recommendations","recommendations","Recommendations must be an object.");const $=Js(k?.skillRefs??[],"recommendations.skillRefs",{maxItems:Pe.listItems,maxItemLength:Pe.reference},n),L=Js(k?.capabilityGroups??[],"recommendations.capabilityGroups",{maxItems:Pe.listItems,maxItemLength:Pe.reference},n),K={schemaVersion:An,name:i,shortDescription:o,purpose:f,responsibilities:w,expectedOutputs:N,...x?{workingGuidance:x}:{},recommendations:{skillRefs:$,capabilityGroups:L}};return n.length===0&&tr(K).length>Pe.promptContent&&Ie(n,"compiled_prompt_too_long","",`Compiled Role prompt content must be ${Pe.promptContent} characters or less.`),{definition:n.length===0?K:null,issues:n}}class Ri extends Error{constructor(n){super(n[0]?.message||"Agent Role definition is invalid."),this.issues=n,this.name="AgentRoleDefinitionValidationError"}code="AGENT_ROLE_DEFINITION_INVALID";statusCode=400}function Ei(t){const n=er(t);if(!n.definition)throw new Ri(n.issues);return n.definition}function Ea(t){return t.map(n=>`- ${n}`).join(`
|
|
2
2
|
`)}function tr(t){return[`Role: ${t.name}`,`Purpose and scope:
|
|
3
3
|
${t.purpose}`,`Responsibilities:
|
|
4
4
|
${Ea(t.responsibilities)}`,`Expected outputs:
|
|
5
5
|
${Ea(t.expectedOutputs)}`,t.workingGuidance?`Role-specific working guidance:
|
|
6
6
|
${t.workingGuidance}`:""].filter(Boolean).join(`
|
|
7
7
|
|
|
8
|
-
`)}function Ii(t){return tr(Ei(t))}const $i="_toolAccess_2stgb_1",Li="_skillSelector_2stgb_2",Pi="_effectiveSummary_2stgb_3",Mi="_sectionHeader_2stgb_13",Di="_workspaceHeader_2stgb_14",Oi="_titleLine_2stgb_32",zi="_moduleGrid_2stgb_36",Ui="_moduleOption_2stgb_42",Gi="_unavailableCapability_2stgb_43",Bi="_moduleOptionSelected_2stgb_66",Hi="_moduleIcon_2stgb_76",Fi="_selectedSkillIcon_2stgb_77",Ki="_provenanceIcon_2stgb_78",qi="_moduleCopy_2stgb_91",Vi="_futureGroups_2stgb_110",Wi="_unknownNotice_2stgb_122",Ji="_disabledExplanation_2stgb_123",Yi="_catalogError_2stgb_147",Qi="_selectedSkills_2stgb_160",Xi="_skillSearch_2stgb_168",Zi="_skillResults_2stgb_188",eo="_emptySelection_2stgb_266",to="_provenanceGrid_2stgb_275",so="_unavailableProvenance_2stgb_312",no="_previewCaveat_2stgb_316",ao="_librarySummary_2stgb_323",ro="_workspacePanel_2stgb_346",io="_futureAction_2stgb_356",oo="_workspaceTitleIcon_2stgb_370",lo="_previewCardIcon_2stgb_371",co="_relationshipFlow_2stgb_389",uo="_previewCards_2stgb_420",fo="_previewCard_2stgb_371",mo="_previewCardAvailable_2stgb_438",W={toolAccess:$i,skillSelector:Li,effectiveSummary:Pi,sectionHeader:Mi,workspaceHeader:Di,titleLine:Oi,moduleGrid:zi,moduleOption:Ui,unavailableCapability:Gi,moduleOptionSelected:Bi,moduleIcon:Hi,selectedSkillIcon:Fi,provenanceIcon:Ki,moduleCopy:qi,futureGroups:Vi,unknownNotice:Wi,disabledExplanation:Ji,catalogError:Yi,selectedSkills:Qi,skillSearch:Xi,skillResults:Zi,emptySelection:eo,provenanceGrid:to,unavailableProvenance:so,previewCaveat:no,librarySummary:ao,workspacePanel:ro,futureAction:io,workspaceTitleIcon:oo,previewCardIcon:lo,relationshipFlow:co,previewCards:uo,previewCard:fo,previewCardAvailable:mo},Hn=[{key:"tasks",label:"Tasks and schedule",description:"Read and update tasks, checklists, task workflows, and schedule context.",icon:Cs},{key:"planning",label:"Initiatives and workstreams",description:"Read planning structure and add planning comments.",icon:mi},{key:"documents",label:"Documents",description:"Find and read Taskforce documents and their review context.",icon:Wa},{key:"images",label:"Image Notes",description:"Find images and inspect annotation sessions.",icon:pi},{key:"workspace",label:"Workspace information",description:"Read workspace configuration, people, and managed Agent identity.",icon:hi}],po=Hn.map(t=>t.key);function Fn({selectedKeys:t,onChange:n,disabled:i=!1,mode:o="active",title:f="Tool Access",description:w,showFutureTools:N=!0,requireOne:x=!1,hasCustomOverrides:k=!1}){const $=new Set(t),L=new Set(po),K=t.filter(_=>!L.has(_)),I=o==="active"?"Available now":o==="requirement"?"Requirement preview":"Inheritance preview",R=o==="active"?"tf-chip-success":"tf-chip-warning",S=(_,H)=>{if(!n||i)return;const Y=H?[...t.filter(ie=>ie!==_),_]:t.filter(ie=>ie!==_),z=Y.filter(ie=>L.has(ie)).length;x&&z===0||n(Y)};return e.jsxs("section",{className:W.toolAccess,"aria-label":f,children:[e.jsxs("div",{className:W.sectionHeader,children:[e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-section",children:f}),e.jsx("p",{className:"tf-text-helper",children:w||"Choose which Taskforce modules this Agent can use. Fewer enabled tools reduce runtime tool context."})]}),e.jsx("span",{className:R,children:I})]}),e.jsx("div",{className:W.moduleGrid,children:Hn.map(_=>{const H=_.icon,Y=$.has(_.key);return e.jsxs("label",{className:`${W.moduleOption} ${Y?W.moduleOptionSelected:""}`.trim(),children:[e.jsx("input",{type:"checkbox",checked:Y,disabled:i||!n,onChange:z=>S(_.key,z.target.checked)}),e.jsx("span",{className:W.moduleIcon,"aria-hidden":"true",children:e.jsx(H,{size:16})}),e.jsxs("span",{className:W.moduleCopy,children:[e.jsx("strong",{children:_.label}),e.jsx("small",{children:_.description})]})]},_.key)})}),k?e.jsxs("div",{className:W.unknownNotice,role:"status",children:[e.jsx(Dn,{size:14}),e.jsx("span",{children:"Custom per-tool overrides are active. Change any module selection to replace them with the module policy shown here."})]}):null,K.length>0?e.jsxs("div",{className:W.unknownNotice,role:"status",children:[e.jsx(Dn,{size:14}),e.jsxs("span",{children:["Preserved legacy keys: ",K.join(", "),". They are not available in the current managed Tool Access catalog."]}),n&&!i?e.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>n(t.filter(_=>L.has(_))),children:"Remove unsupported keys"}):null]}):null,N?e.jsxs("div",{className:W.futureGroups,children:[e.jsx(Ia,{icon:e.jsx(vt,{size:16}),title:"Connected tools",description:"Workspace-approved APIs and external MCP tools will appear here.",status:"Connections not available yet"}),e.jsx(Ia,{icon:e.jsx(gi,{size:16}),title:"Code Workspace",description:"Repository read, edit, Git, and publication access will be configured separately.",status:"Code Workspace not configured"})]}):null]})}function ho({skills:t,selectedIds:n,onChange:i,disabled:o=!1,loading:f=!1,error:w="",onRetry:N}){const[x,k]=a.useState(""),$=a.useRef(null),L=new Set(n),K=x.trim().toLowerCase(),I=t.filter(S=>S.lifecycleStatus==="active"&&!L.has(S.id)).filter(S=>!K||S.name.toLowerCase().includes(K)||S.description.toLowerCase().includes(K)).slice(0,8),R=new Map(t.map(S=>[S.id,S]));return e.jsxs("section",{className:W.skillSelector,"aria-label":"Included Skills",children:[e.jsxs("div",{className:W.sectionHeader,children:[e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-section",children:"Included Skills"}),e.jsx("p",{className:"tf-text-helper",children:"Select Skills by name. They are saved with this Role now; automatic Agent inheritance is preview-only."})]}),e.jsx("span",{className:"tf-chip-warning",children:"Inheritance preview"})]}),e.jsxs("label",{className:"tf-field-stack",children:[e.jsx("span",{className:"tf-field-label",children:"Find a Skill"}),e.jsxs("span",{className:W.skillSearch,children:[e.jsx(Bn,{size:15,"aria-hidden":"true"}),e.jsx("input",{ref:$,type:"search",className:"tf-field-shell","aria-label":"Find a Skill to include",placeholder:f?"Loading Skills…":"Search by name or description",value:x,disabled:o||f,onChange:S=>k(S.target.value)})]})]}),w?e.jsxs("div",{className:W.catalogError,role:"alert",children:[e.jsx("span",{children:w}),N?e.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:N,children:"Retry"}):null]}):!f&&I.length>0?e.jsx("div",{className:W.skillResults,"aria-label":"Available Skills",children:I.map(S=>e.jsxs("button",{type:"button",disabled:o,onClick:()=>{i([...n,S.id]),k(""),$.current?.focus()},children:[e.jsxs("span",{children:[e.jsx("strong",{children:S.name}),e.jsx("small",{children:S.description||"No description"})]}),e.jsx("span",{className:"tf-chip-neutral",children:"Add"})]},S.id))}):f?null:e.jsx("p",{className:W.emptySelection,children:t.some(S=>S.lifecycleStatus==="active"&&!L.has(S.id))?"No Skills match this search.":"No additional Skills available."}),n.length>0?e.jsx("ul",{className:W.selectedSkills,children:n.map(S=>{const _=R.get(S);return e.jsxs("li",{children:[e.jsx("span",{className:W.selectedSkillIcon,"aria-hidden":"true",children:e.jsx(Lt,{size:15})}),e.jsxs("span",{children:[e.jsx("strong",{children:_?.name||"Missing Skill"}),e.jsx("small",{children:_?.description||S})]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:o,onClick:()=>{i(n.filter(H=>H!==S)),$.current?.focus()},children:"Remove"})]},S)})}):e.jsx("p",{className:W.emptySelection,children:"No Skills included in this Role."})]})}function go({hasRole:t,directSkillCount:n,toolKeys:i}){const o=Hn.filter(f=>i.includes(f.key)).map(f=>f.label);return e.jsxs("section",{className:W.effectiveSummary,"aria-label":"Effective configuration preview",children:[e.jsxs("div",{className:W.sectionHeader,children:[e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-section",children:"Effective configuration"}),e.jsx("p",{className:"tf-text-helper",children:"A preview of where this Agent’s behavior and access come from."})]}),e.jsx("span",{className:"tf-chip-warning",children:"Partial preview"})]}),e.jsxs("div",{className:W.provenanceGrid,children:[e.jsxs("div",{children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(ts,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"From Role"}),e.jsx("strong",{children:t?"Role guidance selected":"No Role selected"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(Lt,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"Added to Agent"}),e.jsxs("strong",{children:[n," direct ",n===1?"Skill":"Skills"]})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(vi,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"Runtime Tool Access"}),e.jsx("strong",{children:o.length>0?o.join(", "):"No modules selected"})]})]}),e.jsxs("div",{className:W.unavailableProvenance,children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(yi,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"Resources"}),e.jsx("strong",{children:"Not available yet"})]})]})]}),e.jsx("p",{className:W.previewCaveat,children:"Role guidance resolves today. Role-included Skills, Role Tool Access, Connections, and Resources are shown for experience review but are not yet inherited at runtime."})]})}function vo({kind:t}){return e.jsxs("div",{className:W.librarySummary,children:[t==="connections"?e.jsx(vt,{size:20}):e.jsx(tn,{size:20}),e.jsx("strong",{children:t==="connections"?"No Connections configured":"No Resource Collections yet"}),e.jsx("span",{children:t==="connections"?"Connections will make approved external tools and data providers available to Roles and Agents.":"Collections will tell Roles and Agents where to look for trusted information."}),e.jsx("span",{className:"tf-chip-neutral",children:"Preview only"})]})}function yo({kind:t}){const n=t==="connections";return e.jsxs("section",{className:W.workspacePanel,"aria-labelledby":`${t}-preview-title`,children:[e.jsxs("header",{className:W.workspaceHeader,children:[e.jsx("div",{className:W.workspaceTitleIcon,"aria-hidden":"true",children:n?e.jsx(vt,{size:20}):e.jsx(tn,{size:20})}),e.jsxs("div",{children:[e.jsxs("div",{className:W.titleLine,children:[e.jsx("h2",{id:`${t}-preview-title`,className:"tf-heading-page",children:n?"Connections":"Resources"}),e.jsx("span",{className:"tf-chip-warning",children:"Not available yet"})]}),e.jsx("p",{className:"tf-text-secondary",children:n?"Secure workspace integrations make external tools and provider data available for explicit Role and Agent access.":"Resource Collections define trusted places Agents can search without loading full source content into every prompt."})]}),e.jsxs("button",{type:"button",className:`tf-button-primary ${W.futureAction}`,disabled:!0,children:[n?e.jsx(bi,{size:15}):e.jsx(xi,{size:15}),n?"Add Connection":"New Collection"]})]}),e.jsxs("div",{className:W.relationshipFlow,"aria-label":"Configuration relationship",children:[e.jsx("span",{children:"Workspace"}),e.jsx("strong",{children:n?"Connection":"Resource Collection"}),e.jsx("span",{children:"Role"}),e.jsx("span",{children:"Agent"}),e.jsx("span",{children:"Runtime"})]}),e.jsx("div",{className:W.previewCards,children:n?e.jsxs(e.Fragment,{children:[e.jsx(Yt,{icon:e.jsx(Dn,{size:18}),title:"Taskforce managed tools",description:"Built-in modules use Taskforce-managed credentials and the current allowlisted runtime.",status:"Available now",available:!0}),e.jsx(Yt,{icon:e.jsx(tn,{size:18}),title:"Real estate data provider",description:"Example: search listings, retrieve property details, and read market statistics.",status:"Connection required"}),e.jsx(Yt,{icon:e.jsx(vt,{size:18}),title:"External MCP server",description:"Approved server tools will be imported individually with scopes and audit controls.",status:"Not available yet"})]}):e.jsxs(e.Fragment,{children:[e.jsx(Yt,{icon:e.jsx(Wa,{size:18}),title:"Taskforce documents",description:"Curate existing workspace documents into a reusable source collection.",status:"Collection manager required"}),e.jsx(Yt,{icon:e.jsx(ji,{size:18}),title:"News sources",description:"Example: trusted publications, feeds, topics, regions, and recency rules.",status:"Provider required"}),e.jsx(Yt,{icon:e.jsx(Bn,{size:18}),title:"Web and data sources",description:"Allowed domains and connected datasets will be searched on demand.",status:"Not available yet"})]})}),e.jsxs("div",{className:W.disabledExplanation,children:[e.jsx(ki,{size:16}),e.jsxs("div",{children:[e.jsx("strong",{children:"Why this is disabled"}),e.jsx("span",{children:n?"Credential storage, scopes, connection health, and external tool allowlisting are not implemented.":"Collection persistence, authorization, retrieval, and marketplace portability are not implemented."})]})]})]})}function Ia({icon:t,title:n,description:i,status:o}){return e.jsxs("div",{className:W.unavailableCapability,"aria-disabled":"true",children:[e.jsx("span",{className:W.moduleIcon,"aria-hidden":"true",children:t}),e.jsxs("span",{className:W.moduleCopy,children:[e.jsx("strong",{children:n}),e.jsx("small",{children:i})]}),e.jsx("span",{className:"tf-chip-neutral",children:o})]})}function Yt({icon:t,title:n,description:i,status:o,available:f=!1}){return e.jsxs("article",{className:`${W.previewCard} ${f?W.previewCardAvailable:""}`.trim(),children:[e.jsx("div",{className:W.previewCardIcon,children:t}),e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-card",children:n}),e.jsx("p",{className:"tf-text-secondary",children:i})]}),e.jsx("span",{className:f?"tf-chip-success":"tf-chip-neutral",children:o})]})}const bo="_root_3ejva_1",xo="_rootExternalLibrary_3ejva_11",jo="_library_3ejva_15",ko="_libraryExternal_3ejva_26",So="_libraryHeader_3ejva_39",Co="_search_3ejva_50",No="_retiredToggle_3ejva_78",Ao="_libraryList_3ejva_86",wo="_libraryState_3ejva_95",_o="_libraryError_3ejva_107",To="_libraryStateIcon_3ejva_112",Ro="_libraryCard_3ejva_117",Eo="_libraryCardSelected_3ejva_139",Io="_libraryCardIcon_3ejva_145",$o="_libraryCardLogo_3ejva_156",Lo="_libraryCardBody_3ejva_168",Po="_editor_3ejva_192",Mo="_editorHeader_3ejva_199",Do="_editorTitle_3ejva_213",Oo="_editorTitleLine_3ejva_225",zo="_headerActions_3ejva_240",Uo="_feedbackError_3ejva_247",Go="_feedbackSuccess_3ejva_248",Bo="_confirmation_3ejva_249",Ho="_fieldError_3ejva_275",Fo="_empty_3ejva_300",Ko="_emptyIcon_3ejva_310",qo="_editorGrid_3ejva_321",Vo="_formColumn_3ejva_331",Wo="_previewColumn_3ejva_337",Jo="_previewHeader_3ejva_348",Yo="_previewNote_3ejva_359",Qo="_preview_3ejva_337",Xo="_previewEmpty_3ejva_380",Zo="_metrics_3ejva_394",el="_lifecycleAction_3ejva_412",tl="_history_3ejva_422",sl="_spinner_3ejva_477",nl="_visuallyHidden_3ejva_481",T={root:bo,rootExternalLibrary:xo,library:jo,libraryExternal:ko,libraryHeader:So,search:Co,retiredToggle:No,libraryList:Ao,libraryState:wo,libraryError:_o,libraryStateIcon:To,libraryCard:Ro,libraryCardSelected:Eo,libraryCardIcon:Io,libraryCardLogo:$o,libraryCardBody:Lo,editor:Po,editorHeader:Mo,editorTitle:Do,editorTitleLine:Oo,headerActions:zo,feedbackError:Uo,feedbackSuccess:Go,confirmation:Bo,fieldError:Ho,empty:Fo,emptyIcon:Ko,editorGrid:qo,formColumn:Vo,previewColumn:Wo,previewHeader:Jo,previewNote:Yo,preview:Qo,previewEmpty:Xo,metrics:Zo,lifecycleAction:el,history:tl,spinner:sl,visuallyHidden:nl};function sr({singularLabel:t,pluralLabel:n,description:i,icon:o,items:f,selectedId:w,searchValue:N,onSearchChange:x,showRetired:k,onShowRetiredChange:$,loading:L,error:K,emptyMessage:I,onRetry:R,onCreate:S,onSelect:_,libraryPortalTarget:H}){const Y=e.jsxs(e.Fragment,{children:[H?e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:S,children:[e.jsx(Pt,{size:14})," New ",t]}):e.jsxs("div",{className:T.libraryHeader,children:[e.jsxs("div",{children:[e.jsxs("h3",{className:"tf-heading-card",children:["Available ",n]}),e.jsx("p",{className:"tf-text-helper",children:i})]}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:S,children:[e.jsx(Pt,{size:14})," New"]})]}),e.jsxs("label",{className:T.search,children:[e.jsx(Bn,{size:14,"aria-hidden":"true"}),e.jsxs("span",{className:T.visuallyHidden,children:["Search ",n]}),e.jsx("input",{"aria-label":`Search ${n}`,value:N,onChange:z=>x(z.target.value),placeholder:`Search ${n.toLowerCase()}`})]}),e.jsxs("label",{className:T.retiredToggle,children:[e.jsx("input",{type:"checkbox",checked:k,onChange:z=>$(z.target.checked)}),"Show retired"]}),e.jsx("div",{className:T.libraryList,"aria-busy":L,children:L?e.jsxs("div",{className:T.libraryState,children:[e.jsx(je,{size:16,className:T.spinner,"aria-hidden":"true"}),"Loading ",n,"…"]}):K?e.jsxs("div",{className:`${T.libraryState} ${T.libraryError}`,role:"alert",children:[e.jsx("span",{children:K}),R?e.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:R,children:"Retry"}):null]}):f.length===0?e.jsxs("div",{className:T.libraryState,children:[e.jsx("span",{className:T.libraryStateIcon,"aria-hidden":"true",children:o}),I]}):f.map(z=>{const ie=z.id===w;return e.jsxs("button",{type:"button",className:`${T.libraryCard} ${ie?T.libraryCardSelected:""}`.trim(),onClick:()=>_(z.id),"aria-pressed":ie,children:[e.jsx("span",{className:T.libraryCardIcon,"aria-hidden":"true",children:o}),e.jsxs("span",{className:T.libraryCardBody,children:[e.jsx("strong",{children:z.name}),e.jsx("span",{children:z.description})]}),z.lifecycleStatus==="retired"?e.jsx("span",{className:"tf-chip-warning",children:"Retired"}):null]},z.id)})})]});return H?qa.createPortal(e.jsx("div",{className:`${T.library} ${T.libraryExternal}`,"aria-label":`${t} list`,children:Y}),H):e.jsx("aside",{className:T.library,"aria-label":`${t} Library`,children:Y})}function nr({icon:t,title:n,description:i,revision:o,retired:f=!1,showActions:w,dirty:N,saving:x,onReset:k,onSave:$}){return e.jsxs("header",{className:T.editorHeader,children:[e.jsxs("div",{className:T.editorTitle,children:[e.jsx("span",{"aria-hidden":"true",children:t}),e.jsxs("div",{children:[e.jsxs("div",{className:T.editorTitleLine,children:[e.jsx("h2",{className:"tf-heading-page",children:n}),f?e.jsx("span",{className:"tf-chip-warning",children:"Retired"}):null,!f&&o?e.jsxs("span",{className:"tf-chip-accent",children:["Revision ",o]}):null]}),e.jsx("p",{className:"tf-text-secondary",children:i})]})]}),w?e.jsxs("div",{className:T.headerActions,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",disabled:!N||x,onClick:k,children:[e.jsx(nn,{size:14})," Reset"]}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",disabled:!N||x||f,onClick:$,children:[x?e.jsx(je,{size:14,className:T.spinner}):e.jsx(On,{size:14}),"Save"]})]}):null]})}function zn({type:t,message:n}){return e.jsxs("div",{className:t==="error"?T.feedbackError:T.feedbackSuccess,role:t==="error"?"alert":"status",children:[t==="error"?e.jsx(st,{size:15}):e.jsx(Cs,{size:15}),e.jsx("span",{children:n})]})}function ar(t,n){return new Map(n?t.map(i=>[i.path,i.message]):[])}function rr(t,n){const i=t.find(o=>n[o.path])?.path;i&&window.requestAnimationFrame(()=>n[i]?.focus())}function nt({id:t,message:n}){return n?e.jsx("small",{id:t,className:T.fieldError,children:n}):null}function ir({icon:t,title:n,description:i,actionLabel:o,onCreate:f}){return e.jsxs("div",{className:T.empty,children:[e.jsx("span",{className:T.emptyIcon,"aria-hidden":"true",children:t}),e.jsx("h3",{className:"tf-empty-title",children:n}),e.jsx("p",{className:"tf-empty-copy",children:i}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:f,children:[e.jsx(Pt,{size:15})," ",o]})]})}function or({title:t,message:n,entityLabel:i,saving:o,onConfirm:f,onCancel:w}){const N=a.useId(),x=a.useId(),k=a.useRef(null);return a.useEffect(()=>{const $=document.activeElement instanceof HTMLElement?document.activeElement:null;return k.current?.focus(),()=>{$?.isConnected&&$.focus()}},[]),e.jsxs("div",{className:T.confirmation,role:"alertdialog","aria-modal":"false","aria-labelledby":N,"aria-describedby":x,onKeyDown:$=>{$.key!=="Escape"||o||($.preventDefault(),w())},children:[e.jsxs("div",{children:[e.jsx("strong",{id:N,children:t}),e.jsx("span",{id:x,children:n})]}),e.jsxs("button",{type:"button",className:"tf-button-destructive tf-button-compact",disabled:o,onClick:f,"aria-label":`Confirm ${i} retirement`,children:[e.jsx(Zt,{size:14})," Retire ",i]}),e.jsxs("button",{ref:k,type:"button",className:"tf-button-ghost tf-button-compact",disabled:o,onClick:w,"aria-label":`Cancel ${i} retirement`,children:[e.jsx(yt,{size:14})," Cancel"]})]})}function lr({entityLabel:t,note:n,meta:i,children:o,metrics:f=[],revisions:w=[],lifecycleStatus:N,saving:x=!1,retireDescription:k,restoreDescription:$,onRetire:L,onRestore:K}){const I=!!(N&&k&&$&&L&&K);return e.jsxs("aside",{className:T.previewColumn,"aria-label":`Compiled ${t} preview`,children:[e.jsxs("div",{className:T.previewHeader,children:[e.jsxs("div",{children:[e.jsx("span",{className:"tf-label-micro",children:"Runtime preview"}),e.jsx("h3",{className:"tf-heading-section",children:"Compiled runtime preview"})]}),i]}),e.jsx("p",{className:T.previewNote,children:n}),o,f.length>0?e.jsx("div",{className:T.metrics,children:f.map(R=>e.jsxs("div",{children:[e.jsx("span",{children:R.label}),e.jsx("strong",{children:R.value})]},R.label))}):null,w.length>0?e.jsxs("details",{className:T.history,children:[e.jsxs("summary",{children:[e.jsx(Si,{size:12})," Revision history"]}),e.jsx("ol",{children:w.map(R=>e.jsxs("li",{children:[e.jsxs("strong",{children:["Revision ",R.revision]}),e.jsx("span",{children:new Date(R.createdAt).toLocaleString()}),e.jsx("code",{children:R.contentHash.slice(0,12)})]},R.revision))})]}):null,I?e.jsxs("div",{className:T.lifecycleAction,children:[e.jsxs("div",{children:[e.jsx("strong",{children:N==="retired"?`Restore ${t}`:`Retire ${t}`}),e.jsx("span",{children:N==="retired"?$:k})]}),N==="retired"?e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",disabled:x,onClick:K,children:[e.jsx(nn,{size:14})," Restore"]}):e.jsxs("button",{type:"button",className:"tf-button-destructive tf-button-compact",disabled:x,onClick:L,children:[e.jsx(Ci,{size:14})," Retire"]})]}):null]})}const al="_formSection_dyv9a_1",rl="_sectionHeader_dyv9a_9",il="_fieldGrid_dyv9a_13",ol="_configurationPreview_dyv9a_27",ll="_resourcesPreview_dyv9a_33",cl="_previewCode_dyv9a_49",ot={formSection:al,sectionHeader:rl,fieldGrid:il,configurationPreview:ol,resourcesPreview:ll,previewCode:cl},gs={name:"",shortDescription:"",purpose:"",responsibilities:"",expectedOutputs:"",workingGuidance:"",skillRefs:"",capabilityGroups:""};function es(t){return t.split(`
|
|
8
|
+
`)}function Ii(t){return tr(Ei(t))}const $i="_toolAccess_2stgb_1",Li="_skillSelector_2stgb_2",Pi="_effectiveSummary_2stgb_3",Mi="_sectionHeader_2stgb_13",Di="_workspaceHeader_2stgb_14",Oi="_titleLine_2stgb_32",zi="_moduleGrid_2stgb_36",Ui="_moduleOption_2stgb_42",Gi="_unavailableCapability_2stgb_43",Bi="_moduleOptionSelected_2stgb_66",Hi="_moduleIcon_2stgb_76",Fi="_selectedSkillIcon_2stgb_77",Ki="_provenanceIcon_2stgb_78",qi="_moduleCopy_2stgb_91",Vi="_futureGroups_2stgb_110",Wi="_unknownNotice_2stgb_122",Ji="_disabledExplanation_2stgb_123",Yi="_catalogError_2stgb_147",Qi="_selectedSkills_2stgb_160",Xi="_skillSearch_2stgb_168",Zi="_skillResults_2stgb_188",eo="_emptySelection_2stgb_266",to="_provenanceGrid_2stgb_275",so="_unavailableProvenance_2stgb_312",no="_previewCaveat_2stgb_316",ao="_librarySummary_2stgb_323",ro="_workspacePanel_2stgb_346",io="_futureAction_2stgb_356",oo="_workspaceTitleIcon_2stgb_370",lo="_previewCardIcon_2stgb_371",co="_relationshipFlow_2stgb_389",uo="_previewCards_2stgb_420",fo="_previewCard_2stgb_371",mo="_previewCardAvailable_2stgb_438",W={toolAccess:$i,skillSelector:Li,effectiveSummary:Pi,sectionHeader:Mi,workspaceHeader:Di,titleLine:Oi,moduleGrid:zi,moduleOption:Ui,unavailableCapability:Gi,moduleOptionSelected:Bi,moduleIcon:Hi,selectedSkillIcon:Fi,provenanceIcon:Ki,moduleCopy:qi,futureGroups:Vi,unknownNotice:Wi,disabledExplanation:Ji,catalogError:Yi,selectedSkills:Qi,skillSearch:Xi,skillResults:Zi,emptySelection:eo,provenanceGrid:to,unavailableProvenance:so,previewCaveat:no,librarySummary:ao,workspacePanel:ro,futureAction:io,workspaceTitleIcon:oo,previewCardIcon:lo,relationshipFlow:co,previewCards:uo,previewCard:fo,previewCardAvailable:mo},Hn=[{key:"tasks",label:"Tasks and schedule",description:"Read and update tasks, checklists, task workflows, and schedule context.",icon:Cs},{key:"planning",label:"Initiatives and workstreams",description:"Read planning structure and add planning comments.",icon:mi},{key:"documents",label:"Documents and reviews",description:"Find and read Taskforce documents, inspect review context, and post document review feedback.",icon:Wa},{key:"images",label:"Image Notes",description:"Find images and inspect annotation sessions.",icon:pi},{key:"workspace",label:"Workspace information",description:"Read workspace configuration, people, and managed Agent identity.",icon:hi}],po=Hn.map(t=>t.key);function Fn({selectedKeys:t,onChange:n,disabled:i=!1,mode:o="active",title:f="Tool Access",description:w,showFutureTools:N=!0,requireOne:x=!1,hasCustomOverrides:k=!1}){const $=new Set(t),L=new Set(po),K=t.filter(_=>!L.has(_)),I=o==="active"?"Available now":o==="requirement"?"Requirement preview":"Inheritance preview",R=o==="active"?"tf-chip-success":"tf-chip-warning",S=(_,H)=>{if(!n||i)return;const Y=H?[...t.filter(ie=>ie!==_),_]:t.filter(ie=>ie!==_),z=Y.filter(ie=>L.has(ie)).length;x&&z===0||n(Y)};return e.jsxs("section",{className:W.toolAccess,"aria-label":f,children:[e.jsxs("div",{className:W.sectionHeader,children:[e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-section",children:f}),e.jsx("p",{className:"tf-text-helper",children:w||"Choose which Taskforce modules this Agent can use. Fewer enabled tools reduce runtime tool context."})]}),e.jsx("span",{className:R,children:I})]}),e.jsx("div",{className:W.moduleGrid,children:Hn.map(_=>{const H=_.icon,Y=$.has(_.key);return e.jsxs("label",{className:`${W.moduleOption} ${Y?W.moduleOptionSelected:""}`.trim(),children:[e.jsx("input",{type:"checkbox",checked:Y,disabled:i||!n,onChange:z=>S(_.key,z.target.checked)}),e.jsx("span",{className:W.moduleIcon,"aria-hidden":"true",children:e.jsx(H,{size:16})}),e.jsxs("span",{className:W.moduleCopy,children:[e.jsx("strong",{children:_.label}),e.jsx("small",{children:_.description})]})]},_.key)})}),k?e.jsxs("div",{className:W.unknownNotice,role:"status",children:[e.jsx(Dn,{size:14}),e.jsx("span",{children:"Custom per-tool overrides are active. Change any module selection to replace them with the module policy shown here."})]}):null,K.length>0?e.jsxs("div",{className:W.unknownNotice,role:"status",children:[e.jsx(Dn,{size:14}),e.jsxs("span",{children:["Preserved legacy keys: ",K.join(", "),". They are not available in the current managed Tool Access catalog."]}),n&&!i?e.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>n(t.filter(_=>L.has(_))),children:"Remove unsupported keys"}):null]}):null,N?e.jsxs("div",{className:W.futureGroups,children:[e.jsx(Ia,{icon:e.jsx(vt,{size:16}),title:"Connected tools",description:"Workspace-approved APIs and external MCP tools will appear here.",status:"Connections not available yet"}),e.jsx(Ia,{icon:e.jsx(gi,{size:16}),title:"Code Workspace",description:"Repository read, edit, Git, and publication access will be configured separately.",status:"Code Workspace not configured"})]}):null]})}function ho({skills:t,selectedIds:n,onChange:i,disabled:o=!1,loading:f=!1,error:w="",onRetry:N}){const[x,k]=a.useState(""),$=a.useRef(null),L=new Set(n),K=x.trim().toLowerCase(),I=t.filter(S=>S.lifecycleStatus==="active"&&!L.has(S.id)).filter(S=>!K||S.name.toLowerCase().includes(K)||S.description.toLowerCase().includes(K)).slice(0,8),R=new Map(t.map(S=>[S.id,S]));return e.jsxs("section",{className:W.skillSelector,"aria-label":"Included Skills",children:[e.jsxs("div",{className:W.sectionHeader,children:[e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-section",children:"Included Skills"}),e.jsx("p",{className:"tf-text-helper",children:"Select Skills by name. They are saved with this Role now; automatic Agent inheritance is preview-only."})]}),e.jsx("span",{className:"tf-chip-warning",children:"Inheritance preview"})]}),e.jsxs("label",{className:"tf-field-stack",children:[e.jsx("span",{className:"tf-field-label",children:"Find a Skill"}),e.jsxs("span",{className:W.skillSearch,children:[e.jsx(Bn,{size:15,"aria-hidden":"true"}),e.jsx("input",{ref:$,type:"search",className:"tf-field-shell","aria-label":"Find a Skill to include",placeholder:f?"Loading Skills…":"Search by name or description",value:x,disabled:o||f,onChange:S=>k(S.target.value)})]})]}),w?e.jsxs("div",{className:W.catalogError,role:"alert",children:[e.jsx("span",{children:w}),N?e.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:N,children:"Retry"}):null]}):!f&&I.length>0?e.jsx("div",{className:W.skillResults,"aria-label":"Available Skills",children:I.map(S=>e.jsxs("button",{type:"button",disabled:o,onClick:()=>{i([...n,S.id]),k(""),$.current?.focus()},children:[e.jsxs("span",{children:[e.jsx("strong",{children:S.name}),e.jsx("small",{children:S.description||"No description"})]}),e.jsx("span",{className:"tf-chip-neutral",children:"Add"})]},S.id))}):f?null:e.jsx("p",{className:W.emptySelection,children:t.some(S=>S.lifecycleStatus==="active"&&!L.has(S.id))?"No Skills match this search.":"No additional Skills available."}),n.length>0?e.jsx("ul",{className:W.selectedSkills,children:n.map(S=>{const _=R.get(S);return e.jsxs("li",{children:[e.jsx("span",{className:W.selectedSkillIcon,"aria-hidden":"true",children:e.jsx(Lt,{size:15})}),e.jsxs("span",{children:[e.jsx("strong",{children:_?.name||"Missing Skill"}),e.jsx("small",{children:_?.description||S})]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:o,onClick:()=>{i(n.filter(H=>H!==S)),$.current?.focus()},children:"Remove"})]},S)})}):e.jsx("p",{className:W.emptySelection,children:"No Skills included in this Role."})]})}function go({hasRole:t,directSkillCount:n,toolKeys:i}){const o=Hn.filter(f=>i.includes(f.key)).map(f=>f.label);return e.jsxs("section",{className:W.effectiveSummary,"aria-label":"Effective configuration preview",children:[e.jsxs("div",{className:W.sectionHeader,children:[e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-section",children:"Effective configuration"}),e.jsx("p",{className:"tf-text-helper",children:"A preview of where this Agent’s behavior and access come from."})]}),e.jsx("span",{className:"tf-chip-warning",children:"Partial preview"})]}),e.jsxs("div",{className:W.provenanceGrid,children:[e.jsxs("div",{children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(ts,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"From Role"}),e.jsx("strong",{children:t?"Role guidance selected":"No Role selected"})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(Lt,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"Added to Agent"}),e.jsxs("strong",{children:[n," direct ",n===1?"Skill":"Skills"]})]})]}),e.jsxs("div",{children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(vi,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"Runtime Tool Access"}),e.jsx("strong",{children:o.length>0?o.join(", "):"No modules selected"})]})]}),e.jsxs("div",{className:W.unavailableProvenance,children:[e.jsx("span",{className:W.provenanceIcon,children:e.jsx(yi,{size:15})}),e.jsxs("span",{children:[e.jsx("small",{children:"Resources"}),e.jsx("strong",{children:"Not available yet"})]})]})]}),e.jsx("p",{className:W.previewCaveat,children:"Role guidance resolves today. Role-included Skills, Role Tool Access, Connections, and Resources are shown for experience review but are not yet inherited at runtime."})]})}function vo({kind:t}){return e.jsxs("div",{className:W.librarySummary,children:[t==="connections"?e.jsx(vt,{size:20}):e.jsx(tn,{size:20}),e.jsx("strong",{children:t==="connections"?"No Connections configured":"No Resource Collections yet"}),e.jsx("span",{children:t==="connections"?"Connections will make approved external tools and data providers available to Roles and Agents.":"Collections will tell Roles and Agents where to look for trusted information."}),e.jsx("span",{className:"tf-chip-neutral",children:"Preview only"})]})}function yo({kind:t}){const n=t==="connections";return e.jsxs("section",{className:W.workspacePanel,"aria-labelledby":`${t}-preview-title`,children:[e.jsxs("header",{className:W.workspaceHeader,children:[e.jsx("div",{className:W.workspaceTitleIcon,"aria-hidden":"true",children:n?e.jsx(vt,{size:20}):e.jsx(tn,{size:20})}),e.jsxs("div",{children:[e.jsxs("div",{className:W.titleLine,children:[e.jsx("h2",{id:`${t}-preview-title`,className:"tf-heading-page",children:n?"Connections":"Resources"}),e.jsx("span",{className:"tf-chip-warning",children:"Not available yet"})]}),e.jsx("p",{className:"tf-text-secondary",children:n?"Secure workspace integrations make external tools and provider data available for explicit Role and Agent access.":"Resource Collections define trusted places Agents can search without loading full source content into every prompt."})]}),e.jsxs("button",{type:"button",className:`tf-button-primary ${W.futureAction}`,disabled:!0,children:[n?e.jsx(bi,{size:15}):e.jsx(xi,{size:15}),n?"Add Connection":"New Collection"]})]}),e.jsxs("div",{className:W.relationshipFlow,"aria-label":"Configuration relationship",children:[e.jsx("span",{children:"Workspace"}),e.jsx("strong",{children:n?"Connection":"Resource Collection"}),e.jsx("span",{children:"Role"}),e.jsx("span",{children:"Agent"}),e.jsx("span",{children:"Runtime"})]}),e.jsx("div",{className:W.previewCards,children:n?e.jsxs(e.Fragment,{children:[e.jsx(Yt,{icon:e.jsx(Dn,{size:18}),title:"Taskforce managed tools",description:"Built-in modules use Taskforce-managed credentials and the current allowlisted runtime.",status:"Available now",available:!0}),e.jsx(Yt,{icon:e.jsx(tn,{size:18}),title:"Real estate data provider",description:"Example: search listings, retrieve property details, and read market statistics.",status:"Connection required"}),e.jsx(Yt,{icon:e.jsx(vt,{size:18}),title:"External MCP server",description:"Approved server tools will be imported individually with scopes and audit controls.",status:"Not available yet"})]}):e.jsxs(e.Fragment,{children:[e.jsx(Yt,{icon:e.jsx(Wa,{size:18}),title:"Taskforce documents",description:"Curate existing workspace documents into a reusable source collection.",status:"Collection manager required"}),e.jsx(Yt,{icon:e.jsx(ji,{size:18}),title:"News sources",description:"Example: trusted publications, feeds, topics, regions, and recency rules.",status:"Provider required"}),e.jsx(Yt,{icon:e.jsx(Bn,{size:18}),title:"Web and data sources",description:"Allowed domains and connected datasets will be searched on demand.",status:"Not available yet"})]})}),e.jsxs("div",{className:W.disabledExplanation,children:[e.jsx(ki,{size:16}),e.jsxs("div",{children:[e.jsx("strong",{children:"Why this is disabled"}),e.jsx("span",{children:n?"Credential storage, scopes, connection health, and external tool allowlisting are not implemented.":"Collection persistence, authorization, retrieval, and marketplace portability are not implemented."})]})]})]})}function Ia({icon:t,title:n,description:i,status:o}){return e.jsxs("div",{className:W.unavailableCapability,"aria-disabled":"true",children:[e.jsx("span",{className:W.moduleIcon,"aria-hidden":"true",children:t}),e.jsxs("span",{className:W.moduleCopy,children:[e.jsx("strong",{children:n}),e.jsx("small",{children:i})]}),e.jsx("span",{className:"tf-chip-neutral",children:o})]})}function Yt({icon:t,title:n,description:i,status:o,available:f=!1}){return e.jsxs("article",{className:`${W.previewCard} ${f?W.previewCardAvailable:""}`.trim(),children:[e.jsx("div",{className:W.previewCardIcon,children:t}),e.jsxs("div",{children:[e.jsx("h3",{className:"tf-heading-card",children:n}),e.jsx("p",{className:"tf-text-secondary",children:i})]}),e.jsx("span",{className:f?"tf-chip-success":"tf-chip-neutral",children:o})]})}const bo="_root_3ejva_1",xo="_rootExternalLibrary_3ejva_11",jo="_library_3ejva_15",ko="_libraryExternal_3ejva_26",So="_libraryHeader_3ejva_39",Co="_search_3ejva_50",No="_retiredToggle_3ejva_78",Ao="_libraryList_3ejva_86",wo="_libraryState_3ejva_95",_o="_libraryError_3ejva_107",To="_libraryStateIcon_3ejva_112",Ro="_libraryCard_3ejva_117",Eo="_libraryCardSelected_3ejva_139",Io="_libraryCardIcon_3ejva_145",$o="_libraryCardLogo_3ejva_156",Lo="_libraryCardBody_3ejva_168",Po="_editor_3ejva_192",Mo="_editorHeader_3ejva_199",Do="_editorTitle_3ejva_213",Oo="_editorTitleLine_3ejva_225",zo="_headerActions_3ejva_240",Uo="_feedbackError_3ejva_247",Go="_feedbackSuccess_3ejva_248",Bo="_confirmation_3ejva_249",Ho="_fieldError_3ejva_275",Fo="_empty_3ejva_300",Ko="_emptyIcon_3ejva_310",qo="_editorGrid_3ejva_321",Vo="_formColumn_3ejva_331",Wo="_previewColumn_3ejva_337",Jo="_previewHeader_3ejva_348",Yo="_previewNote_3ejva_359",Qo="_preview_3ejva_337",Xo="_previewEmpty_3ejva_380",Zo="_metrics_3ejva_394",el="_lifecycleAction_3ejva_412",tl="_history_3ejva_422",sl="_spinner_3ejva_477",nl="_visuallyHidden_3ejva_481",T={root:bo,rootExternalLibrary:xo,library:jo,libraryExternal:ko,libraryHeader:So,search:Co,retiredToggle:No,libraryList:Ao,libraryState:wo,libraryError:_o,libraryStateIcon:To,libraryCard:Ro,libraryCardSelected:Eo,libraryCardIcon:Io,libraryCardLogo:$o,libraryCardBody:Lo,editor:Po,editorHeader:Mo,editorTitle:Do,editorTitleLine:Oo,headerActions:zo,feedbackError:Uo,feedbackSuccess:Go,confirmation:Bo,fieldError:Ho,empty:Fo,emptyIcon:Ko,editorGrid:qo,formColumn:Vo,previewColumn:Wo,previewHeader:Jo,previewNote:Yo,preview:Qo,previewEmpty:Xo,metrics:Zo,lifecycleAction:el,history:tl,spinner:sl,visuallyHidden:nl};function sr({singularLabel:t,pluralLabel:n,description:i,icon:o,items:f,selectedId:w,searchValue:N,onSearchChange:x,showRetired:k,onShowRetiredChange:$,loading:L,error:K,emptyMessage:I,onRetry:R,onCreate:S,onSelect:_,libraryPortalTarget:H}){const Y=e.jsxs(e.Fragment,{children:[H?e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:S,children:[e.jsx(Pt,{size:14})," New ",t]}):e.jsxs("div",{className:T.libraryHeader,children:[e.jsxs("div",{children:[e.jsxs("h3",{className:"tf-heading-card",children:["Available ",n]}),e.jsx("p",{className:"tf-text-helper",children:i})]}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:S,children:[e.jsx(Pt,{size:14})," New"]})]}),e.jsxs("label",{className:T.search,children:[e.jsx(Bn,{size:14,"aria-hidden":"true"}),e.jsxs("span",{className:T.visuallyHidden,children:["Search ",n]}),e.jsx("input",{"aria-label":`Search ${n}`,value:N,onChange:z=>x(z.target.value),placeholder:`Search ${n.toLowerCase()}`})]}),e.jsxs("label",{className:T.retiredToggle,children:[e.jsx("input",{type:"checkbox",checked:k,onChange:z=>$(z.target.checked)}),"Show retired"]}),e.jsx("div",{className:T.libraryList,"aria-busy":L,children:L?e.jsxs("div",{className:T.libraryState,children:[e.jsx(je,{size:16,className:T.spinner,"aria-hidden":"true"}),"Loading ",n,"…"]}):K?e.jsxs("div",{className:`${T.libraryState} ${T.libraryError}`,role:"alert",children:[e.jsx("span",{children:K}),R?e.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:R,children:"Retry"}):null]}):f.length===0?e.jsxs("div",{className:T.libraryState,children:[e.jsx("span",{className:T.libraryStateIcon,"aria-hidden":"true",children:o}),I]}):f.map(z=>{const ie=z.id===w;return e.jsxs("button",{type:"button",className:`${T.libraryCard} ${ie?T.libraryCardSelected:""}`.trim(),onClick:()=>_(z.id),"aria-pressed":ie,children:[e.jsx("span",{className:T.libraryCardIcon,"aria-hidden":"true",children:o}),e.jsxs("span",{className:T.libraryCardBody,children:[e.jsx("strong",{children:z.name}),e.jsx("span",{children:z.description})]}),z.lifecycleStatus==="retired"?e.jsx("span",{className:"tf-chip-warning",children:"Retired"}):null]},z.id)})})]});return H?qa.createPortal(e.jsx("div",{className:`${T.library} ${T.libraryExternal}`,"aria-label":`${t} list`,children:Y}),H):e.jsx("aside",{className:T.library,"aria-label":`${t} Library`,children:Y})}function nr({icon:t,title:n,description:i,revision:o,retired:f=!1,showActions:w,dirty:N,saving:x,onReset:k,onSave:$}){return e.jsxs("header",{className:T.editorHeader,children:[e.jsxs("div",{className:T.editorTitle,children:[e.jsx("span",{"aria-hidden":"true",children:t}),e.jsxs("div",{children:[e.jsxs("div",{className:T.editorTitleLine,children:[e.jsx("h2",{className:"tf-heading-page",children:n}),f?e.jsx("span",{className:"tf-chip-warning",children:"Retired"}):null,!f&&o?e.jsxs("span",{className:"tf-chip-accent",children:["Revision ",o]}):null]}),e.jsx("p",{className:"tf-text-secondary",children:i})]})]}),w?e.jsxs("div",{className:T.headerActions,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",disabled:!N||x,onClick:k,children:[e.jsx(nn,{size:14})," Reset"]}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",disabled:!N||x||f,onClick:$,children:[x?e.jsx(je,{size:14,className:T.spinner}):e.jsx(On,{size:14}),"Save"]})]}):null]})}function zn({type:t,message:n}){return e.jsxs("div",{className:t==="error"?T.feedbackError:T.feedbackSuccess,role:t==="error"?"alert":"status",children:[t==="error"?e.jsx(st,{size:15}):e.jsx(Cs,{size:15}),e.jsx("span",{children:n})]})}function ar(t,n){return new Map(n?t.map(i=>[i.path,i.message]):[])}function rr(t,n){const i=t.find(o=>n[o.path])?.path;i&&window.requestAnimationFrame(()=>n[i]?.focus())}function nt({id:t,message:n}){return n?e.jsx("small",{id:t,className:T.fieldError,children:n}):null}function ir({icon:t,title:n,description:i,actionLabel:o,onCreate:f}){return e.jsxs("div",{className:T.empty,children:[e.jsx("span",{className:T.emptyIcon,"aria-hidden":"true",children:t}),e.jsx("h3",{className:"tf-empty-title",children:n}),e.jsx("p",{className:"tf-empty-copy",children:i}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:f,children:[e.jsx(Pt,{size:15})," ",o]})]})}function or({title:t,message:n,entityLabel:i,saving:o,onConfirm:f,onCancel:w}){const N=a.useId(),x=a.useId(),k=a.useRef(null);return a.useEffect(()=>{const $=document.activeElement instanceof HTMLElement?document.activeElement:null;return k.current?.focus(),()=>{$?.isConnected&&$.focus()}},[]),e.jsxs("div",{className:T.confirmation,role:"alertdialog","aria-modal":"false","aria-labelledby":N,"aria-describedby":x,onKeyDown:$=>{$.key!=="Escape"||o||($.preventDefault(),w())},children:[e.jsxs("div",{children:[e.jsx("strong",{id:N,children:t}),e.jsx("span",{id:x,children:n})]}),e.jsxs("button",{type:"button",className:"tf-button-destructive tf-button-compact",disabled:o,onClick:f,"aria-label":`Confirm ${i} retirement`,children:[e.jsx(Zt,{size:14})," Retire ",i]}),e.jsxs("button",{ref:k,type:"button",className:"tf-button-ghost tf-button-compact",disabled:o,onClick:w,"aria-label":`Cancel ${i} retirement`,children:[e.jsx(yt,{size:14})," Cancel"]})]})}function lr({entityLabel:t,note:n,meta:i,children:o,metrics:f=[],revisions:w=[],lifecycleStatus:N,saving:x=!1,retireDescription:k,restoreDescription:$,onRetire:L,onRestore:K}){const I=!!(N&&k&&$&&L&&K);return e.jsxs("aside",{className:T.previewColumn,"aria-label":`Compiled ${t} preview`,children:[e.jsxs("div",{className:T.previewHeader,children:[e.jsxs("div",{children:[e.jsx("span",{className:"tf-label-micro",children:"Runtime preview"}),e.jsx("h3",{className:"tf-heading-section",children:"Compiled runtime preview"})]}),i]}),e.jsx("p",{className:T.previewNote,children:n}),o,f.length>0?e.jsx("div",{className:T.metrics,children:f.map(R=>e.jsxs("div",{children:[e.jsx("span",{children:R.label}),e.jsx("strong",{children:R.value})]},R.label))}):null,w.length>0?e.jsxs("details",{className:T.history,children:[e.jsxs("summary",{children:[e.jsx(Si,{size:12})," Revision history"]}),e.jsx("ol",{children:w.map(R=>e.jsxs("li",{children:[e.jsxs("strong",{children:["Revision ",R.revision]}),e.jsx("span",{children:new Date(R.createdAt).toLocaleString()}),e.jsx("code",{children:R.contentHash.slice(0,12)})]},R.revision))})]}):null,I?e.jsxs("div",{className:T.lifecycleAction,children:[e.jsxs("div",{children:[e.jsx("strong",{children:N==="retired"?`Restore ${t}`:`Retire ${t}`}),e.jsx("span",{children:N==="retired"?$:k})]}),N==="retired"?e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",disabled:x,onClick:K,children:[e.jsx(nn,{size:14})," Restore"]}):e.jsxs("button",{type:"button",className:"tf-button-destructive tf-button-compact",disabled:x,onClick:L,children:[e.jsx(Ci,{size:14})," Retire"]})]}):null]})}const al="_formSection_dyv9a_1",rl="_sectionHeader_dyv9a_9",il="_fieldGrid_dyv9a_13",ol="_configurationPreview_dyv9a_27",ll="_resourcesPreview_dyv9a_33",cl="_previewCode_dyv9a_49",ot={formSection:al,sectionHeader:rl,fieldGrid:il,configurationPreview:ol,resourcesPreview:ll,previewCode:cl},gs={name:"",shortDescription:"",purpose:"",responsibilities:"",expectedOutputs:"",workingGuidance:"",skillRefs:"",capabilityGroups:""};function es(t){return t.split(`
|
|
9
9
|
`).map(n=>n.trim()).filter(Boolean)}function dl(t){return{schemaVersion:1,name:t.name,shortDescription:t.shortDescription,purpose:t.purpose,responsibilities:es(t.responsibilities),expectedOutputs:es(t.expectedOutputs),...t.workingGuidance.trim()?{workingGuidance:t.workingGuidance}:{},recommendations:{skillRefs:es(t.skillRefs),capabilityGroups:es(t.capabilityGroups)}}}function vs(t){return{name:t.definition.name,shortDescription:t.definition.shortDescription,purpose:t.definition.purpose,responsibilities:t.definition.responsibilities.join(`
|
|
10
10
|
`),expectedOutputs:t.definition.expectedOutputs.join(`
|
|
11
11
|
`),workingGuidance:t.definition.workingGuidance||"",skillRefs:t.definition.recommendations.skillRefs.join(`
|
package/dist/ui/assets/{WorkflowManagerModule-DbfnHJ-f.js → WorkflowManagerModule-CuqRzMmM.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as e}from"./vendor-react-CKJs5o3c.js";import{a2 as ze,a3 as Me,a4 as Oe,a5 as He,a6 as Le,a7 as Fe,M as Be,t as $,a8 as Ue,a9 as Ge,aa as Je,T as Ye,ab as _e,ac as Ze}from"./index-CTsDBaef.js";import{w as J,az as le,ak as Qe,t as pe,Z as je,bj as Xe,bk as et,a6 as tt,bl as st,bm as nt,a7 as rt,a as at,x as lt,v as it,A as ot,r as ct}from"./vendor-icons-Bsq-mcEn.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const dt="_root_1bn9e_1",ut="_main_1bn9e_13",ft="_trayOpen_1bn9e_21",mt="_libraryHeader_1bn9e_25",pt="_libraryTitle_1bn9e_34",bt="_libraryContent_1bn9e_41",ht="_libraryList_1bn9e_48",wt="_libraryItem_1bn9e_54",xt="_libraryItemSelected_1bn9e_75",yt="_libraryItemCopy_1bn9e_80",gt="_libraryItemName_1bn9e_84",_t="_libraryItemMeta_1bn9e_94",jt="_libraryBadges_1bn9e_101",Nt="_statusRow_1bn9e_102",vt="_content_1bn9e_109",kt="_visuallyHidden_1bn9e_115",St="_pageHeader_1bn9e_127",Ct="_pageHeading_1bn9e_136",Dt="_detailHeader_1bn9e_144",Et="_metadataEditor_1bn9e_148",Wt="_titleRow_1bn9e_154",It="_editor_1bn9e_169",Tt="_stickyToolbar_1bn9e_173",Kt="_toolbarGroup_1bn9e_188",Rt="_versionSelect_1bn9e_194",$t="_description_1bn9e_211",qt="_metrics_1bn9e_217",Vt="_metric_1bn9e_217",At="_section_1bn9e_249",Pt="_sectionHeader_1bn9e_253",zt="_stepToolbar_1bn9e_254",Mt="_stepActions_1bn9e_255",Ot="_stepList_1bn9e_266",Ht="_stepEditor_1bn9e_273",Lt="_stepToolbarExpanded_1bn9e_285",Ft="_stepExpandButton_1bn9e_289",Bt="_stepSummary_1bn9e_311",Ut="_stepFields_1bn9e_328",Gt="_fullField_1bn9e_335",Jt="_stepToggles_1bn9e_337",Yt="_requiredToggle_1bn9e_345",Zt="_stepsEmpty_1bn9e_356",Qt="_stepNumber_1bn9e_376",Xt="_emptyState_1bn9e_382",es="_loadingState_1bn9e_383",ts="_emptyStateInner_1bn9e_391",ss="_errorBanner_1bn9e_399",ns="_errorMessage_1bn9e_407",s={root:dt,main:ut,trayOpen:ft,libraryHeader:mt,libraryTitle:pt,libraryContent:bt,libraryList:ht,libraryItem:wt,libraryItemSelected:xt,libraryItemCopy:yt,libraryItemName:gt,libraryItemMeta:_t,libraryBadges:jt,statusRow:Nt,content:vt,visuallyHidden:kt,pageHeader:St,pageHeading:Ct,detailHeader:Dt,metadataEditor:Et,titleRow:Wt,editor:It,stickyToolbar:Tt,toolbarGroup:Kt,versionSelect:Rt,description:$t,metrics:qt,metric:Vt,section:At,sectionHeader:Pt,stepToolbar:zt,stepActions:Mt,stepList:Ot,stepEditor:Ht,stepToolbarExpanded:Lt,stepExpandButton:Ft,stepSummary:Bt,stepFields:Ut,fullField:Gt,stepToggles:Jt,requiredToggle:Yt,stepsEmpty:Zt,stepNumber:Qt,emptyState:Xt,loadingState:es,emptyStateInner:ts,errorBanner:ss,errorMessage:ns};function rs(c){const[_,k]=n.useState([]),[u,w]=n.useState(""),[E,g]=n.useState(null),[q,i]=n.useState(!0),[O,H]=n.useState(!1),[Y,L]=n.useState(!1),[Z,F]=n.useState(!1),[B,Q]=n.useState(!1),[ie,X]=n.useState(!1),[oe,ce]=n.useState(0),[de,x]=n.useState(null),m=n.useRef(0),p=n.useRef(c);p.current=c;const y=n.useCallback(async()=>{const r=++m.current;i(!0),x(null);try{const o=await ze();if(r!==m.current)return;k(o),w(f=>f&&o.some(({template:C})=>C.id===f)?f:o[0]?.template.id||"")}catch(o){if(r!==m.current)return;x(String(o?.message||o||"Unable to load workflows."))}finally{r===m.current&&i(!1)}},[c]);n.useEffect(()=>{k([]),w(""),g(null),y()},[y,c]),n.useEffect(()=>{let r=!1;if(!u){g(null),H(!1);return}return H(!0),x(null),Me(u).then(o=>{r||g(o)}).catch(o=>{r||(g(null),x(String(o?.message||o||"Unable to load workflow.")))}).finally(()=>{r||H(!1)}),()=>{r=!0}},[oe,u]);const S=n.useCallback(()=>{if(u&&!E){ce(r=>r+1);return}y()},[y,E,u]),j=n.useCallback(async r=>{const o=c;L(!0),x(null);try{const f=await Oe(r);return p.current!==o||(g(f),w(f.template.id),await y(),p.current===o&&w(f.template.id)),!0}catch(f){return p.current!==o||x(String(f?.message||f||"Unable to create workflow.")),!1}finally{L(!1)}},[y,c]),V=n.useCallback(async r=>{if(!u)return!1;const o=c,f=u;F(!0),x(null);try{const C=await He(f,{name:r.name,description:r.description,steps:r.steps});return p.current!==o||(g(C),await y(),p.current===o&&w(f)),!0}catch(C){return p.current!==o||x(String(C?.message||C||"Unable to save workflow draft.")),!1}finally{F(!1)}},[y,u,c]),T=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;Q(!0),x(null);try{const f=await Le(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to publish workflow.")),!1}finally{Q(!1)}},[y,u,c]),A=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;X(!0),x(null);try{const f=await Fe(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to create workflow draft.")),!1}finally{X(!1)}},[y,u,c]);return{workflows:_,selectedWorkflowId:u,selectedWorkflow:E,loadingLibrary:q,loadingDetails:O,creatingWorkflow:Y,savingWorkflow:Z,publishingWorkflow:B,creatingDraft:ie,error:de,setSelectedWorkflowId:w,refreshLibrary:y,retry:S,createWorkflow:j,saveDraft:V,publishDraft:T,createNextDraft:A,clearError:()=>x(null)}}const as="_title_lvjgs_1",ls="_message_lvjgs_7",is="_actions_lvjgs_13",be={title:as,message:ls,actions:is};function os({isOpen:c,workflowName:_,versionNumber:k,busy:u,onCancel:w,onPublish:E,theme:g}){return e.jsx(Be,{isOpen:c,onClose:w,title:e.jsxs("span",{className:be.title,children:[e.jsx(le,{size:18})," Publish Workflow"]}),size:"sm",closeOnOverlayClick:!1,closeDisabled:u,theme:g,footer:e.jsxs("div",{className:be.actions,children:[e.jsx("button",{type:"button",className:"tf-button-secondary",onClick:w,disabled:u,"data-modal-initial-focus":!0,children:"Cancel"}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:E,disabled:u,children:[u?e.jsx(J,{size:15,className:$.spinner}):e.jsx(le,{size:15}),"Publish Version ",k]})]}),children:e.jsxs("p",{className:be.message,children:["Publish ",e.jsx("strong",{children:_})," as Version ",k,"? Published versions are immutable. Future changes require a new draft."]})})}const re="draft";function cs(c){return c.draftVersionId&&c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber} published`:c.draftVersionId?"Unpublished":c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber}`:"No version"}function ds(c){if(!c)return"Not published";const _=new Date(c);return Number.isNaN(_.getTime())?"Not published":_.toLocaleDateString()}function ae(c,_,k){return JSON.stringify({name:c,description:_,steps:k.map(({clientKey:u,...w})=>w)})}function ws({workspaceId:c,libraryTrayOpen:_=!0,onCloseLibraryTray:k,assigneeOptions:u=[],theme:w,onUnsavedChangesChange:E}){const{workflows:g,selectedWorkflowId:q,selectedWorkflow:i,loadingLibrary:O,loadingDetails:H,creatingWorkflow:Y,savingWorkflow:L,publishingWorkflow:Z,creatingDraft:F,error:B,setSelectedWorkflowId:Q,retry:ie,createWorkflow:X,saveDraft:oe,publishDraft:ce,createNextDraft:de,clearError:x}=rs(c),[m,p]=n.useState(!1),[y,S]=n.useState(!1),[j,V]=n.useState(""),[T,A]=n.useState(""),[r,o]=n.useState([]),[f,C]=n.useState(""),[P,ee]=n.useState(!1),[te,U]=n.useState(""),[ue,W]=n.useState(new Set),[he,fe]=n.useState(null),[Ne,z]=n.useState(!1),me=n.useRef(null),se=n.useRef(new Map),K=n.useRef(null),D=n.useMemo(()=>i?te===re&&i.draft?i.draft:i.publishedVersions.find(({version:a})=>a.id===te)||i.draft||i.publishedVersions[0]||null:null,[te,i]),we=D?.version.status==="draft"?re:D?.version.id||"",ve=n.useMemo(()=>ae(j,T,r),[T,j,r]),N=m||D?.version.status==="draft",I=N&&ve!==f,b=Y||L||Z||F,ke=(i?.publishedVersions[0]?.version.versionNumber||0)+1,xe=n.useMemo(()=>u.filter(({kind:t,archivedAt:a})=>t!=="unassigned"&&!a),[u]),Se=n.useMemo(()=>Ue(xe),[xe]);n.useEffect(()=>{p(!1),S(!1),U(""),W(new Set),z(!1),K.current=null},[c]),n.useEffect(()=>{if(!i||m||!D)return;const t=D.version.name||i.template.name,a=D.version.description??i.template.description??"",d=D.steps.map(h=>({...h,clientKey:h.id}));V(t),A(a),o(d),C(ae(t,a,d));const l=K.current;S(!1),l?(W(new Set(d.filter((h,v)=>l.has(v)).map(({clientKey:h})=>h))),K.current=null):W(new Set),ee(!1)},[m,D,i]),n.useEffect(()=>{if(!I)return;const t=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",t),()=>window.removeEventListener("beforeunload",t)},[I]),n.useEffect(()=>(E?.(I),()=>E?.(!1)),[I,E]);const ne=t=>{if(!I){t();return}fe(()=>t)},Ce=()=>{const t=he;fe(null),t?.()},ye=()=>{ne(()=>{x();const t=[];p(!0),S(!0),V(""),A(""),o(t),C(ae("","",t)),W(new Set),ee(!1),window.setTimeout(()=>me.current?.focus(),0)})},De=()=>{ne(()=>{if(x(),p(!1),S(!1),i){const t=i.draft?.version.name||i.template.name,a=i.draft?.version.description??i.publishedVersions[0]?.version.description??i.template.description??"",d=(i.draft?.steps||i.publishedVersions[0]?.steps||[]).map(l=>({...l,clientKey:l.id}));V(t),A(a),o(d),C(ae(t,a,d))}})},Ee=()=>{const t=`new-step-${Date.now()}-${r.length}`;o(a=>[...a,{id:t,clientKey:t,workflowVersionId:i?.draft?.version.id||"",position:a.length,name:"",instructions:"",ownerType:null,ownerId:null,expectedArtifact:null,requiresCommentEvidence:!1,isRequired:!0}]),W(a=>new Set(a).add(t)),window.setTimeout(()=>se.current.get(t)?.focus(),0)},M=(t,a)=>{o(d=>d.map(l=>l.clientKey===t?{...l,...a}:l))},ge=(t,a)=>{const d=t+a;d<0||d>=r.length||o(l=>{const h=[...l];return[h[t],h[d]]=[h[d],h[t]],h.map((v,R)=>({...v,position:R}))})},We=()=>r.map(t=>{const{clientKey:a,id:d,workflowVersionId:l,position:h,...v}=t;return{...v,name:t.name.trim(),instructions:t.instructions,ownerType:t.ownerType??null,ownerId:t.ownerId??null,expectedArtifact:t.expectedArtifact??null,requiresCommentEvidence:t.requiresCommentEvidence===!0,isRequired:t.isRequired}}),Ie=async()=>{if(ee(!0),!j.trim()){S(!0),window.setTimeout(()=>me.current?.focus(),0);return}const t=r.find(l=>!l.name.trim());if(t){W(l=>new Set(l).add(t.clientKey)),window.setTimeout(()=>se.current.get(t.clientKey)?.focus(),0);return}const a={name:j.trim(),description:T.trim(),steps:We()};K.current=new Set(r.map((l,h)=>ue.has(l.clientKey)?h:-1).filter(l=>l>=0)),(m?await X(a):await oe(a))?(p(!1),ee(!1)):K.current=null},Te=t=>{W(a=>{const d=new Set(a);return d.has(t)?d.delete(t):d.add(t),d})},Ke=t=>{t!==we&&ne(()=>{S(!1),U(t)})},Re=async()=>{K.current=new Set(r.map((a,d)=>ue.has(a.clientKey)?d:-1).filter(a=>a>=0)),await ce()||(K.current=null),z(!1)},$e=async()=>{const t=te;U(re),await de()||U(t)},qe=t=>{t===q&&!m||ne(()=>{p(!1),S(!1),U(""),z(!1),Q(t)})},Ve=e.jsxs("aside",{className:`${$.docTrayPanel} ${_?$.docTrayPanelOpen:""}`.trim(),"aria-hidden":!_,children:[e.jsxs("div",{className:s.libraryHeader,children:[e.jsxs("span",{className:`${s.libraryTitle} tf-label-micro`,children:[e.jsx(le,{size:14})," Workflow Library"]}),O?e.jsx(J,{size:14,className:$.spinner}):null,k?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:k,title:"Collapse workflow library","aria-label":"Collapse workflow library",children:e.jsx(Qe,{size:16})}):null]}),e.jsx("div",{className:`${s.libraryContent} tf-scrollbar tf-tray-scroll-viewport`,children:g.length>0?e.jsx("div",{className:s.libraryList,children:g.map(t=>e.jsxs("button",{type:"button",className:`${s.libraryItem} ${t.template.id===q&&!m?s.libraryItemSelected:""}`.trim(),disabled:b,onClick:()=>qe(t.template.id),"aria-pressed":t.template.id===q&&!m,children:[e.jsxs("span",{className:s.libraryItemCopy,children:[e.jsx("span",{className:s.libraryItemName,children:t.template.name}),e.jsx("span",{className:s.libraryItemMeta,children:cs(t)})]}),e.jsxs("span",{className:s.libraryBadges,children:[t.draftVersionId?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,t.latestPublishedVersion?e.jsx("span",{className:"tf-chip-success",children:"Published"}):null]})]},t.template.id))}):O?null:e.jsx("p",{className:"tf-text-helper",children:"No workflows configured yet."})})]}),Ae=m||!!i;return e.jsxs("div",{className:`${s.root} ${_?s.trayOpen:""}`.trim(),children:[Ve,e.jsx("main",{className:`${s.main} tf-scrollbar`,children:e.jsxs("div",{className:s.content,children:[e.jsxs("header",{className:s.pageHeader,children:[e.jsxs("div",{className:s.pageHeading,children:[e.jsx("h2",{className:"tf-heading-section",children:"Workflow Manager"}),e.jsx("p",{className:"tf-text-helper",children:"Design reusable workflows for Taskforce agents."})]}),e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:ye,disabled:b,children:[e.jsx(pe,{size:15})," New Workflow"]})]}),B?e.jsxs("div",{className:`${s.errorBanner} tf-surface-inset tf-text-error`,role:"alert",children:[e.jsxs("span",{className:s.errorMessage,children:[e.jsx(je,{size:14})," ",B]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:ie,children:"Retry"})]}):null,H||O&&!i&&!m?e.jsx("div",{className:s.loadingState,"aria-live":"polite",children:e.jsx(J,{size:20,className:$.spinner})}):B&&q&&!i&&!m?e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(je,{size:24}),e.jsx("h3",{className:"tf-heading-card",children:"Workflow details unavailable"}),e.jsx("p",{className:"tf-text-helper",children:"Retry the request to load this workflow."})]})}):Ae?e.jsxs("div",{className:s.editor,children:[e.jsxs("div",{className:s.stickyToolbar,role:"toolbar","aria-label":N?"Workflow draft actions":"Workflow version actions",children:[N?e.jsxs("div",{className:s.toolbarGroup,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:Ee,disabled:b,children:[e.jsx(pe,{size:14})," Add Step"]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set(r.map(({clientKey:t})=>t))),disabled:r.length===0,title:"Expand all steps","aria-label":"Expand all steps",children:e.jsx(Xe,{size:15})}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set),disabled:r.length===0,title:"Collapse all steps","aria-label":"Collapse all steps",children:e.jsx(et,{size:15})})]}):e.jsx("span",{}),e.jsxs("div",{className:s.toolbarGroup,children:[!m&&i?e.jsxs("select",{className:`${s.versionSelect} tf-field-shell`,"aria-label":"Workflow version",value:we,onChange:t=>Ke(t.target.value),disabled:b,children:[i.draft?e.jsx("option",{value:re,children:"Draft"}):null,i.publishedVersions.map(({version:t})=>e.jsxs("option",{value:t.id,children:["Version ",t.versionNumber]},t.id))]}):null,m?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,m?e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:De,disabled:b,children:"Cancel"}):null,N?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:s.visuallyHidden,role:"status","aria-live":"polite",children:I?"Workflow has unsaved changes.":"Workflow draft is saved."}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Ie()},disabled:!I||b,children:[Y||L?e.jsx(J,{size:15,className:$.spinner}):e.jsx(tt,{size:15})," Save Draft"]}),m?null:e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>z(!0),disabled:I||r.length===0||b,title:I?"Save the draft before publishing.":r.length===0?"Add at least one step before publishing.":"Publish this workflow version",children:[e.jsx(st,{size:15})," Publish"]})]}):i?.draft?null:e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{$e()},disabled:b,children:[F?e.jsx(J,{size:15,className:$.spinner}):e.jsx(nt,{size:15})," Create New Draft"]})]})]}),e.jsx("div",{className:s.detailHeader,children:e.jsx("div",{className:s.metadataEditor,children:y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-name",children:"Workflow name"}),e.jsx("input",{id:"workflow-draft-name",ref:me,className:"tf-field-shell",value:j,onChange:t=>V(t.target.value),"aria-invalid":P&&!j.trim(),"aria-describedby":P&&!j.trim()?"workflow-draft-name-error":void 0,readOnly:b}),P&&!j.trim()?e.jsx("span",{id:"workflow-draft-name-error",className:"tf-text-error",children:"Workflow name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-description",children:"Description"}),e.jsx("textarea",{id:"workflow-draft-description",className:"tf-field-shell",rows:3,value:T,onChange:t=>A(t.target.value),readOnly:b})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.titleRow,children:[e.jsx("h3",{className:"tf-heading-card",children:j||"Untitled workflow"}),e.jsx("div",{className:s.statusRow,children:N&&!m?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>S(!0),title:"Edit workflow details","aria-label":"Edit workflow details",children:e.jsx(rt,{size:14})}):null})]}),T?e.jsx("p",{className:`${s.description} tf-text-body`,children:T}):null]})})}),!m&&i?e.jsxs("div",{className:s.metrics,children:[e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Current version"}),e.jsx("strong",{children:D?.version.status==="draft"?"Draft":`Version ${D?.version.versionNumber||1}`})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Steps"}),e.jsx("strong",{children:r.length})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Last published"}),e.jsx("strong",{children:ds(i.publishedVersions[0]?.version.publishedAt)})]})]}):null,e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.sectionHeader,children:e.jsx("h4",{className:"tf-heading-card",children:"Workflow Steps"})}),r.length>0?e.jsx("div",{className:s.stepList,children:r.map((t,a)=>{const d=ue.has(t.clientKey);return e.jsxs("div",{className:s.stepEditor,children:[e.jsxs("div",{className:`${s.stepToolbar} ${d?s.stepToolbarExpanded:""}`.trim(),children:[e.jsxs("button",{type:"button",className:s.stepExpandButton,onClick:()=>Te(t.clientKey),"aria-expanded":d,"aria-controls":`workflow-step-fields-${t.clientKey}`,children:[d?e.jsx(at,{size:15}):e.jsx(lt,{size:15}),e.jsx("span",{className:s.stepNumber,children:a+1}),e.jsx("strong",{children:t.name.trim()||"Untitled step"})]}),e.jsxs("div",{className:s.stepSummary,children:[e.jsx("span",{children:Ge(t.ownerId,u)}),e.jsx("span",{className:t.isRequired?"tf-chip-neutral":"tf-chip-warning",children:t.isRequired?"Required":"Optional"})]}),N?e.jsxs("div",{className:s.stepActions,children:[e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step up","aria-label":`Move step ${a+1} up`,onClick:()=>ge(a,-1),disabled:b||a===0,children:e.jsx(it,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step down","aria-label":`Move step ${a+1} down`,onClick:()=>ge(a,1),disabled:b||a===r.length-1,children:e.jsx(ot,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Remove step","aria-label":`Remove step ${a+1}`,onClick:()=>o(l=>l.filter(({clientKey:h})=>h!==t.clientKey)),disabled:b,children:e.jsx(ct,{size:14})})]}):null]}),d?e.jsxs("div",{id:`workflow-step-fields-${t.clientKey}`,className:s.stepFields,children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-name-${t.clientKey}`,children:"Step name"}),e.jsx("input",{id:`workflow-step-name-${t.clientKey}`,ref:l=>{l?se.current.set(t.clientKey,l):se.current.delete(t.clientKey)},className:"tf-field-shell",value:t.name,onChange:l=>M(t.clientKey,{name:l.target.value}),"aria-invalid":P&&!t.name.trim(),"aria-describedby":P&&!t.name.trim()?`workflow-step-name-error-${t.clientKey}`:void 0,disabled:!N,readOnly:b}),P&&!t.name.trim()?e.jsx("span",{id:`workflow-step-name-error-${t.clientKey}`,className:"tf-text-error",children:"Step name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",id:`workflow-step-owner-label-${t.clientKey}`,children:"Owner"}),(()=>{const l=Je(Se,t.ownerId),h=l.find(({value:v})=>String(v)===String(t.ownerId||"unassigned"))||l[0];return e.jsx(Ye,{value:t.ownerId||"unassigned",options:l,disabled:!N||b,ariaLabelledBy:`workflow-step-owner-label-${t.clientKey}`,portalPanel:!0,panelMinWidth:280,panelAlign:"start",searchable:!0,searchPlaceholder:"Search owners...",noResultsText:"No owners found.",triggerContent:h?e.jsx(_e,{option:h}):void 0,renderOptionContent:v=>{const R=l.find(({value:G})=>String(G)===String(v.value));return R?e.jsx(_e,{option:R}):v.label},onChange:v=>{const R=String(v),G=l.find(({value:Pe})=>String(Pe)===R);M(t.clientKey,{ownerId:G?.kind==="unassigned"?null:R,ownerType:G?.kind==="agent"?"agent":G?.kind==="member"?"user":null})}})})()]}),e.jsxs("div",{className:`${s.fullField} tf-field-stack`,children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-instructions-${t.clientKey}`,children:"Instructions"}),e.jsx("textarea",{id:`workflow-step-instructions-${t.clientKey}`,className:"tf-field-shell",rows:4,value:t.instructions,onChange:l=>M(t.clientKey,{instructions:l.target.value}),placeholder:"Describe the work to complete in this step.",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-artifact-${t.clientKey}`,children:"Output label"}),e.jsx("input",{id:`workflow-step-artifact-${t.clientKey}`,className:"tf-field-shell",value:t.expectedArtifact||"",onChange:l=>M(t.clientKey,{expectedArtifact:l.target.value||null}),placeholder:"Optional output description",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:s.stepToggles,children:[e.jsxs("label",{className:s.requiredToggle,title:"Requires the step owner to add a task comment before completing this step.",children:[e.jsx("input",{type:"checkbox",checked:t.requiresCommentEvidence===!0,onChange:l=>M(t.clientKey,{requiresCommentEvidence:l.target.checked}),disabled:!N||b}),"Require task comment"]}),e.jsxs("label",{className:s.requiredToggle,title:"Marks this step as mandatory when execution policy is enforced.",children:[e.jsx("input",{type:"checkbox",checked:t.isRequired,onChange:l=>M(t.clientKey,{isRequired:l.target.checked}),disabled:!N||b}),"Required step"]})]})]}):null]},t.clientKey)})}):e.jsx("div",{className:s.stepsEmpty,children:e.jsx("p",{className:"tf-text-helper",children:"No steps have been added yet."})})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(le,{size:30}),e.jsx("h3",{className:"tf-heading-card",children:"No workflows yet"}),e.jsx("p",{className:"tf-text-helper",children:"Create a workflow to begin defining a reusable process."}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:ye,children:[e.jsx(pe,{size:15})," New Workflow"]})]})})]})}),e.jsx(Ze,{isOpen:!!he,onKeepEditing:()=>fe(null),onDiscard:Ce,theme:w}),e.jsx(os,{isOpen:Ne,workflowName:j,versionNumber:ke,busy:Z,onCancel:()=>z(!1),onPublish:()=>{Re()},theme:w})]})}export{ws as WorkflowManagerModule};
|
|
1
|
+
import{r as n,j as e}from"./vendor-react-CKJs5o3c.js";import{a2 as ze,a3 as Me,a4 as Oe,a5 as He,a6 as Le,a7 as Fe,M as Be,t as $,a8 as Ue,a9 as Ge,aa as Je,T as Ye,ab as _e,ac as Ze}from"./index-DSQINwt9.js";import{w as J,az as le,ak as Qe,t as pe,Z as je,bj as Xe,bk as et,a6 as tt,bl as st,bm as nt,a7 as rt,a as at,x as lt,v as it,A as ot,r as ct}from"./vendor-icons-Bsq-mcEn.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const dt="_root_1bn9e_1",ut="_main_1bn9e_13",ft="_trayOpen_1bn9e_21",mt="_libraryHeader_1bn9e_25",pt="_libraryTitle_1bn9e_34",bt="_libraryContent_1bn9e_41",ht="_libraryList_1bn9e_48",wt="_libraryItem_1bn9e_54",xt="_libraryItemSelected_1bn9e_75",yt="_libraryItemCopy_1bn9e_80",gt="_libraryItemName_1bn9e_84",_t="_libraryItemMeta_1bn9e_94",jt="_libraryBadges_1bn9e_101",Nt="_statusRow_1bn9e_102",vt="_content_1bn9e_109",kt="_visuallyHidden_1bn9e_115",St="_pageHeader_1bn9e_127",Ct="_pageHeading_1bn9e_136",Dt="_detailHeader_1bn9e_144",Et="_metadataEditor_1bn9e_148",Wt="_titleRow_1bn9e_154",It="_editor_1bn9e_169",Tt="_stickyToolbar_1bn9e_173",Kt="_toolbarGroup_1bn9e_188",Rt="_versionSelect_1bn9e_194",$t="_description_1bn9e_211",qt="_metrics_1bn9e_217",Vt="_metric_1bn9e_217",At="_section_1bn9e_249",Pt="_sectionHeader_1bn9e_253",zt="_stepToolbar_1bn9e_254",Mt="_stepActions_1bn9e_255",Ot="_stepList_1bn9e_266",Ht="_stepEditor_1bn9e_273",Lt="_stepToolbarExpanded_1bn9e_285",Ft="_stepExpandButton_1bn9e_289",Bt="_stepSummary_1bn9e_311",Ut="_stepFields_1bn9e_328",Gt="_fullField_1bn9e_335",Jt="_stepToggles_1bn9e_337",Yt="_requiredToggle_1bn9e_345",Zt="_stepsEmpty_1bn9e_356",Qt="_stepNumber_1bn9e_376",Xt="_emptyState_1bn9e_382",es="_loadingState_1bn9e_383",ts="_emptyStateInner_1bn9e_391",ss="_errorBanner_1bn9e_399",ns="_errorMessage_1bn9e_407",s={root:dt,main:ut,trayOpen:ft,libraryHeader:mt,libraryTitle:pt,libraryContent:bt,libraryList:ht,libraryItem:wt,libraryItemSelected:xt,libraryItemCopy:yt,libraryItemName:gt,libraryItemMeta:_t,libraryBadges:jt,statusRow:Nt,content:vt,visuallyHidden:kt,pageHeader:St,pageHeading:Ct,detailHeader:Dt,metadataEditor:Et,titleRow:Wt,editor:It,stickyToolbar:Tt,toolbarGroup:Kt,versionSelect:Rt,description:$t,metrics:qt,metric:Vt,section:At,sectionHeader:Pt,stepToolbar:zt,stepActions:Mt,stepList:Ot,stepEditor:Ht,stepToolbarExpanded:Lt,stepExpandButton:Ft,stepSummary:Bt,stepFields:Ut,fullField:Gt,stepToggles:Jt,requiredToggle:Yt,stepsEmpty:Zt,stepNumber:Qt,emptyState:Xt,loadingState:es,emptyStateInner:ts,errorBanner:ss,errorMessage:ns};function rs(c){const[_,k]=n.useState([]),[u,w]=n.useState(""),[E,g]=n.useState(null),[q,i]=n.useState(!0),[O,H]=n.useState(!1),[Y,L]=n.useState(!1),[Z,F]=n.useState(!1),[B,Q]=n.useState(!1),[ie,X]=n.useState(!1),[oe,ce]=n.useState(0),[de,x]=n.useState(null),m=n.useRef(0),p=n.useRef(c);p.current=c;const y=n.useCallback(async()=>{const r=++m.current;i(!0),x(null);try{const o=await ze();if(r!==m.current)return;k(o),w(f=>f&&o.some(({template:C})=>C.id===f)?f:o[0]?.template.id||"")}catch(o){if(r!==m.current)return;x(String(o?.message||o||"Unable to load workflows."))}finally{r===m.current&&i(!1)}},[c]);n.useEffect(()=>{k([]),w(""),g(null),y()},[y,c]),n.useEffect(()=>{let r=!1;if(!u){g(null),H(!1);return}return H(!0),x(null),Me(u).then(o=>{r||g(o)}).catch(o=>{r||(g(null),x(String(o?.message||o||"Unable to load workflow.")))}).finally(()=>{r||H(!1)}),()=>{r=!0}},[oe,u]);const S=n.useCallback(()=>{if(u&&!E){ce(r=>r+1);return}y()},[y,E,u]),j=n.useCallback(async r=>{const o=c;L(!0),x(null);try{const f=await Oe(r);return p.current!==o||(g(f),w(f.template.id),await y(),p.current===o&&w(f.template.id)),!0}catch(f){return p.current!==o||x(String(f?.message||f||"Unable to create workflow.")),!1}finally{L(!1)}},[y,c]),V=n.useCallback(async r=>{if(!u)return!1;const o=c,f=u;F(!0),x(null);try{const C=await He(f,{name:r.name,description:r.description,steps:r.steps});return p.current!==o||(g(C),await y(),p.current===o&&w(f)),!0}catch(C){return p.current!==o||x(String(C?.message||C||"Unable to save workflow draft.")),!1}finally{F(!1)}},[y,u,c]),T=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;Q(!0),x(null);try{const f=await Le(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to publish workflow.")),!1}finally{Q(!1)}},[y,u,c]),A=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;X(!0),x(null);try{const f=await Fe(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to create workflow draft.")),!1}finally{X(!1)}},[y,u,c]);return{workflows:_,selectedWorkflowId:u,selectedWorkflow:E,loadingLibrary:q,loadingDetails:O,creatingWorkflow:Y,savingWorkflow:Z,publishingWorkflow:B,creatingDraft:ie,error:de,setSelectedWorkflowId:w,refreshLibrary:y,retry:S,createWorkflow:j,saveDraft:V,publishDraft:T,createNextDraft:A,clearError:()=>x(null)}}const as="_title_lvjgs_1",ls="_message_lvjgs_7",is="_actions_lvjgs_13",be={title:as,message:ls,actions:is};function os({isOpen:c,workflowName:_,versionNumber:k,busy:u,onCancel:w,onPublish:E,theme:g}){return e.jsx(Be,{isOpen:c,onClose:w,title:e.jsxs("span",{className:be.title,children:[e.jsx(le,{size:18})," Publish Workflow"]}),size:"sm",closeOnOverlayClick:!1,closeDisabled:u,theme:g,footer:e.jsxs("div",{className:be.actions,children:[e.jsx("button",{type:"button",className:"tf-button-secondary",onClick:w,disabled:u,"data-modal-initial-focus":!0,children:"Cancel"}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:E,disabled:u,children:[u?e.jsx(J,{size:15,className:$.spinner}):e.jsx(le,{size:15}),"Publish Version ",k]})]}),children:e.jsxs("p",{className:be.message,children:["Publish ",e.jsx("strong",{children:_})," as Version ",k,"? Published versions are immutable. Future changes require a new draft."]})})}const re="draft";function cs(c){return c.draftVersionId&&c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber} published`:c.draftVersionId?"Unpublished":c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber}`:"No version"}function ds(c){if(!c)return"Not published";const _=new Date(c);return Number.isNaN(_.getTime())?"Not published":_.toLocaleDateString()}function ae(c,_,k){return JSON.stringify({name:c,description:_,steps:k.map(({clientKey:u,...w})=>w)})}function ws({workspaceId:c,libraryTrayOpen:_=!0,onCloseLibraryTray:k,assigneeOptions:u=[],theme:w,onUnsavedChangesChange:E}){const{workflows:g,selectedWorkflowId:q,selectedWorkflow:i,loadingLibrary:O,loadingDetails:H,creatingWorkflow:Y,savingWorkflow:L,publishingWorkflow:Z,creatingDraft:F,error:B,setSelectedWorkflowId:Q,retry:ie,createWorkflow:X,saveDraft:oe,publishDraft:ce,createNextDraft:de,clearError:x}=rs(c),[m,p]=n.useState(!1),[y,S]=n.useState(!1),[j,V]=n.useState(""),[T,A]=n.useState(""),[r,o]=n.useState([]),[f,C]=n.useState(""),[P,ee]=n.useState(!1),[te,U]=n.useState(""),[ue,W]=n.useState(new Set),[he,fe]=n.useState(null),[Ne,z]=n.useState(!1),me=n.useRef(null),se=n.useRef(new Map),K=n.useRef(null),D=n.useMemo(()=>i?te===re&&i.draft?i.draft:i.publishedVersions.find(({version:a})=>a.id===te)||i.draft||i.publishedVersions[0]||null:null,[te,i]),we=D?.version.status==="draft"?re:D?.version.id||"",ve=n.useMemo(()=>ae(j,T,r),[T,j,r]),N=m||D?.version.status==="draft",I=N&&ve!==f,b=Y||L||Z||F,ke=(i?.publishedVersions[0]?.version.versionNumber||0)+1,xe=n.useMemo(()=>u.filter(({kind:t,archivedAt:a})=>t!=="unassigned"&&!a),[u]),Se=n.useMemo(()=>Ue(xe),[xe]);n.useEffect(()=>{p(!1),S(!1),U(""),W(new Set),z(!1),K.current=null},[c]),n.useEffect(()=>{if(!i||m||!D)return;const t=D.version.name||i.template.name,a=D.version.description??i.template.description??"",d=D.steps.map(h=>({...h,clientKey:h.id}));V(t),A(a),o(d),C(ae(t,a,d));const l=K.current;S(!1),l?(W(new Set(d.filter((h,v)=>l.has(v)).map(({clientKey:h})=>h))),K.current=null):W(new Set),ee(!1)},[m,D,i]),n.useEffect(()=>{if(!I)return;const t=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",t),()=>window.removeEventListener("beforeunload",t)},[I]),n.useEffect(()=>(E?.(I),()=>E?.(!1)),[I,E]);const ne=t=>{if(!I){t();return}fe(()=>t)},Ce=()=>{const t=he;fe(null),t?.()},ye=()=>{ne(()=>{x();const t=[];p(!0),S(!0),V(""),A(""),o(t),C(ae("","",t)),W(new Set),ee(!1),window.setTimeout(()=>me.current?.focus(),0)})},De=()=>{ne(()=>{if(x(),p(!1),S(!1),i){const t=i.draft?.version.name||i.template.name,a=i.draft?.version.description??i.publishedVersions[0]?.version.description??i.template.description??"",d=(i.draft?.steps||i.publishedVersions[0]?.steps||[]).map(l=>({...l,clientKey:l.id}));V(t),A(a),o(d),C(ae(t,a,d))}})},Ee=()=>{const t=`new-step-${Date.now()}-${r.length}`;o(a=>[...a,{id:t,clientKey:t,workflowVersionId:i?.draft?.version.id||"",position:a.length,name:"",instructions:"",ownerType:null,ownerId:null,expectedArtifact:null,requiresCommentEvidence:!1,isRequired:!0}]),W(a=>new Set(a).add(t)),window.setTimeout(()=>se.current.get(t)?.focus(),0)},M=(t,a)=>{o(d=>d.map(l=>l.clientKey===t?{...l,...a}:l))},ge=(t,a)=>{const d=t+a;d<0||d>=r.length||o(l=>{const h=[...l];return[h[t],h[d]]=[h[d],h[t]],h.map((v,R)=>({...v,position:R}))})},We=()=>r.map(t=>{const{clientKey:a,id:d,workflowVersionId:l,position:h,...v}=t;return{...v,name:t.name.trim(),instructions:t.instructions,ownerType:t.ownerType??null,ownerId:t.ownerId??null,expectedArtifact:t.expectedArtifact??null,requiresCommentEvidence:t.requiresCommentEvidence===!0,isRequired:t.isRequired}}),Ie=async()=>{if(ee(!0),!j.trim()){S(!0),window.setTimeout(()=>me.current?.focus(),0);return}const t=r.find(l=>!l.name.trim());if(t){W(l=>new Set(l).add(t.clientKey)),window.setTimeout(()=>se.current.get(t.clientKey)?.focus(),0);return}const a={name:j.trim(),description:T.trim(),steps:We()};K.current=new Set(r.map((l,h)=>ue.has(l.clientKey)?h:-1).filter(l=>l>=0)),(m?await X(a):await oe(a))?(p(!1),ee(!1)):K.current=null},Te=t=>{W(a=>{const d=new Set(a);return d.has(t)?d.delete(t):d.add(t),d})},Ke=t=>{t!==we&&ne(()=>{S(!1),U(t)})},Re=async()=>{K.current=new Set(r.map((a,d)=>ue.has(a.clientKey)?d:-1).filter(a=>a>=0)),await ce()||(K.current=null),z(!1)},$e=async()=>{const t=te;U(re),await de()||U(t)},qe=t=>{t===q&&!m||ne(()=>{p(!1),S(!1),U(""),z(!1),Q(t)})},Ve=e.jsxs("aside",{className:`${$.docTrayPanel} ${_?$.docTrayPanelOpen:""}`.trim(),"aria-hidden":!_,children:[e.jsxs("div",{className:s.libraryHeader,children:[e.jsxs("span",{className:`${s.libraryTitle} tf-label-micro`,children:[e.jsx(le,{size:14})," Workflow Library"]}),O?e.jsx(J,{size:14,className:$.spinner}):null,k?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:k,title:"Collapse workflow library","aria-label":"Collapse workflow library",children:e.jsx(Qe,{size:16})}):null]}),e.jsx("div",{className:`${s.libraryContent} tf-scrollbar tf-tray-scroll-viewport`,children:g.length>0?e.jsx("div",{className:s.libraryList,children:g.map(t=>e.jsxs("button",{type:"button",className:`${s.libraryItem} ${t.template.id===q&&!m?s.libraryItemSelected:""}`.trim(),disabled:b,onClick:()=>qe(t.template.id),"aria-pressed":t.template.id===q&&!m,children:[e.jsxs("span",{className:s.libraryItemCopy,children:[e.jsx("span",{className:s.libraryItemName,children:t.template.name}),e.jsx("span",{className:s.libraryItemMeta,children:cs(t)})]}),e.jsxs("span",{className:s.libraryBadges,children:[t.draftVersionId?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,t.latestPublishedVersion?e.jsx("span",{className:"tf-chip-success",children:"Published"}):null]})]},t.template.id))}):O?null:e.jsx("p",{className:"tf-text-helper",children:"No workflows configured yet."})})]}),Ae=m||!!i;return e.jsxs("div",{className:`${s.root} ${_?s.trayOpen:""}`.trim(),children:[Ve,e.jsx("main",{className:`${s.main} tf-scrollbar`,children:e.jsxs("div",{className:s.content,children:[e.jsxs("header",{className:s.pageHeader,children:[e.jsxs("div",{className:s.pageHeading,children:[e.jsx("h2",{className:"tf-heading-section",children:"Workflow Manager"}),e.jsx("p",{className:"tf-text-helper",children:"Design reusable workflows for Taskforce agents."})]}),e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:ye,disabled:b,children:[e.jsx(pe,{size:15})," New Workflow"]})]}),B?e.jsxs("div",{className:`${s.errorBanner} tf-surface-inset tf-text-error`,role:"alert",children:[e.jsxs("span",{className:s.errorMessage,children:[e.jsx(je,{size:14})," ",B]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:ie,children:"Retry"})]}):null,H||O&&!i&&!m?e.jsx("div",{className:s.loadingState,"aria-live":"polite",children:e.jsx(J,{size:20,className:$.spinner})}):B&&q&&!i&&!m?e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(je,{size:24}),e.jsx("h3",{className:"tf-heading-card",children:"Workflow details unavailable"}),e.jsx("p",{className:"tf-text-helper",children:"Retry the request to load this workflow."})]})}):Ae?e.jsxs("div",{className:s.editor,children:[e.jsxs("div",{className:s.stickyToolbar,role:"toolbar","aria-label":N?"Workflow draft actions":"Workflow version actions",children:[N?e.jsxs("div",{className:s.toolbarGroup,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:Ee,disabled:b,children:[e.jsx(pe,{size:14})," Add Step"]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set(r.map(({clientKey:t})=>t))),disabled:r.length===0,title:"Expand all steps","aria-label":"Expand all steps",children:e.jsx(Xe,{size:15})}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set),disabled:r.length===0,title:"Collapse all steps","aria-label":"Collapse all steps",children:e.jsx(et,{size:15})})]}):e.jsx("span",{}),e.jsxs("div",{className:s.toolbarGroup,children:[!m&&i?e.jsxs("select",{className:`${s.versionSelect} tf-field-shell`,"aria-label":"Workflow version",value:we,onChange:t=>Ke(t.target.value),disabled:b,children:[i.draft?e.jsx("option",{value:re,children:"Draft"}):null,i.publishedVersions.map(({version:t})=>e.jsxs("option",{value:t.id,children:["Version ",t.versionNumber]},t.id))]}):null,m?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,m?e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:De,disabled:b,children:"Cancel"}):null,N?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:s.visuallyHidden,role:"status","aria-live":"polite",children:I?"Workflow has unsaved changes.":"Workflow draft is saved."}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Ie()},disabled:!I||b,children:[Y||L?e.jsx(J,{size:15,className:$.spinner}):e.jsx(tt,{size:15})," Save Draft"]}),m?null:e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>z(!0),disabled:I||r.length===0||b,title:I?"Save the draft before publishing.":r.length===0?"Add at least one step before publishing.":"Publish this workflow version",children:[e.jsx(st,{size:15})," Publish"]})]}):i?.draft?null:e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{$e()},disabled:b,children:[F?e.jsx(J,{size:15,className:$.spinner}):e.jsx(nt,{size:15})," Create New Draft"]})]})]}),e.jsx("div",{className:s.detailHeader,children:e.jsx("div",{className:s.metadataEditor,children:y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-name",children:"Workflow name"}),e.jsx("input",{id:"workflow-draft-name",ref:me,className:"tf-field-shell",value:j,onChange:t=>V(t.target.value),"aria-invalid":P&&!j.trim(),"aria-describedby":P&&!j.trim()?"workflow-draft-name-error":void 0,readOnly:b}),P&&!j.trim()?e.jsx("span",{id:"workflow-draft-name-error",className:"tf-text-error",children:"Workflow name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-description",children:"Description"}),e.jsx("textarea",{id:"workflow-draft-description",className:"tf-field-shell",rows:3,value:T,onChange:t=>A(t.target.value),readOnly:b})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.titleRow,children:[e.jsx("h3",{className:"tf-heading-card",children:j||"Untitled workflow"}),e.jsx("div",{className:s.statusRow,children:N&&!m?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>S(!0),title:"Edit workflow details","aria-label":"Edit workflow details",children:e.jsx(rt,{size:14})}):null})]}),T?e.jsx("p",{className:`${s.description} tf-text-body`,children:T}):null]})})}),!m&&i?e.jsxs("div",{className:s.metrics,children:[e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Current version"}),e.jsx("strong",{children:D?.version.status==="draft"?"Draft":`Version ${D?.version.versionNumber||1}`})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Steps"}),e.jsx("strong",{children:r.length})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Last published"}),e.jsx("strong",{children:ds(i.publishedVersions[0]?.version.publishedAt)})]})]}):null,e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.sectionHeader,children:e.jsx("h4",{className:"tf-heading-card",children:"Workflow Steps"})}),r.length>0?e.jsx("div",{className:s.stepList,children:r.map((t,a)=>{const d=ue.has(t.clientKey);return e.jsxs("div",{className:s.stepEditor,children:[e.jsxs("div",{className:`${s.stepToolbar} ${d?s.stepToolbarExpanded:""}`.trim(),children:[e.jsxs("button",{type:"button",className:s.stepExpandButton,onClick:()=>Te(t.clientKey),"aria-expanded":d,"aria-controls":`workflow-step-fields-${t.clientKey}`,children:[d?e.jsx(at,{size:15}):e.jsx(lt,{size:15}),e.jsx("span",{className:s.stepNumber,children:a+1}),e.jsx("strong",{children:t.name.trim()||"Untitled step"})]}),e.jsxs("div",{className:s.stepSummary,children:[e.jsx("span",{children:Ge(t.ownerId,u)}),e.jsx("span",{className:t.isRequired?"tf-chip-neutral":"tf-chip-warning",children:t.isRequired?"Required":"Optional"})]}),N?e.jsxs("div",{className:s.stepActions,children:[e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step up","aria-label":`Move step ${a+1} up`,onClick:()=>ge(a,-1),disabled:b||a===0,children:e.jsx(it,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step down","aria-label":`Move step ${a+1} down`,onClick:()=>ge(a,1),disabled:b||a===r.length-1,children:e.jsx(ot,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Remove step","aria-label":`Remove step ${a+1}`,onClick:()=>o(l=>l.filter(({clientKey:h})=>h!==t.clientKey)),disabled:b,children:e.jsx(ct,{size:14})})]}):null]}),d?e.jsxs("div",{id:`workflow-step-fields-${t.clientKey}`,className:s.stepFields,children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-name-${t.clientKey}`,children:"Step name"}),e.jsx("input",{id:`workflow-step-name-${t.clientKey}`,ref:l=>{l?se.current.set(t.clientKey,l):se.current.delete(t.clientKey)},className:"tf-field-shell",value:t.name,onChange:l=>M(t.clientKey,{name:l.target.value}),"aria-invalid":P&&!t.name.trim(),"aria-describedby":P&&!t.name.trim()?`workflow-step-name-error-${t.clientKey}`:void 0,disabled:!N,readOnly:b}),P&&!t.name.trim()?e.jsx("span",{id:`workflow-step-name-error-${t.clientKey}`,className:"tf-text-error",children:"Step name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",id:`workflow-step-owner-label-${t.clientKey}`,children:"Owner"}),(()=>{const l=Je(Se,t.ownerId),h=l.find(({value:v})=>String(v)===String(t.ownerId||"unassigned"))||l[0];return e.jsx(Ye,{value:t.ownerId||"unassigned",options:l,disabled:!N||b,ariaLabelledBy:`workflow-step-owner-label-${t.clientKey}`,portalPanel:!0,panelMinWidth:280,panelAlign:"start",searchable:!0,searchPlaceholder:"Search owners...",noResultsText:"No owners found.",triggerContent:h?e.jsx(_e,{option:h}):void 0,renderOptionContent:v=>{const R=l.find(({value:G})=>String(G)===String(v.value));return R?e.jsx(_e,{option:R}):v.label},onChange:v=>{const R=String(v),G=l.find(({value:Pe})=>String(Pe)===R);M(t.clientKey,{ownerId:G?.kind==="unassigned"?null:R,ownerType:G?.kind==="agent"?"agent":G?.kind==="member"?"user":null})}})})()]}),e.jsxs("div",{className:`${s.fullField} tf-field-stack`,children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-instructions-${t.clientKey}`,children:"Instructions"}),e.jsx("textarea",{id:`workflow-step-instructions-${t.clientKey}`,className:"tf-field-shell",rows:4,value:t.instructions,onChange:l=>M(t.clientKey,{instructions:l.target.value}),placeholder:"Describe the work to complete in this step.",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-artifact-${t.clientKey}`,children:"Output label"}),e.jsx("input",{id:`workflow-step-artifact-${t.clientKey}`,className:"tf-field-shell",value:t.expectedArtifact||"",onChange:l=>M(t.clientKey,{expectedArtifact:l.target.value||null}),placeholder:"Optional output description",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:s.stepToggles,children:[e.jsxs("label",{className:s.requiredToggle,title:"Requires the step owner to add a task comment before completing this step.",children:[e.jsx("input",{type:"checkbox",checked:t.requiresCommentEvidence===!0,onChange:l=>M(t.clientKey,{requiresCommentEvidence:l.target.checked}),disabled:!N||b}),"Require task comment"]}),e.jsxs("label",{className:s.requiredToggle,title:"Marks this step as mandatory when execution policy is enforced.",children:[e.jsx("input",{type:"checkbox",checked:t.isRequired,onChange:l=>M(t.clientKey,{isRequired:l.target.checked}),disabled:!N||b}),"Required step"]})]})]}):null]},t.clientKey)})}):e.jsx("div",{className:s.stepsEmpty,children:e.jsx("p",{className:"tf-text-helper",children:"No steps have been added yet."})})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(le,{size:30}),e.jsx("h3",{className:"tf-heading-card",children:"No workflows yet"}),e.jsx("p",{className:"tf-text-helper",children:"Create a workflow to begin defining a reusable process."}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:ye,children:[e.jsx(pe,{size:15})," New Workflow"]})]})})]})}),e.jsx(Ze,{isOpen:!!he,onKeepEditing:()=>fe(null),onDiscard:Ce,theme:w}),e.jsx(os,{isOpen:Ne,workflowName:j,versionNumber:ke,busy:Z,onCancel:()=>z(!1),onPublish:()=>{Re()},theme:w})]})}export{ws as WorkflowManagerModule};
|