@culvii/cli 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/{HelpView-E7HS4SVF.js → HelpView-NKJCCU5A.js} +1 -1
  2. package/dist/{chunk-IPETC2TK.js → chunk-D3YFBXU5.js} +1 -1
  3. package/dist/index.js +25 -27
  4. package/dist/lib/evaluator.js +2 -2
  5. package/dist/{login-OGOHEHFE.js → login-7VBXFHFC.js} +1 -1
  6. package/dist/{logout-BRUJBFUK.js → logout-OJRK2KGE.js} +1 -1
  7. package/dist/skill-bundle-5WQTV2OV.js +2553 -0
  8. package/package.json +2 -2
  9. package/skills/culvii/.culvii-skill.json +58 -27
  10. package/skills/culvii/SKILL.md +31 -0
  11. package/skills/culvii/examples/agent-workflow.culvii.ts +28 -5
  12. package/skills/culvii/examples/binary-document-workflow.culvii.ts +80 -0
  13. package/skills/culvii/examples/complete-workflow.culvii.ts +55 -11
  14. package/skills/culvii/examples/custom-output-surface.culvii.ts +69 -0
  15. package/skills/culvii/examples/custom-wait-surface.culvii.ts +90 -0
  16. package/skills/culvii/examples/human-in-the-loop-workflow.culvii.ts +125 -0
  17. package/skills/culvii/examples/integration-agent-workflow.culvii.ts +101 -0
  18. package/skills/culvii/examples/multi-agent-workflow-tools.culvii.ts +157 -0
  19. package/skills/culvii/examples/nested-agent-workflow.culvii.ts +108 -0
  20. package/skills/culvii/references/agents.md +53 -5
  21. package/skills/culvii/references/cli-guide.md +1 -1
  22. package/skills/culvii/references/cli-reference.md +33 -0
  23. package/skills/culvii/references/feedback-cycle.md +1 -1
  24. package/skills/culvii/references/kit-api.md +2 -2
  25. package/skills/culvii/references/node-argocd.md +44 -0
  26. package/skills/culvii/references/node-clickup-doc.md +38 -0
  27. package/skills/culvii/references/node-clickup-ticket.md +47 -0
  28. package/skills/culvii/references/node-core-loop-break.md +26 -0
  29. package/skills/culvii/references/node-core-loop-continue.md +26 -0
  30. package/skills/culvii/references/node-core-loop-output.md +24 -0
  31. package/skills/culvii/references/node-core-loop.md +25 -0
  32. package/skills/culvii/references/node-core-merge.md +23 -0
  33. package/skills/culvii/references/node-core-switch.md +24 -0
  34. package/skills/culvii/references/node-cost-explorer.md +45 -0
  35. package/skills/culvii/references/node-elasticsearch.md +2 -2
  36. package/skills/culvii/references/node-github-poll-trigger.md +31 -0
  37. package/skills/culvii/references/node-github-webhook-trigger.md +27 -0
  38. package/skills/culvii/references/node-github.md +251 -0
  39. package/skills/culvii/references/node-gmail-trigger.md +2 -2
  40. package/skills/culvii/references/node-gmail.md +2 -2
  41. package/skills/culvii/references/node-google-calendar.md +2 -2
  42. package/skills/culvii/references/node-google-docs.md +2 -2
  43. package/skills/culvii/references/node-grafana-dashboard.md +38 -0
  44. package/skills/culvii/references/node-grafana-data-source.md +42 -0
  45. package/skills/culvii/references/node-grafana-query.md +34 -0
  46. package/skills/culvii/references/node-hibp-list-domains.md +27 -0
  47. package/skills/culvii/references/node-hibp-stealer-logs.md +30 -0
  48. package/skills/culvii/references/node-kubernetes.md +51 -0
  49. package/skills/culvii/references/node-microsoft-outlook-trigger.md +2 -2
  50. package/skills/culvii/references/node-microsoft-outlook.md +3 -2
  51. package/skills/culvii/references/node-microsoft-sharepoint.md +2 -2
  52. package/skills/culvii/references/node-onionsearch.md +27 -0
  53. package/skills/culvii/references/node-prometheus.md +40 -0
  54. package/skills/culvii/references/node-s3.md +2 -2
  55. package/skills/culvii/references/node-slack-events-trigger.md +37 -0
  56. package/skills/culvii/references/node-slack-interactions-trigger.md +28 -0
  57. package/skills/culvii/references/node-slack-trigger.md +2 -2
  58. package/skills/culvii/references/node-slack.md +128 -4
  59. package/skills/culvii/references/node-supabase.md +61 -0
  60. package/skills/culvii/references/node-twilio.md +2 -2
  61. package/skills/culvii/references/nodes-index.md +24 -0
  62. package/skills/culvii/references/surface-authoring.md +12 -1
  63. package/skills/culvii/references/surface-display.md +1 -1
  64. package/skills/culvii/references/surface-feedback.md +24 -27
  65. package/dist/skill-bundle-7KYK5GBL.js +0 -1377
