@task-handoff/node-agent 0.0.25-alpha.2 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/node-update-worker.js +1 -1
- package/docker/entrypoint.sh +2 -1
- package/package.json +1 -1
- package/runtime-artifacts/{controlled-instance-runtime-0.0.25-alpha.2-linux-universal.manifest.json → controlled-instance-runtime-0.0.26-linux-universal.manifest.json} +2 -2
- package/runtime-artifacts/controlled-instance-runtime-0.0.26-linux-universal.tar.gz +0 -0
- package/runtime-artifacts/controlled-instance-runtime-0.0.26-linux-universal.tar.gz.sha256 +1 -0
- package/runtime-artifacts/controlled-instance-runtime-0.0.25-alpha.2-linux-universal.tar.gz +0 -0
- package/runtime-artifacts/controlled-instance-runtime-0.0.25-alpha.2-linux-universal.tar.gz.sha256 +0 -1
|
@@ -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=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 v=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)}),A=s.z.enum(["available","expired","missing"]),S=v.extend({contentState:A.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(),E=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(),N=R.extend({type:s.z.literal("user-message"),text:s.z.string(),attachments:s.z.array(S).max(6).optional()}).strict(),T=R.extend({type:s.z.literal("ai-message"),text:s.z.string()}).strict(),P=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:E.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",[N,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"]),M=s.z.enum(["started","interacted","interrupted"]),L=s.z.object({threadId:s.z.string().trim().min(1).max(240),path:s.z.string().trim().max(4096).optional(),status:O,activity:M.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([v.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.`})}),v.extend({source:s.z.object({type:s.z.literal("runtime-path"),path:s.z.string().trim().min(1).max(4096)}).strict()}).strict()]),q=v.extend({sourceType:s.z.enum(["inline","runtime-path"])}).strict(),$=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()]),H=s.z.enum(["auto","queue","steer","immediate"]),B=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:H.optional(),permissionMode:B.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($).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(),ie=s.z.object({modelEntityId:s.z.string().trim().min(1).max(120),modelName:s.z.string().trim().min(1).max(240)}).strict(),oe=s.z.enum(["none","minimal","low","medium","high","xhigh","max","ultra"]);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),modelSelection:ie.optional(),reasoningEffort:oe.optional()}).strict();const re=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:re.optional(),clientRequestId:s.z.string().trim().min(1).max(160),modelSelection:ie.optional(),reasoningEffort:oe.optional()}).strict(),s.z.object({clientRequestId:s.z.string().trim().min(1).max(160),modelSelection:ie}).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:oe}).strict(),s.z.object({sessionId:s.z.string().trim().min(1).max(120),accepted:s.z.literal(!0)}).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 ae=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:ae.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 se=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(q).max(6).default([]),references:Y,permissionMode:B.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(),ce=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(se).max(100).default([])}).strict().default({revision:0,pendingCount:0,items:[]}),me=s.z.enum(["control","realtime","adapter-snapshot","transcript-tail","transcript-scan","process-scan","app-session"]),de=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(),le=s.z.object({id:s.z.string().trim().min(1).max(240),providerTurnId:s.z.string().trim().max(240).optional(),source:me.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(de).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(),ue=le.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(),pe=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(),modelSelection:ie.optional(),reasoningEffort:oe.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(le).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(L).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:ce}).strict(),ge=pe.pick({id:!0,appBindingKeys:!0,cwd:!0,error:!0,providerMeta:!0,modelSelection:!0,reasoningEffort:!0,queue:!0,subAgents:!0}).strict(),ze=le.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(),fe=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(ze).max(50)}).strict(),be=s.z.object({sessionId:s.z.string().trim().min(1).max(120),revision:s.z.string().trim().min(1).max(64),turn:le}).strict(),ye=s.z.string().trim().min(1).max(64),he=s.z.object({kind:s.z.literal("not-modified"),revision:ye}).strict();s.z.discriminatedUnion("kind",[he,s.z.object({kind:s.z.literal("updated"),revision:ye,detail:ge}).strict()]),s.z.discriminatedUnion("kind",[he,s.z.object({kind:s.z.literal("updated"),revision:ye,index:fe}).strict()]),s.z.discriminatedUnion("kind",[he,s.z.object({kind:s.z.literal("updated"),revision:ye,body:be}).strict()]);const xe=s.z.object({session:pe,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(),Ie=xe.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([Ie,xe.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 Ie.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 ve=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(),modelSelection:ie.optional(),reasoningEffort:oe.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(ve).max(500).default([])}).strict(),s.z.object({items:s.z.array(ve).max(500).default([])}).strict(),s.z.object({item:ve,turns:s.z.array(ue).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 Ae=le.omit({userMessages:!0}),Se=pe.pick({id:!0,agent:!0,creationSource:!0,appSessionId:!0,appId:!0,providerSessionId:!0,lineage:!0,providerMeta:!0,modelSelection:!0,reasoningEffort:!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(Ae).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:le.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(),ke=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(Se).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:ke}).strict(),ke.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 je=s.z.enum(["provider-event","app-session-created","app-session-updated","app-session-deleted","discovery-scan","control-action","heartbeat-sync","startup"]),we=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:je}).strict(),Ce=s.z.object({meta:we,snapshot:ke}).strict(),Ee=s.z.object({meta:we,upserted:s.z.array(Se).default([]),removed:s.z.array(s.z.string().trim().min(1).max(120)).default([])}).strict(),Re=s.z.object({meta:we,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:Ce}).strict(),s.z.object({type:s.z.literal("ai-session.patch"),payload:Ee}).strict(),s.z.object({type:s.z.literal("ai-session.removed"),payload:Re}).strict()])).default([])}).strict();const Ne=s.z.object({source:me,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(),Te=Ne.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(),modelSelection:ie.optional(),reasoningEffort:oe.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(le).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(L).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(),Pe=Ne.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:ie.optional(),reasoningEffort:oe.optional(),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(L).max(50).optional(),contextCompaction:de.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",[Te,Pe]);const _e=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()]),Oe=s.z.union([_e,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()]),Me=s.z.object({promptTemplate:s.z.string().trim().min(1).max(2e4)}).strict(),Le=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(),De=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:Oe,action:Me,policy:Le.default({maxConcurrentRuns:1,whenBusy:"skip"}),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).strict(),Fe=s.z.object({type:s.z.literal("ai-session"),aiSessionId:s.z.string().trim().min(1).max(160)}).strict(),Ue=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:Fe,localName:s.z.string().trim().min(1).max(160).optional(),createdAt:s.z.string().datetime(),updatedAt:s.z.string().datetime()}).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),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(),qe=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:Fe,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(De).default([]),deployments:s.z.array(Ue).default([]),runtime:s.z.array(Ve).default([]),recentRuns:s.z.array(qe).default([])}).strict();const $e=s.z.object({config:De,deployment:Ue,runtime:Ve.optional()}).strict();s.z.object({instanceId:s.z.string().trim().min(1).max(160),sessionId:s.z.string().trim().min(1).max(160),mutation:$e.optional()}).strip(),s.z.object({instanceId:s.z.string().trim().min(1).max(160),sessionId:s.z.string().trim().min(1).max(160),configHash:De.shape.configHash}).strip();const He=s.z.object({instanceId:s.z.string().trim().min(1).max(160),instanceName:s.z.string().trim().min(1).max(160),deployment:Ue,runtime:Ve.optional()}).strip(),Be=qe.extend({instanceName:s.z.string().trim().min(1).max(160).optional()}).strip(),Ge=s.z.object({configHash:s.z.string().trim().min(8).max(80),config:De,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(He),recentRuns:s.z.array(Be)}).strip();s.z.object({updatedAt:s.z.string().datetime(),triggers:s.z.array(Ge)}).strip(),s.z.object({name:De.shape.name,description:De.shape.description,source:Oe,action:Me,policy:Le.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 Ke=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Proxy protocol version must use YYYY-MM-DD format."),We=s.z.string().trim().min(1).max(160).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Ye=s.z.string().datetime(),Xe=s.z.string().trim().min(32).max(4096),Je=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 Ze=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"})),Qe=s.z.object({code:Ze,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(),et=s.z.enum(["active","revoked"]),tt=s.z.object({id:We,targetNodeId:We,status:et,createdBy:We,expiresAt:Ye,revokedAt:Ye.optional(),createdAt:Ye,updatedAt:Ye}).strict();s.z.object({targetNodeId:We,expiresInSeconds:s.z.number().int().min(60).max(3600).default(600)}).strict(),s.z.object({invite:tt,token:s.z.string().trim().min(24).max(512),proxyOrigin:Je,protocolVersion:Ke}).strict();const nt=s.z.enum(["active","revoked"]),it=s.z.object({id:We,claimId:We,sourceControlPlaneId:We,targetNodeId:We,bindingKeyId:We,status:nt,revision:s.z.number().int().positive(),lastError:Qe.optional(),revokedAt:Ye.optional(),createdAt:Ye,updatedAt:Ye}).strict();s.z.object({protocolVersion:Ke,inviteToken:s.z.string().trim().min(24).max(512).optional(),claimId:We,sourceControlPlaneId:We,targetNodeId:We.optional(),bindingKeyId:We,credential:Xe}).strict(),s.z.object({sourceControlPlaneId:We,bindingKeyId:We,credential:Xe}).strict();const ot=s.z.object({id:We,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:Ye.optional(),capabilities:s.z.record(s.z.string(),s.z.unknown()).default({})}).strict(),rt=s.z.object({protocolVersion:Ke,binding:it,streamId:We,revision:s.z.number().int().nonnegative(),observedAt:Ye,target:ot}).strict(),at=s.z.object({type:s.z.literal("control-plane-proxy.event"),protocolVersion:Ke,streamId:We,bindingId:We,sourceControlPlaneId:We,targetNodeId:We,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:ot,event:s.z.object({type:s.z.string().trim().min(1).max(240),topic:s.z.string().trim().min(1).max(240),createdAt:Ye}).strict()}).strict(),st=s.z.object({type:s.z.literal("control-plane-proxy.events.ready"),protocolVersion:Ke,streamId:We,bindingId:We,sourceControlPlaneId:We,targetNodeId:We,latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative()}).strict(),ct=s.z.object({type:s.z.literal("control-plane-proxy.snapshot-required"),protocolVersion:Ke,streamId:We,bindingId:We,sourceControlPlaneId:We,targetNodeId:We,sinceRevision:s.z.number().int().nonnegative(),latestRevision:s.z.number().int().nonnegative(),earliestRetainedRevision:s.z.number().int().nonnegative(),error:Qe}).strict();s.z.discriminatedUnion("type",[at,st,ct]),s.z.object({protocolVersion:Ke,binding:it,target:rt.shape.target}).strict(),s.z.object({id:We,claimId:We,proxyOrigin:Je,requestedName:s.z.string().trim().min(1).max(160).optional(),sourceControlPlaneId:We,targetNodeId:We.optional(),bindingKeyId:We,credential:Xe,status:s.z.enum(["pending","compensation-required"]),createdAt:Ye,updatedAt:Ye,expiresAt:Ye}).strict().omit({credential:!0}),s.z.object({id:We,nodeId:We,proxyOrigin:Je,proxyBindingId:We,targetNodeId:We,sourceControlPlaneId:We,bindingKeyId:We,credential:Xe,createdAt:Ye,updatedAt:Ye}).strict();const mt=s.z.string().trim().min(1).max(120),dt=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}),lt=s.z.object({selectAtCreate:s.z.boolean().default(!1),updateDuringSession:s.z.boolean().default(!1)}).strip().default({selectAtCreate:!1,updateDuringSession:!1}),ut=s.z.object({agent:mt,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:dt.optional(),reasoningEffort:lt.optional()}).passthrough(),pt=s.z.array(ut).max(100).default([]),gt="2026-08-27",zt=new Set(["2026-08-01","2026-08-16","2026-08-17","2026-08-20",gt]),ft=s.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Protocol version must use YYYY-MM-DD format."),bt=s.z.string().trim().min(1).max(120);function yt(){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 ht=s.z.object({sessionReadAgents:s.z.array(bt).max(100).default([]),turnReadAgents:s.z.array(bt).max(100).default([]),liveItemAgents:s.z.array(bt).max(100).default([])}).passthrough(),xt=s.z.object({metadataAgents:s.z.array(bt).max(100).default([]),contentAgents:s.z.array(bt).max(100).default([]),uploadAgents:s.z.array(bt).max(100).default([]),retentionSettings:s.z.boolean().default(!1),fileSizeLimitSettings:s.z.boolean().default(!1)}).passthrough(),It=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:ht.default(function(){return{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]}}),aiSessionConversationAttachments:xt.optional(),aiSessionProviders:pt.optional()}).passthrough(),vt=s.z.object({features:It.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 At(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=ht.safeParse(o.aiSessionTimeline);a.success&&(r.aiSessionTimeline=a.data);const c=xt.safeParse(o.aiSessionConversationAttachments);c.success&&(r.aiSessionConversationAttachments=c.data);const m=pt.safeParse(o.aiSessionProviders);return m.success&&(r.aiSessionProviders=m.data),vt.parse({...n,features:{...o,...r}})}function St(e){return At(e).features.aiSessionConversationAttachments}function kt(e){return At(e).features.aiSessionProviders}function jt(e,t){const n=St(e);return"metadata"===t?n.metadataAgents:"content"===t?n.contentAgents:n.uploadAgents}function wt(e){return At(e).features.aiSessionTimeline}function Ct(e,t){const n=wt(e);return"session-read"===t?n.sessionReadAgents:"turn-read"===t?n.turnReadAgents:n.liveItemAgents}const Et=s.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Rt=s.z.string().datetime(),Nt=s.z.record(s.z.string(),s.z.string()).default({}),Tt=s.z.record(s.z.string(),s.z.string()).default({}),Pt=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."})}),_t=/^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/,Ot=/^sha256:([a-fA-F0-9]{64})$/,Mt=/^(?:localhost|[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)(?::[1-9][0-9]{0,4})?$/,Lt=/^[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*$/;function Dt(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?Ot.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&&!_t.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&&!Mt.test(l[0].toLowerCase()))throw new Error("Docker image registry host or port is invalid.");if(!p.length||p.some(e=>!Lt.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 Ft(e){const t=Dt(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 Ut=s.z.string().trim().min(1).max(512).transform((e,t)=>{try{return Dt(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),s.z.NEVER}}),Vt=s.z.string().trim().transform((e,t)=>{const n=Ot.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)}),qt=s.z.object({modelEntityIds:s.z.array(Et).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Et.nullable().optional(),claudeModelHash:Et.nullable().optional(),opencodeModelHash:Et.nullable().optional()}).strict().default({}),$t=s.z.object({imageId:Et,tag:s.z.string().trim().min(1).max(128).regex(_t).optional()}).strict(),Ht=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("image"),imageSelection:$t}).strict(),s.z.object({type:s.z.literal("template"),environmentTemplateId:Et}).strict()]),Bt=s.z.enum(["creating","ready","failed","deleting"]),Gt=s.z.enum(["linux","darwin","win32","freebsd","openbsd","aix","sunos","unknown"]),Kt=s.z.enum(["x64","arm64","arm","ia32","ppc64","s390x","riscv64","unknown"]),Wt=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(),Yt=s.z.object({templateId:Et,nodeId:Et,imageId:Vt,name:s.z.string().trim().min(1).max(160),platform:Gt,architecture:Kt}).strict(),Xt=s.z.enum(["data","agent-home","workspace"]),Jt=s.z.object({deleteVolumes:s.z.boolean()}).strict(),Zt=s.z.object({role:Xt,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:Et,containerDeleted:s.z.boolean(),completed:s.z.boolean(),deletedVolumes:s.z.array(Zt),retainedVolumes:s.z.array(Zt),volumeResults:s.z.array(Zt)}).strict(),en={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"};function tn(e,t){if(e&&"object"==typeof e&&!Array.isArray(e)){const t=e;return{imageId:"string"==typeof t.imageId&&en[t.imageId]||t.imageId,..."string"==typeof t.tag?{tag:t.tag}:{}}}if("string"==typeof t)return{imageId:en[t]||t}}const nn=s.z.object({id:Et,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(),on=s.z.object({code:s.z.enum(["APP_CATALOG_INVALID"]),message:s.z.string().trim().min(1).max(500)}).strict(),rn=s.z.object({items:s.z.array(nn).max(256),observedAt:Rt,issues:s.z.array(on).max(32).default([])}).strict(),an=s.z.object({id:Et,name:s.z.string().trim().min(1).max(160),sourceInstanceId:Et,nodeId:Et,imageId:Vt.optional(),internalTag:s.z.string().trim().min(1).max(512).optional(),platform:Gt.optional(),architecture:Kt.optional(),sizeBytes:s.z.number().int().nonnegative().optional(),status:Bt,error:Wt.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."})}),sn=s.z.enum(["apt","dnf","brew","npm"]),cn=s.z.enum(["user","passwordless-sudo","root"]),mn=s.z.object({platform:Gt,arch:Kt,installers:s.z.array(sn).max(8),privilege:cn,installerAccess:s.z.object({npmGlobalWritable:s.z.boolean().optional()}).strict().optional()}).strict(),dn=s.z.enum(["installed","not-installed","broken","unsupported"]),ln=s.z.enum(["recipe","bundled","external","none"]),un=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(),pn=s.z.object({id:Et,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:dn,managementSource:ln,version:s.z.string().trim().max(120).optional(),canInstall:s.z.boolean(),canUninstall:s.z.boolean(),installReason:un.optional(),uninstallReason:un.optional(),activeJobId:Et.optional()}).strict(),gn=s.z.enum(["install","uninstall"]),zn=s.z.enum(["queued","running","succeeded","failed","cancelled","interrupted"]),fn=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"]}),bn=s.z.object({executable:s.z.string().trim().min(1).max(4096),args:s.z.array(s.z.string().max(4096)).max(128)}).strict(),yn=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(Et).max(64).optional()}).strict(),hn=s.z.object({id:Et,requestId:Et.optional(),appId:Et,operation:gn,state:zn,phase:s.z.string().trim().min(1).max(120).optional(),progress:fn.optional(),command:bn.optional(),logTail:s.z.string().max(32768).optional(),logTruncated:s.z.boolean().optional(),error:yn.optional(),requestedAt:Rt,startedAt:Rt.optional(),finishedAt:Rt.optional(),updatedAt:Rt}).strict(),xn=s.z.object({streamId:Et,sequence:s.z.number().int().nonnegative(),capabilities:mn,apps:s.z.array(pn).max(256),activeJobs:s.z.array(hn).max(256),recentJobs:s.z.array(hn).max(256),observedAt:Rt}).strict(),In=s.z.object({requestId:Et.optional()}).strict(),vn=s.z.object({job:hn}).strict(),An=s.z.object({type:s.z.literal("app-management"),streamId:Et,sequence:s.z.number().int().nonnegative(),observedAt:Rt,job:hn.optional(),snapshot:xn.optional()}).strict().refine(e=>void 0!==e.job||void 0!==e.snapshot,{message:"An app management event requires a job or snapshot."}),Sn=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:ft.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(),kn=s.z.object({data:s.z.object({ok:s.z.literal(!0),role:s.z.literal("control-plane"),protocolVersion:ft,build:Sn.extend({component:s.z.literal("control-plane"),packageVersion:s.z.string().trim().min(1).max(80)}).loose(),serverTime:Rt}).loose()}).loose(),jn=s.z.enum(["stable","beta","alpha"]),wn=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(),Cn=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(),En=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:Cn.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(Et).max(1024).default([]),stoppedInstanceIds:s.z.array(Et).max(1024).default([]),activeInstanceIds:s.z.array(Et).max(1024).default([])}).strict(),Nn=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(Et).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(),Tn=s.z.object({channel:jn.default("stable")}).strict(),Pn=s.z.object({source:s.z.literal("npm"),channel:jn,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(wn).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(),_n=s.z.object({id:Et,nodeId:Et,source:s.z.literal("npm"),channel:jn,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(wn).default([]),impact:Rn,rollout:Nn,status:s.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),error:Cn.optional(),startedAt:Rt.optional(),completedAt:Rt.optional(),createdAt:Rt,updatedAt:Rt}).strict(),On=s.z.object({channel:jn,targetVersion:s.z.string().trim().min(1).max(240),preflightToken:s.z.string().trim().min(16).max(240)}).strict(),Mn=s.z.object({type:s.z.enum(["branch","tag"]),name:s.z.string().trim().min(1).max(240)}).strict(),Ln=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(),Dn=s.z.discriminatedUnion("type",[Mn,Ln]),Fn=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(),Un=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(),Vn=s.z.object({id:Et,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:Dn.default({type:"branch",name:"main"}),auth:Fn.default({type:"none"}),clone:Un.default({submodules:!1,lfs:!1,subdirectory:""}),defaultImageSelection:$t.optional(),labels:Nt,createdAt:Rt,updatedAt:Rt}).strict(),qn=s.z.object({id:Et,nodeId:Et,name:s.z.string().trim().min(1).max(160),path:s.z.string().trim().min(1).max(4096),defaultImageSelection:$t.optional(),labels:Nt,createdAt:Rt,updatedAt:Rt}).strict(),$n=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("git-repository"),repositoryId:Et.optional(),url:s.z.string().trim().min(1).max(2048),provider:s.z.string().trim().max(80).optional(),ref:Dn.default({type:"branch",name:"main"}),auth:Fn.default({type:"none"}),clone:Un.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:Dn.default({type:"branch",name:"main"}),auth:Fn.default({type:"none"}),clone:Un.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),s.z.object({type:s.z.literal("local-folder"),localFolderId:Et.optional(),path:s.z.string().trim().min(1).max(4096),ownerNodeId:Et.optional()}).strict()]);function Hn(e){const t=$n.parse(e);return"local-folder"===t.type?t:$n.parse({...t,auth:{type:"none"}})}const Bn=Hn,Gn=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(),Kn=s.z.enum(["codex","claude","opencode"]),Wn=s.z.enum(["openai-responses","openai-chat-completions","anthropic-messages"]),Yn=s.z.object({name:s.z.string().trim().min(1).max(240),order:s.z.number().int().min(0).max(1e6).default(0)}).strict(),Xn=s.z.object({id:Et,name:s.z.string().trim().min(1).max(160),source:$n,defaultImageSelection:$t.optional(),defaultNodeId:Et.optional(),workspacePolicy:Gn,labels:Nt,createdAt:Rt,updatedAt:Rt}).strict(),Jn=s.z.object({id:Et,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(Yn).max(256).default([]),protocols:s.z.array(Wn).max(3).default([]),app:Kn,enabled:s.z.boolean().default(!0),order:s.z.number().int().min(0).max(1e6).default(0),labels:Nt,createdAt:Rt,updatedAt:Rt}).strict(),Zn=Jn,Qn=Jn.omit({key:!0}).extend({keyPreview:s.z.string().trim().min(1).max(160),keySet:s.z.boolean()}).strict(),ei=Qn.extend({referenceCount:s.z.number().int().min(0)}).strict(),ti=s.z.object({instanceId:Et,modelEntityIds:s.z.array(Et).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Et.optional(),claudeModelHash:Et.optional(),opencodeModelHash:Et.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)))]})),ni=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("control-plane"),name:Jn.shape.name,enabled:Jn.shape.enabled,order:Jn.shape.order}).strict(),s.z.object({type:s.z.literal("node"),nodeId:Et,name:Jn.shape.name,enabled:Jn.shape.enabled,order:Jn.shape.order,referenceCount:s.z.number().int().min(0)}).strict()]),ii=s.z.object({id:Et,model:Qn,locations:s.z.array(ni).min(1),referenceCount:s.z.number().int().min(0).default(0)}).strict(),oi=s.z.object({nodeId:Et,code:s.z.string().trim().min(1).max(120),message:s.z.string().trim().min(1).max(2e3)}).strict(),ri=s.z.object({models:s.z.array(ii),nodeDiagnostics:s.z.array(oi).default([]),updatedAt:Rt}).strict(),ai=Jn.omit({id:!0,createdAt:!0,updatedAt:!0}).strict(),si=ai.partial().strict(),ci=Jn,mi=s.z.object({modelSelection:qt,modelEntityIds:s.z.array(Et).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Et.optional(),claudeModelHash:Et.optional(),opencodeModelHash:Et.optional()}).strict().transform(e=>({...e,modelEntityIds:e.modelEntityIds||e.modelSelection.modelEntityIds||[...new Set([e.codexModelHash,e.claudeModelHash,e.opencodeModelHash].filter(e=>Boolean(e)))]})),di=s.z.enum(["market","custom"]),li=s.z.enum(["active","deprecated","yanked"]),ui=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:Vt.optional()}).strict()]),pi=s.z.array(s.z.string().trim().min(1).max(80)).default([]),gi=s.z.array(s.z.string().trim().min(1).max(120)).default([]),zi=s.z.record(s.z.string().trim().min(2).max(35),s.z.string().trim().min(1).max(4096)),fi=s.z.object({os:s.z.string().trim().min(1).max(40),architecture:s.z.string().trim().min(1).max(40),digest:Vt.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional()}).strict(),bi=s.z.object({name:s.z.string().trim().min(1).max(128).regex(_t),version:s.z.string().trim().min(1).max(160).optional(),reference:Ut,manifestDigest:Vt.optional(),publishedAt:Rt.optional(),platforms:s.z.array(fi).default([]),status:li.default("active")}).strict(),yi=s.z.object({id:Et,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:zi.optional(),cover:ui.optional(),repository:s.z.string().trim().min(1).max(512),defaultTag:s.z.string().trim().min(1).max(128).regex(_t),tags:s.z.array(bi).min(1),capabilities:pi,optionalApps:gi,defaultEnv:Tt,labels:Nt,status:li.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."})}),hi=s.z.object({protocolVersion:ft,catalogId:Et,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(yi)}).strict(),xi=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(),Ii=s.z.object({id:Et,origin:s.z.literal("custom"),name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:zi.optional(),cover:ui.optional(),reference:Ut,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(_t).optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:pi,optionalApps:gi,defaultEnv:Tt,labels:Nt,createdAt:Rt,updatedAt:Rt}).strict(),vi=Ii,Ai=s.z.object({name:s.z.string().trim().min(1).max(128).regex(_t),version:s.z.string().trim().min(1).max(160).optional(),reference:Ut,manifestDigest:Vt.optional(),status:li}).strict(),Si=s.z.object({id:Et,origin:di,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:zi.optional(),cover:ui,repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(_t).optional(),availableTags:s.z.array(Ai),reference:Ut,digest:Vt.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),unpackedSizeBytes:s.z.number().int().positive().optional(),capabilities:pi,optionalApps:gi,defaultEnv:Tt,labels:Nt,readOnly:s.z.boolean(),lifecycleStatus:li.optional(),market:s.z.object({catalogId:Et,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(),ki=s.z.object({id:Et,origin:di,name:s.z.string().trim().min(1).max(160),description:s.z.string().trim().max(4096).optional(),localizedDescriptions:zi.optional(),cover:ui.optional(),repository:s.z.string().trim().min(1).max(512),tag:s.z.string().trim().min(1).max(128).regex(_t).optional(),requestedReference:Ut,resolvedDigest:Vt.optional(),resolvedReference:Ut.optional(),downloadSizeBytes:s.z.number().int().positive().optional(),pullPolicy:s.z.literal("if-not-present").default("if-not-present"),capabilities:pi,optionalApps:gi,defaultEnv:Tt,labels:Nt,market:s.z.object({catalogId:Et,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(),ji=s.z.object({phase:s.z.enum(["checking-image","pulling-image","resolving-image","ready","failed"]),requestedReference:Ut,generation:s.z.number().int().nonnegative().default(0),error:s.z.string().trim().max(4096).optional(),startedAt:Rt,updatedAt:Rt}).strict(),wi=s.z.object({instanceId:Et,generation:s.z.number().int().nonnegative(),requestedReference:Ut,sequence:s.z.number().int().nonnegative(),observedAt:Rt}).strict(),Ci=wi.extend({data:s.z.string().min(1).max(65536),replay:s.z.boolean().optional()}).strict(),Ei=wi.extend({outcome:s.z.enum(["succeeded","failed"])}).strict(),Ri=wi.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 Ni(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=Dt(s)}catch{if(!s.includes("@")&&s.lastIndexOf(":")<=s.lastIndexOf("/"))try{s=Dt(`${s}:latest`),t?.({imageId:o,field:"reference:implicit-latest"})}catch{}}try{a=s?Ft(s):void 0}catch{}return{id:n.id,origin:"custom",name:n.name,description:n.description,localizedDescriptions:n.localizedDescriptions,cover:Io(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 Ti=s.z.discriminatedUnion("kind",[s.z.object({kind:s.z.literal("direct")}).strict(),s.z.object({kind:s.z.literal("control-plane-proxy"),proxyId:Et,proxyBindingId:Et,targetNodeId:Et}).strict()]),Pi=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(),_i=s.z.object({nodeId:Et,inviteId:Et.optional()}).strict(),Oi=s.z.discriminatedUnion("status",[s.z.object({id:Et,status:s.z.literal("pending")}).strict(),s.z.object({id:Et,status:s.z.literal("completed"),nodeId:Et}).strict()]),Mi=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:ot.optional(),lastError:Qe.optional(),updatedAt:Rt}).strict(),Li=s.z.object({id:Et,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:Ti.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:Et.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:Mi.optional(),appInventory:rn.optional(),labels:Nt,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."})}),Di=s.z.object({nodeId:Et,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:Pi.nullable(),proxyState:Mi.nullable()}).strict(),Fi=s.z.object({id:Et,nodeId:Et,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:Nt,createdAt:Rt,updatedAt:Rt}).strict(),Ui=s.z.object({instanceId:Et,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(),Vi=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(),qi=s.z.object({multiEntityAssignment:s.z.boolean().default(!1),privateModelCatalog:s.z.boolean().default(!1)}).strip(),$i=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:Vi.optional(),managedModels:qi.optional()}).strip();function Hi(e){const t=$i.safeParse(e),n=t.success?t.data:{};return{...n,managedGitCredentials:Vi.parse(n.managedGitCredentials||{}),managedModels:qi.parse(n.managedModels||{})}}const Bi=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(),Gi=s.z.object({ok:s.z.boolean().optional(),role:s.z.string().optional(),nodeId:Et.optional(),platform:Gt.optional(),arch:Kt.optional(),protocolVersion:ft.optional(),capabilities:$i.optional(),build:Sn.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:Bi.optional(),serverTime:Rt.optional()}).strip(),Ki=s.z.object({bindScope:s.z.enum(["loopback","all-ipv4"]),port:s.z.number().int().min(1).max(65535)}).strict(),Wi=Ki.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(),Yi=Ki,Xi=s.z.object({nodeId:Et,joinToken:s.z.string().trim().min(1),expiresAt:Rt}).passthrough(),Ji=s.z.object({nodeId:Et,keyId:Et,secret:s.z.string().regex(/^[A-Za-z0-9_-]{32,128}$/),pairedAt:Rt}).strict(),Zi=s.z.object({id:Et,keyId:Et,name:s.z.string().trim().min(1).max(160).optional(),pairedAt:Rt,updatedAt:Rt,current:s.z.boolean()}).passthrough(),Qi=s.z.object({keyId:Et,revoked:s.z.literal(!0),revokedAt:Rt}).strict(),eo=s.z.object({id:Et,pairingKeyId:Et,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(),to=s.z.object({pairing:Zi,connection:s.z.object({id:Et,pairingKeyId:Et,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(),no=s.z.object({deleted:s.z.boolean().optional()}).passthrough(),io=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(),oo=s.z.object({image:Si,status:s.z.enum(["available","pull-required","unknown"]),localImage:io.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(),ro=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(ro)}).passthrough()),ao=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(),so=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(),co=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(),mo=s.z.object({...co.shape}).strict(),lo=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"}),uo=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(),po=s.z.object({id:Et,name:s.z.string().trim().min(1).max(160),projectId:Et.optional(),source:$n,sourceSnapshot:s.z.record(s.z.string(),s.z.unknown()).default({}),modelSelection:qt,nodeId:Et,runtimeId:Et,imageSelection:$t.optional(),environmentSource:Ht.optional(),environmentTemplateOrigin:Yt.optional(),imageSnapshot:ki.optional(),imageProvisioning:ji.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:ft.optional(),instanceVersion:s.z.string().trim().max(80).optional(),build:Sn.optional(),runtimeVersion:En.optional(),ready:s.z.boolean().default(!1),capabilities:vt.default(yt),appInventory:rn.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:B.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,codexConfigEnabled:!0,codexHomeMode:"taskhandoff",defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:g}),workspace:uo.default({status:"unknown"}),target:co.default({strategy:"direct-port",status:"unknown"}),access:lo,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:ke.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:De,deployments:s.z.array(Ue).default([]),runtime:s.z.array(Ve).default([])}).strict()).default([]),recentRuns:s.z.array(qe).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(),go=s.z.union([po.transform(e=>({instance:e,gitWorkspaceProvisioningOperationId:void 0})),s.z.object({instance:po,gitWorkspaceProvisioningOperationId:Et.optional()}).strict()]),zo=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:bo(t.instance),..."string"==typeof t.gitWorkspaceProvisioningOperationId?{gitWorkspaceProvisioningOperationId:t.gitWorkspaceProvisioningOperationId}:{}}:bo(t)},go),fo=s.z.object({instanceId:po.shape.id,revision:s.z.number().int().min(0),updatedAt:Rt,status:po.shape.status.unwrap(),health:po.shape.health.unwrap(),connectionStatus:po.shape.connectionStatus.unwrap(),accessStatus:s.z.enum(["reachable","endpoint-unreachable"]),imageProvisioning:ji.optional(),workspace:uo,runtime:po.shape.runtime.unwrap(),runtimeVersion:En.optional(),ready:s.z.boolean(),lastHeartbeatAt:Rt.optional()}).strict();function bo(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(Object.keys(po.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=At(e)}else o.capabilities=At(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=Io(e,["id","name","kind","source","availability","diagnosticCode"]);return!i||"object"!=typeof i||Array.isArray(i)?i:{...i,capabilities:Io(e.capabilities,["automation","supportsCwdSelection"])}}):i.items,issues:Array.isArray(i.issues)?i.issues.map(e=>Io(e,["code","message"])):i.issues},r=rn.safeParse(o);return r.success?r.data:void 0}(n.appInventory,t,"string"==typeof n.id?n.id:void 0),o.source=xo(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=yo(Sn,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=yo(Se,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"}),ke.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=yo(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=Io(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=Io(e,t)}return r.action=Io(o.action,["promptTemplate"]),r.policy=Io(o.policy,["cooldownMs","maxConcurrentRuns","whenBusy"]),yo(De,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,Ue,`triggers.configs.${i}.deployments`),runtime:o(r.runtime,Ve,`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,qe,"triggers.recentRuns")}}(n.triggers,t,"string"==typeof n.id?n.id:void 0),o.apps=yo(po.shape.apps.unwrap(),Io(n.apps,["runningCount","problemCount","updatedAt","revision"]),"apps",t,"string"==typeof n.id?n.id:void 0)||{runningCount:0,problemCount:0},o.config=yo(po.shape.config.unwrap(),Io(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:g},o.modelSelection=yo(qt.unwrap(),Io(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=Ni(o),{reference:a,...s}=r,c=o.requestedReference??a;let m;try{m="string"==typeof c?Ft(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?Io(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=Io(n.imageSelection,["imageId","tag"]);o.imageSelection=a||(r?{imageId:r,tag:o.imageSnapshot?.tag}:void 0),o.imageProvisioning=yo(ji,Io(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(En.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(Cn.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=yo(uo,n.workspace,"workspace",t,"string"==typeof n.id?n.id:void 0)||{status:"unknown"},o.environmentSource=yo(Ht,n.environmentSource,"environmentSource",t,"string"==typeof n.id?n.id:void 0),o.environmentTemplateOrigin=yo(Yt,n.environmentTemplateOrigin,"environmentTemplateOrigin",t,"string"==typeof n.id?n.id:void 0),o.runtime=yo(po.shape.runtime.unwrap(),n.runtime,"runtime",t,"string"==typeof n.id?n.id:void 0)||{labels:{}},o.target=yo(co,Io(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=yo(lo,Io(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(po.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 yo(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=ho(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=ho(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 ho(e,t){let n=e;for(const e of t){if(!n||"object"!=typeof n)return;n=n[e]}return n}function xo(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return e;const i=e,o=i.type,r=$n.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=Io(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=Dn.safeParse(Io(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?Dn.safeParse({type:"commit",commit:r}):a?Dn.safeParse({type:"tag"===i?.type?"tag":"branch",name:a}):Dn.safeParse({type:"branch",name:"main"});return s.success?(t?.({instanceId:n,field:"source.ref"}),s.data):void 0}(i.ref,t,n),o=yo(Fn,Io(i.auth,["type","secretId"]),"source.auth",t,n),r=yo(Un,Io(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=yo(r,s,"source",t,n);return c?(Object.keys(i).some(e=>!a.includes(e))&&t?.({instanceId:n,field:"source"}),c):s}function Io(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 vo=s.z.object({instanceId:Et.optional(),projectId:Et.optional(),source:$n.optional(),nodeId:Et.optional(),runtimeId:Et.optional(),imageSelection:$t.optional(),instanceVersion:s.z.string().trim().max(80).optional(),protocolVersion:ft,build:Sn.optional(),controlMode:s.z.enum(["standalone","controlled"]).default("controlled"),capabilities:vt.default(yt),appInventory:rn.optional(),target:mo.optional(),workspace:uo.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)=>{zt.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol register payload requires appInventory."})}),Ao=s.z.object({status:po.shape.status.optional(),health:po.shape.health.optional(),protocolVersion:ft,build:Sn.optional(),capabilities:po.shape.capabilities.optional(),appInventory:rn.optional(),apps:po.shape.apps.optional(),aiSessions:po.shape.aiSessions.optional(),triggers:po.shape.triggers.optional(),workspace:uo.optional(),target:mo.optional(),processIncarnationId:s.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{zt.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol heartbeat payload requires appInventory."})}),So=s.z.enum(["web","telegram","wechat","dingding","lark"]),ko=s.z.object({id:Et,channel:So,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(),jo=s.z.object({id:Et,channel:So,bridgeId:Et.optional(),chatSessionId:s.z.string().trim().min(1).max(240),userId:s.z.string().trim().max(240).optional(),activeProjectId:Et.optional(),activeInstanceId:Et.optional(),activeAiSessionId:s.z.string().trim().min(1).max(120).optional(),lastUsedAt:Rt,createdAt:Rt,updatedAt:Rt}).strict(),wo=s.z.object({source:s.z.object({type:s.z.literal("chat-gateway").default("chat-gateway"),channel:So,bridgeId:Et.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:Et,aiSessionId:s.z.string().trim().min(1).max(120)}).strict().optional()}).strict(),Co=s.z.object({id:Et,instanceId:Et,projectId:Et.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 Eo,Ro,No=d(Object.freeze({__proto__:null,AiSessionConversationAttachmentCapabilitiesSchema:xt,AiSessionProviderCapabilitiesSchema:pt,AiSessionProviderCapabilitySchema:ut,AiSessionTimelineCapabilitiesSchema:ht,AppInstallPrivilegeSchema:cn,AppInstallerSchema:sn,AppManagementCommandSchema:bn,AppManagementErrorSchema:yn,AppManagementEventSchema:An,AppManagementJobResponseSchema:vn,AppManagementJobSchema:hn,AppManagementJobStateSchema:zn,AppManagementOperationRequestSchema:In,AppManagementOperationSchema:gn,AppManagementProgressSchema:fn,AppManagementSnapshotSchema:xn,ApplyUpdateRequestSchema:On,BuildInfoSchema:Sn,CONTROL_PLANE_PROTOCOL_VERSION:gt,ChatBridgeConfigSchema:ko,ChatChannelSchema:So,ChatGatewayMessageSchema:wo,ChatSessionBindingSchema:jo,ControlPlaneHealthResponseSchema:kn,ControlledInstanceCapabilitiesSchema:vt,ControlledInstanceFeatureCapabilitiesSchema:It,ControlledInstanceHeartbeatSchema:Ao,ControlledInstanceRegisterSchema:vo,ControlledInstanceSchema:po,CreateNodeModelSchema:ai,CustomImageProfileSchema:Ii,DEFAULT_IMAGE_COVER:{kind:"builtin",key:"default-image-cover"},DeployNodeModelSchema:ci,DockerImageDigestSchema:Vt,DockerImageReferenceSchema:Ut,EnvironmentSourceSchema:Ht,EnvironmentTemplateErrorSchema:Wt,EnvironmentTemplateOriginSchema:Yt,EnvironmentTemplateSchema:an,EnvironmentTemplateStatusSchema:Bt,FederatedModelGroupSchema:ii,FederatedModelRegistrySchema:ri,FinalComputerArchSchema:Kt,FinalComputerCapabilitiesSchema:mn,FinalComputerPlatformSchema:Gt,GitAuthSchema:Fn,GitCloneOptionsSchema:Un,GitRefSchema:Dn,GitRepositorySchema:Vn,ImageCoverSchema:ui,ImageOriginSchema:di,ImageProfileSchema:vi,ImageProvisioningSchema:ji,ImagePullProgressSchema:Ri,ImagePullTerminalEventType:{Output:"image.pull.terminal.output",Finished:"image.pull.terminal.finished",Progress:"image.pull.progress",Snapshot:"image.pull.snapshot"},ImagePullTerminalFinishedSchema:Ei,ImagePullTerminalOutputSchema:Ci,ImageSelectionSchema:$t,InstanceAccessSchema:lo,InstanceAppInventoryIssueSchema:on,InstanceAppInventoryItemSchema:nn,InstanceAppInventorySchema:rn,InstanceDeleteInputSchema:Jt,InstanceDeleteResultSchema:Qt,InstanceImageSnapshotSchema:ki,InstanceLifecycleEventType:{Snapshot:"instance.lifecycle.snapshot"},InstanceLifecycleSnapshotSchema:fo,InstanceResourceMetricsEventType:{Snapshot:"instance.metrics.snapshot"},InstanceResourceMetricsSchema:Ui,InstanceTargetSchema:co,InstanceVolumeDispositionSchema:Zt,InstanceVolumeRoleSchema:Xt,LEGACY_MARKET_IMAGE_IDS:en,LocalDockerImageSchema:io,MARKET_CATALOG_PROTOCOL_VERSION:"2026-07-29",ManagedAppActionReasonSchema:un,ManagedAppManagementSourceSchema:ln,ManagedAppProjectionSchema:pn,ManagedAppStateSchema:dn,MarketCatalogSnapshotSchema:hi,MarketCatalogStatusSchema:xi,MarketImagePlatformArtifactSchema:fi,MarketImageSchema:yi,MarketImageTagSchema:bi,MarketLifecycleStatusSchema:li,ModelAppSchema:Kn,ModelConfigSchema:Jn,ModelLocationSchema:ni,ModelNameEntrySchema:Yn,ModelProtocolSchema:Wn,ModelRegistryNodeDiagnosticSchema:oi,ModelSelectionSchema:qt,NODE_TUNNEL_PROTOCOL_VERSION:"2026-08-01",NodeAgentCapabilitiesSchema:$i,NodeAgentControlPlaneConnectionCreateResultSchema:to,NodeAgentControlPlaneConnectionSchema:eo,NodeAgentControlPlanePairingSchema:Zi,NodeAgentDeleteResponseSchema:no,NodeAgentEventTransportHealthSchema:Bi,NodeAgentExternalListenerConfigSchema:Ki,NodeAgentExternalListenerSchema:Wi,NodeAgentHealthSchema:Gi,NodeAgentInstanceLifecycleResultSchema:zo,NodeAgentInstanceProxyRawResponseSchema:so,NodeAgentManagedGitCapabilitiesSchema:Vi,NodeAgentManagedModelCapabilitiesSchema:qi,NodeAgentPairingCompleteResultSchema:Ji,NodeAgentPairingInviteResponseSchema:Xi,NodeAgentPairingSelfRevokeResultSchema:Qi,NodeConnectionDiagnosticsSchema:Pi,NodeConnectionPathSchema:Ti,NodeControlPlaneProxyStateSchema:Mi,NodeFolderPlaceSchema:ao,NodeFolderTreeEntrySchema:ro,NodeImageAvailabilitySchema:oo,NodeJoinInviteStatusSchema:Oi,NodeJoinedEventSchema:_i,NodeLocalFolderSchema:qn,NodeModelAssignmentSchema:ti,NodeModelConfigSchema:Zn,NodeModelPublicRecordSchema:ei,NodeRolloutSummarySchema:Nn,NodeRuntimeSchema:Fi,NodeSchema:Li,NodeStateProjectionEventSchema:Di,NodeTunnelRequestBodySchema:Pt,NodeUpdateImpactSchema:Rn,PendingRouteSchema:Co,ProjectSchema:Xn,ProjectSourceSchema:$n,ProtocolVersionSchema:ft,PublicModelConfigSchema:Qn,RuntimeArtifactIdentitySchema:wn,RuntimeConvergenceErrorSchema:Cn,RuntimeVersionStateSchema:En,SelectableImageSchema:Si,SelectableImageTagSchema:Ai,UpdateChannelSchema:jn,UpdateCheckRequestSchema:Tn,UpdateCheckResultSchema:Pn,UpdateJobSchema:_n,UpdateNodeAgentExternalListenerSchema:Yi,UpdateNodeModelAssignmentSchema:mi,UpdateNodeModelSchema:si,WorkspacePolicySchema:Gn,WorkspaceStatusSchema:uo,aiSessionConversationAttachmentCapabilities:St,aiSessionConversationAttachmentCapabilityAgents:jt,aiSessionProviderCapabilities:kt,aiSessionProviderCapability:function(e,t){return kt(e).find(e=>e.agent===t)},aiSessionTimelineCapabilities:wt,aiSessionTimelineCapabilityAgents:Ct,controlledInstanceAcceptsTraffic:function(e){return!1!==e.ready&&(!e.runtimeVersion||["matched","failed"].includes(e.runtimeVersion.phase))},decodeNodeTunnelRequestBody:function(e){if(null==e)return;const t=Pt.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:tn,modelConfigHash:function(e){const t={app:Kn.parse(e.app),endpoint:Jn.shape.endpoint.parse(e.endpoint),key:Jn.shape.key.parse(e.key),model:Jn.shape.model.parse(e.model)};return`mdl_${a.createHash("sha256").update(JSON.stringify(t)).digest("hex")}`},normalizeControlledInstanceCapabilities:At,normalizeDockerImageReference:Dt,normalizeNodeAgentCapabilities:Hi,parseDockerImageReference:Ft,parseStoredControlledInstance:function(e,t){return po.parse(bo(e,t))},projectSourceWithoutGitCredential:Hn,projectSourceWithoutLegacyGitSecretId:Bn,safeParseStoredControlledInstance:function(e,t){return po.safeParse(bo(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 Io(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"}),{...Io(n,i),imageSelection:tn(n.imageSelection,n.imageId)}},sanitizeStoredControlledInstance:bo,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=Io(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=Io(e,["code","message","phase"])}return r},sanitizeStoredImageProfile:Ni,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=yi.safeParse(Io(n,i));return o.success?[o.data]:(t?.({itemId:"string"==typeof n.id?n.id:void 0,field:"invalid-record"}),[])}):n.items;return{...Io(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)?Io(n.auth,["mode","keyId","secret","pairedAt","pairing"]):n.auth;o&&"object"==typeof o&&"pairing"in o&&(o.pairing=Io(o.pairing,["status","joinToken","expiresAt"]));const r=n.connectionPath&&"object"==typeof n.connectionPath&&!Array.isArray(n.connectionPath)?"control-plane-proxy"===n.connectionPath.kind?Io(n.connectionPath,["kind","proxyId","proxyBindingId","targetNodeId"]):Io(n.connectionPath,["kind"]):{kind:"direct"},a=n.proxyState&&"object"==typeof n.proxyState&&!Array.isArray(n.proxyState)?Io(n.proxyState,["reachability","bindingStatus","bindingRevision","streamId","revision","observedAt","target","lastError","updatedAt"]):n.proxyState;if(a&&"object"==typeof a){const e=a;e.target=Io(e.target,["id","name","status","health","lastSeenAt","capabilities"]),e.lastError=Io(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:tn(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:xo(t.source),defaultImageSelection:tn(t.defaultImageSelection,n)}},supportsAiSessionAttachmentRetentionSettings:function(e){return St(e).retentionSettings},supportsAiSessionConversationAttachmentCapability:function(e,t,n){return jt(e,n).includes(t)},supportsAiSessionFileSizeLimitSettings:function(e){return!0===St(e).fileSizeLimitSettings},supportsAiSessionPersistenceSettings:function(e){return At(e).features.aiSessionPersistenceSettings},supportsAiSessionTimelineCapability:function(e,t,n){return Ct(e,n).includes(t)},supportsAiSessionWorkspaceSelection:function(e){return At(e).features.aiSessionWorkspaceSelection},supportsBrowserTunnel:function(e){return At(e).features.browserTunnel},supportsControlledInstancePrivateModelCatalog:function(e){return At(e).features.privateModelCatalog},supportsGitCliCredentialBroker:function(e){const t=At(e).features;return t.gitCredentialProxy||t.gitCliCredentialBroker},supportsGitCredentialProxy:function(e){return At(e).features.gitCredentialProxy},supportsNodeAiSessionFileAttachmentLimit:function(e){return!0===$i.safeParse(e).data?.aiSessionFileAttachmentLimit},supportsNodeFolderPlaces:function(e){return!0===$i.safeParse(e).data?.folderPlaces},supportsNodeGitCredentialRuntimeBroker:function(e){return Hi(e).managedGitCredentials.runtimeBroker},supportsNodeGitWorkspaceProvisioning:function(e,t){return Hi(e).managedGitCredentials.workspaceProvisioning[t]},supportsNodeLocalFolderNameUpdate:function(e){return!0===$i.safeParse(e).data?.localFolderNameUpdate},supportsNodeManagedGitCredentialRegistry:function(e){return Hi(e).managedGitCredentials.registry},supportsNodeMultiEntityModelAssignment:function(e){return Hi(e).managedModels.multiEntityAssignment},supportsNodePrivateModelCatalog:function(e){return Hi(e).managedModels.privateModelCatalog}})),To=function(){if(Ro)return Eo;Ro=1;const t=e,{spawnSync:i}=n;return Eo={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 Po 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 _o(e){return t.join(e,"owner.json")}function Oo(e){return t.join(e,"initializing.json")}function Mo(e){return t.join(e,"recovering.json")}function Lo(e){return Number.isInteger(e)&&Number(e)>0}const Do=function(t){try{const n=JSON.parse(e.readFileSync(_o(t),"utf8"));if(Lo(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(!(Lo(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 Fo(e){if(!Lo(e))return!1;try{return process.kill(Number(e),0),!0}catch(e){return"EPERM"===e.code}}function Uo(e){if(!e||!Fo(e.pid))return!1;if(!e.startIdentity)return!0;const t=To.processStartIdentity(e.pid);return void 0===t||t===e.startIdentity}function Vo(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=$o(n);if(r?.token!==i.token)throw Bo(o),new Error(`Process lock initialization was superseded: ${n}`);e.renameSync(o,_o(n)),Bo(Oo(n))}function qo(n,i,o){const r=Do(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"}),Do(n)?.token!==i.token)return!1;e.renameSync(c,_o(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{Bo(c)}}function $o(t){try{return JSON.parse(e.readFileSync(Oo(t),"utf8"))}catch{return}}function Ho(e){const t=$o(e);return Lo(t?.pid)&&Uo({pid:t.pid,startIdentity:t.startIdentity})}function Bo(t){try{e.unlinkSync(t)}catch(e){if("ENOENT"!==e.code)throw e}}function Go(){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,20)}function Ko(t){try{const n=$o(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 Wo(n,i){try{return e.writeFileSync(Mo(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=Mo(n),o=Yo(i),r=Date.parse(o?.startedAt||"");if(Fo(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=Yo(s);if(c?.token===o?.token)return Bo(s),!0;try{e.linkSync(s,i)}catch(e){if("EEXIST"!==e.code)throw e}finally{Bo(s)}return!1}(n)&&Wo(n,i);if("ENOENT"===o.code)return!1;throw o}}function Yo(t){try{return JSON.parse(e.readFileSync(t,"utf8"))}catch{return}}function Xo(e,t){return Yo(Mo(e))?.token===t}const Jo="/run/task-handoff-server-update.lock";function Zo(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 Qo,er=d(Object.freeze({__proto__:null,SERVER_UPDATE_LOCK_PATH:Jo,acquireServerUpdateLock:function(n=Jo,i={}){return function(n,i={}){e.mkdirSync(t.dirname(n),{recursive:!0});const o=To.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(Oo(n),`${JSON.stringify({token:r.token,pid:r.pid,startIdentity:r.startIdentity,startedAt:(new Date).toISOString()})}\n`,{encoding:"utf8",mode:384,flag:"wx"}),Vo(n,r),{lockPath:n,owner:r,updateDetails:e=>qo(n,r,e),release(){const t=Do(n);t?.token===r.token&&e.rmSync(n,{recursive:!0,force:!0})}}}catch(o){if("EEXIST"!==o.code)throw o;const r=Do(n);if(Uo(r))throw new Po(n,r,i.error);if(!r&&(Ho(n)||Ko(n)<(i.incompleteLockStaleMs??2e3))){if(t+1<5){Go();continue}throw new Po(n,void 0,i.error)}const s=a.randomUUID();if(!Wo(n,s)){if(t+1<5){Go();continue}throw new Po(n,Do(n),i.error)}const c=Do(n);if(Uo(c))throw Bo(Mo(n)),new Po(n,c,i.error);if(r?.token&&c?.token!==r.token){Bo(Mo(n));continue}if(!Xo(n,s))continue;e.rmSync(n,{recursive:!0,force:!0})}const s=Do(n);throw new Po(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=Zo(t.controlPlaneEnvFile||"/etc/task-handoff/control-plane.env"),i=Zo(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)}}})),tr=function(){if(Qo)return l;Qo=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}=No,{acquireServerUpdateLock:z,cleanUpServerUpdateLockOnSignals:f,globalPrefixFromModulePath:b}=er;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"]),R=new Set(["@task-handoff/node-agent","@task-handoff/server"]),N=["/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(!R.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?N.map(t=>s.join(e,t.slice(1))):N}().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}(),nr=m(tr);module.exports=nr;
|