@task-handoff/thctl 0.0.35
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/LICENSE +202 -0
- package/NOTICE +4 -0
- package/README.md +211 -0
- package/bin/thctl +2 -0
- package/dist/thctl.js +1 -0
- package/package.json +28 -0
package/dist/thctl.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("commander"),t=require("node:fs"),n=require("node:os"),i=require("node:path"),o=require("zod"),a=require("node:crypto"),r=require("node:readline/promises"),s=require("node:child_process"),d=require("ws"),c=require("node:http");const l=13;class m extends Error{code;exitCode;details;constructor(e,t,n=12,i){super(t),this.name="ThctlError",this.code=e,this.exitCode=n,this.details=i}}function u(e,t,n){return new m(e,t,2,n)}function p(e,t,n){return new m("CLI_CAPABILITY_MISSING",`\`${e}\` requires capability \`${t}\`, which the connected Control Plane or node does not declare. Upgrade it or pick a supported command.`,14,{command:e,capability:t,...n})}function g(e,t,n){return new m("CLI_ROUTE_MISSING",`The Control Plane does not expose \`${t} ${n}\` (HTTP ${e}); this server version predates the command.`,14,{path:n,status:e,method:t})}function z(e,t){return new m("CLI_PROTOCOL_ERROR",e,11,t)}function h(e,t){return new m("CLI_NETWORK_ERROR",e,10,t)}const y={400:2,401:5,403:6,404:7,409:8,410:7,429:9},f=new Set(["CONTROL_PLANE_AUTH_REQUIRED","AUTH_PASSWORD_CHANGE_REQUIRED","CLI_AUTHORIZATION_PENDING","CLI_AUTHORIZATION_SLOW_DOWN","CLI_AUTHORIZATION_DENIED","CLI_AUTHORIZATION_EXPIRED","CLI_AUTHORIZATION_INVALID_GRANT","CLI_AUTHORIZATION_FAILED","CLI_AUTHORIZATION_REQUEST_UNKNOWN"]);function I(e,t,n,i){const o=f.has(t)?5:y[e]??12;return new m(t,n,o,i)}const b="TASK_HANDOFF_CLI_PROFILE",w=o.z.object({label:o.z.string().trim().min(1).max(120),origin:o.z.string().trim().url().max(2048),controlPlaneId:o.z.string().trim().min(1).max(160),fingerprint:o.z.string().regex(/^sha256:[A-Za-z0-9_-]{43}$/),protocolVersion:o.z.string().regex(/^\d{4}-\d{2}-\d{2}$/),capabilities:o.z.unknown().optional(),loginMode:o.z.enum(["browser","device"]).optional(),source:o.z.enum(["manual","local-discovery"]).optional(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),trustedAt:o.z.string().datetime(),lastUsedAt:o.z.string().datetime().optional(),identityChangedAt:o.z.string().datetime().optional(),replacedFingerprint:o.z.string().regex(/^sha256:[A-Za-z0-9_-]{43}$/).optional()}),v=o.z.object({version:o.z.number().int().positive(),defaultProfile:o.z.string().trim().min(1).max(120).optional(),profiles:o.z.array(w).default([])}),x=o.z.object({version:o.z.number().int().positive(),credentials:o.z.record(o.z.string(),o.z.object({sessionToken:o.z.string().trim().min(32),sessionId:o.z.string().trim().min(1).optional(),expiresAt:o.z.string().datetime().optional(),mode:o.z.enum(["authorization","local-trust"]).optional(),savedAt:o.z.string().datetime()})).default({})});function A(e=process.env){const t=e.TASK_HANDOFF_CLI_CONFIG_DIR?.trim();if(t)return i.resolve(t);const o=e.XDG_CONFIG_HOME?.trim();return i.join(o&&i.isAbsolute(o)?o:i.join(n.homedir(),".config"),"task-handoff","cli")}function S(e,n){!function(e){t.mkdirSync(e,{recursive:!0,mode:448});try{t.chmodSync(e,448)}catch{}}(i.dirname(e));const o=`${e}.${process.pid}.tmp`;t.writeFileSync(o,`${JSON.stringify(n,null,2)}\n`,{mode:384}),t.renameSync(o,e);try{t.chmodSync(e,384)}catch{}}function C(e){try{return JSON.parse(t.readFileSync(e,"utf8"))}catch(e){return void e.code}}class k{file;credentialFile;warnings=[];directory;constructor(e){this.directory=e,this.file=i.join(e,"profiles.json"),this.credentialFile=i.join(e,"credentials.json")}list(){return this.#e().profiles}defaultProfile(){return this.#e().defaultProfile}get(e){return this.#e().profiles.find(t=>t.label===e)}findByOrigin(e){return this.#e().profiles.find(t=>t.origin===e)}findByControlPlane(e,t){return this.#e().profiles.find(n=>n.controlPlaneId===e&&n.fingerprint===t)}save(e){const t=w.parse(e),n=this.#e(),i=[...n.profiles.filter(e=>e.label!==t.label),t];return this.#t({...n,profiles:i}),t}remove(e){const t=this.#e(),n=t.profiles.filter(t=>t.label!==e);return n.length!==t.profiles.length&&(this.#t({...t,profiles:n,defaultProfile:t.defaultProfile===e?n[0]?.label:t.defaultProfile}),this.secrets().remove(e),!0)}setDefault(e){const t=this.#e();if(!t.profiles.some(t=>t.label===e))throw new m("CLI_PROFILE_UNKNOWN",`Unknown profile \`${e}\`. Run \`thctl profile list\` to see configured profiles.`,7,{profile:e});this.#t({...t,defaultProfile:e})}select(e,t=process.env){const n=this.#e(),i=e?.trim()||t[b]?.trim()||n.defaultProfile;if(i){const e=n.profiles.find(e=>e.label===i);if(!e)throw new m("CLI_PROFILE_UNKNOWN",`Unknown profile \`${i}\`. Run \`thctl profile list\` to see configured profiles.`,7,{profile:i});return e}if(1===n.profiles.length)return n.profiles[0];if(0===n.profiles.length)throw new m("CLI_PROFILE_MISSING","No Control Plane profile configured. Run `thctl profile add <origin>` first.",7);throw u("CLI_PROFILE_REQUIRED","Multiple profiles are configured. Select one with `--profile <label>` or `thctl profile use <label>`.")}markUsed(e){return this.save({...e,lastUsedAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()})}secrets(){return new j(this.credentialFile,this.warnings)}#e(){const e=C(this.file);if(void 0===e)return{version:1,profiles:[]};const t=v.safeParse(e);return t.success?{...t.data,profiles:t.data.profiles.filter(e=>""!==e.label)}:(this.warnings.push(`Ignoring unreadable profile file ${this.file}; run \`thctl profile add\` to recreate it.`),{version:1,profiles:[]})}#t(e){S(this.file,{version:1,...e.defaultProfile?{defaultProfile:e.defaultProfile}:{},profiles:e.profiles})}}class j{file;warnings;constructor(e,t){this.file=e,this.warnings=t}read(e){return this.#e().credentials[e]}write(e,t){const n=this.#e();n.credentials[e]=t,this.#t(n)}remove(e){const t=this.#e();e in t.credentials&&(delete t.credentials[e],this.#t(t))}#e(){const e=C(this.file);if(void 0===e)return{version:1,credentials:{}};const t=x.safeParse(e);return t.success?t.data:(this.warnings.push(`Ignoring unreadable credential file ${this.file}; sign in again with \`thctl login\`.`),{version:1,credentials:{}})}#t(e){S(this.file,e)}}function R(e){const t=new URL(e);return(`${"127.0.0.1"===t.hostname||"localhost"===t.hostname||"::1"===t.hostname?"local":t.hostname}${t.port?`-${t.port}`:""}`.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"control-plane").slice(0,64)}const T=o.z.string().trim().min(1).max(120),E=20971520,P=512e3,O=P,$=E,N=41943040,_=o.z.string().trim().min(1).max(80),U=o.z.enum(["app-session","ai-session"]),q=o.z.enum(["image","file"]),L={scopeType:o.z.enum(["session","create-request"]),scopeId:o.z.string().trim().min(1).max(160),kind:q,name:o.z.string().trim().min(1).max(240),mime:o.z.string().trim().min(1).max(120)};o.z.object({...L,size:o.z.coerce.number().int().positive().max(E)}).strict();const D=o.z.string().regex(/^cia_[a-f0-9]{24}$/);o.z.object({attachmentId:D,...L,size:o.z.number().int().positive().max(E)}).strict(),o.z.object({offset:o.z.coerce.number().int().nonnegative()}).strict(),o.z.object({attachmentId:D,offset:o.z.number().int().nonnegative()}),o.z.object({id:D,kind:q,name:o.z.string().trim().min(1).max(240),mime:o.z.string().trim().min(1).max(120),size:o.z.number().int().positive().max(E),expiresAt:o.z.string().datetime()});const M=o.z.object({id:o.z.string().trim().min(1).max(120),kind:q,name:o.z.string().trim().min(1).max(240),mime:o.z.string().trim().min(1).max(120),size:o.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER)}),B=o.z.enum(["available","expired","missing"]),H=M.extend({contentState:B.default("available")}).strict(),F=o.z.object({id:o.z.string().trim().min(1).max(240),text:o.z.string(),attachments:o.z.array(H).max(6).default([])}).strict(),V=o.z.enum(["running","waiting","idle","failed"]),G=o.z.enum(["thinking","tool","editing","approval","responding","unknown"]),Y=o.z.object({id:o.z.string().trim().min(1).max(240).optional(),kind:o.z.string().trim().min(1).max(80).optional(),name:o.z.string().trim().min(1).max(120),inputPreview:o.z.string().trim().max(500).optional(),startedAt:o.z.string().datetime().optional()}).strict(),W=o.z.enum(["running","completed","failed","waiting"]),K=o.z.object({id:o.z.string().trim().min(1).max(240),turnId:o.z.string().trim().min(1).max(240)}).strict(),J=K.extend({type:o.z.literal("user-message"),text:o.z.string(),attachments:o.z.array(H).max(6).optional()}).strict(),Z=K.extend({type:o.z.literal("ai-message"),text:o.z.string()}).strict(),Q=K.extend({type:o.z.literal("activity"),activityKind:o.z.string().trim().min(1).max(120),title:o.z.string().trim().min(1).max(240),status:W.optional(),summary:o.z.string().max(4e3).optional(),input:o.z.string().max(1e5).optional(),output:o.z.string().max(1e6).optional(),paths:o.z.array(o.z.string().trim().min(1).max(4096)).max(500).optional(),exitCode:o.z.number().int().optional(),durationMs:o.z.number().int().nonnegative().optional()}).strict(),X=o.z.discriminatedUnion("type",[J,Z,Q]),ee=o.z.object({sessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),items:o.z.array(X),generatedAt:o.z.string().datetime()}).strict(),te=o.z.object({sessionId:o.z.string().trim().min(1).max(120),turnId:o.z.string().trim().min(1).max(240),items:o.z.array(X),generatedAt:o.z.string().datetime()}).strict(),ne=o.z.enum(["pending-init","running","interrupted","completed","errored","shutdown","not-found"]),ie=o.z.enum(["started","interacted","interrupted"]),oe=o.z.object({threadId:o.z.string().trim().min(1).max(240),path:o.z.string().trim().max(4096).optional(),status:ne,activity:ie.optional(),message:o.z.string().trim().max(1e3).optional(),updatedAt:o.z.string().datetime()}).strict();function ae(e){return"completed"!==e.status}const re=o.z.array(oe).max(50).transform(e=>e.filter(ae)),se=o.z.object({toolCalls:o.z.number().int().min(0).default(0),edits:o.z.number().int().min(0).default(0),approvals:o.z.number().int().min(0).default(0)}).strict().default({toolCalls:0,edits:0,approvals:0}),de=o.z.object({send:o.z.boolean().optional(),interrupt:o.z.boolean().optional(),approval:o.z.boolean().optional(),fork:o.z.boolean().optional(),rename:o.z.boolean().optional(),openApp:o.z.boolean().optional(),close:o.z.boolean().optional()}),ce=o.z.string().trim().min(1).max(240),le=o.z.discriminatedUnion("kind",[o.z.object({kind:o.z.literal("fork"),parentProviderSessionId:ce,throughTurnId:o.z.string().trim().min(1).max(240).optional()}).strict(),o.z.object({kind:o.z.literal("subagent"),parentProviderSessionId:ce}).strict()]),me=o.z.preprocess(function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t=e;if("fork"===t.kind){const e=le.safeParse({kind:"fork",parentProviderSessionId:t.parentProviderSessionId,..."string"==typeof t.throughTurnId?{throughTurnId:t.throughTurnId}:{}});return e.success?e.data:void 0}if("subagent"===t.kind){const e=le.safeParse({kind:"subagent",parentProviderSessionId:t.parentProviderSessionId});return e.success?e.data:void 0}},le.optional()),ue=o.z.union([M.extend({source:o.z.object({type:o.z.literal("inline"),encoding:o.z.literal("base64"),data:o.z.string().min(1).max(31457280)}).strict()}).strict().superRefine((e,t)=>{const n="image"===e.kind?E:P;(e.size<=0||("file"===e.kind?e.size>=n:e.size>n))&&t.addIssue({code:o.z.ZodIssueCode.custom,path:["size"],message:`Inline ${e.kind} must be between 1 byte and ${n} bytes.`})}),M.extend({source:o.z.object({type:o.z.literal("runtime-path"),path:o.z.string().trim().min(1).max(4096)}).strict()}).strict()]),pe=M.extend({sourceType:o.z.enum(["inline","runtime-path"])}).strict(),ge=o.z.union([o.z.object({id:o.z.string().trim().min(1).max(120),kind:q.optional(),source:o.z.object({type:o.z.literal("upload-ref")}).strict().default({type:"upload-ref"})}).strict(),o.z.object({id:o.z.string().trim().min(1).max(120),kind:q,name:o.z.string().trim().min(1).max(240),mime:o.z.string().trim().min(1).max(120),size:o.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),source:o.z.object({type:o.z.literal("runtime-path"),path:o.z.string().trim().min(1).max(4096)}).strict()}).strict()]),ze=o.z.enum(["auto","queue","steer","immediate"]),he=o.z.enum(["ask","auto-review","full-access"]),ye=o.z.enum(["review","rename","goal","compact"]),fe=o.z.object({command:ye,argument:o.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.`})}),Ie=o.z.object({command:ye,value:o.z.string().max(4e3).optional(),turnId:o.z.string().trim().min(1).max(240).optional()}).strict(),be=o.z.object({title:o.z.string().trim().max(120),expectedTitle:o.z.string().trim().max(240).optional(),clientRequestId:o.z.string().trim().min(1).max(160)}).strict(),we=o.z.object({disposition:o.z.enum(["renamed","already-named"]),aiSessionId:o.z.string().trim().min(1).max(120),appSessionId:o.z.string().trim().min(1).max(120).optional(),title:o.z.string().trim().max(120)}).strict();o.z.enum(["skill","app","plugin"]);const ve=o.z.object({name:o.z.string().trim().min(1).max(240),path:o.z.string().trim().min(1).max(4096)}),xe=o.z.discriminatedUnion("kind",[ve.extend({kind:o.z.literal("skill"),path:o.z.string().trim().min(1).max(4096).refine(e=>e.startsWith("/"),"Skill paths must be absolute.")}).strict(),ve.extend({kind:o.z.literal("app"),path:o.z.string().trim().min(7).max(4096).regex(/^app:\/\/[^\s/]+$/,"App paths must use app://<id>.")}).strict(),ve.extend({kind:o.z.literal("plugin"),path:o.z.string().trim().min(10).max(4096).regex(/^plugin:\/\/[^\s/]+$/,"Plugin paths must use plugin://<id>.")}).strict()]),Ae=o.z.array(xe).max(20).default([]),Se=o.z.enum(["plugin","skill","file","directory","app"]),Ce=o.z.object({kind:Se,name:o.z.string().trim().min(1).max(240),description:o.z.string().trim().max(1e3).optional(),path:o.z.string().trim().min(1).max(4096),icon:o.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."})}),ke=o.z.object({category:o.z.enum(["skills","plugins","apps","files"]),code:o.z.string().trim().min(1).max(160),message:o.z.string().trim().min(1).max(2e3)}).strict(),je=o.z.object({sessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),cwd:o.z.string().trim().min(1).max(4096),candidates:o.z.array(Ce).max(1e3).default([]),diagnostics:o.z.array(ke).max(20).default([])}).strict();o.z.object({query:o.z.string().trim().max(240).default("")}).strict();const Re=o.z.object({sessionId:o.z.string().trim().min(1).max(120),cwd:o.z.string().trim().min(1).max(4096),query:o.z.string().trim().max(240),requestId:o.z.string().trim().min(1).max(160),candidates:o.z.array(Ce.refine(e=>"file"===e.kind||"directory"===e.kind,"File search only returns files and directories.")).max(200).default([]),complete:o.z.boolean().default(!1)}).strict(),Te=o.z.object({message:o.z.string().trim().min(1).max(2e4),mode:ze.optional(),permissionMode:he.optional()}),Ee=Te.extend({attachments:o.z.array(ue).max(6).default([]),references:Ae}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>N&&t.addIssue({code:o.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),Pe=Te.extend({attachments:o.z.array(ge).max(6).default([]),references:Ae}).strict(),Oe=o.z.object({type:o.z.literal("runtime-path"),path:o.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(),$e=o.z.object({modelEntityId:o.z.string().trim().min(1).max(120),modelName:o.z.string().trim().min(1).max(240)}).strict(),Ne=o.z.enum(["none","minimal","low","medium","high","xhigh","max","ultra"]),_e=o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("current-folder"),branch:o.z.string().trim().min(1).max(1024)}).strict(),o.z.object({type:o.z.literal("existing-worktree"),repositoryContextId:o.z.string().trim().min(1).max(160),worktreeId:o.z.string().trim().min(1).max(160)}).strict(),o.z.object({type:o.z.literal("new-worktree"),branchName:o.z.string().trim().min(1).max(255),startRef:o.z.string().trim().min(1).max(2048),expectedSnapshotId:o.z.string().trim().min(1).max(160)}).strict()]),Ue=o.z.object({mode:o.z.enum(["current-folder","worktree"]),branch:o.z.string().trim().min(1).max(1024)}).strict(),qe=Ee.extend({agent:_,cwd:Oe,cwdFolderId:o.z.string().trim().min(1).max(120).optional(),gitSelection:Ue.optional(),workspaceSelection:_e.optional(),clientRequestId:o.z.string().trim().min(1).max(160),modelSelection:$e.optional(),reasoningEffort:Ne.optional(),storyId:T.optional()}).strict(),Le=Pe.extend({agent:_,cwdFolderId:o.z.string().trim().min(1).max(120).optional(),gitSelection:Ue.optional(),workspaceSelection:_e.optional(),clientRequestId:o.z.string().trim().min(1).max(160),modelSelection:$e.optional(),reasoningEffort:Ne.optional(),storyId:T.optional()}).strict(),De=o.z.object({clientRequestId:o.z.string().trim().min(1).max(160),modelSelection:$e}).strict(),Me=o.z.object({sessionId:o.z.string().trim().min(1).max(120),accepted:o.z.literal(!0)}).strict(),Be=o.z.object({clientRequestId:o.z.string().trim().min(1).max(160),reasoningEffort:Ne}).strict(),He=o.z.object({cwdFolderId:o.z.string().trim().min(1).max(120).optional(),branch:o.z.string().trim().min(1).max(1024)}).strict(),Fe=o.z.object({sessionId:o.z.string().trim().min(1).max(120),accepted:o.z.literal(!0)}).strict();o.z.object({storyId:T.nullable()}).strict(),o.z.object({sessionId:o.z.string().trim().min(1).max(120),storyId:T.optional()}).strict();const Ve=o.z.object({sessionId:o.z.string().trim().min(1).max(120),unread:o.z.boolean()}).strict(),Ge=o.z.object({disposition:o.z.enum(["created","already-created"]),aiSessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),creationSource:o.z.literal("ai-session")}).strict(),Ye=o.z.object({mode:o.z.enum(["current","managed-worktree"]).default("current")}).strict().default({mode:"current"}),We=o.z.object({clientRequestId:o.z.string().trim().min(1).max(160),throughTurnId:o.z.string().trim().min(1).max(240).optional(),workspace:Ye.optional().default({mode:"current"})}).strict(),Ke=o.z.object({disposition:o.z.enum(["created","already-created"]),aiSessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),creationSource:o.z.literal("ai-session")}).strict(),Je=o.z.object({clientRequestId:o.z.string().trim().min(1).max(160)}).strict(),Ze=o.z.object({disposition:o.z.enum(["opened","already-open"]),aiSessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),appSessionId:o.z.string().trim().min(1).max(120),creationSource:U}).strict(),Qe=o.z.object({clientRequestId:o.z.string().trim().min(1).max(160)}).strict(),Xe=o.z.object({disposition:o.z.enum(["closed","already-closed"]),aiSessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),creationSource:U}).strict(),et=o.z.object({disposition:o.z.enum(["cleared","already-cleared"]),aiSessionId:o.z.string().trim().min(1).max(120),clearedSessionIds:o.z.array(o.z.string().trim().min(1).max(120))}).strict();o.z.object({code:o.z.enum(["invalid-request","not-found","unsupported","provider-unavailable","materialization-failed","open-app-failed","close-failed","conflict"]),message:o.z.string().trim().min(1).max(4e3),retryable:o.z.boolean().default(!1),aiSessionId:o.z.string().trim().min(1).max(120).optional(),providerSessionId:o.z.string().trim().min(1).max(240).optional()}).strict();const tt=o.z.object({decision:o.z.enum(["allow","deny","skip"])}).strict(),nt=o.z.object({expectedRevision:o.z.number().int().min(0),queueIds:o.z.array(o.z.string().trim().min(1).max(120)).max(100)}).strict(),it=o.z.object({expectedRevision:o.z.number().int().min(0),message:o.z.string().trim().min(1).max(2e4),attachments:o.z.array(o.z.union([o.z.object({id:o.z.string().trim().min(1).max(120),source:o.z.object({type:o.z.literal("retained")}).strict()}).strict(),ge])).max(6).optional()}).strict();o.z.object({code:o.z.string().trim().min(1).max(160),message:o.z.string(),instanceId:o.z.string().trim().min(1).max(160).optional(),nodeId:o.z.string().trim().min(1).max(160).optional(),route:o.z.string().trim().min(1).max(4096).optional()}).strict();const ot=o.z.object({id:o.z.string().trim().min(1).max(120),messageId:o.z.string().trim().min(1).max(240).optional(),message:o.z.string().trim().min(1).max(2e4),attachments:o.z.array(pe).max(6).default([]),references:Ae,permissionMode:he.optional(),status:o.z.enum(["queued","sending","failed"]).default("queued"),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),error:o.z.string().trim().max(4e3).optional()}).strict(),at=o.z.object({revision:o.z.number().int().min(0).default(0),pendingCount:o.z.number().int().min(0).default(0),items:o.z.array(ot).max(100).default([])}).strict().default({revision:0,pendingCount:0,items:[]}),rt=o.z.enum(["control","realtime","adapter-snapshot","transcript-tail","transcript-scan","process-scan","app-session"]),st=o.z.object({id:o.z.string().trim().min(1).max(240),status:o.z.enum(["running","completed"]),startedAt:o.z.string().datetime().optional(),completedAt:o.z.string().datetime().optional()}).strict(),dt=o.z.object({id:o.z.string().trim().min(1).max(240),providerTurnId:o.z.string().trim().max(240).optional(),source:rt.optional(),userPrompt:o.z.string().trim().optional(),userMessages:o.z.array(F).max(100).optional(),status:o.z.enum(["queued","running","waiting","completed","failed"]).default("running"),phase:G.optional(),summary:o.z.string().trim().max(1e3).optional(),lastMessage:o.z.string().trim().optional(),lastMessageItemId:o.z.string().trim().max(240).optional(),contextCompactions:o.z.array(st).max(20).optional(),revision:o.z.number().int().min(0).default(0),sourcePriority:o.z.number().int().min(0).max(100).optional(),snapshotVersion:o.z.number().int().min(0).optional(),observedAt:o.z.string().datetime().optional(),startedAt:o.z.string().datetime().optional(),updatedAt:o.z.string().datetime().optional(),completedAt:o.z.string().datetime().optional()}).strict(),ct=dt.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(),lt=o.z.object({id:o.z.string().trim().min(1).max(120),agent:_,creationSource:U.default("app-session"),appSessionId:o.z.string().trim().max(120).optional(),appId:o.z.string().trim().max(120).optional(),providerSessionId:o.z.string().trim().max(240).optional(),lineage:me,providerMeta:o.z.record(o.z.string(),o.z.unknown()).optional(),modelSelection:$e.optional(),reasoningEffort:Ne.optional(),storyId:T.optional(),appBindingKeys:o.z.array(o.z.string().trim().min(1).max(240)).max(20).optional(),actions:de.optional(),activeTurnId:o.z.string().trim().max(240).optional(),title:o.z.string().trim().max(240).optional(),cwd:o.z.string().trim().max(4096).optional(),cwdFolderId:o.z.string().trim().min(1).max(120).optional(),userPrompt:o.z.string().trim().optional(),turns:o.z.array(dt).max(50).optional(),status:V.default("running"),phase:G.default("unknown"),summary:o.z.string().trim().max(1e3).optional(),lastMessage:o.z.string().trim().optional(),lastMessageItemId:o.z.string().trim().max(240).optional(),currentTool:Y.optional(),toolCallsSinceLastMessage:o.z.number().int().min(0).default(0),subAgents:re.default([]),transcriptPath:o.z.string().trim().max(4096).optional(),transcriptSize:o.z.number().int().min(0).optional(),startedAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),completedAt:o.z.string().datetime().optional(),error:o.z.string().trim().max(4e3).optional(),counters:se,queue:at,unread:o.z.boolean().default(!1)}).strict(),mt=lt.pick({id:!0,appBindingKeys:!0,cwd:!0,error:!0,providerMeta:!0,modelSelection:!0,reasoningEffort:!0,queue:!0,subAgents:!0}).strict(),ut=dt.pick({id:!0,providerTurnId:!0,status:!0,phase:!0,revision:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).extend({bodyRevision:o.z.string().trim().min(1).max(64)}).strict(),pt=o.z.object({sessionId:o.z.string().trim().min(1).max(120),revision:o.z.string().trim().min(1).max(64),turns:o.z.array(ut).max(50)}).strict(),gt=o.z.object({sessionId:o.z.string().trim().min(1).max(120),revision:o.z.string().trim().min(1).max(64),turn:dt}).strict(),zt=o.z.string().trim().min(1).max(64),ht=o.z.object({kind:o.z.literal("not-modified"),revision:zt}).strict(),yt=o.z.discriminatedUnion("kind",[ht,o.z.object({kind:o.z.literal("updated"),revision:zt,detail:mt}).strict()]),ft=o.z.discriminatedUnion("kind",[ht,o.z.object({kind:o.z.literal("updated"),revision:zt,index:pt}).strict()]),It=o.z.discriminatedUnion("kind",[ht,o.z.object({kind:o.z.literal("updated"),revision:zt,body:gt}).strict()]),bt=o.z.object({session:lt,provider:o.z.string().trim().min(1).max(80),action:o.z.enum(["send","queue","steer","interrupt","approval"]),decision:o.z.enum(["allow","deny","skip"]).optional(),turnId:o.z.string().trim().min(1).max(240).optional(),providerTurnId:o.z.string().trim().min(1).max(240).optional(),queueId:o.z.string().trim().min(1).max(120).optional()}).strict(),wt=bt.omit({session:!0}).extend({sessionId:o.z.string().trim().min(1).max(120),messageId:o.z.string().trim().min(1).max(240).optional()}).strict(),vt=o.z.object({sessionId:o.z.string().trim().min(1).max(120),queueRevision:o.z.number().int().min(0),action:o.z.enum(["retry","remove","edit","reorder"]),queueId:o.z.string().trim().min(1).max(120).optional()}).strict(),xt=o.z.union([wt,bt.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 wt.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}:{}})})]),At=o.z.object({id:o.z.string().trim().min(1).max(120),agent:_,creationSource:U,providerSessionId:o.z.string().trim().min(1).max(240),lineage:me,modelSelection:$e.optional(),reasoningEffort:Ne.optional(),storyId:T.optional(),title:o.z.string().trim().max(240).optional(),userPrompt:o.z.string().trim().optional(),lastMessage:o.z.string().trim().optional(),cwd:o.z.string().trim().min(1).max(4096),cwdFolderId:o.z.string().trim().min(1).max(120).optional(),lastActiveAt:o.z.string().datetime(),archivedAt:o.z.string().datetime()}).strict();o.z.object({schemaVersion:o.z.literal(1).default(1),items:o.z.array(At).max(1e4).default([])}).strict();const St=o.z.object({items:o.z.array(At).max(1e4).default([])}).strict(),Ct=o.z.object({item:At,turns:o.z.array(ct).max(50).default([])}).strict(),kt=o.z.object({modelSelection:$e.optional()}).strict(),jt=o.z.object({disposition:o.z.enum(["resumed","already-open"]),aiSessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),appSessionId:o.z.string().trim().min(1).max(120).optional(),creationSource:U}).strict(),Rt=dt.omit({userMessages:!0}),Tt=lt.pick({id:!0,agent:!0,creationSource:!0,appSessionId:!0,appId:!0,providerSessionId:!0,lineage:!0,providerMeta:!0,modelSelection:!0,reasoningEffort:!0,storyId:!0,appBindingKeys:!0,actions:!0,activeTurnId:!0,title:!0,cwd:!0,cwdFolderId:!0,userPrompt:!0,turns:!0,status:!0,phase:!0,summary:!0,lastMessage:!0,lastMessageItemId:!0,currentTool:!0,toolCallsSinceLastMessage:!0,subAgents:!0,queue:!0,startedAt:!0,updatedAt:!0,error:!0,unread:!0}).extend({turns:o.z.array(Rt).max(50).optional(),detailRevision:o.z.string().trim().min(1).max(64).optional(),turnsRevision:o.z.string().trim().min(1).max(64).optional(),latestTurnRef:o.z.object({id:dt.shape.id,bodyRevision:o.z.string().trim().min(1).max(64)}).strict().optional(),turnCount:o.z.number().int().min(0).optional(),subAgentCount:o.z.number().int().min(0).optional(),lastUserMessageAt:o.z.string().datetime().optional()}).strict(),Et=o.z.object({runningCount:o.z.number().int().min(0).default(0),waitingCount:o.z.number().int().min(0).default(0),staleCount:o.z.number().int().min(0).default(0),sessions:o.z.array(Tt).default([]),updatedAt:o.z.string().datetime()}).strict();o.z.object({streamId:o.z.string().trim().min(1).max(240),revision:o.z.number().int().min(0),lastEventAt:o.z.string().datetime(),snapshot:Et}).strict();const Pt=Et.pick({runningCount:!0,waitingCount:!0,staleCount:!0,updatedAt:!0}).extend({idleCount:o.z.number().int().min(0).default(0),problemCount:o.z.number().int().min(0).default(0),revision:o.z.number().int().min(0).optional()}),Ot=o.z.enum(["provider-event","app-session-created","app-session-updated","app-session-deleted","discovery-scan","control-action","heartbeat-sync","startup"]),$t=o.z.object({streamId:o.z.string().trim().min(1).max(240),instanceId:o.z.string().trim().min(1).max(160),nodeId:o.z.string().trim().min(1).max(160).optional(),revision:o.z.number().int().min(0),previousRevision:o.z.number().int().min(0).optional(),traceId:o.z.string().trim().min(1).max(160),generatedAt:o.z.string().datetime(),reason:Ot}).strict(),Nt=o.z.object({meta:$t,snapshot:Et}).strict(),_t=o.z.object({meta:$t,upserted:o.z.array(Tt).default([]),removed:o.z.array(o.z.string().trim().min(1).max(120)).default([])}).strict(),Ut=o.z.object({meta:$t,sessionIds:o.z.array(o.z.string().trim().min(1).max(120)).default([]),expiresAt:o.z.string().datetime()}).strict();o.z.object({instanceId:o.z.string().trim().min(1).max(160),nodeId:o.z.string().trim().min(1).max(160).optional(),sessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240).optional(),turnId:o.z.string().trim().min(1).max(240),itemId:o.z.string().trim().min(1).max(240),delta:o.z.string().min(1),generatedAt:o.z.string().datetime()}).strict().omit({instanceId:!0,nodeId:!0,providerSessionId:!0}).strict(),o.z.object({instanceId:o.z.string().trim().min(1).max(160),nodeId:o.z.string().trim().min(1).max(160).optional(),sessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240),item:X,generatedAt:o.z.string().datetime()}).strict(),o.z.object({instanceId:o.z.string().trim().min(1).max(160),nodeId:o.z.string().trim().min(1).max(160).optional(),sessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().min(1).max(240).optional(),turnId:o.z.string().trim().min(1).max(240),itemId:o.z.string().trim().min(1).max(240),field:o.z.literal("output"),delta:o.z.string().min(1),generatedAt:o.z.string().datetime()}).strict().omit({instanceId:!0,nodeId:!0,providerSessionId:!0}).strict();const qt=o.z.object({streamId:o.z.string().trim().min(1).max(240),instanceId:o.z.string().trim().min(1).max(160),sinceRevision:o.z.number().int().min(0),latestRevision:o.z.number().int().min(0),earliestRetainedRevision:o.z.number().int().min(0),syncRequired:o.z.boolean().default(!1),events:o.z.array(o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("ai-session.snapshot"),payload:Nt}).strict(),o.z.object({type:o.z.literal("ai-session.patch"),payload:_t}).strict(),o.z.object({type:o.z.literal("ai-session.removed"),payload:Ut}).strict()])).default([])}).strict(),Lt=o.z.object({source:rt,sourcePriority:o.z.number().int().min(0).max(100).optional(),observedAt:o.z.string().datetime().optional(),snapshotVersion:o.z.number().int().min(0).optional()}).strict(),Dt=Lt.extend({type:o.z.literal("snapshot"),agent:o.z.string().trim().min(1).max(80),creationSource:U.optional(),appSessionId:o.z.string().trim().max(120).optional(),appId:o.z.string().trim().max(120).optional(),providerSessionId:o.z.string().trim().max(240).optional(),lineage:le.optional(),providerMeta:o.z.record(o.z.string(),o.z.unknown()).optional(),modelSelection:$e.optional(),reasoningEffort:Ne.optional(),storyId:T.optional(),appBindingKeys:o.z.array(o.z.string().trim().min(1).max(240)).max(20).optional(),actions:de.optional(),title:o.z.string().trim().max(240).optional(),cwd:o.z.string().trim().max(4096).optional(),cwdFolderId:o.z.string().trim().min(1).max(120).optional(),activeTurnId:o.z.string().trim().max(240).optional(),userPrompt:o.z.string().trim().optional(),turns:o.z.array(dt).max(50).optional(),status:V.optional(),phase:G.optional(),summary:o.z.string().trim().max(1e3).optional(),lastMessage:o.z.string().trim().optional(),lastMessageItemId:o.z.string().trim().max(240).optional(),error:o.z.string().trim().max(4e3).optional(),currentTool:Y.optional(),toolCallsSinceLastMessage:o.z.number().int().min(0).optional(),subAgents:re.optional(),transcriptPath:o.z.string().trim().max(4096).optional(),transcriptSize:o.z.number().int().min(0).optional(),replaceActivity:o.z.boolean().optional()}).strict(),Mt=Lt.extend({type:o.z.literal("event"),sessionId:o.z.string().trim().min(1).max(120),kind:o.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:$e.optional(),reasoningEffort:Ne.optional(),activeTurnId:o.z.string().trim().max(240).optional(),providerTurnId:o.z.string().trim().max(240).optional(),userPrompt:o.z.string().trim().optional(),userMessage:F.optional(),text:o.z.string().optional(),itemId:o.z.string().trim().max(240).optional(),status:V.optional(),phase:G.optional(),summary:o.z.string().trim().max(1e3).optional(),error:o.z.string().trim().max(4e3).optional(),currentTool:Y.nullable().optional(),toolCallsSinceLastMessage:o.z.number().int().min(0).optional(),subAgents:re.optional(),contextCompaction:st.optional(),counters:o.z.object({toolCalls:o.z.number().int().min(0).optional(),edits:o.z.number().int().min(0).optional(),approvals:o.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"})});o.z.discriminatedUnion("type",[Dt,Mt]);const Bt=o.z.string().trim().min(1).max(160).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Ht=o.z.string().datetime(),Ft=o.z.string().trim().min(1).max(255).refine(e=>!(/[\u0000-\u001f\u007f ~^:?*[\\]/.test(e)||e.includes("..")||e.endsWith(".")||e.endsWith("/")),"Invalid Git name."),Vt=o.z.string().min(1).max(4096).refine(e=>!(e.includes("\0")||e.startsWith("/")||e.startsWith("\\")||/^[a-zA-Z]:[\\/]/.test(e))&&e.split("/").every(e=>e.length>0&&"."!==e&&".."!==e&&".git"!==e),"Path must be a safe repository-relative path."),Gt=o.z.enum(["ai-session","app-session"]),Yt=o.z.enum(["available","session-not-found","session-inactive","cwd-missing","cwd-inaccessible","git-unavailable","not-worktree"]),Wt=o.z.enum(["branch","detached","unborn"]),Kt=o.z.enum(["review-changes","resolve-conflicts","publish-branch","push","pull","diverged","up-to-date"]),Jt=o.z.enum(["conflict","staged","unstaged","untracked"]),Zt=o.z.enum(["added","modified","deleted","renamed","copied","type-changed","unmerged","untracked"]),Qt=o.z.object({state:Wt,oid:o.z.string().regex(/^[0-9a-f]{40,64}$/).optional(),branch:o.z.string().min(1).max(1024).optional()}).strict(),Xt=o.z.object({ref:o.z.string().min(1).max(2048),remote:Ft,branch:o.z.string().min(1).max(1024),ahead:o.z.number().int().nonnegative(),behind:o.z.number().int().nonnegative()}).strict(),en=o.z.object({id:Bt,isCurrent:o.z.boolean(),isMain:o.z.boolean(),managed:o.z.boolean(),head:Qt,dirty:o.z.boolean(),locked:o.z.boolean(),lockReason:o.z.string().max(1e3).optional(),prunable:o.z.boolean(),activeAiSessionIds:o.z.array(Bt).max(256).default([]),activeAppSessionIds:o.z.array(Bt).max(256).default([])}).strict(),tn=o.z.enum(["main-worktree","external-worktree","outside-workspace-roots","dirty","locked","prunable","session-occupied","path-inaccessible"]),nn=en.extend({canCreateAiSession:o.z.boolean(),canRemove:o.z.boolean(),createAiSessionBlockers:o.z.array(tn).max(16).default([]),removeBlockers:o.z.array(tn).max(16).default([])}).strict(),on=o.z.object({repositoryId:Bt,repositoryContextId:Bt,snapshotId:Bt,items:o.z.array(nn).max(1e4)}).strict(),an=o.z.object({conflicts:o.z.number().int().nonnegative(),staged:o.z.number().int().nonnegative(),unstaged:o.z.number().int().nonnegative(),untracked:o.z.number().int().nonnegative()}).strict(),rn=o.z.object({name:Ft,fetchUrl:o.z.string().max(4096).optional(),pushUrl:o.z.string().max(4096).optional()}).strict(),sn=o.z.object({availability:Yt,sessionKind:Gt,sessionId:Bt,observedAt:Ht,snapshotId:Bt.optional(),repositoryId:Bt.optional(),repositoryContextId:Bt.optional(),repositoryRoot:o.z.string().min(1).max(4096).optional(),displayName:o.z.string().trim().min(1).max(255).optional(),cwdRelativePath:o.z.string().max(4096).optional(),head:Qt.optional(),upstream:Xt.optional(),currentWorktree:en.optional(),changes:an.optional(),remotes:o.z.array(rn).max(128).optional(),primaryAction:Kt.optional()}).strict(),dn=o.z.enum(["directory","file","symlink","submodule","nested-repository","special"]),cn=o.z.object({executable:o.z.boolean(),gitMode:o.z.enum(["100644","100755","120000","160000"]).optional()}).strict(),ln=o.z.object({name:o.z.string().min(1).max(1024),path:Vt,kind:dn,traversable:o.z.boolean(),editable:o.z.boolean(),size:o.z.number().int().nonnegative().optional(),mode:cn.optional()}).strict();o.z.object({path:o.z.string().max(4096),entries:o.z.array(ln).max(1e4),snapshotId:Bt}).strict();const mn=o.z.object({name:o.z.string().min(1).max(1024),path:Vt,kind:o.z.enum(["directory","file"])}).strict();o.z.object({entries:o.z.array(mn).max(200),truncated:o.z.boolean()}).strict();const un=o.z.string().min(16).max(160).regex(/^[a-zA-Z0-9_.:-]+$/),pn=o.z.object({path:Vt,content:o.z.string(),byteLength:o.z.number().int().nonnegative(),version:un,mode:cn}).strict(),gn=o.z.object({path:Vt,oldPath:Vt.optional(),scope:Jt,status:Zt,version:un,binary:o.z.boolean().default(!1)}).strict(),zn=o.z.object({snapshotId:Bt,summary:an,entries:o.z.array(gn).max(1e5)}).strict();o.z.object({file:pn.optional(),snapshotId:Bt,context:sn,changes:zn}).strict();const hn=o.z.object({kind:o.z.enum(["metadata","hunk","context","addition","deletion"]),content:o.z.string(),oldLine:o.z.number().int().positive().optional(),newLine:o.z.number().int().positive().optional(),oldStart:o.z.number().int().nonnegative().optional(),oldCount:o.z.number().int().nonnegative().optional(),newStart:o.z.number().int().nonnegative().optional(),newCount:o.z.number().int().nonnegative().optional(),heading:o.z.string().optional(),hunkId:o.z.string().min(1).max(200).optional()}).strict();o.z.object({path:Vt,oldPath:Vt.optional(),scope:Jt,binary:o.z.boolean(),complete:o.z.boolean(),truncated:o.z.boolean(),byteLimit:o.z.number().int().positive(),content:o.z.string(),lines:o.z.array(hn).max(2e5),contextGaps:o.z.array(o.z.object({gapId:o.z.string().min(1).max(500),beforeHunkId:o.z.string().min(1).max(200).optional(),afterHunkId:o.z.string().min(1).max(200).optional(),lines:o.z.array(hn).max(6e3),startLineCount:o.z.number().int().nonnegative().max(3e3),hasMore:o.z.boolean()}).strict()).max(2e4),version:un,snapshotId:Bt}).strict();const yn=o.z.object({name:o.z.string().min(1).max(1024),oid:o.z.string().regex(/^[0-9a-f]{40,64}$/),kind:o.z.enum(["local","remote-tracking"]),current:o.z.boolean(),upstream:o.z.string().min(1).max(2048).optional(),ahead:o.z.number().int().nonnegative().optional(),behind:o.z.number().int().nonnegative().optional(),checkedOutWorktreeIds:o.z.array(Bt).max(256).default([])}).strict(),fn=o.z.object({snapshotId:Bt,branches:o.z.array(yn).max(1e5)}).strict();o.z.object({snapshotId:Bt,context:sn,branches:fn}).strict(),o.z.object({ok:o.z.literal(!0),snapshotId:Bt,context:sn,changes:zn.optional(),commitOid:o.z.string().regex(/^[0-9a-f]{40,64}$/).optional()}).strict();const In=o.z.enum(["REPOSITORY_REQUEST_INVALID","REPOSITORY_SESSION_NOT_FOUND","REPOSITORY_SESSION_INACTIVE","REPOSITORY_CWD_MISSING","REPOSITORY_CWD_INACCESSIBLE","REPOSITORY_GIT_UNAVAILABLE","REPOSITORY_NOT_WORKTREE","REPOSITORY_PATH_INVALID","REPOSITORY_PATH_FORBIDDEN","REPOSITORY_FILE_NOT_FOUND","REPOSITORY_FILE_EXISTS","REPOSITORY_FILE_UNSUPPORTED","REPOSITORY_FILE_TOO_LARGE","REPOSITORY_FILE_BINARY","REPOSITORY_FILE_STALE","REPOSITORY_STATE_STALE","REPOSITORY_WORKTREE_NOT_FOUND","REPOSITORY_WORKTREE_OCCUPIED","REPOSITORY_WORKTREE_UNSAFE","REPOSITORY_BRANCH_INVALID","REPOSITORY_BRANCH_OCCUPIED","REPOSITORY_BRANCH_UNMERGED","REPOSITORY_CONFLICT","REPOSITORY_DIRTY","REPOSITORY_NOTHING_TO_COMMIT","REPOSITORY_IDENTITY_MISSING","REPOSITORY_HOOK_FAILED","REPOSITORY_SIGNING_FAILED","REPOSITORY_AUTHENTICATION_FAILED","REPOSITORY_CREDENTIAL_MISSING","REPOSITORY_CREDENTIAL_AMBIGUOUS","REPOSITORY_REMOTE_UNSUPPORTED","REPOSITORY_HOST_KEY_REQUIRED","REPOSITORY_AUTHENTICATION_REJECTED","REPOSITORY_NON_FAST_FORWARD","REPOSITORY_UPSTREAM_MISSING","REPOSITORY_COMMAND_TIMEOUT","REPOSITORY_OUTPUT_LIMIT","REPOSITORY_OPERATION_ABORTED","REPOSITORY_OPERATION_FAILED"]);o.z.object({ok:o.z.literal(!1),error:o.z.object({code:In,message:o.z.string().trim().min(1).max(2e3),retryable:o.z.boolean(),details:o.z.record(o.z.string(),o.z.union([o.z.string(),o.z.number(),o.z.boolean()])).optional()}).strict()}).strict();const bn=o.z.object({expectedSnapshotId:Bt}).strict(),wn=o.z.object({path:Vt,expectedVersion:un}).strict();o.z.object({path:Vt,content:o.z.string().max(4194304),expectedAbsent:o.z.literal(!0),expectedSnapshotId:Bt}).strict(),o.z.object({path:Vt,content:o.z.string().max(4194304),expectedVersion:un,expectedSnapshotId:Bt}).strict(),o.z.object({path:Vt,destination:Vt,expectedVersion:un,expectedDestinationAbsent:o.z.literal(!0),expectedSnapshotId:Bt}).strict(),o.z.object({path:Vt,expectedVersion:un,expectedSnapshotId:Bt,confirm:o.z.literal(!0)}).strict(),bn.extend({paths:o.z.array(wn).min(1).max(1e3)}).strict(),bn.extend({paths:o.z.array(wn).min(1).max(1e3)}).strict(),bn.extend({paths:o.z.array(wn).min(1).max(1e3),confirm:o.z.literal(!0)}).strict(),bn.extend({paths:o.z.array(wn).min(1).max(1e3),confirm:o.z.literal(!0)}).strict(),bn.extend({message:o.z.string().trim().min(1).max(65536)}).strict();const vn=o.z.discriminatedUnion("mode",[o.z.object({mode:o.z.literal("new-branch"),branchName:Ft,startRef:o.z.string().trim().min(1).max(2048),expectedSnapshotId:Bt}).strict(),o.z.object({mode:o.z.literal("existing-branch"),branchName:Ft,expectedSnapshotId:Bt}).strict()]),xn=bn.extend({worktreeId:Bt,confirm:o.z.literal(!0)}).strict(),An=o.z.object({worktreeId:Bt,worktrees:on}).strict(),Sn=o.z.object({removedWorktreeId:Bt,branchRetained:o.z.boolean(),worktrees:on}).strict(),Cn=o.z.enum(["main-worktree","outside-workspace-roots","path-inaccessible","locked","prunable","session-occupied","main-session-occupied","detached-head","unborn-head","main-dirty"]),kn=o.z.object({worktreeId:Bt}).strict(),jn=o.z.object({worktreeId:Bt,canMove:o.z.boolean(),blockers:o.z.array(Cn).max(16).default([]),targetBranch:o.z.string().min(1).max(1024).optional(),targetChanges:an.default({conflicts:0,staged:0,unstaged:0,untracked:0}),mainWorktreeId:Bt,mainBranch:o.z.string().min(1).max(1024).optional()}).strict(),Rn=bn.extend({worktreeId:Bt,confirm:o.z.literal(!0)}).strict(),Tn=o.z.object({movedWorktreeId:Bt,adoptedBranch:o.z.string().min(1).max(1024),previousHead:o.z.string().regex(/^[0-9a-f]{40,64}$/),carriedChanges:o.z.boolean(),worktrees:on}).strict(),En=o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("current")}).strict(),o.z.object({type:o.z.literal("worktree"),repositoryContextId:Bt,worktreeId:Bt}).strict()]);o.z.object({agent:o.z.enum(["codex","claude","opencode"]),workspaceSelection:En,message:o.z.string().trim().min(1).max(2e4),clientRequestId:Bt,permissionMode:o.z.enum(["ask","auto-review","full-access"]).optional()}).strict(),o.z.object({agent:o.z.enum(["codex","claude","opencode"]),worktree:vn,message:o.z.string().trim().min(1).max(2e4),clientRequestId:Bt,permissionMode:o.z.enum(["ask","auto-review","full-access"]).optional()}).strict(),o.z.object({aiSessionId:Bt,providerSessionId:o.z.string().trim().min(1).max(240),worktreeId:Bt,disposition:o.z.literal("started")}).strict();const Pn=o.z.object({name:o.z.string().min(1).max(1024),kind:o.z.enum(["branch","head"]).default("branch"),current:o.z.boolean(),currentFolderSelectable:o.z.boolean(),worktreeSelectable:o.z.boolean(),worktreeCheckout:o.z.enum(["attached","detached"]).default("attached"),currentFolderReason:o.z.enum(["dirty","session-occupied","branch-occupied"]).optional(),worktreeReason:o.z.enum(["current-branch","branch-occupied","worktree-unavailable"]).optional()}).strict(),On=o.z.object({availability:Yt,currentBranch:o.z.string().min(1).max(1024).optional(),dirty:o.z.boolean().default(!1),branches:o.z.array(Pn).max(1e5).default([]),repositoryContextId:Bt.optional(),snapshotId:Bt.optional(),worktrees:o.z.array(nn).max(1e4).default([])}).strict();function $n(e,t,n){return void 0===t?void 0===n?{method:e}:{method:e,signal:n}:{method:e,...void 0===n?{}:{signal:n},headers:{"content-type":"application/json"},body:JSON.stringify(t)}}o.z.object({cwd:Oe}).strict(),o.z.object({cwd:Oe,branch:Ft}).strict(),o.z.union([qe.safeExtend({gitSelection:Ue,workspaceSelection:o.z.never().optional()}).strict(),qe.safeExtend({gitSelection:o.z.never().optional(),workspaceSelection:_e}).strict()]),o.z.union([Le.safeExtend({cwd:Oe,gitSelection:Ue,workspaceSelection:o.z.never().optional()}).strict(),Le.safeExtend({cwd:Oe,gitSelection:o.z.never().optional(),workspaceSelection:_e}).strict()]),bn.extend({name:Ft}).strict(),bn.extend({branch:o.z.string().trim().min(1).max(2048)}).strict(),bn.extend({name:Ft,remoteTrackingRef:o.z.string().trim().min(1).max(2048)}).strict(),bn.extend({name:Ft,confirm:o.z.literal(!0)}).strict(),bn.extend({remote:Ft}).strict(),bn.extend({remote:Ft,sourceBranch:Ft,targetBranch:Ft,setUpstream:o.z.boolean(),confirmSetUpstream:o.z.boolean().optional()}).strict().refine(e=>!e.setUpstream||!0===e.confirmSetUpstream,{message:"Setting an upstream requires explicit confirmation.",path:["confirmSetUpstream"]}),bn.extend({remote:Ft,sourceBranch:Ft,targetBranch:Ft}).strict();const Nn=e=>o.z.object({data:e}).strict(),_n=Tt,Un=Et.extend({sessions:o.z.array(_n)}),qn=o.z.object({updatedAt:o.z.string().datetime(),instances:o.z.array(o.z.object({instanceId:o.z.string().trim().min(1).max(160),streamId:o.z.string().trim().min(1).max(240),aiSessions:Un,revision:o.z.number().int().nonnegative().optional(),lastEventAt:o.z.string().datetime().optional()}).strict())}).strict(),Ln=o.z.object({id:o.z.string().trim().min(1),kind:o.z.enum(["image","file"]),name:o.z.string(),mime:o.z.string(),size:o.z.number().int().nonnegative(),expiresAt:o.z.string().datetime().optional()}).strict();function Dn(e){const t=async(t,n,i)=>(await e.request(t,Nn(n),i)).data,n=(e,t)=>`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/${encodeURIComponent(t)}`;return{list(e,n){const i=new URLSearchParams({hierarchy:"subagents"});return n&&i.set("instanceId",n),t(`/api/ai-sessions?${i}`,qn,{signal:e})},refresh(e,n){const i=new URLSearchParams({refresh:"true"});return i.set("hierarchy","subagents"),n&&i.set("instanceId",n),t(`/api/ai-sessions?${i}`,qn,{signal:e})},delta(e,n,i,o){const a=new URLSearchParams({instanceId:e,streamId:n,sinceRevision:String(i),hierarchy:"subagents"});return t(`/api/ai-sessions?${a}`,qt,{signal:o})},history(e,n,i=["codex","claude","opencode"]){const o=new URLSearchParams({hierarchy:"subagents"});return i.length&&o.set("agents",i.join(",")),t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/history?${o}`,St,{signal:n})},historyDetail:(e,n,i)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/history/${encodeURIComponent(n)}?hierarchy=subagents`,Ct,{signal:i}),detail(e,i,o,a){const r=o?`?revision=${encodeURIComponent(o)}`:"";return t(`${n(e,i)}${r}`,yt,{signal:a})},turnIndex(e,i,o,a){const r=o?`?revision=${encodeURIComponent(o)}`:"";return t(`${n(e,i)}/turns${r}`,ft,{signal:a})},turnBody(e,i,o,a,r){const s=a?`?revision=${encodeURIComponent(a)}`:"";return t(`${n(e,i)}/turns/${encodeURIComponent(o)}${s}`,It,{signal:r})},timeline:(e,i,o)=>t(`${n(e,i)}/timeline`,ee,{signal:o}),turnTimeline:(e,i,o,a)=>t(`${n(e,i)}/turns/${encodeURIComponent(o)}/timeline`,te,{signal:a}),resume:(e,i,o={})=>t(`${n(e,i)}/resume`,jt,$n("POST",kt.parse(o))),create:(e,n)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions`,Ge,$n("POST",Le.parse(n))),updateModelSelection(e,i,o,a){const r=De.parse({clientRequestId:o,modelSelection:a});return t(`${n(e,i)}/model-selection`,Me,$n("PUT",r))},updateReasoningEffort(e,i,o,a){const r=Be.parse({clientRequestId:o,reasoningEffort:a});return t(`${n(e,i)}/reasoning-effort`,Fe,$n("PUT",r))},rename:(e,i,o)=>t(`${n(e,i)}/title`,we,$n("PUT",be.parse(o))),fork:(e,i,o)=>t(`${n(e,i)}/fork`,Ke,$n("POST",We.parse(o))),workspace(e,n,i){const o=n?`?${new URLSearchParams({cwdFolderId:n})}`:"";return t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/workspace${o}`,On,{signal:i})},checkoutWorkspaceBranch(e,n){const i=He.parse(n);return t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/workspace/checkout`,On,$n("POST",i))},openApp:(e,i,o)=>t(`${n(e,i)}/open-app`,Ze,$n("POST",Je.parse({clientRequestId:o}))),close:(e,i,o)=>t(`${n(e,i)}/close`,Xe,$n("POST",Qe.parse({clientRequestId:o}))),clear:(e,i)=>t(n(e,i),et,{method:"DELETE"}),executeCommand:(e,i,o)=>t(`${n(e,i)}/commands`,Ie,$n("POST",fe.parse(o))),markRead:(e,i)=>t(`${n(e,i)}/read`,Ve,$n("POST",{})),sendMessage(e,i,o){const a=Pe.parse({...o,attachments:o.attachments??[],references:o.references??[]});return t(`${n(e,i)}/messages`,xt,$n("POST",a))},approval:(e,i,o)=>t(`${n(e,i)}/approval`,xt,$n("POST",tt.parse({decision:o}))),interrupt:(e,i)=>t(`${n(e,i)}/interrupt`,xt,$n("POST",{})),steerQueue:(e,i,o)=>t(`${n(e,i)}/queue/${encodeURIComponent(o)}/steer`,xt,$n("POST",{})),retryQueue:(e,i,o)=>t(`${n(e,i)}/queue/${encodeURIComponent(o)}/retry`,vt,$n("POST",{})),removeQueue:(e,i,o)=>t(`${n(e,i)}/queue/${encodeURIComponent(o)}`,vt,{method:"DELETE"}),editQueue:(e,i,o,a)=>t(`${n(e,i)}/queue/${encodeURIComponent(o)}`,vt,$n("PATCH",it.parse(a))),reorderQueue:(e,i,o)=>t(`${n(e,i)}/queue/reorder`,vt,$n("PATCH",nt.parse(o))),async uploadAttachment(t,n){n?.(0);const i=await fetch(t.data).then(e=>e.arrayBuffer()),o=new URLSearchParams({scopeType:t.scopeType||"session",scopeId:t.sessionId,kind:t.kind,name:t.name,mime:t.mime,size:String(i.byteLength)});let a;try{a=await e.request(`/api/controlled-instances/${encodeURIComponent(t.instanceId)}/ai-session-attachments/drafts?${o}`,Nn(Ln),{method:"POST",headers:{"content-type":"application/octet-stream"},body:i},n)}catch(i){if(!function(e){if(!e||"object"!=typeof e)return!1;const t=e;return 404===t.status||405===t.status||"ROUTE_NOT_FOUND"===t.code||"HTTP_404"===t.code}(i))throw i;a=await e.request("/api/ai-session-attachments",Nn(Ln),$n("POST",{instanceId:t.instanceId,sessionId:t.sessionId,kind:t.kind,name:t.name,mime:t.mime,data:t.data}),n)}return n?.(1),a.data},mentionCatalog:(e,i,o)=>t(`${n(e,i)}/mentions`,je,{signal:o}),searchMentionFiles:(e,i,o,a)=>t(`${n(e,i)}/mentions/files`,Re,$n("POST",{query:o},a))}}o.z.object({type:o.z.literal("snapshot"),data:o.z.string(),pendingEscape:o.z.string(),cols:o.z.number().int().positive(),rows:o.z.number().int().positive()}).passthrough();const Mn=o.z.enum(["created","starting","running","stopping","stopped","exited","failed","closed","terminated","unknown"]),Bn=o.z.enum(["tty","vnc","web"]),Hn=o.z.object({mode:Bn,url:o.z.string().trim().min(1).max(4096),token:o.z.string().trim().min(1).max(512),expiresAt:o.z.string().datetime()}).strict(),Fn=o.z.object({revoked:o.z.boolean()}).strict(),Vn=o.z.object({type:o.z.enum(["app-session","provider-session","adapter-key"]),id:o.z.string().trim().min(1).max(240),agent:o.z.string().trim().min(1).max(80).optional(),adapter:o.z.string().trim().min(1).max(80).optional(),key:o.z.string().trim().min(1).max(240).optional()}).strict(),Gn=o.z.record(o.z.string(),o.z.unknown()).and(o.z.object({id:o.z.string().trim().min(1).max(160),appId:o.z.string().trim().min(1).max(160).optional(),title:o.z.string().trim().max(240).optional(),kind:o.z.string().trim().max(80).optional(),status:Mn.default("unknown"),bindings:o.z.array(Vn).max(40).default([]),workspace:o.z.object({cwd:o.z.string().trim().max(4096).optional()}).strict().optional(),createdAt:o.z.string().datetime().optional(),updatedAt:o.z.string().datetime().optional()})),Yn=o.z.object({runningCount:o.z.number().int().min(0).default(0),problemCount:o.z.number().int().min(0).default(0),sessions:o.z.array(Gn).default([]),updatedAt:o.z.string().datetime()}).strict();o.z.object({streamId:o.z.string().trim().min(1).max(240),revision:o.z.number().int().min(0),lastEventAt:o.z.string().datetime(),snapshot:Yn}).strict(),Yn.pick({runningCount:!0,problemCount:!0,updatedAt:!0}).extend({revision:o.z.number().int().min(0).optional()});const Wn=o.z.enum(["app-session-created","app-session-updated","app-session-deleted","app-session-recovered","control-action","heartbeat-sync","startup"]),Kn=o.z.object({streamId:o.z.string().trim().min(1).max(240),instanceId:o.z.string().trim().min(1).max(160),nodeId:o.z.string().trim().min(1).max(160).optional(),revision:o.z.number().int().min(0),previousRevision:o.z.number().int().min(0).optional(),traceId:o.z.string().trim().min(1).max(160),generatedAt:o.z.string().datetime(),reason:Wn}).strict(),Jn=o.z.object({meta:Kn,snapshot:Yn}).strict(),Zn=o.z.object({meta:Kn,session:Gn}).strict(),Qn=o.z.object({meta:Kn,sessionId:o.z.string().trim().min(1).max(160),tombstone:Gn.optional(),expiresAt:o.z.string().datetime().optional()}).strict(),Xn=o.z.object({streamId:o.z.string().trim().min(1).max(240),instanceId:o.z.string().trim().min(1).max(160),sinceRevision:o.z.number().int().min(0),latestRevision:o.z.number().int().min(0),earliestRetainedRevision:o.z.number().int().min(0),syncRequired:o.z.boolean().default(!1),events:o.z.array(o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("app-session.snapshot"),payload:Jn}).strict(),o.z.object({type:o.z.literal("app-session.patch"),payload:Zn}).strict(),o.z.object({type:o.z.literal("app-session.removed"),payload:Qn}).strict()])).default([])}).strict(),ei=o.z.object({appId:o.z.string().trim().min(1).max(120),cwdFolderId:o.z.string().trim().min(1).max(120).optional()}).strict(),ti=o.z.object({title:o.z.string().trim().min(1).max(120)}).strict(),ni=o.z.object({updatedAt:o.z.string().datetime(),instances:o.z.array(o.z.object({instanceId:o.z.string().trim().min(1).max(160),streamId:o.z.string().trim().min(1).max(240),appSessions:Yn,revision:o.z.number().int().nonnegative().optional(),lastEventAt:o.z.string().datetime().optional()}).strict())}).strict();function ii(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).strict())(n),i)).data;return{list(e,n){const i=n?`?instanceId=${encodeURIComponent(n)}`:"";return t(`/api/app-sessions${i}`,ni,{signal:e})},refresh(e,n){const i=new URLSearchParams({refresh:"true"});return n&&i.set("instanceId",n),t(`/api/app-sessions?${i}`,ni,{signal:e})},launch(e,n){const i=ei.parse(n);return t(`/api/controlled-instances/${encodeURIComponent(e)}/apps/sessions`,Gn,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i)})},stop:(e,n)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/apps/sessions/${encodeURIComponent(n)}/stop`,Gn,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({})}),restart:(e,n)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/apps/sessions/${encodeURIComponent(n)}/restart`,Gn,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({})}),rename(e,n,i){const o=ti.parse({title:i});return t(`/api/controlled-instances/${encodeURIComponent(e)}/apps/sessions/${encodeURIComponent(n)}`,Gn,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify(o)})},access:(e,n)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/apps/sessions/${encodeURIComponent(n)}/access`,Hn,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({})}),revokeAccess:(e,n,i)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/apps/sessions/${encodeURIComponent(n)}/access`,Fn,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({token:i})}),delta(e,n,i,o){const a=new URLSearchParams({instanceId:e,streamId:n,sinceRevision:String(i)});return t(`/api/app-sessions?${a}`,Xn,{signal:o})}}}const oi=o.z.string().trim().min(1).max(60),ai=o.z.object({id:o.z.string().trim().min(1).max(120),name:oi,isDefault:o.z.boolean(),runningSessionId:o.z.string().trim().min(1).max(160).optional(),diskUsageBytes:o.z.number().int().nonnegative().optional(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),ri=o.z.object({appId:o.z.string().trim().min(1).max(120),defaultProfileId:o.z.string().trim().min(1).max(120),profiles:o.z.array(ai).max(200),observedAt:o.z.string().datetime()}).strict();o.z.object({name:oi}).strict(),o.z.object({name:oi}).strict();const si=o.z.object({removed:o.z.literal(!0)}).strict();function di(e){const t=(e,t)=>`/api/controlled-instances/${encodeURIComponent(e)}/apps/${encodeURIComponent(t)}/profiles`,n=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).strict())(n),i)).data;return{list:(e,i,o)=>n(t(e,i),ri,{method:"GET",signal:o}),create:(e,i,o)=>n(t(e,i),ai,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:o})}),rename:(e,i,o,a)=>n(`${t(e,i)}/${encodeURIComponent(o)}`,ai,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({name:a})}),setDefault:(e,i,o)=>n(`${t(e,i)}/${encodeURIComponent(o)}/default`,ai,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({})}),remove:(e,i,o)=>n(`${t(e,i)}/${encodeURIComponent(o)}`,si,{method:"DELETE"})}}const ci=o.z.object({accessId:o.z.string().trim().min(1).max(120),token:o.z.string().trim().min(32).max(512),expiresAt:o.z.string().datetime(),relayPath:o.z.literal("/browser-relay")}).strict();function li(e){return{async access(t){var n;return(await e.request(`/api/controlled-instances/${encodeURIComponent(t)}/browser-access`,(n=ci,o.z.object({data:n}).strict()),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({})})).data}}}function mi(e,t){let n=zi(t);for(let t=0;t<100;t+=1){const t=e.safeParse(n);if(t.success)return t;const i=ui(t.error.issues);let o=!1;for(const e of i){const t=gi(n,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],o=!0)}if(!o)return t}return e.safeParse(n)}function ui(e,t=[]){const n=[];for(const i of e){if("unrecognized_keys"===i.code){n.push({code:"unrecognized_keys",keys:i.keys,path:[...t,...i.path]});continue}if("invalid_union"!==i.code||!Array.isArray(i.errors))continue;const e=i.errors.filter(e=>Array.isArray(e));if(!e.length)continue;const o=e.reduce((e,t)=>pi(t)<pi(e)?t:e);n.push(...ui(o,[...t,...i.path]))}return n}function pi(e){return e.reduce((e,t)=>{if("unrecognized_keys"===t.code)return e;if("invalid_union"!==t.code||!Array.isArray(t.errors))return e+1;const n=t.errors.filter(e=>Array.isArray(e));return e+(n.length?Math.min(...n.map(pi)):1)},0)}function gi(e,t){let n=e;for(const e of t){if(!n||"object"!=typeof n)return;n=n[e]}return n}function zi(e){return Array.isArray(e)?e.map(zi):e&&"object"==typeof e?Object.getPrototypeOf(e)!==Object.prototype&&null!==Object.getPrototypeOf(e)?e:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,zi(t)])):e}const hi=["users:read","users:manage","roles:read","roles:manage","identity-providers:read","identity-providers:manage","nodes:read","nodes:manage","projects:read","projects:manage","runtimes:read","runtimes:manage","templates:read","templates:manage","instances:read","instances:manage","instances:interactive","app-sessions:read","app-sessions:manage","app-sessions:interactive","ai-sessions:read","ai-sessions:manage","ai-sessions:interactive","triggers:read","triggers:manage","repositories:read","repositories:manage","attachments:read","attachments:manage","images:read","images:manage","models:read","models:manage","settings:read","settings:manage","secrets:manage","chat-bridges:read","chat-bridges:manage","public-directory:read"],yi=o.z.enum(hi),fi=o.z.enum(["active","disabled","archived"]),Ii=o.z.enum(["local-password","oidc","oauth","local-trust"]),bi=o.z.enum(["active","archived"]),wi=o.z.enum(["oidc","github"]),vi=o.z.enum(["enabled","disabled"]),xi=o.z.enum(["existing-only","admin-approved-create"]),Ai=o.z.enum(["pending","approved","rejected","expired"]),Si=o.z.discriminatedUnion("kind",[o.z.object({kind:o.z.literal("all")}).strict(),o.z.object({kind:o.z.literal("selected"),nodeIds:o.z.array(o.z.string().trim().min(1)).max(1e4)}).strict()]),Ci=o.z.discriminatedUnion("kind",[o.z.object({kind:o.z.literal("inherit-node-scope")}).strict(),o.z.object({kind:o.z.literal("selected"),instanceIds:o.z.array(o.z.string().trim().min(1)).max(1e4)}).strict()]),ki=o.z.object({id:yi,resource:o.z.string().trim().min(1).max(80),action:o.z.string().trim().min(1).max(80),nodeScoped:o.z.boolean(),name:o.z.string().trim().min(1).max(160),translationKey:o.z.string().trim().min(1).max(200).optional(),description:o.z.string().trim().min(1).max(500).optional()}).strict(),ji=new Set(["users","roles","identity-providers","settings","secrets","chat-bridges","public-directory"]);hi.map(e=>{const[t,n]=e.split(":");return ki.parse({id:e,resource:t,action:n,nodeScoped:!ji.has(t),name:e,translationKey:`settings.userAccess.permissionLabels.${t}.${n}`})});const Ri=o.z.object({id:o.z.string().trim().min(1),displayName:o.z.string().trim().min(1).max(160),primaryUsername:o.z.string().trim().min(1).max(80).optional(),status:fi,createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),lastLoginAt:o.z.string().datetime().optional()}).strict(),Ti=o.z.string().trim().min(1).max(80).regex(/^[a-zA-Z0-9_.@-]+$/),Ei=o.z.object({displayName:o.z.string().trim().min(1).max(160).optional(),username:Ti.optional(),status:fi.optional()}).strict().refine(e=>Object.values(e).some(e=>void 0!==e),{message:"At least one user field must be updated."}),Pi=o.z.object({id:o.z.string().trim().min(1),userId:o.z.string().trim().min(1),kind:Ii,providerId:o.z.string().trim().min(1).optional(),loginName:o.z.string().trim().min(1).max(160).optional(),subject:o.z.string().trim().min(1).max(500).optional(),verifiedEmail:o.z.string().email().optional(),requiresPasswordChange:o.z.boolean().optional(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),lastUsedAt:o.z.string().datetime().optional()}).strict().superRefine((e,t)=>{"local-password"!==e.kind||e.loginName||t.addIssue({code:"custom",path:["loginName"],message:"Local password identities require loginName."}),"local-password"===e.kind||"local-trust"===e.kind||e.providerId&&e.subject||t.addIssue({code:"custom",path:["providerId"],message:"External identities require providerId and subject."})}),Oi=o.z.enum(["web","mobile","cli"]),$i=o.z.object({id:o.z.string().trim().min(1),userId:o.z.string().trim().min(1),identityId:o.z.string().trim().min(1),clientType:Oi,createdAt:o.z.string().datetime(),expiresAt:o.z.string().datetime(),lastSeenAt:o.z.string().datetime().optional(),current:o.z.boolean().optional()}).strict(),Ni=o.z.object({id:o.z.string().trim().min(1),name:o.z.string().trim().min(1).max(120),description:o.z.string().trim().max(500).optional(),system:o.z.boolean(),status:bi,permissionIds:o.z.array(yi).max(hi.length),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),_i=o.z.object({userId:o.z.string().trim().min(1),roleIds:o.z.array(o.z.string().trim().min(1)).min(1).max(100),nodeScope:Si,instanceScope:Ci.default({kind:"inherit-node-scope"}),authorizationRevision:o.z.number().int().positive(),updatedAt:o.z.string().datetime()}).strict(),Ui=Ri.extend({identities:o.z.array(Pi),accessGrant:_i}).strict(),qi=o.z.object({userId:o.z.string().trim().min(1),identityId:o.z.string().trim().min(1),roleIds:o.z.array(o.z.string().trim().min(1)).min(1).max(100),permissionIds:o.z.array(yi).max(hi.length),nodeScope:Si,instanceScope:Ci.default({kind:"inherit-node-scope"}),authorizationRevision:o.z.number().int().positive()}).strict(),Li=o.z.object({id:o.z.string().trim().min(1),name:o.z.string().trim().min(1).max(120),kind:wi,status:vi,loginPolicy:xi,issuer:o.z.string().url().optional(),clientId:o.z.string().trim().min(1).max(500),callbackUrl:o.z.string().url(),clientSecretConfigured:o.z.boolean(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict().superRefine((e,t)=>{"oidc"!==e.kind||e.issuer||t.addIssue({code:"custom",path:["issuer"],message:"OIDC providers require issuer."})}),Di=o.z.object({id:o.z.string().trim().min(1),providerId:o.z.string().trim().min(1),subject:o.z.string().trim().min(1).max(500),verifiedEmail:o.z.string().email().optional(),displayName:o.z.string().trim().min(1).max(160).optional(),status:Ai,expiresAt:o.z.string().datetime(),decidedAt:o.z.string().datetime().optional(),decidedByUserId:o.z.string().trim().min(1).optional(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),Mi=o.z.object({userManagement:o.z.object({users:o.z.literal(!0),identities:o.z.literal(!0),sessions:o.z.literal(!0)}).strict(),authentication:o.z.object({externalIdentity:o.z.object({oidc:o.z.boolean(),oauthAdapters:o.z.array(wi).max(20)}).strict().optional()}).strict(),authorization:o.z.object({customRoles:o.z.boolean(),nodeScopes:o.z.literal(!0),instanceScopes:o.z.literal(!0).optional(),authorizationRevisions:o.z.literal(!0)}).strict()}).strict(),Bi=o.z.object({authentication:o.z.enum(["required","disabled"]),aiSessions:o.z.boolean(),nodes:o.z.boolean(),instanceBoard:o.z.boolean(),triggers:o.z.boolean().optional(),stories:o.z.boolean().optional(),cliSessions:o.z.boolean().optional(),localCliSessions:o.z.boolean().optional(),accessManagement:Mi.optional()}).strict();function Hi(e){const t=mi(Bi,e);return t.success?t.data:void 0}function Fi(e){return Hi(e)?.accessManagement}function Vi(e){return!0===Hi(e)?.localCliSessions}const Gi=o.z.object({version:o.z.literal(1),kind:o.z.literal("control-plane"),controlPlaneId:o.z.string().trim().min(1).max(160),publicKey:o.z.object({algorithm:o.z.literal("Ed25519"),encoding:o.z.literal("base64url"),value:o.z.string().regex(/^[A-Za-z0-9_-]{43}$/),fingerprint:o.z.string().regex(/^sha256:[A-Za-z0-9_-]{43}$/)}).strict(),capabilities:Bi,protocolVersion:o.z.string().regex(/^\d{4}-\d{2}-\d{2}$/),issuedAt:o.z.string().datetime(),expiresAt:o.z.string().datetime()}).strict(),Yi=o.z.object({data:o.z.object({payload:Gi,signature:o.z.string().regex(/^[A-Za-z0-9_-]{86}$/)}).strict()}).strict(),Wi=o.z.object({id:o.z.string().trim().min(8).max(160),name:o.z.string().trim().min(1).max(160),platform:o.z.enum(["ios","android"]),appVersion:o.z.string().trim().min(1).max(80).optional()}).strict(),Ki=o.z.object({username:o.z.string().trim().min(1).max(80),password:o.z.string().min(1).max(4096),device:Wi}).strict(),Ji=Ri,Zi=$i.extend({device:Wi,user:Ri}).strict();o.z.enum(["CONTROL_PLANE_FORBIDDEN","CONTROL_PLANE_AUTH_REQUIRED","AUTH_PASSWORD_CHANGE_REQUIRED","CONTROL_PLANE_USER_DISABLED","CONTROL_PLANE_AUTHORIZATION_REVISION_CONFLICT","CONTROL_PLANE_LAST_ACTIVE_ADMIN","CONTROL_PLANE_USERNAME_CONFLICT","CONTROL_PLANE_EXTERNAL_IDENTITY_CONFLICT","CONTROL_PLANE_IDENTITY_PROVIDER_NAMESPACE_IMMUTABLE","CONTROL_PLANE_IDENTITY_PROVIDER_UNAVAILABLE","USER_STORE_REINITIALIZATION_REQUIRED"]);const Qi=o.z.object({data:o.z.object({sessionToken:o.z.string().trim().min(32),session:Zi,authorization:qi}).strict()}).strict(),Xi=o.z.object({data:o.z.array(Zi)}).strict(),eo=o.z.object({data:o.z.object({revoked:o.z.boolean()}).strict()}).strict(),to=o.z.object({data:o.z.object({expiresAt:o.z.string().datetime()}).strict()}).strict(),no=o.z.object({name:o.z.string().trim().min(1).max(160),platform:o.z.enum(["darwin","linux","win32"]),version:o.z.string().trim().min(1).max(80).optional()}).strict(),io=o.z.string().trim().min(1).max(200),oo=o.z.string().trim().regex(/^[A-Za-z0-9\-._~]{16,200}$/),ao=o.z.string().regex(/^[A-Za-z0-9_-]{43}$/),ro=o.z.string().regex(/^[A-Za-z0-9\-._~]{43,128}$/),so=o.z.string().trim().min(1).max(2048).refine(e=>void 0!==function(e){if("string"!=typeof e||e.length<1||e.length>2048)return;let t;try{t=new URL(e)}catch{return}if("http:"!==t.protocol||t.username||t.password)return;if("127.0.0.1"!==t.hostname&&"[::1]"!==t.hostname)return;if("/callback"!==t.pathname||t.search||t.hash)return;const n=Number(t.port);return Number.isInteger(n)&&n>=1&&n<=65535?t:void 0}(e),"CLI redirect URIs must target an http loopback /callback address."),co=o.z.object({mode:o.z.literal("browser"),client:no,redirectUri:so,state:oo,codeChallenge:ao,codeChallengeMethod:o.z.literal("S256")}).strict(),lo=o.z.object({mode:o.z.literal("device"),client:no}).strict(),mo=o.z.discriminatedUnion("mode",[co,lo]),uo=o.z.discriminatedUnion("mode",[o.z.object({mode:o.z.literal("browser"),requestId:io,verificationUri:o.z.string().trim().url().max(2048),expiresAt:o.z.string().datetime()}).strict(),o.z.object({mode:o.z.literal("device"),requestId:io,verificationUri:o.z.string().trim().url().max(2048),verificationUriComplete:o.z.string().trim().url().max(2048),userCode:o.z.string().trim().min(1).max(40),intervalSeconds:o.z.number().int().min(1).max(300),expiresAt:o.z.string().datetime()}).strict()]),po=o.z.object({data:uo}).strict(),go=o.z.enum(["pending","approved","denied","consumed","expired"]),zo=o.z.object({requestId:io,mode:o.z.enum(["browser","device"]),status:go,client:no,createdAt:o.z.string().datetime(),expiresAt:o.z.string().datetime(),redirectUri:so.optional(),userCode:o.z.string().trim().min(1).max(40).optional(),decidedAt:o.z.string().datetime().optional()}).strict(),ho=o.z.object({data:zo}).strict(),yo=o.z.object({data:o.z.object({mode:o.z.enum(["browser","device"]),redirectUri:o.z.string().trim().url().max(2048).optional()}).strict()}).strict(),fo=o.z.object({data:o.z.object({ok:o.z.boolean()}).strict()}).strict(),Io=o.z.discriminatedUnion("grantType",[o.z.object({grantType:o.z.literal("authorization_code"),requestId:io,code:o.z.string().trim().min(1).max(400),codeVerifier:ro}).strict(),o.z.object({grantType:o.z.literal("urn:ietf:params:oauth:grant-type:device_code"),requestId:io}).strict()]),bo=$i.extend({clientType:o.z.literal("cli"),client:no,user:Ri}).strict(),wo=o.z.object({data:o.z.object({sessionToken:o.z.string().trim().min(32),session:bo,authorization:qi}).strict()}).strict(),vo=o.z.object({client:no}).strict(),xo=o.z.object({data:o.z.array(bo)}).strict(),Ao=o.z.object({data:o.z.object({revoked:o.z.boolean()}).strict()}).strict(),So=o.z.object({data:o.z.object({expiresAt:o.z.string().datetime()}).strict()}).strict();o.z.enum(["CLI_AUTHORIZATION_REQUEST_UNKNOWN","CLI_AUTHORIZATION_PENDING","CLI_AUTHORIZATION_SLOW_DOWN","CLI_AUTHORIZATION_EXPIRED","CLI_AUTHORIZATION_DENIED","CLI_AUTHORIZATION_ALREADY_USED","CLI_AUTHORIZATION_INVALID_GRANT","CLI_AUTHORIZATION_RATE_LIMITED"]);const Co=o.z.object({mode:o.z.enum(["disabled","password"]),enabled:o.z.boolean(),requiresBootstrap:o.z.boolean(),authenticated:o.z.boolean(),requiresPasswordChange:o.z.boolean().optional(),user:Ji.optional(),authorization:qi.optional()}).strict();function ko(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).strict())(n),i)).data,n=e=>({method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e??{})});return{identity:()=>e.request("/api/control-plane/identity",Yi),session:e=>t("/api/auth/session",Co,{signal:e}),bootstrapAdmin:e=>t("/api/auth/bootstrap-admin",Ji,n(e)),login:e=>t("/api/auth/login",o.z.object({user:Ji}).strict(),n(e)),changePassword(e){return t("/api/auth/password",o.z.object({user:Ji}).strict(),(n=e,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify(n)}));var n},logout:()=>t("/api/auth/logout",o.z.object({ok:o.z.boolean()}).strict(),n()),logoutMobile:()=>t("/api/auth/mobile/logout",o.z.object({ok:o.z.boolean()}).strict(),n()),renewMobileSession:t=>e.request("/api/auth/mobile/renew",to,{...n(),signal:t}).then(e=>e.data),loginMobile:async t=>(await e.request("/api/auth/mobile/login",Qi,n(Ki.parse(t)))).data,cliAuthorize:t=>e.request("/api/auth/cli/authorize",po,n(mo.parse(t))).then(e=>e.data),cliToken:t=>e.request("/api/auth/cli/token",wo,n(Io.parse(t))).then(e=>e.data),cliLocalSession:t=>e.request("/api/auth/cli/local",wo,n(vo.parse(t))).then(e=>e.data),cliAuthorizationRequest:(t,n)=>e.request(`/api/auth/cli/requests/${encodeURIComponent(t)}`,ho,{signal:n}).then(e=>e.data),cliAuthorizationRequestByUserCode:(t,n)=>e.request(`/api/auth/cli/requests?userCode=${encodeURIComponent(t)}`,ho,{signal:n}).then(e=>e.data),approveCliAuthorization:t=>e.request(`/api/auth/cli/requests/${encodeURIComponent(t)}/approve`,yo,n()).then(e=>e.data),denyCliAuthorization:t=>e.request(`/api/auth/cli/requests/${encodeURIComponent(t)}/deny`,fo,n()).then(e=>e.data),logoutCli:()=>t("/api/auth/cli/logout",o.z.object({ok:o.z.boolean()}).strict(),n()),renewCliSession:t=>e.request("/api/auth/cli/renew",So,{...n(),signal:t}).then(e=>e.data),cliSessions:t=>e.request("/api/auth/cli/sessions",xo,{signal:t}).then(e=>e.data),revokeCliSession:t=>e.request(`/api/auth/cli/sessions/${encodeURIComponent(t)}`,Ao,{method:"DELETE"}).then(e=>e.data),mobileSessions:t=>e.request("/api/auth/mobile/sessions",Xi,{signal:t}).then(e=>e.data),revokeMobileSession:t=>e.request(`/api/auth/mobile/sessions/${encodeURIComponent(t)}`,eo,{method:"DELETE"}).then(e=>e.data)}}const jo=e=>o.z.object({data:e}).strict();function Ro(e){return{currentAuthorization:t=>e.request("/api/access/me",jo(qi),{signal:t}).then(e=>e.data),list(t={},n){const i=new URLSearchParams;return t.search&&i.set("search",t.search),t.includeArchived&&i.set("includeArchived","true"),e.request("/api/users"+(i.size?`?${i}`:""),jo(o.z.array(Ri)),{signal:n}).then(e=>e.data)},detail:(t,n)=>e.request(`/api/users/${encodeURIComponent(t)}`,jo(Ui),{signal:n}).then(e=>e.data),create:t=>e.request("/api/users",jo(Ui),$n("POST",t)).then(e=>e.data),update:(t,n)=>e.request(`/api/users/${encodeURIComponent(t)}`,jo(Ui),$n("PATCH",Ei.parse(n))).then(e=>e.data),setAccess:(t,n)=>e.request(`/api/users/${encodeURIComponent(t)}/access`,jo(Ui),$n("PUT",n)).then(e=>e.data),resetPassword:(t,n)=>e.request(`/api/users/${encodeURIComponent(t)}/password-reset`,jo(Pi),$n("POST",n)).then(e=>e.data),unbindExternalIdentity:(t,n)=>e.request(`/api/users/${encodeURIComponent(t)}/identities/${encodeURIComponent(n)}`,jo(o.z.object({unbound:o.z.boolean()}).strict()),{method:"DELETE"}).then(e=>e.data),sessions:(t,n)=>e.request(`/api/users/${encodeURIComponent(t)}/sessions`,jo(o.z.array($i)),{signal:n}).then(e=>e.data),revokeSession:(t,n)=>e.request(`/api/users/${encodeURIComponent(t)}/sessions/${encodeURIComponent(n)}`,jo(o.z.object({revoked:o.z.boolean()}).strict()),{method:"DELETE"}).then(e=>e.data),revokeAllSessions:t=>e.request(`/api/users/${encodeURIComponent(t)}/sessions`,jo(o.z.object({revokedSessions:o.z.number().int().nonnegative()}).strict()),{method:"DELETE"}).then(e=>e.data),roles:t=>e.request("/api/roles",jo(o.z.array(Ni)),{signal:t}).then(e=>e.data),permissions:t=>e.request("/api/permissions",jo(o.z.array(ki)),{signal:t}).then(e=>e.data),createRole:t=>e.request("/api/roles",jo(Ni),$n("POST",t)).then(e=>e.data),updateRole:(t,n)=>e.request(`/api/roles/${encodeURIComponent(t)}`,jo(Ni),$n("PATCH",n)).then(e=>e.data),archiveRole:t=>e.request(`/api/roles/${encodeURIComponent(t)}`,jo(Ni),{method:"DELETE"}).then(e=>e.data),providers:t=>e.request("/api/identity-providers",jo(o.z.array(Li)),{signal:t}).then(e=>e.data),createProvider:t=>e.request("/api/identity-providers",jo(Li),$n("POST",t)).then(e=>e.data),updateProvider:(t,n)=>e.request(`/api/identity-providers/${encodeURIComponent(t)}`,jo(Li),$n("PATCH",n)).then(e=>e.data),removeProvider:t=>e.request(`/api/identity-providers/${encodeURIComponent(t)}`,jo(o.z.object({deleted:o.z.boolean()}).strict()),{method:"DELETE"}).then(e=>e.data),approvals:t=>e.request("/api/external-identity-approvals",jo(o.z.array(Di)),{signal:t}).then(e=>e.data),approveIdentity:(t,n)=>e.request(`/api/external-identity-approvals/${encodeURIComponent(t)}/approve`,jo(Ui),$n("POST",n)).then(e=>e.data),rejectIdentity:t=>e.request(`/api/external-identity-approvals/${encodeURIComponent(t)}/reject`,jo(o.z.object({rejected:o.z.boolean()}).strict()),$n("POST",{})).then(e=>e.data)}}const To=o.z.string().trim().min(1).max(120),Eo=o.z.object({selectModelAtCreate:o.z.boolean().default(!1),selectProviderAtCreate:o.z.boolean().default(!1),selectModelAtResume:o.z.boolean().default(!1),selectProviderAtResume:o.z.boolean().default(!1),switchModelWithinProvider:o.z.boolean().default(!1),switchProviderDuringSession:o.z.boolean().default(!1)}).strip().default({selectModelAtCreate:!1,selectProviderAtCreate:!1,selectModelAtResume:!1,selectProviderAtResume:!1,switchModelWithinProvider:!1,switchProviderDuringSession:!1}),Po=o.z.object({selectAtCreate:o.z.boolean().default(!1),updateDuringSession:o.z.boolean().default(!1)}).strip().default({selectAtCreate:!1,updateDuringSession:!1}),Oo=o.z.object({subagents:o.z.boolean().default(!1)}).strip().default({subagents:!1}),$o=o.z.object({agent:To,actions:o.z.object({create:o.z.boolean().default(!1),send:o.z.boolean().default(!1),queue:o.z.boolean().default(!1),steer:o.z.boolean().default(!1),interrupt:o.z.boolean().default(!1),archive:o.z.boolean().default(!1),delete:o.z.boolean().default(!1),fork:o.z.boolean().default(!1),rename:o.z.boolean().default(!1),approvalDecisions:o.z.array(o.z.enum(["allow","deny","skip"])).max(3).default([])}).passthrough(),permissionModes:o.z.array(o.z.enum(["ask","auto-review","full-access"])).max(3).default([]),timeline:o.z.object({sessionRead:o.z.boolean().default(!1),turnRead:o.z.boolean().default(!1),liveItems:o.z.boolean().default(!1)}).passthrough(),modelSelection:Eo.optional(),reasoningEffort:Po.optional(),hierarchy:Oo.optional()}).passthrough(),No=o.z.array($o).max(100).default([]),_o=o.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Uo=o.z.string().datetime(),qo=o.z.object({sessionReadAgents:o.z.array(o.z.string().trim().min(1).max(120)).max(100).default([]),turnReadAgents:o.z.array(o.z.string().trim().min(1).max(120)).max(100).default([]),liveItemAgents:o.z.array(o.z.string().trim().min(1).max(120)).max(100).default([])}).passthrough();const Lo=o.z.object({metadataAgents:o.z.array(o.z.string().trim().min(1).max(120)).max(100).default([]),contentAgents:o.z.array(o.z.string().trim().min(1).max(120)).max(100).default([]),uploadAgents:o.z.array(o.z.string().trim().min(1).max(120)).max(100).default([]),retentionSettings:o.z.boolean().default(!1)}).passthrough(),Do=o.z.object({aiSessionTimeline:qo.default(function(){return{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]}}),aiSessionConversationAttachments:Lo.optional(),aiSessionProviders:No.optional(),browserTunnel:o.z.boolean().optional()}).passthrough(),Mo=o.z.enum(["connecting","handshaking","healthy","reconnecting","suspect","offline"]),Bo=o.z.enum(["start","stop","restart","retry-image"]);o.z.object({instanceId:_o,revision:o.z.number().int().nonnegative(),updatedAt:Uo,status:o.z.enum(["created","provisioning","starting","registering","registered","running","stopping","stopped","deleting","failed","unhealthy"]),health:o.z.enum(["unknown","ok","degraded","failed"]),connectionStatus:o.z.enum(["unknown","online","offline","endpoint-unreachable"]),ready:o.z.boolean(),lastHeartbeatAt:Uo.optional()}).strip();const Ho=o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2048)}).strict(),Fo=o.z.enum(["instances","runtimes","models"]),Vo=o.z.enum(["uninitialized","loading","ready","stale","error"]),Go=o.z.object({nodeId:_o,route:o.z.string().trim().min(1).max(500),method:o.z.string().trim().min(1).max(20),code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(4096),statusCode:o.z.number().int().optional(),issues:o.z.array(o.z.object({path:o.z.array(o.z.union([o.z.string(),o.z.number()])).optional(),message:o.z.string()}).passthrough()).optional()}).passthrough(),Yo=o.z.object({nodeId:_o,resource:Fo,phase:Vo,revision:o.z.number().int().nonnegative().optional(),updatedAt:Uo.optional(),error:Go.optional()}).strict();Yo.extend({contentChanged:o.z.boolean().optional()}).strict();const Wo=o.z.object({nodeStates:o.z.array(Yo).default([])}).passthrough(),Ko=o.z.object({id:_o,name:o.z.string().trim().min(1).max(160),status:o.z.enum(["unknown","online","offline","degraded"]),health:o.z.enum(["unknown","ok","degraded","failed"]),connectionMode:o.z.enum(["local-ipc","local-loopback","direct-http","reverse-wss","control-plane-proxy"]),connectionPhase:Mo.optional(),lastSeenAt:Uo.optional(),observedAt:Uo,capabilities:o.z.array(o.z.string().trim().min(1).max(120)).max(256),error:Ho.optional()}).strict(),Jo=o.z.array(Ko),Zo=o.z.object({id:o.z.string().trim().min(1).max(120),name:o.z.string().trim().min(1).max(120),kind:o.z.enum(["tty","gui","web"]),supportsCwdSelection:o.z.boolean()}).strict(),Qo=o.z.object({modelEntityIds:o.z.array(_o).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:_o.nullable().optional(),claudeModelHash:_o.nullable().optional(),opencodeModelHash:_o.nullable().optional()}).strict().default({}),Xo=o.z.object({id:_o,name:o.z.string().trim().min(1).max(160),nodeId:_o,status:o.z.enum(["created","provisioning","starting","registering","registered","running","stopping","stopped","deleting","failed","unhealthy"]),health:o.z.enum(["unknown","ok","degraded","failed"]),connectionStatus:o.z.enum(["unknown","online","offline","endpoint-unreachable"]),ready:o.z.boolean(),capabilities:Do.default({aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]}}),config:o.z.object({defaultCodexPermissionMode:he.default("ask"),aiSessionMaxFileAttachmentBytes:o.z.number().int().positive().default(O)}).strict().default({defaultCodexPermissionMode:"ask",aiSessionMaxFileAttachmentBytes:O}),modelSelection:Qo,lastHeartbeatAt:Uo.optional(),heartbeatAgeMs:o.z.number().int().nonnegative().optional(),observedAt:Uo,runtime:o.z.object({id:_o,name:o.z.string().trim().min(1).max(160).optional(),type:o.z.enum(["docker","kubernetes","local"]).optional()}).strict(),workspace:o.z.object({status:o.z.enum(["unknown","pending","ready","failed"]),path:o.z.string().trim().max(4096).optional()}).strict(),protocol:o.z.object({version:o.z.string().optional(),compatible:o.z.boolean(),warning:o.z.string().trim().min(1).max(500).optional()}).strict(),aiSessions:Pt,availableActions:o.z.array(Bo).max(4).default([]),availableApps:o.z.array(Zo).max(256).default([]),availableAgents:o.z.array(Zo).max(256),error:Ho.optional()}).strict(),ea=o.z.array(Xo),ta=o.z.union([o.z.object({type:o.z.literal("schedule"),scheduleKind:o.z.literal("interval").default("interval"),intervalMs:o.z.number().int().min(1e3)}).strict(),o.z.object({type:o.z.literal("schedule"),scheduleKind:o.z.literal("daily"),timeOfDay:o.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:o.z.string().trim().min(1).max(120)}).strict(),o.z.object({type:o.z.literal("schedule"),scheduleKind:o.z.literal("weekly"),weekdays:o.z.array(o.z.number().int().min(0).max(6)).min(1).max(7),timeOfDay:o.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:o.z.string().trim().min(1).max(120)}).strict()]),na=o.z.union([ta,o.z.object({type:o.z.literal("file-change"),roots:o.z.array(o.z.string().trim().min(1).max(4096)).min(1).max(50),globs:o.z.array(o.z.string().trim().min(1).max(500)).min(1).max(100),ignore:o.z.array(o.z.string().trim().min(1).max(500)).max(100).optional(),debounceMs:o.z.number().int().min(100).max(6e4).default(1500)}).strict(),o.z.object({type:o.z.literal("ai-session"),agent:o.z.string().trim().min(1).max(80).optional(),statuses:o.z.array(o.z.enum(["running","waiting","idle","failed"])).max(20).optional(),phases:o.z.array(o.z.enum(["thinking","tool","editing","approval","responding","unknown"])).max(20).optional()}).strict()]),ia=o.z.object({promptTemplate:o.z.string().trim().min(1).max(2e4)}).strict(),oa=o.z.object({cooldownMs:o.z.number().int().min(0).max(864e5).optional(),maxConcurrentRuns:o.z.number().int().min(1).max(20).default(1),whenBusy:o.z.enum(["skip","queue"]).default("skip")}).strict(),aa=o.z.object({configHash:o.z.string().trim().min(8).max(80),name:o.z.string().trim().min(1).max(160),description:o.z.string().trim().max(1e3).optional(),source:na,action:ia,policy:oa.default({maxConcurrentRuns:1,whenBusy:"skip"}),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),ra=o.z.object({type:o.z.literal("ai-session"),aiSessionId:o.z.string().trim().min(1).max(160)}).strict(),sa=o.z.object({configHash:o.z.string().trim().min(8).max(80),deploymentId:o.z.string().trim().min(1).max(240).optional(),instanceId:o.z.string().trim().min(1).max(160),origin:o.z.enum(["control-plane","controlled-instance"]).default("controlled-instance"),enabled:o.z.boolean().default(!0),target:ra,localName:o.z.string().trim().min(1).max(160).optional(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),da=o.z.object({configHash:o.z.string().trim().min(8).max(80),deploymentId:o.z.string().trim().min(1).max(240).optional(),instanceId:o.z.string().trim().min(1).max(160),status:o.z.enum(["idle","running","disabled","error"]).default("idle"),lastTriggeredAt:o.z.string().datetime().optional(),lastCompletedAt:o.z.string().datetime().optional(),lastSkippedAt:o.z.string().datetime().optional(),lastError:o.z.string().trim().max(4e3).optional(),runCount:o.z.number().int().min(0).default(0),skippedCount:o.z.number().int().min(0).default(0)}).strict(),ca=o.z.object({id:o.z.string().trim().min(1).max(160),configHash:o.z.string().trim().min(8).max(80),deploymentId:o.z.string().trim().min(1).max(240).optional(),instanceId:o.z.string().trim().min(1).max(160),eventType:o.z.enum(["manual","schedule","file-change","ai-session"]),status:o.z.enum(["started","completed","failed","skipped"]),target:ra,promptPreview:o.z.string().trim().max(500),eventSummary:o.z.string().trim().max(1e3).optional(),error:o.z.string().trim().max(4e3).optional(),startedAt:o.z.string().datetime(),completedAt:o.z.string().datetime().optional()}).strict();o.z.object({schemaVersion:o.z.literal(1).default(1),configs:o.z.array(aa).default([]),deployments:o.z.array(sa).default([]),runtime:o.z.array(da).default([]),recentRuns:o.z.array(ca).default([])}).strict();const la=o.z.object({config:aa,deployment:sa,runtime:da.optional()}).strict();o.z.object({instanceId:o.z.string().trim().min(1).max(160),sessionId:o.z.string().trim().min(1).max(160),mutation:la.optional()}).strip(),o.z.object({instanceId:o.z.string().trim().min(1).max(160),sessionId:o.z.string().trim().min(1).max(160),configHash:aa.shape.configHash}).strip();const ma=o.z.object({instanceId:o.z.string().trim().min(1).max(160),instanceName:o.z.string().trim().min(1).max(160),deployment:sa,runtime:da.optional()}).strip(),ua=ca.extend({instanceName:o.z.string().trim().min(1).max(160).optional()}).strip(),pa=o.z.object({configHash:o.z.string().trim().min(8).max(80),config:aa,deploymentCount:o.z.number().int().min(0),enabledCount:o.z.number().int().min(0),runningCount:o.z.number().int().min(0),errorCount:o.z.number().int().min(0),ownedByControlPlane:o.z.boolean(),controlPlaneDeploymentCount:o.z.number().int().min(0),deployments:o.z.array(ma),recentRuns:o.z.array(ua)}).strip(),ga=o.z.object({updatedAt:o.z.string().datetime(),triggers:o.z.array(pa)}).strip(),za=o.z.object({name:aa.shape.name,description:aa.shape.description,source:na,action:ia,policy:oa.partial().optional()}).strict(),ha=o.z.object({scope:o.z.enum(["node","instance"]),nodeId:o.z.string().trim().min(1).max(160).optional(),instanceId:o.z.string().trim().min(1).max(160).optional(),code:o.z.string().trim().min(1).max(160),message:o.z.string().trim().min(1).max(4e3)}).strip(),ya=o.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Proxy protocol version must use YYYY-MM-DD format."),fa=o.z.string().trim().min(1).max(160).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Ia=o.z.string().datetime(),ba=o.z.string().trim().min(32).max(4096),wa=o.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)}),o.z.NEVER}});o.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)}),o.z.NEVER}});const va=o.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"})),xa=o.z.object({code:va,message:o.z.string().trim().min(1).max(2048),retryable:o.z.boolean(),details:o.z.record(o.z.string(),o.z.unknown()).optional()}).strict(),Aa=o.z.enum(["active","revoked"]),Sa=o.z.object({id:fa,targetNodeId:fa,status:Aa,createdBy:fa,expiresAt:Ia,revokedAt:Ia.optional(),createdAt:Ia,updatedAt:Ia}).strict(),Ca=o.z.object({targetNodeId:fa,expiresInSeconds:o.z.number().int().min(60).max(3600).default(600)}).strict(),ka=o.z.object({invite:Sa,token:o.z.string().trim().min(24).max(512),proxyOrigin:wa,protocolVersion:ya}).strict(),ja=o.z.enum(["active","revoked"]),Ra=o.z.object({id:fa,claimId:fa,sourceControlPlaneId:fa,targetNodeId:fa,bindingKeyId:fa,status:ja,revision:o.z.number().int().positive(),lastError:xa.optional(),revokedAt:Ia.optional(),createdAt:Ia,updatedAt:Ia}).strict();o.z.object({protocolVersion:ya,inviteToken:o.z.string().trim().min(24).max(512).optional(),claimId:fa,sourceControlPlaneId:fa,targetNodeId:fa.optional(),bindingKeyId:fa,credential:ba}).strict(),o.z.object({sourceControlPlaneId:fa,bindingKeyId:fa,credential:ba}).strict();const Ta=o.z.object({id:fa,name:o.z.string().trim().min(1).max(160),status:o.z.enum(["unknown","online","offline","degraded"]),health:o.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:Ia.optional(),capabilities:o.z.record(o.z.string(),o.z.unknown()).default({})}).strict(),Ea=o.z.object({protocolVersion:ya,binding:Ra,streamId:fa,revision:o.z.number().int().nonnegative(),observedAt:Ia,target:Ta}).strict(),Pa=o.z.object({type:o.z.literal("control-plane-proxy.event"),protocolVersion:ya,streamId:fa,bindingId:fa,sourceControlPlaneId:fa,targetNodeId:fa,revision:o.z.number().int().positive(),source:o.z.object({id:o.z.string().trim().min(1).max(512),seq:o.z.number().int().nonnegative()}).strict(),target:Ta,event:o.z.object({type:o.z.string().trim().min(1).max(240),topic:o.z.string().trim().min(1).max(240),createdAt:Ia}).strict()}).strict(),Oa=o.z.object({type:o.z.literal("control-plane-proxy.events.ready"),protocolVersion:ya,streamId:fa,bindingId:fa,sourceControlPlaneId:fa,targetNodeId:fa,latestRevision:o.z.number().int().nonnegative(),earliestRetainedRevision:o.z.number().int().nonnegative()}).strict(),$a=o.z.object({type:o.z.literal("control-plane-proxy.snapshot-required"),protocolVersion:ya,streamId:fa,bindingId:fa,sourceControlPlaneId:fa,targetNodeId:fa,sinceRevision:o.z.number().int().nonnegative(),latestRevision:o.z.number().int().nonnegative(),earliestRetainedRevision:o.z.number().int().nonnegative(),error:xa}).strict();o.z.discriminatedUnion("type",[Pa,Oa,$a]),o.z.object({protocolVersion:ya,binding:Ra,target:Ea.shape.target}).strict();const Na=o.z.object({id:fa,claimId:fa,proxyOrigin:wa,requestedName:o.z.string().trim().min(1).max(160).optional(),sourceControlPlaneId:fa,targetNodeId:fa.optional(),bindingKeyId:fa,credential:ba,status:o.z.enum(["pending","compensation-required"]),createdAt:Ia,updatedAt:Ia,expiresAt:Ia}).strict().omit({credential:!0});o.z.object({id:fa,nodeId:fa,proxyOrigin:wa,proxyBindingId:fa,targetNodeId:fa,sourceControlPlaneId:fa,bindingKeyId:fa,credential:ba,createdAt:Ia,updatedAt:Ia}).strict();const _a=o.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Ua=o.z.string().datetime(),qa=o.z.number().int().nonnegative(),La=o.z.enum(["https-token","ssh-key"]),Da=o.z.enum(["operation-only","instance-retained"]),Ma=o.z.enum(["enabled","disabled"]),Ba=o.z.enum(["pending","synced","deferred","revoking","revoked"]),Ha=o.z.object({scheme:o.z.enum(["https","ssh"]),host:o.z.string().trim().min(1).max(253),port:o.z.number().int().min(1).max(65535).optional(),pathPrefix:o.z.string().min(1).max(2048).default("/")}).strict();function Fa(e){throw new Error(`Invalid Git credential scope: ${e}`)}function Va(e){const t=e.trim().replace(/^\[|\]$/g,"");(!t||t.includes("*")||/[/?#@\s]/.test(t))&&Fa("host is invalid");try{const e=new URL(t.includes(":")?`http://[${t}]/`:`http://${t}/`).hostname.replace(/^\[|\]$/g,"").toLowerCase();return(!e||e.length>253||e.includes("*"))&&Fa("host is invalid"),e}catch{Fa("host is invalid")}}function Ga(e){try{return decodeURIComponent(e)}catch{Fa("path contains invalid percent encoding")}}function Ya(e){const t=e?.trim()||"/";(t.includes("?")||t.includes("#")||t.includes("\\")||t.includes("\0"))&&Fa("path contains an unsupported delimiter");const n=(t.startsWith("/")?t:`/${t}`).split("/").filter(Boolean);for(const e of n){const t=Ga(e);("."===t||".."===t||t.includes("/")||t.includes("\\")||t.includes("\0"))&&Fa("path contains an unsafe segment")}return 0===n.length?"/":`/${n.join("/")}/`}const Wa=o.z.object({id:_a,name:o.z.string().trim().min(1).max(160),kind:La,scope:Ha,secretSet:o.z.literal(!0),status:Ma,revision:qa,createdAt:Ua,updatedAt:Ua}).strict(),Ka=o.z.object({kind:o.z.literal("https-token"),username:o.z.string().trim().min(1).max(240),token:o.z.string().min(1).max(8192)}).strict(),Ja=o.z.object({kind:o.z.literal("ssh-key"),privateKey:o.z.string().min(1).max(131072),passphrase:o.z.string().max(8192).optional(),pinnedKnownHosts:o.z.string().min(1).max(131072)}).strict(),Za=o.z.discriminatedUnion("kind",[Ka,Ja]);o.z.object({name:o.z.string().trim().min(1).max(160),scope:Ha,secret:Za}).strict().superRefine((e,t)=>{"https"===e.scope.scheme!=("https-token"===e.secret.kind)&&t.addIssue({code:"custom",path:["scope","scheme"],message:"Credential kind must match the remote scheme."});try{!function(e){const t=Ha.parse(e),n="https"===t.scheme?443:22;Ha.parse({scheme:t.scheme,host:Va(t.host),...void 0===t.port||t.port===n?{}:{port:t.port},pathPrefix:Ya(t.pathPrefix)})}(e.scope)}catch(e){t.addIssue({code:"custom",path:["scope"],message:e instanceof Error?e.message:"Invalid Git scope."})}}),o.z.object({name:o.z.string().trim().min(1).max(160).optional(),scope:Ha.optional(),secret:Za.optional(),status:Ma.optional()}).strict().refine(e=>Object.keys(e).length>0,"At least one credential field must be updated.");const Qa=o.z.object({items:o.z.array(Wa).max(1e4)}).strict(),Xa=o.z.object({instanceId:_a,credentialId:_a,credentialRevision:qa,assignmentRevision:qa,status:Ba,authorizedAt:Ua,updatedAt:Ua}).strict(),er=o.z.object({credential:Wa,secret:Za}).strict().superRefine((e,t)=>{e.credential.kind!==e.secret.kind&&t.addIssue({code:"custom",path:["secret","kind"],message:"Credential payload kind mismatch."})});o.z.object({instanceId:_a,generation:qa,credentialIds:o.z.array(_a).max(256).transform(e=>[...new Set(e)].sort()),updatedAt:Ua}).strict(),o.z.object({remoteUrl:o.z.string().trim().min(1).max(4096)}).strict(),o.z.discriminatedUnion("status",[o.z.object({status:o.z.literal("ok"),username:o.z.string().min(1).max(240),password:o.z.string().min(1).max(8192)}).strict(),o.z.object({status:o.z.enum(["none","ambiguous","unsupported","missing-host-key","rejected"])}).strict()]),o.z.object({remoteUrl:o.z.string().trim().min(1).max(4096)}).strict(),o.z.discriminatedUnion("status",[o.z.object({status:o.z.literal("ok"),invocationId:_a,publicIdentity:o.z.string().min(1).max(131072),pinnedKnownHosts:o.z.string().min(1).max(131072)}).strict(),o.z.object({status:o.z.enum(["none","ambiguous","unsupported","missing-host-key","rejected"])}).strict()]),o.z.object({invocationId:_a,frame:o.z.string().min(1).max(1048576)}).strict(),o.z.object({frame:o.z.string().min(1).max(1048576)}).strict();const tr=o.z.object({operationId:_a,retention:Da,payload:er}).strict();o.z.object({operationId:_a,instanceId:_a,remoteUrl:o.z.string().trim().min(1).max(4096),ref:o.z.discriminatedUnion("type",[o.z.object({type:o.z.enum(["branch","tag"]),name:o.z.string().trim().min(1).max(240)}).strict(),o.z.object({type:o.z.literal("commit"),commit:o.z.string().trim().regex(/^[0-9a-fA-F]{4,64}$/,"commit must be a hexadecimal Git object id")}).strict()]),clone:o.z.object({depth:o.z.number().int().positive().max(1e5).optional(),submodules:o.z.boolean().default(!1),lfs:o.z.boolean().default(!1),subdirectory:o.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(),credentials:o.z.array(tr).max(256).default([])}).strict();const nr=o.z.enum(["openai-responses","openai-chat-completions","anthropic-messages"]);o.z.object({}).strict();const ir=o.z.object({registry:o.z.boolean().default(!1),runtimeBroker:o.z.boolean().default(!1),workspaceProvisioning:o.z.object({docker:o.z.boolean().default(!1),kubernetes:o.z.boolean().default(!1),local:o.z.boolean().default(!1)}).strip().default({docker:!1,kubernetes:!1,local:!1})}).strip(),or=o.z.object({multiEntityAssignment:o.z.boolean().default(!1),privateModelCatalog:o.z.boolean().default(!1),stableModelIdentity:o.z.boolean().default(!1),requestMappings:o.z.boolean().default(!1),modelRelay:o.z.object({protocols:o.z.array(nr).max(3).default([]),streaming:o.z.boolean().default(!1)}).strip().default(()=>({protocols:[],streaming:!1}))}).strip(),ar=o.z.object({policy:o.z.boolean().default(!1),actions:o.z.boolean().default(!1),automations:o.z.boolean().default(!1),aiSessionRead:o.z.boolean().default(!1)}).strip(),rr=o.z.object({enabled:o.z.boolean().default(!1),agentTools:o.z.boolean().default(!1),agentToolCapabilities:ar.optional(),sessionRetention:o.z.boolean().default(!1),maxFileBytes:o.z.number().int().positive().default(33554432),maxBatchPaths:o.z.number().int().min(1).max(100).default(20)}).strip(),sr=o.z.object({runtime:o.z.enum(["docker","local"]),workspaceMaterializer:o.z.enum(["overlay-copy-on-write","worktree"]),processSandbox:o.z.enum(["instance","container","local-runtime"]),providerId:o.z.string().trim().min(1).max(120)}).strip(),dr=o.z.object({definitions:o.z.boolean().default(!1),runs:o.z.boolean().default(!1),orchestration:o.z.object({storyEntryAuthorization:o.z.boolean().default(!1),orchestrations:o.z.boolean().default(!1),runMembers:o.z.boolean().default(!1),manualRuns:o.z.boolean().default(!1)}).strip().default({storyEntryAuthorization:!1,orchestrations:!1,runMembers:!1,manualRuns:!1}),sharedSpace:o.z.object({enabled:o.z.boolean().default(!1),runtimes:o.z.array(o.z.enum(["docker","local"])).default([])}).strip().default({enabled:!1,runtimes:[]}),combinations:o.z.array(sr).default([])}).strip(),cr=dr.omit({combinations:!0}).extend({combinations:o.z.array(o.z.unknown()).default([])}).strip(),lr=o.z.object({modelEndpointProbe:o.z.boolean().optional(),aiSessionHistoryLimit:o.z.boolean().optional(),aiSessionAttachmentRetention:o.z.boolean().optional(),aiSessionFileAttachmentLimit:o.z.boolean().optional(),folderPlaces:o.z.boolean().optional(),localFolderNameUpdate:o.z.boolean().optional(),managedGitCredentials:ir.optional(),managedModels:or.optional(),stories:rr.optional(),codexManagedSettings:o.z.boolean().optional(),agentExecution:dr.optional()}).strip();function mr(e){const t=e&&"object"==typeof e&&!Array.isArray(e)?e:{},n=lr.safeParse({...t,agentExecution:void 0}),i=n.success?n.data:{},o=cr.safeParse(t.agentExecution),a=o.success?dr.parse({...o.data,combinations:o.data.combinations.flatMap(e=>{const t=sr.safeParse(e);return t.success?[t.data]:[]})}):dr.parse({});return{...i,managedGitCredentials:ir.parse(i.managedGitCredentials||{}),managedModels:or.parse(i.managedModels||{}),agentExecution:a,stories:{...rr.parse(i.stories||{}),agentToolCapabilities:ar.parse(i.stories?.agentToolCapabilities||{})}}}const ur=new Set(["2026-08-01","2026-08-16","2026-08-17","2026-08-20","2026-09-24","2026-09-29","2026-10-02"]),pr=o.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Protocol version must use YYYY-MM-DD format."),gr=o.z.string().trim().min(1).max(120),zr=o.z.enum(["low","medium","high"]),hr=o.z.enum(["none","friendly","pragmatic"]),yr=o.z.object({modelEntityId:o.z.string().trim().min(1).max(120),modelName:o.z.string().trim().min(1).max(240)}).strict(),fr=o.z.object({modelVerbosity:zr.optional(),personality:hr.optional(),multiAgent:o.z.object({enabled:o.z.boolean().default(!0),maxConcurrentThreads:o.z.number().int().min(1).max(64).optional(),defaultModel:yr.optional(),defaultReasoningEffort:Ne.optional()}).strict().default({enabled:!0})}).strict();function Ir(){return{features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionWorkspaceCheckout:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,codexManagedSettings:!1,nodeAgentConnectionUpdate:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,repositoryPathSearch:!1,repositoryWorktreeMoveToMain:!1,modelRelay:{protocols:[],streaming:!1},aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}}}const br=o.z.object({sessionReadAgents:o.z.array(gr).max(100).default([]),turnReadAgents:o.z.array(gr).max(100).default([]),liveItemAgents:o.z.array(gr).max(100).default([])}).passthrough(),wr=o.z.object({metadataAgents:o.z.array(gr).max(100).default([]),contentAgents:o.z.array(gr).max(100).default([]),uploadAgents:o.z.array(gr).max(100).default([]),retentionSettings:o.z.boolean().default(!1),fileSizeLimitSettings:o.z.boolean().default(!1)}).passthrough(),vr=o.z.object({protocols:o.z.array(nr).max(3).default([]),streaming:o.z.boolean().default(!1)}).strip(),xr=o.z.object({appRuntime:o.z.boolean().default(!1),tty:o.z.boolean().default(!1),gui:o.z.boolean().default(!1),browser:o.z.boolean().default(!1),browserTunnel:o.z.boolean().optional(),screenshots:o.z.boolean().default(!1),logs:o.z.boolean().default(!1),aiSessionWorkspaceSelection:o.z.boolean().default(!1),aiSessionWorkspaceCheckout:o.z.boolean().optional(),aiSessionPersistenceSettings:o.z.boolean().default(!1),privateModelCatalog:o.z.boolean().optional(),codexManagedSettings:o.z.boolean().optional(),nodeAgentConnectionUpdate:o.z.boolean().optional(),gitCliCredentialBroker:o.z.boolean().optional(),gitCredentialProxy:o.z.boolean().optional(),repositoryPathSearch:o.z.boolean().optional(),repositoryWorktreeMoveToMain:o.z.boolean().optional(),aiSessionTimeline:br.default(function(){return{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]}}),aiSessionConversationAttachments:wr.optional(),aiSessionProviders:No.optional(),modelRelay:vr.optional()}).passthrough(),Ar=o.z.object({features:xr.default(function(){return{appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionWorkspaceCheckout:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,codexManagedSettings:!1,nodeAgentConnectionUpdate:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,repositoryPathSearch:!1,repositoryWorktreeMoveToMain:!1,modelRelay:{protocols:[],streaming:!1},aiSessionTimeline:{sessionReadAgents:[],turnReadAgents:[],liveItemAgents:[]},aiSessionConversationAttachments:{metadataAgents:[],contentAgents:[],uploadAgents:[],retentionSettings:!1,fileSizeLimitSettings:!1},aiSessionProviders:[]}})}).passthrough();function Sr(e){const t={features:{appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionWorkspaceCheckout:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,codexManagedSettings:!1,nodeAgentConnectionUpdate:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,repositoryPathSearch:!1,repositoryWorktreeMoveToMain:!1,modelRelay:{protocols:[],streaming:!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 a=i,r={appRuntime:!1,tty:!1,gui:!1,browser:!1,browserTunnel:!1,screenshots:!1,logs:!1,aiSessionWorkspaceSelection:!1,aiSessionWorkspaceCheckout:!1,aiSessionPersistenceSettings:!1,privateModelCatalog:!1,codexManagedSettings:!1,nodeAgentConnectionUpdate:!1,gitCliCredentialBroker:!1,gitCredentialProxy:!1,repositoryPathSearch:!1,repositoryWorktreeMoveToMain:!1,modelRelay:{protocols:[],streaming:!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","aiSessionWorkspaceCheckout","aiSessionPersistenceSettings","privateModelCatalog","codexManagedSettings","nodeAgentConnectionUpdate","gitCliCredentialBroker","gitCredentialProxy","repositoryPathSearch","repositoryWorktreeMoveToMain"]){const t=o.z.boolean().safeParse(a[e]);t.success&&(r[e]=t.data)}const s=br.safeParse(a.aiSessionTimeline);s.success&&(r.aiSessionTimeline=s.data);const d=wr.safeParse(a.aiSessionConversationAttachments);d.success&&(r.aiSessionConversationAttachments=d.data);const c=No.safeParse(a.aiSessionProviders);c.success&&(r.aiSessionProviders=c.data);const l=vr.safeParse(a.modelRelay);return l.success&&(r.modelRelay=l.data),Ar.parse({...n,features:{...a,...r}})}o.z.object({nodeAgentUrl:o.z.string().trim().url().max(2048).refine(e=>{const t=new URL(e);return/^https?:$/.test(t.protocol)&&!t.username&&!t.password&&"/"===t.pathname&&!t.search&&!t.hash},"Node agent URL must be an HTTP(S) origin.")}).strict();const Cr=o.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),kr=o.z.string().datetime(),jr=o.z.record(o.z.string(),o.z.string()).default({}),Rr=o.z.record(o.z.string(),o.z.string()).default({});o.z.object({encoding:o.z.enum(["utf8","base64"]),data:o.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."})});const Tr=/^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/,Er=/^sha256:([a-fA-F0-9]{64})$/,Pr=/^(?:localhost|[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)(?::[1-9][0-9]{0,4})?$/,Or=/^[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*$/;function $r(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),a=i?Er.exec(i):void 0;if(i&&!a)throw new Error("Docker image digest must use sha256 followed by 64 hexadecimal characters.");const r=o.lastIndexOf("/"),s=o.lastIndexOf(":"),d=s>r,c=d?o.slice(s+1):void 0,l=d?o.slice(0,s):o;if(c&&!Tr.test(c))throw new Error("Docker image tag is invalid.");if(!c&&!a)throw new Error("Docker image reference must include an explicit tag or sha256 digest.");const m=l.split("/");if(!m.length||m.some(e=>!e))throw new Error("Docker image repository path is invalid.");const u=m.length>1&&(m[0].includes(".")||m[0].includes(":")||"localhost"===m[0]),p=u?m.slice(1):m;if(u&&!Pr.test(m[0].toLowerCase()))throw new Error("Docker image registry host or port is invalid.");if(!p.length||p.some(e=>!Or.test(e)))throw new Error("Docker image repository names must be lowercase and use valid separators.");const g=m.map((e,t)=>u&&0===t?e.toLowerCase():e).join("/"),z=a?`sha256:${a[1].toLowerCase()}`:void 0;return`${g}${c?`:${c}`:""}${z?`@${z}`:""}`}function Nr(e){const t=$r(e),n=t.indexOf("@"),i=-1===n?void 0:t.slice(n+1),o=-1===n?t:t.slice(0,n),a=o.lastIndexOf("/"),r=o.lastIndexOf(":"),s=r>a;return{reference:t,repository:s?o.slice(0,r):o,tag:s?o.slice(r+1):void 0,digest:i}}const _r=o.z.string().trim().min(1).max(512).transform((e,t)=>{try{return $r(e)}catch(e){return t.addIssue({code:"custom",message:e instanceof Error?e.message:String(e)}),o.z.NEVER}}),Ur=o.z.string().trim().transform((e,t)=>{const n=Er.exec(e);return n?`sha256:${n[1].toLowerCase()}`:(t.addIssue({code:"custom",message:"Docker image digest must use sha256 followed by 64 hexadecimal characters."}),o.z.NEVER)}),qr=o.z.object({modelEntityIds:o.z.array(Cr).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Cr.nullable().optional(),claudeModelHash:Cr.nullable().optional(),opencodeModelHash:Cr.nullable().optional()}).strict().default({}),Lr=o.z.object({imageId:Cr,tag:o.z.string().trim().min(1).max(128).regex(Tr).optional()}).strict(),Dr=o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("image"),imageSelection:Lr}).strict(),o.z.object({type:o.z.literal("template"),environmentTemplateId:Cr}).strict()]),Mr=o.z.enum(["creating","ready","failed","deleting"]),Br=o.z.enum(["linux","darwin","win32","freebsd","openbsd","aix","sunos","unknown"]),Hr=o.z.enum(["x64","arm64","arm","ia32","ppc64","s390x","riscv64","unknown"]),Fr=o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2048),phase:o.z.enum(["validate","commit","inspect","security-check","persist","delete","recovery"]).optional()}).strict(),Vr=o.z.object({templateId:Cr,nodeId:Cr,imageId:Ur,name:o.z.string().trim().min(1).max(160),platform:Br,architecture:Hr}).strict(),Gr=o.z.enum(["data","agent-home","workspace"]),Yr=o.z.object({deleteVolumes:o.z.boolean()}).strict(),Wr=o.z.object({role:Gr,name:o.z.string().trim().min(1).max(255),mountPath:o.z.string().trim().startsWith("/").max(4096),status:o.z.enum(["deleted","retained","missing","failed"]),error:o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2048)}).strict().optional()}).strict(),Kr=o.z.object({instanceId:Cr,containerDeleted:o.z.boolean(),completed:o.z.boolean(),deletedVolumes:o.z.array(Wr),retainedVolumes:o.z.array(Wr),volumeResults:o.z.array(Wr)}).strict(),Jr=o.z.object({id:Cr,name:o.z.string().trim().min(1).max(120),kind:o.z.enum(["tty","gui","web"]),source:o.z.enum(["builtin","custom"]),availability:o.z.enum(["available","missing-dependency"]),capabilities:o.z.object({automation:o.z.enum(["cdp"]).optional(),supportsCwdSelection:o.z.boolean().default(!1),supportsProfiles:o.z.boolean().default(!1)}).strict().default({supportsCwdSelection:!1,supportsProfiles:!1}),diagnosticCode:o.z.enum(["APP_EXECUTABLE_NOT_FOUND"]).optional()}).strict(),Zr=o.z.object({code:o.z.enum(["APP_CATALOG_INVALID"]),message:o.z.string().trim().min(1).max(500)}).strict(),Qr=o.z.object({items:o.z.array(Jr).max(256),observedAt:kr,issues:o.z.array(Zr).max(32).default([])}).strict(),Xr=o.z.object({id:Cr,name:o.z.string().trim().min(1).max(160),sourceInstanceId:Cr,nodeId:Cr,imageId:Ur.optional(),internalTag:o.z.string().trim().min(1).max(512).optional(),platform:Br.optional(),architecture:Hr.optional(),sizeBytes:o.z.number().int().nonnegative().optional(),status:Mr,error:Fr.optional(),createdAt:kr,updatedAt:kr}).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."})}),es=o.z.enum(["apt","dnf","brew","npm"]),ts=o.z.enum(["user","passwordless-sudo","root"]),ns=o.z.object({platform:Br,arch:Hr,installers:o.z.array(es).max(8),privilege:ts,installerAccess:o.z.object({npmGlobalWritable:o.z.boolean().optional()}).strict().optional()}).strict(),is=o.z.enum(["installed","not-installed","broken","unsupported"]),os=o.z.enum(["recipe","bundled","external","none"]),as=o.z.object({code:o.z.enum(["BUNDLED","EXTERNALLY_MANAGED","ALREADY_INSTALLED","NOT_INSTALLED","UNSUPPORTED_PLATFORM","INSTALLER_UNAVAILABLE","INSTALLER_NOT_WRITABLE","INSUFFICIENT_PRIVILEGE","OPERATION_IN_PROGRESS"]),message:o.z.string().trim().min(1).max(500)}).strict(),rs=o.z.object({id:Cr,name:o.z.string().trim().min(1).max(120),kind:o.z.enum(["tty","gui","web"]),description:o.z.string().trim().max(500).optional(),state:is,managementSource:os,version:o.z.string().trim().max(120).optional(),canInstall:o.z.boolean(),canUninstall:o.z.boolean(),installReason:as.optional(),uninstallReason:as.optional(),activeJobId:Cr.optional()}).strict(),ss=o.z.enum(["install","uninstall"]),ds=o.z.enum(["queued","running","succeeded","failed","cancelled","interrupted"]),cs=o.z.object({current:o.z.number().finite().nonnegative().optional(),total:o.z.number().finite().positive().optional(),unit:o.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"]}),ls=o.z.object({executable:o.z.string().trim().min(1).max(4096),args:o.z.array(o.z.string().max(4096)).max(128)}).strict(),ms=o.z.object({code:o.z.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),message:o.z.string().trim().min(1).max(4096),retryable:o.z.boolean(),sessionIds:o.z.array(Cr).max(64).optional()}).strict(),us=o.z.object({id:Cr,requestId:Cr.optional(),appId:Cr,operation:ss,state:ds,phase:o.z.string().trim().min(1).max(120).optional(),progress:cs.optional(),command:ls.optional(),logTail:o.z.string().max(32768).optional(),logTruncated:o.z.boolean().optional(),error:ms.optional(),requestedAt:kr,startedAt:kr.optional(),finishedAt:kr.optional(),updatedAt:kr}).strict(),ps=o.z.object({streamId:Cr,sequence:o.z.number().int().nonnegative(),capabilities:ns,apps:o.z.array(rs).max(256),activeJobs:o.z.array(us).max(256),recentJobs:o.z.array(us).max(256),observedAt:kr}).strict();o.z.object({requestId:Cr.optional()}).strict(),o.z.object({job:us}).strict(),o.z.object({type:o.z.literal("app-management"),streamId:Cr,sequence:o.z.number().int().nonnegative(),observedAt:kr,job:us.optional(),snapshot:ps.optional()}).strict().refine(e=>void 0!==e.job||void 0!==e.snapshot,{message:"An app management event requires a job or snapshot."});const gs=o.z.object({component:o.z.enum(["control-plane","node-agent","controlled-instance"]),packageName:o.z.string().trim().max(160).optional(),packageVersion:o.z.string().trim().max(80).optional(),protocolVersion:pr.optional(),buildId:o.z.string().trim().max(160).optional(),builtAt:o.z.string().trim().max(120).optional(),gitCommit:o.z.string().trim().max(120).optional(),imageRef:o.z.string().trim().max(512).optional(),imageDigest:o.z.string().trim().max(240).optional()}).strict();o.z.object({data:o.z.object({ok:o.z.literal(!0),role:o.z.literal("control-plane"),protocolVersion:pr,build:gs.extend({component:o.z.literal("control-plane"),packageVersion:o.z.string().trim().min(1).max(80)}).loose(),serverTime:kr}).loose()}).loose();const zs=o.z.enum(["stable","beta","alpha"]),hs=o.z.object({packageName:o.z.literal("@task-handoff/controlled-instance"),version:o.z.string().trim().min(1).max(80),platform:o.z.string().trim().min(1).max(40),arch:o.z.string().trim().min(1).max(40),formatVersion:o.z.number().int().positive(),launcherAbi:o.z.number().int().positive(),entrypoint:o.z.string().trim().min(1).max(512),sha256:o.z.string().regex(/^[a-f0-9]{64}$/)}).strict(),ys=o.z.object({code:o.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:o.z.string().trim().min(1).max(4096),expectedVersion:o.z.string().trim().min(1).max(80).optional(),actualVersion:o.z.string().trim().min(1).max(80).optional(),retryable:o.z.boolean().default(!1)}).strict(),fs=o.z.object({desiredVersion:o.z.string().trim().min(1).max(80),actualVersion:o.z.string().trim().min(1).max(80).optional(),phase:o.z.enum(["pending","draining","installing","restarting","verifying","matched","failed"]),attempt:o.z.number().int().nonnegative().default(0),lastAttemptAt:kr.optional(),matchedAt:kr.optional(),error:ys.optional()}).strict(),Is=o.z.object({runningInstanceCount:o.z.number().int().nonnegative(),stoppedInstanceCount:o.z.number().int().nonnegative(),activeInstanceCount:o.z.number().int().nonnegative(),restartInstanceCount:o.z.number().int().nonnegative(),runningInstanceIds:o.z.array(Cr).max(1024).default([]),stoppedInstanceIds:o.z.array(Cr).max(1024).default([]),activeInstanceIds:o.z.array(Cr).max(1024).default([])}).strict(),bs=o.z.object({phase:o.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),desiredVersion:o.z.string().trim().min(1).max(80),nodeVersion:o.z.string().trim().min(1).max(80).optional(),expectedInstanceIds:o.z.array(Cr).max(1024).default([]),expectedInstanceCount:o.z.number().int().nonnegative(),matchedInstanceCount:o.z.number().int().nonnegative(),pendingInstanceCount:o.z.number().int().nonnegative(),failedInstanceCount:o.z.number().int().nonnegative(),deferredInstanceCount:o.z.number().int().nonnegative().default(0)}).strict(),ws=o.z.object({channel:zs.default("stable")}).strict(),vs=o.z.object({source:o.z.literal("npm"),channel:zs,currentVersion:o.z.string().trim().max(240).optional(),availableVersion:o.z.string().trim().min(1).max(240),artifactRef:o.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:o.z.array(hs).default([]),impact:Is,updateAvailable:o.z.boolean(),supported:o.z.boolean().default(!0),reason:o.z.string().trim().max(2048).optional(),checkedAt:kr,preflightToken:o.z.string().trim().min(16).max(240).optional()}).strict(),xs=o.z.object({id:Cr,nodeId:Cr,source:o.z.literal("npm"),channel:zs,fromVersion:o.z.string().trim().max(240).optional(),toVersion:o.z.string().trim().min(1).max(240),artifactRef:o.z.string().trim().min(1).max(512).optional(),runtimeArtifacts:o.z.array(hs).default([]),impact:Is,rollout:bs,status:o.z.enum(["queued","updating-node","restarting-node","converging-instances","succeeded","degraded","failed"]),error:ys.optional(),startedAt:kr.optional(),completedAt:kr.optional(),createdAt:kr,updatedAt:kr}).strict(),As=o.z.object({channel:zs,targetVersion:o.z.string().trim().min(1).max(240),preflightToken:o.z.string().trim().min(16).max(240)}).strict(),Ss=o.z.object({type:o.z.enum(["branch","tag"]),name:o.z.string().trim().min(1).max(240)}).strict(),Cs=o.z.object({type:o.z.literal("commit"),commit:o.z.string().trim().regex(/^[0-9a-fA-F]{4,64}$/,"commit must be a hexadecimal Git object id")}).strict(),ks=o.z.discriminatedUnion("type",[Ss,Cs]),js=o.z.object({type:o.z.enum(["none","ssh-key","https-token"]).default("none"),secretId:o.z.string().trim().min(1).max(120).optional()}).strict(),Rs=o.z.object({depth:o.z.number().int().positive().max(1e5).optional(),submodules:o.z.boolean().default(!1),lfs:o.z.boolean().default(!1),subdirectory:o.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();o.z.object({id:Cr,name:o.z.string().trim().min(1).max(160),url:o.z.string().trim().min(1).max(2048),provider:o.z.string().trim().max(80).optional(),ref:ks.default({type:"branch",name:"main"}),auth:js.default({type:"none"}),clone:Rs.default({submodules:!1,lfs:!1,subdirectory:""}),defaultImageSelection:Lr.optional(),labels:jr,createdAt:kr,updatedAt:kr}).strict();const Ts=o.z.object({id:Cr,nodeId:Cr,name:o.z.string().trim().min(1).max(160),path:o.z.string().trim().min(1).max(4096),defaultImageSelection:Lr.optional(),labels:jr,createdAt:kr,updatedAt:kr}).strict(),Es=o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("git-repository"),repositoryId:Cr.optional(),url:o.z.string().trim().min(1).max(2048),provider:o.z.string().trim().max(80).optional(),ref:ks.default({type:"branch",name:"main"}),auth:js.default({type:"none"}),clone:Rs.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),o.z.object({type:o.z.literal("git-template"),url:o.z.string().trim().min(1).max(2048),templateId:o.z.string().trim().min(1).max(120).optional(),ref:ks.default({type:"branch",name:"main"}),auth:js.default({type:"none"}),clone:Rs.default({submodules:!1,lfs:!1,subdirectory:""})}).strict(),o.z.object({type:o.z.literal("local-folder"),localFolderId:Cr.optional(),path:o.z.string().trim().min(1).max(4096),ownerNodeId:Cr.optional()}).strict()]),Ps=o.z.object({mode:o.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]),path:o.z.string().trim().min(1).max(4096).default("/workspace"),volumeName:o.z.string().trim().max(240).optional(),readOnly:o.z.boolean().default(!1)}).strict(),Os=o.z.enum(["codex","claude","opencode"]),$s=o.z.object({name:o.z.string().trim().min(1).max(240),upstreamName:o.z.string().trim().min(1).max(240).optional(),order:o.z.number().int().min(0).max(1e6).default(0)}).strict(),Ns=o.z.array($s).max(256).default([]).superRefine((e,t)=>{const n=new Set;for(const[i,o]of e.entries())n.has(o.name)&&t.addIssue({code:"custom",path:[i,"name"],message:`Duplicate model name ${o.name}.`}),n.add(o.name)}),_s=o.z.object({name:o.z.string().trim().min(1).max(240),upstreamName:o.z.string().trim().min(1).max(240),order:o.z.number().int().min(0).max(1e6).default(0)}).strict(),Us=o.z.array(_s).max(64).superRefine((e,t)=>{const n=new Set;for(const[i,o]of e.entries())n.has(o.name)&&t.addIssue({code:"custom",path:[i,"name"],message:`Duplicate request mapping ${o.name}.`}),n.add(o.name)}),qs=Us.default([]),Ls=o.z.object({id:Cr,name:o.z.string().trim().min(1).max(160),source:Es,defaultImageSelection:Lr.optional(),defaultNodeId:Cr.optional(),workspacePolicy:Ps,labels:jr,createdAt:kr,updatedAt:kr}).strict(),Ds=o.z.object({id:Cr,name:o.z.string().trim().min(1).max(160),endpoint:o.z.string().trim().min(1).max(2048),key:o.z.string().trim().min(1).max(4096),model:o.z.string().trim().min(1).max(240),modelNames:Ns,mappings:qs,protocols:o.z.array(nr).max(3).default([]),app:Os,enabled:o.z.boolean().default(!0),order:o.z.number().int().min(0).max(1e6).default(0),labels:jr,createdAt:kr,updatedAt:kr}).strict(),Ms=Ds.omit({key:!0}).extend({keyPreview:o.z.string().trim().min(1).max(160),keySet:o.z.boolean(),revision:o.z.string().trim().min(1).max(160).optional()}).strict();Ms.extend({referenceCount:o.z.number().int().min(0)}).strict(),o.z.object({instanceId:Cr,modelEntityIds:o.z.array(Cr).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Cr.optional(),claudeModelHash:Cr.optional(),opencodeModelHash:Cr.optional(),updatedAt:kr}).strict().transform(e=>({...e,modelEntityIds:void 0!==e.modelEntityIds?e.modelEntityIds:[...new Set([e.codexModelHash,e.claudeModelHash,e.opencodeModelHash].filter(e=>Boolean(e)))]}));const Bs=o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("control-plane"),name:Ds.shape.name,enabled:Ds.shape.enabled,order:Ds.shape.order,revision:o.z.string().trim().min(1).max(160).optional()}).strict(),o.z.object({type:o.z.literal("node"),nodeId:Cr,name:Ds.shape.name,enabled:Ds.shape.enabled,order:Ds.shape.order,referenceCount:o.z.number().int().min(0),revision:o.z.string().trim().min(1).max(160).optional(),replicaId:Cr.optional()}).strict()]),Hs=o.z.object({id:Cr,model:Ms,locations:o.z.array(Bs).min(1),referenceCount:o.z.number().int().min(0).default(0)}).strict(),Fs=o.z.object({nodeId:Cr,code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2e3)}).strict(),Vs=o.z.object({models:o.z.array(Hs),nodeDiagnostics:o.z.array(Fs).default([]),updatedAt:kr}).strict();Ds.omit({id:!0,createdAt:!0,updatedAt:!0}).extend({mappings:Us.optional()}).strict().partial().strict();const Gs=o.z.enum(["synced","pending","unsupported","error"]),Ys=o.z.object({nodeId:Cr,state:Gs,code:o.z.string().trim().min(1).max(120).optional(),message:o.z.string().trim().min(1).max(2e3).optional()}).strict(),Ws=o.z.object({model:Ms,locations:o.z.array(Ys).default([])}).strict();o.z.object({targetModelId:Cr}).strict(),o.z.object({merged:o.z.literal(!0),reassignedInstances:o.z.array(Cr).default([])}).strict();const Ks=o.z.object({nodeId:Cr,merged:o.z.boolean(),reassignedInstances:o.z.array(Cr).default([]),code:o.z.string().trim().min(1).max(120).optional(),message:o.z.string().trim().min(1).max(2e3).optional()}).strict(),Js=o.z.object({modelId:Cr,targetModelId:Cr,merged:o.z.boolean(),locations:o.z.array(Ks).default([])}).strict();o.z.object({modelSelection:qr,modelEntityIds:o.z.array(Cr).max(64).transform(e=>[...new Set(e)]).optional(),codexModelHash:Cr.optional(),claudeModelHash:Cr.optional(),opencodeModelHash:Cr.optional()}).strict().transform(e=>({...e,modelEntityIds:e.modelEntityIds||e.modelSelection.modelEntityIds||[...new Set([e.codexModelHash,e.claudeModelHash,e.opencodeModelHash].filter(e=>Boolean(e)))]}));const Zs=o.z.enum(["market","custom"]),Qs=o.z.enum(["active","deprecated","yanked"]),Xs=o.z.discriminatedUnion("kind",[o.z.object({kind:o.z.literal("builtin"),key:o.z.string().trim().min(1).max(120)}).strict(),o.z.object({kind:o.z.literal("remote"),url:o.z.string().trim().url().max(2048),mediaType:o.z.enum(["image/png","image/jpeg","image/webp"]).optional(),digest:Ur.optional()}).strict()]),ed=o.z.array(o.z.string().trim().min(1).max(80)).default([]),td=o.z.array(o.z.string().trim().min(1).max(120)).default([]),nd=o.z.record(o.z.string().trim().min(2).max(35),o.z.string().trim().min(1).max(4096)),id=o.z.object({os:o.z.string().trim().min(1).max(40),architecture:o.z.string().trim().min(1).max(40),digest:Ur.optional(),downloadSizeBytes:o.z.number().int().positive().optional(),unpackedSizeBytes:o.z.number().int().positive().optional()}).strict(),od=o.z.object({name:o.z.string().trim().min(1).max(128).regex(Tr),version:o.z.string().trim().min(1).max(160).optional(),reference:_r,manifestDigest:Ur.optional(),publishedAt:kr.optional(),platforms:o.z.array(id).default([]),status:Qs.default("active")}).strict(),ad=o.z.object({id:Cr,publisher:o.z.string().trim().min(1).max(160),slug:o.z.string().trim().min(1).max(160),name:o.z.string().trim().min(1).max(160),description:o.z.string().trim().min(1).max(4096),localizedDescriptions:nd.optional(),cover:Xs.optional(),repository:o.z.string().trim().min(1).max(512),defaultTag:o.z.string().trim().min(1).max(128).regex(Tr),tags:o.z.array(od).min(1),capabilities:ed,optionalApps:td,defaultEnv:Rr,labels:jr,status:Qs.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."})}),rd=o.z.object({protocolVersion:pr,catalogId:Cr,revision:o.z.string().trim().min(1).max(240),source:o.z.enum(["embedded","remote","cache"]),generatedAt:kr,expiresAt:kr.optional(),items:o.z.array(ad)}).strict(),sd=o.z.object({source:o.z.enum(["embedded","remote","cache"]),state:o.z.enum(["ready","refreshing","stale","failed"]),revision:o.z.string().trim().min(1).max(240),updatedAt:kr,error:o.z.string().trim().max(4096).optional()}).strict(),dd=o.z.object({id:Cr,origin:o.z.literal("custom"),name:o.z.string().trim().min(1).max(160),description:o.z.string().trim().max(4096).optional(),localizedDescriptions:nd.optional(),cover:Xs.optional(),reference:_r,repository:o.z.string().trim().min(1).max(512),tag:o.z.string().trim().min(1).max(128).regex(Tr).optional(),pullPolicy:o.z.literal("if-not-present").default("if-not-present"),capabilities:ed,optionalApps:td,defaultEnv:Rr,labels:jr,createdAt:kr,updatedAt:kr}).strict(),cd=o.z.object({name:o.z.string().trim().min(1).max(128).regex(Tr),version:o.z.string().trim().min(1).max(160).optional(),reference:_r,manifestDigest:Ur.optional(),status:Qs}).strict(),ld=o.z.object({id:Cr,origin:Zs,name:o.z.string().trim().min(1).max(160),description:o.z.string().trim().max(4096).optional(),localizedDescriptions:nd.optional(),cover:Xs,repository:o.z.string().trim().min(1).max(512),tag:o.z.string().trim().min(1).max(128).regex(Tr).optional(),availableTags:o.z.array(cd),reference:_r,digest:Ur.optional(),downloadSizeBytes:o.z.number().int().positive().optional(),unpackedSizeBytes:o.z.number().int().positive().optional(),capabilities:ed,optionalApps:td,defaultEnv:Rr,labels:jr,readOnly:o.z.boolean(),lifecycleStatus:Qs.optional(),market:o.z.object({catalogId:Cr,catalogRevision:o.z.string().trim().min(1).max(240),publisher:o.z.string().trim().min(1).max(160),version:o.z.string().trim().min(1).max(160).optional()}).strict().optional()}).strict(),md=o.z.object({id:Cr,origin:Zs,name:o.z.string().trim().min(1).max(160),description:o.z.string().trim().max(4096).optional(),localizedDescriptions:nd.optional(),cover:Xs.optional(),repository:o.z.string().trim().min(1).max(512),tag:o.z.string().trim().min(1).max(128).regex(Tr).optional(),requestedReference:_r,resolvedDigest:Ur.optional(),resolvedReference:_r.optional(),downloadSizeBytes:o.z.number().int().positive().optional(),pullPolicy:o.z.literal("if-not-present").default("if-not-present"),capabilities:ed,optionalApps:td,defaultEnv:Rr,labels:jr,market:o.z.object({catalogId:Cr,catalogRevision:o.z.string().trim().min(1).max(240),publisher:o.z.string().trim().min(1).max(160),version:o.z.string().trim().min(1).max(160).optional()}).strict().optional(),createdAt:kr,updatedAt:kr}).strict(),ud=o.z.object({phase:o.z.enum(["checking-image","pulling-image","resolving-image","ready","failed"]),requestedReference:_r,generation:o.z.number().int().nonnegative().default(0),error:o.z.string().trim().max(4096).optional(),startedAt:kr,updatedAt:kr}).strict(),pd=o.z.object({instanceId:Cr,generation:o.z.number().int().nonnegative(),requestedReference:_r,sequence:o.z.number().int().nonnegative(),observedAt:kr}).strict();pd.extend({data:o.z.string().min(1).max(65536),replay:o.z.boolean().optional()}).strict(),pd.extend({outcome:o.z.enum(["succeeded","failed"])}).strict(),pd.extend({status:o.z.enum(["connecting","pulling","extracting","complete","failed"]),layers:o.z.object({total:o.z.number().int().nonnegative(),completed:o.z.number().int().nonnegative(),downloaded:o.z.number().int().nonnegative(),downloading:o.z.number().int().nonnegative(),extracting:o.z.number().int().nonnegative()}).strict(),bytes:o.z.object({current:o.z.number().finite().nonnegative(),total:o.z.number().finite().positive()}).strict().optional(),percent:o.z.number().finite().min(0).max(100).optional(),message:o.z.string().trim().min(1).max(500),terminalTail:o.z.string().max(262144).optional(),terminalTruncated:o.z.boolean().optional()}).strict();const gd=o.z.discriminatedUnion("kind",[o.z.object({kind:o.z.literal("direct")}).strict(),o.z.object({kind:o.z.literal("control-plane-proxy"),proxyId:Cr,proxyBindingId:Cr,targetNodeId:Cr}).strict()]),zd=o.z.object({pingRttMs:o.z.number().nonnegative().optional(),pingRttP95Ms:o.z.number().nonnegative().optional(),consecutiveReconnects:o.z.number().int().nonnegative(),nextRetryAt:kr.optional()}).strict();o.z.object({nodeId:Cr,inviteId:Cr.optional()}).strict();const hd=o.z.discriminatedUnion("status",[o.z.object({id:Cr,status:o.z.literal("pending")}).strict(),o.z.object({id:Cr,status:o.z.literal("completed"),nodeId:Cr}).strict()]),yd=o.z.object({reachability:o.z.enum(["unknown","reachable","unreachable"]),bindingStatus:o.z.enum(["unknown","active","revoked"]),bindingRevision:o.z.number().int().positive().optional(),streamId:o.z.string().trim().min(1).max(160).optional(),revision:o.z.number().int().nonnegative().optional(),observedAt:kr.optional(),target:Ta.optional(),lastError:xa.optional(),updatedAt:kr}).strict(),fd=o.z.object({id:Cr,name:o.z.string().trim().min(1).max(160),connectionMode:o.z.enum(["local-ipc","local-loopback","direct-http","reverse-wss","control-plane-proxy"]).default("direct-http"),connectionPath:gd.default({kind:"direct"}),connectionEnabled:o.z.boolean().default(!0),auth:o.z.object({mode:o.z.enum(["local-static-key","paired-hmac","proxy-binding"]).default("local-static-key"),keyId:Cr.optional(),secret:o.z.string().trim().max(4096).optional(),pairedAt:kr.optional(),pairing:o.z.object({status:o.z.enum(["pending","paired","expired"]).default("pending"),joinToken:o.z.string().trim().max(4096).optional(),expiresAt:kr.optional()}).strict().optional()}).strict().default({mode:"local-static-key"}),endpoint:o.z.string().trim().max(2048).optional(),controlEndpoint:o.z.string().trim().max(2048).optional(),containerEndpoint:o.z.string().trim().max(2048).optional(),publicWebBase:o.z.string().trim().max(2048).optional(),status:o.z.enum(["unknown","online","offline","degraded"]).default("unknown"),health:o.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),capabilities:o.z.record(o.z.string(),o.z.unknown()).default({}),proxyState:yd.optional(),appInventory:Qr.optional(),labels:jr,lastSeenAt:kr.optional(),createdAt:kr,updatedAt:kr}).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."})});o.z.object({nodeId:Cr,status:o.z.enum(["unknown","online","offline","degraded"]),health:o.z.enum(["unknown","ok","degraded","failed"]),lastSeenAt:kr.nullable(),connectionPhase:o.z.enum(["connecting","handshaking","healthy","reconnecting","suspect","offline"]).nullable(),connectionDiagnostics:zd.nullable(),proxyState:yd.nullable()}).strict();const Id=o.z.object({id:Cr,nodeId:Cr,name:o.z.string().trim().min(1).max(160),type:o.z.enum(["docker","kubernetes","local"]),status:o.z.enum(["unknown","online","offline","degraded"]).default("unknown"),accessStrategy:o.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),capabilities:o.z.record(o.z.string(),o.z.unknown()).default({}),labels:jr,createdAt:kr,updatedAt:kr}).strict();o.z.object({instanceId:Cr,runtimeKind:o.z.literal("docker"),state:o.z.enum(["pending","available","stopped","unavailable"]),sampledAt:kr,cpu:o.z.object({usagePercent:o.z.number().nonnegative()}).strict().optional(),memory:o.z.object({usageBytes:o.z.number().nonnegative(),limitBytes:o.z.number().nonnegative().optional(),usagePercent:o.z.number().nonnegative().optional()}).strict().optional(),network:o.z.object({rxBytes:o.z.number().nonnegative(),txBytes:o.z.number().nonnegative()}).strict().optional(),blockIo:o.z.object({readBytes:o.z.number().nonnegative(),writeBytes:o.z.number().nonnegative()}).strict().optional(),pids:o.z.number().int().nonnegative().optional(),error:o.z.string().trim().max(2048).optional()}).strict();const bd=o.z.object({status:o.z.enum(["healthy","congested","recovering"]),activeOutputs:o.z.number().int().nonnegative(),bufferedBytes:o.z.number().int().nonnegative(),peakBufferedBytes:o.z.number().int().nonnegative(),coalescedEvents:o.z.number().int().nonnegative(),oversizedEvents:o.z.number().int().nonnegative().optional(),peakEventBytes:o.z.number().int().nonnegative().optional(),congestedSince:kr.optional(),lastCongestedAt:kr.optional()}).strip();o.z.object({ok:o.z.boolean().optional(),role:o.z.string().optional(),nodeId:Cr.optional(),platform:Br.optional(),arch:Hr.optional(),protocolVersion:pr.optional(),capabilities:lr.optional(),build:gs.strip().optional(),process:o.z.object({pid:o.z.number().int().positive(),startIdentity:o.z.string().trim().min(1).optional()}).strip().optional(),listener:o.z.object({host:o.z.string().trim().min(1),port:o.z.number().int().min(1).max(65535)}).strip().optional(),instanceProxy:o.z.object({requests:o.z.number().int().nonnegative(),active:o.z.number().int().nonnegative(),completed:o.z.number().int().nonnegative(),aborted:o.z.number().int().nonnegative(),limitRejected:o.z.number().int().nonnegative(),responseBytes:o.z.number().nonnegative(),totalDurationMs:o.z.number().nonnegative(),maxResponseBytes:o.z.number().int().nonnegative()}).partial().strip().optional(),eventTransport:bd.optional(),serverTime:kr.optional()}).strip();const wd=o.z.object({bindScope:o.z.enum(["loopback","all-ipv4"]),port:o.z.number().int().min(1).max(65535)}).strict(),vd=wd.extend({host:o.z.enum(["127.0.0.1","0.0.0.0"]),status:o.z.enum(["listening","error"]),source:o.z.enum(["bootstrap","persisted"]),error:o.z.string().trim().max(2048).optional()}).strict(),xd=wd,Ad=o.z.object({enabled:o.z.boolean()}).strict(),Sd=o.z.object({enabled:o.z.boolean(),source:o.z.enum(["default","persisted"])}).strip(),Cd=Ad,kd=o.z.object({nodeId:Cr,joinToken:o.z.string().trim().min(1),expiresAt:kr}).passthrough();o.z.object({nodeId:Cr,keyId:Cr,secret:o.z.string().regex(/^[A-Za-z0-9_-]{32,128}$/),pairedAt:kr}).strict();const jd=o.z.object({id:Cr,keyId:Cr,name:o.z.string().trim().min(1).max(160).optional(),pairedAt:kr,updatedAt:kr,current:o.z.boolean()}).passthrough();o.z.object({keyId:Cr,revoked:o.z.literal(!0),revokedAt:kr}).strict();const Rd=o.z.object({id:Cr,pairingKeyId:Cr,url:o.z.string().trim().min(1).max(2048),name:o.z.string().trim().min(1).max(160).optional(),enabled:o.z.boolean(),createdAt:kr,updatedAt:kr,status:o.z.enum(["disabled","connecting","connected","reconnecting","failed"]),pingRttMs:o.z.number().nonnegative().optional(),pingRttP95Ms:o.z.number().nonnegative().optional(),consecutiveReconnects:o.z.number().int().nonnegative().optional(),nextRetryAt:kr.optional(),lastConnectedAt:kr.optional(),lastDisconnectedAt:kr.optional(),error:o.z.string().optional()}).passthrough(),Td=o.z.object({pairing:jd,connection:o.z.object({id:Cr,pairingKeyId:Cr,url:o.z.string().trim().min(1).max(2048),name:o.z.string().trim().min(1).max(160).optional(),enabled:o.z.boolean(),createdAt:kr,updatedAt:kr}).passthrough(),tunnel:o.z.object({status:o.z.enum(["disabled","saved","connecting","connected","failed"]),error:o.z.string().trim().max(2048).optional()}).passthrough()}).passthrough(),Ed=o.z.object({deleted:o.z.boolean().optional()}).passthrough(),Pd=o.z.object({repository:o.z.string().trim().optional(),tag:o.z.string().trim().optional(),id:o.z.string().trim(),createdSince:o.z.string().trim().optional(),size:o.z.string().trim().optional(),sizeBytes:o.z.number().int().nonnegative().optional(),reference:o.z.string().trim().min(1),repoDigests:o.z.array(o.z.string().trim().min(1).max(512)).default([])}).passthrough(),Od=o.z.object({image:ld,status:o.z.enum(["available","pull-required","unknown"]),localImage:Pd.optional(),localSizeBytes:o.z.number().int().nonnegative().optional(),downloadSizeBytes:o.z.number().int().positive().optional(),unpackedSizeBytes:o.z.number().int().positive().optional(),error:o.z.string().trim().max(2048).optional()}).strict(),$d=o.z.lazy(()=>o.z.object({name:o.z.string().trim().min(1),path:o.z.string().trim().min(1).max(4096),children:o.z.array($d)}).passthrough()),Nd=o.z.object({kind:o.z.enum(["home","root"]),name:o.z.string().trim().min(1),path:o.z.string().trim().min(1).max(4096)}).passthrough();o.z.object({status:o.z.number().int().min(100).max(599).optional(),headers:o.z.record(o.z.string(),o.z.string()).optional(),bodyBase64:o.z.string().optional()}).passthrough();const _d=o.z.object({strategy:o.z.enum(["node-proxy","direct-port","kubernetes-ingress","kubernetes-port-forward"]).default("node-proxy"),web:o.z.string().trim().max(2048).optional(),api:o.z.string().trim().max(2048).optional(),vnc:o.z.string().trim().max(2048).optional(),tty:o.z.string().trim().max(2048).optional(),logs:o.z.string().trim().max(2048).optional(),status:o.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict(),Ud=o.z.object({..._d.shape}).strict(),qd=o.z.object({strategy:o.z.enum(["control-plane-proxy","direct-port","node-proxy","kubernetes-ingress","kubernetes-port-forward"]).default("control-plane-proxy"),web:o.z.string().trim().max(2048).optional(),api:o.z.string().trim().max(2048).optional(),ws:o.z.string().trim().max(2048).optional(),status:o.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown")}).strict().default({strategy:"control-plane-proxy",status:"unknown"}),Ld=o.z.object({mode:o.z.enum(["local-bind","git-clone","empty-volume","persistent-volume"]).optional(),status:o.z.enum(["unknown","pending","ready","failed"]).default("unknown"),path:o.z.string().trim().max(4096).optional(),resolvedCommit:o.z.string().trim().max(120).optional(),error:o.z.string().trim().max(2048).optional()}).passthrough(),Dd=o.z.object({id:Cr,name:o.z.string().trim().min(1).max(160),projectId:Cr.optional(),source:Es,sourceSnapshot:o.z.record(o.z.string(),o.z.unknown()).default({}),modelSelection:qr,nodeId:Cr,runtimeId:Cr,imageSelection:Lr.optional(),environmentSource:Dr.optional(),environmentTemplateOrigin:Vr.optional(),imageSnapshot:md.optional(),imageProvisioning:ud.optional(),stateRevision:o.z.number().int().min(0).default(0),processIncarnationId:o.z.string().trim().min(1).max(120).optional(),status:o.z.enum(["created","provisioning","starting","registering","registered","running","stopping","stopped","deleting","failed","unhealthy"]).default("created"),health:o.z.enum(["unknown","ok","degraded","failed"]).default("unknown"),connectionStatus:o.z.enum(["unknown","online","offline","endpoint-unreachable"]).default("unknown"),agentStatus:o.z.enum(["unknown","online","offline"]).default("unknown"),targetStatus:o.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),uiAccessStatus:o.z.enum(["unknown","reachable","endpoint-unreachable"]).default("unknown"),controlMode:o.z.enum(["standalone","controlled"]).default("controlled"),protocolVersion:pr.optional(),instanceVersion:o.z.string().trim().max(80).optional(),build:gs.optional(),runtimeVersion:fs.optional(),ready:o.z.boolean().default(!1),capabilities:Ar.default(Ir),appInventory:Qr.optional(),config:o.z.object({autoImportAgentConfigs:o.z.boolean().default(!0),codexConfigEnabled:o.z.boolean().default(!0),codexHomeMode:o.z.enum(["default","taskhandoff"]).default("taskhandoff"),defaultCodexPermissionMode:he.default("ask"),codexSettings:fr.optional(),aiSessionHistoryLimit:o.z.number().int().min(1).max(500).default(50),aiSessionAttachmentRetentionDays:o.z.number().int().min(0).max(365).default(30),aiSessionMaxFileAttachmentBytes:o.z.number().int().positive().max($).default(O)}).strict().default({autoImportAgentConfigs:!0,codexConfigEnabled:!0,codexHomeMode:"taskhandoff",defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:O}),workspace:Ld.default({status:"unknown"}),target:_d.default({strategy:"direct-port",status:"unknown"}),access:qd,apps:o.z.object({runningCount:o.z.number().int().min(0).default(0),problemCount:o.z.number().int().min(0).default(0),updatedAt:kr.optional(),revision:o.z.number().int().min(0).optional()}).strict().default({runningCount:0,problemCount:0}),aiSessions:Et.default(()=>({runningCount:0,waitingCount:0,staleCount:0,sessions:[],updatedAt:(new Date).toISOString()})),triggers:o.z.object({enabledCount:o.z.number().int().min(0).default(0),runningCount:o.z.number().int().min(0).default(0),errorCount:o.z.number().int().min(0).default(0),configs:o.z.array(o.z.object({configHash:o.z.string().trim().min(1),config:aa,deployments:o.z.array(sa).default([]),runtime:o.z.array(da).default([])}).strict()).default([]),recentRuns:o.z.array(ca).default([])}).strict().optional(),runtime:o.z.object({kind:o.z.string().trim().max(80).optional(),containerName:o.z.string().trim().max(240).optional(),containerId:o.z.string().trim().max(240).optional(),workspacePath:o.z.string().trim().max(4096).optional(),pid:o.z.number().int().positive().optional(),port:o.z.number().int().positive().max(65535).optional(),labels:o.z.record(o.z.string(),o.z.string()).default({})}).strict().default({labels:{}}),registrationToken:o.z.string().trim().min(1).max(240).optional(),lastHeartbeatAt:kr.optional(),createdAt:kr,updatedAt:kr}).strict(),Md=o.z.object({autoImportAgentConfigs:o.z.boolean().optional(),codexConfigEnabled:o.z.boolean().optional(),codexHomeMode:o.z.enum(["default","taskhandoff"]).optional(),defaultCodexPermissionMode:he.optional(),codexSettings:fr.optional(),aiSessionHistoryLimit:o.z.number().int().min(1).max(500).optional(),aiSessionAttachmentRetentionDays:o.z.number().int().min(0).max(365).optional(),aiSessionMaxFileAttachmentBytes:o.z.number().int().positive().max($).optional()}).strict(),Bd=o.z.object({id:Dd.shape.id.optional(),name:Dd.shape.name.optional(),projectId:Dd.shape.projectId,source:Es.optional(),sourceSnapshot:o.z.record(o.z.string(),o.z.unknown()).optional(),nodeId:Dd.shape.nodeId.optional(),runtimeId:Dd.shape.runtimeId.optional(),environmentSource:Dr.optional(),imageSelection:Dd.shape.imageSelection,config:Md.optional(),modelSelection:Dd.shape.modelSelection.optional(),gitCredentialRetention:Da.optional(),start:o.z.boolean().default(!1)}).strict().superRefine((e,t)=>{e.environmentSource&&e.imageSelection&&t.addIssue({code:"custom",path:["environmentSource"],message:"environmentSource and imageSelection are mutually exclusive."}),e.gitCredentialRetention&&"local-folder"===e.source?.type&&t.addIssue({code:"custom",path:["gitCredentialRetention"],message:"Git credential retention requires a Git source."})}),Hd=o.z.object({status:o.z.enum(["not-requested","started","failed"]),error:o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2048)}).strict().optional()}).strict(),Fd=o.z.object({...Dd.omit({registrationToken:!0}).shape,startOutcome:Hd}).strict(),Vd=o.z.union([Dd.transform(e=>({instance:e,gitWorkspaceProvisioningOperationId:void 0})),o.z.object({instance:Dd,gitWorkspaceProvisioningOperationId:Cr.optional()}).strict()]);function Gd(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=new Set(Object.keys(Dd.shape)),o={};for(const[e,t]of Object.entries(n))i.has(e)&&(o[e]=t);if(n.capabilities&&"object"==typeof n.capabilities&&!Array.isArray(n.capabilities)){const e={...n.capabilities};Object.prototype.hasOwnProperty.call(e,"apps")&&delete e.apps,o.capabilities=Sr(e)}else o.capabilities=Sr(void 0);o.appInventory=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t=e;Object.keys(t).some(e=>!["observedAt","items","issues"].includes(e));const n={observedAt:t.observedAt,items:Array.isArray(t.items)?t.items.map(e=>{e&&"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).some(e=>!["id","name","kind","source","availability","capabilities","diagnosticCode"].includes(e));const t=Kd(e,["id","name","kind","source","availability","diagnosticCode"]);return!t||"object"!=typeof t||Array.isArray(t)?t:{...t,capabilities:Kd(e.capabilities,["automation","supportsCwdSelection","supportsProfiles"])}}):t.items,issues:Array.isArray(t.issues)?t.issues.map(e=>Kd(e,["code","message"])):t.issues},i=Qr.safeParse(n);return i.success?i.data:void 0}(n.appInventory,"string"==typeof n.id&&n.id),o.source=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,n=t.type,i=Es.options.find(e=>e.shape.type.value===n);if(!i)return e;const o="local-folder"===n?["type","localFolderId","path","ownerNodeId"]:"git-template"===n?["type","url","templateId","ref","auth","clone"]:["type","repositoryId","url","provider","ref","auth","clone"],a=Kd(t,o);if("local-folder"!==n){const e=function(e){const t=e&&"object"==typeof e&&!Array.isArray(e)?e:void 0,n=ks.safeParse(Kd(t,["type","name","commit"]));if(n.success)return n.data;const i="string"==typeof t?.commit?t.commit.trim():"",o="string"==typeof t?.name?t.name.trim():"",a=i?ks.safeParse({type:"commit",commit:i}):o?ks.safeParse({type:"tag"===t?.type?"tag":"branch",name:o}):ks.safeParse({type:"branch",name:"main"});return a.success?a.data:void 0}(t.ref),n=Yd(js,Kd(t.auth,["type","secretId"])),i=Yd(Rs,Kd(t.clone,["depth","submodules","lfs","subdirectory"]));e?a.ref=e:delete a.ref,n?a.auth=n:delete a.auth,i?a.clone=i:delete a.clone}const r=Yd(i,a);return r?(Object.keys(t).some(e=>!o.includes(e)),r):a}(n.source,"string"==typeof n.id&&n.id),o.sourceSnapshot=n.sourceSnapshot&&"object"==typeof n.sourceSnapshot&&!Array.isArray(n.sourceSnapshot)?n.sourceSnapshot:{},o.build=Yd(gs,n.build,0,0,"string"==typeof n.id&&n.id),o.aiSessions=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t=e,n=Array.isArray(t.sessions)?t.sessions.flatMap((e,t)=>{const n=Yd(Tt,e);return n?[n]:[]}):[],i={runningCount:"number"==typeof t.runningCount&&Number.isInteger(t.runningCount)&&t.runningCount>=0?t.runningCount:0,waitingCount:"number"==typeof t.waitingCount&&Number.isInteger(t.waitingCount)&&t.waitingCount>=0?t.waitingCount:0,staleCount:"number"==typeof t.staleCount&&Number.isInteger(t.staleCount)&&t.staleCount>=0?t.staleCount:0,sessions:n,updatedAt:kr.safeParse(t.updatedAt).success?t.updatedAt:(new Date).toISOString()};return Object.keys(t).some(e=>!["runningCount","waitingCount","staleCount","sessions","updatedAt"].includes(e)),Et.parse(i)}(n.aiSessions,"string"==typeof n.id&&n.id),o.triggers=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t=e;Object.keys(t).some(e=>!["enabledCount","runningCount","errorCount","configs","recentRuns"].includes(e));const n=(e,t,n)=>Array.isArray(e)?e.flatMap((e,n)=>{const i=Yd(t,e);return i?[i]:[]}):[],i=Array.isArray(t.configs)?t.configs.flatMap((e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e))return[];const i=e;Object.keys(i).some(e=>!["configHash","config","deployments","runtime"].includes(e));const o=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t=e,n=Kd(t,["configHash","name","description","createdAt","updatedAt"]);if(t.source&&"object"==typeof t.source&&!Array.isArray(t.source)){const e=t.source,i="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"];n.source=Kd(e,i)}return n.action=Kd(t.action,["promptTemplate"]),n.policy=Kd(t.policy,["cooldownMs","maxConcurrentRuns","whenBusy"]),Yd(aa,n)}(i.config);return"string"==typeof i.configHash&&o?[{configHash:i.configHash,config:o,deployments:n(i.deployments,sa),runtime:n(i.runtime,da)}]:[]}):[];return{enabledCount:"number"==typeof t.enabledCount&&Number.isInteger(t.enabledCount)&&t.enabledCount>=0?t.enabledCount:0,runningCount:"number"==typeof t.runningCount&&Number.isInteger(t.runningCount)&&t.runningCount>=0?t.runningCount:0,errorCount:"number"==typeof t.errorCount&&Number.isInteger(t.errorCount)&&t.errorCount>=0?t.errorCount:0,configs:i,recentRuns:n(t.recentRuns,ca)}}(n.triggers,"string"==typeof n.id&&n.id),o.apps=Yd(Dd.shape.apps.unwrap(),Kd(n.apps,["runningCount","problemCount","updatedAt","revision"]),0,0,"string"==typeof n.id&&n.id)||{runningCount:0,problemCount:0},o.config=Yd(Dd.shape.config.unwrap(),Kd(n.config,["autoImportAgentConfigs","codexConfigEnabled","codexHomeMode","defaultCodexPermissionMode","codexSettings","aiSessionHistoryLimit","aiSessionAttachmentRetentionDays","aiSessionMaxFileAttachmentBytes"]),0,0,"string"==typeof n.id&&n.id)||{autoImportAgentConfigs:!0,codexConfigEnabled:!0,codexHomeMode:"taskhandoff",defaultCodexPermissionMode:"ask",aiSessionHistoryLimit:50,aiSessionAttachmentRetentionDays:30,aiSessionMaxFileAttachmentBytes:O},o.modelSelection=Yd(qr.unwrap(),Kd(n.modelSelection,["modelEntityIds","codexModelHash","claudeModelHash","opencodeModelHash"]),0,0,"string"==typeof n.id&&n.id)||{},o.imageSnapshot=function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return e;const n=e,i=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return e;const t=e,n=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(t))n.has(e);"string"==typeof t.id&&t.id;const i="string"==typeof t.image?t.image:void 0;Object.prototype.hasOwnProperty.call(t,"registry");let o,a="string"==typeof t.reference?t.reference:i;if(a)try{a=$r(a)}catch{if(!a.includes("@")&&a.lastIndexOf(":")<=a.lastIndexOf("/"))try{a=$r(`${a}:latest`)}catch{}}try{o=a?Nr(a):void 0}catch{}return{id:t.id,origin:"custom",name:t.name,description:t.description,localizedDescriptions:t.localizedDescriptions,cover:Kd(t.cover,["kind","key","url","mediaType","digest"]),reference:o?.reference??a,repository:o?.repository??t.repository,tag:o?.tag??t.tag,pullPolicy:t.pullPolicy??"if-not-present",capabilities:t.capabilities,optionalApps:t.optionalApps,defaultEnv:t.defaultEnv,labels:t.labels,createdAt:t.createdAt,updatedAt:t.updatedAt}}(n),{reference:o,...a}=i,r=n.requestedReference??o;let s;try{s="string"==typeof r?Nr(r):void 0}catch{}const d={img_default:"market_taskhandoff_browser",img_codex:"market_taskhandoff_codex",img_ai:"market_taskhandoff_ai"},c="string"==typeof n.id?n.id:"string"==typeof t?t:void 0,l="market"===n.origin||c&&d[c]?"market":"custom";return void 0!==n.image||n.reference,{...a,id:c&&d[c]?d[c]:c,origin:l,repository:s?.repository??n.repository,tag:s?.tag??n.tag,requestedReference:s?.reference??r,resolvedDigest:n.resolvedDigest,resolvedReference:n.resolvedReference,downloadSizeBytes:n.downloadSizeBytes,market:"market"===l?Kd(n.market,["catalogId","catalogRevision","publisher","version"])??{catalogId:"task_handoff_embedded",catalogRevision:"legacy",publisher:"task-handoff"}:void 0}}(n.imageSnapshot,n.imageId,0,"string"==typeof n.id&&n.id);const a="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,r=Kd(n.imageSelection,["imageId","tag"]);o.imageSelection=r||(a?{imageId:a,tag:o.imageSnapshot?.tag}:void 0),o.imageProvisioning=Yd(ud,Kd(n.imageProvisioning,["phase","requestedReference","generation","error","startedAt","updatedAt"]),0,0,"string"==typeof n.id&&n.id),o.runtimeVersion=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t=e,n=e=>{if("string"!=typeof e)return;const t=e.trim();return t&&t.length<=80?t:void 0},i=n(t.desiredVersion);if(!i)return;const o=new Set(fs.shape.phase.options),a="string"==typeof t.phase?t.phase:"pending",r=o.has(a)?a:{idle:"pending",queued:"pending",checking:"pending",downloading:"installing",updating:"installing",completed:"matched",succeeded:"matched",ready:"matched",error:"failed"}[a]||"pending";let s;if(t.error&&"object"==typeof t.error&&!Array.isArray(t.error)){const e=t.error,i="string"==typeof e.message?e.message.trim().slice(0,4096):"";if(i){const t=new Set(ys.shape.code.options),o="string"==typeof e.code&&t.has(e.code)?e.code:"INSTANCE_RUNTIME_INSTALL_FAILED";e.code;const a=n(e.expectedVersion),r=n(e.actualVersion);s={code:o,message:i,...a?{expectedVersion:a}:{},...r?{actualVersion:r}:{},retryable:!0===e.retryable}}}"string"==typeof t.error&&t.error.trim()&&(s={code:"INSTANCE_RUNTIME_INSTALL_FAILED",message:t.error.trim().slice(0,4096),expectedVersion:i,...n(t.actualVersion)?{actualVersion:n(t.actualVersion)}:{},retryable:!1});const d=n(t.actualVersion),c=kr.safeParse(t.lastAttemptAt),l=kr.safeParse(t.matchedAt);return void 0!==t.lastAttemptAt&&c.success,void 0!==t.matchedAt&&l.success,{desiredVersion:i,...d?{actualVersion:d}:{},phase:r,attempt:"number"==typeof t.attempt&&Number.isInteger(t.attempt)&&t.attempt>=0?t.attempt:0,...c.success?{lastAttemptAt:c.data}:{},...l.success?{matchedAt:l.data}:{},...s?{error:s}:{}}}(n.runtimeVersion,"string"==typeof n.id&&n.id),o.workspace=Yd(Ld,n.workspace,0,0,"string"==typeof n.id&&n.id)||{status:"unknown"},o.environmentSource=Yd(Dr,n.environmentSource,0,0,"string"==typeof n.id&&n.id),o.environmentTemplateOrigin=Yd(Vr,n.environmentTemplateOrigin,0,0,"string"==typeof n.id&&n.id),o.runtime=Yd(Dd.shape.runtime.unwrap(),n.runtime,0,0,"string"==typeof n.id&&n.id)||{labels:{}},o.target=Yd(_d,Kd(n.target??n.endpoints,["strategy","web","api","vnc","tty","logs","status"]),0,0,"string"==typeof n.id&&n.id)||{strategy:"direct-port",status:"unknown"},o.access=Yd(qd,Kd(n.access,["strategy","web","api","ws","status"]),0,0,"string"==typeof n.id&&n.id)||{strategy:"control-plane-proxy",status:"unknown"};for(const[e,t]of Object.entries(Dd.shape))Object.prototype.hasOwnProperty.call(o,e)&&!t.safeParse(o[e]).success&&t.safeParse(void 0).success&&delete o[e];return o}function Yd(e,t,n,i,o){if(!t||"object"!=typeof t||Array.isArray(t))return;let a=structuredClone(t);for(let t=0;t<20;t+=1){const t=e.safeParse(a);if(t.success)return t.data;let n=!1;for(const e of t.error.issues){if("unrecognized_keys"!==e.code)continue;const t=Wd(a,e.path);if(t&&"object"==typeof t&&!Array.isArray(t))for(const i of e.keys)Object.prototype.hasOwnProperty.call(t,i)&&(delete t[i],n=!0)}if(!n){const n=structuredClone(a);let i=!1;for(const e of t.error.issues){if(!e.path.length||"string"!=typeof e.path.at(-1))continue;const t=Wd(n,e.path.slice(0,-1)),o=e.path.at(-1);t&&"object"==typeof t&&!Array.isArray(t)&&Object.prototype.hasOwnProperty.call(t,o)&&(delete t[o],i=!0)}if(i){const t=e.safeParse(n);if(t.success)return t.data}break}}}function Wd(e,t){let n=e;for(const e of t){if(!n||"object"!=typeof n)return;n=n[e]}return n}function Kd(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]]))}o.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:Gd(t.instance),..."string"==typeof t.gitWorkspaceProvisioningOperationId?{gitWorkspaceProvisioningOperationId:t.gitWorkspaceProvisioningOperationId}:{}}:Gd(t)},Vd),o.z.object({instanceId:Dd.shape.id,revision:o.z.number().int().min(0),updatedAt:kr,status:Dd.shape.status.unwrap(),health:Dd.shape.health.unwrap(),connectionStatus:Dd.shape.connectionStatus.unwrap(),accessStatus:o.z.enum(["reachable","endpoint-unreachable"]),imageProvisioning:ud.optional(),workspace:Ld,runtime:Dd.shape.runtime.unwrap(),runtimeVersion:fs.optional(),ready:o.z.boolean(),lastHeartbeatAt:kr.optional()}).strict(),o.z.object({instanceId:Cr.optional(),projectId:Cr.optional(),source:Es.optional(),nodeId:Cr.optional(),runtimeId:Cr.optional(),imageSelection:Lr.optional(),instanceVersion:o.z.string().trim().max(80).optional(),protocolVersion:pr,build:gs.optional(),controlMode:o.z.enum(["standalone","controlled"]).default("controlled"),capabilities:Ar.default(Ir),appInventory:Qr.optional(),target:Ud.optional(),workspace:Ld.default({status:"unknown"}),registrationToken:o.z.string().trim().max(240).optional(),processIncarnationId:o.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{ur.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol register payload requires appInventory."})}),o.z.object({status:Dd.shape.status.optional(),health:Dd.shape.health.optional(),protocolVersion:pr,build:gs.optional(),capabilities:Dd.shape.capabilities.optional(),appInventory:Qr.optional(),apps:Dd.shape.apps.optional(),aiSessions:Dd.shape.aiSessions.optional(),triggers:Dd.shape.triggers.optional(),workspace:Ld.optional(),target:Ud.optional(),processIncarnationId:o.z.string().trim().min(1).max(120).optional()}).strict().superRefine((e,t)=>{ur.has(e.protocolVersion)&&!e.appInventory&&t.addIssue({code:"custom",path:["appInventory"],message:"Current protocol heartbeat payload requires appInventory."})});const Jd=o.z.enum(["web","telegram","wechat","dingding","lark"]),Zd=o.z.object({id:Cr,channel:Jd,name:o.z.string().trim().min(1).max(160),enabled:o.z.boolean().default(!1),token:o.z.string().trim().max(4096).optional(),defaultChatId:o.z.string().trim().max(240).optional(),allowedUserIds:o.z.array(o.z.string().trim().min(1).max(240)).default([]),pollIntervalMs:o.z.number().int().positive().max(6e4).default(3e3),settings:o.z.record(o.z.string(),o.z.unknown()).default({}),createdAt:kr,updatedAt:kr}).strict(),Qd=o.z.object({id:Cr,channel:Jd,bridgeId:Cr.optional(),chatSessionId:o.z.string().trim().min(1).max(240),userId:o.z.string().trim().max(240).optional(),activeProjectId:Cr.optional(),activeInstanceId:Cr.optional(),activeAiSessionId:o.z.string().trim().min(1).max(120).optional(),lastUsedAt:kr,createdAt:kr,updatedAt:kr}).strict();o.z.object({source:o.z.object({type:o.z.literal("chat-gateway").default("chat-gateway"),channel:Jd,bridgeId:Cr.optional(),chatSessionId:o.z.string().trim().min(1).max(240),userId:o.z.string().trim().max(240).optional()}).strict(),message:o.z.object({text:o.z.string().trim().max(2e4).default(""),attachments:o.z.array(ue).max(6).default([])}).strict().superRefine((e,t)=>{e.attachments.reduce((e,t)=>e+("inline"===t.source.type?t.size:0),0)>N&&t.addIssue({code:o.z.ZodIssueCode.custom,path:["attachments"],message:"Inline attachments must be 41943040 bytes or less in total."})}),target:o.z.object({instanceId:Cr,aiSessionId:o.z.string().trim().min(1).max(120)}).strict().optional()}).strict(),o.z.object({id:Cr,instanceId:Cr,projectId:Cr.optional(),aiSessionId:o.z.string().trim().min(1).max(120),providerSessionId:o.z.string().trim().max(240).optional(),result:o.z.string().default(""),timeoutMs:o.z.number().positive().optional(),source:o.z.string().trim().max(120).optional(),kind:o.z.enum(["task","approval"]).default("task"),status:o.z.enum(["pending","unreachable"]).default("pending"),error:o.z.string().trim().max(2048).optional(),lastSeenAt:kr}).strict();const Xd=o.z.string().refine(function(e){return 1===Array.from(e).length&&!/[\p{L}\p{N}\s]/u.test(e)&&"/"!==e&&"\\"!==e},"Mention trigger must be one printable non-alphanumeric character other than / or \\."),ec=o.z.string().refine(function(e){return 1===Array.from(e).length&&!/[\p{L}\p{N}\s]/u.test(e)&&"\\"!==e},"Command trigger must be one printable non-alphanumeric character other than \\."),tc=o.z.object({publicBaseUrl:o.z.string().trim().max(2048).optional(),updateChannel:zs.default("stable"),mentionTrigger:Xd.default("@"),commandTrigger:ec.default("/"),diagnosticLogs:o.z.boolean().default(!1)}).strict().refine(e=>e.mentionTrigger!==e.commandTrigger,{path:["commandTrigger"],message:"Command and mention triggers must be different."}),nc=o.z.object({publicBaseUrl:o.z.string().trim().max(2048).optional(),updateChannel:zs.optional(),mentionTrigger:Xd.optional(),commandTrigger:ec.optional(),diagnosticLogs:o.z.boolean().optional()}).strict(),ic=o.z.object({id:Ls.shape.id.optional(),name:Ls.shape.name,source:Es,defaultImageSelection:Ls.shape.defaultImageSelection,defaultNodeId:Ls.shape.defaultNodeId,workspacePolicy:Ps.optional(),labels:Ls.shape.labels.optional()}),oc={defaultRuntimeId:Id.shape.id.optional()};ic.extend(oc).strict().transform(({defaultRuntimeId:e,...t})=>({...t,source:Es.parse(t.source)})),ic.omit({id:!0}).partial().extend(oc).strict().transform(({defaultRuntimeId:e,...t})=>({...t,...t.source?{source:Es.parse(t.source)}:{}})),o.z.object({id:dd.shape.id.optional(),name:dd.shape.name,description:dd.shape.description,cover:dd.shape.cover,reference:dd.shape.reference,pullPolicy:dd.shape.pullPolicy.optional(),capabilities:o.z.array(o.z.string().trim().min(1).max(80)).optional(),optionalApps:o.z.array(o.z.string().trim().min(1).max(120)).optional(),defaultEnv:dd.shape.defaultEnv.optional(),labels:dd.shape.labels.optional()}).strict().omit({id:!0}).partial().strict();const ac=o.z.object({name:Ds.shape.name,endpoint:Ds.shape.endpoint,key:Ds.shape.key,model:Ds.shape.model,modelNames:Ds.shape.modelNames.optional(),mappings:Us.optional(),protocols:Ds.shape.protocols.optional(),app:Ds.shape.app,enabled:Ds.shape.enabled.optional(),order:Ds.shape.order.optional(),labels:Ds.shape.labels.optional()}).strict();ac.omit({key:!0}).extend({key:Ds.shape.key.optional()}).strict(),ac.partial().strict(),o.z.object({endpoint:Ds.shape.endpoint,key:Ds.shape.key.optional(),existingModelId:Ds.shape.id.optional()}).strict().extend({model:Ds.shape.model,app:Ds.shape.app.optional(),protocol:o.z.enum(["openai-responses","openai-chat-completions","anthropic-messages"]).optional()}).strict().refine(e=>Boolean(e.protocol||e.app),{message:"A model protocol is required.",path:["protocol"]});const rc=o.z.object({mode:o.z.enum(["local-static-key","paired-hmac","proxy-binding"]).default("local-static-key"),keyId:fd.shape.id.optional(),secret:o.z.string().trim().max(4096).optional(),pairedAt:fd.shape.createdAt.optional(),pairing:o.z.object({status:o.z.enum(["pending","paired","expired"]).default("pending"),joinToken:o.z.string().trim().max(4096).optional(),expiresAt:fd.shape.createdAt.optional()}).strict().optional()}).strict();o.z.object({id:fd.shape.id.optional(),name:fd.shape.name,connectionMode:fd.shape.connectionMode.optional(),connectionPath:fd.shape.connectionPath.optional(),connectionEnabled:fd.shape.connectionEnabled.optional(),auth:rc.optional(),joinToken:o.z.string().trim().min(1).max(4096).optional(),endpoint:fd.shape.endpoint,controlEndpoint:fd.shape.controlEndpoint,containerEndpoint:fd.shape.containerEndpoint,publicWebBase:fd.shape.publicWebBase,status:o.z.enum(["unknown","online","offline","degraded"]).optional(),health:o.z.enum(["unknown","ok","degraded","failed"]).optional(),capabilities:fd.shape.capabilities.optional(),labels:fd.shape.labels.optional(),lastSeenAt:fd.shape.lastSeenAt}).strict(),o.z.object({name:fd.shape.name.optional(),connectionMode:fd.shape.connectionMode.unwrap().optional(),connectionPath:fd.shape.connectionPath.unwrap().optional(),connectionEnabled:fd.shape.connectionEnabled.unwrap().optional(),auth:rc.optional(),endpoint:fd.shape.endpoint,controlEndpoint:fd.shape.controlEndpoint,containerEndpoint:fd.shape.containerEndpoint,publicWebBase:fd.shape.publicWebBase,status:fd.shape.status.unwrap().optional(),health:fd.shape.health.unwrap().optional(),capabilities:fd.shape.capabilities.unwrap().optional(),labels:fd.shape.labels.unwrap().optional(),lastSeenAt:fd.shape.lastSeenAt}).strict(),o.z.object({controlPlaneUrl:o.z.string().trim().url().max(2048),joinToken:o.z.string().trim().min(1).max(4096),controlPlaneName:o.z.string().trim().min(1).max(160).optional(),activate:o.z.boolean().optional()}).strict(),o.z.object({nodeName:o.z.string().trim().min(1).max(160).optional(),expiresInMs:o.z.number().int().positive().max(36e5).optional()}).strict();const sc=e=>o.z.object({data:e}).passthrough(),dc=o.z.object({data:ea,meta:Wo.optional()}).passthrough(),cc=o.z.object({config:o.z.object({defaultCodexPermissionMode:he}).passthrough()}).passthrough(),lc=o.z.object({source:o.z.object({type:o.z.string().trim().min(1).max(80),localFolderId:o.z.string().trim().min(1).max(120).optional(),path:o.z.string().trim().min(1).max(4096).optional()}).passthrough()}).passthrough(),mc=o.z.object({id:o.z.string().trim().min(1).max(160),name:o.z.string().trim().min(1).max(160)}),uc=o.z.object({id:o.z.string().trim().min(1).max(160),capabilities:o.z.record(o.z.string(),o.z.unknown()).default({})}).passthrough(),pc=o.z.object({id:o.z.string().trim().min(1).max(120),model:o.z.object({id:o.z.string().trim().min(1).max(120),name:o.z.string().trim().min(1).max(160),model:o.z.string().trim().min(1).max(240),modelNames:o.z.array(o.z.object({name:o.z.string(),upstreamName:o.z.string().optional(),order:o.z.number().int()}).strip()).default([]),protocols:o.z.array(o.z.string()).default([]),app:o.z.string().optional(),enabled:o.z.boolean(),order:o.z.number().int()}).passthrough(),locations:o.z.array(o.z.object({type:o.z.enum(["control-plane","node"]),nodeId:o.z.string().optional(),enabled:o.z.boolean()}).passthrough())}).passthrough(),gc=o.z.object({models:o.z.array(pc)}).passthrough(),zc=o.z.object({id:o.z.string().trim().min(1).max(160),status:o.z.string().trim().min(1).max(80)}).strip(),hc=o.z.object({id:o.z.string().trim().min(1).max(120),nodeId:o.z.string().trim().min(1).max(120),name:o.z.string().trim().min(1).max(160),path:o.z.string().trim().min(1).max(4096),labels:o.z.record(o.z.string(),o.z.string()),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).passthrough();function yc(e){const t=async(t,n,i)=>(await e.request(t,sc(n),{signal:i})).data;return{nodes:e=>t("/api/nodes?projection=directory",Jo,e),node:(e,n)=>t(`/api/nodes/${encodeURIComponent(e)}`,uc,n),instanceBoard:e=>t("/api/instance-board?projection=directory",ea,e),instanceDirectory:t=>e.request("/api/instance-board?projection=directory&progressive=true",dc,{signal:t}),models:e=>t("/api/models",gc,e),instanceWorkspaceSource:async(e,n)=>(await t(`/api/controlled-instances/${encodeURIComponent(e)}`,lc,n)).source,updateInstanceName:async(t,n)=>(await e.request(`/api/controlled-instances/${encodeURIComponent(t)}`,sc(mc),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({name:n})})).data,updateNodeName:async(t,n)=>(await e.request(`/api/nodes/${encodeURIComponent(t)}`,sc(mc),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({name:n})})).data,updateInstanceDefaultPermissionMode:async(t,n)=>(await e.request(`/api/controlled-instances/${encodeURIComponent(t)}`,sc(cc),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({config:{defaultCodexPermissionMode:n}})})).data.config.defaultCodexPermissionMode,createInstance:async t=>(await e.request("/api/controlled-instances",sc(Fd),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)})).data,async deleteInstance(t,n){const i=Yr.parse(n);return(await e.request(`/api/controlled-instances/${encodeURIComponent(t)}`,sc(Kr),{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify(i)})).data},nodeLocalFolders:(e,n)=>t(`/api/nodes/${encodeURIComponent(e)}/local-folders`,o.z.array(hc),n),instanceAction(t,n){const i=Bo.parse(n),o="retry-image"===i?"image-provisioning/retry":i;return e.request(`/api/controlled-instances/${encodeURIComponent(t)}/${o}`,sc(zc),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({})}).then(e=>e.data)}}}const fc=aa.extend({id:aa.shape.configHash}).strip(),Ic=o.z.object({config:aa,deployment:sa,runtime:da.optional()}).strip(),bc=o.z.object({previousConfigHash:aa.shape.configHash.optional(),trigger:fc.optional(),configHash:aa.shape.configHash.optional(),deletedTemplate:o.z.boolean().optional(),results:o.z.array(o.z.unknown()).optional(),partialFailures:o.z.array(ha).default([])}).strip(),wc=o.z.object({configHash:aa.shape.configHash,results:o.z.array(o.z.unknown()).default([])}).passthrough();function vc(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data;return{list:e=>t("/api/triggers",ga,{signal:e}),create:e=>t("/api/triggers",fc,$n("POST",za.parse(e))),update:(e,n)=>t(`/api/triggers/${encodeURIComponent(e)}`,bc,$n("PUT",za.parse(n))),remove:e=>t(`/api/triggers/${encodeURIComponent(e)}`,bc,$n("DELETE")),apply:(e,n)=>t(`/api/triggers/${encodeURIComponent(e)}/apply`,wc,$n("POST",n)),bindSession:(e,n,i)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/${encodeURIComponent(n)}/triggers`,Ic,$n("POST",{configHash:i})),unbindSession:(e,n,i)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/${encodeURIComponent(n)}/triggers/${encodeURIComponent(i)}`,o.z.unknown(),$n("DELETE")),run:(e,n,i)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/triggers/${encodeURIComponent(n)}/run`,o.z.unknown(),$n("POST",i?{deploymentId:i}:{}))}}const xc=o.z.object({maxIdleAiSessions:o.z.number().int().min(1).max(50).default(5)}).strict(),Ac=o.z.string().trim().min(1).max(1024).refine(e=>!e.startsWith("/")&&!e.includes("\\")&&e.split("/").every(e=>e.length>0&&"."!==e&&".."!==e),"Story paths must be normalized relative POSIX paths."),Sc=o.z.string().regex(/^[a-f0-9]{64}$/),Cc=o.z.object({title:o.z.string().trim().min(1).max(240),storyPath:Ac,revision:Sc}).strict(),kc=o.z.object({agent:_.optional(),mode:ze.optional(),permissionMode:he.optional(),modelSelection:$e.optional(),reasoningEffort:Ne.optional(),cwdFolderId:o.z.string().trim().min(1).max(120).optional(),gitSelection:Ue.optional(),workspaceSelection:_e.optional()}).strict().refine(e=>!(e.gitSelection&&e.workspaceSelection),{message:"gitSelection and workspaceSelection are mutually exclusive.",path:["workspaceSelection"]}),jc=o.z.object({id:o.z.string().trim().min(1).max(120),title:o.z.string().trim().min(1).max(120),promptTemplate:o.z.string().trim().min(1).max(32e3),targetInstanceId:o.z.string().trim().min(1).max(120).optional(),sessionPreset:kc.optional()}).strict(),Rc=jc.omit({id:!0,targetInstanceId:!0}).extend({targetInstanceId:jc.shape.targetInstanceId.unwrap()}).strict(),Tc=Rc.extend({id:jc.shape.id.optional()}).strict(),Ec=o.z.object({targetInstanceId:o.z.string().trim().min(1).max(120),aiSessionId:o.z.string().trim().min(1).max(120)}).strict(),Pc=o.z.discriminatedUnion("scheduleKind",[o.z.object({scheduleKind:o.z.literal("interval"),intervalMs:o.z.number().int().min(6e4)}).strict(),o.z.object({scheduleKind:o.z.literal("daily"),timeOfDay:o.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:o.z.string().trim().min(1).max(120)}).strict(),o.z.object({scheduleKind:o.z.literal("weekly"),weekdays:o.z.array(o.z.number().int().min(0).max(6)).min(1).max(7).refine(e=>new Set(e).size===e.length,"Weekdays must be unique."),timeOfDay:o.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:o.z.string().trim().min(1).max(120)}).strict(),o.z.object({scheduleKind:o.z.literal("monthly"),dayOfMonth:o.z.number().int().min(-3).max(31).refine(e=>0!==e,"Day of month must not be zero."),timeOfDay:o.z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/),timezone:o.z.string().trim().min(1).max(120)}).strict()]),Oc=o.z.object({cooldownMs:o.z.number().int().min(0).max(864e5).optional(),maxConcurrentRuns:o.z.number().int().min(1).max(20).default(1),whenBusy:o.z.enum(["skip","queue"]).default("skip")}).strict(),$c=o.z.object({id:o.z.string().trim().min(1).max(120),storyId:T,actionId:jc.shape.id,schedule:Pc,enabled:o.z.boolean().default(!0),policy:Oc.default({maxConcurrentRuns:1,whenBusy:"skip"}),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),Nc=$c.omit({id:!0,createdAt:!0,updatedAt:!0}).strict(),_c=o.z.object({action:jc.extend({targetInstanceId:jc.shape.targetInstanceId.unwrap()}).strict(),automation:Nc.omit({storyId:!0,actionId:!0}).strict()}).strict(),Uc=o.z.object({actionId:$c.shape.actionId.optional(),schedule:Pc.optional(),enabled:o.z.boolean().optional(),policy:Oc.optional()}).strict().refine(e=>Object.keys(e).length>0,"At least one Automation field is required."),qc=o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2e3)}).strict(),Lc=o.z.enum(["queued","dispatching","running","completed","failed","skipped"]),Dc=o.z.object({id:o.z.string().trim().min(1).max(160),automationId:$c.shape.id,eventType:o.z.enum(["manual","schedule"]),status:Lc,scheduledFor:o.z.string().datetime(),targetInstanceId:o.z.string().trim().min(1).max(120),aiSessionId:o.z.string().trim().min(1).max(120).optional(),error:qc.optional(),queuedAt:o.z.string().datetime(),startedAt:o.z.string().datetime().optional(),completedAt:o.z.string().datetime().optional()}).strict(),Mc=o.z.enum(["disabled","blocked","scheduled","running","error"]),Bc=o.z.object({automation:$c,effectiveStatus:Mc,blockedReason:qc.optional(),nextRunAt:o.z.string().datetime().optional(),currentRuns:o.z.array(Dc).max(20).default([]),lastRun:Dc.optional()}).strict(),Hc=o.z.object({automations:o.z.array(Bc).default([])}).strict(),Fc=o.z.object({runs:o.z.array(Dc).max(120).default([])}).strict(),Vc=o.z.object({clientRequestId:o.z.string().trim().min(1).max(160)}).strict();o.z.object({storyId:T,automationId:$c.shape.id,change:o.z.enum(["created","updated","deleted","status","run"]),status:Bc.optional(),run:Dc.optional()}).strict();const Gc=o.z.object({id:T,ownerNodeId:o.z.string().trim().min(1).max(120),title:o.z.string().trim().min(1).max(240),description:o.z.string().trim().max(4e3).optional(),documents:o.z.array(Cc).max(500).default([]),actions:o.z.array(jc).max(50).default([]),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),archivedAt:o.z.string().datetime().optional()}).strict(),Yc=o.z.object({stories:o.z.array(Gc).default([])}).strict(),Wc=o.z.object({title:Gc.shape.title,description:Gc.shape.description,actions:o.z.array(Rc).max(50).optional(),maxIdleAiSessions:xc.shape.maxIdleAiSessions.optional()}).strict(),Kc=o.z.object({title:Gc.shape.title.optional(),description:Gc.shape.description.nullable().optional(),actions:o.z.array(Tc).max(50).optional(),maxIdleAiSessions:xc.shape.maxIdleAiSessions.optional()}).strict().refine(e=>Object.keys(e).length>0,"At least one Story field is required."),Jc=o.z.object({title:Cc.shape.title.optional(),storyPath:Ac.optional()}).strict().refine(e=>Object.keys(e).length>0,"At least one document field is required."),Zc=o.z.object({storyPaths:o.z.array(Ac).max(500)}).strict();o.z.object({storyPath:Ac,title:Cc.shape.title.optional(),expectedRevision:Sc.optional()}).strict(),o.z.object({documents:o.z.array(Cc).max(500)}).strict();const Qc=o.z.union([o.z.number(),o.z.string().regex(/^\d+$/).transform(Number)]);o.z.object({page:Qc.pipe(o.z.number().int().min(1).max(500)).default(1),pageSize:Qc.pipe(o.z.number().int().min(1).max(100)).default(20)}).strict();const Xc=o.z.object({title:Cc.shape.title,storyPath:Ac}).strict(),el=o.z.object({page:o.z.number().int().min(1).max(500),pageSize:o.z.number().int().min(1).max(100),totalItems:o.z.number().int().nonnegative(),totalPages:o.z.number().int().nonnegative(),hasMore:o.z.boolean()}).strict();o.z.object({storyCreatedAt:Gc.shape.createdAt,documents:o.z.array(Xc).max(100),pagination:el}).strict(),o.z.object({storyCreatedAt:Gc.shape.createdAt,documents:o.z.array(Xc.strip()).max(100),pagination:el.strip()}).strip();const tl=o.z.object({storyPath:Ac,revision:Sc,content:o.z.string(),size:o.z.number().int().nonnegative()}).strict();o.z.object({storyPaths:o.z.array(Ac).min(1).max(20),destinationPath:o.z.string().trim().min(1).max(4096)}).strict(),o.z.object({storyPath:Ac,title:Cc.shape.title.optional(),sourcePath:o.z.string().trim().min(1).max(4096),expectedRevision:Sc.optional()}).strict();const nl=o.z.object({storyPath:Ac,path:o.z.string().trim().min(1).max(4096).optional(),revision:Sc.optional(),error:o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2e3)}).strict().optional()}).strict();o.z.object({items:o.z.array(nl).min(1).max(20)}).strict(),o.z.object({storyId:T,nodeId:o.z.string().trim().min(1).max(120),change:o.z.enum(["created","updated","archived","restored","deleted","content.written","document.updated","document.reordered","document.deleted"]).optional(),storyPath:Ac.optional()}).strict();const il=2e3,ol=32e3,al=o.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),rl=al,sl=o.z.string().regex(/^[a-f0-9]{64}$/),dl=o.z.enum(["overlay-copy-on-write","worktree"]),cl=o.z.enum(["instance","container","local-runtime"]),ll=o.z.object({workspaceMaterializer:dl.default("overlay-copy-on-write"),processSandbox:cl.default("instance")}).strict(),ml=o.z.object({id:rl,revision:sl,name:o.z.string().trim().min(1).max(120),description:o.z.string().trim().max(il).default(""),appendedPrompt:o.z.string().max(ol).default(""),targetInstanceId:al,cwdFolderId:al,providerId:al,modelEntityId:al.optional(),modelName:o.z.string().trim().min(1).max(120).optional(),reasoningEffort:o.z.string().trim().min(1).max(120).optional(),permissionMode:o.z.string().trim().min(1).max(120).optional(),executionPolicy:ll,createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),ul={name:o.z.string().trim().min(1).max(120),description:o.z.string().trim().max(il).default(""),appendedPrompt:o.z.string().max(ol).default(""),targetInstanceId:al,cwdFolderId:al,providerId:al,modelEntityId:al.optional(),modelName:o.z.string().trim().min(1).max(120).optional(),reasoningEffort:o.z.string().trim().min(1).max(120).optional(),permissionMode:o.z.string().trim().min(1).max(120).optional(),executionPolicy:ll.optional()},pl=o.z.object(ul).strict(),gl=o.z.object({expectedRevision:sl,name:ul.name.optional(),description:o.z.string().trim().max(il).nullable().optional(),appendedPrompt:o.z.string().max(ol).nullable().optional(),targetInstanceId:ul.targetInstanceId.optional(),cwdFolderId:ul.cwdFolderId.optional(),providerId:ul.providerId.optional(),modelEntityId:al.nullable().optional(),modelName:o.z.string().trim().min(1).max(120).nullable().optional(),reasoningEffort:o.z.string().trim().min(1).max(120).nullable().optional(),permissionMode:o.z.string().trim().min(1).max(120).nullable().optional(),executionPolicy:ul.executionPolicy}).strict();o.z.object({agents:o.z.array(ml)}).strict();const zl=o.z.object({id:rl,deleted:o.z.literal(!0),deletedOrchestrationIds:o.z.array(o.z.string().trim().min(1).max(160)).default([])}).strict();o.z.object({agents:o.z.array(o.z.object({nodeId:al,agent:ml}).strict()),unavailableNodeIds:o.z.array(al).default([])}).strict();const hl=o.z.enum(["AGENT_DEFINITION_INVALID_INPUT","AGENT_DEFINITION_NOT_FOUND","AGENT_DEFINITION_REVISION_CONFLICT","AGENT_DEFINITION_TARGET_INSTANCE_UNKNOWN","AGENT_DEFINITION_FOLDER_UNKNOWN","AGENT_DEFINITION_PROVIDER_UNSUPPORTED","AGENT_DEFINITION_POLICY_UNSUPPORTED"]),yl=o.z.object({code:o.z.literal("AGENT_DEFINITION_REVISION_CONFLICT"),expectedRevision:sl,actualRevision:sl}).strict();o.z.union([yl,o.z.object({code:hl}).strict()]);const fl=o.z.object({agentId:rl,change:o.z.enum(["created","updated","deleted"]),revision:sl.optional(),definition:ml.optional()}).strict();o.z.object({nodeId:al,event:fl}).strict();const Il=ml.strip().extend({executionPolicy:ll.strip()});o.z.object({agents:o.z.array(Il)}).strip();const bl=o.z.object({agents:o.z.array(o.z.object({nodeId:al,agent:Il}).strip()),unavailableNodeIds:o.z.array(o.z.string().trim().min(1).max(120)).default([])}).strip(),wl=o.z.object({agentId:rl,change:o.z.enum(["created","updated","deleted"]),revision:sl.optional(),definition:Il.optional()}).strip();function vl(e){return Il.parse(e)}o.z.object({nodeId:al,event:wl}).strip();const xl=200,Al=o.z.string().trim().min(1).max(160).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Sl=Al,Cl=o.z.string().regex(/^[a-f0-9]{64}$/),kl=o.z.object({fromAgentId:rl,toAgentId:rl}).strict(),jl=o.z.object({id:Sl,revision:Cl,name:o.z.string().trim().min(1).max(120),agentIds:o.z.array(rl).min(1).max(50),edges:o.z.array(kl).max(xl),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime()}).strict(),Rl=o.z.object({name:o.z.string().trim().min(1).max(120),agentIds:o.z.array(rl).min(1).max(50),edges:o.z.array(kl).max(xl).default([])}).strict(),Tl=o.z.object({expectedRevision:Cl,name:o.z.string().trim().min(1).max(120).optional(),agentIds:o.z.array(rl).min(1).max(50).optional(),edges:o.z.array(kl).max(xl).optional()}).strict();o.z.object({orchestrations:o.z.array(jl)}).strict();const El=o.z.object({id:Sl,deleted:o.z.literal(!0)}).strict();o.z.object({orchestrations:o.z.array(o.z.object({nodeId:Al,orchestration:jl}).strict()),unavailableNodeIds:o.z.array(Al).default([])}).strict();const Pl=o.z.enum(["AGENT_ORCHESTRATION_NOT_FOUND","AGENT_ORCHESTRATION_REVISION_CONFLICT","AGENT_ORCHESTRATION_INVALID_GRAPH","AGENT_ORCHESTRATION_AGENT_UNKNOWN","AGENT_ORCHESTRATION_CYCLE","AGENT_ORCHESTRATION_DEFAULT_PROTECTED"]),Ol=o.z.object({code:o.z.literal("AGENT_ORCHESTRATION_CYCLE"),cycle:o.z.array(rl).min(2)}).strict(),$l=o.z.object({code:o.z.literal("AGENT_ORCHESTRATION_REVISION_CONFLICT"),expectedRevision:Cl,actualRevision:Cl}).strict();o.z.union([Ol,$l,o.z.object({code:Pl}).strict()]);const Nl=o.z.object({orchestrationId:Sl,change:o.z.enum(["created","updated","deleted"]),revision:Cl.optional(),orchestration:jl.optional()}).strict();o.z.object({nodeId:Al,event:Nl}).strict();const _l=jl.strip().extend({agentIds:o.z.array(rl).max(50).default([]),edges:o.z.array(kl).max(xl).default([])});o.z.object({orchestrations:o.z.array(_l)}).strip();const Ul=o.z.object({orchestrations:o.z.array(o.z.object({nodeId:o.z.string().trim().min(1).max(160),orchestration:_l}).strip()),unavailableNodeIds:o.z.array(o.z.string().trim().min(1).max(160)).default([])}).strip(),ql=o.z.object({orchestrationId:Sl,change:o.z.enum(["created","updated","deleted"]),revision:Cl.optional(),orchestration:_l.optional()}).strip();function Ll(e){return _l.parse(e)}o.z.object({nodeId:o.z.string().trim().min(1).max(160),event:ql}).strip();const Dl=o.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),Ml=Dl,Bl=Dl,Hl=o.z.number().int().nonnegative(),Fl=o.z.enum(["queued","preparing","running","finalizing","completed","failed","cancelled"]),Vl=o.z.object({kind:o.z.enum(["control-plane-user","standalone-operator"]),subjectId:Dl,authorizationRevision:o.z.number().int().nonnegative().optional()}).strict(),Gl=o.z.object({source:o.z.literal("story-session").optional(),initiatingInstanceId:Dl,initiatingAiSessionId:Dl,storyId:Dl,authorizationSubject:Vl.optional()}).strict(),Yl=o.z.object({source:o.z.literal("control-plane"),authorizationSubject:Vl.optional()}).strict(),Wl=o.z.union([Gl,Yl]),Kl=o.z.object({maxMembers:o.z.number().int().positive(),maxDepth:o.z.number().int().nonnegative(),maxConcurrency:o.z.number().int().positive()}).strict(),Jl=o.z.object({prompt:o.z.string().trim().min(1).max(128e3)}).strict(),Zl=o.z.object({agentRevision:sl,targetInstanceId:Dl,cwdFolderId:Dl,appendedPrompt:o.z.string().max(32e3),providerId:Dl,modelEntityId:Dl.optional(),modelName:o.z.string().trim().min(1).max(120).optional(),reasoningEffort:o.z.string().trim().min(1).max(120).optional(),permissionMode:o.z.string().trim().min(1).max(120).optional(),executionPolicy:ll}).strict(),Ql=o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(4e3),retryable:o.z.boolean().default(!1),details:o.z.record(o.z.string(),o.z.unknown()).optional()}).strict(),Xl=o.z.object({text:o.z.string().max(128e3),truncated:o.z.boolean().default(!1),source:o.z.literal("provider-final-message").default("provider-final-message")}).strict(),em=o.z.object({status:o.z.enum(["pending","delivered","failed"]),attempts:o.z.number().int().nonnegative(),updatedAt:o.z.string().datetime(),deliveredAt:o.z.string().datetime().optional(),error:Ql.optional()}).strict();o.z.object({runId:Ml,status:o.z.enum(["completed","failed","cancelled"]),result:o.z.object({text:o.z.string().max(32e3),truncated:o.z.boolean()}).strict().optional(),error:Ql.optional()}).strict().superRefine((e,t)=>{"completed"!==e.status||e.result||t.addIssue({code:o.z.ZodIssueCode.custom,message:"A completed Agent Run tool result requires result text."}),"completed"===e.status||e.error||t.addIssue({code:o.z.ZodIssueCode.custom,message:"A failed or cancelled Agent Run tool result requires an error."})});const tm=o.z.object({status:o.z.enum(["pending","completed","retrying","manual-intervention"]),attempts:o.z.number().int().nonnegative(),message:o.z.string().max(4e3).optional(),updatedAt:o.z.string().datetime()}).strict(),nm=o.z.object({runtimeId:Dl,state:o.z.enum(["preparing","active","retained","expiring","delete-retrying","expired","manual-intervention"]),usageBytes:o.z.number().int().nonnegative(),quotaBytes:o.z.number().int().positive(),expiresAt:o.z.string().datetime().optional()}).strict(),im=o.z.object({memberId:Bl,runId:Ml,agentId:rl,parentMemberId:Bl.optional(),instanceId:Dl,aiSessionId:Dl.optional(),role:o.z.enum(["root","callee"]),depth:o.z.number().int().nonnegative(),status:Fl,input:Jl.optional(),executionSnapshot:Zl,result:Xl.optional(),error:Ql.optional(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),completedAt:o.z.string().datetime().optional()}).strict(),om=o.z.object({runId:Ml,sequence:o.z.number().int().positive(),timestamp:o.z.string().datetime(),kind:o.z.string().trim().min(1).max(120),memberId:Bl.optional(),data:o.z.record(o.z.string(),o.z.unknown()).default({})}).strict(),am=o.z.object({runId:Ml,clientRequestId:Dl,revision:Hl,status:Fl,input:Jl.optional(),provenance:Wl,orchestrationId:Sl,rootMemberId:Bl,budget:Kl,result:Xl.optional(),resultDelivery:em.optional(),error:Ql.optional(),cleanup:tm.optional(),sharedSpace:nm.optional(),members:o.z.array(im).optional(),timeline:o.z.array(om).optional(),createdAt:o.z.string().datetime(),updatedAt:o.z.string().datetime(),completedAt:o.z.string().datetime().optional()}).strict(),rm=o.z.object({clientRequestId:Dl,orchestrationId:Sl,entryAgentId:rl.optional(),input:Jl,provenance:Wl,budget:Kl.optional()}).strict(),sm=o.z.object({clientRequestId:Dl,orchestrationId:Sl,entryAgentId:rl.optional(),input:Jl,budget:Kl.optional()}).strict(),dm=o.z.object({expectedRevision:Hl.optional()}).strict();o.z.object({runs:o.z.array(am)}).strict(),o.z.enum(["AGENT_RUN_NOT_FOUND","AGENT_RUN_MEMBER_NOT_FOUND","AGENT_RUN_IDEMPOTENCY_CONFLICT","AGENT_RUN_REVISION_CONFLICT","AGENT_RUN_INITIATING_INSTANCE_UNKNOWN","AGENT_RUN_ORCHESTRATION_UNKNOWN","AGENT_RUN_ENTRY_REQUIRED","AGENT_RUN_ENTRY_INVALID","AGENT_RUN_INVOCATION_FORBIDDEN","AGENT_RUN_EXECUTION_UNSUPPORTED","AGENT_RUN_ALREADY_TERMINAL"]);const cm=o.z.object({runId:Ml,revision:Hl,run:am}).strict(),lm=o.z.object({runId:Ml,memberId:Bl,revision:Hl,member:im}).strict();o.z.object({runs:o.z.array(o.z.object({nodeId:Dl,run:am}).strict()),unavailableNodeIds:o.z.array(Dl).default([])}).strict(),o.z.object({nodeId:Dl,event:o.z.union([cm,lm])}).strict();const mm=im.strip().extend({input:Jl.strip().optional(),executionSnapshot:Zl.strip(),result:Xl.strip().optional(),error:Ql.strip().optional()}),um=om.strip(),pm=am.strip().extend({orchestrationId:Sl.optional(),input:Jl.strip().optional(),provenance:o.z.union([Gl.strip().extend({authorizationSubject:Vl.strip().optional()}),Yl.strip().extend({authorizationSubject:Vl.strip().optional()})]),budget:Kl.strip(),result:Xl.strip().optional(),resultDelivery:em.strip().extend({error:Ql.strip().optional()}).optional(),error:Ql.strip().optional(),cleanup:tm.strip().optional(),sharedSpace:nm.strip().optional(),members:o.z.array(mm).optional(),timeline:o.z.array(um).optional()}).transform(e=>{const t=e.orchestrationId??(()=>{const t=(e.members??[]).find(t=>t.memberId===e.rootMemberId);if(!t)throw new Error("An Agent Run without an orchestration binding requires its root member to normalize.");return n=t.agentId,`default:${rl.parse(n)}`;var n})();return{...e,orchestrationId:t}}),gm=o.z.object({runId:Ml,revision:Hl,run:pm}).strip(),zm=o.z.object({runId:Ml,memberId:Bl,revision:Hl,member:mm}).strip();function hm(e){return pm.parse(e)}o.z.object({nodeId:Dl,event:o.z.union([gm,zm])}).strip();const ym=["agent_run"],fm=o.z.enum(ym),Im=o.z.object({agentId:rl,orchestrationId:Sl}).strict(),bm=o.z.object({enabledTools:o.z.array(fm).max(ym.length),allowedTargets:o.z.array(Im).max(50)}).strict(),wm=o.z.object({agentId:rl,orchestrationId:Sl.optional(),prompt:o.z.string().trim().min(1).max(128e3),budget:Kl.optional()}).strict();o.z.object({clientRequestId:o.z.string().trim().min(1).max(120).regex(/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/),input:wm}).strict(),o.z.object({enabledTools:o.z.array(o.z.string()).max(100).optional(),allowedTargets:o.z.array(Im).max(50).optional()}).strip(),o.z.enum(["content","actions","automations","aiSessions"]);const vm=o.z.object({content:o.z.boolean(),actions:o.z.boolean(),automations:o.z.boolean(),aiSessions:o.z.boolean()}).strict();vm.strip().partial();const xm=["story_list_content","story_get_content","story_set_content","story_list_actions","story_run_action","story_list_automations","story_create_automation","story_update_automation","story_delete_automation","story_run_automation","story_list_automation_runs","story_list_ai_sessions","story_get_ai_session","story_get_ai_session_turn"],Am=o.z.enum(xm),Sm=o.z.object({policy:vm,revision:o.z.string().regex(/^[a-f0-9]{64}$/)}).strict(),Cm=o.z.object({policy:vm}).strict();Sm.extend({storyId:T,enabledTools:o.z.array(Am).max(xm.length),agentInvocation:bm}).strict(),o.z.object({storyId:T,revision:Sm.shape.revision}).strict();const km=o.z.object({policy:vm.strip(),revision:Sm.shape.revision}).strip();function jm(e){return km.parse(e)}km.extend({storyId:T,enabledTools:o.z.array(o.z.string()).max(100),agentInvocation:o.z.unknown().optional()}).strip();const Rm=o.z.object({page:o.z.number().int().min(1).max(500).default(1),pageSize:o.z.number().int().min(1).max(100).default(20)}).strict(),Tm=o.z.object({totalItems:o.z.number().int().nonnegative(),nextPage:o.z.number().int().min(2).max(500).optional()}).strict();o.z.object({documents:o.z.array(o.z.object({title:Cc.shape.title,storyPath:Ac}).strict()).max(100),pagination:Tm}).strict(),o.z.object({items:o.z.array(o.z.object({storyPath:Ac,path:o.z.string().trim().min(1).max(4096).optional(),revision:Sc.optional(),error:o.z.object({code:o.z.string().trim().min(1).max(120),message:o.z.string().trim().min(1).max(2e3)}).strict().optional()}).strict()).min(1).max(20)}).strict(),o.z.object({title:Cc.shape.title,storyPath:Ac,revision:Sc,size:o.z.number().int().nonnegative()}).strict();const Em=o.z.enum(["STORY_ARCHIVED","STORY_ACTION_TARGET_REQUIRED","STORY_ACTION_TARGET_UNAVAILABLE"]);o.z.object({actions:o.z.array(o.z.object({id:jc.shape.id,title:jc.shape.title,promptPreview:o.z.string().max(500),promptTruncated:o.z.boolean(),executable:o.z.boolean(),unavailableReason:Em.optional()}).strict()).max(100),pagination:Tm}).strict();const Pm=o.z.object({actionId:jc.shape.id,clientRequestId:o.z.string().trim().min(1).max(160)}).strict();o.z.object({session:o.z.object({instanceId:o.z.string().trim().min(1).max(120),sessionId:o.z.string().trim().min(1).max(120)}).strict()}).strict(),o.z.object({actionId:jc.shape.id,schedule:Pc,enabled:o.z.boolean().default(!0),policy:Oc.default({maxConcurrentRuns:1,whenBusy:"skip"})}).strict(),o.z.object({automationId:o.z.string().trim().min(1).max(120),expectedUpdatedAt:o.z.string().datetime(),actionId:jc.shape.id.optional(),schedule:Pc.optional(),enabled:o.z.boolean().optional(),policy:Oc.optional()}).strict().refine(e=>Object.keys(e).some(e=>!["automationId","expectedUpdatedAt"].includes(e)),"At least one Automation field is required."),o.z.object({automationId:o.z.string().trim().min(1).max(120),expectedUpdatedAt:o.z.string().datetime()}).strict(),o.z.object({automationId:o.z.string().trim().min(1).max(120),clientRequestId:o.z.string().trim().min(1).max(160)}).strict(),o.z.object({automationId:o.z.string().trim().min(1).max(120),page:Rm.shape.page,pageSize:Rm.shape.pageSize}).strict(),o.z.object({deleted:o.z.boolean()}).strict();const Om=o.z.object({id:o.z.string().trim().min(1).max(160),eventType:o.z.enum(["manual","schedule"]),status:Lc,scheduledFor:o.z.string().datetime(),session:o.z.object({instanceId:o.z.string().trim().min(1).max(120),sessionId:o.z.string().trim().min(1).max(120)}).strict().optional(),error:qc.optional(),startedAt:o.z.string().datetime().optional(),completedAt:o.z.string().datetime().optional()}).strict(),$m=o.z.object({id:o.z.string().trim().min(1).max(120),actionId:jc.shape.id,schedule:Pc,enabled:o.z.boolean(),policy:Oc,updatedAt:o.z.string().datetime(),effectiveStatus:Mc,blockedReason:qc.optional(),nextRunAt:o.z.string().datetime().optional(),activeRunCount:o.z.number().int().nonnegative(),lastRun:Om.optional()}).strict();o.z.object({automations:o.z.array($m).max(100),pagination:Tm}).strict(),o.z.object({runs:o.z.array(Om).max(100),pagination:Tm}).strict();const Nm=o.z.object({instanceId:o.z.string().trim().min(1).max(120),sessionId:o.z.string().trim().min(1).max(120)}).strict(),_m=Nm.extend({title:o.z.string().trim().max(240).optional(),agent:o.z.string().trim().min(1).max(120),status:o.z.enum(["running","waiting","idle"]),updatedAt:o.z.string().datetime()}).strict();o.z.object({sessions:o.z.array(_m).max(100),pagination:Tm}).strict(),Nm.extend({page:Rm.shape.page,pageSize:o.z.number().int().min(1).max(50).default(10)}).strict(),o.z.object({detail:mt,turnIndex:pt}).strict();const Um=o.z.object({cwd:mt.shape.cwd,modelName:o.z.string().trim().min(1).max(240).optional(),reasoningEffort:mt.shape.reasoningEffort,error:mt.shape.error}).strict(),qm=ct.pick({id:!0,status:!0,phase:!0,updatedAt:!0,completedAt:!0}).strict(),Lm=ct.pick({id:!0,status:!0,phase:!0,contextCompactions:!0,startedAt:!0,updatedAt:!0,completedAt:!0}).strict();o.z.object({ref:Nm,session:Um,turns:o.z.array(qm).max(50),pagination:Tm}).strict(),Nm.extend({turnId:o.z.string().trim().min(1).max(240),page:Rm.shape.page,pageSize:o.z.number().int().min(1).max(50).default(20),maxTextChars:o.z.number().int().min(256).max(32e3).default(8e3)}).strict();const Dm=o.z.array(o.z.enum(["text","summary","input","output","paths"])).max(5).optional(),Mm=o.z.object({id:o.z.string().trim().min(1).max(240),truncatedFields:Dm}).strict(),Bm=Mm.extend({type:o.z.literal("user-message"),text:o.z.string().max(32e3),attachments:o.z.array(H).max(6).optional()}).strict(),Hm=Mm.extend({type:o.z.literal("ai-message"),text:o.z.string().max(32e3)}).strict(),Fm=Mm.extend({type:o.z.literal("activity"),activityKind:o.z.string().trim().min(1).max(120),title:o.z.string().trim().min(1).max(240),status:o.z.enum(["running","completed","failed","waiting"]).optional(),summary:o.z.string().max(32e3).optional(),input:o.z.string().max(32e3).optional(),output:o.z.string().max(32e3).optional(),paths:o.z.array(o.z.string().trim().min(1).max(4096)).max(100).optional(),exitCode:o.z.number().int().optional(),durationMs:o.z.number().int().nonnegative().optional()}).strict(),Vm=o.z.discriminatedUnion("type",[Bm,Hm,Fm]);function Gm(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data;return{list:(e,n)=>t("/api/stories"+(e?`?nodeId=${encodeURIComponent(e)}`:""),o.z.object({stories:Yc.shape.stories,unavailableNodeIds:o.z.array(o.z.string()).default([])}).strict(),{signal:n}),get:(e,n)=>t(`/api/stories/${encodeURIComponent(e)}?nodeId=${encodeURIComponent(n)}`,Gc),preview:(e,n,i,o)=>t(`/api/stories/${encodeURIComponent(e)}/content/preview?nodeId=${encodeURIComponent(n)}&storyPath=${encodeURIComponent(i)}`,tl,{signal:o}),create:(e,n)=>t("/api/stories",Gc,$n("POST",{nodeId:e,input:Wc.parse(n)})),update:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}`,Gc,$n("PATCH",{nodeId:n,input:Kc.parse(i)})),retentionSettings:(e,n)=>t(`/api/stories/${encodeURIComponent(e)}/settings?nodeId=${encodeURIComponent(n)}`,xc),async agentToolSettings(e,n){const i=await t(`/api/stories/${encodeURIComponent(e)}/settings/agent-tools?nodeId=${encodeURIComponent(n)}`,o.z.unknown());return Sm.parse(jm(i))},async updateAgentToolSettings(e,n,i){const a=Cm.parse({policy:i}),r=await t(`/api/stories/${encodeURIComponent(e)}/settings/agent-tools`,o.z.unknown(),$n("PUT",{nodeId:n,input:a}));return Sm.parse(jm(r))},runAction(e,n,i,o){const a=Pm.omit({actionId:!0}).parse({clientRequestId:o});return t(`/api/stories/${encodeURIComponent(e)}/actions/${encodeURIComponent(n)}/run`,Ec,$n("POST",{nodeId:i,input:a}))},archive:(e,n)=>t(`/api/stories/${encodeURIComponent(e)}/archive`,Gc,$n("POST",{nodeId:n})),restore:(e,n)=>t(`/api/stories/${encodeURIComponent(e)}/restore`,Gc,$n("POST",{nodeId:n})),remove:(e,n)=>t(`/api/stories/${encodeURIComponent(e)}?nodeId=${encodeURIComponent(n)}`,o.z.object({deleted:o.z.boolean()}).strict(),$n("DELETE")),listAutomations:(e,n)=>t(`/api/stories/${encodeURIComponent(e)}/automations?nodeId=${encodeURIComponent(n)}`,Hc),getAutomation:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}/automations/${encodeURIComponent(n)}?nodeId=${encodeURIComponent(i)}`,Bc),createAutomation:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}/automations`,Bc,$n("POST",{nodeId:n,input:Nc.parse(i)})),createAutomationWithAction:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}/automations/with-action`,Bc,$n("POST",{nodeId:n,input:_c.parse(i)})),updateAutomation:(e,n,i,o)=>t(`/api/stories/${encodeURIComponent(e)}/automations/${encodeURIComponent(n)}`,Bc,$n("PATCH",{nodeId:i,input:Uc.parse(o)})),removeAutomation:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}/automations/${encodeURIComponent(n)}?nodeId=${encodeURIComponent(i)}`,o.z.object({deleted:o.z.boolean()}).strict(),$n("DELETE")),setAutomationEnabled:(e,n,i,o)=>t(`/api/stories/${encodeURIComponent(e)}/automations/${encodeURIComponent(n)}/${o?"enable":"disable"}`,Bc,$n("POST",{nodeId:i})),runAutomation:(e,n,i,o)=>t(`/api/stories/${encodeURIComponent(e)}/automations/${encodeURIComponent(n)}/run`,Dc,$n("POST",{nodeId:i,input:Vc.parse(o)})),automationRuns:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}/automations/${encodeURIComponent(n)}/runs?nodeId=${encodeURIComponent(i)}`,Fc),updateDocument:(e,n,i,o)=>t(`/api/stories/${encodeURIComponent(e)}/documents/${encodeURIComponent(i)}`,Gc,$n("PATCH",{nodeId:n,input:Jc.parse(o)})),removeDocument:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}/documents/${encodeURIComponent(i)}`,o.z.object({deleted:o.z.boolean()}).strict(),$n("DELETE",{nodeId:n})),reorderDocuments:(e,n,i)=>t(`/api/stories/${encodeURIComponent(e)}/documents/order`,Gc,$n("POST",{nodeId:n,input:Zc.parse(i)})),setSessionStory:(e,n,i)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/${encodeURIComponent(n)}/story`,o.z.unknown(),$n("PUT",{storyId:i}))}}o.z.object({ref:Nm,turn:Lm,items:o.z.array(Vm).max(50),pagination:Tm}).strict(),o.z.object({body:gt,timeline:te}).strict(),o.z.object({detail:mt.strip(),turnIndex:pt.strip()}).strip(),o.z.object({body:gt.strip(),timeline:te.strip()}).strip();const Ym=o.z.object({agentId:rl,orchestrationId:Sl,status:o.z.enum(["available","missing-reference"])}).strict(),Wm=o.z.object({storyId:T,revision:sl,entries:o.z.array(Ym)}).strict(),Km=o.z.object({expectedRevision:sl,entries:o.z.array(o.z.object({agentId:rl,orchestrationId:Sl.optional()}).strict()).max(50)}).strict();o.z.enum(["STORY_AGENT_ENTRY_STORY_NOT_FOUND","STORY_AGENT_ENTRY_AGENT_NOT_FOUND","STORY_AGENT_ENTRY_ORCHESTRATION_NOT_FOUND","STORY_AGENT_ENTRY_ORCHESTRATION_MISMATCH","STORY_AGENT_ENTRY_REVISION_CONFLICT"]);const Jm=Ym.strip(),Zm=Wm.strip().extend({entries:o.z.array(Jm)});function Qm(e){return Zm.parse(e)}function Xm(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data;return{async list(e,n){return i=await t("/api/agents"+(e?`?nodeId=${encodeURIComponent(e)}`:""),o.z.unknown(),{signal:n}),bl.parse(i);var i},get:async(e,n,i)=>vl(await t(`/api/agents/${encodeURIComponent(e)}?nodeId=${encodeURIComponent(n)}`,o.z.unknown(),{signal:i})),create:async(e,n)=>vl(await t("/api/agents",o.z.unknown(),$n("POST",{nodeId:e,input:pl.parse(n)}))),update:async(e,n,i)=>vl(await t(`/api/agents/${encodeURIComponent(e)}`,o.z.unknown(),$n("PATCH",{nodeId:n,input:gl.parse(i)}))),remove(e,n,i={}){const o=new URLSearchParams({nodeId:n});return i.referencingOrchestrations&&o.set("referencingOrchestrations",i.referencingOrchestrations),t(`/api/agents/${encodeURIComponent(e)}?${o.toString()}`,zl,{method:"DELETE"})},async listOrchestrations(e,n){return i=await t("/api/agent-orchestrations"+(e?`?nodeId=${encodeURIComponent(e)}`:""),o.z.unknown(),{signal:n}),Ul.parse(i);var i},getOrchestration:async(e,n,i)=>Ll(await t(`/api/agent-orchestrations/${encodeURIComponent(e)}?nodeId=${encodeURIComponent(n)}`,o.z.unknown(),{signal:i})),createOrchestration:async(e,n)=>Ll(await t("/api/agent-orchestrations",o.z.unknown(),$n("POST",{nodeId:e,input:Rl.parse(n)}))),updateOrchestration:async(e,n,i)=>Ll(await t(`/api/agent-orchestrations/${encodeURIComponent(e)}`,o.z.unknown(),$n("PATCH",{nodeId:n,input:Tl.parse(i)}))),removeOrchestration:(e,n)=>t(`/api/agent-orchestrations/${encodeURIComponent(e)}?nodeId=${encodeURIComponent(n)}`,El,{method:"DELETE"}),storyEntries:async(e,n,i)=>Qm(await t(`/api/stories/${encodeURIComponent(e)}/agent-entries?nodeId=${encodeURIComponent(n)}`,o.z.unknown(),{signal:i})),updateStoryEntries:async(e,n,i)=>Qm(await t(`/api/stories/${encodeURIComponent(e)}/agent-entries`,o.z.unknown(),$n("PUT",{nodeId:n,input:Km.parse(i)}))),async listRuns(e,n){const i=await t("/api/agent-runs"+(e?`?nodeId=${encodeURIComponent(e)}`:""),o.z.object({runs:o.z.array(o.z.object({nodeId:o.z.string(),run:o.z.unknown()}).strip()),unavailableNodeIds:o.z.array(o.z.string()).default([])}).strip(),{signal:n});return{unavailableNodeIds:i.unavailableNodeIds,runs:i.runs.map(({nodeId:e,run:t})=>({nodeId:e,run:hm(t)}))}},getRun:async(e,n,i)=>hm(await t(`/api/agent-runs/${encodeURIComponent(e)}?nodeId=${encodeURIComponent(n)}`,o.z.unknown(),{signal:i})),async getRunMember(e,n,i,a){return r=await t(`/api/agent-runs/${encodeURIComponent(e)}/members/${encodeURIComponent(n)}?nodeId=${encodeURIComponent(i)}`,o.z.unknown(),{signal:a}),mm.parse(r);var r},createRun:async(e,n)=>hm(await t("/api/agent-runs",o.z.unknown(),$n("POST",{nodeId:e,input:rm.parse(n)}))),createManualRun:async(e,n)=>hm(await t("/api/agent-runs/manual",o.z.unknown(),$n("POST",{nodeId:e,input:sm.parse(n)}))),cancelRun:async(e,n,i={})=>hm(await t(`/api/agent-runs/${encodeURIComponent(e)}/cancel`,o.z.unknown(),$n("POST",{nodeId:n,input:dm.parse(i)})))}}function eu(e){const t="ai-session"===e.sessionKind?"ai-sessions":"apps/sessions";return`/instances/${encodeURIComponent(e.instanceId)}/api/${t}/${encodeURIComponent(e.sessionId)}/repository`}function tu(e,t){const n=`/api/controlled-instances/${encodeURIComponent(e.instanceId)}/repository/${t}`;return e.cwdFolderId?`${n}?${new URLSearchParams({cwdFolderId:e.cwdFolderId})}`:n}function nu(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).strict())(n),i)).data,n=(e,t)=>async n=>{if(!function(e){return Boolean(e&&"object"==typeof e&&404===e.status)}(n)||!e.legacySession)throw n;return t(e.legacySession)};return{async worktrees(e,i){try{return await t(tu(e,"worktrees"),on,{signal:i?.signal})}catch(o){return n(e,e=>t(`${eu(e)}/worktrees`,on,{signal:i?.signal}))(o)}},async createWorktree(e,i,o){const a=vn.parse(i);try{return await t(tu(e,"worktrees"),An,$n("POST",a,o?.signal))}catch(i){return n(e,e=>t(`${eu(e)}/worktrees`,An,$n("POST",a,o?.signal)))(i)}},async removeWorktree(e,i,o){const a=xn.parse(i);try{return await t(tu(e,"worktrees/remove"),Sn,$n("POST",a,o?.signal))}catch(i){return n(e,e=>{if("ai-session"!==e.sessionKind)throw new Error("Worktrees can only be removed from an AI session repository context.");return t(`${eu(e)}/worktrees/remove`,Sn,$n("POST",a,o?.signal))})(i)}},async moveWorktreeToMainPreflight(e,n,i){const o=kn.parse(n);return await t(tu(e,"worktrees/move-to-main/preflight"),jn,$n("POST",o,i?.signal))},async moveWorktreeToMain(e,n,i){const o=Rn.parse(n);return t(tu(e,"worktrees/move-to-main"),Tn,$n("POST",o,i?.signal))},async branches(e,i){try{return await t(tu(e,"branches"),fn,{signal:i?.signal})}catch(o){return n(e,e=>t(`${eu(e)}/branches`,fn,{signal:i?.signal}))(o)}}}}const iu=o.z.object({deleted:o.z.boolean()}).strict(),ou=o.z.array(Ls),au=o.z.array(dd),ru=o.z.array(ld),su=o.z.object({id:o.z.string().trim().min(1),ownedBy:o.z.string().optional()}).passthrough(),du=o.z.object({models:o.z.array(su),latencyMs:o.z.number()}).passthrough(),cu=o.z.object({success:o.z.literal(!0),latencyMs:o.z.number()}).passthrough(),lu=o.z.object({catalog:rd,status:sd}).strict(),mu=Ms.extend({referenceCount:o.z.number().int().min(0).optional()}).passthrough();function uu(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data,n=e=>`/api/models/${encodeURIComponent(e)}`,i=(e,t)=>`/api/nodes/${encodeURIComponent(e)}/models${void 0===t?"":`/${encodeURIComponent(t)}`}`;return{listProjects:e=>t("/api/projects",ou,{signal:e}),getProject:(e,n)=>t(`/api/projects/${encodeURIComponent(e)}`,Ls,{signal:n}),createProject:e=>t("/api/projects",Ls,$n("POST",e)),updateProject:(e,n)=>t(`/api/projects/${encodeURIComponent(e)}`,Ls,$n("PATCH",n)),removeProject:e=>t(`/api/projects/${encodeURIComponent(e)}`,iu,$n("DELETE")),listModels(e={}){const n=e.progressive?"?progressive=true":"";return t(`/api/models${n}`,Vs,{signal:e.signal})},getModel:(e,i)=>t(n(e),Ms,{signal:i}),createModel:e=>t("/api/models",Ms,$n("POST",e)),copyModel:(e,i)=>t(`${n(e)}/copy`,Ms,$n("POST",i)),discoverModels:e=>t("/api/models/discover",du,$n("POST",e)),testModel:e=>t("/api/models/test",cu,$n("POST",e)),reorderModels:e=>t("/api/models/reorder",o.z.array(Ms),$n("POST",{ids:[...e]})),updateModel:(e,i)=>t(n(e),Ws,$n("PATCH",i)),syncModel:e=>t(`${n(e)}/sync`,Ws,$n("POST",{})),mergeModel:(e,i)=>t(`${n(e)}/merge`,Js,$n("POST",i)),removeModel:e=>t(n(e),iu,$n("DELETE")),createModelOnNode:(e,n)=>t(i(e),mu,$n("POST",n)),discoverModelsOnNode:(e,n)=>t(`${i(e)}/discover`,du,$n("POST",n)),testModelOnNode:(e,n)=>t(`${i(e)}/test`,cu,$n("POST",n)),updateModelOnNode:(e,n,o)=>t(i(e,n),mu,$n("PATCH",o)),removeModelOnNode:(e,n)=>t(i(e,n),iu,$n("DELETE")),marketCatalog:e=>t("/api/market/catalog",lu,{signal:e}),refreshMarketCatalog:()=>t("/api/market/refresh",lu,$n("POST",{})),imageOptions:e=>t("/api/image-options",ru,{signal:e}),listImages:e=>t("/api/images",au,{signal:e}),getImage:(e,n)=>t(`/api/images/${encodeURIComponent(e)}`,dd,{signal:n}),createImage:e=>t("/api/images",dd,$n("POST",e)),updateImage:(e,n)=>t(`/api/images/${encodeURIComponent(e)}`,dd,$n("PATCH",n)),removeImage:e=>t(`/api/images/${encodeURIComponent(e)}`,iu,$n("DELETE"))}}const pu=o.z.object({id:o.z.string().trim().min(1),status:o.z.enum(["online","offline"]),checkedAt:o.z.string(),agent:o.z.record(o.z.string(),o.z.unknown()).optional(),error:o.z.string().optional()}).passthrough(),gu=o.z.object({deleted:o.z.boolean(),revoke:o.z.object({mode:o.z.enum(["not-proxied","revoked","forced"]),orphanRisk:o.z.boolean()}).strict()}).strict(),zu=o.z.object({data:o.z.array(Id),meta:o.z.object({nodeErrors:o.z.array(Go).default([]),nodeStates:o.z.array(Yo).default([])}).passthrough().optional()}).passthrough(),hu=o.z.object({id:o.z.string().trim().min(1),joinToken:o.z.string().trim().min(1),expiresAt:o.z.string()}).strict(),yu=fd.transform(e=>{const{secret:t,...n}=e.auth;return{...e,auth:n}});function fu(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data,n=e=>`/api/nodes/${encodeURIComponent(e)}`,i=(e,t)=>`${n(e)}/runtimes${void 0===t?"":`/${encodeURIComponent(t)}`}`,a=(e,t)=>`${n(e)}/local-folders${void 0===t?"":`/${encodeURIComponent(t)}`}`;return{createNode:e=>t("/api/nodes",yu,$n("POST",e)),updateNode:(e,i)=>t(n(e),yu,$n("PATCH",i)),removeNode(e,i={}){const o=i.force?"?force=true":"";return t(`${n(e)}${o}`,gu,$n("DELETE"))},checkNode:e=>t(`${n(e)}/check`,pu,$n("POST",{})),syncLocalNode:()=>t("/api/nodes/local/sync",yu,$n("POST",{})),listFolders:(e,n)=>t(a(e),o.z.array(Ts),{signal:n}),listFolderPlaces:(e,i)=>t(`${n(e)}/folders/places`,o.z.array(Nd),{signal:i}),listFolderTree(e,i={},a){const r=new URLSearchParams;return i.path&&r.set("path",i.path),void 0!==i.depth&&r.set("depth",String(i.depth)),t(`${n(e)}/folders/tree${r.size?`?${r}`:""}`,o.z.array($d),{signal:a})},createFolder:(e,n)=>t(a(e),Ts,$n("POST",n)),updateFolder:(e,n,i)=>t(a(e,n),Ts,$n("PATCH",i)),removeFolder:(e,n)=>t(a(e,n),Ed,$n("DELETE")),listAllRuntimes(t={}){const n=t.progressive?"?progressive=true":"";return e.request(`/api/node-runtimes${n}`,zu,{signal:t.signal})},listRuntimes:(e,n)=>t(i(e),o.z.array(Id),{signal:n}),createRuntime:(e,n)=>t(i(e),Id,$n("POST",n)),updateRuntime:(e,n,o)=>t(i(e,n),Id,$n("PATCH",o)),removeRuntime:(e,n)=>t(i(e,n),Ed,$n("DELETE")),checkRuntime:(e,n)=>t(`${i(e,n)}/check`,Id,$n("POST",{})),listDockerImages:(e,i)=>t(`${n(e)}/docker/images`,o.z.array(Pd),{signal:i}),imageOptions:(e,i)=>t(`${n(e)}/image-options`,o.z.array(Od),{signal:i}),getExternalListener:(e,i)=>t(`${n(e)}/settings/external-listener`,vd,{signal:i}),updateExternalListener(e,i){const o=xd.parse(i);return t(`${n(e)}/settings/external-listener`,vd,$n("PATCH",o))},getModelRelay:(e,i)=>t(`${n(e)}/settings/model-relay`,Sd,{signal:i}),updateModelRelay(e,i){const o=Cd.parse(i);return t(`${n(e)}/settings/model-relay`,Sd,$n("PATCH",o))},updateJobs:(e,i)=>t(`${n(e)}/updates/jobs`,o.z.array(xs),{signal:i}),checkUpdate(e,i={}){const o=ws.parse(i);return t(`${n(e)}/updates/check`,vs,$n("POST",o))},applyUpdate(e,i){const o=As.parse(i);return t(`${n(e)}/updates/apply`,xs,$n("POST",o))},createPairingInvite:(e,i={})=>t(`${n(e)}/pairing/invites`,kd,$n("POST",i)),listControlPlanePairings:(e,i)=>t(`${n(e)}/control-plane-pairings`,o.z.array(jd),{signal:i}),removeControlPlanePairing:(e,i)=>t(`${n(e)}/control-plane-pairings/${encodeURIComponent(i)}`,Ed,$n("DELETE")),listControlPlaneConnections:(e,i)=>t(`${n(e)}/control-plane-connections`,o.z.array(Rd),{signal:i}),createControlPlaneConnection:(e,i)=>t(`${n(e)}/control-plane-connections`,Td,$n("POST",i)),removeControlPlaneConnection:(e,i)=>t(`${n(e)}/control-plane-connections/${encodeURIComponent(i)}`,Ed,$n("DELETE")),createJoinInvite:(e={})=>t("/api/node-join/invites",hu,$n("POST",e)),joinInviteStatus:(e,n)=>t(`/api/node-join/invites/${encodeURIComponent(e)}`,hd,{signal:n}),completeJoin:e=>t("/api/node-join/complete",yu,$n("POST",e))}}const Iu=o.z.object({deleted:o.z.boolean()}).strict(),bu=o.z.object({revoked:o.z.boolean()}).strict(),wu=o.z.object({credentialId:o.z.string().trim().min(1).max(120)}).strict();function vu(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data,n=e=>`/api/git-credentials/${encodeURIComponent(e)}`,i=e=>`/api/controlled-instances/${encodeURIComponent(e)}/git-credential-assignments`;return{listCredentials:e=>t("/api/git-credentials",Qa,{signal:e}),getCredential:(e,i)=>t(n(e),Wa,{signal:i}),createCredential:e=>t("/api/git-credentials",Wa,$n("POST",e)),updateCredential:(e,i)=>t(n(e),Wa,$n("PATCH",i)),removeCredential:e=>t(n(e),Iu,$n("DELETE")),listInstanceAssignments:(e,n)=>t(i(e),o.z.array(Xa),{signal:n}),assignToInstance(e,n){const o=wu.parse(n);return t(i(e),Xa,$n("POST",o))},unassignFromInstance:(e,n)=>t(`${i(e)}/${encodeURIComponent(n)}`,bu,$n("DELETE"))}}const xu=o.z.object({deleted:o.z.boolean(),templateId:o.z.string().trim().min(1).max(120)}).strict();function Au(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data,n=e=>`/api/nodes/${encodeURIComponent(e)}/environment-templates`;return{listForNode:(e,i)=>t(n(e),o.z.array(Xr),{signal:i}),get:(e,i,o)=>t(`${n(e)}/${encodeURIComponent(i)}`,Xr,{signal:o}),createFromInstance:(e,n)=>t(`/api/controlled-instances/${encodeURIComponent(e)}/environment-templates`,Xr,$n("POST",n)),remove:(e,i)=>t(`${n(e)}/${encodeURIComponent(i)}`,xu,$n("DELETE"))}}const Su=Zd.omit({token:!0}).extend({tokenSet:o.z.boolean().optional()}).strip(),Cu=o.z.object({running:o.z.boolean(),bridges:o.z.array(o.z.object({id:o.z.string(),channel:Jd,name:o.z.string(),running:o.z.boolean(),tokenSet:o.z.boolean(),defaultChatId:o.z.string().optional(),lastUpdateId:o.z.number().optional(),error:o.z.string().optional()}).strip()).default([])}).strip();function ku(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data,n=e=>`/api/chat-gateway/bridges/${encodeURIComponent(e)}`;return{status:e=>t("/api/chat-gateway/status",Cu,{signal:e}),listBridges:e=>t("/api/chat-gateway/bridges",o.z.array(Su),{signal:e}),createBridge:e=>t("/api/chat-gateway/bridges",Su,$n("POST",e)),updateBridge:(e,i)=>t(n(e),Su,$n("PATCH",i)),startBridge:e=>t(`${n(e)}/start`,Cu,$n("POST",{})),stopBridge:e=>t(`${n(e)}/stop`,Cu,$n("POST",{})),removeBridge:e=>t(n(e),o.z.object({deleted:o.z.boolean()}).strict(),$n("DELETE")),listSessions:e=>t("/api/chat/sessions",o.z.array(Qd),{signal:e}),getSession:(e,n)=>t(`/api/chat/sessions/${encodeURIComponent(e)}`,Qd,{signal:n})}}const ju=o.z.object({protocolVersion:o.z.string(),build:o.z.record(o.z.string(),o.z.unknown()).optional(),storage:o.z.record(o.z.string(),o.z.string())}).passthrough(),Ru=o.z.object({controlPlaneId:o.z.string(),algorithm:o.z.literal("Ed25519"),publicKey:o.z.string(),fingerprint:o.z.string()}).strict(),Tu=o.z.object({version:o.z.literal(1),serviceOrigin:o.z.string(),status:o.z.enum(["unbound","pending-claim","active","pending-revocation","clone-conflict"]),remoteAccessEnabled:o.z.boolean(),accountId:o.z.string().optional(),bindingId:o.z.string().optional(),bindingRevision:o.z.number().int().optional(),updatedAt:o.z.string(),identity:Ru,hasBackgroundCredential:o.z.boolean(),remoteResult:o.z.enum(["confirmed","unknown"]).optional()}).strict(),Eu=o.z.object({challengeCode:o.z.string(),authorizationUrl:o.z.string(),payload:o.z.object({controlPlaneId:o.z.string(),publicKeyFingerprint:o.z.string(),expiresAt:o.z.string()}).strict(),signature:o.z.string()}).strict(),Pu=o.z.object({bindingId:o.z.string(),activeHttp:o.z.number().int().nonnegative(),activeStreams:o.z.number().int().nonnegative(),activeWebSockets:o.z.number().int().nonnegative()}).strict(),Ou=o.z.record(o.z.string(),o.z.unknown());function $u(e){const t=async(t,n,i)=>(await e.request(t,(e=>o.z.object({data:e}).passthrough())(n),i)).data,n=e=>`/api/control-plane-proxy/pending-claims/${encodeURIComponent(e)}`;return{status:e=>t("/api/control-plane/status",ju,{signal:e}),getSettings:e=>t("/api/control-plane/settings",tc,{signal:e}),updateSettings(e){const n=nc.parse(e);return t("/api/control-plane/settings",tc,$n("PATCH",n))},async exportDiagnosticLogs(){if(!e.requestBinary)throw function(){const e=new Error("This client transport cannot download binary responses.");return Object.assign(e,{code:"CLIENT_BINARY_UNSUPPORTED"}),e}();return e.requestBinary("/api/control-plane/diagnostic-logs/export")},cloudConnectivity:e=>t("/api/cloud-connectivity",Tu,{signal:e}),createCloudChallenge:()=>t("/api/cloud-connectivity/challenges",Eu,$n("POST",{})),setCloudRemoteAccess:e=>t("/api/cloud-connectivity/remote-access",Tu,$n("POST",{enabled:e})),disconnectCloud:()=>t("/api/cloud-connectivity/disconnect",Tu,$n("POST",{})),proxyInvites:e=>t("/api/control-plane-proxy/invites",o.z.array(Sa),{signal:e}),createProxyInvite(e){const n=Ca.parse(e);return t("/api/control-plane-proxy/invites",ka,$n("POST",n))},revokeProxyInvite:e=>t((e=>`/api/control-plane-proxy/invites/${encodeURIComponent(e)}`)(e),Sa,$n("DELETE")),proxyBindings:e=>t("/api/control-plane-proxy/bindings",o.z.array(Ra),{signal:e}),revokeProxyBinding:e=>t((e=>`/api/control-plane-proxy/bindings/${encodeURIComponent(e)}`)(e),Ra,$n("DELETE")),proxyDiagnostics:e=>t("/api/control-plane-proxy/diagnostics",o.z.array(Pu),{signal:e}),pendingProxyClaims:e=>t("/api/control-plane-proxy/pending-claims",o.z.array(Na),{signal:e}),resumeProxyClaim:e=>t(`${n(e)}/resume`,Ou,$n("POST",{})),cancelProxyClaim(e,i={}){const o=i.force?"?force=true":"";return t(`${n(e)}${o}`,Ou,$n("DELETE"))}}}function Nu(e){const t={request:(t,n,i,a)=>e.request(t,function(e){return o.z.unknown().transform((t,n)=>{const i=mi(e,t);if(i.success)return i.data;for(const e of i.error.issues)n.addIssue({...e});return o.z.NEVER})}(n),i,a),...e.requestBinary?{requestBinary:(t,n)=>e.requestBinary(t,n)}:{}};return{auth:ko(t),users:Ro(t),aiSessions:Dn(t),appSessions:ii(t),appProfiles:di(t),browser:li(t),resources:yc(t),triggers:vc(t),stories:Gm(t),agents:Xm(t),repository:nu(t),catalog:uu(t),nodeAdmin:fu(t),gitCredentials:vu(t),environmentTemplates:Au(t),chatGateway:ku(t),admin:$u(t)}}const _u=o.z.object({nodeId:o.z.string().optional(),instanceId:o.z.string().optional()}).passthrough(),Uu=o.z.object({v:o.z.literal(1),id:o.z.string().min(1),seq:o.z.number().finite(),type:o.z.string().min(1),topic:o.z.string().min(1),createdAt:o.z.string().datetime(),payload:o.z.unknown(),replay:o.z.literal(!0).optional(),scope:_u.optional()}).passthrough(),qu=o.z.object({v:o.z.literal("2026-08-25"),id:o.z.string().min(1),type:o.z.string().min(1),createdAt:o.z.string().datetime(),payload:o.z.unknown(),topic:o.z.string().min(1).optional(),replay:o.z.literal(!0).optional(),scope:_u.optional()}).passthrough(),Lu=o.z.discriminatedUnion("v",[Uu,qu]);o.z.object({v:o.z.literal(1),type:o.z.literal("ping"),sentAt:o.z.string().datetime()}).strict(),o.z.object({v:o.z.literal(1),type:o.z.literal("pong"),sentAt:o.z.string().datetime(),receivedAt:o.z.string().datetime()}).strict(),o.z.object({replaySince:o.z.string().datetime().optional(),messageDeltas:o.z.object({allInstances:o.z.boolean().default(!1),instanceIds:o.z.array(o.z.string().trim().min(1).max(160)).max(1e3).default([])}).default({allInstances:!1,instanceIds:[]}),timelineAllSessions:o.z.boolean().default(!1),timelineSessions:o.z.array(o.z.object({instanceId:o.z.string().trim().min(1).max(160),sessionId:o.z.string().trim().min(1).max(120)})).max(1e3).default([])});const Du=o.z.enum(["ai.sessions","app.sessions"]),Mu=o.z.object({topic:Du,instanceId:o.z.string().trim().min(1).max(160),streamId:o.z.string().trim().min(1).max(240),latestRevision:o.z.number().int().min(0),earliestRetainedRevision:o.z.number().int().min(0)}).strict(),Bu=o.z.object({protocolVersion:o.z.literal(1),streams:o.z.array(Mu)}).strict();function Hu(e,n){try{const i=JSON.parse(t.readFileSync(e,"utf8"));if(n&&i.name!==n)return;return"string"==typeof i.version&&i.version.trim()?i.version.trim():void 0}catch{return}}function Fu(e){if(e)try{return i.dirname(t.realpathSync(e))}catch{return}}const Vu=function(e,t=process.env,n=e){const o=t.TASK_HANDOFF_VERSION?.trim();if(o)return o;const a=n.split("/").at(-1),r=process.argv[1]?i.resolve(process.argv[1]):void 0,s=r?i.dirname(r):void 0,d=[Fu(r),s,process.cwd()].filter(e=>Boolean(e));for(const t of new Set(d)){let n=t;for(;;){const t=Hu(i.join(n,"package.json"),e);if(t)return t;const o=i.dirname(n);if(o===n)break;n=o}}let c;for(const e of new Set(d)){let t=e;for(;;){if(a){const e=Hu(i.join(t,"packages",a,"package.json"),n);if(e)return e}c||=Hu(i.join(t,"package.json"));const e=i.dirname(t);if(e===t)break;t=e}}return c||"unknown"}("@task-handoff/thctl");function Gu(){const e="darwin"===process.platform||"linux"===process.platform||"win32"===process.platform?process.platform:"linux";return{name:n.hostname()||"thctl",platform:e,version:Vu}}const Yu=Buffer.from("302a300506032b6570032100","hex"),Wu=o.z.object({error:o.z.object({code:o.z.string().min(1),message:o.z.string().min(1),details:o.z.record(o.z.string(),o.z.unknown()).optional(),retryable:o.z.boolean().optional()}).loose()}).loose();function Ku(e,t){if(!t.startsWith("/")||t.startsWith("//"))throw z("Control Plane routes must be same-origin absolute paths.",{route:t});const n=new URL(t,e);if(n.origin!==e)throw z("A thctl request cannot leave its verified Control Plane origin.",{route:t,origin:e});return n.toString()}function Ju(e,t=Date.now()){const{payload:n,signature:i}=e.data,o=Date.parse(n.issuedAt),r=Date.parse(n.expiresAt);if(o>t+6e4||r<=t||r<=o)throw new m("CLI_IDENTITY_STALE","The Control Plane identity document is expired or its clock is invalid.",l);const s=Buffer.from(n.publicKey.value,"base64url");if(`sha256:${a.createHash("sha256").update(s).digest("base64url")}`!==n.publicKey.fingerprint)throw new m("CLI_IDENTITY_FINGERPRINT_INVALID","The Control Plane public key fingerprint is invalid.",l);let d;try{d=a.createPublicKey({key:Buffer.concat([Yu,s]),format:"der",type:"spki"})}catch{throw new m("CLI_IDENTITY_KEY_INVALID","The Control Plane public key is not a valid Ed25519 key.",l)}const c=Buffer.from((u=n,JSON.stringify(Gi.parse(u))),"utf8");var u;if(!a.verify(null,c,d,Buffer.from(i,"base64url")))throw new m("CLI_IDENTITY_SIGNATURE_INVALID","The Control Plane identity signature is invalid.",l);return n}function Zu(e){return{async request(t,n,i={}){let o=!1;for(;;){const a=new Headers(i.headers);a.set("accept","application/json");const r=e.sessionToken?.();let s;r&&a.set("authorization",`Bearer ${r}`);try{s=await e.fetchImpl(Ku(e.origin,t),{...i,headers:a,redirect:"error"})}catch(t){if(t instanceof m)throw t;throw h(`Could not reach ${e.origin}: ${t instanceof Error?t.message:String(t)}`,{origin:e.origin})}const d=await s.text().catch(()=>"");let c;if(d)try{c=JSON.parse(d)}catch{throw z("The Control Plane returned a non-JSON response.",{status:s.status,path:t})}if(!s.ok){const n=Wu.safeParse(c);if(401===s.status&&(e.onUnauthorized?.(),!o&&e.refreshCredential&&await e.refreshCredential())){o=!0;continue}if(!n.success){const e=(i.method??"GET").toUpperCase();if(404===s.status||405===s.status||501===s.status)throw g(s.status,e,t);throw I(s.status,`HTTP_${s.status}`,`Control Plane request failed with HTTP ${s.status}.`,{path:t})}const{code:a,message:r,details:d,retryable:l}=n.data.error;throw I(s.status,a,r,{...d,...void 0===l?{}:{retryable:l},path:t})}const l=n.safeParse(c);if(!l.success)throw z("The Control Plane response does not match the expected protocol schema.",{path:t,issues:l.error.issues.slice(0,5).map(e=>({path:e.path.join("."),code:e.code,message:e.message}))});return l.data}},async requestBinary(t,n={}){const i=new Headers(n.headers);i.set("accept","application/octet-stream, application/gzip, */*");const o=e.sessionToken?.();let a;o&&i.set("authorization",`Bearer ${o}`);try{a=await e.fetchImpl(Ku(e.origin,t),{...n,headers:i,redirect:"error"})}catch(t){if(t instanceof m)throw t;throw h(`Could not reach ${e.origin}: ${t instanceof Error?t.message:String(t)}`,{origin:e.origin})}if(!a.ok){if(404===a.status||405===a.status||501===a.status)throw g(a.status,(n.method??"GET").toUpperCase(),t);throw I(a.status,`HTTP_${a.status}`,`Control Plane request failed with HTTP ${a.status}.`,{path:t})}const r=a.headers.get("content-disposition")??"",s=/filename\*?=(?:UTF-8''|")?([^";]+)/i.exec(r)?.[1];return{body:new Uint8Array(await a.arrayBuffer()),...s?{filename:decodeURIComponent(s)}:{},...a.headers.get("content-type")?{contentType:a.headers.get("content-type")}:{}}}}}async function Qu(e,t){const n=Nu(Zu({origin:e,fetchImpl:t}));let i;try{i=await n.auth.identity()}catch(t){if(t instanceof m&&(7===t.exitCode||"CLI_ROUTE_MISSING"===t.code))throw new m("CLI_IDENTITY_UNAVAILABLE",`${e} did not return a Control Plane identity document. Check the address and that the Control Plane is running.`,l);throw t}return{payload:Ju(i),origin:e}}function Xu(e){try{const t=new URL(e);return"http:"===t.protocol&&("127.0.0.1"===t.hostname||"localhost"===t.hostname||"[::1]"===t.hostname)}catch{return!1}}async function ep(e){const{profile:t,identity:n,fetchImpl:i,secrets:o}=e;if(!Vi(n.payload.capabilities))return;if(!Xu(t.origin))return;const a=Nu(Zu({origin:t.origin,fetchImpl:i})),r=await a.auth.cliLocalSession({client:Gu()}),s={sessionToken:r.sessionToken,sessionId:r.session.id,expiresAt:r.session.expiresAt,mode:"local-trust",savedAt:(new Date).toISOString()};return o.write(t.label,s),s}async function tp(e){const{store:t,profile:n,fetchImpl:i}=e,o=await Qu(n.origin,i);!function(e,t){const{payload:n}=t;if(e.origin!==t.origin)throw new m("CLI_PROFILE_ORIGIN_CHANGED",`Profile \`${e.label}\` points at ${e.origin}, not ${t.origin}.`,l);if(e.controlPlaneId!==n.controlPlaneId||e.fingerprint!==n.publicKey.fingerprint)throw new m("CLI_IDENTITY_CHANGED",`The Control Plane identity for \`${e.label}\` changed. Run \`thctl profile trust ${e.label} --yes\` after verifying the new fingerprint ${n.publicKey.fingerprint}.`,l,{profile:e.label,expectedControlPlaneId:e.controlPlaneId,expectedFingerprint:e.fingerprint,actualControlPlaneId:n.controlPlaneId,actualFingerprint:n.publicKey.fingerprint})}(n,o),function(e,t){const n=t.payload.capabilities;if(!(function(e){return!0===Hi(e)?.cliSessions}(n)||Vi(n)&&Xu(e.origin))){if(Vi(n))throw new m("CLI_LOCAL_SESSION_UNAVAILABLE_REMOTE",`${e.origin} runs with Control Plane authentication disabled and only issues CLI sessions to clients on the same machine. Run thctl on that machine, or enable user management to sign in with \`thctl login\`.`,14,{profile:e.label,origin:e.origin,protocolVersion:t.payload.protocolVersion});throw new m("CLI_CAPABILITY_MISSING",`The Control Plane at ${e.origin} does not declare the \`cliSessions\` capability. Upgrade it to the release that ships the Control Plane CLI endpoints.`,14,{profile:e.label,origin:e.origin,protocolVersion:t.payload.protocolVersion})}}(n,o);const a=t.secrets();let r=!1===e.withSession?void 0:a.read(n.label);r?.expiresAt&&Date.parse(r.expiresAt)<=Date.now()&&(a.remove(n.label),r=void 0);let s=!1;if(!1===e.withSession||r||(r=await ep({profile:n,identity:o,fetchImpl:i,secrets:a}),s=Boolean(r)),!1!==e.withSession&&!r)throw new m("CLI_NOT_AUTHENTICATED",`No CLI session stored for \`${n.label}\`. Run \`thctl login\`.`,5,{profile:n.label});const d="local-trust"===r?.mode,c=Zu({origin:n.origin,fetchImpl:i,sessionToken:r?()=>a.read(n.label)?.sessionToken:void 0,onUnauthorized:r?()=>a.remove(n.label):void 0,...d?{refreshCredential:async()=>{a.remove(n.label);const e=await ep({profile:n,identity:o,fetchImpl:i,secrets:a});return Boolean(e)}}:{}}),u=function(e,t){const n=t.payload.protocolVersion,i=t.payload.capabilities;if(!(e.protocolVersion!==n||JSON.stringify(e.capabilities??null)!==JSON.stringify(i??null)))return e;const o=(new Date).toISOString();return{...e,protocolVersion:n,capabilities:i,lastUsedAt:o,updatedAt:o}}(n,o),p=Nu(c);if("local-trust"===r?.mode&&!s){const e=await p.auth.session();e.authenticated&&e.user||await ep({profile:n,identity:o,fetchImpl:i,secrets:a})}return{profile:u,identity:o,client:p,store:t}}var np,ip,op=function(){if(ip)return np;ip=1;const e=t,{spawnSync:n}=s;return np={processStartIdentity:function(t,i=process.platform){if(Number.isInteger(t)&&!(t<=0)){if("linux"===i)try{const n=e.readFileSync(`/proc/${t}/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(i)){const e=n("ps",["-o","lstart=","-p",String(t)],{encoding:"utf8",timeout:1e3}),o=0===e.status?e.stdout.trim().replace(/\s+/g," "):"";return o?`${i}:${o}`:void 0}if("win32"===i){const e=n("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${t} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`],{encoding:"utf8",timeout:2e3}),i=0===e.status?e.stdout.trim():"";return/^\d+$/.test(i)?`win32:${i}`:void 0}}}}}();function ap(e){return Number.isInteger(e)&&Number(e)>0}const rp="local";function sp(e=process.env){const t=e.TASK_HANDOFF_CONTROL_PLANE_LOCK_PATH?.trim();return t?i.resolve(t):i.join(n.tmpdir(),`task-handoff-control-plane-${process.getuid?.()??"user"}.lock`)}const dp=new Set(["127.0.0.1","localhost","::1","[::1]"]),cp=new Set(["0.0.0.0","::","[::]"]);async function lp(e){const o=sp(e.env),a=function(e){try{const o=JSON.parse(t.readFileSync(function(e){return i.join(e,"owner.json")}(e),"utf8"));if(ap(o.pid)&&"string"==typeof o.startTime){const e=o;return{pid:e.pid,hostname:"string"==typeof e.hostname&&e.hostname?e.hostname:n.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(!(ap(o.pid)&&"string"==typeof o.hostname&&o.hostname&&"string"==typeof o.command&&"string"==typeof o.acquiredAt&&Number.isFinite(Date.parse(o.acquiredAt))&&"string"==typeof o.token&&o.token))return;return o}catch{return}}(o);if(!a)return;if(a.component&&"control-plane"!==a.component)return;if(!function(e){if(!e||!function(e){if(!ap(e))return!1;try{return process.kill(Number(e),0),!0}catch(e){return"EPERM"===e.code}}(e.pid))return!1;if(!e.startIdentity)return!0;const t=op.processStartIdentity(e.pid);return void 0===t||t===e.startIdentity}(a))return;const r=function(e){const t=e.port;if(!Number.isInteger(t)||t<1||t>65535)return;const n=e.host?.trim().toLowerCase();if(!n||!dp.has(n)&&!cp.has(n))return;const i=n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n;return`http://${dp.has(n)?i.includes(":")?`[${i}]`:i:"127.0.0.1"}:${t}`}(a);if(r)try{return{origin:r,identity:await Qu(r,e.fetchImpl),lockPath:o,...a.dataDir?{dataDir:a.dataDir}:{}}}catch{return}}function mp(e,t){const{origin:n,identity:i}=t,o=e.findByOrigin(n);if(o)return o;const a=(new Date).toISOString(),r=e.list().find(e=>"local-discovery"===e.source);if(r){const t=r.controlPlaneId!==i.payload.controlPlaneId||r.fingerprint!==i.payload.publicKey.fingerprint;return e.save({...r,origin:n,controlPlaneId:i.payload.controlPlaneId,fingerprint:i.payload.publicKey.fingerprint,protocolVersion:i.payload.protocolVersion,capabilities:i.payload.capabilities,updatedAt:a,lastUsedAt:a,...t?{trustedAt:a,identityChangedAt:a,replacedFingerprint:r.fingerprint}:{}})}const s=function(e,t){if(!e.get(rp))return rp;const n=R(t);let i=n,o=2;for(;e.get(i);)i=`${n}-${o++}`;return i}(e,n),d=w.parse({label:s,origin:n,controlPlaneId:i.payload.controlPlaneId,fingerprint:i.payload.publicKey.fingerprint,protocolVersion:i.payload.protocolVersion,capabilities:i.payload.capabilities,source:"local-discovery",createdAt:a,updatedAt:a,trustedAt:a,lastUsedAt:a}),c=e.save(d);return e.defaultProfile()||e.setDefault(c.label),c}const up=/(token|secret|password|passwd|credential|credentials|apikey|privatekey)$/i,pp=new Set(["key","token","secret","password","credentials","credential"]);function gp(e){return pp.has(e.toLowerCase())||up.test(e)}const zp=new Set;function hp(e){if("string"!=typeof e)return;const t=e.trim();t.length>=4&&zp.add(t)}function yp(e){let t=e;for(const e of zp)t=t.split(e).join("***");return t}function fp(e){return Ip(e)}function Ip(e){if("string"==typeof e)return yp(e);if(Array.isArray(e))return e.map(Ip);if(!e||"object"!=typeof e)return e;const t={};for(const[n,i]of Object.entries(e))t[n]=gp(n)?"***":Ip(i);return t}function bp(e){if(Array.isArray(e))for(const t of e)bp(t);else if(e&&"object"==typeof e)for(const[t,n]of Object.entries(e))gp(t)?hp(n):bp(n)}async function wp(e){const t=r.createInterface({input:process.stdin,output:process.stderr});try{const n=await t.question(`${e} [y/N] `);return/^y(es)?$/i.test(n.trim())}finally{t.close()}}async function vp(e,t){const n=e.profile?.trim()||e.env[b]?.trim();if(n)return e.store.select(n,e.env);if(e.store.list().length>0)return e.store.select(void 0,e.env);const i=await lp({env:e.env,fetchImpl:e.fetchImpl});if(i)return mp(e.store,i);throw new m("CLI_PROFILE_MISSING",`No Control Plane profile configured and no local Control Plane was detected (lock: ${sp(e.env)}). Start the desktop Control Plane or run \`thctl profile add <origin>\`.`,7)}async function xp(e,t={}){let n,i=t.profile??await vp(e);try{n=await Ap(e,i,t.withSession)}catch(o){const a=await async function(e,t,n){if("local-discovery"!==t.source)return;if(!(n instanceof m&&["CLI_NETWORK_ERROR","CLI_IDENTITY_UNAVAILABLE"].includes(n.code)))return;const i=await lp({env:e.env,fetchImpl:e.fetchImpl});return i&&i.origin!==t.origin?mp(e.store,i):void 0}(e,i,o);if(!a)throw o;i=a,n=await Ap(e,i,t.withSession)}return function(e,t){const n=e.get(t.label);n&&n.updatedAt===t.updatedAt||e.save(t)}(e.store,n.profile),!1!==t.withSession&&await async function(e,t){const n=e.store.secrets(),i=n.read(t.profile.label);if(!i?.expiresAt)return;if("local-trust"===i.mode)return;const o=Date.parse(i.expiresAt)-Date.now();if(!Number.isFinite(o)||o>Sp)return;const a=await t.client.auth.renewCliSession();n.write(t.profile.label,{...i,expiresAt:a.expiresAt,savedAt:(new Date).toISOString()})}(e,n),n}function Ap(e,t,n){return tp({store:e.store,profile:t,fetchImpl:e.fetchImpl,...void 0===n?{}:{withSession:n}})}const Sp=6048e5;async function Cp(e,t,n,i){const o=n(),a=o.steps??[o];if(!e.dryRun){for(const e of a)bp(e.body);return await async function(e,t,n){if(e.yes)return!0;if(!e.isTty)throw function(e){return new m("CLI_CONFIRMATION_REQUIRED",`\`${e}\` changes remote state. Re-run with --yes to confirm, or --dry-run to preview the request.`,4,{command:e})}(t);if(!await e.confirm(n))throw new m("CLI_CANCELLED","The operation was cancelled.",15);return!0}(e,t,1===a.length?`${o.method} ${o.path} — continue?`:`${a.length} requests will be sent (${a.map(e=>`${e.method} ${e.path}`).join(", ")}) — continue?`),i()}e.output.data(1===a.length?{dryRun:!0,method:o.method,path:o.path,...void 0===o.body?{}:{body:fp(o.body)}}:{dryRun:!0,steps:a.map(e=>({method:e.method,path:e.path,...void 0===e.body?{}:{body:fp(e.body)}}))})}function kp(e,t){const n=e.args[t]?.trim();if(!n)throw u("CLI_ARGUMENT_MISSING",`Missing required argument <${t}>.`,{argument:t});return n}function jp(e,t){const n=e.options[t];if("string"==typeof n)return n.trim()||void 0}function Rp(e,t){const n=jp(e,t);if(!n)throw u("CLI_OPTION_MISSING",`Missing required option --${t}.`,{option:t});return n}function Tp(e,t){const n=e.options[t];return Array.isArray(n)?n.filter(e=>"string"==typeof e).map(e=>e.trim()).filter(Boolean):[]}function Ep(e,t,n){const i=e.safeParse(t);if(!i.success)throw u("CLI_INVALID_INPUT",`${n} does not match the expected schema.`,{issues:i.error.issues.map(e=>({path:e.path.join("."),message:e.message}))});return i.data}function Pp(e,n,i){let o,a;try{o=t.readFileSync(e,"utf8")}catch(t){throw u("CLI_FILE_UNREADABLE",`Cannot read ${i} \`${e}\`: ${t instanceof Error?t.message:String(t)}`,{file:e})}try{a=JSON.parse(o)}catch(t){throw u("CLI_FILE_INVALID_JSON",`${i} \`${e}\` is not valid JSON: ${t instanceof Error?t.message:String(t)}`,{file:e})}return Ep(n,a,`${i} \`${e}\``)}function Op(e,t){if("not-modified"===e.kind)throw z(`AI session \`${t}\` is unchanged at revision ${e.revision}; no projection is available locally.`,{sessionId:t,revision:e.revision});return e.detail}function $p(e,t="request body"){const n=Rp(e,"config"),i=Pp(n,o.z.unknown(),t);if(!i||"object"!=typeof i||Array.isArray(i))throw u("CLI_INVALID_INPUT",`${t} \`${n}\` must be a JSON object.`,{file:n});return i}async function Np(e){if(!0!==e.options.tokenStdin)throw u("CLI_TOKEN_STDIN_REQUIRED","Provide the secret on stdin and re-run with --token-stdin.");const t=[];let n=0;for await(const e of process.stdin){const i=Buffer.isBuffer(e)?e:Buffer.from(String(e));if(n+=i.length,n>1048576)throw u("CLI_TOKEN_STDIN_TOO_LARGE","The secret on stdin is too large.");t.push(i)}const i=Buffer.concat(t).toString("utf8").trim();if(!i)throw u("CLI_TOKEN_STDIN_EMPTY","No secret was provided on stdin.");return hp(i),i}const _p=[{key:"instanceId",header:"instance"},{key:"id",header:"session"},{key:"agent",header:"agent"},{key:"status",header:"status"},{key:"phase",header:"phase"},{key:"title",header:"title",width:40},{key:"updatedAt",header:"updated"}],Up=(e,t)=>`/api/controlled-instances/${encodeURIComponent(e)}/ai-sessions/${encodeURIComponent(t)}`;function qp(e){return e.map(e=>"activity"===e.type?{type:e.activityKind,turn:e.turnId,title:e.title,detail:e.output??e.summary??e.input??""}:{type:e.type,turn:e.turnId,title:"",detail:e.text})}const Lp=[{key:"type",header:"type"},{key:"turn",header:"turn",width:40},{key:"title",header:"title",width:24},{key:"detail",header:"detail",width:60}];function Dp(e,t){return async(n,i)=>{const o=kp(i,"instanceId"),a=kp(i,"sessionId"),r=kp(i,"queueId"),s=await xp(n),d=await Cp(n,e,()=>"remove"===t?{method:"DELETE",path:`${Up(o,a)}/queue/${encodeURIComponent(r)}`}:{method:"POST",path:`${Up(o,a)}/queue/${encodeURIComponent(r)}/${t}`},async()=>"steer"===t?await s.client.aiSessions.steerQueue(o,a,r):"retry"===t?await s.client.aiSessions.retryQueue(o,a,r):await s.client.aiSessions.removeQueue(o,a,r));if(d)return{data:d,message:`Queued message \`${r}\` ${"remove"===t?"removed":`${t} requested`}.`}}}const Mp=Dp("ai-session queue steer","steer"),Bp=Dp("ai-session queue retry","retry"),Hp=Dp("ai-session queue remove","remove");async function Fp(e,t,n,i,o){const a=jp(o,"expected-revision");if(void 0!==a){const e=Number(a);if(!Number.isInteger(e)||e<0)throw new m("CLI_INVALID_OPTION","--expected-revision must be a non-negative integer.",2,{option:"expected-revision",value:a});return e}const r=Op(await t.client.aiSessions.detail(n,i,void 0,e.signal),i);return r.queue?.revision??0}const Vp=[{key:"instanceId",header:"instance"},{key:"id",header:"app session"},{key:"appId",header:"app"},{key:"title",header:"title",width:30},{key:"kind",header:"kind"},{key:"status",header:"status"},{key:"updatedAt",header:"updated"}],Gp=o.z.string().trim().min(1).max(120),Yp=[{key:"mode",header:"mode"},{key:"url",header:"url"},{key:"expiresAt",header:"expires"},{key:"token",header:"token"}],Wp=(e,t)=>`/api/controlled-instances/${encodeURIComponent(e)}/apps/sessions/${encodeURIComponent(t)}`;function Kp(e,t=Math.random){const n=Math.max(1,Math.floor(e));if(1===n)return 0;if(2===n)return 250;const i=Math.min(6e4,250*2**(n-2));return Math.min(6e4,Math.round(i*(.75+.5*t())))}class Jp{retryNumber=0;random;constructor(e=Math.random){this.random=e}get attempts(){return this.retryNumber}next(){return this.retryNumber+=1,{attempt:this.retryNumber,delay:Kp(this.retryNumber,this.random)}}reset(){this.retryNumber=0}}const Zp=({url:e,authorization:t,handlers:n})=>{const i=new d(e,{headers:{authorization:t}});return i.on("open",()=>n.opened()),i.on("message",e=>n.message(function(e){return"string"==typeof e?e:Buffer.isBuffer(e)?e.toString("utf8"):Array.isArray(e)?Buffer.concat(e).toString("utf8"):e instanceof ArrayBuffer?Buffer.from(e).toString("utf8"):String(e)}(e))),i.on("close",(e,t)=>n.closed({code:e,reason:t?.toString("utf8")??""})),i.on("error",e=>n.failed(e instanceof Error?e:new Error(String(e)))),i.on("unexpected-response",(e,t)=>{const i=t.statusCode??0;t.resume(),n.rejected(i)}),{send:e=>i.send(e),close:(e,t)=>{try{i.close(e,t)}catch{}}}},Qp={"ai-sessions":"ai.sessions","app-sessions":"app.sessions"};function Xp(e,t){const n=new URL(Ku(e,"/api/events"));return n.protocol="https:"===n.protocol?"wss:":"ws:",n.searchParams.set("aiSessionTransient","1"),n.searchParams.set("resourceMetricsScope","1"),t&&n.searchParams.set("instanceId",t),n.toString()}function eg(e){return`${e.code}${e.reason?`: ${e.reason}`:""}`}async function tg(e,t){if(e.signal.aborted)return;const n=e.createEventSocket??Zp,i=function(e){return{v:1,type:"subscribe",topics:[...e.topics],...e.instanceId?{instanceIds:[e.instanceId]}:{},metricInstanceIds:[],aiSessionTransient:{messageDeltas:{allInstances:!1,instanceIds:[]},timelineAllSessions:!1,timelineSessions:[]},aiSessionHierarchy:{subagents:!0}}}(t);await new Promise((o,a)=>{const r=new Set,s=new Jp;let d,c,l,u=!1,p=!1;const g=()=>{c&&clearInterval(c),c=void 0},y=t=>{if(p)return;p=!0,e.signal.removeEventListener("abort",f),g(),l&&clearTimeout(l),l=void 0;const n=d;d=void 0,n?.socket.close(1e3,"thctl stopped the event stream."),t?a(t):o()},f=()=>y(),b=(t,n)=>{if(!p&&d===t){d=void 0,g();try{t.socket.close(1e3,n.error?"thctl stopped the event stream.":"thctl is reconnecting the event stream.")}catch{}n.error?y(n.error):(n.warning&&e.output.warn(n.warning),(()=>{if(p||l)return;const{attempt:t,delay:n}=s.next();e.output.warn(`Event stream disconnected; reconnecting (attempt ${t}, in ${n}ms).`),l=setTimeout(()=>{l=void 0,w()},n)})())}},w=()=>{if(p)return;const o={socket:void 0,authoritative:!1};o.socket=n({url:t.url,authorization:t.authorization,handlers:{opened:()=>{p||d!==o||(o.socket.send(JSON.stringify(i)),g(),c=setInterval(()=>{if(!p&&d===o)try{o.socket.send(JSON.stringify({v:1,type:"ping",sentAt:(new Date).toISOString()}))}catch{}},2e4))},message:n=>{p||d!==o||((n,i)=>{const o=function(e){try{const t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return;return t}catch{return}}(i);if(!o)return void e.output.warn("Ignoring an unreadable event frame.");if("pong"===o.type)return;if("streams.hello"===o.type)return Bu.safeParse(o.payload).success?(n.authoritative=!0,u=!0,void s.reset()):void y(z("The Control Plane sent an incompatible session stream handshake.",{url:t.url}));if(!n.authoritative)return;const a="string"==typeof o.id?o.id:void 0;if(a){if(r.has(a))return;if(r.add(a),r.size>1e4){const e=r.values().next().value;void 0!==e&&r.delete(e)}}e.output.streams.stdout(`${JSON.stringify(o)}\n`)})(o,n)},closed:e=>{p||d!==o||(4003!==e.code?1002!==e.code?o.authoritative?b(o,{warning:`Event stream closed (code ${eg(e)}).`}):b(o,{error:h(`The Control Plane closed the event stream before the session-stream handshake (code ${eg(e)}).`,{url:t.url,closeCode:e.code})}):b(o,{error:z("The Control Plane closed the event stream because the protocol is incompatible.",{url:t.url,closeCode:e.code})}):b(o,{error:new m("CLI_EVENT_STREAM_SCOPE_NOT_VISIBLE","The requested event scope is not visible to this account.",6,{url:t.url,closeCode:e.code})}))},failed:e=>{p||d!==o||b(o,u?{warning:`Event stream error: ${e.message}`}:{error:h(`Could not open the event stream at ${t.url}: ${e.message}`,{url:t.url})})},rejected:e=>{if(p||d!==o)return;const n=function(e,t){return 401===e?(t.onUnauthorized?.(),{fatal:!0,error:new m("CLI_EVENT_STREAM_UNAUTHORIZED","The Control Plane rejected the event stream credential (HTTP 401). Run `thctl login` to authorize this CLI again.",5,{url:t.url,status:e})}):403===e?{fatal:!0,error:new m("CLI_EVENT_STREAM_FORBIDDEN","The Control Plane refused the event stream (HTTP 403).",6,{url:t.url,status:e})}:{fatal:!1,error:I(e,"CLI_EVENT_STREAM_UPGRADE_FAILED",`The Control Plane refused the event stream (HTTP ${e}).`,{url:t.url})}}(e,t);!n.fatal&&u?b(o,{warning:`${n.error.message} Retrying.`}):b(o,{error:n.error})}}}),d=o};e.signal.addEventListener("abort",f,{once:!0}),w()})}function ng(e){const t=e.args.instanceId?.trim();if(!t)throw new m("CLI_ARGUMENT_MISSING","Missing required argument <instanceId>.",2);return t}const ig=[{key:"id",header:"instance"},{key:"name",header:"name",width:24},{key:"status",header:"status"},{key:"health",header:"health"},{key:"connectionStatus",header:"connection"},{key:"nodeId",header:"node"},{key:"runtime.type",header:"runtime"},{key:"workspace.status",header:"workspace"},{key:"aiSessions.runningCount",header:"running"}];function og(e){return async(t,n)=>{const i=ng(n),o=await xp(t),a=await Cp(t,`instance ${e} ${i}`,()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(i)}/${e}`,body:{}}),()=>o.client.resources.instanceAction(i,e));if(a)return{data:a,columns:[{key:"id",header:"instance"},{key:"status",header:"status"}],message:`Instance \`${i}\` is ${a.status}.`}}}const ag=og("start"),rg=og("stop"),sg=og("restart"),dg=[{key:"id",header:"instance"},{key:"name",header:"name",width:24},{key:"nodeId",header:"node"},{key:"status",header:"status"},{key:"startOutcome.status",header:"start"}],cg=[{key:"instanceId",header:"instance"},{key:"containerDeleted",header:"container"},{key:"completed",header:"completed"}],lg=[{key:"id",header:"model"},{key:"model.name",header:"name",width:24},{key:"model.model",header:"model id",width:30},{key:"model.app",header:"app"},{key:"model.protocols",header:"protocols",width:20},{key:"model.enabled",header:"enabled"},{key:"locations",header:"locations",width:30}],mg=[{key:"id",header:"node"},{key:"name",header:"name",width:24},{key:"status",header:"status"},{key:"health",header:"health"},{key:"connectionMode",header:"connection"},{key:"lastSeenAt",header:"last seen"},{key:"capabilities",header:"capabilities",width:30}];function ug(e){return e.map(e=>({...e,capabilities:Array.isArray(e.capabilities)?e.capabilities.join(","):"",lastSeenAt:"string"==typeof e.lastSeenAt?e.lastSeenAt:""}))}function pg(e,t){if("string"!=typeof e||!e.trim())throw new m("CLI_ARGUMENT_MISSING",`Missing required argument <${t}>.`,2);return e.trim()}function gg(e,t){return`<!doctype html><html lang="en"><head><meta charset="utf-8"><title>${e}</title></head><body style="font-family:system-ui,sans-serif;margin:0;display:grid;place-items:center;min-height:100vh;background:#0b0b0c;color:#f5f5f5"><main style="max-width:32rem;padding:2rem;text-align:center"><h1 style="font-size:1.1rem;font-weight:500">${e}</h1><p style="color:#a1a1aa;font-size:.9rem">${t}</p></main></body></html>`}function zg(e){const t="darwin"===process.platform?"open":"win32"===process.platform?"cmd":"xdg-open",n="win32"===process.platform?["/c","start","",e]:[e];return new Promise((e,i)=>{const o=s.spawn(t,n,{stdio:"ignore",detached:"win32"!==process.platform});o.once("error",i),o.once("spawn",()=>{o.unref(),e()})})}async function hg(e){const t=e.store.select(e.profileLabel);return tp({store:e.store,profile:t,fetchImpl:e.fetchImpl,withSession:!1})}async function yg(e,t,n){e.store.secrets().write(e.profile.label,{sessionToken:t.sessionToken,sessionId:t.session.id,expiresAt:t.session.expiresAt,mode:"authorization",savedAt:(new Date).toISOString()}),e.store.save({...e.profile,loginMode:n,lastUsedAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()})}async function fg(e){const{store:t,fetchImpl:n,output:i}=e,o=await hg({store:t,profileLabel:e.profileLabel,fetchImpl:n}),r=await async function(){let e;for(let t=0;t<5;t+=1){const t=c.createServer();try{await new Promise((e,n)=>{t.once("error",n),t.listen(0,"127.0.0.1",()=>{t.off("error",n),e()})})}catch(n){e=n,t.close();continue}const n=t.address();if(!n||"string"==typeof n){t.close(),e=new Error("Loopback callback did not expose a TCP port.");continue}let i=()=>{},o=()=>{};const a=new Promise((e,t)=>{i=e,o=t});a.catch(()=>{});let r=!1;return t.on("request",(e,t)=>{const a=new URL(e.url||"/",`http://127.0.0.1:${n.port}`);if("/callback"!==a.pathname)return t.writeHead(404,{"content-type":"text/plain; charset=utf-8"}),void t.end("Not found");const s=a.searchParams.get("code")||"",d=a.searchParams.get("state")||"",c=a.searchParams.get("error")||"";return t.writeHead(200,{"content-type":"text/html; charset=utf-8"}),c?(t.end(gg("Authorization failed",`The Control Plane reported ${c}. Return to the terminal and try again.`)),void(r||(r=!0,o(new m("CLI_AUTHORIZATION_FAILED",`The Control Plane rejected the CLI authorization: ${c}.`,5))))):s&&d?(t.end(gg("Authorization complete","You can close this tab and return to the terminal.")),void(r||(r=!0,i({code:s,state:d})))):(t.end(gg("Authorization failed","The callback did not include a usable authorization code. Return to the terminal and try again.")),void(r||(r=!0,o(z("The loopback callback did not include a code and state.")))))}),{port:n.port,redirectUri:`http://127.0.0.1:${n.port}/callback`,waitForCode:a,close:()=>{r||(r=!0,o(new m("CLI_LOGIN_CANCELLED","The CLI login was cancelled.",15))),t.close(),t.closeAllConnections?.()}}}throw new m("CLI_LOOPBACK_UNAVAILABLE",`Could not bind a local callback port (${e instanceof Error?e.message:String(e)}). Retry with \`thctl login --device\` to authorize from another device.`,10)}(),{verifier:s,challenge:d}=function(){const e=a.randomBytes(32).toString("base64url");return{verifier:e,challenge:a.createHash("sha256").update(e).digest("base64url")}}(),u=a.randomBytes(24).toString("base64url");try{const t=await o.client.auth.cliAuthorize({mode:"browser",client:Gu(),redirectUri:r.redirectUri,state:u,codeChallenge:d,codeChallengeMethod:"S256"});if("browser"!==t.mode)throw z("The Control Plane returned a device authorization for a browser request.");i.message(`Open this URL to approve the CLI session:\n${t.verificationUri}`);try{await(e.openUrl??zg)(t.verificationUri)}catch{i.warn("Could not open a browser automatically; open the URL above manually.")}const n=e.loginTimeoutMs??6e5,a=await function(e,t){return new Promise((n,i)=>{const o=setTimeout(()=>i(new m("CLI_LOGIN_TIMEOUT","Timed out waiting for the browser authorization.",15)),t);o.unref?.(),e.then(e=>{clearTimeout(o),n(e)},e=>{clearTimeout(o),i(e)})})}(r.waitForCode,n);if(a.state!==u)throw new m("CLI_LOGIN_STATE_MISMATCH","The browser callback state did not match this login attempt. The authorization code was discarded.",l);const c=await o.client.auth.cliToken({grantType:"authorization_code",requestId:t.requestId,code:a.code,codeVerifier:s});return await yg(o,c,"browser"),{profile:o.profile,session:c.session}}finally{r.close()}}function Ig(e){const t=(e.args??[]).map(e=>e.required?`<${e.name}>`:`[${e.name}]`);return["thctl",e.id,...t].join(" ")}function bg(e){return{id:e.id,group:e.group,summary:e.summary,stage:e.stage,implemented:Boolean(e.handler),write:Boolean(e.write),usage:Ig(e),arguments:(e.args??[]).map(e=>({...e,required:Boolean(e.required),variadic:Boolean(e.variadic)})),options:e.options??[],examples:e.examples??[],inputSchema:o.z.toJSONSchema(e.input,{io:"input",unrepresentable:"any"}),outputSchema:o.z.toJSONSchema(e.output,{io:"output",unrepresentable:"any"}),outputPinned:!1!==e.outputPinned,outputMode:e.outputMode??"document"}}function wg(e){const t=[];if(t.push(`### \`${e.id}\``,"",e.summary,""),t.push(`- stage: ${e.stage}`,"- implemented: "+(e.implemented?"yes":"no"),"- write: "+(e.write?"yes":"no"),`- usage: \`${e.usage}\``,""),e.arguments.length){t.push("| argument | required | description |","| --- | --- | --- |");for(const n of e.arguments)t.push(`| \`${n.name}\` | ${n.required?"yes":"no"} | ${n.description} |`);t.push("")}if(e.options.length){t.push("| option | description |","| --- | --- |");for(const n of e.options)t.push(`| \`${n.flags}\` | ${n.description} |`);t.push("")}return e.examples.length&&t.push("Examples:","",...e.examples.map(e=>`- \`${e}\``),""),t.push("Input JSON Schema:","","```json",JSON.stringify(e.inputSchema,null,2),"```",""),t.push("Output JSON Schema:","","```json",JSON.stringify(e.outputSchema,null,2),"```",""),t.join("\n")}const vg=[{key:"id",header:"story"},{key:"title",header:"title",width:30},{key:"ownerNodeId",header:"node"},{key:"documents",header:"docs"},{key:"archivedAt",header:"archived"},{key:"updatedAt",header:"updated"}],xg=[{key:"id",header:"run"},{key:"eventType",header:"event"},{key:"status",header:"status"},{key:"scheduledFor",header:"scheduled"},{key:"aiSessionId",header:"session"},{key:"startedAt",header:"started"}];function Ag(e,t){return e.output.json?{data:t}:{data:Sg([t])[0],columns:vg}}function Sg(e){return e.map(e=>({...e,documents:Array.isArray(e.documents)?`${e.documents.length}`:"0",archivedAt:"string"==typeof e.archivedAt?e.archivedAt:""}))}async function Cg(e,t,n){if(n)return n;const i=await e.client.stories.list(),o=i.stories.find(e=>e.id===t);if(!o)throw new m("CLI_STORY_NOT_FOUND",`No story \`${t}\` is visible in the authoritative directory${i.unavailableNodeIds.length?` (unavailable nodes: ${i.unavailableNodeIds.join(", ")})`:""}.`,7,{storyId:t,unavailableNodeIds:i.unavailableNodeIds});return o.ownerNodeId}function kg(e){return async(t,n)=>{const i=kp(n,"storyId"),o=await xp(t),a=await Cg(o,i,jp(n,"node"));if("remove"===e){const e=await Cp(t,"story remove",()=>({method:"DELETE",path:`/api/stories/${encodeURIComponent(i)}?nodeId=${encodeURIComponent(a)}`}),()=>o.client.stories.remove(i,a));if(!e)return;if(!e.deleted)throw new m("CLI_STORY_NOT_REMOVED",`Story \`${i}\` was not removed.`,8,{storyId:i});return{data:e,message:`Story \`${i}\` removed.`}}const r=await Cp(t,`story ${e}`,()=>({method:"POST",path:`/api/stories/${encodeURIComponent(i)}/${e}`,body:{nodeId:a}}),()=>"archive"===e?o.client.stories.archive(i,a):o.client.stories.restore(i,a));if(r)return{...Ag(t,r),message:`Story \`${i}\` ${"archive"===e?"archived":"restored"}.`}}}const jg=kg("archive"),Rg=kg("restore"),Tg=kg("remove"),Eg=[{key:"automation.id",header:"automation"},{key:"automation.enabled",header:"enabled"},{key:"effectiveStatus",header:"status"},{key:"automation.actionId",header:"action"},{key:"nextRunAt",header:"next run"}];function Pg(e,t){return e.output.json?{data:t}:{data:t,columns:Eg}}const Og=Nc.omit({storyId:!0});function $g(e){return async(t,n)=>{const i=kp(n,"storyId"),o=kp(n,"automationId"),a=await xp(t),r=await Cg(a,i,jp(n,"node")),s=await Cp(t,e?"story automation enable":"story automation disable",()=>({method:"POST",path:`/api/stories/${encodeURIComponent(i)}/automations/${encodeURIComponent(o)}/${e?"enable":"disable"}`,body:{nodeId:r}}),()=>a.client.stories.setAutomationEnabled(i,o,r,e));if(s)return{data:s,message:`Automation \`${o}\` ${e?"enabled":"disabled"}.`}}}const Ng=$g(!0),_g=$g(!1);function Ug(e,t){const n=Number(e);if(!Number.isInteger(n)||n<0)throw u("CLI_INVALID_OPTION",`--${t} must be a non-negative integer.`,{option:t,value:e});return n}const qg=[{key:"configHash",header:"trigger"},{key:"config.name",header:"name",width:24},{key:"config.source.type",header:"source"},{key:"deploymentCount",header:"deployments"},{key:"enabledCount",header:"enabled"},{key:"runningCount",header:"running"},{key:"errorCount",header:"errors"}];function Lg(e){return{...e,deploymentCount:Array.isArray(e.deployments)?e.deployments.length:0}}const Dg={modelRelay:{name:"modelRelay",check:function(e){return function(e){return mr(e).managedModels.modelRelay}(e).protocols.length>0}},managedGitCredentials:{name:"managedGitCredentials",check:function(e){return mr(e).managedGitCredentials.registry}},localFolderPlaces:{name:"localFolderPlaces",check:function(e){return!0===lr.safeParse(e).data?.folderPlaces}},localFolderNameUpdate:{name:"localFolderNameUpdate",check:function(e){return!0===lr.safeParse(e).data?.localFolderNameUpdate}}};function Mg(e){const t=e?.capabilities?.agent;if(t&&"object"==typeof t&&!Array.isArray(t))return t.capabilities}async function Bg(e,t,n){return{nodeId:t,capabilities:Mg(await e.resources.node(t,n))}}function Hg(e,t,n){if(t&&!n.check(t.capabilities))throw p(e,n.name,{nodeId:t.nodeId,scope:"node"})}async function Fg(e,t,n,i,o){const a=(await e.resources.instanceBoard(o)).find(e=>e.id===t);a&&Hg(n,await Bg(e,a.nodeId,o),i)}const Vg={userManagement:{name:"userManagement",check:function(e){return!0===Fi(e)?.userManagement.users}},customRoles:{name:"customRoles",check:function(e){return!0===Fi(e)?.authorization.customRoles}},externalIdentityLogin:{name:"externalIdentityLogin",check:function(e){return void 0!==Fi(e)?.authentication.externalIdentity}}},Gg=[{key:"id",header:"user"},{key:"displayName",header:"name",width:24},{key:"primaryUsername",header:"username"},{key:"status",header:"status"},{key:"updatedAt",header:"updated"}],Yg=[{key:"id",header:"session"},{key:"clientType",header:"client"},{key:"createdAt",header:"created"},{key:"expiresAt",header:"expires"},{key:"lastUsedAt",header:"last used"}],Wg=[{key:"id",header:"role"},{key:"name",header:"name",width:24},{key:"builtin",header:"builtin"},{key:"updatedAt",header:"updated"}],Kg=[{key:"id",header:"permission"},{key:"description",header:"description",width:48}],Jg=[{key:"id",header:"provider"},{key:"name",header:"name",width:24},{key:"kind",header:"kind"},{key:"enabled",header:"enabled"}],Zg=[{key:"id",header:"approval"},{key:"displayName",header:"name",width:24},{key:"email",header:"email",width:30},{key:"status",header:"status"}];async function Qg(e,t,n){const i=await xp(e);return function(e,t,n){if(!n.check(t.payload.capabilities))throw p(e,n.name,{origin:t.origin,protocolVersion:t.payload.protocolVersion,scope:"control-plane"})}(t,i.identity,n),i}const Xg=o.z.looseObject({}),ez=o.z.object({}).strict();function tz(e){return o.z.object(e).strict()}function nz(e,t,n,i={}){return{name:e,summary:t,leaves:n,...i.flat?{flat:!0}:{}}}const iz=[{key:"id",header:"node"},{key:"name",header:"name",width:24},{key:"status",header:"status"},{key:"health",header:"health"},{key:"connectionMode",header:"connection"}],oz=[{key:"id",header:"folder"},{key:"name",header:"name",width:24},{key:"path",header:"path",width:48},{key:"updatedAt",header:"updated"}],az=[{key:"id",header:"runtime"},{key:"name",header:"name",width:24},{key:"type",header:"type"},{key:"status",header:"status"},{key:"version",header:"version"}],rz=[{key:"reference",header:"reference",width:48},{key:"id",header:"image id",width:24},{key:"sizeBytes",header:"size"},{key:"createdAt",header:"created"}],sz=[{key:"id",header:"job"},{key:"status",header:"status"},{key:"fromVersion",header:"from"},{key:"toVersion",header:"to"},{key:"updatedAt",header:"updated"}],dz=[{key:"keyId",header:"key id"},{key:"status",header:"status"},{key:"expiresAt",header:"expires"}],cz=[{key:"id",header:"connection"},{key:"controlPlaneName",header:"control plane",width:24},{key:"controlPlaneUrl",header:"url",width:40},{key:"status",header:"status"}];function lz(e){return kp(e,"nodeId")}async function mz(e,t,n,i){const o=await xp(e);if(i.length){const a=await Bg(o.client,t,e.signal);for(const e of i)Hg(n,a,e)}return o}const uz=new Set(["succeeded","degraded","failed"]),pz={folders:o.z.array(Ts),folderTree:o.z.array($d),folderPlaces:o.z.array(Nd),runtimes:o.z.array(Id),dockerImages:o.z.array(o.z.looseObject({reference:o.z.string().optional(),id:o.z.string().optional()})),imageOptions:o.z.array(Od),externalListener:vd,modelRelay:Sd,updateJobs:o.z.array(xs),pairingInvite:kd,pairings:o.z.array(jd),connections:o.z.array(Rd),connectionCreate:Td,nodeRemove:Ed};o.z.looseObject({id:o.z.string(),joinToken:o.z.string().optional(),expiresAt:o.z.string().optional()}),o.z.looseObject({node:o.z.looseObject({id:o.z.string()}).optional()});const gz={name:"nodeId",description:"Node ID",required:!0},zz={flags:"--config <file>",description:"Request body as a JSON file (Control Plane wire body)"},hz=[{id:"node create",group:"node",name:"create",stage:"B",write:!0,summary:"Create a node record from a JSON request body",options:[zz],input:tz({config:o.z.string()}),output:pz.nodeRemove,outputPinned:!1,handler:async function(e,t){const n=$p(t,"Node create request"),i=await xp(e),o=await Cp(e,"node create",()=>({method:"POST",path:"/api/nodes",body:n}),()=>i.client.nodeAdmin.createNode(n));if(o)return{data:o,columns:iz,message:`Node \`${o.id}\` created.`}}},{id:"node remove",group:"node",name:"remove",stage:"B",write:!0,summary:"Remove a node and revoke its proxied pairing",args:[gz],options:[{flags:"--force",description:"Force removal when the node is still reachable"}],input:tz({nodeId:o.z.string(),force:o.z.boolean().optional()}),output:pz.nodeRemove,handler:async function(e,t){const n=lz(t),i=!0===t.options.force,o=await xp(e),a=await Cp(e,"node remove",()=>({method:"DELETE",path:`/api/nodes/${encodeURIComponent(n)}${i?"?force=true":""}`}),()=>o.client.nodeAdmin.removeNode(n,i?{force:!0}:{}));if(a)return{data:a,message:`Node \`${n}\` removed (revoke: ${a.revoke.mode}${a.revoke.orphanRisk?", orphan risk":""}).`}}},{id:"node check",group:"node",name:"check",stage:"B",summary:"Probe a node's agent and report its health",args:[gz],input:tz({nodeId:o.z.string()}),output:o.z.looseObject({id:o.z.string(),status:o.z.string(),checkedAt:o.z.string()}),outputPinned:!1,handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.checkNode(n);return e.output.json?{data:o}:{data:o,columns:[{key:"id",header:"node"},{key:"status",header:"status"},{key:"checkedAt",header:"checked"}]}}},{id:"node sync-local",group:"node",name:"sync-local",stage:"B",write:!0,summary:"Register or refresh the local node connection",input:ez,output:Xg,outputPinned:!1,handler:async function(e){const t=await xp(e),n=await Cp(e,"node sync-local",()=>({method:"POST",path:"/api/nodes/local/sync"}),()=>t.client.nodeAdmin.syncLocalNode());if(n)return{data:n,columns:iz,message:`Local node \`${n.id}\` synced.`}}},{id:"node folders list",group:"node",name:"folders list",stage:"B",summary:"List the local folders a node exposes",args:[gz],input:tz({nodeId:o.z.string()}),output:o.z.array(Ts),handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.listFolders(n,e.signal);return e.output.json?{data:o}:{data:o,columns:oz,message:o.length?void 0:"No folders matched."}}},{id:"node folders tree",group:"node",name:"folders tree",stage:"B",summary:"Show a node's local folder tree",args:[gz],options:[{flags:"--path <path>",description:"Subtree root inside the node filesystem"},{flags:"--depth <depth>",description:"Maximum tree depth"}],input:tz({nodeId:o.z.string(),path:o.z.string().optional(),depth:o.z.string().optional()}),output:o.z.array($d),handler:async function(e,t){const n=lz(t),i=jp(t,"path"),o=jp(t,"depth"),a=await xp(e),r=await a.client.nodeAdmin.listFolderTree(n,{...i?{path:i}:{},...o?{depth:Number(o)}:{}},e.signal);return e.output.json?{data:r}:{data:r,columns:[{key:"path",header:"path",width:60},{key:"name",header:"name",width:24},{key:"type",header:"type"}]}}},{id:"node folders add",group:"node",name:"folders add",stage:"B",write:!0,summary:"Register a local folder on a node",args:[gz],options:[zz],input:tz({nodeId:o.z.string(),config:o.z.string()}),output:Ts,handler:async function(e,t){const n=lz(t),i=$p(t,"Folder create request"),o=await mz(e,n,"node folders add",[Dg.localFolderPlaces]),a=await Cp(e,"node folders add",()=>({method:"POST",path:`/api/nodes/${encodeURIComponent(n)}/local-folders`,body:i}),()=>o.client.nodeAdmin.createFolder(n,i));if(a)return{data:a,columns:oz,message:`Folder \`${a.id}\` added.`}}},{id:"node folders update",group:"node",name:"folders update",stage:"B",write:!0,summary:"Update a node local folder",args:[gz,{name:"folderId",description:"Local folder ID",required:!0}],options:[zz],input:tz({nodeId:o.z.string(),folderId:o.z.string(),config:o.z.string()}),output:Ts,handler:async function(e,t){const n=lz(t),i=kp(t,"folderId"),o=$p(t,"Folder update request"),a=await mz(e,n,"node folders update",[Dg.localFolderPlaces,Dg.localFolderNameUpdate]),r=await Cp(e,"node folders update",()=>({method:"PATCH",path:`/api/nodes/${encodeURIComponent(n)}/local-folders/${encodeURIComponent(i)}`,body:o}),()=>a.client.nodeAdmin.updateFolder(n,i,o));if(r)return{data:r,columns:oz,message:`Folder \`${i}\` updated.`}}},{id:"node folders remove",group:"node",name:"folders remove",stage:"B",write:!0,summary:"Remove a node local folder",args:[gz,{name:"folderId",description:"Local folder ID",required:!0}],input:tz({nodeId:o.z.string(),folderId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),outputPinned:!1,handler:async function(e,t){const n=lz(t),i=kp(t,"folderId"),o=await mz(e,n,"node folders remove",[Dg.localFolderPlaces]),a=await Cp(e,"node folders remove",()=>({method:"DELETE",path:`/api/nodes/${encodeURIComponent(n)}/local-folders/${encodeURIComponent(i)}`}),()=>o.client.nodeAdmin.removeFolder(n,i));if(a)return{data:a,message:`Folder \`${i}\` removed.`}}},{id:"node runtimes list",group:"node",name:"runtimes list",stage:"B",summary:"List the container runtimes a node exposes",args:[gz],input:tz({nodeId:o.z.string()}),output:o.z.array(Id),handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.listRuntimes(n,e.signal);return e.output.json?{data:o}:{data:o,columns:az,message:o.length?void 0:"No runtimes matched."}}},{id:"node runtimes create",group:"node",name:"runtimes create",stage:"B",write:!0,summary:"Create a runtime on a node",args:[gz],options:[zz],input:tz({nodeId:o.z.string(),config:o.z.string()}),output:Id,handler:async function(e,t){const n=lz(t),i=$p(t,"Runtime create request"),o=await xp(e),a=await Cp(e,"node runtimes create",()=>({method:"POST",path:`/api/nodes/${encodeURIComponent(n)}/runtimes`,body:i}),()=>o.client.nodeAdmin.createRuntime(n,i));if(a)return{data:a,columns:az,message:`Runtime \`${a.id}\` created.`}}},{id:"node runtimes update",group:"node",name:"runtimes update",stage:"B",write:!0,summary:"Update a node runtime",args:[gz,{name:"runtimeId",description:"Runtime ID",required:!0}],options:[zz],input:tz({nodeId:o.z.string(),runtimeId:o.z.string(),config:o.z.string()}),output:Id,handler:async function(e,t){const n=lz(t),i=kp(t,"runtimeId"),o=$p(t,"Runtime update request"),a=await xp(e),r=await Cp(e,"node runtimes update",()=>({method:"PATCH",path:`/api/nodes/${encodeURIComponent(n)}/runtimes/${encodeURIComponent(i)}`,body:o}),()=>a.client.nodeAdmin.updateRuntime(n,i,o));if(r)return{data:r,columns:az,message:`Runtime \`${i}\` updated.`}}},{id:"node runtimes remove",group:"node",name:"runtimes remove",stage:"B",write:!0,summary:"Remove a node runtime",args:[gz,{name:"runtimeId",description:"Runtime ID",required:!0}],input:tz({nodeId:o.z.string(),runtimeId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),outputPinned:!1,handler:async function(e,t){const n=lz(t),i=kp(t,"runtimeId"),o=await xp(e),a=await Cp(e,"node runtimes remove",()=>({method:"DELETE",path:`/api/nodes/${encodeURIComponent(n)}/runtimes/${encodeURIComponent(i)}`}),()=>o.client.nodeAdmin.removeRuntime(n,i));if(a)return{data:a,message:`Runtime \`${i}\` removed.`}}},{id:"node runtimes check",group:"node",name:"runtimes check",stage:"B",summary:"Probe a node runtime and report its health",args:[gz,{name:"runtimeId",description:"Runtime ID",required:!0}],input:tz({nodeId:o.z.string(),runtimeId:o.z.string()}),output:Id,outputPinned:!1,handler:async function(e,t){const n=lz(t),i=kp(t,"runtimeId"),o=await xp(e),a=await o.client.nodeAdmin.checkRuntime(n,i);return e.output.json?{data:a}:{data:a,columns:az}}},{id:"node docker images",group:"node",name:"docker images",stage:"B",summary:"List docker images available on a node",args:[gz],input:tz({nodeId:o.z.string()}),output:pz.dockerImages,outputPinned:!1,handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.listDockerImages(n,e.signal);return e.output.json?{data:o}:{data:o,columns:rz,message:o.length?void 0:"No docker images matched."}}},{id:"node image-options",group:"node",name:"image-options",stage:"B",summary:"List image options a node can provision",args:[gz],input:tz({nodeId:o.z.string()}),output:pz.imageOptions,handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.imageOptions(n,e.signal);return e.output.json?{data:o}:{data:o,columns:[{key:"id",header:"image"},{key:"name",header:"name",width:24},{key:"reference",header:"reference",width:40}]}}},{id:"node settings external-listener show",group:"node",name:"settings external-listener show",stage:"B",summary:"Show a node's external listener settings",args:[gz],input:tz({nodeId:o.z.string()}),output:pz.externalListener,handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.getExternalListener(n,e.signal);return e.output.json?{data:o}:{data:o,columns:[{key:"bindScope",header:"bind scope"},{key:"port",header:"port"},{key:"enabled",header:"enabled"}]}}},{id:"node settings external-listener set",group:"node",name:"settings external-listener set",stage:"B",write:!0,summary:"Update a node's external listener settings",args:[gz],options:[zz],input:tz({nodeId:o.z.string(),config:o.z.string()}),output:pz.externalListener,handler:async function(e,t){const n=lz(t),i=$p(t,"External listener update request"),o=await xp(e),a=await Cp(e,"node settings external-listener set",()=>({method:"PATCH",path:`/api/nodes/${encodeURIComponent(n)}/settings/external-listener`,body:i}),()=>o.client.nodeAdmin.updateExternalListener(n,i));if(a)return{data:a,message:`External listener for \`${n}\` updated.`}}},{id:"node settings model-relay show",group:"node",name:"settings model-relay show",stage:"B",summary:"Show a node's model relay settings",args:[gz],input:tz({nodeId:o.z.string()}),output:pz.modelRelay,handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.getModelRelay(n,e.signal);return e.output.json?{data:o}:{data:o,columns:[{key:"enabled",header:"enabled"},{key:"source",header:"source"},{key:"endpoint",header:"endpoint",width:40}]}}},{id:"node settings model-relay set",group:"node",name:"settings model-relay set",stage:"B",write:!0,summary:"Update a node's model relay settings",args:[gz],options:[zz],input:tz({nodeId:o.z.string(),config:o.z.string()}),output:pz.modelRelay,handler:async function(e,t){const n=lz(t),i=$p(t,"Model relay update request"),o=await mz(e,n,"node settings model-relay set",[Dg.modelRelay]),a=await Cp(e,"node settings model-relay set",()=>({method:"PATCH",path:`/api/nodes/${encodeURIComponent(n)}/settings/model-relay`,body:i}),()=>o.client.nodeAdmin.updateModelRelay(n,i));if(a)return{data:a,message:`Model relay for \`${n}\` updated.`}}},{id:"node updates jobs",group:"node",name:"updates jobs",stage:"B",summary:"List node update jobs",args:[gz],input:tz({nodeId:o.z.string()}),output:o.z.array(xs),handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.updateJobs(n,e.signal);return e.output.json?{data:o}:{data:o,columns:sz,message:o.length?void 0:"No update jobs matched."}}},{id:"node updates check",group:"node",name:"updates check",stage:"B",summary:"Check whether a node update is available",args:[gz],options:[{flags:"--config <file>",description:"Update check request JSON (optional)"}],input:tz({nodeId:o.z.string(),config:o.z.string().optional()}),output:vs,handler:async function(e,t){const n=lz(t),i=jp(t,"config")?$p(t,"Update check request"):{},o=await xp(e),a=await o.client.nodeAdmin.checkUpdate(n,i);return e.output.json?{data:a}:{data:a,columns:[{key:"availableVersion",header:"available"},{key:"channel",header:"channel"},{key:"currentVersion",header:"current"}]}}},{id:"node updates apply",group:"node",name:"updates apply",stage:"B",write:!0,summary:"Apply a node update and optionally wait for it to finish",args:[gz],options:[zz,{flags:"--wait",description:"Poll the update job until it reaches a terminal state"}],input:tz({nodeId:o.z.string(),config:o.z.string(),wait:o.z.boolean().optional()}),output:xs,handler:async function(e,t){const n=lz(t),i=$p(t,"Update apply request"),o=!0===t.options.wait,a=await xp(e),r=await Cp(e,"node updates apply",()=>({method:"POST",path:`/api/nodes/${encodeURIComponent(n)}/updates/apply`,body:i}),()=>a.client.nodeAdmin.applyUpdate(n,i));if(!r)return;if(!o)return{data:r,columns:sz,message:`Update job \`${r.id}\` queued (status ${r.status}).`};let s=r;for(;;){if(uz.has(s.status))return{data:s,columns:sz,message:`Update job \`${s.id}\` finished with status ${s.status}.`};if(await e.sleep(2e3),e.signal.aborted)throw new m("CLI_CANCELLED","Stopped waiting for the update job; the job keeps running on the server.",15,{jobId:s.id});s=(await a.client.nodeAdmin.updateJobs(n,e.signal)).find(e=>e.id===r.id)??s}}},{id:"node pairing invite",group:"node",name:"pairing invite",stage:"B",write:!0,summary:"Create a pairing invite token for a node",args:[gz],options:[{flags:"--config <file>",description:"Pairing invite request JSON (optional)"}],input:tz({nodeId:o.z.string(),config:o.z.string().optional()}),output:pz.pairingInvite,handler:async function(e,t){const n=lz(t),i=jp(t,"config")?$p(t,"Pairing invite request"):{},o=await xp(e),a=await Cp(e,"node pairing invite",()=>({method:"POST",path:`/api/nodes/${encodeURIComponent(n)}/pairing/invites`,body:i}),()=>o.client.nodeAdmin.createPairingInvite(n,i));if(a)return hp(a.joinToken),{data:a,message:`Pairing invite for \`${n}\` created (expires ${a.expiresAt}).`}}},{id:"node pairings list",group:"node",name:"pairings list",stage:"B",summary:"List the control plane pairings registered on a node",args:[gz],input:tz({nodeId:o.z.string()}),output:pz.pairings,handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.listControlPlanePairings(n,e.signal);return e.output.json?{data:o}:{data:o,columns:dz,message:o.length?void 0:"No pairings matched."}}},{id:"node pairings remove",group:"node",name:"pairings remove",stage:"B",write:!0,summary:"Revoke a control plane pairing on a node",args:[gz,{name:"keyId",description:"Pairing key ID",required:!0}],input:tz({nodeId:o.z.string(),keyId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),outputPinned:!1,handler:async function(e,t){const n=lz(t),i=kp(t,"keyId"),o=await xp(e),a=await Cp(e,"node pairings remove",()=>({method:"DELETE",path:`/api/nodes/${encodeURIComponent(n)}/control-plane-pairings/${encodeURIComponent(i)}`}),()=>o.client.nodeAdmin.removeControlPlanePairing(n,i));if(a)return{data:a,message:`Pairing \`${i}\` removed from \`${n}\`.`}}},{id:"node connections list",group:"node",name:"connections list",stage:"B",summary:"List the control plane connections configured on a node",args:[gz],input:tz({nodeId:o.z.string()}),output:pz.connections,handler:async function(e,t){const n=lz(t),i=await xp(e),o=await i.client.nodeAdmin.listControlPlaneConnections(n,e.signal);return e.output.json?{data:o}:{data:o,columns:cz,message:o.length?void 0:"No connections matched."}}},{id:"node connections create",group:"node",name:"connections create",stage:"B",write:!0,summary:"Create a control plane connection on a node",args:[gz],options:[zz],input:tz({nodeId:o.z.string(),config:o.z.string()}),output:pz.connectionCreate,handler:async function(e,t){const n=lz(t),i=$p(t,"Connection create request"),o=await xp(e),a=await Cp(e,"node connections create",()=>({method:"POST",path:`/api/nodes/${encodeURIComponent(n)}/control-plane-connections`,body:i}),()=>o.client.nodeAdmin.createControlPlaneConnection(n,i));if(a)return{data:a,columns:cz,message:`Connection created for \`${n}\`.`}}},{id:"node connections remove",group:"node",name:"connections remove",stage:"B",write:!0,summary:"Remove a control plane connection from a node",args:[gz,{name:"connectionId",description:"Connection ID",required:!0}],input:tz({nodeId:o.z.string(),connectionId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),outputPinned:!1,handler:async function(e,t){const n=lz(t),i=kp(t,"connectionId"),o=await xp(e),a=await Cp(e,"node connections remove",()=>({method:"DELETE",path:`/api/nodes/${encodeURIComponent(n)}/control-plane-connections/${encodeURIComponent(i)}`}),()=>o.client.nodeAdmin.removeControlPlaneConnection(n,i));if(a)return{data:a,message:`Connection \`${i}\` removed from \`${n}\`.`}}}],yz=nz("node-join","Join a node to the Control Plane",[{id:"node-join invite",group:"node-join",name:"invite",stage:"B",write:!0,summary:"Create a node join invite token",options:[{flags:"--config <file>",description:"Join invite request JSON (optional)"}],input:tz({config:o.z.string().optional()}),output:o.z.looseObject({id:o.z.string(),expiresAt:o.z.string(),joinToken:o.z.string().optional()}),handler:async function(e,t){const n=jp(t,"config")?$p(t,"Join invite request"):{},i=await xp(e),o=await Cp(e,"node-join invite",()=>({method:"POST",path:"/api/node-join/invites",body:n}),()=>i.client.nodeAdmin.createJoinInvite(n));if(o)return hp(o.joinToken),{data:o,columns:[{key:"id",header:"invite"},{key:"expiresAt",header:"expires"}],message:`Join invite \`${o.id}\` created.`}}},{id:"node-join status",group:"node-join",name:"status",stage:"B",summary:"Show whether a node join invite was completed",args:[{name:"inviteId",description:"Join invite ID",required:!0}],input:tz({inviteId:o.z.string()}),output:hd,handler:async function(e,t){const n=kp(t,"inviteId"),i=await xp(e),o=await i.client.nodeAdmin.joinInviteStatus(n,e.signal);return e.output.json?{data:o}:{data:o,columns:[{key:"id",header:"invite"},{key:"status",header:"status"},{key:"nodeId",header:"node"}]}}},{id:"node-join complete",group:"node-join",name:"complete",stage:"B",write:!0,summary:"Complete a node join from a JSON request body",options:[zz],input:tz({config:o.z.string()}),output:Xg,outputPinned:!1,handler:async function(e,t){const n=$p(t,"Join completion request"),i=await xp(e),o=await Cp(e,"node-join complete",()=>({method:"POST",path:"/api/node-join/complete",body:n}),()=>i.client.nodeAdmin.completeJoin(n));if(o)return{data:o,columns:[{key:"id",header:"node"},{key:"name",header:"name",width:24},{key:"status",header:"status"}],message:`Node \`${o.id}\` joined the Control Plane.`}}}]),fz=[{key:"id",header:"project"},{key:"name",header:"name",width:24},{key:"defaultNodeId",header:"node"},{key:"updatedAt",header:"updated"}],Iz=[{key:"id",header:"image"},{key:"name",header:"name",width:24},{key:"reference",header:"reference",width:40},{key:"pullPolicy",header:"pull"}],bz=[{key:"id",header:"model"},{key:"name",header:"name",width:24},{key:"model",header:"model id",width:30},{key:"app",header:"app"},{key:"enabled",header:"enabled"}],wz=[{key:"id",header:"model"},{key:"name",header:"name",width:24},{key:"model",header:"model id",width:30},{key:"referenceCount",header:"refs"}],vz=[{key:"id",header:"template"},{key:"name",header:"name",width:24},{key:"status",header:"status"},{key:"updatedAt",header:"updated"}],xz=[{key:"id",header:"credential"},{key:"name",header:"name",width:24},{key:"kind",header:"kind"},{key:"status",header:"status"},{key:"updatedAt",header:"updated"}],Az=[{key:"credentialId",header:"credential"},{key:"instanceId",header:"instance"},{key:"status",header:"status"},{key:"updatedAt",header:"updated"}];async function Sz(e,t,n){return!0!==e.options.tokenStdin||n(t,await Np(e)),t}const Cz=[{key:"id",header:"bridge"},{key:"channel",header:"channel"},{key:"name",header:"name",width:24},{key:"running",header:"running"},{key:"tokenSet",header:"token"}],kz=[{key:"id",header:"session"},{key:"channel",header:"channel"},{key:"bridgeId",header:"bridge"},{key:"chatId",header:"chat"},{key:"updatedAt",header:"updated"}],jz=[{key:"id",header:"session"},{key:"userAgent",header:"client",width:30},{key:"createdAt",header:"created"},{key:"expiresAt",header:"expires"}];async function Rz(e,t){const n=$p(e,t);if(!0===e.options.tokenStdin){const t=await Np(e);n.token=t,hp(t)}return n}const Tz=[{key:"publicBaseUrl",header:"public base url",width:40},{key:"updateChannel",header:"channel"},{key:"mentionTrigger",header:"mention"},{key:"commandTrigger",header:"command"},{key:"diagnosticLogs",header:"logs"}],Ez=[{key:"id",header:"invite"},{key:"status",header:"status"},{key:"expiresAt",header:"expires"},{key:"createdAt",header:"created"}],Pz=[{key:"id",header:"binding"},{key:"nodeId",header:"node"},{key:"status",header:"status"},{key:"updatedAt",header:"updated"}],Oz=[{key:"id",header:"claim"},{key:"nodeId",header:"node"},{key:"status",header:"status"},{key:"expiresAt",header:"expires"}],$z=[{key:"bindingId",header:"binding"},{key:"activeHttp",header:"http"},{key:"activeStreams",header:"streams"},{key:"activeWebSockets",header:"websockets"}],Nz={flags:"--config <file>",description:"Request body as a JSON file (Control Plane wire body)"},_z={output:Xg,outputPinned:!1},Uz=nz("project","Manage catalog projects",[{id:"project list",group:"project",name:"list",stage:"B",summary:"List projects",input:ez,output:o.z.array(Ls),handler:async function(e){const t=await xp(e),n=await t.client.catalog.listProjects(e.signal);return e.output.json?{data:n}:{data:n,columns:fz,message:n.length?void 0:"No projects matched."}}},{id:"project show",group:"project",name:"show",stage:"B",summary:"Show one project",args:[{name:"projectId",description:"Project ID",required:!0}],input:tz({projectId:o.z.string()}),output:Ls,handler:async function(e,t){const n=kp(t,"projectId"),i=await xp(e),o=await i.client.catalog.getProject(n,e.signal);return e.output.json?{data:o}:{data:o,columns:fz}}},{id:"project create",group:"project",name:"create",stage:"B",write:!0,summary:"Create a project from a JSON request body",options:[Nz],input:tz({config:o.z.string()}),output:Ls,handler:async function(e,t){const n=$p(t,"Project create request"),i=await xp(e),o=await Cp(e,"project create",()=>({method:"POST",path:"/api/projects",body:n}),()=>i.client.catalog.createProject(n));if(o)return{data:o,columns:fz,message:`Project \`${o.id}\` created.`}}},{id:"project update",group:"project",name:"update",stage:"B",write:!0,summary:"Update a project",args:[{name:"projectId",description:"Project ID",required:!0}],options:[Nz],input:tz({projectId:o.z.string(),config:o.z.string()}),output:Ls,handler:async function(e,t){const n=kp(t,"projectId"),i=$p(t,"Project update request"),o=await xp(e),a=await Cp(e,"project update",()=>({method:"PATCH",path:`/api/projects/${encodeURIComponent(n)}`,body:i}),()=>o.client.catalog.updateProject(n,i));if(a)return{data:a,columns:fz,message:`Project \`${n}\` updated.`}}},{id:"project remove",group:"project",name:"remove",stage:"B",write:!0,summary:"Remove a project",args:[{name:"projectId",description:"Project ID",required:!0}],input:tz({projectId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"projectId"),i=await xp(e),o=await Cp(e,"project remove",()=>({method:"DELETE",path:`/api/projects/${encodeURIComponent(n)}`}),()=>i.client.catalog.removeProject(n));if(o)return{data:o,message:`Project \`${n}\` removed.`}}}]),qz=nz("image","Manage custom images",[{id:"image list",group:"image",name:"list",stage:"B",summary:"List custom images",input:ez,output:o.z.array(dd),handler:async function(e){const t=await xp(e),n=await t.client.catalog.listImages(e.signal);return e.output.json?{data:n}:{data:n,columns:Iz,message:n.length?void 0:"No images matched."}}},{id:"image show",group:"image",name:"show",stage:"B",summary:"Show one image",args:[{name:"imageId",description:"Image ID",required:!0}],input:tz({imageId:o.z.string()}),output:dd,handler:async function(e,t){const n=kp(t,"imageId"),i=await xp(e),o=await i.client.catalog.getImage(n,e.signal);return e.output.json?{data:o}:{data:o,columns:Iz}}},{id:"image create",group:"image",name:"create",stage:"B",write:!0,summary:"Create a custom image from a JSON request body",options:[Nz],input:tz({config:o.z.string()}),output:dd,handler:async function(e,t){const n=$p(t,"Image create request"),i=await xp(e),o=await Cp(e,"image create",()=>({method:"POST",path:"/api/images",body:n}),()=>i.client.catalog.createImage(n));if(o)return{data:o,columns:Iz,message:`Image \`${o.id}\` created.`}}},{id:"image update",group:"image",name:"update",stage:"B",write:!0,summary:"Update a custom image",args:[{name:"imageId",description:"Image ID",required:!0}],options:[Nz],input:tz({imageId:o.z.string(),config:o.z.string()}),output:dd,handler:async function(e,t){const n=kp(t,"imageId"),i=$p(t,"Image update request"),o=await xp(e),a=await Cp(e,"image update",()=>({method:"PATCH",path:`/api/images/${encodeURIComponent(n)}`,body:i}),()=>o.client.catalog.updateImage(n,i));if(a)return{data:a,columns:Iz,message:`Image \`${n}\` updated.`}}},{id:"image remove",group:"image",name:"remove",stage:"B",write:!0,summary:"Remove a custom image",args:[{name:"imageId",description:"Image ID",required:!0}],input:tz({imageId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"imageId"),i=await xp(e),o=await Cp(e,"image remove",()=>({method:"DELETE",path:`/api/images/${encodeURIComponent(n)}`}),()=>i.client.catalog.removeImage(n));if(o)return{data:o,message:`Image \`${n}\` removed.`}}},{id:"image options",group:"image",name:"options",stage:"B",summary:"List selectable image options",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.catalog.imageOptions(e.signal);return e.output.json?{data:n}:{data:n,columns:[{key:"id",header:"image"},{key:"name",header:"name",width:24},{key:"reference",header:"reference",width:40}]}}}]),Lz=nz("market","Inspect the market catalog",[{id:"market catalog",group:"market",name:"catalog",stage:"B",summary:"Show the market catalog snapshot",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.catalog.marketCatalog(e.signal);return e.output.json?{data:n}:{data:n,columns:[{key:"image.id",header:"image"},{key:"image.name",header:"name",width:30},{key:"status",header:"status"}]}}},{id:"market refresh",group:"market",name:"refresh",stage:"B",write:!0,summary:"Refresh the market catalog from its source",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await Cp(e,"market refresh",()=>({method:"POST",path:"/api/market/refresh"}),()=>t.client.catalog.refreshMarketCatalog());if(n)return{data:n,message:`Market catalog refreshed (${n.catalog.items?.length??0} images).`}}}]),Dz=[{id:"model create",group:"model",name:"create",stage:"B",write:!0,summary:"Create a model from a JSON request body",options:[Nz],input:tz({config:o.z.string()}),..._z,handler:async function(e,t){const n=$p(t,"Model create request"),i=await xp(e),o=await Cp(e,"model create",()=>({method:"POST",path:"/api/models",body:n}),()=>i.client.catalog.createModel(n));if(o)return{data:o,message:`Model \`${o.id}\` created.`}}},{id:"model copy",group:"model",name:"copy",stage:"B",write:!0,summary:"Copy a model",args:[{name:"modelId",description:"Model entity ID",required:!0}],options:[Nz],input:tz({modelId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"modelId"),i=$p(t,"Model copy request"),o=await xp(e),a=await Cp(e,"model copy",()=>({method:"POST",path:`/api/models/${encodeURIComponent(n)}/copy`,body:i}),()=>o.client.catalog.copyModel(n,i));if(a)return{data:a,message:`Model \`${a.id}\` copied from \`${n}\`.`}}},{id:"model discover",group:"model",name:"discover",stage:"B",summary:"Discover models behind an endpoint",options:[Nz],input:tz({config:o.z.string()}),..._z,handler:async function(e,t){const n=$p(t,"Model discovery request"),i=await xp(e),o=await i.client.catalog.discoverModels(n);return e.output.json?{data:o}:{data:o.models,columns:[{key:"id",header:"model"},{key:"ownedBy",header:"owned by"}],message:o.models.length?void 0:"No models discovered."}}},{id:"model test",group:"model",name:"test",stage:"B",summary:"Test a model endpoint",options:[Nz],input:tz({config:o.z.string()}),..._z,handler:async function(e,t){const n=$p(t,"Model test request"),i=await xp(e),o=await i.client.catalog.testModel(n);return e.output.json?{data:o}:{data:o,message:`Model test succeeded in ${o.latencyMs}ms.`}}},{id:"model reorder",group:"model",name:"reorder",stage:"B",write:!0,summary:"Reorder models",options:[{flags:"--id <modelId>",description:"Model entity ID in the new order",repeatable:!0}],input:tz({id:o.z.array(o.z.string()).optional()}),..._z,handler:async function(e,t){const n=Tp(t,"id");if(!n.length)throw Rp(t,"id");const i=await xp(e),o=await Cp(e,"model reorder",()=>({method:"POST",path:"/api/models/reorder",body:{ids:n}}),()=>i.client.catalog.reorderModels(n));if(o)return{data:o,columns:bz,message:`${o.length} models reordered.`}}},{id:"model update",group:"model",name:"update",stage:"B",write:!0,summary:"Update a model",args:[{name:"modelId",description:"Model entity ID",required:!0}],options:[Nz],input:tz({modelId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"modelId"),i=$p(t,"Model update request"),o=await xp(e),a=await Cp(e,"model update",()=>({method:"PATCH",path:`/api/models/${encodeURIComponent(n)}`,body:i}),()=>o.client.catalog.updateModel(n,i));if(a)return{data:a,message:`Model \`${n}\` updated.`}}},{id:"model sync",group:"model",name:"sync",stage:"B",write:!0,summary:"Sync a model to its assigned nodes",args:[{name:"modelId",description:"Model entity ID",required:!0}],input:tz({modelId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"modelId"),i=await xp(e),o=await Cp(e,"model sync",()=>({method:"POST",path:`/api/models/${encodeURIComponent(n)}/sync`}),()=>i.client.catalog.syncModel(n));if(o)return{data:o,message:`Model \`${n}\` synced.`}}},{id:"model merge",group:"model",name:"merge",stage:"B",write:!0,summary:"Merge duplicate model entities",args:[{name:"modelId",description:"Model entity ID",required:!0}],options:[Nz],input:tz({modelId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"modelId"),i=$p(t,"Model merge request"),o=await xp(e),a=await Cp(e,"model merge",()=>({method:"POST",path:`/api/models/${encodeURIComponent(n)}/merge`,body:i}),()=>o.client.catalog.mergeModel(n,i));if(a)return{data:a,message:`Model \`${n}\` merged.`}}},{id:"model remove",group:"model",name:"remove",stage:"B",write:!0,summary:"Remove a model",args:[{name:"modelId",description:"Model entity ID",required:!0}],input:tz({modelId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"modelId"),i=await xp(e),o=await Cp(e,"model remove",()=>({method:"DELETE",path:`/api/models/${encodeURIComponent(n)}`}),()=>i.client.catalog.removeModel(n));if(o)return{data:o,message:`Model \`${n}\` removed.`}}},{id:"model node list",group:"model",name:"node list",stage:"B",summary:"List models deployed to a node",args:[{name:"nodeId",description:"Node ID",required:!0}],input:tz({nodeId:o.z.string()}),output:o.z.array(Ms),handler:async function(e,t){const n=kp(t,"nodeId"),i=await xp(e),o=await i.client.catalog.listModels({signal:e.signal}),a=e=>"node"===e.type&&e.nodeId===n,r=o.models.filter(e=>e.locations.some(a)),s=r.map(e=>({id:e.id,name:e.model.name,model:e.model.model,referenceCount:e.locations.filter(a).length}));return e.output.json?{data:r}:{data:s,columns:wz,message:s.length?void 0:`No node-scoped models for \`${n}\`.`}}},{id:"model node create",group:"model",name:"node create",stage:"B",write:!0,summary:"Deploy a model to a node",args:[{name:"nodeId",description:"Node ID",required:!0}],options:[Nz],input:tz({nodeId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"nodeId"),i=$p(t,"Node model create request"),o=await xp(e),a=await Cp(e,"model node create",()=>({method:"POST",path:`/api/nodes/${encodeURIComponent(n)}/models`,body:i}),()=>o.client.catalog.createModelOnNode(n,i));if(a)return{data:a,message:`Model deployed to node \`${n}\`.`}}},{id:"model node update",group:"model",name:"node update",stage:"B",write:!0,summary:"Update a node-scoped model",args:[{name:"nodeId",description:"Node ID",required:!0},{name:"modelId",description:"Model entity ID",required:!0}],options:[Nz],input:tz({nodeId:o.z.string(),modelId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"nodeId"),i=kp(t,"modelId"),o=$p(t,"Node model update request"),a=await xp(e),r=await Cp(e,"model node update",()=>({method:"PATCH",path:`/api/nodes/${encodeURIComponent(n)}/models/${encodeURIComponent(i)}`,body:o}),()=>a.client.catalog.updateModelOnNode(n,i,o));if(r)return{data:r,message:`Node \`${n}\` model \`${i}\` updated.`}}},{id:"model node remove",group:"model",name:"node remove",stage:"B",write:!0,summary:"Remove a node-scoped model",args:[{name:"nodeId",description:"Node ID",required:!0},{name:"modelId",description:"Model entity ID",required:!0}],input:tz({nodeId:o.z.string(),modelId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"nodeId"),i=kp(t,"modelId"),o=await xp(e),a=await Cp(e,"model node remove",()=>({method:"DELETE",path:`/api/nodes/${encodeURIComponent(n)}/models/${encodeURIComponent(i)}`}),()=>o.client.catalog.removeModelOnNode(n,i));if(a)return{data:a,message:`Node \`${n}\` model \`${i}\` removed.`}}},{id:"model node discover",group:"model",name:"node discover",stage:"B",summary:"Discover models from a node",args:[{name:"nodeId",description:"Node ID",required:!0}],options:[Nz],input:tz({nodeId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"nodeId"),i=$p(t,"Node model discovery request"),o=await xp(e),a=await o.client.catalog.discoverModelsOnNode(n,i);return e.output.json?{data:a}:{data:a.models,columns:[{key:"id",header:"model"},{key:"ownedBy",header:"owned by"}],message:a.models.length?void 0:"No models discovered."}}},{id:"model node test",group:"model",name:"node test",stage:"B",summary:"Test a node model endpoint",args:[{name:"nodeId",description:"Node ID",required:!0}],options:[Nz],input:tz({nodeId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"nodeId"),i=$p(t,"Node model test request"),o=await xp(e),a=await o.client.catalog.testModelOnNode(n,i);return e.output.json?{data:a}:{data:a,message:`Node \`${n}\` model test succeeded in ${a.latencyMs}ms.`}}}],Mz=[Uz,qz,Lz,nz("env-template","Manage node environment templates",[{id:"env-template list",group:"env-template",name:"list",stage:"B",summary:"List environment templates for a node",args:[{name:"nodeId",description:"Node ID",required:!0}],input:tz({nodeId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"nodeId"),i=await xp(e),o=await i.client.environmentTemplates.listForNode(n,e.signal);return e.output.json?{data:o}:{data:o,columns:vz,message:o.length?void 0:"No environment templates matched."}}},{id:"env-template show",group:"env-template",name:"show",stage:"B",summary:"Show one environment template",args:[{name:"nodeId",description:"Node ID",required:!0},{name:"templateId",description:"Environment template ID",required:!0}],input:tz({nodeId:o.z.string(),templateId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"nodeId"),i=kp(t,"templateId"),o=await xp(e),a=await o.client.environmentTemplates.get(n,i,e.signal);return e.output.json?{data:a}:{data:a,columns:vz}}},{id:"env-template create",group:"env-template",name:"create",stage:"B",write:!0,summary:"Create an environment template from an instance",args:[{name:"instanceId",description:"Controlled instance ID",required:!0}],options:[Nz],input:tz({instanceId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"instanceId"),i=$p(t,"Environment template create request"),o=await xp(e),a=await Cp(e,"env-template create",()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/environment-templates`,body:i}),()=>o.client.environmentTemplates.createFromInstance(n,i));if(a)return{data:a,columns:vz,message:`Environment template \`${a.id}\` created from \`${n}\`.`}}},{id:"env-template remove",group:"env-template",name:"remove",stage:"B",write:!0,summary:"Remove an environment template",args:[{name:"nodeId",description:"Node ID",required:!0},{name:"templateId",description:"Environment template ID",required:!0}],input:tz({nodeId:o.z.string(),templateId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"nodeId"),i=kp(t,"templateId"),o=await xp(e),a=await Cp(e,"env-template remove",()=>({method:"DELETE",path:`/api/nodes/${encodeURIComponent(n)}/environment-templates/${encodeURIComponent(i)}`}),()=>o.client.environmentTemplates.remove(n,i));if(a)return{data:a,message:`Environment template \`${i}\` removed from \`${n}\`.`}}}]),nz("git-credential","Manage managed git credentials",[{id:"git-credential list",group:"git-credential",name:"list",stage:"B",summary:"List git credentials",input:ez,output:o.z.looseObject({items:o.z.array(Wa)}),handler:async function(e){const t=await xp(e),n=await t.client.gitCredentials.listCredentials(e.signal);return e.output.json?{data:n}:{data:n.items,columns:xz,message:n.items.length?void 0:"No git credentials matched."}}},{id:"git-credential show",group:"git-credential",name:"show",stage:"B",summary:"Show one git credential",args:[{name:"credentialId",description:"Git credential ID",required:!0}],input:tz({credentialId:o.z.string()}),output:Wa,handler:async function(e,t){const n=kp(t,"credentialId"),i=await xp(e),o=await i.client.gitCredentials.getCredential(n,e.signal);return e.output.json?{data:o}:{data:o,columns:xz}}},{id:"git-credential create",group:"git-credential",name:"create",stage:"B",write:!0,summary:"Create a git credential from a JSON request body",options:[Nz],input:tz({config:o.z.string()}),output:Wa,handler:async function(e,t){const n=await Sz(t,$p(t,"Git credential create request"),(e,t)=>{const n=e.secret&&"object"==typeof e.secret?e.secret:{};e.secret={...n,token:t}}),i=await xp(e),o=await Cp(e,"git-credential create",()=>({method:"POST",path:"/api/git-credentials",body:n}),()=>i.client.gitCredentials.createCredential(n));if(o)return{data:o,columns:xz,message:`Git credential \`${o.id}\` created.`}}},{id:"git-credential update",group:"git-credential",name:"update",stage:"B",write:!0,summary:"Update a git credential",args:[{name:"credentialId",description:"Git credential ID",required:!0}],options:[Nz],input:tz({credentialId:o.z.string(),config:o.z.string()}),output:Wa,handler:async function(e,t){const n=kp(t,"credentialId"),i=await Sz(t,$p(t,"Git credential update request"),(e,t)=>{const n=e.secret&&"object"==typeof e.secret?e.secret:{};e.secret={...n,token:t}}),o=await xp(e),a=await Cp(e,"git-credential update",()=>({method:"PATCH",path:`/api/git-credentials/${encodeURIComponent(n)}`,body:i}),()=>o.client.gitCredentials.updateCredential(n,i));if(a)return{data:a,columns:xz,message:`Git credential \`${n}\` updated.`}}},{id:"git-credential remove",group:"git-credential",name:"remove",stage:"B",write:!0,summary:"Remove a git credential",args:[{name:"credentialId",description:"Git credential ID",required:!0}],input:tz({credentialId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"credentialId"),i=await xp(e),o=await Cp(e,"git-credential remove",()=>({method:"DELETE",path:`/api/git-credentials/${encodeURIComponent(n)}`}),()=>i.client.gitCredentials.removeCredential(n));if(o)return{data:o,message:`Git credential \`${n}\` removed.`}}},{id:"git-credential assignments list",group:"git-credential",name:"assignments list",stage:"B",summary:"List git credential assignments of an instance",args:[{name:"instanceId",description:"Controlled instance ID",required:!0}],input:tz({instanceId:o.z.string()}),output:o.z.array(Xa),handler:async function(e,t){const n=kp(t,"instanceId"),i=await xp(e);await Fg(i.client,n,"git-credential assignments list",Dg.managedGitCredentials,e.signal);const o=await i.client.gitCredentials.listInstanceAssignments(n,e.signal);return e.output.json?{data:o}:{data:o,columns:Az,message:o.length?void 0:"No git credential assignments matched."}}},{id:"git-credential assignments assign",group:"git-credential",name:"assignments assign",stage:"B",write:!0,summary:"Assign a git credential to an instance",args:[{name:"instanceId",description:"Controlled instance ID",required:!0}],options:[{flags:"--credential <credentialId>",description:"Git credential ID"}],input:tz({instanceId:o.z.string(),credential:o.z.string()}),output:Xa,handler:async function(e,t){const n=kp(t,"instanceId"),i=Rp(t,"credential"),o=await xp(e);await Fg(o.client,n,"git-credential assignments assign",Dg.managedGitCredentials,e.signal);const a=await Cp(e,"git-credential assignments assign",()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/git-credential-assignments`,body:{credentialId:i}}),()=>o.client.gitCredentials.assignToInstance(n,{credentialId:i}));if(a)return{data:a,columns:Az,message:`Credential \`${i}\` assigned to \`${n}\`.`}}},{id:"git-credential assignments unassign",group:"git-credential",name:"assignments unassign",stage:"B",write:!0,summary:"Unassign a git credential from an instance",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"credentialId",description:"Git credential ID",required:!0}],input:tz({instanceId:o.z.string(),credentialId:o.z.string()}),output:o.z.looseObject({revoked:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"credentialId"),o=await xp(e);await Fg(o.client,n,"git-credential assignments unassign",Dg.managedGitCredentials,e.signal);const a=await Cp(e,"git-credential assignments unassign",()=>({method:"DELETE",path:`/api/controlled-instances/${encodeURIComponent(n)}/git-credential-assignments/${encodeURIComponent(i)}`}),()=>o.client.gitCredentials.unassignFromInstance(n,i));if(a)return{data:a,message:`Credential \`${i}\` unassigned from \`${n}\`.`}}}]),nz("chat","Manage the chat gateway",[{id:"chat status",group:"chat",name:"status",stage:"B",summary:"Show the chat gateway status",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.chatGateway.status(e.signal);return e.output.json?{data:n}:{data:n.bridges,columns:Cz,message:`Chat gateway ${n.running?"running":"stopped"}.`}}},{id:"chat bridges list",group:"chat",name:"bridges list",stage:"B",summary:"List chat bridges",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.chatGateway.listBridges(e.signal);return e.output.json?{data:n}:{data:n,columns:Cz,message:n.length?void 0:"No chat bridges matched."}}},{id:"chat bridges create",group:"chat",name:"bridges create",stage:"B",write:!0,summary:"Create a chat bridge from a JSON request body",options:[Nz],input:tz({config:o.z.string()}),..._z,handler:async function(e,t){const n=await Rz(t,"Chat bridge create request"),i=await xp(e),o=await Cp(e,"chat bridges create",()=>({method:"POST",path:"/api/chat-gateway/bridges",body:n}),()=>i.client.chatGateway.createBridge(n));if(o)return{data:o,columns:Cz,message:`Chat bridge \`${o.id}\` created.`}}},{id:"chat bridges update",group:"chat",name:"bridges update",stage:"B",write:!0,summary:"Update a chat bridge",args:[{name:"bridgeId",description:"Chat bridge ID",required:!0}],options:[Nz],input:tz({bridgeId:o.z.string(),config:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"bridgeId"),i=await Rz(t,"Chat bridge update request"),o=await xp(e),a=await Cp(e,"chat bridges update",()=>({method:"PATCH",path:`/api/chat-gateway/bridges/${encodeURIComponent(n)}`,body:i}),()=>o.client.chatGateway.updateBridge(n,i));if(a)return{data:a,columns:Cz,message:`Chat bridge \`${n}\` updated.`}}},{id:"chat bridges start",group:"chat",name:"bridges start",stage:"B",write:!0,summary:"Start a chat bridge",args:[{name:"bridgeId",description:"Chat bridge ID",required:!0}],input:tz({bridgeId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"bridgeId"),i=await xp(e),o=await Cp(e,"chat bridges start",()=>({method:"POST",path:`/api/chat-gateway/bridges/${encodeURIComponent(n)}/start`}),()=>i.client.chatGateway.startBridge(n));if(o)return{data:o,message:`Chat bridge \`${n}\` started (${o.running?"running":"not running"}).`}}},{id:"chat bridges stop",group:"chat",name:"bridges stop",stage:"B",write:!0,summary:"Stop a chat bridge",args:[{name:"bridgeId",description:"Chat bridge ID",required:!0}],input:tz({bridgeId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"bridgeId"),i=await xp(e),o=await Cp(e,"chat bridges stop",()=>({method:"POST",path:`/api/chat-gateway/bridges/${encodeURIComponent(n)}/stop`}),()=>i.client.chatGateway.stopBridge(n));if(o)return{data:o,message:`Chat bridge \`${n}\` stopped (${o.running?"running":"stopped"}).`}}},{id:"chat bridges remove",group:"chat",name:"bridges remove",stage:"B",write:!0,summary:"Remove a chat bridge",args:[{name:"bridgeId",description:"Chat bridge ID",required:!0}],input:tz({bridgeId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"bridgeId"),i=await xp(e),o=await Cp(e,"chat bridges remove",()=>({method:"DELETE",path:`/api/chat-gateway/bridges/${encodeURIComponent(n)}`}),()=>i.client.chatGateway.removeBridge(n));if(o)return{data:o,message:`Chat bridge \`${n}\` removed.`}}},{id:"chat sessions list",group:"chat",name:"sessions list",stage:"B",summary:"List chat sessions",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.chatGateway.listSessions(e.signal);return e.output.json?{data:n}:{data:n,columns:kz,message:n.length?void 0:"No chat sessions matched."}}},{id:"chat sessions show",group:"chat",name:"sessions show",stage:"B",summary:"Show one chat session",args:[{name:"sessionId",description:"Chat session ID",required:!0}],input:tz({sessionId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"sessionId"),i=await xp(e),o=await i.client.chatGateway.getSession(n,e.signal);return e.output.json?{data:o}:{data:o,columns:kz}}}]),nz("mobile-session","Manage mobile sessions",[{id:"mobile-session list",group:"mobile-session",name:"list",stage:"B",summary:"List mobile sessions",input:ez,output:o.z.array(Zi),handler:async function(e){const t=await xp(e),n=await t.client.auth.mobileSessions(e.signal);return e.output.json?{data:n}:{data:n,columns:jz,message:n.length?void 0:"No mobile sessions matched."}}},{id:"mobile-session revoke",group:"mobile-session",name:"revoke",stage:"B",write:!0,summary:"Revoke a mobile session",args:[{name:"sessionId",description:"Mobile session ID",required:!0}],input:tz({sessionId:o.z.string()}),output:o.z.looseObject({revoked:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"sessionId"),i=await xp(e),o=await Cp(e,"mobile-session revoke",()=>({method:"DELETE",path:`/api/auth/mobile/sessions/${encodeURIComponent(n)}`}),()=>i.client.auth.revokeMobileSession(n));if(o)return{data:o,message:`Mobile session \`${n}\` revoked.`}}}]),nz("control-plane","Inspect and configure the Control Plane",[{id:"control-plane status",group:"control-plane",name:"status",stage:"B",summary:"Show Control Plane status",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.admin.status(e.signal);return e.output.json?{data:n}:{data:n,columns:[{key:"protocolVersion",header:"protocol"},{key:"build.version",header:"version"},{key:"storage.driver",header:"storage"}]}}},{id:"control-plane settings show",group:"control-plane",name:"settings show",stage:"B",summary:"Show Control Plane settings",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.admin.getSettings(e.signal);return e.output.json?{data:n}:{data:n,columns:Tz}}},{id:"control-plane settings update",group:"control-plane",name:"settings update",stage:"B",write:!0,summary:"Update Control Plane settings",options:[Nz],input:tz({config:o.z.string()}),..._z,handler:async function(e,t){const n=$p(t,"Control Plane settings update request"),i=await xp(e),o=await Cp(e,"control-plane settings update",()=>({method:"PATCH",path:"/api/control-plane/settings",body:n}),()=>i.client.admin.updateSettings(n));if(o)return{data:o,columns:Tz,message:"Control Plane settings updated."}}},{id:"control-plane diagnostic-logs export",group:"control-plane",name:"diagnostic-logs export",stage:"B",summary:"Export diagnostic logs to a file",options:[{flags:"--out <file>",description:"Destination file for the downloaded archive"}],input:tz({out:o.z.string()}),output:o.z.looseObject({file:o.z.string(),bytes:o.z.number()}),handler:async function(e,n){const o=Rp(n,"out"),a=await xp(e),r=await a.client.admin.exportDiagnosticLogs(),s=i.resolve(o);try{t.writeFileSync(s,r.body)}catch(e){throw u("CLI_FILE_UNWRITABLE",`Cannot write \`${s}\`: ${e instanceof Error?e.message:String(e)}`,{file:s})}return{data:{file:s,bytes:r.body.byteLength},message:`Diagnostic logs written to \`${s}\` (${r.body.byteLength} bytes).`}}}]),nz("cloud","Manage the cloud connectivity binding",[{id:"cloud show",group:"cloud",name:"show",stage:"B",summary:"Show cloud connectivity state",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.admin.cloudConnectivity(e.signal);return e.output.json?{data:n}:{data:n,columns:[{key:"status",header:"status"},{key:"serviceOrigin",header:"service",width:40},{key:"accountId",header:"account"},{key:"remoteAccessEnabled",header:"remote access"}]}}},{id:"cloud challenge",group:"cloud",name:"challenge",stage:"B",write:!0,summary:"Create a cloud binding challenge (the challenge secret is never printed)",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await Cp(e,"cloud challenge",()=>({method:"POST",path:"/api/cloud-connectivity/challenges"}),()=>t.client.admin.createCloudChallenge());if(n)return{data:{authorizationUrl:n.authorizationUrl,expiresAt:n.payload.expiresAt,publicKeyFingerprint:n.payload.publicKeyFingerprint},message:`Cloud binding challenge created; open ${n.authorizationUrl} in the cloud console before ${n.payload.expiresAt}.`}}},{id:"cloud remote-access",group:"cloud",name:"remote-access",stage:"B",write:!0,summary:"Enable or disable cloud remote access",options:[{flags:"--enabled <true|false>",description:"Whether remote access should be enabled"}],input:tz({enabled:o.z.string()}),..._z,handler:async function(e,t){const n=function(e,t){const n=e.options[t];if(!0===n)return!0;if(!1===n)return!1;if("true"===n)return!0;if("false"===n)return!1;throw u("CLI_OPTION_MISSING",`Missing required option --${t} <true|false>.`,{option:t})}(t,"enabled"),i=await xp(e),o=await Cp(e,"cloud remote-access",()=>({method:"POST",path:"/api/cloud-connectivity/remote-access",body:{enabled:n}}),()=>i.client.admin.setCloudRemoteAccess(n));if(o)return{data:o,message:`Cloud remote access ${n?"enabled":"disabled"}.`}}},{id:"cloud disconnect",group:"cloud",name:"disconnect",stage:"B",write:!0,summary:"Disconnect the cloud binding",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await Cp(e,"cloud disconnect",()=>({method:"POST",path:"/api/cloud-connectivity/disconnect"}),()=>t.client.admin.disconnectCloud());if(n)return{data:n,message:`Cloud binding is now ${n.status}.`}}}]),nz("proxy","Manage the control-plane proxy",[{id:"proxy invites list",group:"proxy",name:"invites list",stage:"B",summary:"List proxy invites",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.admin.proxyInvites(e.signal);return e.output.json?{data:n}:{data:n,columns:Ez,message:n.length?void 0:"No proxy invites matched."}}},{id:"proxy invites create",group:"proxy",name:"invites create",stage:"B",write:!0,summary:"Create a proxy invite",options:[Nz],input:tz({config:o.z.string()}),..._z,handler:async function(e,t){const n=$p(t,"Proxy invite create request"),i=await xp(e),o=await Cp(e,"proxy invites create",()=>({method:"POST",path:"/api/control-plane-proxy/invites",body:n}),()=>i.client.admin.createProxyInvite(n));if(o)return{data:o,columns:Ez,message:"Proxy invite created."}}},{id:"proxy invites remove",group:"proxy",name:"invites remove",stage:"B",write:!0,summary:"Revoke a proxy invite",args:[{name:"inviteId",description:"Proxy invite ID",required:!0}],input:tz({inviteId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"inviteId"),i=await xp(e),o=await Cp(e,"proxy invites remove",()=>({method:"DELETE",path:`/api/control-plane-proxy/invites/${encodeURIComponent(n)}`}),()=>i.client.admin.revokeProxyInvite(n));if(o)return{data:o,message:`Proxy invite \`${n}\` revoked.`}}},{id:"proxy bindings list",group:"proxy",name:"bindings list",stage:"B",summary:"List proxy bindings",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.admin.proxyBindings(e.signal);return e.output.json?{data:n}:{data:n,columns:Pz,message:n.length?void 0:"No proxy bindings matched."}}},{id:"proxy bindings remove",group:"proxy",name:"bindings remove",stage:"B",write:!0,summary:"Revoke a proxy binding",args:[{name:"bindingId",description:"Proxy binding ID",required:!0}],input:tz({bindingId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"bindingId"),i=await xp(e),o=await Cp(e,"proxy bindings remove",()=>({method:"DELETE",path:`/api/control-plane-proxy/bindings/${encodeURIComponent(n)}`}),()=>i.client.admin.revokeProxyBinding(n));if(o)return{data:o,message:`Proxy binding \`${n}\` revoked.`}}},{id:"proxy diagnostics",group:"proxy",name:"diagnostics",stage:"B",summary:"Show proxy stream diagnostics",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.admin.proxyDiagnostics(e.signal);return e.output.json?{data:n}:{data:n,columns:$z,message:n.length?void 0:"No proxied bindings."}}},{id:"proxy pending-claims list",group:"proxy",name:"pending-claims list",stage:"B",summary:"List pending proxy claims",input:ez,..._z,handler:async function(e){const t=await xp(e),n=await t.client.admin.pendingProxyClaims(e.signal);return e.output.json?{data:n}:{data:n,columns:Oz,message:n.length?void 0:"No pending proxy claims."}}},{id:"proxy pending-claims resume",group:"proxy",name:"pending-claims resume",stage:"B",write:!0,summary:"Resume a pending proxy claim",args:[{name:"claimId",description:"Pending proxy claim ID",required:!0}],input:tz({claimId:o.z.string()}),..._z,handler:async function(e,t){const n=kp(t,"claimId"),i=await xp(e),o=await Cp(e,"proxy pending-claims resume",()=>({method:"POST",path:`/api/control-plane-proxy/pending-claims/${encodeURIComponent(n)}/resume`}),()=>i.client.admin.resumeProxyClaim(n));if(o)return{data:o,message:`Pending proxy claim \`${n}\` resumed.`}}},{id:"proxy pending-claims remove",group:"proxy",name:"pending-claims remove",stage:"B",write:!0,summary:"Cancel a pending proxy claim",args:[{name:"claimId",description:"Pending proxy claim ID",required:!0}],options:[{flags:"--force",description:"Force cancellation of a claim that is mid-resume"}],input:tz({claimId:o.z.string(),force:o.z.boolean().optional()}),..._z,handler:async function(e,t){const n=kp(t,"claimId"),i=!0===t.options.force,o=await xp(e),a=await Cp(e,"proxy pending-claims remove",()=>({method:"DELETE",path:`/api/control-plane-proxy/pending-claims/${encodeURIComponent(n)}${i?"?force=true":""}`}),()=>o.client.admin.cancelProxyClaim(n,i?{force:!0}:{}));if(a)return{data:a,message:`Pending proxy claim \`${n}\` cancelled.`}}}])],Bz={flags:"--config <file>",description:"Request body as a JSON file (Control Plane wire body)"},Hz=[{id:"user create",group:"user",name:"create",stage:"B",write:!0,summary:"Create a local user",options:[Bz],input:tz({config:o.z.string()}),output:Ui,handler:async function(e,t){const n=$p(t,"User create request"),i=await Qg(e,"user create",Vg.userManagement),o=await Cp(e,"user create",()=>({method:"POST",path:"/api/users",body:n}),()=>i.client.users.create(n));if(o)return{data:o,columns:Gg,message:`User \`${o.id}\` created.`}}},{id:"user update",group:"user",name:"update",stage:"B",write:!0,summary:"Update a user",args:[{name:"userId",description:"User ID",required:!0}],options:[Bz],input:tz({userId:o.z.string(),config:o.z.string()}),output:Ui,handler:async function(e,t){const n=kp(t,"userId"),i=$p(t,"User update request"),o=await Qg(e,"user update",Vg.userManagement),a=await Cp(e,"user update",()=>({method:"PATCH",path:`/api/users/${encodeURIComponent(n)}`,body:i}),()=>o.client.users.update(n,i));if(a)return{data:a,columns:Gg,message:`User \`${n}\` updated.`}}},{id:"user access",group:"user",name:"access",stage:"B",write:!0,summary:"Replace a user's access grant",args:[{name:"userId",description:"User ID",required:!0}],options:[Bz],input:tz({userId:o.z.string(),config:o.z.string()}),output:Ui,handler:async function(e,t){const n=kp(t,"userId"),i=$p(t,"User access request"),o=await Qg(e,"user access",Vg.userManagement),a=await Cp(e,"user access",()=>({method:"PUT",path:`/api/users/${encodeURIComponent(n)}/access`,body:i}),()=>o.client.users.setAccess(n,i));if(a)return{data:a,columns:Gg,message:`Access for \`${n}\` updated.`}}},{id:"user password-reset",group:"user",name:"password-reset",stage:"B",write:!0,summary:"Reset a user's password (password is read from stdin)",args:[{name:"userId",description:"User ID",required:!0}],options:[{flags:"--require-change",description:"Require the user to change the password at next sign-in"}],input:tz({userId:o.z.string(),requireChange:o.z.boolean().optional()}),output:Xg,outputPinned:!1,handler:async function(e,t){const n=kp(t,"userId"),i=await Np(t),o=!0===t.options["require-change"],a=await Qg(e,"user password-reset",Vg.userManagement),r={password:i,...o?{requirePasswordChange:!0}:{}},s=await Cp(e,"user password-reset",()=>({method:"POST",path:`/api/users/${encodeURIComponent(n)}/password-reset`,body:r}),()=>a.client.users.resetPassword(n,r));if(s)return{data:s,columns:[{key:"id",header:"user"},{key:"primaryUsername",header:"username"}],message:`Password for \`${n}\` reset.`}}},{id:"user role list",group:"user",name:"role list",stage:"B",summary:"List roles",input:tz({}),output:o.z.array(Ni),handler:async function(e){const t=await Qg(e,"user role list",Vg.customRoles),n=await t.client.users.roles(e.signal);return e.output.json?{data:n}:{data:n,columns:Wg,message:n.length?void 0:"No roles matched."}}},{id:"user role create",group:"user",name:"role create",stage:"B",write:!0,summary:"Create a custom role",options:[Bz],input:tz({config:o.z.string()}),output:Ni,handler:async function(e,t){const n=$p(t,"Role create request"),i=await Qg(e,"user role create",Vg.customRoles),o=await Cp(e,"user role create",()=>({method:"POST",path:"/api/roles",body:n}),()=>i.client.users.createRole(n));if(o)return{data:o,columns:Wg,message:`Role \`${o.id}\` created.`}}},{id:"user role update",group:"user",name:"role update",stage:"B",write:!0,summary:"Update a role",args:[{name:"roleId",description:"Role ID",required:!0}],options:[Bz],input:tz({roleId:o.z.string(),config:o.z.string()}),output:Ni,handler:async function(e,t){const n=kp(t,"roleId"),i=$p(t,"Role update request"),o=await Qg(e,"user role update",Vg.customRoles),a=await Cp(e,"user role update",()=>({method:"PATCH",path:`/api/roles/${encodeURIComponent(n)}`,body:i}),()=>o.client.users.updateRole(n,i));if(a)return{data:a,columns:Wg,message:`Role \`${n}\` updated.`}}},{id:"user role remove",group:"user",name:"role remove",stage:"B",write:!0,summary:"Archive a role",args:[{name:"roleId",description:"Role ID",required:!0}],input:tz({roleId:o.z.string()}),output:Ni,handler:async function(e,t){const n=kp(t,"roleId"),i=await Qg(e,"user role remove",Vg.customRoles),o=await Cp(e,"user role remove",()=>({method:"DELETE",path:`/api/roles/${encodeURIComponent(n)}`}),()=>i.client.users.archiveRole(n));if(o)return{data:o,message:`Role \`${n}\` archived.`}}},{id:"user permission list",group:"user",name:"permission list",stage:"B",summary:"List permission descriptors",input:tz({}),output:o.z.array(ki),handler:async function(e){const t=await Qg(e,"user permission list",Vg.customRoles),n=await t.client.users.permissions(e.signal);return e.output.json?{data:n}:{data:n,columns:Kg,message:n.length?void 0:"No permissions matched."}}},{id:"user identity-provider list",group:"user",name:"identity-provider list",stage:"B",summary:"List identity providers",input:tz({}),output:o.z.array(Li),handler:async function(e){const t=await Qg(e,"user identity-provider list",Vg.externalIdentityLogin),n=await t.client.users.providers(e.signal);return e.output.json?{data:n}:{data:n,columns:Jg,message:n.length?void 0:"No identity providers matched."}}},{id:"user identity-provider create",group:"user",name:"identity-provider create",stage:"B",write:!0,summary:"Create an identity provider",options:[Bz],input:tz({config:o.z.string()}),output:Li,handler:async function(e,t){const n=$p(t,"Identity provider create request"),i=await Qg(e,"user identity-provider create",Vg.externalIdentityLogin),o=await Cp(e,"user identity-provider create",()=>({method:"POST",path:"/api/identity-providers",body:n}),()=>i.client.users.createProvider(n));if(o)return{data:o,columns:Jg,message:`Identity provider \`${o.id}\` created.`}}},{id:"user identity-provider update",group:"user",name:"identity-provider update",stage:"B",write:!0,summary:"Update an identity provider",args:[{name:"providerId",description:"Identity provider ID",required:!0}],options:[Bz],input:tz({providerId:o.z.string(),config:o.z.string()}),output:Li,handler:async function(e,t){const n=kp(t,"providerId"),i=$p(t,"Identity provider update request"),o=await Qg(e,"user identity-provider update",Vg.externalIdentityLogin),a=await Cp(e,"user identity-provider update",()=>({method:"PATCH",path:`/api/identity-providers/${encodeURIComponent(n)}`,body:i}),()=>o.client.users.updateProvider(n,i));if(a)return{data:a,columns:Jg,message:`Identity provider \`${n}\` updated.`}}},{id:"user identity-provider remove",group:"user",name:"identity-provider remove",stage:"B",write:!0,summary:"Remove an identity provider",args:[{name:"providerId",description:"Identity provider ID",required:!0}],input:tz({providerId:o.z.string()}),output:o.z.looseObject({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"providerId"),i=await Qg(e,"user identity-provider remove",Vg.externalIdentityLogin),o=await Cp(e,"user identity-provider remove",()=>({method:"DELETE",path:`/api/identity-providers/${encodeURIComponent(n)}`}),()=>i.client.users.removeProvider(n));if(o)return{data:o,message:`Identity provider \`${n}\` removed.`}}},{id:"user external-identity list",group:"user",name:"external-identity list",stage:"B",summary:"List pending external identity approvals",input:tz({}),output:o.z.array(Di),handler:async function(e){const t=await Qg(e,"user external-identity list",Vg.externalIdentityLogin),n=await t.client.users.approvals(e.signal);return e.output.json?{data:n}:{data:n,columns:Zg,message:n.length?void 0:"No pending identity approvals."}}},{id:"user external-identity approve",group:"user",name:"external-identity approve",stage:"B",write:!0,summary:"Approve an external identity binding",args:[{name:"approvalId",description:"Approval ID",required:!0}],options:[{flags:"--config <file>",description:"Approval request JSON (optional)"}],input:tz({approvalId:o.z.string(),config:o.z.string().optional()}),output:Ui,handler:async function(e,t){const n=kp(t,"approvalId"),i=jp(t,"config")?$p(t,"Identity approval request"):{},o=await Qg(e,"user external-identity approve",Vg.externalIdentityLogin),a=await Cp(e,"user external-identity approve",()=>({method:"POST",path:`/api/external-identity-approvals/${encodeURIComponent(n)}/approve`,body:i}),()=>o.client.users.approveIdentity(n,i));if(a)return{data:a,columns:Gg,message:`Identity approval \`${n}\` approved.`}}},{id:"user external-identity reject",group:"user",name:"external-identity reject",stage:"B",write:!0,summary:"Reject an external identity binding",args:[{name:"approvalId",description:"Approval ID",required:!0}],input:tz({approvalId:o.z.string()}),output:Xg,outputPinned:!1,handler:async function(e,t){const n=kp(t,"approvalId"),i=await Qg(e,"user external-identity reject",Vg.externalIdentityLogin),o=await Cp(e,"user external-identity reject",()=>({method:"POST",path:`/api/external-identity-approvals/${encodeURIComponent(n)}/reject`,body:{}}),()=>i.client.users.rejectIdentity(n));if(o)return{data:o,message:`Identity approval \`${n}\` rejected.`}}}],Fz=tz({origin:o.z.string(),label:o.z.string().optional()}),Vz=tz({label:o.z.string()}),Gz=nz("profile","Manage Control Plane profiles",[{id:"profile add",group:"profile",name:"add",stage:"A",summary:"Add a Control Plane profile and pin its identity fingerprint",args:[{name:"origin",description:"Control Plane origin, for example https://control.example.com",required:!0}],options:[{flags:"--label <label>",description:"Profile label (defaults to the host name)"}],input:Fz,output:w,examples:["thctl profile add https://control.example.com","thctl profile add http://127.0.0.1:8787 --label local"],handler:async function(e,t){const n=function(e){let t;try{t=new URL(e.trim())}catch{throw u("CLI_ORIGIN_INVALID","Enter a Control Plane URL such as `https://control.example.com`.")}if(t.username||t.password||t.search||t.hash)throw u("CLI_ORIGIN_INVALID","The Control Plane address cannot contain credentials, query parameters, or a fragment.");if("/"!==t.pathname&&""!==t.pathname)throw u("CLI_ORIGIN_INVALID","Enter the Control Plane origin without a page or API path.");return t.origin}(pg(t.args.origin,"origin")),i=await Qu(n,e.fetchImpl),o=e.store.findByOrigin(n);if(o&&(o.controlPlaneId!==i.payload.controlPlaneId||o.fingerprint!==i.payload.publicKey.fingerprint))throw new m("CLI_IDENTITY_CHANGED",`Profile \`${o.label}\` is pinned to a different identity. Run \`thctl profile trust ${o.label}\` after verifying the new fingerprint ${i.payload.publicKey.fingerprint}.`,13,{profile:o.label});const a=o??e.store.findByControlPlane(i.payload.controlPlaneId,i.payload.publicKey.fingerprint),r=t.options.label?.trim()||a?.label||R(n),s=(new Date).toISOString(),d=w.parse({label:r,origin:n,controlPlaneId:i.payload.controlPlaneId,fingerprint:i.payload.publicKey.fingerprint,protocolVersion:i.payload.protocolVersion,capabilities:i.payload.capabilities,createdAt:a?.createdAt??s,updatedAt:s,trustedAt:s,lastUsedAt:s,...a?.loginMode?{loginMode:a.loginMode}:{}});return e.store.save(d),e.store.defaultProfile()||e.store.setDefault(r),{data:d,columns:[{key:"label",header:"profile"},{key:"origin",header:"origin"},{key:"fingerprint",header:"fingerprint"}],message:a?`Reused existing profile \`${d.label}\` for ${n}.`:`Added profile \`${d.label}\` for ${n}.`}}},{id:"profile list",group:"profile",name:"list",stage:"A",summary:"List configured Control Plane profiles",input:ez,output:o.z.array(w.extend({default:o.z.boolean()})),handler:async function(e){const t=e.store.list(),n=e.store.defaultProfile();return{data:t.map(e=>({...e,default:e.label===n})),columns:[{key:"label",header:"profile"},{key:"origin",header:"origin"},{key:"controlPlaneId",header:"controlPlaneId"},{key:"protocolVersion",header:"protocol"},{key:"fingerprint",header:"fingerprint",width:28},{key:"default",header:"default"}]}}},{id:"profile use",group:"profile",name:"use",stage:"A",summary:"Set the default profile",args:[{name:"label",description:"Profile label",required:!0}],input:Vz,output:o.z.object({defaultProfile:o.z.string()}),handler:async function(e,t){const n=pg(t.args.label,"label");return e.store.setDefault(n),{data:{defaultProfile:n},message:`Default profile is now \`${n}\`.`}}},{id:"profile show",group:"profile",name:"show",stage:"A",summary:"Show one profile, its pinned identity and local sign-in state",args:[{name:"label",description:"Profile label (defaults to the selected profile)"}],input:tz({label:o.z.string().optional()}),output:w.extend({signedIn:o.z.boolean(),sessionExpiresAt:o.z.string().optional()}),handler:async function(e,t){const n=t.args.label?.trim(),i=n?e.store.get(n):e.store.select(e.profile,e.env);if(!i)throw new m("CLI_PROFILE_UNKNOWN",`Unknown profile \`${n}\`.`,7,{profile:n});const o=e.store.secrets().read(i.label);return{data:{...i,signedIn:Boolean(o),...o?.expiresAt?{sessionExpiresAt:o.expiresAt}:{}}}}},{id:"profile remove",group:"profile",name:"remove",stage:"A",write:!0,summary:"Remove a profile and its local credentials",args:[{name:"label",description:"Profile label",required:!0}],input:Vz,output:o.z.object({label:o.z.string(),removed:o.z.boolean()}),handler:async function(e,t){const n=pg(t.args.label,"label");if(!e.store.get(n))throw new m("CLI_PROFILE_UNKNOWN",`Unknown profile \`${n}\`.`,7,{profile:n});return Cp(e,`profile remove ${n}`,()=>({method:"DELETE",path:`local:profiles/${n}`}),async()=>{const t=e.store.remove(n);return{data:{label:n,removed:t},message:t?`Removed profile \`${n}\`.`:void 0}})}},{id:"profile trust",group:"profile",name:"trust",stage:"A",write:!0,summary:"Re-pin the identity fingerprint of an existing profile after verifying it",args:[{name:"label",description:"Profile label",required:!0}],input:Vz,output:w,handler:async function(e,t){const n=pg(t.args.label,"label"),i=e.store.get(n);if(!i)throw new m("CLI_PROFILE_UNKNOWN",`Unknown profile \`${n}\`.`,7,{profile:n});const o=await Qu(i.origin,e.fetchImpl),a=o.payload.publicKey.fingerprint,r=i.fingerprint;if(e.output.warn(`Pinned fingerprint: ${r}\nPresented fingerprint: ${a}`),r===a)return{data:{label:n,fingerprint:a,trusted:!0,changed:!1},message:`Profile \`${n}\` already trusts this Control Plane identity.`};if(o.payload.controlPlaneId!==i.controlPlaneId)throw new m("CLI_IDENTITY_MISMATCH",`Profile \`${n}\` is pinned to Control Plane ${i.controlPlaneId}, but ${i.origin} now presents ${o.payload.controlPlaneId}. Refusing to re-trust a different Control Plane; add it as a new profile instead.`,13);return Cp(e,`profile trust ${n}`,()=>({method:"PATCH",path:`local:profiles/${n}`,body:{fingerprint:a}}),async()=>{const t=(new Date).toISOString();return{data:e.store.save({...i,fingerprint:a,protocolVersion:o.payload.protocolVersion,capabilities:o.payload.capabilities,trustedAt:t,updatedAt:t,identityChangedAt:t,replacedFingerprint:r}),message:`Profile \`${n}\` now trusts ${a}.`}})}}]),Yz=nz("auth","Authenticate the CLI against a Control Plane",[{id:"login",group:"auth",name:"login",stage:"A",summary:"Authorize this CLI through the Control Plane web login",options:[{flags:"--device",description:"Use the device authorization flow for machines without a browser"}],input:tz({device:o.z.boolean().optional()}),output:o.z.object({profile:o.z.string(),sessionId:o.z.string(),expiresAt:o.z.string(),loginMode:o.z.enum(["browser","device"])}),examples:["thctl login","thctl login --device --profile prod"],handler:async function(e,t){const n=await vp(e),i=t.options.device?"device":"browser",o=await async function(e){return"device"===e.mode?async function(e){const{store:t,fetchImpl:n,output:i}=e,o=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),a=await hg({store:t,profileLabel:e.profileLabel,fetchImpl:n}),r=await a.client.auth.cliAuthorize({mode:"device",client:Gu()});if("device"!==r.mode)throw z("The Control Plane returned a browser authorization for a device request.");i.message(`Open this URL on any device and confirm the code:\n${r.verificationUri}\nUser code: ${r.userCode}`);let s=1e3*Math.max(1,r.intervalSeconds);const d=Date.parse(r.expiresAt);for(;;){if(Date.now()>=d)throw new m("CLI_AUTHORIZATION_EXPIRED","The device authorization expired before it was approved. Run `thctl login --device` again.",5);await o(e.pollIntervalMs??s);try{const e=await a.client.auth.cliToken({grantType:"urn:ietf:params:oauth:grant-type:device_code",requestId:r.requestId});return await yg(a,e,"device"),{profile:a.profile,session:e.session}}catch(e){if(!(e instanceof m))throw e;if("CLI_AUTHORIZATION_PENDING"===e.code)continue;if("CLI_AUTHORIZATION_SLOW_DOWN"===e.code){const t=Number(e.details?.intervalSeconds);s=Math.max(s+5e3,Number.isFinite(t)?1e3*t:0);continue}throw e}}}(e):fg(e)}({profileLabel:n.label,mode:i,store:e.store,fetchImpl:e.fetchImpl,output:e.output,openUrl:e.openUrl,sleep:e.sleep});return{data:{profile:o.profile.label,sessionId:o.session.id,expiresAt:o.session.expiresAt,loginMode:i},message:`Signed in to ${o.profile.origin} as ${o.session.user.primaryUsername||o.session.user.displayName}.`}}},{id:"logout",group:"auth",name:"logout",stage:"A",summary:"Revoke the stored CLI session on the server and locally",input:ez,output:o.z.object({profile:o.z.string(),revoked:o.z.boolean()}),handler:async function(e){const t=await vp(e);if(!e.store.secrets().read(t.label))return{data:{profile:t.label,revoked:!1},message:`No stored CLI session for \`${t.label}\`.`};let n=!1;try{const i=await xp(e,{profile:t});n=(await i.client.auth.logoutCli()).ok}catch(e){if(!(e instanceof m)||5!==e.exitCode)throw e}finally{e.store.secrets().remove(t.label)}return{data:{profile:t.label,revoked:n},message:n?`Signed out of ${t.origin}.`:`Local CLI credentials for \`${t.label}\` were cleared.`}}},{id:"whoami",group:"auth",name:"whoami",stage:"A",summary:"Show the signed-in user, profile and pinned Control Plane identity",input:ez,output:o.z.looseObject({}),handler:async function(e){const t=await vp(e),n=await xp(e,{profile:t}),i=e.store.secrets().read(t.label),o=await n.client.auth.session();if(!o.authenticated||!o.user)throw new m("CLI_NOT_AUTHENTICATED",`The stored CLI session for \`${t.label}\` is not valid. Run \`thctl login\`.`,5);return{data:{profile:t.label,origin:t.origin,controlPlaneId:n.identity.payload.controlPlaneId,protocolVersion:n.identity.payload.protocolVersion,user:o.user,authorization:o.authorization,...i?.mode?{sessionMode:i.mode}:{},...i?.sessionId?{sessionId:i.sessionId}:{},...i?.expiresAt?{sessionExpiresAt:i.expiresAt}:{}},columns:[{key:"profile",header:"profile"},{key:"origin",header:"origin"},{key:"controlPlaneId",header:"controlPlaneId"},{key:"sessionExpiresAt",header:"expires"}],message:"local-trust"===i?.mode?`Connected to the local Control Plane at ${t.origin} as ${o.user.displayName} (local trust session).`:`Signed in to ${t.origin} as ${o.user.primaryUsername||o.user.displayName}.`}}}],{flat:!0}),Wz={name:"instanceId",description:"Controlled instance ID",required:!0},Kz=nz("instance","Inspect and control instances",[{id:"instance list",group:"instance",name:"list",stage:"A",summary:"List controlled instances from the authoritative directory projection",options:[{flags:"--node <nodeId>",description:"Only instances on this node"}],input:tz({node:o.z.string().optional()}),output:ea,handler:async function(e,t){const n=await xp(e),i=await n.client.resources.instanceBoard(e.signal),o="string"==typeof t.options.node?t.options.node.trim():"",a=o?i.filter(e=>e.nodeId===o):i;return{data:a,columns:ig,message:a.length?void 0:"No controlled instances matched."}}},{id:"instance show",group:"instance",name:"show",stage:"A",summary:"Show one controlled instance from the authoritative directory projection",args:[Wz],input:tz({instanceId:o.z.string()}),output:Xo,handler:async function(e,t){const n=ng(t),i=await xp(e),o=(await i.client.resources.instanceBoard(e.signal)).find(e=>e.id===n);if(!o)throw new m("CLI_INSTANCE_NOT_FOUND",`No controlled instance \`${n}\` is visible to this account.`,7,{instanceId:n});return{data:o,columns:ig}}},{id:"instance create",group:"instance",name:"create",stage:"B",write:!0,summary:"Create a controlled instance from a JSON request body",options:[{flags:"--config <file>",description:"Instance create request JSON (Control Plane wire body)"},{flags:"--name <name>",description:"Override the instance display name"},{flags:"--node <nodeId>",description:"Override the target node"},{flags:"--start",description:"Set start: true (server default is false)"}],input:tz({config:o.z.string(),name:o.z.string().optional(),node:o.z.string().optional(),start:o.z.boolean().optional()}),output:Fd,examples:["thctl instance create --config ./instance.json --start","thctl instance create --config ./instance.json --name demo --node node_x --dry-run"],handler:async function(e,t){const n=Pp(Rp(t,"config"),Bd,"instance config"),i=jp(t,"name"),o=jp(t,"node"),a={...n,...i?{name:i}:{},...o?{nodeId:o}:{},...!0===t.options.start?{start:!0}:{}},r=await xp(e),s=await Cp(e,"instance create",()=>({method:"POST",path:"/api/controlled-instances",body:a}),()=>r.client.resources.createInstance(a));if(!s)return;const d="failed"===s.startOutcome.status?`Instance \`${s.id}\` created but start failed: ${s.startOutcome.error?.message??"unknown error"}.`:"started"===s.startOutcome.status?`Instance \`${s.id}\` created; start requested (status: ${s.status}).`:`Instance \`${s.id}\` created (status: ${s.status}).`;return{data:s,columns:dg,message:d}}},{id:"instance delete",group:"instance",name:"delete",stage:"B",write:!0,summary:"Delete a controlled instance, optionally deleting its volumes",args:[Wz],options:[{flags:"--volumes",description:"Also delete the instance's managed volumes (irreversible)"}],input:tz({instanceId:o.z.string(),volumes:o.z.boolean().optional()}),output:Kr,examples:["thctl instance delete <instanceId> --yes","thctl instance delete <instanceId> --volumes --yes"],handler:async function(e,t){const n=ng(t),i=Yr.parse({deleteVolumes:!0===t.options.volumes}),o=await xp(e),a=await Cp(e,`instance delete ${n}`,()=>({method:"DELETE",path:`/api/controlled-instances/${encodeURIComponent(n)}`,body:i}),()=>o.client.resources.deleteInstance(n,i));if(a){if(!a.completed)throw new m("CLI_INSTANCE_DELETE_INCOMPLETE",`Instance \`${n}\` deletion is incomplete; re-run the same command after resolving the failed volumes.`,8,{instanceId:n,volumeResults:a.volumeResults});return{data:a,columns:cg,message:a.retainedVolumes.length?`Instance \`${n}\` deleted; ${a.retainedVolumes.length} volume(s) retained (pass --volumes to delete them).`:`Instance \`${n}\` deleted.`}}}},{id:"instance start",group:"instance",name:"start",stage:"A",write:!0,summary:"Start a controlled instance",args:[Wz],input:tz({instanceId:o.z.string()}),output:o.z.object({id:o.z.string(),status:o.z.string()}),handler:ag},{id:"instance stop",group:"instance",name:"stop",stage:"A",write:!0,summary:"Stop a controlled instance",args:[Wz],input:tz({instanceId:o.z.string()}),output:o.z.object({id:o.z.string(),status:o.z.string()}),handler:rg},{id:"instance restart",group:"instance",name:"restart",stage:"A",write:!0,summary:"Restart a controlled instance",args:[Wz],input:tz({instanceId:o.z.string()}),output:o.z.object({id:o.z.string(),status:o.z.string()}),handler:sg},{id:"instance logs",group:"instance",name:"logs",stage:"C",summary:"Stream instance logs (planned with the events stream work)",args:[Wz],options:[{flags:"--follow",description:"Keep streaming new log lines"}],input:tz({instanceId:o.z.string(),follow:o.z.boolean().optional()}),output:Xg,outputPinned:!1},{id:"instance rename",group:"instance",name:"rename",stage:"B",write:!0,summary:"Rename a controlled instance",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"name",description:"New display name",required:!0}],input:tz({instanceId:o.z.string(),name:o.z.string()}),output:o.z.object({id:o.z.string(),name:o.z.string()}),handler:async function(e,t){const n=ng(t),i=t.args.name?.trim();if(!i)throw new m("CLI_ARGUMENT_MISSING","Missing required argument <name>.",2);const o=await xp(e),a=await Cp(e,`instance rename ${n}`,()=>({method:"PATCH",path:`/api/controlled-instances/${encodeURIComponent(n)}`,body:{name:i}}),()=>o.client.resources.updateInstanceName(n,i));if(a)return{data:a,columns:[{key:"id",header:"instance"},{key:"name",header:"name",width:24}],message:`Instance \`${n}\` renamed to \`${a.name}\`.`}}}]),Jz=nz("ai-session","Inspect and drive AI sessions",[{id:"ai-session list",group:"ai-session",name:"list",stage:"A",summary:"List AI sessions across visible instances",options:[{flags:"--instance <instanceId>",description:"Only sessions of this instance"}],input:tz({instance:o.z.string().optional()}),output:qn,handler:async function(e,t){const n=await xp(e),i="string"==typeof t.options.instance?t.options.instance.trim():"",o=await n.client.aiSessions.list(e.signal,i||void 0);if(e.output.json)return{data:o};const a=o.instances.flatMap(e=>e.aiSessions.sessions.map(t=>({...t,instanceId:e.instanceId,title:t.title||t.userPrompt||t.summary||t.id})));return{data:a,columns:_p,message:a.length?void 0:"No AI sessions matched."}}},{id:"ai-session show",group:"ai-session",name:"show",stage:"A",summary:"Show one AI session projection",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string()}),output:yt,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=await xp(e),a=await o.client.aiSessions.detail(n,i,void 0,e.signal);if(e.output.json)return{data:a};if("not-modified"===a.kind)return{data:a,message:`Session \`${i}\` is unchanged at revision ${a.revision}.`};const r=a.detail;return{data:{id:r.id,cwd:r.cwd??"",model:r.modelSelection?.modelName??"",queued:r.queue?.pendingCount??0,subAgents:r.subAgents?.length??0,error:r.error??""},columns:[{key:"id",header:"session"},{key:"cwd",header:"cwd",width:40},{key:"model",header:"model"},{key:"queued",header:"queued"},{key:"subAgents",header:"subagents"},{key:"error",header:"error",width:40}]}}},{id:"ai-session history",group:"ai-session",name:"history",stage:"B",summary:"List provider session history for an instance",args:[{name:"instanceId",description:"Controlled instance ID",required:!0}],options:[{flags:"--agent <agent>",description:"Restrict to one agent",repeatable:!0}],input:tz({instanceId:o.z.string(),agent:o.z.array(o.z.string()).optional()}),output:St,handler:async function(e,t){const n=kp(t,"instanceId"),i=Tp(t,"agent"),o=await xp(e),a=await o.client.aiSessions.history(n,e.signal,i.length?i:void 0);if(e.output.json)return{data:a};const r=a.items.map(e=>({...e,title:e.title||e.userPrompt||e.lastMessage||e.providerSessionId}));return{data:r,columns:[{key:"id",header:"session"},{key:"agent",header:"agent"},{key:"title",header:"title",width:40},{key:"cwd",header:"cwd",width:30},{key:"lastActiveAt",header:"last active"}],message:r.length?void 0:"No provider session history matched."}}},{id:"ai-session turns",group:"ai-session",name:"turns",stage:"B",summary:"List turn index entries of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--revision <revision>",description:"Return not-modified when this revision already matches"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),revision:o.z.string().optional()}),output:ft,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=jp(t,"revision"),a=await xp(e),r=await a.client.aiSessions.turnIndex(n,i,o,e.signal);return e.output.json?{data:r}:"not-modified"===r.kind?{data:r,message:`Turn index for \`${i}\` is unchanged at revision ${r.revision}.`}:{data:r.index.turns,columns:[{key:"id",header:"turn",width:40},{key:"status",header:"status"},{key:"phase",header:"phase"},{key:"startedAt",header:"started"},{key:"completedAt",header:"completed"}],message:r.index.turns.length?void 0:`AI session \`${i}\` has no turns yet.`}}},{id:"ai-session turn",group:"ai-session",name:"turn",stage:"B",summary:"Show one turn body of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"turnId",description:"Turn ID",required:!0}],options:[{flags:"--revision <revision>",description:"Return not-modified when this revision already matches"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),turnId:o.z.string(),revision:o.z.string().optional()}),output:It,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=kp(t,"turnId"),a=jp(t,"revision"),r=await xp(e),s=await r.client.aiSessions.turnBody(n,i,o,a,e.signal);if(e.output.json)return{data:s};if("not-modified"===s.kind)return{data:s,message:`Turn \`${o}\` is unchanged at revision ${s.revision}.`};const d=s.body.turn;return{data:[...(d.userMessages??[]).map(e=>({kind:"user",message:e.id,text:e.text})),...d.lastMessage?[{kind:"assistant",message:d.lastMessageItemId??"",text:d.lastMessage}]:[]],columns:[{key:"kind",header:"kind"},{key:"message",header:"message",width:24},{key:"text",header:"text",width:60}],message:`Turn \`${o}\` is ${d.status}.`}}},{id:"ai-session timeline",group:"ai-session",name:"timeline",stage:"B",summary:"Show the conversation timeline of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string()}),output:ee,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=await xp(e),a=await o.client.aiSessions.timeline(n,i,e.signal);return e.output.json?{data:a}:{data:qp(a.items),columns:Lp,message:a.items.length?void 0:`AI session \`${i}\` has no timeline items.`}}},{id:"ai-session turn-timeline",group:"ai-session",name:"turn-timeline",stage:"B",summary:"Show the timeline of one AI session turn",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"turnId",description:"Turn ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),turnId:o.z.string()}),output:te,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=kp(t,"turnId"),a=await xp(e),r=await a.client.aiSessions.turnTimeline(n,i,o,e.signal);return e.output.json?{data:r}:{data:qp(r.items),columns:Lp,message:r.items.length?void 0:`Turn \`${o}\` has no timeline items.`}}},{id:"ai-session create",group:"ai-session",name:"create",stage:"B",write:!0,summary:"Create an AI session on an instance",args:[{name:"instanceId",description:"Controlled instance ID",required:!0}],options:[{flags:"--prompt <text>",description:"Initial prompt"},{flags:"--agent <agent>",description:"Agent kind (codex, claude, opencode)"},{flags:"--cwd-folder <cwdFolderId>",description:"Instance folder to run in"},{flags:"--story <storyId>",description:"Story to attach the session to"},{flags:"--request-id <id>",description:"Client request ID for retry-safe creation"}],input:tz({instanceId:o.z.string(),prompt:o.z.string(),agent:o.z.string(),cwdFolder:o.z.string().optional(),story:o.z.string().optional(),requestId:o.z.string().optional()}),output:Ge,handler:async function(e,t){const n=kp(t,"instanceId"),i={agent:Rp(t,"agent"),message:Rp(t,"prompt"),clientRequestId:jp(t,"request-id")??a.randomUUID(),attachments:[],references:[],...jp(t,"cwd-folder")?{cwdFolderId:jp(t,"cwd-folder")}:{},...jp(t,"story")?{storyId:jp(t,"story")}:{}},o=await xp(e),r=await Cp(e,"ai-session create",()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/ai-sessions`,body:i}),()=>o.client.aiSessions.create(n,i));if(r)return{data:r,columns:[{key:"aiSessionId",header:"session"},{key:"disposition",header:"disposition"},{key:"providerSessionId",header:"provider session"}],message:`AI session \`${r.aiSessionId}\` is ${r.disposition}.`}}},{id:"ai-session send",group:"ai-session",name:"send",stage:"B",write:!0,summary:"Send a message to an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"message",description:"Message text",required:!0}],options:[{flags:"--mode <auto|queue|steer|immediate>",description:"Delivery mode"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),message:o.z.string(),mode:o.z.string().optional()}),output:xt,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=kp(t,"message"),a=jp(t,"mode"),r=a?function(e){const t=ze.safeParse(e);if(!t.success)throw new m("CLI_INVALID_OPTION",`--mode must be one of: ${ze.options.join(", ")}.`,2,{option:"mode",value:e});return t.data}(a):void 0,s={message:o,...r?{mode:r}:{}},d=await xp(e),c=await Cp(e,"ai-session send",()=>({method:"POST",path:`${Up(n,i)}/messages`,body:s}),()=>d.client.aiSessions.sendMessage(n,i,s));if(c)return{data:c,message:`Message sent to AI session \`${i}\`.`}}},{id:"ai-session interrupt",group:"ai-session",name:"interrupt",stage:"B",write:!0,summary:"Interrupt the active turn of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string()}),output:xt,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=await xp(e),a=await Cp(e,"ai-session interrupt",()=>({method:"POST",path:`${Up(n,i)}/interrupt`}),()=>o.client.aiSessions.interrupt(n,i));if(a)return{data:a,message:`Interrupt requested for AI session \`${i}\`.`}}},{id:"ai-session approval",group:"ai-session",name:"approval",stage:"B",write:!0,summary:"Answer a pending approval request of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--decision <allow|deny|skip>",description:"Approval decision"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),decision:o.z.enum(["allow","deny","skip"])}),output:xt,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=function(e){const t=tt.safeParse({decision:e});if(!t.success)throw new m("CLI_INVALID_OPTION","--decision must be one of: allow, deny, skip.",2,{option:"decision",value:e});return t.data}(Rp(t,"decision")),a=await xp(e),r=await Cp(e,"ai-session approval",()=>({method:"POST",path:`${Up(n,i)}/approval`,body:o}),()=>a.client.aiSessions.approval(n,i,o.decision));if(r)return{data:r,message:`Approval \`${o.decision}\` submitted for AI session \`${i}\`.`}}},{id:"ai-session resume",group:"ai-session",name:"resume",stage:"B",write:!0,summary:"Resume a suspended AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string()}),output:jt,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=await xp(e),a=await Cp(e,"ai-session resume",()=>({method:"POST",path:`${Up(n,i)}/resume`,body:{}}),()=>o.client.aiSessions.resume(n,i,{}));if(a)return{data:a,columns:[{key:"aiSessionId",header:"session"},{key:"disposition",header:"disposition"},{key:"providerSessionId",header:"provider session"}],message:`AI session \`${i}\` is ${a.disposition}.`}}},{id:"ai-session read",group:"ai-session",name:"read",stage:"B",write:!0,summary:"Mark an AI session as read",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string()}),output:Ve,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=await xp(e),a=await Cp(e,"ai-session read",()=>({method:"POST",path:`${Up(n,i)}/read`}),()=>o.client.aiSessions.markRead(n,i));if(a)return{data:a,message:`AI session \`${i}\` marked as read.`}}},{id:"ai-session rename",group:"ai-session",name:"rename",stage:"B",write:!0,summary:"Rename an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--title <title>",description:"New session title"},{flags:"--request-id <id>",description:"Client request ID for retry-safe rename"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),title:o.z.string(),requestId:o.z.string().optional()}),output:we,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o={title:Rp(t,"title"),clientRequestId:jp(t,"request-id")??a.randomUUID()},r=await xp(e),s=await Cp(e,"ai-session rename",()=>({method:"PUT",path:`${Up(n,i)}/title`,body:o}),()=>r.client.aiSessions.rename(n,i,o));if(s)return{data:s,columns:[{key:"aiSessionId",header:"session"},{key:"disposition",header:"disposition"},{key:"title",header:"title",width:40}],message:`AI session \`${s.aiSessionId}\` is ${s.disposition}.`}}},{id:"ai-session fork",group:"ai-session",name:"fork",stage:"B",write:!0,summary:"Fork an AI session into a new session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--through-turn <turnId>",description:"Fork after this turn"},{flags:"--workspace <current|managed-worktree>",description:"Workspace mode for the fork"},{flags:"--request-id <id>",description:"Client request ID for retry-safe fork"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),throughTurn:o.z.string().optional(),workspace:o.z.string().optional(),requestId:o.z.string().optional()}),output:Ke,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=jp(t,"through-turn"),r=jp(t,"workspace"),s=Ep(We,{clientRequestId:jp(t,"request-id")??a.randomUUID(),...o?{throughTurnId:o}:{},...r?{workspace:{mode:r}}:{}},"fork input"),d=await xp(e),c=await Cp(e,"ai-session fork",()=>({method:"POST",path:`${Up(n,i)}/fork`,body:s}),()=>d.client.aiSessions.fork(n,i,s));if(c)return{data:c,columns:[{key:"aiSessionId",header:"session"},{key:"disposition",header:"disposition"},{key:"providerSessionId",header:"provider session"}],message:`AI session \`${c.aiSessionId}\` is ${c.disposition}.`}}},{id:"ai-session close",group:"ai-session",name:"close",stage:"B",write:!0,summary:"Close an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--request-id <id>",description:"Client request ID for retry-safe close"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),requestId:o.z.string().optional()}),output:Xe,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=jp(t,"request-id")??a.randomUUID(),r=await xp(e),s=await Cp(e,"ai-session close",()=>({method:"POST",path:`${Up(n,i)}/close`,body:{clientRequestId:o}}),()=>r.client.aiSessions.close(n,i,o));if(s)return{data:s,columns:[{key:"aiSessionId",header:"session"},{key:"disposition",header:"disposition"},{key:"providerSessionId",header:"provider session"}],message:`AI session \`${s.aiSessionId}\` is ${s.disposition}.`}}},{id:"ai-session model",group:"ai-session",name:"model",stage:"B",write:!0,summary:"Switch the model of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--entity <modelEntityId>",description:"Model entity ID"},{flags:"--name <modelName>",description:"Model name within the entity"},{flags:"--request-id <id>",description:"Client request ID for retry-safe switching"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),entity:o.z.string(),name:o.z.string(),requestId:o.z.string().optional()}),output:Me,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o={modelEntityId:Rp(t,"entity"),modelName:Rp(t,"name")},r=jp(t,"request-id")??a.randomUUID(),s=await xp(e),d=await Cp(e,"ai-session model",()=>({method:"PUT",path:`${Up(n,i)}/model-selection`,body:{clientRequestId:r,modelSelection:o}}),()=>s.client.aiSessions.updateModelSelection(n,i,r,o));if(d)return{data:d,columns:[{key:"sessionId",header:"session"},{key:"accepted",header:"accepted"}],message:`Model selection for AI session \`${i}\` updated.`}}},{id:"ai-session reasoning",group:"ai-session",name:"reasoning",stage:"B",write:!0,summary:"Set the reasoning effort of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--effort <none|minimal|low|medium|high|xhigh|max|ultra>",description:"Reasoning effort"},{flags:"--request-id <id>",description:"Client request ID for retry-safe updates"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),effort:o.z.string(),requestId:o.z.string().optional()}),output:Fe,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=Rp(t,"effort"),r=Ne.safeParse(o);if(!r.success)throw new m("CLI_INVALID_OPTION",`--effort must be one of: ${Ne.options.join(", ")}.`,2,{option:"effort",value:o});const s=jp(t,"request-id")??a.randomUUID(),d=await xp(e),c=await Cp(e,"ai-session reasoning",()=>({method:"PUT",path:`${Up(n,i)}/reasoning-effort`,body:{clientRequestId:s,reasoningEffort:r.data}}),()=>d.client.aiSessions.updateReasoningEffort(n,i,s,r.data));if(c)return{data:c,columns:[{key:"sessionId",header:"session"},{key:"accepted",header:"accepted"}],message:`Reasoning effort for AI session \`${i}\` updated.`}}},{id:"ai-session queue list",group:"ai-session",name:"queue list",stage:"B",summary:"List queued messages of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string()}),output:at,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=await xp(e),a=Op(await o.client.aiSessions.detail(n,i,void 0,e.signal),i).queue;return e.output.json?{data:a}:{data:a.items,columns:[{key:"id",header:"queue"},{key:"status",header:"status"},{key:"message",header:"message",width:50},{key:"createdAt",header:"created"}],message:a.items.length?void 0:"No queued messages."}}},{id:"ai-session queue steer",group:"ai-session",name:"queue steer",stage:"B",write:!0,summary:"Steer a queued message into the active turn",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"queueId",description:"Queued message ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),queueId:o.z.string()}),output:xt,handler:Mp},{id:"ai-session queue retry",group:"ai-session",name:"queue retry",stage:"B",write:!0,summary:"Retry a failed queued message",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"queueId",description:"Queued message ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),queueId:o.z.string()}),output:vt,handler:Bp},{id:"ai-session queue remove",group:"ai-session",name:"queue remove",stage:"B",write:!0,summary:"Remove a queued message",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"queueId",description:"Queued message ID",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),queueId:o.z.string()}),output:vt,handler:Hp},{id:"ai-session queue edit",group:"ai-session",name:"queue edit",stage:"B",write:!0,summary:"Edit a queued message of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"queueId",description:"Queued message ID",required:!0}],options:[{flags:"--message <text>",description:"Replacement message text"},{flags:"--expected-revision <revision>",description:"Queue revision for optimistic concurrency (defaults to the current queue)"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),queueId:o.z.string(),message:o.z.string(),expectedRevision:o.z.string().optional()}),output:vt,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=kp(t,"queueId"),a=Rp(t,"message"),r=await xp(e),s={expectedRevision:await Fp(e,r,n,i,t),message:a},d=await Cp(e,"ai-session queue edit",()=>({method:"PATCH",path:`${Up(n,i)}/queue/${encodeURIComponent(o)}`,body:s}),()=>r.client.aiSessions.editQueue(n,i,o,s));if(d)return{data:d,message:`Queued message \`${o}\` updated.`}}},{id:"ai-session queue reorder",group:"ai-session",name:"queue reorder",stage:"B",write:!0,summary:"Reorder queued messages of an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--queue <queueId>",description:"Queued message ID in the new order",repeatable:!0},{flags:"--expected-revision <revision>",description:"Queue revision for optimistic concurrency (defaults to the current queue)"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),queue:o.z.array(o.z.string()).optional(),expectedRevision:o.z.string().optional()}),output:vt,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=Tp(t,"queue");if(!o.length)throw new m("CLI_OPTION_MISSING","Pass at least one --queue <queueId> to reorder.",2,{option:"queue"});const a=await xp(e),r={expectedRevision:await Fp(e,a,n,i,t),queueIds:o},s=await Cp(e,"ai-session queue reorder",()=>({method:"PATCH",path:`${Up(n,i)}/queue/reorder`,body:r}),()=>a.client.aiSessions.reorderQueue(n,i,r));if(s)return{data:s,message:`Queue for AI session \`${i}\` reordered.`}}}]),Zz=nz("app-session","Inspect and control app sessions",[{id:"app-session list",group:"app-session",name:"list",stage:"B",summary:"List app sessions across visible instances",options:[{flags:"--instance <instanceId>",description:"Only sessions of this instance"}],input:tz({instance:o.z.string().optional()}),output:ni,handler:async function(e,t){const n=jp(t,"instance"),i=await xp(e),o=await i.client.appSessions.list(e.signal,n);if(e.output.json)return{data:o};const a=o.instances.flatMap(e=>e.appSessions.sessions.map(t=>({...t,instanceId:e.instanceId})));return{data:a,columns:Vp,message:a.length?void 0:"No app sessions matched."}}},{id:"app-session show",group:"app-session",name:"show",stage:"B",summary:"Show one app session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"appSessionId",description:"App session ID",required:!0}],input:tz({instanceId:o.z.string(),appSessionId:o.z.string()}),output:Gn,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"appSessionId"),o=await xp(e),a=(await o.client.appSessions.list(e.signal,n)).instances.filter(e=>e.instanceId===n).flatMap(e=>e.appSessions.sessions).find(e=>e.id===i);if(!a)throw new m("CLI_APP_SESSION_NOT_FOUND",`No app session \`${i}\` is visible on instance \`${n}\`.`,7,{instanceId:n,appSessionId:i});return{data:a,columns:Vp}}},{id:"app-session start",group:"app-session",name:"start",stage:"B",write:!0,summary:"Start an app session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"appId",description:"App ID",required:!0}],options:[{flags:"--cwd-folder <cwdFolderId>",description:"Instance folder to launch in"}],input:tz({instanceId:o.z.string(),appId:o.z.string(),cwdFolder:o.z.string().optional()}),output:Gn,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"appId"),o=jp(t,"cwd-folder"),a={appId:i,...o?{cwdFolderId:o}:{}},r=await xp(e),s=await Cp(e,"app-session start",()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/apps/sessions`,body:a}),()=>r.client.appSessions.launch(n,a));if(s)return{data:s,columns:[{key:"id",header:"app session"},{key:"appId",header:"app"},{key:"status",header:"status"}],message:`App session \`${s.id}\` started.`}}},{id:"app-session stop",group:"app-session",name:"stop",stage:"B",write:!0,summary:"Stop an app session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"appSessionId",description:"App session ID",required:!0}],input:tz({instanceId:o.z.string(),appSessionId:o.z.string()}),output:Gn,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"appSessionId"),o=await xp(e),a=await Cp(e,"app-session stop",()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/apps/sessions/${encodeURIComponent(i)}/stop`,body:{}}),()=>o.client.appSessions.stop(n,i));if(a)return{data:a,columns:[{key:"id",header:"app session"},{key:"status",header:"status"}],message:`App session \`${i}\` is ${a.status}.`}}},{id:"app-session rename",group:"app-session",name:"rename",stage:"B",write:!0,summary:"Rename an app session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"appSessionId",description:"App session ID",required:!0},{name:"title",description:"New session title",required:!0}],input:tz({instanceId:o.z.string(),appSessionId:o.z.string(),title:o.z.string()}),output:Gn,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"appSessionId"),o=Ep(Gp,kp(t,"title"),"title"),a=await xp(e),r=await Cp(e,"app-session rename",()=>({method:"PATCH",path:Wp(n,i),body:{title:o}}),()=>a.client.appSessions.rename(n,i,o));if(r)return{data:r,columns:[{key:"id",header:"app session"},{key:"title",header:"title",width:40},{key:"status",header:"status"}],message:`App session \`${r.id}\` renamed to \`${r.title??o}\`.`}}},{id:"app-session access",group:"app-session",name:"access",stage:"B",write:!0,summary:"Create a terminal or VNC access lease for an app session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"appSessionId",description:"App session ID",required:!0}],input:tz({instanceId:o.z.string(),appSessionId:o.z.string()}),output:Hn,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"appSessionId"),o=await xp(e),a=await Cp(e,"app-session access",()=>({method:"POST",path:`${Wp(n,i)}/access`,body:{}}),()=>o.client.appSessions.access(n,i));if(a)return e.output.json?{data:a}:{data:{...a,url:new URL(a.url,o.identity.origin).toString()},columns:Yp,message:`${a.mode.toUpperCase()} access lease expires at ${a.expiresAt}.`}}},{id:"app-session restart",group:"app-session",name:"restart",stage:"B",write:!0,summary:"Restart an app session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"appSessionId",description:"App session ID",required:!0}],input:tz({instanceId:o.z.string(),appSessionId:o.z.string()}),output:Gn,handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"appSessionId"),o=await xp(e),a=await Cp(e,"app-session restart",()=>({method:"POST",path:`${Wp(n,i)}/restart`,body:{}}),()=>o.client.appSessions.restart(n,i));if(a)return{data:a,columns:[{key:"id",header:"app session"},{key:"appId",header:"app"},{key:"status",header:"status"}],message:`App session \`${i}\` restarted as \`${a.id}\`.`}}}]),Qz=nz("node","Inspect nodes",[{id:"node list",group:"node",name:"list",stage:"B",summary:"List nodes in the fleet directory",input:ez,output:Jo,handler:async function(e){const t=await xp(e),n=await t.client.resources.nodes(e.signal);return e.output.json?{data:n}:{data:ug(n),columns:mg,message:n.length?void 0:"No nodes matched."}}},{id:"node show",group:"node",name:"show",stage:"B",summary:"Show one node from the fleet directory",args:[{name:"nodeId",description:"Node ID",required:!0}],input:tz({nodeId:o.z.string()}),output:Ko,handler:async function(e,t){const n=kp(t,"nodeId"),i=await xp(e),o=(await i.client.resources.nodes(e.signal)).find(e=>e.id===n);if(!o)throw new m("CLI_NODE_NOT_FOUND",`No node \`${n}\` is visible in the fleet directory.`,7,{nodeId:n});return{data:o,columns:mg}}},{id:"node rename",group:"node",name:"rename",stage:"B",write:!0,summary:"Rename a node",args:[{name:"nodeId",description:"Node ID",required:!0},{name:"name",description:"New display name",required:!0}],input:tz({nodeId:o.z.string(),name:o.z.string()}),output:o.z.object({id:o.z.string(),name:o.z.string()}),handler:async function(e,t){const n=kp(t,"nodeId"),i=kp(t,"name"),o=await xp(e),a=await Cp(e,"node rename",()=>({method:"PATCH",path:`/api/nodes/${encodeURIComponent(n)}`,body:{name:i}}),()=>o.client.resources.updateNodeName(n,i));if(a)return{data:a,columns:[{key:"id",header:"node"},{key:"name",header:"name"}],message:`Node \`${n}\` renamed to \`${a.name}\`.`}}},...hz]),Xz={flags:"--node <nodeId>",description:"Node that owns the story (resolved from the directory when omitted)"},eh=[{name:"storyId",description:"Story ID",required:!0},{name:"automationId",description:"Automation ID",required:!0}],th=tz({storyId:o.z.string(),automationId:o.z.string(),node:o.z.string().optional()}),nh={flags:"--config <file>",description:"Story automation JSON file"},ih=tz({storyId:o.z.string(),node:o.z.string().optional(),config:o.z.string()}),oh=tz({storyId:o.z.string(),automationId:o.z.string(),node:o.z.string().optional(),config:o.z.string()}),ah=nz("story","Work with stories, documents and automations",[{id:"story list",group:"story",name:"list",stage:"B",summary:"List stories across visible nodes",input:ez,output:o.z.object({stories:o.z.array(Gc),unavailableNodeIds:o.z.array(o.z.string())}),handler:async function(e){const t=await xp(e),n=await t.client.stories.list(void 0,e.signal);if(e.output.json)return{data:n};const i=n.unavailableNodeIds.length?`Unavailable nodes: ${n.unavailableNodeIds.join(", ")}`:n.stories.length?void 0:"No stories matched.";return{data:Sg(n.stories),columns:vg,message:i}}},{id:"story show",group:"story",name:"show",stage:"B",summary:"Show one story",args:[{name:"storyId",description:"Story ID",required:!0}],options:[Xz],input:tz({storyId:o.z.string(),node:o.z.string().optional()}),output:Gc,handler:async function(e,t){const n=kp(t,"storyId"),i=await xp(e),o=await Cg(i,n,jp(t,"node"));return Ag(e,await i.client.stories.get(n,o))}},{id:"story create",group:"story",name:"create",stage:"B",write:!0,summary:"Create a story",args:[{name:"title",description:"Story title",required:!0}],options:[Xz,{flags:"--description <description>",description:"Story description"},{flags:"--max-idle-ai-sessions <count>",description:"Idle AI session retention limit"}],input:tz({title:o.z.string(),node:o.z.string().optional(),description:o.z.string().optional(),maxIdleAiSessions:o.z.number().int().nonnegative().optional()}),output:Gc,handler:async function(e,t){const n=kp(t,"title"),i=jp(t,"description"),o=jp(t,"max-idle-ai-sessions"),a={title:n,...i?{description:i}:{},...o?{maxIdleAiSessions:Ug(o,"max-idle-ai-sessions")}:{}},r=await xp(e),s=await async function(e,t){if(t)return t;const n=await e.client.resources.nodes();if(1===n.length)return n[0].id;throw u("CLI_NODE_REQUIRED",0===n.length?"No node is registered; register a node before creating stories.":`More than one node is registered (${n.map(e=>e.id).join(", ")}); pass --node <nodeId>.`,{nodeIds:n.map(e=>e.id)})}(r,jp(t,"node")),d=await Cp(e,"story create",()=>({method:"POST",path:"/api/stories",body:{nodeId:s,input:a}}),()=>r.client.stories.create(s,a));if(d)return{...Ag(e,d),message:`Story \`${d.id}\` created on node \`${s}\`.`}}},{id:"story update",group:"story",name:"update",stage:"B",write:!0,summary:"Update story metadata",args:[{name:"storyId",description:"Story ID",required:!0}],options:[Xz,{flags:"--title <title>",description:"New title"},{flags:"--description <description>",description:"New description"},{flags:"--max-idle-ai-sessions <count>",description:"Idle AI session retention limit"}],input:tz({storyId:o.z.string(),node:o.z.string().optional(),title:o.z.string().optional(),description:o.z.string().optional(),maxIdleAiSessions:o.z.number().int().nonnegative().optional()}),output:Gc,handler:async function(e,t){const n=kp(t,"storyId"),i=jp(t,"title"),o=jp(t,"description"),a=jp(t,"max-idle-ai-sessions"),r={...i?{title:i}:{},...o?{description:o}:{},...a?{maxIdleAiSessions:Ug(a,"max-idle-ai-sessions")}:{}};if(0===Object.keys(r).length)throw u("CLI_OPTION_MISSING","Provide at least one of --title, --description or --max-idle-ai-sessions.",{command:"story update"});const s=await xp(e),d=await Cg(s,n,jp(t,"node")),c=await Cp(e,"story update",()=>({method:"PATCH",path:`/api/stories/${encodeURIComponent(n)}`,body:{nodeId:d,input:r}}),()=>s.client.stories.update(n,d,r));if(c)return{...Ag(e,c),message:`Story \`${n}\` updated.`}}},{id:"story archive",group:"story",name:"archive",stage:"B",write:!0,summary:"Archive a story",args:[{name:"storyId",description:"Story ID",required:!0}],options:[Xz],input:tz({storyId:o.z.string(),node:o.z.string().optional()}),output:Gc,handler:jg},{id:"story restore",group:"story",name:"restore",stage:"B",write:!0,summary:"Restore an archived story",args:[{name:"storyId",description:"Story ID",required:!0}],options:[Xz],input:tz({storyId:o.z.string(),node:o.z.string().optional()}),output:Gc,handler:Rg},{id:"story remove",group:"story",name:"remove",stage:"B",write:!0,summary:"Remove a story",args:[{name:"storyId",description:"Story ID",required:!0}],options:[Xz],input:tz({storyId:o.z.string(),node:o.z.string().optional()}),output:o.z.object({deleted:o.z.boolean()}),handler:Tg},{id:"story document update",group:"story",name:"document update",stage:"B",write:!0,summary:"Update story document metadata",args:[{name:"storyId",description:"Story ID",required:!0},{name:"path",description:"Document path inside the story",required:!0}],options:[Xz,{flags:"--title <title>",description:"New document title"},{flags:"--new-path <path>",description:"Move the document to this story path"}],input:tz({storyId:o.z.string(),path:o.z.string(),node:o.z.string().optional(),title:o.z.string().optional(),newPath:o.z.string().optional()}),output:Gc,handler:async function(e,t){const n=kp(t,"storyId"),i=kp(t,"path"),o=jp(t,"title"),a=jp(t,"new-path"),r={...o?{title:o}:{},...a?{storyPath:a}:{}};if(0===Object.keys(r).length)throw u("CLI_OPTION_MISSING","Provide --title or --new-path.",{command:"story document update"});const s=await xp(e),d=await Cg(s,n,jp(t,"node")),c=await Cp(e,"story document update",()=>({method:"PATCH",path:`/api/stories/${encodeURIComponent(n)}/documents/${encodeURIComponent(i)}`,body:{nodeId:d,input:r}}),()=>s.client.stories.updateDocument(n,d,i,r));if(c)return{...Ag(e,c),message:`Document \`${i}\` updated on story \`${n}\`.`}}},{id:"story document remove",group:"story",name:"document remove",stage:"B",write:!0,summary:"Remove a story document",args:[{name:"storyId",description:"Story ID",required:!0},{name:"path",description:"Document path inside the story",required:!0}],options:[Xz],input:tz({storyId:o.z.string(),path:o.z.string(),node:o.z.string().optional()}),output:o.z.object({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"storyId"),i=kp(t,"path"),o=await xp(e),a=await Cg(o,n,jp(t,"node")),r=await Cp(e,"story document remove",()=>({method:"DELETE",path:`/api/stories/${encodeURIComponent(n)}/documents/${encodeURIComponent(i)}`,body:{nodeId:a}}),()=>o.client.stories.removeDocument(n,a,i));if(r)return{data:r,message:`Document \`${i}\` removed from story \`${n}\`.`}}},{id:"story document reorder",group:"story",name:"document reorder",stage:"B",write:!0,summary:"Reorder story documents",args:[{name:"storyId",description:"Story ID",required:!0},{name:"path",description:"Document paths in the new order",required:!0,variadic:!0}],options:[Xz],input:tz({storyId:o.z.string(),path:o.z.array(o.z.string()),node:o.z.string().optional()}),output:Gc,handler:async function(e,t){const n=kp(t,"storyId"),i=(t.rawArgs??[]).slice(1).map(e=>e.trim()).filter(Boolean);if(0===i.length)throw u("CLI_ARGUMENT_MISSING","Missing required argument <path...>.",{argument:"path"});const o=await xp(e),a=await Cg(o,n,jp(t,"node")),r={storyPaths:i},s=await Cp(e,"story document reorder",()=>({method:"POST",path:`/api/stories/${encodeURIComponent(n)}/documents/order`,body:{nodeId:a,input:r}}),()=>o.client.stories.reorderDocuments(n,a,r));if(s)return{...Ag(e,s),message:`Documents reordered on story \`${n}\`.`}}},{id:"story automation list",group:"story",name:"automation list",stage:"B",summary:"List story automations",args:[{name:"storyId",description:"Story ID",required:!0}],options:[Xz],input:tz({storyId:o.z.string(),node:o.z.string().optional()}),output:Hc,handler:async function(e,t){const n=kp(t,"storyId"),i=await xp(e),o=await Cg(i,n,jp(t,"node")),a=await i.client.stories.listAutomations(n,o);return e.output.json?{data:a}:{data:a.automations,columns:[{key:"automation.id",header:"automation"},{key:"automation.enabled",header:"enabled"},{key:"effectiveStatus",header:"status"},{key:"automation.actionId",header:"action"},{key:"nextRunAt",header:"next run"}],message:a.automations.length?void 0:"No automations matched."}}},{id:"story automation show",group:"story",name:"automation show",stage:"B",summary:"Show one story automation",args:eh,options:[Xz],input:th,output:Bc,handler:async function(e,t){const n=kp(t,"storyId"),i=kp(t,"automationId"),o=await xp(e),a=await Cg(o,n,jp(t,"node")),r=await o.client.stories.getAutomation(n,i,a);return e.output.json?{data:r}:{data:r,columns:[{key:"automation.id",header:"automation"},{key:"automation.enabled",header:"enabled"},{key:"effectiveStatus",header:"status"},{key:"lastRun.status",header:"last run"},{key:"nextRunAt",header:"next run"}]}}},{id:"story automation create",group:"story",name:"automation create",stage:"B",write:!0,summary:"Create a story automation from a JSON config file",args:[{name:"storyId",description:"Story ID",required:!0}],options:[Xz,nh],input:ih,output:Bc,handler:async function(e,t){const n=kp(t,"storyId"),i=Pp(Rp(t,"config"),Og,"story automation config"),o=await xp(e),a=await Cg(o,n,jp(t,"node")),r={storyId:n,...i},s=await Cp(e,"story automation create",()=>({method:"POST",path:`/api/stories/${encodeURIComponent(n)}/automations`,body:{nodeId:a,input:r}}),()=>o.client.stories.createAutomation(n,a,r));if(s)return{...Pg(e,s),message:`Automation \`${s.automation.id}\` created on story \`${n}\`.`}}},{id:"story automation update",group:"story",name:"automation update",stage:"B",write:!0,summary:"Update a story automation from a JSON config file",args:eh,options:[Xz,nh],input:oh,output:Bc,handler:async function(e,t){const n=kp(t,"storyId"),i=kp(t,"automationId"),o=Pp(Rp(t,"config"),Uc,"story automation update config"),a=await xp(e),r=await Cg(a,n,jp(t,"node")),s=await Cp(e,"story automation update",()=>({method:"PATCH",path:`/api/stories/${encodeURIComponent(n)}/automations/${encodeURIComponent(i)}`,body:{nodeId:r,input:o}}),()=>a.client.stories.updateAutomation(n,i,r,o));if(s)return{...Pg(e,s),message:`Automation \`${i}\` on story \`${n}\` updated.`}}},{id:"story automation remove",group:"story",name:"automation remove",stage:"B",write:!0,summary:"Remove a story automation",args:eh,options:[Xz],input:th,output:o.z.object({deleted:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"storyId"),i=kp(t,"automationId"),o=await xp(e),a=await Cg(o,n,jp(t,"node")),r=await Cp(e,"story automation remove",()=>({method:"DELETE",path:`/api/stories/${encodeURIComponent(n)}/automations/${encodeURIComponent(i)}?nodeId=${encodeURIComponent(a)}`}),()=>o.client.stories.removeAutomation(n,i,a));if(r){if(!r.deleted)throw new m("CLI_STORY_AUTOMATION_NOT_REMOVED",`Automation \`${i}\` on story \`${n}\` was not removed.`,8,{storyId:n,automationId:i});return{data:r,message:`Automation \`${i}\` removed from story \`${n}\`.`}}}},{id:"story automation enable",group:"story",name:"automation enable",stage:"B",write:!0,summary:"Enable a story automation",args:eh,options:[Xz],input:th,output:Bc,handler:Ng},{id:"story automation disable",group:"story",name:"automation disable",stage:"B",write:!0,summary:"Disable a story automation",args:eh,options:[Xz],input:th,output:Bc,handler:_g},{id:"story automation run",group:"story",name:"automation run",stage:"B",write:!0,summary:"Run a story automation now",args:eh,options:[Xz,{flags:"--request-id <id>",description:"Client request ID for retry-safe runs"}],input:tz({storyId:o.z.string(),automationId:o.z.string(),node:o.z.string().optional(),requestId:o.z.string().optional()}),output:Dc,handler:async function(e,t){const n=kp(t,"storyId"),i=kp(t,"automationId"),o=jp(t,"request-id")??a.randomUUID(),r=await xp(e),s=await Cg(r,n,jp(t,"node")),d={clientRequestId:o},c=await Cp(e,"story automation run",()=>({method:"POST",path:`/api/stories/${encodeURIComponent(n)}/automations/${encodeURIComponent(i)}/run`,body:{nodeId:s,input:d}}),()=>r.client.stories.runAutomation(n,i,s,d));if(c)return{data:c,columns:xg,message:`Automation \`${i}\` run ${c.status}.`}}},{id:"story automation runs",group:"story",name:"automation runs",stage:"B",summary:"List recent automation runs",args:eh,options:[Xz],input:th,output:Fc,handler:async function(e,t){const n=kp(t,"storyId"),i=kp(t,"automationId"),o=await xp(e),a=await Cg(o,n,jp(t,"node")),r=await o.client.stories.automationRuns(n,i,a);return e.output.json?{data:r}:{data:r.runs,columns:xg,message:r.runs.length?void 0:"No runs matched."}}}]),rh=nz("trigger","Inspect and run instance triggers",[{id:"trigger list",group:"trigger",name:"list",stage:"B",summary:"List triggers from the control plane registry",options:[{flags:"--instance <instanceId>",description:"Only triggers deployed to this instance"}],input:tz({instance:o.z.string().optional()}),output:ga,handler:async function(e,t){const n=jp(t,"instance"),i=await xp(e),o=await i.client.triggers.list(e.signal),a=n?o.triggers.filter(e=>e.deployments.some(e=>e.instanceId===n)):o.triggers;return e.output.json?{data:{...o,triggers:a}}:{data:a.map(Lg),columns:qg,message:a.length?void 0:"No triggers matched."}}},{id:"trigger show",group:"trigger",name:"show",stage:"B",summary:"Show one trigger and its deployments",args:[{name:"configHash",description:"Trigger config hash",required:!0}],options:[{flags:"--instance <instanceId>",description:"Only deployments on this instance"}],input:tz({configHash:o.z.string(),instance:o.z.string().optional()}),output:pa,handler:async function(e,t){const n=kp(t,"configHash"),i=jp(t,"instance"),o=await xp(e),a=(await o.client.triggers.list(e.signal)).triggers.find(e=>e.configHash===n);if(!a)throw new m("CLI_TRIGGER_NOT_FOUND",`No trigger \`${n}\` is visible in the control plane registry.`,7,{configHash:n});const r=i?{...a,deployments:a.deployments.filter(e=>e.instanceId===i)}:a;if(i&&0===r.deployments.length)throw new m("CLI_TRIGGER_DEPLOYMENT_NOT_FOUND",`Trigger \`${n}\` has no deployment on instance \`${i}\`.`,7,{configHash:n,instanceId:i});return e.output.json?{data:r}:{data:Lg(r),columns:qg}}},{id:"trigger create",group:"trigger",name:"create",stage:"B",write:!0,summary:"Create a trigger template and bind it to an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0}],options:[{flags:"--config <file>",description:"Trigger template JSON file"}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),config:o.z.string()}),output:o.z.looseObject({trigger:o.z.looseObject({configHash:o.z.string()}),binding:o.z.unknown()}),handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=Pp(Rp(t,"config"),za,"trigger config"),a=await xp(e),r=await Cp(e,"trigger create",()=>{return{...(e=[{method:"POST",path:"/api/triggers",body:o},{method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/ai-sessions/${encodeURIComponent(i)}/triggers`,body:{configHash:"<created>"}}])[0],steps:e};var e},async()=>{const e=await a.client.triggers.create(o);return{trigger:e,binding:await a.client.triggers.bindSession(n,i,e.configHash)}});if(r)return{data:r,columns:qg,message:`Trigger \`${r.trigger.configHash}\` created and bound to AI session \`${i}\`.`}}},{id:"trigger update",group:"trigger",name:"update",stage:"B",write:!0,summary:"Update a trigger template and fan out to its deployments",args:[{name:"configHash",description:"Trigger config hash",required:!0}],options:[{flags:"--config <file>",description:"Trigger template JSON file"}],input:tz({configHash:o.z.string(),config:o.z.string()}),output:o.z.looseObject({}),handler:async function(e,t){const n=kp(t,"configHash"),i=Pp(Rp(t,"config"),za,"trigger config"),o=await xp(e),a=await Cp(e,"trigger update",()=>({method:"PUT",path:`/api/triggers/${encodeURIComponent(n)}`,body:i}),()=>o.client.triggers.update(n,i));if(a)return{data:a,message:`Trigger \`${n}\` updated.`}}},{id:"trigger remove",group:"trigger",name:"remove",stage:"B",write:!0,summary:"Remove a trigger template and its deployments",args:[{name:"configHash",description:"Trigger config hash",required:!0}],input:tz({configHash:o.z.string()}),output:o.z.looseObject({}),handler:async function(e,t){const n=kp(t,"configHash"),i=await xp(e),o=await Cp(e,"trigger remove",()=>({method:"DELETE",path:`/api/triggers/${encodeURIComponent(n)}`}),()=>i.client.triggers.remove(n));if(o)return{data:o,message:`Trigger \`${n}\` removed.`}}},{id:"trigger run",group:"trigger",name:"run",stage:"B",write:!0,summary:"Run a trigger on an instance now",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"configHash",description:"Trigger config hash",required:!0}],options:[{flags:"--deployment <deploymentId>",description:"Specific deployment to run"}],input:tz({instanceId:o.z.string(),configHash:o.z.string(),deployment:o.z.string().optional()}),output:o.z.unknown(),handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"configHash"),o=jp(t,"deployment"),a=await xp(e),r=await Cp(e,"trigger run",()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/triggers/${encodeURIComponent(i)}/run`,body:o?{deploymentId:o}:{}}),()=>a.client.triggers.run(n,i,o));if(r)return{data:r,message:`Trigger \`${i}\` run requested on instance \`${n}\`.`}}},{id:"trigger bind",group:"trigger",name:"bind",stage:"B",write:!0,summary:"Bind a trigger template to an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"configHash",description:"Trigger config hash",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),configHash:o.z.string()}),output:o.z.object({config:aa,deployment:sa,runtime:da.optional()}),handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=kp(t,"configHash"),a=await xp(e),r=await Cp(e,"trigger bind",()=>({method:"POST",path:`/api/controlled-instances/${encodeURIComponent(n)}/ai-sessions/${encodeURIComponent(i)}/triggers`,body:{configHash:o}}),()=>a.client.triggers.bindSession(n,i,o));if(r)return{data:r,message:`Trigger \`${o}\` bound to AI session \`${i}\` on instance \`${n}\`.`}}},{id:"trigger unbind",group:"trigger",name:"unbind",stage:"B",write:!0,summary:"Unbind a trigger template from an AI session",args:[{name:"instanceId",description:"Controlled instance ID",required:!0},{name:"sessionId",description:"AI session ID",required:!0},{name:"configHash",description:"Trigger config hash",required:!0}],input:tz({instanceId:o.z.string(),sessionId:o.z.string(),configHash:o.z.string()}),output:o.z.unknown(),handler:async function(e,t){const n=kp(t,"instanceId"),i=kp(t,"sessionId"),o=kp(t,"configHash"),a=await xp(e),r=await Cp(e,"trigger unbind",()=>({method:"DELETE",path:`/api/controlled-instances/${encodeURIComponent(n)}/ai-sessions/${encodeURIComponent(i)}/triggers/${encodeURIComponent(o)}`}),()=>a.client.triggers.unbindSession(n,i,o));if(r)return{data:r,message:`Trigger \`${o}\` unbound from AI session \`${i}\` on instance \`${n}\`.`}}},{id:"trigger apply",group:"trigger",name:"apply",stage:"B",write:!0,summary:"Apply a trigger template to instances targeting an AI session",args:[{name:"configHash",description:"Trigger config hash",required:!0}],options:[{flags:"--instance <instanceId>",description:"Instance to deploy to (repeatable)",repeatable:!0},{flags:"--session <sessionId>",description:"Target AI session ID"},{flags:"--disabled",description:"Create the deployment disabled"}],input:tz({configHash:o.z.string(),instance:o.z.array(o.z.string()).min(1),session:o.z.string(),disabled:o.z.boolean().optional()}),output:o.z.looseObject({configHash:o.z.string(),results:o.z.array(o.z.unknown())}),handler:async function(e,t){const n=kp(t,"configHash"),i=Rp(t,"session"),o=[...new Set(Tp(t,"instance"))];if(!o.length)throw new m("CLI_OPTION_MISSING","Pass at least one --instance <instanceId> to apply.",2,{option:"instance"});const a={instanceIds:o,target:{type:"ai-session",aiSessionId:i},enabled:!0!==t.options.disabled},r=await xp(e),s=await Cp(e,"trigger apply",()=>({method:"POST",path:`/api/triggers/${encodeURIComponent(n)}/apply`,body:a}),()=>r.client.triggers.apply(n,a));if(s)return{data:s,message:`Trigger \`${n}\` applied to ${o.length} instance(s).`}}}]),sh=nz("model","Inspect the model registry",[{id:"model list",group:"model",name:"list",stage:"B",summary:"List models in the public registry",input:ez,output:gc,handler:async function(e){const t=await xp(e),n=await t.client.resources.models(e.signal);if(e.output.json)return{data:n};const i=n.models.map(e=>({...e,model:{...e.model,protocols:e.model.protocols.join(",")},locations:e.locations.map(e=>`${e.type}${e.nodeId?`:${e.nodeId}`:""}${e.enabled?"":"(disabled)"}`).join(",")}));return{data:i,columns:lg,message:i.length?void 0:"No models matched."}}},{id:"model show",group:"model",name:"show",stage:"B",summary:"Show one model",args:[{name:"modelId",description:"Model entity ID",required:!0}],input:tz({modelId:o.z.string()}),output:pc,handler:async function(e,t){const n=kp(t,"modelId"),i=await xp(e),o=(await i.client.resources.models(e.signal)).models.find(e=>e.id===n||e.model.id===n);if(!o)throw new m("CLI_MODEL_NOT_FOUND",`No model \`${n}\` is visible in the public registry.`,7,{modelId:n});return e.output.json?{data:o}:{data:{...o,model:{...o.model,protocols:o.model.protocols.join(",")}},columns:lg}}},...Dz]),dh=nz("user","Inspect users and their sessions",[{id:"user list",group:"user",name:"list",stage:"B",summary:"List Control Plane users",options:[{flags:"--include-archived",description:"Include archived users"}],input:tz({includeArchived:o.z.boolean().optional()}),output:o.z.array(Ri),handler:async function(e,t){const n=!0===t.options["include-archived"],i=await xp(e),o=await i.client.users.list({includeArchived:n},e.signal);return e.output.json?{data:o}:{data:o,columns:Gg,message:o.length?void 0:"No users matched."}}},{id:"user show",group:"user",name:"show",stage:"B",summary:"Show one user",args:[{name:"userId",description:"User ID",required:!0}],input:tz({userId:o.z.string()}),output:Ui,handler:async function(e,t){const n=kp(t,"userId"),i=await xp(e),o=await i.client.users.detail(n,e.signal);return e.output.json?{data:o}:{data:o,columns:Gg}}},{id:"user sessions",group:"user",name:"sessions",stage:"B",summary:"List sessions of a user",args:[{name:"userId",description:"User ID",required:!0}],input:tz({userId:o.z.string()}),output:o.z.array($i),handler:async function(e,t){const n=kp(t,"userId"),i=await xp(e),o=await i.client.users.sessions(n,e.signal);return e.output.json?{data:o}:{data:o,columns:Yg,message:o.length?void 0:"No sessions matched."}}},{id:"user session-revoke",group:"user",name:"session-revoke",stage:"B",write:!0,summary:"Revoke one session of a user",args:[{name:"userId",description:"User ID",required:!0},{name:"sessionId",description:"Session ID",required:!0}],input:tz({userId:o.z.string(),sessionId:o.z.string()}),output:o.z.object({revoked:o.z.boolean()}),handler:async function(e,t){const n=kp(t,"userId"),i=kp(t,"sessionId"),o=await xp(e),a=await Cp(e,"user session-revoke",()=>({method:"DELETE",path:`/api/users/${encodeURIComponent(n)}/sessions/${encodeURIComponent(i)}`}),()=>o.client.users.revokeSession(n,i));if(a){if(!a.revoked)throw new m("CLI_SESSION_NOT_REVOKED",`Session \`${i}\` was not revoked.`,8,{userId:n,sessionId:i});return{data:a,message:`Session \`${i}\` revoked.`}}}},...Hz]),ch=nz("events","Stream Control Plane events",[{id:"events",group:"events",name:"events",stage:"C",summary:"Subscribe to the Control Plane event stream as JSON Lines",options:[{flags:"--topic <topic>",description:"Event topic to subscribe to",repeatable:!0},{flags:"--instance <instanceId>",description:"Only events of this instance"}],input:tz({topic:o.z.array(o.z.string()).optional(),instance:o.z.string().optional()}),output:Lu,outputMode:"json-lines",examples:["thctl events","thctl events --topic ai.sessions --instance <instanceId>","thctl events --json"],handler:async function(e,t){const n=function(e=[]){const t=e.map(e=>String(e).trim()).filter(Boolean).map(e=>Qp[e]??e);return t.length?[...new Set(t)]:["*"]}(t.options.topic??[]),i="string"==typeof t.options.instance?t.options.instance.trim():"",o=await vp(e),a=await xp(e,{profile:o}),r=e.store.secrets().read(a.profile.label);if(!r)throw new m("CLI_NOT_AUTHENTICATED",`No CLI session stored for \`${a.profile.label}\`. Run \`thctl login\`.`,5,{profile:a.profile.label});await tg(e,{url:Xp(a.profile.origin,i||void 0),authorization:`Bearer ${r.sessionToken}`,topics:n,...i?{instanceId:i}:{},onUnauthorized:()=>e.store.secrets().remove(a.profile.label)})}}],{flat:!0}),lh=nz("schema","Export the machine-readable CLI contract",[{id:"schema",group:"schema",name:"schema",stage:"A",summary:"Export the declared leaf command contracts as JSON Schema or Markdown",args:[{name:"group",description:"Command group"},{name:"leaf",description:"Leaf command name inside the group"}],options:[{flags:"--format <json|md>",description:"Output format (default json)"},{flags:"--out <file>",description:"Write the export to a file"}],input:tz({group:o.z.string().optional(),leaf:o.z.string().optional(),format:o.z.enum(["json","md"]).optional(),out:o.z.string().optional()}),output:Xg,examples:["thctl schema --format json","thctl schema instance stop","thctl schema instance --format md --out instance.md"],handler:async function(e,n){const o=n.args.group?.trim(),a=n.args.leaf?.trim(),r="md"===String(n.options.format??"json")?"md":"json";let s;if(o||a)if(!a&&ph(o))s={leaf:ph(o)};else if(!a&&function(e){return uh.filter(t=>t.group===e)}(o).length)s={group:o};else{if(!o||!a)throw new m("CLI_SCHEMA_TARGET_UNKNOWN",`No command group \`${o}\` is declared.`,7,{group:o});{const e=ph(`${o} ${a}`);if(!e)throw new m("CLI_SCHEMA_TARGET_UNKNOWN",`No leaf command \`${o} ${a}\` is declared.`,7,{group:o,leaf:a});s={leaf:e}}}else s=void 0;const d=function(e){const t=e?.leaf?[e.leaf]:e?.group?uh.filter(t=>t.group===e.group):uh,n=(e?.leaf?mh.filter(t=>t.name===e.leaf?.group):e?.group?mh.filter(t=>t.name===e.group):mh).map(e=>({name:e.name,summary:e.summary,flat:Boolean(e.flat),leaves:e.leaves.filter(e=>t.includes(e)).map(e=>e.id)}));return{cli:"thctl",version:Vu,contractVersion:"1",globalOptions:[{flags:"--profile <label>",description:"Profile to use (overrides TASK_HANDOFF_CLI_PROFILE)"},{flags:"--json",description:"Emit machine-readable JSON on stdout"},{flags:"--yes",description:"Skip interactive confirmation for write commands"},{flags:"--dry-run",description:"Print the request a write command would send without sending it"},{flags:"--token-stdin",description:"Read a secret (token, join token, credential) from stdin instead of a flag"}],groups:n.map(e=>({...e,leaves:e.leaves})),commands:t.map(bg)}}(s),c="md"===r?function(e){const t=[`# thctl contract (v${e.version}, contract ${e.contractVersion})`,"","Global options:","",...e.globalOptions.map(e=>`- \`${e.flags}\` — ${e.description}`),"","## Commands",""];for(const n of e.groups)t.push(`### ${n.name}`,"",n.summary,""),n.flat?t.push(...n.leaves.map(e=>`- \`${e}\``),""):t.push(`\`thctl ${n.name} <command>\``,"",...n.leaves.map(e=>`- \`${e}\``),"");for(const n of e.commands)t.push(wg(n),"");return`${t.join("\n").trimEnd()}\n`}(d):function(e){return`${JSON.stringify(e,null,2)}\n`}(d),l="string"==typeof n.options.out?n.options.out.trim():"";if(l){const e=i.resolve(l);return t.writeFileSync(e,c,{mode:420}),{data:{out:e,format:r,commands:d.commands.length},message:`Wrote ${d.commands.length} contracts to ${e}.`}}return e.output.streams.stdout(c),{data:void 0}}}],{flat:!0}),mh=[Gz,Yz,Kz,Jz,Zz,Qz,yz,ah,rh,sh,...Mz,dh,ch,lh],uh=mh.flatMap(e=>e.leaves);function ph(e){const t=e.trim().replace(/\s+/g," ");return uh.find(e=>e.id===t)}function gh(e){return null==e?"":Array.isArray(e)?e.length?e.map(gh).join(", "):"":"object"==typeof e?JSON.stringify(e):String(e)}class zh{streams;json;constructor(e,t){this.streams=e,this.json=t}data(e,t){if(this.json)this.streams.stdout(`${JSON.stringify(e,null,2)}\n`);else{if(t){const n=function(e,t){if(0===t.length)return"";const n=t.map(t=>e.map(e=>{return n=gh(function(e,t){if(!t.includes("."))return e[t];let n=e;for(const e of t.split(".")){if(!n||"object"!=typeof n)return;n=n[e]}return n}(t,e.key)),!(i=e.width)||n.length<=i?n:`${n.slice(0,Math.max(0,i-1))}…`;var n,i})),i=e.map((e,t)=>Math.max(e.header.length,...n.map(e=>(e[t]??"").length))),o=e=>e.map((e,t)=>e.padEnd(i[t])).join(" ").trimEnd();return[o(e.map(e=>e.header)),...n.map(o)].join("\n")}(t,Array.isArray(e)?e:[e]);return void this.streams.stdout(n?`${n}\n`:"\n")}this.streams.stdout(`${"string"==typeof e?e:JSON.stringify(e,null,2)}\n`)}}message(e){this.json||this.streams.stdout(`${e}\n`)}warn(e){this.streams.stderr(`${yp(e)}\n`)}error(e){this.json?this.streams.stderr(`${JSON.stringify({error:{code:e.code,message:yp(e.message),...e.details?{details:fp(e.details)}:{}}})}\n`):this.streams.stderr(`${e.code}: ${yp(e.message)}\n`)}}const hh=[["--profile <label>","Profile to use (overrides TASK_HANDOFF_CLI_PROFILE)"],["--json","Emit machine-readable JSON on stdout"],["--yes","Skip interactive confirmation for write commands"],["--dry-run","Print the request a write command would send without sending it"],["--token-stdin","Read a secret (token, join token, credential) from stdin instead of a flag"]];function yh(e){for(const[t,n]of hh)e.option(t,n);return e}function fh(e,t=[]){return[...t,e]}function Ih(e){return[e.name.split(" ").at(-1),...(e.args??[]).map(e=>e.variadic?e.required?`<${e.name}...>`:`[${e.name}...]`:e.required?`<${e.name}>`:`[${e.name}]`)].join(" ")}function bh(e){return e.handler?e.summary:`${e.summary} (not implemented — planned stage ${e.stage})`}function wh(e,t){const n=t.name.split(" ");let i=e;for(const e of n.slice(0,-1)){const n=i.commands.find(t=>t.name()===e);i=n??i.command(e).description(`${t.group} ${e} commands`)}return i}async function vh(e,t,n){const i={};(e.args??[]).forEach((e,t)=>{const o=n.args[t];i[e.name]=e.variadic?n.args.slice(t).join(" ")||void 0:o});const o=n.optsWithGlobals();t.output.json=!0===o.json;const a={...t,profile:"string"==typeof o.profile?o.profile:t.profile,yes:!0===o.yes,dryRun:!0===o.dryRun};if(!e.handler)throw r=e.id,s=e.stage,new m("CLI_COMMAND_NOT_IMPLEMENTED",`\`${r}\` is declared but not implemented yet (planned stage ${s}).`,3,{command:r,stage:s});var r,s;let d;try{d=await e.handler(a,{args:i,options:o,rawArgs:n.args})}catch(t){if(t instanceof m&&"CLI_ROUTE_MISSING"===t.code)throw new m("CLI_CAPABILITY_MISSING",`${t.message} \`${e.id}\` is unavailable on this server version.`,t.exitCode,{...t.details,command:e.id});throw t}d&&(void 0!==d.data&&a.output.data(d.data,d.columns),d.message&&a.output.message(d.message))}(async function(t,n={}){const i=function(e={}){const t=e.env??process.env,n=e.streams??{stdout:e=>process.stdout.write(e),stderr:e=>process.stderr.write(e)};return{store:e.store??new k(A(t)),output:new zh(n,!1),fetchImpl:e.fetchImpl??fetch,env:t,yes:!1,dryRun:!1,isTty:e.isTty??Boolean(process.stdin.isTTY&&process.stdout.isTTY),confirm:e.confirm??wp,openUrl:e.openUrl??zg,sleep:e.sleep??(e=>new Promise(t=>setTimeout(t,e))),signal:e.signal??(new AbortController).signal,...e.createEventSocket?{createEventSocket:e.createEventSocket}:{}}}(n),o=new AbortController,a=()=>{o.abort(),i.output.warn("Cancelling…")},r=n.signal,s=()=>o.abort();r&&(r.aborted?o.abort():r.addEventListener("abort",s,{once:!0})),process.on("SIGINT",a),process.on("SIGTERM",a);try{const n=function(t){const n=new e.Command;n.name("thctl").description("TaskHandoff Control Plane command line client.").version(Vu,"--version","Print the CLI version").exitOverride().showHelpAfterError(!1).showSuggestionAfterError(!1).configureOutput({writeOut:e=>t.output.streams.stdout(e),writeErr:e=>t.output.streams.stderr(e)}),yh(n),n.configureHelp({sortSubcommands:!1});for(const e of mh){const i=e.flat?n:n.command(e.name).description(e.summary);for(const n of e.leaves){const e=wh(i,n).command(Ih(n)).description(bh(n));yh(e);for(const t of n.options??[])t.repeatable?e.option(t.flags,t.description,fh,[]):e.option(t.flags,t.description);e.action(async()=>{await vh(n,t,e)})}}return n}({...i,signal:o.signal});return await n.parseAsync(t),0}catch(t){if(t instanceof e.CommanderError){if("commander.helpDisplayed"===t.code||"commander.help"===t.code||"commander.version"===t.code)return 0;const e=new m("CLI_USAGE_ERROR",t.message,2);return i.output.error(e),e.exitCode}const n=function(e){if(e instanceof m)return e;const t=e instanceof Error?e.message:String(e);return new m("CLI_INTERNAL_ERROR",t,12)}(t);return i.output.error(n),n.exitCode}finally{process.off("SIGINT",a),process.off("SIGTERM",a),r?.removeEventListener("abort",s)}})(process.argv).then(e=>{process.exitCode=e});
|