package/dist/index.js CHANGED
@@ -1,22 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import {a as a$5}from'./chunk-RS5GDTRN.js';import {a as a$4,b as b$1,c as c$1}from'./chunk-KZG5CFSB.js';import {d,f,a as a$1,e,j,n,c,q,r,s,o,k,l}from'./chunk-IPETC2TK.js';import {a as a$3}from'./chunk-HX54IFSD.js';import'./chunk-57XLDHK6.js';import {x,w,y,z}from'./chunk-YKFGEPLO.js';import {a as a$2}from'./chunk-YPLDPHHD.js';import {a,b}from'./chunk-7UWDMECF.js';import {Command}from'commander';import Q,{realpathSync,existsSync}from'fs';import {fileURLToPath}from'url';import ve from'react';import {render}from'ink';import mt from'ws';import {randomUUID,createHash}from'crypto';import rr from'chokidar';import ce from'fs/promises';import re,{dirname,join}from'path';import {spawn}from'child_process';import {createRequire}from'module';import fr from'readline';import bt from'os';import {createInterface}from'readline/promises';import {stdout,stdin}from'process';import {jsx}from'react/jsx-runtime';var ht=a(U=>{Object.defineProperty(U,"__esModule",{value:true});U.SINGLE_CHILD_SURFACE_COMPONENTS=U.RESERVED_SURFACE_COMPONENT_TYPES=U.SURFACE_COMPONENT_TYPES=U.SURFACE_COMPONENT_CATALOG=U.SURFACE_BADGE_TONES=U.SURFACE_TONES=U.SURFACE_TEXT_TRANSFORMS=U.SURFACE_VALUE_FORMATS=void 0;U.SURFACE_VALUE_FORMATS=["text","number","compact","percent","currency","bytes","duration","date","datetime","time","list","json","boolean"];U.SURFACE_TEXT_TRANSFORMS=["capitalize","title","upper","lower","humanize"];U.SURFACE_TONES=["default","muted","success","warning","error","info"];U.SURFACE_BADGE_TONES=["neutral","info","success","warning","error"];var te=(t=false)=>({type:"any",bindable:t}),_=(t=false,e)=>({type:"string",bindable:t,...e?{values:e}:{}}),z=(t=false,e={})=>({type:"number",bindable:t,...e}),Y=(t=false)=>({type:"boolean",bindable:t}),xe=(t=false,e)=>({type:"array",bindable:t,...e?{items:e}:{}}),ge=(t=false,e,n=false)=>({type:"object",bindable:t,...e?{properties:e}:{},additionalProperties:n}),De=(t,...e)=>({type:"union",bindable:t,variants:e}),p=(t,e,n={})=>({schema:t,description:e,...n}),vt=["xs","sm","md","lg"],Rn=["xs","sm","md","lg"],Et=["seconds","ms"],qe=()=>({format:p(_(false,U.SURFACE_VALUE_FORMATS),"Display format."),transform:p(_(false,U.SURFACE_TEXT_TRANSFORMS),"Text transform."),currency:p(_(),"ISO 4217 currency code."),unit:p(_(false,Et),"Numeric timestamp unit."),decimals:p(z(false,{integer:true,min:0,max:20}),"Fixed decimal places."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}),Ce=p(_(false,U.SURFACE_TONES),"Displayed value tone."),Ge=p(_(false,Rn),"Displayed value size."),kt=p(ge(false,void 0,te()),"Map known displayed values to labels."),xn=ge(false,{label:p(_(true),"Row label."),value:p(te(true),"Row value."),...qe(),map:kt,mono:p(Y(),"Render the value in monospace."),tone:Ce,type:p(_(false,["status"]),"Set to status to render a status pill.")},false),$n=De(false,_(),ge(false,{header:p(_(),"Column heading."),key:p(_(),"Field name inside each row.",{required:true}),...qe(),map:kt,align:p(_(false,["left","center","right"]),"Cell alignment."),mono:p(Y(),"Render cells in monospace."),tone:Ce,type:p(_(false,["status"]),"Set to status to render status pills.")},false)),On=De(false,_(),z(),ge(false,{label:p(_(),"Displayed option label."),value:p(De(false,_(),z()),"Submitted option value.",{required:true})},false)),Nn=ge(true,{key:p(_(),"Binary property key.",{required:true}),fileName:p(_(),"Original file name."),mimeType:p(_(),"MIME type."),size:p(z(false,{min:0}),"File size in bytes."),downloadUrl:p(_(),"Protected download URL.")},false),Ln=ge(false,void 0,_());U.SURFACE_COMPONENT_CATALOG={Stack:{group:"layout",summary:"Vertical stack and the default surface container.",children:"list",props:{gap:p(_(false,vt),"Spacing between children.",{default:"md"})}},Row:{group:"layout",summary:"Wrapping horizontal group.",children:"list",props:{gap:p(_(false,vt),"Spacing between children.",{default:"md"}),align:p(_(false,["start","center","end","baseline"]),"Cross-axis alignment.",{default:"center"}),justify:p(_(false,["between"]),"Set to between to push children apart.")}},Grid:{group:"layout",summary:"Responsive equal-width columns.",children:"list",props:{columns:p(z(false,{integer:true,values:[1,2,3,4]}),"Column count.",{default:2}),gap:p(_(false,vt),"Spacing between children.",{default:"md"})}},Card:{group:"layout",summary:"Bordered container with an optional header and status.",children:"single",props:{title:p(_(true),"Header title."),subtitle:p(_(true),"Header subtitle."),status:p(te(true),"Status value used to derive the header pill."),statusLabel:p(te(true),"Header status label."),statusTone:p(_(false,U.SURFACE_BADGE_TONES),"Forced status tone."),map:kt,transform:p(_(false,U.SURFACE_TEXT_TRANSFORMS),"Status label transform."),dense:p(Y(),"Use tighter body padding.")}},Section:{group:"layout",summary:"Labelled group with one child.",children:"single",props:{title:p(_(true),"Section label."),description:p(_(true),"Section description."),collapsible:p(Y(),"Allow the section to be folded."),defaultOpen:p(Y(),"Initial collapsible state.",{default:true})}},Divider:{group:"layout",summary:"Horizontal rule between content blocks.",children:"none",props:{}},Form:{group:"layout",summary:"Groups wait-surface inputs and actions.",children:"list",props:{title:p(_(true),"Form heading.")}},Heading:{group:"display",summary:"A section title.",children:"none",props:{text:p(te(true),"Heading text."),level:p(z(false,{integer:true,values:[1,2,3]}),"Heading level.",{default:2}),transform:p(_(false,U.SURFACE_TEXT_TRANSFORMS),"Text transform."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}},Text:{group:"display",summary:"Body text with shared formatting.",children:"none",props:{text:p(te(true),"Value to display."),...qe(),size:Ge,weight:p(_(false,["normal","medium","semibold"]),"Font weight."),tone:Ce,muted:p(Y(),"Shorthand for the muted tone."),mono:p(Y(),"Render in monospace.")}},Badge:{group:"display",summary:"Small label with an explicit tone.",children:"none",props:{text:p(te(true),"Badge label."),tone:p(_(false,U.SURFACE_BADGE_TONES),"Badge tone.",{default:"neutral"}),format:p(_(false,U.SURFACE_VALUE_FORMATS),"Display format."),transform:p(_(false,U.SURFACE_TEXT_TRANSFORMS),"Text transform."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}},StatusPill:{group:"display",summary:"Semantic status pill for statuses, booleans, and HTTP codes.",children:"none",props:{status:p(te(true),"Status value."),label:p(te(true),"Displayed label."),tone:p(_(false,U.SURFACE_BADGE_TONES),"Forced tone."),format:p(_(false,U.SURFACE_VALUE_FORMATS),"Display format."),transform:p(_(false,U.SURFACE_TEXT_TRANSFORMS),"Text transform."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}},Stat:{group:"display",summary:"One prominent value with a label and caption.",children:"none",props:{label:p(_(true),"Label above the value."),value:p(te(true),"Displayed value."),caption:p(te(true),"Caption below the value."),captionTransform:p(_(false,U.SURFACE_TEXT_TRANSFORMS),"Caption transform."),...qe(),tone:Ce,mono:p(Y(),"Render the value in monospace.")}},KeyValue:{group:"display",summary:"Declared label/value entries or a bound object.",children:"none",props:{entries:p(xe(true,xn),"Declared label/value entries."),value:p(ge(true,void 0,true),"Object whose keys become labels."),humanizeKeys:p(Y(),"Humanize object keys.",{default:true}),columns:p(z(false,{integer:true,values:[1,2]}),"Pairs per row."),dense:p(Y(),"Use tighter row spacing."),mono:p(Y(),"Render shorthand values in monospace."),hideEmpty:p(Y(),"Hide missing values."),emptyText:p(_(true),"Empty-state text.")}},Table:{group:"display",summary:"Tabular view of an array.",children:"none",props:{items:p(xe(true,te()),"Rows to render."),columns:p(xe(false,$n),"Literal field names or column definitions."),dense:p(Y(),"Use tighter rows."),emptyText:p(_(true),"Empty-state text.")},limits:{renderedRows:100}},Timestamp:{group:"display",summary:"ISO or epoch timestamp.",children:"none",props:{value:p(De(true,_(),z()),"ISO string or epoch number."),format:p(_(false,["datetime","date","time","smart"]),"Timestamp format.",{default:"datetime"}),relative:p(Y(),"Display relative time."),unit:p(_(false,Et),"Numeric timestamp unit."),size:Ge,tone:Ce}},Duration:{group:"display",summary:"A duration in milliseconds or between two instants.",children:"none",props:{value:p(z(true,{min:0}),"Duration in milliseconds."),start:p(De(true,_(),z()),"Start instant."),end:p(De(true,_(),z()),"End instant."),unit:p(_(false,Et),"Numeric instant unit."),size:Ge,tone:Ce}},Money:{group:"display",summary:"A formatted currency amount.",children:"none",props:{value:p(z(true),"Currency amount."),currency:p(_(true),"ISO 4217 currency code.",{default:"USD"}),decimals:p(z(false,{integer:true,min:0,max:20}),"Fixed decimal places."),signed:p(Y(),"Colour positive and negative values."),size:Ge,tone:Ce}},Avatar:{group:"display",summary:"Initials derived from a name or email.",children:"none",props:{name:p(_(true),"Name used for initials."),email:p(_(true),"Fallback source for initials."),label:p(_(true),"Text beside the avatar."),size:p(_(false,["sm","md","lg"]),"Avatar size.",{default:"md"})}},Code:{group:"display",summary:"Monospace text block.",children:"none",props:{text:p(te(true),"Code or payload."),label:p(_(true),"Block label."),wrap:p(Y(),"Wrap long lines.")},limits:{characters:2e4}},HtmlRenderer:{group:"display",summary:"Sandboxed HTML fragment renderer.",children:"none",props:{html:p(_(true),"HTML markup."),label:p(_(true),"Frame label."),height:p(z(false,{min:80,max:1200}),"Frame height in pixels.",{default:320}),allowRemoteImages:p(Y(),"Allow remote HTTPS images.",{default:false}),emptyText:p(_(true),"Empty-state text.")},limits:{characters:2e4}},JsonInspector:{group:"display",summary:"Collapsible JSON tree and default fallback renderer.",children:"none",props:{value:p(te(true),"Any JSON value."),collapsed:p(Y(),"Start collapsed.")}},FileChip:{group:"display",summary:"Metadata and download affordance for a produced file.",children:"none",interaction:"single-action",props:{file:p(Nn,"Binary descriptor."),label:p(_(true),"Displayed file name.")}},EmailMessageCard:{group:"display",summary:"Inbox list or opened email message.",children:"none",props:{messages:p(xe(true,ge(false,void 0,true)),"Message list."),message:p(ge(true,void 0,true),"Single message."),from:p(_(true),"Sender."),to:p(_(true),"Recipients."),cc:p(_(true),"Carbon-copy recipients."),subject:p(_(true),"Subject."),snippet:p(_(true),"Preview text."),body:p(_(true),"Message body."),date:p(De(true,_(),z()),"Sent or received instant."),labels:p(xe(true,_()),"Message labels."),unread:p(Y(true),"Unread state."),fields:p(Ln,"Field-name mapping."),emptyText:p(_(true),"Empty-state text.")},limits:{renderedMessages:50}},DiffView:{group:"display",summary:"Structural JSON or line-by-line text comparison.",children:"none",props:{before:p(te(true),"Prior value."),after:p(te(true),"Proposed value."),mode:p(_(false,["json","text"]),"Comparison mode.",{default:"json"})},limits:{depth:6,children:100,lines:2e3,characters:2e5}},TextField:{group:"input",summary:"Single-line form input.",children:"none",interaction:"input",props:{label:p(_(true),"Field label."),placeholder:p(_(true),"Placeholder."),type:p(_(false,["text","number","email","url"]),"HTML input type.",{default:"text"}),disabled:p(Y(true),"Disabled state.")}},TextArea:{group:"input",summary:"Multi-line form input.",children:"none",interaction:"input",props:{label:p(_(true),"Field label."),placeholder:p(_(true),"Placeholder."),rows:p(z(false,{integer:true,min:1}),"Visible rows.",{default:3}),disabled:p(Y(true),"Disabled state.")}},Select:{group:"input",summary:"Single-choice form input.",children:"none",interaction:"input",props:{label:p(_(true),"Field label."),options:p(xe(true,On),"Literal or bound options."),placeholder:p(_(true),"Placeholder."),disabled:p(Y(true),"Disabled state.")}},Checkbox:{group:"input",summary:"Boolean form input.",children:"none",interaction:"input",props:{label:p(_(true),"Text beside the checkbox."),description:p(_(true),"Helper text."),disabled:p(Y(true),"Disabled state.")}},Button:{group:"action",summary:"Single-action button.",children:"none",interaction:"single-action",props:{label:p(_(true),"Button label."),variant:p(_(false,["primary","default","danger"]),"Button variant.",{default:"default"}),disabled:p(Y(true),"Disabled state.")}},ApproveRejectBar:{group:"action",summary:"Named approve/reject decision actions.",children:"none",interaction:"multi-action",actionNames:{allowed:["approve","reject"]},props:{canDecide:p(Y(true),"Whether the viewer may decide."),approveLabel:p(_(true),"Approve button label."),rejectLabel:p(_(true),"Reject button label."),disabledReason:p(_(true),"Reason actions are disabled."),commentRequired:p(Y(true),"Require a comment before rejection."),comment:p(_(true),"Current comment value."),decision:p(_(true),"Recorded decision."),decidedBy:p(_(true),"Recorded decider.")}}};U.SURFACE_COMPONENT_TYPES=Object.keys(U.SURFACE_COMPONENT_CATALOG);U.RESERVED_SURFACE_COMPONENT_TYPES=["Tabs","Accordion","Spacer","Markdown","Icon","Image","List","Tree","ProgressBar","Spinner","ErrorPanel","Timeline","RadioGroup","DatePicker","SlackMessageCard","SlackThread","CalendarEventCard","AgentRunPanel","ToolCallCard"];U.SINGLE_CHILD_SURFACE_COMPONENTS=U.SURFACE_COMPONENT_TYPES.filter(t=>U.SURFACE_COMPONENT_CATALOG[t].children==="single");});var Ht=a(ne=>{Object.defineProperty(ne,"__esModule",{value:true});ne.SURFACE_SLOTS=ne.SURFACE_SLOT_POLICY=void 0;ne.getSurfaceBindingPaths=Vt;ne.validateSurfaceDefinition=Yt;ne.validateSurfaceResource=Yn;var Mt=ht();ne.SURFACE_SLOT_POLICY={output:{actions:["navigate"],form:false},wait:{actions:["navigate","node.resume","node.stop"],form:true}};ne.SURFACE_SLOTS=Object.keys(ne.SURFACE_SLOT_POLICY);var jt=300,Wt=12,Fn=new Set(Mt.SURFACE_COMPONENT_TYPES),Un=new Set(["$output","$input","$exec","$binary"]),Pn=new Set(["text","number","date","datetime","json"]),jn=new Set(["text","textarea","number","email","url","checkbox","select","file"]);function Wn(t){return (t.startsWith("/")?t.slice(1):t).split("/",1)[0]}function Pe(t,e){if(Array.isArray(t))for(let n of t)Pe(n,e);else if(t&&typeof t=="object"){let n=t;if(typeof n.path=="string")e.push(n.path);else for(let r of Object.values(n))Pe(r,e);}}function $e(t,e){if(Array.isArray(t)){for(let r of t)$e(r,e);return}if(!t||typeof t!="object")return;let n=t;if("path"in n){typeof n.path!="string"&&e.push("Surface binding path must be a string."),n.format!==void 0&&!Pn.has(String(n.format))&&e.push(`Unknown surface binding format "${String(n.format)}".`);return}for(let r of Object.values(n))$e(r,e);}function Je(t){return !!t&&typeof t=="object"&&!Array.isArray(t)}function Mn(t){return Je(t)&&"path"in t}function Ue(t,e,n,r){if(Mn(t)){e.bindable||r.push(`${n} does not accept a surface binding.`),$e(t,r);return}if(e.type==="any")return;if(e.type==="union"){let a=e.variants.filter(i=>i.type==="any"||i.type==="union"?true:i.type==="array"?Array.isArray(t):i.type==="object"?Je(t):typeof t===i.type),c=(a.length?a:e.variants).map(i=>{let s=[];return Ue(t,i,n,s),s});c.every(i=>i.length>0)&&r.push(...c.reduce((i,s)=>s.length<i.length?s:i));return}if(e.type==="string"){if(typeof t!="string"){r.push(`${n} must be a string.`);return}e.values&&!e.values.includes(t)&&r.push(`${n} must be one of ${e.values.join(", ")}.`),e.maxLength!==void 0&&t.length>e.maxLength&&r.push(`${n} cannot exceed ${e.maxLength} characters.`);return}if(e.type==="number"){if(typeof t!="number"||!Number.isFinite(t)){r.push(`${n} must be a finite number.`);return}e.integer&&!Number.isInteger(t)&&r.push(`${n} must be an integer.`),e.min!==void 0&&t<e.min&&r.push(`${n} must be at least ${e.min}.`),e.max!==void 0&&t>e.max&&r.push(`${n} cannot exceed ${e.max}.`),e.values&&!e.values.includes(t)&&r.push(`${n} must be one of ${e.values.join(", ")}.`);return}if(e.type==="boolean"){typeof t!="boolean"&&r.push(`${n} must be a boolean.`);return}if(e.type==="array"){if(!Array.isArray(t)){r.push(`${n} must be an array.`);return}e.maxItems!==void 0&&t.length>e.maxItems&&r.push(`${n} cannot contain more than ${e.maxItems} items.`),e.items&&t.forEach((a,c)=>Ue(a,e.items,`${n}[${c}]`,r));return}if(!Je(t)){r.push(`${n} must be an object.`);return}let o=e.properties??{};for(let[a,c]of Object.entries(o))c.required&&!(a in t)&&r.push(`${n}.${a} is required.`);for(let[a,c]of Object.entries(t)){let i=o[a];if(i){Ue(c,i.schema,`${n}.${a}`,r);continue}e.additionalProperties===false||e.additionalProperties===void 0?r.push(`${n} has unknown field "${a}".`):e.additionalProperties!==true&&Ue(c,e.additionalProperties,`${n}.${a}`,r);}}function Vn(t,e,n){let r=t.props;if(!(r===void 0||!Je(r))){for(let[o,a]of Object.entries(e.props))a.required&&!(o in r)&&n.push(`Component "${t.id}" prop "${o}" is required.`);for(let[o,a]of Object.entries(r)){if(o==="bind")continue;let c=e.props[o];if(!c){n.push(`Component "${t.id}" (${t.type}) has unknown prop "${o}".`);continue}Ue(a,c.schema,`Component "${t.id}" prop "${o}"`,n);}}}function Vt(t){let e=[];for(let n of t.components??[])!n||typeof n!="object"||(Pe(n.props,e),Pe(n.actions,e));return Pe(t.form,e),Array.from(new Set(e))}function Yt(t,e){let n=[];try{new TextEncoder().encode(JSON.stringify(t)).byteLength>256*1024&&n.push("Surface definition exceeds 256 KiB.");}catch{return ["Surface definition must be JSON serializable."]}if(t?.schema!=="kit.ui/v1"&&n.push('Surface schema must be "kit.ui/v1".'),!Array.isArray(t?.components)||t.components.length===0)return [...n,"Surface requires at least one component."];t.components.length>jt&&n.push(`Surface cannot exceed ${jt} components.`);let r=new Map;for(let i of t.components){if(!i||typeof i!="object"||Array.isArray(i)){n.push("Every surface component must be an object.");continue}let s=i;if(typeof s.id!="string"||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(s.id)||typeof s.type!="string"){n.push("Every surface component requires id and type.");continue}r.has(s.id)&&n.push(`Duplicate component id "${s.id}".`),r.set(s.id,s),Fn.has(s.type)||n.push(`Unknown component type "${s.type}".`);let d=Mt.SURFACE_COMPONENT_CATALOG[s.type];s.props!==void 0&&(!s.props||typeof s.props!="object"||Array.isArray(s.props))&&n.push(`Component "${s.id}" props must be an object.`),d&&Vn(s,d,n),s.children!==void 0&&!Array.isArray(s.children)?n.push(`Component "${s.id}" children must be an array.`):s.children?.length&&d?.children==="none"?n.push(`Component "${s.id}" cannot have children.`):s.children&&s.children.length>1&&d?.children==="single"&&n.push(`Component "${s.id}" can have at most one child.`);let l=s.props?.bind;if(l!==void 0&&(d?.interaction!=="input"?n.push(`Component "${s.id}" cannot bind form state.`):(!ne.SURFACE_SLOT_POLICY[e].form||typeof l!="string"||!(l==="/$form"||l.startsWith("/$form/")||l.startsWith("$form.")))&&n.push(`Component "${s.id}" requires a wait-surface $form binding.`)),s.actions!==void 0&&(!s.actions||typeof s.actions!="object"||Array.isArray(s.actions))){n.push(`Component "${s.id}" actions must be an object.`);continue}let k=Object.keys(s.actions??{}).length;if(k&&!["single-action","multi-action"].includes(d?.interaction??"")?n.push(`Component "${s.id}" cannot have actions.`):k>1&&d?.interaction==="single-action"&&n.push(`Component "${s.id}" can have at most one action.`),d?.actionNames){let f=Object.keys(s.actions??{});for(let w of d.actionNames.required??[])f.includes(w)||n.push(`Component "${s.id}" requires action "${w}".`);for(let w of f)d.actionNames.allowed&&!d.actionNames.allowed.includes(w)&&n.push(`Component "${s.id}" does not support action "${w}".`);}$e(s.props,n);for(let f of Object.values(s.actions??{})){if(!f||typeof f!="object"||Array.isArray(f)){n.push(`Component "${s.id}" has an invalid action.`);continue}let w=f;if(!["navigate","node.resume","node.stop"].includes(w.type)){n.push(`Unknown surface action "${String(w.type)}".`);continue}ne.SURFACE_SLOT_POLICY[e].actions.includes(w.type)||n.push(`Action "${w.type}" is not allowed on "${e}" surfaces.`),w.type==="navigate"&&(!w.href||typeof w.href!="object"||typeof w.href.path!="string")&&n.push("Navigate actions require an href binding."),$e(w,n);}}(typeof t.root!="string"||!r.has(t.root))&&n.push(`Surface root "${String(t.root)}" is missing.`);let o=new Set,a=new Set,c=(i,s)=>{if(s>Wt)return void n.push(`Surface component depth exceeds ${Wt}.`);if(a.has(i))return void n.push(`Surface component cycle includes "${i}".`);if(o.has(i))return;let d=r.get(i);if(d){a.add(i);for(let l of Array.isArray(d.children)?d.children:[]){if(typeof l!="string"){n.push(`Component "${i}" has a non-string child reference.`);continue}r.has(l)?c(l,s+1):n.push(`Component "${i}" references missing child "${l}".`);}a.delete(i),o.add(i);}};typeof t.root=="string"&&c(t.root,1);for(let i of r.keys())o.has(i)||n.push(`Component "${i}" is unreachable from root.`);for(let i of Vt(t)){let s=Wn(i);s==="$form"&&!ne.SURFACE_SLOT_POLICY[e].form?n.push(`Binding "${i}" is only allowed on wait surfaces.`):s!=="$form"&&!Un.has(s)&&n.push(`Invalid surface binding path "${i}".`);}if(t.form!==void 0)if(ne.SURFACE_SLOT_POLICY[e].form||n.push("Forms are only allowed on wait surfaces."),!Array.isArray(t.form?.fields))n.push("Surface form fields must be an array.");else {let i=new Set;for(let s of t.form.fields){if(!s||typeof s!="object"||Array.isArray(s)){n.push("Every surface form field must be an object.");continue}let d=s,l=d?.name,k=d?.type;typeof l!="string"||!l||i.has(l)?n.push(`Surface form field name "${String(l)}" is invalid or duplicated.`):i.add(l),jn.has(String(k))||n.push(`Unknown surface form field type "${String(k)}".`),(typeof d.label!="string"||!d.label.trim())&&n.push(`Surface form field "${String(l)}" requires a label.`),k==="file"&&"default"in d&&n.push(`File field "${String(l)}" cannot have a default binding.`),k==="file"&&(d.maxFiles!==void 0&&(!Number.isInteger(d.maxFiles)||Number(d.maxFiles)<1||Number(d.maxFiles)>5)&&n.push(`File field "${String(l)}" maxFiles must be between 1 and 5.`),d.maxBytes!==void 0&&(!Number.isInteger(d.maxBytes)||Number(d.maxBytes)<1||Number(d.maxBytes)>10*1024*1024)&&n.push(`File field "${String(l)}" maxBytes exceeds platform limits.`),d.accept!==void 0&&(!Array.isArray(d.accept)||d.accept.some(f=>typeof f!="string"||!/^[a-z0-9.+-]+\/(?:[a-z0-9.+-]+|\*)$/i.test(f)))&&n.push(`File field "${String(l)}" has invalid MIME types.`)),k==="select"&&(!Array.isArray(d.options)||d.options.length===0?n.push(`Select field "${String(l)}" requires options.`):d.options.some(f=>!f||typeof f!="object"||typeof f.label!="string"||typeof f.value!="string")&&n.push(`Select field "${String(l)}" has invalid options.`));}$e(t.form,n);}return Array.from(new Set(n))}function Yn(t){let e=t;if(!e||typeof e!="object")return ["Surface must be an object."];let n=[];return (typeof e.id!="string"||!/^[a-z0-9][a-z0-9-]{0,62}$/.test(e.id))&&n.push("Surface requires a kebab-case id."),(typeof e.name!="string"||!e.name.trim())&&n.push("Surface requires a name."),ne.SURFACE_SLOTS.includes(e.slot)?n.push(...Yt(e.definition,e.slot)):n.push(`Surface requires slot ${ne.SURFACE_SLOTS.map(r=>`"${r}"`).join(" or ")}.`),Array.from(new Set(n))}});var Bt=a(q=>{var Hn=q&&q.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);(!o||("get"in o?!e.__esModule:o.writable||o.configurable))&&(o={enumerable:true,get:function(){return e[n]}}),Object.defineProperty(t,r,o);}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n];})),Bn=q&&q.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&Hn(e,t,n);};Object.defineProperty(q,"__esModule",{value:true});q.SURFACE_VALUE_FORMATS=q.SURFACE_TONES=q.SURFACE_TEXT_TRANSFORMS=q.SURFACE_COMPONENT_TYPES=q.SURFACE_COMPONENT_CATALOG=q.SURFACE_BADGE_TONES=q.SINGLE_CHILD_SURFACE_COMPONENTS=q.RESERVED_SURFACE_COMPONENT_TYPES=void 0;var Ee=ht();Object.defineProperty(q,"RESERVED_SURFACE_COMPONENT_TYPES",{enumerable:true,get:function(){return Ee.RESERVED_SURFACE_COMPONENT_TYPES}});Object.defineProperty(q,"SINGLE_CHILD_SURFACE_COMPONENTS",{enumerable:true,get:function(){return Ee.SINGLE_CHILD_SURFACE_COMPONENTS}});Object.defineProperty(q,"SURFACE_BADGE_TONES",{enumerable:true,get:function(){return Ee.SURFACE_BADGE_TONES}});Object.defineProperty(q,"SURFACE_COMPONENT_CATALOG",{enumerable:true,get:function(){return Ee.SURFACE_COMPONENT_CATALOG}});Object.defineProperty(q,"SURFACE_COMPONENT_TYPES",{enumerable:true,get:function(){return Ee.SURFACE_COMPONENT_TYPES}});Object.defineProperty(q,"SURFACE_TEXT_TRANSFORMS",{enumerable:true,get:function(){return Ee.SURFACE_TEXT_TRANSFORMS}});Object.defineProperty(q,"SURFACE_TONES",{enumerable:true,get:function(){return Ee.SURFACE_TONES}});Object.defineProperty(q,"SURFACE_VALUE_FORMATS",{enumerable:true,get:function(){return Ee.SURFACE_VALUE_FORMATS}});Bn(Ht(),q);});var Ke=class extends Error{constructor(){super("401 Unauthorized"),this.name="UnauthorizedError";}};function bn(t,e=Date.now()){return t-e<3e4}async function K(t){let e$1=new a$4,r=await(async()=>await e$1.withLock(async()=>{b$1.info("Tokens read from disk for auth check");let o=await e$1.get();if(o||(b$1.error("No tokens found on disk"),render(ve.createElement(c$1,{state:{type:"login_error",message:"Not logged in",detail:"run `culvii login`"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j(),process.exit(1)),!bn(o.expiresAt))return b$1.info("Access token valid, skipping refresh"),o.accessToken;b$1.info("Access token expired, attempting refresh");let a=`https://${q.cognitoDomain}/oauth2/token`,c=new URLSearchParams;c.set("grant_type","refresh_token"),c.set("refresh_token",o.refreshToken),c.set("client_id",q.clientId);let i;try{i=await fetch(a,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:c.toString()});}catch(k){b$1.error("Network error during refresh",{error:k.message}),render(ve.createElement(c$1,{state:{type:"login_error",message:"Refresh failed",detail:"Cannot reach auth server \u2014 check your connection"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j(),process.exit(1);}let s=await i.json();(!i.ok||s.error==="invalid_grant")&&(b$1.warn("Refresh failed with invalid_grant"),await e$1.delete(),render(ve.createElement(c$1,{state:{type:"login_error",message:"Session expired",detail:"run `culvii login` to authenticate"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j(),process.exit(1));let d=Date.now(),l=d+s.expires_in*1e3;return b$1.info("Refresh succeeded",{expiresAt:l}),await e$1.set({accessToken:s.access_token,refreshToken:s.refresh_token||o.refreshToken,idToken:s.id_token||o.idToken,expiresAt:l,tokenType:"Bearer",scope:o.scope,issuedAt:d,issuer:o.issuer}),s.access_token}))();try{await t(r);}catch(o){if(!(o instanceof Ke))throw o;b$1.info("Mid-session 401 detected, attempting refresh");let a=await e$1.withLock(async()=>{b$1.info("Tokens read from disk for retry");let c=await e$1.get();c||(b$1.error("No tokens found on disk during retry"),render(ve.createElement(c$1,{state:{type:"login_error",message:"Not logged in",detail:"run `culvii login`"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j(),process.exit(1)),b$1.info("Access token expired (forced by 401), attempting refresh");let i=`https://${q.cognitoDomain}/oauth2/token`,s=new URLSearchParams;s.set("grant_type","refresh_token"),s.set("refresh_token",c.refreshToken),s.set("client_id",q.clientId);let d;try{d=await fetch(i,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:s.toString()});}catch(w){b$1.error("Network error during refresh retry",{error:w.message}),render(ve.createElement(c$1,{state:{type:"login_error",message:"Refresh failed",detail:"Cannot reach auth server \u2014 check your connection"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j(),process.exit(1);}let l=await d.json();(!d.ok||l.error==="invalid_grant")&&(b$1.warn("Refresh retry failed with invalid_grant"),await e$1.delete(),render(ve.createElement(c$1,{state:{type:"login_error",message:"Session expired",detail:"run `culvii login` to authenticate"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j(),process.exit(1));let k=Date.now(),f=k+l.expires_in*1e3;return b$1.info("Refresh retry succeeded",{expiresAt:f}),await e$1.set({accessToken:l.access_token,refreshToken:l.refresh_token||c.refreshToken,idToken:l.id_token||c.idToken,expiresAt:f,tokenType:"Bearer",scope:c.scope,issuedAt:k,issuer:c.issuer}),l.access_token});try{b$1.info("Retry after refresh succeeded"),await t(a);}catch(c){throw c instanceof Ke&&(b$1.error("Retry after refresh failed (still 401)"),await e$1.withLock(async()=>{await e$1.delete();}),render(ve.createElement(c$1,{state:{type:"login_error",message:"Session invalidated",detail:"run `culvii login` to authenticate"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j(),process.exit(1)),c}}}async function gt(){let t=new a$4;return t.withLock(async()=>{let e=await t.get();if(!e)return null;let n=`https://${q.cognitoDomain}/oauth2/token`,r=new URLSearchParams;r.set("grant_type","refresh_token"),r.set("refresh_token",e.refreshToken),r.set("client_id",q.clientId);let o;try{o=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});}catch(s){return b$1.error("Network error during silent refresh",{error:s.message}),null}let a=await o.json();if(!o.ok||a.error==="invalid_grant")return b$1.warn("Silent refresh failed",{error:a.error}),null;let c=Date.now(),i=c+a.expires_in*1e3;return await t.set({accessToken:a.access_token,refreshToken:a.refresh_token||e.refreshToken,idToken:a.id_token||e.idToken,expiresAt:i,tokenType:"Bearer",scope:e.scope,issuedAt:c,issuer:e.issuer}),a.access_token})}async function V(t){let e=await t.text();try{let n=JSON.parse(e);if(n.error)return n.error}catch{}return e}async function W(t,e,n={}){let{skipEnvironmentHeader:r,...o$1}=n,c=await new a$3().read({exitOnError:false}),i=c.contexts[c.active],s=i?.tenant_id,d=i?.environment||"dev",l=o()??d,k$1=i?.environment_ids?.[l]??(l===d?i?.environment_id:void 0),f=k[l],w=r?{}:k$1?{"x-environment-id":k$1}:{"x-environment-slug":f},m={Authorization:`Bearer ${e}`,...s?{"x-tenant-id":s}:{},...w,...o$1.headers||{}};return fetch(t,{...o$1,headers:m})}function Ut(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function Pt(t){let e$1=t.command("workspace").description("Workspace commands").option("--env <env>","Target environment (sandbox or prod)");e$1.command("create").description("Create a new workspace").requiredOption("--name <name>","Workspace name").requiredOption("--slug <slug>","Workspace slug").action(async n=>{if(Ut()){let c=function(){let[i,s]=ve.useState({type:"loading"});return ve.useEffect(()=>(a=s,()=>{a=null;}),[]),ve.createElement(o,{state:i})};let{WorkspaceCreateView:o}=await import('./WorkspaceView-ID7ZMBHV.js'),a=null;await G(Promise.resolve(ve.createElement(c))),await K(async i=>{let{apiUrl:s$1,context:d$1}=await r({env:e$1.opts().env}),l=s(d$1);try{let k=await W(`${s$1}/api/workspaces`,i,{method:"POST",headers:{...l,"Content-Type":"application/json"},body:JSON.stringify({name:n.name,slug:n.slug,tenantId:d$1.tenant_id})});if(!k.ok){let T=await V(k);a?.({type:"error",message:"Failed to create workspace",detail:`Server responded with ${k.status}: ${T}`});let{userId:I,tenantId:x}=await d();I?await f(a$1.WORKSPACE_CREATE_FAILED,I,x,{error_class:"ApiError",slug:n.slug,env:d$1.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:"ApiError",slug:n.slug,env:d$1.environment}),await j();return}let f$1=await k.json();a?.({type:"success",id:f$1?.data?.workspaceId,slug:f$1?.data?.workspaceSlug||n.slug,name:n.name});let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_CREATED,w,m,{slug:n.slug,env:d$1.environment}):await e(a$1.WORKSPACE_CREATED,{slug:n.slug,env:d$1.environment}),await j();}catch(k){a?.({type:"error",message:"Unexpected error",detail:k.message});let{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.WORKSPACE_CREATE_FAILED,f$1,w,{error_class:k?.constructor?.name,env:d$1.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:k?.constructor?.name,env:d$1.environment}),await j();}});return}await K(async o=>{let{apiUrl:a,context:c}=await r({env:e$1.opts().env}),i=s(c);console.log(`tenant: ${c.tenant_slug} | workspace: N/A | env: ${c.environment}`);try{let s=await W(`${a}/api/workspaces`,o,{method:"POST",headers:{...i,"Content-Type":"application/json"},body:JSON.stringify({name:n.name,slug:n.slug,tenantId:c.tenant_id})});if(!s.ok){let f$1=await V(s);console.error(`Error: Failed to create workspace. Server responded with ${s.status}: ${f$1}`);let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_CREATE_FAILED,w,m,{error_class:"ApiError",slug:n.slug,env:c.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:"ApiError",slug:n.slug,env:c.environment}),await j(),process.exit(1);}let d$1=await s.json();console.log(`${w} Workspace created successfully.`),console.log(` ID: ${d$1?.data?.workspaceId}`),d$1?.data?.workspaceSlug&&console.log(` Slug: ${d$1?.data?.workspaceSlug}`);let{userId:l,tenantId:k}=await d();l?await f(a$1.WORKSPACE_CREATED,l,k,{slug:n.slug,env:c.environment}):await e(a$1.WORKSPACE_CREATED,{slug:n.slug,env:c.environment}),await j();}catch(s){console.error(`Error: Network or unexpected error: ${s.message}`);let{userId:d$1,tenantId:l}=await d();d$1?await f(a$1.WORKSPACE_CREATE_FAILED,d$1,l,{error_class:s?.constructor?.name,env:c.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:s?.constructor?.name,env:c.environment}),await j(),process.exit(1);}});}),e$1.command("list").description("List workspaces").action(async()=>{if(Ut()){let a=function(){let[c,i]=ve.useState({type:"loading"});return ve.useEffect(()=>(o=i,()=>{o=null;}),[]),ve.createElement(r$1,{state:c})};let{WorkspaceListView:r$1}=await import('./WorkspaceView-ID7ZMBHV.js'),o=null;await G(Promise.resolve(ve.createElement(a))),await K(async c=>{let{apiUrl:i,context:s$1}=await r({env:e$1.opts().env}),d$1=s(s$1);try{let l=await W(`${i}/api/workspaces?tenantId=${s$1.tenant_id}`,c,{headers:d$1});if(!l.ok){let T=await V(l);o?.({type:"error",message:"Failed to list workspaces",detail:`Server responded with ${l.status}: ${T}`});let{userId:I,tenantId:x}=await d();I?await f(a$1.WORKSPACE_LIST_FAILED,I,x,{error_class:"ApiError",env:s$1.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"ApiError",env:s$1.environment}),await j();return}let f$1=(await l.json())?.data?.workspaces;if(!Array.isArray(f$1)){o?.({type:"error",message:"Unexpected response format"});let{userId:T,tenantId:I}=await d();T?await f(a$1.WORKSPACE_LIST_FAILED,T,I,{error_class:"UnexpectedResponse",env:s$1.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"UnexpectedResponse",env:s$1.environment}),await j();return}o?.({type:"success",workspaces:f$1.map(T=>({id:T.id,name:T.name,slug:T.slug??""}))});let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_LISTED,w,m,{env:s$1.environment}):await e(a$1.WORKSPACE_LISTED,{env:s$1.environment}),await j();}catch(l){o?.({type:"error",message:"Unexpected error",detail:l.message});let{userId:k,tenantId:f$1}=await d();k?await f(a$1.WORKSPACE_LIST_FAILED,k,f$1,{error_class:l?.constructor?.name,env:s$1.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:l?.constructor?.name,env:s$1.environment}),await j();}});return}await K(async r$1=>{let{apiUrl:o,context:a}=await r({env:e$1.opts().env}),c=s(a);console.log(`tenant: ${a.tenant_slug} | workspace: N/A | env: ${a.environment}`);try{let i=await W(`${o}/api/workspaces?tenantId=${a.tenant_id}`,r$1,{headers:c});if(!i.ok){let f$1=await V(i);console.error(`Error: Failed to list workspaces. Server responded with ${i.status}: ${f$1}`);let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_LIST_FAILED,w,m,{error_class:"ApiError",env:a.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"ApiError",env:a.environment}),await j(),process.exit(1);}let d$1=(await i.json())?.data?.workspaces;if(!Array.isArray(d$1)){console.error("Error: Unexpected response format");let{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.WORKSPACE_LIST_FAILED,f$1,w,{error_class:"UnexpectedResponse",env:a.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"UnexpectedResponse",env:a.environment}),await j(),process.exit(1);}for(let f of d$1)console.log(`${f.id} ${f.name} ${f.slug}`);let{userId:l,tenantId:k}=await d();l?await f(a$1.WORKSPACE_LISTED,l,k,{env:a.environment}):await e(a$1.WORKSPACE_LISTED,{env:a.environment}),await j();}catch(i){console.error(`Error: Network or unexpected error: ${i.message}`);let{userId:s,tenantId:d$1}=await d();s?await f(a$1.WORKSPACE_LIST_FAILED,s,d$1,{error_class:i?.constructor?.name,env:a.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:i?.constructor?.name,env:a.environment}),await j(),process.exit(1);}});});}function wt(t,e,n){let r=null,o=0,a=false,c=[],i=new Map,s=null,d=null,l=0,k=[1e3,2e3,4e3,8e3,16e3];function f(){s&&(clearInterval(s),s=null),d&&(clearTimeout(d),d=null),l=0;}function w(){f(),s=setInterval(()=>{if(!r||r.readyState!==mt.OPEN)return;let R=Date.now().toString()+"-"+Math.random().toString();r.send(JSON.stringify({type:"client-ping",requestId:R})),d=setTimeout(()=>{l++,l>=2&&(b$1.warn("devSync WebSocket dead (missed 2 pongs), terminating"),f(),r?.terminate());},5e3);},2e4);}function m(R){R.removeAllListeners(),R.on("error",()=>{});try{R.terminate();}catch(N){b$1.warn("devSync error terminating stale socket",{error:N.message});}}let T=0;async function I(){if(a)return;let R=++T,N;try{N=await e();}catch(S){b$1.error("devSync failed to obtain headers for connection",{error:S.message}),R===T&&x();return}if(a||R!==T)return;r&&m(r);let y=new mt(t,{headers:N});r=y,y.on("open",()=>{if(r===y){o=0,b$1.info("devSync WebSocket connected",{url:t}),n.onOpen();for(let S of c)y.send(JSON.stringify(S));c=[],w();}}),y.on("message",S=>{if(r!==y)return;let h=Buffer.isBuffer(S)?S.toString("utf-8"):S instanceof ArrayBuffer?Buffer.from(S).toString("utf-8"):Buffer.concat(S).toString("utf-8"),g;try{g=JSON.parse(h);}catch{b$1.warn("Received invalid JSON from devSync",{raw:h});return}if(g.ok===true&&g.slug&&typeof g.warning=="string"){n.onWarning?.(g.slug,g.warning);return}if(g.type==="session-probe"&&typeof g.requestId=="string"){y.send(JSON.stringify({type:"session-pong",requestId:g.requestId}));return}if(g.type==="client-pong"){d&&(clearTimeout(d),d=null),l=0;return}if(g.ok===true&&g.slug&&g.type==="validation-error"){n.onValidationErrorAck?.(g.slug);return}if(g.ok===true&&g.slug){g.resourceId&&i.set(g.slug,g.resourceId),n.onAck(g.slug,g.resourceId,g.orphaned===true);return}if(g.ok===false&&g.slug){n.onError(g.slug,g.error||"Unknown error");return}if(g.ok===false&&!g.slug){n.onFatal(g.error||"Fatal error from server"),a=true,f(),y.close();return}}),y.on("unexpected-response",(S,h)=>{if(r===y){if(h.statusCode===401){b$1.error("devSync credentials rejected (401)"),a=true,f(),y.terminate(),n.onAuthFailure?n.onAuthFailure():n.onFatal("Credentials rejected by server (401)");return}b$1.warn("devSync unexpected handshake response",{statusCode:h.statusCode}),f(),y.terminate(),x();}}),y.on("close",S=>{r!==y||a||(b$1.warn("devSync WebSocket closed",{code:S}),f(),x());}),y.on("error",S=>{r===y&&b$1.error("devSync WebSocket error",{error:S.message});});}function x(){if(f(),a)return;if(o>=k.length){let y=`devSync PERMANENT FAILURE: giving up after ${k.length} retries`;b$1.error(y,{retryCount:o,retryDelaysMs:k}),n.onFatal(y),a=true;return}let R=k[o];o++;let N=k.length-o;b$1.info(`devSync reconnecting in ${R}ms (attempt ${o}/${k.length}, ${N} left before permanent failure)`),setTimeout(()=>{I();},R);}function J(R){r&&r.readyState===mt.OPEN?r.send(JSON.stringify(R)):c.push(R);}function H(){a=true,f(),r&&m(r),b$1.info("devSync WebSocket closed by client");}function D(){a||(f(),o=0,r&&m(r),I());}return I(),{send:J,close:H,reconnectNow:D}}var Gt=b(Bt(),1);var Xn=fileURLToPath(import.meta.url),Zn=dirname(Xn),Qn=join(Zn,"lib","evaluator.js"),er=createRequire(import.meta.url),tr=er.resolve("tsx/cli");async function je(t){try{let r=await ce.readFile(re.join(t,"culvii.yaml"),"utf-8"),o=[],a=!1;for(let c of r.split(`
3
- `)){if(c.trim().startsWith("entrypoints:")){a=!0;continue}if(!a)continue;let i=c.match(/^\s+-\s+(.+)$/);i?o.push(re.resolve(t,i[1].trim())):c.trim()&&!c.trim().startsWith("#")&&(a=!1);}if(o.length)return o}catch{}let e=[];async function n(r){let o;try{o=await ce.readdir(r,{withFileTypes:!0});}catch{return}for(let a of o){if(a.name.startsWith(".")||a.name==="node_modules"||a.name==="dist")continue;let c=re.join(r,a.name);a.isDirectory()?await n(c):a.isFile()&&a.name.endsWith(".culvii.ts")&&e.push(c);}}return await n(t),e}function We(t,e={}){return new Promise((n,r)=>{if(!t.length)return n([]);let o=spawn(process.execPath,[tr,Qn,...t],{env:{...process.env,...e,CULVII_DEV:"true"},stdio:["ignore","pipe","pipe"]}),a="",c="",i=false;o.stdout.on("data",s=>a+=s.toString()),o.stderr.on("data",s=>c+=s.toString()),o.on("error",s=>{i||(i=true,r(s));}),o.on("close",s=>{if(i)return;if(i=true,s!==0){r(new Error(`Evaluator exited with code ${s}. ${c.trim()||"Check your files for syntax or validation errors."}`));return}let d=[],l=new Set,k=a.split(`
4
- `).filter(f=>f.includes("__culvii_dev_definitions__"));for(let f of k)try{let w=JSON.parse(f);for(let m of w.__culvii_dev_definitions__||[]){let T=m?.definition?.id,I=m?.type&&T?`${m.type}:${T}`:null;I&&l.has(I)||(I&&l.add(I),d.push(m));}}catch{}n(d);});})}function ze(t){return (0, Gt.validateSurfaceResource)(t)}function At(t){if(Array.isArray(t))return t.map(At);if(t!==null&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=At(t[n]);return e}return t}function ar(t){if(!t||typeof t!="object")return t;let e={...t};return Array.isArray(e.nodes)&&(e.nodes=e.nodes.map(({id:n,...r})=>r)),e}function sr(t){return createHash("sha256").update(JSON.stringify(At(ar(t)))).digest("hex")}function ke(t){return (Array.isArray(t?.nodes)?t.nodes:[]).filter(n=>n?.type==="core.agent").map(n=>n?.nodeParams?.agentReferenceKey??n?.nodeParams?.agentId).filter(n=>typeof n=="string"&&!n.startsWith("agt_"))}function Xe(t){return (Array.isArray(t?.nodes)?t.nodes:[]).flatMap(n=>["output","wait"].map(r=>n?.ui?.[r]).filter(r=>r?.kind==="custom"&&typeof r.surfaceKey=="string").map(r=>({surfaceKey:r.surfaceKey,...Number.isInteger(r.version)?{version:r.version}:{}})))}function or(t){return Array.isArray(t)?t:t&&typeof t=="object"?Object.entries(t).map(([e,n])=>n&&typeof n=="object"&&!Array.isArray(n)?{name:e,...n}:n):[]}function Oe(t){return or(t?.tools).filter(e=>e&&typeof e=="object"&&!Array.isArray(e)).map(e=>({referenceKey:e.workflowReferenceKey??e.workflowId,toolName:e.name,triggerNodeName:e.triggerNodeName})).filter(e=>typeof e.referenceKey=="string"&&!e.referenceKey.startsWith("wfl_"))}function Ne(t){return Oe(t).map(e=>e.referenceKey)}function ir(t){return typeof t?.type=="string"&&t.type!=="manualTrigger"&&t.type.endsWith("Trigger")}function cr(t,e){return t.get(e)??t.get(M(e))}function qt(t){let e=new Set,n=[];for(let r of t.values())e.has(r.id)||(e.add(r.id),n.push(r));return n}function Jt(t,e){let n=typeof t?.id=="string"?t.id:"unknown";if(Oe(t).length>0)return {id:n,definition:t};let r=n==="unknown"?void 0:cr(e,n);return r?{id:n,definition:r.definition}:t&&typeof t=="object"&&!Array.isArray(t)?{id:n,definition:t}:null}function It(t,e){let n=[t];for(let r of t.definition?.secondaryAgents??[]){let o=Jt(r,e);o&&n.push(o);}return n}function Ze(t){let e=new Map,n=new Map;for(let a of t){let c=a.definition?.id;typeof c=="string"&&(a.type==="agent"?(e.set(c,{id:c,definition:a.definition}),e.set(M(c),{id:c,definition:a.definition})):a.type==="workflow"&&(n.set(c,a.definition),n.set(M(c),a.definition)));}let r=new Set;for(let a of qt(e))for(let c of It(a,e))for(let i of Ne(c.definition))r.add(M(i));let o=new Set;for(let a of r){let c=n.get(a);if(c)for(let i of ke(c))o.add(M(i));}for(let a of o){let c=e.get(a);if(c){if(Oe(c.definition).length>0)return `agent '${c.id}' cannot define workflow tools when invoked by an agent workflow tool.`;for(let i of c.definition?.secondaryAgents??[]){let s=Jt(i,e);if(s&&Oe(s.definition).length>0)return `secondary agent '${s.id}' referenced by agent '${c.id}' cannot define workflow tools when '${c.id}' is invoked by an agent workflow tool.`}}}return null}function Qe(t){let e=new Map,n=new Map;for(let o of t){let a=o.definition?.id;typeof a=="string"&&(o.type==="agent"?(e.set(a,{id:a,definition:o.definition}),e.set(M(a),{id:a,definition:o.definition})):o.type==="workflow"&&(n.set(a,o.definition),n.set(M(a),o.definition)));}let r=new Set;for(let o of n.values())for(let a of ke(o))r.add(M(a));for(let o of r){let a=e.get(o);if(!a)continue;let c=It(a,e);for(let i of c)for(let s of Oe(i.definition)){let d=n.get(s.referenceKey)??n.get(M(s.referenceKey));if(!(!d||ke(d).length===0))return `workflow tool '${s.toolName??"unknown"}' on agent '${i.id}' cannot reference workflow '${s.referenceKey}' because '${a.id}' is invoked by a workflow and the target workflow contains an agent node.`}}return null}function et(t){let e=new Map,n=new Map;for(let r of t){let o=r.definition?.id;typeof o=="string"&&(r.type==="agent"?(e.set(o,{id:o,definition:r.definition}),e.set(M(o),{id:o,definition:r.definition})):r.type==="workflow"&&(n.set(o,r.definition),n.set(M(o),r.definition)));}for(let r of qt(e))for(let o of It(r,e))for(let a of Oe(o.definition)){let c=n.get(a.referenceKey)??n.get(M(a.referenceKey));if(!c)continue;let i=Array.isArray(c.nodes)?c.nodes:[],s=i.find(ir);if(s)return `workflow tool '${a.toolName??"unknown"}' on agent '${o.id}' references workflow '${a.referenceKey}' with non-manual trigger '${s.name??s.type}'.`;if(a.triggerNodeName){if(i.find(k=>k?.name===a.triggerNodeName)?.type==="manualTrigger")continue;return `workflow tool '${a.toolName??"unknown"}' on agent '${o.id}' must use a manual trigger in workflow '${a.referenceKey}'.`}let d=i.filter(l=>l?.type==="manualTrigger");if(d.length!==1)return d.length===0?`workflow tool '${a.toolName??"unknown"}' on agent '${o.id}' references workflow '${a.referenceKey}' without a manual trigger.`:`workflow tool '${a.toolName??"unknown"}' on agent '${o.id}' must specify triggerNodeName because workflow '${a.referenceKey}' has multiple manual triggers.`}return null}function tt(t){let e=[],n=(r,o)=>{let a=o&&typeof o=="object"&&!Array.isArray(o)?o.credentialId:void 0;(typeof a!="string"||!a.trim())&&e.push(`agent '${r}' model must include a credentialId \u2014 use model: { provider, modelId, credentialId }.`);};t?.modelConfig!==void 0&&t?.modelConfig!==null&&n(t?.id,t.modelConfig);for(let r of t?.secondaryAgents??[])r?.modelConfig!==void 0&&r?.modelConfig!==null&&n(r?.id??t?.id,r.modelConfig);return e}function nt(t){let e=new Map;for(let o of t){let a=o.definition?.id;if(!a)continue;let c=o.type==="agent"?Ne(o.definition).map(i=>`workflow:${i}`):o.type==="workflow"?ke(o.definition).map(i=>`agent:${i}`):[];e.set(`${o.type}:${a}`,c);}let n=null;function r(o,a){if(!n)for(let c of e.get(o)??[]){if(!e.has(c))continue;let i=[...a,c];if(a.length>=3){n=`Unsupported nested SDK reference chain: ${i.join(" -> ")}. Only workflow -> agent -> workflow or agent -> workflow -> agent is supported.`;return}r(c,i);}}for(let o of e.keys())r(o,[o]);return n}function M(t){return t.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-").slice(0,63)}function St(t){let e=process.cwd(),n=new Map,r=null,o=false,a=false,c=false;async function i(){if(o){a=true;return}o=true;try{c&&(c=!1,n.clear()),await d();}catch(f){b$1.error("Evaluation failed",{error:f.message});}finally{o=false,a&&(a=false,i());}}function s(f,w,m){t.onLog?t.onLog(w,m):(m==="error"?process.stderr:process.stdout).write(`${f} ${w}
5
- `);}async function d(){let f=await je(e),w;try{w=await We(f);}catch(g){s(x,`Evaluation failed, skipping this sync cycle: ${g.message}`,"error");return}let m=new Map,T=new Set,I=new Set(w.map(g=>g.definition.id).filter(Boolean)),x$1=new Set(w.filter(g=>g.type==="surface").flatMap(g=>{let b=g.definition.id;return typeof b=="string"?[b,M(b)]:[]})),J=false,H=false;for(let g of w){let b=g.definition.id;if(!b){s(y,`Skipping ${g.type}: referenced resources require an explicit id.`,"warn");continue}let O=typeof b=="string"?M(b):String(b);if(!O){s(y,`Skipping definition: could not derive a valid slug from "${b}". Add an explicit id field.`,"warn");continue}if(g.type==="surface"){let j=ze(g.definition);if(j.length){s(x,`Invalid surface '${O}': ${j.join("; ")}.`,"error");return}}let L=`${g.type}:${O}`;if(T.has(L)){s(x,`Duplicate slug '${O}' detected in ${g.type}s. Fix all collisions before syncing.`,"error");return}T.add(L);let ee=sr(g.definition);m.set(L,{slug:O,type:g.type,definition:g.definition,hash:ee});let se=g.type==="agent"?Ne(g.definition):[],fe=g.type==="workflow"?ke(g.definition):[],me=g.type==="workflow"?Xe(g.definition):[];if(g.type==="agent"){for(let j of tt(g.definition))s(x,j,"error"),H=true;for(let j of g.definition.secondaryAgents||[]){let $=j?.id,le=!!(j?.systemPrompt||j?.modelConfig);if(typeof $=="string"&&!le&&!I.has($)){let ae=`Dangling ref: agent '${O}' references secondary agent '${$}' which is not defined locally.`;s(x,ae,"error"),J=true,t.onValidationError?.({resourceType:"agent",slug:O,missingReferenceId:$,message:ae});}}}for(let j of se)if(!I.has(j)){let $=`Dangling ref: agent '${O}' references workflow '${j}' which is not defined locally.`;s(x,$,"error"),J=true,t.onValidationError?.({resourceType:"agent",slug:O,missingReferenceId:j,message:$});}for(let j of fe)if(!I.has(j)){let $=`Dangling ref: workflow '${O}' references agent '${j}' which is not defined locally.`;s(x,$,"error"),J=true,t.onValidationError?.({resourceType:"workflow",slug:O,missingReferenceId:j,message:$});}for(let j of me)if(j.version===void 0&&!x$1.has(j.surfaceKey)){let $=`Dangling ref: workflow '${O}' references local surface '${j.surfaceKey}' which is not defined locally. Pin a published version or define the surface.`;s(x,$,"error"),J=true,t.onValidationError?.({resourceType:"workflow",slug:O,missingReferenceId:j.surfaceKey,message:$});}}if(J){s(x,"Fix all dangling references before syncing.","error");return}if(H){s(x,"Fix the model configuration before syncing.","error");return}let D=Ze(w);if(D){s(x,D,"error"),s(x,"Fix the secondary agent tools before syncing.","error");return}let R=et(w);if(R){s(x,R,"error"),s(x,"Fix the workflow tool trigger before syncing.","error");return}let N=Qe(w);if(N){s(x,N,"error"),s(x,"Fix the workflow tool target before syncing.","error");return}let y$1=nt(w);if(y$1){s(x,y$1,"error"),s(x,"Fix the reference chain before syncing.","error");return}let S=0;for(let[g,{hash:b,type:O}]of n.entries())if(!m.has(g)){let L=g.slice(g.indexOf(":")+1),ee=O==="agent"?[...m.values()].find(se=>se.hash===b&&se.type===O):void 0;ee?s(y,`Looks like '${L}' was renamed to '${ee.slug}'.
6
- Run: culvii rename ${L} ${ee.slug} --resource-type ${O}`,"warn"):(t.onOrphan(L,O),n.delete(g),S++);}let h=[...m.entries()].sort(([,g],[,b])=>+(b.type==="surface")-+(g.type==="surface"));for(let[g,{slug:b,type:O,definition:L,hash:ee}]of h){let se=n.get(g);(!se||se.hash!==ee)&&(n.set(g,{hash:ee,type:O}),t.onSync({type:O,slug:b,definition:L,configHash:ee}),S++);}S===0&&s(z,"No changes to sync.","info");}let l=rr.watch(e,{ignored:f=>f.includes("node_modules")||f.includes("/dist/")||f.includes("/.git/"),ignoreInitial:true,persistent:true});l.on("all",(f,w)=>{w.endsWith(".ts")&&(r&&clearTimeout(r),r=setTimeout(()=>{i();},500));});let k=false;return {close:()=>l.close(),triggerFullSync:()=>{if(k){i();return}if(k=true,o){c=true,a=true;return}n.clear(),i();}}}function lr(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}var dr="https://console.culvii.com/";function Le(t,e){return `${dr}${t}/development/${e}/workflows`}function zt(){let t=new Date,e=n=>String(n).padStart(2,"0");return `${e(t.getHours())}:${e(t.getMinutes())}:${e(t.getSeconds())}`}async function ur(){let{DevView:t}=await import('./DevView-GPKSSOLA.js'),e$1=null;function n(){let[r,o]=ve.useState({type:"provisioning",message:"Starting dev server\u2026"});return ve.useEffect(()=>(e$1=o,()=>{e$1=null;}),[]),ve.createElement(t,{state:r})}await G(Promise.resolve(ve.createElement(n))),await K(async r$1=>{let o=new a$3,a=await o.read({exitOnError:!1}),c=Date.now();if(!a.active||!a.contexts[a.active]){e$1?.({type:"error",message:"No active context. Run culvii login first."});let{userId:y,tenantId:S}=await d();y?await f(a$1.DEV_FAILED,y,S,{error_class:"NoActiveContext",workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:"NoActiveContext",workspace:s$1?.workspace_slug,env:s$1?.environment}),await j();return}let{apiUrl:i,context:s$1}=await r({env:"dev"}),d$1=s(s$1),l=s$1.workspace_id,k=s$1.workspace_slug;e$1?.({type:"provisioning",message:"Provisioning dev workspace\u2026"});try{let y=await W(`${i}/api/workspaces`,r$1,{method:"POST",headers:{...d$1,"Content-Type":"application/json"},body:JSON.stringify({name:`dev-${s$1.user_id.slice(0,12)}`,slug:`dev-${s$1.user_id.slice(0,12)}`,tenantId:s$1.tenant_id})});if(!y.ok){let h=await V(y);e$1?.({type:"error",message:`Failed to auto-provision workspace: ${h}`});let{userId:g,tenantId:b}=await d();g?await f(a$1.DEV_FAILED,g,b,{error_class:"WorkspaceProvisionError",workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:"WorkspaceProvisionError",workspace:s$1?.workspace_slug,env:s$1?.environment}),await j();return}let S=await y.json();await o.withLock(async()=>{a=await o.read();let h=a.contexts[a.active];h.workspace_ids={...h.workspace_ids||{},dev:S?.data?.workspaceId},h.workspace_slugs={...h.workspace_slugs||{},dev:S?.data?.workspaceSlug},h.workspace_id=S?.data?.workspaceId,h.workspace_slug=S?.data?.workspaceSlug,await o.write(a);}),s$1={...a.contexts[a.active],environment:"dev"},l=s$1.workspace_id,k=s$1.workspace_slug;}catch(y){e$1?.({type:"error",message:`Failed to auto-provision workspace: ${y.message}`});let{userId:S,tenantId:h}=await d();S?await f(a$1.DEV_FAILED,S,h,{error_class:y?.constructor?.name,workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:y?.constructor?.name,workspace:s$1?.workspace_slug,env:s$1?.environment}),await j();return}let{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.DEV_STARTED,f$1,w,{workspace:s$1.workspace_slug,env:s$1.environment}):await e(a$1.DEV_STARTED,{workspace:s$1.workspace_slug,env:s$1.environment});let m=[];function T(y){return {Authorization:`Bearer ${y}`,...d$1}}let I=r$1;async function x(){let y=await gt();return y&&(I=y),T(I)}let J=i.replace(/^http/,"ws")+"/api/dev/sync?workspaceId="+encodeURIComponent(l),H,D=wt(J,x,{onOpen:()=>{e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,l)}),H?.triggerFullSync();},onAck:(y,S,h)=>{let g={type:h?"orphaned":"synced",message:`${h?"orphaned":"synced"} ${y}`,timestamp:zt()};m.push(g),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,l)});},onValidationErrorAck:()=>{},onWarning:(y,S)=>{let h={type:"warning",message:S};m.push(h),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,l)});},onError:(y,S)=>{let h={type:"error",message:`Sync failed for ${y}: ${S}`};m.push(h),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,l)});},onFatal:async y=>{clearInterval(N);let S=`Fatal error: ${y}. Shutting down...`;e$1?.({type:"error",message:S});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEV_FAILED,h,g,{error_class:"FatalWebSocketError",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:"FatalWebSocketError",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}),H?.close(),D?.close(),be(1,S);},onAuthFailure:async()=>{clearInterval(N);let y="Your session was rejected by the server. Run `culvii login` to re-authenticate. Shutting down...";e$1?.({type:"error",message:y});let{userId:S,tenantId:h}=await d();S?await f(a$1.DEV_FAILED,S,h,{error_class:"ApiKeyRejected",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:"ApiKeyRejected",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}),H?.close(),D?.close(),be(1,y);}});H=St({workspaceId:l,onSync:y=>{D.send({type:"sync",slug:y.slug,resourceType:y.type,definition:y.definition,workspaceId:l});},onOrphan:(y,S)=>{D.send({type:"orphan",slug:y,resourceType:S,workspaceId:l});},onValidationError:({resourceType:y,slug:S,missingReferenceId:h,message:g})=>{D.send({type:"validation-error",slug:S,resourceType:y,workspaceId:l,missingReferenceId:h,message:g});},onLog:(y,S)=>{let h={type:S==="error"?"error":S==="warn"?"warning":"info",message:y};m.push(h),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,l)});}});let R=3e3*1e3,N=setInterval(()=>{D.reconnectNow();},R);process.on("SIGINT",async()=>{clearInterval(N),D.close(),H.close(),e$1?.({type:"disconnected"});let{userId:y,tenantId:S}=await d();y?await f(a$1.DEV_STOPPED,y,S,{duration_ms:Date.now()-c,workspace:s$1.workspace_slug,env:s$1.environment}):await e(a$1.DEV_STOPPED,{duration_ms:Date.now()-c,workspace:s$1.workspace_slug,env:s$1.environment}),await j(),process.exit(0);});});}function Xt(t){t.command("dev").description("Start the development server and file watcher").action(async()=>{if(lr()){await ur();return}await K(async e$1=>{let n=new a$3,r$1=await n.read({exitOnError:!1});if(!r$1.active||!r$1.contexts[r$1.active]){console.error("No active context. Run culvii login first.");let{userId:D,tenantId:R}=await d();D?await f(a$1.DEV_FAILED,D,R,{error_class:"NoActiveContext",workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:"NoActiveContext",workspace:a?.workspace_slug,env:a?.environment}),await j(),process.exit(1);}let{apiUrl:o,context:a}=await r({env:"dev"}),c=s(a),i=Date.now(),s$1=a.workspace_id,d$1=a.workspace_slug;try{let D=await W(`${o}/api/workspaces`,e$1,{method:"POST",headers:{...c,"Content-Type":"application/json"},body:JSON.stringify({name:`dev-${a.user_id.slice(0,12)}`,slug:`dev-${a.user_id.slice(0,12)}`,tenantId:a.tenant_id})});if(!D.ok){let N=await V(D);console.error(`Failed to auto-provision workspace: ${N}`);let{userId:y,tenantId:S}=await d();y?await f(a$1.DEV_FAILED,y,S,{error_class:"WorkspaceProvisionError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:"WorkspaceProvisionError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j(),process.exit(1);}let R=await D.json();await n.withLock(async()=>{r$1=await n.read();let N=r$1.contexts[r$1.active];N.workspace_ids={...N.workspace_ids||{},dev:R?.data?.workspaceId},N.workspace_slugs={...N.workspace_slugs||{},dev:R?.data?.workspaceSlug},N.workspace_id=R?.data?.workspaceId,N.workspace_slug=R?.data?.workspaceSlug,await n.write(r$1);}),a={...r$1.contexts[r$1.active],environment:"dev"},s$1=a.workspace_id,d$1=a.workspace_slug;}catch(D){console.error(`Failed to auto-provision workspace: ${D.message}`);let{userId:R,tenantId:N}=await d();R?await f(a$1.DEV_FAILED,R,N,{error_class:D?.constructor?.name,workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:D?.constructor?.name,workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j(),process.exit(1);}console.log(`tenant: ${a.tenant_slug} | workspace: ${d$1||"unknown"} | env: dev`);let{userId:l,tenantId:k}=await d();l?await f(a$1.DEV_STARTED,l,k,{workspace:a.workspace_slug,env:a.environment}):await e(a$1.DEV_STARTED,{workspace:a.workspace_slug,env:a.environment});function f$1(D){return {Authorization:`Bearer ${D}`,...c}}let w$1=e$1;async function m(){let D=await gt();return D&&(w$1=D),f$1(w$1)}let T=o.replace(/^http/,"ws")+"/api/dev/sync?workspaceId="+encodeURIComponent(s$1),I,x$1=wt(T,m,{onOpen:()=>{console.log("Watching ./..."),console.log(`You can access your dev session here: ${Le(a.tenant_slug,s$1)}`),I?.triggerFullSync();},onAck:(D,R,N)=>{let y=zt();console.log(N?`${w} [${y}] orphaned ${D}`:`${w} [${y}] synced ${D}`);},onValidationErrorAck:()=>{},onWarning:(D,R)=>{console.log(`${y} ${R}`);},onError:(D,R)=>{console.log(`${y} Sync failed for ${D}: ${R}`);},onFatal:async D=>{clearInterval(H),console.error(`Fatal error: ${D}. Shutting down...`);let{userId:R,tenantId:N}=await d();R?await f(a$1.DEV_FAILED,R,N,{error_class:"FatalWebSocketError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:"FatalWebSocketError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j(),I?.close(),x$1?.close(),process.exit(1);},onAuthFailure:async()=>{clearInterval(H),console.error(`${x} Your session was rejected by the server. Run \`culvii login\` to re-authenticate. Shutting down...`);let{userId:D,tenantId:R}=await d();D?await f(a$1.DEV_FAILED,D,R,{error_class:"ApiKeyRejected",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:"ApiKeyRejected",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j(),I?.close(),x$1?.close(),process.exit(1);}});I=St({workspaceId:s$1,onSync:D=>{let R={type:"sync",slug:D.slug,resourceType:D.type,definition:D.definition,workspaceId:s$1};x$1.send(R);},onOrphan:(D,R)=>{let N={type:"orphan",slug:D,resourceType:R,workspaceId:s$1};x$1.send(N);},onValidationError:({resourceType:D,slug:R,missingReferenceId:N,message:y})=>{let S={type:"validation-error",slug:R,resourceType:D,workspaceId:s$1,missingReferenceId:N,message:y};x$1.send(S);}});let J=3e3*1e3,H=setInterval(()=>{x$1.reconnectNow();},J);process.on("SIGINT",async()=>{clearInterval(H),x$1.close(),I.close(),console.log("Disconnected. Draft state discarded.");let{userId:D,tenantId:R}=await d();D?await f(a$1.DEV_STOPPED,D,R,{duration_ms:Date.now()-i,workspace:a.workspace_slug,env:a.environment}):await e(a$1.DEV_STOPPED,{duration_ms:Date.now()-i,workspace:a.workspace_slug,env:a.environment}),await j(),process.exit(0);});});});}function yr(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function Tt(t){if(Array.isArray(t))return t.map(Tt);if(t!==null&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=Tt(t[n]);return e}return t}function gr(t){if(!t||typeof t!="object")return t;let e={...t};return Array.isArray(e.nodes)&&(e.nodes=e.nodes.map(({id:n,...r})=>r)),e}function Qt(t){return createHash("sha256").update(JSON.stringify(Tt(gr(t)))).digest("hex")}function mr(t){return new Promise(e=>{let n=fr.createInterface({input:process.stdin,output:process.stdout});n.question(t,r=>{n.close(),e(r.toLowerCase()==="y"||r.toLowerCase()==="yes");});})}function wr(t){let e=t.versionCount??1,n=t.activeVersion??t.previousVersion;return ` - ${t.slug}: deletes all ${e} ${e===1?"version":"versions"}${n?`; active is v${n}`:""}`}function Zt(t){let e=t.executions??0,n=t.activeExecutions??0,r=t.activeVersion??t.previousVersion;return `${e} total, active${r?` v${r}`:""}: ${n} executions`}async function vr(t){let{DeployView:e$1}=await import('./DeployView-D4UEXMDJ.js'),n=null,r$1=null;function o(){let[a,c]=ve.useState({type:"planning"});return ve.useEffect(()=>(n=c,()=>{n=null;}),[]),ve.createElement(e$1,{state:a,onConfirm:i=>r$1?.(i)})}await G(Promise.resolve(ve.createElement(o))),await K(async a=>{if(t.env==="dev"){n?.({type:"error",message:"Use culvii dev for local iteration"}),await j();return}if(t.env!=="sandbox"&&t.env!=="prod"){n?.({type:"error",message:"Environment must be sandbox or prod"}),await j();return}let{apiUrl:c,context:i}=await r({env:t.env}),s$1=s(i);if(!t.workspaceSlug){n?.({type:"error",message:"--workspace-slug <slug> is required for deploy",detail:"Run `culvii workspace list` to see available workspaces."});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_FAILED,h,g,{error_class:"NoWorkspace",workspace:t.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{error_class:"NoWorkspace",workspace:t.workspaceSlug}),await j();return}let d$1=await W(`${c}/api/workspaces?tenantId=${i.tenant_id}`,a,{headers:s$1});if(!d$1.ok){n?.({type:"error",message:"Failed to fetch workspaces",detail:await V(d$1)});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_FAILED,h,g,{env:t.env,error_class:"WorkspaceFetchError",workspace:t.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{env:t.env,error_class:"WorkspaceFetchError",workspace:t.workspaceSlug}),await j();return}let f$1=((await d$1.json())?.data?.workspaces||[]).find(h=>h.slug===t.workspaceSlug);if(!f$1){n?.({type:"error",message:`Workspace not found: ${t.workspaceSlug}`});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_FAILED,h,g,{env:t.env,workspace:t.workspaceSlug,error_class:"WorkspaceNotFound"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:t.workspaceSlug,error_class:"WorkspaceNotFound"}),await j();return}let w=f$1.id,m=async h=>{n?.({type:"error",message:h});let{userId:g,tenantId:b}=await d();g?await f(a$1.DEPLOY_FAILED,g,b,{env:t.env,workspace:f$1?.slug,error_class:"ValidationError"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:"ValidationError"}),await j();},T=process.cwd(),I=await je(T),x;try{x=(await We(I)).sort((h,g)=>+(g.type==="surface")-+(h.type==="surface"));}catch(h){await m(`Deploy failed: ${h.message}`);return}let J=[],H=new Set,D=new Set(x.filter(h=>h.type==="surface").map(h=>M(h.definition.id??"")).filter(Boolean));for(let h of x){let g=h.definition.id;g&&H.add(typeof g=="string"?M(g):String(g));}for(let h of x){let g=h.definition.id;if(!g){n?.({type:"error",message:`Deploy failed: ${h.type} is missing an explicit id.`}),await j();return}let b=typeof g=="string"?M(g):String(g);if(h.type==="surface"){let O=ze(h.definition);if(O.length)return m(`Deploy failed: surface '${b}' ${O.join("; ")}.`)}if(h.type==="agent"){for(let L of tt(h.definition))return m(`Deploy failed: ${L}`);let O=h.definition.secondaryAgents||[];for(let L of O){let ee=L.id,se=!!(L?.systemPrompt||L?.modelConfig);if(ee&&!se&&!H.has(ee))return m(`Deploy failed: agent '${b}' references secondary agent '${ee}' which is not defined.`)}for(let L of Ne(h.definition))if(!H.has(M(L)))return m(`Deploy failed: agent '${b}' references workflow '${L}' which is not defined.`)}if(h.type==="workflow"){for(let O of ke(h.definition))if(!H.has(M(O)))return m(`Deploy failed: workflow '${b}' references agent '${O}' which is not defined.`);for(let O of Xe(h.definition))if(O.version===void 0&&!D.has(M(O.surfaceKey)))return m(`Deploy failed: workflow '${b}' references local surface '${O.surfaceKey}' which is not defined. Pin a published version or define the surface.`)}J.push({type:h.type,slug:b,definition:h.definition,configHash:Qt(h.definition)});}let R=Ze(x);if(R)return m(`Deploy failed: ${R}`);let N=et(x);if(N)return m(`Deploy failed: ${N}`);let y=Qe(x);if(y)return m(`Deploy failed: ${y}`);let S=nt(x);if(S)return m(`Deploy failed: ${S}`);try{let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_STARTED,h,g,{env:t.env,workspace:f$1.slug}):await e(a$1.DEPLOY_STARTED,{env:t.env,workspace:f$1.slug});let b=await W(`${c}/api/workspaces/${w}/deploys/plan`,a,{method:"POST",headers:{...s$1,"Content-Type":"application/json"},body:JSON.stringify({environment:t.env,definitions:J})});if(!b.ok){let ae=await V(b);n?.({type:"error",message:"Failed to plan deploy",detail:ae});let{userId:_e,tenantId:ft}=await d();_e?await f(a$1.DEPLOY_FAILED,_e,ft,{env:t.env,workspace:f$1?.slug,error_class:"PlanError"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:"PlanError"}),await j();return}let O=await b.json(),L=O.plan,ee=O.planToken;if(!((L.created||[]).length>0||(L.versioned||[]).length>0||(L.destroyed||[]).length>0)){n?.({type:"no_changes"}),await j();return}if(!await new Promise(ae=>{r$1=ae,n?.({type:"confirming",plan:{created:L.created||[],versioned:L.versioned||[],destroyed:L.destroyed||[]},env:t.env});})){n?.({type:"aborted",reason:"user_cancelled"});let{userId:ae,tenantId:_e}=await d();ae?await f(a$1.DEPLOY_ABORTED,ae,_e,{env:t.env,workspace:f$1?.slug,reason:"user_cancelled"}):await e(a$1.DEPLOY_ABORTED,{env:t.env,workspace:f$1?.slug,reason:"user_cancelled"}),await j();return}n?.({type:"applying"});let me=await W(`${c}/api/workspaces/${w}/deploys/apply`,a,{method:"POST",headers:{...s$1,"Content-Type":"application/json"},body:JSON.stringify({planToken:ee})});if(!me.ok){let ae=await V(me);n?.({type:"error",message:"Failed to apply deploy",detail:ae});let{userId:_e,tenantId:ft}=await d();_e?await f(a$1.DEPLOY_FAILED,_e,ft,{env:t.env,workspace:f$1?.slug,error_class:"ApplyError"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:"ApplyError"}),await j();return}let j$1=await me.json();n?.({type:"success",env:t.env,created:(j$1.created||[]).length,versioned:(j$1.versioned||[]).length,destroyed:(j$1.destroyed||[]).length,createdItems:j$1.created||[],versionedItems:j$1.versioned||[],destroyedItems:j$1.destroyed||[]});let{userId:$,tenantId:le}=await d();$?await f(a$1.DEPLOY_SUCCEEDED,$,le,{env:t.env,workspace:f$1.slug,created:L.created.length,versioned:L.versioned.length,destroyed:L.destroyed.length}):await e(a$1.DEPLOY_SUCCEEDED,{env:t.env,workspace:f$1.slug,created:L.created.length,versioned:L.versioned.length,destroyed:L.destroyed.length});}catch(h){n?.({type:"error",message:"Unexpected error",detail:h.message});let{userId:g,tenantId:b}=await d();g?await f(a$1.DEPLOY_FAILED,g,b,{env:t.env,workspace:f$1?.slug,error_class:h?.constructor?.name}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:h?.constructor?.name}),await j();}});}function en(t){t.command("deploy").description("Deploy an agent").requiredOption("--env <env>","Environment (sandbox or prod)").option("--workspace-slug <slug>","Target workspace slug (overrides config)").action(async e$1=>{if(yr()){await vr(e$1);return}await K(async n=>{e$1.env==="dev"&&(console.log("Use culvii dev for local iteration"),await j(),process.exit(1)),e$1.env!=="sandbox"&&e$1.env!=="prod"&&(console.error("Environment must be sandbox or prod"),await j(),process.exit(1));let{apiUrl:r$1,context:o}=await r({env:e$1.env}),a=s(o);if(!e$1.workspaceSlug){console.error("Error: --workspace-slug <slug> is required for deploy. Run `culvii workspace list` to see available workspaces.");let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_FAILED,y,S,{error_class:"NoWorkspace",workspace:e$1.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{error_class:"NoWorkspace",workspace:e$1.workspaceSlug}),await j(),process.exit(1);}let c=null,i=await W(`${r$1}/api/workspaces?tenantId=${o.tenant_id}`,n,{headers:a});if(!i.ok){console.error(`Failed to fetch workspaces: ${await V(i)}`);let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_FAILED,y,S,{env:e$1.env,error_class:"WorkspaceFetchError",workspace:e$1.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,error_class:"WorkspaceFetchError",workspace:e$1.workspaceSlug}),await j(),process.exit(1);}let l=((await i.json())?.data?.workspaces||[]).find(y=>y.slug===e$1.workspaceSlug);if(!l){console.error("Workspace not found: "+e$1.workspaceSlug);let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_FAILED,y,S,{env:e$1.env,workspace:e$1.workspaceSlug,error_class:"WorkspaceNotFound"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:e$1.workspaceSlug,error_class:"WorkspaceNotFound"}),await j(),process.exit(1);}c=l.id;let k=e$1.workspaceSlug;console.log(`tenant: ${o.tenant_slug} | workspace: ${k} | env: ${e$1.env}`);let f$1=async y=>{console.error(y);let{userId:S,tenantId:h}=await d();S?await f(a$1.DEPLOY_FAILED,S,h,{env:e$1.env,workspace:l?.slug,error_class:"ValidationError"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:l?.slug,error_class:"ValidationError"}),await j(),process.exit(1);},w$1=process.cwd(),m=await je(w$1),T;try{T=(await We(m)).sort((y,S)=>+(S.type==="surface")-+(y.type==="surface"));}catch(y){await f$1(`Deploy failed: ${y.message}`);return}let I=[],x=new Set,J=new Set(T.filter(y=>y.type==="surface").map(y=>M(y.definition.id??"")).filter(Boolean));for(let y of T){let S=y.definition.id;S&&x.add(typeof S=="string"?M(S):String(S));}for(let y of T){let S=y.definition.id;S||(console.error(`Deploy failed: ${y.type} is missing an explicit id.`),await j(),process.exit(1));let h=typeof S=="string"?M(S):String(S);if(y.type==="surface"){let g=ze(y.definition);g.length&&await f$1(`Deploy failed: surface '${h}' ${g.join("; ")}.`);}if(y.type==="agent"){for(let b of tt(y.definition))await f$1(`Deploy failed: ${b}`);let g=y.definition.secondaryAgents||[];for(let b of g){let O=b.id,L=!!(b?.systemPrompt||b?.modelConfig);O&&!L&&!x.has(O)&&await f$1(`Deploy failed: agent '${h}' references secondary agent '${O}' which is not defined in this workspace. Define '${O}' before deploying.`);}for(let b of Ne(y.definition))x.has(M(b))||await f$1(`Deploy failed: agent '${h}' references workflow '${b}' which is not defined in this workspace. Define '${b}' before deploying.`);}if(y.type==="workflow"){for(let g of ke(y.definition))x.has(M(g))||await f$1(`Deploy failed: workflow '${h}' references agent '${g}' which is not defined in this workspace. Define '${g}' before deploying.`);for(let g of Xe(y.definition))g.version===void 0&&!J.has(M(g.surfaceKey))&&await f$1(`Deploy failed: workflow '${h}' references local surface '${g.surfaceKey}' which is not defined. Pin a published version or define the surface.`);}I.push({type:y.type,slug:h,definition:y.definition,configHash:Qt(y.definition)});}let H=Ze(T);H&&await f$1(`Deploy failed: ${H}`);let D=et(T);D&&await f$1(`Deploy failed: ${D}`);let R=Qe(T);R&&await f$1(`Deploy failed: ${R}`);let N=nt(T);N&&await f$1(`Deploy failed: ${N}`);try{let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_STARTED,y,S,{env:e$1.env,workspace:l.slug}):await e(a$1.DEPLOY_STARTED,{env:e$1.env,workspace:l.slug});let h=await W(`${r$1}/api/workspaces/${c}/deploys/plan`,n,{method:"POST",headers:{...a,"Content-Type":"application/json"},body:JSON.stringify({environment:e$1.env,definitions:I})});if(!h.ok){let $=await V(h);console.error(`Error: Failed to plan deploy. ${$}`);let{userId:le,tenantId:ae}=await d();le?await f(a$1.DEPLOY_FAILED,le,ae,{env:e$1.env,workspace:l?.slug,error_class:"PlanError"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:l?.slug,error_class:"PlanError"}),await j(),process.exit(1);}let g=await h.json(),b=g.plan,O=g.planToken;(b.created||[]).length>0||(b.versioned||[]).length>0||(b.destroyed||[]).length>0||(console.log("Nothing to deploy. All resources are up to date."),await j(),process.exit(0)),console.log(`Plan for ${e$1.env}:`);for(let $ of b.created||[])console.log(` + ${$.slug} CREATED`);for(let $ of b.versioned||[])console.log(` ~ ${$.slug} VERSIONED (${Zt($)})`);for(let $ of b.destroyed||[])console.log(` - ${$.slug} DELETE (${Zt($)})`),console.log(wr($));if(!await mr(`Deploy to ${e$1.env}? [y/N] `)){console.log("Deployment cancelled.");let{userId:$,tenantId:le}=await d();$?await f(a$1.DEPLOY_ABORTED,$,le,{env:e$1.env,workspace:l?.slug,reason:"user_cancelled"}):await e(a$1.DEPLOY_ABORTED,{env:e$1.env,workspace:l?.slug,reason:"user_cancelled"}),await j(),process.exit(0);}let se=await W(`${r$1}/api/workspaces/${c}/deploys/apply`,n,{method:"POST",headers:{...a,"Content-Type":"application/json"},body:JSON.stringify({planToken:O})});if(!se.ok){let $=await V(se);console.error(`Error: Failed to apply deploy. ${$}`);let{userId:le,tenantId:ae}=await d();le?await f(a$1.DEPLOY_FAILED,le,ae,{env:e$1.env,workspace:l?.slug,error_class:"ApplyError"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:l?.slug,error_class:"ApplyError"}),await j(),process.exit(1);}let fe=await se.json();console.log(`${w} Deployed to ${e$1.env}`),console.log(` Created: ${(fe.created||[]).length} resource(s)`);for(let $ of fe.created||[])console.log(` + ${$.slug||$.referenceKey||$.id}`);console.log(` Versioned: ${(fe.versioned||[]).length} resource(s)`);for(let $ of fe.versioned||[])console.log(` ~ ${$.slug||$.referenceKey||$.id}`);console.log(` Destroyed: ${(fe.destroyed||[]).length} resource(s)`);for(let $ of fe.destroyed||[])console.log(` - ${$.slug||$.referenceKey||$.id}`);let{userId:me,tenantId:j$1}=await d();me?await f(a$1.DEPLOY_SUCCEEDED,me,j$1,{env:e$1.env,workspace:l.slug,created:b.created.length,versioned:b.versioned.length,destroyed:b.destroyed.length}):await e(a$1.DEPLOY_SUCCEEDED,{env:e$1.env,workspace:l.slug,created:b.created.length,versioned:b.versioned.length,destroyed:b.destroyed.length});}catch(y){console.error(`Error: Network or unexpected error: ${y.message}`);let{userId:S,tenantId:h}=await d();S?await f(a$1.DEPLOY_FAILED,S,h,{env:e$1.env,workspace:l?.slug,error_class:y?.constructor?.name}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:l?.slug,error_class:y?.constructor?.name}),await j(),process.exit(1);}});});}function Er(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function tn(t){t.command("rename").description("Rename a resource").argument("<old-slug>","Current slug").argument("<new-slug>","New slug").requiredOption("--resource-type <type>","Type of resource (agent)").option("--env <env>","Target environment (sandbox or prod)").option("--workspace-slug <slug>","Target workspace slug (overrides config)").action(async(e$1,n,r$1)=>{if(Er()){let i=function(){let[s,d]=ve.useState({type:"loading"});return ve.useEffect(()=>(c.current=d,()=>{c.current=null;}),[]),ve.createElement(a,{state:s})};let{RenameView:a}=await import('./RenameView-3BABATL6.js'),c={current:null};if(await G(Promise.resolve(ve.createElement(i))),r$1.resourceType!=="agent"){c.current?.({type:"error",message:"Invalid resource type",detail:`'${r$1.resourceType}' \u2014 must be: agent`}),await e(a$1.RENAME_FAILED,{error_class:"InvalidResourceType",resourceType:r$1.resourceType,env:r$1.env,workspace:r$1.workspaceSlug}),await j();return}await K(async s$1=>{let{apiUrl:d$1,context:l}=await r({env:r$1.env}),k=s(l),{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.RENAME_STARTED,f$1,w,{resourceType:r$1.resourceType,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}):await e(a$1.RENAME_STARTED,{resourceType:r$1.resourceType,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}),await j();let m=l.workspace_id;if(r$1.workspaceSlug){let T=await W(`${d$1}/api/workspaces?tenantId=${l.tenant_id}`,s$1,{headers:k});if(!T.ok){c.current?.({type:"error",message:"Failed to fetch workspaces",detail:await V(T)}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}),await j();return}let x=((await T.json())?.data?.workspaces||[]).find(J=>J.slug===r$1.workspaceSlug);if(!x){c.current?.({type:"error",message:`Workspace not found: ${r$1.workspaceSlug}`}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}),await j();return}m=x.id;}if(!m){c.current?.({type:"error",message:"No workspace configured",detail:"Run culvii dev first, or provide --workspace-slug <slug>."}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}),await j();return}try{let T=await W(`${d$1}/api/workspaces/${m}/resources/${e$1}/rename`,s$1,{method:"PATCH",headers:{...k,"Content-Type":"application/json"},body:JSON.stringify({newSlug:n,resourceType:r$1.resourceType})});if(!T.ok){let I=await V(T);c.current?.({type:"error",message:"Failed to rename resource",detail:`Server responded with ${T.status}: ${I}`}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:I,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:I,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}),await j();return}c.current?.({type:"success",oldSlug:e$1,newSlug:n}),f$1?await f(a$1.RENAME_SUCCEEDED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}):await e(a$1.RENAME_SUCCEEDED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}),await j();}catch(T){c.current?.({type:"error",message:"Unexpected error",detail:T.message}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:T.message,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:T.message,env:l.environment,workspace:r$1.workspaceSlug??l.workspace_slug}),await j();}});return}await K(async a=>{r$1.resourceType!=="agent"&&(console.error(`Error: Invalid resource type '${r$1.resourceType}'. Must be: agent`),await e(a$1.RENAME_FAILED,{error_class:"InvalidResourceType",resourceType:r$1.resourceType,env:r$1.env,workspace:r$1.workspaceSlug}),await j(),process.exit(1));let{apiUrl:c,context:i}=await r({env:r$1.env}),s$1=s(i),{userId:d$1,tenantId:l}=await d();d$1?await f(a$1.RENAME_STARTED,d$1,l,{resourceType:r$1.resourceType,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}):await e(a$1.RENAME_STARTED,{resourceType:r$1.resourceType,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}),await j(),console.log(`tenant: ${i.tenant_slug} | workspace: ${r$1.workspaceSlug||i.workspace_slug||"unknown"} | env: ${i.environment}`);let k=i.workspace_id;if(r$1.workspaceSlug){let f$1=await W(`${c}/api/workspaces?tenantId=${i.tenant_id}`,a,{headers:s$1});f$1.ok||(console.error(`Failed to fetch workspaces: ${await V(f$1)}`),d$1?await f(a$1.RENAME_FAILED,d$1,l,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}),await j(),process.exit(1));let T=((await f$1.json())?.data?.workspaces||[]).find(I=>I.slug===r$1.workspaceSlug);T||(console.error("Workspace not found: "+r$1.workspaceSlug),d$1?await f(a$1.RENAME_FAILED,d$1,l,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}),await j(),process.exit(1)),k=T.id;}k||(console.error("Error: No workspace configured. Run culvii dev first, or provide --workspace-slug <slug>."),d$1?await f(a$1.RENAME_FAILED,d$1,l,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}),await j(),process.exit(1));try{let f$1=await W(`${c}/api/workspaces/${k}/resources/${e$1}/rename`,a,{method:"PATCH",headers:{...s$1,"Content-Type":"application/json"},body:JSON.stringify({newSlug:n,resourceType:r$1.resourceType})});if(!f$1.ok){let w=await V(f$1);console.error(`Error: Failed to rename resource. Server responded with ${f$1.status}: ${w}`),d$1?await f(a$1.RENAME_FAILED,d$1,l,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:w,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:w,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}),await j(),process.exit(1);}console.log(`${w} Renamed ${e$1} ${z} ${n}`),console.log(" Immutable ID preserved. All execution history retained."),d$1?await f(a$1.RENAME_SUCCEEDED,d$1,l,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}):await e(a$1.RENAME_SUCCEEDED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}),await j();}catch(f$1){console.error(`Error: Network or unexpected error: ${f$1.message}`),d$1?await f(a$1.RENAME_FAILED,d$1,l,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:f$1.message,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:f$1.message,env:i.environment,workspace:r$1.workspaceSlug??i.workspace_slug}),await j(),process.exit(1);}});});}async function rn(t,e,n){let r=await W(`${e}/auth/me`,t,{skipEnvironmentHeader:true});if(!r.ok)return {ok:false,status:r.status,error:await V(r)};let o=await r.json(),a=o?.user||o?.data?.user||o,c=o?.tenant||o?.data?.tenant||{},i=c?.slug||n.tenant_slug||"Unknown",s=c?.name||n.tenant_slug||"Unknown",d=Array.isArray(o?.tenants)?o.tenants.find(k=>k.id===c?.id):void 0,l=Array.isArray(d?.roleConfig?.grants)?d.roleConfig.grants:[];return {ok:true,email:a?.email||"Unknown",name:a?.name||"Unknown",tenant:i,tenantName:s,workspace:n.workspace_slug||null,access:l}}function kr(t){let e=t.environment?t.workspace?`${t.environment.environmentName} / ${t.workspace.workspaceName}`:`${t.environment.environmentName} \xB7 all workspaces`:"tenant level";return `${t.role.displayName} \u2014 ${e}`}async function Me(t,e$1){let{userId:n,tenantId:r}=await d(),o=t?{error:true,...e$1}:e$1?{...e$1}:void 0;n?await f(a$1.WHOAMI_VIEWED,n,r,o):await e(a$1.WHOAMI_VIEWED,o),await j();}function an(t){t.command("whoami").description("Show current authenticated user context").option("--json","Output as JSON").action(async e=>{let{getCapabilities:n}=await import('./terminalCapabilities-LJTRMVG4.js'),r=n();if(e.json||!r.isTTY||r.isCI||!r.supportsColor||!r.supportsUnicode){await hr();return}await _r();});}async function hr(){await K(async t=>{let{apiUrl:e,context:n}=await r(),r$1=await rn(t,e,n);r$1.ok||(process.stderr.write(JSON.stringify({error:r$1.error})+`
7
- `),await Me(!0),process.exit(1)),process.stdout.write(JSON.stringify({email:r$1.email,name:r$1.name,tenant:r$1.tenant,tenant_name:r$1.tenantName,workspace:r$1.workspace,access:r$1.access})+`
8
- `),await Me(!1,{workspace:r$1.workspace});});}async function _r(){let{WhoamiView:t}=await import('./WhoamiView-TKSYSHQ2.js'),e={type:"loading"},n=null,{useState:r$1,useEffect:o}=await import('react');function a(){let[c,i]=r$1(e);return o(()=>(n=i,()=>{n=null;}),[]),ve.createElement(t,{state:c})}await G(Promise.resolve(ve.createElement(a))),await K(async c=>{try{let{apiUrl:i,context:s}=await r(),d=await rn(c,i,s);if(!d.ok){n?.({type:"error",message:"Failed to fetch identity",detail:`Server responded with ${d.status}: ${d.error}`}),await Me(!0);return}n?.({type:"success",email:d.email,name:d.name,tenant:d.tenant,tenantName:d.tenantName,workspace:d.workspace,access:d.access.map(kr)}),await Me(!1,{workspace:d.workspace});}catch(i){n?.({type:"error",message:"Unexpected error",detail:i.message}),await Me(!0);}});}function Ar(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function it(t){return t.workspace_slugs?.[t.environment]??t.workspace_slug??null}function sn(t){t.command("switch [tenant-slug]").description("Switch the active tenant context").action(async e$1=>{try{let n=new a$3,r;try{r=await n.read({exitOnError:!1});}catch(d$1){if(d$1.message==="Active context key not found"){let l=re.join(bt.homedir(),".culvii","config"),k=await ce.readFile(l,"utf-8");r=JSON.parse(k);}else if(d$1.code==="ENOENT"){console.error("No configuration found. Please run `culvii login` first.");let{userId:l,tenantId:k}=await d();l?await f(a$1.TENANT_SWITCH_FAILED,l,k,{error_class:"ENOENT",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"ENOENT",slug:e$1}),await j(),process.exit(1);}else throw d$1}if(!r||!r.contexts){console.error("No configuration found. Please run `culvii login` first.");let{userId:d$1,tenantId:l}=await d();d$1?await f(a$1.TENANT_SWITCH_FAILED,d$1,l,{error_class:"NoConfig",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"NoConfig",slug:e$1}),await j(),process.exit(1);}let o=r.contexts,a=Object.keys(o);if(a.length===0){console.error("No tenants available. Please run `culvii login` first.");let{userId:d$1,tenantId:l}=await d();d$1?await f(a$1.TENANT_SWITCH_FAILED,d$1,l,{error_class:"NoTenants",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"NoTenants",slug:e$1}),await j(),process.exit(1);}if(Ar()){let{SwitchView:d$1}=await import('./SwitchView-PS3ICKZT.js');if(a.length===1&&!e$1&&(await G(Promise.resolve(ve.createElement(d$1,{state:{type:"only_one",slug:a[0]}}))),process.exit(0)),!e$1){let w=a.map(m=>({slug:m,tenantId:o[m].tenant_id,workspaceSlug:it(o[m]),environment:o[m].environment,isActive:m===r.active}));await G(Promise.resolve(ve.createElement(d$1,{state:{type:"list",tenants:w}}))),process.exit(0);}if(!o[e$1]){let w=a.map(I=>({slug:I,tenantId:o[I].tenant_id,workspaceSlug:it(o[I]),environment:o[I].environment,isActive:I===r.active}));await G(Promise.resolve(ve.createElement(d$1,{state:{type:"error",message:`Tenant '${e$1}' not found.`}})));let{userId:m,tenantId:T}=await d();m?await f(a$1.TENANT_SWITCH_FAILED,m,T,{error_class:"TenantNotFound",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"TenantNotFound",slug:e$1}),await j(),process.exit(1);}await n.withLock(async()=>{let w=re.join(bt.homedir(),".culvii","config"),m=await ce.readFile(w,"utf-8"),T=JSON.parse(m);await n.write({...T,active:e$1});});let l=o[e$1];await G(Promise.resolve(ve.createElement(d$1,{state:{type:"success",slug:e$1,workspaceSlug:it(l),environment:l.environment}}))),c();let{userId:k,tenantId:f$1}=await d();k?await f(a$1.TENANT_SWITCHED,k,f$1,{to:e$1}):await e(a$1.TENANT_SWITCHED,{to:e$1}),await j();return}if(a.length===1&&!e$1&&(console.log(`Only one tenant available: ${a[0]}`),process.exit(0)),e$1||(console.log("Available tenants:"),a.forEach((d,l)=>{let k=o[d],f=d===r.active?"*":" ";console.log(`${l+1}. ${f} ${d} (Tenant ID: ${k.tenant_id})`);}),console.log(`
9
- To switch, run: culvii switch <tenant-slug>`),process.exit(0)),!o[e$1]){console.error(`Error: Tenant '${e$1}' not found.`),console.log(`
10
- Available tenants:`),a.forEach((k,f)=>{let w=o[k],m=k===r.active?"*":" ";console.log(`${f+1}. ${m} ${k} (Tenant ID: ${w.tenant_id})`);});let{userId:d$1,tenantId:l}=await d();d$1?await f(a$1.TENANT_SWITCH_FAILED,d$1,l,{error_class:"TenantNotFound",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"TenantNotFound",slug:e$1}),await j(),process.exit(1);}await n.withLock(async()=>{let d=re.join(bt.homedir(),".culvii","config"),l=await ce.readFile(d,"utf-8"),k=JSON.parse(l);await n.write({...k,active:e$1});});let c$1=o[e$1];console.log(`tenant: ${e$1} | workspace: ${it(c$1)||"none"} | env: ${c$1.environment}`),console.log(`Switched to tenant: ${e$1}`),c();let{userId:i,tenantId:s}=await d();i?await f(a$1.TENANT_SWITCHED,i,s,{to:e$1}):await e(a$1.TENANT_SWITCHED,{to:e$1}),await j();}catch(n){n.code==="ENOENT"?console.error("No configuration found. Please run `culvii login` first."):console.error(`Failed to switch context: ${n.message}`);let{userId:r,tenantId:o}=await d();r?await f(a$1.TENANT_SWITCH_FAILED,r,o,{error_class:n.code||n.constructor?.name||"UnknownError",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:n.code||n.constructor?.name||"UnknownError",slug:e$1}),await j(),process.exit(1);}});}var on=["dev","sandbox","prod"];function Dr(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}async function ct(t){if(!Dr())return false;let{EnvView:e}=await import('./EnvView-3ZURMIZS.js');return await G(Promise.resolve(ve.createElement(e,{state:t}))),true}async function br(t,e,n){let r=await W(`${e}/auth/me`,t,{skipEnvironmentHeader:true});if(!r.ok)return [];let o=await r.json(),a=o?.tenant||{};return ((Array.isArray(o?.tenants)?o.tenants.find(i=>i.id===(n??a?.id)):void 0)?.environments??[]).map(i=>l(i.slug)).filter(i=>i!==null)}function cn(t){t.command("env [environment]").description("Show or switch the active environment (dev, sandbox, prod)").action(async e$1=>{await K(async n=>{let{apiUrl:r$1,context:o}=await r(),a=await br(n,r$1,o.tenant_id);if(!e$1){if(await ct({type:"show",current:o.environment,tenant:o.tenant_slug,accessible:a}))return;let k=a.includes(o.environment)?"":" (no access)";process.stdout.write(`current: ${o.environment}${k}
11
- `),process.stdout.write(`tenant: ${o.tenant_slug}
2
+ import {a as a$5}from'./chunk-RS5GDTRN.js';import {a as a$4,b as b$1,c as c$1}from'./chunk-KZG5CFSB.js';import {d,f,a as a$1,e,j as j$1,n,c,q,r,s,o,k,l}from'./chunk-D3YFBXU5.js';import {a as a$3}from'./chunk-HX54IFSD.js';import'./chunk-57XLDHK6.js';import {x,w,y,z}from'./chunk-YKFGEPLO.js';import {a as a$2}from'./chunk-YPLDPHHD.js';import {a,b}from'./chunk-7UWDMECF.js';import {Command}from'commander';import Q,{existsSync,realpathSync}from'fs';import {fileURLToPath}from'url';import Ee from'react';import {render}from'ink';import vt from'ws';import {randomUUID,createHash}from'crypto';import dr from'chokidar';import ce from'fs/promises';import re,{dirname,join}from'path';import {spawn}from'child_process';import {createRequire}from'module';import _r from'readline';import Rt from'os';import {createInterface}from'readline/promises';import {stdout,stdin}from'process';import {jsx}from'react/jsx-runtime';import aa from'open';var At=a(F=>{Object.defineProperty(F,"__esModule",{value:true});F.SINGLE_CHILD_SURFACE_COMPONENTS=F.RESERVED_SURFACE_COMPONENT_TYPES=F.SURFACE_COMPONENT_TYPES=F.SURFACE_COMPONENT_CATALOG=F.SURFACE_BADGE_TONES=F.SURFACE_TONES=F.SURFACE_TEXT_TRANSFORMS=F.SURFACE_VALUE_FORMATS=void 0;F.SURFACE_VALUE_FORMATS=["text","number","compact","percent","currency","bytes","duration","date","datetime","time","list","json","boolean"];F.SURFACE_TEXT_TRANSFORMS=["capitalize","title","upper","lower","humanize"];F.SURFACE_TONES=["default","muted","success","warning","error","info"];F.SURFACE_BADGE_TONES=["neutral","info","success","warning","error"];var te=(t=false)=>({type:"any",bindable:t}),_=(t=false,e)=>({type:"string",bindable:t,...e?{values:e}:{}}),z=(t=false,e={})=>({type:"number",bindable:t,...e}),B=(t=false)=>({type:"boolean",bindable:t}),xe=(t=false,e)=>({type:"array",bindable:t,...e?{items:e}:{}}),me=(t=false,e,n=false)=>({type:"object",bindable:t,...e?{properties:e}:{},additionalProperties:n}),De=(t,...e)=>({type:"union",bindable:t,variants:e}),p=(t,e,n={})=>({schema:t,description:e,...n}),kt=["xs","sm","md","lg"],Wn=["xs","sm","md","lg"],ht=["seconds","ms"],qe=()=>({format:p(_(false,F.SURFACE_VALUE_FORMATS),"Display format."),transform:p(_(false,F.SURFACE_TEXT_TRANSFORMS),"Text transform."),currency:p(_(),"ISO 4217 currency code."),unit:p(_(false,ht),"Numeric timestamp unit."),decimals:p(z(false,{integer:true,min:0,max:20}),"Fixed decimal places."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}),Ce=p(_(false,F.SURFACE_TONES),"Displayed value tone."),Je=p(_(false,Wn),"Displayed value size."),_t=p(me(false,void 0,te()),"Map known displayed values to labels."),jn=me(false,{label:p(_(true),"Row label."),value:p(te(true),"Row value."),...qe(),map:_t,mono:p(B(),"Render the value in monospace."),tone:Ce,type:p(_(false,["status"]),"Set to status to render a status pill.")},false),Mn=De(false,_(),me(false,{header:p(_(),"Column heading."),key:p(_(),"Field name inside each row.",{required:true}),...qe(),map:_t,align:p(_(false,["left","center","right"]),"Cell alignment."),mono:p(B(),"Render cells in monospace."),tone:Ce,type:p(_(false,["status"]),"Set to status to render status pills.")},false)),Vn=De(false,_(),z(),me(false,{label:p(_(),"Displayed option label."),value:p(De(false,_(),z()),"Submitted option value.",{required:true})},false)),Yn=me(true,{key:p(_(),"Binary property key.",{required:true}),fileName:p(_(),"Original file name."),mimeType:p(_(),"MIME type."),size:p(z(false,{min:0}),"File size in bytes."),downloadUrl:p(_(),"Protected download URL.")},false),Hn=me(false,void 0,_());F.SURFACE_COMPONENT_CATALOG={Stack:{group:"layout",summary:"Vertical stack and the default surface container.",children:"list",props:{gap:p(_(false,kt),"Spacing between children.",{default:"md"})}},Row:{group:"layout",summary:"Wrapping horizontal group.",children:"list",props:{gap:p(_(false,kt),"Spacing between children.",{default:"md"}),align:p(_(false,["start","center","end","baseline"]),"Cross-axis alignment.",{default:"center"}),justify:p(_(false,["between"]),"Set to between to push children apart.")}},Grid:{group:"layout",summary:"Responsive equal-width columns.",children:"list",props:{columns:p(z(false,{integer:true,values:[1,2,3,4]}),"Column count.",{default:2}),gap:p(_(false,kt),"Spacing between children.",{default:"md"})}},Card:{group:"layout",summary:"Bordered container with an optional header and status.",children:"single",props:{title:p(_(true),"Header title."),subtitle:p(_(true),"Header subtitle."),status:p(te(true),"Status value used to derive the header pill."),statusLabel:p(te(true),"Header status label."),statusTone:p(_(false,F.SURFACE_BADGE_TONES),"Forced status tone."),map:_t,transform:p(_(false,F.SURFACE_TEXT_TRANSFORMS),"Status label transform."),dense:p(B(),"Use tighter body padding.")}},Section:{group:"layout",summary:"Labelled group with one child.",children:"single",props:{title:p(_(true),"Section label."),description:p(_(true),"Section description."),collapsible:p(B(),"Allow the section to be folded."),defaultOpen:p(B(),"Initial collapsible state.",{default:true})}},Divider:{group:"layout",summary:"Horizontal rule between content blocks.",children:"none",props:{}},Form:{group:"layout",summary:"Groups wait-surface inputs and actions.",children:"list",props:{title:p(_(true),"Form heading.")}},Heading:{group:"display",summary:"A section title.",children:"none",props:{text:p(te(true),"Heading text."),level:p(z(false,{integer:true,values:[1,2,3]}),"Heading level.",{default:2}),transform:p(_(false,F.SURFACE_TEXT_TRANSFORMS),"Text transform."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}},Text:{group:"display",summary:"Body text with shared formatting.",children:"none",props:{text:p(te(true),"Value to display."),...qe(),size:Je,weight:p(_(false,["normal","medium","semibold"]),"Font weight."),tone:Ce,muted:p(B(),"Shorthand for the muted tone."),mono:p(B(),"Render in monospace.")}},Badge:{group:"display",summary:"Small label with an explicit tone.",children:"none",props:{text:p(te(true),"Badge label."),tone:p(_(false,F.SURFACE_BADGE_TONES),"Badge tone.",{default:"neutral"}),format:p(_(false,F.SURFACE_VALUE_FORMATS),"Display format."),transform:p(_(false,F.SURFACE_TEXT_TRANSFORMS),"Text transform."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}},StatusPill:{group:"display",summary:"Semantic status pill for statuses, booleans, and HTTP codes.",children:"none",props:{status:p(te(true),"Status value."),label:p(te(true),"Displayed label."),tone:p(_(false,F.SURFACE_BADGE_TONES),"Forced tone."),format:p(_(false,F.SURFACE_VALUE_FORMATS),"Display format."),transform:p(_(false,F.SURFACE_TEXT_TRANSFORMS),"Text transform."),maxChars:p(z(false,{integer:true,min:1}),"Maximum displayed characters.")}},Stat:{group:"display",summary:"One prominent value with a label and caption.",children:"none",props:{label:p(_(true),"Label above the value."),value:p(te(true),"Displayed value."),caption:p(te(true),"Caption below the value."),captionTransform:p(_(false,F.SURFACE_TEXT_TRANSFORMS),"Caption transform."),...qe(),tone:Ce,mono:p(B(),"Render the value in monospace.")}},KeyValue:{group:"display",summary:"Declared label/value entries or a bound object.",children:"none",props:{entries:p(xe(true,jn),"Declared label/value entries."),value:p(me(true,void 0,true),"Object whose keys become labels."),humanizeKeys:p(B(),"Humanize object keys.",{default:true}),columns:p(z(false,{integer:true,values:[1,2]}),"Pairs per row."),dense:p(B(),"Use tighter row spacing."),mono:p(B(),"Render shorthand values in monospace."),hideEmpty:p(B(),"Hide missing values."),emptyText:p(_(true),"Empty-state text.")}},Table:{group:"display",summary:"Tabular view of an array.",children:"none",props:{items:p(xe(true,te()),"Rows to render."),columns:p(xe(false,Mn),"Literal field names or column definitions."),dense:p(B(),"Use tighter rows."),emptyText:p(_(true),"Empty-state text.")},limits:{renderedRows:100}},Timestamp:{group:"display",summary:"ISO or epoch timestamp.",children:"none",props:{value:p(De(true,_(),z()),"ISO string or epoch number."),format:p(_(false,["datetime","date","time","smart"]),"Timestamp format.",{default:"datetime"}),relative:p(B(),"Display relative time."),unit:p(_(false,ht),"Numeric timestamp unit."),size:Je,tone:Ce}},Duration:{group:"display",summary:"A duration in milliseconds or between two instants.",children:"none",props:{value:p(z(true,{min:0}),"Duration in milliseconds."),start:p(De(true,_(),z()),"Start instant."),end:p(De(true,_(),z()),"End instant."),unit:p(_(false,ht),"Numeric instant unit."),size:Je,tone:Ce}},Money:{group:"display",summary:"A formatted currency amount.",children:"none",props:{value:p(z(true),"Currency amount."),currency:p(_(true),"ISO 4217 currency code.",{default:"USD"}),decimals:p(z(false,{integer:true,min:0,max:20}),"Fixed decimal places."),signed:p(B(),"Colour positive and negative values."),size:Je,tone:Ce}},Avatar:{group:"display",summary:"Initials derived from a name or email.",children:"none",props:{name:p(_(true),"Name used for initials."),email:p(_(true),"Fallback source for initials."),label:p(_(true),"Text beside the avatar."),size:p(_(false,["sm","md","lg"]),"Avatar size.",{default:"md"})}},Code:{group:"display",summary:"Monospace text block.",children:"none",props:{text:p(te(true),"Code or payload."),label:p(_(true),"Block label."),wrap:p(B(),"Wrap long lines.")},limits:{characters:2e4}},HtmlRenderer:{group:"display",summary:"Sandboxed HTML fragment renderer.",children:"none",props:{html:p(_(true),"HTML markup."),label:p(_(true),"Frame label."),height:p(z(false,{min:80,max:1200}),"Frame height in pixels.",{default:320}),allowRemoteImages:p(B(),"Allow remote HTTPS images.",{default:false}),emptyText:p(_(true),"Empty-state text.")},limits:{characters:2e4}},JsonInspector:{group:"display",summary:"Collapsible JSON tree and default fallback renderer.",children:"none",props:{value:p(te(true),"Any JSON value."),collapsed:p(B(),"Start collapsed.")}},FileChip:{group:"display",summary:'Metadata and download affordance for a produced file. Binding `file` alone does not make the chip clickable \u2014 declare `actions.default` as a `navigate` action with `href` bound to the same descriptor\'s `downloadUrl` path (e.g. `{ path: "/$binary/<step>/main/0/0/<key>/downloadUrl" }`), or the chip renders as a read-only file summary with no download button.',children:"none",interaction:"single-action",props:{file:p(Yn,"Binary descriptor."),label:p(_(true),"Displayed file name.")}},EmailMessageCard:{group:"display",summary:"Inbox list or opened email message.",children:"none",props:{messages:p(xe(true,me(false,void 0,true)),"Message list."),message:p(me(true,void 0,true),"Single message."),from:p(_(true),"Sender."),to:p(_(true),"Recipients."),cc:p(_(true),"Carbon-copy recipients."),subject:p(_(true),"Subject."),snippet:p(_(true),"Preview text."),body:p(_(true),"Message body."),date:p(De(true,_(),z()),"Sent or received instant."),labels:p(xe(true,_()),"Message labels."),unread:p(B(true),"Unread state."),fields:p(Hn,"Field-name mapping."),emptyText:p(_(true),"Empty-state text.")},limits:{renderedMessages:50}},DiffView:{group:"display",summary:"Structural JSON or line-by-line text comparison.",children:"none",props:{before:p(te(true),"Prior value."),after:p(te(true),"Proposed value."),mode:p(_(false,["json","text"]),"Comparison mode.",{default:"json"})},limits:{depth:6,children:100,lines:2e3,characters:2e5}},TextField:{group:"input",summary:"Single-line form input.",children:"none",interaction:"input",props:{label:p(_(true),"Field label."),placeholder:p(_(true),"Placeholder."),type:p(_(false,["text","number","email","url"]),"HTML input type.",{default:"text"}),disabled:p(B(true),"Disabled state.")}},TextArea:{group:"input",summary:"Multi-line form input.",children:"none",interaction:"input",props:{label:p(_(true),"Field label."),placeholder:p(_(true),"Placeholder."),rows:p(z(false,{integer:true,min:1}),"Visible rows.",{default:3}),disabled:p(B(true),"Disabled state.")}},Select:{group:"input",summary:"Single-choice form input.",children:"none",interaction:"input",props:{label:p(_(true),"Field label."),options:p(xe(true,Vn),"Literal or bound options."),placeholder:p(_(true),"Placeholder."),disabled:p(B(true),"Disabled state.")}},Checkbox:{group:"input",summary:"Boolean form input.",children:"none",interaction:"input",props:{label:p(_(true),"Text beside the checkbox."),description:p(_(true),"Helper text."),disabled:p(B(true),"Disabled state.")}},Button:{group:"action",summary:"Single-action button.",children:"none",interaction:"single-action",props:{label:p(_(true),"Button label."),variant:p(_(false,["primary","default","danger"]),"Button variant.",{default:"default"}),disabled:p(B(true),"Disabled state.")}},ApproveRejectBar:{group:"action",summary:"Named approve/reject decision actions.",children:"none",interaction:"multi-action",actionNames:{allowed:["approve","reject"]},props:{canDecide:p(B(true),"Whether the viewer may decide."),approveLabel:p(_(true),"Approve button label."),rejectLabel:p(_(true),"Reject button label."),disabledReason:p(_(true),"Reason actions are disabled."),commentRequired:p(B(true),"Require a comment before rejection."),comment:p(_(true),"Current comment value."),decision:p(_(true),"Recorded decision."),decidedBy:p(_(true),"Recorded decider.")}}};F.SURFACE_COMPONENT_TYPES=Object.keys(F.SURFACE_COMPONENT_CATALOG);F.RESERVED_SURFACE_COMPONENT_TYPES=["Tabs","Accordion","Spacer","Markdown","Icon","Image","List","Tree","ProgressBar","Spinner","ErrorPanel","Timeline","RadioGroup","DatePicker","SlackMessageCard","SlackThread","CalendarEventCard","AgentRunPanel","ToolCallCard"];F.SINGLE_CHILD_SURFACE_COMPONENTS=F.SURFACE_COMPONENT_TYPES.filter(t=>F.SURFACE_COMPONENT_CATALOG[t].children==="single");});var Bt=a(ne=>{Object.defineProperty(ne,"__esModule",{value:true});ne.SURFACE_SLOTS=ne.SURFACE_SLOT_POLICY=void 0;ne.getSurfaceBindingPaths=Yt;ne.validateSurfaceDefinition=Ht;ne.validateSurfaceResource=Zn;var Vt=At();ne.SURFACE_SLOT_POLICY={output:{actions:["navigate"],form:false},wait:{actions:["navigate","node.resume","node.stop"],form:true}};ne.SURFACE_SLOTS=Object.keys(ne.SURFACE_SLOT_POLICY);var jt=300,Mt=12,Bn=new Set(Vt.SURFACE_COMPONENT_TYPES),Kn=new Set(["$output","$input","$exec","$binary"]),Gn=new Set(["text","number","date","datetime","json"]),Jn=new Set(["text","textarea","number","email","url","checkbox","select","file"]);function qn(t){return (t.startsWith("/")?t.slice(1):t).split("/",1)[0]}function We(t,e){if(Array.isArray(t))for(let n of t)We(n,e);else if(t&&typeof t=="object"){let n=t;if(typeof n.path=="string")e.push(n.path);else for(let r of Object.values(n))We(r,e);}}function $e(t,e){if(Array.isArray(t)){for(let r of t)$e(r,e);return}if(!t||typeof t!="object")return;let n=t;if("path"in n){typeof n.path!="string"&&e.push("Surface binding path must be a string."),n.format!==void 0&&!Gn.has(String(n.format))&&e.push(`Unknown surface binding format "${String(n.format)}".`);return}for(let r of Object.values(n))$e(r,e);}function ze(t){return !!t&&typeof t=="object"&&!Array.isArray(t)}function zn(t){return ze(t)&&"path"in t}function Pe(t,e,n,r){if(zn(t)){e.bindable||r.push(`${n} does not accept a surface binding.`),$e(t,r);return}if(e.type==="any")return;if(e.type==="union"){let a=e.variants.filter(o=>o.type==="any"||o.type==="union"?true:o.type==="array"?Array.isArray(t):o.type==="object"?ze(t):typeof t===o.type),c=(a.length?a:e.variants).map(o=>{let s=[];return Pe(t,o,n,s),s});c.every(o=>o.length>0)&&r.push(...c.reduce((o,s)=>s.length<o.length?s:o));return}if(e.type==="string"){if(typeof t!="string"){r.push(`${n} must be a string.`);return}e.values&&!e.values.includes(t)&&r.push(`${n} must be one of ${e.values.join(", ")}.`),e.maxLength!==void 0&&t.length>e.maxLength&&r.push(`${n} cannot exceed ${e.maxLength} characters.`);return}if(e.type==="number"){if(typeof t!="number"||!Number.isFinite(t)){r.push(`${n} must be a finite number.`);return}e.integer&&!Number.isInteger(t)&&r.push(`${n} must be an integer.`),e.min!==void 0&&t<e.min&&r.push(`${n} must be at least ${e.min}.`),e.max!==void 0&&t>e.max&&r.push(`${n} cannot exceed ${e.max}.`),e.values&&!e.values.includes(t)&&r.push(`${n} must be one of ${e.values.join(", ")}.`);return}if(e.type==="boolean"){typeof t!="boolean"&&r.push(`${n} must be a boolean.`);return}if(e.type==="array"){if(!Array.isArray(t)){r.push(`${n} must be an array.`);return}e.maxItems!==void 0&&t.length>e.maxItems&&r.push(`${n} cannot contain more than ${e.maxItems} items.`),e.items&&t.forEach((a,c)=>Pe(a,e.items,`${n}[${c}]`,r));return}if(!ze(t)){r.push(`${n} must be an object.`);return}let i=e.properties??{};for(let[a,c]of Object.entries(i))c.required&&!(a in t)&&r.push(`${n}.${a} is required.`);for(let[a,c]of Object.entries(t)){let o=i[a];if(o){Pe(c,o.schema,`${n}.${a}`,r);continue}e.additionalProperties===false||e.additionalProperties===void 0?r.push(`${n} has unknown field "${a}".`):e.additionalProperties!==true&&Pe(c,e.additionalProperties,`${n}.${a}`,r);}}function Xn(t,e,n){let r=t.props;if(!(r===void 0||!ze(r))){for(let[i,a]of Object.entries(e.props))a.required&&!(i in r)&&n.push(`Component "${t.id}" prop "${i}" is required.`);for(let[i,a]of Object.entries(r)){if(i==="bind")continue;let c=e.props[i];if(!c){n.push(`Component "${t.id}" (${t.type}) has unknown prop "${i}".`);continue}Pe(a,c.schema,`Component "${t.id}" prop "${i}"`,n);}}}function Yt(t){let e=[];for(let n of t.components??[])!n||typeof n!="object"||(We(n.props,e),We(n.actions,e));return We(t.form,e),Array.from(new Set(e))}function Ht(t,e){let n=[];try{new TextEncoder().encode(JSON.stringify(t)).byteLength>256*1024&&n.push("Surface definition exceeds 256 KiB.");}catch{return ["Surface definition must be JSON serializable."]}if(t?.schema!=="kit.ui/v1"&&n.push('Surface schema must be "kit.ui/v1".'),!Array.isArray(t?.components)||t.components.length===0)return [...n,"Surface requires at least one component."];t.components.length>jt&&n.push(`Surface cannot exceed ${jt} components.`);let r=new Map;for(let o of t.components){if(!o||typeof o!="object"||Array.isArray(o)){n.push("Every surface component must be an object.");continue}let s=o;if(typeof s.id!="string"||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(s.id)||typeof s.type!="string"){n.push("Every surface component requires id and type.");continue}r.has(s.id)&&n.push(`Duplicate component id "${s.id}".`),r.set(s.id,s),Bn.has(s.type)||n.push(`Unknown component type "${s.type}".`);let l=Vt.SURFACE_COMPONENT_CATALOG[s.type];s.props!==void 0&&(!s.props||typeof s.props!="object"||Array.isArray(s.props))&&n.push(`Component "${s.id}" props must be an object.`),l&&Xn(s,l,n),s.children!==void 0&&!Array.isArray(s.children)?n.push(`Component "${s.id}" children must be an array.`):s.children?.length&&l?.children==="none"?n.push(`Component "${s.id}" cannot have children.`):s.children&&s.children.length>1&&l?.children==="single"&&n.push(`Component "${s.id}" can have at most one child.`);let d=s.props?.bind;if(d!==void 0&&(l?.interaction!=="input"?n.push(`Component "${s.id}" cannot bind form state.`):(!ne.SURFACE_SLOT_POLICY[e].form||typeof d!="string"||!(d==="/$form"||d.startsWith("/$form/")||d.startsWith("$form.")))&&n.push(`Component "${s.id}" requires a wait-surface $form binding.`)),s.actions!==void 0&&(!s.actions||typeof s.actions!="object"||Array.isArray(s.actions))){n.push(`Component "${s.id}" actions must be an object.`);continue}let v=Object.keys(s.actions??{}).length;if(v&&!["single-action","multi-action"].includes(l?.interaction??"")?n.push(`Component "${s.id}" cannot have actions.`):v>1&&l?.interaction==="single-action"&&n.push(`Component "${s.id}" can have at most one action.`),l?.actionNames){let f=Object.keys(s.actions??{});for(let w of l.actionNames.required??[])f.includes(w)||n.push(`Component "${s.id}" requires action "${w}".`);for(let w of f)l.actionNames.allowed&&!l.actionNames.allowed.includes(w)&&n.push(`Component "${s.id}" does not support action "${w}".`);}$e(s.props,n);for(let f of Object.values(s.actions??{})){if(!f||typeof f!="object"||Array.isArray(f)){n.push(`Component "${s.id}" has an invalid action.`);continue}let w=f;if(!["navigate","node.resume","node.stop"].includes(w.type)){n.push(`Unknown surface action "${String(w.type)}".`);continue}ne.SURFACE_SLOT_POLICY[e].actions.includes(w.type)||n.push(`Action "${w.type}" is not allowed on "${e}" surfaces.`),w.type==="navigate"&&(!w.href||typeof w.href!="object"||typeof w.href.path!="string")&&n.push("Navigate actions require an href binding."),$e(w,n);}}(typeof t.root!="string"||!r.has(t.root))&&n.push(`Surface root "${String(t.root)}" is missing.`);let i=new Set,a=new Set,c=(o,s)=>{if(s>Mt)return void n.push(`Surface component depth exceeds ${Mt}.`);if(a.has(o))return void n.push(`Surface component cycle includes "${o}".`);if(i.has(o))return;let l=r.get(o);if(l){a.add(o);for(let d of Array.isArray(l.children)?l.children:[]){if(typeof d!="string"){n.push(`Component "${o}" has a non-string child reference.`);continue}r.has(d)?c(d,s+1):n.push(`Component "${o}" references missing child "${d}".`);}a.delete(o),i.add(o);}};typeof t.root=="string"&&c(t.root,1);for(let o of r.keys())i.has(o)||n.push(`Component "${o}" is unreachable from root.`);for(let o of Yt(t)){let s=qn(o);s==="$form"&&!ne.SURFACE_SLOT_POLICY[e].form?n.push(`Binding "${o}" is only allowed on wait surfaces.`):s!=="$form"&&!Kn.has(s)&&n.push(`Invalid surface binding path "${o}".`);}if(t.form!==void 0)if(ne.SURFACE_SLOT_POLICY[e].form||n.push("Forms are only allowed on wait surfaces."),!Array.isArray(t.form?.fields))n.push("Surface form fields must be an array.");else {let o=new Set;for(let s of t.form.fields){if(!s||typeof s!="object"||Array.isArray(s)){n.push("Every surface form field must be an object.");continue}let l=s,d=l?.name,v=l?.type;typeof d!="string"||!d||o.has(d)?n.push(`Surface form field name "${String(d)}" is invalid or duplicated.`):o.add(d),Jn.has(String(v))||n.push(`Unknown surface form field type "${String(v)}".`),(typeof l.label!="string"||!l.label.trim())&&n.push(`Surface form field "${String(d)}" requires a label.`),v==="file"&&"default"in l&&n.push(`File field "${String(d)}" cannot have a default binding.`),v==="file"&&(l.maxFiles!==void 0&&(!Number.isInteger(l.maxFiles)||Number(l.maxFiles)<1||Number(l.maxFiles)>5)&&n.push(`File field "${String(d)}" maxFiles must be between 1 and 5.`),l.maxBytes!==void 0&&(!Number.isInteger(l.maxBytes)||Number(l.maxBytes)<1||Number(l.maxBytes)>10*1024*1024)&&n.push(`File field "${String(d)}" maxBytes exceeds platform limits.`),l.accept!==void 0&&(!Array.isArray(l.accept)||l.accept.some(f=>typeof f!="string"||!/^[a-z0-9.+-]+\/(?:[a-z0-9.+-]+|\*)$/i.test(f)))&&n.push(`File field "${String(d)}" has invalid MIME types.`)),v==="select"&&(!Array.isArray(l.options)||l.options.length===0?n.push(`Select field "${String(d)}" requires options.`):l.options.some(f=>!f||typeof f!="object"||typeof f.label!="string"||typeof f.value!="string")&&n.push(`Select field "${String(d)}" has invalid options.`));}$e(t.form,n);}return Array.from(new Set(n))}function Zn(t){let e=t;if(!e||typeof e!="object")return ["Surface must be an object."];let n=[];return (typeof e.id!="string"||!/^[a-z0-9][a-z0-9-]{0,62}$/.test(e.id))&&n.push("Surface requires a kebab-case id."),(typeof e.name!="string"||!e.name.trim())&&n.push("Surface requires a name."),ne.SURFACE_SLOTS.includes(e.slot)?n.push(...Ht(e.definition,e.slot)):n.push(`Surface requires slot ${ne.SURFACE_SLOTS.map(r=>`"${r}"`).join(" or ")}.`),Array.from(new Set(n))}});var Kt=a(J=>{var Qn=J&&J.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:true,get:function(){return e[n]}}),Object.defineProperty(t,r,i);}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n];})),er=J&&J.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&Qn(e,t,n);};Object.defineProperty(J,"__esModule",{value:true});J.SURFACE_VALUE_FORMATS=J.SURFACE_TONES=J.SURFACE_TEXT_TRANSFORMS=J.SURFACE_COMPONENT_TYPES=J.SURFACE_COMPONENT_CATALOG=J.SURFACE_BADGE_TONES=J.SINGLE_CHILD_SURFACE_COMPONENTS=J.RESERVED_SURFACE_COMPONENT_TYPES=void 0;var ke=At();Object.defineProperty(J,"RESERVED_SURFACE_COMPONENT_TYPES",{enumerable:true,get:function(){return ke.RESERVED_SURFACE_COMPONENT_TYPES}});Object.defineProperty(J,"SINGLE_CHILD_SURFACE_COMPONENTS",{enumerable:true,get:function(){return ke.SINGLE_CHILD_SURFACE_COMPONENTS}});Object.defineProperty(J,"SURFACE_BADGE_TONES",{enumerable:true,get:function(){return ke.SURFACE_BADGE_TONES}});Object.defineProperty(J,"SURFACE_COMPONENT_CATALOG",{enumerable:true,get:function(){return ke.SURFACE_COMPONENT_CATALOG}});Object.defineProperty(J,"SURFACE_COMPONENT_TYPES",{enumerable:true,get:function(){return ke.SURFACE_COMPONENT_TYPES}});Object.defineProperty(J,"SURFACE_TEXT_TRANSFORMS",{enumerable:true,get:function(){return ke.SURFACE_TEXT_TRANSFORMS}});Object.defineProperty(J,"SURFACE_TONES",{enumerable:true,get:function(){return ke.SURFACE_TONES}});Object.defineProperty(J,"SURFACE_VALUE_FORMATS",{enumerable:true,get:function(){return ke.SURFACE_VALUE_FORMATS}});er(Bt(),J);});var Ge=class extends Error{constructor(){super("401 Unauthorized"),this.name="UnauthorizedError";}};function Pn(t,e=Date.now()){return t-e<3e4}async function V(t){let e$1=new a$4,r=await(async()=>await e$1.withLock(async()=>{b$1.info("Tokens read from disk for auth check");let i=await e$1.get();if(i||(b$1.error("No tokens found on disk"),render(Ee.createElement(c$1,{state:{type:"login_error",message:"Not logged in",detail:"run `culvii login`"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j$1(),process.exit(1)),!Pn(i.expiresAt))return b$1.info("Access token valid, skipping refresh"),i.accessToken;b$1.info("Access token expired, attempting refresh");let a=`https://${q.cognitoDomain}/oauth2/token`,c=new URLSearchParams;c.set("grant_type","refresh_token"),c.set("refresh_token",i.refreshToken),c.set("client_id",q.clientId);let o;try{o=await fetch(a,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:c.toString()});}catch(v){b$1.error("Network error during refresh",{error:v.message}),render(Ee.createElement(c$1,{state:{type:"login_error",message:"Refresh failed",detail:"Cannot reach auth server \u2014 check your connection"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j$1(),process.exit(1);}let s=await o.json();(!o.ok||s.error==="invalid_grant")&&(b$1.warn("Refresh failed with invalid_grant"),await e$1.delete(),render(Ee.createElement(c$1,{state:{type:"login_error",message:"Session expired",detail:"run `culvii login` to authenticate"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j$1(),process.exit(1));let l=Date.now(),d=l+s.expires_in*1e3;return b$1.info("Refresh succeeded",{expiresAt:d}),await e$1.set({accessToken:s.access_token,refreshToken:s.refresh_token||i.refreshToken,idToken:s.id_token||i.idToken,expiresAt:d,tokenType:"Bearer",scope:i.scope,issuedAt:l,issuer:i.issuer}),s.access_token}))();try{await t(r);}catch(i){if(!(i instanceof Ge))throw i;b$1.info("Mid-session 401 detected, attempting refresh");let a=await e$1.withLock(async()=>{b$1.info("Tokens read from disk for retry");let c=await e$1.get();c||(b$1.error("No tokens found on disk during retry"),render(Ee.createElement(c$1,{state:{type:"login_error",message:"Not logged in",detail:"run `culvii login`"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j$1(),process.exit(1)),b$1.info("Access token expired (forced by 401), attempting refresh");let o=`https://${q.cognitoDomain}/oauth2/token`,s=new URLSearchParams;s.set("grant_type","refresh_token"),s.set("refresh_token",c.refreshToken),s.set("client_id",q.clientId);let l;try{l=await fetch(o,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:s.toString()});}catch(w){b$1.error("Network error during refresh retry",{error:w.message}),render(Ee.createElement(c$1,{state:{type:"login_error",message:"Refresh failed",detail:"Cannot reach auth server \u2014 check your connection"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j$1(),process.exit(1);}let d=await l.json();(!l.ok||d.error==="invalid_grant")&&(b$1.warn("Refresh retry failed with invalid_grant"),await e$1.delete(),render(Ee.createElement(c$1,{state:{type:"login_error",message:"Session expired",detail:"run `culvii login` to authenticate"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j$1(),process.exit(1));let v=Date.now(),f=v+d.expires_in*1e3;return b$1.info("Refresh retry succeeded",{expiresAt:f}),await e$1.set({accessToken:d.access_token,refreshToken:d.refresh_token||c.refreshToken,idToken:d.id_token||c.idToken,expiresAt:f,tokenType:"Bearer",scope:c.scope,issuedAt:v,issuer:c.issuer}),d.access_token});try{b$1.info("Retry after refresh succeeded"),await t(a);}catch(c){throw c instanceof Ge&&(b$1.error("Retry after refresh failed (still 401)"),await e$1.withLock(async()=>{await e$1.delete();}),render(Ee.createElement(c$1,{state:{type:"login_error",message:"Session invalidated",detail:"run `culvii login` to authenticate"}})),await e(a$1.LOGIN_FAILED,{reason:"session_expired"}),await j$1(),process.exit(1)),c}}}async function wt(){let t=new a$4;return t.withLock(async()=>{let e=await t.get();if(!e)return null;let n=`https://${q.cognitoDomain}/oauth2/token`,r=new URLSearchParams;r.set("grant_type","refresh_token"),r.set("refresh_token",e.refreshToken),r.set("client_id",q.clientId);let i;try{i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});}catch(s){return b$1.error("Network error during silent refresh",{error:s.message}),null}let a=await i.json();if(!i.ok||a.error==="invalid_grant")return b$1.warn("Silent refresh failed",{error:a.error}),null;let c=Date.now(),o=c+a.expires_in*1e3;return await t.set({accessToken:a.access_token,refreshToken:a.refresh_token||e.refreshToken,idToken:a.id_token||e.idToken,expiresAt:o,tokenType:"Bearer",scope:e.scope,issuedAt:c,issuer:e.issuer}),a.access_token})}async function H(t){let e=await t.text();try{let n=JSON.parse(e);if(n.error)return n.error}catch{}return e}async function j(t,e,n={}){let{skipEnvironmentHeader:r,...i}=n,c=await new a$3().read({exitOnError:false}),o$1=c.contexts[c.active],s=o$1?.tenant_id,l=o$1?.environment||"dev",d=o()??l,v=o$1?.environment_ids?.[d]??(d===l?o$1?.environment_id:void 0),f=k[d],w=r?{}:v?{"x-environment-id":v}:{"x-environment-slug":f},m={Authorization:`Bearer ${e}`,...s?{"x-tenant-id":s}:{},...w,...i.headers||{}};return fetch(t,{...i,headers:m})}function Pt(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function Wt(t){let e$1=t.command("workspace").description("Workspace commands").option("--env <env>","Target environment (sandbox or prod)");e$1.command("create").description("Create a new workspace").requiredOption("--name <name>","Workspace name").requiredOption("--slug <slug>","Workspace slug").action(async n=>{if(Pt()){let c=function(){let[o,s]=Ee.useState({type:"loading"});return Ee.useEffect(()=>(a=s,()=>{a=null;}),[]),Ee.createElement(i,{state:o})};let{WorkspaceCreateView:i}=await import('./WorkspaceView-ID7ZMBHV.js'),a=null;await G(Promise.resolve(Ee.createElement(c))),await V(async o=>{let{apiUrl:s$1,context:l}=await r({env:e$1.opts().env}),d$1=s(l);try{let v=await j(`${s$1}/api/workspaces`,o,{method:"POST",headers:{...d$1,"Content-Type":"application/json"},body:JSON.stringify({name:n.name,slug:n.slug,tenantId:l.tenant_id})});if(!v.ok){let T=await H(v);a?.({type:"error",message:"Failed to create workspace",detail:`Server responded with ${v.status}: ${T}`});let{userId:I,tenantId:x}=await d();I?await f(a$1.WORKSPACE_CREATE_FAILED,I,x,{error_class:"ApiError",slug:n.slug,env:l.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:"ApiError",slug:n.slug,env:l.environment}),await j$1();return}let f$1=await v.json();a?.({type:"success",id:f$1?.data?.workspaceId,slug:f$1?.data?.workspaceSlug||n.slug,name:n.name});let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_CREATED,w,m,{slug:n.slug,env:l.environment}):await e(a$1.WORKSPACE_CREATED,{slug:n.slug,env:l.environment}),await j$1();}catch(v){a?.({type:"error",message:"Unexpected error",detail:v.message});let{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.WORKSPACE_CREATE_FAILED,f$1,w,{error_class:v?.constructor?.name,env:l.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:v?.constructor?.name,env:l.environment}),await j$1();}});return}await V(async i=>{let{apiUrl:a,context:c}=await r({env:e$1.opts().env}),o=s(c);console.log(`tenant: ${c.tenant_slug} | workspace: N/A | env: ${c.environment}`);try{let s=await j(`${a}/api/workspaces`,i,{method:"POST",headers:{...o,"Content-Type":"application/json"},body:JSON.stringify({name:n.name,slug:n.slug,tenantId:c.tenant_id})});if(!s.ok){let f$1=await H(s);console.error(`Error: Failed to create workspace. Server responded with ${s.status}: ${f$1}`);let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_CREATE_FAILED,w,m,{error_class:"ApiError",slug:n.slug,env:c.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:"ApiError",slug:n.slug,env:c.environment}),await j$1(),process.exit(1);}let l=await s.json();console.log(`${w} Workspace created successfully.`),console.log(` ID: ${l?.data?.workspaceId}`),l?.data?.workspaceSlug&&console.log(` Slug: ${l?.data?.workspaceSlug}`);let{userId:d$1,tenantId:v}=await d();d$1?await f(a$1.WORKSPACE_CREATED,d$1,v,{slug:n.slug,env:c.environment}):await e(a$1.WORKSPACE_CREATED,{slug:n.slug,env:c.environment}),await j$1();}catch(s){console.error(`Error: Network or unexpected error: ${s.message}`);let{userId:l,tenantId:d$1}=await d();l?await f(a$1.WORKSPACE_CREATE_FAILED,l,d$1,{error_class:s?.constructor?.name,env:c.environment}):await e(a$1.WORKSPACE_CREATE_FAILED,{error_class:s?.constructor?.name,env:c.environment}),await j$1(),process.exit(1);}});}),e$1.command("list").description("List workspaces").action(async()=>{if(Pt()){let a=function(){let[c,o]=Ee.useState({type:"loading"});return Ee.useEffect(()=>(i=o,()=>{i=null;}),[]),Ee.createElement(r$1,{state:c})};let{WorkspaceListView:r$1}=await import('./WorkspaceView-ID7ZMBHV.js'),i=null;await G(Promise.resolve(Ee.createElement(a))),await V(async c=>{let{apiUrl:o,context:s$1}=await r({env:e$1.opts().env}),l=s(s$1);try{let d$1=await j(`${o}/api/workspaces?tenantId=${s$1.tenant_id}`,c,{headers:l});if(!d$1.ok){let T=await H(d$1);i?.({type:"error",message:"Failed to list workspaces",detail:`Server responded with ${d$1.status}: ${T}`});let{userId:I,tenantId:x}=await d();I?await f(a$1.WORKSPACE_LIST_FAILED,I,x,{error_class:"ApiError",env:s$1.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"ApiError",env:s$1.environment}),await j$1();return}let f$1=(await d$1.json())?.data?.workspaces;if(!Array.isArray(f$1)){i?.({type:"error",message:"Unexpected response format"});let{userId:T,tenantId:I}=await d();T?await f(a$1.WORKSPACE_LIST_FAILED,T,I,{error_class:"UnexpectedResponse",env:s$1.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"UnexpectedResponse",env:s$1.environment}),await j$1();return}i?.({type:"success",workspaces:f$1.map(T=>({id:T.id,name:T.name,slug:T.slug??""}))});let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_LISTED,w,m,{env:s$1.environment}):await e(a$1.WORKSPACE_LISTED,{env:s$1.environment}),await j$1();}catch(d$1){i?.({type:"error",message:"Unexpected error",detail:d$1.message});let{userId:v,tenantId:f$1}=await d();v?await f(a$1.WORKSPACE_LIST_FAILED,v,f$1,{error_class:d$1?.constructor?.name,env:s$1.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:d$1?.constructor?.name,env:s$1.environment}),await j$1();}});return}await V(async r$1=>{let{apiUrl:i,context:a}=await r({env:e$1.opts().env}),c=s(a);console.log(`tenant: ${a.tenant_slug} | workspace: N/A | env: ${a.environment}`);try{let o=await j(`${i}/api/workspaces?tenantId=${a.tenant_id}`,r$1,{headers:c});if(!o.ok){let f$1=await H(o);console.error(`Error: Failed to list workspaces. Server responded with ${o.status}: ${f$1}`);let{userId:w,tenantId:m}=await d();w?await f(a$1.WORKSPACE_LIST_FAILED,w,m,{error_class:"ApiError",env:a.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"ApiError",env:a.environment}),await j$1(),process.exit(1);}let l=(await o.json())?.data?.workspaces;if(!Array.isArray(l)){console.error("Error: Unexpected response format");let{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.WORKSPACE_LIST_FAILED,f$1,w,{error_class:"UnexpectedResponse",env:a.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:"UnexpectedResponse",env:a.environment}),await j$1(),process.exit(1);}for(let f of l)console.log(`${f.id} ${f.name} ${f.slug}`);let{userId:d$1,tenantId:v}=await d();d$1?await f(a$1.WORKSPACE_LISTED,d$1,v,{env:a.environment}):await e(a$1.WORKSPACE_LISTED,{env:a.environment}),await j$1();}catch(o){console.error(`Error: Network or unexpected error: ${o.message}`);let{userId:s,tenantId:l}=await d();s?await f(a$1.WORKSPACE_LIST_FAILED,s,l,{error_class:o?.constructor?.name,env:a.environment}):await e(a$1.WORKSPACE_LIST_FAILED,{error_class:o?.constructor?.name,env:a.environment}),await j$1(),process.exit(1);}});});}function Et(t,e,n){let r=null,i=0,a=false,c=[],o=new Map,s=null,l=null,d=0,v=[1e3,2e3,4e3,8e3,16e3];function f(){s&&(clearInterval(s),s=null),l&&(clearTimeout(l),l=null),d=0;}function w(){f(),s=setInterval(()=>{if(!r||r.readyState!==vt.OPEN)return;let R=Date.now().toString()+"-"+Math.random().toString();r.send(JSON.stringify({type:"client-ping",requestId:R})),l=setTimeout(()=>{d++,d>=2&&(b$1.warn("devSync WebSocket dead (missed 2 pongs), terminating"),f(),r?.terminate());},5e3);},2e4);}function m(R){R.removeAllListeners(),R.on("error",()=>{});try{R.terminate();}catch(N){b$1.warn("devSync error terminating stale socket",{error:N.message});}}let T=0;async function I(){if(a)return;let R=++T,N;try{N=await e();}catch(S){b$1.error("devSync failed to obtain headers for connection",{error:S.message}),R===T&&x();return}if(a||R!==T)return;r&&m(r);let y=new vt(t,{headers:N});r=y,y.on("open",()=>{if(r===y){i=0,b$1.info("devSync WebSocket connected",{url:t}),n.onOpen();for(let S of c)y.send(JSON.stringify(S));c=[],w();}}),y.on("message",S=>{if(r!==y)return;let h=Buffer.isBuffer(S)?S.toString("utf-8"):S instanceof ArrayBuffer?Buffer.from(S).toString("utf-8"):Buffer.concat(S).toString("utf-8"),g;try{g=JSON.parse(h);}catch{b$1.warn("Received invalid JSON from devSync",{raw:h});return}if(g.ok===true&&g.slug&&typeof g.warning=="string"){n.onWarning?.(g.slug,g.warning);return}if(g.type==="session-probe"&&typeof g.requestId=="string"){y.send(JSON.stringify({type:"session-pong",requestId:g.requestId}));return}if(g.type==="client-pong"){l&&(clearTimeout(l),l=null),d=0;return}if(g.ok===true&&g.slug&&g.type==="validation-error"){n.onValidationErrorAck?.(g.slug);return}if(g.ok===true&&g.slug){g.resourceId&&o.set(g.slug,g.resourceId),n.onAck(g.slug,g.resourceId,g.orphaned===true);return}if(g.ok===false&&g.slug){n.onError(g.slug,g.error||"Unknown error");return}if(g.ok===false&&!g.slug){n.onFatal(g.error||"Fatal error from server"),a=true,f(),y.close();return}}),y.on("unexpected-response",(S,h)=>{if(r===y){if(h.statusCode===401){b$1.error("devSync credentials rejected (401)"),a=true,f(),y.terminate(),n.onAuthFailure?n.onAuthFailure():n.onFatal("Credentials rejected by server (401)");return}b$1.warn("devSync unexpected handshake response",{statusCode:h.statusCode}),f(),y.terminate(),x();}}),y.on("close",S=>{r!==y||a||(b$1.warn("devSync WebSocket closed",{code:S}),f(),x());}),y.on("error",S=>{r===y&&b$1.error("devSync WebSocket error",{error:S.message});});}function x(){if(f(),a)return;if(i>=v.length){let y=`devSync PERMANENT FAILURE: giving up after ${v.length} retries`;b$1.error(y,{retryCount:i,retryDelaysMs:v}),n.onFatal(y),a=true;return}let R=v[i];i++;let N=v.length-i;b$1.info(`devSync reconnecting in ${R}ms (attempt ${i}/${v.length}, ${N} left before permanent failure)`),setTimeout(()=>{I();},R);}function q(R){r&&r.readyState===vt.OPEN?r.send(JSON.stringify(R)):c.push(R);}function K(){a=true,f(),r&&m(r),b$1.info("devSync WebSocket closed by client");}function D(){a||(f(),i=0,r&&m(r),I());}return I(),{send:q,close:K,reconnectNow:D}}var nn=b(Kt(),1);var sr=fileURLToPath(import.meta.url),Qt=dirname(sr),qt=join(Qt,"lib","evaluator.js"),zt=join(Qt,"evaluator.ts"),or=existsSync(qt)||!existsSync(zt)?qt:zt,ir=createRequire(import.meta.url),cr=ir.resolve("tsx/cli");function Xt(t){let e=t.trim();if(!e||e.startsWith("#"))return "";let n=e.match(/^(?:"((?:\\.|[^"\\])*)"|'((?:''|[^'])*)')(?:\s+#.*)?$/);return n?n[1]!==void 0?n[1].replace(/\\(["\\])/g,"$1").trim().replace(/\\/g,"/"):n[2].replace(/''/g,"'").trim().replace(/\\/g,"/"):e.replace(/\s+#.*$/,"").trim().replace(/\\/g,"/")}async function je(t){try{let r=await ce.readFile(re.join(t,"culvii.yaml"),"utf-8"),i=[],a=!1;for(let c of r.replace(/^\uFEFF/,"").split(/\r?\n/)){let o=c.trim().match(/^entrypoints\s*:(?:\s*(.*))?$/);if(o){let l=(o[1]??"").trim(),d=l.match(/^\[(.*)\](?:\s+#.*)?$/);if(d){let f=d[1].match(/(?:"(?:\\.|[^"\\])*"|'(?:''|[^'])*'|[^,]+)+/g)??[];for(let w of f){let m=Xt(w);m&&i.push(re.resolve(t,m));}a=!1;continue}a=!l.replace(/(?:^|\s+)#.*$/,"").trim();continue}if(!a)continue;let s=c.match(/^\s*-(?:\s+(.*))?$/);if(s){let l=Xt(s[1]??"");l&&i.push(re.resolve(t,l));}else c.trim()&&!c.trim().startsWith("#")&&(a=!1);}if(i.length)return i}catch{}let e=[];async function n(r){let i;try{i=await ce.readdir(r,{withFileTypes:!0}),i.sort((a,c)=>a.name.localeCompare(c.name));}catch{return}for(let a of i){let c=a.name.toLowerCase();if(a.name.startsWith(".")||c==="node_modules"||c==="dist")continue;let o=re.join(r,a.name);a.isDirectory()?await n(o):a.isFile()&&c.endsWith(".culvii.ts")&&e.push(o);}}return await n(t),e}function Me(t,e={}){return new Promise((n,r)=>{if(!t.length)return n([]);let i=spawn(process.execPath,[cr,or,...t],{env:{...process.env,...e,CULVII_DEV:"true"},stdio:["ignore","pipe","pipe"]}),a="",c="",o=false;i.stdout.on("data",s=>a+=s.toString()),i.stderr.on("data",s=>c+=s.toString()),i.on("error",s=>{o||(o=true,r(s));}),i.on("close",s=>{if(o)return;if(o=true,s!==0){r(new Error(`Evaluator exited with code ${s}. ${c.trim()||"Check your files for syntax or validation errors."}`));return}let l=[],d=new Set,v=a.split(/\r?\n/).filter(f=>f.includes("__culvii_dev_definitions__"));for(let f of v)try{let w=JSON.parse(f);for(let m of w.__culvii_dev_definitions__||[]){let T=m?.definition?.id,I=m?.type&&T?`${m.type}:${T}`:null;I&&d.has(I)||(I&&d.add(I),l.push(m));}}catch{}n(l);});})}function Ze(t){return (0, nn.validateSurfaceResource)(t)}function It(t){if(Array.isArray(t))return t.map(It);if(t!==null&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=It(t[n]);return e}return t}function ur(t){if(!t||typeof t!="object")return t;let e={...t};return Array.isArray(e.nodes)&&(e.nodes=e.nodes.map(({id:n,...r})=>r)),e}function fr(t){return createHash("sha256").update(JSON.stringify(It(ur(t)))).digest("hex")}function he(t){return (Array.isArray(t?.nodes)?t.nodes:[]).filter(n=>n?.type==="core.agent").map(n=>n?.nodeParams?.agentReferenceKey??n?.nodeParams?.agentId).filter(n=>typeof n=="string"&&!n.startsWith("agt_"))}function Qe(t){return (Array.isArray(t?.nodes)?t.nodes:[]).flatMap(n=>["output","wait"].map(r=>n?.ui?.[r]).filter(r=>r?.kind==="custom"&&typeof r.surfaceKey=="string").map(r=>({surfaceKey:r.surfaceKey,...Number.isInteger(r.version)?{version:r.version}:{}})))}function pr(t){return Array.isArray(t)?t:t&&typeof t=="object"?Object.entries(t).map(([e,n])=>n&&typeof n=="object"&&!Array.isArray(n)?{name:e,...n}:n):[]}function Oe(t){return pr(t?.tools).filter(e=>e&&typeof e=="object"&&!Array.isArray(e)).map(e=>({referenceKey:e.workflowReferenceKey??e.workflowId,toolName:e.name,triggerNodeName:e.triggerNodeName})).filter(e=>typeof e.referenceKey=="string"&&!e.referenceKey.startsWith("wfl_"))}function Ne(t){return Oe(t).map(e=>e.referenceKey)}function yr(t){return typeof t?.type=="string"&&t.type!=="manualTrigger"&&t.type.endsWith("Trigger")}function gr(t,e){return t.get(e)??t.get(Y(e))}function rn(t){let e=new Set,n=[];for(let r of t.values())e.has(r.id)||(e.add(r.id),n.push(r));return n}function an(t,e){let n=typeof t?.id=="string"?t.id:"unknown";if(Oe(t).length>0)return {id:n,definition:t};let r=n==="unknown"?void 0:gr(e,n);return r?{id:n,definition:r.definition}:t&&typeof t=="object"&&!Array.isArray(t)?{id:n,definition:t}:null}function St(t,e){let n=[t];for(let r of t.definition?.secondaryAgents??[]){let i=an(r,e);i&&n.push(i);}return n}function et(t){let e=new Map,n=new Map;for(let a of t){let c=a.definition?.id;typeof c=="string"&&(a.type==="agent"?(e.set(c,{id:c,definition:a.definition}),e.set(Y(c),{id:c,definition:a.definition})):a.type==="workflow"&&(n.set(c,a.definition),n.set(Y(c),a.definition)));}let r=new Set;for(let a of rn(e))for(let c of St(a,e))for(let o of Ne(c.definition))r.add(Y(o));let i=new Set;for(let a of r){let c=n.get(a);if(c)for(let o of he(c))i.add(Y(o));}for(let a of i){let c=e.get(a);if(c){if(Oe(c.definition).length>0)return `agent '${c.id}' cannot define workflow tools when invoked by an agent workflow tool.`;for(let o of c.definition?.secondaryAgents??[]){let s=an(o,e);if(s&&Oe(s.definition).length>0)return `secondary agent '${s.id}' referenced by agent '${c.id}' cannot define workflow tools when '${c.id}' is invoked by an agent workflow tool.`}}}return null}function tt(t){let e=new Map,n=new Map;for(let i of t){let a=i.definition?.id;typeof a=="string"&&(i.type==="agent"?(e.set(a,{id:a,definition:i.definition}),e.set(Y(a),{id:a,definition:i.definition})):i.type==="workflow"&&(n.set(a,i.definition),n.set(Y(a),i.definition)));}let r=new Set;for(let i of n.values())for(let a of he(i))r.add(Y(a));for(let i of r){let a=e.get(i);if(!a)continue;let c=St(a,e);for(let o of c)for(let s of Oe(o.definition)){let l=n.get(s.referenceKey)??n.get(Y(s.referenceKey));if(!(!l||he(l).length===0))return `workflow tool '${s.toolName??"unknown"}' on agent '${o.id}' cannot reference workflow '${s.referenceKey}' because '${a.id}' is invoked by a workflow and the target workflow contains an agent node.`}}return null}function nt(t){let e=new Map,n=new Map;for(let r of t){let i=r.definition?.id;typeof i=="string"&&(r.type==="agent"?(e.set(i,{id:i,definition:r.definition}),e.set(Y(i),{id:i,definition:r.definition})):r.type==="workflow"&&(n.set(i,r.definition),n.set(Y(i),r.definition)));}for(let r of rn(e))for(let i of St(r,e))for(let a of Oe(i.definition)){let c=n.get(a.referenceKey)??n.get(Y(a.referenceKey));if(!c)continue;let o=Array.isArray(c.nodes)?c.nodes:[],s=o.find(yr);if(s)return `workflow tool '${a.toolName??"unknown"}' on agent '${i.id}' references workflow '${a.referenceKey}' with non-manual trigger '${s.name??s.type}'.`;if(a.triggerNodeName){if(o.find(v=>v?.name===a.triggerNodeName)?.type==="manualTrigger")continue;return `workflow tool '${a.toolName??"unknown"}' on agent '${i.id}' must use a manual trigger in workflow '${a.referenceKey}'.`}let l=o.filter(d=>d?.type==="manualTrigger");if(l.length!==1)return l.length===0?`workflow tool '${a.toolName??"unknown"}' on agent '${i.id}' references workflow '${a.referenceKey}' without a manual trigger.`:`workflow tool '${a.toolName??"unknown"}' on agent '${i.id}' must specify triggerNodeName because workflow '${a.referenceKey}' has multiple manual triggers.`}return null}function rt(t){let e=[],n=(r,i)=>{let a=i&&typeof i=="object"&&!Array.isArray(i)?i.credentialId:void 0;(typeof a!="string"||!a.trim())&&e.push(`agent '${r}' model must include a credentialId \u2014 use model: { provider, modelId, credentialId }.`);};t?.modelConfig!==void 0&&t?.modelConfig!==null&&n(t?.id,t.modelConfig);for(let r of t?.secondaryAgents??[])r?.modelConfig!==void 0&&r?.modelConfig!==null&&n(r?.id??t?.id,r.modelConfig);return e}function at(t){let e=new Map;for(let i of t){let a=i.definition?.id;if(!a)continue;let c=i.type==="agent"?Ne(i.definition).map(o=>`workflow:${o}`):i.type==="workflow"?he(i.definition).map(o=>`agent:${o}`):[];e.set(`${i.type}:${a}`,c);}let n=null;function r(i,a){if(!n)for(let c of e.get(i)??[]){if(!e.has(c))continue;let o=[...a,c];if(a.length>=3){n=`Unsupported nested SDK reference chain: ${o.join(" -> ")}. Only workflow -> agent -> workflow or agent -> workflow -> agent is supported.`;return}r(c,o);}}for(let i of e.keys())r(i,[i]);return n}function Y(t){return t.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-").slice(0,63)}var mr=new Set(["node_modules","dist"]),wr=/^[a-zA-Z]:(?:\/|$)/;function en(t){return t.replace(/\\/g,"/").replace(/\/+$/,"")}function tn(t,e){return t.includes("\\")||wr.test(e)||e.startsWith("//")}function vr(t,e=process.cwd()){let n=en(t),r=e?en(e):"",i=n.startsWith("/")&&!n.startsWith("//")&&!t.includes("\\"),a=tn(t,n)||!i&&!!e&&tn(e,r),c=a?n.toLowerCase():n,o=a?r.toLowerCase():r,s=c;if(e){if(c===o)return false;c.startsWith(o+"/")&&(s=c.slice(o.length+1));}return s.split("/").some(l=>!!l&&(mr.has(l.toLowerCase())||l.startsWith(".")&&l!=="."&&l!==".."))}function Tt(t){let e=process.cwd(),n=new Map,r=null,i=false,a=false,c=false;async function o(){if(i){a=true;return}i=true;try{c&&(c=!1,n.clear()),await l();}catch(f){b$1.error("Evaluation failed",{error:f.message});}finally{i=false,a&&(a=false,o());}}function s(f,w,m){t.onLog?t.onLog(w,m):(m==="error"?process.stderr:process.stdout).write(`${f} ${w}
3
+ `);}async function l(){let f=await je(e),w;try{w=await Me(f);}catch(g){s(x,`Evaluation failed, skipping this sync cycle: ${g.message}`,"error");return}let m=new Map,T=new Set,I=new Set(w.map(g=>g.definition.id).filter(Boolean)),x$1=new Set(w.filter(g=>g.type==="surface").flatMap(g=>{let b=g.definition.id;return typeof b=="string"?[b,Y(b)]:[]})),q=false,K=false;for(let g of w){let b=g.definition.id;if(!b){s(y,`Skipping ${g.type}: referenced resources require an explicit id.`,"warn");continue}let O=typeof b=="string"?Y(b):String(b);if(!O){s(y,`Skipping definition: could not derive a valid slug from "${b}". Add an explicit id field.`,"warn");continue}if(g.type==="surface"){let W=Ze(g.definition);if(W.length){s(x,`Invalid surface '${O}': ${W.join("; ")}.`,"error");return}}let L=`${g.type}:${O}`;if(T.has(L)){s(x,`Duplicate slug '${O}' detected in ${g.type}s. Fix all collisions before syncing.`,"error");return}T.add(L);let ee=fr(g.definition);m.set(L,{slug:O,type:g.type,definition:g.definition,hash:ee});let se=g.type==="agent"?Ne(g.definition):[],pe=g.type==="workflow"?he(g.definition):[],we=g.type==="workflow"?Qe(g.definition):[];if(g.type==="agent"){for(let W of rt(g.definition))s(x,W,"error"),K=true;for(let W of g.definition.secondaryAgents||[]){let $=W?.id,le=!!(W?.systemPrompt||W?.modelConfig);if(typeof $=="string"&&!le&&!I.has($)){let ae=`Dangling ref: agent '${O}' references secondary agent '${$}' which is not defined locally.`;s(x,ae,"error"),q=true,t.onValidationError?.({resourceType:"agent",slug:O,missingReferenceId:$,message:ae});}}}for(let W of se)if(!I.has(W)){let $=`Dangling ref: agent '${O}' references workflow '${W}' which is not defined locally.`;s(x,$,"error"),q=true,t.onValidationError?.({resourceType:"agent",slug:O,missingReferenceId:W,message:$});}for(let W of pe)if(!I.has(W)){let $=`Dangling ref: workflow '${O}' references agent '${W}' which is not defined locally.`;s(x,$,"error"),q=true,t.onValidationError?.({resourceType:"workflow",slug:O,missingReferenceId:W,message:$});}for(let W of we)if(W.version===void 0&&!x$1.has(W.surfaceKey)){let $=`Dangling ref: workflow '${O}' references local surface '${W.surfaceKey}' which is not defined locally. Pin a published version or define the surface.`;s(x,$,"error"),q=true,t.onValidationError?.({resourceType:"workflow",slug:O,missingReferenceId:W.surfaceKey,message:$});}}if(q){s(x,"Fix all dangling references before syncing.","error");return}if(K){s(x,"Fix the model configuration before syncing.","error");return}let D=et(w);if(D){s(x,D,"error"),s(x,"Fix the secondary agent tools before syncing.","error");return}let R=nt(w);if(R){s(x,R,"error"),s(x,"Fix the workflow tool trigger before syncing.","error");return}let N=tt(w);if(N){s(x,N,"error"),s(x,"Fix the workflow tool target before syncing.","error");return}let y$1=at(w);if(y$1){s(x,y$1,"error"),s(x,"Fix the reference chain before syncing.","error");return}let S=0;for(let[g,{hash:b,type:O}]of n.entries())if(!m.has(g)){let L=g.slice(g.indexOf(":")+1),ee=O==="agent"?[...m.values()].find(se=>se.hash===b&&se.type===O):void 0;ee?s(y,`Looks like '${L}' was renamed to '${ee.slug}'.
4
+ Run: culvii rename ${L} ${ee.slug} --resource-type ${O}`,"warn"):(t.onOrphan(L,O),n.delete(g),S++);}let h=[...m.entries()].sort(([,g],[,b])=>+(b.type==="surface")-+(g.type==="surface"));for(let[g,{slug:b,type:O,definition:L,hash:ee}]of h){let se=n.get(g);(!se||se.hash!==ee)&&(n.set(g,{hash:ee,type:O}),t.onSync({type:O,slug:b,definition:L,configHash:ee}),S++);}S===0&&s(z,"No changes to sync.","info");}let d=dr.watch(e,{ignored:f=>vr(f,e),ignoreInitial:true,persistent:true});d.on("all",(f,w)=>{w.toLowerCase().endsWith(".ts")&&(r&&clearTimeout(r),r=setTimeout(()=>{o();},500));});let v=false;return {close:()=>d.close(),triggerFullSync:()=>{if(v){o();return}if(v=true,i){c=true,a=true;return}n.clear(),o();}}}function Er(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}var kr="https://console.culvii.com/";function Le(t,e){return `${kr}${t}/development/${e}/workflows`}function sn(){let t=new Date,e=n=>String(n).padStart(2,"0");return `${e(t.getHours())}:${e(t.getMinutes())}:${e(t.getSeconds())}`}async function hr(){let{DevView:t}=await import('./DevView-GPKSSOLA.js'),e$1=null;function n(){let[r,i]=Ee.useState({type:"provisioning",message:"Starting dev server\u2026"});return Ee.useEffect(()=>(e$1=i,()=>{e$1=null;}),[]),Ee.createElement(t,{state:r})}await G(Promise.resolve(Ee.createElement(n))),await V(async r$1=>{let i=new a$3,a=await i.read({exitOnError:!1}),c=Date.now();if(!a.active||!a.contexts[a.active]){e$1?.({type:"error",message:"No active context. Run culvii login first."});let{userId:y,tenantId:S}=await d();y?await f(a$1.DEV_FAILED,y,S,{error_class:"NoActiveContext"}):await e(a$1.DEV_FAILED,{error_class:"NoActiveContext"}),await j$1();return}let{apiUrl:o,context:s$1}=await r({env:"dev"}),l=s(s$1),d$1=s$1.workspace_id,v=s$1.workspace_slug;e$1?.({type:"provisioning",message:"Provisioning dev workspace\u2026"});try{let y=await j(`${o}/api/workspaces`,r$1,{method:"POST",headers:{...l,"Content-Type":"application/json"},body:JSON.stringify({name:`dev-${s$1.user_id.slice(0,12)}`,slug:`dev-${s$1.user_id.slice(0,12)}`,tenantId:s$1.tenant_id})});if(!y.ok){let h=await H(y);e$1?.({type:"error",message:`Failed to auto-provision workspace: ${h}`});let{userId:g,tenantId:b}=await d();g?await f(a$1.DEV_FAILED,g,b,{error_class:"WorkspaceProvisionError",workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:"WorkspaceProvisionError",workspace:s$1?.workspace_slug,env:s$1?.environment}),await j$1();return}let S=await y.json();await i.withLock(async()=>{a=await i.read();let h=a.contexts[a.active];h.workspace_ids={...h.workspace_ids||{},dev:S?.data?.workspaceId},h.workspace_slugs={...h.workspace_slugs||{},dev:S?.data?.workspaceSlug},h.workspace_id=S?.data?.workspaceId,h.workspace_slug=S?.data?.workspaceSlug,await i.write(a);}),s$1={...a.contexts[a.active],environment:"dev"},d$1=s$1.workspace_id,v=s$1.workspace_slug;}catch(y){e$1?.({type:"error",message:`Failed to auto-provision workspace: ${y.message}`});let{userId:S,tenantId:h}=await d();S?await f(a$1.DEV_FAILED,S,h,{error_class:y?.constructor?.name,workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:y?.constructor?.name,workspace:s$1?.workspace_slug,env:s$1?.environment}),await j$1();return}let{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.DEV_STARTED,f$1,w,{workspace:s$1.workspace_slug,env:s$1.environment}):await e(a$1.DEV_STARTED,{workspace:s$1.workspace_slug,env:s$1.environment});let m=[];function T(y){return {Authorization:`Bearer ${y}`,...l}}let I=r$1;async function x(){let y=await wt();return y&&(I=y),T(I)}let q=o.replace(/^http/,"ws")+"/api/dev/sync?workspaceId="+encodeURIComponent(d$1),K,D=Et(q,x,{onOpen:()=>{e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,d$1)}),K?.triggerFullSync();},onAck:(y,S,h)=>{let g={type:h?"orphaned":"synced",message:`${h?"orphaned":"synced"} ${y}`,timestamp:sn()};m.push(g),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,d$1)});},onValidationErrorAck:()=>{},onWarning:(y,S)=>{let h={type:"warning",message:S};m.push(h),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,d$1)});},onError:(y,S)=>{let h={type:"error",message:`Sync failed for ${y}: ${S}`};m.push(h),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,d$1)});},onFatal:async y=>{clearInterval(N);let S=`Fatal error: ${y}. Shutting down...`;e$1?.({type:"error",message:S});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEV_FAILED,h,g,{error_class:"FatalWebSocketError",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:"FatalWebSocketError",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}),K?.close(),D?.close(),be(1,S);},onAuthFailure:async()=>{clearInterval(N);let y="Your session was rejected by the server. Run `culvii login` to re-authenticate. Shutting down...";e$1?.({type:"error",message:y});let{userId:S,tenantId:h}=await d();S?await f(a$1.DEV_FAILED,S,h,{error_class:"ApiKeyRejected",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}):await e(a$1.DEV_FAILED,{error_class:"ApiKeyRejected",workspace:s$1.workspace_slug,workspace:s$1?.workspace_slug,env:s$1?.environment}),K?.close(),D?.close(),be(1,y);}});K=Tt({workspaceId:d$1,onSync:y=>{D.send({type:"sync",slug:y.slug,resourceType:y.type,definition:y.definition,workspaceId:d$1});},onOrphan:(y,S)=>{D.send({type:"orphan",slug:y,resourceType:S,workspaceId:d$1});},onValidationError:({resourceType:y,slug:S,missingReferenceId:h,message:g})=>{D.send({type:"validation-error",slug:S,resourceType:y,workspaceId:d$1,missingReferenceId:h,message:g});},onLog:(y,S)=>{let h={type:S==="error"?"error":S==="warn"?"warning":"info",message:y};m.push(h),e$1?.({type:"connected",log:[...m],consoleUrl:Le(s$1.tenant_slug,d$1)});}});let R=3e3*1e3,N=setInterval(()=>{D.reconnectNow();},R);process.on("SIGINT",async()=>{clearInterval(N),D.close(),K.close(),e$1?.({type:"disconnected"});let{userId:y,tenantId:S}=await d();y?await f(a$1.DEV_STOPPED,y,S,{duration_ms:Date.now()-c,workspace:s$1.workspace_slug,env:s$1.environment}):await e(a$1.DEV_STOPPED,{duration_ms:Date.now()-c,workspace:s$1.workspace_slug,env:s$1.environment}),await j$1(),process.exit(0);});});}function on(t){t.command("dev").description("Start the development server and file watcher").action(async()=>{if(Er()){await hr();return}await V(async e$1=>{let n=new a$3,r$1=await n.read({exitOnError:!1});if(!r$1.active||!r$1.contexts[r$1.active]){console.error("No active context. Run culvii login first.");let{userId:D,tenantId:R}=await d();D?await f(a$1.DEV_FAILED,D,R,{error_class:"NoActiveContext"}):await e(a$1.DEV_FAILED,{error_class:"NoActiveContext"}),await j$1(),process.exit(1);}let{apiUrl:i,context:a}=await r({env:"dev"}),c=s(a),o=Date.now(),s$1=a.workspace_id,l=a.workspace_slug;try{let D=await j(`${i}/api/workspaces`,e$1,{method:"POST",headers:{...c,"Content-Type":"application/json"},body:JSON.stringify({name:`dev-${a.user_id.slice(0,12)}`,slug:`dev-${a.user_id.slice(0,12)}`,tenantId:a.tenant_id})});if(!D.ok){let N=await H(D);console.error(`Failed to auto-provision workspace: ${N}`);let{userId:y,tenantId:S}=await d();y?await f(a$1.DEV_FAILED,y,S,{error_class:"WorkspaceProvisionError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:"WorkspaceProvisionError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j$1(),process.exit(1);}let R=await D.json();await n.withLock(async()=>{r$1=await n.read();let N=r$1.contexts[r$1.active];N.workspace_ids={...N.workspace_ids||{},dev:R?.data?.workspaceId},N.workspace_slugs={...N.workspace_slugs||{},dev:R?.data?.workspaceSlug},N.workspace_id=R?.data?.workspaceId,N.workspace_slug=R?.data?.workspaceSlug,await n.write(r$1);}),a={...r$1.contexts[r$1.active],environment:"dev"},s$1=a.workspace_id,l=a.workspace_slug;}catch(D){console.error(`Failed to auto-provision workspace: ${D.message}`);let{userId:R,tenantId:N}=await d();R?await f(a$1.DEV_FAILED,R,N,{error_class:D?.constructor?.name,workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:D?.constructor?.name,workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j$1(),process.exit(1);}console.log(`tenant: ${a.tenant_slug} | workspace: ${l||"unknown"} | env: dev`);let{userId:d$1,tenantId:v}=await d();d$1?await f(a$1.DEV_STARTED,d$1,v,{workspace:a.workspace_slug,env:a.environment}):await e(a$1.DEV_STARTED,{workspace:a.workspace_slug,env:a.environment});function f$1(D){return {Authorization:`Bearer ${D}`,...c}}let w$1=e$1;async function m(){let D=await wt();return D&&(w$1=D),f$1(w$1)}let T=i.replace(/^http/,"ws")+"/api/dev/sync?workspaceId="+encodeURIComponent(s$1),I,x$1=Et(T,m,{onOpen:()=>{console.log("Watching ./..."),console.log(`You can access your dev session here: ${Le(a.tenant_slug,s$1)}`),I?.triggerFullSync();},onAck:(D,R,N)=>{let y=sn();console.log(N?`${w} [${y}] orphaned ${D}`:`${w} [${y}] synced ${D}`);},onValidationErrorAck:()=>{},onWarning:(D,R)=>{console.log(`${y} ${R}`);},onError:(D,R)=>{console.log(`${y} Sync failed for ${D}: ${R}`);},onFatal:async D=>{clearInterval(K),console.error(`Fatal error: ${D}. Shutting down...`);let{userId:R,tenantId:N}=await d();R?await f(a$1.DEV_FAILED,R,N,{error_class:"FatalWebSocketError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:"FatalWebSocketError",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j$1(),I?.close(),x$1?.close(),process.exit(1);},onAuthFailure:async()=>{clearInterval(K),console.error(`${x} Your session was rejected by the server. Run \`culvii login\` to re-authenticate. Shutting down...`);let{userId:D,tenantId:R}=await d();D?await f(a$1.DEV_FAILED,D,R,{error_class:"ApiKeyRejected",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}):await e(a$1.DEV_FAILED,{error_class:"ApiKeyRejected",workspace:a.workspace_slug,workspace:a?.workspace_slug,env:a?.environment}),await j$1(),I?.close(),x$1?.close(),process.exit(1);}});I=Tt({workspaceId:s$1,onSync:D=>{let R={type:"sync",slug:D.slug,resourceType:D.type,definition:D.definition,workspaceId:s$1};x$1.send(R);},onOrphan:(D,R)=>{let N={type:"orphan",slug:D,resourceType:R,workspaceId:s$1};x$1.send(N);},onValidationError:({resourceType:D,slug:R,missingReferenceId:N,message:y})=>{let S={type:"validation-error",slug:R,resourceType:D,workspaceId:s$1,missingReferenceId:N,message:y};x$1.send(S);}});let q=3e3*1e3,K=setInterval(()=>{x$1.reconnectNow();},q);process.on("SIGINT",async()=>{clearInterval(K),x$1.close(),I.close(),console.log("Disconnected. Draft state discarded.");let{userId:D,tenantId:R}=await d();D?await f(a$1.DEV_STOPPED,D,R,{duration_ms:Date.now()-o,workspace:a.workspace_slug,env:a.environment}):await e(a$1.DEV_STOPPED,{duration_ms:Date.now()-o,workspace:a.workspace_slug,env:a.environment}),await j$1(),process.exit(0);});});});}function Ir(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function Ct(t){if(Array.isArray(t))return t.map(Ct);if(t!==null&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=Ct(t[n]);return e}return t}function Sr(t){if(!t||typeof t!="object")return t;let e={...t};return Array.isArray(e.nodes)&&(e.nodes=e.nodes.map(({id:n,...r})=>r)),e}function ln(t){return createHash("sha256").update(JSON.stringify(Ct(Sr(t)))).digest("hex")}function Tr(t){return new Promise(e=>{let n=_r.createInterface({input:process.stdin,output:process.stdout});n.question(t,r=>{n.close(),e(r.toLowerCase()==="y"||r.toLowerCase()==="yes");});})}function Cr(t){let e=t.versionCount??1,n=t.activeVersion??t.previousVersion;return ` - ${t.slug}: deletes all ${e} ${e===1?"version":"versions"}${n?`; active is v${n}`:""}`}function cn(t){let e=t.executions??0,n=t.activeExecutions??0,r=t.activeVersion??t.previousVersion;return `${e} total, active${r?` v${r}`:""}: ${n} executions`}async function Dr(t){let{DeployView:e$1}=await import('./DeployView-D4UEXMDJ.js'),n=null,r$1=null;function i(){let[a,c]=Ee.useState({type:"planning"});return Ee.useEffect(()=>(n=c,()=>{n=null;}),[]),Ee.createElement(e$1,{state:a,onConfirm:o=>r$1?.(o)})}await G(Promise.resolve(Ee.createElement(i))),await V(async a=>{if(t.env==="dev"){n?.({type:"error",message:"Use culvii dev for local iteration"}),await j$1();return}if(t.env!=="sandbox"&&t.env!=="prod"){n?.({type:"error",message:"Environment must be sandbox or prod"}),await j$1();return}let{apiUrl:c,context:o}=await r({env:t.env}),s$1=s(o);if(!t.workspaceSlug){n?.({type:"error",message:"--workspace-slug <slug> is required for deploy",detail:"Run `culvii workspace list` to see available workspaces."});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_FAILED,h,g,{error_class:"NoWorkspace",workspace:t.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{error_class:"NoWorkspace",workspace:t.workspaceSlug}),await j$1();return}let l=await j(`${c}/api/workspaces?tenantId=${o.tenant_id}`,a,{headers:s$1});if(!l.ok){n?.({type:"error",message:"Failed to fetch workspaces",detail:await H(l)});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_FAILED,h,g,{env:t.env,error_class:"WorkspaceFetchError",workspace:t.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{env:t.env,error_class:"WorkspaceFetchError",workspace:t.workspaceSlug}),await j$1();return}let f$1=((await l.json())?.data?.workspaces||[]).find(h=>h.slug===t.workspaceSlug);if(!f$1){n?.({type:"error",message:`Workspace not found: ${t.workspaceSlug}`});let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_FAILED,h,g,{env:t.env,workspace:t.workspaceSlug,error_class:"WorkspaceNotFound"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:t.workspaceSlug,error_class:"WorkspaceNotFound"}),await j$1();return}let w=f$1.id,m=async h=>{n?.({type:"error",message:h});let{userId:g,tenantId:b}=await d();g?await f(a$1.DEPLOY_FAILED,g,b,{env:t.env,workspace:f$1?.slug,error_class:"ValidationError"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:"ValidationError"}),await j$1();},T=process.cwd(),I=await je(T),x;try{x=(await Me(I)).sort((h,g)=>+(g.type==="surface")-+(h.type==="surface"));}catch(h){await m(`Deploy failed: ${h.message}`);return}let q=[],K=new Set,D=new Set(x.filter(h=>h.type==="surface").map(h=>Y(h.definition.id??"")).filter(Boolean));for(let h of x){let g=h.definition.id;g&&K.add(typeof g=="string"?Y(g):String(g));}for(let h of x){let g=h.definition.id;if(!g){n?.({type:"error",message:`Deploy failed: ${h.type} is missing an explicit id.`}),await j$1();return}let b=typeof g=="string"?Y(g):String(g);if(h.type==="surface"){let O=Ze(h.definition);if(O.length)return m(`Deploy failed: surface '${b}' ${O.join("; ")}.`)}if(h.type==="agent"){for(let L of rt(h.definition))return m(`Deploy failed: ${L}`);let O=h.definition.secondaryAgents||[];for(let L of O){let ee=L.id,se=!!(L?.systemPrompt||L?.modelConfig);if(ee&&!se&&!K.has(ee))return m(`Deploy failed: agent '${b}' references secondary agent '${ee}' which is not defined.`)}for(let L of Ne(h.definition))if(!K.has(Y(L)))return m(`Deploy failed: agent '${b}' references workflow '${L}' which is not defined.`)}if(h.type==="workflow"){for(let O of he(h.definition))if(!K.has(Y(O)))return m(`Deploy failed: workflow '${b}' references agent '${O}' which is not defined.`);for(let O of Qe(h.definition))if(O.version===void 0&&!D.has(Y(O.surfaceKey)))return m(`Deploy failed: workflow '${b}' references local surface '${O.surfaceKey}' which is not defined. Pin a published version or define the surface.`)}q.push({type:h.type,slug:b,definition:h.definition,configHash:ln(h.definition)});}let R=et(x);if(R)return m(`Deploy failed: ${R}`);let N=nt(x);if(N)return m(`Deploy failed: ${N}`);let y=tt(x);if(y)return m(`Deploy failed: ${y}`);let S=at(x);if(S)return m(`Deploy failed: ${S}`);try{let{userId:h,tenantId:g}=await d();h?await f(a$1.DEPLOY_STARTED,h,g,{env:t.env,workspace:f$1.slug}):await e(a$1.DEPLOY_STARTED,{env:t.env,workspace:f$1.slug});let b=await j(`${c}/api/workspaces/${w}/deploys/plan`,a,{method:"POST",headers:{...s$1,"Content-Type":"application/json"},body:JSON.stringify({environment:t.env,definitions:q})});if(!b.ok){let ae=await H(b);n?.({type:"error",message:"Failed to plan deploy",detail:ae});let{userId:_e,tenantId:yt}=await d();_e?await f(a$1.DEPLOY_FAILED,_e,yt,{env:t.env,workspace:f$1?.slug,error_class:"PlanError"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:"PlanError"}),await j$1();return}let O=await b.json(),L=O.plan,ee=O.planToken;if(!((L.created||[]).length>0||(L.versioned||[]).length>0||(L.destroyed||[]).length>0)){n?.({type:"no_changes"}),await j$1();return}if(!await new Promise(ae=>{r$1=ae,n?.({type:"confirming",plan:{created:L.created||[],versioned:L.versioned||[],destroyed:L.destroyed||[]},env:t.env});})){n?.({type:"aborted",reason:"user_cancelled"});let{userId:ae,tenantId:_e}=await d();ae?await f(a$1.DEPLOY_ABORTED,ae,_e,{env:t.env,workspace:f$1?.slug,reason:"user_cancelled"}):await e(a$1.DEPLOY_ABORTED,{env:t.env,workspace:f$1?.slug,reason:"user_cancelled"}),await j$1();return}n?.({type:"applying"});let we=await j(`${c}/api/workspaces/${w}/deploys/apply`,a,{method:"POST",headers:{...s$1,"Content-Type":"application/json"},body:JSON.stringify({planToken:ee})});if(!we.ok){let ae=await H(we);n?.({type:"error",message:"Failed to apply deploy",detail:ae});let{userId:_e,tenantId:yt}=await d();_e?await f(a$1.DEPLOY_FAILED,_e,yt,{env:t.env,workspace:f$1?.slug,error_class:"ApplyError"}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:"ApplyError"}),await j$1();return}let W=await we.json();n?.({type:"success",env:t.env,created:(W.created||[]).length,versioned:(W.versioned||[]).length,destroyed:(W.destroyed||[]).length,createdItems:W.created||[],versionedItems:W.versioned||[],destroyedItems:W.destroyed||[]});let{userId:$,tenantId:le}=await d();$?await f(a$1.DEPLOY_SUCCEEDED,$,le,{env:t.env,workspace:f$1.slug,created:L.created.length,versioned:L.versioned.length,destroyed:L.destroyed.length}):await e(a$1.DEPLOY_SUCCEEDED,{env:t.env,workspace:f$1.slug,created:L.created.length,versioned:L.versioned.length,destroyed:L.destroyed.length});}catch(h){n?.({type:"error",message:"Unexpected error",detail:h.message});let{userId:g,tenantId:b}=await d();g?await f(a$1.DEPLOY_FAILED,g,b,{env:t.env,workspace:f$1?.slug,error_class:h?.constructor?.name}):await e(a$1.DEPLOY_FAILED,{env:t.env,workspace:f$1?.slug,error_class:h?.constructor?.name}),await j$1();}});}function dn(t){t.command("deploy").description("Deploy an agent").requiredOption("--env <env>","Environment (sandbox or prod)").option("--workspace-slug <slug>","Target workspace slug (overrides config)").action(async e$1=>{if(Ir()){await Dr(e$1);return}await V(async n=>{e$1.env==="dev"&&(console.log("Use culvii dev for local iteration"),await j$1(),process.exit(1)),e$1.env!=="sandbox"&&e$1.env!=="prod"&&(console.error("Environment must be sandbox or prod"),await j$1(),process.exit(1));let{apiUrl:r$1,context:i}=await r({env:e$1.env}),a=s(i);if(!e$1.workspaceSlug){console.error("Error: --workspace-slug <slug> is required for deploy. Run `culvii workspace list` to see available workspaces.");let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_FAILED,y,S,{error_class:"NoWorkspace",workspace:e$1.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{error_class:"NoWorkspace",workspace:e$1.workspaceSlug}),await j$1(),process.exit(1);}let c=null,o=await j(`${r$1}/api/workspaces?tenantId=${i.tenant_id}`,n,{headers:a});if(!o.ok){console.error(`Failed to fetch workspaces: ${await H(o)}`);let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_FAILED,y,S,{env:e$1.env,error_class:"WorkspaceFetchError",workspace:e$1.workspaceSlug}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,error_class:"WorkspaceFetchError",workspace:e$1.workspaceSlug}),await j$1(),process.exit(1);}let d$1=((await o.json())?.data?.workspaces||[]).find(y=>y.slug===e$1.workspaceSlug);if(!d$1){console.error("Workspace not found: "+e$1.workspaceSlug);let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_FAILED,y,S,{env:e$1.env,workspace:e$1.workspaceSlug,error_class:"WorkspaceNotFound"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:e$1.workspaceSlug,error_class:"WorkspaceNotFound"}),await j$1(),process.exit(1);}c=d$1.id;let v=e$1.workspaceSlug;console.log(`tenant: ${i.tenant_slug} | workspace: ${v} | env: ${e$1.env}`);let f$1=async y=>{console.error(y);let{userId:S,tenantId:h}=await d();S?await f(a$1.DEPLOY_FAILED,S,h,{env:e$1.env,workspace:d$1?.slug,error_class:"ValidationError"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:d$1?.slug,error_class:"ValidationError"}),await j$1(),process.exit(1);},w$1=process.cwd(),m=await je(w$1),T;try{T=(await Me(m)).sort((y,S)=>+(S.type==="surface")-+(y.type==="surface"));}catch(y){await f$1(`Deploy failed: ${y.message}`);return}let I=[],x=new Set,q=new Set(T.filter(y=>y.type==="surface").map(y=>Y(y.definition.id??"")).filter(Boolean));for(let y of T){let S=y.definition.id;S&&x.add(typeof S=="string"?Y(S):String(S));}for(let y of T){let S=y.definition.id;S||(console.error(`Deploy failed: ${y.type} is missing an explicit id.`),await j$1(),process.exit(1));let h=typeof S=="string"?Y(S):String(S);if(y.type==="surface"){let g=Ze(y.definition);g.length&&await f$1(`Deploy failed: surface '${h}' ${g.join("; ")}.`);}if(y.type==="agent"){for(let b of rt(y.definition))await f$1(`Deploy failed: ${b}`);let g=y.definition.secondaryAgents||[];for(let b of g){let O=b.id,L=!!(b?.systemPrompt||b?.modelConfig);O&&!L&&!x.has(O)&&await f$1(`Deploy failed: agent '${h}' references secondary agent '${O}' which is not defined in this workspace. Define '${O}' before deploying.`);}for(let b of Ne(y.definition))x.has(Y(b))||await f$1(`Deploy failed: agent '${h}' references workflow '${b}' which is not defined in this workspace. Define '${b}' before deploying.`);}if(y.type==="workflow"){for(let g of he(y.definition))x.has(Y(g))||await f$1(`Deploy failed: workflow '${h}' references agent '${g}' which is not defined in this workspace. Define '${g}' before deploying.`);for(let g of Qe(y.definition))g.version===void 0&&!q.has(Y(g.surfaceKey))&&await f$1(`Deploy failed: workflow '${h}' references local surface '${g.surfaceKey}' which is not defined. Pin a published version or define the surface.`);}I.push({type:y.type,slug:h,definition:y.definition,configHash:ln(y.definition)});}let K=et(T);K&&await f$1(`Deploy failed: ${K}`);let D=nt(T);D&&await f$1(`Deploy failed: ${D}`);let R=tt(T);R&&await f$1(`Deploy failed: ${R}`);let N=at(T);N&&await f$1(`Deploy failed: ${N}`);try{let{userId:y,tenantId:S}=await d();y?await f(a$1.DEPLOY_STARTED,y,S,{env:e$1.env,workspace:d$1.slug}):await e(a$1.DEPLOY_STARTED,{env:e$1.env,workspace:d$1.slug});let h=await j(`${r$1}/api/workspaces/${c}/deploys/plan`,n,{method:"POST",headers:{...a,"Content-Type":"application/json"},body:JSON.stringify({environment:e$1.env,definitions:I})});if(!h.ok){let $=await H(h);console.error(`Error: Failed to plan deploy. ${$}`);let{userId:le,tenantId:ae}=await d();le?await f(a$1.DEPLOY_FAILED,le,ae,{env:e$1.env,workspace:d$1?.slug,error_class:"PlanError"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:d$1?.slug,error_class:"PlanError"}),await j$1(),process.exit(1);}let g=await h.json(),b=g.plan,O=g.planToken;(b.created||[]).length>0||(b.versioned||[]).length>0||(b.destroyed||[]).length>0||(console.log("Nothing to deploy. All resources are up to date."),await j$1(),process.exit(0)),console.log(`Plan for ${e$1.env}:`);for(let $ of b.created||[])console.log(` + ${$.slug} CREATED`);for(let $ of b.versioned||[])console.log(` ~ ${$.slug} VERSIONED (${cn($)})`);for(let $ of b.destroyed||[])console.log(` - ${$.slug} DELETE (${cn($)})`),console.log(Cr($));if(!await Tr(`Deploy to ${e$1.env}? [y/N] `)){console.log("Deployment cancelled.");let{userId:$,tenantId:le}=await d();$?await f(a$1.DEPLOY_ABORTED,$,le,{env:e$1.env,workspace:d$1?.slug,reason:"user_cancelled"}):await e(a$1.DEPLOY_ABORTED,{env:e$1.env,workspace:d$1?.slug,reason:"user_cancelled"}),await j$1(),process.exit(0);}let se=await j(`${r$1}/api/workspaces/${c}/deploys/apply`,n,{method:"POST",headers:{...a,"Content-Type":"application/json"},body:JSON.stringify({planToken:O})});if(!se.ok){let $=await H(se);console.error(`Error: Failed to apply deploy. ${$}`);let{userId:le,tenantId:ae}=await d();le?await f(a$1.DEPLOY_FAILED,le,ae,{env:e$1.env,workspace:d$1?.slug,error_class:"ApplyError"}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:d$1?.slug,error_class:"ApplyError"}),await j$1(),process.exit(1);}let pe=await se.json();console.log(`${w} Deployed to ${e$1.env}`),console.log(` Created: ${(pe.created||[]).length} resource(s)`);for(let $ of pe.created||[])console.log(` + ${$.slug||$.referenceKey||$.id}`);console.log(` Versioned: ${(pe.versioned||[]).length} resource(s)`);for(let $ of pe.versioned||[])console.log(` ~ ${$.slug||$.referenceKey||$.id}`);console.log(` Destroyed: ${(pe.destroyed||[]).length} resource(s)`);for(let $ of pe.destroyed||[])console.log(` - ${$.slug||$.referenceKey||$.id}`);let{userId:we,tenantId:W}=await d();we?await f(a$1.DEPLOY_SUCCEEDED,we,W,{env:e$1.env,workspace:d$1.slug,created:b.created.length,versioned:b.versioned.length,destroyed:b.destroyed.length}):await e(a$1.DEPLOY_SUCCEEDED,{env:e$1.env,workspace:d$1.slug,created:b.created.length,versioned:b.versioned.length,destroyed:b.destroyed.length});}catch(y){console.error(`Error: Network or unexpected error: ${y.message}`);let{userId:S,tenantId:h}=await d();S?await f(a$1.DEPLOY_FAILED,S,h,{env:e$1.env,workspace:d$1?.slug,error_class:y?.constructor?.name}):await e(a$1.DEPLOY_FAILED,{env:e$1.env,workspace:d$1?.slug,error_class:y?.constructor?.name}),await j$1(),process.exit(1);}});});}function br(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function un(t){t.command("rename").description("Rename a resource").argument("<old-slug>","Current slug").argument("<new-slug>","New slug").requiredOption("--resource-type <type>","Type of resource (agent)").option("--env <env>","Target environment (sandbox or prod)").option("--workspace-slug <slug>","Target workspace slug (overrides config)").action(async(e$1,n,r$1)=>{if(br()){let o=function(){let[s,l]=Ee.useState({type:"loading"});return Ee.useEffect(()=>(c.current=l,()=>{c.current=null;}),[]),Ee.createElement(a,{state:s})};let{RenameView:a}=await import('./RenameView-3BABATL6.js'),c={current:null};if(await G(Promise.resolve(Ee.createElement(o))),r$1.resourceType!=="agent"){c.current?.({type:"error",message:"Invalid resource type",detail:`'${r$1.resourceType}' \u2014 must be: agent`}),await e(a$1.RENAME_FAILED,{error_class:"InvalidResourceType",resourceType:r$1.resourceType,env:r$1.env,workspace:r$1.workspaceSlug}),await j$1();return}await V(async s$1=>{let{apiUrl:l,context:d$1}=await r({env:r$1.env}),v=s(d$1),{userId:f$1,tenantId:w}=await d();f$1?await f(a$1.RENAME_STARTED,f$1,w,{resourceType:r$1.resourceType,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}):await e(a$1.RENAME_STARTED,{resourceType:r$1.resourceType,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}),await j$1();let m=d$1.workspace_id;if(r$1.workspaceSlug){let T=await j(`${l}/api/workspaces?tenantId=${d$1.tenant_id}`,s$1,{headers:v});if(!T.ok){c.current?.({type:"error",message:"Failed to fetch workspaces",detail:await H(T)}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}),await j$1();return}let x=((await T.json())?.data?.workspaces||[]).find(q=>q.slug===r$1.workspaceSlug);if(!x){c.current?.({type:"error",message:`Workspace not found: ${r$1.workspaceSlug}`}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}),await j$1();return}m=x.id;}if(!m){c.current?.({type:"error",message:"No workspace configured",detail:"Run culvii dev first, or provide --workspace-slug <slug>."}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}),await j$1();return}try{let T=await j(`${l}/api/workspaces/${m}/resources/${e$1}/rename`,s$1,{method:"PATCH",headers:{...v,"Content-Type":"application/json"},body:JSON.stringify({newSlug:n,resourceType:r$1.resourceType})});if(!T.ok){let I=await H(T);c.current?.({type:"error",message:"Failed to rename resource",detail:`Server responded with ${T.status}: ${I}`}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:I,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:I,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}),await j$1();return}c.current?.({type:"success",oldSlug:e$1,newSlug:n}),f$1?await f(a$1.RENAME_SUCCEEDED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}):await e(a$1.RENAME_SUCCEEDED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}),await j$1();}catch(T){c.current?.({type:"error",message:"Unexpected error",detail:T.message}),f$1?await f(a$1.RENAME_FAILED,f$1,w,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:T.message,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:T.message,env:d$1.environment,workspace:r$1.workspaceSlug??d$1.workspace_slug}),await j$1();}});return}await V(async a=>{r$1.resourceType!=="agent"&&(console.error(`Error: Invalid resource type '${r$1.resourceType}'. Must be: agent`),await e(a$1.RENAME_FAILED,{error_class:"InvalidResourceType",resourceType:r$1.resourceType,env:r$1.env,workspace:r$1.workspaceSlug}),await j$1(),process.exit(1));let{apiUrl:c,context:o}=await r({env:r$1.env}),s$1=s(o),{userId:l,tenantId:d$1}=await d();l?await f(a$1.RENAME_STARTED,l,d$1,{resourceType:r$1.resourceType,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}):await e(a$1.RENAME_STARTED,{resourceType:r$1.resourceType,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}),await j$1(),console.log(`tenant: ${o.tenant_slug} | workspace: ${r$1.workspaceSlug||o.workspace_slug||"unknown"} | env: ${o.environment}`);let v=o.workspace_id;if(r$1.workspaceSlug){let f$1=await j(`${c}/api/workspaces?tenantId=${o.tenant_id}`,a,{headers:s$1});f$1.ok||(console.error(`Failed to fetch workspaces: ${await H(f$1)}`),l?await f(a$1.RENAME_FAILED,l,d$1,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceFetchError",env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}),await j$1(),process.exit(1));let T=((await f$1.json())?.data?.workspaces||[]).find(I=>I.slug===r$1.workspaceSlug);T||(console.error("Workspace not found: "+r$1.workspaceSlug),l?await f(a$1.RENAME_FAILED,l,d$1,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"WorkspaceNotFound",env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}),await j$1(),process.exit(1)),v=T.id;}v||(console.error("Error: No workspace configured. Run culvii dev first, or provide --workspace-slug <slug>."),l?await f(a$1.RENAME_FAILED,l,d$1,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error_class:"NoWorkspace",env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}),await j$1(),process.exit(1));try{let f$1=await j(`${c}/api/workspaces/${v}/resources/${e$1}/rename`,a,{method:"PATCH",headers:{...s$1,"Content-Type":"application/json"},body:JSON.stringify({newSlug:n,resourceType:r$1.resourceType})});if(!f$1.ok){let w=await H(f$1);console.error(`Error: Failed to rename resource. Server responded with ${f$1.status}: ${w}`),l?await f(a$1.RENAME_FAILED,l,d$1,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:w,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:w,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}),await j$1(),process.exit(1);}console.log(`${w} Renamed ${e$1} ${z} ${n}`),console.log(" Immutable ID preserved. All execution history retained."),l?await f(a$1.RENAME_SUCCEEDED,l,d$1,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}):await e(a$1.RENAME_SUCCEEDED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}),await j$1();}catch(f$1){console.error(`Error: Network or unexpected error: ${f$1.message}`),l?await f(a$1.RENAME_FAILED,l,d$1,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:f$1.message,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}):await e(a$1.RENAME_FAILED,{oldSlug:e$1,newSlug:n,resourceType:r$1.resourceType,error:f$1.message,env:o.environment,workspace:r$1.workspaceSlug??o.workspace_slug}),await j$1(),process.exit(1);}});});}async function pn(t,e,n){let r=await j(`${e}/auth/me`,t,{skipEnvironmentHeader:true});if(!r.ok)return {ok:false,status:r.status,error:await H(r)};let i=await r.json(),a=i?.user||i?.data?.user||i,c=i?.tenant||i?.data?.tenant||{},o=c?.slug||n.tenant_slug||"Unknown",s=c?.name||n.tenant_slug||"Unknown",l=Array.isArray(i?.tenants)?i.tenants.find(v=>v.id===c?.id):void 0,d=Array.isArray(l?.roleConfig?.grants)?l.roleConfig.grants:[];return {ok:true,email:a?.email||"Unknown",name:a?.name||"Unknown",tenant:o,tenantName:s,workspace:n.workspace_slug||null,access:d}}function Rr(t){let e=t.environment?t.workspace?`${t.environment.environmentName} / ${t.workspace.workspaceName}`:`${t.environment.environmentName} \xB7 all workspaces`:"tenant level";return `${t.role.displayName} \u2014 ${e}`}async function Ve(t,e$1){let{userId:n,tenantId:r}=await d(),i=t?{error:true,...e$1}:e$1?{...e$1}:void 0;n?await f(a$1.WHOAMI_VIEWED,n,r,i):await e(a$1.WHOAMI_VIEWED,i),await j$1();}function yn(t){t.command("whoami").description("Show current authenticated user context").option("--json","Output as JSON").action(async e=>{let{getCapabilities:n}=await import('./terminalCapabilities-LJTRMVG4.js'),r=n();if(e.json||!r.isTTY||r.isCI||!r.supportsColor||!r.supportsUnicode){await xr();return}await $r();});}async function xr(){await V(async t=>{let{apiUrl:e,context:n}=await r(),r$1=await pn(t,e,n);r$1.ok||(process.stderr.write(JSON.stringify({error:r$1.error})+`
5
+ `),await Ve(!0),process.exit(1)),process.stdout.write(JSON.stringify({email:r$1.email,name:r$1.name,tenant:r$1.tenant,tenant_name:r$1.tenantName,workspace:r$1.workspace,access:r$1.access})+`
6
+ `),await Ve(!1,{workspace:r$1.workspace});});}async function $r(){let{WhoamiView:t}=await import('./WhoamiView-TKSYSHQ2.js'),e={type:"loading"},n=null,{useState:r$1,useEffect:i}=await import('react');function a(){let[c,o]=r$1(e);return i(()=>(n=o,()=>{n=null;}),[]),Ee.createElement(t,{state:c})}await G(Promise.resolve(Ee.createElement(a))),await V(async c=>{try{let{apiUrl:o,context:s}=await r(),l=await pn(c,o,s);if(!l.ok){n?.({type:"error",message:"Failed to fetch identity",detail:`Server responded with ${l.status}: ${l.error}`}),await Ve(!0);return}n?.({type:"success",email:l.email,name:l.name,tenant:l.tenant,tenantName:l.tenantName,workspace:l.workspace,access:l.access.map(Rr)}),await Ve(!1,{workspace:l.workspace});}catch(o){n?.({type:"error",message:"Unexpected error",detail:o.message}),await Ve(!0);}});}function Or(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function lt(t){return t.workspace_slugs?.[t.environment]??t.workspace_slug??null}function gn(t){t.command("switch [tenant-slug]").description("Switch the active tenant context").action(async e$1=>{try{let n=new a$3,r;try{r=await n.read({exitOnError:!1});}catch(l){if(l.message==="Active context key not found"){let d=re.join(Rt.homedir(),".culvii","config"),v=await ce.readFile(d,"utf-8");r=JSON.parse(v);}else if(l.code==="ENOENT"){console.error("No configuration found. Please run `culvii login` first.");let{userId:d$1,tenantId:v}=await d();d$1?await f(a$1.TENANT_SWITCH_FAILED,d$1,v,{error_class:"ENOENT",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"ENOENT",slug:e$1}),await j$1(),process.exit(1);}else throw l}if(!r||!r.contexts){console.error("No configuration found. Please run `culvii login` first.");let{userId:l,tenantId:d$1}=await d();l?await f(a$1.TENANT_SWITCH_FAILED,l,d$1,{error_class:"NoConfig",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"NoConfig",slug:e$1}),await j$1(),process.exit(1);}let i=r.contexts,a=Object.keys(i);if(a.length===0){console.error("No tenants available. Please run `culvii login` first.");let{userId:l,tenantId:d$1}=await d();l?await f(a$1.TENANT_SWITCH_FAILED,l,d$1,{error_class:"NoTenants",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"NoTenants",slug:e$1}),await j$1(),process.exit(1);}if(Or()){let{SwitchView:l}=await import('./SwitchView-PS3ICKZT.js');if(a.length===1&&!e$1&&(await G(Promise.resolve(Ee.createElement(l,{state:{type:"only_one",slug:a[0]}}))),process.exit(0)),!e$1){let w=a.map(m=>({slug:m,tenantId:i[m].tenant_id,workspaceSlug:lt(i[m]),environment:i[m].environment,isActive:m===r.active}));await G(Promise.resolve(Ee.createElement(l,{state:{type:"list",tenants:w}}))),process.exit(0);}if(!i[e$1]){let w=a.map(I=>({slug:I,tenantId:i[I].tenant_id,workspaceSlug:lt(i[I]),environment:i[I].environment,isActive:I===r.active}));await G(Promise.resolve(Ee.createElement(l,{state:{type:"error",message:`Tenant '${e$1}' not found.`}})));let{userId:m,tenantId:T}=await d();m?await f(a$1.TENANT_SWITCH_FAILED,m,T,{error_class:"TenantNotFound",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"TenantNotFound",slug:e$1}),await j$1(),process.exit(1);}await n.withLock(async()=>{let w=re.join(Rt.homedir(),".culvii","config"),m=await ce.readFile(w,"utf-8"),T=JSON.parse(m);await n.write({...T,active:e$1});});let d$1=i[e$1];await G(Promise.resolve(Ee.createElement(l,{state:{type:"success",slug:e$1,workspaceSlug:lt(d$1),environment:d$1.environment}}))),c();let{userId:v,tenantId:f$1}=await d();v?await f(a$1.TENANT_SWITCHED,v,f$1,{to:e$1}):await e(a$1.TENANT_SWITCHED,{to:e$1}),await j$1();return}if(a.length===1&&!e$1&&(console.log(`Only one tenant available: ${a[0]}`),process.exit(0)),e$1||(console.log("Available tenants:"),a.forEach((l,d)=>{let v=i[l],f=l===r.active?"*":" ";console.log(`${d+1}. ${f} ${l} (Tenant ID: ${v.tenant_id})`);}),console.log(`
7
+ To switch, run: culvii switch <tenant-slug>`),process.exit(0)),!i[e$1]){console.error(`Error: Tenant '${e$1}' not found.`),console.log(`
8
+ Available tenants:`),a.forEach((v,f)=>{let w=i[v],m=v===r.active?"*":" ";console.log(`${f+1}. ${m} ${v} (Tenant ID: ${w.tenant_id})`);});let{userId:l,tenantId:d$1}=await d();l?await f(a$1.TENANT_SWITCH_FAILED,l,d$1,{error_class:"TenantNotFound",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:"TenantNotFound",slug:e$1}),await j$1(),process.exit(1);}await n.withLock(async()=>{let l=re.join(Rt.homedir(),".culvii","config"),d=await ce.readFile(l,"utf-8"),v=JSON.parse(d);await n.write({...v,active:e$1});});let c$1=i[e$1];console.log(`tenant: ${e$1} | workspace: ${lt(c$1)||"none"} | env: ${c$1.environment}`),console.log(`Switched to tenant: ${e$1}`),c();let{userId:o,tenantId:s}=await d();o?await f(a$1.TENANT_SWITCHED,o,s,{to:e$1}):await e(a$1.TENANT_SWITCHED,{to:e$1}),await j$1();}catch(n){n.code==="ENOENT"?console.error("No configuration found. Please run `culvii login` first."):console.error(`Failed to switch context: ${n.message}`);let{userId:r,tenantId:i}=await d();r?await f(a$1.TENANT_SWITCH_FAILED,r,i,{error_class:n.code||n.constructor?.name||"UnknownError",slug:e$1}):await e(a$1.TENANT_SWITCH_FAILED,{error_class:n.code||n.constructor?.name||"UnknownError",slug:e$1}),await j$1(),process.exit(1);}});}var mn=["dev","sandbox","prod"];function Pr(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}async function dt(t){if(!Pr())return false;let{EnvView:e}=await import('./EnvView-3ZURMIZS.js');return await G(Promise.resolve(Ee.createElement(e,{state:t}))),true}async function Wr(t,e,n){let r=await j(`${e}/auth/me`,t,{skipEnvironmentHeader:true});if(!r.ok)return [];let i=await r.json(),a=i?.tenant||{};return ((Array.isArray(i?.tenants)?i.tenants.find(o=>o.id===(n??a?.id)):void 0)?.environments??[]).map(o=>l(o.slug)).filter(o=>o!==null)}function wn(t){t.command("env [environment]").description("Show or switch the active environment (dev, sandbox, prod)").action(async e$1=>{await V(async n=>{let{apiUrl:r$1,context:i}=await r(),a=await Wr(n,r$1,i.tenant_id);if(!e$1){if(await dt({type:"show",current:i.environment,tenant:i.tenant_slug,accessible:a}))return;let v=a.includes(i.environment)?"":" (no access)";process.stdout.write(`current: ${i.environment}${v}
9
+ `),process.stdout.write(`tenant: ${i.tenant_slug}
12
10
  `),process.stdout.write(`available: ${a.length?a.join(", "):"none"}
13
- `),!a.includes(o.environment)&&a.length>0&&process.stdout.write(`
11
+ `),!a.includes(i.environment)&&a.length>0&&process.stdout.write(`
14
12
  Switch with: culvii env ${a[0]}
15
- `);return}let c$1=e$1.toLowerCase();if(!on.includes(c$1)){let k=`Invalid environment '${e$1}'.`,f=`Valid values: ${on.join(", ")}.`;if(await e(a$1.ENV_SWITCH_FAILED,{error_class:"InvalidEnv",env:e$1}),await j(),await ct({type:"error",message:k,detail:f})){process.exitCode=1;return}process.stderr.write(`${k} ${f}
16
- `),process.exit(1);}let i=c$1;if(a.length&&!a.includes(i)){let k=`You don't have access to '${i}' in this tenant.`,f=`Accessible: ${a.join(", ")}.`;if(await e(a$1.ENV_SWITCH_FAILED,{error_class:"NoAccess",env:i}),await j(),await ct({type:"error",message:k,detail:f})){process.exitCode=1;return}process.stderr.write(`${k} ${f}
17
- `),process.exit(1);}let s=new a$3;await s.withLock(async()=>{let k=re.join(bt.homedir(),".culvii","config"),f=await ce.readFile(k,"utf-8"),w=JSON.parse(f),m=w.contexts[w.active];m&&(m.environment=i,m.environment_id=m.environment_ids?.[i]??m.environment_id),await s.write(w);}),await ct({type:"success",env:i,tenant:o.tenant_slug})||(process.stdout.write(`env: ${i} | tenant: ${o.tenant_slug}
18
- `),process.stdout.write(`Switched environment to ${i}
19
- `)),c();let{userId:d$1,tenantId:l}=await d();d$1?await f(a$1.ENV_SWITCHED,d$1,l,{to:i}):await e(a$1.ENV_SWITCHED,{to:i}),await j();});});}var lt={claude:{projectDir:".claude/skills/culvii",globalDir:".claude/skills/culvii",detect:".claude"},cursor:{projectDir:".cursor/skills/culvii",globalDir:".cursor/skills/culvii",detect:".cursor"},windsurf:{projectDir:".windsurf/skills/culvii",globalDir:".codeium/windsurf/skills/culvii",detect:".windsurf"},github:{projectDir:".github/skills/culvii",globalDir:".copilot/skills/culvii",detect:".github"},opencode:{projectDir:".opencode/skills/culvii",globalDir:".config/opencode/skills/culvii",detect:".opencode"},gemini:{projectDir:".gemini/skills/culvii",globalDir:".gemini/skills/culvii",detect:".gemini"},kiro:{projectDir:".kiro/skills/culvii",globalDir:".kiro/skills/culvii",detect:".kiro"},agents:{projectDir:".agents/skills/culvii",globalDir:".agents/skills/culvii",detect:".agents"}};function Nr(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function Lr(t,e=process.cwd()){let n=new Set;if(t){let o=t.toLowerCase()==="codex"?"agents":t.toLowerCase();return lt[o]?(n.add(o),{targets:n}):{error:`Invalid agent: ${t}. Must be one of: ${[...Object.keys(lt),"codex"].sort().join(", ")}.`}}for(let[o,a]of Object.entries(lt))o!=="agents"&&Q.existsSync(re.join(e,a.detect))&&n.add(o);let r=n.size>0;return n.add("agents"),r?{targets:n}:(n.add("claude"),{targets:n,fallbackWarning:"No specific agent directories detected. Defaulting to Claude Code and portable .agents paths."})}function Fr(t){try{let e=JSON.parse(Q.readFileSync(re.join(t,".culvii-skill.json"),"utf8"));return e?.schemaVersion===1&&e?.name==="culvii"&&typeof e?.bundleHash=="string"?e:void 0}catch{return}}function Ur(t,e){for(let n of Object.keys(e).sort()){if(re.isAbsolute(n)||n.split(/[\\/]/).includes(".."))throw new Error(`Unsafe skill bundle path: ${n}`);let r=re.join(t,n);Q.mkdirSync(re.dirname(r),{recursive:true}),Q.writeFileSync(r,e[n],"utf8");}}function Pr(t,e){let n=new Set([...Object.keys(e.files),".culvii-skill.json"]),r=(a,c="")=>Q.readdirSync(a,{withFileTypes:true}).flatMap(i=>{let s=re.posix.join(c,i.name);return i.isDirectory()?r(re.join(a,i.name),s):[s]}),o=r(t);return o.length!==n.size||o.some(a=>!n.has(a))?false:Object.entries(e.files).every(([a,c])=>{let i=Q.readFileSync(re.join(t,a));return createHash("sha256").update(i).digest("hex")===c})}function jr(t,e){let{bundle:n,manifest:r}=e,o=Q.existsSync(t)?Fr(t):void 0;if(o?.bundleHash===r.bundleHash&&Pr(t,r))return "unchanged";if(Q.existsSync(t)&&!o&&!e.force)throw new Error(`Refusing to replace unmanaged skill directory: ${t}. Re-run with --force.`);let a=re.dirname(t);Q.mkdirSync(a,{recursive:true});let c=`${process.pid}-${randomUUID()}`,i=re.join(a,`.culvii.tmp-${c}`),s=re.join(a,`.culvii.backup-${c}`),d=false;try{return Q.mkdirSync(i),Ur(i,n),Q.existsSync(t)&&(Q.renameSync(t,s),d=!0),Q.renameSync(i,t),d&&Q.rmSync(s,{recursive:!0,force:!0}),o?"updated":"installed"}catch(l){throw Q.rmSync(i,{recursive:true,force:true}),d&&!Q.existsSync(t)&&Q.existsSync(s)&&Q.renameSync(s,t),l}}function ln(t){t.command("skill").description("Manage AI agent skills").command("install").description("Install the Culvii authoring skill bundle for AI agents").option("--agent <agent>","Specify agent (claude|cursor|windsurf|github|opencode|gemini|kiro|codex|agents)").option("--global","Install globally instead of in the current project").option("--force","Replace an existing unmanaged Culvii skill directory").action(async e=>{let n=Lr(e.agent);if("error"in n){console.error(`${x} ${n.error}`),process.exitCode=1;return}let r=[];try{let{CULVII_SKILL_BUNDLE:o,CULVII_SKILL_MANIFEST:a}=await import('./skill-bundle-7KYK5GBL.js');for(let c of n.targets){let i=lt[c],s=e.global?i.globalDir:i.projectDir,d=re.join(e.global?bt.homedir():process.cwd(),s),l=jr(d,{force:e.force,bundle:o,manifest:a}),k=re.join(e.global?"~":"",s),f=c==="agents"?"Portable/Codex":c;r.push({agentName:`${f} (${l})`,displayPath:k});}}catch(o){console.error(`${x} ${o.message}`),process.exitCode=1;return}if(Nr()){let{SkillView:o}=await import('./SkillView-N27S3VSV.js');await G(Promise.resolve(ve.createElement(o,{state:{type:"success",installed:r,fallbackWarning:n.fallbackWarning}})));return}n.fallbackWarning&&console.log(`${w} ${n.fallbackWarning}`);for(let o of r)console.log(`${w} Installed skill for ${o.agentName} at ${o.displayPath}`);});}function Rt({label:t,items:e,defaultIndex:n,onSelect:r}){let o=e.map((c,i)=>({key:String(i+1),label:c.label,description:c.description})),a=n!==void 0?String(n+1):void 0;return jsx(a$5,{label:t,options:o,defaultKey:a,onSubmit:c=>{let i=parseInt(c,10)-1,s=e[i];s&&r(s.value);}})}function Hr(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}var de=["agent-only","agent-workflow","agent-workflow-tool","multi-agent"],ue=["openai","anthropic","gemini","google-vertex"],un={"agent-only":"A single standalone AI agent","agent-workflow":"An AI agent triggered by a manual workflow","agent-workflow-tool":"An agent that invokes a workflow as a callable tool","multi-agent":"A coordinator agent that delegates to a specialist agent"},fn={openai:"openai/YOUR_MODEL_ID",anthropic:"anthropic/YOUR_MODEL_ID",gemini:"gemini/YOUR_MODEL_ID","google-vertex":"google-vertex/YOUR_MODEL_ID"},pn=`{
13
+ `);return}let c$1=e$1.toLowerCase();if(!mn.includes(c$1)){let v=`Invalid environment '${e$1}'.`,f=`Valid values: ${mn.join(", ")}.`;if(await e(a$1.ENV_SWITCH_FAILED,{error_class:"InvalidEnv",env:e$1}),await j$1(),await dt({type:"error",message:v,detail:f})){process.exitCode=1;return}process.stderr.write(`${v} ${f}
14
+ `),process.exit(1);}let o=c$1;if(a.length&&!a.includes(o)){let v=`You don't have access to '${o}' in this tenant.`,f=`Accessible: ${a.join(", ")}.`;if(await e(a$1.ENV_SWITCH_FAILED,{error_class:"NoAccess",env:o}),await j$1(),await dt({type:"error",message:v,detail:f})){process.exitCode=1;return}process.stderr.write(`${v} ${f}
15
+ `),process.exit(1);}let s=new a$3;await s.withLock(async()=>{let v=re.join(Rt.homedir(),".culvii","config"),f=await ce.readFile(v,"utf-8"),w=JSON.parse(f),m=w.contexts[w.active];m&&(m.environment=o,m.environment_id=m.environment_ids?.[o]??m.environment_id),await s.write(w);}),await dt({type:"success",env:o,tenant:i.tenant_slug})||(process.stdout.write(`env: ${o} | tenant: ${i.tenant_slug}
16
+ `),process.stdout.write(`Switched environment to ${o}
17
+ `)),c();let{userId:l,tenantId:d$1}=await d();l?await f(a$1.ENV_SWITCHED,l,d$1,{to:o}):await e(a$1.ENV_SWITCHED,{to:o}),await j$1();});});}var ut={claude:{projectDir:".claude/skills/culvii",globalDir:".claude/skills/culvii",detect:".claude"},cursor:{projectDir:".cursor/skills/culvii",globalDir:".cursor/skills/culvii",detect:".cursor"},windsurf:{projectDir:".windsurf/skills/culvii",globalDir:".codeium/windsurf/skills/culvii",detect:".windsurf"},github:{projectDir:".github/skills/culvii",globalDir:".copilot/skills/culvii",detect:".github"},opencode:{projectDir:".opencode/skills/culvii",globalDir:".config/opencode/skills/culvii",detect:".opencode"},gemini:{projectDir:".gemini/skills/culvii",globalDir:".gemini/skills/culvii",detect:".gemini"},kiro:{projectDir:".kiro/skills/culvii",globalDir:".kiro/skills/culvii",detect:".kiro"},agents:{projectDir:".agents/skills/culvii",globalDir:".agents/skills/culvii",detect:".agents"}};function Hr(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}function Br(t,e=process.cwd()){let n=new Set;if(t){let i=t.toLowerCase()==="codex"?"agents":t.toLowerCase();return ut[i]?(n.add(i),{targets:n}):{error:`Invalid agent: ${t}. Must be one of: ${[...Object.keys(ut),"codex"].sort().join(", ")}.`}}for(let[i,a]of Object.entries(ut))i!=="agents"&&Q.existsSync(re.join(e,a.detect))&&n.add(i);let r=n.size>0;return n.add("agents"),r?{targets:n}:(n.add("claude"),{targets:n,fallbackWarning:"No specific agent directories detected. Defaulting to Claude Code and portable .agents paths."})}function Kr(t){try{let e=JSON.parse(Q.readFileSync(re.join(t,".culvii-skill.json"),"utf8"));return e?.schemaVersion===1&&e?.name==="culvii"&&typeof e?.bundleHash=="string"?e:void 0}catch{return}}function Gr(t,e){for(let n of Object.keys(e).sort()){if(re.isAbsolute(n)||n.split(/[\\/]/).includes(".."))throw new Error(`Unsafe skill bundle path: ${n}`);let r=re.join(t,n);Q.mkdirSync(re.dirname(r),{recursive:true}),Q.writeFileSync(r,e[n],"utf8");}}function Jr(t,e){let n=new Set([...Object.keys(e.files),".culvii-skill.json"]),r=(a,c="")=>Q.readdirSync(a,{withFileTypes:true}).flatMap(o=>{let s=re.posix.join(c,o.name);return o.isDirectory()?r(re.join(a,o.name),s):[s]}),i=r(t);return i.length!==n.size||i.some(a=>!n.has(a))?false:Object.entries(e.files).every(([a,c])=>{let o=Q.readFileSync(re.join(t,a));return createHash("sha256").update(o).digest("hex")===c})}function qr(t,e){let{bundle:n,manifest:r}=e,i=Q.existsSync(t)?Kr(t):void 0;if(i?.bundleHash===r.bundleHash&&Jr(t,r))return "unchanged";if(Q.existsSync(t)&&!i&&!e.force)throw new Error(`Refusing to replace unmanaged skill directory: ${t}. Re-run with --force.`);let a=re.dirname(t);Q.mkdirSync(a,{recursive:true});let c=`${process.pid}-${randomUUID()}`,o=re.join(a,`.culvii.tmp-${c}`),s=re.join(a,`.culvii.backup-${c}`),l=false;try{return Q.mkdirSync(o),Gr(o,n),Q.existsSync(t)&&(Q.renameSync(t,s),l=!0),Q.renameSync(o,t),l&&Q.rmSync(s,{recursive:!0,force:!0}),i?"updated":"installed"}catch(d){throw Q.rmSync(o,{recursive:true,force:true}),l&&!Q.existsSync(t)&&Q.existsSync(s)&&Q.renameSync(s,t),d}}function vn(t){t.command("skill").description("Manage AI agent skills").command("install").description("Install the Culvii authoring skill bundle for AI agents").option("--agent <agent>","Specify agent (claude|cursor|windsurf|github|opencode|gemini|kiro|codex|agents)").option("--global","Install globally instead of in the current project").option("--force","Replace an existing unmanaged Culvii skill directory").action(async e=>{let n=Br(e.agent);if("error"in n){console.error(`${x} ${n.error}`),process.exitCode=1;return}let r=[];try{let{CULVII_SKILL_BUNDLE:i,CULVII_SKILL_MANIFEST:a}=await import('./skill-bundle-5WQTV2OV.js');for(let c of n.targets){let o=ut[c],s=e.global?o.globalDir:o.projectDir,l=re.join(e.global?Rt.homedir():process.cwd(),s),d=qr(l,{force:e.force,bundle:i,manifest:a}),v=re.join(e.global?"~":"",s),f=c==="agents"?"Portable/Codex":c;r.push({agentName:`${f} (${d})`,displayPath:v});}}catch(i){console.error(`${x} ${i.message}`),process.exitCode=1;return}if(Hr()){let{SkillView:i}=await import('./SkillView-N27S3VSV.js');await G(Promise.resolve(Ee.createElement(i,{state:{type:"success",installed:r,fallbackWarning:n.fallbackWarning}})));return}n.fallbackWarning&&console.log(`${w} ${n.fallbackWarning}`);for(let i of r)console.log(`${w} Installed skill for ${i.agentName} at ${i.displayPath}`);});}function xt({label:t,items:e,defaultIndex:n,onSelect:r}){let i=e.map((c,o)=>({key:String(o+1),label:c.label,description:c.description})),a=n!==void 0?String(n+1):void 0;return jsx(a$5,{label:t,options:i,defaultKey:a,onSubmit:c=>{let o=parseInt(c,10)-1,s=e[o];s&&r(s.value);}})}function ea(){let t=a$2();return t.isTTY&&!t.isCI&&t.supportsColor&&t.supportsUnicode}var de=["agent-only","agent-workflow","agent-workflow-tool","multi-agent"],ue=["openai","anthropic","gemini","google-vertex"],kn={"agent-only":"A single standalone AI agent","agent-workflow":"An AI agent triggered by a manual workflow","agent-workflow-tool":"An agent that invokes a workflow as a callable tool","multi-agent":"A coordinator agent that delegates to a specialist agent"},hn={openai:"openai/YOUR_MODEL_ID",anthropic:"anthropic/YOUR_MODEL_ID",gemini:"gemini/YOUR_MODEL_ID","google-vertex":"google-vertex/YOUR_MODEL_ID"},_n=`{
20
18
  "compilerOptions": {
21
19
  "target": "ES2022",
22
20
  "module": "NodeNext",
@@ -26,7 +24,7 @@ Switch with: culvii env ${a[0]}
26
24
  "esModuleInterop": true
27
25
  },
28
26
  "include": ["src/**/*.ts"]
29
- }`;function yn(t){return JSON.stringify({name:t,version:"0.1.0",type:"commonjs",private:true,scripts:{dev:"culvii dev",deploy:"culvii deploy"},dependencies:{"@culvii/kit":"latest",tsx:"^4.22.3"},engines:{node:">=22.0.0"}},null,2)}function dt(t){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
27
+ }`;function An(t){return JSON.stringify({name:t,version:"0.1.0",type:"commonjs",private:true,scripts:{dev:"culvii dev",deploy:"culvii deploy"},dependencies:{"@culvii/kit":"latest",tsx:"^4.22.3"},engines:{node:">=22.0.0"}},null,2)}function ft(t){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
30
28
  import { MultiAgentEngine, createAgentModelConfigFromRef } from '@culvii/kit';
31
29
 
32
30
  const MODEL_CREDENTIAL_ID = 'YOUR_CREDENTIAL_ID';
@@ -45,7 +43,7 @@ function createGreeterAgent() {
45
43
  }
46
44
 
47
45
  createGreeterAgent();
48
- `}var gn=`// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
46
+ `}var In=`// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
49
47
  import { Workflow, Step } from '@culvii/kit';
50
48
 
51
49
  function createGreetingWorkflow() {
@@ -76,7 +74,7 @@ function createGreetingWorkflow() {
76
74
  }
77
75
 
78
76
  createGreetingWorkflow();
79
- `;function mn(t){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
77
+ `;function Sn(t){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
80
78
  import { MultiAgentEngine, createAgentModelConfigFromRef } from '@culvii/kit';
81
79
 
82
80
  const MODEL_CREDENTIAL_ID = 'YOUR_CREDENTIAL_ID';
@@ -104,7 +102,7 @@ function createCoordinatorAgent() {
104
102
  }
105
103
 
106
104
  createCoordinatorAgent();
107
- `}function wn(t){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
105
+ `}function Tn(t){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
108
106
  import { MultiAgentEngine, createAgentModelConfigFromRef, defineWorkflowTool } from '@culvii/kit';
109
107
 
110
108
  const MODEL_CREDENTIAL_ID = 'YOUR_CREDENTIAL_ID';
@@ -137,7 +135,7 @@ function createResearchAgent() {
137
135
  }
138
136
 
139
137
  createResearchAgent();
140
- `}var vn=`// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
138
+ `}var Cn=`// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
141
139
  import { Workflow, Step } from '@culvii/kit';
142
140
 
143
141
  function createResearchWorkflow() {
@@ -155,7 +153,7 @@ function createResearchWorkflow() {
155
153
  }
156
154
 
157
155
  createResearchWorkflow();
158
- `;function En(){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
156
+ `;function Dn(){return `// Generated by culvii init \u2014 replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console
159
157
  import { Workflow, Step } from '@culvii/kit';
160
158
 
161
159
  function createCoordinationWorkflow() {
@@ -186,9 +184,9 @@ function createCoordinationWorkflow() {
186
184
  }
187
185
 
188
186
  createCoordinationWorkflow();
189
- `}async function xt(t,e){return (await t.question(e)).trim()}async function Br(t,e$1){let{userId:n,tenantId:r}=await d(),o=async(f$1,w={})=>{n?await f(f$1,n,r,w):await e(f$1,w);};await o(a$1.INIT_STARTED);let a=t,c=e$1.template,i=e$1.provider;if(c&&!de.includes(c)&&(console.error(`${x} Invalid template '${c}'. Valid options: ${de.join(", ")}`),await o(a$1.INIT_FAILED,{error_class:"InvalidTemplate"}),await j(),process.exit(1)),i&&!ue.includes(i)&&(console.error(`${x} Invalid provider '${i}'. Valid options: ${ue.join(", ")}`),await o(a$1.INIT_FAILED,{error_class:"InvalidProvider"}),await j(),process.exit(1)),!e$1.yes&&process.stdout.isTTY&&process.stdin.isTTY){let{render:f}=await import('ink');if(!a&&!e$1.here&&(a=await new Promise(w=>{let{unmount:m}=f(ve.createElement(a$5,{label:"Project name [Enter = my-culvii-project]",defaultValue:"my-culvii-project",onSubmit:T=>{m(),w(T||"my-culvii-project");}}));})),!c){let w=de.indexOf("agent-workflow");c=await new Promise(m=>{let{unmount:T}=f(ve.createElement(Rt,{label:"Select a template [Enter = agent-workflow]",items:de.map(I=>({value:I,label:I.padEnd(16),description:un[I]})),defaultIndex:w,onSelect:I=>{T(),m(I);}}));});}if(!i){let w=ue.indexOf("openai");i=await new Promise(m=>{let{unmount:T}=f(ve.createElement(Rt,{label:"Select a model provider [Enter = openai]",items:ue.map(I=>({value:I,label:I})),defaultIndex:w,onSelect:I=>{T(),m(I);}}));});}}else !a&&!e$1.here&&(a="my-culvii-project"),c||(c="agent-workflow"),i||(i="openai");let{InitView:d$1}=await import('./InitView-TI2HU6VV.js'),l={update:null};function k(){let[f,w]=ve.useState({type:"scaffolding",message:"Scaffolding project\u2026"});return ve.useEffect(()=>(l.update=w,()=>{l.update=null;}),[]),ve.createElement(d$1,{state:f})}await G(Promise.resolve(ve.createElement(k)));try{let f=e$1.here?process.cwd():re.join(process.cwd(),a);if(existsSync(f)){if((await ce.readdir(f)).filter(D=>!D.startsWith(".")).length>0){l.update?.({type:"error",message:`Directory '${re.relative(process.cwd(),f)||"."}' already exists and is not empty.`}),await o(a$1.INIT_FAILED,{error_class:"DirectoryNotEmpty"}),await j();return}}else await ce.mkdir(f,{recursive:!0});let w=re.join(f,"src");await ce.mkdir(w,{recursive:!0});let m=fn[i],T=[];await ce.writeFile(re.join(f,"package.json"),yn(e$1.here?re.basename(f):a),"utf-8"),await ce.writeFile(re.join(f,"tsconfig.json"),pn,"utf-8"),T.push("package.json"),T.push("tsconfig.json");let I=async(J,H)=>{await ce.writeFile(re.join(w,J),H,"utf-8"),T.push(re.join("src",J));};c==="agent-only"?await I("greeter-agent.culvii.ts",dt(m)):c==="agent-workflow"?(await I("greeter-agent.culvii.ts",dt(m)),await I("greeting-workflow.culvii.ts",gn)):c==="agent-workflow-tool"?(await I("research-agent.culvii.ts",wn(m)),await I("research-workflow.culvii.ts",vn)):c==="multi-agent"&&(await I("coordinator-agent.culvii.ts",mn(m)),await I("coordination-workflow.culvii.ts",En()));let x=e$1.here?".":`./${a}`;l.update?.({type:"success",template:c,projectDir:x,written:T,here:!!e$1.here,projectName:a}),await o(a$1.INIT_SUCCEEDED,{template:c,provider:i}),await j();}catch(f){l.update?.({type:"error",message:`Initialization failed: ${f.message}`}),await o(a$1.INIT_FAILED,{error_class:f?.constructor?.name??"UnknownError"}),await j();return}}function kn(t){t.command("init [project-name]").description("Scaffold a new Culvii project with working agent and workflow files").option("--template <template>",`Template: ${de.join(" | ")}`).option("--provider <provider>",`Model provider: ${ue.join(" | ")}`).option("--here","Scaffold into the current directory instead of a named subdirectory").option("-y, --yes","Accept all defaults non-interactively").action(async(e$1,n)=>{if(Hr()){await Br(e$1,n);return}let{userId:r,tenantId:o}=await d(),a=async(d,l={})=>{r?await f(d,r,o,l):await e(d,l);};await a(a$1.INIT_STARTED);let c=e$1,i=n.template,s=n.provider;i&&!de.includes(i)&&(console.error(`${x} Invalid template '${i}'. Valid options: ${de.join(", ")}`),await a(a$1.INIT_FAILED,{error_class:"InvalidTemplate"}),await j(),process.exit(1)),s&&!ue.includes(s)&&(console.error(`${x} Invalid provider '${s}'. Valid options: ${ue.join(", ")}`),await a(a$1.INIT_FAILED,{error_class:"InvalidProvider"}),await j(),process.exit(1));try{if(!n.yes&&process.stdout.isTTY&&process.stdin.isTTY){let T=createInterface({input:stdin,output:stdout});try{if(!c&&!n.here&&(c=await xt(T,"Project name (my-culvii-project): ")||"my-culvii-project"),!i)for(console.log(`
190
- Select a template:`),de.forEach((I,x)=>{console.log(` ${x+1}) ${I.padEnd(16)} ${un[I]}`);});!i;){let I=await xt(T,"Template [1-4] (2): "),x=I?parseInt(I,10)-1:1;x>=0&&x<de.length?i=de[x]:console.log(` Please enter a number between 1 and ${de.length}.`);}if(!s)for(console.log(`
191
- Select a model provider:`),ue.forEach((I,x)=>{console.log(` ${x+1}) ${I}`);});!s;){let I=await xt(T,"Provider [1-4] (1): "),x=I?parseInt(I,10)-1:0;x>=0&&x<ue.length?s=ue[x]:console.log(` Please enter a number between 1 and ${ue.length}.`);}}finally{T.close();}}else !c&&!n.here&&(c="my-culvii-project"),i||(i="agent-workflow"),s||(s="openai");let l=n.here?process.cwd():re.join(process.cwd(),c);existsSync(l)?(await ce.readdir(l)).filter(x=>!x.startsWith(".")).length>0&&(console.error(`${x} Directory '${re.relative(process.cwd(),l)||"."}' already exists and is not empty.`),await a(a$1.INIT_FAILED,{error_class:"DirectoryNotEmpty"}),await j(),process.exit(1)):await ce.mkdir(l,{recursive:!0});let k=re.join(l,"src");await ce.mkdir(k,{recursive:!0});let f=fn[s],w$1=[];await ce.writeFile(re.join(l,"package.json"),yn(n.here?re.basename(l):c),"utf-8"),await ce.writeFile(re.join(l,"tsconfig.json"),pn,"utf-8"),w$1.push("package.json"),w$1.push("tsconfig.json");let m=async(T,I)=>{await ce.writeFile(re.join(k,T),I,"utf-8"),w$1.push(re.join("src",T));};i==="agent-only"?await m("greeter-agent.culvii.ts",dt(f)):i==="agent-workflow"?(await m("greeter-agent.culvii.ts",dt(f)),await m("greeting-workflow.culvii.ts",gn)):i==="agent-workflow-tool"?(await m("research-agent.culvii.ts",wn(f)),await m("research-workflow.culvii.ts",vn)):i==="multi-agent"&&(await m("coordinator-agent.culvii.ts",mn(f)),await m("coordination-workflow.culvii.ts",En())),console.log(`${w} Initialized '${i}' project${n.here?"":` in ./${c}`}`),w$1.forEach(T=>console.log(` + ${T}`)),n.here||console.log(` cd ${c}`),console.log(" 1. Run `npm install`"),console.log(" 2. Replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console"),console.log(" 3. Run `culvii dev`"),await a(a$1.INIT_SUCCEEDED,{template:i,provider:s}),await j();}catch(d){console.error(`${x} Initialization failed: ${d.message}`),await a(a$1.INIT_FAILED,{error_class:d?.constructor?.name??"UnknownError"}),await j(),process.exit(1);}});}function he(t){console.error(`Error: ${t}`),process.exit(1);}function In(t,e){try{return JSON.parse(t)}catch(n){he(`${e} is not valid JSON: ${n.message}`);}}function hn(t,e){let n=re.resolve(t);try{return In(Q.readFileSync(n,"utf8"),e)}catch(r){throw r.code==="ENOENT"&&he(`${e} not found: ${n}`),r}}async function ut(t,e,n,r){let o=await W(t,e,{...r,headers:{...s(n),...r?.body?{"Content-Type":"application/json"}:{},...r?.headers}});return o.ok||he(`Server responded with ${o.status}: ${await V(o)}`),o.json()}function $t(t){return t.workspace_id||he("No workspace configured. Start culvii dev first.")}async function _n(t,e,n){let r=$t(n.context),a=(await ut(`${n.apiUrl}/api/workspaces/${encodeURIComponent(r)}/workflows/${encodeURIComponent(t)}`,e,n.context))?.data?.versions;return (!Array.isArray(a)||a.length===0)&&he(`Workflow not found: ${t}`),a.find(c=>c.isDraft===true)??a[0]}function An(t,e){let n=Number(t);return (!Number.isInteger(n)||n<1)&&he(`${e} must be a positive integer`),n}function Sn(t){let e=t.command("workflow").description("Workflow execution commands").option("--env <env>","Target environment (dev, sandbox, or prod)");e.command("run <workflow>").description("Start a workflow execution").requiredOption("--trigger <node-name>","Trigger node name").option("--payload <json>","Trigger payload as JSON").option("--payload-file <path>","Read trigger payload from a JSON file").option("--mocks-file <path>","JSON object mapping node IDs to mock outputs").option("--json","Print machine-readable JSON").action(async(r$1,o)=>{o.payload&&o.payloadFile&&he("Use only one of --payload or --payload-file"),await K(async a=>{let c=await r({env:e.opts().env}),i=await _n(r$1,a,c),s=o.payloadFile?hn(o.payloadFile,"Payload file"):o.payload?In(o.payload,"Payload"):{},d=o.mocksFile?hn(o.mocksFile,"Mocks file"):void 0;d!==void 0&&(!d||typeof d!="object"||Array.isArray(d))&&he("Mocks file must contain an object keyed by workflow node ID");let l=await ut(`${c.apiUrl}/api/executions/start`,a,c.context,{method:"POST",body:JSON.stringify({workflowId:i.id,triggerNode:o.trigger,workspaceId:$t(c.context),payload:s,feedback:{mode:"mock",...d?{nodeMocks:d}:{}}})});o.json?console.log(JSON.stringify(l.data,null,2)):(console.log(`Execution started: ${l.data.executionId}`),console.log(`Status: ${l.data.status}`));});});let n=t.command("execution").description("Inspect workflow executions").option("--env <env>","Target environment (dev, sandbox, or prod)");n.command("list").description("List workspace executions").option("--workflow <workflow>","Filter by workflow reference key or ID").option("--status <status>","Filter by execution status").option("--trigger <trigger>","Filter by trigger type").option("--page <page>","Page number","1").option("--limit <limit>","Results per page","20").option("--json","Print machine-readable JSON").action(async r$1=>{await K(async o=>{let a=await r({env:n.opts().env}),c=new URLSearchParams({page:String(An(r$1.page,"--page")),limit:String(An(r$1.limit,"--limit"))});if(r$1.workflow){let s=await _n(r$1.workflow,o,a);c.set("workflowId",s.id);}r$1.status&&c.set("status",r$1.status),r$1.trigger&&c.set("trigger",r$1.trigger);let i=await ut(`${a.apiUrl}/api/workspaces/${encodeURIComponent($t(a.context))}/executions?${c}`,o,a.context);if(r$1.json)console.log(JSON.stringify(i.data,null,2));else {for(let d of i.data.executions)console.log(`${d.id} ${d.status} ${d.workflowName} ${d.startedAt}`);let s=i.data.pagination;console.log(`Page ${s.page}/${s.totalPages||1} (${s.totalCount} executions)`);}});}),n.command("get <execution-id>").description("Get execution details, step outputs, and errors").option("--json","Print machine-readable JSON").action(async(r$1,o)=>{await K(async a=>{let c=await r({env:n.opts().env}),i=await ut(`${c.apiUrl}/api/executions/${encodeURIComponent(r$1)}`,a,c.context);if(o.json)console.log(JSON.stringify(i.data,null,2));else {console.log(`${i.data.executionId} ${i.data.status} ${i.data.workflowName}`);for(let s of i.data.steps)console.log(`${s.stepId} ${s.status} ${s.name}`);i.data.error&&console.error(`Error: ${i.data.error.message}`);}});});}function qr(t){let e=k[t.environment];return `https://console.culvii.com/${t.tenant_slug}/${e}/integrations`}function Jr(t){return t.scope==="tenant"?"tenant":t.scope==="environment"?`environment:${t.environmentId??"unknown"}`:`workspace:${t.workspaceIds.join(",")||"unknown"}`}async function Tn(t,e){if(!t.ok)throw new Error(`${e} failed (${t.status}): ${await V(t)}`);let n=await t.json();return Array.isArray(n?.data)?n.data:[]}function Cn(t){let e=t.command("integration").description("List and manage Culvii integrations").option("--env <env>","Target environment (dev, sandbox, or prod)");e.command("list").description("List available integration credentials and their scopes").option("--json","Print machine-readable JSON").action(async n=>{await K(async r$1=>{let{apiUrl:o,context:a}=await r({env:e.opts().env}),c={headers:s(a)},[i,s$1]=await Promise.all([W(`${o}/api/auth-identities`,r$1,c),W(`${o}/api/credential-entities`,r$1,c)]),[d,l]=await Promise.all([Tn(i,"Listing integrations"),Tn(s$1,"Listing integration providers")]),k=new Map(l.map(m=>[m.id,m])),f=qr(a),w=d.map(m=>{let T=k.get(m.providerId);return {credentialId:m.id,name:m.name,provider:T?.key??T?.name??m.providerId,connected:m.connected===!0,scope:Jr(m),oauthScopes:m.scopes}});if(n.json){console.log(JSON.stringify({addUrl:f,integrations:w},null,2));return}if(console.log(`Add or manage integrations: ${f}`),!w.length){console.log("No integrations available in the active scope.");return}console.log("credentialId provider name connected scope oauthScopes");for(let m of w)console.log(`${m.credentialId} ${m.provider} ${m.name} ${m.connected?"yes":"no"} ${m.scope} ${m.oauthScopes.join(",")||"-"}`);});});}var Ve=null;function Qr(t){Ve=t;}async function be(t=0,e){e&&process.stderr.write(e.endsWith(`
187
+ `}async function $t(t,e){return (await t.question(e)).trim()}async function ta(t,e$1){let{userId:n,tenantId:r}=await d(),i=async(f$1,w={})=>{n?await f(f$1,n,r,w):await e(f$1,w);};await i(a$1.INIT_STARTED);let a=t,c=e$1.template,o=e$1.provider;if(c&&!de.includes(c)&&(console.error(`${x} Invalid template '${c}'. Valid options: ${de.join(", ")}`),await i(a$1.INIT_FAILED,{error_class:"InvalidTemplate"}),await j$1(),process.exit(1)),o&&!ue.includes(o)&&(console.error(`${x} Invalid provider '${o}'. Valid options: ${ue.join(", ")}`),await i(a$1.INIT_FAILED,{error_class:"InvalidProvider"}),await j$1(),process.exit(1)),!e$1.yes&&process.stdout.isTTY&&process.stdin.isTTY){let{render:f}=await import('ink');if(!a&&!e$1.here&&(a=await new Promise(w=>{let{unmount:m}=f(Ee.createElement(a$5,{label:"Project name [Enter = my-culvii-project]",defaultValue:"my-culvii-project",onSubmit:T=>{m(),w(T||"my-culvii-project");}}));})),!c){let w=de.indexOf("agent-workflow");c=await new Promise(m=>{let{unmount:T}=f(Ee.createElement(xt,{label:"Select a template [Enter = agent-workflow]",items:de.map(I=>({value:I,label:I.padEnd(16),description:kn[I]})),defaultIndex:w,onSelect:I=>{T(),m(I);}}));});}if(!o){let w=ue.indexOf("openai");o=await new Promise(m=>{let{unmount:T}=f(Ee.createElement(xt,{label:"Select a model provider [Enter = openai]",items:ue.map(I=>({value:I,label:I})),defaultIndex:w,onSelect:I=>{T(),m(I);}}));});}}else !a&&!e$1.here&&(a="my-culvii-project"),c||(c="agent-workflow"),o||(o="openai");let{InitView:l}=await import('./InitView-TI2HU6VV.js'),d$1={update:null};function v(){let[f,w]=Ee.useState({type:"scaffolding",message:"Scaffolding project\u2026"});return Ee.useEffect(()=>(d$1.update=w,()=>{d$1.update=null;}),[]),Ee.createElement(l,{state:f})}await G(Promise.resolve(Ee.createElement(v)));try{let f=e$1.here?process.cwd():re.join(process.cwd(),a);if(existsSync(f)){if((await ce.readdir(f)).filter(D=>!D.startsWith(".")).length>0){d$1.update?.({type:"error",message:`Directory '${re.relative(process.cwd(),f)||"."}' already exists and is not empty.`}),await i(a$1.INIT_FAILED,{error_class:"DirectoryNotEmpty"}),await j$1();return}}else await ce.mkdir(f,{recursive:!0});let w=re.join(f,"src");await ce.mkdir(w,{recursive:!0});let m=hn[o],T=[];await ce.writeFile(re.join(f,"package.json"),An(e$1.here?re.basename(f):a),"utf-8"),await ce.writeFile(re.join(f,"tsconfig.json"),_n,"utf-8"),T.push("package.json"),T.push("tsconfig.json");let I=async(q,K)=>{await ce.writeFile(re.join(w,q),K,"utf-8"),T.push(re.join("src",q));};c==="agent-only"?await I("greeter-agent.culvii.ts",ft(m)):c==="agent-workflow"?(await I("greeter-agent.culvii.ts",ft(m)),await I("greeting-workflow.culvii.ts",In)):c==="agent-workflow-tool"?(await I("research-agent.culvii.ts",Tn(m)),await I("research-workflow.culvii.ts",Cn)):c==="multi-agent"&&(await I("coordinator-agent.culvii.ts",Sn(m)),await I("coordination-workflow.culvii.ts",Dn()));let x=e$1.here?".":`./${a}`;d$1.update?.({type:"success",template:c,projectDir:x,written:T,here:!!e$1.here,projectName:a}),await i(a$1.INIT_SUCCEEDED,{template:c,provider:o}),await j$1();}catch(f){d$1.update?.({type:"error",message:`Initialization failed: ${f.message}`}),await i(a$1.INIT_FAILED,{error_class:f?.constructor?.name??"UnknownError"}),await j$1();return}}function bn(t){t.command("init [project-name]").description("Scaffold a new Culvii project with working agent and workflow files").option("--template <template>",`Template: ${de.join(" | ")}`).option("--provider <provider>",`Model provider: ${ue.join(" | ")}`).option("--here","Scaffold into the current directory instead of a named subdirectory").option("-y, --yes","Accept all defaults non-interactively").action(async(e$1,n)=>{if(ea()){await ta(e$1,n);return}let{userId:r,tenantId:i}=await d(),a=async(l,d={})=>{r?await f(l,r,i,d):await e(l,d);};await a(a$1.INIT_STARTED);let c=e$1,o=n.template,s=n.provider;o&&!de.includes(o)&&(console.error(`${x} Invalid template '${o}'. Valid options: ${de.join(", ")}`),await a(a$1.INIT_FAILED,{error_class:"InvalidTemplate"}),await j$1(),process.exit(1)),s&&!ue.includes(s)&&(console.error(`${x} Invalid provider '${s}'. Valid options: ${ue.join(", ")}`),await a(a$1.INIT_FAILED,{error_class:"InvalidProvider"}),await j$1(),process.exit(1));try{if(!n.yes&&process.stdout.isTTY&&process.stdin.isTTY){let T=createInterface({input:stdin,output:stdout});try{if(!c&&!n.here&&(c=await $t(T,"Project name (my-culvii-project): ")||"my-culvii-project"),!o)for(console.log(`
188
+ Select a template:`),de.forEach((I,x)=>{console.log(` ${x+1}) ${I.padEnd(16)} ${kn[I]}`);});!o;){let I=await $t(T,"Template [1-4] (2): "),x=I?parseInt(I,10)-1:1;x>=0&&x<de.length?o=de[x]:console.log(` Please enter a number between 1 and ${de.length}.`);}if(!s)for(console.log(`
189
+ Select a model provider:`),ue.forEach((I,x)=>{console.log(` ${x+1}) ${I}`);});!s;){let I=await $t(T,"Provider [1-4] (1): "),x=I?parseInt(I,10)-1:0;x>=0&&x<ue.length?s=ue[x]:console.log(` Please enter a number between 1 and ${ue.length}.`);}}finally{T.close();}}else !c&&!n.here&&(c="my-culvii-project"),o||(o="agent-workflow"),s||(s="openai");let d=n.here?process.cwd():re.join(process.cwd(),c);existsSync(d)?(await ce.readdir(d)).filter(x=>!x.startsWith(".")).length>0&&(console.error(`${x} Directory '${re.relative(process.cwd(),d)||"."}' already exists and is not empty.`),await a(a$1.INIT_FAILED,{error_class:"DirectoryNotEmpty"}),await j$1(),process.exit(1)):await ce.mkdir(d,{recursive:!0});let v=re.join(d,"src");await ce.mkdir(v,{recursive:!0});let f=hn[s],w$1=[];await ce.writeFile(re.join(d,"package.json"),An(n.here?re.basename(d):c),"utf-8"),await ce.writeFile(re.join(d,"tsconfig.json"),_n,"utf-8"),w$1.push("package.json"),w$1.push("tsconfig.json");let m=async(T,I)=>{await ce.writeFile(re.join(v,T),I,"utf-8"),w$1.push(re.join("src",T));};o==="agent-only"?await m("greeter-agent.culvii.ts",ft(f)):o==="agent-workflow"?(await m("greeter-agent.culvii.ts",ft(f)),await m("greeting-workflow.culvii.ts",In)):o==="agent-workflow-tool"?(await m("research-agent.culvii.ts",Tn(f)),await m("research-workflow.culvii.ts",Cn)):o==="multi-agent"&&(await m("coordinator-agent.culvii.ts",Sn(f)),await m("coordination-workflow.culvii.ts",Dn())),console.log(`${w} Initialized '${o}' project${n.here?"":` in ./${c}`}`),w$1.forEach(T=>console.log(` + ${T}`)),n.here||console.log(` cd ${c}`),console.log(" 1. Run `npm install`"),console.log(" 2. Replace YOUR_CREDENTIAL_ID and YOUR_MODEL_ID with your actual values from the Culvii console"),console.log(" 3. Run `culvii dev`"),await a(a$1.INIT_SUCCEEDED,{template:o,provider:s}),await j$1();}catch(l){console.error(`${x} Initialization failed: ${l.message}`),await a(a$1.INIT_FAILED,{error_class:l?.constructor?.name??"UnknownError"}),await j$1(),process.exit(1);}});}function fe(t){console.error(`Error: ${t}`),process.exit(1);}function On(t,e){try{return JSON.parse(t)}catch(n){fe(`${e} is not valid JSON: ${n.message}`);}}function Ot(t,e){let n=re.resolve(t);try{return On(Q.readFileSync(n,"utf8"),e)}catch(r){throw r.code==="ENOENT"&&fe(`${e} not found: ${n}`),r}}async function Ue(t,e,n,r){let i=await j(t,e,{...r,headers:{...s(n),...r?.body?{"Content-Type":"application/json"}:{},...r?.headers}});return i.ok||fe(`Server responded with ${i.status}: ${await H(i)}`),i.json()}function pt(t){return t.workspace_id||fe("No workspace configured. Start culvii dev first.")}async function Rn(t,e,n){let r=pt(n.context),a=(await Ue(`${n.apiUrl}/api/workspaces/${encodeURIComponent(r)}/workflows/${encodeURIComponent(t)}`,e,n.context))?.data?.versions;return (!Array.isArray(a)||a.length===0)&&fe(`Workflow not found: ${t}`),a.find(c=>c.isDraft===true)??a[0]}function xn(t,e){let n=Number(t);return (!Number.isInteger(n)||n<1)&&fe(`${e} must be a positive integer`),n}function $n(t,e){let n=e.environment||"dev";return (!e.tenant_slug||!e.workspace_id)&&fe("No tenant or workspace configured. Start culvii dev first."),`https://console.culvii.com/${e.tenant_slug}/${k[n]}/${e.workspace_id}/surface-reviews/${t}`}function sa(t){let e=t?.items;return (!Array.isArray(e)||e.length===0)&&fe("Review file must contain a non-empty items array"),e.map((n,r)=>((!n||typeof n!="object"||typeof n.executionId!="string"||typeof n.nodeId!="string")&&fe(`Review item ${r+1} must contain executionId and nodeId strings`),{executionId:n.executionId,nodeId:n.nodeId}))}function Nn(t){let e=t.command("surface").description("Surface authoring and review commands").option("--env <env>","Target environment (dev, sandbox, or prod)"),n=e.command("review").description("Review custom runtime surfaces");n.command("create").description("Create a browser review for selected execution surfaces").requiredOption("--file <path>","JSON file with { items: [{ executionId, nodeId }] }").option("--json","Print machine-readable JSON").action(async a=>{await V(async c=>{let o=await r({env:e.opts().env}),s=await Ue(`${o.apiUrl}/api/surface-reviews`,c,o.context,{method:"POST",body:JSON.stringify({workspaceId:pt(o.context),items:sa(Ot(a.file,"Review file"))})}),l={reviewId:s.data.id,url:$n(s.data.id,o.context)};a.json?console.log(JSON.stringify(l,null,2)):(console.log(`Surface review: ${l.reviewId}`),console.log(l.url));});}),n.command("get <review-id>").description("Get selected surfaces and the user feedback collected so far").option("--json","Print machine-readable JSON").action(async(a,c)=>{await V(async o=>{let s=await r({env:e.opts().env}),l=await Ue(`${s.apiUrl}/api/surface-reviews/${encodeURIComponent(a)}`,o,s.context);if(c.json)console.log(JSON.stringify(l.data,null,2));else {console.log(`${l.data.id} ${l.data.submittedAt?"submitted":"in progress"}`);for(let d of l.data.items)console.log(`${d.workflowName} ${d.nodeName} ${d.decision??"pending"} ${d.source}`);}});}),n.command("open <review-id>").description("Open a surface review in the Culvii Console").action(async a=>{await V(async()=>{let c=await r({env:e.opts().env}),o=$n(a,c.context);await aa(o),console.log(o);});});let r$1=t.command("workflow").description("Workflow execution commands").option("--env <env>","Target environment (dev, sandbox, or prod)");r$1.command("run <workflow>").description("Start a workflow execution").requiredOption("--trigger <node-name>","Trigger node name").option("--payload <json>","Trigger payload as JSON").option("--payload-file <path>","Read trigger payload from a JSON file").option("--mocks-file <path>","JSON object mapping node IDs to mock outputs").option("--json","Print machine-readable JSON").action(async(a,c)=>{c.payload&&c.payloadFile&&fe("Use only one of --payload or --payload-file"),await V(async o=>{let s=await r({env:r$1.opts().env}),l=await Rn(a,o,s),d=c.payloadFile?Ot(c.payloadFile,"Payload file"):c.payload?On(c.payload,"Payload"):{},v=c.mocksFile?Ot(c.mocksFile,"Mocks file"):void 0;v!==void 0&&(!v||typeof v!="object"||Array.isArray(v))&&fe("Mocks file must contain an object keyed by workflow node ID");let f=await Ue(`${s.apiUrl}/api/executions/start`,o,s.context,{method:"POST",body:JSON.stringify({workflowId:l.id,triggerNode:c.trigger,workspaceId:pt(s.context),payload:d,feedback:{mode:"mock",...v?{nodeMocks:v}:{}}})});c.json?console.log(JSON.stringify(f.data,null,2)):(console.log(`Execution started: ${f.data.executionId}`),console.log(`Status: ${f.data.status}`));});});let i=t.command("execution").description("Inspect workflow executions").option("--env <env>","Target environment (dev, sandbox, or prod)");i.command("list").description("List workspace executions").option("--workflow <workflow>","Filter by workflow reference key or ID").option("--status <status>","Filter by execution status").option("--trigger <trigger>","Filter by trigger type").option("--page <page>","Page number","1").option("--limit <limit>","Results per page","20").option("--json","Print machine-readable JSON").action(async a=>{await V(async c=>{let o=await r({env:i.opts().env}),s=new URLSearchParams({page:String(xn(a.page,"--page")),limit:String(xn(a.limit,"--limit"))});if(a.workflow){let d=await Rn(a.workflow,c,o);s.set("workflowId",d.id);}a.status&&s.set("status",a.status),a.trigger&&s.set("trigger",a.trigger);let l=await Ue(`${o.apiUrl}/api/workspaces/${encodeURIComponent(pt(o.context))}/executions?${s}`,c,o.context);if(a.json)console.log(JSON.stringify(l.data,null,2));else {for(let v of l.data.executions)console.log(`${v.id} ${v.status} ${v.workflowName} ${v.startedAt}`);let d=l.data.pagination;console.log(`Page ${d.page}/${d.totalPages||1} (${d.totalCount} executions)`);}});}),i.command("get <execution-id>").description("Get execution details, step outputs, and errors").option("--json","Print machine-readable JSON").action(async(a,c)=>{await V(async o=>{let s=await r({env:i.opts().env}),l=await Ue(`${s.apiUrl}/api/executions/${encodeURIComponent(a)}`,o,s.context);if(c.json)console.log(JSON.stringify(l.data,null,2));else {console.log(`${l.data.executionId} ${l.data.status} ${l.data.workflowName}`);for(let d of l.data.steps)console.log(`${d.stepId} ${d.status} ${d.name}`);l.data.error&&console.error(`Error: ${l.data.error.message}`);}});});}function oa(t){return `https://console.culvii.com/${t.tenant_slug}/sandbox/integrations`}function ia(t){return t.scope==="tenant"?"tenant":t.scope==="environment"?`environment:${t.environmentId??"unknown"}`:`workspace:${t.workspaceIds.join(",")||"unknown"}`}async function Ln(t,e){if(!t.ok)throw new Error(`${e} failed (${t.status}): ${await H(t)}`);let n=await t.json();return Array.isArray(n?.data)?n.data:[]}function Un(t){let e=t.command("integration").description("List and manage Culvii integrations").option("--env <env>","Target environment (dev, sandbox, or prod)");e.command("list").description("List available integration credentials and their scopes").option("--json","Print machine-readable JSON").action(async n=>{await V(async r$1=>{let{apiUrl:i,context:a}=await r({env:e.opts().env}),c={headers:s(a)},[o,s$1]=await Promise.all([j(`${i}/api/auth-identities`,r$1,c),j(`${i}/api/credential-entities`,r$1,c)]),[l,d]=await Promise.all([Ln(o,"Listing integrations"),Ln(s$1,"Listing integration providers")]),v=new Map(d.map(m=>[m.id,m])),f=oa(a),w=l.map(m=>{let T=v.get(m.providerId);return {credentialId:m.id,name:m.name,provider:T?.key??T?.name??m.providerId,connected:m.connected===!0,scope:ia(m),oauthScopes:m.scopes}});if(n.json){console.log(JSON.stringify({addUrl:f,integrations:w},null,2));return}if(console.log(`Add or manage integrations: ${f}`),!w.length){console.log("No integrations available in the active scope.");return}console.log("credentialId provider name connected scope oauthScopes");for(let m of w)console.log(`${m.credentialId} ${m.provider} ${m.name} ${m.connected?"yes":"no"} ${m.scope} ${m.oauthScopes.join(",")||"-"}`);});});}var Ye=null;function ua(t){Ye=t;}async function be(t=0,e){e&&process.stderr.write(e.endsWith(`
192
190
  `)?e:`${e}
193
- `),Ve?.(),Ve=null,await j(),process.exit(t);}async function G(t){Ve?.(),Ve=null;let e=a$2();e.noColor&&(process.env.FORCE_COLOR="0");let n=process.argv.slice(2);if((!e.isTTY||e.isCI)&&!n.includes("--help")&&!n.includes("-h")){console.log("Running in non-interactive mode.");return}let{render:r}=await import('ink'),{unmount:o}=r(await t);Qr(o);}function ea(t="0.0.8"){let e=new Command().name("culvii").description("Culvii CLI").version(t).option("--debug","Enable debug logging to ~/.culvii/logs/cli.log").configureOutput({writeOut:r=>process.stdout.write(r),writeErr:r=>process.stderr.write(r)});e.exitOverride(r=>{r.code==="commander.helpDisplayed"||r.code==="commander.version"?be(0):be(r.exitCode);}),e.hook("preAction",(r,o)=>{n(o.optsWithGlobals().env);});let n$1=e.command("auth").description("Authentication commands");return n$1.command("login").description("Login to Culvii").action(async()=>{let{login:r}=await import('./login-OGOHEHFE.js');await r();}),n$1.command("logout").description("Logout of Culvii").action(async()=>{let{logout:r}=await import('./logout-BRUJBFUK.js');await r();}),e.command("login").description("Login to Culvii").action(async()=>{let{login:r}=await import('./login-OGOHEHFE.js');await r();}),e.command("logout").description("Logout of Culvii").action(async()=>{let{logout:r}=await import('./logout-BRUJBFUK.js');await r();}),Pt(e),Xt(e),en(e),tn(e),an(e),sn(e),cn(e),ln(e),kn(e),Sn(e),Cn(e),e}async function ta(t){let e$1=process.argv.slice(2);try{let{ConfigStore:n}=await import('./config-store-WSXGIIJ4.js');await new n().read({exitOnError:!1});}catch{await e(a$1.CLI_INSTALLED),await j();}if(e$1.length===0){let[{OnboardingView:n},r]=await Promise.all([import('./OnboardingView-QWEF3FJU.js'),import('react')]);await G(Promise.resolve(r.createElement(n)));return}if(e$1.includes("--help")||e$1.includes("-h")){let[{HelpView:n},r]=await Promise.all([import('./HelpView-E7HS4SVF.js'),import('react')]),o=e$1[0]&&!e$1[0].startsWith("-")?e$1[0]:"culvii";await e(a$1.CLI_HELP_VIEWED,{command:o}),await j(),await G(Promise.resolve(r.createElement(n)));return}if(e$1.includes("--version")||e$1.includes("-V")||e$1.includes("-v")){await e(a$1.CLI_VERSION_VIEWED),process.stdout.write(`${t.version()}
194
- `),await be(0);return}await t.parseAsync(process.argv);}var Ot=false;try{Ot=!!process.argv[1]&&realpathSync(process.argv[1])===fileURLToPath(import.meta.url);}catch{Ot=false;}Ot&&ta(ea()).catch(async t=>{let{userId:e$1,tenantId:n}=await d(),r={error_class:t?.constructor?.name||"UnknownError",command:process.argv.slice(2).join(" ")};e$1?await f(a$1.CLI_UNHANDLED_ERROR,e$1,n,r):await e(a$1.CLI_UNHANDLED_ERROR,r),await j(),console.error(t),await be(1);});export{Ve as activeUnmount,ea as createProgram,be as exit,G as renderApp,Qr as setActiveUnmount};
191
+ `),Ye?.(),Ye=null,await j$1(),process.exit(t);}async function G(t){Ye?.(),Ye=null;let e=a$2();e.noColor&&(process.env.FORCE_COLOR="0");let n=process.argv.slice(2);if((!e.isTTY||e.isCI)&&!n.includes("--help")&&!n.includes("-h")){console.log("Running in non-interactive mode.");return}let{render:r}=await import('ink'),{unmount:i}=r(await t);ua(i);}function fa(t="0.1.0"){let e=new Command().name("culvii").description("Culvii CLI").version(t).option("--debug","Enable debug logging to ~/.culvii/logs/cli.log").configureOutput({writeOut:r=>process.stdout.write(r),writeErr:r=>process.stderr.write(r)});e.exitOverride(r=>{r.code==="commander.helpDisplayed"||r.code==="commander.version"?be(0):be(r.exitCode);}),e.hook("preAction",(r,i)=>{n(i.optsWithGlobals().env);});let n$1=e.command("auth").description("Authentication commands");return n$1.command("login").description("Login to Culvii").action(async()=>{let{login:r}=await import('./login-7VBXFHFC.js');await r();}),n$1.command("logout").description("Logout of Culvii").action(async()=>{let{logout:r}=await import('./logout-OJRK2KGE.js');await r();}),e.command("login").description("Login to Culvii").action(async()=>{let{login:r}=await import('./login-7VBXFHFC.js');await r();}),e.command("logout").description("Logout of Culvii").action(async()=>{let{logout:r}=await import('./logout-OJRK2KGE.js');await r();}),Wt(e),on(e),dn(e),un(e),yn(e),gn(e),wn(e),vn(e),bn(e),Nn(e),Un(e),e}async function pa(t){let e$1=process.argv.slice(2);try{let{ConfigStore:n}=await import('./config-store-WSXGIIJ4.js');await new n().read({exitOnError:!1});}catch{await e(a$1.CLI_INSTALLED),await j$1();}if(e$1.length===0){let[{OnboardingView:n},r]=await Promise.all([import('./OnboardingView-QWEF3FJU.js'),import('react')]);await G(Promise.resolve(r.createElement(n)));return}if(e$1.includes("--help")||e$1.includes("-h")){let[{HelpView:n},r]=await Promise.all([import('./HelpView-NKJCCU5A.js'),import('react')]),i=e$1[0]&&!e$1[0].startsWith("-")?e$1[0]:"culvii";await e(a$1.CLI_HELP_VIEWED,{command:i}),await j$1(),await G(Promise.resolve(r.createElement(n)));return}if(e$1.includes("--version")||e$1.includes("-V")||e$1.includes("-v")){await e(a$1.CLI_VERSION_VIEWED),process.stdout.write(`${t.version()}
192
+ `),await be(0);return}await t.parseAsync(process.argv);}var Nt=false;try{Nt=!!process.argv[1]&&realpathSync(process.argv[1])===fileURLToPath(import.meta.url);}catch{Nt=false;}Nt&&pa(fa()).catch(async t=>{let{userId:e$1,tenantId:n}=await d(),r={error_class:t?.constructor?.name||"UnknownError",command:process.argv.slice(2).join(" ")};e$1?await f(a$1.CLI_UNHANDLED_ERROR,e$1,n,r):await e(a$1.CLI_UNHANDLED_ERROR,r),await j$1(),console.error(t),await be(1);});export{Ye as activeUnmount,fa as createProgram,be as exit,G as renderApp,ua as setActiveUnmount};