craby-gateway 0.18.1 → 0.18.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-sea/gateway.cjs +3 -3
- package/package.json +1 -1
package/dist-sea/gateway.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require(`node:crypto`),u=require(`node:fs`);u=c(u);let d=require(`node:fs/promises`);d=c(d);let f=require(`node:os`);f=c(f);let p=require(`node:path`);p=c(p);let m=require(`module`),h=require(`node:child_process`),g=require(`node:module`),_=require(`node:url`),v=require(`node:readline`);v=c(v);let y=require(`node:process`);y=c(y);let b=require(`node:util`),x=require(`fs`);x=c(x);let S=require(`path`);S=c(S);let C=require(`net`),w=require(`child_process`),T=require(`@anthropic-ai/claude-agent-sdk`);var E={name:`@remote-agent/desktop-gateway`,private:!0,version:`0.18.1`,description:`Craby desktop gateway CLI`,type:`module`,bin:{"craby-gateway":`dist-sea/gateway.cjs`},files:[`dist-sea`,`README.md`],publishConfig:{access:`public`,registry:`https://registry.npmjs.org/`},engines:{node:`>=20`},repository:{type:`git`,url:`git+https://github.com/wuyongzhi/anycoding.git`,directory:`apps/desktop-gateway`},scripts:{dev:`GATEWAY_PORT=18787 GATEWAY_HTTPS_PORT=18787 GATEWAY_AUDIT_LOG_PATH=./logs/audit.log GATEWAY_LOG_PATH=./logs/gateway.log GATEWAY_SESSION_HISTORY_DIR=./logs/sessions-v2 GATEWAY_PROJECT_STORE_DIR=./logs/projects GATEWAY_AUTH_STORE_DIR=./logs/auth tsx watch src/index.ts --config ./logs/gateway.dev.yaml`,build:`tsup src/index.ts --format esm --dts`,"build:bundle":`tsdown --config tsdown.config.ts`,"build:npm":`pnpm run build:bundle && node ./scripts/preparePublishPackage.mjs`,"start:bundle":`node dist-sea/gateway.cjs`,"build:blob:darwin":`pnpm run build:bundle && node --experimental-sea-config sea-config.darwin.json`,"build:blob:linux":`pnpm run build:bundle && node --experimental-sea-config sea-config.linux.json`,"build:blob:win32":`pnpm run build:bundle && node --experimental-sea-config sea-config.win32.json`,"build:bin":`pnpm run build:bin:current`,"build:bin:current":`pnpm run build:bundle && node ./scripts/buildSea.mjs`,"build:bin:darwin":`pnpm run build:bundle && node ./scripts/buildSea.mjs darwin`,"build:bin:linux":`pnpm run build:bundle && node ./scripts/buildSea.mjs linux`,"build:bin:win32":`pnpm run build:bundle && node ./scripts/buildSea.mjs win32`,test:`vitest run --passWithNoTests`,typecheck:`tsc -p tsconfig.json --noEmit`,"dump:codex-history":`tsx src/dumpCodexSessionHistory.ts`,"export:codex-project-history":`tsx src/exportCodexProjectHistory.ts`,"pairing:start":`tsx src/pairingStart.ts`,"pack:check":`pnpm run build:npm && npm pack --dry-run ./dist-npm --userconfig ../../.npmrc`,"publish:npm":`pnpm run build:npm && npm publish ./dist-npm --access public --userconfig ../../.npmrc`},dependencies:{"@anthropic-ai/claude-agent-sdk":`^0.2.92`,"@fastify/cors":`^10.0.2`,"@fastify/websocket":`^11.0.2`,diff:`^7.0.0`,fastify:`^5.2.1`,jsonwebtoken:`^9.0.2`,nanoid:`^5.1.5`,pino:`^10.3.1`,"qrcode-terminal":`^0.12.0`,ws:`^8.18.3`,yaml:`^2.8.2`},devDependencies:{"@openai/codex":`^0.111.0`,"@remote-agent/contracts":`workspace:*`,"@remote-agent/provider-adapters":`workspace:*`,"@types/diff":`^7.0.1`,"@types/jsonwebtoken":`^9.0.9`,"@types/qrcode-terminal":`^0.12.2`,"@types/ws":`^8.5.13`,postject:`^1.0.0-alpha.6`,tsdown:`^0.21.0`}};const D=/(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/;function O(e){let t=e.match(D);return t?t[0]:null}function k(e){return typeof e==`string`?O(e):null}function A(e,t){let n=M(e),r=M(t);if(!n||!r)throw Error(`Invalid version comparison: ${e} vs ${t}`);return n.major===r.major?n.minor===r.minor?n.patch===r.patch?n.prerelease===r.prerelease?0:n.prerelease?r.prerelease?n.prerelease.localeCompare(r.prerelease):-1:1:n.patch-r.patch:n.minor-r.minor:n.major-r.major}function j(e,t){return A(e,t)>=0}function M(e){let t=e.match(D);return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:typeof t[4]==`string`?t[4]:null}:null}const N=E,P=N.dependencies??{};function ee(e){return P[e]??``}const F={packageName:`craby-gateway`,cliName:`craby-gateway`,version:N.version??`0.0.0`,providerRequirements:[{id:`codex`,dependencyName:null,dependencyRange:``,minimumVersion:null,systemCommand:`codex`,versionArgs:[`--version`],systemCommandRequired:!0,displayName:`Codex`},{id:`claude`,dependencyName:`@anthropic-ai/claude-agent-sdk`,dependencyRange:ee(`@anthropic-ai/claude-agent-sdk`),minimumVersion:k(ee(`@anthropic-ai/claude-agent-sdk`)),systemCommand:`claude`,versionArgs:[`--version`],systemCommandRequired:!1,displayName:`Claude Code`}]};function te(e){let t=`start`,n,r=!1,i=!1,a=[...e],o=a[0]?.trim();if(o&&!o.startsWith(`-`))if(o===`start`||o===`init`||o===`doctor`||o===`help`||o===`__worker`)t=o,a.shift();else throw Error(`Unknown command: ${o}`);for(let e=0;e<a.length;e+=1){let o=a[e];if(o===`--config`){n=ne(o,a[e+1]),e+=1;continue}if(o===`--force`){r=!0;continue}if(o===`--log`){i=!0;continue}if(o===`--help`||o===`-h`){t=`help`;continue}if(o===`--version`||o===`-v`){t=`version`;continue}throw Error(`Unknown argument: ${o}`)}return{command:t,configPath:n,force:r,logToConsole:i}}function ne(e,t){let n=t?.trim();if(!n)throw Error(`${e} requires a value`);return n}var I=o((e=>{let t=Symbol.for(`yaml.alias`),n=Symbol.for(`yaml.document`),r=Symbol.for(`yaml.map`),i=Symbol.for(`yaml.pair`),a=Symbol.for(`yaml.scalar`),o=Symbol.for(`yaml.seq`),s=Symbol.for(`yaml.node.type`),c=e=>!!e&&typeof e==`object`&&e[s]===t,l=e=>!!e&&typeof e==`object`&&e[s]===n,u=e=>!!e&&typeof e==`object`&&e[s]===r,d=e=>!!e&&typeof e==`object`&&e[s]===i,f=e=>!!e&&typeof e==`object`&&e[s]===a,p=e=>!!e&&typeof e==`object`&&e[s]===o;function m(e){if(e&&typeof e==`object`)switch(e[s]){case r:case o:return!0}return!1}function h(e){if(e&&typeof e==`object`)switch(e[s]){case t:case r:case a:case o:return!0}return!1}e.ALIAS=t,e.DOC=n,e.MAP=r,e.NODE_TYPE=s,e.PAIR=i,e.SCALAR=a,e.SEQ=o,e.hasAnchor=e=>(f(e)||m(e))&&!!e.anchor,e.isAlias=c,e.isCollection=m,e.isDocument=l,e.isMap=u,e.isNode=h,e.isPair=d,e.isScalar=f,e.isSeq=p})),re=o((e=>{var t=I();let n=Symbol(`break visit`),r=Symbol(`skip children`),i=Symbol(`remove node`);function a(e,n){let r=l(n);t.isDocument(e)?o(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):o(null,e,r,Object.freeze([]))}a.BREAK=n,a.SKIP=r,a.REMOVE=i;function o(e,r,a,s){let c=u(e,r,a,s);if(t.isNode(c)||t.isPair(c))return d(e,s,c),o(e,c,a,s);if(typeof c!=`symbol`){if(t.isCollection(r)){s=Object.freeze(s.concat(r));for(let e=0;e<r.items.length;++e){let t=o(e,r.items[e],a,s);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){s=Object.freeze(s.concat(r));let e=o(`key`,r.key,a,s);if(e===n)return n;e===i&&(r.key=null);let t=o(`value`,r.value,a,s);if(t===n)return n;t===i&&(r.value=null)}}return c}async function s(e,n){let r=l(n);t.isDocument(e)?await c(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):await c(null,e,r,Object.freeze([]))}s.BREAK=n,s.SKIP=r,s.REMOVE=i;async function c(e,r,a,o){let s=await u(e,r,a,o);if(t.isNode(s)||t.isPair(s))return d(e,o,s),c(e,s,a,o);if(typeof s!=`symbol`){if(t.isCollection(r)){o=Object.freeze(o.concat(r));for(let e=0;e<r.items.length;++e){let t=await c(e,r.items[e],a,o);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){o=Object.freeze(o.concat(r));let e=await c(`key`,r.key,a,o);if(e===n)return n;e===i&&(r.key=null);let t=await c(`value`,r.value,a,o);if(t===n)return n;t===i&&(r.value=null)}}return s}function l(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function u(e,n,r,i){if(typeof r==`function`)return r(e,n,i);if(t.isMap(n))return r.Map?.(e,n,i);if(t.isSeq(n))return r.Seq?.(e,n,i);if(t.isPair(n))return r.Pair?.(e,n,i);if(t.isScalar(n))return r.Scalar?.(e,n,i);if(t.isAlias(n))return r.Alias?.(e,n,i)}function d(e,n,r){let i=n[n.length-1];if(t.isCollection(i))i.items[e]=r;else if(t.isPair(i))e===`key`?i.key=r:i.value=r;else if(t.isDocument(i))i.contents=r;else{let e=t.isAlias(i)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}e.visit=a,e.visitAsync=s})),L=o((e=>{var t=I(),n=re();let r={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},i=e=>e.replace(/[!,[\]{}]/g,e=>r[e]);var a=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+i(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let r=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],i=Object.entries(this.tags),a;if(e&&i.length>0&&t.isNode(e.contents)){let r={};n.visit(e.contents,(e,n)=>{t.isNode(n)&&n.tag&&(r[n.tag]=!0)}),a=Object.keys(r)}else a=[];for(let[t,n]of i)t===`!!`&&n===`tag:yaml.org,2002:`||(!e||a.some(e=>e.startsWith(n)))&&r.push(`%TAG ${t} ${n}`);return r.join(`
|
|
2
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require(`node:crypto`),u=require(`node:fs`);u=c(u);let d=require(`node:fs/promises`);d=c(d);let f=require(`node:os`);f=c(f);let p=require(`node:path`);p=c(p);let m=require(`module`),h=require(`node:child_process`),g=require(`node:module`),_=require(`node:url`),v=require(`node:readline`);v=c(v);let y=require(`node:process`);y=c(y);let b=require(`node:util`),x=require(`fs`);x=c(x);let S=require(`path`);S=c(S);let C=require(`net`),w=require(`child_process`),T=require(`@anthropic-ai/claude-agent-sdk`);var E={name:`@remote-agent/desktop-gateway`,private:!0,version:`0.18.3`,description:`Craby desktop gateway CLI`,type:`module`,bin:{"craby-gateway":`dist-sea/gateway.cjs`},files:[`dist-sea`,`README.md`],publishConfig:{access:`public`,registry:`https://registry.npmjs.org/`},engines:{node:`>=20`},repository:{type:`git`,url:`git+https://github.com/wuyongzhi/anycoding.git`,directory:`apps/desktop-gateway`},scripts:{dev:`GATEWAY_PORT=18787 GATEWAY_HTTPS_PORT=18787 GATEWAY_AUDIT_LOG_PATH=./logs/audit.log GATEWAY_LOG_PATH=./logs/gateway.log GATEWAY_SESSION_HISTORY_DIR=./logs/sessions-v2 GATEWAY_PROJECT_STORE_DIR=./logs/projects GATEWAY_AUTH_STORE_DIR=./logs/auth tsx watch src/index.ts --config ./logs/gateway.dev.yaml`,build:`tsup src/index.ts --format esm --dts`,"build:bundle":`tsdown --config tsdown.config.ts`,"build:npm":`pnpm run build:bundle && node ./scripts/preparePublishPackage.mjs`,"start:bundle":`node dist-sea/gateway.cjs`,"build:blob:darwin":`pnpm run build:bundle && node --experimental-sea-config sea-config.darwin.json`,"build:blob:linux":`pnpm run build:bundle && node --experimental-sea-config sea-config.linux.json`,"build:blob:win32":`pnpm run build:bundle && node --experimental-sea-config sea-config.win32.json`,"build:bin":`pnpm run build:bin:current`,"build:bin:current":`pnpm run build:bundle && node ./scripts/buildSea.mjs`,"build:bin:darwin":`pnpm run build:bundle && node ./scripts/buildSea.mjs darwin`,"build:bin:linux":`pnpm run build:bundle && node ./scripts/buildSea.mjs linux`,"build:bin:win32":`pnpm run build:bundle && node ./scripts/buildSea.mjs win32`,test:`vitest run --passWithNoTests`,typecheck:`tsc -p tsconfig.json --noEmit`,"dump:codex-history":`tsx src/dumpCodexSessionHistory.ts`,"export:codex-project-history":`tsx src/exportCodexProjectHistory.ts`,"pairing:start":`tsx src/pairingStart.ts`,"pack:check":`pnpm run build:npm && npm pack --dry-run ./dist-npm --userconfig ../../.npmrc`,"publish:npm":`pnpm run build:npm && npm publish ./dist-npm --access public --userconfig ../../.npmrc`},dependencies:{"@anthropic-ai/claude-agent-sdk":`^0.2.92`,"@fastify/cors":`^10.0.2`,"@fastify/websocket":`^11.0.2`,diff:`^7.0.0`,fastify:`^5.2.1`,jsonwebtoken:`^9.0.2`,nanoid:`^5.1.5`,pino:`^10.3.1`,"qrcode-terminal":`^0.12.0`,ws:`^8.18.3`,yaml:`^2.8.2`},devDependencies:{"@openai/codex":`^0.111.0`,"@remote-agent/contracts":`workspace:*`,"@remote-agent/provider-adapters":`workspace:*`,"@types/diff":`^7.0.1`,"@types/jsonwebtoken":`^9.0.9`,"@types/qrcode-terminal":`^0.12.2`,"@types/ws":`^8.5.13`,postject:`^1.0.0-alpha.6`,tsdown:`^0.21.0`}};const D=/(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/;function O(e){let t=e.match(D);return t?t[0]:null}function k(e){return typeof e==`string`?O(e):null}function A(e,t){let n=M(e),r=M(t);if(!n||!r)throw Error(`Invalid version comparison: ${e} vs ${t}`);return n.major===r.major?n.minor===r.minor?n.patch===r.patch?n.prerelease===r.prerelease?0:n.prerelease?r.prerelease?n.prerelease.localeCompare(r.prerelease):-1:1:n.patch-r.patch:n.minor-r.minor:n.major-r.major}function j(e,t){return A(e,t)>=0}function M(e){let t=e.match(D);return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:typeof t[4]==`string`?t[4]:null}:null}const N=E,P=N.dependencies??{};function ee(e){return P[e]??``}const F={packageName:`craby-gateway`,cliName:`craby-gateway`,version:N.version??`0.0.0`,providerRequirements:[{id:`codex`,dependencyName:null,dependencyRange:``,minimumVersion:null,systemCommand:`codex`,versionArgs:[`--version`],systemCommandRequired:!0,displayName:`Codex`},{id:`claude`,dependencyName:`@anthropic-ai/claude-agent-sdk`,dependencyRange:ee(`@anthropic-ai/claude-agent-sdk`),minimumVersion:k(ee(`@anthropic-ai/claude-agent-sdk`)),systemCommand:`claude`,versionArgs:[`--version`],systemCommandRequired:!1,displayName:`Claude Code`}]};function te(e){let t=`start`,n,r=!1,i=!1,a=[...e],o=a[0]?.trim();if(o&&!o.startsWith(`-`))if(o===`start`||o===`init`||o===`doctor`||o===`help`||o===`__worker`)t=o,a.shift();else throw Error(`Unknown command: ${o}`);for(let e=0;e<a.length;e+=1){let o=a[e];if(o===`--config`){n=ne(o,a[e+1]),e+=1;continue}if(o===`--force`){r=!0;continue}if(o===`--log`){i=!0;continue}if(o===`--help`||o===`-h`){t=`help`;continue}if(o===`--version`||o===`-v`){t=`version`;continue}throw Error(`Unknown argument: ${o}`)}return{command:t,configPath:n,force:r,logToConsole:i}}function ne(e,t){let n=t?.trim();if(!n)throw Error(`${e} requires a value`);return n}var I=o((e=>{let t=Symbol.for(`yaml.alias`),n=Symbol.for(`yaml.document`),r=Symbol.for(`yaml.map`),i=Symbol.for(`yaml.pair`),a=Symbol.for(`yaml.scalar`),o=Symbol.for(`yaml.seq`),s=Symbol.for(`yaml.node.type`),c=e=>!!e&&typeof e==`object`&&e[s]===t,l=e=>!!e&&typeof e==`object`&&e[s]===n,u=e=>!!e&&typeof e==`object`&&e[s]===r,d=e=>!!e&&typeof e==`object`&&e[s]===i,f=e=>!!e&&typeof e==`object`&&e[s]===a,p=e=>!!e&&typeof e==`object`&&e[s]===o;function m(e){if(e&&typeof e==`object`)switch(e[s]){case r:case o:return!0}return!1}function h(e){if(e&&typeof e==`object`)switch(e[s]){case t:case r:case a:case o:return!0}return!1}e.ALIAS=t,e.DOC=n,e.MAP=r,e.NODE_TYPE=s,e.PAIR=i,e.SCALAR=a,e.SEQ=o,e.hasAnchor=e=>(f(e)||m(e))&&!!e.anchor,e.isAlias=c,e.isCollection=m,e.isDocument=l,e.isMap=u,e.isNode=h,e.isPair=d,e.isScalar=f,e.isSeq=p})),re=o((e=>{var t=I();let n=Symbol(`break visit`),r=Symbol(`skip children`),i=Symbol(`remove node`);function a(e,n){let r=l(n);t.isDocument(e)?o(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):o(null,e,r,Object.freeze([]))}a.BREAK=n,a.SKIP=r,a.REMOVE=i;function o(e,r,a,s){let c=u(e,r,a,s);if(t.isNode(c)||t.isPair(c))return d(e,s,c),o(e,c,a,s);if(typeof c!=`symbol`){if(t.isCollection(r)){s=Object.freeze(s.concat(r));for(let e=0;e<r.items.length;++e){let t=o(e,r.items[e],a,s);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){s=Object.freeze(s.concat(r));let e=o(`key`,r.key,a,s);if(e===n)return n;e===i&&(r.key=null);let t=o(`value`,r.value,a,s);if(t===n)return n;t===i&&(r.value=null)}}return c}async function s(e,n){let r=l(n);t.isDocument(e)?await c(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):await c(null,e,r,Object.freeze([]))}s.BREAK=n,s.SKIP=r,s.REMOVE=i;async function c(e,r,a,o){let s=await u(e,r,a,o);if(t.isNode(s)||t.isPair(s))return d(e,o,s),c(e,s,a,o);if(typeof s!=`symbol`){if(t.isCollection(r)){o=Object.freeze(o.concat(r));for(let e=0;e<r.items.length;++e){let t=await c(e,r.items[e],a,o);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){o=Object.freeze(o.concat(r));let e=await c(`key`,r.key,a,o);if(e===n)return n;e===i&&(r.key=null);let t=await c(`value`,r.value,a,o);if(t===n)return n;t===i&&(r.value=null)}}return s}function l(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function u(e,n,r,i){if(typeof r==`function`)return r(e,n,i);if(t.isMap(n))return r.Map?.(e,n,i);if(t.isSeq(n))return r.Seq?.(e,n,i);if(t.isPair(n))return r.Pair?.(e,n,i);if(t.isScalar(n))return r.Scalar?.(e,n,i);if(t.isAlias(n))return r.Alias?.(e,n,i)}function d(e,n,r){let i=n[n.length-1];if(t.isCollection(i))i.items[e]=r;else if(t.isPair(i))e===`key`?i.key=r:i.value=r;else if(t.isDocument(i))i.contents=r;else{let e=t.isAlias(i)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}e.visit=a,e.visitAsync=s})),L=o((e=>{var t=I(),n=re();let r={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},i=e=>e.replace(/[!,[\]{}]/g,e=>r[e]);var a=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+i(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let r=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],i=Object.entries(this.tags),a;if(e&&i.length>0&&t.isNode(e.contents)){let r={};n.visit(e.contents,(e,n)=>{t.isNode(n)&&n.tag&&(r[n.tag]=!0)}),a=Object.keys(r)}else a=[];for(let[t,n]of i)t===`!!`&&n===`tag:yaml.org,2002:`||(!e||a.some(e=>e.startsWith(n)))&&r.push(`%TAG ${t} ${n}`);return r.join(`
|
|
3
3
|
`)}};a.defaultYaml={explicit:!1,version:`1.2`},a.defaultTags={"!!":`tag:yaml.org,2002:`},e.Directives=a})),ie=o((e=>{var t=I(),n=re();function r(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw Error(t)}return!0}function i(e){let t=new Set;return n.visit(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function a(e,t){for(let n=1;;++n){let r=`${e}${n}`;if(!t.has(r))return r}}function o(e,n){let r=[],o=new Map,s=null;return{onAnchor:t=>{r.push(t),s??=i(e);let o=a(n,s);return s.add(o),o},setAnchors:()=>{for(let e of r){let n=o.get(e);if(typeof n==`object`&&n.anchor&&(t.isScalar(n.node)||t.isCollection(n.node)))n.node.anchor=n.anchor;else{let t=Error(`Failed to resolve repeated object (this should not happen)`);throw t.source=e,t}}},sourceObjects:o}}e.anchorIsValid=r,e.anchorNames=i,e.createNodeAnchors=o,e.findNewAnchor=a})),ae=o((e=>{function t(e,n,r,i){if(i&&typeof i==`object`)if(Array.isArray(i))for(let n=0,r=i.length;n<r;++n){let r=i[n],a=t(e,i,String(n),r);a===void 0?delete i[n]:a!==r&&(i[n]=a)}else if(i instanceof Map)for(let n of Array.from(i.keys())){let r=i.get(n),a=t(e,i,n,r);a===void 0?i.delete(n):a!==r&&i.set(n,a)}else if(i instanceof Set)for(let n of Array.from(i)){let r=t(e,i,n,n);r===void 0?i.delete(n):r!==n&&(i.delete(n),i.add(r))}else for(let[n,r]of Object.entries(i)){let a=t(e,i,n,r);a===void 0?delete i[n]:a!==r&&(i[n]=a)}return e.call(n,r,i)}e.applyReviver=t})),R=o((e=>{var t=I();function n(e,r,i){if(Array.isArray(e))return e.map((e,t)=>n(e,String(t),i));if(e&&typeof e.toJSON==`function`){if(!i||!t.hasAnchor(e))return e.toJSON(r,i);let n={aliasCount:0,count:1,res:void 0};i.anchors.set(e,n),i.onCreate=e=>{n.res=e,delete i.onCreate};let a=e.toJSON(r,i);return i.onCreate&&i.onCreate(a),a}return typeof e==`bigint`&&!i?.keep?Number(e):e}e.toJS=n})),oe=o((e=>{var t=ae(),n=I(),r=R();e.NodeBase=class{constructor(e){Object.defineProperty(this,n.NODE_TYPE,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:i,maxAliasCount:a,onAnchor:o,reviver:s}={}){if(!n.isDocument(e))throw TypeError(`A document argument is required`);let c={anchors:new Map,doc:e,keep:!0,mapAsMap:i===!0,mapKeyWarned:!1,maxAliasCount:typeof a==`number`?a:100},l=r.toJS(this,``,c);if(typeof o==`function`)for(let{count:e,res:t}of c.anchors.values())o(t,e);return typeof s==`function`?t.applyReviver(s,{"":l},``,l):l}}})),se=o((e=>{var t=ie(),n=re(),r=I(),i=oe(),a=R(),o=class extends i.NodeBase{constructor(e){super(r.ALIAS),this.source=e,Object.defineProperty(this,`tag`,{set(){throw Error(`Alias nodes cannot have tags`)}})}resolve(e,t){let i;t?.aliasResolveCache?i=t.aliasResolveCache:(i=[],n.visit(e,{Node:(e,t)=>{(r.isAlias(t)||r.hasAnchor(t))&&i.push(t)}}),t&&(t.aliasResolveCache=i));let a;for(let e of i){if(e===this)break;e.anchor===this.source&&(a=e)}return a}toJSON(e,t){if(!t)return{source:this.source};let{anchors:n,doc:r,maxAliasCount:i}=t,o=this.resolve(r,t);if(!o){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(e)}let c=n.get(o);if(c||=(a.toJS(o,null,t),n.get(o)),c?.res===void 0)throw ReferenceError(`This should not happen: Alias anchor was not resolved?`);if(i>=0&&(c.count+=1,c.aliasCount===0&&(c.aliasCount=s(r,o,n)),c.count*c.aliasCount>i))throw ReferenceError(`Excessive alias count indicates a resource exhaustion attack`);return c.res}toString(e,n,r){let i=`*${this.source}`;if(e){if(t.anchorIsValid(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(e)}if(e.implicitKey)return`${i} `}return i}};function s(e,t,n){if(r.isAlias(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(r.isCollection(t)){let r=0;for(let i of t.items){let t=s(e,i,n);t>r&&(r=t)}return r}else if(r.isPair(t)){let r=s(e,t.key,n),i=s(e,t.value,n);return Math.max(r,i)}return 1}e.Alias=o})),ce=o((e=>{var t=I(),n=oe(),r=R();let i=e=>!e||typeof e!=`function`&&typeof e!=`object`;var a=class extends n.NodeBase{constructor(e){super(t.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:r.toJS(this.value,e,t)}toString(){return String(this.value)}};a.BLOCK_FOLDED=`BLOCK_FOLDED`,a.BLOCK_LITERAL=`BLOCK_LITERAL`,a.PLAIN=`PLAIN`,a.QUOTE_DOUBLE=`QUOTE_DOUBLE`,a.QUOTE_SINGLE=`QUOTE_SINGLE`,e.Scalar=a,e.isScalarValue=i})),le=o((e=>{var t=se(),n=I(),r=ce();function i(e,t,n){if(t){let e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}function a(e,a,o){if(n.isDocument(e)&&(e=e.contents),n.isNode(e))return e;if(n.isPair(e)){let t=o.schema[n.MAP].createNode?.(o.schema,null,o);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<`u`&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:s,onAnchor:c,onTagObj:l,schema:u,sourceObjects:d}=o,f;if(s&&e&&typeof e==`object`){if(f=d.get(e),f)return f.anchor??=c(e),new t.Alias(f.anchor);f={anchor:null,node:null},d.set(e,f)}a?.startsWith(`!!`)&&(a=`tag:yaml.org,2002:`+a.slice(2));let p=i(e,a,u.tags);if(!p){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new r.Scalar(e);return f&&(f.node=t),t}p=e instanceof Map?u[n.MAP]:Symbol.iterator in Object(e)?u[n.SEQ]:u[n.MAP]}l&&(l(p),delete o.onTagObj);let m=p?.createNode?p.createNode(o.schema,e,o):typeof p?.nodeClass?.from==`function`?p.nodeClass.from(o.schema,e,o):new r.Scalar(e);return a?m.tag=a:p.default||(m.tag=p.tag),f&&(f.node=m),m}e.createNode=a})),z=o((e=>{var t=le(),n=I(),r=oe();function i(e,n,r){let i=r;for(let e=n.length-1;e>=0;--e){let t=n[e];if(typeof t==`number`&&Number.isInteger(t)&&t>=0){let e=[];e[t]=i,i=e}else i=new Map([[t,i]])}return t.createNode(i,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}let a=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done;e.Collection=class extends r.NodeBase{constructor(e,t){super(e),Object.defineProperty(this,`schema`,{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>n.isNode(t)||n.isPair(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(a(e))this.add(t);else{let[r,...a]=e,o=this.get(r,!0);if(n.isCollection(o))o.addIn(a,t);else if(o===void 0&&this.schema)this.set(r,i(this.schema,a,t));else throw Error(`Expected YAML collection at ${r}. Remaining path: ${a}`)}}deleteIn(e){let[t,...r]=e;if(r.length===0)return this.delete(t);let i=this.get(t,!0);if(n.isCollection(i))return i.deleteIn(r);throw Error(`Expected YAML collection at ${t}. Remaining path: ${r}`)}getIn(e,t){let[r,...i]=e,a=this.get(r,!0);return i.length===0?!t&&n.isScalar(a)?a.value:a:n.isCollection(a)?a.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!n.isPair(t))return!1;let r=t.value;return r==null||e&&n.isScalar(r)&&r.value==null&&!r.commentBefore&&!r.comment&&!r.tag})}hasIn(e){let[t,...r]=e;if(r.length===0)return this.has(t);let i=this.get(t,!0);return n.isCollection(i)?i.hasIn(r):!1}setIn(e,t){let[r,...a]=e;if(a.length===0)this.set(r,t);else{let e=this.get(r,!0);if(n.isCollection(e))e.setIn(a,t);else if(e===void 0&&this.schema)this.set(r,i(this.schema,a,t));else throw Error(`Expected YAML collection at ${r}. Remaining path: ${a}`)}}},e.collectionFromPath=i,e.isEmptyPath=a})),ue=o((e=>{let t=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function n(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}e.indentComment=n,e.lineComment=(e,t,r)=>e.endsWith(`
|
|
4
4
|
`)?n(r,t):r.includes(`
|
|
5
5
|
`)?`
|
|
@@ -118,7 +118,7 @@ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,`$1$2`).replace(/\
|
|
|
118
118
|
function ri(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function ii(e){if(typeof e!=`boolean`)throw Error(`boolean expected, not ${e}`)}function ai(e,t,n=``){let r=ri(e),i=e?.length,a=t!==void 0;if(!r||a&&i!==t){let o=n&&`"${n}" `,s=a?` of length ${t}`:``,c=r?`length=${i}`:`type=${typeof e}`;throw Error(o+`expected Uint8Array`+s+`, got `+c)}return e}function oi(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function si(e,t){ai(e,void 0,`output`);let n=t.outputLen;if(e.length<n)throw Error(`digestInto() expects output buffer of length at least `+n)}function ci(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function li(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function ui(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function di(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}const fi=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;typeof Uint8Array.from([]).toHex==`function`&&Uint8Array.fromHex;function pi(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}const mi=(e,t)=>{function n(n,...r){if(ai(n,void 0,`key`),!fi)throw Error(`Non little-endian hardware is not yet supported`);if(e.nonceLength!==void 0){let t=r[0];ai(t,e.varSizeNonce?void 0:e.nonceLength,`nonce`)}let i=e.tagLength;i&&r[1]!==void 0&&ai(r[1],void 0,`AAD`);let a=t(n,...r),o=(e,t)=>{if(t!==void 0){if(e!==2)throw Error(`cipher output not supported`);ai(t,void 0,`output`)}},s=!1;return{encrypt(e,t){if(s)throw Error(`cannot encrypt() twice with same key + nonce`);return s=!0,ai(e),o(a.encrypt.length,t),a.encrypt(e,t)},decrypt(e,t){if(ai(e),i&&e.length<i)throw Error(`"ciphertext" expected length bigger than tagLength=`+i);return o(a.decrypt.length,t),a.decrypt(e,t)}}}return Object.assign(n,e),n};function hi(e,t,n=!0){if(t===void 0)return new Uint8Array(e);if(t.length!==e)throw Error(`"output" expected Uint8Array of length `+e+`, got: `+t.length);if(n&&!_i(t))throw Error(`invalid output, must be aligned`);return t}function gi(e,t,n){ii(n);let r=new Uint8Array(16),i=di(r);return i.setBigUint64(0,BigInt(t),n),i.setBigUint64(8,BigInt(e),n),r}function _i(e){return e.byteOffset%4==0}function vi(e){return Uint8Array.from(e)}const yi=new Uint8Array(16),bi=li(yi),xi=(e,t,n,r)=>{let i=r&1;return{s3:n<<31|r>>>1,s2:t<<31|n>>>1,s1:e<<31|t>>>1,s0:e>>>1^225<<24&-(i&1)}},Si=e=>(e>>>0&255)<<24|(e>>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255|0;function Ci(e){e.reverse();let t=e[15]&1,n=0;for(let t=0;t<e.length;t++){let r=e[t];e[t]=r>>>1|n,n=(r&1)<<7}return e[0]^=-t&225,e}const wi=e=>e>64*1024?8:e>1024?4:2;var Ti=class{blockLen=16;outputLen=16;s0=0;s1=0;s2=0;s3=0;finished=!1;t;W;windowSize;constructor(e,t){ai(e,16,`key`),e=vi(e);let n=di(e),r=n.getUint32(0,!1),i=n.getUint32(4,!1),a=n.getUint32(8,!1),o=n.getUint32(12,!1),s=[];for(let e=0;e<128;e++)s.push({s0:Si(r),s1:Si(i),s2:Si(a),s3:Si(o)}),{s0:r,s1:i,s2:a,s3:o}=xi(r,i,a,o);let c=wi(t||1024);if(![1,2,4,8].includes(c))throw Error(`ghash: invalid window size, expected 2, 4 or 8`);this.W=c;let l=128/c,u=this.windowSize=2**c,d=[];for(let e=0;e<l;e++)for(let t=0;t<u;t++){let n=0,r=0,i=0,a=0;for(let o=0;o<c;o++){if(!(t>>>c-o-1&1))continue;let{s0:l,s1:u,s2:d,s3:f}=s[c*e+o];n^=l,r^=u,i^=d,a^=f}d.push({s0:n,s1:r,s2:i,s3:a})}this.t=d}_updateBlock(e,t,n,r){e^=this.s0,t^=this.s1,n^=this.s2,r^=this.s3;let{W:i,t:a,windowSize:o}=this,s=0,c=0,l=0,u=0,d=(1<<i)-1,f=0;for(let p of[e,t,n,r])for(let e=0;e<4;e++){let t=p>>>8*e&255;for(let e=8/i-1;e>=0;e--){let n=t>>>i*e&d,{s0:r,s1:p,s2:m,s3:h}=a[f*o+n];s^=r,c^=p,l^=m,u^=h,f+=1}}this.s0=s,this.s1=c,this.s2=l,this.s3=u}update(e){oi(this),ai(e),e=vi(e);let t=li(e),n=Math.floor(e.length/16),r=e.length%16;for(let e=0;e<n;e++)this._updateBlock(t[e*4+0],t[e*4+1],t[e*4+2],t[e*4+3]);return r&&(yi.set(e.subarray(n*16)),this._updateBlock(bi[0],bi[1],bi[2],bi[3]),ui(bi)),this}destroy(){let{t:e}=this;for(let t of e)t.s0=0,t.s1=0,t.s2=0,t.s3=0}digestInto(e){oi(this),si(e,this),this.finished=!0;let{s0:t,s1:n,s2:r,s3:i}=this,a=li(e);return a[0]=t,a[1]=n,a[2]=r,a[3]=i,e}digest(){let e=new Uint8Array(16);return this.digestInto(e),this.destroy(),e}},Ei=class extends Ti{constructor(e,t){ai(e);let n=Ci(vi(e));super(n,t),ui(n)}update(e){oi(this),ai(e),e=vi(e);let t=li(e),n=e.length%16,r=Math.floor(e.length/16);for(let e=0;e<r;e++)this._updateBlock(Si(t[e*4+3]),Si(t[e*4+2]),Si(t[e*4+1]),Si(t[e*4+0]));return n&&(yi.set(e.subarray(r*16)),this._updateBlock(Si(bi[3]),Si(bi[2]),Si(bi[1]),Si(bi[0])),ui(bi)),this}digestInto(e){oi(this),si(e,this),this.finished=!0;let{s0:t,s1:n,s2:r,s3:i}=this,a=li(e);return a[0]=t,a[1]=n,a[2]=r,a[3]=i,e.reverse()}};function Di(e){let t=(t,n)=>e(n,t.length).update(t).digest(),n=e(new Uint8Array(16),0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=(t,n)=>e(t,n),t}const Oi=Di((e,t)=>new Ti(e,t));Di((e,t)=>new Ei(e,t));const ki=new Uint8Array(16);function Ai(e){if(![16,24,32].includes(e.length))throw Error(`"aes key" expected Uint8Array of length 16/24/32, got length=`+e.length)}function ji(e){return e<<1^283&-(e>>7)}function Mi(e,t){let n=0;for(;t>0;t>>=1)n^=e&-(t&1),e=ji(e);return n}const Ni=(()=>{let e=new Uint8Array(256);for(let t=0,n=1;t<256;t++,n^=ji(n))e[t]=n;let t=new Uint8Array(256);t[0]=99;for(let n=0;n<255;n++){let r=e[255-n];r|=r<<8,t[e[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return ui(e),t})(),Pi=e=>e<<24|e>>>8,Fi=e=>e<<8|e>>>24;function Ii(e,t){if(e.length!==256)throw Error(`Wrong sbox length`);let n=new Uint32Array(256).map((n,r)=>t(e[r])),r=n.map(Fi),i=r.map(Fi),a=i.map(Fi),o=new Uint32Array(256*256),s=new Uint32Array(256*256),c=new Uint16Array(256*256);for(let t=0;t<256;t++)for(let l=0;l<256;l++){let u=t*256+l;o[u]=n[t]^r[l],s[u]=i[t]^a[l],c[u]=e[t]<<8|e[l]}return{sbox:e,sbox2:c,T0:n,T1:r,T2:i,T3:a,T01:o,T23:s}}const Li=Ii(Ni,e=>Mi(e,3)<<24|e<<16|e<<8|Mi(e,2)),Ri=(()=>{let e=new Uint8Array(16);for(let t=0,n=1;t<16;t++,n=ji(n))e[t]=n;return e})();function zi(e){ai(e);let t=e.length;Ai(e);let{sbox2:n}=Li,r=[];_i(e)||r.push(e=vi(e));let i=li(e),a=i.length,o=e=>Vi(n,e,e,e,e),s=new Uint32Array(t+28);s.set(i);for(let e=a;e<s.length;e++){let t=s[e-1];e%a===0?t=o(Pi(t))^Ri[e/a-1]:a>6&&e%a===4&&(t=o(t)),s[e]=s[e-a]^t}return ui(...r),s}function Bi(e,t,n,r,i,a){return e[n<<8&65280|r>>>8&255]^t[i>>>8&65280|a>>>24&255]}function Vi(e,t,n,r,i){return e[t&255|n&65280]|e[r>>>16&255|i>>>16&65280]<<16}function Hi(e,t,n,r,i){let{sbox2:a,T01:o,T23:s}=Li,c=0;t^=e[c++],n^=e[c++],r^=e[c++],i^=e[c++];let l=e.length/4-2;for(let a=0;a<l;a++){let a=e[c++]^Bi(o,s,t,n,r,i),l=e[c++]^Bi(o,s,n,r,i,t),u=e[c++]^Bi(o,s,r,i,t,n),d=e[c++]^Bi(o,s,i,t,n,r);t=a,n=l,r=u,i=d}return{s0:e[c++]^Vi(a,t,n,r,i),s1:e[c++]^Vi(a,n,r,i,t),s2:e[c++]^Vi(a,r,i,t,n),s3:e[c++]^Vi(a,i,t,n,r)}}function Ui(e,t,n,r,i){ai(n,16,`nonce`),ai(r),i=hi(r.length,i);let a=n,o=li(a),s=di(a),c=li(r),l=li(i),u=t?0:12,d=r.length,f=s.getUint32(u,t),{s0:p,s1:m,s2:h,s3:g}=Hi(e,o[0],o[1],o[2],o[3]);for(let n=0;n+4<=c.length;n+=4)l[n+0]=c[n+0]^p,l[n+1]=c[n+1]^m,l[n+2]=c[n+2]^h,l[n+3]=c[n+3]^g,f=f+1>>>0,s.setUint32(u,f,t),{s0:p,s1:m,s2:h,s3:g}=Hi(e,o[0],o[1],o[2],o[3]);let _=16*Math.floor(c.length/4);if(_<d){let e=new Uint32Array([p,m,h,g]),t=ci(e);for(let e=_,n=0;e<d;e++,n++)i[e]=r[e]^t[n];ui(e)}return i}function Wi(e,t,n,r,i){let a=i?i.length:0,o=e.create(n,r.length+a);i&&o.update(i);let s=gi(8*r.length,8*a,t);o.update(r),o.update(s);let c=o.digest();return ui(s),c}const Gi=mi({blockSize:16,nonceLength:12,tagLength:16,varSizeNonce:!0},function(e,t,n){if(t.length<8)throw Error(`aes/gcm: invalid nonce length`);function r(e,t,r){let i=Wi(Oi,!1,e,r,n);for(let e=0;e<t.length;e++)i[e]^=t[e];return i}function i(){let n=zi(e),r=ki.slice(),i=ki.slice();if(Ui(n,!1,i,i,r),t.length===12)i.set(t);else{let e=ki.slice();di(e).setBigUint64(8,BigInt(t.length*8),!1);let n=Oi.create(r).update(t).update(e);n.digestInto(i),n.destroy()}return{xk:n,authKey:r,counter:i,tagMask:Ui(n,!1,i,ki)}}return{encrypt(e){let{xk:t,authKey:n,counter:a,tagMask:o}=i(),s=new Uint8Array(e.length+16),c=[t,n,a,o];_i(e)||c.push(e=vi(e)),Ui(t,!1,a,e,s.subarray(0,e.length));let l=r(n,o,s.subarray(0,s.length-16));return c.push(l),s.set(l,e.length),ui(...c),s},decrypt(e){let{xk:t,authKey:n,counter:a,tagMask:o}=i(),s=[t,n,o,a];_i(e)||s.push(e=vi(e));let c=e.subarray(0,-16),l=e.subarray(-16),u=r(n,o,c);if(s.push(u),!pi(u,l))throw Error(`aes/gcm: invalid ghash tag`);let d=Ui(t,!1,a,c);return ui(...s),d}}});function Ki(e){return e instanceof Uint32Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint32Array`}function qi(e,t){if(ai(t,16,`block`),!Ki(e))throw Error(`_encryptBlock accepts result of expandKeyLE`);let n=li(t),{s0:r,s1:i,s2:a,s3:o}=Hi(e,n[0],n[1],n[2],n[3]);return n[0]=r,n[1]=i,n[2]=a,n[3]=o,t}function Ji(e){let t=0;for(let n=15;n>=0;n--){let r=(e[n]&128)>>>7;e[n]=e[n]<<1|t,t=r}return t&&(e[15]^=135),e}function Yi(e,t){if(e.length!==t.length)throw Error(`xorBlock: blocks must have same length`);for(let n=0;n<e.length;n++)e[n]=e[n]^t[n];return e}var Xi=class{buffer;destroyed;k1;k2;xk;constructor(e){ai(e),Ai(e),this.xk=zi(e),this.buffer=new Uint8Array,this.destroyed=!1;let t=new Uint8Array(16);qi(this.xk,t),this.k1=Ji(t),this.k2=Ji(new Uint8Array(this.k1))}update(e){let{destroyed:t,buffer:n}=this;if(t)throw Error(`CMAC instance was destroyed`);ai(e);let r=new Uint8Array(n.length+e.length);return r.set(n),r.set(e,n.length),this.buffer=r,this}digest(){if(this.destroyed)throw Error(`CMAC instance was destroyed`);let{buffer:e}=this,t=e.length,n=Math.ceil(t/16),r;n===0?(n=1,r=!1):r=t%16==0;let i=(n-1)*16,a=e.subarray(i),o;if(r)o=Yi(new Uint8Array(a),this.k1);else{let e=new Uint8Array(16);e.set(a),e[a.length]=128,o=Yi(e,this.k2)}let s=new Uint8Array(16);for(let t=0;t<n-1;t++)Yi(s,e.subarray(t*16,(t+1)*16)),qi(this.xk,s);return Yi(s,o),qi(this.xk,s),ui(o),s}destroy(){let{buffer:e,destroyed:t,xk:n,k1:r,k2:i}=this;t||(this.destroyed=!0,ui(e,n,r,i))}};const Zi=(e,t)=>new Xi(e).update(t).digest();Zi.create=e=>new Xi(e);function Qi(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function $i(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`positive integer expected, got `+e)}function ea(e,...t){if(!Qi(e))throw Error(`Uint8Array expected`);if(t.length>0&&!t.includes(e.length))throw Error(`Uint8Array expected of length `+t+`, got length=`+e.length)}function ta(e){if(typeof e!=`function`||typeof e.create!=`function`)throw Error(`Hash should be wrapped by utils.createHasher`);$i(e.outputLen),$i(e.blockLen)}function na(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function ra(e,t){ea(e);let n=t.outputLen;if(e.length<n)throw Error(`digestInto() expects output buffer of length at least `+n)}function ia(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function aa(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function oa(e,t){return e<<32-t|e>>>t}new Uint8Array(new Uint32Array([287454020]).buffer)[0],typeof Uint8Array.from([]).toHex==`function`&&Uint8Array.fromHex;function sa(e){if(typeof e!=`string`)throw Error(`string expected`);return new Uint8Array(new TextEncoder().encode(e))}function ca(e){return typeof e==`string`&&(e=sa(e)),ea(e),e}var la=class{};function ua(e){let t=t=>e().update(ca(t)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}var da=class extends la{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ta(e);let n=ca(t);if(this.iHash=e.create(),typeof this.iHash.update!=`function`)throw Error(`Expected instance of class which extends utils.Hash`);this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let r=this.blockLen,i=new Uint8Array(r);i.set(n.length>r?e.create().update(n).digest():n);for(let e=0;e<i.length;e++)i[e]^=54;this.iHash.update(i),this.oHash=e.create();for(let e=0;e<i.length;e++)i[e]^=106;this.oHash.update(i),ia(i)}update(e){return na(this),this.iHash.update(e),this}digestInto(e){na(this),ea(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||=Object.create(Object.getPrototypeOf(this),{});let{oHash:t,iHash:n,finished:r,destroyed:i,blockLen:a,outputLen:o}=this;return e=e,e.finished=r,e.destroyed=i,e.blockLen=a,e.outputLen=o,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}};const fa=(e,t,n)=>new da(e,t).update(n).digest();fa.create=(e,t)=>new da(e,t);function pa(e,t,n){return ta(e),n===void 0&&(n=new Uint8Array(e.outputLen)),fa(e,ca(n),ca(t))}const ma=Uint8Array.from([0]),ha=Uint8Array.of();function ga(e,t,n,r=32){ta(e),$i(r);let i=e.outputLen;if(r>255*i)throw Error(`Length should be <= 255*HashLen`);let a=Math.ceil(r/i);n===void 0&&(n=ha);let o=new Uint8Array(a*i),s=fa.create(e,t),c=s._cloneInto(),l=new Uint8Array(s.outputLen);for(let e=0;e<a;e++)ma[0]=e+1,c.update(e===0?ha:l).update(n).update(ma).digestInto(l),o.set(l,i*e),s._cloneInto(c);return s.destroy(),c.destroy(),ia(l,ma),o.slice(0,r)}const _a=(e,t,n,r,i)=>ga(e,pa(e,t,n),r,i);function va(e,t,n,r){if(typeof e.setBigUint64==`function`)return e.setBigUint64(t,n,r);let i=BigInt(32),a=BigInt(4294967295),o=Number(n>>i&a),s=Number(n&a),c=r?4:0,l=r?0:4;e.setUint32(t+c,o,r),e.setUint32(t+l,s,r)}function ya(e,t,n){return e&t^~e&n}function ba(e,t,n){return e&t^e&n^t&n}var xa=class extends la{constructor(e,t,n,r){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.buffer=new Uint8Array(e),this.view=aa(this.buffer)}update(e){na(this),e=ca(e),ea(e);let{view:t,buffer:n,blockLen:r}=this,i=e.length;for(let a=0;a<i;){let o=Math.min(r-this.pos,i-a);if(o===r){let t=aa(e);for(;r<=i-a;a+=r)this.process(t,a);continue}n.set(e.subarray(a,a+o),this.pos),this.pos+=o,a+=o,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){na(this),ra(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:a}=this;t[a++]=128,ia(this.buffer.subarray(a)),this.padOffset>r-a&&(this.process(n,0),a=0);for(let e=a;e<r;e++)t[e]=0;va(n,r-8,BigInt(this.length*8),i),this.process(n,0);let o=aa(e),s=this.outputLen;if(s%4)throw Error(`_sha2: outputLen should be aligned to 32bit`);let c=s/4,l=this.get();if(c>l.length)throw Error(`_sha2: outputLen bigger than state`);for(let e=0;e<c;e++)o.setUint32(4*e,l[e],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||=new this.constructor,e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:i,destroyed:a,pos:o}=this;return e.destroyed=a,e.finished=i,e.length=r,e.pos=o,r%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}};const Sa=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Ca=BigInt(2**32-1),wa=BigInt(32);function Ta(e,t=!1){return t?{h:Number(e&Ca),l:Number(e>>wa&Ca)}:{h:Number(e>>wa&Ca)|0,l:Number(e&Ca)|0}}function Ea(e,t=!1){let n=e.length,r=new Uint32Array(n),i=new Uint32Array(n);for(let a=0;a<n;a++){let{h:n,l:o}=Ta(e[a],t);[r[a],i[a]]=[n,o]}return[r,i]}const Da=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Oa=new Uint32Array(64);var ka=class extends xa{constructor(e=32){super(64,e,8,!1),this.A=Sa[0]|0,this.B=Sa[1]|0,this.C=Sa[2]|0,this.D=Sa[3]|0,this.E=Sa[4]|0,this.F=Sa[5]|0,this.G=Sa[6]|0,this.H=Sa[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:a,G:o,H:s}=this;return[e,t,n,r,i,a,o,s]}set(e,t,n,r,i,a,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|0,this.F=a|0,this.G=o|0,this.H=s|0}process(e,t){for(let n=0;n<16;n++,t+=4)Oa[n]=e.getUint32(t,!1);for(let e=16;e<64;e++){let t=Oa[e-15],n=Oa[e-2],r=oa(t,7)^oa(t,18)^t>>>3;Oa[e]=(oa(n,17)^oa(n,19)^n>>>10)+Oa[e-7]+r+Oa[e-16]|0}let{A:n,B:r,C:i,D:a,E:o,F:s,G:c,H:l}=this;for(let e=0;e<64;e++){let t=oa(o,6)^oa(o,11)^oa(o,25),u=l+t+ya(o,s,c)+Da[e]+Oa[e]|0,d=(oa(n,2)^oa(n,13)^oa(n,22))+ba(n,r,i)|0;l=c,c=s,s=o,o=a+u|0,a=i,i=r,r=n,n=u+d|0}n=n+this.A|0,r=r+this.B|0,i=i+this.C|0,a=a+this.D|0,o=o+this.E|0,s=s+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,r,i,a,o,s,c,l)}roundClean(){ia(Oa)}destroy(){this.set(0,0,0,0,0,0,0,0),ia(this.buffer)}};const Aa=Ea(`0x428a2f98d728ae22.0x7137449123ef65cd.0xb5c0fbcfec4d3b2f.0xe9b5dba58189dbbc.0x3956c25bf348b538.0x59f111f1b605d019.0x923f82a4af194f9b.0xab1c5ed5da6d8118.0xd807aa98a3030242.0x12835b0145706fbe.0x243185be4ee4b28c.0x550c7dc3d5ffb4e2.0x72be5d74f27b896f.0x80deb1fe3b1696b1.0x9bdc06a725c71235.0xc19bf174cf692694.0xe49b69c19ef14ad2.0xefbe4786384f25e3.0x0fc19dc68b8cd5b5.0x240ca1cc77ac9c65.0x2de92c6f592b0275.0x4a7484aa6ea6e483.0x5cb0a9dcbd41fbd4.0x76f988da831153b5.0x983e5152ee66dfab.0xa831c66d2db43210.0xb00327c898fb213f.0xbf597fc7beef0ee4.0xc6e00bf33da88fc2.0xd5a79147930aa725.0x06ca6351e003826f.0x142929670a0e6e70.0x27b70a8546d22ffc.0x2e1b21385c26c926.0x4d2c6dfc5ac42aed.0x53380d139d95b3df.0x650a73548baf63de.0x766a0abb3c77b2a8.0x81c2c92e47edaee6.0x92722c851482353b.0xa2bfe8a14cf10364.0xa81a664bbc423001.0xc24b8b70d0f89791.0xc76c51a30654be30.0xd192e819d6ef5218.0xd69906245565a910.0xf40e35855771202a.0x106aa07032bbd1b8.0x19a4c116b8d2d0c8.0x1e376c085141ab53.0x2748774cdf8eeb99.0x34b0bcb5e19b48a8.0x391c0cb3c5c95a63.0x4ed8aa4ae3418acb.0x5b9cca4f7763e373.0x682e6ff3d6b2b8a3.0x748f82ee5defb2fc.0x78a5636f43172f60.0x84c87814a1f0ab72.0x8cc702081a6439ec.0x90befffa23631e28.0xa4506cebde82bde9.0xbef9a3f7b2c67915.0xc67178f2e372532b.0xca273eceea26619c.0xd186b8c721c0c207.0xeada7dd6cde0eb1e.0xf57d4f7fee6ed178.0x06f067aa72176fba.0x0a637dc5a2c898a6.0x113f9804bef90dae.0x1b710b35131c471b.0x28db77f523047d84.0x32caab7b40c72493.0x3c9ebe0a15c9bebc.0x431d67c49c100d4c.0x4cc5d4becb3e42b6.0x597f299cfc657e2a.0x5fcb6fab3ad6faec.0x6c44198c4a475817`.split(`.`).map(e=>BigInt(e)));Aa[0],Aa[1];const ja=ua(()=>new ka);var Ma=J([`codex`,`claude`]),Na=J([`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`]),Pa=J([`untrusted`,`on-failure`,`on-request`,`never`]),Fa=J([`read-only`,`workspace-write`,`danger-full-access`]),Ia=J([`default`,`acceptEdits`,`bypassPermissions`,`plan`,`dontAsk`]),La=K({reasoningEffort:Na.optional(),approvalPolicy:Pa.optional(),sandboxMode:Fa.optional(),permissionMode:Ia.optional()}),Ra=J([`native`,`fallback`]),za=K({provider:Ma,models:Zn(K({id:W().min(1),label:W().min(1),description:W().min(1).optional(),isDefault:Yn().optional(),supportedReasoningEfforts:Zn(Na).optional()})),support:K({reasoningEffort:Yn(),approvalPolicy:Yn(),sandboxMode:Yn(),permissionMode:Yn().optional()}),options:K({reasoningEfforts:Zn(Na),approvalPolicies:Zn(Pa),sandboxModes:Zn(Fa),permissionModes:Zn(Ia).optional()}),defaults:K({model:W().min(1).optional(),reasoningEffort:Na.optional(),approvalPolicy:Pa.optional(),sandboxMode:Fa.optional(),permissionMode:Ia.optional()}),source:Ra}),Ba=K({label:W().min(1),description:W().min(1),markdown:W().min(1).optional()}),Va=K({id:W().min(1),header:W().min(1),question:W().min(1),multiSelect:Yn(),isOther:Yn(),isSecret:Yn(),options:Zn(Ba).nullable()}),Ha=K({label:W().min(1),body:W()}),Ua=K({title:W().min(1),statusLabel:W().min(1),compactText:W().min(1).optional(),sections:Zn(Ha),details:Zn(W())}),Wa=J([`user`,`assistant`,`tool`,`reasoning`,`system`,`error`]),Ga=J([`streaming`,`waiting_approval`,`waiting_input`,`completed`,`failed`]),Ka=J([`event`,`optimistic`]);K({id:W().min(1),sessionId:W().min(1),provider:Ma,kind:Wa,status:Ga,ts:W().datetime(),updatedAt:W().datetime(),source:Ka,title:W().min(1),text:W().optional(),details:Zn(W()),itemType:W().optional(),itemId:W().optional(),turnId:W().optional(),requestId:W().optional(),userInputQuestions:Zn(Va).optional(),userInputAnswers:er(W(),Zn(W())).optional(),toolCardData:Ua.optional(),collapsible:Yn().optional(),collapsedByDefault:Yn().optional(),debug:K({eventTypes:Zn(W()),rawItemType:W().optional(),rawItemPhase:W().optional()})});var qa=new Set([`claude.history.getSessionMessages`,`claude.history.jsonl`]),Ja=/^(Recalled \d+ memory|Searched for \d+ patterns|Read [^:\n]+|已浏览 \d+ 个文件|已编辑 .+ \+\d+ -\d+)/i,Ya=/^<(command-name|command-message|command-args|local-command-stdout|local-command-caveat|bash-input|bash-stdout|bash-stderr)>([\s\S]*?)<\/\1>\s*/i,Xa=/\u001B\[[0-?]*[ -/]*[@-~]/g,Za=J([`streaming`,`waiting_approval`,`waiting_input`,`failed`]),Qa=J([`neutral`,`accent`,`success`,`warning`,`error`]),$a=K({id:W().min(1),ts:W().datetime(),status:Za.optional(),itemId:W().min(1).optional(),turnId:W().min(1).optional(),requestId:W().min(1).optional()}),eo=Zn(W()),to=K({label:W().min(1),body:W()}),no=K({id:W().min(1),header:W().min(1),question:W().min(1),answers:eo}),ro=K({requestId:W().min(1),sessionId:W().min(1),toolName:W().min(1).optional(),reason:W().min(1).optional(),command:W().min(1).optional(),cwd:W().min(1).optional(),grantRoot:W().min(1).optional(),networkHost:W().min(1).optional(),networkProtocol:W().min(1).optional(),itemId:W().min(1).optional(),turnId:W().min(1).optional()}),io=K({label:W().min(1),description:W().min(1),markdown:W().min(1).optional()}),ao=K({id:W().min(1),header:W().min(1),question:W().min(1),multiSelect:Yn(),isOther:Yn(),isSecret:Yn(),options:Zn(io).nullable()}),oo=K({requestId:W().min(1),sessionId:W().min(1),questions:Zn(ao),itemId:W().min(1).optional(),turnId:W().min(1).optional()}),so=$a.extend({kind:q(`user_prompt`),text:W().min(1)}),co=$a.extend({kind:q(`agent_commentary`),text:W().min(1),details:eo}),lo=$a.extend({kind:q(`activity_summary`),text:W().min(1),tone:Qa,details:eo}),uo=$a.extend({kind:q(`tool_card`),title:W().min(1),statusLabel:W().min(1),compactText:W().min(1).optional(),sections:Zn(to),details:eo}),fo=$a.extend({kind:q(`command_strip`),command:W().min(1),label:W().min(1).optional(),args:W().min(1).optional(),output:W().min(1).optional()}),po=$a.extend({kind:q(`file_change_card`),title:W().min(1),filePath:W().min(1),addedLines:G().int().nonnegative(),removedLines:G().int().nonnegative(),summary:W().min(1).optional(),details:eo,patchPreview:W().min(1).optional()}),mo=$a.extend({kind:q(`terminal_card`),title:W().min(1),statusLabel:W().min(1),toolName:W().min(1),command:W().min(1).optional(),compactText:W().min(1).optional(),output:W(),details:eo}),ho=$a.extend({kind:q(`approval_card`),title:W().min(1),text:W().min(1).optional(),details:eo}),go=$a.extend({kind:q(`question_card`),title:W().min(1),text:W().min(1).optional(),details:eo}),_o=$a.extend({kind:q(`question_answer_card`),title:W().min(1),summaryText:W().min(1),entries:Zn(no)}),vo=$n(`kind`,[uo,po,mo]),yo=$n(`kind`,[so,co,lo,uo,fo,po,mo,ho,go,_o,$a.extend({kind:q(`tool_card_group`),children:Zn(vo)})]);function bo(e){let t=Vo(e.rawEvents),n=[];for(let r of e.messages){if(xo(n,r))continue;let e=So(r,r.itemId?t.get(r.itemId):void 0);e&&n.push(e)}n.push(...Ao(e.rawEvents)),n.push(...jo(e.rawEvents,n));let r=[...new Set(n.flatMap(e=>e.sourceMessageIds))];return{timelineItems:No(Mo([...n].sort(Fo))).map(({item:e})=>e),consumedMessageIds:r}}function xo(e,t){if(t.provider!==`claude`||t.kind!==`user`)return!1;let n=us(t.text);if(!n||!n.startsWith(`<`)||!n.endsWith(`>`))return!1;let r=fs(n);return r?r.kind===`ignored_meta`?!0:r.kind===`command_output`?(e.push({item:{...Lo(t),kind:`activity_summary`,text:r.output,tone:`neutral`,details:[]},sourceMessageIds:[t.id]}),!0):(e.push({item:{...Lo(t),kind:`user_prompt`,text:r.command},sourceMessageIds:[t.id]}),r.output&&e.push({item:{...Ro(`${t.id}:output`,t.ts,t.status),kind:`activity_summary`,text:r.output,tone:`neutral`,details:[]},sourceMessageIds:[t.id]}),!0):!1}function So(e,t){if(Co(e))return null;if(e.itemType===`tool_status`&&e.status===`waiting_approval`)return{item:{...Lo(e),kind:`approval_card`,title:e.title||`需要审批`,...us(e.text)?{text:us(e.text)}:{},details:[...e.details]},sourceMessageIds:[e.id]};if(e.itemType===`request_user_input`)return e.status===`completed`||e.status===`failed`?Do(e):{item:{...Lo(e),kind:`question_card`,title:e.title||`请回答问题`,...us(e.text)?{text:us(e.text)}:{},details:[...e.details]},sourceMessageIds:[e.id]};if(e.kind===`user`){let t=us(e.text);return t?{item:{...Lo(e),kind:`user_prompt`,text:t},sourceMessageIds:[e.id]}:null}if(e.kind===`assistant`)return wo(e);if(e.kind===`reasoning`)return e.status===`streaming`?{item:{...Lo(e),kind:`activity_summary`,text:`正在思考`,tone:`neutral`,details:[]},sourceMessageIds:[e.id]}:null;if(e.kind===`tool`)return To(e,t);if(e.kind===`error`){let t=us(e.text)??`执行失败`;return{item:{...Lo(e),kind:`agent_commentary`,text:t,details:[...e.details]},sourceMessageIds:[e.id]}}let n=us(e.text);return!n&&e.details.length===0?null:{item:{...Lo(e),kind:`agent_commentary`,text:n??e.details.join(`
|
|
119
119
|
`),details:[...e.details]},sourceMessageIds:[e.id]}}function Co(e){return e.kind===`system`&&e.title===`Turn Usage`}function wo(e){let t=us(e.text);return!t&&e.details.length===0?null:t&&_s(t)?{item:{...Lo(e),kind:`activity_summary`,text:t,tone:vs(e.status),details:[...e.details]},sourceMessageIds:[e.id]}:{item:{...Lo(e),kind:`agent_commentary`,text:t??e.details.join(`
|
|
120
120
|
`),details:[...e.details]},sourceMessageIds:[e.id]}}function To(e,t){let n=Eo(e,t);if(n)return n;if(e.itemType===`file_change`)return ko(e,t);if(e.itemType===`command_execution`)return Oo(e,t);let r=ns(e);return r?{item:{...Lo(e),kind:`activity_summary`,text:r,tone:vs(e.status),details:[...e.details]},sourceMessageIds:[e.id]}:null}function Eo(e,t){let n=e.toolCardData??as(t?.item,e);return n?{item:{...Lo(e),kind:`tool_card`,title:n.title,statusLabel:n.statusLabel,...n.compactText?{compactText:n.compactText}:{},sections:n.sections,details:n.details},sourceMessageIds:[e.id]}:null}function Do(e){let t=e.userInputQuestions??[],n=e.userInputAnswers??{},r=t.map(e=>({id:e.id,header:e.header,question:e.question,answers:n[e.id]??[]})),i=r.length>0?r.map(e=>`${e.id} -> ${e.answers.length>0?e.answers.join(`、`):`未回答`}`).join(` · `):us(e.text)??`已提交回答`;return{item:{...Lo(e),kind:`question_answer_card`,title:`已回答 Claude 的问题`,summaryText:i,entries:r},sourceMessageIds:[e.id]}}function Oo(e,t){let n=Os(t?.item,[`command`])??ls(e.details,`command`),r=us(e.text)??Os(t?.item,[`output_delta`,`aggregated_output`])??ls(e.details,`output`),i=Ho(t?.item,e),a=Uo(t?.item,e.status),o=Wo(t?.item),s=Go(t?.item,n,r);if(i&&!n&&!r)return{item:{...Lo(e),kind:`activity_summary`,text:i.text,tone:vs(e.status),details:[...e.details]},sourceMessageIds:[e.id],aggregateMeta:{groupKey:`${e.turnId??`no-turn`}:command-actions`,readCount:i.readCount,listCount:i.listCount,searchCount:i.searchCount}};if(!n&&!r){let t=ns(e);return t?{item:{...Lo(e),kind:`activity_summary`,text:t,tone:vs(e.status),details:[...e.details]},sourceMessageIds:[e.id]}:null}return{item:{...Lo(e),kind:`terminal_card`,title:`Shell`,statusLabel:a,toolName:o,...n?{command:n}:{},...s?{compactText:s}:{},output:r??``,details:Jo(e.details)},sourceMessageIds:[e.id]}}function ko(e,t){let n=rs(t?.item)??cs(e.details)??us(e.text)??`unknown`,r=Zo(t?.item),i=Xo(t?.item),a=ns(e),o=ts(e.provider,n,i.addedLines,i.removedLines),s=Yo(e.details);return{item:{...Lo(e),kind:`file_change_card`,title:o,filePath:n,addedLines:i.addedLines,removedLines:i.removedLines,...a&&a!==o?{summary:a}:{},details:s,...r?{patchPreview:r}:{}},sourceMessageIds:[e.id]}}function Ao(e){let t=[],n=[...e].sort(Io),r=null;for(let e of n){let n=Es(e.payload.raw),i=Ds(n.source),a=Es(n.message),o=Ds(a.type),s=Ds(a.subtype);if(!i||!qa.has(i))continue;let c=Ds(a.content);if(o===`system`&&s===`local_command`&&c){let n=fs(c);if(n?.kind===`command_strip`){let i={...Ro(`claude-command:${e.eventId}`,e.ts,`completed`),kind:`command_strip`,command:n.command,...n.label?{label:n.label}:{},...n.args?{args:n.args}:{},...n.output?{output:n.output}:{}};t.push({item:i,sourceMessageIds:[]}),r=i;continue}if(n?.kind===`command_output`){r?r.output=r.output?`${r.output}
|
|
121
|
-
${n.output}`:n.output:t.push({item:{...Ro(`claude-command-output:${e.eventId}`,e.ts,`completed`),kind:`activity_summary`,text:n.output,tone:`neutral`,details:[]},sourceMessageIds:[]});continue}continue}if(o!==`assistant`)continue;let l=Es(a.message),u=Array.isArray(l.content)?l.content:[];for(let n of u){let r=Es(n);if(Ds(r.type)!==`tool_use`||Ds(r.name)!==`Edit`)continue;let i=Es(r.input),a=Os(i,[`file_path`])??`unknown`,o=Os(i,[`old_string`])??``,s=Os(i,[`new_string`])??``,c=$o(o,s);t.push({item:{...Ro(`claude-edit:${e.eventId}:${Ds(r.id)??a}`,e.ts,`completed`),kind:`file_change_card`,title:ts(`claude`,a,c.addedLines,c.removedLines),filePath:a,addedLines:c.addedLines,removedLines:c.removedLines,summary:`文件已更新`,details:[],patchPreview:Qo(o,s)},sourceMessageIds:[]})}}return t}function jo(e,t){let n=new Map;for(let t of[...e].sort(Io)){let e=ys(t);if(!e)continue;if(xs(t)){let r=bs(t);if(r&&Cs(r)){n.delete(e);continue}n.set(e,{ts:t.ts,latestActivity:ws(t)});continue}let r=n.get(e);if(!r)continue;r.ts=t.ts;let i=ws(t);i&&(r.latestActivity=i),Ss(t)&&n.delete(e)}return n.size===0||t.some(e=>e.item.status===`streaming`||e.item.status===`waiting_approval`||e.item.status===`waiting_input`)?[]:[...n.entries()].map(([e,t])=>({item:{...Ro(`zzz:thinking:${e}`,t.ts,`streaming`),turnId:e,kind:`activity_summary`,text:Ts(t.latestActivity),tone:`neutral`,details:[]},sourceMessageIds:[]}))}function Mo(e){let t=[];for(let n of e){let e=t[t.length-1];if(e&&e.item.kind===`activity_summary`&&n.item.kind===`activity_summary`&&e.aggregateMeta&&n.aggregateMeta&&e.aggregateMeta.groupKey===n.aggregateMeta.groupKey){e.aggregateMeta.readCount+=n.aggregateMeta.readCount,e.aggregateMeta.listCount+=n.aggregateMeta.listCount,e.aggregateMeta.searchCount+=n.aggregateMeta.searchCount,e.item.text=Ko(e.aggregateMeta.readCount,e.aggregateMeta.listCount,e.aggregateMeta.searchCount,n.item.status??`completed`),e.item.tone=vs(n.item.status??`completed`),e.item.details=As([...e.item.details,...n.item.details]),e.item.status=n.item.status,e.sourceMessageIds=As([...e.sourceMessageIds,...n.sourceMessageIds]);continue}t.push({...n,sourceMessageIds:[...n.sourceMessageIds],item:Bo(n.item)})}return t}function No(e){let t=[],n=[],r=()=>{if(n.length===0)return;
|
|
121
|
+
${n.output}`:n.output:t.push({item:{...Ro(`claude-command-output:${e.eventId}`,e.ts,`completed`),kind:`activity_summary`,text:n.output,tone:`neutral`,details:[]},sourceMessageIds:[]});continue}continue}if(o!==`assistant`)continue;let l=Es(a.message),u=Array.isArray(l.content)?l.content:[];for(let n of u){let r=Es(n);if(Ds(r.type)!==`tool_use`||Ds(r.name)!==`Edit`)continue;let i=Es(r.input),a=Os(i,[`file_path`])??`unknown`,o=Os(i,[`old_string`])??``,s=Os(i,[`new_string`])??``,c=$o(o,s);t.push({item:{...Ro(`claude-edit:${e.eventId}:${Ds(r.id)??a}`,e.ts,`completed`),kind:`file_change_card`,title:ts(`claude`,a,c.addedLines,c.removedLines),filePath:a,addedLines:c.addedLines,removedLines:c.removedLines,summary:`文件已更新`,details:[],patchPreview:Qo(o,s)},sourceMessageIds:[]})}}return t}function jo(e,t){let n=new Map;for(let t of[...e].sort(Io)){let e=ys(t);if(!e)continue;if(xs(t)){let r=bs(t);if(r&&Cs(r)){n.delete(e);continue}n.set(e,{ts:t.ts,latestActivity:ws(t)});continue}let r=n.get(e);if(!r)continue;r.ts=t.ts;let i=ws(t);i&&(r.latestActivity=i),Ss(t)&&n.delete(e)}return n.size===0||t.some(e=>e.item.status===`streaming`||e.item.status===`waiting_approval`||e.item.status===`waiting_input`)?[]:[...n.entries()].map(([e,t])=>({item:{...Ro(`zzz:thinking:${e}`,t.ts,`streaming`),turnId:e,kind:`activity_summary`,text:Ts(t.latestActivity),tone:`neutral`,details:[]},sourceMessageIds:[]}))}function Mo(e){let t=[];for(let n of e){let e=t[t.length-1];if(e&&e.item.kind===`activity_summary`&&n.item.kind===`activity_summary`&&e.aggregateMeta&&n.aggregateMeta&&e.aggregateMeta.groupKey===n.aggregateMeta.groupKey){e.aggregateMeta.readCount+=n.aggregateMeta.readCount,e.aggregateMeta.listCount+=n.aggregateMeta.listCount,e.aggregateMeta.searchCount+=n.aggregateMeta.searchCount,e.item.text=Ko(e.aggregateMeta.readCount,e.aggregateMeta.listCount,e.aggregateMeta.searchCount,n.item.status??`completed`),e.item.tone=vs(n.item.status??`completed`),e.item.details=As([...e.item.details,...n.item.details]),e.item.status=n.item.status,e.sourceMessageIds=As([...e.sourceMessageIds,...n.sourceMessageIds]);continue}t.push({...n,sourceMessageIds:[...n.sourceMessageIds],item:Bo(n.item)})}return t}function No(e){let t=[],n=[],r=()=>{if(n.length===0)return;let e=n[0],r=n[n.length-1],i=n.some(e=>e.item.status===`streaming`)?`streaming`:r.item.status;t.push({item:{...Ro(`group:${e.item.id}`,e.item.ts,i??`completed`),kind:`tool_card_group`,children:n.map(e=>zo(e.item))},sourceMessageIds:As(n.flatMap(e=>e.sourceMessageIds))}),n=[]};for(let i of e)Po(i.item)?n.push(i):(r(),t.push(i));return r(),t}function Po(e){return e.kind===`tool_card`||e.kind===`file_change_card`||e.kind===`terminal_card`}function Fo(e,t){let n=e.item.ts.localeCompare(t.item.ts);return n===0?e.item.id.localeCompare(t.item.id):n}function Io(e,t){let n=e.ts.localeCompare(t.ts);return n===0?e.eventId.localeCompare(t.eventId):n}function Lo(e){return Ro(e.id,e.ts,e.status,{itemId:e.itemId,turnId:e.turnId,requestId:e.requestId})}function Ro(e,t,n,r){return{id:e,ts:t,...n===`completed`?{}:{status:Za.parse(n)},...r?.itemId?{itemId:r.itemId}:{},...r?.turnId?{turnId:r.turnId}:{},...r?.requestId?{requestId:r.requestId}:{}}}function zo(e){return Bo(e)}function Bo(e){switch(e.kind){case`user_prompt`:case`approval_card`:case`question_card`:case`command_strip`:return{...e};case`agent_commentary`:case`activity_summary`:case`tool_card`:case`file_change_card`:case`terminal_card`:case`question_answer_card`:return JSON.parse(JSON.stringify(e));case`tool_card_group`:return{...e,children:e.children.map(e=>zo(e))};default:return e}}function Vo(e){let t=new Map;for(let n of e){let e=Es(Es(n.payload.raw).item),r=Os(e,[`id`]);r&&t.set(r,{envelope:n,item:e})}return t}function Ho(e,t){let{readCount:n,listCount:r,searchCount:i}=qo(e);if(n===0&&r===0&&i===0){let e=us(t.text);return e&&_s(e)?{text:e,readCount:0,listCount:0,searchCount:0}:null}return{text:Ko(n,r,i,t.status),readCount:n,listCount:r,searchCount:i}}function Uo(e,t){let{readCount:n,listCount:r,searchCount:i}=qo(e),a=t===`streaming`?`正在`:`已`;return n>0&&r===0&&i===0?`${a}\u8BFB\u53D6 ${n} \u4E2A\u6587\u4EF6`:i>0&&n===0&&r===0?`${a}\u641C\u7D22`:n>0||r>0?`${a}\u6D4F\u89C8`:`${a}\u8FD0\u884C\u547D\u4EE4`}function Wo(e){let{readCount:t,listCount:n,searchCount:r}=qo(e);return t>0&&n===0&&r===0?`Read`:r>0&&t===0&&n===0?`Search`:`Shell`}function Go(e,t,n){let r=Array.isArray(e?.command_actions)?e.command_actions:Array.isArray(e?.commandActions)?e.commandActions:[];if(r.length===1){let e=Es(r[0]);if(Os(e,[`type`])===`read`)return Os(e,[`path`,`file_path`,`filePath`,`name`])??t??ds(n)}return t??ds(n)}function Ko(e,t,n,r){return r===`streaming`?n>0?`正在搜索`:e>0||t>0?`正在浏览`:`正在运行命令`:t>0&&e===0&&n===0&&r===`completed`?t===1?`Listed files`:`Listed ${t} file lists`:t>0&&e===0&&n===0?`\u5DF2\u6D4F\u89C8 ${t} \u4E2A\u5217\u8868`:e>0&&t===0&&n===0?`\u5DF2\u6D4F\u89C8 ${e} \u4E2A\u6587\u4EF6`:e+t>0&&n>0?`\u5DF2\u6D4F\u89C8 ${e+t} \u4E2A\u9879\u76EE\uFF0C${n} \u4E2A\u641C\u7D22`:e+t>0?`\u5DF2\u6D4F\u89C8 ${e+t} \u4E2A\u9879\u76EE`:`\u5DF2\u6267\u884C ${n} \u4E2A\u641C\u7D22`}function qo(e){let t=Array.isArray(e?.command_actions)?e.command_actions:Array.isArray(e?.commandActions)?e.commandActions:[],n=0,r=0,i=0;for(let e of t){let t=Ds(Es(e).type);t===`read`?n+=1:t===`listFiles`||t===`list_files`?r+=1:t===`search`&&(i+=1)}return{readCount:n,listCount:r,searchCount:i}}function Jo(e){return e.filter(e=>{let t=e.trim().toLowerCase();return!(t.startsWith(`command:`)||t.startsWith(`output:`)||t.startsWith(`status:`)||t.startsWith(`exit_code:`)||t.startsWith(`command_actions:`))})}function Yo(e){return e.filter(e=>{let t=e.trim().toLowerCase();return!(t.startsWith(`status:`)||t.startsWith(`output:`)||t.startsWith(`update:`))})}function Xo(e){let t=ks(e,[`added_lines`,`addedLines`]),n=ks(e,[`removed_lines`,`removedLines`]);if(t!==void 0||n!==void 0)return{addedLines:t??0,removedLines:n??0};let r=Os(e,[`old_string`,`oldString`])??``,i=Os(e,[`new_string`,`newString`])??``;if(r||i)return $o(r,i);let a=Os(e,[`patch`,`structuredPatch`,`structured_patch`,`diff`]);if(a)return es(a);let o=Array.isArray(e?.changes)?e.changes:[],s=0,c=0,l=!1;for(let e of o){let t=Es(e),n=ks(t,[`added_lines`,`addedLines`]),r=ks(t,[`removed_lines`,`removedLines`]);if(n!==void 0||r!==void 0){s+=n??0,c+=r??0,l=!0;continue}let i=Os(t,[`diff`,`patch`,`structuredPatch`,`structured_patch`,`unified_diff`]);if(i){let e=es(i);s+=e.addedLines,c+=e.removedLines,l=!0}}return l?{addedLines:s,removedLines:c}:{addedLines:0,removedLines:0}}function Zo(e){let t=Os(e,[`patch`,`structuredPatch`,`structured_patch`,`diff`]);if(t)return t;let n=Os(e,[`old_string`,`oldString`]),r=Os(e,[`new_string`,`newString`]);if(!n&&!r){let t=(Array.isArray(e?.changes)?e.changes:[]).map(e=>Os(Es(e),[`diff`,`patch`,`structuredPatch`,`structured_patch`,`unified_diff`])).filter(e=>typeof e==`string`&&e.length>0);return t.length>0?t.join(`
|
|
122
122
|
|
|
123
123
|
`):void 0}return Qo(n??``,r??``)}function Qo(e,t){let n=Ms(e),r=Ms(t),i=n.map(e=>`- ${e}`),a=r.map(e=>`+ ${e}`);return[...i,...a].join(`
|
|
124
124
|
`)}function $o(e,t){let n=Ms(e),r=Ms(t),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i+=1;let a=n.length-1,o=r.length-1;for(;a>=i&&o>=i&&n[a]===r[o];)--a,--o;return{removedLines:Math.max(a-i+1,0),addedLines:Math.max(o-i+1,0)}}function es(e){let t=Ms(e),n=0,r=0;for(let e of t)e.startsWith(`+++`)||e.startsWith(`---`)||e.startsWith(`@@`)||(e.startsWith(`+`)?n+=1:e.startsWith(`-`)&&(r+=1));return{addedLines:n,removedLines:r}}function ts(e,t,n,r){return e===`claude`?`Update(${t})`:`\u5DF2\u7F16\u8F91 ${js(t)} +${n} -${r}`}function ns(e){let t=us(e.text);if(t)return t;let n=e.details[0];return n?us(n):void 0}function rs(e){let t=Os(e,[`path`,`file_path`,`filePath`]);if(t)return t;let n=Array.isArray(e?.changes)?e.changes:[];for(let e of n){let t=Os(Es(e),[`path`,`file_path`,`filePath`]);if(t)return t}}function is(e){let t=[],n=Os(e??{},[`file_path`]),r=ks(e??{},[`total_tokens`]),i=ks(e??{},[`total_tool_uses`]),a=ks(e??{},[`duration_ms`]);return n&&t.push(n),typeof i==`number`&&t.push(`${i} tool uses`),typeof r==`number`&&t.push(`${os(r)} tokens`),typeof a==`number`&&t.push(ss(a)),As(t)}function as(e,t){if(Os(e??{},[`display_as`])!==`tool_card`)return;let n=Os(e??{},[`title`])??ns(t),r=Os(e??{},[`status_label`])??us(t.text);if(!n||!r)return;let i=[],a=Os(e??{},[`prompt`]),o=Os(e??{},[`response`]),s=Os(e??{},[`response_label`])??`Response`;return a&&i.push({label:`Prompt`,body:a}),o&&i.push({label:s,body:o}),{title:n,statusLabel:r,compactText:us(t.text),sections:i,details:is(e)}}function os(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}function ss(e){let t=Math.max(1,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60),r=t%60;return r===0?`${n}m`:`${n}m ${r}s`}function cs(e){for(let t of e){let e=t.replace(/^[a-z_]+:\s*/i,``).trim();if(e.includes(`/`)||e.includes(`.tsx`)||e.includes(`.ts`))return e}}function ls(e,t){let n=`${t}:`;for(let t of e)if(t.startsWith(n))return us(t.slice(n.length))}function us(e){if(typeof e!=`string`)return;let t=e.replace(/\r\n/g,`
|
|
@@ -504,4 +504,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
504
504
|
`)}function hk(e){let t=new Set;for(let n of e)n&&t.add(n);return[...t]}function gk(e){return String(e).includes(`returned no messages from getSessionMessages`)}function _k(e){return yO(e)}function vk(e){return e?{rawSeq:e.rawSeq,type:e.type,eventId:e.eventId,ts:e.ts}:null}function yk(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(!bk(n,i))return r}return e.length===t.length?null:n}function bk(e,t){return Ck(xk(e))===Ck(xk(t))}function xk(e){let{ts:t,...n}=e;return n}function Sk(e){if(typeof e==`string`)return wk(e);if(Array.isArray(e))return e.map(e=>Sk(e));if(!e||typeof e!=`object`)return e;let t=e,n={};for(let e of Object.keys(t).sort())n[e]=Sk(t[e]);return n}function Ck(e){return JSON.stringify(Sk(e))}function wk(e){return e.length<=4096?e:{__type:`hashed_text`,length:e.length,sha256:(0,l.createHash)(`sha256`).update(e).digest(`hex`)}}function Tk(e){if(!e)return``;let t=wk(e);return typeof t==`string`?t:`sha256:${t.length}:${t.sha256}`}function Ek(e,t,n,r){if(!n.historyUpdated)return`unchanged`;if(n.refreshMode===`delta`)return`append_only_delta`;if(t.length<e.length)return`history_shrunk`;let i=Math.min(e.length,t.length);return r!==null&&r<i?`prefix_rewrite`:`snapshot_fallback`}function Dk(e){let t=e.previousEvents[e.previousEvents.length-1]?.rawSeq??null,n=e.nextEvents[e.nextEvents.length-1]?.rawSeq??null,r=yk(e.previousEvents,e.nextEvents),i=r??Math.min(e.previousEvents.length,e.nextEvents.length);return{projectId:e.projectId,sessionId:e.sessionId,provider:e.session.provider,source:e.session.source,providerMode:e.session.providerMode,decision:e.classification.refreshMode,reason:Ek(e.previousEvents,e.nextEvents,e.classification,r),historyUpdated:e.classification.historyUpdated,fromRawSeq:e.classification.fromRawSeq??null,toRawSeq:e.classification.toRawSeq??null,previousEventCount:e.previousEvents.length,nextEventCount:e.nextEvents.length,sharedPrefixCount:i,appendedCount:Math.max(0,e.nextEvents.length-e.previousEvents.length),firstMismatchIndex:r,previousLastRawSeq:t,nextLastRawSeq:n,previousMismatchEvent:vk(r===null?void 0:e.previousEvents[r]),nextMismatchEvent:vk(r===null?void 0:e.nextEvents[r])}}function Ok(e,t){let n=e[e.length-1]?.rawSeq,r=t[t.length-1]?.rawSeq;return e.length===t.length&&e.every((e,n)=>{let r=t[n];return r!==void 0&&bk(e,r)})?{historyUpdated:!1,refreshMode:`snapshot`,...r===void 0?{}:{toRawSeq:r}}:t.length>e.length&&e.every((e,n)=>{let r=t[n];return r!==void 0&&bk(e,r)})?{historyUpdated:!0,refreshMode:`delta`,fromRawSeq:n??0,toRawSeq:r??n??0}:{historyUpdated:!0,refreshMode:`snapshot`,...r===void 0?{}:{toRawSeq:r}}}function kk(e){let t=[],n=e.thread.createdAt>0?e.thread.createdAt*1e3:Date.now(),r=0,i=()=>(r+=1,n+=1,new Date(n).toISOString()),a=(n,a)=>{let o=t.length+1;t.push({v:`1.0`,kind:`provider.raw`,rawSeq:o,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:zk(e.sessionId,r,a),ts:i(),type:`native.raw`,payload:{raw:{source:`codex.history.thread_read`,native_type:`thread.read.snapshot`,message:n,historyReplay:!0,replaySynthetic:!0}}})};a({scope:`thread`,thread:{id:e.thread.id,preview:e.thread.preview,model_provider:e.thread.modelProvider,created_at:e.thread.createdAt,updated_at:e.thread.updatedAt,path:e.thread.path,cwd:e.thread.cwd,cli_version:e.thread.cliVersion,source:e.thread.source,git_info:e.thread.gitInfo}},[`thread`,e.thread.id,e.thread.updatedAt]);for(let t of e.thread.turns){let n=e.localCodexLiveTurnState?e.localCodexLiveTurnState.terminalTurnStatusById.has(t.id)||e.localCodexLiveTurnState.activeTurnIds.has(t.id):!1,r=e.localCodexLiveTurnState?.terminalTurnStatusById.get(t.id);(Wk(t.status)?!Gk(r,t.status):!n)&&a({scope:`turn`,thread_id:e.thread.id,turn:{id:t.id,status:t.status,error:t.error}},[`turn`,t.id,t.status]);for(let n of t.items)a({scope:`item`,thread_id:e.thread.id,turn_id:t.id,item:n},[`item`,t.id,Jk(n.id)??null])}return t}function Ak(e){let t=jk(e.localEvents);if(!t.hasHistoryReplay||!t.hasThreadEnvelope)return null;let n=e.thread.turns.map(e=>e.id);if(t.turnOrder.length>n.length)return null;for(let[e,r]of t.turnOrder.entries())if(n[e]!==r)return null;let r=[],i=Math.max(XO(e.localEvents)??0,e.thread.updatedAt>0?e.thread.updatedAt*1e3:Date.now()),a=0,o=()=>(a+=1,i+=1,new Date(i).toISOString()),s=(t,n)=>{r.push({v:`1.0`,kind:`provider.raw`,rawSeq:r.length+1,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:zk(e.sessionId,a,n),ts:o(),type:`native.raw`,payload:{raw:{source:`codex.history.thread_read`,native_type:`thread.read.snapshot`,message:t,historyReplay:!0,replaySynthetic:!0}}})},c=t.turnOrder.length-1;for(let[n,r]of e.thread.turns.entries()){let i=t.turnsById.get(r.id);if(!i){s({scope:`turn`,thread_id:e.thread.id,turn:{id:r.id,status:r.status,error:r.error}},[`turn`,r.id,r.status]);for(let t of r.items)s({scope:`item`,thread_id:e.thread.id,turn_id:r.id,item:t},[`item`,r.id,Jk(t.id)??null]);continue}let a=n!==c,o=Nk(i,r);if(!o.safe||a&&(o.appendedItems.length>0||o.statusChanged))return null;if(!a){o.statusChanged&&s({scope:`turn`,thread_id:e.thread.id,turn:{id:r.id,status:r.status,error:r.error}},[`turn`,r.id,r.status]);for(let t of o.appendedItems)s({scope:`item`,thread_id:e.thread.id,turn_id:r.id,item:t},[`item`,r.id,Jk(t.id)??null])}}return r}function jk(e){let t={hasHistoryReplay:!1,hasThreadEnvelope:!1,turnOrder:[],turnsById:new Map};for(let n of e){if(n.type!==`native.raw`)continue;let e=Q(n.payload.raw);if($(e.source)!==`codex.history.thread_read`)continue;let r=Q(e.message),i=$(r.scope);if(t.hasHistoryReplay=!0,i===`thread`){t.hasThreadEnvelope=!0;continue}if(i===`turn`){let e=Q(r.turn),n=$(e.id);if(!n)continue;let i=Mk(t,n),a=$(e.status);a&&(i.status=a),i.fingerprint=Lk(e);continue}if(i!==`item`)continue;let a=Q(r.item),o=$(r.turn_id)??$(a.turn_id);if(!o)continue;let s=Mk(t,o),c=Pk(o,a,void 0,s.itemOccurrenceByBaseKey);c&&(s.itemFingerprintByKey.has(c)||s.itemOrder.push(c),s.itemFingerprintByKey.set(c,Ik(a)))}return t}function Mk(e,t){let n=e.turnsById.get(t);if(n)return n;let r={itemOrder:[],itemFingerprintByKey:new Map,itemOccurrenceByBaseKey:new Map};return e.turnsById.set(t,r),e.turnOrder.push(t),r}function Nk(e,t){if(t.items.length<e.itemOrder.length)return{safe:!1,appendedItems:[],statusChanged:!1};let n=new Map;for(let[r,i]of e.itemOrder.entries()){let a=t.items[r];if(!a||Pk(t.id,a,r,n)!==i||e.itemFingerprintByKey.get(i)!==Ik(a))return{safe:!1,appendedItems:[],statusChanged:!1}}return e.fingerprint!==void 0&&e.fingerprint!==Lk(t)&&(e.status??``)===t.status?{safe:!1,appendedItems:[],statusChanged:!1}:{safe:!0,appendedItems:t.items.slice(e.itemOrder.length),statusChanged:(e.status??``)!==t.status}}function Pk(e,t,n,r){let i=Fk(e,t,n);if(!i)return;if(!r)return i;let a=(r.get(i)??0)+1;return r.set(i,a),`${i}|${a}`}function Fk(e,t,n){let r=ik(`item.completed`,{turn_id:e,item:t});if(r)return r;let i=Jk(t.id);if(i)return`id:${i}`;if(n!==void 0)return`${e}::${n}`}function Ik(e){let t=ak($(e.type)),n=t?ok(t,$(e.phase)):$(e.phase),r={};for(let[i,a]of Object.entries(e))if(!(i===`id`||i===`turn_id`||i===`turnId`)){if(i===`type`){t&&(r.type=t);continue}if(i===`phase`){n&&(r.phase=n);continue}r[i]=a}return t&&r.type===void 0&&(r.type=t),Ck(r)}function Lk(e){return Ck({status:$(e.status)??null,error:Q(e.error)})}function Rk(e){return String(e??``).replace(/[^a-zA-Z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``)}function zk(e,t,n){let r=n.map(Rk).filter(e=>e.length>0);return r.length===0?`raw_hist_codex_${e}_${t.toString().padStart(6,`0`)}`:`raw_hist_codex_${e}_${r.join(`_`)}`}function Bk(e){let t=e.localCodexLiveTurnState??JO(e.localEvents),n=new Set,r=Vk(e.localEvents),i=new Map,a=0,o=1;for(let t of e.localEvents){let e=Date.parse(t.ts);Number.isFinite(e)&&(a=Math.max(a,e)),o=Math.max(o,t.rawSeq+1);let r=Q(t.payload.raw),s=$(r.source),c=s===`codex.history.thread_read.incremental`;if(t.type===`turn.started`){let e=$(r.turn_id)??$(Q(r.turn).id);e&&!c&&n.add(e);continue}if(t.type===`turn.completed`||t.type===`turn.failed`){let e=$(r.turn_id)??$(Q(r.turn).id);if(!e)continue;c||n.add(e);let a=$(r.status)??(t.type===`turn.completed`?`completed`:`failed`);i.set(e,a)}if(t.type!==`native.raw`||s!==`codex.history.thread_read`)continue;let l=Q(r.message);if($(l.scope)===`turn`){let e=Q(l.turn),t=$(e.id);if(!t)continue;let n=$(e.status);n&&Wk(n)&&i.set(t,n);continue}}let s=Math.max(a,e.thread.createdAt>0?e.thread.createdAt*1e3:Date.now()),c=0,l=e=>String(e??``).replace(/[^a-zA-Z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``),u=t=>{let n=t.map(l).filter(e=>e.length>0);return n.length===0?`raw_sync_codex_${e.sessionId}_${o.toString().padStart(6,`0`)}`:`raw_sync_codex_${e.sessionId}_${n.join(`_`)}`},d=()=>(c+=1,new Date(s+c).toISOString()),f=[],p=(t,n,r)=>{let i=d();f.push({v:`1.0`,kind:`provider.raw`,rawSeq:o,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:u(r),ts:i,type:t,payload:{raw:{...n,historyReplay:!0,replaySynthetic:!0,source:`codex.history.thread_read.incremental`}}}),o+=1};for(let a of e.thread.turns){let e=i.get(a.id),s=Gk(e,a.status);!(n.has(a.id)||t.activeTurnIds.has(a.id))&&!s&&p(`turn.started`,{type:`turn.started`,turn:{id:a.id,status:a.status,items:[],error:a.error}},[`turn_started`,a.id]);let c=new Map;for(let e of a.items){let t=$(e.id),n=Pk(a.id,e,void 0,c);if(n&&r.has(n))continue;let i=n?Hk(n):void 0;p(`item.completed`,{type:`item.completed`,turn_id:a.id,item:e,...i?{semantic_occurrence:i}:{}},[`item_completed`,a.id,t??`seq_${o}`])}if(Wk(a.status)&&e!==a.status){if(a.status===`completed`){p(`turn.completed`,{type:`turn.completed`,status:a.status,turn:{id:a.id,status:a.status,items:[],error:a.error}},[`turn_terminal`,a.id]);continue}p(`turn.failed`,{type:`turn.failed`,status:a.status,turn:{id:a.id,status:a.status,items:[],error:a.error},...a.error?{error:a.error}:{}},[`turn_terminal`,a.id])}}return f}function Vk(e){let t=new Set,n=new Map;for(let r of e){let e=Uk(r);if(!e)continue;let i=Pk(e.turnId,e.item,void 0,n);i&&t.add(i)}return t}function Hk(e){let t=e.lastIndexOf(`|`);if(t<0||t===e.length-1)return;let n=Number.parseInt(e.slice(t+1),10);return Number.isInteger(n)&&n>0?n:void 0}function Uk(e){let t=Q(e.payload.raw);if(e.type===`item.completed`){let e=Q(t.item),n=$(t.turn_id)??$(t.turnId)??$(e.turn_id)??$(e.turnId);return!n||Object.keys(e).length===0?null:{turnId:n,item:e}}if(e.type!==`native.raw`)return null;let n=$(t.source);if(n===`codex.app_server`){let e=Q(t.message);if($(e.method)!==`item/completed`)return null;let n=Q(e.params),r=Q(n.item),i=$(n.turn_id)??$(n.turnId)??$(r.turn_id)??$(r.turnId);return!i||Object.keys(r).length===0?null:{turnId:i,item:r}}if(n===`codex.history.thread_read`){let e=Q(t.message);if($(e.scope)!==`item`)return null;let n=Q(e.item),r=$(e.turn_id)??$(n.turn_id)??$(n.turnId);return!r||Object.keys(n).length===0?null:{turnId:r,item:n}}return null}function Wk(e){return e===`completed`||e===`failed`||e===`interrupted`}function Gk(e,t){return e===t&&Wk(t)}function Kk(e){let t=e.replace(/\u001B\[[0-?]*[ -/]*[@-~]/g,``).replace(/\s+/g,` `).trim();if(t)return t}function qk(e,t=60){let n=Kk(e);if(!n)return;let r=Array.from(n);return r.length<=t?n:r.slice(0,t).join(``).trimEnd()}function Jk(e){if(typeof e!=`string`)return;let t=Kk(e);if(t)return t}function Yk(e){let t=0;for(let n of Object.values(e))n.some(e=>e.trim().length>0)&&(t+=1);return t}function Xk(e){return!Number.isFinite(e)||e<=0?new Date().toISOString():new Date(e*1e3).toISOString()}async function Zk(e){if(!(await d.default.stat(e)).isDirectory())throw Error(`Project path is not a directory: ${e}`)}var Qk=class{indexPath;eventsDir;sessions=new Map;rawEventsCacheBySession=new Map;compactedRawEventsCacheBySession=new Map;pendingRawMutationsBySession=new Map;ready;writeQueue=Promise.resolve();constructor(e){this.baseDir=e,this.indexPath=p.default.join(e,`session-index.json`),this.eventsDir=p.default.join(e,`session-events`),this.ready=this.loadFromDisk()}async init(){await this.ready}async flushRawCompactions(e){await this.ready}async shutdown(){await this.ready}async upsertSession(e){await this.ready;let t=this.sessions.get(e.id);this.sessions.set(e.id,{...t,...e}),await this.enqueueWrite(async()=>{await this.persistIndex()})}async patchSession(e,t){await this.ready;let n=this.sessions.get(e);return n?(this.sessions.set(e,{...n,...t}),await this.enqueueWrite(async()=>{await this.persistIndex()}),!0):!1}async setSessionStatus(e,t,n){await this.ready;let r=this.sessions.get(e);r&&(this.sessions.set(e,{...r,status:t,updatedAt:n,interactionLockReason:void 0,pendingApprovals:t===`running`?r.pendingApprovals:0,pendingUserInputs:t===`running`?r.pendingUserInputs:0,pendingActions:t===`running`?r.pendingActions:0}),await this.enqueueWrite(async()=>{await this.persistIndex()}))}async removeSession(e){if(await this.ready,!this.sessions.has(e))return;this.sessions.delete(e),this.rawEventsCacheBySession.delete(e),this.compactedRawEventsCacheBySession.delete(e);let t=p.default.join(this.eventsDir,`${e}.jsonl`),n=p.default.join(this.eventsDir,`${e}.raw.jsonl`);await this.enqueueWrite(async()=>{await Promise.all([this.persistIndex(),d.default.rm(t,{force:!0}),d.default.rm(n,{force:!0})])})}hasSession(e){return this.sessions.has(e)}getSession(e){return this.sessions.get(e)}getProjectSession(e,t){let n=this.sessions.get(t);if(!(!n||n.projectId!==e))return n}listSessions(e=`all`){return[...this.sessions.values()].filter(t=>e===`all`||t.status===e).sort((e,t)=>{let n=e.updatedAt||e.createdAt;return(t.updatedAt||t.createdAt).localeCompare(n)})}listProjectSessions(e,t=`all`){return this.listSessions(t).filter(t=>t.projectId===e)}async appendRawEvent(e){await this.ready,this.sessions.has(e.sessionId)&&(_A(e)||await this.enqueueRawSessionWrite(e.sessionId,async()=>{if(lA(e)){let t=gA([...await this.readSessionRawEventsLocked(e.sessionId),e]);await this.replaceRawEventFile(e.sessionId,t),this.rawEventsCacheBySession.set(e.sessionId,t),this.compactedRawEventsCacheBySession.set(e.sessionId,iA(t));return}await this.appendRawEventLine(e),this.appendRawEventToCache(e)}))}async mergeSessionRawEvents(e,t,n){if(await this.ready,!this.sessions.has(e))return[];let r=t.filter(t=>t.sessionId===e),i=[];return await this.enqueueRawSessionWrite(e,async()=>{let t=uA(await this.readSessionRawEventsLocked(e),r,n);await this.replaceRawEventFile(e,t);let a=iA(t);i=aA(a),this.rawEventsCacheBySession.set(e,t),this.compactedRawEventsCacheBySession.set(e,a)}),i}async getSessionRawEvents(e,t=300){return this.getSessionRawEventsCompacted(e,t)}async getSessionStoredRawEvents(e,t=300){if(await this.ready,!this.sessions.has(e))return[];let n=Math.max(1,t),r=this.readSessionRawEventsFromCache(e);if(r!==void 0)return r.slice(-n);let i=[];return await this.enqueueWrite(async()=>{i=(await this.readSessionRawEventsLocked(e)).slice(-n)}),i}async getSessionRawEventsCompacted(e,t=300){if(await this.ready,!this.sessions.has(e))return[];let n=Math.max(1,t),r=this.readSessionRawEventsCompactedFromCache(e);if(r!==void 0)return r.slice(-n);let i=[];return await this.enqueueWrite(async()=>{i=(await this.readSessionRawEventsCompactedLocked(e)).slice(-n)}),i}async getSessionRawEventsSinceSeq(e,t,n=2e3){if(await this.ready,!this.sessions.has(e))return[];let r=Math.max(1,n),i=this.readSessionRawEventsFromCache(e);if(i!==void 0)return Rf(i.filter(e=>e.rawSeq>t)).slice(0,r);let a=[];return await this.enqueueWrite(async()=>{a=Rf((await this.readSessionRawEventsLocked(e)).filter(e=>e.rawSeq>t)).slice(0,r)}),a}async getSessionRawSeqRange(e){if(await this.ready,!this.sessions.has(e))return null;let t=this.readSessionRawEventsFromCache(e);if(t!==void 0)return nA(t);let n=null;return await this.enqueueWrite(async()=>{n=nA(await this.readSessionRawEventsLocked(e))}),n}async loadFromDisk(){await d.default.mkdir(this.eventsDir,{recursive:!0});try{let e=await d.default.readFile(this.indexPath,`utf8`),t=JSON.parse(e);if(t.v!==1||!Array.isArray(t.sessions))return;for(let e of t.sessions)e?.id&&e?.provider&&e?.createdAt&&e?.updatedAt&&e?.status&&e?.projectId&&e?.projectPath&&this.sessions.set(e.id,{...e,status:`idle`,interactionLockReason:void 0,pendingApprovals:0,pendingUserInputs:0,pendingActions:0})}catch(e){if(e.code!==`ENOENT`)throw e}}async persistIndex(){await d.default.mkdir(this.baseDir,{recursive:!0});let e={v:1,sessions:[...this.sessions.values()].sort((e,t)=>{let n=e.updatedAt||e.createdAt;return(t.updatedAt||t.createdAt).localeCompare(n)})};await d.default.writeFile(this.indexPath,`${JSON.stringify(e,null,2)}\n`,`utf8`)}enqueueWrite(e){return this.writeQueue=this.writeQueue.then(e,e),this.writeQueue}async enqueueRawSessionWrite(e,t){this.incrementPendingRawMutation(e);try{let e;return await this.enqueueWrite(async()=>{e=await t()}),e}finally{this.decrementPendingRawMutation(e)}}async appendRawEventLine(e){let t=p.default.join(this.eventsDir,`${e.sessionId}.raw.jsonl`),n=`${tA(e)}\n`;await d.default.appendFile(t,n,`utf8`)}async replaceRawEventFile(e,t){let n=p.default.join(this.eventsDir,`${e}.raw.jsonl`),r=t.map(e=>tA(e)).join(`
|
|
505
505
|
`);await rA(n,r?`${r}\n`:``)}appendRawEventToCache(e){let t=this.rawEventsCacheBySession.get(e.sessionId),n=t?.[t.length-1];t&&t.push(e);let r=this.compactedRawEventsCacheBySession.get(e.sessionId);if(r){if(cA(e)){this.compactedRawEventsCacheBySession.delete(e.sessionId);return}if(n&&sA(e,n)<0){this.compactedRawEventsCacheBySession.delete(e.sessionId);return}oA(r,e)}}async readSessionRawEventsCompactedLocked(e){let t=this.compactedRawEventsCacheBySession.get(e);if(t)return aA(t);let n=iA(await this.readSessionRawEventsLocked(e));return this.compactedRawEventsCacheBySession.set(e,n),aA(n)}async readSessionRawEventsLocked(e){let t=this.rawEventsCacheBySession.get(e);if(t)return t;let n=p.default.join(this.eventsDir,`${e}.raw.jsonl`),r;try{r=await d.default.readFile(n,`utf8`)}catch(t){if(t.code===`ENOENT`)return this.rawEventsCacheBySession.set(e,[]),[];throw t}let i=r.split(`
|
|
506
506
|
`).map(e=>e.trim()).filter(Boolean),a=[];for(let e of i)try{let t=JSON.parse(e);if(!$k(t)||t.kind!==`provider.raw`)continue;let n=eA(t.rawSeq);a.push({value:t,...n===void 0?{}:{rawSeq:n}})}catch{}if(a.length===0)return this.rawEventsCacheBySession.set(e,[]),[];let o=a.some(e=>e.rawSeq===void 0),s=a.map((e,t)=>({...e.value,rawSeq:e.rawSeq??t+1})),c=[];for(let e of s){let t=yc.safeParse(e);t.success&&c.push(t.data)}if(o){let e=c.map(e=>tA(e)).join(`
|
|
507
|
-
`),t=e?`${e}\n`:``;await d.default.writeFile(n,t,`utf8`)}return this.rawEventsCacheBySession.set(e,c),c}readSessionRawEventsFromCache(e){if(!this.hasPendingRawMutation(e))return this.rawEventsCacheBySession.get(e)}readSessionRawEventsCompactedFromCache(e){if(this.hasPendingRawMutation(e))return;let t=this.compactedRawEventsCacheBySession.get(e);if(t)return aA(t);let n=this.rawEventsCacheBySession.get(e);if(!n)return;let r=iA(n);return this.compactedRawEventsCacheBySession.set(e,r),aA(r)}incrementPendingRawMutation(e){this.pendingRawMutationsBySession.set(e,(this.pendingRawMutationsBySession.get(e)??0)+1)}decrementPendingRawMutation(e){let t=(this.pendingRawMutationsBySession.get(e)??0)-1;if(t>0){this.pendingRawMutationsBySession.set(e,t);return}this.pendingRawMutationsBySession.delete(e)}hasPendingRawMutation(e){return(this.pendingRawMutationsBySession.get(e)??0)>0}};function $k(e){return typeof e==`object`&&!!e}function eA(e){if(!(typeof e!=`number`||!Number.isInteger(e)||e<=0))return e}function tA(e){let t=new WeakSet;return JSON.stringify(e,(e,n)=>{if(typeof n==`bigint`)return n.toString();if(typeof n==`function`)return`[Function ${n.name||`anonymous`}]`;if(typeof n==`object`&&n){if(t.has(n))return`[Circular]`;t.add(n)}return n})}function nA(e){if(e.length===0)return null;let t=e[0],n=e[e.length-1];return!t||!n?null:{min:t.rawSeq,max:n.rawSeq}}async function rA(e,t){await d.default.mkdir(p.default.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await d.default.writeFile(n,t,`utf8`),await d.default.rename(n,e)}catch(e){try{await d.default.rm(n,{force:!0})}catch{}throw e}}function iA(e){let t=Lf(e),n=t.map(e=>e),r=new Map;for(let[e,t]of n.entries()){let n=Bf(t);n&&r.set(n.key,e)}return{slots:n,indexByKey:r,dense:t}}function aA(e){return e.dense||=e.slots.filter(e=>e!==null),e.dense}function oA(e,t){let n=Bf(t);if(!n){e.slots.push(t),e.dense=null;return}let r=e.indexByKey.get(n.key);if(r===void 0){e.slots.push(t),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null;return}let i=e.slots[r];if(!i){e.slots.push(t),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null;return}let a=Vf(i,t);if(!a){e.slots.push(t),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null;return}e.slots[r]=null,e.slots.push(a),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null}function sA(e,t){let n=e.ts.localeCompare(t.ts);return n===0?e.eventId.localeCompare(t.eventId):n}function cA(e){if(e.type===`item.completed`)return!0;if(e.type!==`native.raw`)return!1;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{};return(typeof n.method==`string`?n.method:typeof t.method==`string`?t.method:``)===`item/completed`}function lA(e){if(cA(e)||e.type===`turn.completed`||e.type===`turn.failed`)return!0;if(e.type!==`native.raw`)return!1;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{},r=typeof n.method==`string`?n.method:typeof t.method==`string`?t.method:``;return r===`turn/completed`||r===`turn/failed`||r===`turn/interrupted`}function uA(e,t,n){if(n?.replaceMissing)return dA(e,t,n);let r=[...e].sort(hA),i=new Map,a=1;for(let[e,t]of r.entries())i.set(t.eventId,e),a=Math.max(a,t.rawSeq+1);for(let e of t){let t=i.get(e.eventId);if(t!==void 0){let n=r[t];n&&fA(n,e)&&(r[t]=mA(n,e));continue}let n={...e,rawSeq:a};a+=1,i.set(n.eventId,r.length),r.push(n)}return gA(r.sort(hA)).sort(hA)}function dA(e,t,n){let r=new Map(e.map(e=>[e.eventId,e])),i=new Set(t.map(e=>e.eventId)),a=n?.baseEventIds?new Set(n.baseEventIds):null,o=a?e.filter(e=>!a.has(e.eventId)&&!i.has(e.eventId)):[],s=[...t,...o].sort(hA),c=1;for(let t of e)c=Math.max(c,t.rawSeq+1);return gA(s.map(e=>{let t=r.get(e.eventId);if(t)return fA(t,e)?mA(t,e):{...e,rawSeq:t.rawSeq};let n={...e,rawSeq:c};return c+=1,n})).sort(hA)}function fA(e,t){return pA(e)&&pA(t)}function pA(e){return e.type===`native.raw`?SA(($k(e.payload.raw)?e.payload.raw:{}).source)===`codex.history.thread_read`:!1}function mA(e,t){return{...t,rawSeq:e.rawSeq,ts:e.ts}}function hA(e,t){let n=e.rawSeq-t.rawSeq;if(n!==0)return n;let r=e.ts.localeCompare(t.ts);return r===0?e.eventId.localeCompare(t.eventId):r}function gA(e){let t=zf(e).filter(e=>!_A(e)),n=new Set;for(let e of t){let t=vA(e);t&&n.add(t)}return n.size===0?t:t.filter(e=>{let t=yA(e);return!t||!n.has(t)})}function _A(e){if(e.type!==`native.raw`)return!1;let t=$k(e.payload.raw)?e.payload.raw:{};if(SA(t.source)!==`codex.app_server`)return!1;let n=$k(t.message)?t.message:{};return SA(n.method)??SA(t.method)?!1:$k(($k(n.result)?n.result:{}).turn)}function vA(e){if(e.type===`item.completed`){let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.item)?t.item:{};return bA(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{},r=$k(n.params)?n.params:{};if((SA(n.method)??SA(t.method))!==`item/completed`)return null;let i=$k(r.item)?r.item:{};return bA(e.sessionId,i)}function yA(e){if(e.type===`item.updated`){let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.item)?t.item:{},r=SA(n.original_method)??SA(n.originalMethod)??``,i=$k(n.payload)?n.payload:{};return!(typeof i.delta==`string`||typeof i.output_delta==`string`||typeof i.outputDelta==`string`||typeof n.output_delta==`string`||typeof n.outputDelta==`string`||typeof n.text==`string`)&&!xA(r)?null:bA(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{},r=$k(n.params)?n.params:{};if(!xA(SA(n.method)??SA(t.method)??``))return null;let i=$k(r.msg)?r.msg:{},a=SA(r.itemId)??SA(r.item_id)??SA(i.itemId)??SA(i.item_id);return a?`${e.sessionId}|${a}`:null}function bA(e,t){let n=SA(t.id)??SA(t.item_id)??SA(t.itemId);return n?`${e}|${n}`:null}function xA(e){return e.includes(`_delta`)||e.endsWith(`/delta`)||e.endsWith(`Delta`)||e.includes(`/delta/`)}function SA(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}var CA=class{clients=new Map;clientIdsBySessionId=new Map;deliveryStateByClientSession=new Map;addClient(e,t){let n=`ws_${kx(10)}`;return this.clients.set(n,{id:n,deviceId:e,socket:t,subscriptionsBySessionId:new Map}),n}removeClient(e){let t=this.clients.get(e);t&&(this.removeClientFromSessionIndexes(e,t.subscriptionsBySessionId.keys()),this.removeClientDeliveryState(e),this.clients.delete(e))}replaceSubscriptions(e,t,n=!0){let r=this.clients.get(e);if(!r)return[];n&&(this.removeClientFromSessionIndexes(e,r.subscriptionsBySessionId.keys()),this.removeClientSessionDeliveryState(e,r.subscriptionsBySessionId.keys()),r.subscriptionsBySessionId.clear());let i=new Map;for(let e of t)i.set(e.sessionId,e);for(let[t,n]of i){r.subscriptionsBySessionId.set(t,n);let i=this.clientIdsBySessionId.get(t)??new Set;i.add(e),this.clientIdsBySessionId.set(t,i),this.ensureClientSessionDeliveryState(e,t)}return[...r.subscriptionsBySessionId.values()]}getSubscriptions(e){let t=this.clients.get(e);return t?[...t.subscriptionsBySessionId.values()]:[]}getWatchSubscriptions(e){let t=new Map;for(let n of this.clients.values())for(let r of n.subscriptionsBySessionId.values())r.purpose===e&&t.set(r.sessionId,r);return[...t.values()]}getClientSubscriptionsForSession(e,t){let n=this.clientIdsBySessionId.get(e);if(!n||n.size===0)return[];let r=[];for(let i of n){let n=this.clients.get(i),a=n?.subscriptionsBySessionId.get(e);!n||!a||t&&a.purpose!==t||r.push({clientId:i,subscription:a})}return r}routeProviderRaw(e){let t=this.clientIdsBySessionId.get(e.sessionId);if(!t||t.size===0)return;let n=null;for(let r of t){let t=this.clients.get(r),i=t?.subscriptionsBySessionId.get(e.sessionId);if(!t||!i||!this.shouldDeliverProviderRaw(i))continue;let a=this.deliveryStateByClientSession.get(this.clientSessionKey(r,e.sessionId));if(a?.paused){a.queued.push({message:e});continue}if(t.socket.readyState===t.socket.OPEN){if(t.socket.sendProviderRaw){t.socket.sendProviderRaw(e);continue}n??=JSON.stringify(e),t.socket.send(n)}}}routeSessionMessage(e,t){let n=this.clientIdsBySessionId.get(e.sessionId);if(!n||n.size===0)return;let r=null;for(let i of n){let n=this.clients.get(i),a=n?.subscriptionsBySessionId.get(e.sessionId);if(!n||!a||!t(a))continue;let o=this.deliveryStateByClientSession.get(this.clientSessionKey(i,e.sessionId));if(o?.paused){o.queued.push({message:e});continue}n.socket.readyState===n.socket.OPEN&&(r??=JSON.stringify(e),n.socket.send(r))}}sendSessionMessageToClient(e,t,n){let r=this.clients.get(e),i=r?.subscriptionsBySessionId.get(t);if(!r||!i)return;let a=this.deliveryStateByClientSession.get(this.clientSessionKey(e,t));if(a?.paused){a.queued.push({message:n});return}r.socket.readyState===r.socket.OPEN&&r.socket.send(JSON.stringify(n))}pauseSession(e,t){let n=this.ensureClientSessionDeliveryState(e,t);n.paused=!0}resumeSession(e,t){let n=this.clientSessionKey(e,t),r=this.deliveryStateByClientSession.get(n);if(!r||(r.paused=!1,r.queued.length===0))return;let i=this.clients.get(e);if(!i||i.socket.readyState!==i.socket.OPEN){r.queued=[];return}let a=[...r.queued];r.queued=[];for(let e of a){if(e.message.kind===`provider.raw`&&i.socket.sendProviderRaw){i.socket.sendProviderRaw(e.message);continue}i.socket.send(JSON.stringify(e.message))}}sendStreamMessage(e,t){let n=this.clients.get(e);!n||n.socket.readyState!==n.socket.OPEN||n.socket.send(JSON.stringify(t))}sendBroadcastMessage(e,t){let n=JSON.stringify(e);for(let e of this.clients.values())if(e.socket.readyState===e.socket.OPEN){if(t?.sessionId){let n=e.subscriptionsBySessionId.get(t.sessionId);if(!n||t.purpose&&n.purpose!==t.purpose)continue}e.socket.send(n)}}sendSystemMessage(e,t){let n=this.clients.get(e);!n||n.socket.readyState!==n.socket.OPEN||n.socket.send(JSON.stringify(t))}broadcastSystemMessage(e){let t=JSON.stringify(e);for(let e of this.clients.values())e.socket.readyState===e.socket.OPEN&&e.socket.send(t)}count(){return this.clients.size}removeClientFromSessionIndexes(e,t){for(let n of t){let t=this.clientIdsBySessionId.get(n);t&&(t.delete(e),t.size===0&&this.clientIdsBySessionId.delete(n))}}clientSessionKey(e,t){return`${e}::${t}`}ensureClientSessionDeliveryState(e,t){let n=this.clientSessionKey(e,t),r=this.deliveryStateByClientSession.get(n);if(r)return r;let i={paused:!1,queued:[]};return this.deliveryStateByClientSession.set(n,i),i}removeClientSessionDeliveryState(e,t){for(let n of t)this.deliveryStateByClientSession.delete(this.clientSessionKey(e,n))}removeClientDeliveryState(e){let t=`${e}::`;for(let e of this.deliveryStateByClientSession.keys())e.startsWith(t)&&this.deliveryStateByClientSession.delete(e)}shouldDeliverProviderRaw(e){return!(e.purpose===`detail_view`&&e.bootstrapMode===`readable`)}};const wA=1200,TA=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`;var EA=class{statesByKey=new Map;targetsByClientId=new Map;constructor(e){this.options=e}setClientWatchTargets(e,t,n){let r=new Map;for(let e of t){let t=e.sessionId.trim(),n=e.projectId?.trim()??``;!t||!n||r.set(this.stateKey(n,t),{sessionId:t,projectId:n})}let i=this.targetsByClientId.get(e)??new Map,a=n?new Map:new Map(i);for(let[e,t]of r)a.set(e,t);for(let[t,n]of i)a.has(t)||this.removeClientFromState(e,n.projectId??``,n.sessionId);for(let[t,n]of a)i.get(t)||this.addClientToState(e,n.projectId??``,n.sessionId);return this.targetsByClientId.set(e,a),[...a.values()]}removeClient(e){let t=this.targetsByClientId.get(e);if(t){for(let n of t.values())this.removeClientFromState(e,n.projectId??``,n.sessionId);this.targetsByClientId.delete(e)}}close(){for(let e of this.statesByKey.values())this.disposeState(e);this.statesByKey.clear(),this.targetsByClientId.clear()}logDebug(e,t){TA&&(console.log(`[native-watch][gateway]`,e,t),this.options.logger.info?.({event:e,...t},`native session watch debug`))}addClientToState(e,t,n){if(!t||!n)return;let r=this.stateKey(t,n),i=this.statesByKey.get(r);i||(i={provider:`codex`,sessionId:n,projectId:t,ownerClientIds:new Set,fileWatcher:null,debounceTimer:null,catchupRetryTimer:null,reconcileTimer:setInterval(()=>{this.requestSync(r,`reconcile`)},25e3),syncInFlight:!1,rerunRequested:!1,stableIdleSyncCount:0,watchCatchupRetryCount:0,lastObservedRawSeq:0,lastObservedRawEventCount:0,lastTriggeredAt:0,lastSyncStartedAt:null,lastSyncCompletedAt:null},this.statesByKey.set(r,i),this.logDebug(`state.created`,{clientId:e,projectId:t,sessionId:n})),i.ownerClientIds.add(e),this.logDebug(`lease.added`,{clientId:e,projectId:t,sessionId:n,ownerClientCount:i.ownerClientIds.size}),this.requestSync(r,`lease_added`)}removeClientFromState(e,t,n){let r=this.statesByKey.get(this.stateKey(t,n));r&&(r.ownerClientIds.delete(e),this.logDebug(`lease.removed`,{clientId:e,projectId:t,sessionId:n,ownerClientCount:r.ownerClientIds.size}),!(r.ownerClientIds.size>0)&&(this.disposeState(r),this.statesByKey.delete(this.stateKey(t,n))))}disposeState(e){e.debounceTimer&&=(clearTimeout(e.debounceTimer),null),this.clearCatchupRetry(e,{resetAttempts:!0}),clearInterval(e.reconcileTimer),e.fileWatcher?.close(),e.fileWatcher=null,this.logDebug(`state.disposed`,{projectId:e.projectId,sessionId:e.sessionId,watchedPath:e.watchedPath})}async requestSync(e,t){let n=this.statesByKey.get(e);if(n){if(n.lastTriggeredAt=Date.now(),n.syncInFlight){n.rerunRequested=!0;return}n.syncInFlight=!0,n.rerunRequested=!1,n.lastSyncStartedAt=Date.now(),this.logDebug(`sync.begin`,{projectId:n.projectId,sessionId:n.sessionId,reason:t,ownerClientCount:n.ownerClientIds.size,watchedPath:n.watchedPath,watchedDir:n.watchedDir,watchedBaseName:n.watchedBaseName,stableIdleSyncCount:n.stableIdleSyncCount});try{let r=await this.options.sessionManager.getProjectSessionSummary(n.projectId,n.sessionId);if(!r||r.providerMode!==`native`||r.provider!==`codex`&&r.provider!==`claude`){this.logDebug(`sync.stop.unwatchable_summary`,{projectId:n.projectId,sessionId:n.sessionId,summarySource:r?.source,summaryProvider:r?.provider,summaryProviderMode:r?.providerMode,summaryStatus:r?.status}),this.stopState(e);return}n.provider=r.provider;let i=await this.options.sessionManager.syncProjectSessionHistory(n.projectId,n.sessionId);n.lastSyncCompletedAt=Date.now(),this.applyWatchPath(n,i.nativeWatchPath);let a=n.lastObservedRawSeq,o=n.lastObservedRawEventCount,s=this.resolveObservedRawSeq(i),c=s>a||i.rawEvents.length>o;if(c?this.clearCatchupRetry(n,{resetAttempts:!0}):this.maybeScheduleWatchCatchupRetry(e,n,t,i,{previousObservedRawSeq:a,previousObservedRawEventCount:o,nextObservedRawSeq:s,nextObservedRawEventCount:i.rawEvents.length}),n.lastObservedRawSeq=Math.max(n.lastObservedRawSeq,s),n.lastObservedRawEventCount=Math.max(n.lastObservedRawEventCount,i.rawEvents.length),i.session.status!==`running`&&!i.historyUpdated?n.stableIdleSyncCount+=1:n.stableIdleSyncCount=0,this.logDebug(`sync.result`,{projectId:n.projectId,sessionId:n.sessionId,reason:t,status:i.session.status,interactionLockReason:i.session.interactionLockReason,historyUpdated:i.historyUpdated,statusChanged:i.statusChanged,refreshMode:i.refreshMode,fromRawSeq:i.fromRawSeq,toRawSeq:i.toRawSeq,nativeWatchPath:i.nativeWatchPath,rawEventCount:i.rawEvents.length,cursorAdvanced:c,previousObservedRawSeq:a,previousObservedRawEventCount:o,nextObservedRawSeq:s,nextObservedRawEventCount:i.rawEvents.length,watchCatchupRetryCount:n.watchCatchupRetryCount,stableIdleSyncCount:n.stableIdleSyncCount}),i.historyUpdated||i.statusChanged){let e=this.options.createExternalUpdateMessage({provider:i.session.provider,sessionId:i.session.id,projectId:i.session.projectId,updatedAt:i.session.updatedAt,status:i.session.status,interactionLockReason:i.session.interactionLockReason,refreshMode:i.refreshMode,fromRawSeq:i.fromRawSeq,toRawSeq:i.toRawSeq,historyUpdated:i.historyUpdated,statusChanged:i.statusChanged});for(let t of n.ownerClientIds)this.options.sendStreamMessage(t,e)}i.historyUpdated&&await this.options.refreshDetailSessionSnapshots?.({projectId:n.projectId,sessionId:n.sessionId,reason:`external_history_updated`})}catch(e){this.options.logger.warn({err:e,projectId:n.projectId,sessionId:n.sessionId,reason:t},`native session watch sync failed`)}finally{let n=this.statesByKey.get(e);if(!n)return;n.syncInFlight=!1,n.rerunRequested&&(this.logDebug(`sync.rerun`,{projectId:n.projectId,sessionId:n.sessionId,reason:t}),n.rerunRequested=!1,this.requestSync(e,`rerun`))}}}stopState(e){let t=this.statesByKey.get(e);if(t){this.disposeState(t),this.statesByKey.delete(e);for(let t of this.targetsByClientId.values())t.delete(e)}}applyWatchPath(e,t){let n=t?.trim()??``;if(!n)return;let r=p.default.resolve(n);if(e.watchedPath===r&&e.fileWatcher)return;let i=p.default.dirname(r),a=p.default.basename(r);e.fileWatcher?.close(),e.fileWatcher=null,e.watchedPath=r,e.watchedDir=i,e.watchedBaseName=a,this.logDebug(`watch.path.applied`,{projectId:e.projectId,sessionId:e.sessionId,watchedPath:r,watchedDir:i,watchedBaseName:a});try{e.fileWatcher=this.createPathWatcher(r,(t,n)=>{let i=n?Buffer.isBuffer(n)?n.toString(`utf8`):n:void 0;this.logDebug(`watch.fs.event`,{projectId:e.projectId,sessionId:e.sessionId,watchedPath:r,eventType:t,filename:i}),this.scheduleDebouncedSync(this.stateKey(e.projectId,e.sessionId))}),e.fileWatcher.on(`error`,t=>{this.options.logger.warn({err:t,projectId:e.projectId,sessionId:e.sessionId,watchedPath:r},`native session watcher error`)})}catch(t){this.options.logger.warn({err:t,projectId:e.projectId,sessionId:e.sessionId,watchedPath:r},`failed to start native session watcher`)}}createPathWatcher(e,t){return this.options.createWatcher?this.options.createWatcher(e,t):(0,u.watch)(e,(e,n)=>{t(e,n)})}scheduleDebouncedSync(e){let t=this.statesByKey.get(e);if(!t)return;let n=!!t.debounceTimer;t.debounceTimer&&clearTimeout(t.debounceTimer),this.clearCatchupRetry(t,{resetAttempts:!0}),this.logDebug(`watch.debounce.scheduled`,{projectId:t.projectId,sessionId:t.sessionId,watchedPath:t.watchedPath,delayMs:300,replacedExistingTimer:n}),t.debounceTimer=setTimeout(()=>{t.debounceTimer=null,this.logDebug(`watch.debounce.fired`,{projectId:t.projectId,sessionId:t.sessionId,watchedPath:t.watchedPath}),this.requestSync(e,`watch`)},300)}resolveObservedRawSeq(e){let t=e.rawEvents[e.rawEvents.length-1],n=t&&typeof t==`object`&&t&&`rawSeq`in t&&typeof t.rawSeq==`number`?t.rawSeq:void 0;return e.toRawSeq??n??0}clearCatchupRetry(e,t){e.catchupRetryTimer&&=(clearTimeout(e.catchupRetryTimer),null),t?.resetAttempts&&(e.watchCatchupRetryCount=0)}maybeScheduleWatchCatchupRetry(e,t,n,r,i){n!==`watch`&&n!==`watch_catchup`||t.ownerClientIds.size!==0&&(t.watchCatchupRetryCount>=2||(t.catchupRetryTimer||=(t.watchCatchupRetryCount+=1,this.logDebug(`watch.catchup.scheduled`,{projectId:t.projectId,sessionId:t.sessionId,reason:n,delayMs:wA,historyUpdated:r.historyUpdated,refreshMode:r.refreshMode,previousObservedRawSeq:i.previousObservedRawSeq,previousObservedRawEventCount:i.previousObservedRawEventCount,nextObservedRawSeq:i.nextObservedRawSeq,nextObservedRawEventCount:i.nextObservedRawEventCount,watchCatchupRetryCount:t.watchCatchupRetryCount}),setTimeout(()=>{t.catchupRetryTimer=null,this.logDebug(`watch.catchup.fired`,{projectId:t.projectId,sessionId:t.sessionId,watchCatchupRetryCount:t.watchCatchupRetryCount}),this.requestSync(e,`watch_catchup`)},wA))))}stateKey(e,t){return`${e}::${t}`}};function DA(e){return e.map(e=>({sessionId:e.sessionId,projectId:e.projectId,cursor:e.cursor.kind===`raw_seq`?{kind:`raw_seq`,rawSeq:e.cursor.rawSeq}:{kind:`all`},purpose:e.purpose,detailLevel:e.detailLevel,bootstrapMode:e.bootstrapMode}))}function OA(e){return!e||e.providerMode!==`native`?!1:e.interactionLockReason===`external_turn_running`||e.provider===`codex`&&e.status!==`running`}function kA(e,t){return e.length===0?[]:t===void 0?[...e]:e.filter(e=>e.rawSeq>t)}function AA(e){return{baseFilteredRawEvents:kC(Lf(e.rawEvents.filter(t=>t.rawSeq<=e.cursorRawSeq)),e.detailLevel),nextFilteredRawEvents:kC(Lf(e.rawEvents),e.detailLevel)}}function jA(e,t){return t&&`kind`in t&&t.kind===`bootstrapping`?t:{kind:`bootstrapping`,sessionId:e,previousReadyState:t??null,queuedEnvelopes:[]}}function MA(e,t){let n=e.previousReadyState;if(!n)return{previousReadyState:null,nextReadyState:null,replayedEnvelopes:[]};let r=kA(e.queuedEnvelopes,n.rawEvents[n.rawEvents.length-1]?.rawSeq),i=n;for(let e of r)i=t(i,e);return{previousReadyState:n,nextReadyState:i,replayedEnvelopes:r}}function NA(e){let t=(e,t)=>{let n={...e??{},...t??{}};return Object.keys(n).length>0?n:void 0};return e.existing?{previousState:e.existing.previousState,nextState:e.next.nextState,sessionSummary:t(e.existing.sessionSummary,e.next.sessionSummary)}:{previousState:e.next.previousState,nextState:e.next.nextState,sessionSummary:t(void 0,e.next.sessionSummary)}}const PA=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`,FA=process.env.SESSION_FETCH_DEBUG===`1`||process.env.EXPO_PUBLIC_SESSION_FETCH_DEBUG===`1`;let IA=null,LA=null;const RA={perMessageDeflate:{threshold:1024}};function zA(e,t){PA&&(console.log(`[native-watch][gateway]`,e,t),LA?.info({event:e,...t},`native session watch debug`))}function BA(e,t){FA&&(console.log(`[session-fetch][gateway] ${e}`,t),IA?.info({event:e,...t},`session fetch debug`))}function VA(e){return e?{sessionFound:!0,sessionId:e.id,projectId:e.projectId,nativeSessionId:e.nativeSessionId??null,provider:e.provider,providerMode:e.providerMode,source:e.source??null,status:e.status,interactionLockReason:e.interactionLockReason??null,updatedAt:e.updatedAt,lastHydratedExternalUpdatedAt:e.lastHydratedExternalUpdatedAt??null}:{sessionFound:!1}}async function HA(e){let t=e.limit??300,n=e.detailLevel??`full`,r=(r,i)=>{BA(`raw-events.list`,{requestSource:e.requestSource,projectId:e.projectId,sessionId:e.sessionId,limit:t,detailLevel:n,requestedCursor:e.fromRawSeqExclusive??null,decision:r.decision,reason:r.reason,fromRawSeqExclusive:r.fromRawSeqExclusive??null,toRawSeq:r.toRawSeq??null,returnedCount:r.events.length,returnedFirstRawSeq:r.events[0]?.rawSeq??null,returnedLastRawSeq:r.events[r.events.length-1]?.rawSeq??null,...i})};if(e.fromRawSeqExclusive===void 0){let i=await e.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,t),a={decision:`snapshot`,reason:i.length===0?`empty_history_snapshot`:`initial_snapshot`,toRawSeq:i[i.length-1]?.rawSeq,events:kC(i,n)};return r(a),a}let i=await e.sessionManager.getProjectSessionRawSeqRange(e.projectId,e.sessionId);if(!i){let e={decision:`snapshot`,reason:`empty_history_snapshot`,events:[]};return r(e,{rangeMin:null,rangeMax:null,minExpectedCursor:null}),e}let a=Math.max(0,i.min-1);if(e.fromRawSeqExclusive<a||e.fromRawSeqExclusive>i.max){let o=await e.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,t),s={decision:`snapshot`,reason:`cursor_out_of_range`,toRawSeq:o[o.length-1]?.rawSeq,events:kC(o,n)};return r(s,{rangeMin:i.min,rangeMax:i.max,minExpectedCursor:a}),s}let o=await e.sessionManager.getProjectSessionRawEventsSinceSeq(e.projectId,e.sessionId,e.fromRawSeqExclusive,t),s={decision:`delta`,reason:`cursor_valid_delta`,fromRawSeqExclusive:e.fromRawSeqExclusive,toRawSeq:o[o.length-1]?.rawSeq??e.fromRawSeqExclusive,events:kC(o,n)};return r(s,{rangeMin:i.min,rangeMax:i.max,minExpectedCursor:a}),s}async function UA(e,t={}){await gh(e.gatewayLogPath);let n=GA(e,t),r=WA(e,n.instance);IA=r.log,LA=r.log,await r.register(wx.default,{origin:!0}),await r.register(Cx.default,{options:RA});let i=process.env.NODE_ENV!==`production`,a=4e3,o=`[unserializable payload]`,s=new wS(e);await s.init();let c=new PS(e.auditLogPath),l=new CA,u=new yC,d=new UC(e.projectStoreDir),f=new Qk(e.sessionHistoryDir);await f.init();let m=new fD(p.default.join(e.sessionHistoryDir,`discovery-v1`));await m.init();let h=new $E({store:m});await h.init();let g,_=null,v=await op(e.authStoreDir),y=new IO({preferNativeProviders:e.enableNativeProviders,requireNativeCodex:e.requireNativeCodex,auditLogger:c,projectStore:d,historyStore:f,logger:r.log,runtimeLifecycle:{idleTtlMs:e.runtimeIdleTtlMs,sweepIntervalMs:e.runtimeSweepIntervalMs,maxSessions:e.runtimeMaxSessions,maxCodexSessions:e.runtimeMaxCodexSessions,maxClaudeSessions:e.runtimeMaxClaudeSessions},onEnvelope:e=>{l.routeProviderRaw(e),Se(e)}}),b=new EA({sessionManager:y,logger:r.log,sendStreamMessage:(e,t)=>{l.sendStreamMessage(e,t)},createExternalUpdateMessage:e=>Pe(e),refreshDetailSessionSnapshots:e=>Ee(e)});y.warmStartupProviderCapabilities().catch(e=>{r.log.warn({err:e},`startup provider capability warmup failed`)});let x=new Fm({packageName:F.packageName,currentVersion:F.version,sessionHub:l,logger:r.log,consoleWrite:e=>{console.log(e)},getRunningSessionCount:async()=>y.getRunningRuntimeSessionCount(),requestPreparedUpdate:t.onUpdatePrepared});r.addHook(`onClose`,async()=>{r.log.info({hasRelayClient:!!_},`gateway shutdown starting`);try{for(let e of O.values())clearTimeout(e.timer);O.clear(),b.close(),_?.close(),S.close(),await x.shutdown(),await y.shutdown(),await f.shutdown(),r.log.info(`gateway shutdown completed`)}catch(e){throw r.log.error({err:e},`gateway shutdown failed`),e}finally{IA=null,LA=null,n.close()}}),i&&r.addHook(`onSend`,async(e,t,n)=>(r.log.info({method:e.method,url:e.url,statusCode:t.statusCode,responseBody:Le(n)},`gateway response (dev)`),n)),r.get(`/health`,async()=>({ok:!0,service:`desktop-gateway`,now:new Date().toISOString(),wsClients:l.count(),machineName:vm(),gatewayIdentity:v.identity})),r.get(`/api/pairing/descriptor`,async()=>pm({gatewayId:e.gatewayId,machineName:vm(),relayBaseUrl:e.relayEnabled?Em({relayUrl:e.relayUrl,gatewayHost:e.host}):``,directBaseUrls:wm({protocol:e.httpsEnabled?`https`:`http`,host:e.host,port:e.httpsEnabled?e.httpsPort:e.port}),relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:void 0,gatewayIdentity:v.identity})),r.post(`/api/pairing/start`,async(t,n)=>{if(!Ie(t))return n.code(401).send({error:`Unauthorized`});try{let t=await s.createPairingCode(e.pairingCodeTtlSeconds);return await c.record({ts:new Date().toISOString(),action:`pairing.start`,detail:{expiresAt:t.expiresAt,source:`api`,ttlSeconds:e.pairingCodeTtlSeconds}}),t}catch(e){return r.log.error({err:e},`failed to generate pairing code via API`),n.code(500).send({error:`Failed to generate pairing code`,detail:String(e)})}}),r.post(`/api/pairing/claim`,async(e,t)=>{let n=Mc.safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{let e=Qe(n.data.deviceName),t=await s.claimPairingCode(n.data.code,e,n.data.deviceIdentity);return await c.record({ts:new Date().toISOString(),action:`pairing.claim`,deviceId:t.deviceId,detail:{deviceName:e}}),tj(v,t,n.data.code,n.data.deviceIdentity)}catch(e){return t.code(400).send({error:String(e)})}}),r.post(`/api/auth/refresh`,async(e,t)=>{let n=Fc.safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{return await JA({authService:s,execute:()=>s.refreshAccessToken(n.data.refreshToken),logger:r.log,refreshToken:n.data.refreshToken,source:`direct_http`})}catch(e){return t.code(401).send({error:String(e)})}}),r.get(`/api/projects`,async(e,t)=>{if(Ue(e,t))return{projects:await y.listProjects()}}),r.get(`/api/gateway/update`,async(e,t)=>{if(Ue(e,t))try{return await x.getOrCheckInfo(`mobile`)}catch(e){return t.code(500).send({error:String(e)})}}),r.post(`/api/gateway/update/apply`,async(e,t)=>{if(!Ue(e,t))return;let n=e.body,r=Wl.safeParse(n?.requestedBy);try{let e=await x.applyUpdate(r.success?r.data:`mobile`);return Yl.parse(e)}catch(e){let n=String(e),r=n.includes(`already up to date`)||n.includes(`does not support self-update`)||n.includes(`requires idle runtime`)?409:500;return t.code(r).send({error:n})}}),r.post(`/api/codex/app-server/restart`,async(e,t)=>{if(Ue(e,t))try{return Rc.parse(await y.restartCodexAppServer())}catch(e){let n=sS(e)?e.status:500;return t.code(n).send({error:String(e)})}}),r.get(`/api/discovery/projects`,async(e,t)=>{if(Ue(e,t))try{return await h.getProjects()}catch(e){return t.code(500).send({error:String(e)})}}),r.post(`/api/discovery/projects/refresh`,async(e,t)=>{if(Ue(e,t))try{return await h.refreshProjects()}catch(e){return t.code(500).send({error:String(e)})}}),r.get(`/api/discovery/projects/sessions`,async(e,t)=>{if(!Ue(e,t))return;let n=e.query;if(typeof n.projectPath!=`string`||!n.projectPath.trim())return t.code(400).send({error:`projectPath is required and must be a non-empty string`});try{return await h.listProjectSessions(n.projectPath)}catch(e){let n=e instanceof Error?e.message:String(e);return sS(e)&&e.code===`DISCOVERED_PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):aj(n)?t.code(400).send({error:n}):t.code(500).send({error:n})}}),r.get(`/api/workspace/directories`,async(e,t)=>{if(!Ue(e,t))return;let n=e.query,r=Number(n.limit??200),i=Number.isFinite(r)?Math.min(500,Math.max(1,r)):200;try{return await u.listDirectoriesUnrestricted(typeof n.path==`string`?n.path:void 0,i)}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/providers/:provider/capabilities`,async(e,t)=>{if(!Ue(e,t))return;let n=Ke(e,t);if(n)try{return{capabilities:await y.getProviderCapabilities(n.provider,n.projectId,n.agentVersion)}}catch(e){return sS(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(400).send({error:String(e)})}}),r.get(`/api/agents/:provider/config`,async(e,t)=>{if(!Ue(e,t))return;let n=Ke(e,t);if(n)try{return await y.getAgentConfig(n.provider,{projectId:n.projectId,agentVersion:n.agentVersion})}catch(e){return sS(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(400).send({error:String(e)})}}),r.post(`/api/projects`,async(e,t)=>{if(!Ue(e,t))return;let n=e.body;if(typeof n.path!=`string`||!n.path.trim())return t.code(400).send({error:`path is required and must be a non-empty string`});try{return{project:await y.createProject({path:n.path,title:typeof n.title==`string`?n.title:void 0})}}catch(e){return t.code(400).send({error:String(e)})}}),r.delete(`/api/projects/:projectId`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params;try{return await y.deleteProject(n.projectId)?{removed:!0}:t.code(404).send({error:`Project not found`})}catch(e){return t.code(409).send({error:String(e)})}}),r.get(`/api/projects/:projectId/sessions`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=e.query,i=We(r.status,t);if(!i)return;let a=Ge(r.syncExternal);try{return{sessions:await y.listProjectSessions(n.projectId,i,{syncExternal:a})}}catch(e){return sS(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(500).send({error:String(e)})}}),r.get(`/api/projects/:projectId/sessions/:sessionId`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=await y.getProjectSessionSummary(n.projectId,n.sessionId);return r?{session:r}:t.code(404).send({error:`Session not found`})}),r.get(`/api/projects/:projectId/sessions/:sessionId/config`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=await y.getProjectSessionConfig(n.projectId,n.sessionId);return r?{session:r}:t.code(404).send({error:`Session not found`})}),r.post(`/api/projects/:projectId/sessions/:sessionId/history-sync`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params;try{let e=await y.syncProjectSessionHistory(n.projectId,n.sessionId);return e.historyUpdated&&await Ee({projectId:n.projectId,sessionId:n.sessionId,reason:`explicit_history_sync`}),{session:e.session,rawEventCount:e.rawEvents.length,historyUpdated:e.historyUpdated,statusChanged:e.statusChanged,refreshMode:e.refreshMode,...e.fromRawSeq===void 0?{}:{fromRawSeq:e.fromRawSeq},...e.toRawSeq===void 0?{}:{toRawSeq:e.toRawSeq}}}catch(e){return sS(e)&&(e.code===`PROJECT_NOT_FOUND`||e.code===`PROJECT_SESSION_NOT_FOUND`)?t.code(e.status).send({error:String(e)}):t.code(500).send({error:String(e)})}}),r.get(`/api/projects/:projectId/sessions/:sessionId/events`,async(e,t)=>t.code(410).send({error:`Session events endpoint is deprecated. Use /api/projects/:projectId/sessions/:sessionId/raw-events`})),r.get(`/api/projects/:projectId/sessions/:sessionId/raw-events`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=e.query,i=(typeof r.limit==`string`?r.limit.trim().toLowerCase():``)===`all`?2**53-1:(()=>{let e=Number(r.limit??300);return Number.isFinite(e)?Math.min(2e3,Math.max(1,e)):300})(),a=typeof r.fromRawSeqExclusive==`string`?Number(r.fromRawSeqExclusive):void 0,o=tc.safeParse(r.detailLevel).success?tc.parse(r.detailLevel):`full`;try{return await Fe(n.projectId,n.sessionId,i,typeof a==`number`&&Number.isFinite(a)?Math.max(0,Math.floor(a)):void 0,o,`http`)}catch(e){return sS(e)&&(e.code===`PROJECT_NOT_FOUND`||e.code===`PROJECT_SESSION_NOT_FOUND`)?t.code(e.status).send({error:String(e)}):t.code(500).send({error:String(e)})}}),r.get(`/api/projects/:projectId/fs/tree`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=e.query,i=await y.getProject(n.projectId);if(!i)return t.code(404).send({error:`Project not found`});try{return await u.listTree(i.path,r.path??`.`)}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/sessions`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/sessions`})),r.get(`/api/sessions/:sessionId`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/sessions/:sessionId`})),r.get(`/api/sessions/:sessionId/events`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/sessions/:sessionId/raw-events`})),r.get(`/api/fs/tree`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/fs/tree`})),r.get(`/api/devices`,async(e,t)=>Ie(e)?{devices:s.listDevices()}:t.code(401).send({error:`Unauthorized`})),r.post(`/api/devices/:deviceId/revoke`,async(e,t)=>{if(!Ie(e))return t.code(401).send({error:`Unauthorized`});let n=e.params;return await s.revokeDevice(n.deviceId)?(await c.record({ts:new Date().toISOString(),action:`device.revoke`,deviceId:n.deviceId}),{revoked:!0}):t.code(404).send({error:`Device not found`})}),r.get(`/ws`,{websocket:!0},(e,t)=>{let n=qe(t.headers.authorization)??Je(t.url);if(!n){e.close(1008,`Missing access token`);return}let r;try{r=s.verifyAccessToken(n)}catch(t){e.close(1008,`Unauthorized: ${String(t)}`);return}let i=l.addClient(r.sub,e);e.on(`message`,async e=>{let t=e.toString(),n;try{let e=JSON.parse(t);e&&typeof e==`object`&&(n=e),await w(hc(e),r.sub,i)}catch(e){await T({deviceId:r.sub,clientId:i,rawCommand:t,parsedInput:n,error:e})}}),e.on(`close`,()=>{b.removeClient(i),l.removeClient(i),M(i)})});let S=new OD({gatewayId:e.gatewayId,relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:`plaintext-relay`,gatewayIdentity:v.identity,gatewayIdentityPrivateKeyPem:v.privateKeyPem,sessionHub:l,handlePairingClaim:async e=>{let t=Qe(e.deviceName);return tj(v,await s.claimPairingCode(e.code,t,e.deviceIdentity),e.code,e.deviceIdentity)},handleRefresh:async t=>{let n=await JA({authService:s,execute:()=>s.refreshAccessToken(t.refreshToken),logger:r.log,refreshToken:t.refreshToken,requestedDeviceId:t.deviceId,source:`relay_http_forward`});return qA(t.deviceId,n.deviceId),{gatewayId:e.gatewayId,...n}},verifyDeviceIdentityBinding:async(e,t)=>s.verifyDeviceIdentityBinding(e,t),handleRpcRequest:async(e,t)=>$A(e,{authService:s,logger:r.log,sessionManager:y,projectDiscoveryService:h,fsService:u,updateService:x,relayDeviceId:t.deviceId,refreshDetailSessionSnapshots:Ee}),sendFrame:e=>_?.send(e)??!1,dispatchCommand:async(e,t,n)=>{try{await w(e,t,n)}catch(r){await T({deviceId:t,clientId:n,rawCommand:JSON.stringify(e),parsedInput:e,error:r})}}}),C=async(e,t,n)=>{switch(e.type){case`session.start`:{let r=await y.startSession({...e.payload,deviceId:t});l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:r});return}case`turn.input`:await y.sendInput(e.payload.sessionId,e.payload.text,t,{model:e.payload.model,sessionConfig:e.payload.sessionConfig,mode:e.payload.mode,config:e.payload.config});return;case`review.start`:throw Error(`review.start is not implemented yet.`);case`tool.approval.respond`:await y.respondToolPermission(e.payload.sessionId,e.payload.requestId,e.payload.decision,e.payload.reason,t);return;case`user.input.respond`:await y.respondUserInput(e.payload.sessionId,e.payload.requestId,e.payload.answers,t);return;case`session.interrupt`:await y.interruptSession(e.payload.sessionId,t);return;case`session.close`:throw Error(`session.close is deprecated. Use session.interrupt instead.`);case`session.external.watch.set`:{if(zA(`command.received`,{clientId:n,deviceId:t,replace:e.payload.replace,sessionCount:e.payload.sessions.length,sessions:e.payload.sessions}),PA&&e.payload.sessions.length>0){let r=await Promise.all(e.payload.sessions.map(async e=>{let t=e.projectId?.trim()??``;if(!t)return{sessionId:e.sessionId,projectId:null,summaryLookupError:`missing_project_id`};try{let n=await y.getProjectSessionSummary(t,e.sessionId);return{sessionId:e.sessionId,projectId:t,...VA(n),gatewayWouldPollExternalDetailWatch:OA(n)}}catch(n){return{sessionId:e.sessionId,projectId:t,summaryLookupError:n instanceof Error?n.message:String(n)}}}));zA(`command.targets.evaluated`,{clientId:n,deviceId:t,replace:e.payload.replace,targets:r})}r.log.info({clientId:n,deviceId:t,replace:e.payload.replace,sessionCount:e.payload.sessions.length,sessions:e.payload.sessions},`received session.external.watch.set`);let i=b.setClientWatchTargets(n,e.payload.sessions,e.payload.replace);zA(`command.applied`,{clientId:n,deviceId:t,replace:e.payload.replace,targetCount:i.length,targets:i}),r.log.info({clientId:n,deviceId:t,replace:e.payload.replace,targetCount:i.length,targets:i},`applied session.external.watch.set`),l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:{replace:e.payload.replace,sessions:i.map(e=>e.sessionId)}});return}case`session.stream.subscribe`:{let t=DA(e.payload.sessions);await L(n,t,e.payload.replace),l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:{replace:e.payload.replace,sessions:t.map(e=>e.sessionId)}});return}case`fs.read`:{let t=y.getSessionExecutionContext(e.payload.sessionId),n=await u.readFile(t.projectPath,e.payload.path);await y.emitExternalEvent({provider:t.provider,sessionId:e.payload.sessionId,projectId:t.projectId,type:`file.changed`,raw:{path:n.path,content:n.content}});return}case`fs.diff`:{let t=y.getSessionExecutionContext(e.payload.sessionId),n=await u.diffFile(t.projectPath,e.payload.path,e.payload.baseContent??``);await y.emitExternalEvent({provider:t.provider,sessionId:e.payload.sessionId,projectId:t.projectId,type:`file.diff.ready`,raw:{path:n.path,diff:n.diff,currentContent:n.currentContent}});return}default:{let t=e;throw Error(`Unhandled command: ${JSON.stringify(t)}`)}}},w=async(e,t,n)=>{await C(e,t,n)},T=async e=>{r.log.warn({deviceId:e.deviceId,rawCommand:e.rawCommand,err:e.error},`ws command failed`);let t=typeof e.parsedInput?.commandId==`string`?e.parsedInput.commandId:void 0,n=typeof e.parsedInput?.type==`string`?e.parsedInput.type:void 0;l.sendSystemMessage(e.clientId,{type:`command.error`,commandId:t,commandType:n,message:String(e.error)}),await y.emitExternalEvent({provider:`codex`,sessionId:`system`,type:`error.runtime`,raw:{message:String(e.error),source:`ws.command`}})},E=1e3,D=new Map,O=new Map,k=(e,t)=>`${e}::${t}`,A=e=>e.purpose===`detail_view`&&e.bootstrapMode===`readable`,j=(e,t)=>{let n=k(e,t),r=D.get(n);D.delete(n);let i=O.get(n);i&&(clearTimeout(i.timer),O.delete(n)),(r||i)&&BA(`readable.state.cleared`,{clientId:e,sessionId:t,hadState:!!r,previousState:P(r),hadPendingDelta:!!i,pendingDeltaFromRawSeq:i?.previousState.rawEvents[i.previousState.rawEvents.length-1]?.rawSeq??null,pendingDeltaToRawSeq:i?.nextState.rawEvents[i.nextState.rawEvents.length-1]?.rawSeq??null})},M=e=>{let t=`${e}::`;for(let e of D.keys())e.startsWith(t)&&D.delete(e);for(let[e,n]of O)e.startsWith(t)&&(clearTimeout(n.timer),O.delete(e))},N=e=>e?{stateFound:!0,kind:e.kind,sessionId:e.sessionId,projectId:e.projectId,provider:e.provider,detailLevel:e.detailLevel,rawEventCount:e.rawEvents.length,firstRawSeq:e.rawEvents[0]?.rawSeq??null,lastRawSeq:e.rawEvents[e.rawEvents.length-1]?.rawSeq??null,timelineItemCount:e.timelineItems.length,pendingApprovalCount:e.pendingApprovals.length,pendingUserInputCount:e.pendingUserInputs.length}:{stateFound:!1},P=e=>e?e.kind===`ready`?N(e):{stateFound:!0,kind:e.kind,sessionId:e.sessionId,queuedEnvelopeCount:e.queuedEnvelopes.length,previousReadyState:N(e.previousReadyState)}:{stateFound:!1},ee=(e,t,n,r)=>{let i=new Set(n.filter(A).map(e=>e.sessionId));if(r)for(let n of t)i.has(n.sessionId)||j(e,n.sessionId);for(let t of n)A(t)||j(e,t.sessionId)},te=e=>{let t=k(e.clientId,e.sessionId),n=D.get(t),r=O.get(t);return r&&(clearTimeout(r.timer),O.delete(t)),D.set(t,jA(e.sessionId,D.get(t))),BA(`readable.bootstrap.started`,{clientId:e.clientId,sessionId:e.sessionId,replacedState:P(n),clearedPendingDelta:!!r}),t},ne=e=>({kind:`ready`,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,rawEvents:[...e.rawEvents],timelineItems:[...e.timelineItems],pendingApprovals:[...e.pendingApprovals],pendingUserInputs:[...e.pendingUserInputs]}),I=e=>{let t=ne(e);D.set(k(e.clientId,e.target.sessionId),t),BA(`readable.state.seeded`,{clientId:e.clientId,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,state:N(t)})},re=(e,t)=>{for(let n of t)A(n)&&te({clientId:e,sessionId:n.sessionId})},L=async(e,t,n)=>{let r=ie(t),i=new Set(r.map(e=>e.sessionId)),a=l.getSubscriptions(e);BA(`stream.subscribe.received`,{clientId:e,replace:n,incomingSubscriptionCount:t.length,dedupedSubscriptionCount:r.length,subscriptions:r.map(e=>({sessionId:e.sessionId,projectId:e.projectId??null,purpose:e.purpose??null,detailLevel:e.detailLevel??null,bootstrapMode:e.bootstrapMode??null,cursorKind:e.cursor.kind,rawSeq:e.cursor.kind===`raw_seq`?e.cursor.rawSeq:null}))}),re(e,r);for(let t of i)l.pauseSession(e,t);l.replaceSubscriptions(e,r,n),ee(e,a,r,n);try{for(let t of r)try{await ae(e,t)}catch(n){throw A(t)&&ve({clientId:e,sessionId:t.sessionId}),n}}finally{for(let t of i)l.resumeSession(e,t)}},ie=e=>{let t=new Map;for(let n of e)t.set(n.sessionId,n);return[...t.values()]},ae=async(e,t)=>{let n=await R(t);if(n.bootstrapMode===`readable`){if(t.cursor.kind===`all`){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`all`,requestedRawSeq:null,decision:`snapshot`,reason:`readable_bootstrap_snapshot`}),await Te(e,n,`readable_bootstrap_snapshot`);return}let r=await y.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:t.cursor.rawSeq,decision:`snapshot`,reason:`readable_empty_history_snapshot`,rangeMin:null,rangeMax:null}),await Te(e,n,`readable_empty_history_snapshot`);return}let i=t.cursor.rawSeq,a=Math.max(0,r.min-1);if(i<a||i>r.max){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`snapshot`,reason:`readable_cursor_out_of_range_snapshot`,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a}),await Te(e,n,`readable_cursor_out_of_range_snapshot`);return}let o=n.status===`running`?`readable_cursor_resumed_delta`:`readable_session_idle_delta`;BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`delta`,reason:o,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a}),await Ce(e,n,i,o);return}if(t.cursor.kind===`all`){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`all`,requestedRawSeq:null,decision:`snapshot`,reason:`cursor_all`}),await we(e,n,`cursor_all`);return}let r=await y.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:t.cursor.rawSeq,decision:`snapshot`,reason:`empty_history_snapshot`,rangeMin:null,rangeMax:null}),await we(e,n,`empty_history_snapshot`);return}let i=t.cursor.rawSeq,a=Math.max(0,r.min-1);if(i<a||i>r.max){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`snapshot`,reason:`cursor_out_of_range_snapshot`,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a}),await we(e,n,`cursor_out_of_range_snapshot`);return}let o=await y.getProjectSessionRawEventsSinceSeq(n.projectId,n.sessionId,i,2**53-1),s=o[o.length-1]?.rawSeq??i;BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`delta`,reason:n.status===`running`?`cursor_resumed_delta`:`session_idle_delta`,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a,backlogCount:o.length,backlogFirstRawSeq:o[0]?.rawSeq??null,backlogLastRawSeq:s}),l.sendStreamMessage(e,Ae({provider:n.provider,sessionId:n.sessionId,projectId:n.projectId,decision:`delta`,reason:n.status===`running`?`cursor_resumed_delta`:`session_idle_delta`,fromRawSeq:i,toRawSeq:s}));for(let t of o)l.sendStreamMessage(e,t)},R=async e=>{let t=e.sessionId;if(!t)throw Error(`session.stream.subscribe requires sessionId`);let n=e.projectId?.trim()??``;if(n){let r=await y.getProjectSessionSummary(n,t);if(!r)throw mS(n,t);let i={sessionId:t,projectId:n,provider:r.provider,status:r.status,detailLevel:e.detailLevel??`full`,purpose:e.purpose??null,bootstrapMode:e.bootstrapMode??`stream`};return BA(`stream.subscribe.target.resolved`,{sessionId:t,requestedProjectId:n,resolvedProjectId:i.projectId,purpose:i.purpose,detailLevel:i.detailLevel,bootstrapMode:i.bootstrapMode,targetProvider:i.provider,targetStatus:i.status,resolvedViaExecutionContext:!1,summary:VA(r)}),i}let r=y.getSessionExecutionContext(t),i=await y.getProjectSessionSummary(r.projectId,t),a={sessionId:t,projectId:r.projectId,provider:i?.provider??r.provider,status:i?.status??`idle`,detailLevel:e.detailLevel??`full`,purpose:e.purpose??null,bootstrapMode:e.bootstrapMode??`stream`};return BA(`stream.subscribe.target.resolved`,{sessionId:t,requestedProjectId:null,resolvedProjectId:a.projectId,purpose:a.purpose,detailLevel:a.detailLevel,bootstrapMode:a.bootstrapMode,targetProvider:a.provider,targetStatus:a.status,resolvedViaExecutionContext:!0,executionContextProvider:r.provider,summary:VA(i)}),a},oe=async e=>{let t=await y.getProjectSessionRawEventsCompacted(e.projectId,e.sessionId,2**53-1),n=kC(t,e.detailLevel),r=t[t.length-1]?.rawSeq,i=e.purpose===`detail_view`?ue(af(e.sessionId,n,[])):[],a=e.purpose===`detail_view`?bo({rawEvents:n,messages:i}):{timelineItems:[],consumedMessageIds:[]},o=e.purpose===`detail_view`?se(e.sessionId,n):{pendingApprovals:[],pendingUserInputs:[]};return{compactedRawEvents:t,filteredRawEvents:n,lastRawSeq:r,slimReadableProjection:a,pendingApprovals:o.pendingApprovals,pendingUserInputs:o.pendingUserInputs}},se=(e,t)=>{let n=rf(e,t),r=new Map,i=new Map;for(let e of n){if(e.type===`tool.permission.requested`){let t=le(e.payload.raw),n=z(t,`requestId`,`request_id`);if(!n)continue;let i=le(t.rawParams??t.raw_params),a=le(i.networkApprovalContext??i.network_approval_context);r.set(n,{requestId:n,sessionId:e.sessionId,...z(t,`toolName`,`tool_name`)?{toolName:z(t,`toolName`,`tool_name`)}:{},...z(t,`reason`)?{reason:z(t,`reason`)}:{},...z(i,`command`)?{command:z(i,`command`)}:{},...z(i,`cwd`)?{cwd:z(i,`cwd`)}:{},...z(i,`grantRoot`,`grant_root`)?{grantRoot:z(i,`grantRoot`,`grant_root`)}:{},...z(a,`host`)?{networkHost:z(a,`host`)}:{},...z(a,`protocol`)?{networkProtocol:z(a,`protocol`)}:{},...z(t,`itemId`,`item_id`)?{itemId:z(t,`itemId`,`item_id`)}:{},...z(t,`turnId`,`turn_id`)?{turnId:z(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`tool.permission.resolved`){let t=z(le(e.payload.raw),`requestId`,`request_id`);t&&r.delete(t);continue}if(e.type===`user.input.requested`){let t=le(e.payload.raw),n=z(t,`requestId`,`request_id`);if(!n)continue;i.set(n,{requestId:n,sessionId:e.sessionId,questions:ce(t.questions),...z(t,`itemId`,`item_id`)?{itemId:z(t,`itemId`,`item_id`)}:{},...z(t,`turnId`,`turn_id`)?{turnId:z(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`user.input.resolved`){let t=z(le(e.payload.raw),`requestId`,`request_id`);t&&i.delete(t)}}return{pendingApprovals:[...r.values()],pendingUserInputs:[...i.values()]}},ce=e=>{if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=le(n),r=z(e,`id`),i=z(e,`header`),a=z(e,`question`);if(!r||!i||!a)continue;let o=Array.isArray(e.options)?e.options.map(e=>{let t=le(e),n=z(t,`label`);if(!n)return null;let r=z(t,`description`)??n,i=z(t,`markdown`);return{label:n,description:r,...i?{markdown:i}:{}}}).filter(e=>e!==null):null;t.push({id:r,header:i,question:a,multiSelect:e.multiSelect===!0,isOther:e.isOther===!0,isSecret:e.isSecret===!0,options:o})}return t},le=e=>typeof e==`object`&&e?e:{},z=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}},ue=e=>e.filter(e=>!(e.kind===`system`&&e.title===`Turn Usage`)),de=e=>{let t=e.target.purpose===`detail_view`?ue(af(e.target.sessionId,e.filteredRawEvents,[])):[],n=e.target.purpose===`detail_view`?bo({rawEvents:e.filteredRawEvents,messages:t}):{timelineItems:[],consumedMessageIds:[]},r=e.target.purpose===`detail_view`?se(e.target.sessionId,e.filteredRawEvents):{pendingApprovals:[],pendingUserInputs:[]};return{rawEvents:[...e.filteredRawEvents],timelineItems:n.timelineItems,pendingApprovals:r.pendingApprovals,pendingUserInputs:r.pendingUserInputs}},fe=e=>ne({target:e.target,...de(e)}),pe=(e,t)=>{let n=kC(Lf([...e.rawEvents,t]),e.detailLevel),r=bo({rawEvents:n,messages:ue(af(e.sessionId,n,[]))}),i=se(e.sessionId,n);return{...e,rawEvents:n,timelineItems:r.timelineItems,pendingApprovals:i.pendingApprovals,pendingUserInputs:i.pendingUserInputs}},me=(e,t)=>{let n=new Map(e.map(e=>[e.requestId,JSON.stringify(e)])),r=new Map(t.map(e=>[e.requestId,JSON.stringify(e)]));return{upserts:t.filter(e=>n.get(e.requestId)!==r.get(e.requestId)),removals:e.filter(e=>!r.has(e.requestId)).map(e=>e.requestId)}},he=(e,t)=>{let n=new Map(e.map(e=>[e.requestId,JSON.stringify(e)])),r=new Map(t.map(e=>[e.requestId,JSON.stringify(e)]));return{upserts:t.filter(e=>n.get(e.requestId)!==r.get(e.requestId)),removals:e.filter(e=>!r.has(e.requestId)).map(e=>e.requestId)}},ge=(e,t,n,r)=>{let i={},a=rf(e,[t]),o=a.find(e=>e.type===`thread.title.updated`),s=a.find(e=>e.type===`turn.started`||e.type===`turn.completed`||e.type===`turn.failed`);if(o){let e=z(le(o.payload.raw),`title`);e&&(i.title=e)}return s&&(i.updatedAt=s.ts,i.status=s.type===`turn.started`?`running`:`idle`,i.interactionLockReason=void 0),n.pendingApprovals.length!==r.pendingApprovals.length&&(i.pendingApprovals=r.pendingApprovals.length),n.pendingUserInputs.length!==r.pendingUserInputs.length&&(i.pendingUserInputs=r.pendingUserInputs.length),n.pendingApprovals.length+n.pendingUserInputs.length!==r.pendingApprovals.length+r.pendingUserInputs.length&&(i.pendingActions=r.pendingApprovals.length+r.pendingUserInputs.length),Object.keys(i).length>0?i:void 0},_e=e=>{let t,n,r;try{t=Fs(e.previousState.timelineItems,e.nextState.timelineItems),n=me(e.previousState.pendingApprovals,e.nextState.pendingApprovals),r=he(e.previousState.pendingUserInputs,e.nextState.pendingUserInputs)}catch(t){throw BA(`stream.readable.delta.build.error`,{sessionId:e.previousState.sessionId,projectId:e.previousState.projectId,previousState:N(e.previousState),nextState:N(e.nextState),sessionSummaryKeys:e.sessionSummary?Object.keys(e.sessionSummary):[],errorMessage:t instanceof Error?t.message:String(t)}),t}if(t.upserts.length===0&&t.removals.length===0&&t.textDeltaPatches.length===0&&n.upserts.length===0&&n.removals.length===0&&r.upserts.length===0&&r.removals.length===0&&!e.sessionSummary)return null;let i=e.nextState.rawEvents[e.nextState.rawEvents.length-1]?.rawSeq;return i===void 0?null:{provider:e.previousState.provider,sessionId:e.previousState.sessionId,projectId:e.previousState.projectId,fromRawSeq:e.previousState.rawEvents[e.previousState.rawEvents.length-1]?.rawSeq,toRawSeq:i,timelineUpserts:t.upserts,timelineRemovals:t.removals,timelineTextDeltaPatches:t.textDeltaPatches,pendingApprovalUpserts:n.upserts,pendingApprovalRemovals:n.removals,pendingUserInputUpserts:r.upserts,pendingUserInputRemovals:r.removals,sessionSummary:e.sessionSummary}},ve=e=>{let t=k(e.clientId,e.sessionId),n=D.get(t);if(!n||n.kind!==`bootstrapping`)return;let r=l.getSubscriptions(e.clientId).find(t=>t.sessionId===e.sessionId),i=r?.projectId?.trim()??``,a=MA(n,pe);if(!a.previousReadyState||!r||!A(r)||i&&i!==a.previousReadyState.projectId||(r.detailLevel??`full`)!==a.previousReadyState.detailLevel||!a.nextReadyState){BA(`readable.bootstrap.recovery.discarded`,{clientId:e.clientId,sessionId:e.sessionId,bootstrapState:P(n),currentSubscriptionFound:!!r,currentSubscriptionProjectId:i||null,currentSubscriptionDetailLevel:r?.detailLevel??null,previousReadyState:N(a.previousReadyState),nextReadyState:N(a.nextReadyState)}),j(e.clientId,e.sessionId);return}if(D.set(t,a.nextReadyState),a.replayedEnvelopes.length===0){BA(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:0,nextReadyState:N(a.nextReadyState)});return}let o,s=a.previousReadyState;for(let t of a.replayedEnvelopes){let n=pe(s,t),r=ge(e.sessionId,t,s,n);r&&(o={...o??{},...r}),s=n}let c=_e({previousState:a.previousReadyState,nextState:a.nextReadyState,sessionSummary:o});if(!c){BA(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:N(a.nextReadyState),emittedDelta:!1});return}BA(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:N(a.nextReadyState),emittedDelta:!0,deltaFromRawSeq:c.fromRawSeq??null,deltaToRawSeq:c.toRawSeq}),l.sendSessionMessageToClient(e.clientId,a.previousReadyState.sessionId,Ne(c))},ye=e=>{let t=_e({previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary});t&&l.sendSessionMessageToClient(e.clientId,e.previousState.sessionId,Ne(t))},be=(e,t)=>{let n=k(e,t),r=O.get(n);r&&(clearTimeout(r.timer),O.delete(n),ye({clientId:e,previousState:r.previousState,nextState:r.nextState,sessionSummary:r.sessionSummary}))},xe=t=>{if(e.readableLiveDeltaCoalesceMs<=0){ye(t);return}let n=k(t.clientId,t.previousState.sessionId),r=O.get(n);if(r){let e=NA({existing:{previousState:r.previousState,nextState:r.nextState,sessionSummary:r.sessionSummary},next:{previousState:t.previousState,nextState:t.nextState,sessionSummary:t.sessionSummary}});r.previousState=e.previousState,r.nextState=e.nextState,r.sessionSummary=e.sessionSummary;return}let i=setTimeout(()=>{be(t.clientId,t.previousState.sessionId)},e.readableLiveDeltaCoalesceMs);i.unref?.(),O.set(n,{clientId:t.clientId,sessionId:t.previousState.sessionId,previousState:t.previousState,nextState:t.nextState,sessionSummary:t.sessionSummary,timer:i})},Se=e=>{let t=l.getClientSubscriptionsForSession(e.sessionId,`detail_view`);if(t.length!==0)for(let{clientId:n,subscription:r}of t){if(!A(r))continue;let t=k(n,e.sessionId),i=D.get(t);if(!i)continue;if(i.kind===`bootstrapping`){i.queuedEnvelopes.push(e);continue}let a=pe(i,e);D.set(t,a),xe({clientId:n,previousState:i,nextState:a,sessionSummary:ge(e.sessionId,e,i,a)})}},Ce=async(e,t,n,r)=>{let i=k(e,t.sessionId),a=await y.getProjectSessionRawEvents(t.projectId,t.sessionId,2**53-1),{baseFilteredRawEvents:o,nextFilteredRawEvents:s}=AA({rawEvents:a,detailLevel:t.detailLevel,cursorRawSeq:n}),c=fe({target:t,filteredRawEvents:o}),u=fe({target:t,filteredRawEvents:s}),d=D.get(i),f=kA(d?.kind===`bootstrapping`?d.queuedEnvelopes:[],u.rawEvents[u.rawEvents.length-1]?.rawSeq);for(let e of f)u=pe(u,e);BA(`stream.readable.resume.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,reason:r,cursorRawSeq:n,rawEventCount:a.length,baseFilteredRawEventCount:o.length,nextFilteredRawEventCount:s.length,bootstrapState:P(d),bufferedEnvelopeCount:f.length,previousState:N(c),nextState:N(u)}),I({clientId:e,target:t,rawEvents:u.rawEvents,timelineItems:u.timelineItems,pendingApprovals:u.pendingApprovals,pendingUserInputs:u.pendingUserInputs});let p=u.rawEvents[u.rawEvents.length-1]?.rawSeq??n;l.sendStreamMessage(e,Ae({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`delta`,reason:r,fromRawSeq:n,...p===void 0?{}:{toRawSeq:p}}));let m=_e({previousState:c,nextState:u});BA(`stream.readable.resume.delta`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,reason:r,cursorRawSeq:n,emittedDelta:!!m,deltaFromRawSeq:m?.fromRawSeq??n,deltaToRawSeq:m?.toRawSeq??p??null,timelineUpsertCount:m?.timelineUpserts.length??0,timelineRemovalCount:m?.timelineRemovals.length??0,timelineTextDeltaPatchCount:m?.timelineTextDeltaPatches.length??0,pendingApprovalUpsertCount:m?.pendingApprovalUpserts.length??0,pendingUserInputUpsertCount:m?.pendingUserInputUpserts.length??0}),l.sendSessionMessageToClient(e,t.sessionId,Ne(m??{provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,fromRawSeq:n,toRawSeq:p,timelineUpserts:[],timelineRemovals:[]}))},we=async(e,t,n)=>{let r=`snap_${kx(12)}`,{compactedRawEvents:i,filteredRawEvents:a,lastRawSeq:o,slimReadableProjection:s,pendingApprovals:c,pendingUserInputs:u}=await oe(t);l.sendStreamMessage(e,Ae({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,...o===void 0?{}:{toRawSeq:o}}));let d=De(a,E),f=t.purpose===`detail_view`?Oe(s.timelineItems,E):[],p=t.purpose===`detail_view`?`raw+readable`:`raw`,m=Math.max(d.length,f.length,1);BA(`stream.snapshot.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,reason:n,snapshotId:r,snapshotFormat:p,compactedEventCount:i.length,filteredEventCount:a.length,readableTimelineItemCount:s.timelineItems.length,totalChunks:m,firstRawSeq:a[0]?.rawSeq??null,lastRawSeq:o??null});for(let n=0;n<m;n+=1){let i=d[n]??[],a=f[n]??[];l.sendStreamMessage(e,je({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:m,events:i,timelineItems:t.purpose===`detail_view`?a:void 0}))}},Te=async(e,t,n)=>{let r=`snap_${kx(12)}`,i=te({clientId:e,sessionId:t.sessionId});try{let{compactedRawEvents:a,filteredRawEvents:o,lastRawSeq:s,slimReadableProjection:c,pendingApprovals:u,pendingUserInputs:d}=await oe(t),f=l.getSubscriptions(e).find(e=>e.sessionId===t.sessionId),p=f?.projectId?.trim()??``;if(!f||!A(f)||p&&p!==t.projectId||(f.detailLevel??`full`)!==t.detailLevel){j(e,t.sessionId);return}let m=ne({target:t,rawEvents:o,timelineItems:c.timelineItems,pendingApprovals:u,pendingUserInputs:d}),h=D.get(i),g=kA(h?.kind===`bootstrapping`?h.queuedEnvelopes:[],s);for(let e of g)m=pe(m,e);I({clientId:e,target:t,rawEvents:m.rawEvents,timelineItems:m.timelineItems,pendingApprovals:m.pendingApprovals,pendingUserInputs:m.pendingUserInputs});let _=m.rawEvents[m.rawEvents.length-1]?.rawSeq;l.sendStreamMessage(e,Ae({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,..._===void 0?{}:{toRawSeq:_}}));let v=Oe(m.timelineItems,E),y=Math.max(v.length,1);BA(`stream.snapshot.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,bootstrapMode:t.bootstrapMode,reason:n,snapshotId:r,snapshotFormat:`readable`,compactedEventCount:a.length,filteredEventCount:m.rawEvents.length,readableTimelineItemCount:m.timelineItems.length,bufferedReadableDeltaCount:g.length,totalChunks:y,firstRawSeq:m.rawEvents[0]?.rawSeq??null,lastRawSeq:_??null});for(let n=0;n<y;n+=1)l.sendStreamMessage(e,Me({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:y,timelineItems:v[n]??[],pendingApprovals:n===0?m.pendingApprovals:void 0,pendingUserInputs:n===0?m.pendingUserInputs:void 0}))}catch(n){throw ve({clientId:e,sessionId:t.sessionId}),n}},Ee=async e=>{let t=l.getClientSubscriptionsForSession(e.sessionId,`detail_view`);for(let{clientId:n,subscription:r}of t){let t=r.projectId?.trim()??``;if(!(t&&t!==e.projectId)){A(r)&&te({clientId:n,sessionId:e.sessionId}),l.pauseSession(n,e.sessionId);try{let t=await R(r);t.bootstrapMode===`readable`?await Te(n,t,e.reason):await we(n,t,e.reason)}catch(t){throw A(r)&&ve({clientId:n,sessionId:e.sessionId}),t}finally{l.resumeSession(n,e.sessionId)}}}},De=(e,t)=>ke(e,t),Oe=(e,t)=>ke(e,t),ke=(e,t)=>{if(e.length===0)return[[]];let n=Math.max(1,Math.floor(t)),r=[];for(let t=0;t<e.length;t+=n)r.push(e.slice(t,t+n));return r},Ae=e=>({v:`1.0`,kind:`session.stream.sync`,type:`session.stream.sync`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`stream_sync_${kx(12)}`,ts:new Date().toISOString(),payload:{raw:{decision:e.decision,reason:e.reason,snapshotId:e.snapshotId,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}}}),je=e=>({v:`1.0`,kind:`session.stream.snapshot.chunk`,type:`session.stream.snapshot.chunk`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`stream_snapshot_${e.snapshotId}_${e.chunkIndex}`,ts:new Date().toISOString(),payload:{raw:{snapshotId:e.snapshotId,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,events:e.events},...e.timelineItems?{readable:{snapshotId:e.snapshotId,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,...e.timelineItems?{timelineItems:e.timelineItems}:{}}}:{}}}),Me=e=>({v:`1.0`,kind:`session.readable.snapshot.chunk`,type:`session.readable.snapshot.chunk`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`readable_snapshot_${e.snapshotId}_${e.chunkIndex}`,ts:new Date().toISOString(),payload:{readable:{snapshotId:e.snapshotId,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,timelineItems:e.timelineItems,...e.pendingApprovals?{pendingApprovals:e.pendingApprovals}:{},...e.pendingUserInputs?{pendingUserInputs:e.pendingUserInputs}:{}}}}),Ne=e=>({v:`1.0`,kind:`session.readable.delta`,type:`session.readable.delta`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`readable_delta_${e.sessionId}_${e.toRawSeq}`,ts:new Date().toISOString(),payload:{readable:{...e.fromRawSeq===void 0?{}:{fromRawSeq:e.fromRawSeq},toRawSeq:e.toRawSeq,timelineUpserts:e.timelineUpserts,timelineRemovals:e.timelineRemovals,...e.timelineTextDeltaPatches&&e.timelineTextDeltaPatches.length>0?{timelineTextDeltaPatches:e.timelineTextDeltaPatches}:{},...e.pendingApprovalUpserts&&e.pendingApprovalUpserts.length>0?{pendingApprovalUpserts:e.pendingApprovalUpserts}:{},...e.pendingApprovalRemovals&&e.pendingApprovalRemovals.length>0?{pendingApprovalRemovals:e.pendingApprovalRemovals}:{},...e.pendingUserInputUpserts&&e.pendingUserInputUpserts.length>0?{pendingUserInputUpserts:e.pendingUserInputUpserts}:{},...e.pendingUserInputRemovals&&e.pendingUserInputRemovals.length>0?{pendingUserInputRemovals:e.pendingUserInputRemovals}:{},...e.sessionSummary?{sessionSummary:e.sessionSummary}:{}}}}),Pe=e=>({v:`1.0`,kind:`session.external.update`,type:`session.external.update`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`session_external_update_${kx(12)}`,ts:new Date().toISOString(),payload:{raw:{updatedAt:e.updatedAt,status:e.status,interactionLockReason:e.interactionLockReason,refreshMode:e.refreshMode,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq,historyUpdated:e.historyUpdated,statusChanged:e.statusChanged}}}),Fe=async(e,t,n=300,r,i=`full`,a=`http`)=>HA({sessionManager:y,projectId:e,sessionId:t,limit:n,fromRawSeqExclusive:r,detailLevel:i,requestSource:a}),Ie=t=>t.headers[`x-api-key`]===e.apiKey,Le=e=>{if(e==null)return e;if(typeof e==`string`){let t=Re(e);return t===void 0?ze(e,a):Ve(Be(t))}if(Buffer.isBuffer(e)){let t=e.toString(`utf8`),n=Re(t);return n===void 0?ze(t,a):Ve(Be(n))}return typeof e==`object`?Ve(Be(e)):String(e)},Re=e=>{try{return JSON.parse(e)}catch{return}},ze=(e,t)=>e.length<=t?e:`${e.slice(0,t)}...<truncated>`,Be=e=>{if(Array.isArray(e))return e.map(e=>Be(e));if(e&&typeof e==`object`){let t=e,n={};for(let[e,r]of Object.entries(t)){let t=e.toLowerCase();t.includes(`token`)||t.includes(`secret`)||t.includes(`password`)||t.includes(`authorization`)?n[e]=`[REDACTED]`:n[e]=Be(r)}return n}return e},Ve=e=>{let t=He(e);return t===o?t:t.length<=a?e:{truncated:!0,preview:ze(t,a)}},He=e=>{try{return JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)}catch{return o}},Ue=(e,t)=>{let n=qe(e.headers.authorization);if(!n)return t.code(401).send({error:`Missing bearer token`}),null;try{return s.verifyAccessToken(n)}catch(e){return t.code(401).send({error:String(e)}),null}},We=(e,t)=>{let n=e??`all`;return[`running`,`idle`,`all`].includes(n)?n:(t.code(400).send({error:`Invalid status filter`}),null)},Ge=e=>{let t=e?.trim().toLowerCase();return t===`true`||t===`1`},Ke=(e,t)=>{let n=e.params,r=e.query,i=Ma.safeParse(n.provider);return i.success?{provider:i.data,projectId:typeof r.projectId==`string`?r.projectId:void 0,agentVersion:typeof r.agentVersion==`string`?r.agentVersion:void 0}:(t.code(400).send({error:`Invalid provider`}),null)},qe=e=>{if(!e)return null;let[t,n]=e.split(` `);return t?.toLowerCase()!==`bearer`||!n?null:n},Je=e=>{try{return new URL(e,`http://localhost`).searchParams.get(`token`)}catch{return null}},Ye=e.httpsEnabled?e.httpsPort:e.port,Xe=e.httpsEnabled?`https`:`http`,Ze=vm(),Qe=e=>e?.trim()||Ze||`Gateway`;await r.listen({host:e.host,port:Ye});let $e=r.server.address(),et=typeof $e==`object`&&$e?$e.port:Ye;if(r.log.info({host:e.host,port:et,protocol:Xe,machineName:Ze},KA(Xe,e.host,et)),e.relayEnabled&&(_=new HD({gatewayId:e.gatewayId,machineName:Ze,relayUrl:e.relayUrl,relayTransportSecurityLevel:e.relayTransportSecurityLevel,relayGatewayAccessToken:e.relayGatewayAccessToken,resolveRelayGatewayAccessToken:e.relayGatewayAccessToken.trim()?void 0:()=>qD({gatewayId:e.gatewayId,relayUrl:e.relayUrl,gatewayIdentity:v.identity,privateKeyPem:v.privateKeyPem}),gatewayIdentity:v.identity,directBaseUrls:wm({protocol:Xe,host:e.host,port:et}),logger:r.log,onFrame:async e=>{await S.handleFrame(e)}}),_.start()),e.bootstrapPairingCodeOnStart)try{let t=await s.createPairingCode(e.pairingCodeTtlSeconds);g={code:t.code,expiresAt:t.expiresAt},await c.record({ts:new Date().toISOString(),action:`pairing.start`,detail:{expiresAt:t.expiresAt,source:`startup`,ttlSeconds:e.pairingCodeTtlSeconds}}),r.log.info({expiresAt:t.expiresAt},`startup pairing code generated`)}catch(e){r.log.error({err:e},`failed to generate startup pairing code`)}return await x.start(),{protocol:Xe,listenPort:et,machineName:Ze,gatewayIdentity:v.identity,close:()=>r.close(),getGatewayUpdateInfo:()=>x.getInfo(),requestGatewayUpdate:(e=`console`)=>x.applyUpdate(e),requestCodexAppServerRestart:async(e=`console`)=>y.restartCodexAppServer(),startupPairingCode:g}}function WA(e,t){let n=t;if(!e.httpsEnabled)return(0,Tx.default)({disableRequestLogging:!0,loggerInstance:n});if(!e.tlsKeyPath||!e.tlsCertPath)throw Error(`TLS key/cert path is required when HTTPS is enabled.`);return(0,Tx.default)({disableRequestLogging:!0,loggerInstance:n,https:{key:(0,u.readFileSync)(e.tlsKeyPath),cert:(0,u.readFileSync)(e.tlsCertPath),...e.tlsCaPath?{ca:(0,u.readFileSync)(e.tlsCaPath)}:{}}})}function GA(e,t){let n=process.env.NODE_ENV!==`production`,r=aS.default.destination({dest:e.gatewayLogPath,mkdir:!0,sync:!1}),i=t.logToConsole?aS.default.multistream([{stream:r},{stream:process.stdout}]):r;return{instance:(0,aS.default)({level:n?`debug`:`info`},i),close:()=>{try{r.flushSync()}catch{}r.end()}}}function KA(e,t,n){return`desktop-gateway listening on ${e}://${t}:${n}`}function qA(e,t){if(e&&e!==t)throw fS()}async function JA(e){let t=YA(e.authService,e.refreshToken);e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:XA(t)},`auth refresh attempt`);try{let t=await e.execute(),n=YA(e.authService,e.refreshToken),r=YA(e.authService,t.refreshToken);return e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshedDeviceId:t.deviceId,previousRefreshToken:XA(n),nextRefreshToken:XA(r)},`auth refresh succeeded`),t}catch(t){let n=YA(e.authService,e.refreshToken);throw e.logger?.warn?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:XA(n),error:ZA(t)},`auth refresh failed`),t}}function YA(e,t){return e.inspectRefreshToken?.(t)??{tokenRecordState:`missing`}}function XA(e){return{claimDeviceId:e.claimDeviceId??null,claimExpAt:e.claimExpAt??null,claimIssuedAt:e.claimIssuedAt??null,claimJtiSuffix:QA(e.claimJti),claimType:e.claimType??null,latestActiveTokenCreatedAt:e.latestActiveTokenCreatedAt??null,latestActiveTokenJtiSuffix:QA(e.latestActiveTokenJti),tokenRecordCreatedAt:e.tokenRecordCreatedAt??null,tokenRecordDeviceId:e.tokenRecordDeviceId??null,tokenRecordRevokedAt:e.tokenRecordRevokedAt??null,tokenRecordState:e.tokenRecordState}}function ZA(e){return sS(e)?{code:e.code,message:String(e),status:e.status}:e instanceof Error?{message:e.message,name:e.name}:{message:String(e)}}function QA(e){return e?e.slice(-8):null}async function $A(e,t){try{let n=$u.parse(e);switch(n.method){case`auth.refresh`:{let e=await JA({authService:t.authService,execute:()=>t.authService.refreshAccessToken(n.params.refreshToken),logger:t.logger,refreshToken:n.params.refreshToken,requestedDeviceId:n.params.deviceId??t.relayDeviceId,source:`relay_rpc`});return qA(n.params.deviceId??t.relayDeviceId,e.deviceId),ed.parse({method:n.method,result:e})}case`projects.list`:{let e=await t.sessionManager.listProjects();return ed.parse({method:n.method,result:{projects:e}})}case`gateway.update.get`:{let e=await t.updateService.getOrCheckInfo(`mobile`);return ed.parse({method:n.method,result:e})}case`codex.appServer.restart`:{let e=await t.sessionManager.restartCodexAppServer();return ed.parse({method:n.method,result:e})}case`gateway.update.apply`:{let e=await t.updateService.applyUpdate(n.params.requestedBy??`mobile`);return ed.parse({method:n.method,result:e})}case`projects.discovery.get`:{let e=await t.projectDiscoveryService.getProjects();return ed.parse({method:n.method,result:e})}case`projects.discovery.refresh`:{let e=await t.projectDiscoveryService.refreshProjects();return ed.parse({method:n.method,result:e})}case`projects.create`:{let e=await t.sessionManager.createProject({path:n.params.path,title:n.params.title});return ed.parse({method:n.method,result:{project:e}})}case`projects.delete`:if(!await t.sessionManager.deleteProject(n.params.projectId))throw rj(n.method,`NOT_FOUND`,404,`Project not found`);return ed.parse({method:n.method,result:{removed:!0}});case`workspace.directories.list`:{let e=await t.fsService.listDirectoriesUnrestricted(n.params.path,n.params.limit??200);return ed.parse({method:n.method,result:e})}case`sessions.list`:{let e=await t.sessionManager.listProjectSessions(n.params.projectId,n.params.status??`all`,{syncExternal:n.params.syncExternal});return ed.parse({method:n.method,result:{sessions:e}})}case`sessions.discovery.list`:{let e=await t.projectDiscoveryService.listProjectSessions(n.params.projectPath);return ed.parse({method:n.method,result:e})}case`sessions.get`:{let e=await t.sessionManager.getProjectSessionSummary(n.params.projectId,n.params.sessionId);if(!e)throw rj(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return ed.parse({method:n.method,result:{session:e}})}case`sessions.config.get`:{let e=await t.sessionManager.getProjectSessionConfig(n.params.projectId,n.params.sessionId);if(!e)throw rj(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return ed.parse({method:n.method,result:{session:e}})}case`sessions.history.sync`:{let e=await t.sessionManager.syncProjectSessionHistory(n.params.projectId,n.params.sessionId);return e.historyUpdated&&await t.refreshDetailSessionSnapshots?.({projectId:n.params.projectId,sessionId:n.params.sessionId,reason:`explicit_history_sync`}),ed.parse({method:n.method,result:{session:e.session,rawEventCount:e.rawEvents.length,historyUpdated:e.historyUpdated,statusChanged:e.statusChanged,refreshMode:e.refreshMode,...e.fromRawSeq===void 0?{}:{fromRawSeq:e.fromRawSeq},...e.toRawSeq===void 0?{}:{toRawSeq:e.toRawSeq}}})}case`sessions.rawEvents.list`:{let e=n.params.limit===`all`?2**53-1:n.params.limit,r=await HA({sessionManager:t.sessionManager,projectId:n.params.projectId,sessionId:n.params.sessionId,limit:e,fromRawSeqExclusive:n.params.fromRawSeqExclusive,detailLevel:n.params.detailLevel,requestSource:`rpc`});return ed.parse({method:n.method,result:r})}case`providers.capabilities.get`:{let e=Date.now();t.logger?.info?.({relayDeviceId:t.relayDeviceId??null,rpcMethod:n.method,provider:n.params.provider,projectId:n.params.projectId??null,agentVersion:n.params.agentVersion??null},`relay rpc provider capabilities request started`);try{let r=await t.sessionManager.getProviderCapabilities(n.params.provider,n.params.projectId??void 0,n.params.agentVersion??void 0),i=r&&typeof r==`object`&&!Array.isArray(r)?r:null;return t.logger?.info?.({relayDeviceId:t.relayDeviceId??null,rpcMethod:n.method,provider:n.params.provider,projectId:n.params.projectId??null,agentVersion:n.params.agentVersion??null,durationMs:Date.now()-e,source:typeof i?.source==`string`?i.source:void 0,modelCount:Array.isArray(i?.models)?i.models.length:void 0},`relay rpc provider capabilities request completed`),ed.parse({method:n.method,result:{capabilities:r}})}catch(r){throw t.logger?.warn?.({relayDeviceId:t.relayDeviceId??null,rpcMethod:n.method,provider:n.params.provider,projectId:n.params.projectId??null,agentVersion:n.params.agentVersion??null,durationMs:Date.now()-e,err:r},`relay rpc provider capabilities request failed`),r}}case`agents.config.get`:{let e=await t.sessionManager.getAgentConfig(n.params.provider,{projectId:n.params.projectId??void 0,agentVersion:n.params.agentVersion??void 0});return ed.parse({method:n.method,result:e})}case`devices.list`:return ed.parse({method:n.method,result:{devices:t.authService.listDevices()}});case`devices.revoke`:if(!await t.authService.revokeDevice(n.params.deviceId))throw rj(n.method,`NOT_FOUND`,404,`Device ${n.params.deviceId} not found`);return ed.parse({method:n.method,result:{revoked:!0}});default:{let e=n;throw rj(void 0,`INTERNAL`,500,`Unhandled relay RPC method: ${JSON.stringify(e)}`)}}}catch(e){throw ej(e)}}function ej(e){if(sS(e))switch(e.code){case`REFRESH_TOKEN_REVOKED`:case`DEVICE_REVOKED`:case`REFRESH_TOKEN_DEVICE_MISMATCH`:return rj(`UNAUTHORIZED`,e.status,String(e),e.details);case`PROJECT_NOT_FOUND`:case`DISCOVERED_PROJECT_NOT_FOUND`:case`PROJECT_SESSION_NOT_FOUND`:case`SESSION_NOT_FOUND`:return rj(`NOT_FOUND`,e.status,String(e),e.details);case`SESSION_TURN_CONFLICT`:case`PROJECT_DELETE_CONFLICT`:case`CODEX_APP_SERVER_RESTART_CONFLICT`:return rj(`BAD_REQUEST`,e.status,String(e),e.details);default:return rj(e.status>=500?`INTERNAL`:`BAD_REQUEST`,e.status,String(e),e.details)}let t=nd.safeParse(e);if(t.success)return t.data;let n=td.safeParse(e);if(n.success)return rj(void 0,n.data.code,n.data.status,n.data.message,n.data.details);if(e&&typeof e==`object`&&`code`in e&&`status`in e&&`message`in e&&typeof e.code==`string`&&typeof e.status==`number`&&typeof e.message==`string`){let t=e;return rj(t.code,t.status,t.message,t.details)}let r=String(e);return e instanceof Error&&e.name===`ZodError`?rj(`BAD_REQUEST`,400,r):ij(e)?rj(`UNAUTHORIZED`,401,r):aj(r)?rj(`BAD_REQUEST`,400,r):rj(`INTERNAL`,500,r)}function tj(e,t,n,r){if(!r)return t;let i={gatewayId:t.gatewayId,deviceId:t.deviceId,mobilePublicKey:r.publicKey,pairingContext:{pairingCode:nj(n),signedAt:new Date().toISOString()}};return{...t,gatewayIdentity:e.identity,pairingConfirmation:lp(e.identity,e.privateKeyPem,i)}}function nj(e){return e.replace(/\s+/gu,``).toUpperCase()}function rj(e,t,n,r,i){let a=typeof t==`string`,o=a?e:void 0,s=a?t:e,c=a?n:t,l=a?r:n,u=a?i:r;return nd.parse({...o?{method:o}:{},code:s,status:c,message:l,...u===void 0?{}:{details:u}})}function ij(e){return sS(e)&&(e.code===`REFRESH_TOKEN_REVOKED`||e.code===`DEVICE_REVOKED`||e.code===`REFRESH_TOKEN_DEVICE_MISMATCH`)||CS(e)}function aj(e){let t=e.trim();return t===`Invalid provider`||t.startsWith(`Invalid provider:`)||t.startsWith(`Project path must be absolute:`)||t.startsWith(`Project path does not exist:`)||t.startsWith(`Project path is not a directory:`)||t.startsWith(`ZodError:`)}function oj(e){return e instanceof Error?e.stack??`${e.name}: ${e.message}`:(0,b.inspect)(e,{depth:6,breakLength:120})}async function sj(e){let t=await vp({configPath:e.configPath,ensureConfigFile:!0});Sp(t.config);let n=await UA(t.config,{logToConsole:e.logToConsole,onUpdatePrepared:async e=>{lj({type:`worker.update.prepared`,payload:e})}});lj({type:`worker.ready`,payload:cj(n)});let r=null,i=e=>r||(r=Promise.resolve(n.close?.()).catch(e=>{console.error(`[gateway] worker shutdown failed: ${String(e)}`)}).finally(()=>{process.exit(e)}),r);process.on(`message`,e=>{let t=uj(e);if(t)switch(t.type){case`supervisor.request`:a(t);return;case`supervisor.shutdown`:i(0);return}}),process.on(`disconnect`,()=>{i(0)}),process.on(`SIGINT`,()=>{i(0)}),process.on(`SIGTERM`,()=>{i(0)}),process.on(`uncaughtException`,e=>{console.error(`[gateway] worker uncaught exception: ${oj(e)}`),i(1)}),process.on(`unhandledRejection`,e=>{console.error(`[gateway] worker unhandled rejection: ${oj(e)}`),i(1)});async function a(e){try{switch(e.method){case`gateway.update.apply`:{if(!n.requestGatewayUpdate)throw Error(`gateway update is unavailable`);let t=await n.requestGatewayUpdate(e.requestedBy);lj({type:`worker.response`,id:e.id,method:e.method,ok:!0,result:t});return}case`codex.appServer.restart`:{if(!n.requestCodexAppServerRestart)throw Error(`codex app-server restart is unavailable`);let t=await n.requestCodexAppServerRestart(e.requestedBy);lj({type:`worker.response`,id:e.id,method:e.method,ok:!0,result:t});return}}}catch(t){lj({type:`worker.response`,id:e.id,method:e.method,ok:!1,error:String(t)})}}await new Promise(()=>{})}function cj(e){return{protocol:e.protocol,listenPort:e.listenPort,machineName:e.machineName,gatewayIdentity:e.gatewayIdentity,startupPairingCode:e.startupPairingCode}}function lj(e){process.send&&process.send(e)}function uj(e){if(!dj(e)||typeof e.type!=`string`)return null;switch(e.type){case`supervisor.shutdown`:return e.reason!==`signal`&&e.reason!==`update`?null:{type:`supervisor.shutdown`,reason:e.reason};case`supervisor.request`:return typeof e.id!=`string`||e.method!==`gateway.update.apply`&&e.method!==`codex.appServer.restart`||e.requestedBy!==`console`&&e.requestedBy!==`mobile`&&e.requestedBy!==`system`?null:{type:`supervisor.request`,id:e.id,method:e.method,requestedBy:e.requestedBy};default:return null}}function dj(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}fj(process.argv.slice(2)).catch(e=>{console.error(String(e)),process.exit(1)});async function fj(e){let t=te(e);switch(t.command){case`help`:_j();return;case`version`:console.log(F.version);return;case`init`:await mj(t);return;case`doctor`:await hj(t);return;case`start`:await pj(t);return;case`__worker`:await gj(t);return;default:{let e=t.command;throw Error(`Unsupported command: ${e}`)}}}async function pj(e){let t=await vp({configPath:e.configPath,ensureConfigFile:!0});Sp(t.config);let n=await Vp({configPath:t.configPath,configExists:t.configExists,config:t.config});try{await ch({args:e,loaded:t,doctorReport:n})}catch(e){throw Error(_h(e,t.config))}Hp(n)&&console.warn(`[doctor] startup continued despite bundled runtime check failures.`)}async function mj(e){let t=await _p({configPath:e.configPath,overwrite:e.force});t.created?console.log(`[gateway] wrote config to ${t.configPath}`):(console.log(`[gateway] config already exists at ${t.configPath}`),console.log(`[gateway] rerun with --force to overwrite`));let n=await vp({configPath:t.configPath,ensureConfigFile:!1}),r=await Vp({configPath:n.configPath,configExists:n.configExists,config:n.config});console.log(Up(r))}async function hj(e){let t=await vp({configPath:gp(e.configPath),ensureConfigFile:!1,syncGatewayIdentityConfig:!1}),n=await Vp({configPath:t.configPath,configExists:t.configExists,config:t.configExists?t.config:void 0});console.log(Up(n)),Hp(n)&&(process.exitCode=1)}async function gj(e){try{await sj(e)}catch(t){let n=await vp({configPath:e.configPath,ensureConfigFile:!0});throw Error(_h(t,n.config))}}function _j(){console.log(`${F.cliName} ${F.version}`),console.log(``),console.log(`Usage:`),console.log(` ${F.cliName} [start] [--config <path>] [--log]`),console.log(` ${F.cliName} init [--config <path>] [--force]`),console.log(` ${F.cliName} doctor [--config <path>]`),console.log(` ${F.cliName} --version`)}exports.runCli=fj;
|
|
507
|
+
`),t=e?`${e}\n`:``;await d.default.writeFile(n,t,`utf8`)}return this.rawEventsCacheBySession.set(e,c),c}readSessionRawEventsFromCache(e){if(!this.hasPendingRawMutation(e))return this.rawEventsCacheBySession.get(e)}readSessionRawEventsCompactedFromCache(e){if(this.hasPendingRawMutation(e))return;let t=this.compactedRawEventsCacheBySession.get(e);if(t)return aA(t);let n=this.rawEventsCacheBySession.get(e);if(!n)return;let r=iA(n);return this.compactedRawEventsCacheBySession.set(e,r),aA(r)}incrementPendingRawMutation(e){this.pendingRawMutationsBySession.set(e,(this.pendingRawMutationsBySession.get(e)??0)+1)}decrementPendingRawMutation(e){let t=(this.pendingRawMutationsBySession.get(e)??0)-1;if(t>0){this.pendingRawMutationsBySession.set(e,t);return}this.pendingRawMutationsBySession.delete(e)}hasPendingRawMutation(e){return(this.pendingRawMutationsBySession.get(e)??0)>0}};function $k(e){return typeof e==`object`&&!!e}function eA(e){if(!(typeof e!=`number`||!Number.isInteger(e)||e<=0))return e}function tA(e){let t=new WeakSet;return JSON.stringify(e,(e,n)=>{if(typeof n==`bigint`)return n.toString();if(typeof n==`function`)return`[Function ${n.name||`anonymous`}]`;if(typeof n==`object`&&n){if(t.has(n))return`[Circular]`;t.add(n)}return n})}function nA(e){if(e.length===0)return null;let t=e[0],n=e[e.length-1];return!t||!n?null:{min:t.rawSeq,max:n.rawSeq}}async function rA(e,t){await d.default.mkdir(p.default.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.${Date.now()}.tmp`;try{await d.default.writeFile(n,t,`utf8`),await d.default.rename(n,e)}catch(e){try{await d.default.rm(n,{force:!0})}catch{}throw e}}function iA(e){let t=Lf(e),n=t.map(e=>e),r=new Map;for(let[e,t]of n.entries()){let n=Bf(t);n&&r.set(n.key,e)}return{slots:n,indexByKey:r,dense:t}}function aA(e){return e.dense||=e.slots.filter(e=>e!==null),e.dense}function oA(e,t){let n=Bf(t);if(!n){e.slots.push(t),e.dense=null;return}let r=e.indexByKey.get(n.key);if(r===void 0){e.slots.push(t),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null;return}let i=e.slots[r];if(!i){e.slots.push(t),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null;return}let a=Vf(i,t);if(!a){e.slots.push(t),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null;return}e.slots[r]=null,e.slots.push(a),e.indexByKey.set(n.key,e.slots.length-1),e.dense=null}function sA(e,t){let n=e.ts.localeCompare(t.ts);return n===0?e.eventId.localeCompare(t.eventId):n}function cA(e){if(e.type===`item.completed`)return!0;if(e.type!==`native.raw`)return!1;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{};return(typeof n.method==`string`?n.method:typeof t.method==`string`?t.method:``)===`item/completed`}function lA(e){if(cA(e)||e.type===`turn.completed`||e.type===`turn.failed`)return!0;if(e.type!==`native.raw`)return!1;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{},r=typeof n.method==`string`?n.method:typeof t.method==`string`?t.method:``;return r===`turn/completed`||r===`turn/failed`||r===`turn/interrupted`}function uA(e,t,n){if(n?.replaceMissing)return dA(e,t,n);let r=[...e].sort(hA),i=new Map,a=1;for(let[e,t]of r.entries())i.set(t.eventId,e),a=Math.max(a,t.rawSeq+1);for(let e of t){let t=i.get(e.eventId);if(t!==void 0){let n=r[t];n&&fA(n,e)&&(r[t]=mA(n,e));continue}let n={...e,rawSeq:a};a+=1,i.set(n.eventId,r.length),r.push(n)}return gA(r.sort(hA)).sort(hA)}function dA(e,t,n){let r=new Map(e.map(e=>[e.eventId,e])),i=new Set(t.map(e=>e.eventId)),a=n?.baseEventIds?new Set(n.baseEventIds):null,o=a?e.filter(e=>!a.has(e.eventId)&&!i.has(e.eventId)):[],s=[...t,...o].sort(hA),c=1;for(let t of e)c=Math.max(c,t.rawSeq+1);return gA(s.map(e=>{let t=r.get(e.eventId);if(t)return fA(t,e)?mA(t,e):{...e,rawSeq:t.rawSeq};let n={...e,rawSeq:c};return c+=1,n})).sort(hA)}function fA(e,t){return pA(e)&&pA(t)}function pA(e){return e.type===`native.raw`?SA(($k(e.payload.raw)?e.payload.raw:{}).source)===`codex.history.thread_read`:!1}function mA(e,t){return{...t,rawSeq:e.rawSeq,ts:e.ts}}function hA(e,t){let n=e.rawSeq-t.rawSeq;if(n!==0)return n;let r=e.ts.localeCompare(t.ts);return r===0?e.eventId.localeCompare(t.eventId):r}function gA(e){let t=zf(e).filter(e=>!_A(e)),n=new Set;for(let e of t){let t=vA(e);t&&n.add(t)}return n.size===0?t:t.filter(e=>{let t=yA(e);return!t||!n.has(t)})}function _A(e){if(e.type!==`native.raw`)return!1;let t=$k(e.payload.raw)?e.payload.raw:{};if(SA(t.source)!==`codex.app_server`)return!1;let n=$k(t.message)?t.message:{};return SA(n.method)??SA(t.method)?!1:$k(($k(n.result)?n.result:{}).turn)}function vA(e){if(e.type===`item.completed`){let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.item)?t.item:{};return bA(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{},r=$k(n.params)?n.params:{};if((SA(n.method)??SA(t.method))!==`item/completed`)return null;let i=$k(r.item)?r.item:{};return bA(e.sessionId,i)}function yA(e){if(e.type===`item.updated`){let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.item)?t.item:{},r=SA(n.original_method)??SA(n.originalMethod)??``,i=$k(n.payload)?n.payload:{};return!(typeof i.delta==`string`||typeof i.output_delta==`string`||typeof i.outputDelta==`string`||typeof n.output_delta==`string`||typeof n.outputDelta==`string`||typeof n.text==`string`)&&!xA(r)?null:bA(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$k(e.payload.raw)?e.payload.raw:{},n=$k(t.message)?t.message:{},r=$k(n.params)?n.params:{};if(!xA(SA(n.method)??SA(t.method)??``))return null;let i=$k(r.msg)?r.msg:{},a=SA(r.itemId)??SA(r.item_id)??SA(i.itemId)??SA(i.item_id);return a?`${e.sessionId}|${a}`:null}function bA(e,t){let n=SA(t.id)??SA(t.item_id)??SA(t.itemId);return n?`${e}|${n}`:null}function xA(e){return e.includes(`_delta`)||e.endsWith(`/delta`)||e.endsWith(`Delta`)||e.includes(`/delta/`)}function SA(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function CA(e){return!e||e.providerMode!==`native`?!1:e.interactionLockReason===`external_turn_running`?!0:e.status!==`running`}var wA=class{clients=new Map;clientIdsBySessionId=new Map;deliveryStateByClientSession=new Map;addClient(e,t){let n=`ws_${kx(10)}`;return this.clients.set(n,{id:n,deviceId:e,socket:t,subscriptionsBySessionId:new Map}),n}removeClient(e){let t=this.clients.get(e);t&&(this.removeClientFromSessionIndexes(e,t.subscriptionsBySessionId.keys()),this.removeClientDeliveryState(e),this.clients.delete(e))}replaceSubscriptions(e,t,n=!0){let r=this.clients.get(e);if(!r)return[];n&&(this.removeClientFromSessionIndexes(e,r.subscriptionsBySessionId.keys()),this.removeClientSessionDeliveryState(e,r.subscriptionsBySessionId.keys()),r.subscriptionsBySessionId.clear());let i=new Map;for(let e of t)i.set(e.sessionId,e);for(let[t,n]of i){r.subscriptionsBySessionId.set(t,n);let i=this.clientIdsBySessionId.get(t)??new Set;i.add(e),this.clientIdsBySessionId.set(t,i),this.ensureClientSessionDeliveryState(e,t)}return[...r.subscriptionsBySessionId.values()]}getSubscriptions(e){let t=this.clients.get(e);return t?[...t.subscriptionsBySessionId.values()]:[]}getWatchSubscriptions(e){let t=new Map;for(let n of this.clients.values())for(let r of n.subscriptionsBySessionId.values())r.purpose===e&&t.set(r.sessionId,r);return[...t.values()]}getClientSubscriptionsForSession(e,t){let n=this.clientIdsBySessionId.get(e);if(!n||n.size===0)return[];let r=[];for(let i of n){let n=this.clients.get(i),a=n?.subscriptionsBySessionId.get(e);!n||!a||t&&a.purpose!==t||r.push({clientId:i,subscription:a})}return r}routeProviderRaw(e){let t=this.clientIdsBySessionId.get(e.sessionId);if(!t||t.size===0)return;let n=null;for(let r of t){let t=this.clients.get(r),i=t?.subscriptionsBySessionId.get(e.sessionId);if(!t||!i||!this.shouldDeliverProviderRaw(i))continue;let a=this.deliveryStateByClientSession.get(this.clientSessionKey(r,e.sessionId));if(a?.paused){a.queued.push({message:e});continue}if(t.socket.readyState===t.socket.OPEN){if(t.socket.sendProviderRaw){t.socket.sendProviderRaw(e);continue}n??=JSON.stringify(e),t.socket.send(n)}}}routeSessionMessage(e,t){let n=this.clientIdsBySessionId.get(e.sessionId);if(!n||n.size===0)return;let r=null;for(let i of n){let n=this.clients.get(i),a=n?.subscriptionsBySessionId.get(e.sessionId);if(!n||!a||!t(a))continue;let o=this.deliveryStateByClientSession.get(this.clientSessionKey(i,e.sessionId));if(o?.paused){o.queued.push({message:e});continue}n.socket.readyState===n.socket.OPEN&&(r??=JSON.stringify(e),n.socket.send(r))}}sendSessionMessageToClient(e,t,n){let r=this.clients.get(e),i=r?.subscriptionsBySessionId.get(t);if(!r||!i)return;let a=this.deliveryStateByClientSession.get(this.clientSessionKey(e,t));if(a?.paused){a.queued.push({message:n});return}r.socket.readyState===r.socket.OPEN&&r.socket.send(JSON.stringify(n))}pauseSession(e,t){let n=this.ensureClientSessionDeliveryState(e,t);n.paused=!0}resumeSession(e,t){let n=this.clientSessionKey(e,t),r=this.deliveryStateByClientSession.get(n);if(!r||(r.paused=!1,r.queued.length===0))return;let i=this.clients.get(e);if(!i||i.socket.readyState!==i.socket.OPEN){r.queued=[];return}let a=[...r.queued];r.queued=[];for(let e of a){if(e.message.kind===`provider.raw`&&i.socket.sendProviderRaw){i.socket.sendProviderRaw(e.message);continue}i.socket.send(JSON.stringify(e.message))}}sendStreamMessage(e,t){let n=this.clients.get(e);!n||n.socket.readyState!==n.socket.OPEN||n.socket.send(JSON.stringify(t))}sendBroadcastMessage(e,t){let n=JSON.stringify(e);for(let e of this.clients.values())if(e.socket.readyState===e.socket.OPEN){if(t?.sessionId){let n=e.subscriptionsBySessionId.get(t.sessionId);if(!n||t.purpose&&n.purpose!==t.purpose)continue}e.socket.send(n)}}sendSystemMessage(e,t){let n=this.clients.get(e);!n||n.socket.readyState!==n.socket.OPEN||n.socket.send(JSON.stringify(t))}broadcastSystemMessage(e){let t=JSON.stringify(e);for(let e of this.clients.values())e.socket.readyState===e.socket.OPEN&&e.socket.send(t)}count(){return this.clients.size}removeClientFromSessionIndexes(e,t){for(let n of t){let t=this.clientIdsBySessionId.get(n);t&&(t.delete(e),t.size===0&&this.clientIdsBySessionId.delete(n))}}clientSessionKey(e,t){return`${e}::${t}`}ensureClientSessionDeliveryState(e,t){let n=this.clientSessionKey(e,t),r=this.deliveryStateByClientSession.get(n);if(r)return r;let i={paused:!1,queued:[]};return this.deliveryStateByClientSession.set(n,i),i}removeClientSessionDeliveryState(e,t){for(let n of t)this.deliveryStateByClientSession.delete(this.clientSessionKey(e,n))}removeClientDeliveryState(e){let t=`${e}::`;for(let e of this.deliveryStateByClientSession.keys())e.startsWith(t)&&this.deliveryStateByClientSession.delete(e)}shouldDeliverProviderRaw(e){return!(e.purpose===`detail_view`&&e.bootstrapMode===`readable`)}};const TA=1200,EA=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`;var DA=class{statesByKey=new Map;targetsByClientId=new Map;constructor(e){this.options=e}setClientWatchTargets(e,t,n){let r=new Map;for(let e of t){let t=e.sessionId.trim(),n=e.projectId?.trim()??``;!t||!n||r.set(this.stateKey(n,t),{sessionId:t,projectId:n})}let i=this.targetsByClientId.get(e)??new Map,a=n?new Map:new Map(i);for(let[e,t]of r)a.set(e,t);for(let[t,n]of i)a.has(t)||this.removeClientFromState(e,n.projectId??``,n.sessionId);for(let[t,n]of a)i.get(t)||this.addClientToState(e,n.projectId??``,n.sessionId);return this.targetsByClientId.set(e,a),[...a.values()]}removeClient(e){let t=this.targetsByClientId.get(e);if(t){for(let n of t.values())this.removeClientFromState(e,n.projectId??``,n.sessionId);this.targetsByClientId.delete(e)}}close(){for(let e of this.statesByKey.values())this.disposeState(e);this.statesByKey.clear(),this.targetsByClientId.clear()}logDebug(e,t){EA&&(console.log(`[native-watch][gateway]`,e,t),this.options.logger.info?.({event:e,...t},`native session watch debug`))}addClientToState(e,t,n){if(!t||!n)return;let r=this.stateKey(t,n),i=this.statesByKey.get(r);i||(i={provider:`codex`,sessionId:n,projectId:t,ownerClientIds:new Set,fileWatcher:null,debounceTimer:null,catchupRetryTimer:null,reconcileTimer:setInterval(()=>{this.requestSync(r,`reconcile`)},25e3),syncInFlight:!1,rerunRequested:!1,stableIdleSyncCount:0,watchCatchupRetryCount:0,lastObservedRawSeq:0,lastObservedRawEventCount:0,lastTriggeredAt:0,lastSyncStartedAt:null,lastSyncCompletedAt:null},this.statesByKey.set(r,i),this.logDebug(`state.created`,{clientId:e,projectId:t,sessionId:n})),i.ownerClientIds.add(e),this.logDebug(`lease.added`,{clientId:e,projectId:t,sessionId:n,ownerClientCount:i.ownerClientIds.size}),this.requestSync(r,`lease_added`)}removeClientFromState(e,t,n){let r=this.statesByKey.get(this.stateKey(t,n));r&&(r.ownerClientIds.delete(e),this.logDebug(`lease.removed`,{clientId:e,projectId:t,sessionId:n,ownerClientCount:r.ownerClientIds.size}),!(r.ownerClientIds.size>0)&&(this.disposeState(r),this.statesByKey.delete(this.stateKey(t,n))))}disposeState(e){e.debounceTimer&&=(clearTimeout(e.debounceTimer),null),this.clearCatchupRetry(e,{resetAttempts:!0}),clearInterval(e.reconcileTimer),e.fileWatcher?.close(),e.fileWatcher=null,this.logDebug(`state.disposed`,{projectId:e.projectId,sessionId:e.sessionId,watchedPath:e.watchedPath})}async requestSync(e,t){let n=this.statesByKey.get(e);if(n){if(n.lastTriggeredAt=Date.now(),n.syncInFlight){n.rerunRequested=!0;return}n.syncInFlight=!0,n.rerunRequested=!1,n.lastSyncStartedAt=Date.now(),this.logDebug(`sync.begin`,{projectId:n.projectId,sessionId:n.sessionId,reason:t,ownerClientCount:n.ownerClientIds.size,watchedPath:n.watchedPath,watchedDir:n.watchedDir,watchedBaseName:n.watchedBaseName,stableIdleSyncCount:n.stableIdleSyncCount});try{let r=await this.options.sessionManager.getProjectSessionSummary(n.projectId,n.sessionId);if(!r||r.providerMode!==`native`||r.provider!==`codex`&&r.provider!==`claude`){this.logDebug(`sync.stop.unwatchable_summary`,{projectId:n.projectId,sessionId:n.sessionId,summarySource:r?.source,summaryProvider:r?.provider,summaryProviderMode:r?.providerMode,summaryStatus:r?.status}),this.stopState(e);return}if(n.provider=r.provider,!CA(r)){this.clearCatchupRetry(n,{resetAttempts:!0}),n.stableIdleSyncCount=0,this.logDebug(`sync.skip.gateway_live`,{projectId:n.projectId,sessionId:n.sessionId,reason:t,summaryStatus:r.status,interactionLockReason:r.interactionLockReason,watchedPath:n.watchedPath,ownerClientCount:n.ownerClientIds.size});return}let i=await this.options.sessionManager.syncProjectSessionHistory(n.projectId,n.sessionId);n.lastSyncCompletedAt=Date.now(),this.applyWatchPath(n,i.nativeWatchPath);let a=n.lastObservedRawSeq,o=n.lastObservedRawEventCount,s=this.resolveObservedRawSeq(i),c=s>a||i.rawEvents.length>o;if(c?this.clearCatchupRetry(n,{resetAttempts:!0}):this.maybeScheduleWatchCatchupRetry(e,n,t,i,{previousObservedRawSeq:a,previousObservedRawEventCount:o,nextObservedRawSeq:s,nextObservedRawEventCount:i.rawEvents.length}),n.lastObservedRawSeq=Math.max(n.lastObservedRawSeq,s),n.lastObservedRawEventCount=Math.max(n.lastObservedRawEventCount,i.rawEvents.length),i.session.status!==`running`&&!i.historyUpdated?n.stableIdleSyncCount+=1:n.stableIdleSyncCount=0,this.logDebug(`sync.result`,{projectId:n.projectId,sessionId:n.sessionId,reason:t,status:i.session.status,interactionLockReason:i.session.interactionLockReason,historyUpdated:i.historyUpdated,statusChanged:i.statusChanged,refreshMode:i.refreshMode,fromRawSeq:i.fromRawSeq,toRawSeq:i.toRawSeq,nativeWatchPath:i.nativeWatchPath,rawEventCount:i.rawEvents.length,cursorAdvanced:c,previousObservedRawSeq:a,previousObservedRawEventCount:o,nextObservedRawSeq:s,nextObservedRawEventCount:i.rawEvents.length,watchCatchupRetryCount:n.watchCatchupRetryCount,stableIdleSyncCount:n.stableIdleSyncCount}),i.historyUpdated||i.statusChanged){let e=this.options.createExternalUpdateMessage({provider:i.session.provider,sessionId:i.session.id,projectId:i.session.projectId,updatedAt:i.session.updatedAt,status:i.session.status,interactionLockReason:i.session.interactionLockReason,refreshMode:i.refreshMode,fromRawSeq:i.fromRawSeq,toRawSeq:i.toRawSeq,historyUpdated:i.historyUpdated,statusChanged:i.statusChanged});for(let t of n.ownerClientIds)this.options.sendStreamMessage(t,e)}i.historyUpdated&&await this.options.refreshDetailSessionSnapshots?.({projectId:n.projectId,sessionId:n.sessionId,reason:`external_history_updated`})}catch(e){this.options.logger.warn({err:e,projectId:n.projectId,sessionId:n.sessionId,reason:t},`native session watch sync failed`)}finally{let n=this.statesByKey.get(e);if(!n)return;n.syncInFlight=!1,n.rerunRequested&&(this.logDebug(`sync.rerun`,{projectId:n.projectId,sessionId:n.sessionId,reason:t}),n.rerunRequested=!1,this.requestSync(e,`rerun`))}}}stopState(e){let t=this.statesByKey.get(e);if(t){this.disposeState(t),this.statesByKey.delete(e);for(let t of this.targetsByClientId.values())t.delete(e)}}applyWatchPath(e,t){let n=t?.trim()??``;if(!n)return;let r=p.default.resolve(n);if(e.watchedPath===r&&e.fileWatcher)return;let i=p.default.dirname(r),a=p.default.basename(r);e.fileWatcher?.close(),e.fileWatcher=null,e.watchedPath=r,e.watchedDir=i,e.watchedBaseName=a,this.logDebug(`watch.path.applied`,{projectId:e.projectId,sessionId:e.sessionId,watchedPath:r,watchedDir:i,watchedBaseName:a});try{e.fileWatcher=this.createPathWatcher(r,(t,n)=>{let i=n?Buffer.isBuffer(n)?n.toString(`utf8`):n:void 0;this.logDebug(`watch.fs.event`,{projectId:e.projectId,sessionId:e.sessionId,watchedPath:r,eventType:t,filename:i}),this.scheduleDebouncedSync(this.stateKey(e.projectId,e.sessionId))}),e.fileWatcher.on(`error`,t=>{this.options.logger.warn({err:t,projectId:e.projectId,sessionId:e.sessionId,watchedPath:r},`native session watcher error`)})}catch(t){this.options.logger.warn({err:t,projectId:e.projectId,sessionId:e.sessionId,watchedPath:r},`failed to start native session watcher`)}}createPathWatcher(e,t){return this.options.createWatcher?this.options.createWatcher(e,t):(0,u.watch)(e,(e,n)=>{t(e,n)})}scheduleDebouncedSync(e){let t=this.statesByKey.get(e);if(!t)return;let n=!!t.debounceTimer;t.debounceTimer&&clearTimeout(t.debounceTimer),this.clearCatchupRetry(t,{resetAttempts:!0}),this.logDebug(`watch.debounce.scheduled`,{projectId:t.projectId,sessionId:t.sessionId,watchedPath:t.watchedPath,delayMs:300,replacedExistingTimer:n}),t.debounceTimer=setTimeout(()=>{t.debounceTimer=null,this.logDebug(`watch.debounce.fired`,{projectId:t.projectId,sessionId:t.sessionId,watchedPath:t.watchedPath}),this.requestSync(e,`watch`)},300)}resolveObservedRawSeq(e){let t=e.rawEvents[e.rawEvents.length-1],n=t&&typeof t==`object`&&t&&`rawSeq`in t&&typeof t.rawSeq==`number`?t.rawSeq:void 0;return e.toRawSeq??n??0}clearCatchupRetry(e,t){e.catchupRetryTimer&&=(clearTimeout(e.catchupRetryTimer),null),t?.resetAttempts&&(e.watchCatchupRetryCount=0)}maybeScheduleWatchCatchupRetry(e,t,n,r,i){n!==`watch`&&n!==`watch_catchup`||t.ownerClientIds.size!==0&&(t.watchCatchupRetryCount>=2||(t.catchupRetryTimer||=(t.watchCatchupRetryCount+=1,this.logDebug(`watch.catchup.scheduled`,{projectId:t.projectId,sessionId:t.sessionId,reason:n,delayMs:TA,historyUpdated:r.historyUpdated,refreshMode:r.refreshMode,previousObservedRawSeq:i.previousObservedRawSeq,previousObservedRawEventCount:i.previousObservedRawEventCount,nextObservedRawSeq:i.nextObservedRawSeq,nextObservedRawEventCount:i.nextObservedRawEventCount,watchCatchupRetryCount:t.watchCatchupRetryCount}),setTimeout(()=>{t.catchupRetryTimer=null,this.logDebug(`watch.catchup.fired`,{projectId:t.projectId,sessionId:t.sessionId,watchCatchupRetryCount:t.watchCatchupRetryCount}),this.requestSync(e,`watch_catchup`)},TA))))}stateKey(e,t){return`${e}::${t}`}};function OA(e){return e.map(e=>({sessionId:e.sessionId,projectId:e.projectId,cursor:e.cursor.kind===`raw_seq`?{kind:`raw_seq`,rawSeq:e.cursor.rawSeq}:{kind:`all`},purpose:e.purpose,detailLevel:e.detailLevel,bootstrapMode:e.bootstrapMode}))}function kA(e,t){return e.length===0?[]:t===void 0?[...e]:e.filter(e=>e.rawSeq>t)}function AA(e){return{baseFilteredRawEvents:kC(Lf(e.rawEvents.filter(t=>t.rawSeq<=e.cursorRawSeq)),e.detailLevel),nextFilteredRawEvents:kC(Lf(e.rawEvents),e.detailLevel)}}function jA(e,t){return t&&`kind`in t&&t.kind===`bootstrapping`?t:{kind:`bootstrapping`,sessionId:e,previousReadyState:t??null,queuedEnvelopes:[]}}function MA(e,t){let n=e.previousReadyState;if(!n)return{previousReadyState:null,nextReadyState:null,replayedEnvelopes:[]};let r=kA(e.queuedEnvelopes,n.rawEvents[n.rawEvents.length-1]?.rawSeq),i=n;for(let e of r)i=t(i,e);return{previousReadyState:n,nextReadyState:i,replayedEnvelopes:r}}function NA(e){let t=(e,t)=>{let n={...e??{},...t??{}};return Object.keys(n).length>0?n:void 0};return e.existing?{previousState:e.existing.previousState,nextState:e.next.nextState,sessionSummary:t(e.existing.sessionSummary,e.next.sessionSummary)}:{previousState:e.next.previousState,nextState:e.next.nextState,sessionSummary:t(void 0,e.next.sessionSummary)}}const PA=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`,FA=process.env.SESSION_FETCH_DEBUG===`1`||process.env.EXPO_PUBLIC_SESSION_FETCH_DEBUG===`1`;let IA=null,LA=null;const RA={perMessageDeflate:{threshold:1024}};function zA(e,t){PA&&(console.log(`[native-watch][gateway]`,e,t),LA?.info({event:e,...t},`native session watch debug`))}function BA(e,t){FA&&(console.log(`[session-fetch][gateway] ${e}`,t),IA?.info({event:e,...t},`session fetch debug`))}function VA(e){return e?{sessionFound:!0,sessionId:e.id,projectId:e.projectId,nativeSessionId:e.nativeSessionId??null,provider:e.provider,providerMode:e.providerMode,source:e.source??null,status:e.status,interactionLockReason:e.interactionLockReason??null,updatedAt:e.updatedAt,lastHydratedExternalUpdatedAt:e.lastHydratedExternalUpdatedAt??null}:{sessionFound:!1}}async function HA(e){let t=e.limit??300,n=e.detailLevel??`full`,r=(r,i)=>{BA(`raw-events.list`,{requestSource:e.requestSource,projectId:e.projectId,sessionId:e.sessionId,limit:t,detailLevel:n,requestedCursor:e.fromRawSeqExclusive??null,decision:r.decision,reason:r.reason,fromRawSeqExclusive:r.fromRawSeqExclusive??null,toRawSeq:r.toRawSeq??null,returnedCount:r.events.length,returnedFirstRawSeq:r.events[0]?.rawSeq??null,returnedLastRawSeq:r.events[r.events.length-1]?.rawSeq??null,...i})};if(e.fromRawSeqExclusive===void 0){let i=await e.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,t),a={decision:`snapshot`,reason:i.length===0?`empty_history_snapshot`:`initial_snapshot`,toRawSeq:i[i.length-1]?.rawSeq,events:kC(i,n)};return r(a),a}let i=await e.sessionManager.getProjectSessionRawSeqRange(e.projectId,e.sessionId);if(!i){let e={decision:`snapshot`,reason:`empty_history_snapshot`,events:[]};return r(e,{rangeMin:null,rangeMax:null,minExpectedCursor:null}),e}let a=Math.max(0,i.min-1);if(e.fromRawSeqExclusive<a||e.fromRawSeqExclusive>i.max){let o=await e.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,t),s={decision:`snapshot`,reason:`cursor_out_of_range`,toRawSeq:o[o.length-1]?.rawSeq,events:kC(o,n)};return r(s,{rangeMin:i.min,rangeMax:i.max,minExpectedCursor:a}),s}let o=await e.sessionManager.getProjectSessionRawEventsSinceSeq(e.projectId,e.sessionId,e.fromRawSeqExclusive,t),s={decision:`delta`,reason:`cursor_valid_delta`,fromRawSeqExclusive:e.fromRawSeqExclusive,toRawSeq:o[o.length-1]?.rawSeq??e.fromRawSeqExclusive,events:kC(o,n)};return r(s,{rangeMin:i.min,rangeMax:i.max,minExpectedCursor:a}),s}async function UA(e,t={}){await gh(e.gatewayLogPath);let n=GA(e,t),r=WA(e,n.instance);IA=r.log,LA=r.log,await r.register(wx.default,{origin:!0}),await r.register(Cx.default,{options:RA});let i=process.env.NODE_ENV!==`production`,a=4e3,o=`[unserializable payload]`,s=new wS(e);await s.init();let c=new PS(e.auditLogPath),l=new wA,u=new yC,d=new UC(e.projectStoreDir),f=new Qk(e.sessionHistoryDir);await f.init();let m=new fD(p.default.join(e.sessionHistoryDir,`discovery-v1`));await m.init();let h=new $E({store:m});await h.init();let g,_=null,v=await op(e.authStoreDir),y=new IO({preferNativeProviders:e.enableNativeProviders,requireNativeCodex:e.requireNativeCodex,auditLogger:c,projectStore:d,historyStore:f,logger:r.log,runtimeLifecycle:{idleTtlMs:e.runtimeIdleTtlMs,sweepIntervalMs:e.runtimeSweepIntervalMs,maxSessions:e.runtimeMaxSessions,maxCodexSessions:e.runtimeMaxCodexSessions,maxClaudeSessions:e.runtimeMaxClaudeSessions},onEnvelope:e=>{l.routeProviderRaw(e),Se(e)}}),b=new DA({sessionManager:y,logger:r.log,sendStreamMessage:(e,t)=>{l.sendStreamMessage(e,t)},createExternalUpdateMessage:e=>Pe(e),refreshDetailSessionSnapshots:e=>Ee(e)});y.warmStartupProviderCapabilities().catch(e=>{r.log.warn({err:e},`startup provider capability warmup failed`)});let x=new Fm({packageName:F.packageName,currentVersion:F.version,sessionHub:l,logger:r.log,consoleWrite:e=>{console.log(e)},getRunningSessionCount:async()=>y.getRunningRuntimeSessionCount(),requestPreparedUpdate:t.onUpdatePrepared});r.addHook(`onClose`,async()=>{r.log.info({hasRelayClient:!!_},`gateway shutdown starting`);try{for(let e of O.values())clearTimeout(e.timer);O.clear(),b.close(),_?.close(),S.close(),await x.shutdown(),await y.shutdown(),await f.shutdown(),r.log.info(`gateway shutdown completed`)}catch(e){throw r.log.error({err:e},`gateway shutdown failed`),e}finally{IA=null,LA=null,n.close()}}),i&&r.addHook(`onSend`,async(e,t,n)=>(r.log.info({method:e.method,url:e.url,statusCode:t.statusCode,responseBody:Le(n)},`gateway response (dev)`),n)),r.get(`/health`,async()=>({ok:!0,service:`desktop-gateway`,now:new Date().toISOString(),wsClients:l.count(),machineName:vm(),gatewayIdentity:v.identity})),r.get(`/api/pairing/descriptor`,async()=>pm({gatewayId:e.gatewayId,machineName:vm(),relayBaseUrl:e.relayEnabled?Em({relayUrl:e.relayUrl,gatewayHost:e.host}):``,directBaseUrls:wm({protocol:e.httpsEnabled?`https`:`http`,host:e.host,port:e.httpsEnabled?e.httpsPort:e.port}),relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:void 0,gatewayIdentity:v.identity})),r.post(`/api/pairing/start`,async(t,n)=>{if(!Ie(t))return n.code(401).send({error:`Unauthorized`});try{let t=await s.createPairingCode(e.pairingCodeTtlSeconds);return await c.record({ts:new Date().toISOString(),action:`pairing.start`,detail:{expiresAt:t.expiresAt,source:`api`,ttlSeconds:e.pairingCodeTtlSeconds}}),t}catch(e){return r.log.error({err:e},`failed to generate pairing code via API`),n.code(500).send({error:`Failed to generate pairing code`,detail:String(e)})}}),r.post(`/api/pairing/claim`,async(e,t)=>{let n=Mc.safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{let e=Qe(n.data.deviceName),t=await s.claimPairingCode(n.data.code,e,n.data.deviceIdentity);return await c.record({ts:new Date().toISOString(),action:`pairing.claim`,deviceId:t.deviceId,detail:{deviceName:e}}),tj(v,t,n.data.code,n.data.deviceIdentity)}catch(e){return t.code(400).send({error:String(e)})}}),r.post(`/api/auth/refresh`,async(e,t)=>{let n=Fc.safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{return await JA({authService:s,execute:()=>s.refreshAccessToken(n.data.refreshToken),logger:r.log,refreshToken:n.data.refreshToken,source:`direct_http`})}catch(e){return t.code(401).send({error:String(e)})}}),r.get(`/api/projects`,async(e,t)=>{if(Ue(e,t))return{projects:await y.listProjects()}}),r.get(`/api/gateway/update`,async(e,t)=>{if(Ue(e,t))try{return await x.getOrCheckInfo(`mobile`)}catch(e){return t.code(500).send({error:String(e)})}}),r.post(`/api/gateway/update/apply`,async(e,t)=>{if(!Ue(e,t))return;let n=e.body,r=Wl.safeParse(n?.requestedBy);try{let e=await x.applyUpdate(r.success?r.data:`mobile`);return Yl.parse(e)}catch(e){let n=String(e),r=n.includes(`already up to date`)||n.includes(`does not support self-update`)||n.includes(`requires idle runtime`)?409:500;return t.code(r).send({error:n})}}),r.post(`/api/codex/app-server/restart`,async(e,t)=>{if(Ue(e,t))try{return Rc.parse(await y.restartCodexAppServer())}catch(e){let n=sS(e)?e.status:500;return t.code(n).send({error:String(e)})}}),r.get(`/api/discovery/projects`,async(e,t)=>{if(Ue(e,t))try{return await h.getProjects()}catch(e){return t.code(500).send({error:String(e)})}}),r.post(`/api/discovery/projects/refresh`,async(e,t)=>{if(Ue(e,t))try{return await h.refreshProjects()}catch(e){return t.code(500).send({error:String(e)})}}),r.get(`/api/discovery/projects/sessions`,async(e,t)=>{if(!Ue(e,t))return;let n=e.query;if(typeof n.projectPath!=`string`||!n.projectPath.trim())return t.code(400).send({error:`projectPath is required and must be a non-empty string`});try{return await h.listProjectSessions(n.projectPath)}catch(e){let n=e instanceof Error?e.message:String(e);return sS(e)&&e.code===`DISCOVERED_PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):aj(n)?t.code(400).send({error:n}):t.code(500).send({error:n})}}),r.get(`/api/workspace/directories`,async(e,t)=>{if(!Ue(e,t))return;let n=e.query,r=Number(n.limit??200),i=Number.isFinite(r)?Math.min(500,Math.max(1,r)):200;try{return await u.listDirectoriesUnrestricted(typeof n.path==`string`?n.path:void 0,i)}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/providers/:provider/capabilities`,async(e,t)=>{if(!Ue(e,t))return;let n=Ke(e,t);if(n)try{return{capabilities:await y.getProviderCapabilities(n.provider,n.projectId,n.agentVersion)}}catch(e){return sS(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(400).send({error:String(e)})}}),r.get(`/api/agents/:provider/config`,async(e,t)=>{if(!Ue(e,t))return;let n=Ke(e,t);if(n)try{return await y.getAgentConfig(n.provider,{projectId:n.projectId,agentVersion:n.agentVersion})}catch(e){return sS(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(400).send({error:String(e)})}}),r.post(`/api/projects`,async(e,t)=>{if(!Ue(e,t))return;let n=e.body;if(typeof n.path!=`string`||!n.path.trim())return t.code(400).send({error:`path is required and must be a non-empty string`});try{return{project:await y.createProject({path:n.path,title:typeof n.title==`string`?n.title:void 0})}}catch(e){return t.code(400).send({error:String(e)})}}),r.delete(`/api/projects/:projectId`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params;try{return await y.deleteProject(n.projectId)?{removed:!0}:t.code(404).send({error:`Project not found`})}catch(e){return t.code(409).send({error:String(e)})}}),r.get(`/api/projects/:projectId/sessions`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=e.query,i=We(r.status,t);if(!i)return;let a=Ge(r.syncExternal);try{return{sessions:await y.listProjectSessions(n.projectId,i,{syncExternal:a})}}catch(e){return sS(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(500).send({error:String(e)})}}),r.get(`/api/projects/:projectId/sessions/:sessionId`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=await y.getProjectSessionSummary(n.projectId,n.sessionId);return r?{session:r}:t.code(404).send({error:`Session not found`})}),r.get(`/api/projects/:projectId/sessions/:sessionId/config`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=await y.getProjectSessionConfig(n.projectId,n.sessionId);return r?{session:r}:t.code(404).send({error:`Session not found`})}),r.post(`/api/projects/:projectId/sessions/:sessionId/history-sync`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params;try{let e=await y.syncProjectSessionHistory(n.projectId,n.sessionId);return e.historyUpdated&&await Ee({projectId:n.projectId,sessionId:n.sessionId,reason:`explicit_history_sync`}),{session:e.session,rawEventCount:e.rawEvents.length,historyUpdated:e.historyUpdated,statusChanged:e.statusChanged,refreshMode:e.refreshMode,...e.fromRawSeq===void 0?{}:{fromRawSeq:e.fromRawSeq},...e.toRawSeq===void 0?{}:{toRawSeq:e.toRawSeq}}}catch(e){return sS(e)&&(e.code===`PROJECT_NOT_FOUND`||e.code===`PROJECT_SESSION_NOT_FOUND`)?t.code(e.status).send({error:String(e)}):t.code(500).send({error:String(e)})}}),r.get(`/api/projects/:projectId/sessions/:sessionId/events`,async(e,t)=>t.code(410).send({error:`Session events endpoint is deprecated. Use /api/projects/:projectId/sessions/:sessionId/raw-events`})),r.get(`/api/projects/:projectId/sessions/:sessionId/raw-events`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=e.query,i=(typeof r.limit==`string`?r.limit.trim().toLowerCase():``)===`all`?2**53-1:(()=>{let e=Number(r.limit??300);return Number.isFinite(e)?Math.min(2e3,Math.max(1,e)):300})(),a=typeof r.fromRawSeqExclusive==`string`?Number(r.fromRawSeqExclusive):void 0,o=tc.safeParse(r.detailLevel).success?tc.parse(r.detailLevel):`full`;try{return await Fe(n.projectId,n.sessionId,i,typeof a==`number`&&Number.isFinite(a)?Math.max(0,Math.floor(a)):void 0,o,`http`)}catch(e){return sS(e)&&(e.code===`PROJECT_NOT_FOUND`||e.code===`PROJECT_SESSION_NOT_FOUND`)?t.code(e.status).send({error:String(e)}):t.code(500).send({error:String(e)})}}),r.get(`/api/projects/:projectId/fs/tree`,async(e,t)=>{if(!Ue(e,t))return;let n=e.params,r=e.query,i=await y.getProject(n.projectId);if(!i)return t.code(404).send({error:`Project not found`});try{return await u.listTree(i.path,r.path??`.`)}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/sessions`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/sessions`})),r.get(`/api/sessions/:sessionId`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/sessions/:sessionId`})),r.get(`/api/sessions/:sessionId/events`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/sessions/:sessionId/raw-events`})),r.get(`/api/fs/tree`,async(e,t)=>t.code(410).send({error:`Use /api/projects/:projectId/fs/tree`})),r.get(`/api/devices`,async(e,t)=>Ie(e)?{devices:s.listDevices()}:t.code(401).send({error:`Unauthorized`})),r.post(`/api/devices/:deviceId/revoke`,async(e,t)=>{if(!Ie(e))return t.code(401).send({error:`Unauthorized`});let n=e.params;return await s.revokeDevice(n.deviceId)?(await c.record({ts:new Date().toISOString(),action:`device.revoke`,deviceId:n.deviceId}),{revoked:!0}):t.code(404).send({error:`Device not found`})}),r.get(`/ws`,{websocket:!0},(e,t)=>{let n=qe(t.headers.authorization)??Je(t.url);if(!n){e.close(1008,`Missing access token`);return}let r;try{r=s.verifyAccessToken(n)}catch(t){e.close(1008,`Unauthorized: ${String(t)}`);return}let i=l.addClient(r.sub,e);e.on(`message`,async e=>{let t=e.toString(),n;try{let e=JSON.parse(t);e&&typeof e==`object`&&(n=e),await w(hc(e),r.sub,i)}catch(e){await T({deviceId:r.sub,clientId:i,rawCommand:t,parsedInput:n,error:e})}}),e.on(`close`,()=>{b.removeClient(i),l.removeClient(i),M(i)})});let S=new OD({gatewayId:e.gatewayId,relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:`plaintext-relay`,gatewayIdentity:v.identity,gatewayIdentityPrivateKeyPem:v.privateKeyPem,sessionHub:l,handlePairingClaim:async e=>{let t=Qe(e.deviceName);return tj(v,await s.claimPairingCode(e.code,t,e.deviceIdentity),e.code,e.deviceIdentity)},handleRefresh:async t=>{let n=await JA({authService:s,execute:()=>s.refreshAccessToken(t.refreshToken),logger:r.log,refreshToken:t.refreshToken,requestedDeviceId:t.deviceId,source:`relay_http_forward`});return qA(t.deviceId,n.deviceId),{gatewayId:e.gatewayId,...n}},verifyDeviceIdentityBinding:async(e,t)=>s.verifyDeviceIdentityBinding(e,t),handleRpcRequest:async(e,t)=>$A(e,{authService:s,logger:r.log,sessionManager:y,projectDiscoveryService:h,fsService:u,updateService:x,relayDeviceId:t.deviceId,refreshDetailSessionSnapshots:Ee}),sendFrame:e=>_?.send(e)??!1,dispatchCommand:async(e,t,n)=>{try{await w(e,t,n)}catch(r){await T({deviceId:t,clientId:n,rawCommand:JSON.stringify(e),parsedInput:e,error:r})}}}),C=async(e,t,n)=>{switch(e.type){case`session.start`:{let r=await y.startSession({...e.payload,deviceId:t});l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:r});return}case`turn.input`:await y.sendInput(e.payload.sessionId,e.payload.text,t,{model:e.payload.model,sessionConfig:e.payload.sessionConfig,mode:e.payload.mode,config:e.payload.config});return;case`review.start`:throw Error(`review.start is not implemented yet.`);case`tool.approval.respond`:await y.respondToolPermission(e.payload.sessionId,e.payload.requestId,e.payload.decision,e.payload.reason,t);return;case`user.input.respond`:await y.respondUserInput(e.payload.sessionId,e.payload.requestId,e.payload.answers,t);return;case`session.interrupt`:await y.interruptSession(e.payload.sessionId,t);return;case`session.close`:throw Error(`session.close is deprecated. Use session.interrupt instead.`);case`session.external.watch.set`:{zA(`command.received`,{clientId:n,deviceId:t,replace:e.payload.replace,sessionCount:e.payload.sessions.length,sessions:e.payload.sessions}),r.log.info({clientId:n,deviceId:t,replace:e.payload.replace,sessionCount:e.payload.sessions.length,sessions:e.payload.sessions},`received session.external.watch.set`);let i=b.setClientWatchTargets(n,e.payload.sessions,e.payload.replace);zA(`command.applied`,{clientId:n,deviceId:t,replace:e.payload.replace,requestedSessionCount:e.payload.sessions.length,targetCount:i.length,targets:i}),r.log.info({clientId:n,deviceId:t,replace:e.payload.replace,requestedSessionCount:e.payload.sessions.length,targetCount:i.length,targets:i},`applied session.external.watch.set`),l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:{replace:e.payload.replace,sessions:i.map(e=>e.sessionId)}});return}case`session.stream.subscribe`:{let t=OA(e.payload.sessions);await L(n,t,e.payload.replace),l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:{replace:e.payload.replace,sessions:t.map(e=>e.sessionId)}});return}case`fs.read`:{let t=y.getSessionExecutionContext(e.payload.sessionId),n=await u.readFile(t.projectPath,e.payload.path);await y.emitExternalEvent({provider:t.provider,sessionId:e.payload.sessionId,projectId:t.projectId,type:`file.changed`,raw:{path:n.path,content:n.content}});return}case`fs.diff`:{let t=y.getSessionExecutionContext(e.payload.sessionId),n=await u.diffFile(t.projectPath,e.payload.path,e.payload.baseContent??``);await y.emitExternalEvent({provider:t.provider,sessionId:e.payload.sessionId,projectId:t.projectId,type:`file.diff.ready`,raw:{path:n.path,diff:n.diff,currentContent:n.currentContent}});return}default:{let t=e;throw Error(`Unhandled command: ${JSON.stringify(t)}`)}}},w=async(e,t,n)=>{await C(e,t,n)},T=async e=>{r.log.warn({deviceId:e.deviceId,rawCommand:e.rawCommand,err:e.error},`ws command failed`);let t=typeof e.parsedInput?.commandId==`string`?e.parsedInput.commandId:void 0,n=typeof e.parsedInput?.type==`string`?e.parsedInput.type:void 0;l.sendSystemMessage(e.clientId,{type:`command.error`,commandId:t,commandType:n,message:String(e.error)}),await y.emitExternalEvent({provider:`codex`,sessionId:`system`,type:`error.runtime`,raw:{message:String(e.error),source:`ws.command`}})},E=1e3,D=new Map,O=new Map,k=(e,t)=>`${e}::${t}`,A=e=>e.purpose===`detail_view`&&e.bootstrapMode===`readable`,j=(e,t)=>{let n=k(e,t),r=D.get(n);D.delete(n);let i=O.get(n);i&&(clearTimeout(i.timer),O.delete(n)),(r||i)&&BA(`readable.state.cleared`,{clientId:e,sessionId:t,hadState:!!r,previousState:P(r),hadPendingDelta:!!i,pendingDeltaFromRawSeq:i?.previousState.rawEvents[i.previousState.rawEvents.length-1]?.rawSeq??null,pendingDeltaToRawSeq:i?.nextState.rawEvents[i.nextState.rawEvents.length-1]?.rawSeq??null})},M=e=>{let t=`${e}::`;for(let e of D.keys())e.startsWith(t)&&D.delete(e);for(let[e,n]of O)e.startsWith(t)&&(clearTimeout(n.timer),O.delete(e))},N=e=>e?{stateFound:!0,kind:e.kind,sessionId:e.sessionId,projectId:e.projectId,provider:e.provider,detailLevel:e.detailLevel,rawEventCount:e.rawEvents.length,firstRawSeq:e.rawEvents[0]?.rawSeq??null,lastRawSeq:e.rawEvents[e.rawEvents.length-1]?.rawSeq??null,timelineItemCount:e.timelineItems.length,pendingApprovalCount:e.pendingApprovals.length,pendingUserInputCount:e.pendingUserInputs.length}:{stateFound:!1},P=e=>e?e.kind===`ready`?N(e):{stateFound:!0,kind:e.kind,sessionId:e.sessionId,queuedEnvelopeCount:e.queuedEnvelopes.length,previousReadyState:N(e.previousReadyState)}:{stateFound:!1},ee=(e,t,n,r)=>{let i=new Set(n.filter(A).map(e=>e.sessionId));if(r)for(let n of t)i.has(n.sessionId)||j(e,n.sessionId);for(let t of n)A(t)||j(e,t.sessionId)},te=e=>{let t=k(e.clientId,e.sessionId),n=D.get(t),r=O.get(t);return r&&(clearTimeout(r.timer),O.delete(t)),D.set(t,jA(e.sessionId,D.get(t))),BA(`readable.bootstrap.started`,{clientId:e.clientId,sessionId:e.sessionId,replacedState:P(n),clearedPendingDelta:!!r}),t},ne=e=>({kind:`ready`,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,rawEvents:[...e.rawEvents],timelineItems:[...e.timelineItems],pendingApprovals:[...e.pendingApprovals],pendingUserInputs:[...e.pendingUserInputs]}),I=e=>{let t=ne(e);D.set(k(e.clientId,e.target.sessionId),t),BA(`readable.state.seeded`,{clientId:e.clientId,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,state:N(t)})},re=(e,t)=>{for(let n of t)A(n)&&te({clientId:e,sessionId:n.sessionId})},L=async(e,t,n)=>{let r=ie(t),i=new Set(r.map(e=>e.sessionId)),a=l.getSubscriptions(e);BA(`stream.subscribe.received`,{clientId:e,replace:n,incomingSubscriptionCount:t.length,dedupedSubscriptionCount:r.length,subscriptions:r.map(e=>({sessionId:e.sessionId,projectId:e.projectId??null,purpose:e.purpose??null,detailLevel:e.detailLevel??null,bootstrapMode:e.bootstrapMode??null,cursorKind:e.cursor.kind,rawSeq:e.cursor.kind===`raw_seq`?e.cursor.rawSeq:null}))}),re(e,r);for(let t of i)l.pauseSession(e,t);l.replaceSubscriptions(e,r,n),ee(e,a,r,n);try{for(let t of r)try{await ae(e,t)}catch(n){throw A(t)&&ve({clientId:e,sessionId:t.sessionId}),n}}finally{for(let t of i)l.resumeSession(e,t)}},ie=e=>{let t=new Map;for(let n of e)t.set(n.sessionId,n);return[...t.values()]},ae=async(e,t)=>{let n=await R(t);if(n.bootstrapMode===`readable`){if(t.cursor.kind===`all`){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`all`,requestedRawSeq:null,decision:`snapshot`,reason:`readable_bootstrap_snapshot`}),await Te(e,n,`readable_bootstrap_snapshot`);return}let r=await y.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:t.cursor.rawSeq,decision:`snapshot`,reason:`readable_empty_history_snapshot`,rangeMin:null,rangeMax:null}),await Te(e,n,`readable_empty_history_snapshot`);return}let i=t.cursor.rawSeq,a=Math.max(0,r.min-1);if(i<a||i>r.max){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`snapshot`,reason:`readable_cursor_out_of_range_snapshot`,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a}),await Te(e,n,`readable_cursor_out_of_range_snapshot`);return}let o=n.status===`running`?`readable_cursor_resumed_delta`:`readable_session_idle_delta`;BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`delta`,reason:o,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a}),await Ce(e,n,i,o);return}if(t.cursor.kind===`all`){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`all`,requestedRawSeq:null,decision:`snapshot`,reason:`cursor_all`}),await we(e,n,`cursor_all`);return}let r=await y.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:t.cursor.rawSeq,decision:`snapshot`,reason:`empty_history_snapshot`,rangeMin:null,rangeMax:null}),await we(e,n,`empty_history_snapshot`);return}let i=t.cursor.rawSeq,a=Math.max(0,r.min-1);if(i<a||i>r.max){BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`snapshot`,reason:`cursor_out_of_range_snapshot`,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a}),await we(e,n,`cursor_out_of_range_snapshot`);return}let o=await y.getProjectSessionRawEventsSinceSeq(n.projectId,n.sessionId,i,2**53-1),s=o[o.length-1]?.rawSeq??i;BA(`stream.subscribe.decision`,{clientId:e,sessionId:n.sessionId,projectId:n.projectId,provider:n.provider,purpose:t.purpose??null,detailLevel:n.detailLevel,bootstrapMode:n.bootstrapMode,targetStatus:n.status,cursorKind:`raw_seq`,requestedRawSeq:i,decision:`delta`,reason:n.status===`running`?`cursor_resumed_delta`:`session_idle_delta`,rangeMin:r.min,rangeMax:r.max,minExpectedCursor:a,backlogCount:o.length,backlogFirstRawSeq:o[0]?.rawSeq??null,backlogLastRawSeq:s}),l.sendStreamMessage(e,Ae({provider:n.provider,sessionId:n.sessionId,projectId:n.projectId,decision:`delta`,reason:n.status===`running`?`cursor_resumed_delta`:`session_idle_delta`,fromRawSeq:i,toRawSeq:s}));for(let t of o)l.sendStreamMessage(e,t)},R=async e=>{let t=e.sessionId;if(!t)throw Error(`session.stream.subscribe requires sessionId`);let n=e.projectId?.trim()??``;if(n){let r=await y.getProjectSessionSummary(n,t);if(!r)throw mS(n,t);let i={sessionId:t,projectId:n,provider:r.provider,status:r.status,detailLevel:e.detailLevel??`full`,purpose:e.purpose??null,bootstrapMode:e.bootstrapMode??`stream`};return BA(`stream.subscribe.target.resolved`,{sessionId:t,requestedProjectId:n,resolvedProjectId:i.projectId,purpose:i.purpose,detailLevel:i.detailLevel,bootstrapMode:i.bootstrapMode,targetProvider:i.provider,targetStatus:i.status,resolvedViaExecutionContext:!1,summary:VA(r)}),i}let r=y.getSessionExecutionContext(t),i=await y.getProjectSessionSummary(r.projectId,t),a={sessionId:t,projectId:r.projectId,provider:i?.provider??r.provider,status:i?.status??`idle`,detailLevel:e.detailLevel??`full`,purpose:e.purpose??null,bootstrapMode:e.bootstrapMode??`stream`};return BA(`stream.subscribe.target.resolved`,{sessionId:t,requestedProjectId:null,resolvedProjectId:a.projectId,purpose:a.purpose,detailLevel:a.detailLevel,bootstrapMode:a.bootstrapMode,targetProvider:a.provider,targetStatus:a.status,resolvedViaExecutionContext:!0,executionContextProvider:r.provider,summary:VA(i)}),a},oe=async e=>{let t=await y.getProjectSessionRawEventsCompacted(e.projectId,e.sessionId,2**53-1),n=kC(t,e.detailLevel),r=t[t.length-1]?.rawSeq,i=e.purpose===`detail_view`?ue(af(e.sessionId,n,[])):[],a=e.purpose===`detail_view`?bo({rawEvents:n,messages:i}):{timelineItems:[],consumedMessageIds:[]},o=e.purpose===`detail_view`?se(e.sessionId,n):{pendingApprovals:[],pendingUserInputs:[]};return{compactedRawEvents:t,filteredRawEvents:n,lastRawSeq:r,slimReadableProjection:a,pendingApprovals:o.pendingApprovals,pendingUserInputs:o.pendingUserInputs}},se=(e,t)=>{let n=rf(e,t),r=new Map,i=new Map;for(let e of n){if(e.type===`tool.permission.requested`){let t=le(e.payload.raw),n=z(t,`requestId`,`request_id`);if(!n)continue;let i=le(t.rawParams??t.raw_params),a=le(i.networkApprovalContext??i.network_approval_context);r.set(n,{requestId:n,sessionId:e.sessionId,...z(t,`toolName`,`tool_name`)?{toolName:z(t,`toolName`,`tool_name`)}:{},...z(t,`reason`)?{reason:z(t,`reason`)}:{},...z(i,`command`)?{command:z(i,`command`)}:{},...z(i,`cwd`)?{cwd:z(i,`cwd`)}:{},...z(i,`grantRoot`,`grant_root`)?{grantRoot:z(i,`grantRoot`,`grant_root`)}:{},...z(a,`host`)?{networkHost:z(a,`host`)}:{},...z(a,`protocol`)?{networkProtocol:z(a,`protocol`)}:{},...z(t,`itemId`,`item_id`)?{itemId:z(t,`itemId`,`item_id`)}:{},...z(t,`turnId`,`turn_id`)?{turnId:z(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`tool.permission.resolved`){let t=z(le(e.payload.raw),`requestId`,`request_id`);t&&r.delete(t);continue}if(e.type===`user.input.requested`){let t=le(e.payload.raw),n=z(t,`requestId`,`request_id`);if(!n)continue;i.set(n,{requestId:n,sessionId:e.sessionId,questions:ce(t.questions),...z(t,`itemId`,`item_id`)?{itemId:z(t,`itemId`,`item_id`)}:{},...z(t,`turnId`,`turn_id`)?{turnId:z(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`user.input.resolved`){let t=z(le(e.payload.raw),`requestId`,`request_id`);t&&i.delete(t)}}return{pendingApprovals:[...r.values()],pendingUserInputs:[...i.values()]}},ce=e=>{if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=le(n),r=z(e,`id`),i=z(e,`header`),a=z(e,`question`);if(!r||!i||!a)continue;let o=Array.isArray(e.options)?e.options.map(e=>{let t=le(e),n=z(t,`label`);if(!n)return null;let r=z(t,`description`)??n,i=z(t,`markdown`);return{label:n,description:r,...i?{markdown:i}:{}}}).filter(e=>e!==null):null;t.push({id:r,header:i,question:a,multiSelect:e.multiSelect===!0,isOther:e.isOther===!0,isSecret:e.isSecret===!0,options:o})}return t},le=e=>typeof e==`object`&&e?e:{},z=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}},ue=e=>e.filter(e=>!(e.kind===`system`&&e.title===`Turn Usage`)),de=e=>{let t=e.target.purpose===`detail_view`?ue(af(e.target.sessionId,e.filteredRawEvents,[])):[],n=e.target.purpose===`detail_view`?bo({rawEvents:e.filteredRawEvents,messages:t}):{timelineItems:[],consumedMessageIds:[]},r=e.target.purpose===`detail_view`?se(e.target.sessionId,e.filteredRawEvents):{pendingApprovals:[],pendingUserInputs:[]};return{rawEvents:[...e.filteredRawEvents],timelineItems:n.timelineItems,pendingApprovals:r.pendingApprovals,pendingUserInputs:r.pendingUserInputs}},fe=e=>ne({target:e.target,...de(e)}),pe=(e,t)=>{let n=kC(Lf([...e.rawEvents,t]),e.detailLevel),r=bo({rawEvents:n,messages:ue(af(e.sessionId,n,[]))}),i=se(e.sessionId,n);return{...e,rawEvents:n,timelineItems:r.timelineItems,pendingApprovals:i.pendingApprovals,pendingUserInputs:i.pendingUserInputs}},me=(e,t)=>{let n=new Map(e.map(e=>[e.requestId,JSON.stringify(e)])),r=new Map(t.map(e=>[e.requestId,JSON.stringify(e)]));return{upserts:t.filter(e=>n.get(e.requestId)!==r.get(e.requestId)),removals:e.filter(e=>!r.has(e.requestId)).map(e=>e.requestId)}},he=(e,t)=>{let n=new Map(e.map(e=>[e.requestId,JSON.stringify(e)])),r=new Map(t.map(e=>[e.requestId,JSON.stringify(e)]));return{upserts:t.filter(e=>n.get(e.requestId)!==r.get(e.requestId)),removals:e.filter(e=>!r.has(e.requestId)).map(e=>e.requestId)}},ge=(e,t,n,r)=>{let i={},a=rf(e,[t]),o=a.find(e=>e.type===`thread.title.updated`),s=a.find(e=>e.type===`turn.started`||e.type===`turn.completed`||e.type===`turn.failed`);if(o){let e=z(le(o.payload.raw),`title`);e&&(i.title=e)}return s&&(i.updatedAt=s.ts,i.status=s.type===`turn.started`?`running`:`idle`,i.interactionLockReason=void 0),n.pendingApprovals.length!==r.pendingApprovals.length&&(i.pendingApprovals=r.pendingApprovals.length),n.pendingUserInputs.length!==r.pendingUserInputs.length&&(i.pendingUserInputs=r.pendingUserInputs.length),n.pendingApprovals.length+n.pendingUserInputs.length!==r.pendingApprovals.length+r.pendingUserInputs.length&&(i.pendingActions=r.pendingApprovals.length+r.pendingUserInputs.length),Object.keys(i).length>0?i:void 0},_e=e=>{let t,n,r;try{t=Fs(e.previousState.timelineItems,e.nextState.timelineItems),n=me(e.previousState.pendingApprovals,e.nextState.pendingApprovals),r=he(e.previousState.pendingUserInputs,e.nextState.pendingUserInputs)}catch(t){throw BA(`stream.readable.delta.build.error`,{sessionId:e.previousState.sessionId,projectId:e.previousState.projectId,previousState:N(e.previousState),nextState:N(e.nextState),sessionSummaryKeys:e.sessionSummary?Object.keys(e.sessionSummary):[],errorMessage:t instanceof Error?t.message:String(t)}),t}if(t.upserts.length===0&&t.removals.length===0&&t.textDeltaPatches.length===0&&n.upserts.length===0&&n.removals.length===0&&r.upserts.length===0&&r.removals.length===0&&!e.sessionSummary)return null;let i=e.nextState.rawEvents[e.nextState.rawEvents.length-1]?.rawSeq;return i===void 0?null:{provider:e.previousState.provider,sessionId:e.previousState.sessionId,projectId:e.previousState.projectId,fromRawSeq:e.previousState.rawEvents[e.previousState.rawEvents.length-1]?.rawSeq,toRawSeq:i,timelineUpserts:t.upserts,timelineRemovals:t.removals,timelineTextDeltaPatches:t.textDeltaPatches,pendingApprovalUpserts:n.upserts,pendingApprovalRemovals:n.removals,pendingUserInputUpserts:r.upserts,pendingUserInputRemovals:r.removals,sessionSummary:e.sessionSummary}},ve=e=>{let t=k(e.clientId,e.sessionId),n=D.get(t);if(!n||n.kind!==`bootstrapping`)return;let r=l.getSubscriptions(e.clientId).find(t=>t.sessionId===e.sessionId),i=r?.projectId?.trim()??``,a=MA(n,pe);if(!a.previousReadyState||!r||!A(r)||i&&i!==a.previousReadyState.projectId||(r.detailLevel??`full`)!==a.previousReadyState.detailLevel||!a.nextReadyState){BA(`readable.bootstrap.recovery.discarded`,{clientId:e.clientId,sessionId:e.sessionId,bootstrapState:P(n),currentSubscriptionFound:!!r,currentSubscriptionProjectId:i||null,currentSubscriptionDetailLevel:r?.detailLevel??null,previousReadyState:N(a.previousReadyState),nextReadyState:N(a.nextReadyState)}),j(e.clientId,e.sessionId);return}if(D.set(t,a.nextReadyState),a.replayedEnvelopes.length===0){BA(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:0,nextReadyState:N(a.nextReadyState)});return}let o,s=a.previousReadyState;for(let t of a.replayedEnvelopes){let n=pe(s,t),r=ge(e.sessionId,t,s,n);r&&(o={...o??{},...r}),s=n}let c=_e({previousState:a.previousReadyState,nextState:a.nextReadyState,sessionSummary:o});if(!c){BA(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:N(a.nextReadyState),emittedDelta:!1});return}BA(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:N(a.nextReadyState),emittedDelta:!0,deltaFromRawSeq:c.fromRawSeq??null,deltaToRawSeq:c.toRawSeq}),l.sendSessionMessageToClient(e.clientId,a.previousReadyState.sessionId,Ne(c))},ye=e=>{let t=_e({previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary});t&&l.sendSessionMessageToClient(e.clientId,e.previousState.sessionId,Ne(t))},be=(e,t)=>{let n=k(e,t),r=O.get(n);r&&(clearTimeout(r.timer),O.delete(n),ye({clientId:e,previousState:r.previousState,nextState:r.nextState,sessionSummary:r.sessionSummary}))},xe=t=>{if(e.readableLiveDeltaCoalesceMs<=0){ye(t);return}let n=k(t.clientId,t.previousState.sessionId),r=O.get(n);if(r){let e=NA({existing:{previousState:r.previousState,nextState:r.nextState,sessionSummary:r.sessionSummary},next:{previousState:t.previousState,nextState:t.nextState,sessionSummary:t.sessionSummary}});r.previousState=e.previousState,r.nextState=e.nextState,r.sessionSummary=e.sessionSummary;return}let i=setTimeout(()=>{be(t.clientId,t.previousState.sessionId)},e.readableLiveDeltaCoalesceMs);i.unref?.(),O.set(n,{clientId:t.clientId,sessionId:t.previousState.sessionId,previousState:t.previousState,nextState:t.nextState,sessionSummary:t.sessionSummary,timer:i})},Se=e=>{let t=l.getClientSubscriptionsForSession(e.sessionId,`detail_view`);if(t.length!==0)for(let{clientId:n,subscription:r}of t){if(!A(r))continue;let t=k(n,e.sessionId),i=D.get(t);if(!i)continue;if(i.kind===`bootstrapping`){i.queuedEnvelopes.push(e);continue}let a=pe(i,e);D.set(t,a),xe({clientId:n,previousState:i,nextState:a,sessionSummary:ge(e.sessionId,e,i,a)})}},Ce=async(e,t,n,r)=>{let i=k(e,t.sessionId),a=await y.getProjectSessionRawEvents(t.projectId,t.sessionId,2**53-1),{baseFilteredRawEvents:o,nextFilteredRawEvents:s}=AA({rawEvents:a,detailLevel:t.detailLevel,cursorRawSeq:n}),c=fe({target:t,filteredRawEvents:o}),u=fe({target:t,filteredRawEvents:s}),d=D.get(i),f=kA(d?.kind===`bootstrapping`?d.queuedEnvelopes:[],u.rawEvents[u.rawEvents.length-1]?.rawSeq);for(let e of f)u=pe(u,e);BA(`stream.readable.resume.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,reason:r,cursorRawSeq:n,rawEventCount:a.length,baseFilteredRawEventCount:o.length,nextFilteredRawEventCount:s.length,bootstrapState:P(d),bufferedEnvelopeCount:f.length,previousState:N(c),nextState:N(u)}),I({clientId:e,target:t,rawEvents:u.rawEvents,timelineItems:u.timelineItems,pendingApprovals:u.pendingApprovals,pendingUserInputs:u.pendingUserInputs});let p=u.rawEvents[u.rawEvents.length-1]?.rawSeq??n;l.sendStreamMessage(e,Ae({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`delta`,reason:r,fromRawSeq:n,...p===void 0?{}:{toRawSeq:p}}));let m=_e({previousState:c,nextState:u});BA(`stream.readable.resume.delta`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,reason:r,cursorRawSeq:n,emittedDelta:!!m,deltaFromRawSeq:m?.fromRawSeq??n,deltaToRawSeq:m?.toRawSeq??p??null,timelineUpsertCount:m?.timelineUpserts.length??0,timelineRemovalCount:m?.timelineRemovals.length??0,timelineTextDeltaPatchCount:m?.timelineTextDeltaPatches.length??0,pendingApprovalUpsertCount:m?.pendingApprovalUpserts.length??0,pendingUserInputUpsertCount:m?.pendingUserInputUpserts.length??0}),l.sendSessionMessageToClient(e,t.sessionId,Ne(m??{provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,fromRawSeq:n,toRawSeq:p,timelineUpserts:[],timelineRemovals:[]}))},we=async(e,t,n)=>{let r=`snap_${kx(12)}`,{compactedRawEvents:i,filteredRawEvents:a,lastRawSeq:o,slimReadableProjection:s,pendingApprovals:c,pendingUserInputs:u}=await oe(t);l.sendStreamMessage(e,Ae({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,...o===void 0?{}:{toRawSeq:o}}));let d=De(a,E),f=t.purpose===`detail_view`?Oe(s.timelineItems,E):[],p=t.purpose===`detail_view`?`raw+readable`:`raw`,m=Math.max(d.length,f.length,1);BA(`stream.snapshot.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,reason:n,snapshotId:r,snapshotFormat:p,compactedEventCount:i.length,filteredEventCount:a.length,readableTimelineItemCount:s.timelineItems.length,totalChunks:m,firstRawSeq:a[0]?.rawSeq??null,lastRawSeq:o??null});for(let n=0;n<m;n+=1){let i=d[n]??[],a=f[n]??[];l.sendStreamMessage(e,je({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:m,events:i,timelineItems:t.purpose===`detail_view`?a:void 0}))}},Te=async(e,t,n)=>{let r=`snap_${kx(12)}`,i=te({clientId:e,sessionId:t.sessionId});try{let{compactedRawEvents:a,filteredRawEvents:o,lastRawSeq:s,slimReadableProjection:c,pendingApprovals:u,pendingUserInputs:d}=await oe(t),f=l.getSubscriptions(e).find(e=>e.sessionId===t.sessionId),p=f?.projectId?.trim()??``;if(!f||!A(f)||p&&p!==t.projectId||(f.detailLevel??`full`)!==t.detailLevel){j(e,t.sessionId);return}let m=ne({target:t,rawEvents:o,timelineItems:c.timelineItems,pendingApprovals:u,pendingUserInputs:d}),h=D.get(i),g=kA(h?.kind===`bootstrapping`?h.queuedEnvelopes:[],s);for(let e of g)m=pe(m,e);I({clientId:e,target:t,rawEvents:m.rawEvents,timelineItems:m.timelineItems,pendingApprovals:m.pendingApprovals,pendingUserInputs:m.pendingUserInputs});let _=m.rawEvents[m.rawEvents.length-1]?.rawSeq;l.sendStreamMessage(e,Ae({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,..._===void 0?{}:{toRawSeq:_}}));let v=Oe(m.timelineItems,E),y=Math.max(v.length,1);BA(`stream.snapshot.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,bootstrapMode:t.bootstrapMode,reason:n,snapshotId:r,snapshotFormat:`readable`,compactedEventCount:a.length,filteredEventCount:m.rawEvents.length,readableTimelineItemCount:m.timelineItems.length,bufferedReadableDeltaCount:g.length,totalChunks:y,firstRawSeq:m.rawEvents[0]?.rawSeq??null,lastRawSeq:_??null});for(let n=0;n<y;n+=1)l.sendStreamMessage(e,Me({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:y,timelineItems:v[n]??[],pendingApprovals:n===0?m.pendingApprovals:void 0,pendingUserInputs:n===0?m.pendingUserInputs:void 0}))}catch(n){throw ve({clientId:e,sessionId:t.sessionId}),n}},Ee=async e=>{let t=l.getClientSubscriptionsForSession(e.sessionId,`detail_view`);for(let{clientId:n,subscription:r}of t){let t=r.projectId?.trim()??``;if(!(t&&t!==e.projectId)){A(r)&&te({clientId:n,sessionId:e.sessionId}),l.pauseSession(n,e.sessionId);try{let t=await R(r);t.bootstrapMode===`readable`?await Te(n,t,e.reason):await we(n,t,e.reason)}catch(t){throw A(r)&&ve({clientId:n,sessionId:e.sessionId}),t}finally{l.resumeSession(n,e.sessionId)}}}},De=(e,t)=>ke(e,t),Oe=(e,t)=>ke(e,t),ke=(e,t)=>{if(e.length===0)return[[]];let n=Math.max(1,Math.floor(t)),r=[];for(let t=0;t<e.length;t+=n)r.push(e.slice(t,t+n));return r},Ae=e=>({v:`1.0`,kind:`session.stream.sync`,type:`session.stream.sync`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`stream_sync_${kx(12)}`,ts:new Date().toISOString(),payload:{raw:{decision:e.decision,reason:e.reason,snapshotId:e.snapshotId,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}}}),je=e=>({v:`1.0`,kind:`session.stream.snapshot.chunk`,type:`session.stream.snapshot.chunk`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`stream_snapshot_${e.snapshotId}_${e.chunkIndex}`,ts:new Date().toISOString(),payload:{raw:{snapshotId:e.snapshotId,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,events:e.events},...e.timelineItems?{readable:{snapshotId:e.snapshotId,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,...e.timelineItems?{timelineItems:e.timelineItems}:{}}}:{}}}),Me=e=>({v:`1.0`,kind:`session.readable.snapshot.chunk`,type:`session.readable.snapshot.chunk`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`readable_snapshot_${e.snapshotId}_${e.chunkIndex}`,ts:new Date().toISOString(),payload:{readable:{snapshotId:e.snapshotId,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,timelineItems:e.timelineItems,...e.pendingApprovals?{pendingApprovals:e.pendingApprovals}:{},...e.pendingUserInputs?{pendingUserInputs:e.pendingUserInputs}:{}}}}),Ne=e=>({v:`1.0`,kind:`session.readable.delta`,type:`session.readable.delta`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`readable_delta_${e.sessionId}_${e.toRawSeq}`,ts:new Date().toISOString(),payload:{readable:{...e.fromRawSeq===void 0?{}:{fromRawSeq:e.fromRawSeq},toRawSeq:e.toRawSeq,timelineUpserts:e.timelineUpserts,timelineRemovals:e.timelineRemovals,...e.timelineTextDeltaPatches&&e.timelineTextDeltaPatches.length>0?{timelineTextDeltaPatches:e.timelineTextDeltaPatches}:{},...e.pendingApprovalUpserts&&e.pendingApprovalUpserts.length>0?{pendingApprovalUpserts:e.pendingApprovalUpserts}:{},...e.pendingApprovalRemovals&&e.pendingApprovalRemovals.length>0?{pendingApprovalRemovals:e.pendingApprovalRemovals}:{},...e.pendingUserInputUpserts&&e.pendingUserInputUpserts.length>0?{pendingUserInputUpserts:e.pendingUserInputUpserts}:{},...e.pendingUserInputRemovals&&e.pendingUserInputRemovals.length>0?{pendingUserInputRemovals:e.pendingUserInputRemovals}:{},...e.sessionSummary?{sessionSummary:e.sessionSummary}:{}}}}),Pe=e=>({v:`1.0`,kind:`session.external.update`,type:`session.external.update`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`session_external_update_${kx(12)}`,ts:new Date().toISOString(),payload:{raw:{updatedAt:e.updatedAt,status:e.status,interactionLockReason:e.interactionLockReason,refreshMode:e.refreshMode,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq,historyUpdated:e.historyUpdated,statusChanged:e.statusChanged}}}),Fe=async(e,t,n=300,r,i=`full`,a=`http`)=>HA({sessionManager:y,projectId:e,sessionId:t,limit:n,fromRawSeqExclusive:r,detailLevel:i,requestSource:a}),Ie=t=>t.headers[`x-api-key`]===e.apiKey,Le=e=>{if(e==null)return e;if(typeof e==`string`){let t=Re(e);return t===void 0?ze(e,a):Ve(Be(t))}if(Buffer.isBuffer(e)){let t=e.toString(`utf8`),n=Re(t);return n===void 0?ze(t,a):Ve(Be(n))}return typeof e==`object`?Ve(Be(e)):String(e)},Re=e=>{try{return JSON.parse(e)}catch{return}},ze=(e,t)=>e.length<=t?e:`${e.slice(0,t)}...<truncated>`,Be=e=>{if(Array.isArray(e))return e.map(e=>Be(e));if(e&&typeof e==`object`){let t=e,n={};for(let[e,r]of Object.entries(t)){let t=e.toLowerCase();t.includes(`token`)||t.includes(`secret`)||t.includes(`password`)||t.includes(`authorization`)?n[e]=`[REDACTED]`:n[e]=Be(r)}return n}return e},Ve=e=>{let t=He(e);return t===o?t:t.length<=a?e:{truncated:!0,preview:ze(t,a)}},He=e=>{try{return JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)}catch{return o}},Ue=(e,t)=>{let n=qe(e.headers.authorization);if(!n)return t.code(401).send({error:`Missing bearer token`}),null;try{return s.verifyAccessToken(n)}catch(e){return t.code(401).send({error:String(e)}),null}},We=(e,t)=>{let n=e??`all`;return[`running`,`idle`,`all`].includes(n)?n:(t.code(400).send({error:`Invalid status filter`}),null)},Ge=e=>{let t=e?.trim().toLowerCase();return t===`true`||t===`1`},Ke=(e,t)=>{let n=e.params,r=e.query,i=Ma.safeParse(n.provider);return i.success?{provider:i.data,projectId:typeof r.projectId==`string`?r.projectId:void 0,agentVersion:typeof r.agentVersion==`string`?r.agentVersion:void 0}:(t.code(400).send({error:`Invalid provider`}),null)},qe=e=>{if(!e)return null;let[t,n]=e.split(` `);return t?.toLowerCase()!==`bearer`||!n?null:n},Je=e=>{try{return new URL(e,`http://localhost`).searchParams.get(`token`)}catch{return null}},Ye=e.httpsEnabled?e.httpsPort:e.port,Xe=e.httpsEnabled?`https`:`http`,Ze=vm(),Qe=e=>e?.trim()||Ze||`Gateway`;await r.listen({host:e.host,port:Ye});let $e=r.server.address(),et=typeof $e==`object`&&$e?$e.port:Ye;if(r.log.info({host:e.host,port:et,protocol:Xe,machineName:Ze},KA(Xe,e.host,et)),e.relayEnabled&&(_=new HD({gatewayId:e.gatewayId,machineName:Ze,relayUrl:e.relayUrl,relayTransportSecurityLevel:e.relayTransportSecurityLevel,relayGatewayAccessToken:e.relayGatewayAccessToken,resolveRelayGatewayAccessToken:e.relayGatewayAccessToken.trim()?void 0:()=>qD({gatewayId:e.gatewayId,relayUrl:e.relayUrl,gatewayIdentity:v.identity,privateKeyPem:v.privateKeyPem}),gatewayIdentity:v.identity,directBaseUrls:wm({protocol:Xe,host:e.host,port:et}),logger:r.log,onFrame:async e=>{await S.handleFrame(e)}}),_.start()),e.bootstrapPairingCodeOnStart)try{let t=await s.createPairingCode(e.pairingCodeTtlSeconds);g={code:t.code,expiresAt:t.expiresAt},await c.record({ts:new Date().toISOString(),action:`pairing.start`,detail:{expiresAt:t.expiresAt,source:`startup`,ttlSeconds:e.pairingCodeTtlSeconds}}),r.log.info({expiresAt:t.expiresAt},`startup pairing code generated`)}catch(e){r.log.error({err:e},`failed to generate startup pairing code`)}return await x.start(),{protocol:Xe,listenPort:et,machineName:Ze,gatewayIdentity:v.identity,close:()=>r.close(),getGatewayUpdateInfo:()=>x.getInfo(),requestGatewayUpdate:(e=`console`)=>x.applyUpdate(e),requestCodexAppServerRestart:async(e=`console`)=>y.restartCodexAppServer(),startupPairingCode:g}}function WA(e,t){let n=t;if(!e.httpsEnabled)return(0,Tx.default)({disableRequestLogging:!0,loggerInstance:n});if(!e.tlsKeyPath||!e.tlsCertPath)throw Error(`TLS key/cert path is required when HTTPS is enabled.`);return(0,Tx.default)({disableRequestLogging:!0,loggerInstance:n,https:{key:(0,u.readFileSync)(e.tlsKeyPath),cert:(0,u.readFileSync)(e.tlsCertPath),...e.tlsCaPath?{ca:(0,u.readFileSync)(e.tlsCaPath)}:{}}})}function GA(e,t){let n=process.env.NODE_ENV!==`production`,r=aS.default.destination({dest:e.gatewayLogPath,mkdir:!0,sync:!1}),i=t.logToConsole?aS.default.multistream([{stream:r},{stream:process.stdout}]):r;return{instance:(0,aS.default)({level:n?`debug`:`info`},i),close:()=>{try{r.flushSync()}catch{}r.end()}}}function KA(e,t,n){return`desktop-gateway listening on ${e}://${t}:${n}`}function qA(e,t){if(e&&e!==t)throw fS()}async function JA(e){let t=YA(e.authService,e.refreshToken);e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:XA(t)},`auth refresh attempt`);try{let t=await e.execute(),n=YA(e.authService,e.refreshToken),r=YA(e.authService,t.refreshToken);return e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshedDeviceId:t.deviceId,previousRefreshToken:XA(n),nextRefreshToken:XA(r)},`auth refresh succeeded`),t}catch(t){let n=YA(e.authService,e.refreshToken);throw e.logger?.warn?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:XA(n),error:ZA(t)},`auth refresh failed`),t}}function YA(e,t){return e.inspectRefreshToken?.(t)??{tokenRecordState:`missing`}}function XA(e){return{claimDeviceId:e.claimDeviceId??null,claimExpAt:e.claimExpAt??null,claimIssuedAt:e.claimIssuedAt??null,claimJtiSuffix:QA(e.claimJti),claimType:e.claimType??null,latestActiveTokenCreatedAt:e.latestActiveTokenCreatedAt??null,latestActiveTokenJtiSuffix:QA(e.latestActiveTokenJti),tokenRecordCreatedAt:e.tokenRecordCreatedAt??null,tokenRecordDeviceId:e.tokenRecordDeviceId??null,tokenRecordRevokedAt:e.tokenRecordRevokedAt??null,tokenRecordState:e.tokenRecordState}}function ZA(e){return sS(e)?{code:e.code,message:String(e),status:e.status}:e instanceof Error?{message:e.message,name:e.name}:{message:String(e)}}function QA(e){return e?e.slice(-8):null}async function $A(e,t){try{let n=$u.parse(e);switch(n.method){case`auth.refresh`:{let e=await JA({authService:t.authService,execute:()=>t.authService.refreshAccessToken(n.params.refreshToken),logger:t.logger,refreshToken:n.params.refreshToken,requestedDeviceId:n.params.deviceId??t.relayDeviceId,source:`relay_rpc`});return qA(n.params.deviceId??t.relayDeviceId,e.deviceId),ed.parse({method:n.method,result:e})}case`projects.list`:{let e=await t.sessionManager.listProjects();return ed.parse({method:n.method,result:{projects:e}})}case`gateway.update.get`:{let e=await t.updateService.getOrCheckInfo(`mobile`);return ed.parse({method:n.method,result:e})}case`codex.appServer.restart`:{let e=await t.sessionManager.restartCodexAppServer();return ed.parse({method:n.method,result:e})}case`gateway.update.apply`:{let e=await t.updateService.applyUpdate(n.params.requestedBy??`mobile`);return ed.parse({method:n.method,result:e})}case`projects.discovery.get`:{let e=await t.projectDiscoveryService.getProjects();return ed.parse({method:n.method,result:e})}case`projects.discovery.refresh`:{let e=await t.projectDiscoveryService.refreshProjects();return ed.parse({method:n.method,result:e})}case`projects.create`:{let e=await t.sessionManager.createProject({path:n.params.path,title:n.params.title});return ed.parse({method:n.method,result:{project:e}})}case`projects.delete`:if(!await t.sessionManager.deleteProject(n.params.projectId))throw rj(n.method,`NOT_FOUND`,404,`Project not found`);return ed.parse({method:n.method,result:{removed:!0}});case`workspace.directories.list`:{let e=await t.fsService.listDirectoriesUnrestricted(n.params.path,n.params.limit??200);return ed.parse({method:n.method,result:e})}case`sessions.list`:{let e=await t.sessionManager.listProjectSessions(n.params.projectId,n.params.status??`all`,{syncExternal:n.params.syncExternal});return ed.parse({method:n.method,result:{sessions:e}})}case`sessions.discovery.list`:{let e=await t.projectDiscoveryService.listProjectSessions(n.params.projectPath);return ed.parse({method:n.method,result:e})}case`sessions.get`:{let e=await t.sessionManager.getProjectSessionSummary(n.params.projectId,n.params.sessionId);if(!e)throw rj(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return ed.parse({method:n.method,result:{session:e}})}case`sessions.config.get`:{let e=await t.sessionManager.getProjectSessionConfig(n.params.projectId,n.params.sessionId);if(!e)throw rj(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return ed.parse({method:n.method,result:{session:e}})}case`sessions.history.sync`:{let e=await t.sessionManager.syncProjectSessionHistory(n.params.projectId,n.params.sessionId);return e.historyUpdated&&await t.refreshDetailSessionSnapshots?.({projectId:n.params.projectId,sessionId:n.params.sessionId,reason:`explicit_history_sync`}),ed.parse({method:n.method,result:{session:e.session,rawEventCount:e.rawEvents.length,historyUpdated:e.historyUpdated,statusChanged:e.statusChanged,refreshMode:e.refreshMode,...e.fromRawSeq===void 0?{}:{fromRawSeq:e.fromRawSeq},...e.toRawSeq===void 0?{}:{toRawSeq:e.toRawSeq}}})}case`sessions.rawEvents.list`:{let e=n.params.limit===`all`?2**53-1:n.params.limit,r=await HA({sessionManager:t.sessionManager,projectId:n.params.projectId,sessionId:n.params.sessionId,limit:e,fromRawSeqExclusive:n.params.fromRawSeqExclusive,detailLevel:n.params.detailLevel,requestSource:`rpc`});return ed.parse({method:n.method,result:r})}case`providers.capabilities.get`:{let e=Date.now();t.logger?.info?.({relayDeviceId:t.relayDeviceId??null,rpcMethod:n.method,provider:n.params.provider,projectId:n.params.projectId??null,agentVersion:n.params.agentVersion??null},`relay rpc provider capabilities request started`);try{let r=await t.sessionManager.getProviderCapabilities(n.params.provider,n.params.projectId??void 0,n.params.agentVersion??void 0),i=r&&typeof r==`object`&&!Array.isArray(r)?r:null;return t.logger?.info?.({relayDeviceId:t.relayDeviceId??null,rpcMethod:n.method,provider:n.params.provider,projectId:n.params.projectId??null,agentVersion:n.params.agentVersion??null,durationMs:Date.now()-e,source:typeof i?.source==`string`?i.source:void 0,modelCount:Array.isArray(i?.models)?i.models.length:void 0},`relay rpc provider capabilities request completed`),ed.parse({method:n.method,result:{capabilities:r}})}catch(r){throw t.logger?.warn?.({relayDeviceId:t.relayDeviceId??null,rpcMethod:n.method,provider:n.params.provider,projectId:n.params.projectId??null,agentVersion:n.params.agentVersion??null,durationMs:Date.now()-e,err:r},`relay rpc provider capabilities request failed`),r}}case`agents.config.get`:{let e=await t.sessionManager.getAgentConfig(n.params.provider,{projectId:n.params.projectId??void 0,agentVersion:n.params.agentVersion??void 0});return ed.parse({method:n.method,result:e})}case`devices.list`:return ed.parse({method:n.method,result:{devices:t.authService.listDevices()}});case`devices.revoke`:if(!await t.authService.revokeDevice(n.params.deviceId))throw rj(n.method,`NOT_FOUND`,404,`Device ${n.params.deviceId} not found`);return ed.parse({method:n.method,result:{revoked:!0}});default:{let e=n;throw rj(void 0,`INTERNAL`,500,`Unhandled relay RPC method: ${JSON.stringify(e)}`)}}}catch(e){throw ej(e)}}function ej(e){if(sS(e))switch(e.code){case`REFRESH_TOKEN_REVOKED`:case`DEVICE_REVOKED`:case`REFRESH_TOKEN_DEVICE_MISMATCH`:return rj(`UNAUTHORIZED`,e.status,String(e),e.details);case`PROJECT_NOT_FOUND`:case`DISCOVERED_PROJECT_NOT_FOUND`:case`PROJECT_SESSION_NOT_FOUND`:case`SESSION_NOT_FOUND`:return rj(`NOT_FOUND`,e.status,String(e),e.details);case`SESSION_TURN_CONFLICT`:case`PROJECT_DELETE_CONFLICT`:case`CODEX_APP_SERVER_RESTART_CONFLICT`:return rj(`BAD_REQUEST`,e.status,String(e),e.details);default:return rj(e.status>=500?`INTERNAL`:`BAD_REQUEST`,e.status,String(e),e.details)}let t=nd.safeParse(e);if(t.success)return t.data;let n=td.safeParse(e);if(n.success)return rj(void 0,n.data.code,n.data.status,n.data.message,n.data.details);if(e&&typeof e==`object`&&`code`in e&&`status`in e&&`message`in e&&typeof e.code==`string`&&typeof e.status==`number`&&typeof e.message==`string`){let t=e;return rj(t.code,t.status,t.message,t.details)}let r=String(e);return e instanceof Error&&e.name===`ZodError`?rj(`BAD_REQUEST`,400,r):ij(e)?rj(`UNAUTHORIZED`,401,r):aj(r)?rj(`BAD_REQUEST`,400,r):rj(`INTERNAL`,500,r)}function tj(e,t,n,r){if(!r)return t;let i={gatewayId:t.gatewayId,deviceId:t.deviceId,mobilePublicKey:r.publicKey,pairingContext:{pairingCode:nj(n),signedAt:new Date().toISOString()}};return{...t,gatewayIdentity:e.identity,pairingConfirmation:lp(e.identity,e.privateKeyPem,i)}}function nj(e){return e.replace(/\s+/gu,``).toUpperCase()}function rj(e,t,n,r,i){let a=typeof t==`string`,o=a?e:void 0,s=a?t:e,c=a?n:t,l=a?r:n,u=a?i:r;return nd.parse({...o?{method:o}:{},code:s,status:c,message:l,...u===void 0?{}:{details:u}})}function ij(e){return sS(e)&&(e.code===`REFRESH_TOKEN_REVOKED`||e.code===`DEVICE_REVOKED`||e.code===`REFRESH_TOKEN_DEVICE_MISMATCH`)||CS(e)}function aj(e){let t=e.trim();return t===`Invalid provider`||t.startsWith(`Invalid provider:`)||t.startsWith(`Project path must be absolute:`)||t.startsWith(`Project path does not exist:`)||t.startsWith(`Project path is not a directory:`)||t.startsWith(`ZodError:`)}function oj(e){return e instanceof Error?e.stack??`${e.name}: ${e.message}`:(0,b.inspect)(e,{depth:6,breakLength:120})}async function sj(e){let t=await vp({configPath:e.configPath,ensureConfigFile:!0});Sp(t.config);let n=await UA(t.config,{logToConsole:e.logToConsole,onUpdatePrepared:async e=>{lj({type:`worker.update.prepared`,payload:e})}});lj({type:`worker.ready`,payload:cj(n)});let r=null,i=e=>r||(r=Promise.resolve(n.close?.()).catch(e=>{console.error(`[gateway] worker shutdown failed: ${String(e)}`)}).finally(()=>{process.exit(e)}),r);process.on(`message`,e=>{let t=uj(e);if(t)switch(t.type){case`supervisor.request`:a(t);return;case`supervisor.shutdown`:i(0);return}}),process.on(`disconnect`,()=>{i(0)}),process.on(`SIGINT`,()=>{i(0)}),process.on(`SIGTERM`,()=>{i(0)}),process.on(`uncaughtException`,e=>{console.error(`[gateway] worker uncaught exception: ${oj(e)}`),i(1)}),process.on(`unhandledRejection`,e=>{console.error(`[gateway] worker unhandled rejection: ${oj(e)}`),i(1)});async function a(e){try{switch(e.method){case`gateway.update.apply`:{if(!n.requestGatewayUpdate)throw Error(`gateway update is unavailable`);let t=await n.requestGatewayUpdate(e.requestedBy);lj({type:`worker.response`,id:e.id,method:e.method,ok:!0,result:t});return}case`codex.appServer.restart`:{if(!n.requestCodexAppServerRestart)throw Error(`codex app-server restart is unavailable`);let t=await n.requestCodexAppServerRestart(e.requestedBy);lj({type:`worker.response`,id:e.id,method:e.method,ok:!0,result:t});return}}}catch(t){lj({type:`worker.response`,id:e.id,method:e.method,ok:!1,error:String(t)})}}await new Promise(()=>{})}function cj(e){return{protocol:e.protocol,listenPort:e.listenPort,machineName:e.machineName,gatewayIdentity:e.gatewayIdentity,startupPairingCode:e.startupPairingCode}}function lj(e){process.send&&process.send(e)}function uj(e){if(!dj(e)||typeof e.type!=`string`)return null;switch(e.type){case`supervisor.shutdown`:return e.reason!==`signal`&&e.reason!==`update`?null:{type:`supervisor.shutdown`,reason:e.reason};case`supervisor.request`:return typeof e.id!=`string`||e.method!==`gateway.update.apply`&&e.method!==`codex.appServer.restart`||e.requestedBy!==`console`&&e.requestedBy!==`mobile`&&e.requestedBy!==`system`?null:{type:`supervisor.request`,id:e.id,method:e.method,requestedBy:e.requestedBy};default:return null}}function dj(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}fj(process.argv.slice(2)).catch(e=>{console.error(String(e)),process.exit(1)});async function fj(e){let t=te(e);switch(t.command){case`help`:_j();return;case`version`:console.log(F.version);return;case`init`:await mj(t);return;case`doctor`:await hj(t);return;case`start`:await pj(t);return;case`__worker`:await gj(t);return;default:{let e=t.command;throw Error(`Unsupported command: ${e}`)}}}async function pj(e){let t=await vp({configPath:e.configPath,ensureConfigFile:!0});Sp(t.config);let n=await Vp({configPath:t.configPath,configExists:t.configExists,config:t.config});try{await ch({args:e,loaded:t,doctorReport:n})}catch(e){throw Error(_h(e,t.config))}Hp(n)&&console.warn(`[doctor] startup continued despite bundled runtime check failures.`)}async function mj(e){let t=await _p({configPath:e.configPath,overwrite:e.force});t.created?console.log(`[gateway] wrote config to ${t.configPath}`):(console.log(`[gateway] config already exists at ${t.configPath}`),console.log(`[gateway] rerun with --force to overwrite`));let n=await vp({configPath:t.configPath,ensureConfigFile:!1}),r=await Vp({configPath:n.configPath,configExists:n.configExists,config:n.config});console.log(Up(r))}async function hj(e){let t=await vp({configPath:gp(e.configPath),ensureConfigFile:!1,syncGatewayIdentityConfig:!1}),n=await Vp({configPath:t.configPath,configExists:t.configExists,config:t.configExists?t.config:void 0});console.log(Up(n)),Hp(n)&&(process.exitCode=1)}async function gj(e){try{await sj(e)}catch(t){let n=await vp({configPath:e.configPath,ensureConfigFile:!0});throw Error(_h(t,n.config))}}function _j(){console.log(`${F.cliName} ${F.version}`),console.log(``),console.log(`Usage:`),console.log(` ${F.cliName} [start] [--config <path>] [--log]`),console.log(` ${F.cliName} init [--config <path>] [--force]`),console.log(` ${F.cliName} doctor [--config <path>]`),console.log(` ${F.cliName} --version`)}exports.runCli=fj;
|