@task-handoff/node-agent 0.0.25-alpha.2 → 0.0.27

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.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("node:fs"),t=require("node:path"),n=require("node:child_process"),i=require("commander"),o=require("semver"),r=require("write-file-atomic"),a=require("node:crypto"),s=require("zod"),c=require("node:os");function m(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function d(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var n=function e(){var n=!1;try{n=this instanceof e}catch{}return n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var i=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,i.get?i:{enumerable:!0,get:function(){return e[t]}})}),n}var l={};const u=20971520,p=512e3,g=p,z=u,f=41943040,b=s.z.string().trim().min(1).max(80),y=s.z.enum(["app-session","ai-session"]),h=s.z.enum(["image","file"]),x={scopeType:s.z.enum(["session","create-request"]),scopeId:s.z.string().trim().min(1).max(160),kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120)};s.z.object({...x,size:s.z.coerce.number().int().positive().max(u)}).strict();const I=s.z.string().regex(/^cia_[a-f0-9]{24}$/);s.z.object({attachmentId:I,...x,size:s.z.number().int().positive().max(u)}).strict(),s.z.object({offset:s.z.coerce.number().int().nonnegative()}).strict(),s.z.object({attachmentId:I,offset:s.z.number().int().nonnegative()}),s.z.object({id:I,kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().positive().max(u),expiresAt:s.z.string().datetime()});const A=s.z.object({id:s.z.string().trim().min(1).max(120),kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER)}),v=s.z.enum(["available","expired","missing"]),S=A.extend({contentState:v.default("available")}).strict(),k=s.z.object({id:s.z.string().trim().min(1).max(240),text:s.z.string(),attachments:s.z.array(S).max(6).default([])}).strict(),j=s.z.enum(["running","waiting","idle","failed"]);s.z.object({instanceId:s.z.string().trim().min(1).max(160),sessionId:s.z.string().trim().min(1).max(120),unread:s.z.boolean(),sessionUpdatedAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict();const w=s.z.enum(["thinking","tool","editing","approval","responding","unknown"]),C=s.z.object({id:s.z.string().trim().min(1).max(240).optional(),kind:s.z.string().trim().min(1).max(80).optional(),name:s.z.string().trim().min(1).max(120),inputPreview:s.z.string().trim().max(500).optional(),startedAt:s.z.string().datetime().optional()}).strict(),R=s.z.enum(["running","completed","failed","waiting"]),N=s.z.object({id:s.z.string().trim().min(1).max(240),turnId:s.z.string().trim().min(1).max(240)}).strict(),E=N.extend({type:s.z.literal("user-message"),text:s.z.string(),attachments:s.z.array(S).max(6).optional()}).strict(),T=N.extend({type:s.z.literal("ai-message"),text:s.z.string()}).strict(),P=N.extend({type:s.z.literal("activity"),activityKind:s.z.string().trim().min(1).max(120),title:s.z.string().trim().min(1).max(240),status:R.optional(),summary:s.z.string().max(4e3).optional(),input:s.z.string().max(1e5).optional(),output:s.z.string().max(1e6).optional(),paths:s.z.array(s.z.string().trim().min(1).max(4096)).max(500).optional(),exitCode:s.z.number().int().optional(),durationMs:s.z.number().int().nonnegative().optional()}).strict(),_=s.z.discriminatedUnion("type",[E,T,P]);s.z.object({sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),items:s.z.array(_),generatedAt:s.z.string().datetime()}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),turnId:s.z.string().trim().min(1).max(240),items:s.z.array(_),generatedAt:s.z.string().datetime()}).strict();const O=s.z.enum(["pending-init","running","interrupted","completed","errored","shutdown","not-found"]),L=s.z.enum(["started","interacted","interrupted"]),M=s.z.object({threadId:s.z.string().trim().min(1).max(240),path:s.z.string().trim().max(4096).optional(),status:O,activity:L.optional(),message:s.z.string().trim().max(1e3).optional(),updatedAt:s.z.string().datetime()}).strict(),D=s.z.object({toolCalls:s.z.number().int().min(0).default(0),edits:s.z.number().int().min(0).default(0),approvals:s.z.number().int().min(0).default(0)}).strict().default({toolCalls:0,edits:0,approvals:0}),F=s.z.object({send:s.z.boolean().optional(),interrupt:s.z.boolean().optional(),approval:s.z.boolean().optional(),fork:s.z.boolean().optional(),openApp:s.z.boolean().optional(),close:s.z.boolean().optional()}).strict(),U=s.z.object({kind:s.z.literal("fork"),parentProviderSessionId:s.z.string().trim().min(1).max(240),throughTurnId:s.z.string().trim().min(1).max(240).optional()}).strict(),V=s.z.union([A.extend({source:s.z.object({type:s.z.literal("inline"),encoding:s.z.literal("base64"),data:s.z.string().min(1).max(31457280)}).strict()}).strict().superRefine((e,t)=>{const n="image"===e.kind?u:p;(e.size<=0||("file"===e.kind?e.size>=n:e.size>n))&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["size"],message:`Inline ${e.kind} must be between 1 byte and ${n} bytes.`})}),A.extend({source:s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096)}).strict()}).strict()]),$=A.extend({sourceType:s.z.enum(["inline","runtime-path"])}).strict(),q=s.z.union([s.z.object({id:s.z.string().trim().min(1).max(120),kind:h.optional(),source:s.z.object({type:s.z.literal("upload-ref")}).strict().default({type:"upload-ref"})}).strict(),s.z.object({id:s.z.string().trim().min(1).max(120),kind:h,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),source:s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096)}).strict()}).strict()]),B=s.z.enum(["auto","queue","steer","immediate"]),H=s.z.enum(["ask","auto-review","full-access"]),G=s.z.enum(["review","rename","goal","compact"]);s.z.object({command:G,argument:s.z.string().trim().max(4e3).optional()}).strict().superRefine((e,t)=>{"rename"!==e.command||e.argument||t.addIssue({code:"custom",path:["argument"],message:"Rename requires a thread name."}),"review"!==e.command&&"compact"!==e.command||!e.argument||t.addIssue({code:"custom",path:["argument"],message:`${e.command} does not accept an argument.`})}),s.z.object({command:G,value:s.z.string().max(4e3).optional(),turnId:s.z.string().trim().min(1).max(240).optional()}).strict(),s.z.enum(["skill","app","plugin"]);const K=s.z.object({name:s.z.string().trim().min(1).max(240),path:s.z.string().trim().min(1).max(4096)}),W=s.z.discriminatedUnion("kind",[K.extend({kind:s.z.literal("skill"),path:s.z.string().trim().min(1).max(4096).refine(e=>e.startsWith("/"),"Skill paths must be absolute.")}).strict(),K.extend({kind:s.z.literal("app"),path:s.z.string().trim().min(7).max(4096).regex(/^app:\/\/[^\s/]+$/,"App paths must use app://<id>.")}).strict(),K.extend({kind:s.z.literal("plugin"),path:s.z.string().trim().min(10).max(4096).regex(/^plugin:\/\/[^\s/]+$/,"Plugin paths must use plugin://<id>.")}).strict()]),Y=s.z.array(W).max(20).default([]),X=s.z.enum(["plugin","skill","file","directory","app"]),J=s.z.object({kind:X,name:s.z.string().trim().min(1).max(240),description:s.z.string().trim().max(1e3).optional(),path:s.z.string().trim().min(1).max(4096),icon:s.z.string().trim().max(4096).optional()}).strict().superRefine((e,t)=>{"skill"!==e.kind||e.path.startsWith("/")||t.addIssue({code:"custom",path:["path"],message:"Skill paths must be absolute."}),"app"!==e.kind||/^app:\/\/[^\s/]+$/.test(e.path)||t.addIssue({code:"custom",path:["path"],message:"App paths must use app://<id>."}),"plugin"!==e.kind||/^plugin:\/\/[^\s/]+$/.test(e.path)||t.addIssue({code:"custom",path:["path"],message:"Plugin paths must use plugin://<id>."}),"file"!==e.kind&&"directory"!==e.kind||!e.path.startsWith("/")&&!e.path.split(/[\\/]+/).includes("..")||t.addIssue({code:"custom",path:["path"],message:"File and directory paths must be relative to the session cwd."})}),Z=s.z.object({category:s.z.enum(["skills","plugins","apps","files"]),code:s.z.string().trim().min(1).max(160),message:s.z.string().trim().min(1).max(2e3)}).strict();s.z.object({sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),cwd:s.z.string().trim().min(1).max(4096),candidates:s.z.array(J).max(1e3).default([]),diagnostics:s.z.array(Z).max(20).default([])}).strict(),s.z.object({query:s.z.string().trim().max(240).default("")}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),cwd:s.z.string().trim().min(1).max(4096),query:s.z.string().trim().max(240),requestId:s.z.string().trim().min(1).max(160),candidates:s.z.array(J.refine(e=>"file"===e.kind||"directory"===e.kind,"File search only returns files and directories.")).max(200).default([]),complete:s.z.boolean().default(!1)}).strict();const Q=s.z.object({message:s.z.string().trim().min(1).max(2e4),mode:B.optional(),permissionMode:H.optional()}),ee=Q.extend({attachments:s.z.array(V).max(6).default([]),references:Y}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>f&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),te=Q.extend({attachments:s.z.array(q).max(6).default([]),references:Y}).strict(),ne=s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096).refine(e=>e.startsWith("/")||/^[A-Za-z]:[\\/]/.test(e),"Runtime paths must be absolute in the target controlled instance.")}).strict();ee.extend({agent:b,cwd:ne,cwdFolderId:s.z.string().trim().min(1).max(120).optional(),clientRequestId:s.z.string().trim().min(1).max(160)}).strict();const ie=s.z.object({mode:s.z.enum(["current-folder","worktree"]),branch:s.z.string().trim().min(1).max(1024)}).strict();te.extend({agent:b,cwdFolderId:s.z.string().trim().min(1).max(120).optional(),gitSelection:ie.optional(),clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["created","already-created"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:s.z.literal("ai-session")}).strict();const oe=s.z.object({mode:s.z.enum(["current","managed-worktree"]).default("current")}).strict().default({mode:"current"});s.z.object({clientRequestId:s.z.string().trim().min(1).max(160),throughTurnId:s.z.string().trim().min(1).max(240).optional(),workspace:oe.optional().default({mode:"current"})}).strict(),s.z.object({disposition:s.z.enum(["created","already-created"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:s.z.literal("ai-session")}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["opened","already-open"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),appSessionId:s.z.string().trim().min(1).max(120),creationSource:y}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["closed","already-closed"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:y}).strict(),s.z.object({code:s.z.enum(["invalid-request","not-found","unsupported","provider-unavailable","materialization-failed","open-app-failed","close-failed","conflict"]),message:s.z.string().trim().min(1).max(4e3),retryable:s.z.boolean().default(!1),aiSessionId:s.z.string().trim().min(1).max(120).optional(),providerSessionId:s.z.string().trim().min(1).max(240).optional()}).strict(),s.z.object({decision:s.z.enum(["allow","deny","skip"])}).strict(),s.z.object({expectedRevision:s.z.number().int().min(0),queueIds:s.z.array(s.z.string().trim().min(1).max(120)).max(100)}).strict(),s.z.object({expectedRevision:s.z.number().int().min(0),message:s.z.string().trim().min(1).max(2e4)}).strict(),s.z.object({code:s.z.string().trim().min(1).max(160),message:s.z.string(),instanceId:s.z.string().trim().min(1).max(160).optional(),nodeId:s.z.string().trim().min(1).max(160).optional(),route:s.z.string().trim().min(1).max(4096).optional()}).strict();const re=s.z.object({id:s.z.string().trim().min(1).max(120),messageId:s.z.string().trim().min(1).max(240).optional(),message:s.z.string().trim().min(1).max(2e4),attachments:s.z.array($).max(6).default([]),references:Y,permissionMode:H.optional(),status:s.z.enum(["queued","sending","failed"]).default("queued"),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime(),error:s.z.string().trim().max(4e3).optional()}).strict(),ae=s.z.object({revision:s.z.number().int().min(0).default(0),pendingCount:s.z.number().int().min(0).default(0),items:s.z.array(re).max(100).default([])}).strict().default({revision:0,pendingCount:0,items:[]}),se=s.z.enum(["control","realtime","adapter-snapshot","transcript-tail","transcript-scan","process-scan","app-session"]),ce=s.z.object({id:s.z.string().trim().min(1).max(240),status:s.z.enum(["running","completed"]),startedAt:s.z.string().datetime().optional(),completedAt:s.z.string().datetime().optional()}).strict(),me=s.z.object({id:s.z.string().trim().min(1).max(240),providerTurnId:s.z.string().trim().max(240).optional(),source:se.optional(),userPrompt:s.z.string().trim().optional(),userMessages:s.z.array(k).max(100).optional(),status:s.z.enum(["queued","running","waiting","completed","failed"]).default("running"),phase:w.optional(),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),contextCompactions:s.z.array(ce).max(20).optional(),revision:s.z.number().int().min(0).default(0),sourcePriority:s.z.number().int().min(0).max(100).optional(),snapshotVersion:s.z.number().int().min(0).optional(),observedAt:s.z.string().datetime().optional(),startedAt:s.z.string().datetime().optional(),updatedAt:s.z.string().datetime().optional(),completedAt:s.z.string().datetime().optional()}).strict(),de=me.pick({id:!0,providerTurnId:!0,userPrompt:!0,userMessages:!0,status:!0,phase:!0,summary:!0,lastMessage:!0,contextCompactions:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).strict(),le=s.z.object({id:s.z.string().trim().min(1).max(120),agent:b,creationSource:y.default("app-session"),appSessionId:s.z.string().trim().max(120).optional(),appId:s.z.string().trim().max(120).optional(),providerSessionId:s.z.string().trim().max(240).optional(),lineage:U.optional(),providerMeta:s.z.record(s.z.string(),s.z.unknown()).optional(),appBindingKeys:s.z.array(s.z.string().trim().min(1).max(240)).max(20).optional(),actions:F.optional(),activeTurnId:s.z.string().trim().max(240).optional(),title:s.z.string().trim().max(240).optional(),cwd:s.z.string().trim().max(4096).optional(),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),userPrompt:s.z.string().trim().optional(),turns:s.z.array(me).max(50).optional(),status:j.default("running"),phase:w.default("unknown"),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),currentTool:C.optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).default(0),subAgents:s.z.array(M).max(50).default([]),transcriptPath:s.z.string().trim().max(4096).optional(),transcriptSize:s.z.number().int().min(0).optional(),startedAt:s.z.string().datetime(),updatedAt:s.z.string().datetime(),completedAt:s.z.string().datetime().optional(),error:s.z.string().trim().max(4e3).optional(),counters:D,queue:ae}).strict();le.pick({id:!0,appBindingKeys:!0,cwd:!0,error:!0,providerMeta:!0,queue:!0,subAgents:!0}).strict();const ue=me.pick({id:!0,providerTurnId:!0,status:!0,phase:!0,revision:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).extend({bodyRevision:s.z.string().trim().min(1).max(64)}).strict();s.z.object({sessionId:s.z.string().trim().min(1).max(120),revision:s.z.string().trim().min(1).max(64),turns:s.z.array(ue).max(50)}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),revision:s.z.string().trim().min(1).max(64),turn:me}).strict();const pe=s.z.object({session:le,provider:s.z.string().trim().min(1).max(80),action:s.z.enum(["send","queue","steer","interrupt","approval"]),decision:s.z.enum(["allow","deny","skip"]).optional(),turnId:s.z.string().trim().min(1).max(240).optional(),providerTurnId:s.z.string().trim().min(1).max(240).optional(),queueId:s.z.string().trim().min(1).max(120).optional()}).strict(),ge=pe.omit({session:!0}).extend({sessionId:s.z.string().trim().min(1).max(120),messageId:s.z.string().trim().min(1).max(240).optional()}).strict();s.z.union([ge,pe.transform(function(e){const t=e.session.turns?.at(-1),n=(e.queueId?e.session.queue?.items.find(t=>t.id===e.queueId)?.messageId:void 0)||("send"===e.action||"queue"===e.action||"steer"===e.action?t?.userMessages?.at(-1)?.id:void 0);return ge.parse({sessionId:e.session.id,provider:e.provider,action:e.action,...e.decision?{decision:e.decision}:{},...e.turnId||e.session.activeTurnId||t?.id?{turnId:e.turnId||e.session.activeTurnId||t?.id}:{},...e.providerTurnId||t?.providerTurnId?{providerTurnId:e.providerTurnId||t?.providerTurnId}:{},...e.queueId?{queueId:e.queueId}:{},...n?{messageId:n}:{}})})]);const ze=s.z.object({id:s.z.string().trim().min(1).max(120),agent:b,creationSource:y,providerSessionId:s.z.string().trim().min(1).max(240),lineage:U.optional(),title:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),lastMessage:s.z.string().trim().optional(),cwd:s.z.string().trim().min(1).max(4096),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),lastActiveAt:s.z.string().datetime(),archivedAt:s.z.string().datetime()}).strict();s.z.object({schemaVersion:s.z.literal(1).default(1),items:s.z.array(ze).max(500).default([])}).strict(),s.z.object({items:s.z.array(ze).max(500).default([])}).strict(),s.z.object({item:ze,turns:s.z.array(de).max(50).default([])}).strict(),s.z.object({disposition:s.z.enum(["resumed","already-open"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),appSessionId:s.z.string().trim().min(1).max(120).optional(),creationSource:y}).strict();const fe=me.omit({userMessages:!0}),be=le.pick({id:!0,agent:!0,creationSource:!0,appSessionId:!0,appId:!0,providerSessionId:!0,lineage:!0,providerMeta:!0,appBindingKeys:!0,actions:!0,activeTurnId:!0,title:!0,cwd:!0,cwdFolderId:!0,userPrompt:!0,turns:!0,status:!0,phase:!0,summary:!0,lastMessage:!0,lastMessageItemId:!0,currentTool:!0,toolCallsSinceLastMessage:!0,subAgents:!0,queue:!0,startedAt:!0,updatedAt:!0,error:!0}).extend({turns:s.z.array(fe).max(50).optional(),detailRevision:s.z.string().trim().min(1).max(64).optional(),turnsRevision:s.z.string().trim().min(1).max(64).optional(),turnCount:s.z.number().int().min(0).optional(),subAgentCount:s.z.number().int().min(0).optional(),lastUserMessageAt:s.z.string().datetime().optional()}).strict(),ye=s.z.object({runningCount:s.z.number().int().min(0).default(0),waitingCount:s.z.number().int().min(0).default(0),staleCount:s.z.number().int().min(0).default(0),sessions:s.z.array(be).default([]),updatedAt:s.z.string().datetime()}).strict();s.z.object({streamId:s.z.string().trim().min(1).max(240),revision:s.z.number().int().min(0),lastEventAt:s.z.string().datetime(),snapshot:ye}).strict(),ye.pick({runningCount:!0,waitingCount:!0,staleCount:!0,updatedAt:!0}).extend({idleCount:s.z.number().int().min(0).default(0),problemCount:s.z.number().int().min(0).default(0),revision:s.z.number().int().min(0).optional()});const he=s.z.enum(["provider-event","app-session-created","app-session-updated","app-session-deleted","discovery-scan","control-action","heartbeat-sync","startup"]),xe=s.z.object({streamId:s.z.string().trim().min(1).max(240),instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),revision:s.z.number().int().min(0),previousRevision:s.z.number().int().min(0).optional(),traceId:s.z.string().trim().min(1).max(160),generatedAt:s.z.string().datetime(),reason:he}).strict(),Ie=s.z.object({meta:xe,snapshot:ye}).strict(),Ae=s.z.object({meta:xe,upserted:s.z.array(be).default([]),removed:s.z.array(s.z.string().trim().min(1).max(120)).default([])}).strict(),ve=s.z.object({meta:xe,sessionIds:s.z.array(s.z.string().trim().min(1).max(120)).default([]),expiresAt:s.z.string().datetime()}).strict();s.z.object({instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240).optional(),turnId:s.z.string().trim().min(1).max(240),itemId:s.z.string().trim().min(1).max(240),delta:s.z.string().min(1),generatedAt:s.z.string().datetime()}).strict().omit({instanceId:!0,nodeId:!0,providerSessionId:!0}).strict(),s.z.object({instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),item:_,generatedAt:s.z.string().datetime()}).strict(),s.z.object({streamId:s.z.string().trim().min(1).max(240),instanceId:s.z.string().trim().min(1).max(160),sinceRevision:s.z.number().int().min(0),latestRevision:s.z.number().int().min(0),earliestRetainedRevision:s.z.number().int().min(0),syncRequired:s.z.boolean().default(!1),events:s.z.array(s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("ai-session.snapshot"),payload:Ie}).strict(),s.z.object({type:s.z.literal("ai-session.patch"),payload:Ae}).strict(),s.z.object({type:s.z.literal("ai-session.removed"),payload:ve}).strict()])).default([])}).strict();const Se=s.z.object({source:se,sourcePriority:s.z.number().int().min(0).max(100).optional(),observedAt:s.z.string().datetime().optional(),snapshotVersion:s.z.number().int().min(0).optional()}).strict(),ke=Se.extend({type:s.z.literal("snapshot"),agent:s.z.string().trim().min(1).max(80),creationSource:y.optional(),appSessionId:s.z.string().trim().max(120).optional(),appId:s.z.string().trim().max(120).optional(),providerSessionId:s.z.string().trim().max(240).optional(),lineage:U.optional(),providerMeta:s.z.record(s.z.string(),s.z.unknown()).optional(),appBindingKeys:s.z.array(s.z.string().trim().min(1).max(240)).max(20).optional(),actions:F.optional(),title:s.z.string().trim().max(240).optional(),cwd:s.z.string().trim().max(4096).optional(),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),activeTurnId:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),turns:s.z.array(me).max(50).optional(),status:j.optional(),phase:w.optional(),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),error:s.z.string().trim().max(4e3).optional(),currentTool:C.optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).optional(),subAgents:s.z.array(M).max(50).optional(),transcriptPath:s.z.string().trim().max(4096).optional(),transcriptSize:s.z.number().int().min(0).optional(),replaceActivity:s.z.boolean().optional()}).strict(),je=Se.extend({type:s.z.literal("event"),sessionId:s.z.string().trim().min(1).max(120),kind:s.z.enum(["lifecycle","send-ack","turn-started","user-message","assistant-message","approval-requested","turn-completed","session-error","tool-activity","sub-agent-activity","context-compaction"]),activeTurnId:s.z.string().trim().max(240).optional(),providerTurnId:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),userMessage:k.optional(),text:s.z.string().optional(),itemId:s.z.string().trim().max(240).optional(),status:j.optional(),phase:w.optional(),summary:s.z.string().trim().max(1e3).optional(),error:s.z.string().trim().max(4e3).optional(),currentTool:C.nullable().optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).optional(),subAgents:s.z.array(M).max(50).optional(),contextCompaction:ce.optional(),counters:s.z.object({toolCalls:s.z.number().int().min(0).optional(),edits:s.z.number().int().min(0).optional(),approvals:s.z.number().int().min(0).optional()}).strict().optional()}).strict().superRefine((e,t)=>{if("session-error"!==e.kind||e.error||t.addIssue({code:"custom",path:["error"],message:"session-error events require error"}),"context-compaction"===e.kind?e.contextCompaction||t.addIssue({code:"custom",path:["contextCompaction"],message:"context-compaction events require contextCompaction"}):void 0!==e.contextCompaction&&t.addIssue({code:"custom",path:["contextCompaction"],message:"contextCompaction is only valid for context-compaction events"}),"send-ack"!==e.kind&&"user-message"!==e.kind&&void 0!==e.userMessage&&t.addIssue({code:"custom",path:["userMessage"],message:"userMessage is only valid for send-ack and user-message events"}),"sub-agent-activity"===e.kind?e.subAgents||t.addIssue({code:"custom",path:["subAgents"],message:"sub-agent-activity events require subAgents"}):void 0!==e.subAgents&&t.addIssue({code:"custom",path:["subAgents"],message:"subAgents is only valid for sub-agent-activity events"}),"tool-activity"!==e.kind)return void 0!==e.currentTool&&t.addIssue({code:"custom",path:["currentTool"],message:"currentTool is only valid for tool-activity events"}),void(void 0!==e.toolCallsSinceLastMessage&&t.addIssue({code:"custom",path:["toolCallsSinceLastMessage"],message:"toolCallsSinceLastMessage is only valid for tool-activity events"}));"currentTool"in e||t.addIssue({code:"custom",path:["currentTool"],message:"tool-activity events require currentTool"}),void 0===e.toolCallsSinceLastMessage&&t.addIssue({code:"custom",path:["toolCallsSinceLastMessage"],message:"tool-activity events require toolCallsSinceLastMessage"})});s.z.discriminatedUnion("type",[ke,je]);const we=s.z.union([s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("interval").default("interval"),intervalMs:s.z.number().int().min(1e3)}).strict(),s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("daily"),timeOfDay:s.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:s.z.string().trim().min(1).max(120)}).strict(),s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("weekly"),weekdays:s.z.array(s.z.number().int().min(0).max(6)).min(1).max(7),timeOfDay:s.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:s.z.string().trim().min(1).max(120)}).strict()]),Ce=s.z.union([we,s.z.object({type:s.z.literal("file-change"),roots:s.z.array(s.z.string().trim().min(1).max(4096)).min(1).max(50),globs:s.z.array(s.z.string().trim().min(1).max(500)).min(1).max(100),ignore:s.z.array(s.z.string().trim().min(1).max(500)).max(100).optional(),debounceMs:s.z.number().int().min(100).max(6e4).default(1500)}).strict(),s.z.object({type:s.z.literal("ai-session"),agent:s.z.string().trim().min(1).max(80).optional(),statuses:s.z.array(s.z.enum(["running","waiting","idle","failed"])).max(20).optional(),phases:s.z.array(s.z.enum(["thinking","tool","editing","approval","responding","unknown"])).max(20).optional()}).strict()]),Re=s.z.object({promptTemplate:s.z.string().trim().min(1).max(2e4)}).strict(),Ne=s.z.object({cooldownMs:s.z.number().int().min(0).max(864e5).optional(),maxConcurrentRuns:s.z.number().int().min(1).max(20).default(1),whenBusy:s.z.enum(["skip","queue"]).default("skip")}).strict(),Ee=s.z.object({configHash:s.z.string().trim().min(8).max(80),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(1e3).optional(),source:Ce,action:Re,policy:Ne.default({maxConcurrentRuns:1,whenBusy:"skip"}),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict(),Te=s.z.object({type:s.z.literal("ai-session"),aiSessionId:s.z.string().trim().min(1).max(160)}).strict(),Pe=s.z.object({configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),origin:s.z.enum(["control-plane","controlled-instance"]).default("controlled-instance"),enabled:s.z.boolean().default(!0),target:Te,localName:s.z.string().trim().min(1).max(160).optional(),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict(),_e=s.z.object({configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),status:s.z.enum(["idle","running","disabled","error"]).default("idle"),lastTriggeredAt:s.z.string().datetime().optional(),lastCompletedAt:s.z.string().datetime().optional(),lastSkippedAt:s.z.string().datetime().optional(),lastError:s.z.string().trim().max(4e3).optional(),runCount:s.z.number().int().min(0).default(0),skippedCount:s.z.number().int().min(0).default(0)}).strict(),Oe=s.z.object({id:s.z.string().trim().min(1).max(160),configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),eventType:s.z.enum(["manual","schedule","file-change","ai-session"]),status:s.z.enum(["started","completed","failed","skipped"]),target:Te,promptPreview:s.z.string().trim().max(500),eventSummary:s.z.string().trim().max(1e3).optional(),error:s.z.string().trim().max(4e3).optional(),startedAt:s.z.string().datetime(),completedAt:s.z.string().datetime().optional()}).strict();s.z.object({schemaVersion:s.z.literal(1).default(1),configs:s.z.array(Ee).default([]),deployments:s.z.array(Pe).default([]),runtime:s.z.array(_e).default([]),recentRuns:s.z.array(Oe).default([])}).strict();const Le=s.z.object({instanceId:s.z.string().trim().min(1).max(160),instanceName:s.z.string().trim().min(1).max(160),deployment:Pe,runtime:_e.optional()}).strip(),Me=Oe.extend({instanceName:s.z.string().trim().min(1).max(160).optional()}).strip(),De=s.z.object({configHash:s.z.string().trim().min(8).max(80),config:Ee,deploymentCount:s.z.number().int().min(0),enabledCount:s.z.number().int().min(0),runningCount:s.z.number().int().min(0),errorCount:s.z.number().int().min(0),ownedByControlPlane:s.z.boolean(),controlPlaneDeploymentCount:s.z.number().int().min(0),deployments:s.z.array(Le),recentRuns:s.z.array(Me)}).strip();s.z.object({updatedAt:s.z.string().datetime(),triggers:s.z.array(De)}).strip(),s.z.object({name:Ee.shape.name,description:Ee.shape.description,source:Ce,action:Re,policy:Ne.partial().optional()}).strict(),s.z.object({scope:s.z.enum(["node","instance"]),nodeId:s.z.string().trim().min(1).max(160).optional(),instanceId:s.z.string().trim().min(1).max(160).optional(),code:s.z.string().trim().min(1).max(160),message:s.z.string().trim().min(1).max(4e3)}).strip();const Fe=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Proxy protocol version must use YYYY-MM-DD format."),Ue=s.z.string().trim().min(1).max(160).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Ve=s.z.string().datetime(),$e=s.z.string().trim().min(32).max(4096),qe=s.z.string().trim().max(2048).transform((e,t)=>{try{return function(e){const t=new URL(e.trim());if("https:"!==t.protocol||t.username||t.password||"/"!==t.pathname||t.search||t.hash)throw new Error("Proxy origin must be an HTTPS origin without credentials, path, query, or fragment.");return t.origin}(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}});s.z.string().trim().min(1).max(4096).transform((e,t)=>{try{return function(e){const t=e.trim();if(!t.startsWith("/")||t.startsWith("//")||t.includes("\\")||/%25/i.test(t))throw new Error("Proxy route must be a single-encoded node-agent relative route.");const n=t.split("?",1)[0];let i,o;try{i=n.split("/").map(e=>decodeURIComponent(e))}catch{throw new Error("Proxy route contains invalid percent encoding.")}if(i.some(e=>".."===e||"."===e))throw new Error("Proxy route cannot traverse outside the node-agent API.");try{o=new URL(t,"https://node-agent.invalid")}catch{throw new Error("Proxy route is invalid.")}if("https://node-agent.invalid"!==o.origin||o.username||o.password)throw new Error("Proxy route cannot select an absolute upstream URL.");return`${o.pathname}${o.search}`}(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}});const Be=s.z.enum(Object.values({ProtocolUnsupported:"CONTROL_PLANE_PROXY_PROTOCOL_UNSUPPORTED",InviteInvalid:"CONTROL_PLANE_PROXY_INVITE_INVALID",InviteExpired:"CONTROL_PLANE_PROXY_INVITE_EXPIRED",InviteConsumed:"CONTROL_PLANE_PROXY_INVITE_CONSUMED",InviteRevoked:"CONTROL_PLANE_PROXY_INVITE_REVOKED",TargetUnavailable:"CONTROL_PLANE_PROXY_TARGET_UNAVAILABLE",TargetMismatch:"CONTROL_PLANE_PROXY_TARGET_MISMATCH",BindingUnknown:"CONTROL_PLANE_PROXY_BINDING_UNKNOWN",BindingRevoked:"CONTROL_PLANE_PROXY_BINDING_REVOKED",BindingIdentityConflict:"CONTROL_PLANE_PROXY_BINDING_IDENTITY_CONFLICT",AuthenticationFailed:"CONTROL_PLANE_PROXY_AUTHENTICATION_FAILED",RouteInvalid:"CONTROL_PLANE_PROXY_ROUTE_INVALID",HeaderInvalid:"CONTROL_PLANE_PROXY_HEADER_INVALID",ResourceLimit:"CONTROL_PLANE_PROXY_RESOURCE_LIMIT",SnapshotRequired:"CONTROL_PLANE_PROXY_SNAPSHOT_REQUIRED",Unavailable:"CONTROL_PLANE_PROXY_UNAVAILABLE",TransportFailed:"CONTROL_PLANE_PROXY_TRANSPORT_FAILED"})),He=s.z.object({code:Be,message:s.z.string().trim().min(1).max(2048),retryable:s.z.boolean(),details:s.z.record(s.z.string(),s.z.unknown()).optional()}).strict(),Ge=s.z.enum(["active","revoked"]),Ke=s.z.object({id:Ue,targetNodeId:Ue,status:Ge,createdBy:Ue,expiresAt:Ve,revokedAt:Ve.optional(),createdAt:Ve,updatedAt:Ve}).strict();s.z.object({targetNodeId:Ue,expiresInSeconds:s.z.number().int().min(60).max(3600).default(600)}).strict(),s.z.object({invite:Ke,token:s.z.string().trim().min(24).max(512),proxyOrigin:qe,protocolVersion:Fe}).strict();const We=s.z.enum(["active","revoked"]),Ye=s.z.object({id:Ue,claimId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,bindingKeyId:Ue,status:We,revision:s.z.number().int().positive(),lastError:He.optional(),revokedAt:Ve.optional(),createdAt:Ve,updatedAt:Ve}).strict();s.z.object({protocolVersion:Fe,inviteToken:s.z.string().trim().min(24).max(512).optional(),claimId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue.optional(),bindingKeyId:Ue,credential:$e}).strict(),s.z.object({sourceControlPlaneId:Ue,bindingKeyId:Ue,credential:$e}).strict();const Xe=s.z.object({id:Ue,name:s.z.string().trim().min(1).max(160),status:s.z.enum(["unknown","online","offline","degraded"]),health:s.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:Ve.optional(),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({})}).strict(),Je=s.z.object({protocolVersion:Fe,binding:Ye,streamId:Ue,revision:s.z.number().int().nonnegative(),observedAt:Ve,target:Xe}).strict(),Ze=s.z.object({type:s.z.literal("control-plane-proxy.event"),protocolVersion:Fe,streamId:Ue,bindingId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,revision:s.z.number().int().positive(),source:s.z.object({id:s.z.string().trim().min(1).max(512),seq:s.z.number().int().nonnegative()}).strict(),target:Xe,event:s.z.object({type:s.z.string().trim().min(1).max(240),topic:s.z.string().trim().min(1).max(240),createdAt:Ve}).strict()}).strict(),Qe=s.z.object({type:s.z.literal("control-plane-proxy.events.ready"),protocolVersion:Fe,streamId:Ue,bindingId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative()}).strict(),et=s.z.object({type:s.z.literal("control-plane-proxy.snapshot-required"),protocolVersion:Fe,streamId:Ue,bindingId:Ue,sourceControlPlaneId:Ue,targetNodeId:Ue,sinceRevision:s.z.number().int().nonnegative(),latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative(),error:He}).strict();s.z.discriminatedUnion("type",[Ze,Qe,et]),s.z.object({protocolVersion:Fe,binding:Ye,target:Je.shape.target}).strict(),s.z.object({id:Ue,claimId:Ue,proxyOrigin:qe,requestedName:s.z.string().trim().min(1).max(160).optional(),sourceControlPlaneId:Ue,targetNodeId:Ue.optional(),bindingKeyId:Ue,credential:$e,status:s.z.enum(["pending","compensation-required"]),createdAt:Ve,updatedAt:Ve,expiresAt:Ve}).strict().omit({credential:!0}),s.z.object({id:Ue,nodeId:Ue,proxyOrigin:qe,proxyBindingId:Ue,targetNodeId:Ue,sourceControlPlaneId:Ue,bindingKeyId:Ue,credential:$e,createdAt:Ve,updatedAt:Ve}).strict();const tt=s.z.string().trim().min(1).max(120),nt=s.z.object({agent:tt,actions:s.z.object({create:s.z.boolean().default(!1),send:s.z.boolean().default(!1),queue:s.z.boolean().default(!1),steer:s.z.boolean().default(!1),interrupt:s.z.boolean().default(!1),archive:s.z.boolean().default(!1),delete:s.z.boolean().default(!1),fork:s.z.boolean().default(!1),approvalDecisions:s.z.array(s.z.enum(["allow","deny","skip"])).max(3).default([])}).passthrough(),timeline:s.z.object({sessionRead:s.z.boolean().default(!1),turnRead:s.z.boolean().default(!1),liveItems:s.z.boolean().default(!1)}).passthrough()}).passthrough(),it=s.z.array(nt).max(100).default([]),ot="2026-08-23",rt=new Set(["2026-08-01","2026-08-16","2026-08-17","2026-08-20",ot]),at=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Protocol version must use YYYY-MM-DD format."),st=s.z.string().trim().min(1).max(120);function ct(){return{features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}}}const mt=s.z.object({sessionReadAgents:s.z.array(st).max(100).default([]),turnReadAgents:s.z.array(st).max(100).default([]),liveItemAgents:s.z.array(st).max(100).default([])}).passthrough(),dt=s.z.object({metadataAgents:s.z.array(st).max(100).default([]),contentAgents:s.z.array(st).max(100).default([]),uploadAgents:s.z.array(st).max(100).default([]),retentionSettings:s.z.boolean().default(!1),fileSizeLimitSettings:s.z.boolean().default(!1)}).passthrough(),lt=s.z.object({appRuntime:s.z.boolean().default(!1),tty:s.z.boolean().default(!1),gui:s.z.boolean().default(!1),browser:s.z.boolean().default(!1),screenshots:s.z.boolean().default(!1),logs:s.z.boolean().default(!1),aiSessionWorkspaceSelection:s.z.boolean().default(!1),aiSessionPersistenceSettings:s.z.boolean().default(!1),gitCliCredentialBroker:s.z.boolean().optional(),gitCredentialProxy:s.z.boolean().optional(),aiSessionTimeline:mt.default(function(){return{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]}}),aiSessionConversationAttachments:dt.optional(),aiSessionProviders:it.optional()}).passthrough(),ut=s.z.object({features:lt.default(function(){return{appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}})}).passthrough();function pt(e){const t={features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}};if(!e||"object"!=typeof e||Array.isArray(e))return t;const n=e,i=n.features;if(!i||"object"!=typeof i||Array.isArray(i))return t;const o=i,r={appRuntime:!1,tty:!1,gui:!1,browser:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]};for(const e of["appRuntime","tty","gui","browser","screenshots","logs","aiSessionWorkspaceSelection","aiSessionPersistenceSettings","gitCliCredentialBroker","gitCredentialProxy"]){const t=s.z.boolean().safeParse(o[e]);t.success&&(r[e]=t.data)}const a=mt.safeParse(o.aiSessionTimeline);a.success&&(r.aiSessionTimeline=a.data);const c=dt.safeParse(o.aiSessionConversationAttachments);c.success&&(r.aiSessionConversationAttachments=c.data);const m=it.safeParse(o.aiSessionProviders);return m.success&&(r.aiSessionProviders=m.data),ut.parse({...n,features:{...o,...r}})}function gt(e){return pt(e).features.aiSessionConversationAttachments}function zt(e){return pt(e).features.aiSessionProviders}function ft(e,t){const n=gt(e);return"metadata"===t?n.metadataAgents:"content"===t?n.contentAgents:n.uploadAgents}function bt(e){return pt(e).features.aiSessionTimeline}function yt(e,t){const n=bt(e);return"session-read"===t?n.sessionReadAgents:"turn-read"===t?n.turnReadAgents:n.liveItemAgents}const ht=s.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),xt=s.z.string().datetime(),It=s.z.record(s.z.string(),s.z.string()).default({}),At=s.z.record(s.z.string(),s.z.string()).default({}),vt=s.z.object({encoding:s.z.enum(["utf8","base64"]),data:s.z.string()}).strict().superRefine((e,t)=>{"base64"===e.encoding&&Buffer.from(e.data,"base64").toString("base64")!==e.data&&t.addIssue({code:"custom",path:["data"],message:"Node tunnel binary body must use canonical base64 encoding."})}),St=/^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/,kt=/^sha256:([a-fA-F0-9]{64})$/,jt=/^(?:localhost|[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)(?::[1-9][0-9]{0,4})?$/,wt=/^[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*$/;function Ct(e){const t=e.trim();if(!t||t.length>512||t.includes("://")||/\s/.test(t))throw new Error("Docker image reference must not contain a URL scheme or whitespace.");const n=t.indexOf("@");if(-1!==n&&n!==t.lastIndexOf("@"))throw new Error("Docker image reference contains more than one digest separator.");const i=-1===n?void 0:t.slice(n+1),o=-1===n?t:t.slice(0,n),r=i?kt.exec(i):void 0;if(i&&!r)throw new Error("Docker image digest must use sha256 followed by 64 hexadecimal characters.");const a=o.lastIndexOf("/"),s=o.lastIndexOf(":"),c=s>a,m=c?o.slice(s+1):void 0,d=c?o.slice(0,s):o;if(m&&!St.test(m))throw new Error("Docker image tag is invalid.");if(!m&&!r)throw new Error("Docker image reference must include an explicit tag or sha256 digest.");const l=d.split("/");if(!l.length||l.some(e=>!e))throw new Error("Docker image repository path is invalid.");const u=l.length>1&&(l[0].includes(".")||l[0].includes(":")||"localhost"===l[0]),p=u?l.slice(1):l;if(u&&!jt.test(l[0].toLowerCase()))throw new Error("Docker image registry host or port is invalid.");if(!p.length||p.some(e=>!wt.test(e)))throw new Error("Docker image repository names must be lowercase and use valid separators.");const g=l.map((e,t)=>u&&0===t?e.toLowerCase():e).join("/"),z=r?`sha256:${r[1].toLowerCase()}`:void 0;return`${g}${m?`:${m}`:""}${z?`@${z}`:""}`}function Rt(e){const t=Ct(e),n=t.indexOf("@"),i=-1===n?void 0:t.slice(n+1),o=-1===n?t:t.slice(0,n),r=o.lastIndexOf("/"),a=o.lastIndexOf(":"),s=a>r;return{reference:t,repository:s?o.slice(0,a):o,tag:s?o.slice(a+1):void 0,digest:i}}const Nt=s.z.string().trim().min(1).max(512).transform((e,t)=>{try{return Ct(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}}),Et=s.z.string().trim().transform((e,t)=>{const n=kt.exec(e);return n?`sha256:${n[1].toLowerCase()}`:(t.addIssue({code:"custom",message:"Docker image digest must use sha256 followed by 64 hexadecimal characters."}),s.z.NEVER)}),Tt=s.z.object({codexModelHash:ht.nullable().optional(),claudeModelHash:ht.nullable().optional(),opencodeModelHash:ht.nullable().optional()}).strict().default({}),Pt=s.z.object({imageId:ht,tag:s.z.string().trim().min(1).max(128).regex(St).optional()}).strict(),_t=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("image"),imageSelection:Pt}).strict(),s.z.object({type:s.z.literal("template"),environmentTemplateId:ht}).strict()]),Ot=s.z.enum(["creating","ready","failed","deleting"]),Lt=s.z.enum(["linux","darwin","win32","freebsd","openbsd","aix","sunos","unknown"]),Mt=s.z.enum(["x64","arm64","arm","ia32","ppc64","s390x","riscv64","unknown"]),Dt=s.z.object({code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2048),phase:s.z.enum(["validate","commit","inspect","security-check","persist","delete","recovery"]).optional()}).strict(),Ft=s.z.object({templateId:ht,nodeId:ht,imageId:Et,name:s.z.string().trim().min(1).max(160),platform:Lt,architecture:Mt}).strict(),Ut=s.z.enum(["data","agent-home","workspace"]),Vt=s.z.object({deleteVolumes:s.z.boolean()}).strict(),$t=s.z.object({role:Ut,name:s.z.string().trim().min(1).max(255),mountPath:s.z.string().trim().startsWith("/").max(4096),status:s.z.enum(["deleted","retained","missing","failed"]),error:s.z.object({code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2048)}).strict().optional()}).strict(),qt=s.z.object({instanceId:ht,containerDeleted:s.z.boolean(),completed:s.z.boolean(),deletedVolumes:s.z.array($t),retainedVolumes:s.z.array($t),volumeResults:s.z.array($t)}).strict(),Bt={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"};function Ht(e,t){if(e&&"object"==typeof e&&!Array.isArray(e)){const t=e;return{imageId:"string"==typeof t.imageId&&Bt[t.imageId]||t.imageId,..."string"==typeof t.tag?{tag:t.tag}:{}}}if("string"==typeof t)return{imageId:Bt[t]||t}}const Gt=s.z.object({id:ht,name:s.z.string().trim().min(1).max(120),kind:s.z.enum(["tty","gui","web"]),source:s.z.enum(["builtin","custom"]),availability:s.z.enum(["available","missing-dependency"]),capabilities:s.z.object({automation:s.z.enum(["cdp"]).optional(),supportsCwdSelection:s.z.boolean().default(!1)}).strict().default({supportsCwdSelection:!1}),diagnosticCode:s.z.enum(["APP_EXECUTABLE_NOT_FOUND"]).optional()}).strict(),Kt=s.z.object({code:s.z.enum(["APP_CATALOG_INVALID"]),message:s.z.string().trim().min(1).max(500)}).strict(),Wt=s.z.object({items:s.z.array(Gt).max(256),observedAt:xt,issues:s.z.array(Kt).max(32).default([])}).strict(),Yt=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),sourceInstanceId:ht,nodeId:ht,imageId:Et.optional(),internalTag:s.z.string().trim().min(1).max(512).optional(),platform:Lt.optional(),architecture:Mt.optional(),sizeBytes:s.z.number().int().nonnegative().optional(),status:Ot,error:Dt.optional(),createdAt:xt,updatedAt:xt}).strict().superRefine((e,t)=>{if("ready"===e.status)for(const n of["imageId","internalTag","platform","architecture","sizeBytes"])void 0===e[n]&&t.addIssue({code:"custom",path:[n],message:`Ready environment template requires ${n}.`});"failed"!==e.status||e.error||t.addIssue({code:"custom",path:["error"],message:"Failed environment template requires an error diagnostic."})}),Xt=s.z.enum(["apt","dnf","brew","npm"]),Jt=s.z.enum(["user","passwordless-sudo","root"]),Zt=s.z.object({platform:Lt,arch:Mt,installers:s.z.array(Xt).max(8),privilege:Jt,installerAccess:s.z.object({npmGlobalWritable:s.z.boolean().optional()}).strict().optional()}).strict(),Qt=s.z.enum(["installed","not-installed","broken","unsupported"]),en=s.z.enum(["recipe","bundled","external","none"]),tn=s.z.object({code:s.z.enum(["BUNDLED","EXTERNALLY_MANAGED","ALREADY_INSTALLED","NOT_INSTALLED","UNSUPPORTED_PLATFORM","INSTALLER_UNAVAILABLE","INSTALLER_NOT_WRITABLE","INSUFFICIENT_PRIVILEGE","OPERATION_IN_PROGRESS"]),message:s.z.string().trim().min(1).max(500)}).strict(),nn=s.z.object({id:ht,name:s.z.string().trim().min(1).max(120),kind:s.z.enum(["tty","gui","web"]),description:s.z.string().trim().max(500).optional(),state:Qt,managementSource:en,version:s.z.string().trim().max(120).optional(),canInstall:s.z.boolean(),canUninstall:s.z.boolean(),installReason:tn.optional(),uninstallReason:tn.optional(),activeJobId:ht.optional()}).strict(),on=s.z.enum(["install","uninstall"]),rn=s.z.enum(["queued","running","succeeded","failed","cancelled","interrupted"]),an=s.z.object({current:s.z.number().finite().nonnegative().optional(),total:s.z.number().finite().positive().optional(),unit:s.z.string().trim().min(1).max(40).optional()}).strict().refine(e=>void 0===e.total||void 0===e.current||e.current<=e.total,{message:"Progress current must not exceed total.",path:["current"]}),sn=s.z.object({executable:s.z.string().trim().min(1).max(4096),args:s.z.array(s.z.string().max(4096)).max(128)}).strict(),cn=s.z.object({code:s.z.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),message:s.z.string().trim().min(1).max(4096),retryable:s.z.boolean(),sessionIds:s.z.array(ht).max(64).optional()}).strict(),mn=s.z.object({id:ht,requestId:ht.optional(),appId:ht,operation:on,state:rn,phase:s.z.string().trim().min(1).max(120).optional(),progress:an.optional(),command:sn.optional(),logTail:s.z.string().max(32768).optional(),logTruncated:s.z.boolean().optional(),error:cn.optional(),requestedAt:xt,startedAt:xt.optional(),finishedAt:xt.optional(),updatedAt:xt}).strict(),dn=s.z.object({streamId:ht,sequence:s.z.number().int().nonnegative(),capabilities:Zt,apps:s.z.array(nn).max(256),activeJobs:s.z.array(mn).max(256),recentJobs:s.z.array(mn).max(256),observedAt:xt}).strict(),ln=s.z.object({requestId:ht.optional()}).strict(),un=s.z.object({job:mn}).strict(),pn=s.z.object({type:s.z.literal("app-management"),streamId:ht,sequence:s.z.number().int().nonnegative(),observedAt:xt,job:mn.optional(),snapshot:dn.optional()}).strict().refine(e=>void 0!==e.job||void 0!==e.snapshot,{message:"An app management event requires a job or snapshot."}),gn=s.z.object({component:s.z.enum(["control-plane","node-agent","controlled-instance"]),packageName:s.z.string().trim().max(160).optional(),packageVersion:s.z.string().trim().max(80).optional(),protocolVersion:at.optional(),buildId:s.z.string().trim().max(160).optional(),builtAt:s.z.string().trim().max(120).optional(),gitCommit:s.z.string().trim().max(120).optional(),imageRef:s.z.string().trim().max(512).optional(),imageDigest:s.z.string().trim().max(240).optional()}).strict(),zn=s.z.object({data:s.z.object({ok:s.z.literal(!0),role:s.z.literal("control-plane"),protocolVersion:at,build:gn.extend({component:s.z.literal("control-plane"),packageVersion:s.z.string().trim().min(1).max(80)}).loose(),serverTime:xt}).loose()}).loose(),fn=s.z.enum(["stable","beta","alpha"]),bn=s.z.object({packageName:s.z.literal("@task-handoff/controlled-instance"),version:s.z.string().trim().min(1).max(80),platform:s.z.string().trim().min(1).max(40),arch:s.z.string().trim().min(1).max(40),formatVersion:s.z.number().int().positive(),launcherAbi:s.z.number().int().positive(),entrypoint:s.z.string().trim().min(1).max(512),sha256:s.z.string().regex(/^[a-f0-9]{64}$/)}).strict(),yn=s.z.object({code:s.z.enum(["INSTANCE_RUNTIME_VERSION_MISMATCH","INSTANCE_RUNTIME_ARTIFACT_UNAVAILABLE","INSTANCE_RUNTIME_ARTIFACT_INVALID","INSTANCE_RUNTIME_INSTALL_FAILED","INSTANCE_RUNTIME_RESTART_FAILED","INSTANCE_RUNTIME_VERIFICATION_FAILED","INSTANCE_BASE_RUNTIME_INCOMPATIBLE","NODE_UPDATE_PREFLIGHT_FAILED","NODE_UPDATE_FAILED","LEGACY_INSTANCE_UPDATE_RETIRED"]),message:s.z.string().trim().min(1).max(4096),expectedVersion:s.z.string().trim().min(1).max(80).optional(),actualVersion:s.z.string().trim().min(1).max(80).optional(),retryable:s.z.boolean().default(!1)}).strict(),hn=s.z.object({desiredVersion:s.z.string().trim().min(1).max(80),actualVersion:s.z.string().trim().min(1).max(80).optional(),phase:s.z.enum(["pending","draining","installing","restarting","verifying","matched","failed"]),attempt:s.z.number().int().nonnegative().default(0),lastAttemptAt:xt.optional(),matchedAt:xt.optional(),error:yn.optional()}).strict(),xn=s.z.object({runningInstanceCount:s.z.number().int().nonnegative(),stoppedInstanceCount:s.z.number().int().nonnegative(),activeInstanceCount:s.z.number().int().nonnegative(),restartInstanceCount:s.z.number().int().nonnegative(),runningInstanceIds:s.z.array(ht).max(1024).default([]),stoppedInstanceIds:s.z.array(ht).max(1024).default([]),activeInstanceIds:s.z.array(ht).max(1024).default([])}).strict(),In=s.z.object({phase:s.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),desiredVersion:s.z.string().trim().min(1).max(80),nodeVersion:s.z.string().trim().min(1).max(80).optional(),expectedInstanceIds:s.z.array(ht).max(1024).default([]),expectedInstanceCount:s.z.number().int().nonnegative(),matchedInstanceCount:s.z.number().int().nonnegative(),pendingInstanceCount:s.z.number().int().nonnegative(),failedInstanceCount:s.z.number().int().nonnegative(),deferredInstanceCount:s.z.number().int().nonnegative().default(0)}).strict(),An=s.z.object({channel:fn.default("stable")}).strict(),vn=s.z.object({source:s.z.literal("npm"),channel:fn,currentVersion:s.z.string().trim().max(240).optional(),availableVersion:s.z.string().trim().min(1).max(240),artifactRef:s.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:s.z.array(bn).default([]),impact:xn,updateAvailable:s.z.boolean(),supported:s.z.boolean().default(!0),reason:s.z.string().trim().max(2048).optional(),checkedAt:xt,preflightToken:s.z.string().trim().min(16).max(240).optional()}).strict(),Sn=s.z.object({id:ht,nodeId:ht,source:s.z.literal("npm"),channel:fn,fromVersion:s.z.string().trim().max(240).optional(),toVersion:s.z.string().trim().min(1).max(240),artifactRef:s.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:s.z.array(bn).default([]),impact:xn,rollout:In,status:s.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),error:yn.optional(),startedAt:xt.optional(),completedAt:xt.optional(),createdAt:xt,updatedAt:xt}).strict(),kn=s.z.object({channel:fn,targetVersion:s.z.string().trim().min(1).max(240),preflightToken:s.z.string().trim().min(16).max(240)}).strict(),jn=s.z.object({type:s.z.enum(["branch","tag"]),name:s.z.string().trim().min(1).max(240)}).strict(),wn=s.z.object({type:s.z.literal("commit"),commit:s.z.string().trim().regex(/^[0-9a-fA-F]{4,64}$/,"commit must be a hexadecimal Git object id")}).strict(),Cn=s.z.discriminatedUnion("type",[jn,wn]),Rn=s.z.object({type:s.z.enum(["none","ssh-key","https-token"]).default("none"),secretId:s.z.string().trim().min(1).max(120).optional()}).strict(),Nn=s.z.object({depth:s.z.number().int().positive().max(1e5).optional(),submodules:s.z.boolean().default(!1),lfs:s.z.boolean().default(!1),subdirectory:s.z.string().trim().max(240).refine(e=>!e.startsWith("/")&&!e.split("/").some(e=>".."===e),"subdirectory must be a relative path within the repository").transform(e=>e.split("/").filter(e=>e&&"."!==e).join("/")).default("")}).strict(),En=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),url:s.z.string().trim().min(1).max(2048),provider:s.z.string().trim().max(80).optional(),ref:Cn.default({type:"branch",name:"main"}),auth:Rn.default({type:"none"}),clone:Nn.default({submodules:!1,lfs:!1,subdirectory:""}),defaultImageSelection:Pt.optional(),labels:It,createdAt:xt,updatedAt:xt}).strict(),Tn=s.z.object({id:ht,nodeId:ht,name:s.z.string().trim().min(1).max(160),path:s.z.string().trim().min(1).max(4096),defaultImageSelection:Pt.optional(),labels:It,createdAt:xt,updatedAt:xt}).strict(),Pn=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("git-repository"),repositoryId:ht.optional(),url:s.z.string().trim().min(1).max(2048),provider:s.z.string().trim().max(80).optional(),ref:Cn.default({type:"branch",name:"main"}),auth:Rn.default({type:"none"}),clone:Nn.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),s.z.object({type:s.z.literal("git-template"),url:s.z.string().trim().min(1).max(2048),templateId:s.z.string().trim().min(1).max(120).optional(),ref:Cn.default({type:"branch",name:"main"}),auth:Rn.default({type:"none"}),clone:Nn.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),s.z.object({type:s.z.literal("local-folder"),localFolderId:ht.optional(),path:s.z.string().trim().min(1).max(4096),ownerNodeId:ht.optional()}).strict()]);function _n(e){const t=Pn.parse(e);return"local-folder"===t.type?t:Pn.parse({...t,auth:{type:"none"}})}const On=_n,Ln=s.z.object({mode:s.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]),path:s.z.string().trim().min(1).max(4096).default("/workspace"),volumeName:s.z.string().trim().max(240).optional(),readOnly:s.z.boolean().default(!1)}).strict(),Mn=s.z.enum(["codex","claude","opencode"]),Dn=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),source:Pn,defaultImageSelection:Pt.optional(),defaultNodeId:ht.optional(),workspacePolicy:Ln,labels:It,createdAt:xt,updatedAt:xt}).strict(),Fn=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),endpoint:s.z.string().trim().min(1).max(2048),key:s.z.string().trim().min(1).max(4096),model:s.z.string().trim().min(1).max(240),app:Mn,enabled:s.z.boolean().default(!0),order:s.z.number().int().min(0).max(1e6).default(0),labels:It,createdAt:xt,updatedAt:xt}).strict(),Un=Fn,Vn=Fn.omit({key:!0}).extend({keyPreview:s.z.string().trim().min(1).max(160),keySet:s.z.boolean()}).strict(),$n=Vn.extend({referenceCount:s.z.number().int().min(0)}).strict(),qn=s.z.object({instanceId:ht,codexModelHash:ht.optional(),claudeModelHash:ht.optional(),opencodeModelHash:ht.optional(),updatedAt:xt}).strict(),Bn=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("control-plane"),name:Fn.shape.name,enabled:Fn.shape.enabled,order:Fn.shape.order}).strict(),s.z.object({type:s.z.literal("node"),nodeId:ht,name:Fn.shape.name,enabled:Fn.shape.enabled,order:Fn.shape.order,referenceCount:s.z.number().int().min(0)}).strict()]),Hn=s.z.object({id:ht,model:Vn,locations:s.z.array(Bn).min(1),referenceCount:s.z.number().int().min(0).default(0)}).strict(),Gn=s.z.object({nodeId:ht,code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2e3)}).strict(),Kn=s.z.object({models:s.z.array(Hn),nodeDiagnostics:s.z.array(Gn).default([]),updatedAt:xt}).strict(),Wn=Fn.omit({id:!0,createdAt:!0,updatedAt:!0}).strict(),Yn=Wn.partial().strict(),Xn=Fn,Jn=s.z.object({modelSelection:Tt,codexModelHash:ht.optional(),claudeModelHash:ht.optional(),opencodeModelHash:ht.optional()}).strict(),Zn=s.z.enum(["market","custom"]),Qn=s.z.enum(["active","deprecated","yanked"]),ei=s.z.discriminatedUnion("kind",[s.z.object({kind:s.z.literal("builtin"),key:s.z.string().trim().min(1).max(120)}).strict(),s.z.object({kind:s.z.literal("remote"),url:s.z.string().trim().url().max(2048),mediaType:s.z.enum(["image/png","image/jpeg","image/webp"]).optional(),digest:Et.optional()}).strict()]),ti=s.z.array(s.z.string().trim().min(1).max(80)).default([]),ni=s.z.array(s.z.string().trim().min(1).max(120)).default([]),ii=s.z.record(s.z.string().trim().min(2).max(35),s.z.string().trim().min(1).max(4096)),oi=s.z.object({os:s.z.string().trim().min(1).max(40),architecture:s.z.string().trim().min(1).max(40),digest:Et.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional()}).strict(),ri=s.z.object({name:s.z.string().trim().min(1).max(128).regex(St),version:s.z.string().trim().min(1).max(160).optional(),reference:Nt,manifestDigest:Et.optional(),publishedAt:xt.optional(),platforms:s.z.array(oi).default([]),status:Qn.default("active")}).strict(),ai=s.z.object({id:ht,publisher:s.z.string().trim().min(1).max(160),slug:s.z.string().trim().min(1).max(160),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().min(1).max(4096),localizedDescriptions:ii.optional(),cover:ei.optional(),repository:s.z.string().trim().min(1).max(512),defaultTag:s.z.string().trim().min(1).max(128).regex(St),tags:s.z.array(ri).min(1),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,status:Qn.default("active")}).strict().superRefine((e,t)=>{e.tags.some(t=>t.name===e.defaultTag)||t.addIssue({code:"custom",path:["defaultTag"],message:"Market defaultTag must identify one of the image tags."})}),si=s.z.object({protocolVersion:at,catalogId:ht,revision:s.z.string().trim().min(1).max(240),source:s.z.enum(["embedded","remote","cache"]),generatedAt:xt,expiresAt:xt.optional(),items:s.z.array(ai)}).strict(),ci=s.z.object({source:s.z.enum(["embedded","remote","cache"]),state:s.z.enum(["ready","refreshing","stale","failed"]),revision:s.z.string().trim().min(1).max(240),updatedAt:xt,error:s.z.string().trim().max(4096).optional()}).strict(),mi=s.z.object({id:ht,origin:s.z.literal("custom"),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:ii.optional(),cover:ei.optional(),reference:Nt,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(St).optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,createdAt:xt,updatedAt:xt}).strict(),di=mi,li=s.z.object({name:s.z.string().trim().min(1).max(128).regex(St),version:s.z.string().trim().min(1).max(160).optional(),reference:Nt,manifestDigest:Et.optional(),status:Qn}).strict(),ui=s.z.object({id:ht,origin:Zn,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:ii.optional(),cover:ei,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(St).optional(),availableTags:s.z.array(li),reference:Nt,digest:Et.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional(),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,readOnly:s.z.boolean(),lifecycleStatus:Qn.optional(),market:s.z.object({catalogId:ht,catalogRevision:s.z.string().trim().min(1).max(240),publisher:s.z.string().trim().min(1).max(160),version:s.z.string().trim().min(1).max(160).optional()}).strict().optional()}).strict(),pi=s.z.object({id:ht,origin:Zn,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:ii.optional(),cover:ei.optional(),repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(St).optional(),requestedReference:Nt,resolvedDigest:Et.optional(),resolvedReference:Nt.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:ti,optionalApps:ni,defaultEnv:At,labels:It,market:s.z.object({catalogId:ht,catalogRevision:s.z.string().trim().min(1).max(240),publisher:s.z.string().trim().min(1).max(160),version:s.z.string().trim().min(1).max(160).optional()}).strict().optional(),createdAt:xt,updatedAt:xt}).strict(),gi=s.z.object({phase:s.z.enum(["checking-image","pulling-image","resolving-image","ready","failed"]),requestedReference:Nt,generation:s.z.number().int().nonnegative().default(0),error:s.z.string().trim().max(4096).optional(),startedAt:xt,updatedAt:xt}).strict(),zi=s.z.object({instanceId:ht,generation:s.z.number().int().nonnegative(),requestedReference:Nt,sequence:s.z.number().int().nonnegative(),observedAt:xt}).strict(),fi=zi.extend({data:s.z.string().min(1).max(65536),replay:s.z.boolean().optional()}).strict(),bi=zi.extend({outcome:s.z.enum(["succeeded","failed"])}).strict(),yi=zi.extend({status:s.z.enum(["connecting","pulling","extracting","complete","failed"]),layers:s.z.object({total:s.z.number().int().nonnegative(),completed:s.z.number().int().nonnegative(),downloaded:s.z.number().int().nonnegative(),downloading:s.z.number().int().nonnegative(),extracting:s.z.number().int().nonnegative()}).strict(),bytes:s.z.object({current:s.z.number().finite().nonnegative(),total:s.z.number().finite().positive()}).strict().optional(),percent:s.z.number().finite().min(0).max(100).optional(),message:s.z.string().trim().min(1).max(500),terminalTail:s.z.string().max(262144).optional(),terminalTruncated:s.z.boolean().optional()}).strict();function hi(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","origin","name","description","localizedDescriptions","cover","reference","repository","tag","image","registry","pullPolicy","capabilities","optionalApps","defaultEnv","labels","createdAt","updatedAt"]);for(const e of Object.keys(n))i.has(e)||t?.({imageId:"string"==typeof n.id?n.id:void 0,field:e});const o="string"==typeof n.id?n.id:void 0,r="string"==typeof n.image?n.image:void 0;void 0!==r&&t?.({imageId:o,field:"image"}),Object.prototype.hasOwnProperty.call(n,"registry")&&t?.({imageId:o,field:"registry"});let a,s="string"==typeof n.reference?n.reference:r;if(s)try{s=Ct(s)}catch{if(!s.includes("@")&&s.lastIndexOf(":")<=s.lastIndexOf("/"))try{s=Ct(`${s}:latest`),t?.({imageId:o,field:"reference:implicit-latest"})}catch{}}try{a=s?Rt(s):void 0}catch{}return{id:n.id,origin:"custom",name:n.name,description:n.description,localizedDescriptions:n.localizedDescriptions,cover:so(n.cover,["kind","key","url","mediaType","digest"]),reference:a?.reference??s,repository:a?.repository??n.repository,tag:a?.tag??n.tag,pullPolicy:n.pullPolicy??"if-not-present",capabilities:n.capabilities,optionalApps:n.optionalApps,defaultEnv:n.defaultEnv,labels:n.labels,createdAt:n.createdAt,updatedAt:n.updatedAt}}const xi=s.z.discriminatedUnion("kind",[s.z.object({kind:s.z.literal("direct")}).strict(),s.z.object({kind:s.z.literal("control-plane-proxy"),proxyId:ht,proxyBindingId:ht,targetNodeId:ht}).strict()]),Ii=s.z.object({pingRttMs:s.z.number().nonnegative().optional(),pingRttP95Ms:s.z.number().nonnegative().optional(),consecutiveReconnects:s.z.number().int().nonnegative(),nextRetryAt:xt.optional()}).strict(),Ai=s.z.object({nodeId:ht,inviteId:ht.optional()}).strict(),vi=s.z.discriminatedUnion("status",[s.z.object({id:ht,status:s.z.literal("pending")}).strict(),s.z.object({id:ht,status:s.z.literal("completed"),nodeId:ht}).strict()]),Si=s.z.object({reachability:s.z.enum(["unknown","reachable","unreachable"]),bindingStatus:s.z.enum(["unknown","active","revoked"]),bindingRevision:s.z.number().int().positive().optional(),streamId:s.z.string().trim().min(1).max(160).optional(),revision:s.z.number().int().nonnegative().optional(),observedAt:xt.optional(),target:Xe.optional(),lastError:He.optional(),updatedAt:xt}).strict(),ki=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),connectionMode:s.z.enum(["local-ipc","local-loopback","direct-http","reverse-wss","control-plane-proxy"]).default("direct-http"),connectionPath:xi.default({kind:"direct"}),connectionEnabled:s.z.boolean().default(!0),auth:s.z.object({mode:s.z.enum(["local-static-key","paired-hmac","proxy-binding"]).default("local-static-key"),keyId:ht.optional(),secret:s.z.string().trim().max(4096).optional(),pairedAt:xt.optional(),pairing:s.z.object({status:s.z.enum(["pending","paired","expired"]).default("pending"),joinToken:s.z.string().trim().max(4096).optional(),expiresAt:xt.optional()}).strict().optional()}).strict().default({mode:"local-static-key"}),endpoint:s.z.string().trim().max(2048).optional(),controlEndpoint:s.z.string().trim().max(2048).optional(),containerEndpoint:s.z.string().trim().max(2048).optional(),publicWebBase:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","online","offline","degraded"]).default("unknown"),health:s.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({}),proxyState:Si.optional(),appInventory:Wt.optional(),labels:It,lastSeenAt:xt.optional(),createdAt:xt,updatedAt:xt}).strict().superRefine((e,t)=>{"control-plane-proxy"===e.connectionPath.kind&&"control-plane-proxy"!==e.connectionMode&&t.addIssue({code:"custom",path:["connectionPath"],message:"Control-plane proxy paths require control-plane-proxy connection mode."}),"control-plane-proxy"===e.connectionMode&&"control-plane-proxy"!==e.connectionPath.kind&&t.addIssue({code:"custom",path:["connectionPath"],message:"Control-plane proxy nodes require a control-plane-proxy connection path."})}),ji=s.z.object({nodeId:ht,status:s.z.enum(["unknown","online","offline","degraded"]),health:s.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:xt.nullable(),connectionPhase:s.z.enum(["connecting","handshaking","healthy","reconnecting","suspect","offline"]).nullable(),connectionDiagnostics:Ii.nullable(),proxyState:Si.nullable()}).strict(),wi=s.z.object({id:ht,nodeId:ht,name:s.z.string().trim().min(1).max(160),type:s.z.enum(["docker","kubernetes","local"]),status:s.z.enum(["unknown","online","offline","degraded"]).default("unknown"),accessStrategy:s.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({}),labels:It,createdAt:xt,updatedAt:xt}).strict(),Ci=s.z.object({instanceId:ht,runtimeKind:s.z.literal("docker"),state:s.z.enum(["pending","available","stopped","unavailable"]),sampledAt:xt,cpu:s.z.object({usagePercent:s.z.number().nonnegative()}).strict().optional(),memory:s.z.object({usageBytes:s.z.number().nonnegative(),limitBytes:s.z.number().nonnegative().optional(),usagePercent:s.z.number().nonnegative().optional()}).strict().optional(),network:s.z.object({rxBytes:s.z.number().nonnegative(),txBytes:s.z.number().nonnegative()}).strict().optional(),blockIo:s.z.object({readBytes:s.z.number().nonnegative(),writeBytes:s.z.number().nonnegative()}).strict().optional(),pids:s.z.number().int().nonnegative().optional(),error:s.z.string().trim().max(2048).optional()}).strict(),Ri=s.z.object({registry:s.z.boolean().default(!1),runtimeBroker:s.z.boolean().default(!1),workspaceProvisioning:s.z.object({docker:s.z.boolean().default(!1),kubernetes:s.z.boolean().default(!1),local:s.z.boolean().default(!1)}).strip().default({docker:!1,kubernetes:!1,local:!1})}).strip(),Ni=s.z.object({modelEndpointProbe:s.z.boolean().optional(),aiSessionHistoryLimit:s.z.boolean().optional(),aiSessionAttachmentRetention:s.z.boolean().optional(),aiSessionFileAttachmentLimit:s.z.boolean().optional(),folderPlaces:s.z.boolean().optional(),localFolderNameUpdate:s.z.boolean().optional(),managedGitCredentials:Ri.optional()}).strip();function Ei(e){const t=Ni.safeParse(e),n=t.success?t.data:{};return{...n,managedGitCredentials:Ri.parse(n.managedGitCredentials||{})}}const Ti=s.z.object({status:s.z.enum(["healthy","congested","recovering"]),activeOutputs:s.z.number().int().nonnegative(),bufferedBytes:s.z.number().int().nonnegative(),peakBufferedBytes:s.z.number().int().nonnegative(),coalescedEvents:s.z.number().int().nonnegative(),oversizedEvents:s.z.number().int().nonnegative().optional(),peakEventBytes:s.z.number().int().nonnegative().optional(),congestedSince:xt.optional(),lastCongestedAt:xt.optional()}).strip(),Pi=s.z.object({ok:s.z.boolean().optional(),role:s.z.string().optional(),nodeId:ht.optional(),platform:Lt.optional(),arch:Mt.optional(),protocolVersion:at.optional(),capabilities:Ni.optional(),build:gn.strip().optional(),process:s.z.object({pid:s.z.number().int().positive(),startIdentity:s.z.string().trim().min(1).optional()}).strip().optional(),listener:s.z.object({host:s.z.string().trim().min(1),port:s.z.number().int().min(1).max(65535)}).strip().optional(),instanceProxy:s.z.object({requests:s.z.number().int().nonnegative(),active:s.z.number().int().nonnegative(),completed:s.z.number().int().nonnegative(),aborted:s.z.number().int().nonnegative(),limitRejected:s.z.number().int().nonnegative(),responseBytes:s.z.number().nonnegative(),totalDurationMs:s.z.number().nonnegative(),maxResponseBytes:s.z.number().int().nonnegative()}).partial().strip().optional(),eventTransport:Ti.optional(),serverTime:xt.optional()}).strip(),_i=s.z.object({bindScope:s.z.enum(["loopback","all-ipv4"]),port:s.z.number().int().min(1).max(65535)}).strict(),Oi=_i.extend({host:s.z.enum(["127.0.0.1","0.0.0.0"]),status:s.z.enum(["listening","error"]),source:s.z.enum(["bootstrap","persisted"]),error:s.z.string().trim().max(2048).optional()}).strict(),Li=_i,Mi=s.z.object({nodeId:ht,joinToken:s.z.string().trim().min(1),expiresAt:xt}).passthrough(),Di=s.z.object({nodeId:ht,keyId:ht,secret:s.z.string().regex(/^[A-Za-z0-9_-]{32,128}$/),pairedAt:xt}).strict(),Fi=s.z.object({id:ht,keyId:ht,name:s.z.string().trim().min(1).max(160).optional(),pairedAt:xt,updatedAt:xt,current:s.z.boolean()}).passthrough(),Ui=s.z.object({keyId:ht,revoked:s.z.literal(!0),revokedAt:xt}).strict(),Vi=s.z.object({id:ht,pairingKeyId:ht,url:s.z.string().trim().min(1).max(2048),name:s.z.string().trim().min(1).max(160).optional(),enabled:s.z.boolean(),createdAt:xt,updatedAt:xt,status:s.z.enum(["disabled","connecting","connected","reconnecting","failed"]),pingRttMs:s.z.number().nonnegative().optional(),pingRttP95Ms:s.z.number().nonnegative().optional(),consecutiveReconnects:s.z.number().int().nonnegative().optional(),nextRetryAt:xt.optional(),lastConnectedAt:xt.optional(),lastDisconnectedAt:xt.optional(),error:s.z.string().optional()}).passthrough(),$i=s.z.object({pairing:Fi,connection:s.z.object({id:ht,pairingKeyId:ht,url:s.z.string().trim().min(1).max(2048),name:s.z.string().trim().min(1).max(160).optional(),enabled:s.z.boolean(),createdAt:xt,updatedAt:xt}).passthrough(),tunnel:s.z.object({status:s.z.enum(["disabled","saved","connecting","connected","failed"]),error:s.z.string().trim().max(2048).optional()}).passthrough()}).passthrough(),qi=s.z.object({deleted:s.z.boolean().optional()}).passthrough(),Bi=s.z.object({repository:s.z.string().trim().optional(),tag:s.z.string().trim().optional(),id:s.z.string().trim(),createdSince:s.z.string().trim().optional(),size:s.z.string().trim().optional(),sizeBytes:s.z.number().int().nonnegative().optional(),reference:s.z.string().trim().min(1),repoDigests:s.z.array(s.z.string().trim().min(1).max(512)).default([])}).passthrough(),Hi=s.z.object({image:ui,status:s.z.enum(["available","pull-required","unknown"]),localImage:Bi.optional(),localSizeBytes:s.z.number().int().nonnegative().optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional(),error:s.z.string().trim().max(2048).optional()}).strict(),Gi=s.z.lazy(()=>s.z.object({name:s.z.string().trim().min(1),path:s.z.string().trim().min(1).max(4096),children:s.z.array(Gi)}).passthrough()),Ki=s.z.object({kind:s.z.enum(["home","root"]),name:s.z.string().trim().min(1),path:s.z.string().trim().min(1).max(4096)}).passthrough(),Wi=s.z.object({status:s.z.number().int().min(100).max(599).optional(),headers:s.z.record(s.z.string(),s.z.string()).optional(),bodyBase64:s.z.string().optional()}).passthrough(),Yi=s.z.object({strategy:s.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),web:s.z.string().trim().max(2048).optional(),api:s.z.string().trim().max(2048).optional(),vnc:s.z.string().trim().max(2048).optional(),tty:s.z.string().trim().max(2048).optional(),logs:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict(),Xi=s.z.object({...Yi.shape}).strict(),Ji=s.z.object({strategy:s.z.enum(["control-plane-proxy","direct-port","node-proxy","kubernetes-ingress","kubernetes-port-forward"]).default("control-plane-proxy"),web:s.z.string().trim().max(2048).optional(),api:s.z.string().trim().max(2048).optional(),ws:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict().default({strategy:"control-plane-proxy",status:"unknown"}),Zi=s.z.object({mode:s.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]).optional(),status:s.z.enum(["unknown","pending","ready","failed"]).default("unknown"),path:s.z.string().trim().max(4096).optional(),resolvedCommit:s.z.string().trim().max(120).optional(),error:s.z.string().trim().max(2048).optional()}).passthrough(),Qi=s.z.object({id:ht,name:s.z.string().trim().min(1).max(160),projectId:ht.optional(),source:Pn,sourceSnapshot:s.z.record(s.z.string(),s.z.unknown()).default({}),modelSelection:Tt,nodeId:ht,runtimeId:ht,imageSelection:Pt.optional(),environmentSource:_t.optional(),environmentTemplateOrigin:Ft.optional(),imageSnapshot:pi.optional(),imageProvisioning:gi.optional(),stateRevision:s.z.number().int().min(0).default(0),processIncarnationId:s.z.string().trim().min(1).max(120).optional(),status:s.z.enum(["created","provisioning","starting","registering","registered","running","stopping","stopped","deleting","failed","unhealthy"]).default("created"),health:s.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),connectionStatus:s.z.enum(["unknown","online","offline","endpoint-unreachable"]).default("unknown"),agentStatus:s.z.enum(["unknown","online","offline"]).default("unknown"),targetStatus:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),uiAccessStatus:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),controlMode:s.z.enum(["standalone","controlled"]).default("controlled"),protocolVersion:at.optional(),instanceVersion:s.z.string().trim().max(80).optional(),build:gn.optional(),runtimeVersion:hn.optional(),ready:s.z.boolean().default(!1),capabilities:ut.default(ct),appInventory:Wt.optional(),config:s.z.object({autoImportAgentConfigs:s.z.boolean().default(!0),defaultCodexPermissionMode:H.default("ask"),aiSessionHistoryLimit:s.z.number().int().min(1).max(500).default(50),aiSessionAttachmentRetentionDays:s.z.number().int().min(0).max(365).default(30),aiSessionMaxFileAttachmentBytes:s.z.number().int().positive().max(z).default(g)}).strict().default({autoImportAgentConfigs:!0,defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:g}),workspace:Zi.default({status:"unknown"}),target:Yi.default({strategy:"direct-port",status:"unknown"}),access:Ji,apps:s.z.object({runningCount:s.z.number().int().min(0).default(0),problemCount:s.z.number().int().min(0).default(0),updatedAt:xt.optional(),revision:s.z.number().int().min(0).optional()}).strict().default({runningCount:0,problemCount:0}),aiSessions:ye.default(()=>({runningCount:0,waitingCount:0,staleCount:0,sessions:[],updatedAt:(new Date).toISOString()})),triggers:s.z.object({enabledCount:s.z.number().int().min(0).default(0),runningCount:s.z.number().int().min(0).default(0),errorCount:s.z.number().int().min(0).default(0),configs:s.z.array(s.z.object({configHash:s.z.string().trim().min(1),config:Ee,deployments:s.z.array(Pe).default([]),runtime:s.z.array(_e).default([])}).strict()).default([]),recentRuns:s.z.array(Oe).default([])}).strict().optional(),runtime:s.z.object({kind:s.z.string().trim().max(80).optional(),containerName:s.z.string().trim().max(240).optional(),containerId:s.z.string().trim().max(240).optional(),workspacePath:s.z.string().trim().max(4096).optional(),pid:s.z.number().int().positive().optional(),port:s.z.number().int().positive().max(65535).optional(),labels:s.z.record(s.z.string(),s.z.string()).default({})}).strict().default({labels:{}}),registrationToken:s.z.string().trim().min(1).max(240).optional(),lastHeartbeatAt:xt.optional(),createdAt:xt,updatedAt:xt}).strict(),eo=s.z.union([Qi.transform(e=>({instance:e,gitWorkspaceProvisioningOperationId:void 0})),s.z.object({instance:Qi,gitWorkspaceProvisioningOperationId:ht.optional()}).strict()]),to=s.z.preprocess(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e;return t.instance&&"object"==typeof t.instance&&!Array.isArray(t.instance)?{instance:io(t.instance),..."string"==typeof t.gitWorkspaceProvisioningOperationId?{gitWorkspaceProvisioningOperationId:t.gitWorkspaceProvisioningOperationId}:{}}:io(t)},eo),no=s.z.object({instanceId:Qi.shape.id,revision:s.z.number().int().min(0),updatedAt:xt,status:Qi.shape.status.unwrap(),health:Qi.shape.health.unwrap(),connectionStatus:Qi.shape.connectionStatus.unwrap(),accessStatus:s.z.enum(["reachable","endpoint-unreachable"]),imageProvisioning:gi.optional(),workspace:Zi,runtime:Qi.shape.runtime.unwrap(),runtimeVersion:hn.optional(),ready:s.z.boolean(),lastHeartbeatAt:xt.optional()}).strict();function io(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(Object.keys(Qi.shape)),o={};for(const[e,r]of Object.entries(n))i.has(e)?o[e]=r:t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:e});if(n.capabilities&&"object"==typeof n.capabilities&&!Array.isArray(n.capabilities)){const e={...n.capabilities};Object.prototype.hasOwnProperty.call(e,"apps")&&(t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:"capabilities.apps"}),delete e.apps),o.capabilities=pt(e)}else o.capabilities=pt(void 0);o.appInventory=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e;Object.keys(i).some(e=>!["observedAt","items","issues"].includes(e))&&t?.({instanceId:n,field:"appInventory"});const o={observedAt:i.observedAt,items:Array.isArray(i.items)?i.items.map(e=>{e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).some(e=>!["id","name","kind","source","availability","capabilities","diagnosticCode"].includes(e))&&t?.({instanceId:n,field:"appInventory.items"});const i=so(e,["id","name","kind","source","availability","diagnosticCode"]);return!i||"object"!=typeof i||Array.isArray(i)?i:{...i,capabilities:so(e.capabilities,["automation","supportsCwdSelection"])}}):i.items,issues:Array.isArray(i.issues)?i.issues.map(e=>so(e,["code","message"])):i.issues},r=Wt.safeParse(o);return r.success?r.data:void 0}(n.appInventory,t,"string"==typeof n.id?n.id:void 0),o.source=ao(n.source,t,"string"==typeof n.id?n.id:void 0),o.sourceSnapshot=n.sourceSnapshot&&"object"==typeof n.sourceSnapshot&&!Array.isArray(n.sourceSnapshot)?n.sourceSnapshot:{},o.build=oo(gn,n.build,"build",t,"string"==typeof n.id?n.id:void 0),o.aiSessions=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e,o=Array.isArray(i.sessions)?i.sessions.flatMap((e,i)=>{const o=oo(be,e,`aiSessions.sessions.${i}`,t,n);return o?[o]:[]}):[],r={runningCount:"number"==typeof i.runningCount&&Number.isInteger(i.runningCount)&&i.runningCount>=0?i.runningCount:0,waitingCount:"number"==typeof i.waitingCount&&Number.isInteger(i.waitingCount)&&i.waitingCount>=0?i.waitingCount:0,staleCount:"number"==typeof i.staleCount&&Number.isInteger(i.staleCount)&&i.staleCount>=0?i.staleCount:0,sessions:o,updatedAt:xt.safeParse(i.updatedAt).success?i.updatedAt:(new Date).toISOString()};return Object.keys(i).some(e=>!["runningCount","waitingCount","staleCount","sessions","updatedAt"].includes(e))&&t?.({instanceId:n,field:"aiSessions"}),ye.parse(r)}(n.aiSessions,t,"string"==typeof n.id?n.id:void 0),o.triggers=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e;Object.keys(i).some(e=>!["enabledCount","runningCount","errorCount","configs","recentRuns"].includes(e))&&t?.({instanceId:n,field:"triggers"});const o=(e,i,o)=>Array.isArray(e)?e.flatMap((e,r)=>{const a=oo(i,e,`${o}.${r}`,t,n);return a?[a]:[]}):[],r=Array.isArray(i.configs)?i.configs.flatMap((e,i)=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];const r=e;Object.keys(r).some(e=>!["configHash","config","deployments","runtime"].includes(e))&&t?.({instanceId:n,field:`triggers.configs.${i}`});const a=function(e,t,n,i){if(!e||"object"!=typeof e||Array.isArray(e))return;const o=e,r=so(o,["configHash","name","description","createdAt","updatedAt"]);if(o.source&&"object"==typeof o.source&&!Array.isArray(o.source)){const e=o.source,t="schedule"===e.type?"interval"===e.scheduleKind?["type","scheduleKind","intervalMs"]:"daily"===e.scheduleKind?["type","scheduleKind","timeOfDay","timezone"]:["type","scheduleKind","weekdays","timeOfDay","timezone"]:"file-change"===e.type?["type","roots","globs","ignore","debounceMs"]:["type","agent","statuses","phases"];r.source=so(e,t)}return r.action=so(o.action,["promptTemplate"]),r.policy=so(o.policy,["cooldownMs","maxConcurrentRuns","whenBusy"]),oo(Ee,r,t,n,i)}(r.config,`triggers.configs.${i}.config`,t,n);return"string"==typeof r.configHash&&a?[{configHash:r.configHash,config:a,deployments:o(r.deployments,Pe,`triggers.configs.${i}.deployments`),runtime:o(r.runtime,_e,`triggers.configs.${i}.runtime`)}]:[]}):[];return{enabledCount:"number"==typeof i.enabledCount&&Number.isInteger(i.enabledCount)&&i.enabledCount>=0?i.enabledCount:0,runningCount:"number"==typeof i.runningCount&&Number.isInteger(i.runningCount)&&i.runningCount>=0?i.runningCount:0,errorCount:"number"==typeof i.errorCount&&Number.isInteger(i.errorCount)&&i.errorCount>=0?i.errorCount:0,configs:r,recentRuns:o(i.recentRuns,Oe,"triggers.recentRuns")}}(n.triggers,t,"string"==typeof n.id?n.id:void 0),o.apps=oo(Qi.shape.apps.unwrap(),so(n.apps,["runningCount","problemCount","updatedAt","revision"]),"apps",t,"string"==typeof n.id?n.id:void 0)||{runningCount:0,problemCount:0},o.config=oo(Qi.shape.config.unwrap(),so(n.config,["autoImportAgentConfigs","defaultCodexPermissionMode","aiSessionHistoryLimit","aiSessionAttachmentRetentionDays","aiSessionMaxFileAttachmentBytes"]),"config",t,"string"==typeof n.id?n.id:void 0)||{autoImportAgentConfigs:!0,defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:g},o.modelSelection=oo(Tt.unwrap(),so(n.modelSelection,["codexModelHash","claudeModelHash","opencodeModelHash"]),"modelSelection",t,"string"==typeof n.id?n.id:void 0)||{},o.imageSnapshot=function(e,t,n,i){if(!e||"object"!=typeof e||Array.isArray(e))return e;const o=e,r=hi(o),{reference:a,...s}=r,c=o.requestedReference??a;let m;try{m="string"==typeof c?Rt(c):void 0}catch{}const d={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"},l="string"==typeof o.id?o.id:"string"==typeof t?t:void 0,u="market"===o.origin||l&&d[l]?"market":"custom";return void 0===o.image&&void 0===o.reference||n?.({instanceId:i,field:"imageSnapshot.reference"}),{...s,id:l&&d[l]?d[l]:l,origin:u,repository:m?.repository??o.repository,tag:m?.tag??o.tag,requestedReference:m?.reference??c,resolvedDigest:o.resolvedDigest,resolvedReference:o.resolvedReference,downloadSizeBytes:o.downloadSizeBytes,market:"market"===u?so(o.market,["catalogId","catalogRevision","publisher","version"])??{catalogId:"task_handoff_embedded",catalogRevision:"legacy",publisher:"task-handoff"}:void 0}}(n.imageSnapshot,n.imageId,t,"string"==typeof n.id?n.id:void 0);const r="string"==typeof n.imageId?{img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"}[n.imageId]||n.imageId:void 0,a=so(n.imageSelection,["imageId","tag"]);o.imageSelection=a||(r?{imageId:r,tag:o.imageSnapshot?.tag}:void 0),o.imageProvisioning=oo(gi,so(n.imageProvisioning,["phase","requestedReference","generation","error","startedAt","updatedAt"]),"imageProvisioning",t,"string"==typeof n.id?n.id:void 0),o.runtimeVersion=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e,o=e=>{if("string"!=typeof e)return;const t=e.trim();return t&&t.length<=80?t:void 0},r=o(i.desiredVersion);if(!r)return void t?.({instanceId:n,field:"runtimeVersion.desiredVersion"});const a=new Set(hn.shape.phase.options),s="string"==typeof i.phase?i.phase:"pending",c=a.has(s)?s:{idle:"pending",queued:"pending",checking:"pending",downloading:"installing",updating:"installing",completed:"matched",succeeded:"matched",ready:"matched",error:"failed"}[s]||"pending";let m;if(c!==s&&t?.({instanceId:n,field:"runtimeVersion.phase"}),i.error&&"object"==typeof i.error&&!Array.isArray(i.error)){const e=i.error,r="string"==typeof e.message?e.message.trim().slice(0,4096):"";if(r){const i=new Set(yn.shape.code.options),a="string"==typeof e.code&&i.has(e.code)?e.code:"INSTANCE_RUNTIME_INSTALL_FAILED";a!==e.code&&t?.({instanceId:n,field:"runtimeVersion.error.code"});const s=o(e.expectedVersion),c=o(e.actualVersion);m={code:a,message:r,...s?{expectedVersion:s}:{},...c?{actualVersion:c}:{},retryable:!0===e.retryable}}else t?.({instanceId:n,field:"runtimeVersion.error"})}"string"==typeof i.error&&i.error.trim()&&(m={code:"INSTANCE_RUNTIME_INSTALL_FAILED",message:i.error.trim().slice(0,4096),expectedVersion:r,...o(i.actualVersion)?{actualVersion:o(i.actualVersion)}:{},retryable:!1});const d=o(i.actualVersion),l=xt.safeParse(i.lastAttemptAt),u=xt.safeParse(i.matchedAt);return void 0===i.lastAttemptAt||l.success||t?.({instanceId:n,field:"runtimeVersion.lastAttemptAt"}),void 0===i.matchedAt||u.success||t?.({instanceId:n,field:"runtimeVersion.matchedAt"}),{desiredVersion:r,...d?{actualVersion:d}:{},phase:c,attempt:"number"==typeof i.attempt&&Number.isInteger(i.attempt)&&i.attempt>=0?i.attempt:0,...l.success?{lastAttemptAt:l.data}:{},...u.success?{matchedAt:u.data}:{},...m?{error:m}:{}}}(n.runtimeVersion,t,"string"==typeof n.id?n.id:void 0),o.workspace=oo(Zi,n.workspace,"workspace",t,"string"==typeof n.id?n.id:void 0)||{status:"unknown"},o.environmentSource=oo(_t,n.environmentSource,"environmentSource",t,"string"==typeof n.id?n.id:void 0),o.environmentTemplateOrigin=oo(Ft,n.environmentTemplateOrigin,"environmentTemplateOrigin",t,"string"==typeof n.id?n.id:void 0),o.runtime=oo(Qi.shape.runtime.unwrap(),n.runtime,"runtime",t,"string"==typeof n.id?n.id:void 0)||{labels:{}},o.target=oo(Yi,so(n.target??n.endpoints,["strategy","web","api","vnc","tty","logs","status"]),"target",t,"string"==typeof n.id?n.id:void 0)||{strategy:"direct-port",status:"unknown"},o.access=oo(Ji,so(n.access,["strategy","web","api","ws","status"]),"access",t,"string"==typeof n.id?n.id:void 0)||{strategy:"control-plane-proxy",status:"unknown"};for(const[e,i]of Object.entries(Qi.shape))Object.prototype.hasOwnProperty.call(o,e)&&!i.safeParse(o[e]).success&&i.safeParse(void 0).success&&(delete o[e],t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:e}));return o}function oo(e,t,n,i,o){if(!t||"object"!=typeof t||Array.isArray(t))return;let r=structuredClone(t),a=!1;for(let t=0;t<20;t+=1){const t=e.safeParse(r);if(t.success)return a&&i?.({instanceId:o,field:n}),t.data;let s=!1;for(const e of t.error.issues){if("unrecognized_keys"!==e.code)continue;const t=ro(r,e.path);if(t&&"object"==typeof t&&!Array.isArray(t))for(const n of e.keys)Object.prototype.hasOwnProperty.call(t,n)&&(delete t[n],s=!0,a=!0)}if(!s){const a=structuredClone(r);let s=!1;for(const e of t.error.issues){if(!e.path.length||"string"!=typeof e.path.at(-1))continue;const t=ro(a,e.path.slice(0,-1)),n=e.path.at(-1);t&&"object"==typeof t&&!Array.isArray(t)&&Object.prototype.hasOwnProperty.call(t,n)&&(delete t[n],s=!0)}if(s){const t=e.safeParse(a);if(t.success)return i?.({instanceId:o,field:n}),t.data}break}}i?.({instanceId:o,field:n})}function ro(e,t){let n=e;for(const e of t){if(!n||"object"!=typeof n)return;n=n[e]}return n}function ao(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return e;const i=e,o=i.type,r=Pn.options.find(e=>e.shape.type.value===o);if(!r)return e;const a="local-folder"===o?["type","localFolderId","path","ownerNodeId"]:"git-template"===o?["type","url","templateId","ref","auth","clone"]:["type","repositoryId","url","provider","ref","auth","clone"],s=so(i,a);if("local-folder"!==o){const e=function(e,t,n){const i=e&&"object"==typeof e&&!Array.isArray(e)?e:void 0,o=Cn.safeParse(so(i,["type","name","commit"]));if(o.success)return o.data;const r="string"==typeof i?.commit?i.commit.trim():"",a="string"==typeof i?.name?i.name.trim():"",s=r?Cn.safeParse({type:"commit",commit:r}):a?Cn.safeParse({type:"tag"===i?.type?"tag":"branch",name:a}):Cn.safeParse({type:"branch",name:"main"});return s.success?(t?.({instanceId:n,field:"source.ref"}),s.data):void 0}(i.ref,t,n),o=oo(Rn,so(i.auth,["type","secretId"]),"source.auth",t,n),r=oo(Nn,so(i.clone,["depth","submodules","lfs","subdirectory"]),"source.clone",t,n);e?s.ref=e:delete s.ref,o?s.auth=o:delete s.auth,r?s.clone=r:delete s.clone}const c=oo(r,s,"source",t,n);return c?(Object.keys(i).some(e=>!a.includes(e))&&t?.({instanceId:n,field:"source"}),c):s}function so(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e;return Object.fromEntries(t.filter(e=>Object.prototype.hasOwnProperty.call(n,e)).map(e=>[e,n[e]]))}const co=s.z.object({instanceId:ht.optional(),projectId:ht.optional(),source:Pn.optional(),nodeId:ht.optional(),runtimeId:ht.optional(),imageSelection:Pt.optional(),instanceVersion:s.z.string().trim().max(80).optional(),protocolVersion:at,build:gn.optional(),controlMode:s.z.enum(["standalone","controlled"]).default("controlled"),capabilities:ut.default(ct),appInventory:Wt.optional(),target:Xi.optional(),workspace:Zi.default({status:"unknown"}),registrationToken:s.z.string().trim().max(240).optional(),processIncarnationId:s.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{rt.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol register payload requires appInventory."})}),mo=s.z.object({status:Qi.shape.status.optional(),health:Qi.shape.health.optional(),protocolVersion:at,build:gn.optional(),capabilities:Qi.shape.capabilities.optional(),appInventory:Wt.optional(),apps:Qi.shape.apps.optional(),aiSessions:Qi.shape.aiSessions.optional(),triggers:Qi.shape.triggers.optional(),workspace:Zi.optional(),target:Xi.optional(),processIncarnationId:s.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{rt.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol heartbeat payload requires appInventory."})}),lo=s.z.enum(["web","telegram","wechat","dingding","lark"]),uo=s.z.object({id:ht,channel:lo,name:s.z.string().trim().min(1).max(160),enabled:s.z.boolean().default(!1),token:s.z.string().trim().max(4096).optional(),defaultChatId:s.z.string().trim().max(240).optional(),allowedUserIds:s.z.array(s.z.string().trim().min(1).max(240)).default([]),pollIntervalMs:s.z.number().int().positive().max(6e4).default(3e3),settings:s.z.record(s.z.string(),s.z.unknown()).default({}),createdAt:xt,updatedAt:xt}).strict(),po=s.z.object({id:ht,channel:lo,bridgeId:ht.optional(),chatSessionId:s.z.string().trim().min(1).max(240),userId:s.z.string().trim().max(240).optional(),activeProjectId:ht.optional(),activeInstanceId:ht.optional(),activeAiSessionId:s.z.string().trim().min(1).max(120).optional(),lastUsedAt:xt,createdAt:xt,updatedAt:xt}).strict(),go=s.z.object({source:s.z.object({type:s.z.literal("chat-gateway").default("chat-gateway"),channel:lo,bridgeId:ht.optional(),chatSessionId:s.z.string().trim().min(1).max(240),userId:s.z.string().trim().max(240).optional()}).strict(),message:s.z.object({text:s.z.string().trim().max(2e4).default(""),attachments:s.z.array(V).max(6).default([])}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>f&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),target:s.z.object({instanceId:ht,aiSessionId:s.z.string().trim().min(1).max(120)}).strict().optional()}).strict(),zo=s.z.object({id:ht,instanceId:ht,projectId:ht.optional(),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().max(240).optional(),result:s.z.string().default(""),timeoutMs:s.z.number().positive().optional(),source:s.z.string().trim().max(120).optional(),kind:s.z.enum(["task","approval"]).default("task"),status:s.z.enum(["pending","unreachable"]).default("pending"),error:s.z.string().trim().max(2048).optional(),lastSeenAt:xt}).strict();var fo,bo,yo=d(Object.freeze({__proto__:null,AiSessionConversationAttachmentCapabilitiesSchema:dt,AiSessionProviderCapabilitiesSchema:it,AiSessionProviderCapabilitySchema:nt,AiSessionTimelineCapabilitiesSchema:mt,AppInstallPrivilegeSchema:Jt,AppInstallerSchema:Xt,AppManagementCommandSchema:sn,AppManagementErrorSchema:cn,AppManagementEventSchema:pn,AppManagementJobResponseSchema:un,AppManagementJobSchema:mn,AppManagementJobStateSchema:rn,AppManagementOperationRequestSchema:ln,AppManagementOperationSchema:on,AppManagementProgressSchema:an,AppManagementSnapshotSchema:dn,ApplyUpdateRequestSchema:kn,BuildInfoSchema:gn,CONTROL_PLANE_PROTOCOL_VERSION:ot,ChatBridgeConfigSchema:uo,ChatChannelSchema:lo,ChatGatewayMessageSchema:go,ChatSessionBindingSchema:po,ControlPlaneHealthResponseSchema:zn,ControlledInstanceCapabilitiesSchema:ut,ControlledInstanceFeatureCapabilitiesSchema:lt,ControlledInstanceHeartbeatSchema:mo,ControlledInstanceRegisterSchema:co,ControlledInstanceSchema:Qi,CreateNodeModelSchema:Wn,CustomImageProfileSchema:mi,DEFAULT_IMAGE_COVER:{kind:"builtin",key:"default-image-cover"},DeployNodeModelSchema:Xn,DockerImageDigestSchema:Et,DockerImageReferenceSchema:Nt,EnvironmentSourceSchema:_t,EnvironmentTemplateErrorSchema:Dt,EnvironmentTemplateOriginSchema:Ft,EnvironmentTemplateSchema:Yt,EnvironmentTemplateStatusSchema:Ot,FederatedModelGroupSchema:Hn,FederatedModelRegistrySchema:Kn,FinalComputerArchSchema:Mt,FinalComputerCapabilitiesSchema:Zt,FinalComputerPlatformSchema:Lt,GitAuthSchema:Rn,GitCloneOptionsSchema:Nn,GitRefSchema:Cn,GitRepositorySchema:En,ImageCoverSchema:ei,ImageOriginSchema:Zn,ImageProfileSchema:di,ImageProvisioningSchema:gi,ImagePullProgressSchema:yi,ImagePullTerminalEventType:{Output:"image.pull.terminal.output",Finished:"image.pull.terminal.finished",Progress:"image.pull.progress",Snapshot:"image.pull.snapshot"},ImagePullTerminalFinishedSchema:bi,ImagePullTerminalOutputSchema:fi,ImageSelectionSchema:Pt,InstanceAccessSchema:Ji,InstanceAppInventoryIssueSchema:Kt,InstanceAppInventoryItemSchema:Gt,InstanceAppInventorySchema:Wt,InstanceDeleteInputSchema:Vt,InstanceDeleteResultSchema:qt,InstanceImageSnapshotSchema:pi,InstanceLifecycleEventType:{Snapshot:"instance.lifecycle.snapshot"},InstanceLifecycleSnapshotSchema:no,InstanceResourceMetricsEventType:{Snapshot:"instance.metrics.snapshot"},InstanceResourceMetricsSchema:Ci,InstanceTargetSchema:Yi,InstanceVolumeDispositionSchema:$t,InstanceVolumeRoleSchema:Ut,LEGACY_MARKET_IMAGE_IDS:Bt,LocalDockerImageSchema:Bi,MARKET_CATALOG_PROTOCOL_VERSION:"2026-07-29",ManagedAppActionReasonSchema:tn,ManagedAppManagementSourceSchema:en,ManagedAppProjectionSchema:nn,ManagedAppStateSchema:Qt,MarketCatalogSnapshotSchema:si,MarketCatalogStatusSchema:ci,MarketImagePlatformArtifactSchema:oi,MarketImageSchema:ai,MarketImageTagSchema:ri,MarketLifecycleStatusSchema:Qn,ModelAppSchema:Mn,ModelConfigSchema:Fn,ModelLocationSchema:Bn,ModelRegistryNodeDiagnosticSchema:Gn,ModelSelectionSchema:Tt,NODE_TUNNEL_PROTOCOL_VERSION:"2026-08-01",NodeAgentCapabilitiesSchema:Ni,NodeAgentControlPlaneConnectionCreateResultSchema:$i,NodeAgentControlPlaneConnectionSchema:Vi,NodeAgentControlPlanePairingSchema:Fi,NodeAgentDeleteResponseSchema:qi,NodeAgentEventTransportHealthSchema:Ti,NodeAgentExternalListenerConfigSchema:_i,NodeAgentExternalListenerSchema:Oi,NodeAgentHealthSchema:Pi,NodeAgentInstanceLifecycleResultSchema:to,NodeAgentInstanceProxyRawResponseSchema:Wi,NodeAgentManagedGitCapabilitiesSchema:Ri,NodeAgentPairingCompleteResultSchema:Di,NodeAgentPairingInviteResponseSchema:Mi,NodeAgentPairingSelfRevokeResultSchema:Ui,NodeConnectionDiagnosticsSchema:Ii,NodeConnectionPathSchema:xi,NodeControlPlaneProxyStateSchema:Si,NodeFolderPlaceSchema:Ki,NodeFolderTreeEntrySchema:Gi,NodeImageAvailabilitySchema:Hi,NodeJoinInviteStatusSchema:vi,NodeJoinedEventSchema:Ai,NodeLocalFolderSchema:Tn,NodeModelAssignmentSchema:qn,NodeModelConfigSchema:Un,NodeModelPublicRecordSchema:$n,NodeRolloutSummarySchema:In,NodeRuntimeSchema:wi,NodeSchema:ki,NodeStateProjectionEventSchema:ji,NodeTunnelRequestBodySchema:vt,NodeUpdateImpactSchema:xn,PendingRouteSchema:zo,ProjectSchema:Dn,ProjectSourceSchema:Pn,ProtocolVersionSchema:at,PublicModelConfigSchema:Vn,RuntimeArtifactIdentitySchema:bn,RuntimeConvergenceErrorSchema:yn,RuntimeVersionStateSchema:hn,SelectableImageSchema:ui,SelectableImageTagSchema:li,UpdateChannelSchema:fn,UpdateCheckRequestSchema:An,UpdateCheckResultSchema:vn,UpdateJobSchema:Sn,UpdateNodeAgentExternalListenerSchema:Li,UpdateNodeModelAssignmentSchema:Jn,UpdateNodeModelSchema:Yn,WorkspacePolicySchema:Ln,WorkspaceStatusSchema:Zi,aiSessionConversationAttachmentCapabilities:gt,aiSessionConversationAttachmentCapabilityAgents:ft,aiSessionProviderCapabilities:zt,aiSessionProviderCapability:function(e,t){return zt(e).find(e=>e.agent===t)},aiSessionTimelineCapabilities:bt,aiSessionTimelineCapabilityAgents:yt,controlledInstanceAcceptsTraffic:function(e){return!1!==e.ready&&(!e.runtimeVersion||["matched","failed"].includes(e.runtimeVersion.phase))},decodeNodeTunnelRequestBody:function(e){if(null==e)return;const t=vt.parse(e);return"utf8"===t.encoding?t.data:Buffer.from(t.data,"base64")},encodeNodeTunnelRequestBody:function(e){if(null!=e){if("string"==typeof e)return{encoding:"utf8",data:e};if(Buffer.isBuffer(e))return{encoding:"base64",data:e.toString("base64")};if(e instanceof ArrayBuffer)return{encoding:"base64",data:Buffer.from(e).toString("base64")};if(ArrayBuffer.isView(e))return{encoding:"base64",data:Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64")};throw new TypeError("Node tunnel request body must be a string or binary buffer.")}},migrateLegacyImageSelection:Ht,modelConfigHash:function(e){const t={app:Mn.parse(e.app),endpoint:Fn.shape.endpoint.parse(e.endpoint),key:Fn.shape.key.parse(e.key),model:Fn.shape.model.parse(e.model)};return`mdl_${a.createHash("sha256").update(JSON.stringify(t)).digest("hex")}`},normalizeControlledInstanceCapabilities:pt,normalizeDockerImageReference:Ct,normalizeNodeAgentCapabilities:Ei,parseDockerImageReference:Rt,parseStoredControlledInstance:function(e,t){return Qi.parse(io(e,t))},projectSourceWithoutGitCredential:_n,projectSourceWithoutLegacyGitSecretId:On,safeParseStoredControlledInstance:function(e,t){return Qi.safeParse(io(e,t))},sanitizeCrossVersionControlledInstanceHeartbeat:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=["status","health","protocolVersion","build","capabilities","appInventory","apps","aiSessions","triggers","workspace","target","processIncarnationId"],i=new Set(n);for(const n of Object.keys(e))i.has(n)||t?.({field:n,action:"ignored"});return so(e,n)},sanitizeCrossVersionControlledInstanceRegister:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=["instanceId","projectId","source","nodeId","runtimeId","imageSelection","instanceVersion","protocolVersion","build","controlMode","capabilities","appInventory","target","workspace","registrationToken","processIncarnationId"],o=new Set([...i,"imageId"]);for(const e of Object.keys(n))o.has(e)||t?.({field:e,action:"ignored"});return Object.prototype.hasOwnProperty.call(n,"imageId")&&t?.({field:"imageId",action:"migrated"}),{...so(n,i),imageSelection:Ht(n.imageSelection,n.imageId)}},sanitizeStoredControlledInstance:io,sanitizeStoredEnvironmentTemplate:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","name","sourceInstanceId","nodeId","imageId","internalTag","platform","architecture","sizeBytes","status","error","createdAt","updatedAt"]),o="string"==typeof n.id?n.id:void 0;for(const e of Object.keys(n))i.has(e)||t?.({templateId:o,field:e});const r=so(n,[...i]);if(n.error&&"object"==typeof n.error&&!Array.isArray(n.error)){const e=n.error;for(const n of Object.keys(e))["code","message","phase"].includes(n)||t?.({templateId:o,field:`error.${n}`});r.error=so(e,["code","message","phase"])}return r},sanitizeStoredImageProfile:hi,sanitizeStoredMarketCatalogSnapshot:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=["protocolVersion","catalogId","revision","source","generatedAt","expiresAt","items"];for(const e of Object.keys(n))i.includes(e)||t?.({field:e});const o=Array.isArray(n.items)?n.items.flatMap(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return t?.({field:"items"}),[];const n=e,i=["id","publisher","slug","name","description","localizedDescriptions","cover","repository","defaultTag","tags","capabilities","optionalApps","defaultEnv","labels","status"];for(const e of Object.keys(n))i.includes(e)||t?.({itemId:"string"==typeof n.id?n.id:void 0,field:e});const o=ai.safeParse(so(n,i));return o.success?[o.data]:(t?.({itemId:"string"==typeof n.id?n.id:void 0,field:"invalid-record"}),[])}):n.items;return{...so(n,i),items:o}},sanitizeStoredNode:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","name","connectionMode","connectionPath","connectionEnabled","auth","endpoint","controlEndpoint","containerEndpoint","publicWebBase","status","health","capabilities","proxyState","appInventory","labels","lastSeenAt","createdAt","updatedAt"]);for(const e of Object.keys(n))i.has(e)||t?.({field:e});const o=n.auth&&"object"==typeof n.auth&&!Array.isArray(n.auth)?so(n.auth,["mode","keyId","secret","pairedAt","pairing"]):n.auth;o&&"object"==typeof o&&"pairing"in o&&(o.pairing=so(o.pairing,["status","joinToken","expiresAt"]));const r=n.connectionPath&&"object"==typeof n.connectionPath&&!Array.isArray(n.connectionPath)?"control-plane-proxy"===n.connectionPath.kind?so(n.connectionPath,["kind","proxyId","proxyBindingId","targetNodeId"]):so(n.connectionPath,["kind"]):{kind:"direct"},a=n.proxyState&&"object"==typeof n.proxyState&&!Array.isArray(n.proxyState)?so(n.proxyState,["reachability","bindingStatus","bindingRevision","streamId","revision","observedAt","target","lastError","updatedAt"]):n.proxyState;if(a&&"object"==typeof a){const e=a;e.target=so(e.target,["id","name","status","health","lastSeenAt","capabilities"]),e.lastError=so(e.lastError,["code","message","retryable","details"])}return{...Object.fromEntries(Object.entries(n).filter(([e])=>i.has(e))),auth:o,connectionPath:r,proxyState:a}},sanitizeStoredNodeLocalFolder:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,{defaultImageId:n,...i}=t;return{...i,defaultImageSelection:Ht(t.defaultImageSelection,n)}},sanitizeStoredProject:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,{defaultImageId:n,defaultRuntimeId:i,...o}=t;return{...o,source:ao(t.source),defaultImageSelection:Ht(t.defaultImageSelection,n)}},supportsAiSessionAttachmentRetentionSettings:function(e){return gt(e).retentionSettings},supportsAiSessionConversationAttachmentCapability:function(e,t,n){return ft(e,n).includes(t)},supportsAiSessionFileSizeLimitSettings:function(e){return!0===gt(e).fileSizeLimitSettings},supportsAiSessionPersistenceSettings:function(e){return pt(e).features.aiSessionPersistenceSettings},supportsAiSessionTimelineCapability:function(e,t,n){return yt(e,n).includes(t)},supportsAiSessionWorkspaceSelection:function(e){return pt(e).features.aiSessionWorkspaceSelection},supportsGitCliCredentialBroker:function(e){const t=pt(e).features;return t.gitCredentialProxy||t.gitCliCredentialBroker},supportsGitCredentialProxy:function(e){return pt(e).features.gitCredentialProxy},supportsNodeAiSessionFileAttachmentLimit:function(e){return!0===Ni.safeParse(e).data?.aiSessionFileAttachmentLimit},supportsNodeFolderPlaces:function(e){return!0===Ni.safeParse(e).data?.folderPlaces},supportsNodeGitCredentialRuntimeBroker:function(e){return Ei(e).managedGitCredentials.runtimeBroker},supportsNodeGitWorkspaceProvisioning:function(e,t){return Ei(e).managedGitCredentials.workspaceProvisioning[t]},supportsNodeLocalFolderNameUpdate:function(e){return!0===Ni.safeParse(e).data?.localFolderNameUpdate},supportsNodeManagedGitCredentialRegistry:function(e){return Ei(e).managedGitCredentials.registry}})),ho=function(){if(bo)return fo;bo=1;const t=e,{spawnSync:i}=n;return fo={processStartIdentity:function(e,n=process.platform){if(Number.isInteger(e)&&!(e<=0)){if("linux"===n)try{const n=t.readFileSync(`/proc/${e}/stat`,"utf8"),i=n.lastIndexOf(")");if(i<0)return;const o=n.slice(i+2).trim().split(/\s+/)[19];return o?`linux:${o}`:void 0}catch{return}if(["darwin","freebsd","openbsd","aix","sunos"].includes(n)){const t=i("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:1e3}),o=0===t.status?t.stdout.trim().replace(/\s+/g," "):"";return o?`${n}:${o}`:void 0}if("win32"===n){const t=i("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`],{encoding:"utf8",timeout:2e3}),n=0===t.status?t.stdout.trim():"";return/^\d+$/.test(n)?`win32:${n}`:void 0}}}}}();class xo extends Error{code;lockPath;owner;constructor(e,t,n={}){const i=t?.pid?` pid ${t.pid}`:"";super(`${n.label||"Process"} is already running${i}. Lock: ${e}`),this.name="ProcessSingletonError",this.code=n.code||"PROCESS_ALREADY_RUNNING",this.lockPath=e,this.owner=t}}function Io(e){return t.join(e,"owner.json")}function Ao(e){return t.join(e,"initializing.json")}function vo(e){return t.join(e,"recovering.json")}function So(e){return Number.isInteger(e)&&Number(e)>0}const ko=function(t){try{const n=JSON.parse(e.readFileSync(Io(t),"utf8"));if(So(n.pid)&&"string"==typeof n.startTime){const e=n;return{pid:e.pid,hostname:"string"==typeof e.hostname&&e.hostname?e.hostname:c.hostname(),component:e.component||"server-update",command:"string"==typeof e.command?e.command:"",acquiredAt:"string"==typeof e.createdAt&&Number.isFinite(Date.parse(e.createdAt))?e.createdAt:new Date(0).toISOString(),token:"string"==typeof e.token&&e.token?e.token:`legacy:${e.pid}:${e.startTime}`,startIdentity:e.startTime.startsWith("linux:")?e.startTime:`linux:${e.startTime}`}}if(!(So(n.pid)&&"string"==typeof n.hostname&&n.hostname&&"string"==typeof n.command&&"string"==typeof n.acquiredAt&&Number.isFinite(Date.parse(n.acquiredAt))&&"string"==typeof n.token&&n.token))return;return n}catch{return}};function jo(e){if(!So(e))return!1;try{return process.kill(Number(e),0),!0}catch(e){return"EPERM"===e.code}}function wo(e){if(!e||!jo(e.pid))return!1;if(!e.startIdentity)return!0;const t=ho.processStartIdentity(e.pid);return void 0===t||t===e.startIdentity}function Co(n,i){const o=t.join(n,`.owner-${i.token}.tmp`);e.writeFileSync(o,`${JSON.stringify(i,null,2)}\n`,{encoding:"utf8",mode:384,flag:"wx"});const r=No(n);if(r?.token!==i.token)throw To(o),new Error(`Process lock initialization was superseded: ${n}`);e.renameSync(o,Io(n)),To(Ao(n))}function Ro(n,i,o){const r=ko(n);if(r?.token!==i.token)return!1;const s={...i};for(const[e,t]of Object.entries(o))void 0===t?delete s[e]:Object.assign(s,{[e]:t});const c=t.join(n,`.owner-update-${i.token}-${a.randomUUID()}.tmp`);try{if(e.writeFileSync(c,`${JSON.stringify(s,null,2)}\n`,{encoding:"utf8",mode:384,flag:"wx"}),ko(n)?.token!==i.token)return!1;e.renameSync(c,Io(n));for(const e of Object.keys(i))delete i[e];return Object.assign(i,s),!0}catch(e){if("ENOENT"===e.code)return!1;throw e}finally{To(c)}}function No(t){try{return JSON.parse(e.readFileSync(Ao(t),"utf8"))}catch{return}}function Eo(e){const t=No(e);return So(t?.pid)&&wo({pid:t.pid,startIdentity:t.startIdentity})}function To(t){try{e.unlinkSync(t)}catch(e){if("ENOENT"!==e.code)throw e}}function Po(){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,20)}function _o(t){try{const n=No(t),i=Date.parse(n?.startedAt||"");return Number.isFinite(i)?Math.max(0,Date.now()-i):Math.max(0,Date.now()-e.statSync(t).mtimeMs)}catch{return 0}}function Oo(n,i){try{return e.writeFileSync(vo(n),`${JSON.stringify({token:i,pid:process.pid,startedAt:(new Date).toISOString()})}\n`,{encoding:"utf8",mode:384,flag:"wx"}),!0}catch(o){if("EEXIST"===o.code)return!!function(n){const i=vo(n),o=Lo(i),r=Date.parse(o?.startedAt||"");if(jo(o?.pid)||Number.isFinite(r)&&Date.now()-r<2e3)return!1;const s=t.join(n,`.recovering-${a.randomUUID()}.stale`);try{e.renameSync(i,s)}catch(e){if(["ENOENT","EEXIST"].includes(e.code||""))return!1;throw e}const c=Lo(s);if(c?.token===o?.token)return To(s),!0;try{e.linkSync(s,i)}catch(e){if("EEXIST"!==e.code)throw e}finally{To(s)}return!1}(n)&&Oo(n,i);if("ENOENT"===o.code)return!1;throw o}}function Lo(t){try{return JSON.parse(e.readFileSync(t,"utf8"))}catch{return}}function Mo(e,t){return Lo(vo(e))?.token===t}const Do="/run/task-handoff-server-update.lock";function Fo(t){const n={};if(!e.existsSync(t))return n;for(const i of e.readFileSync(t,"utf8").split(/\r?\n/)){if(!i||i.startsWith("#"))continue;const e=i.indexOf("=");e>0&&(n[i.slice(0,e)]=i.slice(e+1))}return n}var Uo,Vo=d(Object.freeze({__proto__:null,SERVER_UPDATE_LOCK_PATH:Do,acquireServerUpdateLock:function(n=Do,i={}){return function(n,i={}){e.mkdirSync(t.dirname(n),{recursive:!0});const o=ho.processStartIdentity(process.pid),r={pid:process.pid,hostname:c.hostname(),command:process.argv.join(" "),acquiredAt:(new Date).toISOString(),token:a.randomUUID(),...void 0!==i.component?{component:i.component}:{},...o?{startIdentity:o}:{},...void 0!==i.dataDir?{dataDir:i.dataDir}:{},...void 0!==i.host?{host:i.host}:{},...void 0!==i.port?{port:i.port}:{},...void 0!==i.instanceId?{instanceId:i.instanceId}:{}};for(let t=0;t<5;t+=1)try{return e.mkdirSync(n),e.writeFileSync(Ao(n),`${JSON.stringify({token:r.token,pid:r.pid,startIdentity:r.startIdentity,startedAt:(new Date).toISOString()})}\n`,{encoding:"utf8",mode:384,flag:"wx"}),Co(n,r),{lockPath:n,owner:r,updateDetails:e=>Ro(n,r,e),release(){const t=ko(n);t?.token===r.token&&e.rmSync(n,{recursive:!0,force:!0})}}}catch(o){if("EEXIST"!==o.code)throw o;const r=ko(n);if(wo(r))throw new xo(n,r,i.error);if(!r&&(Eo(n)||_o(n)<(i.incompleteLockStaleMs??2e3))){if(t+1<5){Po();continue}throw new xo(n,void 0,i.error)}const s=a.randomUUID();if(!Oo(n,s)){if(t+1<5){Po();continue}throw new xo(n,ko(n),i.error)}const c=ko(n);if(wo(c))throw To(vo(n)),new xo(n,c,i.error);if(r?.token&&c?.token!==r.token){To(vo(n));continue}if(!Mo(n,s))continue;e.rmSync(n,{recursive:!0,force:!0})}const s=ko(n);throw new xo(n,s,i.error)}(n,{component:"server-update",incompleteLockStaleMs:i.legacyGraceMs??3e4,error:{label:"TaskHandoff server update",code:"SERVER_UPDATE_ALREADY_RUNNING"}}).release},cleanUpServerUpdateLockOnSignals:function(e){const t=new Map;for(const n of["SIGINT","SIGTERM","SIGHUP"]){const i=()=>{e(),process.removeListener(n,i),process.kill(process.pid,n)};t.set(n,i),process.on(n,i)}return()=>{for(const[e,n]of t)process.removeListener(e,n)}},currentServerInstallArgs:function(t={}){const n=Fo(t.controlPlaneEnvFile||"/etc/task-handoff/control-plane.env"),i=Fo(t.nodeAgentEnvFile||"/etc/task-handoff/node-agent.env");return["--service-user",(o=t.nodeAgentUnitFile||"/etc/systemd/system/task-handoff-node-agent.service",e.existsSync(o)&&e.readFileSync(o,"utf8").match(/^User=(.+)$/m)?.[1]||"root"),"--control-plane-data-dir",n.TASK_HANDOFF_CONTROL_PLANE_DATA_DIR||"/var/lib/task-handoff/control-plane","--node-agent-data-dir",i.TASK_HANDOFF_NODE_AGENT_DATA_DIR||"/var/lib/task-handoff/node-agent","--control-plane-host",n.TASK_HANDOFF_CONTROL_PLANE_HOST||"0.0.0.0","--control-plane-port",n.TASK_HANDOFF_CONTROL_PLANE_PORT||"8081","--node-agent-host",i.TASK_HANDOFF_NODE_AGENT_HOST||"127.0.0.1","--node-agent-port",i.TASK_HANDOFF_NODE_AGENT_PORT||"8091","--node-agent-ipc-path",i.TASK_HANDOFF_NODE_AGENT_IPC_PATH||"/run/task-handoff/node-agent.sock","--auth-mode",n.TASK_HANDOFF_CONTROL_PLANE_AUTH_MODE||"password",...n.TASK_HANDOFF_CONTROL_PLANE_STATIC_DIR?["--static-dir",n.TASK_HANDOFF_CONTROL_PLANE_STATIC_DIR]:[]];var o},globalPrefixFromModulePath:function(e){let n=t.resolve(e);for(;n!==t.dirname(n);){if("node_modules"===t.basename(n)&&"lib"===t.basename(t.dirname(n)))return t.dirname(t.dirname(n));n=t.dirname(n)}}})),$o=function(){if(Uo)return l;Uo=1,Object.defineProperty(l,"__esModule",{value:!0});const a=e,s=t,{spawnSync:c}=n,{Command:m,InvalidArgumentError:d}=i,u=o,p=r,{ControlPlaneHealthResponseSchema:g}=yo,{acquireServerUpdateLock:z,cleanUpServerUpdateLockOnSignals:f,globalPrefixFromModulePath:b}=Vo;function y(e){const t=g.safeParse(e);return t.success?t.data.data.build.packageVersion:void 0}function h(e){if(!s.isAbsolute(e))throw new d("must be an absolute path");return s.resolve(e)}const x=(new m).name("task-handoff-node-update-worker").description("Apply a detached TaskHandoff node update.").requiredOption("--job-file <path>","persisted update job file").requiredOption("--target-version <version>","exact semantic version",function(e){if(e.trim()!==e||/^[v=]/.test(e)||null===u.valid(e))throw new d("must be an exact semantic version");return e}).option("--service <name>","systemd service to restart","task-handoff-node-agent.service").option("--npm-command <path>","npm executable",process.env.TASK_HANDOFF_NPM_COMMAND||"npm").option("--control-plane-health-url <url>","local control-plane health endpoint",function(e){let t;try{t=new URL(e)}catch{throw new d("must be a valid loopback HTTP URL")}if(!["http:","https:"].includes(t.protocol)||!["127.0.0.1","localhost","::1"].includes(t.hostname))throw new d("must be a valid loopback HTTP URL");return t.toString()}).option("--install-prefix <path>","authoritative npm global prefix",h).option("--node-agent-ipc-path <path>","node-agent readiness socket",h).option("--registry <url>","npm registry URL").option("--standalone","complete the temporary job after service verification").parse(process.argv).opts(),I=x.jobFile,A=x.targetVersion,v=x.service,S=x.npmCommand,k=x.controlPlaneHealthUrl,j=x.installPrefix,w=x.nodeAgentIpcPath,C=x.registry,R=new Set(["succeeded","degraded","failed"]),N=new Set(["@task-handoff/node-agent","@task-handoff/server"]),E=["/etc/task-handoff/control-plane.env","/etc/task-handoff/node-agent.env","/etc/systemd/system/task-handoff-control-plane.service","/etc/systemd/system/task-handoff-node-agent.service"];function T(e,t){const n=JSON.parse(a.readFileSync(I,"utf8"));process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK&&function(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(s.resolve(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK))({jobFile:I,observed:n});const i=`${I}.worker-lock`;a.mkdirSync(i);try{const n=JSON.parse(a.readFileSync(I,"utf8"));if(R.has(n.status)||!e.includes(n.status))return!1;const i="function"==typeof t?t(n):t,o={...n,...i,updatedAt:(new Date).toISOString()};return p.sync(I,`${JSON.stringify(o,null,2)}\n`,{encoding:"utf8"}),!0}finally{a.rmdirSync(i)}}function P(e,t){const n=c(e,t,{stdio:"inherit"});if(0!==n.status)throw new Error(`${e} exited with status ${n.status??"unknown"}`)}function _(e,t,n){const i=n?s.join(t,...n.split("/"),"node_modules",...e.split("/"),"package.json"):s.join(t,...e.split("/"),"package.json");try{return JSON.parse(a.readFileSync(i,"utf8")).version}catch(e){if("ENOENT"===e?.code)return;throw e}}function O(e,t){const n=_(e,t);if(n!==A)throw new Error(`Updated ${e} verification failed: expected ${A}, found ${n||"unknown"}.`)}function L(e){const t=["view",`${e}@${A}`,"dist.integrity","--json"];C&&t.push("--registry",C);const n=c(S,t,{encoding:"utf8"});if(0!==n.status)throw new Error(`Could not verify the ${e} npm artifact integrity.`);let i;try{i=JSON.parse(n.stdout)}catch{throw new Error(`npm returned invalid ${e} artifact integrity metadata.`)}if("string"!=typeof i||!/^sha(?:256|384|512)-[A-Za-z0-9+/=]+$/.test(i))throw new Error(`npm returned invalid ${e} artifact integrity metadata.`);return i}async function M(e,t=A,n=6e4){const i=Date.now()+n;let o="not reachable";for(;Date.now()<i;){try{if(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE){const e=y(JSON.parse(a.readFileSync(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE,"utf8")));if(e===t)return;o=`reported version ${String(e||"unknown")}`,await new Promise(e=>setTimeout(e,10));continue}const n=await fetch(e,{headers:{"cache-control":"no-cache"},signal:AbortSignal.timeout(2e3)}),i=y(await n.json().catch(()=>({})));if(n.ok&&i===t)return;o=n.ok?`reported version ${String(i||"unknown")}`:`returned HTTP ${n.status}`}catch(e){o=e instanceof Error?e.message:String(e)}await new Promise(e=>setTimeout(e,500))}throw new Error(`Control plane did not become healthy at ${e} with version ${t}: ${o}.`)}function D(e,t=3e4){const n=Date.now()+t;for(;Date.now()<n;){try{if(a.statSync(e).isSocket())return}catch{}Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250)}throw new Error(`Node agent socket was not ready after ${t}ms: ${e}`)}function F(e,t,n){const i=["install","--global","--prefix",e,`${t}@${n}`];C&&i.push("--registry",C),P(S,i)}return async function(){let e,t,n;try{if(!T(["queued"],e=>({status:"updating-node",rollout:{...e.rollout,phase:"updating-node"},startedAt:(new Date).toISOString(),error:void 0})))return;e=z(process.env.TASK_HANDOFF_SERVER_UPDATE_LOCK_PATH||void 0),t=f(e);const i=function(){const e=JSON.parse(a.readFileSync(I,"utf8")),t=`@${A}#`;if("string"!=typeof e.artifactRef||!e.artifactRef.startsWith("npm:")||!e.artifactRef.includes(t))throw new Error(`Update job does not pin npm integrity for version ${A}.`);const n=e.artifactRef.indexOf(t),i=e.artifactRef.slice(4,n),o=e.artifactRef.slice(n+t.length);if(!N.has(i)||!o)throw new Error("Update job does not identify a supported immutable npm artifact.");const r=L(i);if(r!==o)throw new Error(`${i} npm artifact integrity mismatch: expected ${o}, found ${String(r||"unknown")}.`);return{packageName:i,integrity:r}}(),o=i.packageName,r=b(process.argv[1]);if(j&&r&&j!==r)throw Object.assign(new Error(`Update prefix ${j} does not match the running package prefix ${r}.`),{code:"UPDATE_INSTALL_PREFIX_MISMATCH"});const m=r?void 0:c(S,["prefix","--global"],{encoding:"utf8"});if(m&&0!==m.status)throw new Error("Could not determine the npm global prefix.");const d=j||r||m?.stdout.trim();if(!d)throw new Error("Could not determine the npm global prefix.");const l=c(S,["root","--global","--prefix",d],{encoding:"utf8"});if(0!==l.status)throw new Error("Could not determine the npm global module root.");const u=l.stdout.trim(),g=[o];"@task-handoff/server"===o&&void 0!==_("@task-handoff/node-agent",u)&&g.push("@task-handoff/node-agent");const y=new Map(g.map(e=>[e,_(e,u)])),h="@task-handoff/server"===o?function(){const e=process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CONFIGURATION_ROOT;return e?E.map(t=>s.join(e,t.slice(1))):E}().map(e=>{try{const t=a.statSync(e);return{file:e,contents:a.readFileSync(e),mode:t.mode}}catch(t){if("ENOENT"===t?.code)return{file:e};throw t}}):[];let C=!1;n=async()=>{for(const e of[...g].reverse()){const t=y.get(e);t&&F(d,e,t)}if("@task-handoff/server"===o){C&&(function(e){for(const t of e)t.contents?(a.mkdirSync(s.dirname(t.file),{recursive:!0}),p.sync(t.file,t.contents,{mode:t.mode})):a.rmSync(t.file,{force:!0})}(h),P("systemctl",["daemon-reload"])),P("systemctl",["restart","task-handoff-control-plane.service"]);const e=y.get("@task-handoff/server");k&&e&&await M(k,e)}P("systemctl",["restart",v]),w&&D(w)};const R=new Map([[o,i.integrity]]);for(const e of g.slice(1))R.set(e,L(e));for(const e of g){if(F(d,e,A),L(e)!==R.get(e))throw new Error(`${e} npm artifact integrity changed during installation.`);O(e,u)}if("@task-handoff/server"===o){if(function(e){for(const t of["@task-handoff/control-plane","@task-handoff/node-agent","@task-handoff/controlled-instance"]){const n=_(t,e,"@task-handoff/server")||_(t,e);if(n!==A)throw new Error(`Updated @task-handoff/server does not provide ${t} ${A}; found ${n||"unknown"}.`)}}(u),!k)throw new Error("A control-plane health URL is required for a complete server update.");C=!0,function(e){P(s.join(e,"bin","task-handoff"),["install","--preserve-current","--materialize-only"])}(d),P("systemctl",["restart","task-handoff-control-plane.service"]),await M(k)}if(!T(["updating-node"],e=>({status:"restarting-node",rollout:{...e.rollout,phase:"restarting-node"}})))return;P("systemctl",["restart",v]),w&&D(w),x.standalone&&T(["restarting-node"],e=>({status:"succeeded",rollout:{...e.rollout,phase:"succeeded",nodeVersion:A},completedAt:(new Date).toISOString()}))}catch(e){let t;if(n)try{await n()}catch(e){t=e}const i=[e instanceof Error?e.message:String(e),t?`Rollback failed: ${t instanceof Error?t.message:String(t)}`:void 0].filter(Boolean).join(" ");T(["queued","updating-node","restarting-node"],t=>({status:"failed",rollout:{...t.rollout,phase:"failed"},error:{code:e&&"object"==typeof e&&"code"in e&&"string"==typeof e.code?e.code:"NODE_UPDATE_FAILED",message:i,retryable:e&&"object"==typeof e&&"code"in e&&"SERVER_UPDATE_ALREADY_RUNNING"===e.code},completedAt:(new Date).toISOString()})),console.error(e),process.exitCode=1}finally{t?.(),e?.()}}(),l}(),qo=m($o);module.exports=qo;
2
+ "use strict";var e=require("node:fs"),t=require("node:path"),n=require("node:child_process"),i=require("commander"),o=require("semver"),r=require("write-file-atomic"),a=require("node:crypto"),s=require("zod"),c=require("node:os");function m(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function d(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var n=function e(){var n=!1;try{n=this instanceof e}catch{}return n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var i=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,i.get?i:{enumerable:!0,get:function(){return e[t]}})}),n}var l={};const u=s.z.string().trim().min(1).max(120),p=20971520,g=512e3,z=g,f=p,b=41943040,y=s.z.string().trim().min(1).max(80),h=s.z.enum(["app-session","ai-session"]),x=s.z.enum(["image","file"]),I={scopeType:s.z.enum(["session","create-request"]),scopeId:s.z.string().trim().min(1).max(160),kind:x,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120)};s.z.object({...I,size:s.z.coerce.number().int().positive().max(p)}).strict();const v=s.z.string().regex(/^cia_[a-f0-9]{24}$/);s.z.object({attachmentId:v,...I,size:s.z.number().int().positive().max(p)}).strict(),s.z.object({offset:s.z.coerce.number().int().nonnegative()}).strict(),s.z.object({attachmentId:v,offset:s.z.number().int().nonnegative()}),s.z.object({id:v,kind:x,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().positive().max(p),expiresAt:s.z.string().datetime()});const A=s.z.object({id:s.z.string().trim().min(1).max(120),kind:x,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER)}),S=s.z.enum(["available","expired","missing"]),k=A.extend({contentState:S.default("available")}).strict(),j=s.z.object({id:s.z.string().trim().min(1).max(240),text:s.z.string(),attachments:s.z.array(k).max(6).default([])}).strict(),w=s.z.enum(["running","waiting","idle","failed"]);s.z.object({instanceId:s.z.string().trim().min(1).max(160),sessionId:s.z.string().trim().min(1).max(120),unread:s.z.boolean(),sessionUpdatedAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict();const C=s.z.enum(["thinking","tool","editing","approval","responding","unknown"]),E=s.z.object({id:s.z.string().trim().min(1).max(240).optional(),kind:s.z.string().trim().min(1).max(80).optional(),name:s.z.string().trim().min(1).max(120),inputPreview:s.z.string().trim().max(500).optional(),startedAt:s.z.string().datetime().optional()}).strict(),N=s.z.enum(["running","completed","failed","waiting"]),R=s.z.object({id:s.z.string().trim().min(1).max(240),turnId:s.z.string().trim().min(1).max(240)}).strict(),T=R.extend({type:s.z.literal("user-message"),text:s.z.string(),attachments:s.z.array(k).max(6).optional()}).strict(),P=R.extend({type:s.z.literal("ai-message"),text:s.z.string()}).strict(),_=R.extend({type:s.z.literal("activity"),activityKind:s.z.string().trim().min(1).max(120),title:s.z.string().trim().min(1).max(240),status:N.optional(),summary:s.z.string().max(4e3).optional(),input:s.z.string().max(1e5).optional(),output:s.z.string().max(1e6).optional(),paths:s.z.array(s.z.string().trim().min(1).max(4096)).max(500).optional(),exitCode:s.z.number().int().optional(),durationMs:s.z.number().int().nonnegative().optional()}).strict(),O=s.z.discriminatedUnion("type",[T,P,_]);s.z.object({sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),items:s.z.array(O),generatedAt:s.z.string().datetime()}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),turnId:s.z.string().trim().min(1).max(240),items:s.z.array(O),generatedAt:s.z.string().datetime()}).strict();const M=s.z.enum(["pending-init","running","interrupted","completed","errored","shutdown","not-found"]),L=s.z.enum(["started","interacted","interrupted"]),D=s.z.object({threadId:s.z.string().trim().min(1).max(240),path:s.z.string().trim().max(4096).optional(),status:M,activity:L.optional(),message:s.z.string().trim().max(1e3).optional(),updatedAt:s.z.string().datetime()}).strict(),F=s.z.object({toolCalls:s.z.number().int().min(0).default(0),edits:s.z.number().int().min(0).default(0),approvals:s.z.number().int().min(0).default(0)}).strict().default({toolCalls:0,edits:0,approvals:0}),U=s.z.object({send:s.z.boolean().optional(),interrupt:s.z.boolean().optional(),approval:s.z.boolean().optional(),fork:s.z.boolean().optional(),openApp:s.z.boolean().optional(),close:s.z.boolean().optional()}).strict(),V=s.z.object({kind:s.z.literal("fork"),parentProviderSessionId:s.z.string().trim().min(1).max(240),throughTurnId:s.z.string().trim().min(1).max(240).optional()}).strict(),q=s.z.union([A.extend({source:s.z.object({type:s.z.literal("inline"),encoding:s.z.literal("base64"),data:s.z.string().min(1).max(31457280)}).strict()}).strict().superRefine((e,t)=>{const n="image"===e.kind?p:g;(e.size<=0||("file"===e.kind?e.size>=n:e.size>n))&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["size"],message:`Inline ${e.kind} must be between 1 byte and ${n} bytes.`})}),A.extend({source:s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096)}).strict()}).strict()]),$=A.extend({sourceType:s.z.enum(["inline","runtime-path"])}).strict(),H=s.z.union([s.z.object({id:s.z.string().trim().min(1).max(120),kind:x.optional(),source:s.z.object({type:s.z.literal("upload-ref")}).strict().default({type:"upload-ref"})}).strict(),s.z.object({id:s.z.string().trim().min(1).max(120),kind:x,name:s.z.string().trim().min(1).max(240),mime:s.z.string().trim().min(1).max(120),size:s.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),source:s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096)}).strict()}).strict()]),B=s.z.enum(["auto","queue","steer","immediate"]),G=s.z.enum(["ask","auto-review","full-access"]),K=s.z.enum(["review","rename","goal","compact"]);s.z.object({command:K,argument:s.z.string().trim().max(4e3).optional()}).strict().superRefine((e,t)=>{"rename"!==e.command||e.argument||t.addIssue({code:"custom",path:["argument"],message:"Rename requires a thread name."}),"review"!==e.command&&"compact"!==e.command||!e.argument||t.addIssue({code:"custom",path:["argument"],message:`${e.command} does not accept an argument.`})}),s.z.object({command:K,value:s.z.string().max(4e3).optional(),turnId:s.z.string().trim().min(1).max(240).optional()}).strict(),s.z.enum(["skill","app","plugin"]);const W=s.z.object({name:s.z.string().trim().min(1).max(240),path:s.z.string().trim().min(1).max(4096)}),Y=s.z.discriminatedUnion("kind",[W.extend({kind:s.z.literal("skill"),path:s.z.string().trim().min(1).max(4096).refine(e=>e.startsWith("/"),"Skill paths must be absolute.")}).strict(),W.extend({kind:s.z.literal("app"),path:s.z.string().trim().min(7).max(4096).regex(/^app:\/\/[^\s/]+$/,"App paths must use app://<id>.")}).strict(),W.extend({kind:s.z.literal("plugin"),path:s.z.string().trim().min(10).max(4096).regex(/^plugin:\/\/[^\s/]+$/,"Plugin paths must use plugin://<id>.")}).strict()]),X=s.z.array(Y).max(20).default([]),J=s.z.enum(["plugin","skill","file","directory","app"]),Z=s.z.object({kind:J,name:s.z.string().trim().min(1).max(240),description:s.z.string().trim().max(1e3).optional(),path:s.z.string().trim().min(1).max(4096),icon:s.z.string().trim().max(4096).optional()}).strict().superRefine((e,t)=>{"skill"!==e.kind||e.path.startsWith("/")||t.addIssue({code:"custom",path:["path"],message:"Skill paths must be absolute."}),"app"!==e.kind||/^app:\/\/[^\s/]+$/.test(e.path)||t.addIssue({code:"custom",path:["path"],message:"App paths must use app://<id>."}),"plugin"!==e.kind||/^plugin:\/\/[^\s/]+$/.test(e.path)||t.addIssue({code:"custom",path:["path"],message:"Plugin paths must use plugin://<id>."}),"file"!==e.kind&&"directory"!==e.kind||!e.path.startsWith("/")&&!e.path.split(/[\\/]+/).includes("..")||t.addIssue({code:"custom",path:["path"],message:"File and directory paths must be relative to the session cwd."})}),Q=s.z.object({category:s.z.enum(["skills","plugins","apps","files"]),code:s.z.string().trim().min(1).max(160),message:s.z.string().trim().min(1).max(2e3)}).strict();s.z.object({sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),cwd:s.z.string().trim().min(1).max(4096),candidates:s.z.array(Z).max(1e3).default([]),diagnostics:s.z.array(Q).max(20).default([])}).strict(),s.z.object({query:s.z.string().trim().max(240).default("")}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),cwd:s.z.string().trim().min(1).max(4096),query:s.z.string().trim().max(240),requestId:s.z.string().trim().min(1).max(160),candidates:s.z.array(Z.refine(e=>"file"===e.kind||"directory"===e.kind,"File search only returns files and directories.")).max(200).default([]),complete:s.z.boolean().default(!1)}).strict();const ee=s.z.object({message:s.z.string().trim().min(1).max(2e4),mode:B.optional(),permissionMode:G.optional()}),te=ee.extend({attachments:s.z.array(q).max(6).default([]),references:X}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>b&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),ne=ee.extend({attachments:s.z.array(H).max(6).default([]),references:X}).strict(),ie=s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096).refine(e=>e.startsWith("/")||/^[A-Za-z]:[\\/]/.test(e),"Runtime paths must be absolute in the target controlled instance.")}).strict(),oe=s.z.object({modelEntityId:s.z.string().trim().min(1).max(120),modelName:s.z.string().trim().min(1).max(240)}).strict(),re=s.z.enum(["none","minimal","low","medium","high","xhigh","max","ultra"]);te.extend({agent:y,cwd:ie,cwdFolderId:s.z.string().trim().min(1).max(120).optional(),clientRequestId:s.z.string().trim().min(1).max(160),modelSelection:oe.optional(),reasoningEffort:re.optional(),storyId:u.optional()}).strict();const ae=s.z.object({mode:s.z.enum(["current-folder","worktree"]),branch:s.z.string().trim().min(1).max(1024)}).strict();ne.extend({agent:y,cwdFolderId:s.z.string().trim().min(1).max(120).optional(),gitSelection:ae.optional(),clientRequestId:s.z.string().trim().min(1).max(160),modelSelection:oe.optional(),reasoningEffort:re.optional(),storyId:u.optional()}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160),modelSelection:oe}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),accepted:s.z.literal(!0)}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160),reasoningEffort:re}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),accepted:s.z.literal(!0)}).strict(),s.z.object({storyId:u.nullable()}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),storyId:u.optional()}).strict(),s.z.object({disposition:s.z.enum(["created","already-created"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:s.z.literal("ai-session")}).strict();const se=s.z.object({mode:s.z.enum(["current","managed-worktree"]).default("current")}).strict().default({mode:"current"});s.z.object({clientRequestId:s.z.string().trim().min(1).max(160),throughTurnId:s.z.string().trim().min(1).max(240).optional(),workspace:se.optional().default({mode:"current"})}).strict(),s.z.object({disposition:s.z.enum(["created","already-created"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:s.z.literal("ai-session")}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["opened","already-open"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),appSessionId:s.z.string().trim().min(1).max(120),creationSource:h}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160)}).strict(),s.z.object({disposition:s.z.enum(["closed","already-closed"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),creationSource:h}).strict(),s.z.object({code:s.z.enum(["invalid-request","not-found","unsupported","provider-unavailable","materialization-failed","open-app-failed","close-failed","conflict"]),message:s.z.string().trim().min(1).max(4e3),retryable:s.z.boolean().default(!1),aiSessionId:s.z.string().trim().min(1).max(120).optional(),providerSessionId:s.z.string().trim().min(1).max(240).optional()}).strict(),s.z.object({decision:s.z.enum(["allow","deny","skip"])}).strict(),s.z.object({expectedRevision:s.z.number().int().min(0),queueIds:s.z.array(s.z.string().trim().min(1).max(120)).max(100)}).strict(),s.z.object({expectedRevision:s.z.number().int().min(0),message:s.z.string().trim().min(1).max(2e4)}).strict(),s.z.object({code:s.z.string().trim().min(1).max(160),message:s.z.string(),instanceId:s.z.string().trim().min(1).max(160).optional(),nodeId:s.z.string().trim().min(1).max(160).optional(),route:s.z.string().trim().min(1).max(4096).optional()}).strict();const ce=s.z.object({id:s.z.string().trim().min(1).max(120),messageId:s.z.string().trim().min(1).max(240).optional(),message:s.z.string().trim().min(1).max(2e4),attachments:s.z.array($).max(6).default([]),references:X,permissionMode:G.optional(),status:s.z.enum(["queued","sending","failed"]).default("queued"),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime(),error:s.z.string().trim().max(4e3).optional()}).strict(),me=s.z.object({revision:s.z.number().int().min(0).default(0),pendingCount:s.z.number().int().min(0).default(0),items:s.z.array(ce).max(100).default([])}).strict().default({revision:0,pendingCount:0,items:[]}),de=s.z.enum(["control","realtime","adapter-snapshot","transcript-tail","transcript-scan","process-scan","app-session"]),le=s.z.object({id:s.z.string().trim().min(1).max(240),status:s.z.enum(["running","completed"]),startedAt:s.z.string().datetime().optional(),completedAt:s.z.string().datetime().optional()}).strict(),ue=s.z.object({id:s.z.string().trim().min(1).max(240),providerTurnId:s.z.string().trim().max(240).optional(),source:de.optional(),userPrompt:s.z.string().trim().optional(),userMessages:s.z.array(j).max(100).optional(),status:s.z.enum(["queued","running","waiting","completed","failed"]).default("running"),phase:C.optional(),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),contextCompactions:s.z.array(le).max(20).optional(),revision:s.z.number().int().min(0).default(0),sourcePriority:s.z.number().int().min(0).max(100).optional(),snapshotVersion:s.z.number().int().min(0).optional(),observedAt:s.z.string().datetime().optional(),startedAt:s.z.string().datetime().optional(),updatedAt:s.z.string().datetime().optional(),completedAt:s.z.string().datetime().optional()}).strict(),pe=ue.pick({id:!0,providerTurnId:!0,userPrompt:!0,userMessages:!0,status:!0,phase:!0,summary:!0,lastMessage:!0,contextCompactions:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).strict(),ge=s.z.object({id:s.z.string().trim().min(1).max(120),agent:y,creationSource:h.default("app-session"),appSessionId:s.z.string().trim().max(120).optional(),appId:s.z.string().trim().max(120).optional(),providerSessionId:s.z.string().trim().max(240).optional(),lineage:V.optional(),providerMeta:s.z.record(s.z.string(),s.z.unknown()).optional(),modelSelection:oe.optional(),reasoningEffort:re.optional(),storyId:u.optional(),appBindingKeys:s.z.array(s.z.string().trim().min(1).max(240)).max(20).optional(),actions:U.optional(),activeTurnId:s.z.string().trim().max(240).optional(),title:s.z.string().trim().max(240).optional(),cwd:s.z.string().trim().max(4096).optional(),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),userPrompt:s.z.string().trim().optional(),turns:s.z.array(ue).max(50).optional(),status:w.default("running"),phase:C.default("unknown"),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),currentTool:E.optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).default(0),subAgents:s.z.array(D).max(50).default([]),transcriptPath:s.z.string().trim().max(4096).optional(),transcriptSize:s.z.number().int().min(0).optional(),startedAt:s.z.string().datetime(),updatedAt:s.z.string().datetime(),completedAt:s.z.string().datetime().optional(),error:s.z.string().trim().max(4e3).optional(),counters:F,queue:me}).strict(),ze=ge.pick({id:!0,appBindingKeys:!0,cwd:!0,error:!0,providerMeta:!0,modelSelection:!0,reasoningEffort:!0,queue:!0,subAgents:!0}).strict(),fe=ue.pick({id:!0,providerTurnId:!0,status:!0,phase:!0,revision:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).extend({bodyRevision:s.z.string().trim().min(1).max(64)}).strict(),be=s.z.object({sessionId:s.z.string().trim().min(1).max(120),revision:s.z.string().trim().min(1).max(64),turns:s.z.array(fe).max(50)}).strict(),ye=s.z.object({sessionId:s.z.string().trim().min(1).max(120),revision:s.z.string().trim().min(1).max(64),turn:ue}).strict(),he=s.z.string().trim().min(1).max(64),xe=s.z.object({kind:s.z.literal("not-modified"),revision:he}).strict();s.z.discriminatedUnion("kind",[xe,s.z.object({kind:s.z.literal("updated"),revision:he,detail:ze}).strict()]),s.z.discriminatedUnion("kind",[xe,s.z.object({kind:s.z.literal("updated"),revision:he,index:be}).strict()]),s.z.discriminatedUnion("kind",[xe,s.z.object({kind:s.z.literal("updated"),revision:he,body:ye}).strict()]);const Ie=s.z.object({session:ge,provider:s.z.string().trim().min(1).max(80),action:s.z.enum(["send","queue","steer","interrupt","approval"]),decision:s.z.enum(["allow","deny","skip"]).optional(),turnId:s.z.string().trim().min(1).max(240).optional(),providerTurnId:s.z.string().trim().min(1).max(240).optional(),queueId:s.z.string().trim().min(1).max(120).optional()}).strict(),ve=Ie.omit({session:!0}).extend({sessionId:s.z.string().trim().min(1).max(120),messageId:s.z.string().trim().min(1).max(240).optional()}).strict();s.z.object({sessionId:s.z.string().trim().min(1).max(120),queueRevision:s.z.number().int().min(0),action:s.z.enum(["retry","remove","edit","reorder"]),queueId:s.z.string().trim().min(1).max(120).optional()}).strict(),s.z.union([ve,Ie.transform(function(e){const t=e.session.turns?.at(-1),n=(e.queueId?e.session.queue?.items.find(t=>t.id===e.queueId)?.messageId:void 0)||("send"===e.action||"queue"===e.action||"steer"===e.action?t?.userMessages?.at(-1)?.id:void 0);return ve.parse({sessionId:e.session.id,provider:e.provider,action:e.action,...e.decision?{decision:e.decision}:{},...e.turnId||e.session.activeTurnId||t?.id?{turnId:e.turnId||e.session.activeTurnId||t?.id}:{},...e.providerTurnId||t?.providerTurnId?{providerTurnId:e.providerTurnId||t?.providerTurnId}:{},...e.queueId?{queueId:e.queueId}:{},...n?{messageId:n}:{}})})]);const Ae=s.z.object({id:s.z.string().trim().min(1).max(120),agent:y,creationSource:h,providerSessionId:s.z.string().trim().min(1).max(240),lineage:V.optional(),modelSelection:oe.optional(),reasoningEffort:re.optional(),storyId:u.optional(),title:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),lastMessage:s.z.string().trim().optional(),cwd:s.z.string().trim().min(1).max(4096),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),lastActiveAt:s.z.string().datetime(),archivedAt:s.z.string().datetime()}).strict();s.z.object({schemaVersion:s.z.literal(1).default(1),items:s.z.array(Ae).max(500).default([])}).strict(),s.z.object({items:s.z.array(Ae).max(500).default([])}).strict(),s.z.object({item:Ae,turns:s.z.array(pe).max(50).default([])}).strict(),s.z.object({disposition:s.z.enum(["resumed","already-open"]),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),appSessionId:s.z.string().trim().min(1).max(120).optional(),creationSource:h}).strict();const Se=ue.omit({userMessages:!0}),ke=ge.pick({id:!0,agent:!0,creationSource:!0,appSessionId:!0,appId:!0,providerSessionId:!0,lineage:!0,providerMeta:!0,modelSelection:!0,reasoningEffort:!0,storyId:!0,appBindingKeys:!0,actions:!0,activeTurnId:!0,title:!0,cwd:!0,cwdFolderId:!0,userPrompt:!0,turns:!0,status:!0,phase:!0,summary:!0,lastMessage:!0,lastMessageItemId:!0,currentTool:!0,toolCallsSinceLastMessage:!0,subAgents:!0,queue:!0,startedAt:!0,updatedAt:!0,error:!0}).extend({turns:s.z.array(Se).max(50).optional(),detailRevision:s.z.string().trim().min(1).max(64).optional(),turnsRevision:s.z.string().trim().min(1).max(64).optional(),latestTurnRef:s.z.object({id:ue.shape.id,bodyRevision:s.z.string().trim().min(1).max(64)}).strict().optional(),turnCount:s.z.number().int().min(0).optional(),subAgentCount:s.z.number().int().min(0).optional(),lastUserMessageAt:s.z.string().datetime().optional()}).strict(),je=s.z.object({runningCount:s.z.number().int().min(0).default(0),waitingCount:s.z.number().int().min(0).default(0),staleCount:s.z.number().int().min(0).default(0),sessions:s.z.array(ke).default([]),updatedAt:s.z.string().datetime()}).strict();s.z.object({streamId:s.z.string().trim().min(1).max(240),revision:s.z.number().int().min(0),lastEventAt:s.z.string().datetime(),snapshot:je}).strict(),je.pick({runningCount:!0,waitingCount:!0,staleCount:!0,updatedAt:!0}).extend({idleCount:s.z.number().int().min(0).default(0),problemCount:s.z.number().int().min(0).default(0),revision:s.z.number().int().min(0).optional()});const we=s.z.enum(["provider-event","app-session-created","app-session-updated","app-session-deleted","discovery-scan","control-action","heartbeat-sync","startup"]),Ce=s.z.object({streamId:s.z.string().trim().min(1).max(240),instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),revision:s.z.number().int().min(0),previousRevision:s.z.number().int().min(0).optional(),traceId:s.z.string().trim().min(1).max(160),generatedAt:s.z.string().datetime(),reason:we}).strict(),Ee=s.z.object({meta:Ce,snapshot:je}).strict(),Ne=s.z.object({meta:Ce,upserted:s.z.array(ke).default([]),removed:s.z.array(s.z.string().trim().min(1).max(120)).default([])}).strict(),Re=s.z.object({meta:Ce,sessionIds:s.z.array(s.z.string().trim().min(1).max(120)).default([]),expiresAt:s.z.string().datetime()}).strict();s.z.object({instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240).optional(),turnId:s.z.string().trim().min(1).max(240),itemId:s.z.string().trim().min(1).max(240),delta:s.z.string().min(1),generatedAt:s.z.string().datetime()}).strict().omit({instanceId:!0,nodeId:!0,providerSessionId:!0}).strict(),s.z.object({instanceId:s.z.string().trim().min(1).max(160),nodeId:s.z.string().trim().min(1).max(160).optional(),sessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().min(1).max(240),item:O,generatedAt:s.z.string().datetime()}).strict(),s.z.object({streamId:s.z.string().trim().min(1).max(240),instanceId:s.z.string().trim().min(1).max(160),sinceRevision:s.z.number().int().min(0),latestRevision:s.z.number().int().min(0),earliestRetainedRevision:s.z.number().int().min(0),syncRequired:s.z.boolean().default(!1),events:s.z.array(s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("ai-session.snapshot"),payload:Ee}).strict(),s.z.object({type:s.z.literal("ai-session.patch"),payload:Ne}).strict(),s.z.object({type:s.z.literal("ai-session.removed"),payload:Re}).strict()])).default([])}).strict();const Te=s.z.object({source:de,sourcePriority:s.z.number().int().min(0).max(100).optional(),observedAt:s.z.string().datetime().optional(),snapshotVersion:s.z.number().int().min(0).optional()}).strict(),Pe=Te.extend({type:s.z.literal("snapshot"),agent:s.z.string().trim().min(1).max(80),creationSource:h.optional(),appSessionId:s.z.string().trim().max(120).optional(),appId:s.z.string().trim().max(120).optional(),providerSessionId:s.z.string().trim().max(240).optional(),lineage:V.optional(),providerMeta:s.z.record(s.z.string(),s.z.unknown()).optional(),modelSelection:oe.optional(),reasoningEffort:re.optional(),storyId:u.optional(),appBindingKeys:s.z.array(s.z.string().trim().min(1).max(240)).max(20).optional(),actions:U.optional(),title:s.z.string().trim().max(240).optional(),cwd:s.z.string().trim().max(4096).optional(),cwdFolderId:s.z.string().trim().min(1).max(120).optional(),activeTurnId:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),turns:s.z.array(ue).max(50).optional(),status:w.optional(),phase:C.optional(),summary:s.z.string().trim().max(1e3).optional(),lastMessage:s.z.string().trim().optional(),lastMessageItemId:s.z.string().trim().max(240).optional(),error:s.z.string().trim().max(4e3).optional(),currentTool:E.optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).optional(),subAgents:s.z.array(D).max(50).optional(),transcriptPath:s.z.string().trim().max(4096).optional(),transcriptSize:s.z.number().int().min(0).optional(),replaceActivity:s.z.boolean().optional()}).strict(),_e=Te.extend({type:s.z.literal("event"),sessionId:s.z.string().trim().min(1).max(120),kind:s.z.enum(["lifecycle","send-ack","turn-started","user-message","assistant-message","approval-requested","turn-completed","session-error","tool-activity","sub-agent-activity","context-compaction","model-selection","reasoning-effort"]),modelSelection:oe.optional(),reasoningEffort:re.optional(),activeTurnId:s.z.string().trim().max(240).optional(),providerTurnId:s.z.string().trim().max(240).optional(),userPrompt:s.z.string().trim().optional(),userMessage:j.optional(),text:s.z.string().optional(),itemId:s.z.string().trim().max(240).optional(),status:w.optional(),phase:C.optional(),summary:s.z.string().trim().max(1e3).optional(),error:s.z.string().trim().max(4e3).optional(),currentTool:E.nullable().optional(),toolCallsSinceLastMessage:s.z.number().int().min(0).optional(),subAgents:s.z.array(D).max(50).optional(),contextCompaction:le.optional(),counters:s.z.object({toolCalls:s.z.number().int().min(0).optional(),edits:s.z.number().int().min(0).optional(),approvals:s.z.number().int().min(0).optional()}).strict().optional()}).strict().superRefine((e,t)=>{if("model-selection"===e.kind?e.modelSelection||t.addIssue({code:"custom",path:["modelSelection"],message:"model-selection events require modelSelection"}):void 0!==e.modelSelection&&t.addIssue({code:"custom",path:["modelSelection"],message:"modelSelection is only valid for model-selection events"}),"reasoning-effort"===e.kind?e.reasoningEffort||t.addIssue({code:"custom",path:["reasoningEffort"],message:"reasoning-effort events require reasoningEffort"}):void 0!==e.reasoningEffort&&t.addIssue({code:"custom",path:["reasoningEffort"],message:"reasoningEffort is only valid for reasoning-effort events"}),"session-error"!==e.kind||e.error||t.addIssue({code:"custom",path:["error"],message:"session-error events require error"}),"context-compaction"===e.kind?e.contextCompaction||t.addIssue({code:"custom",path:["contextCompaction"],message:"context-compaction events require contextCompaction"}):void 0!==e.contextCompaction&&t.addIssue({code:"custom",path:["contextCompaction"],message:"contextCompaction is only valid for context-compaction events"}),"send-ack"!==e.kind&&"user-message"!==e.kind&&void 0!==e.userMessage&&t.addIssue({code:"custom",path:["userMessage"],message:"userMessage is only valid for send-ack and user-message events"}),"sub-agent-activity"===e.kind?e.subAgents||t.addIssue({code:"custom",path:["subAgents"],message:"sub-agent-activity events require subAgents"}):void 0!==e.subAgents&&t.addIssue({code:"custom",path:["subAgents"],message:"subAgents is only valid for sub-agent-activity events"}),"tool-activity"!==e.kind)return void 0!==e.currentTool&&t.addIssue({code:"custom",path:["currentTool"],message:"currentTool is only valid for tool-activity events"}),void(void 0!==e.toolCallsSinceLastMessage&&t.addIssue({code:"custom",path:["toolCallsSinceLastMessage"],message:"toolCallsSinceLastMessage is only valid for tool-activity events"}));"currentTool"in e||t.addIssue({code:"custom",path:["currentTool"],message:"tool-activity events require currentTool"}),void 0===e.toolCallsSinceLastMessage&&t.addIssue({code:"custom",path:["toolCallsSinceLastMessage"],message:"tool-activity events require toolCallsSinceLastMessage"})});s.z.discriminatedUnion("type",[Pe,_e]);const Oe=s.z.union([s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("interval").default("interval"),intervalMs:s.z.number().int().min(1e3)}).strict(),s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("daily"),timeOfDay:s.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:s.z.string().trim().min(1).max(120)}).strict(),s.z.object({type:s.z.literal("schedule"),scheduleKind:s.z.literal("weekly"),weekdays:s.z.array(s.z.number().int().min(0).max(6)).min(1).max(7),timeOfDay:s.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:s.z.string().trim().min(1).max(120)}).strict()]),Me=s.z.union([Oe,s.z.object({type:s.z.literal("file-change"),roots:s.z.array(s.z.string().trim().min(1).max(4096)).min(1).max(50),globs:s.z.array(s.z.string().trim().min(1).max(500)).min(1).max(100),ignore:s.z.array(s.z.string().trim().min(1).max(500)).max(100).optional(),debounceMs:s.z.number().int().min(100).max(6e4).default(1500)}).strict(),s.z.object({type:s.z.literal("ai-session"),agent:s.z.string().trim().min(1).max(80).optional(),statuses:s.z.array(s.z.enum(["running","waiting","idle","failed"])).max(20).optional(),phases:s.z.array(s.z.enum(["thinking","tool","editing","approval","responding","unknown"])).max(20).optional()}).strict()]),Le=s.z.object({promptTemplate:s.z.string().trim().min(1).max(2e4)}).strict(),De=s.z.object({cooldownMs:s.z.number().int().min(0).max(864e5).optional(),maxConcurrentRuns:s.z.number().int().min(1).max(20).default(1),whenBusy:s.z.enum(["skip","queue"]).default("skip")}).strict(),Fe=s.z.object({configHash:s.z.string().trim().min(8).max(80),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(1e3).optional(),source:Me,action:Le,policy:De.default({maxConcurrentRuns:1,whenBusy:"skip"}),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict(),Ue=s.z.object({type:s.z.literal("ai-session"),aiSessionId:s.z.string().trim().min(1).max(160)}).strict(),Ve=s.z.object({configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),origin:s.z.enum(["control-plane","controlled-instance"]).default("controlled-instance"),enabled:s.z.boolean().default(!0),target:Ue,localName:s.z.string().trim().min(1).max(160).optional(),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict(),qe=s.z.object({configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),status:s.z.enum(["idle","running","disabled","error"]).default("idle"),lastTriggeredAt:s.z.string().datetime().optional(),lastCompletedAt:s.z.string().datetime().optional(),lastSkippedAt:s.z.string().datetime().optional(),lastError:s.z.string().trim().max(4e3).optional(),runCount:s.z.number().int().min(0).default(0),skippedCount:s.z.number().int().min(0).default(0)}).strict(),$e=s.z.object({id:s.z.string().trim().min(1).max(160),configHash:s.z.string().trim().min(8).max(80),deploymentId:s.z.string().trim().min(1).max(240).optional(),instanceId:s.z.string().trim().min(1).max(160),eventType:s.z.enum(["manual","schedule","file-change","ai-session"]),status:s.z.enum(["started","completed","failed","skipped"]),target:Ue,promptPreview:s.z.string().trim().max(500),eventSummary:s.z.string().trim().max(1e3).optional(),error:s.z.string().trim().max(4e3).optional(),startedAt:s.z.string().datetime(),completedAt:s.z.string().datetime().optional()}).strict();s.z.object({schemaVersion:s.z.literal(1).default(1),configs:s.z.array(Fe).default([]),deployments:s.z.array(Ve).default([]),runtime:s.z.array(qe).default([]),recentRuns:s.z.array($e).default([])}).strict();const He=s.z.object({config:Fe,deployment:Ve,runtime:qe.optional()}).strict();s.z.object({instanceId:s.z.string().trim().min(1).max(160),sessionId:s.z.string().trim().min(1).max(160),mutation:He.optional()}).strip(),s.z.object({instanceId:s.z.string().trim().min(1).max(160),sessionId:s.z.string().trim().min(1).max(160),configHash:Fe.shape.configHash}).strip();const Be=s.z.object({instanceId:s.z.string().trim().min(1).max(160),instanceName:s.z.string().trim().min(1).max(160),deployment:Ve,runtime:qe.optional()}).strip(),Ge=$e.extend({instanceName:s.z.string().trim().min(1).max(160).optional()}).strip(),Ke=s.z.object({configHash:s.z.string().trim().min(8).max(80),config:Fe,deploymentCount:s.z.number().int().min(0),enabledCount:s.z.number().int().min(0),runningCount:s.z.number().int().min(0),errorCount:s.z.number().int().min(0),ownedByControlPlane:s.z.boolean(),controlPlaneDeploymentCount:s.z.number().int().min(0),deployments:s.z.array(Be),recentRuns:s.z.array(Ge)}).strip();s.z.object({updatedAt:s.z.string().datetime(),triggers:s.z.array(Ke)}).strip(),s.z.object({name:Fe.shape.name,description:Fe.shape.description,source:Me,action:Le,policy:De.partial().optional()}).strict(),s.z.object({scope:s.z.enum(["node","instance"]),nodeId:s.z.string().trim().min(1).max(160).optional(),instanceId:s.z.string().trim().min(1).max(160).optional(),code:s.z.string().trim().min(1).max(160),message:s.z.string().trim().min(1).max(4e3)}).strip();const We=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Proxy protocol version must use YYYY-MM-DD format."),Ye=s.z.string().trim().min(1).max(160).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Xe=s.z.string().datetime(),Je=s.z.string().trim().min(32).max(4096),Ze=s.z.string().trim().max(2048).transform((e,t)=>{try{return function(e){const t=new URL(e.trim());if("https:"!==t.protocol||t.username||t.password||"/"!==t.pathname||t.search||t.hash)throw new Error("Proxy origin must be an HTTPS origin without credentials, path, query, or fragment.");return t.origin}(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}});s.z.string().trim().min(1).max(4096).transform((e,t)=>{try{return function(e){const t=e.trim();if(!t.startsWith("/")||t.startsWith("//")||t.includes("\\")||/%25/i.test(t))throw new Error("Proxy route must be a single-encoded node-agent relative route.");const n=t.split("?",1)[0];let i,o;try{i=n.split("/").map(e=>decodeURIComponent(e))}catch{throw new Error("Proxy route contains invalid percent encoding.")}if(i.some(e=>".."===e||"."===e))throw new Error("Proxy route cannot traverse outside the node-agent API.");try{o=new URL(t,"https://node-agent.invalid")}catch{throw new Error("Proxy route is invalid.")}if("https://node-agent.invalid"!==o.origin||o.username||o.password)throw new Error("Proxy route cannot select an absolute upstream URL.");return`${o.pathname}${o.search}`}(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}});const Qe=s.z.enum(Object.values({ProtocolUnsupported:"CONTROL_PLANE_PROXY_PROTOCOL_UNSUPPORTED",InviteInvalid:"CONTROL_PLANE_PROXY_INVITE_INVALID",InviteExpired:"CONTROL_PLANE_PROXY_INVITE_EXPIRED",InviteConsumed:"CONTROL_PLANE_PROXY_INVITE_CONSUMED",InviteRevoked:"CONTROL_PLANE_PROXY_INVITE_REVOKED",TargetUnavailable:"CONTROL_PLANE_PROXY_TARGET_UNAVAILABLE",TargetMismatch:"CONTROL_PLANE_PROXY_TARGET_MISMATCH",BindingUnknown:"CONTROL_PLANE_PROXY_BINDING_UNKNOWN",BindingRevoked:"CONTROL_PLANE_PROXY_BINDING_REVOKED",BindingIdentityConflict:"CONTROL_PLANE_PROXY_BINDING_IDENTITY_CONFLICT",AuthenticationFailed:"CONTROL_PLANE_PROXY_AUTHENTICATION_FAILED",RouteInvalid:"CONTROL_PLANE_PROXY_ROUTE_INVALID",HeaderInvalid:"CONTROL_PLANE_PROXY_HEADER_INVALID",ResourceLimit:"CONTROL_PLANE_PROXY_RESOURCE_LIMIT",SnapshotRequired:"CONTROL_PLANE_PROXY_SNAPSHOT_REQUIRED",Unavailable:"CONTROL_PLANE_PROXY_UNAVAILABLE",TransportFailed:"CONTROL_PLANE_PROXY_TRANSPORT_FAILED"})),et=s.z.object({code:Qe,message:s.z.string().trim().min(1).max(2048),retryable:s.z.boolean(),details:s.z.record(s.z.string(),s.z.unknown()).optional()}).strict(),tt=s.z.enum(["active","revoked"]),nt=s.z.object({id:Ye,targetNodeId:Ye,status:tt,createdBy:Ye,expiresAt:Xe,revokedAt:Xe.optional(),createdAt:Xe,updatedAt:Xe}).strict();s.z.object({targetNodeId:Ye,expiresInSeconds:s.z.number().int().min(60).max(3600).default(600)}).strict(),s.z.object({invite:nt,token:s.z.string().trim().min(24).max(512),proxyOrigin:Ze,protocolVersion:We}).strict();const it=s.z.enum(["active","revoked"]),ot=s.z.object({id:Ye,claimId:Ye,sourceControlPlaneId:Ye,targetNodeId:Ye,bindingKeyId:Ye,status:it,revision:s.z.number().int().positive(),lastError:et.optional(),revokedAt:Xe.optional(),createdAt:Xe,updatedAt:Xe}).strict();s.z.object({protocolVersion:We,inviteToken:s.z.string().trim().min(24).max(512).optional(),claimId:Ye,sourceControlPlaneId:Ye,targetNodeId:Ye.optional(),bindingKeyId:Ye,credential:Je}).strict(),s.z.object({sourceControlPlaneId:Ye,bindingKeyId:Ye,credential:Je}).strict();const rt=s.z.object({id:Ye,name:s.z.string().trim().min(1).max(160),status:s.z.enum(["unknown","online","offline","degraded"]),health:s.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:Xe.optional(),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({})}).strict(),at=s.z.object({protocolVersion:We,binding:ot,streamId:Ye,revision:s.z.number().int().nonnegative(),observedAt:Xe,target:rt}).strict(),st=s.z.object({type:s.z.literal("control-plane-proxy.event"),protocolVersion:We,streamId:Ye,bindingId:Ye,sourceControlPlaneId:Ye,targetNodeId:Ye,revision:s.z.number().int().positive(),source:s.z.object({id:s.z.string().trim().min(1).max(512),seq:s.z.number().int().nonnegative()}).strict(),target:rt,event:s.z.object({type:s.z.string().trim().min(1).max(240),topic:s.z.string().trim().min(1).max(240),createdAt:Xe}).strict()}).strict(),ct=s.z.object({type:s.z.literal("control-plane-proxy.events.ready"),protocolVersion:We,streamId:Ye,bindingId:Ye,sourceControlPlaneId:Ye,targetNodeId:Ye,latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative()}).strict(),mt=s.z.object({type:s.z.literal("control-plane-proxy.snapshot-required"),protocolVersion:We,streamId:Ye,bindingId:Ye,sourceControlPlaneId:Ye,targetNodeId:Ye,sinceRevision:s.z.number().int().nonnegative(),latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative(),error:et}).strict();s.z.discriminatedUnion("type",[st,ct,mt]),s.z.object({protocolVersion:We,binding:ot,target:at.shape.target}).strict(),s.z.object({id:Ye,claimId:Ye,proxyOrigin:Ze,requestedName:s.z.string().trim().min(1).max(160).optional(),sourceControlPlaneId:Ye,targetNodeId:Ye.optional(),bindingKeyId:Ye,credential:Je,status:s.z.enum(["pending","compensation-required"]),createdAt:Xe,updatedAt:Xe,expiresAt:Xe}).strict().omit({credential:!0}),s.z.object({id:Ye,nodeId:Ye,proxyOrigin:Ze,proxyBindingId:Ye,targetNodeId:Ye,sourceControlPlaneId:Ye,bindingKeyId:Ye,credential:Je,createdAt:Xe,updatedAt:Xe}).strict();const dt=s.z.string().trim().min(1).max(120),lt=s.z.object({selectModelAtCreate:s.z.boolean().default(!1),selectProviderAtCreate:s.z.boolean().default(!1),switchModelWithinProvider:s.z.boolean().default(!1),switchProviderDuringSession:s.z.boolean().default(!1)}).strip().default({selectModelAtCreate:!1,selectProviderAtCreate:!1,switchModelWithinProvider:!1,switchProviderDuringSession:!1}),ut=s.z.object({selectAtCreate:s.z.boolean().default(!1),updateDuringSession:s.z.boolean().default(!1)}).strip().default({selectAtCreate:!1,updateDuringSession:!1}),pt=s.z.object({agent:dt,actions:s.z.object({create:s.z.boolean().default(!1),send:s.z.boolean().default(!1),queue:s.z.boolean().default(!1),steer:s.z.boolean().default(!1),interrupt:s.z.boolean().default(!1),archive:s.z.boolean().default(!1),delete:s.z.boolean().default(!1),fork:s.z.boolean().default(!1),approvalDecisions:s.z.array(s.z.enum(["allow","deny","skip"])).max(3).default([])}).passthrough(),timeline:s.z.object({sessionRead:s.z.boolean().default(!1),turnRead:s.z.boolean().default(!1),liveItems:s.z.boolean().default(!1)}).passthrough(),modelSelection:lt.optional(),reasoningEffort:ut.optional()}).passthrough(),gt=s.z.array(pt).max(100).default([]),zt="2026-08-27",ft=new Set(["2026-08-01","2026-08-16","2026-08-17","2026-08-20",zt]),bt=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Protocol version must use YYYY-MM-DD format."),yt=s.z.string().trim().min(1).max(120);function ht(){return{features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}}}const xt=s.z.object({sessionReadAgents:s.z.array(yt).max(100).default([]),turnReadAgents:s.z.array(yt).max(100).default([]),liveItemAgents:s.z.array(yt).max(100).default([])}).passthrough(),It=s.z.object({metadataAgents:s.z.array(yt).max(100).default([]),contentAgents:s.z.array(yt).max(100).default([]),uploadAgents:s.z.array(yt).max(100).default([]),retentionSettings:s.z.boolean().default(!1),fileSizeLimitSettings:s.z.boolean().default(!1)}).passthrough(),vt=s.z.object({appRuntime:s.z.boolean().default(!1),tty:s.z.boolean().default(!1),gui:s.z.boolean().default(!1),browser:s.z.boolean().default(!1),browserTunnel:s.z.boolean().optional(),screenshots:s.z.boolean().default(!1),logs:s.z.boolean().default(!1),aiSessionWorkspaceSelection:s.z.boolean().default(!1),aiSessionPersistenceSettings:s.z.boolean().default(!1),privateModelCatalog:s.z.boolean().optional(),gitCliCredentialBroker:s.z.boolean().optional(),gitCredentialProxy:s.z.boolean().optional(),aiSessionTimeline:xt.default(function(){return{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]}}),aiSessionConversationAttachments:It.optional(),aiSessionProviders:gt.optional()}).passthrough(),At=s.z.object({features:vt.default(function(){return{appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}})}).passthrough();function St(e){const t={features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}};if(!e||"object"!=typeof e||Array.isArray(e))return t;const n=e,i=n.features;if(!i||"object"!=typeof i||Array.isArray(i))return t;const o=i,r={appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]};for(const e of["appRuntime","tty","gui","browser","browserTunnel","screenshots","logs","aiSessionWorkspaceSelection","aiSessionPersistenceSettings","privateModelCatalog","gitCliCredentialBroker","gitCredentialProxy"]){const t=s.z.boolean().safeParse(o[e]);t.success&&(r[e]=t.data)}const a=xt.safeParse(o.aiSessionTimeline);a.success&&(r.aiSessionTimeline=a.data);const c=It.safeParse(o.aiSessionConversationAttachments);c.success&&(r.aiSessionConversationAttachments=c.data);const m=gt.safeParse(o.aiSessionProviders);return m.success&&(r.aiSessionProviders=m.data),At.parse({...n,features:{...o,...r}})}function kt(e){return St(e).features.aiSessionConversationAttachments}function jt(e){return St(e).features.aiSessionProviders}function wt(e,t){const n=kt(e);return"metadata"===t?n.metadataAgents:"content"===t?n.contentAgents:n.uploadAgents}function Ct(e){return St(e).features.aiSessionTimeline}function Et(e,t){const n=Ct(e);return"session-read"===t?n.sessionReadAgents:"turn-read"===t?n.turnReadAgents:n.liveItemAgents}const Nt=s.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Rt=s.z.string().datetime(),Tt=s.z.record(s.z.string(),s.z.string()).default({}),Pt=s.z.record(s.z.string(),s.z.string()).default({}),_t=s.z.object({encoding:s.z.enum(["utf8","base64"]),data:s.z.string()}).strict().superRefine((e,t)=>{"base64"===e.encoding&&Buffer.from(e.data,"base64").toString("base64")!==e.data&&t.addIssue({code:"custom",path:["data"],message:"Node tunnel binary body must use canonical base64 encoding."})}),Ot=/^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/,Mt=/^sha256:([a-fA-F0-9]{64})$/,Lt=/^(?:localhost|[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)(?::[1-9][0-9]{0,4})?$/,Dt=/^[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*$/;function Ft(e){const t=e.trim();if(!t||t.length>512||t.includes("://")||/\s/.test(t))throw new Error("Docker image reference must not contain a URL scheme or whitespace.");const n=t.indexOf("@");if(-1!==n&&n!==t.lastIndexOf("@"))throw new Error("Docker image reference contains more than one digest separator.");const i=-1===n?void 0:t.slice(n+1),o=-1===n?t:t.slice(0,n),r=i?Mt.exec(i):void 0;if(i&&!r)throw new Error("Docker image digest must use sha256 followed by 64 hexadecimal characters.");const a=o.lastIndexOf("/"),s=o.lastIndexOf(":"),c=s>a,m=c?o.slice(s+1):void 0,d=c?o.slice(0,s):o;if(m&&!Ot.test(m))throw new Error("Docker image tag is invalid.");if(!m&&!r)throw new Error("Docker image reference must include an explicit tag or sha256 digest.");const l=d.split("/");if(!l.length||l.some(e=>!e))throw new Error("Docker image repository path is invalid.");const u=l.length>1&&(l[0].includes(".")||l[0].includes(":")||"localhost"===l[0]),p=u?l.slice(1):l;if(u&&!Lt.test(l[0].toLowerCase()))throw new Error("Docker image registry host or port is invalid.");if(!p.length||p.some(e=>!Dt.test(e)))throw new Error("Docker image repository names must be lowercase and use valid separators.");const g=l.map((e,t)=>u&&0===t?e.toLowerCase():e).join("/"),z=r?`sha256:${r[1].toLowerCase()}`:void 0;return`${g}${m?`:${m}`:""}${z?`@${z}`:""}`}function Ut(e){const t=Ft(e),n=t.indexOf("@"),i=-1===n?void 0:t.slice(n+1),o=-1===n?t:t.slice(0,n),r=o.lastIndexOf("/"),a=o.lastIndexOf(":"),s=a>r;return{reference:t,repository:s?o.slice(0,a):o,tag:s?o.slice(a+1):void 0,digest:i}}const Vt=s.z.string().trim().min(1).max(512).transform((e,t)=>{try{return Ft(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}}),qt=s.z.string().trim().transform((e,t)=>{const n=Mt.exec(e);return n?`sha256:${n[1].toLowerCase()}`:(t.addIssue({code:"custom",message:"Docker image digest must use sha256 followed by 64 hexadecimal characters."}),s.z.NEVER)}),$t=s.z.object({modelEntityIds:s.z.array(Nt).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Nt.nullable().optional(),claudeModelHash:Nt.nullable().optional(),opencodeModelHash:Nt.nullable().optional()}).strict().default({}),Ht=s.z.object({imageId:Nt,tag:s.z.string().trim().min(1).max(128).regex(Ot).optional()}).strict(),Bt=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("image"),imageSelection:Ht}).strict(),s.z.object({type:s.z.literal("template"),environmentTemplateId:Nt}).strict()]),Gt=s.z.enum(["creating","ready","failed","deleting"]),Kt=s.z.enum(["linux","darwin","win32","freebsd","openbsd","aix","sunos","unknown"]),Wt=s.z.enum(["x64","arm64","arm","ia32","ppc64","s390x","riscv64","unknown"]),Yt=s.z.object({code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2048),phase:s.z.enum(["validate","commit","inspect","security-check","persist","delete","recovery"]).optional()}).strict(),Xt=s.z.object({templateId:Nt,nodeId:Nt,imageId:qt,name:s.z.string().trim().min(1).max(160),platform:Kt,architecture:Wt}).strict(),Jt=s.z.enum(["data","agent-home","workspace"]),Zt=s.z.object({deleteVolumes:s.z.boolean()}).strict(),Qt=s.z.object({role:Jt,name:s.z.string().trim().min(1).max(255),mountPath:s.z.string().trim().startsWith("/").max(4096),status:s.z.enum(["deleted","retained","missing","failed"]),error:s.z.object({code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2048)}).strict().optional()}).strict(),en=s.z.object({instanceId:Nt,containerDeleted:s.z.boolean(),completed:s.z.boolean(),deletedVolumes:s.z.array(Qt),retainedVolumes:s.z.array(Qt),volumeResults:s.z.array(Qt)}).strict(),tn={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"};function nn(e,t){if(e&&"object"==typeof e&&!Array.isArray(e)){const t=e;return{imageId:"string"==typeof t.imageId&&tn[t.imageId]||t.imageId,..."string"==typeof t.tag?{tag:t.tag}:{}}}if("string"==typeof t)return{imageId:tn[t]||t}}const on=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(120),kind:s.z.enum(["tty","gui","web"]),source:s.z.enum(["builtin","custom"]),availability:s.z.enum(["available","missing-dependency"]),capabilities:s.z.object({automation:s.z.enum(["cdp"]).optional(),supportsCwdSelection:s.z.boolean().default(!1)}).strict().default({supportsCwdSelection:!1}),diagnosticCode:s.z.enum(["APP_EXECUTABLE_NOT_FOUND"]).optional()}).strict(),rn=s.z.object({code:s.z.enum(["APP_CATALOG_INVALID"]),message:s.z.string().trim().min(1).max(500)}).strict(),an=s.z.object({items:s.z.array(on).max(256),observedAt:Rt,issues:s.z.array(rn).max(32).default([])}).strict(),sn=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(160),sourceInstanceId:Nt,nodeId:Nt,imageId:qt.optional(),internalTag:s.z.string().trim().min(1).max(512).optional(),platform:Kt.optional(),architecture:Wt.optional(),sizeBytes:s.z.number().int().nonnegative().optional(),status:Gt,error:Yt.optional(),createdAt:Rt,updatedAt:Rt}).strict().superRefine((e,t)=>{if("ready"===e.status)for(const n of["imageId","internalTag","platform","architecture","sizeBytes"])void 0===e[n]&&t.addIssue({code:"custom",path:[n],message:`Ready environment template requires ${n}.`});"failed"!==e.status||e.error||t.addIssue({code:"custom",path:["error"],message:"Failed environment template requires an error diagnostic."})}),cn=s.z.enum(["apt","dnf","brew","npm"]),mn=s.z.enum(["user","passwordless-sudo","root"]),dn=s.z.object({platform:Kt,arch:Wt,installers:s.z.array(cn).max(8),privilege:mn,installerAccess:s.z.object({npmGlobalWritable:s.z.boolean().optional()}).strict().optional()}).strict(),ln=s.z.enum(["installed","not-installed","broken","unsupported"]),un=s.z.enum(["recipe","bundled","external","none"]),pn=s.z.object({code:s.z.enum(["BUNDLED","EXTERNALLY_MANAGED","ALREADY_INSTALLED","NOT_INSTALLED","UNSUPPORTED_PLATFORM","INSTALLER_UNAVAILABLE","INSTALLER_NOT_WRITABLE","INSUFFICIENT_PRIVILEGE","OPERATION_IN_PROGRESS"]),message:s.z.string().trim().min(1).max(500)}).strict(),gn=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(120),kind:s.z.enum(["tty","gui","web"]),description:s.z.string().trim().max(500).optional(),state:ln,managementSource:un,version:s.z.string().trim().max(120).optional(),canInstall:s.z.boolean(),canUninstall:s.z.boolean(),installReason:pn.optional(),uninstallReason:pn.optional(),activeJobId:Nt.optional()}).strict(),zn=s.z.enum(["install","uninstall"]),fn=s.z.enum(["queued","running","succeeded","failed","cancelled","interrupted"]),bn=s.z.object({current:s.z.number().finite().nonnegative().optional(),total:s.z.number().finite().positive().optional(),unit:s.z.string().trim().min(1).max(40).optional()}).strict().refine(e=>void 0===e.total||void 0===e.current||e.current<=e.total,{message:"Progress current must not exceed total.",path:["current"]}),yn=s.z.object({executable:s.z.string().trim().min(1).max(4096),args:s.z.array(s.z.string().max(4096)).max(128)}).strict(),hn=s.z.object({code:s.z.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),message:s.z.string().trim().min(1).max(4096),retryable:s.z.boolean(),sessionIds:s.z.array(Nt).max(64).optional()}).strict(),xn=s.z.object({id:Nt,requestId:Nt.optional(),appId:Nt,operation:zn,state:fn,phase:s.z.string().trim().min(1).max(120).optional(),progress:bn.optional(),command:yn.optional(),logTail:s.z.string().max(32768).optional(),logTruncated:s.z.boolean().optional(),error:hn.optional(),requestedAt:Rt,startedAt:Rt.optional(),finishedAt:Rt.optional(),updatedAt:Rt}).strict(),In=s.z.object({streamId:Nt,sequence:s.z.number().int().nonnegative(),capabilities:dn,apps:s.z.array(gn).max(256),activeJobs:s.z.array(xn).max(256),recentJobs:s.z.array(xn).max(256),observedAt:Rt}).strict(),vn=s.z.object({requestId:Nt.optional()}).strict(),An=s.z.object({job:xn}).strict(),Sn=s.z.object({type:s.z.literal("app-management"),streamId:Nt,sequence:s.z.number().int().nonnegative(),observedAt:Rt,job:xn.optional(),snapshot:In.optional()}).strict().refine(e=>void 0!==e.job||void 0!==e.snapshot,{message:"An app management event requires a job or snapshot."}),kn=s.z.object({component:s.z.enum(["control-plane","node-agent","controlled-instance"]),packageName:s.z.string().trim().max(160).optional(),packageVersion:s.z.string().trim().max(80).optional(),protocolVersion:bt.optional(),buildId:s.z.string().trim().max(160).optional(),builtAt:s.z.string().trim().max(120).optional(),gitCommit:s.z.string().trim().max(120).optional(),imageRef:s.z.string().trim().max(512).optional(),imageDigest:s.z.string().trim().max(240).optional()}).strict(),jn=s.z.object({data:s.z.object({ok:s.z.literal(!0),role:s.z.literal("control-plane"),protocolVersion:bt,build:kn.extend({component:s.z.literal("control-plane"),packageVersion:s.z.string().trim().min(1).max(80)}).loose(),serverTime:Rt}).loose()}).loose(),wn=s.z.enum(["stable","beta","alpha"]),Cn=s.z.object({packageName:s.z.literal("@task-handoff/controlled-instance"),version:s.z.string().trim().min(1).max(80),platform:s.z.string().trim().min(1).max(40),arch:s.z.string().trim().min(1).max(40),formatVersion:s.z.number().int().positive(),launcherAbi:s.z.number().int().positive(),entrypoint:s.z.string().trim().min(1).max(512),sha256:s.z.string().regex(/^[a-f0-9]{64}$/)}).strict(),En=s.z.object({code:s.z.enum(["INSTANCE_RUNTIME_VERSION_MISMATCH","INSTANCE_RUNTIME_ARTIFACT_UNAVAILABLE","INSTANCE_RUNTIME_ARTIFACT_INVALID","INSTANCE_RUNTIME_INSTALL_FAILED","INSTANCE_RUNTIME_RESTART_FAILED","INSTANCE_RUNTIME_VERIFICATION_FAILED","INSTANCE_BASE_RUNTIME_INCOMPATIBLE","NODE_UPDATE_PREFLIGHT_FAILED","NODE_UPDATE_FAILED","LEGACY_INSTANCE_UPDATE_RETIRED"]),message:s.z.string().trim().min(1).max(4096),expectedVersion:s.z.string().trim().min(1).max(80).optional(),actualVersion:s.z.string().trim().min(1).max(80).optional(),retryable:s.z.boolean().default(!1)}).strict(),Nn=s.z.object({desiredVersion:s.z.string().trim().min(1).max(80),actualVersion:s.z.string().trim().min(1).max(80).optional(),phase:s.z.enum(["pending","draining","installing","restarting","verifying","matched","failed"]),attempt:s.z.number().int().nonnegative().default(0),lastAttemptAt:Rt.optional(),matchedAt:Rt.optional(),error:En.optional()}).strict(),Rn=s.z.object({runningInstanceCount:s.z.number().int().nonnegative(),stoppedInstanceCount:s.z.number().int().nonnegative(),activeInstanceCount:s.z.number().int().nonnegative(),restartInstanceCount:s.z.number().int().nonnegative(),runningInstanceIds:s.z.array(Nt).max(1024).default([]),stoppedInstanceIds:s.z.array(Nt).max(1024).default([]),activeInstanceIds:s.z.array(Nt).max(1024).default([])}).strict(),Tn=s.z.object({phase:s.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),desiredVersion:s.z.string().trim().min(1).max(80),nodeVersion:s.z.string().trim().min(1).max(80).optional(),expectedInstanceIds:s.z.array(Nt).max(1024).default([]),expectedInstanceCount:s.z.number().int().nonnegative(),matchedInstanceCount:s.z.number().int().nonnegative(),pendingInstanceCount:s.z.number().int().nonnegative(),failedInstanceCount:s.z.number().int().nonnegative(),deferredInstanceCount:s.z.number().int().nonnegative().default(0)}).strict(),Pn=s.z.object({channel:wn.default("stable")}).strict(),_n=s.z.object({source:s.z.literal("npm"),channel:wn,currentVersion:s.z.string().trim().max(240).optional(),availableVersion:s.z.string().trim().min(1).max(240),artifactRef:s.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:s.z.array(Cn).default([]),impact:Rn,updateAvailable:s.z.boolean(),supported:s.z.boolean().default(!0),reason:s.z.string().trim().max(2048).optional(),checkedAt:Rt,preflightToken:s.z.string().trim().min(16).max(240).optional()}).strict(),On=s.z.object({id:Nt,nodeId:Nt,source:s.z.literal("npm"),channel:wn,fromVersion:s.z.string().trim().max(240).optional(),toVersion:s.z.string().trim().min(1).max(240),artifactRef:s.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:s.z.array(Cn).default([]),impact:Rn,rollout:Tn,status:s.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),error:En.optional(),startedAt:Rt.optional(),completedAt:Rt.optional(),createdAt:Rt,updatedAt:Rt}).strict(),Mn=s.z.object({channel:wn,targetVersion:s.z.string().trim().min(1).max(240),preflightToken:s.z.string().trim().min(16).max(240)}).strict(),Ln=s.z.object({type:s.z.enum(["branch","tag"]),name:s.z.string().trim().min(1).max(240)}).strict(),Dn=s.z.object({type:s.z.literal("commit"),commit:s.z.string().trim().regex(/^[0-9a-fA-F]{4,64}$/,"commit must be a hexadecimal Git object id")}).strict(),Fn=s.z.discriminatedUnion("type",[Ln,Dn]),Un=s.z.object({type:s.z.enum(["none","ssh-key","https-token"]).default("none"),secretId:s.z.string().trim().min(1).max(120).optional()}).strict(),Vn=s.z.object({depth:s.z.number().int().positive().max(1e5).optional(),submodules:s.z.boolean().default(!1),lfs:s.z.boolean().default(!1),subdirectory:s.z.string().trim().max(240).refine(e=>!e.startsWith("/")&&!e.split("/").some(e=>".."===e),"subdirectory must be a relative path within the repository").transform(e=>e.split("/").filter(e=>e&&"."!==e).join("/")).default("")}).strict(),qn=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(160),url:s.z.string().trim().min(1).max(2048),provider:s.z.string().trim().max(80).optional(),ref:Fn.default({type:"branch",name:"main"}),auth:Un.default({type:"none"}),clone:Vn.default({submodules:!1,lfs:!1,subdirectory:""}),defaultImageSelection:Ht.optional(),labels:Tt,createdAt:Rt,updatedAt:Rt}).strict(),$n=s.z.object({id:Nt,nodeId:Nt,name:s.z.string().trim().min(1).max(160),path:s.z.string().trim().min(1).max(4096),defaultImageSelection:Ht.optional(),labels:Tt,createdAt:Rt,updatedAt:Rt}).strict(),Hn=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("git-repository"),repositoryId:Nt.optional(),url:s.z.string().trim().min(1).max(2048),provider:s.z.string().trim().max(80).optional(),ref:Fn.default({type:"branch",name:"main"}),auth:Un.default({type:"none"}),clone:Vn.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),s.z.object({type:s.z.literal("git-template"),url:s.z.string().trim().min(1).max(2048),templateId:s.z.string().trim().min(1).max(120).optional(),ref:Fn.default({type:"branch",name:"main"}),auth:Un.default({type:"none"}),clone:Vn.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),s.z.object({type:s.z.literal("local-folder"),localFolderId:Nt.optional(),path:s.z.string().trim().min(1).max(4096),ownerNodeId:Nt.optional()}).strict()]);function Bn(e){const t=Hn.parse(e);return"local-folder"===t.type?t:Hn.parse({...t,auth:{type:"none"}})}const Gn=Bn,Kn=s.z.object({mode:s.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]),path:s.z.string().trim().min(1).max(4096).default("/workspace"),volumeName:s.z.string().trim().max(240).optional(),readOnly:s.z.boolean().default(!1)}).strict(),Wn=s.z.enum(["codex","claude","opencode"]),Yn=s.z.enum(["openai-responses","openai-chat-completions","anthropic-messages"]),Xn=s.z.object({name:s.z.string().trim().min(1).max(240),order:s.z.number().int().min(0).max(1e6).default(0)}).strict(),Jn=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(160),source:Hn,defaultImageSelection:Ht.optional(),defaultNodeId:Nt.optional(),workspacePolicy:Kn,labels:Tt,createdAt:Rt,updatedAt:Rt}).strict(),Zn=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(160),endpoint:s.z.string().trim().min(1).max(2048),key:s.z.string().trim().min(1).max(4096),model:s.z.string().trim().min(1).max(240),modelNames:s.z.array(Xn).max(256).default([]),protocols:s.z.array(Yn).max(3).default([]),app:Wn,enabled:s.z.boolean().default(!0),order:s.z.number().int().min(0).max(1e6).default(0),labels:Tt,createdAt:Rt,updatedAt:Rt}).strict(),Qn=Zn,ei=Zn.omit({key:!0}).extend({keyPreview:s.z.string().trim().min(1).max(160),keySet:s.z.boolean()}).strict(),ti=ei.extend({referenceCount:s.z.number().int().min(0)}).strict(),ni=s.z.object({instanceId:Nt,modelEntityIds:s.z.array(Nt).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Nt.optional(),claudeModelHash:Nt.optional(),opencodeModelHash:Nt.optional(),updatedAt:Rt}).strict().transform(e=>({...e,modelEntityIds:e.modelEntityIds?.length?e.modelEntityIds:[...new Set([e.codexModelHash,e.claudeModelHash,e.opencodeModelHash].filter(e=>Boolean(e)))]})),ii=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("control-plane"),name:Zn.shape.name,enabled:Zn.shape.enabled,order:Zn.shape.order}).strict(),s.z.object({type:s.z.literal("node"),nodeId:Nt,name:Zn.shape.name,enabled:Zn.shape.enabled,order:Zn.shape.order,referenceCount:s.z.number().int().min(0)}).strict()]),oi=s.z.object({id:Nt,model:ei,locations:s.z.array(ii).min(1),referenceCount:s.z.number().int().min(0).default(0)}).strict(),ri=s.z.object({nodeId:Nt,code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2e3)}).strict(),ai=s.z.object({models:s.z.array(oi),nodeDiagnostics:s.z.array(ri).default([]),updatedAt:Rt}).strict(),si=Zn.omit({id:!0,createdAt:!0,updatedAt:!0}).strict(),ci=si.partial().strict(),mi=Zn,di=s.z.object({modelSelection:$t,modelEntityIds:s.z.array(Nt).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Nt.optional(),claudeModelHash:Nt.optional(),opencodeModelHash:Nt.optional()}).strict().transform(e=>({...e,modelEntityIds:e.modelEntityIds||e.modelSelection.modelEntityIds||[...new Set([e.codexModelHash,e.claudeModelHash,e.opencodeModelHash].filter(e=>Boolean(e)))]})),li=s.z.enum(["market","custom"]),ui=s.z.enum(["active","deprecated","yanked"]),pi=s.z.discriminatedUnion("kind",[s.z.object({kind:s.z.literal("builtin"),key:s.z.string().trim().min(1).max(120)}).strict(),s.z.object({kind:s.z.literal("remote"),url:s.z.string().trim().url().max(2048),mediaType:s.z.enum(["image/png","image/jpeg","image/webp"]).optional(),digest:qt.optional()}).strict()]),gi=s.z.array(s.z.string().trim().min(1).max(80)).default([]),zi=s.z.array(s.z.string().trim().min(1).max(120)).default([]),fi=s.z.record(s.z.string().trim().min(2).max(35),s.z.string().trim().min(1).max(4096)),bi=s.z.object({os:s.z.string().trim().min(1).max(40),architecture:s.z.string().trim().min(1).max(40),digest:qt.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional()}).strict(),yi=s.z.object({name:s.z.string().trim().min(1).max(128).regex(Ot),version:s.z.string().trim().min(1).max(160).optional(),reference:Vt,manifestDigest:qt.optional(),publishedAt:Rt.optional(),platforms:s.z.array(bi).default([]),status:ui.default("active")}).strict(),hi=s.z.object({id:Nt,publisher:s.z.string().trim().min(1).max(160),slug:s.z.string().trim().min(1).max(160),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().min(1).max(4096),localizedDescriptions:fi.optional(),cover:pi.optional(),repository:s.z.string().trim().min(1).max(512),defaultTag:s.z.string().trim().min(1).max(128).regex(Ot),tags:s.z.array(yi).min(1),capabilities:gi,optionalApps:zi,defaultEnv:Pt,labels:Tt,status:ui.default("active")}).strict().superRefine((e,t)=>{e.tags.some(t=>t.name===e.defaultTag)||t.addIssue({code:"custom",path:["defaultTag"],message:"Market defaultTag must identify one of the image tags."})}),xi=s.z.object({protocolVersion:bt,catalogId:Nt,revision:s.z.string().trim().min(1).max(240),source:s.z.enum(["embedded","remote","cache"]),generatedAt:Rt,expiresAt:Rt.optional(),items:s.z.array(hi)}).strict(),Ii=s.z.object({source:s.z.enum(["embedded","remote","cache"]),state:s.z.enum(["ready","refreshing","stale","failed"]),revision:s.z.string().trim().min(1).max(240),updatedAt:Rt,error:s.z.string().trim().max(4096).optional()}).strict(),vi=s.z.object({id:Nt,origin:s.z.literal("custom"),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:fi.optional(),cover:pi.optional(),reference:Vt,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(Ot).optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:gi,optionalApps:zi,defaultEnv:Pt,labels:Tt,createdAt:Rt,updatedAt:Rt}).strict(),Ai=vi,Si=s.z.object({name:s.z.string().trim().min(1).max(128).regex(Ot),version:s.z.string().trim().min(1).max(160).optional(),reference:Vt,manifestDigest:qt.optional(),status:ui}).strict(),ki=s.z.object({id:Nt,origin:li,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:fi.optional(),cover:pi,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(Ot).optional(),availableTags:s.z.array(Si),reference:Vt,digest:qt.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional(),capabilities:gi,optionalApps:zi,defaultEnv:Pt,labels:Tt,readOnly:s.z.boolean(),lifecycleStatus:ui.optional(),market:s.z.object({catalogId:Nt,catalogRevision:s.z.string().trim().min(1).max(240),publisher:s.z.string().trim().min(1).max(160),version:s.z.string().trim().min(1).max(160).optional()}).strict().optional()}).strict(),ji=s.z.object({id:Nt,origin:li,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:fi.optional(),cover:pi.optional(),repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(Ot).optional(),requestedReference:Vt,resolvedDigest:qt.optional(),resolvedReference:Vt.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:gi,optionalApps:zi,defaultEnv:Pt,labels:Tt,market:s.z.object({catalogId:Nt,catalogRevision:s.z.string().trim().min(1).max(240),publisher:s.z.string().trim().min(1).max(160),version:s.z.string().trim().min(1).max(160).optional()}).strict().optional(),createdAt:Rt,updatedAt:Rt}).strict(),wi=s.z.object({phase:s.z.enum(["checking-image","pulling-image","resolving-image","ready","failed"]),requestedReference:Vt,generation:s.z.number().int().nonnegative().default(0),error:s.z.string().trim().max(4096).optional(),startedAt:Rt,updatedAt:Rt}).strict(),Ci=s.z.object({instanceId:Nt,generation:s.z.number().int().nonnegative(),requestedReference:Vt,sequence:s.z.number().int().nonnegative(),observedAt:Rt}).strict(),Ei=Ci.extend({data:s.z.string().min(1).max(65536),replay:s.z.boolean().optional()}).strict(),Ni=Ci.extend({outcome:s.z.enum(["succeeded","failed"])}).strict(),Ri=Ci.extend({status:s.z.enum(["connecting","pulling","extracting","complete","failed"]),layers:s.z.object({total:s.z.number().int().nonnegative(),completed:s.z.number().int().nonnegative(),downloaded:s.z.number().int().nonnegative(),downloading:s.z.number().int().nonnegative(),extracting:s.z.number().int().nonnegative()}).strict(),bytes:s.z.object({current:s.z.number().finite().nonnegative(),total:s.z.number().finite().positive()}).strict().optional(),percent:s.z.number().finite().min(0).max(100).optional(),message:s.z.string().trim().min(1).max(500),terminalTail:s.z.string().max(262144).optional(),terminalTruncated:s.z.boolean().optional()}).strict();function Ti(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","origin","name","description","localizedDescriptions","cover","reference","repository","tag","image","registry","pullPolicy","capabilities","optionalApps","defaultEnv","labels","createdAt","updatedAt"]);for(const e of Object.keys(n))i.has(e)||t?.({imageId:"string"==typeof n.id?n.id:void 0,field:e});const o="string"==typeof n.id?n.id:void 0,r="string"==typeof n.image?n.image:void 0;void 0!==r&&t?.({imageId:o,field:"image"}),Object.prototype.hasOwnProperty.call(n,"registry")&&t?.({imageId:o,field:"registry"});let a,s="string"==typeof n.reference?n.reference:r;if(s)try{s=Ft(s)}catch{if(!s.includes("@")&&s.lastIndexOf(":")<=s.lastIndexOf("/"))try{s=Ft(`${s}:latest`),t?.({imageId:o,field:"reference:implicit-latest"})}catch{}}try{a=s?Ut(s):void 0}catch{}return{id:n.id,origin:"custom",name:n.name,description:n.description,localizedDescriptions:n.localizedDescriptions,cover:Ao(n.cover,["kind","key","url","mediaType","digest"]),reference:a?.reference??s,repository:a?.repository??n.repository,tag:a?.tag??n.tag,pullPolicy:n.pullPolicy??"if-not-present",capabilities:n.capabilities,optionalApps:n.optionalApps,defaultEnv:n.defaultEnv,labels:n.labels,createdAt:n.createdAt,updatedAt:n.updatedAt}}const Pi=s.z.discriminatedUnion("kind",[s.z.object({kind:s.z.literal("direct")}).strict(),s.z.object({kind:s.z.literal("control-plane-proxy"),proxyId:Nt,proxyBindingId:Nt,targetNodeId:Nt}).strict()]),_i=s.z.object({pingRttMs:s.z.number().nonnegative().optional(),pingRttP95Ms:s.z.number().nonnegative().optional(),consecutiveReconnects:s.z.number().int().nonnegative(),nextRetryAt:Rt.optional()}).strict(),Oi=s.z.object({nodeId:Nt,inviteId:Nt.optional()}).strict(),Mi=s.z.discriminatedUnion("status",[s.z.object({id:Nt,status:s.z.literal("pending")}).strict(),s.z.object({id:Nt,status:s.z.literal("completed"),nodeId:Nt}).strict()]),Li=s.z.object({reachability:s.z.enum(["unknown","reachable","unreachable"]),bindingStatus:s.z.enum(["unknown","active","revoked"]),bindingRevision:s.z.number().int().positive().optional(),streamId:s.z.string().trim().min(1).max(160).optional(),revision:s.z.number().int().nonnegative().optional(),observedAt:Rt.optional(),target:rt.optional(),lastError:et.optional(),updatedAt:Rt}).strict(),Di=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(160),connectionMode:s.z.enum(["local-ipc","local-loopback","direct-http","reverse-wss","control-plane-proxy"]).default("direct-http"),connectionPath:Pi.default({kind:"direct"}),connectionEnabled:s.z.boolean().default(!0),auth:s.z.object({mode:s.z.enum(["local-static-key","paired-hmac","proxy-binding"]).default("local-static-key"),keyId:Nt.optional(),secret:s.z.string().trim().max(4096).optional(),pairedAt:Rt.optional(),pairing:s.z.object({status:s.z.enum(["pending","paired","expired"]).default("pending"),joinToken:s.z.string().trim().max(4096).optional(),expiresAt:Rt.optional()}).strict().optional()}).strict().default({mode:"local-static-key"}),endpoint:s.z.string().trim().max(2048).optional(),controlEndpoint:s.z.string().trim().max(2048).optional(),containerEndpoint:s.z.string().trim().max(2048).optional(),publicWebBase:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","online","offline","degraded"]).default("unknown"),health:s.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({}),proxyState:Li.optional(),appInventory:an.optional(),labels:Tt,lastSeenAt:Rt.optional(),createdAt:Rt,updatedAt:Rt}).strict().superRefine((e,t)=>{"control-plane-proxy"===e.connectionPath.kind&&"control-plane-proxy"!==e.connectionMode&&t.addIssue({code:"custom",path:["connectionPath"],message:"Control-plane proxy paths require control-plane-proxy connection mode."}),"control-plane-proxy"===e.connectionMode&&"control-plane-proxy"!==e.connectionPath.kind&&t.addIssue({code:"custom",path:["connectionPath"],message:"Control-plane proxy nodes require a control-plane-proxy connection path."})}),Fi=s.z.object({nodeId:Nt,status:s.z.enum(["unknown","online","offline","degraded"]),health:s.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:Rt.nullable(),connectionPhase:s.z.enum(["connecting","handshaking","healthy","reconnecting","suspect","offline"]).nullable(),connectionDiagnostics:_i.nullable(),proxyState:Li.nullable()}).strict(),Ui=s.z.object({id:Nt,nodeId:Nt,name:s.z.string().trim().min(1).max(160),type:s.z.enum(["docker","kubernetes","local"]),status:s.z.enum(["unknown","online","offline","degraded"]).default("unknown"),accessStrategy:s.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({}),labels:Tt,createdAt:Rt,updatedAt:Rt}).strict(),Vi=s.z.object({instanceId:Nt,runtimeKind:s.z.literal("docker"),state:s.z.enum(["pending","available","stopped","unavailable"]),sampledAt:Rt,cpu:s.z.object({usagePercent:s.z.number().nonnegative()}).strict().optional(),memory:s.z.object({usageBytes:s.z.number().nonnegative(),limitBytes:s.z.number().nonnegative().optional(),usagePercent:s.z.number().nonnegative().optional()}).strict().optional(),network:s.z.object({rxBytes:s.z.number().nonnegative(),txBytes:s.z.number().nonnegative()}).strict().optional(),blockIo:s.z.object({readBytes:s.z.number().nonnegative(),writeBytes:s.z.number().nonnegative()}).strict().optional(),pids:s.z.number().int().nonnegative().optional(),error:s.z.string().trim().max(2048).optional()}).strict(),qi=s.z.object({registry:s.z.boolean().default(!1),runtimeBroker:s.z.boolean().default(!1),workspaceProvisioning:s.z.object({docker:s.z.boolean().default(!1),kubernetes:s.z.boolean().default(!1),local:s.z.boolean().default(!1)}).strip().default({docker:!1,kubernetes:!1,local:!1})}).strip(),$i=s.z.object({multiEntityAssignment:s.z.boolean().default(!1),privateModelCatalog:s.z.boolean().default(!1)}).strip(),Hi=s.z.object({enabled:s.z.boolean().default(!1),agentTools:s.z.boolean().default(!1),maxFileBytes:s.z.number().int().positive().default(33554432),maxBatchPaths:s.z.number().int().min(1).max(100).default(20)}).strip(),Bi=s.z.object({modelEndpointProbe:s.z.boolean().optional(),aiSessionHistoryLimit:s.z.boolean().optional(),aiSessionAttachmentRetention:s.z.boolean().optional(),aiSessionFileAttachmentLimit:s.z.boolean().optional(),folderPlaces:s.z.boolean().optional(),localFolderNameUpdate:s.z.boolean().optional(),managedGitCredentials:qi.optional(),managedModels:$i.optional(),stories:Hi.optional()}).strip();function Gi(e){const t=Bi.safeParse(e),n=t.success?t.data:{};return{...n,managedGitCredentials:qi.parse(n.managedGitCredentials||{}),managedModels:$i.parse(n.managedModels||{}),stories:Hi.parse(n.stories||{})}}const Ki=s.z.object({status:s.z.enum(["healthy","congested","recovering"]),activeOutputs:s.z.number().int().nonnegative(),bufferedBytes:s.z.number().int().nonnegative(),peakBufferedBytes:s.z.number().int().nonnegative(),coalescedEvents:s.z.number().int().nonnegative(),oversizedEvents:s.z.number().int().nonnegative().optional(),peakEventBytes:s.z.number().int().nonnegative().optional(),congestedSince:Rt.optional(),lastCongestedAt:Rt.optional()}).strip(),Wi=s.z.object({ok:s.z.boolean().optional(),role:s.z.string().optional(),nodeId:Nt.optional(),platform:Kt.optional(),arch:Wt.optional(),protocolVersion:bt.optional(),capabilities:Bi.optional(),build:kn.strip().optional(),process:s.z.object({pid:s.z.number().int().positive(),startIdentity:s.z.string().trim().min(1).optional()}).strip().optional(),listener:s.z.object({host:s.z.string().trim().min(1),port:s.z.number().int().min(1).max(65535)}).strip().optional(),instanceProxy:s.z.object({requests:s.z.number().int().nonnegative(),active:s.z.number().int().nonnegative(),completed:s.z.number().int().nonnegative(),aborted:s.z.number().int().nonnegative(),limitRejected:s.z.number().int().nonnegative(),responseBytes:s.z.number().nonnegative(),totalDurationMs:s.z.number().nonnegative(),maxResponseBytes:s.z.number().int().nonnegative()}).partial().strip().optional(),eventTransport:Ki.optional(),serverTime:Rt.optional()}).strip(),Yi=s.z.object({bindScope:s.z.enum(["loopback","all-ipv4"]),port:s.z.number().int().min(1).max(65535)}).strict(),Xi=Yi.extend({host:s.z.enum(["127.0.0.1","0.0.0.0"]),status:s.z.enum(["listening","error"]),source:s.z.enum(["bootstrap","persisted"]),error:s.z.string().trim().max(2048).optional()}).strict(),Ji=Yi,Zi=s.z.object({nodeId:Nt,joinToken:s.z.string().trim().min(1),expiresAt:Rt}).passthrough(),Qi=s.z.object({nodeId:Nt,keyId:Nt,secret:s.z.string().regex(/^[A-Za-z0-9_-]{32,128}$/),pairedAt:Rt}).strict(),eo=s.z.object({id:Nt,keyId:Nt,name:s.z.string().trim().min(1).max(160).optional(),pairedAt:Rt,updatedAt:Rt,current:s.z.boolean()}).passthrough(),to=s.z.object({keyId:Nt,revoked:s.z.literal(!0),revokedAt:Rt}).strict(),no=s.z.object({id:Nt,pairingKeyId:Nt,url:s.z.string().trim().min(1).max(2048),name:s.z.string().trim().min(1).max(160).optional(),enabled:s.z.boolean(),createdAt:Rt,updatedAt:Rt,status:s.z.enum(["disabled","connecting","connected","reconnecting","failed"]),pingRttMs:s.z.number().nonnegative().optional(),pingRttP95Ms:s.z.number().nonnegative().optional(),consecutiveReconnects:s.z.number().int().nonnegative().optional(),nextRetryAt:Rt.optional(),lastConnectedAt:Rt.optional(),lastDisconnectedAt:Rt.optional(),error:s.z.string().optional()}).passthrough(),io=s.z.object({pairing:eo,connection:s.z.object({id:Nt,pairingKeyId:Nt,url:s.z.string().trim().min(1).max(2048),name:s.z.string().trim().min(1).max(160).optional(),enabled:s.z.boolean(),createdAt:Rt,updatedAt:Rt}).passthrough(),tunnel:s.z.object({status:s.z.enum(["disabled","saved","connecting","connected","failed"]),error:s.z.string().trim().max(2048).optional()}).passthrough()}).passthrough(),oo=s.z.object({deleted:s.z.boolean().optional()}).passthrough(),ro=s.z.object({repository:s.z.string().trim().optional(),tag:s.z.string().trim().optional(),id:s.z.string().trim(),createdSince:s.z.string().trim().optional(),size:s.z.string().trim().optional(),sizeBytes:s.z.number().int().nonnegative().optional(),reference:s.z.string().trim().min(1),repoDigests:s.z.array(s.z.string().trim().min(1).max(512)).default([])}).passthrough(),ao=s.z.object({image:ki,status:s.z.enum(["available","pull-required","unknown"]),localImage:ro.optional(),localSizeBytes:s.z.number().int().nonnegative().optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional(),error:s.z.string().trim().max(2048).optional()}).strict(),so=s.z.lazy(()=>s.z.object({name:s.z.string().trim().min(1),path:s.z.string().trim().min(1).max(4096),children:s.z.array(so)}).passthrough()),co=s.z.object({kind:s.z.enum(["home","root"]),name:s.z.string().trim().min(1),path:s.z.string().trim().min(1).max(4096)}).passthrough(),mo=s.z.object({status:s.z.number().int().min(100).max(599).optional(),headers:s.z.record(s.z.string(),s.z.string()).optional(),bodyBase64:s.z.string().optional()}).passthrough(),lo=s.z.object({strategy:s.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),web:s.z.string().trim().max(2048).optional(),api:s.z.string().trim().max(2048).optional(),vnc:s.z.string().trim().max(2048).optional(),tty:s.z.string().trim().max(2048).optional(),logs:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict(),uo=s.z.object({...lo.shape}).strict(),po=s.z.object({strategy:s.z.enum(["control-plane-proxy","direct-port","node-proxy","kubernetes-ingress","kubernetes-port-forward"]).default("control-plane-proxy"),web:s.z.string().trim().max(2048).optional(),api:s.z.string().trim().max(2048).optional(),ws:s.z.string().trim().max(2048).optional(),status:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict().default({strategy:"control-plane-proxy",status:"unknown"}),go=s.z.object({mode:s.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]).optional(),status:s.z.enum(["unknown","pending","ready","failed"]).default("unknown"),path:s.z.string().trim().max(4096).optional(),resolvedCommit:s.z.string().trim().max(120).optional(),error:s.z.string().trim().max(2048).optional()}).passthrough(),zo=s.z.object({id:Nt,name:s.z.string().trim().min(1).max(160),projectId:Nt.optional(),source:Hn,sourceSnapshot:s.z.record(s.z.string(),s.z.unknown()).default({}),modelSelection:$t,nodeId:Nt,runtimeId:Nt,imageSelection:Ht.optional(),environmentSource:Bt.optional(),environmentTemplateOrigin:Xt.optional(),imageSnapshot:ji.optional(),imageProvisioning:wi.optional(),stateRevision:s.z.number().int().min(0).default(0),processIncarnationId:s.z.string().trim().min(1).max(120).optional(),status:s.z.enum(["created","provisioning","starting","registering","registered","running","stopping","stopped","deleting","failed","unhealthy"]).default("created"),health:s.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),connectionStatus:s.z.enum(["unknown","online","offline","endpoint-unreachable"]).default("unknown"),agentStatus:s.z.enum(["unknown","online","offline"]).default("unknown"),targetStatus:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),uiAccessStatus:s.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),controlMode:s.z.enum(["standalone","controlled"]).default("controlled"),protocolVersion:bt.optional(),instanceVersion:s.z.string().trim().max(80).optional(),build:kn.optional(),runtimeVersion:Nn.optional(),ready:s.z.boolean().default(!1),capabilities:At.default(ht),appInventory:an.optional(),config:s.z.object({autoImportAgentConfigs:s.z.boolean().default(!0),codexConfigEnabled:s.z.boolean().default(!0),codexHomeMode:s.z.enum(["default","taskhandoff"]).default("taskhandoff"),defaultCodexPermissionMode:G.default("ask"),aiSessionHistoryLimit:s.z.number().int().min(1).max(500).default(50),aiSessionAttachmentRetentionDays:s.z.number().int().min(0).max(365).default(30),aiSessionMaxFileAttachmentBytes:s.z.number().int().positive().max(f).default(z)}).strict().default({autoImportAgentConfigs:!0,codexConfigEnabled:!0,codexHomeMode:"taskhandoff",defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:z}),workspace:go.default({status:"unknown"}),target:lo.default({strategy:"direct-port",status:"unknown"}),access:po,apps:s.z.object({runningCount:s.z.number().int().min(0).default(0),problemCount:s.z.number().int().min(0).default(0),updatedAt:Rt.optional(),revision:s.z.number().int().min(0).optional()}).strict().default({runningCount:0,problemCount:0}),aiSessions:je.default(()=>({runningCount:0,waitingCount:0,staleCount:0,sessions:[],updatedAt:(new Date).toISOString()})),triggers:s.z.object({enabledCount:s.z.number().int().min(0).default(0),runningCount:s.z.number().int().min(0).default(0),errorCount:s.z.number().int().min(0).default(0),configs:s.z.array(s.z.object({configHash:s.z.string().trim().min(1),config:Fe,deployments:s.z.array(Ve).default([]),runtime:s.z.array(qe).default([])}).strict()).default([]),recentRuns:s.z.array($e).default([])}).strict().optional(),runtime:s.z.object({kind:s.z.string().trim().max(80).optional(),containerName:s.z.string().trim().max(240).optional(),containerId:s.z.string().trim().max(240).optional(),workspacePath:s.z.string().trim().max(4096).optional(),pid:s.z.number().int().positive().optional(),port:s.z.number().int().positive().max(65535).optional(),labels:s.z.record(s.z.string(),s.z.string()).default({})}).strict().default({labels:{}}),registrationToken:s.z.string().trim().min(1).max(240).optional(),lastHeartbeatAt:Rt.optional(),createdAt:Rt,updatedAt:Rt}).strict(),fo=s.z.union([zo.transform(e=>({instance:e,gitWorkspaceProvisioningOperationId:void 0})),s.z.object({instance:zo,gitWorkspaceProvisioningOperationId:Nt.optional()}).strict()]),bo=s.z.preprocess(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e;return t.instance&&"object"==typeof t.instance&&!Array.isArray(t.instance)?{instance:ho(t.instance),..."string"==typeof t.gitWorkspaceProvisioningOperationId?{gitWorkspaceProvisioningOperationId:t.gitWorkspaceProvisioningOperationId}:{}}:ho(t)},fo),yo=s.z.object({instanceId:zo.shape.id,revision:s.z.number().int().min(0),updatedAt:Rt,status:zo.shape.status.unwrap(),health:zo.shape.health.unwrap(),connectionStatus:zo.shape.connectionStatus.unwrap(),accessStatus:s.z.enum(["reachable","endpoint-unreachable"]),imageProvisioning:wi.optional(),workspace:go,runtime:zo.shape.runtime.unwrap(),runtimeVersion:Nn.optional(),ready:s.z.boolean(),lastHeartbeatAt:Rt.optional()}).strict();function ho(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(Object.keys(zo.shape)),o={};for(const[e,r]of Object.entries(n))i.has(e)?o[e]=r:t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:e});if(n.capabilities&&"object"==typeof n.capabilities&&!Array.isArray(n.capabilities)){const e={...n.capabilities};Object.prototype.hasOwnProperty.call(e,"apps")&&(t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:"capabilities.apps"}),delete e.apps),o.capabilities=St(e)}else o.capabilities=St(void 0);o.appInventory=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e;Object.keys(i).some(e=>!["observedAt","items","issues"].includes(e))&&t?.({instanceId:n,field:"appInventory"});const o={observedAt:i.observedAt,items:Array.isArray(i.items)?i.items.map(e=>{e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).some(e=>!["id","name","kind","source","availability","capabilities","diagnosticCode"].includes(e))&&t?.({instanceId:n,field:"appInventory.items"});const i=Ao(e,["id","name","kind","source","availability","diagnosticCode"]);return!i||"object"!=typeof i||Array.isArray(i)?i:{...i,capabilities:Ao(e.capabilities,["automation","supportsCwdSelection"])}}):i.items,issues:Array.isArray(i.issues)?i.issues.map(e=>Ao(e,["code","message"])):i.issues},r=an.safeParse(o);return r.success?r.data:void 0}(n.appInventory,t,"string"==typeof n.id?n.id:void 0),o.source=vo(n.source,t,"string"==typeof n.id?n.id:void 0),o.sourceSnapshot=n.sourceSnapshot&&"object"==typeof n.sourceSnapshot&&!Array.isArray(n.sourceSnapshot)?n.sourceSnapshot:{},o.build=xo(kn,n.build,"build",t,"string"==typeof n.id?n.id:void 0),o.aiSessions=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e,o=Array.isArray(i.sessions)?i.sessions.flatMap((e,i)=>{const o=xo(ke,e,`aiSessions.sessions.${i}`,t,n);return o?[o]:[]}):[],r={runningCount:"number"==typeof i.runningCount&&Number.isInteger(i.runningCount)&&i.runningCount>=0?i.runningCount:0,waitingCount:"number"==typeof i.waitingCount&&Number.isInteger(i.waitingCount)&&i.waitingCount>=0?i.waitingCount:0,staleCount:"number"==typeof i.staleCount&&Number.isInteger(i.staleCount)&&i.staleCount>=0?i.staleCount:0,sessions:o,updatedAt:Rt.safeParse(i.updatedAt).success?i.updatedAt:(new Date).toISOString()};return Object.keys(i).some(e=>!["runningCount","waitingCount","staleCount","sessions","updatedAt"].includes(e))&&t?.({instanceId:n,field:"aiSessions"}),je.parse(r)}(n.aiSessions,t,"string"==typeof n.id?n.id:void 0),o.triggers=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e;Object.keys(i).some(e=>!["enabledCount","runningCount","errorCount","configs","recentRuns"].includes(e))&&t?.({instanceId:n,field:"triggers"});const o=(e,i,o)=>Array.isArray(e)?e.flatMap((e,r)=>{const a=xo(i,e,`${o}.${r}`,t,n);return a?[a]:[]}):[],r=Array.isArray(i.configs)?i.configs.flatMap((e,i)=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];const r=e;Object.keys(r).some(e=>!["configHash","config","deployments","runtime"].includes(e))&&t?.({instanceId:n,field:`triggers.configs.${i}`});const a=function(e,t,n,i){if(!e||"object"!=typeof e||Array.isArray(e))return;const o=e,r=Ao(o,["configHash","name","description","createdAt","updatedAt"]);if(o.source&&"object"==typeof o.source&&!Array.isArray(o.source)){const e=o.source,t="schedule"===e.type?"interval"===e.scheduleKind?["type","scheduleKind","intervalMs"]:"daily"===e.scheduleKind?["type","scheduleKind","timeOfDay","timezone"]:["type","scheduleKind","weekdays","timeOfDay","timezone"]:"file-change"===e.type?["type","roots","globs","ignore","debounceMs"]:["type","agent","statuses","phases"];r.source=Ao(e,t)}return r.action=Ao(o.action,["promptTemplate"]),r.policy=Ao(o.policy,["cooldownMs","maxConcurrentRuns","whenBusy"]),xo(Fe,r,t,n,i)}(r.config,`triggers.configs.${i}.config`,t,n);return"string"==typeof r.configHash&&a?[{configHash:r.configHash,config:a,deployments:o(r.deployments,Ve,`triggers.configs.${i}.deployments`),runtime:o(r.runtime,qe,`triggers.configs.${i}.runtime`)}]:[]}):[];return{enabledCount:"number"==typeof i.enabledCount&&Number.isInteger(i.enabledCount)&&i.enabledCount>=0?i.enabledCount:0,runningCount:"number"==typeof i.runningCount&&Number.isInteger(i.runningCount)&&i.runningCount>=0?i.runningCount:0,errorCount:"number"==typeof i.errorCount&&Number.isInteger(i.errorCount)&&i.errorCount>=0?i.errorCount:0,configs:r,recentRuns:o(i.recentRuns,$e,"triggers.recentRuns")}}(n.triggers,t,"string"==typeof n.id?n.id:void 0),o.apps=xo(zo.shape.apps.unwrap(),Ao(n.apps,["runningCount","problemCount","updatedAt","revision"]),"apps",t,"string"==typeof n.id?n.id:void 0)||{runningCount:0,problemCount:0},o.config=xo(zo.shape.config.unwrap(),Ao(n.config,["autoImportAgentConfigs","codexConfigEnabled","codexHomeMode","defaultCodexPermissionMode","aiSessionHistoryLimit","aiSessionAttachmentRetentionDays","aiSessionMaxFileAttachmentBytes"]),"config",t,"string"==typeof n.id?n.id:void 0)||{autoImportAgentConfigs:!0,codexConfigEnabled:!0,codexHomeMode:"taskhandoff",defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:z},o.modelSelection=xo($t.unwrap(),Ao(n.modelSelection,["modelEntityIds","codexModelHash","claudeModelHash","opencodeModelHash"]),"modelSelection",t,"string"==typeof n.id?n.id:void 0)||{},o.imageSnapshot=function(e,t,n,i){if(!e||"object"!=typeof e||Array.isArray(e))return e;const o=e,r=Ti(o),{reference:a,...s}=r,c=o.requestedReference??a;let m;try{m="string"==typeof c?Ut(c):void 0}catch{}const d={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"},l="string"==typeof o.id?o.id:"string"==typeof t?t:void 0,u="market"===o.origin||l&&d[l]?"market":"custom";return void 0===o.image&&void 0===o.reference||n?.({instanceId:i,field:"imageSnapshot.reference"}),{...s,id:l&&d[l]?d[l]:l,origin:u,repository:m?.repository??o.repository,tag:m?.tag??o.tag,requestedReference:m?.reference??c,resolvedDigest:o.resolvedDigest,resolvedReference:o.resolvedReference,downloadSizeBytes:o.downloadSizeBytes,market:"market"===u?Ao(o.market,["catalogId","catalogRevision","publisher","version"])??{catalogId:"task_handoff_embedded",catalogRevision:"legacy",publisher:"task-handoff"}:void 0}}(n.imageSnapshot,n.imageId,t,"string"==typeof n.id?n.id:void 0);const r="string"==typeof n.imageId?{img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"}[n.imageId]||n.imageId:void 0,a=Ao(n.imageSelection,["imageId","tag"]);o.imageSelection=a||(r?{imageId:r,tag:o.imageSnapshot?.tag}:void 0),o.imageProvisioning=xo(wi,Ao(n.imageProvisioning,["phase","requestedReference","generation","error","startedAt","updatedAt"]),"imageProvisioning",t,"string"==typeof n.id?n.id:void 0),o.runtimeVersion=function(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return;const i=e,o=e=>{if("string"!=typeof e)return;const t=e.trim();return t&&t.length<=80?t:void 0},r=o(i.desiredVersion);if(!r)return void t?.({instanceId:n,field:"runtimeVersion.desiredVersion"});const a=new Set(Nn.shape.phase.options),s="string"==typeof i.phase?i.phase:"pending",c=a.has(s)?s:{idle:"pending",queued:"pending",checking:"pending",downloading:"installing",updating:"installing",completed:"matched",succeeded:"matched",ready:"matched",error:"failed"}[s]||"pending";let m;if(c!==s&&t?.({instanceId:n,field:"runtimeVersion.phase"}),i.error&&"object"==typeof i.error&&!Array.isArray(i.error)){const e=i.error,r="string"==typeof e.message?e.message.trim().slice(0,4096):"";if(r){const i=new Set(En.shape.code.options),a="string"==typeof e.code&&i.has(e.code)?e.code:"INSTANCE_RUNTIME_INSTALL_FAILED";a!==e.code&&t?.({instanceId:n,field:"runtimeVersion.error.code"});const s=o(e.expectedVersion),c=o(e.actualVersion);m={code:a,message:r,...s?{expectedVersion:s}:{},...c?{actualVersion:c}:{},retryable:!0===e.retryable}}else t?.({instanceId:n,field:"runtimeVersion.error"})}"string"==typeof i.error&&i.error.trim()&&(m={code:"INSTANCE_RUNTIME_INSTALL_FAILED",message:i.error.trim().slice(0,4096),expectedVersion:r,...o(i.actualVersion)?{actualVersion:o(i.actualVersion)}:{},retryable:!1});const d=o(i.actualVersion),l=Rt.safeParse(i.lastAttemptAt),u=Rt.safeParse(i.matchedAt);return void 0===i.lastAttemptAt||l.success||t?.({instanceId:n,field:"runtimeVersion.lastAttemptAt"}),void 0===i.matchedAt||u.success||t?.({instanceId:n,field:"runtimeVersion.matchedAt"}),{desiredVersion:r,...d?{actualVersion:d}:{},phase:c,attempt:"number"==typeof i.attempt&&Number.isInteger(i.attempt)&&i.attempt>=0?i.attempt:0,...l.success?{lastAttemptAt:l.data}:{},...u.success?{matchedAt:u.data}:{},...m?{error:m}:{}}}(n.runtimeVersion,t,"string"==typeof n.id?n.id:void 0),o.workspace=xo(go,n.workspace,"workspace",t,"string"==typeof n.id?n.id:void 0)||{status:"unknown"},o.environmentSource=xo(Bt,n.environmentSource,"environmentSource",t,"string"==typeof n.id?n.id:void 0),o.environmentTemplateOrigin=xo(Xt,n.environmentTemplateOrigin,"environmentTemplateOrigin",t,"string"==typeof n.id?n.id:void 0),o.runtime=xo(zo.shape.runtime.unwrap(),n.runtime,"runtime",t,"string"==typeof n.id?n.id:void 0)||{labels:{}},o.target=xo(lo,Ao(n.target??n.endpoints,["strategy","web","api","vnc","tty","logs","status"]),"target",t,"string"==typeof n.id?n.id:void 0)||{strategy:"direct-port",status:"unknown"},o.access=xo(po,Ao(n.access,["strategy","web","api","ws","status"]),"access",t,"string"==typeof n.id?n.id:void 0)||{strategy:"control-plane-proxy",status:"unknown"};for(const[e,i]of Object.entries(zo.shape))Object.prototype.hasOwnProperty.call(o,e)&&!i.safeParse(o[e]).success&&i.safeParse(void 0).success&&(delete o[e],t?.({instanceId:"string"==typeof n.id?n.id:void 0,field:e}));return o}function xo(e,t,n,i,o){if(!t||"object"!=typeof t||Array.isArray(t))return;let r=structuredClone(t),a=!1;for(let t=0;t<20;t+=1){const t=e.safeParse(r);if(t.success)return a&&i?.({instanceId:o,field:n}),t.data;let s=!1;for(const e of t.error.issues){if("unrecognized_keys"!==e.code)continue;const t=Io(r,e.path);if(t&&"object"==typeof t&&!Array.isArray(t))for(const n of e.keys)Object.prototype.hasOwnProperty.call(t,n)&&(delete t[n],s=!0,a=!0)}if(!s){const a=structuredClone(r);let s=!1;for(const e of t.error.issues){if(!e.path.length||"string"!=typeof e.path.at(-1))continue;const t=Io(a,e.path.slice(0,-1)),n=e.path.at(-1);t&&"object"==typeof t&&!Array.isArray(t)&&Object.prototype.hasOwnProperty.call(t,n)&&(delete t[n],s=!0)}if(s){const t=e.safeParse(a);if(t.success)return i?.({instanceId:o,field:n}),t.data}break}}i?.({instanceId:o,field:n})}function Io(e,t){let n=e;for(const e of t){if(!n||"object"!=typeof n)return;n=n[e]}return n}function vo(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return e;const i=e,o=i.type,r=Hn.options.find(e=>e.shape.type.value===o);if(!r)return e;const a="local-folder"===o?["type","localFolderId","path","ownerNodeId"]:"git-template"===o?["type","url","templateId","ref","auth","clone"]:["type","repositoryId","url","provider","ref","auth","clone"],s=Ao(i,a);if("local-folder"!==o){const e=function(e,t,n){const i=e&&"object"==typeof e&&!Array.isArray(e)?e:void 0,o=Fn.safeParse(Ao(i,["type","name","commit"]));if(o.success)return o.data;const r="string"==typeof i?.commit?i.commit.trim():"",a="string"==typeof i?.name?i.name.trim():"",s=r?Fn.safeParse({type:"commit",commit:r}):a?Fn.safeParse({type:"tag"===i?.type?"tag":"branch",name:a}):Fn.safeParse({type:"branch",name:"main"});return s.success?(t?.({instanceId:n,field:"source.ref"}),s.data):void 0}(i.ref,t,n),o=xo(Un,Ao(i.auth,["type","secretId"]),"source.auth",t,n),r=xo(Vn,Ao(i.clone,["depth","submodules","lfs","subdirectory"]),"source.clone",t,n);e?s.ref=e:delete s.ref,o?s.auth=o:delete s.auth,r?s.clone=r:delete s.clone}const c=xo(r,s,"source",t,n);return c?(Object.keys(i).some(e=>!a.includes(e))&&t?.({instanceId:n,field:"source"}),c):s}function Ao(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e;return Object.fromEntries(t.filter(e=>Object.prototype.hasOwnProperty.call(n,e)).map(e=>[e,n[e]]))}const So=s.z.object({instanceId:Nt.optional(),projectId:Nt.optional(),source:Hn.optional(),nodeId:Nt.optional(),runtimeId:Nt.optional(),imageSelection:Ht.optional(),instanceVersion:s.z.string().trim().max(80).optional(),protocolVersion:bt,build:kn.optional(),controlMode:s.z.enum(["standalone","controlled"]).default("controlled"),capabilities:At.default(ht),appInventory:an.optional(),target:uo.optional(),workspace:go.default({status:"unknown"}),registrationToken:s.z.string().trim().max(240).optional(),processIncarnationId:s.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{ft.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol register payload requires appInventory."})}),ko=s.z.object({status:zo.shape.status.optional(),health:zo.shape.health.optional(),protocolVersion:bt,build:kn.optional(),capabilities:zo.shape.capabilities.optional(),appInventory:an.optional(),apps:zo.shape.apps.optional(),aiSessions:zo.shape.aiSessions.optional(),triggers:zo.shape.triggers.optional(),workspace:go.optional(),target:uo.optional(),processIncarnationId:s.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{ft.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol heartbeat payload requires appInventory."})}),jo=s.z.enum(["web","telegram","wechat","dingding","lark"]),wo=s.z.object({id:Nt,channel:jo,name:s.z.string().trim().min(1).max(160),enabled:s.z.boolean().default(!1),token:s.z.string().trim().max(4096).optional(),defaultChatId:s.z.string().trim().max(240).optional(),allowedUserIds:s.z.array(s.z.string().trim().min(1).max(240)).default([]),pollIntervalMs:s.z.number().int().positive().max(6e4).default(3e3),settings:s.z.record(s.z.string(),s.z.unknown()).default({}),createdAt:Rt,updatedAt:Rt}).strict(),Co=s.z.object({id:Nt,channel:jo,bridgeId:Nt.optional(),chatSessionId:s.z.string().trim().min(1).max(240),userId:s.z.string().trim().max(240).optional(),activeProjectId:Nt.optional(),activeInstanceId:Nt.optional(),activeAiSessionId:s.z.string().trim().min(1).max(120).optional(),lastUsedAt:Rt,createdAt:Rt,updatedAt:Rt}).strict(),Eo=s.z.object({source:s.z.object({type:s.z.literal("chat-gateway").default("chat-gateway"),channel:jo,bridgeId:Nt.optional(),chatSessionId:s.z.string().trim().min(1).max(240),userId:s.z.string().trim().max(240).optional()}).strict(),message:s.z.object({text:s.z.string().trim().max(2e4).default(""),attachments:s.z.array(q).max(6).default([])}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>b&&t.addIssue({code:s.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),target:s.z.object({instanceId:Nt,aiSessionId:s.z.string().trim().min(1).max(120)}).strict().optional()}).strict(),No=s.z.object({id:Nt,instanceId:Nt,projectId:Nt.optional(),aiSessionId:s.z.string().trim().min(1).max(120),providerSessionId:s.z.string().trim().max(240).optional(),result:s.z.string().default(""),timeoutMs:s.z.number().positive().optional(),source:s.z.string().trim().max(120).optional(),kind:s.z.enum(["task","approval"]).default("task"),status:s.z.enum(["pending","unreachable"]).default("pending"),error:s.z.string().trim().max(2048).optional(),lastSeenAt:Rt}).strict();var Ro,To,Po=d(Object.freeze({__proto__:null,AiSessionConversationAttachmentCapabilitiesSchema:It,AiSessionProviderCapabilitiesSchema:gt,AiSessionProviderCapabilitySchema:pt,AiSessionTimelineCapabilitiesSchema:xt,AppInstallPrivilegeSchema:mn,AppInstallerSchema:cn,AppManagementCommandSchema:yn,AppManagementErrorSchema:hn,AppManagementEventSchema:Sn,AppManagementJobResponseSchema:An,AppManagementJobSchema:xn,AppManagementJobStateSchema:fn,AppManagementOperationRequestSchema:vn,AppManagementOperationSchema:zn,AppManagementProgressSchema:bn,AppManagementSnapshotSchema:In,ApplyUpdateRequestSchema:Mn,BuildInfoSchema:kn,CONTROL_PLANE_PROTOCOL_VERSION:zt,ChatBridgeConfigSchema:wo,ChatChannelSchema:jo,ChatGatewayMessageSchema:Eo,ChatSessionBindingSchema:Co,ControlPlaneHealthResponseSchema:jn,ControlledInstanceCapabilitiesSchema:At,ControlledInstanceFeatureCapabilitiesSchema:vt,ControlledInstanceHeartbeatSchema:ko,ControlledInstanceRegisterSchema:So,ControlledInstanceSchema:zo,CreateNodeModelSchema:si,CustomImageProfileSchema:vi,DEFAULT_IMAGE_COVER:{kind:"builtin",key:"default-image-cover"},DeployNodeModelSchema:mi,DockerImageDigestSchema:qt,DockerImageReferenceSchema:Vt,EnvironmentSourceSchema:Bt,EnvironmentTemplateErrorSchema:Yt,EnvironmentTemplateOriginSchema:Xt,EnvironmentTemplateSchema:sn,EnvironmentTemplateStatusSchema:Gt,FederatedModelGroupSchema:oi,FederatedModelRegistrySchema:ai,FinalComputerArchSchema:Wt,FinalComputerCapabilitiesSchema:dn,FinalComputerPlatformSchema:Kt,GitAuthSchema:Un,GitCloneOptionsSchema:Vn,GitRefSchema:Fn,GitRepositorySchema:qn,ImageCoverSchema:pi,ImageOriginSchema:li,ImageProfileSchema:Ai,ImageProvisioningSchema:wi,ImagePullProgressSchema:Ri,ImagePullTerminalEventType:{Output:"image.pull.terminal.output",Finished:"image.pull.terminal.finished",Progress:"image.pull.progress",Snapshot:"image.pull.snapshot"},ImagePullTerminalFinishedSchema:Ni,ImagePullTerminalOutputSchema:Ei,ImageSelectionSchema:Ht,InstanceAccessSchema:po,InstanceAppInventoryIssueSchema:rn,InstanceAppInventoryItemSchema:on,InstanceAppInventorySchema:an,InstanceDeleteInputSchema:Zt,InstanceDeleteResultSchema:en,InstanceImageSnapshotSchema:ji,InstanceLifecycleEventType:{Snapshot:"instance.lifecycle.snapshot"},InstanceLifecycleSnapshotSchema:yo,InstanceResourceMetricsEventType:{Snapshot:"instance.metrics.snapshot"},InstanceResourceMetricsSchema:Vi,InstanceTargetSchema:lo,InstanceVolumeDispositionSchema:Qt,InstanceVolumeRoleSchema:Jt,LEGACY_MARKET_IMAGE_IDS:tn,LocalDockerImageSchema:ro,MARKET_CATALOG_PROTOCOL_VERSION:"2026-07-29",ManagedAppActionReasonSchema:pn,ManagedAppManagementSourceSchema:un,ManagedAppProjectionSchema:gn,ManagedAppStateSchema:ln,MarketCatalogSnapshotSchema:xi,MarketCatalogStatusSchema:Ii,MarketImagePlatformArtifactSchema:bi,MarketImageSchema:hi,MarketImageTagSchema:yi,MarketLifecycleStatusSchema:ui,ModelAppSchema:Wn,ModelConfigSchema:Zn,ModelLocationSchema:ii,ModelNameEntrySchema:Xn,ModelProtocolSchema:Yn,ModelRegistryNodeDiagnosticSchema:ri,ModelSelectionSchema:$t,NODE_TUNNEL_PROTOCOL_VERSION:"2026-08-01",NodeAgentCapabilitiesSchema:Bi,NodeAgentControlPlaneConnectionCreateResultSchema:io,NodeAgentControlPlaneConnectionSchema:no,NodeAgentControlPlanePairingSchema:eo,NodeAgentDeleteResponseSchema:oo,NodeAgentEventTransportHealthSchema:Ki,NodeAgentExternalListenerConfigSchema:Yi,NodeAgentExternalListenerSchema:Xi,NodeAgentHealthSchema:Wi,NodeAgentInstanceLifecycleResultSchema:bo,NodeAgentInstanceProxyRawResponseSchema:mo,NodeAgentManagedGitCapabilitiesSchema:qi,NodeAgentManagedModelCapabilitiesSchema:$i,NodeAgentPairingCompleteResultSchema:Qi,NodeAgentPairingInviteResponseSchema:Zi,NodeAgentPairingSelfRevokeResultSchema:to,NodeAgentStoryCapabilitiesSchema:Hi,NodeConnectionDiagnosticsSchema:_i,NodeConnectionPathSchema:Pi,NodeControlPlaneProxyStateSchema:Li,NodeFolderPlaceSchema:co,NodeFolderTreeEntrySchema:so,NodeImageAvailabilitySchema:ao,NodeJoinInviteStatusSchema:Mi,NodeJoinedEventSchema:Oi,NodeLocalFolderSchema:$n,NodeModelAssignmentSchema:ni,NodeModelConfigSchema:Qn,NodeModelPublicRecordSchema:ti,NodeRolloutSummarySchema:Tn,NodeRuntimeSchema:Ui,NodeSchema:Di,NodeStateProjectionEventSchema:Fi,NodeTunnelRequestBodySchema:_t,NodeUpdateImpactSchema:Rn,PendingRouteSchema:No,ProjectSchema:Jn,ProjectSourceSchema:Hn,ProtocolVersionSchema:bt,PublicModelConfigSchema:ei,RuntimeArtifactIdentitySchema:Cn,RuntimeConvergenceErrorSchema:En,RuntimeVersionStateSchema:Nn,SelectableImageSchema:ki,SelectableImageTagSchema:Si,UpdateChannelSchema:wn,UpdateCheckRequestSchema:Pn,UpdateCheckResultSchema:_n,UpdateJobSchema:On,UpdateNodeAgentExternalListenerSchema:Ji,UpdateNodeModelAssignmentSchema:di,UpdateNodeModelSchema:ci,WorkspacePolicySchema:Kn,WorkspaceStatusSchema:go,aiSessionConversationAttachmentCapabilities:kt,aiSessionConversationAttachmentCapabilityAgents:wt,aiSessionProviderCapabilities:jt,aiSessionProviderCapability:function(e,t){return jt(e).find(e=>e.agent===t)},aiSessionTimelineCapabilities:Ct,aiSessionTimelineCapabilityAgents:Et,controlledInstanceAcceptsTraffic:function(e){return!1!==e.ready&&(!e.runtimeVersion||["matched","failed"].includes(e.runtimeVersion.phase))},decodeNodeTunnelRequestBody:function(e){if(null==e)return;const t=_t.parse(e);return"utf8"===t.encoding?t.data:Buffer.from(t.data,"base64")},encodeNodeTunnelRequestBody:function(e){if(null!=e){if("string"==typeof e)return{encoding:"utf8",data:e};if(Buffer.isBuffer(e))return{encoding:"base64",data:e.toString("base64")};if(e instanceof ArrayBuffer)return{encoding:"base64",data:Buffer.from(e).toString("base64")};if(ArrayBuffer.isView(e))return{encoding:"base64",data:Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64")};throw new TypeError("Node tunnel request body must be a string or binary buffer.")}},migrateLegacyImageSelection:nn,modelConfigHash:function(e){const t={app:Wn.parse(e.app),endpoint:Zn.shape.endpoint.parse(e.endpoint),key:Zn.shape.key.parse(e.key),model:Zn.shape.model.parse(e.model)};return`mdl_${a.createHash("sha256").update(JSON.stringify(t)).digest("hex")}`},normalizeControlledInstanceCapabilities:St,normalizeDockerImageReference:Ft,normalizeNodeAgentCapabilities:Gi,parseDockerImageReference:Ut,parseStoredControlledInstance:function(e,t){return zo.parse(ho(e,t))},projectSourceWithoutGitCredential:Bn,projectSourceWithoutLegacyGitSecretId:Gn,safeParseStoredControlledInstance:function(e,t){return zo.safeParse(ho(e,t))},sanitizeCrossVersionControlledInstanceHeartbeat:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=["status","health","protocolVersion","build","capabilities","appInventory","apps","aiSessions","triggers","workspace","target","processIncarnationId"],i=new Set(n);for(const n of Object.keys(e))i.has(n)||t?.({field:n,action:"ignored"});return Ao(e,n)},sanitizeCrossVersionControlledInstanceRegister:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=["instanceId","projectId","source","nodeId","runtimeId","imageSelection","instanceVersion","protocolVersion","build","controlMode","capabilities","appInventory","target","workspace","registrationToken","processIncarnationId"],o=new Set([...i,"imageId"]);for(const e of Object.keys(n))o.has(e)||t?.({field:e,action:"ignored"});return Object.prototype.hasOwnProperty.call(n,"imageId")&&t?.({field:"imageId",action:"migrated"}),{...Ao(n,i),imageSelection:nn(n.imageSelection,n.imageId)}},sanitizeStoredControlledInstance:ho,sanitizeStoredEnvironmentTemplate:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","name","sourceInstanceId","nodeId","imageId","internalTag","platform","architecture","sizeBytes","status","error","createdAt","updatedAt"]),o="string"==typeof n.id?n.id:void 0;for(const e of Object.keys(n))i.has(e)||t?.({templateId:o,field:e});const r=Ao(n,[...i]);if(n.error&&"object"==typeof n.error&&!Array.isArray(n.error)){const e=n.error;for(const n of Object.keys(e))["code","message","phase"].includes(n)||t?.({templateId:o,field:`error.${n}`});r.error=Ao(e,["code","message","phase"])}return r},sanitizeStoredImageProfile:Ti,sanitizeStoredMarketCatalogSnapshot:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=["protocolVersion","catalogId","revision","source","generatedAt","expiresAt","items"];for(const e of Object.keys(n))i.includes(e)||t?.({field:e});const o=Array.isArray(n.items)?n.items.flatMap(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return t?.({field:"items"}),[];const n=e,i=["id","publisher","slug","name","description","localizedDescriptions","cover","repository","defaultTag","tags","capabilities","optionalApps","defaultEnv","labels","status"];for(const e of Object.keys(n))i.includes(e)||t?.({itemId:"string"==typeof n.id?n.id:void 0,field:e});const o=hi.safeParse(Ao(n,i));return o.success?[o.data]:(t?.({itemId:"string"==typeof n.id?n.id:void 0,field:"invalid-record"}),[])}):n.items;return{...Ao(n,i),items:o}},sanitizeStoredNode:function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(["id","name","connectionMode","connectionPath","connectionEnabled","auth","endpoint","controlEndpoint","containerEndpoint","publicWebBase","status","health","capabilities","proxyState","appInventory","labels","lastSeenAt","createdAt","updatedAt"]);for(const e of Object.keys(n))i.has(e)||t?.({field:e});const o=n.auth&&"object"==typeof n.auth&&!Array.isArray(n.auth)?Ao(n.auth,["mode","keyId","secret","pairedAt","pairing"]):n.auth;o&&"object"==typeof o&&"pairing"in o&&(o.pairing=Ao(o.pairing,["status","joinToken","expiresAt"]));const r=n.connectionPath&&"object"==typeof n.connectionPath&&!Array.isArray(n.connectionPath)?"control-plane-proxy"===n.connectionPath.kind?Ao(n.connectionPath,["kind","proxyId","proxyBindingId","targetNodeId"]):Ao(n.connectionPath,["kind"]):{kind:"direct"},a=n.proxyState&&"object"==typeof n.proxyState&&!Array.isArray(n.proxyState)?Ao(n.proxyState,["reachability","bindingStatus","bindingRevision","streamId","revision","observedAt","target","lastError","updatedAt"]):n.proxyState;if(a&&"object"==typeof a){const e=a;e.target=Ao(e.target,["id","name","status","health","lastSeenAt","capabilities"]),e.lastError=Ao(e.lastError,["code","message","retryable","details"])}return{...Object.fromEntries(Object.entries(n).filter(([e])=>i.has(e))),auth:o,connectionPath:r,proxyState:a}},sanitizeStoredNodeLocalFolder:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,{defaultImageId:n,...i}=t;return{...i,defaultImageSelection:nn(t.defaultImageSelection,n)}},sanitizeStoredProject:function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,{defaultImageId:n,defaultRuntimeId:i,...o}=t;return{...o,source:vo(t.source),defaultImageSelection:nn(t.defaultImageSelection,n)}},supportsAiSessionAttachmentRetentionSettings:function(e){return kt(e).retentionSettings},supportsAiSessionConversationAttachmentCapability:function(e,t,n){return wt(e,n).includes(t)},supportsAiSessionFileSizeLimitSettings:function(e){return!0===kt(e).fileSizeLimitSettings},supportsAiSessionPersistenceSettings:function(e){return St(e).features.aiSessionPersistenceSettings},supportsAiSessionTimelineCapability:function(e,t,n){return Et(e,n).includes(t)},supportsAiSessionWorkspaceSelection:function(e){return St(e).features.aiSessionWorkspaceSelection},supportsBrowserTunnel:function(e){return St(e).features.browserTunnel},supportsControlledInstancePrivateModelCatalog:function(e){return St(e).features.privateModelCatalog},supportsGitCliCredentialBroker:function(e){const t=St(e).features;return t.gitCredentialProxy||t.gitCliCredentialBroker},supportsGitCredentialProxy:function(e){return St(e).features.gitCredentialProxy},supportsNodeAiSessionFileAttachmentLimit:function(e){return!0===Bi.safeParse(e).data?.aiSessionFileAttachmentLimit},supportsNodeFolderPlaces:function(e){return!0===Bi.safeParse(e).data?.folderPlaces},supportsNodeGitCredentialRuntimeBroker:function(e){return Gi(e).managedGitCredentials.runtimeBroker},supportsNodeGitWorkspaceProvisioning:function(e,t){return Gi(e).managedGitCredentials.workspaceProvisioning[t]},supportsNodeLocalFolderNameUpdate:function(e){return!0===Bi.safeParse(e).data?.localFolderNameUpdate},supportsNodeManagedGitCredentialRegistry:function(e){return Gi(e).managedGitCredentials.registry},supportsNodeMultiEntityModelAssignment:function(e){return Gi(e).managedModels.multiEntityAssignment},supportsNodePrivateModelCatalog:function(e){return Gi(e).managedModels.privateModelCatalog},supportsNodeStories:function(e){return Gi(e).stories.enabled}})),_o=function(){if(To)return Ro;To=1;const t=e,{spawnSync:i}=n;return Ro={processStartIdentity:function(e,n=process.platform){if(Number.isInteger(e)&&!(e<=0)){if("linux"===n)try{const n=t.readFileSync(`/proc/${e}/stat`,"utf8"),i=n.lastIndexOf(")");if(i<0)return;const o=n.slice(i+2).trim().split(/\s+/)[19];return o?`linux:${o}`:void 0}catch{return}if(["darwin","freebsd","openbsd","aix","sunos"].includes(n)){const t=i("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:1e3}),o=0===t.status?t.stdout.trim().replace(/\s+/g," "):"";return o?`${n}:${o}`:void 0}if("win32"===n){const t=i("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${e} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`],{encoding:"utf8",timeout:2e3}),n=0===t.status?t.stdout.trim():"";return/^\d+$/.test(n)?`win32:${n}`:void 0}}}}}();class Oo extends Error{code;lockPath;owner;constructor(e,t,n={}){const i=t?.pid?` pid ${t.pid}`:"";super(`${n.label||"Process"} is already running${i}. Lock: ${e}`),this.name="ProcessSingletonError",this.code=n.code||"PROCESS_ALREADY_RUNNING",this.lockPath=e,this.owner=t}}function Mo(e){return t.join(e,"owner.json")}function Lo(e){return t.join(e,"initializing.json")}function Do(e){return t.join(e,"recovering.json")}function Fo(e){return Number.isInteger(e)&&Number(e)>0}const Uo=function(t){try{const n=JSON.parse(e.readFileSync(Mo(t),"utf8"));if(Fo(n.pid)&&"string"==typeof n.startTime){const e=n;return{pid:e.pid,hostname:"string"==typeof e.hostname&&e.hostname?e.hostname:c.hostname(),component:e.component||"server-update",command:"string"==typeof e.command?e.command:"",acquiredAt:"string"==typeof e.createdAt&&Number.isFinite(Date.parse(e.createdAt))?e.createdAt:new Date(0).toISOString(),token:"string"==typeof e.token&&e.token?e.token:`legacy:${e.pid}:${e.startTime}`,startIdentity:e.startTime.startsWith("linux:")?e.startTime:`linux:${e.startTime}`}}if(!(Fo(n.pid)&&"string"==typeof n.hostname&&n.hostname&&"string"==typeof n.command&&"string"==typeof n.acquiredAt&&Number.isFinite(Date.parse(n.acquiredAt))&&"string"==typeof n.token&&n.token))return;return n}catch{return}};function Vo(e){if(!Fo(e))return!1;try{return process.kill(Number(e),0),!0}catch(e){return"EPERM"===e.code}}function qo(e){if(!e||!Vo(e.pid))return!1;if(!e.startIdentity)return!0;const t=_o.processStartIdentity(e.pid);return void 0===t||t===e.startIdentity}function $o(n,i){const o=t.join(n,`.owner-${i.token}.tmp`);e.writeFileSync(o,`${JSON.stringify(i,null,2)}\n`,{encoding:"utf8",mode:384,flag:"wx"});const r=Bo(n);if(r?.token!==i.token)throw Ko(o),new Error(`Process lock initialization was superseded: ${n}`);e.renameSync(o,Mo(n)),Ko(Lo(n))}function Ho(n,i,o){const r=Uo(n);if(r?.token!==i.token)return!1;const s={...i};for(const[e,t]of Object.entries(o))void 0===t?delete s[e]:Object.assign(s,{[e]:t});const c=t.join(n,`.owner-update-${i.token}-${a.randomUUID()}.tmp`);try{if(e.writeFileSync(c,`${JSON.stringify(s,null,2)}\n`,{encoding:"utf8",mode:384,flag:"wx"}),Uo(n)?.token!==i.token)return!1;e.renameSync(c,Mo(n));for(const e of Object.keys(i))delete i[e];return Object.assign(i,s),!0}catch(e){if("ENOENT"===e.code)return!1;throw e}finally{Ko(c)}}function Bo(t){try{return JSON.parse(e.readFileSync(Lo(t),"utf8"))}catch{return}}function Go(e){const t=Bo(e);return Fo(t?.pid)&&qo({pid:t.pid,startIdentity:t.startIdentity})}function Ko(t){try{e.unlinkSync(t)}catch(e){if("ENOENT"!==e.code)throw e}}function Wo(){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,20)}function Yo(t){try{const n=Bo(t),i=Date.parse(n?.startedAt||"");return Number.isFinite(i)?Math.max(0,Date.now()-i):Math.max(0,Date.now()-e.statSync(t).mtimeMs)}catch{return 0}}function Xo(n,i){try{return e.writeFileSync(Do(n),`${JSON.stringify({token:i,pid:process.pid,startedAt:(new Date).toISOString()})}\n`,{encoding:"utf8",mode:384,flag:"wx"}),!0}catch(o){if("EEXIST"===o.code)return!!function(n){const i=Do(n),o=Jo(i),r=Date.parse(o?.startedAt||"");if(Vo(o?.pid)||Number.isFinite(r)&&Date.now()-r<2e3)return!1;const s=t.join(n,`.recovering-${a.randomUUID()}.stale`);try{e.renameSync(i,s)}catch(e){if(["ENOENT","EEXIST"].includes(e.code||""))return!1;throw e}const c=Jo(s);if(c?.token===o?.token)return Ko(s),!0;try{e.linkSync(s,i)}catch(e){if("EEXIST"!==e.code)throw e}finally{Ko(s)}return!1}(n)&&Xo(n,i);if("ENOENT"===o.code)return!1;throw o}}function Jo(t){try{return JSON.parse(e.readFileSync(t,"utf8"))}catch{return}}function Zo(e,t){return Jo(Do(e))?.token===t}const Qo="/run/task-handoff-server-update.lock";function er(t){const n={};if(!e.existsSync(t))return n;for(const i of e.readFileSync(t,"utf8").split(/\r?\n/)){if(!i||i.startsWith("#"))continue;const e=i.indexOf("=");e>0&&(n[i.slice(0,e)]=i.slice(e+1))}return n}var tr,nr=d(Object.freeze({__proto__:null,SERVER_UPDATE_LOCK_PATH:Qo,acquireServerUpdateLock:function(n=Qo,i={}){return function(n,i={}){e.mkdirSync(t.dirname(n),{recursive:!0});const o=_o.processStartIdentity(process.pid),r={pid:process.pid,hostname:c.hostname(),command:process.argv.join(" "),acquiredAt:(new Date).toISOString(),token:a.randomUUID(),...void 0!==i.component?{component:i.component}:{},...o?{startIdentity:o}:{},...void 0!==i.dataDir?{dataDir:i.dataDir}:{},...void 0!==i.host?{host:i.host}:{},...void 0!==i.port?{port:i.port}:{},...void 0!==i.instanceId?{instanceId:i.instanceId}:{}};for(let t=0;t<5;t+=1)try{return e.mkdirSync(n),e.writeFileSync(Lo(n),`${JSON.stringify({token:r.token,pid:r.pid,startIdentity:r.startIdentity,startedAt:(new Date).toISOString()})}\n`,{encoding:"utf8",mode:384,flag:"wx"}),$o(n,r),{lockPath:n,owner:r,updateDetails:e=>Ho(n,r,e),release(){const t=Uo(n);t?.token===r.token&&e.rmSync(n,{recursive:!0,force:!0})}}}catch(o){if("EEXIST"!==o.code)throw o;const r=Uo(n);if(qo(r))throw new Oo(n,r,i.error);if(!r&&(Go(n)||Yo(n)<(i.incompleteLockStaleMs??2e3))){if(t+1<5){Wo();continue}throw new Oo(n,void 0,i.error)}const s=a.randomUUID();if(!Xo(n,s)){if(t+1<5){Wo();continue}throw new Oo(n,Uo(n),i.error)}const c=Uo(n);if(qo(c))throw Ko(Do(n)),new Oo(n,c,i.error);if(r?.token&&c?.token!==r.token){Ko(Do(n));continue}if(!Zo(n,s))continue;e.rmSync(n,{recursive:!0,force:!0})}const s=Uo(n);throw new Oo(n,s,i.error)}(n,{component:"server-update",incompleteLockStaleMs:i.legacyGraceMs??3e4,error:{label:"TaskHandoff server update",code:"SERVER_UPDATE_ALREADY_RUNNING"}}).release},cleanUpServerUpdateLockOnSignals:function(e){const t=new Map;for(const n of["SIGINT","SIGTERM","SIGHUP"]){const i=()=>{e(),process.removeListener(n,i),process.kill(process.pid,n)};t.set(n,i),process.on(n,i)}return()=>{for(const[e,n]of t)process.removeListener(e,n)}},currentServerInstallArgs:function(t={}){const n=er(t.controlPlaneEnvFile||"/etc/task-handoff/control-plane.env"),i=er(t.nodeAgentEnvFile||"/etc/task-handoff/node-agent.env");return["--service-user",(o=t.nodeAgentUnitFile||"/etc/systemd/system/task-handoff-node-agent.service",e.existsSync(o)&&e.readFileSync(o,"utf8").match(/^User=(.+)$/m)?.[1]||"root"),"--control-plane-data-dir",n.TASK_HANDOFF_CONTROL_PLANE_DATA_DIR||"/var/lib/task-handoff/control-plane","--node-agent-data-dir",i.TASK_HANDOFF_NODE_AGENT_DATA_DIR||"/var/lib/task-handoff/node-agent","--control-plane-host",n.TASK_HANDOFF_CONTROL_PLANE_HOST||"0.0.0.0","--control-plane-port",n.TASK_HANDOFF_CONTROL_PLANE_PORT||"8081","--node-agent-host",i.TASK_HANDOFF_NODE_AGENT_HOST||"127.0.0.1","--node-agent-port",i.TASK_HANDOFF_NODE_AGENT_PORT||"8091","--node-agent-ipc-path",i.TASK_HANDOFF_NODE_AGENT_IPC_PATH||"/run/task-handoff/node-agent.sock","--auth-mode",n.TASK_HANDOFF_CONTROL_PLANE_AUTH_MODE||"password",...n.TASK_HANDOFF_CONTROL_PLANE_STATIC_DIR?["--static-dir",n.TASK_HANDOFF_CONTROL_PLANE_STATIC_DIR]:[]];var o},globalPrefixFromModulePath:function(e){let n=t.resolve(e);for(;n!==t.dirname(n);){if("node_modules"===t.basename(n)&&"lib"===t.basename(t.dirname(n)))return t.dirname(t.dirname(n));n=t.dirname(n)}}})),ir=function(){if(tr)return l;tr=1,Object.defineProperty(l,"__esModule",{value:!0});const a=e,s=t,{spawnSync:c}=n,{Command:m,InvalidArgumentError:d}=i,u=o,p=r,{ControlPlaneHealthResponseSchema:g}=Po,{acquireServerUpdateLock:z,cleanUpServerUpdateLockOnSignals:f,globalPrefixFromModulePath:b}=nr;function y(e){const t=g.safeParse(e);return t.success?t.data.data.build.packageVersion:void 0}function h(e){if(!s.isAbsolute(e))throw new d("must be an absolute path");return s.resolve(e)}const x=(new m).name("task-handoff-node-update-worker").description("Apply a detached TaskHandoff node update.").requiredOption("--job-file <path>","persisted update job file").requiredOption("--target-version <version>","exact semantic version",function(e){if(e.trim()!==e||/^[v=]/.test(e)||null===u.valid(e))throw new d("must be an exact semantic version");return e}).option("--service <name>","systemd service to restart","task-handoff-node-agent.service").option("--npm-command <path>","npm executable",process.env.TASK_HANDOFF_NPM_COMMAND||"npm").option("--control-plane-health-url <url>","local control-plane health endpoint",function(e){let t;try{t=new URL(e)}catch{throw new d("must be a valid loopback HTTP URL")}if(!["http:","https:"].includes(t.protocol)||!["127.0.0.1","localhost","::1"].includes(t.hostname))throw new d("must be a valid loopback HTTP URL");return t.toString()}).option("--install-prefix <path>","authoritative npm global prefix",h).option("--node-agent-ipc-path <path>","node-agent readiness socket",h).option("--registry <url>","npm registry URL").option("--standalone","complete the temporary job after service verification").parse(process.argv).opts(),I=x.jobFile,v=x.targetVersion,A=x.service,S=x.npmCommand,k=x.controlPlaneHealthUrl,j=x.installPrefix,w=x.nodeAgentIpcPath,C=x.registry,E=new Set(["succeeded","degraded","failed"]),N=new Set(["@task-handoff/node-agent","@task-handoff/server"]),R=["/etc/task-handoff/control-plane.env","/etc/task-handoff/node-agent.env","/etc/systemd/system/task-handoff-control-plane.service","/etc/systemd/system/task-handoff-node-agent.service"];function T(e,t){const n=JSON.parse(a.readFileSync(I,"utf8"));process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK&&function(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(s.resolve(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CAS_HOOK))({jobFile:I,observed:n});const i=`${I}.worker-lock`;a.mkdirSync(i);try{const n=JSON.parse(a.readFileSync(I,"utf8"));if(E.has(n.status)||!e.includes(n.status))return!1;const i="function"==typeof t?t(n):t,o={...n,...i,updatedAt:(new Date).toISOString()};return p.sync(I,`${JSON.stringify(o,null,2)}\n`,{encoding:"utf8"}),!0}finally{a.rmdirSync(i)}}function P(e,t){const n=c(e,t,{stdio:"inherit"});if(0!==n.status)throw new Error(`${e} exited with status ${n.status??"unknown"}`)}function _(e,t,n){const i=n?s.join(t,...n.split("/"),"node_modules",...e.split("/"),"package.json"):s.join(t,...e.split("/"),"package.json");try{return JSON.parse(a.readFileSync(i,"utf8")).version}catch(e){if("ENOENT"===e?.code)return;throw e}}function O(e,t){const n=_(e,t);if(n!==v)throw new Error(`Updated ${e} verification failed: expected ${v}, found ${n||"unknown"}.`)}function M(e){const t=["view",`${e}@${v}`,"dist.integrity","--json"];C&&t.push("--registry",C);const n=c(S,t,{encoding:"utf8"});if(0!==n.status)throw new Error(`Could not verify the ${e} npm artifact integrity.`);let i;try{i=JSON.parse(n.stdout)}catch{throw new Error(`npm returned invalid ${e} artifact integrity metadata.`)}if("string"!=typeof i||!/^sha(?:256|384|512)-[A-Za-z0-9+/=]+$/.test(i))throw new Error(`npm returned invalid ${e} artifact integrity metadata.`);return i}async function L(e,t=v,n=6e4){const i=Date.now()+n;let o="not reachable";for(;Date.now()<i;){try{if(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE){const e=y(JSON.parse(a.readFileSync(process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_HEALTH_FILE,"utf8")));if(e===t)return;o=`reported version ${String(e||"unknown")}`,await new Promise(e=>setTimeout(e,10));continue}const n=await fetch(e,{headers:{"cache-control":"no-cache"},signal:AbortSignal.timeout(2e3)}),i=y(await n.json().catch(()=>({})));if(n.ok&&i===t)return;o=n.ok?`reported version ${String(i||"unknown")}`:`returned HTTP ${n.status}`}catch(e){o=e instanceof Error?e.message:String(e)}await new Promise(e=>setTimeout(e,500))}throw new Error(`Control plane did not become healthy at ${e} with version ${t}: ${o}.`)}function D(e,t=3e4){const n=Date.now()+t;for(;Date.now()<n;){try{if(a.statSync(e).isSocket())return}catch{}Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250)}throw new Error(`Node agent socket was not ready after ${t}ms: ${e}`)}function F(e,t,n){const i=["install","--global","--prefix",e,`${t}@${n}`];C&&i.push("--registry",C),P(S,i)}return async function(){let e,t,n;try{if(!T(["queued"],e=>({status:"updating-node",rollout:{...e.rollout,phase:"updating-node"},startedAt:(new Date).toISOString(),error:void 0})))return;e=z(process.env.TASK_HANDOFF_SERVER_UPDATE_LOCK_PATH||void 0),t=f(e);const i=function(){const e=JSON.parse(a.readFileSync(I,"utf8")),t=`@${v}#`;if("string"!=typeof e.artifactRef||!e.artifactRef.startsWith("npm:")||!e.artifactRef.includes(t))throw new Error(`Update job does not pin npm integrity for version ${v}.`);const n=e.artifactRef.indexOf(t),i=e.artifactRef.slice(4,n),o=e.artifactRef.slice(n+t.length);if(!N.has(i)||!o)throw new Error("Update job does not identify a supported immutable npm artifact.");const r=M(i);if(r!==o)throw new Error(`${i} npm artifact integrity mismatch: expected ${o}, found ${String(r||"unknown")}.`);return{packageName:i,integrity:r}}(),o=i.packageName,r=b(process.argv[1]);if(j&&r&&j!==r)throw Object.assign(new Error(`Update prefix ${j} does not match the running package prefix ${r}.`),{code:"UPDATE_INSTALL_PREFIX_MISMATCH"});const m=r?void 0:c(S,["prefix","--global"],{encoding:"utf8"});if(m&&0!==m.status)throw new Error("Could not determine the npm global prefix.");const d=j||r||m?.stdout.trim();if(!d)throw new Error("Could not determine the npm global prefix.");const l=c(S,["root","--global","--prefix",d],{encoding:"utf8"});if(0!==l.status)throw new Error("Could not determine the npm global module root.");const u=l.stdout.trim(),g=[o];"@task-handoff/server"===o&&void 0!==_("@task-handoff/node-agent",u)&&g.push("@task-handoff/node-agent");const y=new Map(g.map(e=>[e,_(e,u)])),h="@task-handoff/server"===o?function(){const e=process.env.TASK_HANDOFF_UPDATE_WORKER_TEST_CONFIGURATION_ROOT;return e?R.map(t=>s.join(e,t.slice(1))):R}().map(e=>{try{const t=a.statSync(e);return{file:e,contents:a.readFileSync(e),mode:t.mode}}catch(t){if("ENOENT"===t?.code)return{file:e};throw t}}):[];let C=!1;n=async()=>{for(const e of[...g].reverse()){const t=y.get(e);t&&F(d,e,t)}if("@task-handoff/server"===o){C&&(function(e){for(const t of e)t.contents?(a.mkdirSync(s.dirname(t.file),{recursive:!0}),p.sync(t.file,t.contents,{mode:t.mode})):a.rmSync(t.file,{force:!0})}(h),P("systemctl",["daemon-reload"])),P("systemctl",["restart","task-handoff-control-plane.service"]);const e=y.get("@task-handoff/server");k&&e&&await L(k,e)}P("systemctl",["restart",A]),w&&D(w)};const E=new Map([[o,i.integrity]]);for(const e of g.slice(1))E.set(e,M(e));for(const e of g){if(F(d,e,v),M(e)!==E.get(e))throw new Error(`${e} npm artifact integrity changed during installation.`);O(e,u)}if("@task-handoff/server"===o){if(function(e){for(const t of["@task-handoff/control-plane","@task-handoff/node-agent","@task-handoff/controlled-instance"]){const n=_(t,e,"@task-handoff/server")||_(t,e);if(n!==v)throw new Error(`Updated @task-handoff/server does not provide ${t} ${v}; found ${n||"unknown"}.`)}}(u),!k)throw new Error("A control-plane health URL is required for a complete server update.");C=!0,function(e){P(s.join(e,"bin","task-handoff"),["install","--preserve-current","--materialize-only"])}(d),P("systemctl",["restart","task-handoff-control-plane.service"]),await L(k)}if(!T(["updating-node"],e=>({status:"restarting-node",rollout:{...e.rollout,phase:"restarting-node"}})))return;P("systemctl",["restart",A]),w&&D(w),x.standalone&&T(["restarting-node"],e=>({status:"succeeded",rollout:{...e.rollout,phase:"succeeded",nodeVersion:v},completedAt:(new Date).toISOString()}))}catch(e){let t;if(n)try{await n()}catch(e){t=e}const i=[e instanceof Error?e.message:String(e),t?`Rollback failed: ${t instanceof Error?t.message:String(t)}`:void 0].filter(Boolean).join(" ");T(["queued","updating-node","restarting-node"],t=>({status:"failed",rollout:{...t.rollout,phase:"failed"},error:{code:e&&"object"==typeof e&&"code"in e&&"string"==typeof e.code?e.code:"NODE_UPDATE_FAILED",message:i,retryable:e&&"object"==typeof e&&"code"in e&&"SERVER_UPDATE_ALREADY_RUNNING"===e.code},completedAt:(new Date).toISOString()})),console.error(e),process.exitCode=1}finally{t?.(),e?.()}}(),l}(),or=m(ir);module.exports=or;