craby-gateway 0.25.6 → 0.25.7
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(`node:http`),S=require(`node:https`),C=require(`node:stream/promises`),w=require(`path`);w=c(w);let T=require(`node:string_decoder`),E=require(`net`),D=require(`child_process`),O=require(`@anthropic-ai/claude-agent-sdk`);var k={name:`@remote-agent/desktop-gateway`,private:!0,version:`0.25.6`,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/compress":`^8.3.1`,"@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:{"@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 A=/(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/;function j(e){let t=e.match(A);return t?t[0]:null}function M(e){return typeof e==`string`?j(e):null}function N(e,t){let n=F(e),r=F(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 P(e,t){return N(e,t)>=0}function F(e){let t=e.match(A);return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:typeof t[4]==`string`?t[4]:null}:null}const I=k,L=I.dependencies??{};function R(e){return L[e]??``}const z={packageName:`craby-gateway`,cliName:`craby-gateway`,version:I.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:R(`@anthropic-ai/claude-agent-sdk`),minimumVersion:M(R(`@anthropic-ai/claude-agent-sdk`)),systemCommand:`claude`,versionArgs:[`--version`],systemCommandRequired:!1,displayName:`Claude Code`}]};function ee(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=B(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 B(e,t){let n=t?.trim();if(!n)throw Error(`${e} requires a value`);return n}var V=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})),te=o((e=>{var t=V();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})),H=o((e=>{var t=V(),n=te();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(`node:http`),S=require(`node:https`),C=require(`node:stream/promises`),w=require(`path`);w=c(w);let T=require(`node:string_decoder`),E=require(`net`),D=require(`child_process`),O=require(`@anthropic-ai/claude-agent-sdk`);var k={name:`@remote-agent/desktop-gateway`,private:!0,version:`0.25.7`,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/compress":`^8.3.1`,"@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:{"@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 A=/(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/;function j(e){let t=e.match(A);return t?t[0]:null}function M(e){return typeof e==`string`?j(e):null}function N(e,t){let n=F(e),r=F(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 P(e,t){return N(e,t)>=0}function F(e){let t=e.match(A);return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:typeof t[4]==`string`?t[4]:null}:null}const I=k,L=I.dependencies??{};function R(e){return L[e]??``}const z={packageName:`craby-gateway`,cliName:`craby-gateway`,version:I.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:R(`@anthropic-ai/claude-agent-sdk`),minimumVersion:M(R(`@anthropic-ai/claude-agent-sdk`)),systemCommand:`claude`,versionArgs:[`--version`],systemCommandRequired:!1,displayName:`Claude Code`}]};function ee(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=B(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 B(e,t){let n=t?.trim();if(!n)throw Error(`${e} requires a value`);return n}var V=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})),te=o((e=>{var t=V();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})),H=o((e=>{var t=V(),n=te();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})),ne=o((e=>{var t=V(),n=te();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})),re=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})),ie=o((e=>{var t=V();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})),ae=o((e=>{var t=re(),n=V(),r=ie();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}}})),oe=o((e=>{var t=ne(),n=te(),r=V(),i=ae(),a=ie(),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})),se=o((e=>{var t=V(),n=ae(),r=ie();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})),ce=o((e=>{var t=oe(),n=V(),r=se();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})),le=o((e=>{var t=ce(),n=V(),r=ae();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
|
`)?`
|
|
@@ -132,7 +132,7 @@ ${n.output}`:n.output:t.push({item:{...Go(`claude-command-output:${e.eventId}`,e
|
|
|
132
132
|
`).trim();return t.length>0?t:void 0}function ks(e){return ro.test(e)}function As(e){return e===`failed`?`error`:e===`streaming`?`accent`:e===`waiting_approval`||e===`waiting_input`?`warning`:`success`}function js(e){let t=Bs(e.payload.raw);return Hs(t,[`turn_id`,`turnId`])||Hs(Bs(t.item),[`turn_id`,`turnId`])||Hs(Bs(t.turn),[`id`,`turn_id`,`turnId`])||Hs(Bs(Bs(t.message).params),[`turnId`,`turn_id`])}function Ms(e){return e.type===`native.raw`?Hs(Bs(Bs(e.payload.raw).message),[`method`]):e.type}function Ns(e){let t=Bs(e.payload.raw),n=Bs(t.item);return Object.keys(n).length>0?n:Bs(Bs(Bs(t.message).params).item)}function Ps(e){if(!e)return;let t=e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).replace(/[\s-]+/g,`_`).toLowerCase();return t.length>0?t:void 0}function Fs(e){let t=Ms(e);return t!==`item.started`&&t!==`item.completed`&&t!==`item/started`&&t!==`item/completed`?!1:Ps(Hs(Ns(e),[`type`]))===`user_message`}function Is(e){let t=Ms(e);return t!==`item.started`&&t!==`item.completed`&&t!==`item/started`&&t!==`item/completed`?!1:Ps(Hs(Ns(e),[`type`]))===`reasoning`}function Ls(e){if(e.type===`turn.completed`||e.type===`turn.failed`)return!0;let t=Hs(Bs(Bs(e.payload.raw).message),[`method`]);return t===`turn/completed`||t===`turn/failed`||t===`turn/interrupted`}function Rs(e){let t=Bs(Bs(e.payload.raw).item),n=Hs(t,[`type`]);if(n&&(n===`command_execution`||n===`file_change`||n===`web_search`))return t}function zs(e){let t=Hs(e,[`type`]);if(t===`file_change`)return`正在编辑`;if(t===`web_search`)return`正在搜索`;if(t===`command_execution`){let t=Array.isArray(e?.command_actions)?e.command_actions:Array.isArray(e?.commandActions)?e.commandActions:[],n=!1,r=!1;for(let e of t){let t=Hs(Bs(e),[`type`]);t===`read`||t===`listFiles`||t===`list_files`?n=!0:t===`search`&&(r=!0)}return r?`正在搜索`:n?`正在浏览`:`正在运行命令`}return`正在思考`}function Bs(e){return typeof e==`object`&&e?e:{}}function Vs(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Hs(e,t){let n=e??{};for(let e of t){let t=n[e];if(typeof t==`string`&&t.trim())return t}}function Us(e,t){let n=e??{};for(let e of t){let t=n[e];if(typeof t==`number`&&Number.isFinite(t))return t}}function Ws(e){let t=new Set,n=[];for(let r of e)!r||t.has(r)||(t.add(r),n.push(r));return n}function Gs(e){let t=e.replace(/\\/g,`/`).split(`/`);return t[t.length-1]??e}function Ks(e){return e?e.replace(/\r\n/g,`
|
|
133
133
|
`).split(`
|
|
134
134
|
`):[]}var qs=X([`text`,`output`]),Js=J({id:K().min(1),field:qs,delta:K()});function Ys(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map(t.map(e=>[e.id,e])),i=e.filter(e=>!r.has(e.id)).map(e=>e.id),a=[],o=[];for(let e of t){let t=n.get(e.id);if(!t){a.push(e);continue}if(ec(t)===ec(e))continue;let r=Xs(t,e);if(!r){a.push(e);continue}o.push(...r)}return{upserts:a,removals:i,textDeltaPatches:o}}function Xs(e,t){if(e.kind!==t.kind)return null;let n=Zs(e);if(n.length===0||tc($s(e))!==tc($s(t)))return null;let r=[];for(let i of n){let n=Qs(e,i),a=Qs(t,i);if(n!==a){if(typeof n!=`string`||typeof a!=`string`||!a.startsWith(n)||a.length<=n.length)return null;r.push({id:t.id,field:i,delta:a.slice(n.length)})}}return r.length>0?r:null}function Zs(e){switch(e.kind){case`agent_commentary`:case`activity_summary`:return[`text`];case`terminal_card`:case`command_strip`:return[`output`];default:return[]}}function Qs(e,t){return t===`text`?`text`in e&&typeof e.text==`string`?e.text:void 0:`output`in e&&typeof e.output==`string`?e.output:void 0}function $s(e){if(e.kind===`agent_commentary`||e.kind===`activity_summary`){let{text:t,...n}=e;return n}if(e.kind===`terminal_card`||e.kind===`command_strip`){let{output:t,...n}=e;return n}return e}function ec(e){return JSON.stringify(e)}function tc(e){return JSON.stringify(e)}var nc=K().trim().min(1).nullable(),rc=X([`default`,`plan`]),ic=J({approvalPolicy:Fa.nullable(),sandboxMode:Ia.nullable()}),ac=J({permissionMode:La.nullable()}),oc=J({codex:ic.optional(),claude:ac.optional()}),sc=tr(Zn());J({modeDefault:rc,model:K().trim().min(1).optional(),reasoningEffort:Pa.optional(),execution:oc.optional()});var cc=J({mode:rc,model:nc,reasoningEffort:Pa.nullable(),execution:oc.optional()});J({provider:Na,model:nc,reasoningEffort:Pa.nullable(),execution:oc.optional()});var lc=J({model:nc,reasoningEffort:Pa.nullable(),execution:oc.optional(),context:sc.optional()}),uc=J({target:er(`type`,[J({type:Y(`uncommittedChanges`)}),J({type:Y(`baseBranch`),branch:K().trim().min(1)}),J({type:Y(`commit`),sha:K().trim().min(1),title:K().trim().min(1).optional()}),J({type:Y(`custom`),instructions:K().trim().min(1)})])}),dc=J({preset:X([`general`,`security`,`performance`,`style`]),scope:X([`workingTree`,`staged`,`selection`,`custom`]).optional(),instructions:K().trim().min(1).optional()}),fc=J({provider:Na,codex:uc.optional(),claude:dc.optional()}).superRefine((e,t)=>{if(e.provider===`codex`){e.codex||t.addIssue({code:W.custom,path:[`codex`],message:`codex review config is required when provider is codex`}),e.claude&&t.addIssue({code:W.custom,path:[`claude`],message:`claude review config must be omitted when provider is codex`});return}e.claude||t.addIssue({code:W.custom,path:[`claude`],message:`claude review config is required when provider is claude`}),e.codex&&t.addIssue({code:W.custom,path:[`codex`],message:`codex review config must be omitted when provider is claude`})}),pc=K().min(1).regex(/^[A-Za-z0-9+/=]+$/u),mc=J({v:Y(`1.0`),provider:Na,sessionId:K().min(1),projectId:K().min(1).optional(),eventId:K().min(1),ts:K().datetime(),type:K().min(1),payload:J({raw:Zn()}).passthrough()}).passthrough(),hc=X([`compact`,`full`]),gc=J({commandId:K().min(1).optional()}),_c=gc.extend({type:Y(`session.start`),payload:J({provider:Na,model:K().min(1).optional(),projectId:K().min(1).optional(),cwd:K().min(1).optional(),sessionConfig:Ra.optional(),sessionTurnConfig:cc.optional(),metadata:tr(Zn()).optional()})}),vc=gc.extend({type:Y(`turn.input`),payload:J({sessionId:K().min(1),text:K().min(1),model:K().min(1).optional(),sessionConfig:Ra.optional(),mode:rc.optional(),config:lc.optional()})}),yc=gc.extend({type:Y(`review.start`),payload:J({sessionId:K().min(1),input:K().min(1).optional(),config:fc,turnConfig:lc})}),bc=gc.extend({type:Y(`tool.approval.respond`),payload:J({sessionId:K().min(1),requestId:K().min(1),decision:X([`allow`,`deny`]),reason:K().min(1).optional()})}),xc=gc.extend({type:Y(`user.input.respond`),payload:J({sessionId:K().min(1),requestId:K().min(1),answers:tr(Qn(K()))})}),Sc=gc.extend({type:Y(`session.interrupt`),payload:J({sessionId:K().min(1)})}),Cc=gc.extend({type:Y(`session.close`),payload:J({sessionId:K().min(1)})}),wc=er(`kind`,[J({kind:Y(`all`)}),J({kind:Y(`raw_seq`),rawSeq:q().int().nonnegative()})]),Tc=J({sessionId:K().min(1),projectId:K().min(1).optional(),cursor:wc,purpose:X([`detail_view`,`live_follow`]).optional(),detailLevel:hc.optional(),bootstrapMode:X([`stream`,`readable`]).optional()}),Ec=gc.extend({type:Y(`session.stream.subscribe`),payload:J({replace:Xn().default(!0),sessions:Qn(Tc)})}),Dc=J({sessionId:K().min(1),projectId:K().min(1).optional()}),Oc=er(`type`,[_c,vc,yc,bc,xc,Sc,Cc,gc.extend({type:Y(`session.external.watch.set`),payload:J({replace:Xn().default(!0),sessions:Qn(Dc)})}),Ec,gc.extend({type:Y(`fs.read`),payload:J({sessionId:K().min(1),path:K().min(1)})}),gc.extend({type:Y(`fs.diff`),payload:J({sessionId:K().min(1),path:K().min(1),baseContent:K().optional()})})]);function kc(e){let t=Oc.parse(e);if(t.type===`session.start`&&!t.payload.projectId&&!t.payload.cwd)throw Error(`session.start requires at least one of projectId or cwd`);return t}function Ac(e,t){if(!Array.isArray(e.content))return;let n=[];for(let r of e.content){let e=t(r);e&&n.push(e)}return n.length>0?n.join(`
|
|
135
|
-
`):void 0}var jc=J({inputTokens:q().int().nonnegative(),cachedInputTokens:q().int().nonnegative(),outputTokens:q().int().nonnegative(),reasoningOutputTokens:q().int().nonnegative(),totalTokens:q().int().nonnegative()}),Mc=J({usedPercent:q(),windowMinutes:q().int().nonnegative().nullable(),resetsAt:q().nonnegative().nullable()}),Nc=J({primary:Mc.nullable().optional(),secondary:Mc.nullable().optional(),planType:K().min(1).nullable().optional(),creditsBalance:K().min(1).nullable().optional()}),Pc=J({provider:Na,usage:J({currentUsage:jc,latestTurnUsage:jc.nullable(),contextWindow:q().int().nonnegative().nullable(),sourceLabel:K().min(1),note:K().min(1).optional()}).nullable(),rateLimits:Nc.optional()});function Fc(e){return e.provider===`claude`?Lc(e.rawEvents):Ic(e.rawEvents)}function Ic(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=null;for(let c of Xc(e)){let e=tl(c.payload.raw),l=c.type===`native.raw`?Rc(e):null;l?.usage&&((qc(l.usage)||!t)&&(t=l.usage),Jc(l.usage.latestTurnUsage)?n=l.usage.latestTurnUsage:Jc(l.usage.currentUsage)&&!n&&(n=l.usage.currentUsage),r=l.usage.contextWindow??r),l?.rateLimits&&(i=l.rateLimits.primary??i,a=l.rateLimits.secondary??a,o=l.rateLimits.planType??o,s=l.rateLimits.creditsBalance??s);let u=zc(c);if(u){let e=u.latestTurnUsage??u.currentUsage;Jc(e)&&(n=e),r=u.contextWindow??r,!t&&(qc(u)||u.contextWindow)&&(t=u)}}let c=t?{...t,latestTurnUsage:Jc(n)?n:Jc(t.latestTurnUsage)?t.latestTurnUsage:Jc(t.currentUsage)?t.currentUsage:null,contextWindow:t.contextWindow??r}:null,l=Vc({primary:i,secondary:a,planType:o,creditsBalance:s});return!c&&!l?null:{provider:`codex`,usage:c,...l?{rateLimits:l}:{}}}function Lc(e){let t=null;for(let n of Xc(e)){let e=zc(n);e&&(t=e)}return t?{provider:`claude`,usage:t}:null}function Rc(e){if(e.source===`codex.history.thread_read`){let t=tl(e.message),n=tl(t.turn),r=Wc(n.usage??t.usage),i=$c(n.model_context_window??t.model_context_window);return!r&&i===void 0?null:{usage:{currentUsage:r??Yc(),latestTurnUsage:r??null,contextWindow:i??null,sourceLabel:`codex.history.thread_read`,note:`当前来自 Codex history replay 快照。`}}}let t=Zc(e);if(!t)return null;let n=tl(tl(e.message).params);if(t===`thread/tokenUsage/updated`){let e=tl(n.tokenUsage??n.token_usage),t=Wc(e.total??e.total_token_usage);return t?{usage:{currentUsage:t,latestTurnUsage:Wc(e.last??e.last_token_usage),contextWindow:$c(e.modelContextWindow??e.model_context_window)??null,sourceLabel:`thread/tokenUsage/updated`}}:null}if(t===`account/rateLimits/updated`){let e=Bc(n.rateLimits??n.rate_limits);return e?{rateLimits:e}:null}if(t===`codex/event/token_count`){let e=tl(n.msg),t=tl(e.info),r=Wc(t.total_token_usage??t.totalTokenUsage),i=Bc(e.rate_limits??e.rateLimits);return!r&&!i?null:{usage:r?{currentUsage:r,latestTurnUsage:Wc(t.last_token_usage??t.lastTokenUsage),contextWindow:$c(t.model_context_window??t.modelContextWindow)??null,sourceLabel:`codex/event/token_count`}:void 0,...i?{rateLimits:i}:{}}}if(t===`codex/event/task_started`){let e=tl(n.msg),t=$c(e.model_context_window??e.modelContextWindow);return t===void 0?null:{usage:{currentUsage:Yc(),latestTurnUsage:null,contextWindow:t,sourceLabel:`codex/event/task_started`,note:`目前只拿到了 context window,尚未拿到 thread token usage 快照。`}}}return null}function zc(e){if(e.type!==`turn.completed`&&e.type!==`turn.failed`&&e.type!==`turn.started`)return null;let t=tl(e.payload.raw),n=Uc(t.usage??tl(t.turn).usage),r=$c(t.model_context_window??tl(t.turn).model_context_window);return!n&&r===void 0?null:{currentUsage:n??Yc(),latestTurnUsage:n??null,contextWindow:r??null,sourceLabel:e.type}}function Bc(e){let t=tl(e),n=Hc(t.primary),r=Hc(t.secondary),i=el(t.plan_type??t.planType)??null,a=el(tl(t.credits).balance)??null;return!n&&!r&&!i&&!a?null:{primary:n,secondary:r,planType:i,creditsBalance:a}}function Vc(e){if(!(!e.primary&&!e.secondary&&!e.planType&&!e.creditsBalance))return{...e.primary?{primary:e.primary}:{},...e.secondary?{secondary:e.secondary}:{},...e.planType?{planType:e.planType}:{},...e.creditsBalance?{creditsBalance:e.creditsBalance}:{}}}function Hc(e){let t=tl(e),n=$c(t.used_percent??t.usedPercent);return n===void 0?null:{usedPercent:n,windowMinutes:$c(t.window_minutes??t.windowDurationMins)??null,resetsAt:$c(t.resets_at??t.resetsAt)??null}}function Uc(e){return Gc(e)}function Wc(e){return Gc(e,{totalFallback:`input_plus_output`})}function Gc(e,t){let n=tl(e),r=$c(n.input_tokens??n.inputTokens),i=$c(n.cached_input_tokens??n.cachedInputTokens??n.cache_read_input_tokens??n.cacheReadInputTokens),a=$c(n.output_tokens??n.outputTokens),o=$c(n.reasoning_output_tokens??n.reasoningOutputTokens)??0,s=$c(n.total_tokens??n.totalTokens)??Kc(r,i,a,o,t);return r===void 0&&i===void 0&&a===void 0&&s===void 0?null:{inputTokens:r??0,cachedInputTokens:i??0,outputTokens:a??0,reasoningOutputTokens:o,totalTokens:s??0}}function Kc(e,t,n,r,i){return i?.totalFallback===`input_plus_output`?Qc(e,n):Qc(e,t,n,r)}function qc(e){return Jc(e.latestTurnUsage)||Jc(e.currentUsage)}function Jc(e){return e?e.inputTokens>0||e.cachedInputTokens>0||e.outputTokens>0||e.reasoningOutputTokens>0||e.totalTokens>0:!1}function Yc(){return{inputTokens:0,cachedInputTokens:0,outputTokens:0,reasoningOutputTokens:0,totalTokens:0}}function Xc(e){return[...e].sort((e,t)=>{let n=e.ts.localeCompare(t.ts);return n===0?e.rawSeq-t.rawSeq:n})}function Zc(e){return el(tl(e.message).method)??el(e.method)??null}function Qc(...e){let t=e.filter(e=>typeof e==`number`);if(t.length!==0)return t.reduce((e,t)=>e+t,0)}function $c(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`bigint`)return Number(e);if(typeof e==`string`&&e.trim()){let t=Number(e);if(Number.isFinite(t))return t}}function el(e){return typeof e==`string`&&e.trim()?e:void 0}function tl(e){return typeof e==`object`&&e?e:{}}var nl=X([`session.started`,`thread.started`,`thread.title.updated`,`turn.started`,`turn.completed`,`turn.failed`,`item.started`,`item.updated`,`item.completed`,`tool.permission.requested`,`tool.permission.resolved`,`user.input.requested`,`user.input.resolved`,`file.changed`,`file.diff.ready`,`status.progress`,`error`,`error.runtime`]),rl=mc.extend({type:nl}),il=mc.extend({kind:Y(`provider.raw`),rawSeq:q().int().positive(),type:K().min(1)});rl.extend({kind:Y(`gateway.control`).optional(),derivedFrom:K().min(1).optional()});var al=mc.extend({kind:Y(`session.stream.sync`),type:Y(`session.stream.sync`),payload:J({raw:J({decision:X([`delta`,`snapshot`]),reason:K().min(1),snapshotId:K().min(1).optional(),fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative().optional()}).passthrough()}).passthrough()}),ol=mc.extend({kind:Y(`session.stream.snapshot.chunk`),type:Y(`session.stream.snapshot.chunk`),payload:J({raw:J({snapshotId:K().min(1),chunkIndex:q().int().nonnegative(),totalChunks:q().int().positive(),events:Qn(il)}).passthrough(),readable:J({snapshotId:K().min(1),chunkIndex:q().int().nonnegative(),totalChunks:q().int().positive(),timelineItems:Qn(vo).optional()}).passthrough().optional()}).passthrough()}),sl=mc.extend({kind:Y(`session.readable.snapshot.chunk`),type:Y(`session.readable.snapshot.chunk`),payload:J({readable:J({snapshotId:K().min(1),chunkIndex:q().int().nonnegative(),totalChunks:q().int().positive(),timelineItems:Qn(vo),pendingApprovals:Qn(mo).optional(),pendingUserInputs:Qn(_o).optional(),contextUsage:Pc.nullable().optional()}).passthrough()}).passthrough()}),cl=J({updatedAt:K().datetime().optional(),status:X([`running`,`idle`]).optional(),interactionLockReason:X([`external_turn_running`]).optional(),model:K().min(1).optional(),sessionTurnConfig:cc.optional(),sessionTurnConfigUpdatedAt:K().datetime().optional(),title:K().min(1).optional(),pendingApprovals:q().int().nonnegative().optional(),pendingUserInputs:q().int().nonnegative().optional(),pendingActions:q().int().nonnegative().optional()}),ll=$n([il,al,ol,sl,mc.extend({kind:Y(`session.readable.delta`),type:Y(`session.readable.delta`),payload:J({readable:J({fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative(),timelineUpserts:Qn(vo),timelineRemovals:Qn(K().min(1)),timelineTextDeltaPatches:Qn(Js).optional(),pendingApprovalUpserts:Qn(mo).optional(),pendingApprovalRemovals:Qn(K().min(1)).optional(),pendingUserInputUpserts:Qn(_o).optional(),pendingUserInputRemovals:Qn(K().min(1)).optional(),sessionSummary:cl.optional(),contextUsage:Pc.nullable().optional()}).passthrough()}).passthrough()}),mc.extend({kind:Y(`session.external.update`),type:Y(`session.external.update`),payload:J({raw:J({updatedAt:K().datetime(),status:X([`running`,`idle`]),interactionLockReason:X([`external_turn_running`]).optional(),refreshMode:X([`delta`,`snapshot`]),fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative().optional(),historyUpdated:Xn(),statusChanged:Xn(),sessionSummary:cl.optional()}).passthrough()}).passthrough()})]),ul=J({algorithm:X([`ed25519`]),publicKey:pc,publicKeyFingerprint:K().min(1),keyVersion:q().int().min(1),createdAt:K().datetime()});J({code:K().min(4),expiresAt:K().datetime()});var dl=X([`ed25519`]),fl=X([`active`,`revoked`,`rotating`,`unknown`]),pl=J({algorithm:dl,publicKey:pc,publicKeyFingerprint:K().min(1)}),ml=J({pairingCode:K().min(4),signedAt:K().datetime()}),hl=J({gatewayId:K().min(1),deviceId:K().min(1),mobilePublicKey:pc,pairingContext:ml}),gl=J({algorithm:Y(`ed25519`),gatewayPublicKeyFingerprint:K().min(1),payload:hl,signature:pc}),_l=J({code:K().min(4),deviceName:nr(e=>{if(e==null)return;if(typeof e!=`string`)return e;let t=e.trim();return t.length>0?t:void 0},K().min(1).optional()),deviceIdentity:pl.optional()}),vl=J({accessToken:K().min(1),refreshToken:K().min(1),expiresInSeconds:q().int().positive()}),yl=vl.extend({gatewayId:K().min(1),gatewayName:K().min(1).optional(),machineName:K().min(1).optional(),deviceId:K().min(1),gatewayIdentity:ul.optional(),deviceIdentityFingerprint:K().min(1).optional(),deviceIdentityStatus:fl.optional(),pairingConfirmation:gl.optional()}),bl=J({refreshToken:K().min(1)}),xl=vl.extend({deviceId:K().min(1),deviceIdentityFingerprint:K().min(1).optional(),deviceIdentityStatus:fl.optional()});function Sl(e){return JSON.stringify([e.gatewayId,e.deviceId,e.mobilePublicKey,e.pairingContext.pairingCode,e.pairingContext.signedAt])}var Cl=X([`missing`,`current`,`stale`]),wl=J({accountId:K().min(1),accountType:X([`chatgpt`,`apiKey`,`unknown`]),authMode:K().min(1),planType:K().min(1).nullable(),lastRefreshAt:K().datetime().nullable(),hasSavedSnapshot:Xn(),snapshotStatus:Cl,rateLimits:Nc.nullable()}),Tl=J({accountId:K().min(1),accountType:X([`chatgpt`,`apiKey`,`unknown`]),authMode:K().min(1),planType:K().min(1).nullable(),lastRefreshAt:K().datetime().nullable(),savedAt:K().datetime(),isCurrent:Xn(),rateLimits:Nc.nullable()}),El=J({current:wl.nullable(),savedAccounts:Qn(Tl)}),Dl=J({saved:Y(!0),accounts:El}),Ol=J({switched:Y(!0),closedRuntimeSessionCount:q().int().nonnegative(),accounts:El}),kl=J({restarted:Y(!0),closedRuntimeSessionCount:q().int().nonnegative()}),Al=15e3,jl=12e4;function Ml(e){return{sessionId:e,messages:new Map,itemToMessageKey:new Map,requestToMessageKey:new Map,turnToLastToolMessageKey:new Map,codexSemanticMessageKeyToMessageKeys:new Map,codexHistoryReplaySemanticOccurrenceByKey:new Map}}function Nl(e,t,n=`codex`){if(t.sessionId!==e.sessionId)return;let r=`optimistic:${t.id}`;e.messages.has(r)||e.messages.set(r,{id:r,sessionId:e.sessionId,provider:n,kind:`user`,status:`completed`,ts:t.ts,updatedAt:t.ts,source:`optimistic`,title:`User`,text:t.text,details:[],debug:{eventTypes:[`optimistic.prompt`]}})}function Pl(e,t){if(t.sessionId===e.sessionId){if(t.type===`item.started`||t.type===`item.updated`||t.type===`item.completed`){Rl(e,t);return}if(t.type===`tool.permission.requested`||t.type===`tool.permission.resolved`){zl(e,t);return}if(t.type===`user.input.requested`||t.type===`user.input.resolved`){Bl(e,t);return}if(t.type===`turn.completed`){Ul(e,t);return}(t.type===`turn.failed`||t.type===`error`||t.type===`error.runtime`)&&Wl(e,t)}}function Fl(e){return[...e.messages.values()].map(Eu).sort((e,t)=>{let n=e.ts.localeCompare(t.ts);return n===0?e.id.localeCompare(t.id):n})}function Il(e,t,n){let r=Ml(e),i=t[0]?.provider??`codex`,a=[...n].sort((e,t)=>e.ts.localeCompare(t.ts));for(let e of a)Nl(r,e,i);let o=[...t].filter(t=>t.sessionId===e).sort((e,t)=>e.ts.localeCompare(t.ts));for(let e of o)Pl(r,e);return r}function Ll(e,t,n){return Fl(Il(e,t,n))}function Rl(e,t){let n=fu(t.payload.raw),r=fu(n.item),i=ou(r,[`type`]),a=ou(r,[`phase`]),o=iu(n,r),s=ou(r,[`id`]),c=au(r),l=Yl(t.provider,o,i,a,c),u=l?$l(n):void 0,d=ru(n)&&l?Zl(e,l,u):void 0;if(!i){let r=au(n);if(!r)return;let i=Kl(t,`assistant`,o),a=Gl(e,i,{id:i,sessionId:e.sessionId,provider:t.provider,kind:`assistant`,status:`streaming`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Assistant`,details:[],turnId:o,debug:{eventTypes:[]}});t.type===`item.completed`?(a.status=`completed`,a.text=r):(a.status=`streaming`,a.text=hu(a.text,r)),wu(a,t);return}let f=Jl(i);if(f===`user`&&!c)return;let p=d??(s?`item:${s}`:Kl(t,i,o)),m=ql(f,i),h=f===`tool`?du(r,c):void 0,g=Gl(e,p,{id:p,sessionId:e.sessionId,provider:t.provider,kind:f,status:`streaming`,ts:t.ts,updatedAt:t.ts,source:`event`,title:m,details:[],itemType:i,itemId:s,turnId:o,collapsible:f===`reasoning`,collapsedByDefault:f===`reasoning`,debug:{eventTypes:[],rawItemType:i,...a?{rawItemPhase:a}:{}}});s&&e.itemToMessageKey.set(s,p),l&&Xl(e,l,p),o&&f===`tool`&&e.turnToLastToolMessageKey.set(o,p),g.provider=t.provider,g.itemType=i,g.debug.rawItemPhase=a??g.debug.rawItemPhase,d&&g.itemId&&s&&g.itemId!==s||(g.itemId=s??g.itemId),g.turnId=o??g.turnId,g.title=h?.title??m,g.updatedAt=t.ts,g.collapsible=f===`reasoning`,g.collapsedByDefault=f===`reasoning`,h&&(g.toolCardData=h);let _=ou(r,[`source_event_type`]);if(_&&nu(f)&&!h&&Su(g,`source: ${_}`),f===`tool`&&!h)for(let e of Cu(r))Su(g,e);t.type===`item.started`?(g.status=f===`user`?`completed`:`streaming`,c&&(g.text=gu(f)?_u(g.text,c,r):hu(g.text,c))):t.type===`item.updated`?(g.status=f===`user`?`completed`:g.status===`waiting_approval`||g.status===`waiting_input`?g.status:`streaming`,c&&(g.text=gu(f)?_u(g.text,c,r):hu(g.text,c))):t.type===`item.completed`&&(g.status=f===`error`?`failed`:`completed`,c&&(g.text=c)),wu(g,t),l&&ru(n)&&Ql(e,l,u),f===`user`&&g.text&&Tu(e,g.text,g.ts)}function zl(e,t){let n=fu(t.payload.raw),r=ou(n,[`requestId`,`request_id`]);if(!r)return;let i=ou(n,[`itemId`,`item_id`]),a=ou(n,[`turnId`,`turn_id`]),o=ou(n,[`toolName`,`tool_name`])??`tool`,s=ou(n,[`reason`]),c=ou(n,[`decision`]),l=fu(n.rawParams??n.raw_params),u=fu(l.networkApprovalContext??l.network_approval_context),d=ou(l,[`command`]),f=ou(l,[`cwd`]),p=ou(l,[`grantRoot`,`grant_root`]),m=ou(u,[`host`]),h=ou(u,[`protocol`]),g=Vl(e,r,`approval`),_=Gl(e,g,{id:g,sessionId:e.sessionId,provider:t.provider,kind:`tool`,status:`waiting_approval`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Tool Approval`,details:[],itemType:`tool_status`,itemId:i??void 0,turnId:a??void 0,requestId:r,debug:{eventTypes:[],rawItemType:`tool_status`}});_.provider=t.provider,_.updatedAt=t.ts,_.requestId=r,_.itemId=i??_.itemId,_.turnId=a??_.turnId,_.title=_.title||`Tool Approval`,t.type===`tool.permission.requested`?(_.status=`waiting_approval`,_.text=d?`等待命令执行审批`:`${o} \u9700\u8981\u5BA1\u6279`,Su(_,`tool: ${o}`),s&&Su(_,`reason: ${s}`),d&&Su(_,`command: ${ku(d,200)}`),f&&Su(_,`cwd: ${ku(f,200)}`),p&&Su(_,`grant_root: ${ku(p,200)}`),m&&Su(_,`network: ${ku(h?`${h}://${m}`:m,200)}`)):(_.status=c===`deny`?`failed`:`completed`,_.text=c===`deny`?`工具审批已拒绝`:`工具审批已通过`,c&&Su(_,`decision: ${c}`),s&&Su(_,`reason: ${s}`)),Hl(e,g,r,i,a),wu(_,t)}function Bl(e,t){let n=fu(t.payload.raw),r=ou(n,[`requestId`,`request_id`]);if(!r)return;let i=ou(n,[`itemId`,`item_id`]),a=ou(n,[`turnId`,`turn_id`]),o=ou(n,[`status`]),s=cu(n,[`answeredCount`,`answered_count`]),c=lu(n.questions),l=uu(n.answers),u=Vl(e,r,`user-input`),d=Gl(e,u,{id:u,sessionId:e.sessionId,provider:t.provider,kind:`tool`,status:`waiting_input`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Plan Question`,details:[],itemType:`request_user_input`,itemId:i??void 0,turnId:a??void 0,requestId:r,userInputQuestions:c,debug:{eventTypes:[],rawItemType:`request_user_input`}});if(d.provider=t.provider,d.updatedAt=t.ts,d.requestId=r,d.itemId=i??d.itemId,d.turnId=a??d.turnId,d.title=`Plan Question`,t.type===`user.input.requested`)d.status=`waiting_input`,d.text=c.length>0?`\u9700\u8981\u56DE\u7B54 ${c.length} \u4E2A\u95EE\u9898`:`需要回答问题`,d.userInputQuestions=c,d.userInputAnswers=void 0,Su(d,`request_id: ${r}`);else{d.status=o===`dismissed`||o===`expired`?`failed`:`completed`;let e=s??0;d.text=`\u5DF2\u63D0\u4EA4 ${e} \u9879\u56DE\u7B54`,Su(d,`status: ${o??`submitted`}`),Su(d,`answered_count: ${e}`),c.length>0&&(d.userInputQuestions=c),l&&(d.userInputAnswers=l)}Hl(e,u,r,i,a),wu(d,t)}function Vl(e,t,n){return e.requestToMessageKey.get(t)??`${n}:${t}`}function Hl(e,t,n,r,i){e.requestToMessageKey.set(n,t),r&&e.itemToMessageKey.set(r,t),i&&e.turnToLastToolMessageKey.set(i,t)}function Ul(e,t){let n=fu(t.payload.raw),r=iu(n,void 0),i=fu(n.usage),a=fu(fu(n.turn).usage),o=cu(i,[`input_tokens`]),s=cu(i,[`output_tokens`]),c=cu(a,[`input_tokens`]),l=cu(a,[`output_tokens`]),u=o??c,d=s??l;if(r)for(let n of e.messages.values())n.turnId===r&&n.status===`streaming`&&(n.status=`completed`,n.updatedAt=t.ts);if(u!==void 0||d!==void 0){let n=r?`turn-usage:${r}`:Kl(t,`turn.usage`,r),i=Gl(e,n,{id:n,sessionId:e.sessionId,provider:t.provider,kind:`system`,status:`completed`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Turn Usage`,details:[],turnId:r,debug:{eventTypes:[]}});i.provider=t.provider,i.status=`completed`,i.updatedAt=t.ts,i.text=`Token usage`,u!==void 0&&Su(i,`input_tokens: ${u}`),d!==void 0&&Su(i,`output_tokens: ${d}`),wu(i,t)}}function Wl(e,t){let n=fu(t.payload.raw),r=au(fu(n.error))??au(n);if(!r)return;let i=iu(n,void 0),a=i?`turn-error:${i}`:`error:${t.eventId}`,o=Gl(e,a,{id:a,sessionId:e.sessionId,provider:t.provider,kind:`error`,status:`failed`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Error`,text:r,details:[],turnId:i,debug:{eventTypes:[]}});o.provider=t.provider,o.status=`failed`,o.updatedAt=t.ts,o.text=r,o.turnId=i??o.turnId,wu(o,t)}function Gl(e,t,n){return e.messages.get(t)||(e.messages.set(t,n),n)}function Kl(e,t,n){let r=Date.parse(e.ts),i=Number.isFinite(r)?Math.floor(r/Al):Math.floor(ju(e.ts)/Al);return`fallback:${e.provider}:${n??`no_turn`}:${t}:${i}`}function ql(e,t){return t===`plan`?`Plan`:e===`assistant`?`Assistant`:e===`user`?`User`:e===`tool`?t===`command_execution`?`Command`:t===`file_change`?`File Change`:t===`mcp_tool_call`?`MCP Tool`:t===`web_search`?`Web Search`:`Tool`:e===`reasoning`?t===`todo_list`?`Todo`:t===`plan`?`Plan`:`Reasoning`:e===`error`?`Error`:`System`}function Jl(e){return e===`user_message`?`user`:e===`agent_message`||e===`plan`?`assistant`:e===`command_execution`||e===`file_change`||e===`mcp_tool_call`||e===`web_search`||e===`tool_status`||e===`collab_tool_call`?`tool`:e===`reasoning`||e===`todo_list`?`reasoning`:e===`error`?`error`:`system`}function Yl(e,t,n,r,i){if(e!==`codex`||!t||!i)return;let a=eu(n);if(!(a!==`user_message`&&a!==`agent_message`))return`${t}|${a}|${tu(a,r)}|${i}`}function Xl(e,t,n){let r=e.codexSemanticMessageKeyToMessageKeys.get(t);if(!r){e.codexSemanticMessageKeyToMessageKeys.set(t,[n]);return}r.includes(n)||r.push(n)}function Zl(e,t,n){let r=e.codexSemanticMessageKeyToMessageKeys.get(t);if(!(!r||r.length===0))return r[n===void 0?e.codexHistoryReplaySemanticOccurrenceByKey.get(t)??0:n-1]}function Ql(e,t,n){let r=n??(e.codexHistoryReplaySemanticOccurrenceByKey.get(t)??0)+1,i=e.codexHistoryReplaySemanticOccurrenceByKey.get(t)??0;e.codexHistoryReplaySemanticOccurrenceByKey.set(t,Math.max(i,r))}function $l(e){let t=e.semantic_occurrence??e.semanticOccurrence;if(typeof t==`number`&&Number.isInteger(t)&&t>0)return t;if(typeof t==`string`){let e=Number.parseInt(t,10);if(Number.isInteger(e)&&e>0)return e}}function eu(e){if(!e)return;let t=e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).replace(/[\s-]+/g,`_`).toLowerCase();return t.length>0?t:void 0}function tu(e,t){return e===`agent_message`&&(!t||t===`final_answer`)?``:t??``}function nu(e){return e===`tool`}function ru(e){if(e.historyReplay===!0)return!0;let t=ou(e,[`source`]);return t===`codex.history.thread_read`||t===`codex.history.thread_read.incremental`}function iu(e,t){return ou(e,[`turn_id`,`turnId`])??ou(fu(e.turn),[`id`,`turn_id`,`turnId`])??ou(t??{},[`turn_id`,`turnId`])}function au(e){return su(fu(e.payload),[`delta`,`output_delta`,`outputDelta`])||su(e,[`text`,`message`,`output`,`response`,`reason`,`output_delta`,`aggregated_output`])||pu(e)}function ou(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}}function su(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function cu(e,t){for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t}}function lu(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=fu(n),r=ou(e,[`id`]),i=ou(e,[`header`]),a=ou(e,[`question`]);if(!r||!i||!a)continue;let o=Array.isArray(e.options)?e.options.map(e=>{let t=fu(e),n=ou(t,[`label`]),r=ou(t,[`description`])??n,i=ou(t,[`markdown`]);return n?{label:n,description:r,...i?{markdown:i}:{}}:null}).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}function uu(e){let t=fu(e),n=Object.entries(t);if(n.length===0)return;let r={};for(let[e,t]of n)if(e){if(!Array.isArray(t)){r[e]=[];continue}r[e]=t.map(e=>typeof e==`string`?e:void 0).filter(e=>typeof e==`string`&&e.length>0)}return Object.keys(r).length>0?r:void 0}function du(e,t){if(ou(e,[`display_as`])!==`tool_card`)return;let n=ou(e,[`title`])??t,r=ou(e,[`status_label`])??t;if(!n||!r)return;let i=[],a=ou(e,[`prompt`]),o=ou(e,[`response`]),s=ou(e,[`response_label`])??`Response`;a&&i.push({label:`Prompt`,body:a}),o&&i.push({label:s,body:o});let c=[],l=ou(e,[`file_path`]),u=cu(e,[`total_tool_uses`]),d=cu(e,[`total_tokens`]),f=cu(e,[`duration_ms`]);return l&&c.push(l),typeof u==`number`&&c.push(`${u} tool uses`),typeof d==`number`&&c.push(`${Du(d)} tokens`),typeof f==`number`&&c.push(Ou(f)),{title:n,statusLabel:r,compactText:t?Au(t):void 0,sections:i,details:c}}function fu(e){return typeof e==`object`&&e?e:{}}function pu(e){return Ac(e,mu)}function mu(e){if(typeof e==`string`&&e.length>0)return e;let t=fu(e),n=su(t,[`text`,`message`,`output`,`response`,`reason`]);if(n)return n;let r=su(fu(t.data),[`text`,`message`,`output`,`response`,`reason`]);if(r)return r;if(!Array.isArray(t.text_elements))return;let i=[];for(let e of t.text_elements){let t=su(fu(e),[`text`,`value`]);t&&i.push(t)}return i.length>0?i.join(``):void 0}function hu(e,t){return!e||t.startsWith(e)?t:e.endsWith(t)?e:`${e}${t}`}function gu(e){return e===`assistant`||e===`reasoning`}function _u(e,t,n){return e?t===e?e:t.startsWith(e)?t:e.endsWith(t)?e:vu(n)?`${e}${t}`:bu(e,t)?t:`${e}${t}`:t}function vu(e){let t=fu(e.payload);return xu(t.delta)||xu(t.output_delta)||xu(t.outputDelta)||xu(e.output_delta)||xu(e.outputDelta)?!0:yu(ou(e,[`original_method`,`originalMethod`]))}function yu(e){return e?e===`item/agentMessage/delta`||e===`codex/event/agent_message_content_delta`:!1}function bu(e,t){return t.length===0||t.length<24?!1:t.length>=Math.floor(e.length*.7)}function xu(e){return typeof e==`string`&&e.length>0}function Su(e,t){t.trim()&&(e.details.includes(t)||e.details.push(t))}function Cu(e){let t=[],n=ou(e,[`command`]),r=ou(e,[`tool_name`,`tool`]),i=ou(e,[`server`]),a=ou(e,[`status`]),o=ou(e,[`query`]),s=ou(e,[`output_delta`,`aggregated_output`]),c=e.history_output_omitted===!0||e.historyOutputOmitted===!0,l=cu(e,[`history_output_byte_length`,`historyOutputByteLength`]),u=cu(e,[`exit_code`]),d=ou(fu(e.error),[`message`]);if(n&&t.push(`command: ${ku(n,200)}`),r&&t.push(`tool: ${r}`),i&&t.push(`server: ${i}`),a&&t.push(`status: ${a}`),o&&t.push(`query: ${ku(o,200)}`),u!==void 0&&t.push(`exit_code: ${u}`),d&&t.push(`error: ${ku(d,200)}`),s?t.push(`output: ${ku(s,400)}`):c&&t.push(l===void 0?`output: omitted in compact history`:`output: omitted in compact history (${l.toLocaleString(`en-US`)} bytes)`),e.type===`todo_list`){let n=Array.isArray(e.items)?e.items:[];for(let e of n){let n=fu(e),r=ou(n,[`text`])??``,i=n.completed===!0;t.push(`${i?`[x]`:`[ ]`} ${r}`)}}if(e.type===`file_change`){let n=Array.isArray(e.changes)?e.changes:[];for(let e of n){let n=fu(e),r=ou(n,[`path`])??`unknown`,i=ou(n,[`kind`])??`update`;t.push(`${i}: ${r}`)}}return t}function wu(e,t){e.debug.eventTypes.includes(t.type)||e.debug.eventTypes.push(t.type)}function Tu(e,t,n){let r=Au(t),i=Date.parse(n);for(let[t,n]of e.messages.entries()){if(n.kind!==`user`||n.source!==`optimistic`||Au(n.text??``)!==r)continue;let a=Date.parse(n.ts);if(!(Number.isFinite(i)&&Number.isFinite(a)&&Math.abs(i-a)>jl)){e.messages.delete(t);return}}}function Eu(e){return{...e,details:[...e.details],userInputQuestions:e.userInputQuestions?e.userInputQuestions.map(e=>({...e,options:e.options?e.options.map(e=>({...e})):null})):void 0,userInputAnswers:e.userInputAnswers?Object.fromEntries(Object.entries(e.userInputAnswers).map(([e,t])=>[e,[...t]])):void 0,toolCardData:e.toolCardData?{...e.toolCardData,sections:e.toolCardData.sections.map(e=>({...e})),details:[...e.toolCardData.details]}:void 0,debug:{...e.debug,eventTypes:[...e.debug.eventTypes]}}}function Du(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}function Ou(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 ku(e,t){return e.length<=t?e:`${e.slice(0,t)}...`}function Au(e){return e.trim().replace(/\s+/g,` `)}function ju(e){let t=0;for(let n=0;n<e.length;n+=1)t=t*31+e.charCodeAt(n)>>>0;return t}var Mu=X([`unknown`,`checking`,`up_to_date`,`available`,`unsupported_install`,`updating`,`restarting`,`failed`]),Nu=X([`npm`,`pnpm`,`yarn`,`unknown`]),Pu=X([`global_registry`,`global_file`,`dev_workspace`,`standalone_binary`,`unknown`]),Fu=X([`console`,`mobile`,`system`]),Iu=J({manager:Nu,installType:Pu,packageName:K().min(1),packageRoot:K().min(1).optional(),binPath:K().min(1).optional(),canSelfUpdate:Xn(),reason:K().min(1).optional()}),Lu=J({id:K().min(1),targetVersion:K().min(1),requestedBy:Fu,requestedAt:K().datetime(),startedAt:K().datetime().optional()}),Ru=J({packageName:K().min(1),currentVersion:K().min(1),latestVersion:K().min(1).optional(),available:Xn(),canApply:Xn(),status:Mu,checkedAt:K().datetime().optional(),install:Iu,job:Lu.optional(),lastError:K().min(1).optional()}),zu=J({type:Y(`gateway.update.status`),payload:Ru}),Bu=J({started:Xn(),update:Ru}),Vu=er(`kind`,[J({kind:Y(`session_relative`),sessionId:K().min(1),path:K().min(1)}),J({kind:Y(`project_relative`),projectId:K().min(1),path:K().min(1)}),J({kind:Y(`absolute`),path:K().min(1)})]),Hu=er(`kind`,[J({kind:Y(`project_relative`),projectId:K().min(1),path:K().min(1).optional()}),J({kind:Y(`absolute`),path:K().min(1).optional()})]),Uu=X([`text`,`code`,`markdown`,`image`,`video`,`audio`,`pdf`,`office`,`archive`,`binary`,`unknown`]),Wu=X([`inline_text`,`inline_media`,`browser`,`share_sheet`,`download`]),Gu=J({canReadText:Xn(),canPreparePreview:Xn(),supportsRange:Xn()}),Ku=J({locator:Vu,canonicalPath:K().min(1),displayName:K().min(1),projectId:K().min(1).optional(),relativePath:K().min(1).optional(),kind:Y(`file`),sizeBytes:q().int().nonnegative(),mimeType:K().min(1),extension:K().min(1),updatedAt:K().datetime().optional(),etag:K().min(1),previewCategory:Uu,preferredPreviewAction:Wu,capabilities:Gu}),qu=J({name:K().min(1),path:K().min(1),kind:X([`file`,`dir`]),sizeBytes:q().int().nonnegative().optional(),mimeType:K().min(1).optional(),extension:K().min(1).optional(),updatedAt:K().datetime().optional(),previewCategory:Uu.optional()}),Ju=J({rootPath:K().min(1),currentPath:K().min(1),parentPath:K().min(1).nullable(),entries:Qn(qu)}),Yu=J({file:Ku}),Xu=J({file:Ku,content:K(),encoding:Y(`utf8`),startLine:q().int().positive(),endLineExclusive:q().int().positive(),totalLines:q().int().positive().optional(),totalBytes:q().int().nonnegative(),truncated:Xn()}),Zu=X([`inline`,`attachment`]),Qu=J({file:Ku,preview:J({url:K().min(1),expiresAt:K().datetime(),supportsRange:Xn(),contentType:K().min(1),contentDisposition:Zu})}),$u=nr(e=>{if(typeof e!=`string`)return e;let t=e.trim();return t.length>0?t:e},K().trim().min(1)),ed=J({id:K().min(1),title:K().min(1),path:K().min(1),createdAt:K().datetime(),updatedAt:K().datetime(),lastSessionAt:K().datetime().optional(),runningCount:q().int().nonnegative(),idleCount:q().int().nonnegative().optional(),totalCount:q().int().nonnegative().optional(),endedCount:q().int().nonnegative()}),td=J({name:K().min(1),path:K().min(1)}),nd=J({kind:X([`home`,`desktop`,`documents`,`downloads`,`root`]),path:K().min(1)}),rd=J({rootPath:K().min(1),currentPath:K().min(1),parentPath:K().min(1).nullable(),shortcuts:Qn(nd).default([]),directories:Qn(td)}),id=X([`running`,`idle`]),ad=X([`running`,`idle`,`all`]),od=X([`external_turn_running`]),sd=X([`delta`,`snapshot`]),cd=J({id:K().min(1),nativeSessionId:K().min(1).optional(),source:X([`gateway`,`native_discovered`]).optional(),projectId:K().min(1),projectPath:K().min(1),provider:Na,providerMode:X([`native`,`mock`]).optional(),model:K().min(1).optional(),title:K().min(1).optional(),sessionTurnConfig:cc.optional(),sessionTurnConfigUpdatedAt:K().datetime().optional(),createdAt:K().datetime(),updatedAt:K().datetime(),status:id,interactionLockReason:od.optional(),pendingApprovals:q().int().nonnegative(),pendingUserInputs:q().int().nonnegative(),pendingActions:q().int().nonnegative()}),ld=J({id:K().min(1),name:K().min(1),createdAt:K().datetime(),revokedAt:K().datetime().optional(),identityAlgorithm:X([`ed25519`]).optional(),publicKeyFingerprint:K().min(1).optional(),identityStatus:fl.optional(),lastVerifiedAt:K().datetime().optional()}),ud=J({name:$u,machineName:K().min(1)}),dd=J({agent:J({provider:Na,requestedVersion:K().min(1).nullable(),resolvedVersion:K().min(1)}),capabilities:Va}),fd=J({scannedAt:K().datetime(),sessionCount:q().int().nonnegative(),status:X([`ready`,`partial`,`failed`]),error:K().min(1).optional()}),pd=J({codex:fd.optional(),claude:fd.optional()}),md=J({key:K().min(1),path:K().min(1),title:K().min(1),lastSessionAt:K().datetime().optional(),sessionCount:q().int().nonnegative(),providerCounts:J({codex:q().int().nonnegative(),claude:q().int().nonnegative()}),lastDiscoveryAt:K().datetime()}),hd=J({provider:Na,nativeSessionId:K().min(1),title:K().min(1).optional(),model:K().min(1).optional(),createdAt:K().datetime().optional(),updatedAt:K().datetime()}),gd=J({generatedAt:K().datetime(),source:X([`cache`,`fresh_scan`]),providers:pd,projects:Qn(md)}),_d=J({canonicalProjectPath:K().min(1),project:md,providers:pd,sessions:Qn(hd)}),vd=X(`auth.refresh,codex.accounts.get,codex.accounts.save,codex.accounts.switch,codex.appServer.restart,gateway.settings.get,gateway.settings.update,gateway.update.get,gateway.update.apply,projects.list,projects.discovery.get,projects.discovery.refresh,projects.create,projects.delete,workspace.directories.list,workspace.directories.create,workspace.entries.list,workspace.files.resolve,workspace.files.readText,workspace.files.preparePreview,sessions.list,sessions.discovery.list,sessions.get,sessions.config.get,sessions.history.sync,sessions.rawEvents.list,sessions.readableItem.get,providers.capabilities.get,providers.execution.update,agents.config.get,devices.list,devices.revoke`.split(`,`)),yd=J({}).strict(),bd=er(`method`,[J({method:Y(`auth.refresh`),params:bl.extend({deviceId:K().min(1).optional()})}),J({method:Y(`codex.accounts.get`),params:yd}),J({method:Y(`codex.accounts.save`),params:yd}),J({method:Y(`codex.accounts.switch`),params:J({accountId:K().min(1)})}),J({method:Y(`codex.appServer.restart`),params:J({requestedBy:Fu.optional()})}),J({method:Y(`gateway.settings.get`),params:yd}),J({method:Y(`gateway.settings.update`),params:J({name:$u})}),J({method:Y(`gateway.update.get`),params:yd}),J({method:Y(`gateway.update.apply`),params:J({requestedBy:Fu.optional()})}),J({method:Y(`projects.list`),params:yd}),J({method:Y(`projects.discovery.get`),params:yd}),J({method:Y(`projects.discovery.refresh`),params:yd}),J({method:Y(`projects.create`),params:J({path:$u,title:K().min(1).optional()})}),J({method:Y(`projects.delete`),params:J({projectId:K().min(1)})}),J({method:Y(`workspace.directories.list`),params:J({path:K().min(1).optional(),limit:q().int().positive().max(500).optional()})}),J({method:Y(`workspace.directories.create`),params:J({path:$u,name:$u})}),J({method:Y(`workspace.entries.list`),params:J({locator:Hu,limit:q().int().positive().max(500).optional()})}),J({method:Y(`workspace.files.resolve`),params:J({locator:Vu})}),J({method:Y(`workspace.files.readText`),params:J({locator:Vu,encoding:Y(`utf8`).optional(),startLine:q().int().positive().optional(),maxLines:q().int().positive().max(5e3).optional(),maxBytes:q().int().positive().max(1024*1024).optional()})}),J({method:Y(`workspace.files.preparePreview`),params:J({locator:Vu,disposition:Zu.optional()})}),J({method:Y(`sessions.list`),params:J({projectId:K().min(1),status:ad.optional(),syncExternal:Xn().optional()})}),J({method:Y(`sessions.discovery.list`),params:J({projectPath:$u})}),J({method:Y(`sessions.get`),params:J({projectId:K().min(1),sessionId:K().min(1)})}),J({method:Y(`sessions.config.get`),params:J({projectId:K().min(1),sessionId:K().min(1)})}),J({method:Y(`sessions.history.sync`),params:J({projectId:K().min(1),sessionId:K().min(1)})}),J({method:Y(`sessions.rawEvents.list`),params:J({projectId:K().min(1),sessionId:K().min(1),limit:$n([q().int().positive().max(2e3),Y(`all`)]).optional(),fromRawSeqExclusive:q().int().nonnegative().optional(),detailLevel:hc.optional()})}),J({method:Y(`sessions.readableItem.get`),params:J({projectId:K().min(1),sessionId:K().min(1),itemId:K().min(1)})}),J({method:Y(`providers.capabilities.get`),params:J({provider:Na,projectId:K().min(1).optional(),agentVersion:K().min(1).optional()})}),J({method:Y(`providers.execution.update`),params:za}),J({method:Y(`agents.config.get`),params:J({provider:Na,projectId:K().min(1).optional(),agentVersion:K().min(1).optional()})}),J({method:Y(`devices.list`),params:yd}),J({method:Y(`devices.revoke`),params:J({deviceId:K().min(1)})})]),xd=er(`method`,[J({method:Y(`auth.refresh`),result:xl.extend({relayToken:K().min(1).optional()})}),J({method:Y(`codex.accounts.get`),result:El}),J({method:Y(`codex.accounts.save`),result:Dl}),J({method:Y(`codex.accounts.switch`),result:Ol}),J({method:Y(`codex.appServer.restart`),result:kl}),J({method:Y(`gateway.settings.get`),result:ud}),J({method:Y(`gateway.settings.update`),result:ud}),J({method:Y(`gateway.update.get`),result:Ru}),J({method:Y(`gateway.update.apply`),result:Bu}),J({method:Y(`projects.list`),result:J({projects:Qn(ed)})}),J({method:Y(`projects.discovery.get`),result:gd}),J({method:Y(`projects.discovery.refresh`),result:gd}),J({method:Y(`projects.create`),result:J({project:ed})}),J({method:Y(`projects.delete`),result:J({removed:Y(!0)})}),J({method:Y(`workspace.directories.list`),result:rd}),J({method:Y(`workspace.directories.create`),result:rd}),J({method:Y(`workspace.entries.list`),result:Ju}),J({method:Y(`workspace.files.resolve`),result:Yu}),J({method:Y(`workspace.files.readText`),result:Xu}),J({method:Y(`workspace.files.preparePreview`),result:Qu}),J({method:Y(`sessions.list`),result:J({sessions:Qn(cd)})}),J({method:Y(`sessions.discovery.list`),result:_d}),J({method:Y(`sessions.get`),result:J({session:cd})}),J({method:Y(`sessions.config.get`),result:J({session:cd})}),J({method:Y(`sessions.history.sync`),result:J({session:cd,rawEventCount:q().int().nonnegative(),historyUpdated:Xn(),statusChanged:Xn(),refreshMode:sd,fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative().optional()})}),J({method:Y(`sessions.rawEvents.list`),result:er(`decision`,[J({decision:Y(`delta`),reason:X([`cursor_valid_delta`]),fromRawSeqExclusive:q().int().nonnegative(),toRawSeq:q().int().nonnegative(),events:Qn(Zn())}),J({decision:Y(`snapshot`),reason:X([`cursor_out_of_range`,`initial_snapshot`,`empty_history_snapshot`]),toRawSeq:q().int().nonnegative().optional(),events:Qn(Zn())})])}),J({method:Y(`sessions.readableItem.get`),result:J({item:vo})}),J({method:Y(`providers.capabilities.get`),result:J({capabilities:Va})}),J({method:Y(`providers.execution.update`),result:J({defaults:za})}),J({method:Y(`agents.config.get`),result:dd}),J({method:Y(`devices.list`),result:J({devices:Qn(ld)})}),J({method:Y(`devices.revoke`),result:J({revoked:Y(!0)})})]),Sd=`json-utf8`,Cd=X([Sd]),wd=X([`identity`,`gzip`]),Td=J({version:Y(1),compression:Y(`gzip`),payloadEncoding:Cd.default(Sd),uncompressedByteLength:q().int().positive(),compressedByteLength:q().int().positive(),data:pc});function Ed(e){let t=kd(e.payload),n=t.byteLength;if(n<(e.compressionThresholdBytes??1/0))return{payloadEncoding:Sd,compression:`identity`,payloadBytes:t,uncompressedByteLength:n,compressedByteLength:n};let r=ti(t);return r.byteLength>=n?{payloadEncoding:Sd,compression:`identity`,payloadBytes:t,uncompressedByteLength:n,compressedByteLength:n}:{payloadEncoding:Sd,compression:`gzip`,payloadBytes:r,uncompressedByteLength:n,compressedByteLength:r.byteLength}}function Dd(e){return e.compression===`gzip`?Td.parse({version:1,compression:`gzip`,payloadEncoding:e.payloadEncoding,uncompressedByteLength:e.uncompressedByteLength,compressedByteLength:e.compressedByteLength,data:Md(e.payloadBytes)}):null}function Od(e){let t=wd.parse(e.compression??`identity`),n=e.payloadBytes;if(t===`gzip`)try{n=ni(e.payloadBytes)}catch{throw Error(`compressed_payload_invalid`)}if(typeof e.expectedUncompressedByteLength==`number`&&n.byteLength!==e.expectedUncompressedByteLength)throw Error(`compressed_payload_size_mismatch`);let r;try{r=JSON.parse(jd(n))}catch{throw Error(`compressed_payload_invalid`)}return e.parse(r)}function kd(e){return Ad(JSON.stringify(e))}function Ad(e){return new TextEncoder().encode(e)}function jd(e){return new TextDecoder().decode(e)}function Md(e){let t=globalThis.Buffer;if(t)return t.from(e).toString(`base64`);let n=``;for(let t of e)n+=String.fromCharCode(t);if(typeof btoa!=`function`)throw Error(`base64 encoder unavailable`);return btoa(n)}var Nd=K().url(),Pd=$n([Nd,Y(``)]),Fd=K().min(1).regex(/^[A-Za-z0-9_-]+$/u),Id=X([`plaintext-relay`,`e2ee-relay`]),Ld=X([`plain`,`crypt`]);function Rd(e){if(e===`plain`||e===`crypt`)return e;if(e===`plaintext-relay`)return`plain`;if(e===`e2ee-relay`)return`crypt`}function zd(e){if(!e||typeof e!=`object`||Array.isArray(e))return e;let t=e,n=Rd(t.tsl??t.transportSecurityLevel);return n?{...t,tsl:n}:t}function Bd(e){return e.trim()}var Vd=X([`ed25519-x25519-hkdf-sha256-aes-256-gcm-v1`]),Hd=q().int().positive(),Ud=q().int().min(0).max(2**53-1),Wd=X([`identity_mismatch`,`device_revoked`,`transcript_invalid`,`counter_replay`,`counter_gap_too_large`,`key_epoch_mismatch`,`decrypt_failed`,`unsupported_version`]),Gd=X([`guest`,`account`,`self_hosted`]);J({type:Y(`relay.gateway`),grantType:Gd,gatewayId:K().min(1),subjectId:K().min(1),gatewayIdentityFingerprint:K().min(1).optional(),jti:K().min(1),iss:K().min(1),aud:K().min(1),iat:q().int().nonnegative(),exp:q().int().positive()}),J({type:Y(`relay.mobile`),gatewayId:K().min(1),deviceId:K().min(1),iat:q().int().nonnegative(),exp:q().int().positive()});var Kd=J({v:Y(1),gw:K().min(1),name:K().min(1),machineName:K().min(1).optional(),relay:Pd.optional(),direct:Qn(Nd).default([]),pc:K().min(1),tsl:Ld.optional(),gatewayIdentity:ul.optional()});nr(zd,Kd);var qd=nr(zd,Kd.omit({pc:!0}));nr(zd,J({v:Y(1),gw:K().min(1),relay:Pd.optional(),direct:Pd.optional(),pc:K().min(1),tsl:Ld.optional(),gatewayIdentity:ul.optional()}));var Jd=nr(zd,J({v:Y(1),gw:K().min(1),relay:Pd.optional(),direct:Nd,pc:K().min(1),pkf:Fd,tsl:Ld.optional()})),Yd=J({name:K().min(1),relayBaseUrl:Pd.optional(),directBaseUrls:Qn(Nd).default([]),transportSecurityLevel:Id.default(`plaintext-relay`),gatewayIdentity:ul.optional(),gatewayAccessToken:K().min(1).optional(),connectedAt:K().datetime().optional()}),Xd=J({gatewayId:K().min(1),deviceId:K().min(1),connectedAt:K().datetime().optional()}),Zd=J({version:Y(1),securityLevel:Y(`e2ee-relay`),cipherSuite:Vd,deviceId:K().min(1),deviceIdentity:pl,clientNonce:pc}),Qd=J({version:Y(1),securityLevel:Y(`e2ee-relay`),cipherSuite:Vd,gatewayId:K().min(1),deviceId:K().min(1),clientNonce:pc,gatewayNonce:pc,gatewayPublicKeyFingerprint:K().min(1),gatewayEphemeralPublicKey:pc,signatureAlgorithm:Y(`ed25519`),signature:pc}),$d=J({version:Y(1),gatewayId:K().min(1),deviceId:K().min(1),deviceIdentityFingerprint:K().min(1),clientEphemeralPublicKey:pc,signatureAlgorithm:Y(`ed25519`),signature:pc}),ef=J({version:Y(1),securityLevel:Y(`e2ee-relay`),cipherSuite:Vd,gatewayId:K().min(1),deviceId:K().min(1),keyEpoch:Hd,deviceIdentityFingerprint:K().min(1),deviceIdentityStatus:fl}),tf=X([`gateway_restarted`,`gateway_available`]),nf=J({version:Y(1),gatewayId:K().min(1),deviceId:K().min(1),reason:tf,retryable:Y(!0)}),rf=J({ticket:K().min(1),method:X([`GET`,`HEAD`]),rangeHeader:K().min(1).optional(),responseMode:X([`inline_base64`,`stream_upload`]).optional(),uploadUrl:K().url().optional(),uploadToken:K().min(1).optional()}).superRefine((e,t)=>{e.responseMode===`stream_upload`&&(e.uploadUrl||t.addIssue({code:W.custom,path:[`uploadUrl`],message:`uploadUrl is required when responseMode is stream_upload`}),e.uploadToken||t.addIssue({code:W.custom,path:[`uploadToken`],message:`uploadToken is required when responseMode is stream_upload`}))}),af=J({status:$n([Y(200),Y(206),Y(416)]),headers:J({contentType:K().min(1),contentDisposition:K().min(1),contentLength:q().int().nonnegative(),etag:K().min(1),acceptRanges:Y(`bytes`).optional(),contentRange:K().min(1).optional(),lastModified:K().min(1).optional(),cacheControl:K().min(1)}),bodyTransport:X([`inline_base64`,`stream_upload`]).optional(),bodyBase64:pc.optional()}),of=J({}),sf=af,cf=J({version:Y(1),gatewayId:K().min(1),deviceId:K().min(1).optional(),code:Wd,message:K().min(1),retryable:Xn().optional()}),lf=bd,uf=xd,df=J({code:X([`BAD_REQUEST`,`NOT_FOUND`,`UNAUTHORIZED`,`TIMEOUT`,`INTERNAL`,`GATEWAY_OFFLINE`,`TOKEN_INVALID`,`TOKEN_EXPIRED`,`GATEWAY_MISMATCH`,`GATEWAY_REVOKED`]),message:K().min(1),status:q().int().min(400).max(599),details:Zn().optional()}),ff=df.extend({method:vd.optional()}),pf=_l.extend({gatewayId:K().min(1)}),mf=yl.extend({relayToken:K().min(1).optional()}),hf=bl.extend({gatewayId:K().min(1),deviceId:K().min(1).optional()}),gf=xl.extend({gatewayId:K().min(1),relayToken:K().min(1).optional()}),_f=J({gatewayId:K().min(1),gatewayIdentity:ul,requestedAt:K().datetime()});J({grantType:Y(`guest`),payload:_f,signatureAlgorithm:Y(`ed25519`),signature:pc});var vf=J({grantType:Gd,token:K().min(1),expiresInSeconds:q().int().positive()}),yf=X([`rpc`,`command`,`event`,`system`]),bf=Sd,xf=Cd,Sf=J({version:Y(1),keyEpoch:Hd,counter:Ud,iv:pc,ciphertext:pc,authTag:pc,plaintextEncoding:xf.default(bf),compression:wd.default(`identity`),uncompressedByteLength:q().int().positive().optional(),compressedByteLength:q().int().positive().optional()});X([`from_mobile`,`to_mobile`,`rpc.request`,`rpc.response`,`rpc.error`]);function Cf(e){return{payload:e.optional(),encryptedPayload:Sf.optional()}}function wf(e){return{payload:e.optional(),compressedPayload:Td.optional(),encryptedPayload:Sf.optional()}}var Tf=J({gatewayId:K().min(1),mobileId:K().min(1).optional(),messageType:yf,requestId:K().min(1).optional()}),Ef=X([`fresh_connect`,`gateway_replay`]),Df=J({deviceId:K().min(1),deliveryMode:Ef,gatewayAvailableAtConnect:Xn()}),Of=J({deviceId:K().min(1)}),kf=$n([ll,zu,J({type:Y(`command.ack`),commandType:K().min(1),commandId:K().min(1).optional(),payload:Zn().optional()}),J({type:Y(`command.error`),commandType:K().min(1).optional(),commandId:K().min(1).optional(),message:K().min(1)}),J({type:Y(`relay.error`),error:df})]),Af=er(`type`,[Tf.extend({type:Y(`gateway.hello`),messageType:Y(`system`),payload:Yd}),Tf.extend({type:Y(`mobile.hello`),messageType:Y(`system`),payload:Xd}),Tf.extend({type:Y(`secure.client_hello`),messageType:Y(`system`),payload:Zd}),Tf.extend({type:Y(`secure.gateway_hello`),mobileId:K().min(1),messageType:Y(`system`),payload:Qd}),Tf.extend({type:Y(`secure.client_auth`),messageType:Y(`system`),payload:$d}),Tf.extend({type:Y(`secure.ready`),mobileId:K().min(1),messageType:Y(`system`),payload:ef}),Tf.extend({type:Y(`secure.handshake_required`),mobileId:K().min(1),messageType:Y(`system`),payload:nf}),Tf.extend({type:Y(`secure.error`),mobileId:K().min(1),messageType:Y(`system`),payload:cf}),Tf.extend({type:Y(`mobile.connected`),messageType:Y(`system`),payload:Df}),Tf.extend({type:Y(`mobile.disconnected`),messageType:Y(`system`),payload:Of}),Tf.extend({type:Y(`from_mobile`),messageType:Y(`command`),mobileId:K().min(1),...Cf(Oc)}),Tf.extend({type:Y(`to_mobile`),messageType:Y(`event`),mobileId:K().min(1),...wf(kf)}),Tf.extend({type:Y(`rpc.request`),messageType:Y(`rpc`),requestId:K().min(1),mobileId:K().min(1),...Cf(lf)}),Tf.extend({type:Y(`rpc.response`),messageType:Y(`rpc`),requestId:K().min(1),mobileId:K().min(1),...wf(uf)}),Tf.extend({type:Y(`rpc.error`),messageType:Y(`rpc`),requestId:K().min(1),mobileId:K().min(1),...wf(ff)}),Tf.extend({type:Y(`broadcast`),messageType:Y(`event`),payload:ll}),Tf.extend({type:Y(`pairing.claim.forward`),messageType:Y(`system`),requestId:K().min(1),payload:pf}),Tf.extend({type:Y(`pairing.claim.result`),messageType:Y(`system`),requestId:K().min(1),payload:mf}),Tf.extend({type:Y(`auth.refresh.forward`),messageType:Y(`system`),requestId:K().min(1),payload:hf}),Tf.extend({type:Y(`auth.refresh.result`),messageType:Y(`system`),requestId:K().min(1),payload:gf}),Tf.extend({type:Y(`file.content.forward`),messageType:Y(`system`),requestId:K().min(1),payload:rf}),Tf.extend({type:Y(`file.content.result`),messageType:Y(`system`),requestId:K().min(1),payload:af}),Tf.extend({type:Y(`file.content.upload.started`),messageType:Y(`system`),requestId:K().min(1),payload:of}),Tf.extend({type:Y(`relay.error`),messageType:Y(`system`),payload:df})]);function jf(e){return JSON.stringify([`relay-gateway-guest-token-v1`,e.gatewayId,e.gatewayIdentity.algorithm,e.gatewayIdentity.publicKey,e.gatewayIdentity.publicKeyFingerprint,e.gatewayIdentity.keyVersion,e.gatewayIdentity.createdAt,e.requestedAt])}function Mf(e){return JSON.stringify([e.gatewayId,e.clientHello.version,e.clientHello.securityLevel,e.clientHello.cipherSuite,e.clientHello.deviceId,e.clientHello.deviceIdentity.publicKey,e.clientHello.deviceIdentity.publicKeyFingerprint,e.clientHello.clientNonce,e.gatewayHello.gatewayNonce,e.gatewayHello.gatewayPublicKeyFingerprint,e.gatewayHello.gatewayEphemeralPublicKey])}function Nf(e){return JSON.stringify([`relay-secure-gateway-hello-v1`,Mf(e)])}function Pf(e){return JSON.stringify([`relay-secure-client-auth-v1`,Mf(e),e.clientAuth.clientEphemeralPublicKey])}function Ff(e){let t=Hd.parse(e.keyEpoch??1);return JSON.stringify([`relay-secure-session-v1`,e.gatewayId,e.clientHello.version,e.clientHello.securityLevel,e.clientHello.cipherSuite,e.clientHello.deviceId,e.clientHello.deviceIdentity.publicKey,e.clientHello.deviceIdentity.publicKeyFingerprint,e.clientHello.clientNonce,e.gatewayHello.gatewayNonce,e.gatewayHello.gatewayPublicKeyFingerprint,e.gatewayHello.gatewayEphemeralPublicKey,e.clientAuth.clientEphemeralPublicKey,t])}function If(e){let t=e.clientHello.cipherSuite;if(t!==`ed25519-x25519-hkdf-sha256-aes-256-gcm-v1`)throw Error(`unsupported cipher suite: ${t}`);let n=Hd.parse(e.keyEpoch??1),r=Jf(Zf(Ff({gatewayId:e.gatewayId,clientHello:e.clientHello,gatewayHello:e.gatewayHello,clientAuth:e.clientAuth,keyEpoch:n}))),i=Jf(Xf(Zf(`relay-secure-hkdf-salt-v1`),r)),a=Zf(JSON.stringify([`relay-secure-key-schedule-v1`,e.gatewayId,e.clientHello.deviceId,t,n])),o=qf(e.sharedSecret,i,a,72);return{keyEpoch:n,cipherSuite:t,transcriptHash:r,clientToGatewayKey:o.slice(0,32),gatewayToClientKey:o.slice(32,64),clientToGatewayNoncePrefix:o.slice(64,68),gatewayToClientNoncePrefix:o.slice(68,72)}}function Lf(e){return e.role===`client`?{role:`client`,keyEpoch:e.keySchedule.keyEpoch,cipherSuite:e.keySchedule.cipherSuite,transcriptHash:e.keySchedule.transcriptHash,outboundKey:e.keySchedule.clientToGatewayKey,inboundKey:e.keySchedule.gatewayToClientKey,outboundNoncePrefix:e.keySchedule.clientToGatewayNoncePrefix,inboundNoncePrefix:e.keySchedule.gatewayToClientNoncePrefix,outboundCounter:0,highestInboundCounter:null}:{role:`gateway`,keyEpoch:e.keySchedule.keyEpoch,cipherSuite:e.keySchedule.cipherSuite,transcriptHash:e.keySchedule.transcriptHash,outboundKey:e.keySchedule.gatewayToClientKey,inboundKey:e.keySchedule.clientToGatewayKey,outboundNoncePrefix:e.keySchedule.gatewayToClientNoncePrefix,inboundNoncePrefix:e.keySchedule.clientToGatewayNoncePrefix,outboundCounter:0,highestInboundCounter:null}}function Rf(e,t){let n=Ud.parse(t);if(e.length!==4)throw Error(`nonce prefix must be 4 bytes`);let r=new Uint8Array(12);return r.set(e,0),r.set($f(n),4),r}function zf(e,t){let n=Ud.parse(t);if(e===null)return;let r=Ud.parse(e);if(n<=r)throw Error(`counter_replay`);if(n-r>1e3)throw Error(`counter_gap_too_large`)}function Bf(e){return JSON.stringify([`relay-secure-business-payload-v1`,e.metadata.frameType,e.metadata.messageType,e.metadata.gatewayId,e.metadata.requestId??``,e.encryptedPayload.version,e.encryptedPayload.keyEpoch,e.encryptedPayload.counter])}function Vf(e){Yf(e.session.cipherSuite);let t=e.session.outboundCounter,n=Rf(e.session.outboundNoncePrefix,t),r=e.preparedPayload.payloadBytes,i=Zf(Bf({metadata:e.metadata,encryptedPayload:{version:1,keyEpoch:e.session.keyEpoch,counter:t}})),a=Ki(e.session.outboundKey,n,i).encrypt(r),o=a.subarray(0,a.length-16),s=a.subarray(a.length-16);return e.session.outboundCounter=t+1,Sf.parse({version:1,keyEpoch:e.session.keyEpoch,counter:t,iv:Uf(n),ciphertext:Uf(o),authTag:Uf(s),plaintextEncoding:bf,compression:e.preparedPayload.compression,...e.preparedPayload.compression===`gzip`?{uncompressedByteLength:e.preparedPayload.uncompressedByteLength,compressedByteLength:e.preparedPayload.compressedByteLength}:{}})}function Hf(e){Yf(e.session.cipherSuite);let t=Sf.parse(e.encryptedPayload);if(t.keyEpoch!==e.session.keyEpoch)throw Error(`key_epoch_mismatch`);zf(e.session.highestInboundCounter,t.counter);let n=Rf(e.session.inboundNoncePrefix,t.counter),r=Wf(t.iv);if(!Qf(r,n))throw Error(`decrypt_failed`);let i=Zf(Bf({metadata:e.metadata,encryptedPayload:t})),a=Xf(Wf(t.ciphertext),Wf(t.authTag)),o;try{o=Ki(e.session.inboundKey,r,i).decrypt(a)}catch{throw Error(`decrypt_failed`)}e.session.highestInboundCounter=t.counter;try{return Od({payloadBytes:o,compression:t.compression,expectedUncompressedByteLength:t.uncompressedByteLength,parse:e.parse})}catch{throw Error(`decrypt_failed`)}}function Uf(e){let t=globalThis.Buffer;if(t)return t.from(e).toString(`base64`);let n=``;for(let t of e)n+=String.fromCharCode(t);if(typeof btoa!=`function`)throw Error(`base64 encoder unavailable`);return btoa(n)}function Wf(e){let t=globalThis.Buffer;if(t)return new Uint8Array(t.from(e,`base64`));if(typeof atob!=`function`)throw Error(`base64 decoder unavailable`);let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)r[e]=n.charCodeAt(e);return r}function Gf(e){return Uf(e).replace(/\+/gu,`-`).replace(/\//gu,`_`).replace(/=+$/u,``)}function Kf(e){return Wf(e.replace(/-/gu,`+`).replace(/_/gu,`/`).padEnd(Math.ceil(e.length/4)*4,`=`))}function qf(e,t,n,r){return r<=0?new Uint8Array:new Uint8Array(va(Ma,e,t.length>0?t:new Uint8Array(32),n,r))}function Jf(e){return new Uint8Array(Ma(e))}function Yf(e){if(e!==`ed25519-x25519-hkdf-sha256-aes-256-gcm-v1`)throw Error(`unsupported cipher suite: ${e}`)}function Xf(...e){let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}function Zf(e){return new TextEncoder().encode(e)}function Qf(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function $f(e){if(!Number.isSafeInteger(e))throw Error(`counter must be a safe integer`);let t=Math.floor(e/4294967296),n=e>>>0,r=new Uint8Array(8),i=new DataView(r.buffer);return i.setUint32(0,t),i.setUint32(4,n),r}function ep(e){return Gf(Ma(Wf(e)).subarray(0,16))}function tp(e){if(e.type!==`native.raw`)return null;let t=sp(e.payload.raw),n=sp(t.message),r=sp(n.params),i=sp(r.msg),a=cp(n.method)??cp(t.method);if(!a)return null;let o=cp(i.type)??``;if(!ap(a)&&!op(o))return null;let s=ip(t);if(!s||!s.delta)return null;let c=cp(r.conversationId)??cp(r.conversation_id)??``,l=cp(i.thread_id)??cp(i.threadId)??cp(r.threadId)??cp(r.thread_id)??``,u=cp(i.turn_id)??cp(i.turnId)??cp(r.turnId)??cp(r.turn_id)??``,d=cp(i.item_id)??cp(i.itemId)??cp(r.itemId)??cp(r.item_id)??``,f=cp(t.source)??``,p=lp(i.summaryIndex??i.summary_index??r.summaryIndex??r.summary_index),m=lp(i.contentIndex??i.content_index??r.contentIndex??r.content_index);return{key:[e.sessionId,f,a,c,l,u,d,o,p,m].join(`|`),delta:s.delta,method:a}}function np(e,t){let n=tp(e),r=tp(t);if(!n||!r||n.key!==r.key)return null;let i=`${n.delta}${r.delta}`,a=sp(t.payload.raw),o=ip(a)?.location??ip(sp(e.payload.raw))?.location;return o?{...t,eventId:e.eventId,ts:t.ts,payload:{...t.payload,raw:rp(a,o,i)}}:null}function rp(e,t,n){if(t===`raw.delta`)return{...e,delta:n};let r=sp(e.message),i=sp(r.params);if(t===`params.delta`)return{...e,message:{...r,params:{...i,delta:n}}};let a=sp(i.msg);return{...e,message:{...r,params:{...i,msg:{...a,delta:n}}}}}function ip(e){let t=sp(sp(e.message).params),n=sp(t.msg);return typeof n.delta==`string`?{delta:n.delta,location:`msg.delta`}:typeof t.delta==`string`?{delta:t.delta,location:`params.delta`}:typeof e.delta==`string`?{delta:e.delta,location:`raw.delta`}:null}function ap(e){return e.includes(`_delta`)||e.endsWith(`/delta`)||e.endsWith(`Delta`)||e.includes(`/delta/`)}function op(e){return e.endsWith(`_delta`)||e.endsWith(`Delta`)}function sp(e){return typeof e==`object`&&e?e:{}}function cp(e){return typeof e==`string`&&e.trim()||void 0}function lp(e){return typeof e==`number`&&Number.isFinite(e)?String(e):typeof e==`bigint`?e.toString():cp(e)??``}var up=new Set([`claude.history.getSessionMessages`,`claude.history.jsonl`]),dp=/\u001B\[[0-?]*[ -/]*[@-~]/g,fp={"thread.started":0,"thread.title.updated":1,"turn.started":2,"item.started":3,"item.updated":4,"item.completed":5,"turn.completed":6,"turn.failed":6,"tool.permission.requested":7,"user.input.requested":7};function pp(e,t){let n=[],r=0,i=[...t].filter(t=>t.sessionId===e).sort((e,t)=>e.ts.localeCompare(t.ts)),a=[],o=()=>(r+=1,`raw_proj_item_${e}_${r}`);for(let e of i){let t=nl.safeParse(e.type);if(t.success){n.push(vp(e,t.data,Dp(e.payload.raw),e.eventId));continue}if(e.type!==`native.raw`)continue;let r=Dp(e.payload.raw),i=hp(e,r);if(i.length>0&&n.push(...i),r.historyReplay!==!0)continue;let o=Z(r.source);if(o?.startsWith(`codex.history.thread_read`)){n.push(...gp(e,r));continue}o&&up.has(o)&&a.push(e)}a.length>0&&n.push(..._p(a,o));let s=new Map,c=new Map;for(let e of n){let t=Sp(e);if(!t){s.set(e.eventId,e);continue}let n=Cp(e.payload.raw),r=c.get(t);(!r||n>r.richness)&&c.set(t,{event:e,richness:n})}for(let{event:e}of c.values())s.set(e.eventId,e);return[...s.values()].sort((e,t)=>{let n=e.ts.localeCompare(t.ts);if(n!==0)return n;let r=Gp(e.type)-Gp(t.type);return r===0?e.eventId.localeCompare(t.eventId):r})}function mp(e,t,n){return Ll(e,pp(e,t),n)}function hp(e,t){if(e.type!==`native.raw`||Z(t.source)!==`codex.app_server`)return[];let n=Dp(t.message),r=Dp(n.params),i=Z(n.method)??Z(t.method);if(!i)return[];if(i===`turn/started`||i===`turn/completed`||i===`turn/failed`||i===`turn/interrupted`){let t=bp(Dp(r.turn),r);if(Object.keys(t).length===0)return[];let n=i===`turn/started`?`turn.started`:i===`turn/failed`?`turn.failed`:`turn.completed`,a=Z(t.status)??(i===`turn/completed`?`completed`:i===`turn/interrupted`?`interrupted`:`failed`),o=Dp(t.error);return[vp(e,n,{turn:t,status:a,turn_id:Z(t.id),source_event_type:`codex.app_server`,...n===`turn.failed`?{error:o}:{}},`${e.eventId}:${n.replace(`.`,`_`)}`)]}if(i===`item/started`||i===`item/completed`){let t=yp(Dp(r.item));if(Object.keys(t).length===0)return[];let n=Z(r.turn_id)??Z(r.turnId)??Z(Dp(r.turn).id)??Z(t.turn_id)??Z(t.turnId);return[vp(e,i===`item/started`?`item.started`:`item.completed`,{turn_id:n,item:t,source_event_type:`codex.app_server`},`${e.eventId}:${i===`item/started`?`item_started`:`item_completed`}`)]}return[]}function gp(e,t){let n=[],r=Dp(t.message),i=Z(r.scope);if(i===`thread`){let t=Dp(r.thread),i=Z(t.id);n.push(vp(e,`thread.started`,{thread_id:i,thread:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:thread_started`));let a=kp(Z(t.preview));return a&&n.push(vp(e,`thread.title.updated`,{title:a,source:`codex.history.thread_read`,thread_id:i},`${e.eventId}:thread_title_updated`)),n}if(i===`turn`){let t=Dp(r.turn),i=Z(t.status);return n.push(vp(e,`turn.started`,{turn:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:turn_started`)),i===`completed`||i===`interrupted`?n.push(vp(e,`turn.completed`,{status:i,turn:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:turn_completed`)):i===`failed`&&n.push(vp(e,`turn.failed`,{status:i,turn:t,error:Dp(t.error),source_event_type:`codex.history.thread_read`},`${e.eventId}:turn_failed`)),n}if(i===`item`){let t=Dp(r.item),i=Z(r.turn_id)??Z(t.turn_id);n.push(vp(e,`item.completed`,{turn_id:i,item:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:item_completed`))}return n}function _p(e,t){let n=[],r=e[0];if(!r)return n;let i=Dp(r.payload.raw),a=Dp(i.message),o=Z(i.native_session_id)??Z(a.session_id)??r.sessionId,s=new Map,c=!1,l=0,u;n.push(vp(r,`thread.started`,{thread_id:o,source:`claude.history.getSessionMessages`},`${r.eventId}:thread_started`));let d=(e,t,r)=>u||(l+=1,u={id:`claude_hist_turn_${l}`,terminal:!1},n.push(vp(e,`turn.started`,{turn_id:u.id,source_event_type:t,source_line:r},`${e.eventId}:turn_started:${u.id}`)),u),f=(e,t,r)=>{if(!u||u.terminal){u=void 0;return}u.terminal=!0,n.push(vp(e,`turn.completed`,{turn_id:u.id,source_event_type:t,source_line:r},`${e.eventId}:turn_completed:${u.id}`)),u=void 0},p=(e,t,r,i)=>{let a=d(e,t,r);a.terminal||(a.terminal=!0,n.push(vp(e,`turn.failed`,{turn_id:a.id,source_event_type:t,source_line:r,error:{message:i}},`${e.eventId}:turn_failed:${a.id}`)),u=void 0)};for(let r of e){let e=Dp(r.payload.raw),i=Dp(e.message),a=Z(e.native_type)??Z(i.type),l=Dp(i.message),u=Z(e.source)??`claude.history.getSessionMessages`,m=Wp(e.source_line);if(a===`user`){let e=Ap(l),a=Mp(l);if(e){if(!c){let t=kp(e);t&&(n.push(vp(r,`thread.title.updated`,{title:t,source:`claude.history.first_user_message`,thread_id:o},`${r.eventId}:thread_title_updated`)),c=!0)}f(r,u,m);let a=d(r,u,m);n.push(vp(r,`item.completed`,{item:{id:Z(i.uuid)??t(),type:`user_message`,text:e,turn_id:a.id,source_event_type:u},source_line:m},`${r.eventId}:item_completed_user`))}a.forEach((e,i)=>{let a=e.toolUseId?s.get(e.toolUseId):void 0;if(e.toolUseId&&s.delete(e.toolUseId),a?.skipReplay)return;let o=d(r,u,m);n.push(vp(r,`item.completed`,{item:Fp(a,e,o.id,t),source_line:m},`${r.eventId}:item_completed_tool_result_${i+1}`))});continue}if(a!==`assistant`)continue;let h=d(r,u,m);jp(l).forEach((e,i)=>{e.id&&s.set(e.id,e),!e.skipReplay&&n.push(vp(r,`item.started`,{item:{id:e.id??t(),type:`tool_status`,status:`running`,tool_name:e.name,title:e.title,text:e.title,status_label:e.pendingStatusLabel,display_as:`tool_card`,response_label:e.responseLabel,prompt:e.prompt,file_path:e.filePath,turn_id:h.id,source_event_type:u},source_line:m},`${r.eventId}:item_started_tool_use_${i+1}`))});let g=Ap(l);g&&n.push(vp(r,`item.completed`,{item:{id:Z(l.id)??Z(i.uuid)??t(),type:`agent_message`,text:g,turn_id:h.id,source_event_type:u},source_line:m},`${r.eventId}:item_completed_assistant`));let _=Up(Z(i.error));_&&p(r,u,m,_)}let m=e[e.length-1];if(m){let e=Dp(m.payload.raw);f(m,Z(e.source)??`claude.history.getSessionMessages`,Wp(e.source_line))}return n}function vp(e,t,n,r){return{v:e.v,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:r,ts:e.ts,type:t,payload:{raw:n}}}function yp(e){let t=wp(e),n=Z(e.type);return n&&(t.type=xp(n)),t}function bp(e,t){let n=wp(e),r=Z(e.id)??Z(t.turn_id)??Z(t.turnId);return r&&(n.id=r),n}function xp(e){switch(e){case`userMessage`:return`user_message`;case`agentMessage`:return`agent_message`;case`commandExecution`:return`command_execution`;case`fileChange`:return`file_change`;case`webSearch`:return`web_search`;case`mcpToolCall`:return`mcp_tool_call`;case`todoList`:return`todo_list`;case`contextCompaction`:return`context_compaction`;default:return Ep(e)}}function Sp(e){if(e.type!==`item.started`&&e.type!==`item.completed`)return;let t=Dp(e.payload.raw),n=Dp(t.item),r=Z(n.id)??Z(n.item_id)??Z(n.itemId);if(!r)return;let i=Z(t.turn_id)??Z(t.turnId)??Z(n.turn_id)??Z(n.turnId)??``;return[e.type,e.sessionId,i,r].join(`|`)}function Cp(e){return Array.isArray(e)?e.reduce((e,t)=>e+Cp(t),0):e&&typeof e==`object`?Object.entries(e).reduce((e,[t,n])=>e+t.length+Cp(n),1):typeof e==`string`?e.length:typeof e==`number`||typeof e==`boolean`?1:0}function wp(e){let t={};for(let[n,r]of Object.entries(e))t[Ep(n)]=Tp(r);return t}function Tp(e){return Array.isArray(e)?e.map(e=>Tp(e)):typeof e==`object`&&e?wp(e):e}function Ep(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).toLowerCase()}function Dp(e){return typeof e==`object`&&e?e:{}}function Z(e){return typeof e==`string`&&e.trim()||void 0}function Op(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function kp(e,t=60){if(!e)return;let n=e.replace(/\s+/g,` `).trim();if(!n)return;let r=Array.from(n);return r.length<=t?n:r.slice(0,t).join(``).trimEnd()}function Ap(e){let t=Z(e.content);if(t)return Up(t);let n=Z(e.text)??Z(e.prompt);if(n)return Up(n);let r=Array.isArray(e.content)?e.content:[],i=[];for(let e of r){if(typeof e==`string`&&e.trim()){i.push(e);continue}let t=Dp(e),n=Z(t.type);if(n&&n!==`text`)continue;let r=Z(t.text)??Z(t.content)??Hp(t);r&&i.push(r)}if(i.length!==0)return Up(i.join(`
|
|
135
|
+
`):void 0}var jc=J({inputTokens:q().int().nonnegative(),cachedInputTokens:q().int().nonnegative(),outputTokens:q().int().nonnegative(),reasoningOutputTokens:q().int().nonnegative(),totalTokens:q().int().nonnegative()}),Mc=J({usedPercent:q(),windowMinutes:q().int().nonnegative().nullable(),resetsAt:q().nonnegative().nullable()}),Nc=J({primary:Mc.nullable().optional(),secondary:Mc.nullable().optional(),planType:K().min(1).nullable().optional(),creditsBalance:K().min(1).nullable().optional()}),Pc=J({provider:Na,usage:J({currentUsage:jc,latestTurnUsage:jc.nullable(),contextWindow:q().int().nonnegative().nullable(),sourceLabel:K().min(1),note:K().min(1).optional()}).nullable(),rateLimits:Nc.optional()});function Fc(e){return e.provider===`claude`?Lc(e.rawEvents):Ic(e.rawEvents)}function Ic(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=null;for(let c of Xc(e)){let e=tl(c.payload.raw),l=c.type===`native.raw`?Rc(e):null;l?.usage&&((qc(l.usage)||!t)&&(t=l.usage),Jc(l.usage.latestTurnUsage)?n=l.usage.latestTurnUsage:Jc(l.usage.currentUsage)&&!n&&(n=l.usage.currentUsage),r=l.usage.contextWindow??r),l?.rateLimits&&(i=l.rateLimits.primary??i,a=l.rateLimits.secondary??a,o=l.rateLimits.planType??o,s=l.rateLimits.creditsBalance??s);let u=zc(c);if(u){let e=u.latestTurnUsage??u.currentUsage;Jc(e)&&(n=e),r=u.contextWindow??r,!t&&(qc(u)||u.contextWindow)&&(t=u)}}let c=t?{...t,latestTurnUsage:Jc(n)?n:Jc(t.latestTurnUsage)?t.latestTurnUsage:Jc(t.currentUsage)?t.currentUsage:null,contextWindow:t.contextWindow??r}:null,l=Vc({primary:i,secondary:a,planType:o,creditsBalance:s});return!c&&!l?null:{provider:`codex`,usage:c,...l?{rateLimits:l}:{}}}function Lc(e){let t=null;for(let n of Xc(e)){let e=zc(n);e&&(t=e)}return t?{provider:`claude`,usage:t}:null}function Rc(e){if(e.source===`codex.history.thread_read`){let t=tl(e.message),n=tl(t.turn),r=Wc(n.usage??t.usage),i=$c(n.model_context_window??t.model_context_window);return!r&&i===void 0?null:{usage:{currentUsage:r??Yc(),latestTurnUsage:r??null,contextWindow:i??null,sourceLabel:`codex.history.thread_read`,note:`当前来自 Codex history replay 快照。`}}}let t=Zc(e);if(!t)return null;let n=tl(tl(e.message).params);if(t===`thread/tokenUsage/updated`){let e=tl(n.tokenUsage??n.token_usage),t=Wc(e.total??e.total_token_usage);return t?{usage:{currentUsage:t,latestTurnUsage:Wc(e.last??e.last_token_usage),contextWindow:$c(e.modelContextWindow??e.model_context_window)??null,sourceLabel:`thread/tokenUsage/updated`}}:null}if(t===`account/rateLimits/updated`){let e=Bc(n.rateLimits??n.rate_limits);return e?{rateLimits:e}:null}if(t===`codex/event/token_count`){let e=tl(n.msg),t=tl(e.info),r=Wc(t.total_token_usage??t.totalTokenUsage),i=Bc(e.rate_limits??e.rateLimits);return!r&&!i?null:{usage:r?{currentUsage:r,latestTurnUsage:Wc(t.last_token_usage??t.lastTokenUsage),contextWindow:$c(t.model_context_window??t.modelContextWindow)??null,sourceLabel:`codex/event/token_count`}:void 0,...i?{rateLimits:i}:{}}}if(t===`codex/event/task_started`){let e=tl(n.msg),t=$c(e.model_context_window??e.modelContextWindow);return t===void 0?null:{usage:{currentUsage:Yc(),latestTurnUsage:null,contextWindow:t,sourceLabel:`codex/event/task_started`,note:`目前只拿到了 context window,尚未拿到 thread token usage 快照。`}}}return null}function zc(e){if(e.type!==`turn.completed`&&e.type!==`turn.failed`&&e.type!==`turn.started`)return null;let t=tl(e.payload.raw),n=Uc(t.usage??tl(t.turn).usage),r=$c(t.model_context_window??tl(t.turn).model_context_window);return!n&&r===void 0?null:{currentUsage:n??Yc(),latestTurnUsage:n??null,contextWindow:r??null,sourceLabel:e.type}}function Bc(e){let t=tl(e),n=Hc(t.primary),r=Hc(t.secondary),i=el(t.plan_type??t.planType)??null,a=el(tl(t.credits).balance)??null;return!n&&!r&&!i&&!a?null:{primary:n,secondary:r,planType:i,creditsBalance:a}}function Vc(e){if(!(!e.primary&&!e.secondary&&!e.planType&&!e.creditsBalance))return{...e.primary?{primary:e.primary}:{},...e.secondary?{secondary:e.secondary}:{},...e.planType?{planType:e.planType}:{},...e.creditsBalance?{creditsBalance:e.creditsBalance}:{}}}function Hc(e){let t=tl(e),n=$c(t.used_percent??t.usedPercent);return n===void 0?null:{usedPercent:n,windowMinutes:$c(t.window_minutes??t.windowDurationMins)??null,resetsAt:$c(t.resets_at??t.resetsAt)??null}}function Uc(e){return Gc(e)}function Wc(e){return Gc(e,{totalFallback:`input_plus_output`})}function Gc(e,t){let n=tl(e),r=$c(n.input_tokens??n.inputTokens),i=$c(n.cached_input_tokens??n.cachedInputTokens??n.cache_read_input_tokens??n.cacheReadInputTokens),a=$c(n.output_tokens??n.outputTokens),o=$c(n.reasoning_output_tokens??n.reasoningOutputTokens)??0,s=$c(n.total_tokens??n.totalTokens)??Kc(r,i,a,o,t);return r===void 0&&i===void 0&&a===void 0&&s===void 0?null:{inputTokens:r??0,cachedInputTokens:i??0,outputTokens:a??0,reasoningOutputTokens:o,totalTokens:s??0}}function Kc(e,t,n,r,i){return i?.totalFallback===`input_plus_output`?Qc(e,n):Qc(e,t,n,r)}function qc(e){return Jc(e.latestTurnUsage)||Jc(e.currentUsage)}function Jc(e){return e?e.inputTokens>0||e.cachedInputTokens>0||e.outputTokens>0||e.reasoningOutputTokens>0||e.totalTokens>0:!1}function Yc(){return{inputTokens:0,cachedInputTokens:0,outputTokens:0,reasoningOutputTokens:0,totalTokens:0}}function Xc(e){return[...e].sort((e,t)=>{let n=e.ts.localeCompare(t.ts);return n===0?e.rawSeq-t.rawSeq:n})}function Zc(e){return el(tl(e.message).method)??el(e.method)??null}function Qc(...e){let t=e.filter(e=>typeof e==`number`);if(t.length!==0)return t.reduce((e,t)=>e+t,0)}function $c(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`bigint`)return Number(e);if(typeof e==`string`&&e.trim()){let t=Number(e);if(Number.isFinite(t))return t}}function el(e){return typeof e==`string`&&e.trim()?e:void 0}function tl(e){return typeof e==`object`&&e?e:{}}var nl=X([`session.started`,`thread.started`,`thread.title.updated`,`turn.started`,`turn.completed`,`turn.failed`,`item.started`,`item.updated`,`item.completed`,`tool.permission.requested`,`tool.permission.resolved`,`user.input.requested`,`user.input.resolved`,`file.changed`,`file.diff.ready`,`status.progress`,`error`,`error.runtime`]),rl=mc.extend({type:nl}),il=mc.extend({kind:Y(`provider.raw`),rawSeq:q().int().positive(),type:K().min(1)});rl.extend({kind:Y(`gateway.control`).optional(),derivedFrom:K().min(1).optional()});var al=mc.extend({kind:Y(`session.stream.sync`),type:Y(`session.stream.sync`),payload:J({raw:J({decision:X([`delta`,`snapshot`]),reason:K().min(1),snapshotId:K().min(1).optional(),fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative().optional()}).passthrough()}).passthrough()}),ol=mc.extend({kind:Y(`session.stream.snapshot.chunk`),type:Y(`session.stream.snapshot.chunk`),payload:J({raw:J({snapshotId:K().min(1),chunkIndex:q().int().nonnegative(),totalChunks:q().int().positive(),events:Qn(il)}).passthrough(),readable:J({snapshotId:K().min(1),chunkIndex:q().int().nonnegative(),totalChunks:q().int().positive(),timelineItems:Qn(vo).optional()}).passthrough().optional()}).passthrough()}),sl=mc.extend({kind:Y(`session.readable.snapshot.chunk`),type:Y(`session.readable.snapshot.chunk`),payload:J({readable:J({snapshotId:K().min(1),chunkIndex:q().int().nonnegative(),totalChunks:q().int().positive(),timelineItems:Qn(vo),pendingApprovals:Qn(mo).optional(),pendingUserInputs:Qn(_o).optional(),contextUsage:Pc.nullable().optional()}).passthrough()}).passthrough()}),cl=J({updatedAt:K().datetime().optional(),status:X([`running`,`idle`]).optional(),interactionLockReason:X([`external_turn_running`]).optional(),model:K().min(1).nullable().optional(),sessionTurnConfig:cc.optional(),sessionTurnConfigUpdatedAt:K().datetime().optional(),title:K().min(1).optional(),pendingApprovals:q().int().nonnegative().optional(),pendingUserInputs:q().int().nonnegative().optional(),pendingActions:q().int().nonnegative().optional()}),ll=$n([il,al,ol,sl,mc.extend({kind:Y(`session.readable.delta`),type:Y(`session.readable.delta`),payload:J({readable:J({fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative(),timelineUpserts:Qn(vo),timelineRemovals:Qn(K().min(1)),timelineTextDeltaPatches:Qn(Js).optional(),pendingApprovalUpserts:Qn(mo).optional(),pendingApprovalRemovals:Qn(K().min(1)).optional(),pendingUserInputUpserts:Qn(_o).optional(),pendingUserInputRemovals:Qn(K().min(1)).optional(),sessionSummary:cl.optional(),contextUsage:Pc.nullable().optional()}).passthrough()}).passthrough()}),mc.extend({kind:Y(`session.external.update`),type:Y(`session.external.update`),payload:J({raw:J({updatedAt:K().datetime(),status:X([`running`,`idle`]),interactionLockReason:X([`external_turn_running`]).optional(),refreshMode:X([`delta`,`snapshot`]),fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative().optional(),historyUpdated:Xn(),statusChanged:Xn(),sessionSummary:cl.optional()}).passthrough()}).passthrough()})]),ul=J({algorithm:X([`ed25519`]),publicKey:pc,publicKeyFingerprint:K().min(1),keyVersion:q().int().min(1),createdAt:K().datetime()});J({code:K().min(4),expiresAt:K().datetime()});var dl=X([`ed25519`]),fl=X([`active`,`revoked`,`rotating`,`unknown`]),pl=J({algorithm:dl,publicKey:pc,publicKeyFingerprint:K().min(1)}),ml=J({pairingCode:K().min(4),signedAt:K().datetime()}),hl=J({gatewayId:K().min(1),deviceId:K().min(1),mobilePublicKey:pc,pairingContext:ml}),gl=J({algorithm:Y(`ed25519`),gatewayPublicKeyFingerprint:K().min(1),payload:hl,signature:pc}),_l=J({code:K().min(4),deviceName:nr(e=>{if(e==null)return;if(typeof e!=`string`)return e;let t=e.trim();return t.length>0?t:void 0},K().min(1).optional()),deviceIdentity:pl.optional()}),vl=J({accessToken:K().min(1),refreshToken:K().min(1),expiresInSeconds:q().int().positive()}),yl=vl.extend({gatewayId:K().min(1),gatewayName:K().min(1).optional(),machineName:K().min(1).optional(),deviceId:K().min(1),gatewayIdentity:ul.optional(),deviceIdentityFingerprint:K().min(1).optional(),deviceIdentityStatus:fl.optional(),pairingConfirmation:gl.optional()}),bl=J({refreshToken:K().min(1)}),xl=vl.extend({deviceId:K().min(1),deviceIdentityFingerprint:K().min(1).optional(),deviceIdentityStatus:fl.optional()});function Sl(e){return JSON.stringify([e.gatewayId,e.deviceId,e.mobilePublicKey,e.pairingContext.pairingCode,e.pairingContext.signedAt])}var Cl=X([`missing`,`current`,`stale`]),wl=J({accountId:K().min(1),accountType:X([`chatgpt`,`apiKey`,`unknown`]),authMode:K().min(1),planType:K().min(1).nullable(),lastRefreshAt:K().datetime().nullable(),hasSavedSnapshot:Xn(),snapshotStatus:Cl,rateLimits:Nc.nullable()}),Tl=J({accountId:K().min(1),accountType:X([`chatgpt`,`apiKey`,`unknown`]),authMode:K().min(1),planType:K().min(1).nullable(),lastRefreshAt:K().datetime().nullable(),savedAt:K().datetime(),isCurrent:Xn(),rateLimits:Nc.nullable()}),El=J({current:wl.nullable(),savedAccounts:Qn(Tl)}),Dl=J({saved:Y(!0),accounts:El}),Ol=J({switched:Y(!0),closedRuntimeSessionCount:q().int().nonnegative(),accounts:El}),kl=J({restarted:Y(!0),closedRuntimeSessionCount:q().int().nonnegative()}),Al=15e3,jl=12e4;function Ml(e){return{sessionId:e,messages:new Map,itemToMessageKey:new Map,requestToMessageKey:new Map,turnToLastToolMessageKey:new Map,codexSemanticMessageKeyToMessageKeys:new Map,codexHistoryReplaySemanticOccurrenceByKey:new Map}}function Nl(e,t,n=`codex`){if(t.sessionId!==e.sessionId)return;let r=`optimistic:${t.id}`;e.messages.has(r)||e.messages.set(r,{id:r,sessionId:e.sessionId,provider:n,kind:`user`,status:`completed`,ts:t.ts,updatedAt:t.ts,source:`optimistic`,title:`User`,text:t.text,details:[],debug:{eventTypes:[`optimistic.prompt`]}})}function Pl(e,t){if(t.sessionId===e.sessionId){if(t.type===`item.started`||t.type===`item.updated`||t.type===`item.completed`){Rl(e,t);return}if(t.type===`tool.permission.requested`||t.type===`tool.permission.resolved`){zl(e,t);return}if(t.type===`user.input.requested`||t.type===`user.input.resolved`){Bl(e,t);return}if(t.type===`turn.completed`){Ul(e,t);return}(t.type===`turn.failed`||t.type===`error`||t.type===`error.runtime`)&&Wl(e,t)}}function Fl(e){return[...e.messages.values()].map(Eu).sort((e,t)=>{let n=e.ts.localeCompare(t.ts);return n===0?e.id.localeCompare(t.id):n})}function Il(e,t,n){let r=Ml(e),i=t[0]?.provider??`codex`,a=[...n].sort((e,t)=>e.ts.localeCompare(t.ts));for(let e of a)Nl(r,e,i);let o=[...t].filter(t=>t.sessionId===e).sort((e,t)=>e.ts.localeCompare(t.ts));for(let e of o)Pl(r,e);return r}function Ll(e,t,n){return Fl(Il(e,t,n))}function Rl(e,t){let n=fu(t.payload.raw),r=fu(n.item),i=ou(r,[`type`]),a=ou(r,[`phase`]),o=iu(n,r),s=ou(r,[`id`]),c=au(r),l=Yl(t.provider,o,i,a,c),u=l?$l(n):void 0,d=ru(n)&&l?Zl(e,l,u):void 0;if(!i){let r=au(n);if(!r)return;let i=Kl(t,`assistant`,o),a=Gl(e,i,{id:i,sessionId:e.sessionId,provider:t.provider,kind:`assistant`,status:`streaming`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Assistant`,details:[],turnId:o,debug:{eventTypes:[]}});t.type===`item.completed`?(a.status=`completed`,a.text=r):(a.status=`streaming`,a.text=hu(a.text,r)),wu(a,t);return}let f=Jl(i);if(f===`user`&&!c)return;let p=d??(s?`item:${s}`:Kl(t,i,o)),m=ql(f,i),h=f===`tool`?du(r,c):void 0,g=Gl(e,p,{id:p,sessionId:e.sessionId,provider:t.provider,kind:f,status:`streaming`,ts:t.ts,updatedAt:t.ts,source:`event`,title:m,details:[],itemType:i,itemId:s,turnId:o,collapsible:f===`reasoning`,collapsedByDefault:f===`reasoning`,debug:{eventTypes:[],rawItemType:i,...a?{rawItemPhase:a}:{}}});s&&e.itemToMessageKey.set(s,p),l&&Xl(e,l,p),o&&f===`tool`&&e.turnToLastToolMessageKey.set(o,p),g.provider=t.provider,g.itemType=i,g.debug.rawItemPhase=a??g.debug.rawItemPhase,d&&g.itemId&&s&&g.itemId!==s||(g.itemId=s??g.itemId),g.turnId=o??g.turnId,g.title=h?.title??m,g.updatedAt=t.ts,g.collapsible=f===`reasoning`,g.collapsedByDefault=f===`reasoning`,h&&(g.toolCardData=h);let _=ou(r,[`source_event_type`]);if(_&&nu(f)&&!h&&Su(g,`source: ${_}`),f===`tool`&&!h)for(let e of Cu(r))Su(g,e);t.type===`item.started`?(g.status=f===`user`?`completed`:`streaming`,c&&(g.text=gu(f)?_u(g.text,c,r):hu(g.text,c))):t.type===`item.updated`?(g.status=f===`user`?`completed`:g.status===`waiting_approval`||g.status===`waiting_input`?g.status:`streaming`,c&&(g.text=gu(f)?_u(g.text,c,r):hu(g.text,c))):t.type===`item.completed`&&(g.status=f===`error`?`failed`:`completed`,c&&(g.text=c)),wu(g,t),l&&ru(n)&&Ql(e,l,u),f===`user`&&g.text&&Tu(e,g.text,g.ts)}function zl(e,t){let n=fu(t.payload.raw),r=ou(n,[`requestId`,`request_id`]);if(!r)return;let i=ou(n,[`itemId`,`item_id`]),a=ou(n,[`turnId`,`turn_id`]),o=ou(n,[`toolName`,`tool_name`])??`tool`,s=ou(n,[`reason`]),c=ou(n,[`decision`]),l=fu(n.rawParams??n.raw_params),u=fu(l.networkApprovalContext??l.network_approval_context),d=ou(l,[`command`]),f=ou(l,[`cwd`]),p=ou(l,[`grantRoot`,`grant_root`]),m=ou(u,[`host`]),h=ou(u,[`protocol`]),g=Vl(e,r,`approval`),_=Gl(e,g,{id:g,sessionId:e.sessionId,provider:t.provider,kind:`tool`,status:`waiting_approval`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Tool Approval`,details:[],itemType:`tool_status`,itemId:i??void 0,turnId:a??void 0,requestId:r,debug:{eventTypes:[],rawItemType:`tool_status`}});_.provider=t.provider,_.updatedAt=t.ts,_.requestId=r,_.itemId=i??_.itemId,_.turnId=a??_.turnId,_.title=_.title||`Tool Approval`,t.type===`tool.permission.requested`?(_.status=`waiting_approval`,_.text=d?`等待命令执行审批`:`${o} \u9700\u8981\u5BA1\u6279`,Su(_,`tool: ${o}`),s&&Su(_,`reason: ${s}`),d&&Su(_,`command: ${ku(d,200)}`),f&&Su(_,`cwd: ${ku(f,200)}`),p&&Su(_,`grant_root: ${ku(p,200)}`),m&&Su(_,`network: ${ku(h?`${h}://${m}`:m,200)}`)):(_.status=c===`deny`?`failed`:`completed`,_.text=c===`deny`?`工具审批已拒绝`:`工具审批已通过`,c&&Su(_,`decision: ${c}`),s&&Su(_,`reason: ${s}`)),Hl(e,g,r,i,a),wu(_,t)}function Bl(e,t){let n=fu(t.payload.raw),r=ou(n,[`requestId`,`request_id`]);if(!r)return;let i=ou(n,[`itemId`,`item_id`]),a=ou(n,[`turnId`,`turn_id`]),o=ou(n,[`status`]),s=cu(n,[`answeredCount`,`answered_count`]),c=lu(n.questions),l=uu(n.answers),u=Vl(e,r,`user-input`),d=Gl(e,u,{id:u,sessionId:e.sessionId,provider:t.provider,kind:`tool`,status:`waiting_input`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Plan Question`,details:[],itemType:`request_user_input`,itemId:i??void 0,turnId:a??void 0,requestId:r,userInputQuestions:c,debug:{eventTypes:[],rawItemType:`request_user_input`}});if(d.provider=t.provider,d.updatedAt=t.ts,d.requestId=r,d.itemId=i??d.itemId,d.turnId=a??d.turnId,d.title=`Plan Question`,t.type===`user.input.requested`)d.status=`waiting_input`,d.text=c.length>0?`\u9700\u8981\u56DE\u7B54 ${c.length} \u4E2A\u95EE\u9898`:`需要回答问题`,d.userInputQuestions=c,d.userInputAnswers=void 0,Su(d,`request_id: ${r}`);else{d.status=o===`dismissed`||o===`expired`?`failed`:`completed`;let e=s??0;d.text=`\u5DF2\u63D0\u4EA4 ${e} \u9879\u56DE\u7B54`,Su(d,`status: ${o??`submitted`}`),Su(d,`answered_count: ${e}`),c.length>0&&(d.userInputQuestions=c),l&&(d.userInputAnswers=l)}Hl(e,u,r,i,a),wu(d,t)}function Vl(e,t,n){return e.requestToMessageKey.get(t)??`${n}:${t}`}function Hl(e,t,n,r,i){e.requestToMessageKey.set(n,t),r&&e.itemToMessageKey.set(r,t),i&&e.turnToLastToolMessageKey.set(i,t)}function Ul(e,t){let n=fu(t.payload.raw),r=iu(n,void 0),i=fu(n.usage),a=fu(fu(n.turn).usage),o=cu(i,[`input_tokens`]),s=cu(i,[`output_tokens`]),c=cu(a,[`input_tokens`]),l=cu(a,[`output_tokens`]),u=o??c,d=s??l;if(r)for(let n of e.messages.values())n.turnId===r&&n.status===`streaming`&&(n.status=`completed`,n.updatedAt=t.ts);if(u!==void 0||d!==void 0){let n=r?`turn-usage:${r}`:Kl(t,`turn.usage`,r),i=Gl(e,n,{id:n,sessionId:e.sessionId,provider:t.provider,kind:`system`,status:`completed`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Turn Usage`,details:[],turnId:r,debug:{eventTypes:[]}});i.provider=t.provider,i.status=`completed`,i.updatedAt=t.ts,i.text=`Token usage`,u!==void 0&&Su(i,`input_tokens: ${u}`),d!==void 0&&Su(i,`output_tokens: ${d}`),wu(i,t)}}function Wl(e,t){let n=fu(t.payload.raw),r=au(fu(n.error))??au(n);if(!r)return;let i=iu(n,void 0),a=i?`turn-error:${i}`:`error:${t.eventId}`,o=Gl(e,a,{id:a,sessionId:e.sessionId,provider:t.provider,kind:`error`,status:`failed`,ts:t.ts,updatedAt:t.ts,source:`event`,title:`Error`,text:r,details:[],turnId:i,debug:{eventTypes:[]}});o.provider=t.provider,o.status=`failed`,o.updatedAt=t.ts,o.text=r,o.turnId=i??o.turnId,wu(o,t)}function Gl(e,t,n){return e.messages.get(t)||(e.messages.set(t,n),n)}function Kl(e,t,n){let r=Date.parse(e.ts),i=Number.isFinite(r)?Math.floor(r/Al):Math.floor(ju(e.ts)/Al);return`fallback:${e.provider}:${n??`no_turn`}:${t}:${i}`}function ql(e,t){return t===`plan`?`Plan`:e===`assistant`?`Assistant`:e===`user`?`User`:e===`tool`?t===`command_execution`?`Command`:t===`file_change`?`File Change`:t===`mcp_tool_call`?`MCP Tool`:t===`web_search`?`Web Search`:`Tool`:e===`reasoning`?t===`todo_list`?`Todo`:t===`plan`?`Plan`:`Reasoning`:e===`error`?`Error`:`System`}function Jl(e){return e===`user_message`?`user`:e===`agent_message`||e===`plan`?`assistant`:e===`command_execution`||e===`file_change`||e===`mcp_tool_call`||e===`web_search`||e===`tool_status`||e===`collab_tool_call`?`tool`:e===`reasoning`||e===`todo_list`?`reasoning`:e===`error`?`error`:`system`}function Yl(e,t,n,r,i){if(e!==`codex`||!t||!i)return;let a=eu(n);if(!(a!==`user_message`&&a!==`agent_message`))return`${t}|${a}|${tu(a,r)}|${i}`}function Xl(e,t,n){let r=e.codexSemanticMessageKeyToMessageKeys.get(t);if(!r){e.codexSemanticMessageKeyToMessageKeys.set(t,[n]);return}r.includes(n)||r.push(n)}function Zl(e,t,n){let r=e.codexSemanticMessageKeyToMessageKeys.get(t);if(!(!r||r.length===0))return r[n===void 0?e.codexHistoryReplaySemanticOccurrenceByKey.get(t)??0:n-1]}function Ql(e,t,n){let r=n??(e.codexHistoryReplaySemanticOccurrenceByKey.get(t)??0)+1,i=e.codexHistoryReplaySemanticOccurrenceByKey.get(t)??0;e.codexHistoryReplaySemanticOccurrenceByKey.set(t,Math.max(i,r))}function $l(e){let t=e.semantic_occurrence??e.semanticOccurrence;if(typeof t==`number`&&Number.isInteger(t)&&t>0)return t;if(typeof t==`string`){let e=Number.parseInt(t,10);if(Number.isInteger(e)&&e>0)return e}}function eu(e){if(!e)return;let t=e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).replace(/[\s-]+/g,`_`).toLowerCase();return t.length>0?t:void 0}function tu(e,t){return e===`agent_message`&&(!t||t===`final_answer`)?``:t??``}function nu(e){return e===`tool`}function ru(e){if(e.historyReplay===!0)return!0;let t=ou(e,[`source`]);return t===`codex.history.thread_read`||t===`codex.history.thread_read.incremental`}function iu(e,t){return ou(e,[`turn_id`,`turnId`])??ou(fu(e.turn),[`id`,`turn_id`,`turnId`])??ou(t??{},[`turn_id`,`turnId`])}function au(e){return su(fu(e.payload),[`delta`,`output_delta`,`outputDelta`])||su(e,[`text`,`message`,`output`,`response`,`reason`,`output_delta`,`aggregated_output`])||pu(e)}function ou(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}}function su(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function cu(e,t){for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t}}function lu(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=fu(n),r=ou(e,[`id`]),i=ou(e,[`header`]),a=ou(e,[`question`]);if(!r||!i||!a)continue;let o=Array.isArray(e.options)?e.options.map(e=>{let t=fu(e),n=ou(t,[`label`]),r=ou(t,[`description`])??n,i=ou(t,[`markdown`]);return n?{label:n,description:r,...i?{markdown:i}:{}}:null}).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}function uu(e){let t=fu(e),n=Object.entries(t);if(n.length===0)return;let r={};for(let[e,t]of n)if(e){if(!Array.isArray(t)){r[e]=[];continue}r[e]=t.map(e=>typeof e==`string`?e:void 0).filter(e=>typeof e==`string`&&e.length>0)}return Object.keys(r).length>0?r:void 0}function du(e,t){if(ou(e,[`display_as`])!==`tool_card`)return;let n=ou(e,[`title`])??t,r=ou(e,[`status_label`])??t;if(!n||!r)return;let i=[],a=ou(e,[`prompt`]),o=ou(e,[`response`]),s=ou(e,[`response_label`])??`Response`;a&&i.push({label:`Prompt`,body:a}),o&&i.push({label:s,body:o});let c=[],l=ou(e,[`file_path`]),u=cu(e,[`total_tool_uses`]),d=cu(e,[`total_tokens`]),f=cu(e,[`duration_ms`]);return l&&c.push(l),typeof u==`number`&&c.push(`${u} tool uses`),typeof d==`number`&&c.push(`${Du(d)} tokens`),typeof f==`number`&&c.push(Ou(f)),{title:n,statusLabel:r,compactText:t?Au(t):void 0,sections:i,details:c}}function fu(e){return typeof e==`object`&&e?e:{}}function pu(e){return Ac(e,mu)}function mu(e){if(typeof e==`string`&&e.length>0)return e;let t=fu(e),n=su(t,[`text`,`message`,`output`,`response`,`reason`]);if(n)return n;let r=su(fu(t.data),[`text`,`message`,`output`,`response`,`reason`]);if(r)return r;if(!Array.isArray(t.text_elements))return;let i=[];for(let e of t.text_elements){let t=su(fu(e),[`text`,`value`]);t&&i.push(t)}return i.length>0?i.join(``):void 0}function hu(e,t){return!e||t.startsWith(e)?t:e.endsWith(t)?e:`${e}${t}`}function gu(e){return e===`assistant`||e===`reasoning`}function _u(e,t,n){return e?t===e?e:t.startsWith(e)?t:e.endsWith(t)?e:vu(n)?`${e}${t}`:bu(e,t)?t:`${e}${t}`:t}function vu(e){let t=fu(e.payload);return xu(t.delta)||xu(t.output_delta)||xu(t.outputDelta)||xu(e.output_delta)||xu(e.outputDelta)?!0:yu(ou(e,[`original_method`,`originalMethod`]))}function yu(e){return e?e===`item/agentMessage/delta`||e===`codex/event/agent_message_content_delta`:!1}function bu(e,t){return t.length===0||t.length<24?!1:t.length>=Math.floor(e.length*.7)}function xu(e){return typeof e==`string`&&e.length>0}function Su(e,t){t.trim()&&(e.details.includes(t)||e.details.push(t))}function Cu(e){let t=[],n=ou(e,[`command`]),r=ou(e,[`tool_name`,`tool`]),i=ou(e,[`server`]),a=ou(e,[`status`]),o=ou(e,[`query`]),s=ou(e,[`output_delta`,`aggregated_output`]),c=e.history_output_omitted===!0||e.historyOutputOmitted===!0,l=cu(e,[`history_output_byte_length`,`historyOutputByteLength`]),u=cu(e,[`exit_code`]),d=ou(fu(e.error),[`message`]);if(n&&t.push(`command: ${ku(n,200)}`),r&&t.push(`tool: ${r}`),i&&t.push(`server: ${i}`),a&&t.push(`status: ${a}`),o&&t.push(`query: ${ku(o,200)}`),u!==void 0&&t.push(`exit_code: ${u}`),d&&t.push(`error: ${ku(d,200)}`),s?t.push(`output: ${ku(s,400)}`):c&&t.push(l===void 0?`output: omitted in compact history`:`output: omitted in compact history (${l.toLocaleString(`en-US`)} bytes)`),e.type===`todo_list`){let n=Array.isArray(e.items)?e.items:[];for(let e of n){let n=fu(e),r=ou(n,[`text`])??``,i=n.completed===!0;t.push(`${i?`[x]`:`[ ]`} ${r}`)}}if(e.type===`file_change`){let n=Array.isArray(e.changes)?e.changes:[];for(let e of n){let n=fu(e),r=ou(n,[`path`])??`unknown`,i=ou(n,[`kind`])??`update`;t.push(`${i}: ${r}`)}}return t}function wu(e,t){e.debug.eventTypes.includes(t.type)||e.debug.eventTypes.push(t.type)}function Tu(e,t,n){let r=Au(t),i=Date.parse(n);for(let[t,n]of e.messages.entries()){if(n.kind!==`user`||n.source!==`optimistic`||Au(n.text??``)!==r)continue;let a=Date.parse(n.ts);if(!(Number.isFinite(i)&&Number.isFinite(a)&&Math.abs(i-a)>jl)){e.messages.delete(t);return}}}function Eu(e){return{...e,details:[...e.details],userInputQuestions:e.userInputQuestions?e.userInputQuestions.map(e=>({...e,options:e.options?e.options.map(e=>({...e})):null})):void 0,userInputAnswers:e.userInputAnswers?Object.fromEntries(Object.entries(e.userInputAnswers).map(([e,t])=>[e,[...t]])):void 0,toolCardData:e.toolCardData?{...e.toolCardData,sections:e.toolCardData.sections.map(e=>({...e})),details:[...e.toolCardData.details]}:void 0,debug:{...e.debug,eventTypes:[...e.debug.eventTypes]}}}function Du(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`}function Ou(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 ku(e,t){return e.length<=t?e:`${e.slice(0,t)}...`}function Au(e){return e.trim().replace(/\s+/g,` `)}function ju(e){let t=0;for(let n=0;n<e.length;n+=1)t=t*31+e.charCodeAt(n)>>>0;return t}var Mu=X([`unknown`,`checking`,`up_to_date`,`available`,`unsupported_install`,`updating`,`restarting`,`failed`]),Nu=X([`npm`,`pnpm`,`yarn`,`unknown`]),Pu=X([`global_registry`,`global_file`,`dev_workspace`,`standalone_binary`,`unknown`]),Fu=X([`console`,`mobile`,`system`]),Iu=J({manager:Nu,installType:Pu,packageName:K().min(1),packageRoot:K().min(1).optional(),binPath:K().min(1).optional(),canSelfUpdate:Xn(),reason:K().min(1).optional()}),Lu=J({id:K().min(1),targetVersion:K().min(1),requestedBy:Fu,requestedAt:K().datetime(),startedAt:K().datetime().optional()}),Ru=J({packageName:K().min(1),currentVersion:K().min(1),latestVersion:K().min(1).optional(),available:Xn(),canApply:Xn(),status:Mu,checkedAt:K().datetime().optional(),install:Iu,job:Lu.optional(),lastError:K().min(1).optional()}),zu=J({type:Y(`gateway.update.status`),payload:Ru}),Bu=J({started:Xn(),update:Ru}),Vu=er(`kind`,[J({kind:Y(`session_relative`),sessionId:K().min(1),path:K().min(1)}),J({kind:Y(`project_relative`),projectId:K().min(1),path:K().min(1)}),J({kind:Y(`absolute`),path:K().min(1)})]),Hu=er(`kind`,[J({kind:Y(`project_relative`),projectId:K().min(1),path:K().min(1).optional()}),J({kind:Y(`absolute`),path:K().min(1).optional()})]),Uu=X([`text`,`code`,`markdown`,`image`,`video`,`audio`,`pdf`,`office`,`archive`,`binary`,`unknown`]),Wu=X([`inline_text`,`inline_media`,`browser`,`share_sheet`,`download`]),Gu=J({canReadText:Xn(),canPreparePreview:Xn(),supportsRange:Xn()}),Ku=J({locator:Vu,canonicalPath:K().min(1),displayName:K().min(1),projectId:K().min(1).optional(),relativePath:K().min(1).optional(),kind:Y(`file`),sizeBytes:q().int().nonnegative(),mimeType:K().min(1),extension:K().min(1),updatedAt:K().datetime().optional(),etag:K().min(1),previewCategory:Uu,preferredPreviewAction:Wu,capabilities:Gu}),qu=J({name:K().min(1),path:K().min(1),kind:X([`file`,`dir`]),sizeBytes:q().int().nonnegative().optional(),mimeType:K().min(1).optional(),extension:K().min(1).optional(),updatedAt:K().datetime().optional(),previewCategory:Uu.optional()}),Ju=J({rootPath:K().min(1),currentPath:K().min(1),parentPath:K().min(1).nullable(),entries:Qn(qu)}),Yu=J({file:Ku}),Xu=J({file:Ku,content:K(),encoding:Y(`utf8`),startLine:q().int().positive(),endLineExclusive:q().int().positive(),totalLines:q().int().positive().optional(),totalBytes:q().int().nonnegative(),truncated:Xn()}),Zu=X([`inline`,`attachment`]),Qu=J({file:Ku,preview:J({url:K().min(1),expiresAt:K().datetime(),supportsRange:Xn(),contentType:K().min(1),contentDisposition:Zu})}),$u=nr(e=>{if(typeof e!=`string`)return e;let t=e.trim();return t.length>0?t:e},K().trim().min(1)),ed=J({id:K().min(1),title:K().min(1),path:K().min(1),createdAt:K().datetime(),updatedAt:K().datetime(),lastSessionAt:K().datetime().optional(),runningCount:q().int().nonnegative(),idleCount:q().int().nonnegative().optional(),totalCount:q().int().nonnegative().optional(),endedCount:q().int().nonnegative()}),td=J({name:K().min(1),path:K().min(1)}),nd=J({kind:X([`home`,`desktop`,`documents`,`downloads`,`root`]),path:K().min(1)}),rd=J({rootPath:K().min(1),currentPath:K().min(1),parentPath:K().min(1).nullable(),shortcuts:Qn(nd).default([]),directories:Qn(td)}),id=X([`running`,`idle`]),ad=X([`running`,`idle`,`all`]),od=X([`external_turn_running`]),sd=X([`delta`,`snapshot`]),cd=J({id:K().min(1),nativeSessionId:K().min(1).optional(),source:X([`gateway`,`native_discovered`]).optional(),projectId:K().min(1),projectPath:K().min(1),provider:Na,providerMode:X([`native`,`mock`]).optional(),model:K().min(1).optional(),title:K().min(1).optional(),sessionTurnConfig:cc.optional(),sessionTurnConfigUpdatedAt:K().datetime().optional(),createdAt:K().datetime(),updatedAt:K().datetime(),status:id,interactionLockReason:od.optional(),pendingApprovals:q().int().nonnegative(),pendingUserInputs:q().int().nonnegative(),pendingActions:q().int().nonnegative()}),ld=J({id:K().min(1),name:K().min(1),createdAt:K().datetime(),revokedAt:K().datetime().optional(),identityAlgorithm:X([`ed25519`]).optional(),publicKeyFingerprint:K().min(1).optional(),identityStatus:fl.optional(),lastVerifiedAt:K().datetime().optional()}),ud=J({name:$u,machineName:K().min(1)}),dd=J({agent:J({provider:Na,requestedVersion:K().min(1).nullable(),resolvedVersion:K().min(1)}),capabilities:Va}),fd=J({scannedAt:K().datetime(),sessionCount:q().int().nonnegative(),status:X([`ready`,`partial`,`failed`]),error:K().min(1).optional()}),pd=J({codex:fd.optional(),claude:fd.optional()}),md=J({key:K().min(1),path:K().min(1),title:K().min(1),lastSessionAt:K().datetime().optional(),sessionCount:q().int().nonnegative(),providerCounts:J({codex:q().int().nonnegative(),claude:q().int().nonnegative()}),lastDiscoveryAt:K().datetime()}),hd=J({provider:Na,nativeSessionId:K().min(1),title:K().min(1).optional(),model:K().min(1).optional(),createdAt:K().datetime().optional(),updatedAt:K().datetime()}),gd=J({generatedAt:K().datetime(),source:X([`cache`,`fresh_scan`]),providers:pd,projects:Qn(md)}),_d=J({canonicalProjectPath:K().min(1),project:md,providers:pd,sessions:Qn(hd)}),vd=X(`auth.refresh,codex.accounts.get,codex.accounts.save,codex.accounts.switch,codex.appServer.restart,gateway.settings.get,gateway.settings.update,gateway.update.get,gateway.update.apply,projects.list,projects.discovery.get,projects.discovery.refresh,projects.create,projects.delete,workspace.directories.list,workspace.directories.create,workspace.entries.list,workspace.files.resolve,workspace.files.readText,workspace.files.preparePreview,sessions.list,sessions.discovery.list,sessions.get,sessions.config.get,sessions.history.sync,sessions.rawEvents.list,sessions.readableItem.get,providers.capabilities.get,providers.execution.update,agents.config.get,devices.list,devices.revoke`.split(`,`)),yd=J({}).strict(),bd=er(`method`,[J({method:Y(`auth.refresh`),params:bl.extend({deviceId:K().min(1).optional()})}),J({method:Y(`codex.accounts.get`),params:yd}),J({method:Y(`codex.accounts.save`),params:yd}),J({method:Y(`codex.accounts.switch`),params:J({accountId:K().min(1)})}),J({method:Y(`codex.appServer.restart`),params:J({requestedBy:Fu.optional()})}),J({method:Y(`gateway.settings.get`),params:yd}),J({method:Y(`gateway.settings.update`),params:J({name:$u})}),J({method:Y(`gateway.update.get`),params:yd}),J({method:Y(`gateway.update.apply`),params:J({requestedBy:Fu.optional()})}),J({method:Y(`projects.list`),params:yd}),J({method:Y(`projects.discovery.get`),params:yd}),J({method:Y(`projects.discovery.refresh`),params:yd}),J({method:Y(`projects.create`),params:J({path:$u,title:K().min(1).optional()})}),J({method:Y(`projects.delete`),params:J({projectId:K().min(1)})}),J({method:Y(`workspace.directories.list`),params:J({path:K().min(1).optional(),limit:q().int().positive().max(500).optional()})}),J({method:Y(`workspace.directories.create`),params:J({path:$u,name:$u})}),J({method:Y(`workspace.entries.list`),params:J({locator:Hu,limit:q().int().positive().max(500).optional()})}),J({method:Y(`workspace.files.resolve`),params:J({locator:Vu})}),J({method:Y(`workspace.files.readText`),params:J({locator:Vu,encoding:Y(`utf8`).optional(),startLine:q().int().positive().optional(),maxLines:q().int().positive().max(5e3).optional(),maxBytes:q().int().positive().max(1024*1024).optional()})}),J({method:Y(`workspace.files.preparePreview`),params:J({locator:Vu,disposition:Zu.optional()})}),J({method:Y(`sessions.list`),params:J({projectId:K().min(1),status:ad.optional(),syncExternal:Xn().optional()})}),J({method:Y(`sessions.discovery.list`),params:J({projectPath:$u})}),J({method:Y(`sessions.get`),params:J({projectId:K().min(1),sessionId:K().min(1)})}),J({method:Y(`sessions.config.get`),params:J({projectId:K().min(1),sessionId:K().min(1)})}),J({method:Y(`sessions.history.sync`),params:J({projectId:K().min(1),sessionId:K().min(1)})}),J({method:Y(`sessions.rawEvents.list`),params:J({projectId:K().min(1),sessionId:K().min(1),limit:$n([q().int().positive().max(2e3),Y(`all`)]).optional(),fromRawSeqExclusive:q().int().nonnegative().optional(),detailLevel:hc.optional()})}),J({method:Y(`sessions.readableItem.get`),params:J({projectId:K().min(1),sessionId:K().min(1),itemId:K().min(1)})}),J({method:Y(`providers.capabilities.get`),params:J({provider:Na,projectId:K().min(1).optional(),agentVersion:K().min(1).optional()})}),J({method:Y(`providers.execution.update`),params:za}),J({method:Y(`agents.config.get`),params:J({provider:Na,projectId:K().min(1).optional(),agentVersion:K().min(1).optional()})}),J({method:Y(`devices.list`),params:yd}),J({method:Y(`devices.revoke`),params:J({deviceId:K().min(1)})})]),xd=er(`method`,[J({method:Y(`auth.refresh`),result:xl.extend({relayToken:K().min(1).optional()})}),J({method:Y(`codex.accounts.get`),result:El}),J({method:Y(`codex.accounts.save`),result:Dl}),J({method:Y(`codex.accounts.switch`),result:Ol}),J({method:Y(`codex.appServer.restart`),result:kl}),J({method:Y(`gateway.settings.get`),result:ud}),J({method:Y(`gateway.settings.update`),result:ud}),J({method:Y(`gateway.update.get`),result:Ru}),J({method:Y(`gateway.update.apply`),result:Bu}),J({method:Y(`projects.list`),result:J({projects:Qn(ed)})}),J({method:Y(`projects.discovery.get`),result:gd}),J({method:Y(`projects.discovery.refresh`),result:gd}),J({method:Y(`projects.create`),result:J({project:ed})}),J({method:Y(`projects.delete`),result:J({removed:Y(!0)})}),J({method:Y(`workspace.directories.list`),result:rd}),J({method:Y(`workspace.directories.create`),result:rd}),J({method:Y(`workspace.entries.list`),result:Ju}),J({method:Y(`workspace.files.resolve`),result:Yu}),J({method:Y(`workspace.files.readText`),result:Xu}),J({method:Y(`workspace.files.preparePreview`),result:Qu}),J({method:Y(`sessions.list`),result:J({sessions:Qn(cd)})}),J({method:Y(`sessions.discovery.list`),result:_d}),J({method:Y(`sessions.get`),result:J({session:cd})}),J({method:Y(`sessions.config.get`),result:J({session:cd})}),J({method:Y(`sessions.history.sync`),result:J({session:cd,rawEventCount:q().int().nonnegative(),historyUpdated:Xn(),statusChanged:Xn(),refreshMode:sd,fromRawSeq:q().int().nonnegative().optional(),toRawSeq:q().int().nonnegative().optional()})}),J({method:Y(`sessions.rawEvents.list`),result:er(`decision`,[J({decision:Y(`delta`),reason:X([`cursor_valid_delta`]),fromRawSeqExclusive:q().int().nonnegative(),toRawSeq:q().int().nonnegative(),events:Qn(Zn())}),J({decision:Y(`snapshot`),reason:X([`cursor_out_of_range`,`initial_snapshot`,`empty_history_snapshot`]),toRawSeq:q().int().nonnegative().optional(),events:Qn(Zn())})])}),J({method:Y(`sessions.readableItem.get`),result:J({item:vo})}),J({method:Y(`providers.capabilities.get`),result:J({capabilities:Va})}),J({method:Y(`providers.execution.update`),result:J({defaults:za})}),J({method:Y(`agents.config.get`),result:dd}),J({method:Y(`devices.list`),result:J({devices:Qn(ld)})}),J({method:Y(`devices.revoke`),result:J({revoked:Y(!0)})})]),Sd=`json-utf8`,Cd=X([Sd]),wd=X([`identity`,`gzip`]),Td=J({version:Y(1),compression:Y(`gzip`),payloadEncoding:Cd.default(Sd),uncompressedByteLength:q().int().positive(),compressedByteLength:q().int().positive(),data:pc});function Ed(e){let t=kd(e.payload),n=t.byteLength;if(n<(e.compressionThresholdBytes??1/0))return{payloadEncoding:Sd,compression:`identity`,payloadBytes:t,uncompressedByteLength:n,compressedByteLength:n};let r=ti(t);return r.byteLength>=n?{payloadEncoding:Sd,compression:`identity`,payloadBytes:t,uncompressedByteLength:n,compressedByteLength:n}:{payloadEncoding:Sd,compression:`gzip`,payloadBytes:r,uncompressedByteLength:n,compressedByteLength:r.byteLength}}function Dd(e){return e.compression===`gzip`?Td.parse({version:1,compression:`gzip`,payloadEncoding:e.payloadEncoding,uncompressedByteLength:e.uncompressedByteLength,compressedByteLength:e.compressedByteLength,data:Md(e.payloadBytes)}):null}function Od(e){let t=wd.parse(e.compression??`identity`),n=e.payloadBytes;if(t===`gzip`)try{n=ni(e.payloadBytes)}catch{throw Error(`compressed_payload_invalid`)}if(typeof e.expectedUncompressedByteLength==`number`&&n.byteLength!==e.expectedUncompressedByteLength)throw Error(`compressed_payload_size_mismatch`);let r;try{r=JSON.parse(jd(n))}catch{throw Error(`compressed_payload_invalid`)}return e.parse(r)}function kd(e){return Ad(JSON.stringify(e))}function Ad(e){return new TextEncoder().encode(e)}function jd(e){return new TextDecoder().decode(e)}function Md(e){let t=globalThis.Buffer;if(t)return t.from(e).toString(`base64`);let n=``;for(let t of e)n+=String.fromCharCode(t);if(typeof btoa!=`function`)throw Error(`base64 encoder unavailable`);return btoa(n)}var Nd=K().url(),Pd=$n([Nd,Y(``)]),Fd=K().min(1).regex(/^[A-Za-z0-9_-]+$/u),Id=X([`plaintext-relay`,`e2ee-relay`]),Ld=X([`plain`,`crypt`]);function Rd(e){if(e===`plain`||e===`crypt`)return e;if(e===`plaintext-relay`)return`plain`;if(e===`e2ee-relay`)return`crypt`}function zd(e){if(!e||typeof e!=`object`||Array.isArray(e))return e;let t=e,n=Rd(t.tsl??t.transportSecurityLevel);return n?{...t,tsl:n}:t}function Bd(e){return e.trim()}var Vd=X([`ed25519-x25519-hkdf-sha256-aes-256-gcm-v1`]),Hd=q().int().positive(),Ud=q().int().min(0).max(2**53-1),Wd=X([`identity_mismatch`,`device_revoked`,`transcript_invalid`,`counter_replay`,`counter_gap_too_large`,`key_epoch_mismatch`,`decrypt_failed`,`unsupported_version`]),Gd=X([`guest`,`account`,`self_hosted`]);J({type:Y(`relay.gateway`),grantType:Gd,gatewayId:K().min(1),subjectId:K().min(1),gatewayIdentityFingerprint:K().min(1).optional(),jti:K().min(1),iss:K().min(1),aud:K().min(1),iat:q().int().nonnegative(),exp:q().int().positive()}),J({type:Y(`relay.mobile`),gatewayId:K().min(1),deviceId:K().min(1),iat:q().int().nonnegative(),exp:q().int().positive()});var Kd=J({v:Y(1),gw:K().min(1),name:K().min(1),machineName:K().min(1).optional(),relay:Pd.optional(),direct:Qn(Nd).default([]),pc:K().min(1),tsl:Ld.optional(),gatewayIdentity:ul.optional()});nr(zd,Kd);var qd=nr(zd,Kd.omit({pc:!0}));nr(zd,J({v:Y(1),gw:K().min(1),relay:Pd.optional(),direct:Pd.optional(),pc:K().min(1),tsl:Ld.optional(),gatewayIdentity:ul.optional()}));var Jd=nr(zd,J({v:Y(1),gw:K().min(1),relay:Pd.optional(),direct:Nd,pc:K().min(1),pkf:Fd,tsl:Ld.optional()})),Yd=J({name:K().min(1),relayBaseUrl:Pd.optional(),directBaseUrls:Qn(Nd).default([]),transportSecurityLevel:Id.default(`plaintext-relay`),gatewayIdentity:ul.optional(),gatewayAccessToken:K().min(1).optional(),connectedAt:K().datetime().optional()}),Xd=J({gatewayId:K().min(1),deviceId:K().min(1),connectedAt:K().datetime().optional()}),Zd=J({version:Y(1),securityLevel:Y(`e2ee-relay`),cipherSuite:Vd,deviceId:K().min(1),deviceIdentity:pl,clientNonce:pc}),Qd=J({version:Y(1),securityLevel:Y(`e2ee-relay`),cipherSuite:Vd,gatewayId:K().min(1),deviceId:K().min(1),clientNonce:pc,gatewayNonce:pc,gatewayPublicKeyFingerprint:K().min(1),gatewayEphemeralPublicKey:pc,signatureAlgorithm:Y(`ed25519`),signature:pc}),$d=J({version:Y(1),gatewayId:K().min(1),deviceId:K().min(1),deviceIdentityFingerprint:K().min(1),clientEphemeralPublicKey:pc,signatureAlgorithm:Y(`ed25519`),signature:pc}),ef=J({version:Y(1),securityLevel:Y(`e2ee-relay`),cipherSuite:Vd,gatewayId:K().min(1),deviceId:K().min(1),keyEpoch:Hd,deviceIdentityFingerprint:K().min(1),deviceIdentityStatus:fl}),tf=X([`gateway_restarted`,`gateway_available`]),nf=J({version:Y(1),gatewayId:K().min(1),deviceId:K().min(1),reason:tf,retryable:Y(!0)}),rf=J({ticket:K().min(1),method:X([`GET`,`HEAD`]),rangeHeader:K().min(1).optional(),responseMode:X([`inline_base64`,`stream_upload`]).optional(),uploadUrl:K().url().optional(),uploadToken:K().min(1).optional()}).superRefine((e,t)=>{e.responseMode===`stream_upload`&&(e.uploadUrl||t.addIssue({code:W.custom,path:[`uploadUrl`],message:`uploadUrl is required when responseMode is stream_upload`}),e.uploadToken||t.addIssue({code:W.custom,path:[`uploadToken`],message:`uploadToken is required when responseMode is stream_upload`}))}),af=J({status:$n([Y(200),Y(206),Y(416)]),headers:J({contentType:K().min(1),contentDisposition:K().min(1),contentLength:q().int().nonnegative(),etag:K().min(1),acceptRanges:Y(`bytes`).optional(),contentRange:K().min(1).optional(),lastModified:K().min(1).optional(),cacheControl:K().min(1)}),bodyTransport:X([`inline_base64`,`stream_upload`]).optional(),bodyBase64:pc.optional()}),of=J({}),sf=af,cf=J({version:Y(1),gatewayId:K().min(1),deviceId:K().min(1).optional(),code:Wd,message:K().min(1),retryable:Xn().optional()}),lf=bd,uf=xd,df=J({code:X([`BAD_REQUEST`,`NOT_FOUND`,`UNAUTHORIZED`,`TIMEOUT`,`INTERNAL`,`GATEWAY_OFFLINE`,`TOKEN_INVALID`,`TOKEN_EXPIRED`,`GATEWAY_MISMATCH`,`GATEWAY_REVOKED`]),message:K().min(1),status:q().int().min(400).max(599),details:Zn().optional()}),ff=df.extend({method:vd.optional()}),pf=_l.extend({gatewayId:K().min(1)}),mf=yl.extend({relayToken:K().min(1).optional()}),hf=bl.extend({gatewayId:K().min(1),deviceId:K().min(1).optional()}),gf=xl.extend({gatewayId:K().min(1),relayToken:K().min(1).optional()}),_f=J({gatewayId:K().min(1),gatewayIdentity:ul,requestedAt:K().datetime()});J({grantType:Y(`guest`),payload:_f,signatureAlgorithm:Y(`ed25519`),signature:pc});var vf=J({grantType:Gd,token:K().min(1),expiresInSeconds:q().int().positive()}),yf=X([`rpc`,`command`,`event`,`system`]),bf=Sd,xf=Cd,Sf=J({version:Y(1),keyEpoch:Hd,counter:Ud,iv:pc,ciphertext:pc,authTag:pc,plaintextEncoding:xf.default(bf),compression:wd.default(`identity`),uncompressedByteLength:q().int().positive().optional(),compressedByteLength:q().int().positive().optional()});X([`from_mobile`,`to_mobile`,`rpc.request`,`rpc.response`,`rpc.error`]);function Cf(e){return{payload:e.optional(),encryptedPayload:Sf.optional()}}function wf(e){return{payload:e.optional(),compressedPayload:Td.optional(),encryptedPayload:Sf.optional()}}var Tf=J({gatewayId:K().min(1),mobileId:K().min(1).optional(),messageType:yf,requestId:K().min(1).optional()}),Ef=X([`fresh_connect`,`gateway_replay`]),Df=J({deviceId:K().min(1),deliveryMode:Ef,gatewayAvailableAtConnect:Xn()}),Of=J({deviceId:K().min(1)}),kf=$n([ll,zu,J({type:Y(`command.ack`),commandType:K().min(1),commandId:K().min(1).optional(),payload:Zn().optional()}),J({type:Y(`command.error`),commandType:K().min(1).optional(),commandId:K().min(1).optional(),message:K().min(1)}),J({type:Y(`relay.error`),error:df})]),Af=er(`type`,[Tf.extend({type:Y(`gateway.hello`),messageType:Y(`system`),payload:Yd}),Tf.extend({type:Y(`mobile.hello`),messageType:Y(`system`),payload:Xd}),Tf.extend({type:Y(`secure.client_hello`),messageType:Y(`system`),payload:Zd}),Tf.extend({type:Y(`secure.gateway_hello`),mobileId:K().min(1),messageType:Y(`system`),payload:Qd}),Tf.extend({type:Y(`secure.client_auth`),messageType:Y(`system`),payload:$d}),Tf.extend({type:Y(`secure.ready`),mobileId:K().min(1),messageType:Y(`system`),payload:ef}),Tf.extend({type:Y(`secure.handshake_required`),mobileId:K().min(1),messageType:Y(`system`),payload:nf}),Tf.extend({type:Y(`secure.error`),mobileId:K().min(1),messageType:Y(`system`),payload:cf}),Tf.extend({type:Y(`mobile.connected`),messageType:Y(`system`),payload:Df}),Tf.extend({type:Y(`mobile.disconnected`),messageType:Y(`system`),payload:Of}),Tf.extend({type:Y(`from_mobile`),messageType:Y(`command`),mobileId:K().min(1),...Cf(Oc)}),Tf.extend({type:Y(`to_mobile`),messageType:Y(`event`),mobileId:K().min(1),...wf(kf)}),Tf.extend({type:Y(`rpc.request`),messageType:Y(`rpc`),requestId:K().min(1),mobileId:K().min(1),...Cf(lf)}),Tf.extend({type:Y(`rpc.response`),messageType:Y(`rpc`),requestId:K().min(1),mobileId:K().min(1),...wf(uf)}),Tf.extend({type:Y(`rpc.error`),messageType:Y(`rpc`),requestId:K().min(1),mobileId:K().min(1),...wf(ff)}),Tf.extend({type:Y(`broadcast`),messageType:Y(`event`),payload:ll}),Tf.extend({type:Y(`pairing.claim.forward`),messageType:Y(`system`),requestId:K().min(1),payload:pf}),Tf.extend({type:Y(`pairing.claim.result`),messageType:Y(`system`),requestId:K().min(1),payload:mf}),Tf.extend({type:Y(`auth.refresh.forward`),messageType:Y(`system`),requestId:K().min(1),payload:hf}),Tf.extend({type:Y(`auth.refresh.result`),messageType:Y(`system`),requestId:K().min(1),payload:gf}),Tf.extend({type:Y(`file.content.forward`),messageType:Y(`system`),requestId:K().min(1),payload:rf}),Tf.extend({type:Y(`file.content.result`),messageType:Y(`system`),requestId:K().min(1),payload:af}),Tf.extend({type:Y(`file.content.upload.started`),messageType:Y(`system`),requestId:K().min(1),payload:of}),Tf.extend({type:Y(`relay.error`),messageType:Y(`system`),payload:df})]);function jf(e){return JSON.stringify([`relay-gateway-guest-token-v1`,e.gatewayId,e.gatewayIdentity.algorithm,e.gatewayIdentity.publicKey,e.gatewayIdentity.publicKeyFingerprint,e.gatewayIdentity.keyVersion,e.gatewayIdentity.createdAt,e.requestedAt])}function Mf(e){return JSON.stringify([e.gatewayId,e.clientHello.version,e.clientHello.securityLevel,e.clientHello.cipherSuite,e.clientHello.deviceId,e.clientHello.deviceIdentity.publicKey,e.clientHello.deviceIdentity.publicKeyFingerprint,e.clientHello.clientNonce,e.gatewayHello.gatewayNonce,e.gatewayHello.gatewayPublicKeyFingerprint,e.gatewayHello.gatewayEphemeralPublicKey])}function Nf(e){return JSON.stringify([`relay-secure-gateway-hello-v1`,Mf(e)])}function Pf(e){return JSON.stringify([`relay-secure-client-auth-v1`,Mf(e),e.clientAuth.clientEphemeralPublicKey])}function Ff(e){let t=Hd.parse(e.keyEpoch??1);return JSON.stringify([`relay-secure-session-v1`,e.gatewayId,e.clientHello.version,e.clientHello.securityLevel,e.clientHello.cipherSuite,e.clientHello.deviceId,e.clientHello.deviceIdentity.publicKey,e.clientHello.deviceIdentity.publicKeyFingerprint,e.clientHello.clientNonce,e.gatewayHello.gatewayNonce,e.gatewayHello.gatewayPublicKeyFingerprint,e.gatewayHello.gatewayEphemeralPublicKey,e.clientAuth.clientEphemeralPublicKey,t])}function If(e){let t=e.clientHello.cipherSuite;if(t!==`ed25519-x25519-hkdf-sha256-aes-256-gcm-v1`)throw Error(`unsupported cipher suite: ${t}`);let n=Hd.parse(e.keyEpoch??1),r=Jf(Zf(Ff({gatewayId:e.gatewayId,clientHello:e.clientHello,gatewayHello:e.gatewayHello,clientAuth:e.clientAuth,keyEpoch:n}))),i=Jf(Xf(Zf(`relay-secure-hkdf-salt-v1`),r)),a=Zf(JSON.stringify([`relay-secure-key-schedule-v1`,e.gatewayId,e.clientHello.deviceId,t,n])),o=qf(e.sharedSecret,i,a,72);return{keyEpoch:n,cipherSuite:t,transcriptHash:r,clientToGatewayKey:o.slice(0,32),gatewayToClientKey:o.slice(32,64),clientToGatewayNoncePrefix:o.slice(64,68),gatewayToClientNoncePrefix:o.slice(68,72)}}function Lf(e){return e.role===`client`?{role:`client`,keyEpoch:e.keySchedule.keyEpoch,cipherSuite:e.keySchedule.cipherSuite,transcriptHash:e.keySchedule.transcriptHash,outboundKey:e.keySchedule.clientToGatewayKey,inboundKey:e.keySchedule.gatewayToClientKey,outboundNoncePrefix:e.keySchedule.clientToGatewayNoncePrefix,inboundNoncePrefix:e.keySchedule.gatewayToClientNoncePrefix,outboundCounter:0,highestInboundCounter:null}:{role:`gateway`,keyEpoch:e.keySchedule.keyEpoch,cipherSuite:e.keySchedule.cipherSuite,transcriptHash:e.keySchedule.transcriptHash,outboundKey:e.keySchedule.gatewayToClientKey,inboundKey:e.keySchedule.clientToGatewayKey,outboundNoncePrefix:e.keySchedule.gatewayToClientNoncePrefix,inboundNoncePrefix:e.keySchedule.clientToGatewayNoncePrefix,outboundCounter:0,highestInboundCounter:null}}function Rf(e,t){let n=Ud.parse(t);if(e.length!==4)throw Error(`nonce prefix must be 4 bytes`);let r=new Uint8Array(12);return r.set(e,0),r.set($f(n),4),r}function zf(e,t){let n=Ud.parse(t);if(e===null)return;let r=Ud.parse(e);if(n<=r)throw Error(`counter_replay`);if(n-r>1e3)throw Error(`counter_gap_too_large`)}function Bf(e){return JSON.stringify([`relay-secure-business-payload-v1`,e.metadata.frameType,e.metadata.messageType,e.metadata.gatewayId,e.metadata.requestId??``,e.encryptedPayload.version,e.encryptedPayload.keyEpoch,e.encryptedPayload.counter])}function Vf(e){Yf(e.session.cipherSuite);let t=e.session.outboundCounter,n=Rf(e.session.outboundNoncePrefix,t),r=e.preparedPayload.payloadBytes,i=Zf(Bf({metadata:e.metadata,encryptedPayload:{version:1,keyEpoch:e.session.keyEpoch,counter:t}})),a=Ki(e.session.outboundKey,n,i).encrypt(r),o=a.subarray(0,a.length-16),s=a.subarray(a.length-16);return e.session.outboundCounter=t+1,Sf.parse({version:1,keyEpoch:e.session.keyEpoch,counter:t,iv:Uf(n),ciphertext:Uf(o),authTag:Uf(s),plaintextEncoding:bf,compression:e.preparedPayload.compression,...e.preparedPayload.compression===`gzip`?{uncompressedByteLength:e.preparedPayload.uncompressedByteLength,compressedByteLength:e.preparedPayload.compressedByteLength}:{}})}function Hf(e){Yf(e.session.cipherSuite);let t=Sf.parse(e.encryptedPayload);if(t.keyEpoch!==e.session.keyEpoch)throw Error(`key_epoch_mismatch`);zf(e.session.highestInboundCounter,t.counter);let n=Rf(e.session.inboundNoncePrefix,t.counter),r=Wf(t.iv);if(!Qf(r,n))throw Error(`decrypt_failed`);let i=Zf(Bf({metadata:e.metadata,encryptedPayload:t})),a=Xf(Wf(t.ciphertext),Wf(t.authTag)),o;try{o=Ki(e.session.inboundKey,r,i).decrypt(a)}catch{throw Error(`decrypt_failed`)}e.session.highestInboundCounter=t.counter;try{return Od({payloadBytes:o,compression:t.compression,expectedUncompressedByteLength:t.uncompressedByteLength,parse:e.parse})}catch{throw Error(`decrypt_failed`)}}function Uf(e){let t=globalThis.Buffer;if(t)return t.from(e).toString(`base64`);let n=``;for(let t of e)n+=String.fromCharCode(t);if(typeof btoa!=`function`)throw Error(`base64 encoder unavailable`);return btoa(n)}function Wf(e){let t=globalThis.Buffer;if(t)return new Uint8Array(t.from(e,`base64`));if(typeof atob!=`function`)throw Error(`base64 decoder unavailable`);let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)r[e]=n.charCodeAt(e);return r}function Gf(e){return Uf(e).replace(/\+/gu,`-`).replace(/\//gu,`_`).replace(/=+$/u,``)}function Kf(e){return Wf(e.replace(/-/gu,`+`).replace(/_/gu,`/`).padEnd(Math.ceil(e.length/4)*4,`=`))}function qf(e,t,n,r){return r<=0?new Uint8Array:new Uint8Array(va(Ma,e,t.length>0?t:new Uint8Array(32),n,r))}function Jf(e){return new Uint8Array(Ma(e))}function Yf(e){if(e!==`ed25519-x25519-hkdf-sha256-aes-256-gcm-v1`)throw Error(`unsupported cipher suite: ${e}`)}function Xf(...e){let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}function Zf(e){return new TextEncoder().encode(e)}function Qf(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function $f(e){if(!Number.isSafeInteger(e))throw Error(`counter must be a safe integer`);let t=Math.floor(e/4294967296),n=e>>>0,r=new Uint8Array(8),i=new DataView(r.buffer);return i.setUint32(0,t),i.setUint32(4,n),r}function ep(e){return Gf(Ma(Wf(e)).subarray(0,16))}function tp(e){if(e.type!==`native.raw`)return null;let t=sp(e.payload.raw),n=sp(t.message),r=sp(n.params),i=sp(r.msg),a=cp(n.method)??cp(t.method);if(!a)return null;let o=cp(i.type)??``;if(!ap(a)&&!op(o))return null;let s=ip(t);if(!s||!s.delta)return null;let c=cp(r.conversationId)??cp(r.conversation_id)??``,l=cp(i.thread_id)??cp(i.threadId)??cp(r.threadId)??cp(r.thread_id)??``,u=cp(i.turn_id)??cp(i.turnId)??cp(r.turnId)??cp(r.turn_id)??``,d=cp(i.item_id)??cp(i.itemId)??cp(r.itemId)??cp(r.item_id)??``,f=cp(t.source)??``,p=lp(i.summaryIndex??i.summary_index??r.summaryIndex??r.summary_index),m=lp(i.contentIndex??i.content_index??r.contentIndex??r.content_index);return{key:[e.sessionId,f,a,c,l,u,d,o,p,m].join(`|`),delta:s.delta,method:a}}function np(e,t){let n=tp(e),r=tp(t);if(!n||!r||n.key!==r.key)return null;let i=`${n.delta}${r.delta}`,a=sp(t.payload.raw),o=ip(a)?.location??ip(sp(e.payload.raw))?.location;return o?{...t,eventId:e.eventId,ts:t.ts,payload:{...t.payload,raw:rp(a,o,i)}}:null}function rp(e,t,n){if(t===`raw.delta`)return{...e,delta:n};let r=sp(e.message),i=sp(r.params);if(t===`params.delta`)return{...e,message:{...r,params:{...i,delta:n}}};let a=sp(i.msg);return{...e,message:{...r,params:{...i,msg:{...a,delta:n}}}}}function ip(e){let t=sp(sp(e.message).params),n=sp(t.msg);return typeof n.delta==`string`?{delta:n.delta,location:`msg.delta`}:typeof t.delta==`string`?{delta:t.delta,location:`params.delta`}:typeof e.delta==`string`?{delta:e.delta,location:`raw.delta`}:null}function ap(e){return e.includes(`_delta`)||e.endsWith(`/delta`)||e.endsWith(`Delta`)||e.includes(`/delta/`)}function op(e){return e.endsWith(`_delta`)||e.endsWith(`Delta`)}function sp(e){return typeof e==`object`&&e?e:{}}function cp(e){return typeof e==`string`&&e.trim()||void 0}function lp(e){return typeof e==`number`&&Number.isFinite(e)?String(e):typeof e==`bigint`?e.toString():cp(e)??``}var up=new Set([`claude.history.getSessionMessages`,`claude.history.jsonl`]),dp=/\u001B\[[0-?]*[ -/]*[@-~]/g,fp={"thread.started":0,"thread.title.updated":1,"turn.started":2,"item.started":3,"item.updated":4,"item.completed":5,"turn.completed":6,"turn.failed":6,"tool.permission.requested":7,"user.input.requested":7};function pp(e,t){let n=[],r=0,i=[...t].filter(t=>t.sessionId===e).sort((e,t)=>e.ts.localeCompare(t.ts)),a=[],o=()=>(r+=1,`raw_proj_item_${e}_${r}`);for(let e of i){let t=nl.safeParse(e.type);if(t.success){n.push(vp(e,t.data,Dp(e.payload.raw),e.eventId));continue}if(e.type!==`native.raw`)continue;let r=Dp(e.payload.raw),i=hp(e,r);if(i.length>0&&n.push(...i),r.historyReplay!==!0)continue;let o=Z(r.source);if(o?.startsWith(`codex.history.thread_read`)){n.push(...gp(e,r));continue}o&&up.has(o)&&a.push(e)}a.length>0&&n.push(..._p(a,o));let s=new Map,c=new Map;for(let e of n){let t=Sp(e);if(!t){s.set(e.eventId,e);continue}let n=Cp(e.payload.raw),r=c.get(t);(!r||n>r.richness)&&c.set(t,{event:e,richness:n})}for(let{event:e}of c.values())s.set(e.eventId,e);return[...s.values()].sort((e,t)=>{let n=e.ts.localeCompare(t.ts);if(n!==0)return n;let r=Gp(e.type)-Gp(t.type);return r===0?e.eventId.localeCompare(t.eventId):r})}function mp(e,t,n){return Ll(e,pp(e,t),n)}function hp(e,t){if(e.type!==`native.raw`||Z(t.source)!==`codex.app_server`)return[];let n=Dp(t.message),r=Dp(n.params),i=Z(n.method)??Z(t.method);if(!i)return[];if(i===`turn/started`||i===`turn/completed`||i===`turn/failed`||i===`turn/interrupted`){let t=bp(Dp(r.turn),r);if(Object.keys(t).length===0)return[];let n=i===`turn/started`?`turn.started`:i===`turn/failed`?`turn.failed`:`turn.completed`,a=Z(t.status)??(i===`turn/completed`?`completed`:i===`turn/interrupted`?`interrupted`:`failed`),o=Dp(t.error);return[vp(e,n,{turn:t,status:a,turn_id:Z(t.id),source_event_type:`codex.app_server`,...n===`turn.failed`?{error:o}:{}},`${e.eventId}:${n.replace(`.`,`_`)}`)]}if(i===`item/started`||i===`item/completed`){let t=yp(Dp(r.item));if(Object.keys(t).length===0)return[];let n=Z(r.turn_id)??Z(r.turnId)??Z(Dp(r.turn).id)??Z(t.turn_id)??Z(t.turnId);return[vp(e,i===`item/started`?`item.started`:`item.completed`,{turn_id:n,item:t,source_event_type:`codex.app_server`},`${e.eventId}:${i===`item/started`?`item_started`:`item_completed`}`)]}return[]}function gp(e,t){let n=[],r=Dp(t.message),i=Z(r.scope);if(i===`thread`){let t=Dp(r.thread),i=Z(t.id);n.push(vp(e,`thread.started`,{thread_id:i,thread:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:thread_started`));let a=kp(Z(t.preview));return a&&n.push(vp(e,`thread.title.updated`,{title:a,source:`codex.history.thread_read`,thread_id:i},`${e.eventId}:thread_title_updated`)),n}if(i===`turn`){let t=Dp(r.turn),i=Z(t.status);return n.push(vp(e,`turn.started`,{turn:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:turn_started`)),i===`completed`||i===`interrupted`?n.push(vp(e,`turn.completed`,{status:i,turn:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:turn_completed`)):i===`failed`&&n.push(vp(e,`turn.failed`,{status:i,turn:t,error:Dp(t.error),source_event_type:`codex.history.thread_read`},`${e.eventId}:turn_failed`)),n}if(i===`item`){let t=Dp(r.item),i=Z(r.turn_id)??Z(t.turn_id);n.push(vp(e,`item.completed`,{turn_id:i,item:t,source_event_type:`codex.history.thread_read`},`${e.eventId}:item_completed`))}return n}function _p(e,t){let n=[],r=e[0];if(!r)return n;let i=Dp(r.payload.raw),a=Dp(i.message),o=Z(i.native_session_id)??Z(a.session_id)??r.sessionId,s=new Map,c=!1,l=0,u;n.push(vp(r,`thread.started`,{thread_id:o,source:`claude.history.getSessionMessages`},`${r.eventId}:thread_started`));let d=(e,t,r)=>u||(l+=1,u={id:`claude_hist_turn_${l}`,terminal:!1},n.push(vp(e,`turn.started`,{turn_id:u.id,source_event_type:t,source_line:r},`${e.eventId}:turn_started:${u.id}`)),u),f=(e,t,r)=>{if(!u||u.terminal){u=void 0;return}u.terminal=!0,n.push(vp(e,`turn.completed`,{turn_id:u.id,source_event_type:t,source_line:r},`${e.eventId}:turn_completed:${u.id}`)),u=void 0},p=(e,t,r,i)=>{let a=d(e,t,r);a.terminal||(a.terminal=!0,n.push(vp(e,`turn.failed`,{turn_id:a.id,source_event_type:t,source_line:r,error:{message:i}},`${e.eventId}:turn_failed:${a.id}`)),u=void 0)};for(let r of e){let e=Dp(r.payload.raw),i=Dp(e.message),a=Z(e.native_type)??Z(i.type),l=Dp(i.message),u=Z(e.source)??`claude.history.getSessionMessages`,m=Wp(e.source_line);if(a===`user`){let e=Ap(l),a=Mp(l);if(e){if(!c){let t=kp(e);t&&(n.push(vp(r,`thread.title.updated`,{title:t,source:`claude.history.first_user_message`,thread_id:o},`${r.eventId}:thread_title_updated`)),c=!0)}f(r,u,m);let a=d(r,u,m);n.push(vp(r,`item.completed`,{item:{id:Z(i.uuid)??t(),type:`user_message`,text:e,turn_id:a.id,source_event_type:u},source_line:m},`${r.eventId}:item_completed_user`))}a.forEach((e,i)=>{let a=e.toolUseId?s.get(e.toolUseId):void 0;if(e.toolUseId&&s.delete(e.toolUseId),a?.skipReplay)return;let o=d(r,u,m);n.push(vp(r,`item.completed`,{item:Fp(a,e,o.id,t),source_line:m},`${r.eventId}:item_completed_tool_result_${i+1}`))});continue}if(a!==`assistant`)continue;let h=d(r,u,m);jp(l).forEach((e,i)=>{e.id&&s.set(e.id,e),!e.skipReplay&&n.push(vp(r,`item.started`,{item:{id:e.id??t(),type:`tool_status`,status:`running`,tool_name:e.name,title:e.title,text:e.title,status_label:e.pendingStatusLabel,display_as:`tool_card`,response_label:e.responseLabel,prompt:e.prompt,file_path:e.filePath,turn_id:h.id,source_event_type:u},source_line:m},`${r.eventId}:item_started_tool_use_${i+1}`))});let g=Ap(l);g&&n.push(vp(r,`item.completed`,{item:{id:Z(l.id)??Z(i.uuid)??t(),type:`agent_message`,text:g,turn_id:h.id,source_event_type:u},source_line:m},`${r.eventId}:item_completed_assistant`));let _=Up(Z(i.error));_&&p(r,u,m,_)}let m=e[e.length-1];if(m){let e=Dp(m.payload.raw);f(m,Z(e.source)??`claude.history.getSessionMessages`,Wp(e.source_line))}return n}function vp(e,t,n,r){return{v:e.v,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:r,ts:e.ts,type:t,payload:{raw:n}}}function yp(e){let t=wp(e),n=Z(e.type);return n&&(t.type=xp(n)),t}function bp(e,t){let n=wp(e),r=Z(e.id)??Z(t.turn_id)??Z(t.turnId);return r&&(n.id=r),n}function xp(e){switch(e){case`userMessage`:return`user_message`;case`agentMessage`:return`agent_message`;case`commandExecution`:return`command_execution`;case`fileChange`:return`file_change`;case`webSearch`:return`web_search`;case`mcpToolCall`:return`mcp_tool_call`;case`todoList`:return`todo_list`;case`contextCompaction`:return`context_compaction`;default:return Ep(e)}}function Sp(e){if(e.type!==`item.started`&&e.type!==`item.completed`)return;let t=Dp(e.payload.raw),n=Dp(t.item),r=Z(n.id)??Z(n.item_id)??Z(n.itemId);if(!r)return;let i=Z(t.turn_id)??Z(t.turnId)??Z(n.turn_id)??Z(n.turnId)??``;return[e.type,e.sessionId,i,r].join(`|`)}function Cp(e){return Array.isArray(e)?e.reduce((e,t)=>e+Cp(t),0):e&&typeof e==`object`?Object.entries(e).reduce((e,[t,n])=>e+t.length+Cp(n),1):typeof e==`string`?e.length:typeof e==`number`||typeof e==`boolean`?1:0}function wp(e){let t={};for(let[n,r]of Object.entries(e))t[Ep(n)]=Tp(r);return t}function Tp(e){return Array.isArray(e)?e.map(e=>Tp(e)):typeof e==`object`&&e?wp(e):e}function Ep(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).toLowerCase()}function Dp(e){return typeof e==`object`&&e?e:{}}function Z(e){return typeof e==`string`&&e.trim()||void 0}function Op(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function kp(e,t=60){if(!e)return;let n=e.replace(/\s+/g,` `).trim();if(!n)return;let r=Array.from(n);return r.length<=t?n:r.slice(0,t).join(``).trimEnd()}function Ap(e){let t=Z(e.content);if(t)return Up(t);let n=Z(e.text)??Z(e.prompt);if(n)return Up(n);let r=Array.isArray(e.content)?e.content:[],i=[];for(let e of r){if(typeof e==`string`&&e.trim()){i.push(e);continue}let t=Dp(e),n=Z(t.type);if(n&&n!==`text`)continue;let r=Z(t.text)??Z(t.content)??Hp(t);r&&i.push(r)}if(i.length!==0)return Up(i.join(`
|
|
136
136
|
`))}function jp(e){let t=Array.isArray(e.content)?e.content:[],n=[];for(let e of t){let t=Dp(e);if(Z(t.type)!==`tool_use`)continue;let r=Dp(t.input),i=Z(t.name)??`tool`;n.push({id:Z(t.id),name:i,...Np(i,r)})}return n}function Mp(e){let t=Array.isArray(e.content)?e.content:[],n=[];for(let e of t){let t=Dp(e);Z(t.type)===`tool_result`&&n.push({toolUseId:Z(t.tool_use_id)??Z(t.toolUseId),toolName:Z(t.tool_name)??Z(t.toolName),text:Lp(t),isError:t.is_error===!0})}return n}function Np(e,t){if(e===`Task`){let e=Z(t.subagent_type),n=Z(t.description)??e??`任务`;return{title:`${e??`Task`}(${n})`,pendingStatusLabel:`运行中`,responseLabel:`Response`,prompt:Z(t.prompt)}}if(e===`Read`)return{title:`Read 1 file`,pendingStatusLabel:`运行中`,responseLabel:`Preview`,filePath:Z(t.file_path)};if(e===`Write`){let e=Z(t.file_path);return{title:Rp(e),pendingStatusLabel:`运行中`,responseLabel:`Preview`,filePath:e,writeContent:Op(t,[`content`])}}if(e===`Edit`){let e=Z(t.file_path);return{title:e?`Update(${e})`:`Edit`,pendingStatusLabel:`运行中`,responseLabel:`Preview`,filePath:e,skipReplay:!0}}return{title:e,pendingStatusLabel:`运行中`,responseLabel:`Response`,prompt:Pp(t),filePath:Z(t.file_path)}}function Pp(e){let t=Z(e.command);if(t)return t;let n=Z(e.prompt);if(n)return n;let r=Z(e.query);if(r)return r;let i=Z(e.pattern),a=Z(e.glob);return i&&a?`pattern: ${i}
|
|
137
137
|
glob: ${a}`:i||Up(Z(e.description))}function Fp(e,t,n,r){let i=e?.name??t.toolName??`tool`,a=e?.name===`Write`?e.writeContent:t.text,o=Ip(e,t,a);return{id:t.toolUseId??r(),type:`tool_status`,turn_id:n,tool_name:i,title:e?.title??i,text:o,status:t.isError?`failed`:`completed`,status_label:o,display_as:`tool_card`,response:a,response_label:e?.responseLabel??`Response`,prompt:e?.prompt,file_path:e?.filePath,source_event_type:`claude.history.tool_result`}}function Ip(e,t,n){return t.isError?`Failed`:e?.name===`Write`?zp(Vp(n),e.filePath):`Done`}function Lp(e){let t=Up(Z(e.content)??Z(Dp(e.toolUseResult).stdout)??Z(Dp(e.tool_use_result).stdout)??Z(e.text));if(t)return t;let n=Array.isArray(e.content)?e.content:[];if(n.length===0)return;let r=[];for(let e of n){if(typeof e==`string`&&e.trim().length>0){r.push(e.trim());continue}let t=Dp(e),n=Up(Z(t.text)??Z(t.content)??Z(t.value)??Z(t.tool_name)??Z(t.toolName));n&&r.push(n)}if(r.length!==0)return r.join(`
|
|
138
138
|
`)}function Rp(e){return typeof e==`string`&&e.includes(`/.claude/plans/`)?`Updated plan`:typeof e==`string`?`Write(${Bp(e)})`:`Write`}function zp(e,t){let n=typeof e==`number`?`Wrote ${e} lines`:`Wrote file`;return t?`${n} to ${t}`:n}function Bp(e){let t=e.split(`/`);return t[t.length-1]||e}function Vp(e){if(e)return e.split(`
|
|
@@ -524,4 +524,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
524
524
|
`)}function pN(e){let t=new Set;for(let n of e)n&&t.add(n);return[...t]}function mN(e){return String(e).includes(`returned no messages from getSessionMessages`)}function hN(e){return DM(e)}function gN(e){return e?{rawSeq:e.rawSeq,type:e.type,eventId:e.eventId,ts:e.ts}:null}function _N(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(!vN(n,i))return r}return e.length===t.length?null:n}function vN(e,t){return xN(yN(e))===xN(yN(t))}function yN(e){let{ts:t,...n}=e;return n}function bN(e){if(typeof e==`string`)return SN(e);if(Array.isArray(e))return e.map(e=>bN(e));if(!e||typeof e!=`object`)return e;let t=e,n={};for(let e of Object.keys(t).sort())n[e]=bN(t[e]);return n}function xN(e){return JSON.stringify(bN(e))}function SN(e){return e.length<=4096?e:{__type:`hashed_text`,length:e.length,sha256:(0,l.createHash)(`sha256`).update(e).digest(`hex`)}}function CN(e){if(!e)return``;let t=SN(e);return typeof t==`string`?t:`sha256:${t.length}:${t.sha256}`}function wN(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 TN(e){let t=e.previousEvents[e.previousEvents.length-1]?.rawSeq??null,n=e.nextEvents[e.nextEvents.length-1]?.rawSeq??null,r=_N(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:wN(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:gN(r===null?void 0:e.previousEvents[r]),nextMismatchEvent:gN(r===null?void 0:e.nextEvents[r])}}function EN(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&&vN(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&&vN(e,r)})?{historyUpdated:!0,refreshMode:`delta`,fromRawSeq:n??0,toRawSeq:r??n??0}:{historyUpdated:!0,refreshMode:`snapshot`,...r===void 0?{}:{toRawSeq:r}}}function DN(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:LN(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);(HN(t.status)?!UN(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,qN(n.id)??null])}return t}function ON(e){let t=kN(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(JM(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:LN(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,qN(t.id)??null]);continue}let a=n!==c,o=jN(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,qN(t.id)??null])}}return r}function kN(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=AN(t,n),a=$(e.status);a&&(i.status=a),i.fingerprint=FN(e);continue}if(i!==`item`)continue;let a=Q(r.item),o=$(r.turn_id)??$(a.turn_id);if(!o)continue;let s=AN(t,o),c=MN(o,a,void 0,s.itemOccurrenceByBaseKey);c&&(s.itemFingerprintByKey.has(c)||s.itemOrder.push(c),s.itemFingerprintByKey.set(c,PN(a)))}return t}function AN(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 jN(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||MN(t.id,a,r,n)!==i||e.itemFingerprintByKey.get(i)!==PN(a))return{safe:!1,appendedItems:[],statusChanged:!1}}return e.fingerprint!==void 0&&e.fingerprint!==FN(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 MN(e,t,n,r){let i=NN(e,t,n);if(!i)return;let a=oN(t);if(a!==void 0)return`${i}|${a}`;if(!r)return i;let o=(r.get(i)??0)+1;return r.set(i,o),`${i}|${o}`}function NN(e,t,n){let r=nN(`item.completed`,{turn_id:e,item:t});if(r)return r;let i=qN(t.id);if(i)return`id:${i}`;if(n!==void 0)return`${e}::${n}`}function PN(e){let t=rN($(e.type)),n=t?iN(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),xN(r)}function FN(e){return xN({status:$(e.status)??null,error:Q(e.error)})}function IN(e){return String(e??``).replace(/[^a-zA-Z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``)}function LN(e,t,n){let r=n.map(IN).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 RN(e){let t=e.localCodexLiveTurnState??KM(e.localEvents),n=new Set,r=zN(e.localEvents),i=new Map(t.terminalTurnStatusById),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`)continue;if(s===`codex.app_server`){let e=Q(r.message),t=Q(e.params),i=$(e.method),a=$(Q(t.turn).id)??$(t.turn_id)??$(t.turnId);a&&(i===`turn/started`||i===`turn/completed`||i===`turn/failed`||i===`turn/interrupted`)&&n.add(a);continue}if(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&&HN(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)=>{let r=d();f.push({v:`1.0`,kind:`provider.raw`,rawSeq:o,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:u(n),ts:r,type:`native.raw`,payload:{raw:{source:`codex.history.thread_read`,native_type:`thread.read.snapshot`,message:t,historyReplay:!0,replaySynthetic:!0}}}),o+=1};for(let a of e.thread.turns){let s=i.get(a.id),c=UN(s,a.status);(!(n.has(a.id)||t.activeTurnIds.has(a.id))&&!c||HN(a.status)&&s!==a.status)&&p({scope:`turn`,thread_id:e.thread.id,turn:{id:a.id,status:a.status,error:a.error}},[`turn`,a.id,a.status]);let l=new Map;for(let t of a.items){let n=$(t.id),i=MN(a.id,t,void 0,l);if(i&&r.has(i))continue;let s=i?BN(i):void 0;p({scope:`item`,thread_id:e.thread.id,turn_id:a.id,item:t,...s?{semantic_occurrence:s}:{}},[`item`,a.id,n??`seq_${o}`])}}return f}function zN(e){let t=new Set,n=new Map;for(let r of e){let e=VN(r);if(!e)continue;let i=MN(e.turnId,e.item,void 0,n);i&&t.add(i)}return t}function BN(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 VN(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),...e.semantic_occurrence===void 0?{}:{semantic_occurrence:e.semantic_occurrence}},r=$(e.turn_id)??$(n.turn_id)??$(n.turnId);return!r||Object.keys(n).length===0?null:{turnId:r,item:n}}return null}function HN(e){return e===`completed`||e===`failed`||e===`interrupted`}function UN(e,t){return e===t&&HN(t)}function WN(e){let t=e.replace(/\u001B\[[0-?]*[ -/]*[@-~]/g,``).replace(/\s+/g,` `).trim();if(t)return t}function GN(e,t=60){let n=WN(e);if(!n)return;let r=Array.from(n);return r.length<=t?n:r.slice(0,t).join(``).trimEnd()}function KN(e,t){if(t){let e=GN(t);if(e)return e}if(e.provider!==`codex`||!e.codex)return GN(`代码审查`);let n=e.codex.target;return n.type===`baseBranch`?GN(`审查 ${n.branch} 分支改动`):n.type===`custom`?GN(n.instructions):n.type===`commit`?GN(n.title||`审查提交 ${n.sha.slice(0,12)}`):GN(`审查未提交更改`)}function qN(e){if(typeof e!=`string`)return;let t=WN(e);if(t)return t}function JN(e){let t=0;for(let n of Object.values(e))n.some(e=>e.trim().length>0)&&(t+=1);return t}function YN(e){return!Number.isFinite(e)||e<=0?new Date().toISOString():new Date(e*1e3).toISOString()}async function XN(e){if(!(await d.default.stat(e)).isDirectory())throw Error(`Project path is not a directory: ${e}`)}var ZN=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=QN(e),n=this.sessions.get(t.id);this.sessions.set(t.id,{...n,...t}),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,QN({...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;let t=this.normalizeRawEventProjectIdentity(e);this.sessions.has(t.sessionId)&&(_P(t)||await this.enqueueRawSessionWrite(t.sessionId,async()=>{if(lP(t)){let e=gP([...await this.readSessionRawEventsLocked(t.sessionId),t]);await this.replaceRawEventFile(t.sessionId,e),this.rawEventsCacheBySession.set(t.sessionId,e),this.compactedRawEventsCacheBySession.set(t.sessionId,iP(e));return}await this.appendRawEventLine(t),this.appendRawEventToCache(t)}))}async mergeSessionRawEvents(e,t,n){if(await this.ready,!this.sessions.has(e))return[];let r=t.filter(t=>t.sessionId===e).map(e=>this.normalizeRawEventProjectIdentity(e)),i=[];return await this.enqueueRawSessionWrite(e,async()=>{let t=uP(await this.readSessionRawEventsLocked(e),r,n);await this.replaceRawEventFile(e,t);let a=iP(t);i=aP(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 qp(i.filter(e=>e.rawSeq>t)).slice(0,r);let a=[];return await this.enqueueWrite(async()=>{a=qp((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 nP(t);let n=null;return await this.enqueueWrite(async()=>{n=nP(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)if(e?.id&&e?.provider&&e?.createdAt&&e?.updatedAt&&e?.status&&e?.projectId&&e?.projectPath){if(e.projectId!==e.projectPath)throw Error(`Legacy session project ids are no longer supported in ${this.indexPath}; clear the session history store and restart the gateway.`);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=`${tP(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=>tP(e)).join(`
|
|
525
525
|
`);await rP(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(cP(e)){this.compactedRawEventsCacheBySession.delete(e.sessionId);return}if(n&&sP(e,n)<0){this.compactedRawEventsCacheBySession.delete(e.sessionId);return}oP(r,e)}}async readSessionRawEventsCompactedLocked(e){let t=this.compactedRawEventsCacheBySession.get(e);if(t)return aP(t);let n=iP(await this.readSessionRawEventsLocked(e));return this.compactedRawEventsCacheBySession.set(e,n),aP(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(`
|
|
526
526
|
`).map(e=>e.trim()).filter(Boolean),a=[];for(let e of i)try{let t=JSON.parse(e);if(!$N(t)||t.kind!==`provider.raw`)continue;let n=eP(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 t of s){let n=il.safeParse(t);if(n.success){let t=this.normalizeRawEventProjectIdentity(n.data);if(t.projectId!==n.data.projectId)throw Error(`Legacy raw event project ids are no longer supported for session ${e}; clear the session history store and restart the gateway.`);c.push(t)}}if(o){let e=c.map(e=>tP(e)).join(`
|
|
527
|
-
`),t=e?`${e}\n`:``;await d.default.writeFile(n,t,`utf8`)}return this.rawEventsCacheBySession.set(e,c),c}normalizeRawEventProjectIdentity(e){let t=this.sessions.get(e.sessionId);return!t||!t.projectId||e.projectId===t.projectId?e:{...e,projectId:t.projectId}}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 aP(t);let n=this.rawEventsCacheBySession.get(e);if(!n)return;let r=iP(n);return this.compactedRawEventsCacheBySession.set(e,r),aP(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 QN(e){let t=e.projectPath?.trim()||e.projectId;return t===e.projectId?e:{...e,projectId:t}}function $N(e){return typeof e==`object`&&!!e}function eP(e){if(!(typeof e!=`number`||!Number.isInteger(e)||e<=0))return e}function tP(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 nP(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 rP(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 iP(e){let t=Kp(e),n=t.map(e=>e),r=new Map;for(let[e,t]of n.entries()){let n=Yp(t);n&&r.set(n.key,e)}return{slots:n,indexByKey:r,dense:t}}function aP(e){return e.dense||=e.slots.filter(e=>e!==null),e.dense}function oP(e,t){let n=Yp(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=Xp(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 sP(e,t){let n=e.ts.localeCompare(t.ts);return n===0?e.eventId.localeCompare(t.eventId):n}function cP(e){if(e.type===`item.completed`)return!0;if(e.type!==`native.raw`)return!1;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.message)?t.message:{};return(typeof n.method==`string`?n.method:typeof t.method==`string`?t.method:``)===`item/completed`}function lP(e){if(cP(e)||e.type===`turn.completed`||e.type===`turn.failed`)return!0;if(e.type!==`native.raw`)return!1;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(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 uP(e,t,n){if(n?.replaceMissing)return dP(e,t,n);let r=[...e].sort(hP),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&&fP(n,e)&&(r[t]=mP(n,e));continue}let n={...e,rawSeq:a};a+=1,i.set(n.eventId,r.length),r.push(n)}return gP(r.sort(hP)).sort(hP)}function dP(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(hP),c=1;for(let t of e)c=Math.max(c,t.rawSeq+1);return gP(s.map(e=>{let t=r.get(e.eventId);if(t)return fP(t,e)?mP(t,e):{...e,rawSeq:t.rawSeq};let n={...e,rawSeq:c};return c+=1,n})).sort(hP)}function fP(e,t){return pP(e)&&pP(t)}function pP(e){return e.type===`native.raw`?SP(($N(e.payload.raw)?e.payload.raw:{}).source)===`codex.history.thread_read`:!1}function mP(e,t){return{...t,rawSeq:e.rawSeq,ts:e.ts}}function hP(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 gP(e){let t=Jp(e).filter(e=>!_P(e)),n=new Set;for(let e of t){let t=vP(e);t&&n.add(t)}return n.size===0?t:t.filter(e=>{let t=yP(e);return!t||!n.has(t)})}function _P(e){let t=$N(e.payload.raw)?e.payload.raw:{},n=SP(t.source)??``;if(e.type!==`native.raw`&&(t.historyReplay===!0||n.startsWith(`codex.history.thread_read`)))return!0;if(e.type!==`native.raw`||n!==`codex.app_server`)return!1;let r=$N(t.message)?t.message:{};return SP(r.method)??SP(t.method)?!1:$N(($N(r.result)?r.result:{}).turn)}function vP(e){if(e.type===`item.completed`){let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.item)?t.item:{};return bP(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.message)?t.message:{},r=$N(n.params)?n.params:{};if((SP(n.method)??SP(t.method))!==`item/completed`)return null;let i=$N(r.item)?r.item:{};return bP(e.sessionId,i)}function yP(e){if(e.type===`item.updated`){let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.item)?t.item:{},r=SP(n.original_method)??SP(n.originalMethod)??``,i=$N(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`)&&!xP(r)?null:bP(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.message)?t.message:{},r=$N(n.params)?n.params:{};if(!xP(SP(n.method)??SP(t.method)??``))return null;let i=$N(r.msg)?r.msg:{},a=SP(r.itemId)??SP(r.item_id)??SP(i.itemId)??SP(i.item_id);return a?`${e.sessionId}|${a}`:null}function bP(e,t){let n=SP(t.id)??SP(t.item_id)??SP(t.itemId);return n?`${e}|${n}`:null}function xP(e){return e.includes(`_delta`)||e.endsWith(`/delta`)||e.endsWith(`Delta`)||e.includes(`/delta/`)}function SP(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function CP(e){return!e||e.providerMode!==`native`?!1:e.interactionLockReason===`external_turn_running`?!0:e.status!==`running`}const wP=e=>e.filter(e=>!(e.kind===`system`&&e.title===`Turn Usage`)),TP=(e,t)=>e.find(e=>e.itemId===t||e.id===t)??null,EP=e=>e.kind!==`tool_card`&&e.kind!==`file_change_card`&&e.kind!==`terminal_card`||e.status!==void 0||`deferredDetail`in e&&e.deferredDetail!==void 0?null:e.itemId??e.id,DP=e=>{let t=wP(mp(e.sessionId,e.rawEvents,[]));return{timelineItems:yo({rawEvents:e.rawEvents,messages:t,deferCompletedToolDetails:!1}).timelineItems,lastRawSeq:e.rawEvents[e.rawEvents.length-1]?.rawSeq??null}};async function OP(e){if(e.readableItemDetailLookup)return e.readableItemDetailLookup.getReadableItemDetailResult({projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId});let t=await e.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,2**53-1),n=TP(DP({sessionId:e.sessionId,rawEvents:t}).timelineItems,e.itemId);return n?{item:n}:null}function kP(e,t){if(e&&e!==t)throw Ew()}async function AP(e){let t=jP(e.authService,e.refreshToken);e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:MP(t)},`auth refresh attempt`);try{let t=await e.execute(),n=jP(e.authService,e.refreshToken),r=jP(e.authService,t.refreshToken);return e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshedDeviceId:t.deviceId,previousRefreshToken:MP(n),nextRefreshToken:MP(r)},`auth refresh succeeded`),t}catch(t){let n=jP(e.authService,e.refreshToken);throw e.logger?.warn?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:MP(n),error:NP(t)},`auth refresh failed`),t}}function jP(e,t){return e.inspectRefreshToken?.(t)??{tokenRecordState:`missing`}}function MP(e){return{claimDeviceId:e.claimDeviceId??null,claimExpAt:e.claimExpAt??null,claimIssuedAt:e.claimIssuedAt??null,claimJtiSuffix:PP(e.claimJti),claimType:e.claimType??null,latestActiveTokenCreatedAt:e.latestActiveTokenCreatedAt??null,latestActiveTokenJtiSuffix:PP(e.latestActiveTokenJti),tokenRecordCreatedAt:e.tokenRecordCreatedAt??null,tokenRecordDeviceId:e.tokenRecordDeviceId??null,tokenRecordRevokedAt:e.tokenRecordRevokedAt??null,tokenRecordState:e.tokenRecordState}}function NP(e){return xw(e)?{code:e.code,message:String(e),status:e.status}:e instanceof Error?{message:e.message,name:e.name}:{message:String(e)}}function PP(e){return e?e.slice(-8):null}function FP(e,t,n,r){if(!r)return t;let i={gatewayId:t.gatewayId,deviceId:t.deviceId,mobilePublicKey:r.publicKey,pairingContext:{pairingCode:IP(n),signedAt:new Date().toISOString()}};return{...t,gatewayIdentity:e.identity,pairingConfirmation:ym(e.identity,e.privateKeyPem,i)}}function IP(e){return e.replace(/\s+/gu,``).toUpperCase()}async function LP(e,t){try{let n=lf.parse(e);switch(n.method){case`auth.refresh`:{let e=await AP({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 kP(n.params.deviceId??t.relayDeviceId,e.deviceId),uf.parse({method:n.method,result:e})}case`projects.list`:{let e=await t.sessionManager.listProjects();return uf.parse({method:n.method,result:{projects:e}})}case`codex.accounts.get`:{let e=await t.sessionManager.getCodexAccounts();return uf.parse({method:n.method,result:e})}case`codex.accounts.save`:{let e=await t.sessionManager.saveCurrentCodexAccount();return uf.parse({method:n.method,result:e})}case`codex.accounts.switch`:{let e=await t.sessionManager.switchCodexAccount(n.params.accountId);return uf.parse({method:n.method,result:e})}case`gateway.settings.get`:return uf.parse({method:n.method,result:t.gatewaySettings.get()});case`gateway.settings.update`:{let e=await t.gatewaySettings.update(n.params);return uf.parse({method:n.method,result:e})}case`gateway.update.get`:{let e=await t.updateService.getOrCheckInfo(`mobile`);return uf.parse({method:n.method,result:e})}case`codex.appServer.restart`:{let e=await t.sessionManager.restartCodexAppServer();return uf.parse({method:n.method,result:e})}case`gateway.update.apply`:{let e=await t.updateService.applyUpdate(n.params.requestedBy??`mobile`);return uf.parse({method:n.method,result:e})}case`projects.discovery.get`:{let e=await t.projectDiscoveryService.getProjects();return uf.parse({method:n.method,result:e})}case`projects.discovery.refresh`:{let e=await t.projectDiscoveryService.refreshProjects();return uf.parse({method:n.method,result:e})}case`projects.create`:{let e=await t.sessionManager.createProject({path:n.params.path,title:n.params.title});return uf.parse({method:n.method,result:{project:e}})}case`projects.delete`:if(!await t.sessionManager.deleteProject(n.params.projectId))throw zP(n.method,`NOT_FOUND`,404,`Project not found`);return uf.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 uf.parse({method:n.method,result:e})}case`workspace.directories.create`:{let e=await t.fsService.createDirectoryUnrestricted(n.params.path,n.params.name,200);return uf.parse({method:n.method,result:e})}case`workspace.entries.list`:{let e=await t.workspaceFileService.listEntries(n.params.locator,n.params.limit??200);return uf.parse({method:n.method,result:e})}case`workspace.files.resolve`:{let e=await t.workspaceFileService.resolveFile(n.params.locator);return uf.parse({method:n.method,result:e})}case`workspace.files.readText`:{let e=await t.workspaceFileService.readTextFile(n.params.locator,{startLine:n.params.startLine,maxLines:n.params.maxLines,maxBytes:n.params.maxBytes});return uf.parse({method:n.method,result:e})}case`workspace.files.preparePreview`:{let e=t.relayPreviewBaseUrl?.trim(),r=t.gatewayId?.trim();if(!e||!r)throw zP(n.method,`BAD_REQUEST`,400,`Relay preview base url is not configured`);let i=await t.workspaceFileService.preparePreview(n.params.locator,{deviceId:t.relayDeviceId,disposition:n.params.disposition,buildPreviewUrl:t=>`${e.replace(/\/+$/,``)}/api/gateways/${encodeURIComponent(r)}/workspace/files/content/${encodeURIComponent(t)}`});return uf.parse({method:n.method,result:i})}case`sessions.list`:{let e=await t.sessionManager.listProjectSessions(n.params.projectId,n.params.status??`all`,{syncExternal:n.params.syncExternal});return uf.parse({method:n.method,result:{sessions:e}})}case`sessions.discovery.list`:{let e=await t.projectDiscoveryService.listProjectSessions(n.params.projectPath);return uf.parse({method:n.method,result:e})}case`sessions.get`:{let e=await t.sessionManager.getProjectSessionSummary(n.params.projectId,n.params.sessionId);if(!e)throw zP(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return uf.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 zP(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return uf.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`,refreshMode:e.refreshMode,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}),uf.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 t.buildRawEventsListResult({sessionManager:t.sessionManager,projectId:n.params.projectId,sessionId:n.params.sessionId,limit:e,fromRawSeqExclusive:n.params.fromRawSeqExclusive,detailLevel:n.params.detailLevel,requestSource:`rpc`});return uf.parse({method:n.method,result:r})}case`sessions.readableItem.get`:{let e=await OP({sessionManager:t.sessionManager,readableItemDetailLookup:t.readableItemDetailLookup,projectId:n.params.projectId,sessionId:n.params.sessionId,itemId:n.params.itemId});if(!e)throw zP(n.method,`NOT_FOUND`,404,`Readable item ${n.params.itemId} not found`);return uf.parse({method:n.method,result:e})}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`),uf.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`providers.execution.update`:{let e=await t.sessionManager.updateProviderExecutionDefaults(n.params);return uf.parse({method:n.method,result:{defaults:e}})}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 uf.parse({method:n.method,result:e})}case`devices.list`:return uf.parse({method:n.method,result:{devices:t.authService.listDevices()}});case`devices.revoke`:if(!await t.authService.revokeDevice(n.params.deviceId))throw zP(n.method,`NOT_FOUND`,404,`Device ${n.params.deviceId} not found`);return uf.parse({method:n.method,result:{revoked:!0}});default:{let e=n;throw zP(void 0,`INTERNAL`,500,`Unhandled relay RPC method: ${JSON.stringify(e)}`)}}}catch(e){throw RP(e)}}function RP(e){if(xw(e))switch(e.code){case`REFRESH_TOKEN_REVOKED`:case`DEVICE_REVOKED`:case`REFRESH_TOKEN_DEVICE_MISMATCH`:return zP(`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`:case`CODEX_ACCOUNT_NOT_FOUND`:return zP(`NOT_FOUND`,e.status,String(e),e.details);case`SESSION_TURN_CONFLICT`:case`PROJECT_DELETE_CONFLICT`:case`CODEX_APP_SERVER_RESTART_CONFLICT`:return zP(`BAD_REQUEST`,e.status,String(e),e.details);default:return zP(e.status>=500?`INTERNAL`:`BAD_REQUEST`,e.status,String(e),e.details)}let t=ff.safeParse(e);if(t.success)return t.data;let n=df.safeParse(e);if(n.success)return zP(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 zP(t.code,t.status,t.message,t.details)}let r=String(e);return e instanceof Error&&e.name===`ZodError`?zP(`BAD_REQUEST`,400,r):BP(e)?zP(`UNAUTHORIZED`,401,r):VP(r)?zP(`BAD_REQUEST`,400,r):zP(`INTERNAL`,500,r)}function zP(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 ff.parse({...o?{method:o}:{},code:s,status:c,message:l,...u===void 0?{}:{details:u}})}function BP(e){return xw(e)&&(e.code===`REFRESH_TOKEN_REVOKED`||e.code===`DEVICE_REVOKED`||e.code===`REFRESH_TOKEN_DEVICE_MISMATCH`)||Vw(e)}function VP(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 HP(e,t){return e.length===0?[]:t===void 0?[...e]:e.filter(e=>e.rawSeq>t)}function UP(e){return{baseRawEvents:Kp(e.rawEvents.filter(t=>t.rawSeq<=e.cursorRawSeq)),nextRawEvents:Kp(e.rawEvents)}}function WP(e,t){return t&&`kind`in t&&t.kind===`bootstrapping`?t:{kind:`bootstrapping`,sessionId:e,previousReadyState:t??null,queuedEnvelopes:[]}}function GP(e,t){let n=e.previousReadyState;if(!n)return{previousReadyState:null,nextReadyState:null,replayedEnvelopes:[]};let r=HP(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 KP(e){return{v:`1.0`,kind:`session.stream.sync`,type:`session.stream.sync`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`stream_sync_${yw(12)}`,ts:new Date().toISOString(),payload:{raw:{decision:e.decision,reason:e.reason,snapshotId:e.snapshotId,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}}}}function qP(e){return{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}:{}}}:{}}}}function JP(e){return{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}:{},...e.contextUsage===void 0?{}:{contextUsage:e.contextUsage}}}}}function YP(e){return{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}:{},...e.contextUsage===void 0?{}:{contextUsage:e.contextUsage}}}}}function XP(e){return{v:`1.0`,kind:`session.external.update`,type:`session.external.update`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`session_external_update_${yw(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,...e.sessionSummary?{sessionSummary:e.sessionSummary}:{}}}}}function ZP(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}const QP=1e3,$P=(e,t)=>`${e}::${t}`,eF=e=>e.purpose===`detail_view`&&e.bootstrapMode===`readable`,tF=e=>{let t=new Map;for(let n of e)t.set(n.sessionId,n);return[...t.values()]},nF=e=>({kind:`ready`,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,rawEvents:[...e.rawEvents],detailTransportRawEvents:[...e.detailTransportRawEvents??e.rawEvents],contextUsage:e.contextUsage??null,timelineItems:[...e.timelineItems],pendingApprovals:[...e.pendingApprovals],pendingUserInputs:[...e.pendingUserInputs]}),rF=e=>typeof e==`object`&&e?e:{},iF=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}},aF=e=>{if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=rF(n),r=iF(e,`id`),i=iF(e,`header`),a=iF(e,`question`);if(!r||!i||!a)continue;let o=Array.isArray(e.options)?e.options.map(e=>{let t=rF(e),n=iF(t,`label`);if(!n)return null;let r=iF(t,`description`)??n,i=iF(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},oF=(e,t)=>{let n=pp(e,t),r=new Map,i=new Map;for(let e of n){if(e.type===`tool.permission.requested`){let t=rF(e.payload.raw),n=iF(t,`requestId`,`request_id`);if(!n)continue;let i=rF(t.rawParams??t.raw_params),a=rF(i.networkApprovalContext??i.network_approval_context);r.set(n,{requestId:n,sessionId:e.sessionId,...iF(t,`toolName`,`tool_name`)?{toolName:iF(t,`toolName`,`tool_name`)}:{},...iF(t,`reason`)?{reason:iF(t,`reason`)}:{},...iF(i,`command`)?{command:iF(i,`command`)}:{},...iF(i,`cwd`)?{cwd:iF(i,`cwd`)}:{},...iF(i,`grantRoot`,`grant_root`)?{grantRoot:iF(i,`grantRoot`,`grant_root`)}:{},...iF(a,`host`)?{networkHost:iF(a,`host`)}:{},...iF(a,`protocol`)?{networkProtocol:iF(a,`protocol`)}:{},...iF(t,`itemId`,`item_id`)?{itemId:iF(t,`itemId`,`item_id`)}:{},...iF(t,`turnId`,`turn_id`)?{turnId:iF(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`tool.permission.resolved`){let t=iF(rF(e.payload.raw),`requestId`,`request_id`);t&&r.delete(t);continue}if(e.type===`user.input.requested`){let t=rF(e.payload.raw),n=iF(t,`requestId`,`request_id`);if(!n)continue;i.set(n,{requestId:n,sessionId:e.sessionId,questions:aF(t.questions),...iF(t,`itemId`,`item_id`)?{itemId:iF(t,`itemId`,`item_id`)}:{},...iF(t,`turnId`,`turn_id`)?{turnId:iF(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`user.input.resolved`){let t=iF(rF(e.payload.raw),`requestId`,`request_id`);t&&i.delete(t)}}return{pendingApprovals:[...r.values()],pendingUserInputs:[...i.values()]}},sF=e=>{let t=e.rawEventsAlreadyMatchDetailTransport===!0?e.rawEvents:uF({rawEvents:e.rawEvents,detailLevel:e.target.detailLevel}),n=e.target.purpose===`detail_view`?Fc({provider:e.target.provider,rawEvents:t}):null,r=e.target.purpose===`detail_view`?wP(mp(e.target.sessionId,t,[])):[],i=e.target.purpose===`detail_view`?yo({rawEvents:t,messages:r,deferCompletedToolDetails:!0}):{timelineItems:[],consumedMessageIds:[]},a=e.target.purpose===`detail_view`?oF(e.target.sessionId,t):{pendingApprovals:[],pendingUserInputs:[]};return{detailTransportRawEvents:t,contextUsage:n,timelineItems:i.timelineItems,pendingApprovals:a.pendingApprovals,pendingUserInputs:a.pendingUserInputs}},cF=e=>{let t=uF({rawEvents:e.rawEvents,detailLevel:e.target.detailLevel}),n=sF({target:e.target,rawEvents:t,rawEventsAlreadyMatchDetailTransport:!0});return nF({target:e.target,rawEvents:e.rawEvents,detailTransportRawEvents:t,contextUsage:n.contextUsage,timelineItems:n.timelineItems,pendingApprovals:n.pendingApprovals,pendingUserInputs:n.pendingUserInputs})},lF=(e,t)=>{let n=vF(e.rawEvents,t),r=uF({rawEvents:vF(e.detailTransportRawEvents,t),detailLevel:e.detailLevel}),i=sF({target:{sessionId:e.sessionId,provider:e.provider,detailLevel:e.detailLevel,purpose:`detail_view`},rawEvents:r,rawEventsAlreadyMatchDetailTransport:!0});return{...e,rawEvents:n,detailTransportRawEvents:r,contextUsage:i.contextUsage,timelineItems:i.timelineItems,pendingApprovals:i.pendingApprovals,pendingUserInputs:i.pendingUserInputs}},uF=e=>{if(e.detailLevel!==`compact`||e.rawEvents.length===0)return e.rawEvents;let t=dF(e.rawEvents[0]?.sessionId??``,e.rawEvents);return pE(e.rawEvents,e.detailLevel,{preserveIncompleteCommandOutput:!0,additionalCompletedCommandItemKeys:t})},dF=(e,t)=>{if(!e||t.length===0)return new Set;let n=new Set,r=mp(e,t,[]);for(let t of r){if(t.itemType!==`command_execution`||!t.itemId||t.status!==`completed`&&t.status!==`failed`)continue;let r=hF(e,t.itemId);r&&n.add(r)}return n},fF=e=>iF(e,`id`,`itemId`,`item_id`)??null,pF=e=>{if(e.type===`item.started`||e.type===`item.updated`||e.type===`item.completed`)return fF(rF(rF(e.payload.raw).item));if(e.type!==`native.raw`)return null;let t=rF(rF(e.payload.raw).message),n=rF(t.params),r=rF(n.item),i=rF(n.msg);return fF(r)??fF(rF(t.item))??iF(n,`itemId`,`item_id`)??iF(i,`itemId`,`item_id`)??null},mF=e=>{if(e.type===`item.completed`)return!0;if(e.type!==`native.raw`)return!1;let t=rF(e.payload.raw);return(iF(rF(t.message),`method`)??iF(t,`method`))===`item/completed`},hF=(e,t)=>t?`${e}|${t}`:null,gF=e=>hF(e.sessionId,pF(e)),_F=e=>{let t=gF(e);if(t)return`item:${t}`;let n=Yp(e);return n?`delta:${n.key}`:null},vF=(e,t)=>{let n=[...e],r=gF(t),i=_F(t),a=Yp(t),o=t;if(i&&a)for(let e=n.length-1;e>=0;--e){let r=n[e];if(!r||_F(r)!==i||!Yp(r))continue;let a=Xp(r,t);if(a){n[e]=null,o=a;break}}return n.push(o),!r||!mF(t)?n.filter(e=>e!==null):n.filter(e=>e!==null&&(e.eventId===o.eventId||gF(e)!==r||!Yp(e)))},yF=e=>{let t=bF(e);if(!t)return null;let n=fF(t),r=rF(t.payload),i=iF(t,`output_delta`,`outputDelta`)??iF(r,`output_delta`,`outputDelta`);return!n||!i?null:{itemId:n,delta:i}},bF=e=>{if(e.type===`item.updated`){let t=rF(rF(e.payload.raw).item);return xF(t)?t:null}if(e.type!==`native.raw`)return null;let t=rF(e.payload.raw),n=rF(t.message);if((iF(n,`method`)??iF(t,`method`))!==`item/updated`)return null;let r=rF(rF(n.params).item);return xF(r)?r:null},xF=e=>{let t=iF(e,`type`);return t===`commandExecution`||t===`command_execution`},SF=e=>e.includes(`[compact history preview:`),CF=(e,t)=>{let n=yF(t);if(!n)return null;let r=e.timelineItems.findIndex(e=>e.kind===`terminal_card`&&e.itemId===n.itemId&&typeof e.output==`string`);if(r<0)return null;let i=e.timelineItems[r];if(!i||i.kind!==`terminal_card`||SF(i.output))return null;let a=vF(e.rawEvents,t),o=uF({rawEvents:vF(e.detailTransportRawEvents,t),detailLevel:e.detailLevel}),s={...i,output:`${i.output}${n.delta}`},c=[...e.timelineItems];c[r]=s;let l=a[a.length-1]?.rawSeq??t.rawSeq;return{nextState:{...e,rawEvents:a,detailTransportRawEvents:o,timelineItems:c},messageInput:{provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,fromRawSeq:e.rawEvents[e.rawEvents.length-1]?.rawSeq,toRawSeq:l,timelineUpserts:[],timelineRemovals:[],timelineTextDeltaPatches:[{id:i.id,field:`output`,delta:n.delta}]}}},wF=e=>Buffer.byteLength(JSON.stringify(JP(e)),`utf8`),TF=e=>{let t=Math.max(1,Math.floor(e.maxChunkBytes??524288)),n=[],r=(t,n)=>wF({provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,snapshotId:e.snapshotId,chunkIndex:t,totalChunks:1,timelineItems:n,pendingApprovals:t===0?e.pendingApprovals:void 0,pendingUserInputs:t===0?e.pendingUserInputs:void 0,contextUsage:t===0?e.contextUsage:void 0});if(e.timelineItems.length===0)return[{timelineItems:[],estimatedByteLength:r(0,[])}];let i=[];for(let a of e.timelineItems){let e=n.length,o=[...i,a],s=r(e,o);if(i.length>0&&s>t){n.push({timelineItems:i,estimatedByteLength:r(e,i)}),i=[a];continue}i=o}return n.push({timelineItems:i,estimatedByteLength:r(n.length,i)}),n},EF=(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)}},DF=(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)}},OF=(e,t,n,r)=>{let i={},a=pp(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=iF(rF(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},kF=e=>e?{stateFound:!0,kind:e.kind,sessionId:e.sessionId,projectId:e.projectId,provider:e.provider,detailLevel:e.detailLevel,rawEventCount:e.rawEvents.length,detailTransportRawEventCount:e.detailTransportRawEvents.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,hasContextUsage:!!e.contextUsage}:{stateFound:!1},AF=e=>e?e.kind===`ready`?kF(e):{stateFound:!0,kind:e.kind,sessionId:e.sessionId,queuedEnvelopeCount:e.queuedEnvelopes.length,previousReadyState:kF(e.previousReadyState)}:{stateFound:!1},jF=(e,t)=>{let n,r,i;try{n=Ys(e.previousState.timelineItems,e.nextState.timelineItems),r=EF(e.previousState.pendingApprovals,e.nextState.pendingApprovals),i=DF(e.previousState.pendingUserInputs,e.nextState.pendingUserInputs)}catch(n){throw t?.(`stream.readable.delta.build.error`,{sessionId:e.previousState.sessionId,projectId:e.previousState.projectId,previousState:kF(e.previousState),nextState:kF(e.nextState),sessionSummaryKeys:e.sessionSummary?Object.keys(e.sessionSummary):[],errorMessage:n instanceof Error?n.message:String(n)}),n}let a=JSON.stringify(e.previousState.contextUsage??null)!==JSON.stringify(e.nextState.contextUsage??null);if(n.upserts.length===0&&n.removals.length===0&&n.textDeltaPatches.length===0&&r.upserts.length===0&&r.removals.length===0&&i.upserts.length===0&&i.removals.length===0&&!a&&!e.sessionSummary)return null;let o=e.nextState.rawEvents[e.nextState.rawEvents.length-1]?.rawSeq;return o===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:o,timelineUpserts:n.upserts,timelineRemovals:n.removals,timelineTextDeltaPatches:n.textDeltaPatches,pendingApprovalUpserts:r.upserts,pendingApprovalRemovals:r.removals,pendingUserInputUpserts:i.upserts,pendingUserInputRemovals:i.removals,sessionSummary:e.sessionSummary,contextUsage:a?e.nextState.contextUsage:void 0}};function MF(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}}var NF=class{stateByClientSession=new Map;pendingDeltaByClientSession=new Map;itemDetailCache=new Map;constructor(e,t,n,r,i=512){this.sessionHub=e,this.sessionManager=t,this.readableLiveDeltaCoalesceMs=n,this.log=r,this.itemDetailCacheMaxEntries=i}shutdown(){for(let e of this.pendingDeltaByClientSession.values())clearTimeout(e.timer);this.pendingDeltaByClientSession.clear(),this.stateByClientSession.clear(),this.itemDetailCache.clear()}handleSessionStreamSubscribeCommand=async(e,t,n)=>{let r=tF(t),i=new Set(r.map(e=>e.sessionId)),a=this.sessionHub.getSubscriptions(e);this.log(`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}))}),this.primeReadableBootstrapForSubscriptions(e,r);for(let t of i)this.sessionHub.pauseSession(e,t);this.sessionHub.replaceSubscriptions(e,r,n),this.syncReadableLiveProjectionSubscriptions(e,a,r,n);try{for(let t of r)try{await this.syncSessionStreamSubscription(e,t)}catch(n){throw eF(t)&&this.restoreReadableLiveProjectionAfterBootstrapFailure({clientId:e,sessionId:t.sessionId}),n}}finally{for(let t of i)this.sessionHub.resumeSession(e,t)}};clearState=(e,t)=>{let n=$P(e,t),r=this.stateByClientSession.get(n);this.stateByClientSession.delete(n);let i=this.pendingDeltaByClientSession.get(n);i&&(clearTimeout(i.timer),this.pendingDeltaByClientSession.delete(n)),(r||i)&&this.log(`readable.state.cleared`,{clientId:e,sessionId:t,hadState:!!r,previousState:AF(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})};clearStatesForClient=e=>{let t=`${e}::`;for(let e of this.stateByClientSession.keys())e.startsWith(t)&&this.stateByClientSession.delete(e);for(let[e,n]of this.pendingDeltaByClientSession)e.startsWith(t)&&(clearTimeout(n.timer),this.pendingDeltaByClientSession.delete(e))};getReadableItemDetailResult=async e=>{let t=this.getLatestReadableReadyStateForSession(e.projectId,e.sessionId),n=t?TP(t.timelineItems,e.itemId):null,r=n&&`deferredDetail`in n&&n.deferredDetail!==void 0;if(n&&!r){let r=EP(n);return r&&this.setReadableItemDetailCacheEntry({projectId:e.projectId,sessionId:e.sessionId,itemId:r,item:n}),this.log(`readable.item_detail.cache_hit`,{projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId,source:`live_state`,lastRawSeq:t?.rawEvents[t.rawEvents.length-1]?.rawSeq??null}),{item:n}}let i=this.getReadableItemDetailCacheEntry(e.projectId,e.sessionId,e.itemId);if(i)return this.log(`readable.item_detail.cache_hit`,{projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId,source:`item_cache`}),{item:i.item};let a=await this.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,2**53-1),o=DP({sessionId:e.sessionId,rawEvents:a}),s=this.seedReadableItemDetailCache({projectId:e.projectId,sessionId:e.sessionId,timelineItems:o.timelineItems}),c=TP(o.timelineItems,e.itemId);return this.log(`readable.item_detail.projection_rebuilt`,{projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId,source:t?`session_history_after_live_state`:`session_history`,lastRawSeq:o.lastRawSeq,timelineItemCount:o.timelineItems.length,cachedItemCount:s,found:!!c}),c?{item:c}:null};routeReadableLiveDelta=e=>{let t=this.sessionHub.getClientSubscriptionsForSession(e.sessionId,`detail_view`);if(t.length!==0)for(let{clientId:n,subscription:r}of t){if(!eF(r))continue;let t=$P(n,e.sessionId),i=this.stateByClientSession.get(t);if(!i)continue;if(i.kind===`bootstrapping`){i.queuedEnvelopes.push(e);continue}let a=CF(i,e);if(a){this.flushPendingReadableLiveDelta(n,e.sessionId),this.stateByClientSession.set(t,a.nextState),this.sessionHub.sendSessionMessageToClient(n,e.sessionId,YP(a.messageInput)),this.log(`stream.readable.live_patch.sent`,{clientId:n,sessionId:e.sessionId,projectId:i.projectId,provider:i.provider,fromRawSeq:a.messageInput.fromRawSeq??null,toRawSeq:a.messageInput.toRawSeq,timelineTextDeltaPatchCount:a.messageInput.timelineTextDeltaPatches?.length??0});continue}let o=lF(i,e);this.stateByClientSession.set(t,o);let s=OF(e.sessionId,e,i,o);this.enqueueReadableLiveDelta({clientId:n,previousState:i,nextState:o,sessionSummary:s})}};refreshDetailSessionSnapshots=async e=>{let t=this.sessionHub.getClientSubscriptionsForSession(e.sessionId,`detail_view`);for(let{clientId:n,subscription:r}of t){let t=r.projectId?.trim()??``;if(!(t&&t!==e.projectId)){this.sessionHub.pauseSession(n,e.sessionId);try{let t=await this.resolveSessionStreamTarget(r);if(t.bootstrapMode===`readable`){let r=this.getReadableRefreshDeltaBase({clientId:n,sessionId:e.sessionId,projectId:e.projectId,detailLevel:t.detailLevel,refreshMode:e.refreshMode,reason:e.reason});if(r){this.startReadableLiveProjectionBootstrap({clientId:n,sessionId:e.sessionId,previousReadyState:r.previousReadyState}),await this.sendSessionReadableResumeDelta(n,t,r.cursor,r.reason);continue}this.startReadableLiveProjectionBootstrap({clientId:n,sessionId:e.sessionId}),await this.sendSessionReadableSnapshot(n,t,e.reason)}else await this.sendSessionSnapshot(n,t,e.reason)}catch(t){throw eF(r)&&this.restoreReadableLiveProjectionAfterBootstrapFailure({clientId:n,sessionId:e.sessionId}),t}finally{this.sessionHub.resumeSession(n,e.sessionId)}}}};sendSessionSnapshot=async(e,t,n)=>{let r=`snap_${yw(12)}`,{compactedRawEvents:i,detailTransportRawEvents:a,lastRawSeq:o,slimReadableProjection:s,pendingApprovals:c,pendingUserInputs:l}=await this.buildReadableSnapshotProjection(t);this.sessionHub.sendStreamMessage(e,KP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,...o===void 0?{}:{toRawSeq:o}}));let u=ZP(a,QP),d=t.purpose===`detail_view`?ZP(s.timelineItems,QP):[],f=t.purpose===`detail_view`?`raw+readable`:`raw`,p=Math.max(u.length,d.length,1);this.log(`stream.snapshot.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,reason:n,snapshotId:r,snapshotFormat:f,compactedEventCount:i.length,detailTransportEventCount:a.length,readableTimelineItemCount:s.timelineItems.length,totalChunks:p,firstRawSeq:a[0]?.rawSeq??null,lastRawSeq:o??null});for(let n=0;n<p;n+=1){let i=u[n]??[],a=d[n]??[];this.sessionHub.sendStreamMessage(e,qP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:p,events:i,timelineItems:t.purpose===`detail_view`?a:void 0}))}};sendSessionReadableSnapshot=async(e,t,n)=>{let r=`snap_${yw(12)}`,i=this.startReadableLiveProjectionBootstrap({clientId:e,sessionId:t.sessionId});try{let{compactedRawEvents:a,detailTransportRawEvents:o,contextUsage:s,lastRawSeq:c,slimReadableProjection:l,pendingApprovals:u,pendingUserInputs:d}=await this.buildReadableSnapshotProjection(t),f=this.sessionHub.getSubscriptions(e).find(e=>e.sessionId===t.sessionId),p=f?.projectId?.trim()??``;if(!f||!eF(f)||p&&p!==t.projectId||(f.detailLevel??`full`)!==t.detailLevel){this.clearState(e,t.sessionId);return}let m=nF({target:t,rawEvents:a,detailTransportRawEvents:o,contextUsage:s,timelineItems:l.timelineItems,pendingApprovals:u,pendingUserInputs:d}),h=this.stateByClientSession.get(i),g=HP(h?.kind===`bootstrapping`?h.queuedEnvelopes:[],c);for(let e of g)m=lF(m,e);this.seedReadableLiveProjectionState({clientId:e,target:t,rawEvents:m.rawEvents,detailTransportRawEvents:m.detailTransportRawEvents,contextUsage:m.contextUsage,timelineItems:m.timelineItems,pendingApprovals:m.pendingApprovals,pendingUserInputs:m.pendingUserInputs});let _=m.rawEvents[m.rawEvents.length-1]?.rawSeq;this.sessionHub.sendStreamMessage(e,KP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,..._===void 0?{}:{toRawSeq:_}}));let v=TF({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,timelineItems:m.timelineItems,pendingApprovals:m.pendingApprovals,pendingUserInputs:m.pendingUserInputs,contextUsage:m.contextUsage}),y=Math.max(v.length,1);this.log(`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,canonicalRawEventCount:m.rawEvents.length,detailTransportRawEventCount:m.detailTransportRawEvents.length,readableTimelineItemCount:m.timelineItems.length,bufferedReadableDeltaCount:g.length,readableChunkTargetBytes:524288,readableChunkItemCounts:v.map(e=>e.timelineItems.length),readableChunkEstimatedBytes:v.map(e=>e.estimatedByteLength),totalChunks:y,firstRawSeq:m.rawEvents[0]?.rawSeq??null,lastRawSeq:_??null});for(let n=0;n<y;n+=1){let i=v[n];this.sessionHub.sendStreamMessage(e,JP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:y,timelineItems:i?.timelineItems??[],pendingApprovals:n===0?m.pendingApprovals:void 0,pendingUserInputs:n===0?m.pendingUserInputs:void 0,contextUsage:n===0?m.contextUsage:void 0}))}}catch(n){throw this.restoreReadableLiveProjectionAfterBootstrapFailure({clientId:e,sessionId:t.sessionId}),n}};sendSessionReadableResumeDelta=async(e,t,n,r)=>{let i=$P(e,t.sessionId),a=await this.sessionManager.getProjectSessionRawEvents(t.projectId,t.sessionId,2**53-1),{baseRawEvents:o,nextRawEvents:s}=UP({rawEvents:a,cursorRawSeq:n}),c=cF({target:t,rawEvents:o}),l=cF({target:t,rawEvents:s}),u=this.stateByClientSession.get(i),d=HP(u?.kind===`bootstrapping`?u.queuedEnvelopes:[],l.rawEvents[l.rawEvents.length-1]?.rawSeq);for(let e of d)l=lF(l,e);this.log(`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,baseRawEventCount:o.length,nextRawEventCount:s.length,bootstrapState:AF(u),bufferedEnvelopeCount:d.length,previousState:kF(c),nextState:kF(l)}),this.seedReadableLiveProjectionState({clientId:e,target:t,rawEvents:l.rawEvents,detailTransportRawEvents:l.detailTransportRawEvents,contextUsage:l.contextUsage,timelineItems:l.timelineItems,pendingApprovals:l.pendingApprovals,pendingUserInputs:l.pendingUserInputs});let f=l.rawEvents[l.rawEvents.length-1]?.rawSeq??n;this.sessionHub.sendStreamMessage(e,KP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`delta`,reason:r,fromRawSeq:n,...f===void 0?{}:{toRawSeq:f}}));let p=jF({previousState:c,nextState:l},this.log);this.log(`stream.readable.resume.delta`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,reason:r,cursorRawSeq:n,emittedDelta:!!p,deltaFromRawSeq:p?.fromRawSeq??n,deltaToRawSeq:p?.toRawSeq??f??null,timelineUpsertCount:p?.timelineUpserts.length??0,timelineRemovalCount:p?.timelineRemovals.length??0,timelineTextDeltaPatchCount:p?.timelineTextDeltaPatches.length??0,pendingApprovalUpsertCount:p?.pendingApprovalUpserts.length??0,pendingUserInputUpsertCount:p?.pendingUserInputUpserts.length??0}),this.sessionHub.sendSessionMessageToClient(e,t.sessionId,YP(p??{provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,fromRawSeq:n,toRawSeq:f,timelineUpserts:[],timelineRemovals:[]}))};getReadableItemDetailCacheKey(e,t,n){return`${e}::${t}::${n}`}getReadableItemDetailCacheEntry(e,t,n){let r=this.getReadableItemDetailCacheKey(e,t,n),i=this.itemDetailCache.get(r);return i?(this.itemDetailCache.delete(r),this.itemDetailCache.set(r,i),i):null}setReadableItemDetailCacheEntry(e){let t=this.getReadableItemDetailCacheKey(e.projectId,e.sessionId,e.itemId);for(this.itemDetailCache.has(t)&&this.itemDetailCache.delete(t),this.itemDetailCache.set(t,e);this.itemDetailCache.size>Math.max(1,this.itemDetailCacheMaxEntries);){let e=this.itemDetailCache.keys().next().value;if(!e)break;this.itemDetailCache.delete(e)}}seedReadableItemDetailCache(e){let t=0;for(let n of e.timelineItems){let r=EP(n);r&&(this.setReadableItemDetailCacheEntry({projectId:e.projectId,sessionId:e.sessionId,itemId:r,item:n}),t+=1)}return t}getLatestReadableReadyStateForSession(e,t){let n=null,r=-1,i=i=>{if(!i||i.projectId!==e||i.sessionId!==t)return;let a=i.rawEvents[i.rawEvents.length-1]?.rawSeq??-1;a<r||(n=i,r=a)};for(let e of this.stateByClientSession.values())e.kind===`ready`&&i(e);for(let e of this.pendingDeltaByClientSession.values())i(e.nextState);return n}syncReadableLiveProjectionSubscriptions(e,t,n,r){let i=new Set(n.filter(eF).map(e=>e.sessionId));if(r)for(let n of t)i.has(n.sessionId)||this.clearState(e,n.sessionId);for(let t of n)eF(t)||this.clearState(e,t.sessionId)}startReadableLiveProjectionBootstrap(e){let t=$P(e.clientId,e.sessionId),n=this.stateByClientSession.get(t),r=this.pendingDeltaByClientSession.get(t),i=e.previousReadyState??(n?.kind===`bootstrapping`?n.previousReadyState:this.getReadableDeliveredReadyState(e.clientId,e.sessionId)),a=this.getReadablePendingDeltaReplayEnvelopes(i,r);r&&(clearTimeout(r.timer),this.pendingDeltaByClientSession.delete(t));let o=n?.kind===`bootstrapping`?n:i,s=WP(e.sessionId,o);if(a.length>0){let e=new Set(s.queuedEnvelopes.map(e=>e.rawSeq));for(let t of a)e.has(t.rawSeq)||(s.queuedEnvelopes.push(t),e.add(t.rawSeq))}return this.stateByClientSession.set(t,s),this.log(`readable.bootstrap.started`,{clientId:e.clientId,sessionId:e.sessionId,replacedState:AF(n),clearedPendingDelta:!!r,carriedPendingEnvelopeCount:a.length}),t}getReadableDeliveredReadyState(e,t){let n=$P(e,t),r=this.pendingDeltaByClientSession.get(n);if(r)return r.previousState;let i=this.stateByClientSession.get(n);return i?.kind===`ready`?i:null}getReadablePendingDeltaReplayEnvelopes(e,t){return t?HP(t.nextState.rawEvents,e?.rawEvents[e.rawEvents.length-1]?.rawSeq):[]}getReadableRefreshDeltaBase(e){let t=this.getReadableRefreshDeltaReason(e.reason);if(!t||e.refreshMode!==`delta`)return null;let n=this.getReadableDeliveredReadyState(e.clientId,e.sessionId);if(!n||n.projectId!==e.projectId||n.detailLevel!==e.detailLevel)return null;let r=n.rawEvents[n.rawEvents.length-1]?.rawSeq;return typeof r==`number`?{cursor:r,previousReadyState:n,reason:t}:null}getReadableRefreshDeltaReason(e){return e===`external_history_updated`||e===`explicit_history_sync`?`${e}_delta`:null}seedReadableLiveProjectionState(e){let t=nF(e);this.stateByClientSession.set($P(e.clientId,e.target.sessionId),t),this.log(`readable.state.seeded`,{clientId:e.clientId,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,state:kF(t)})}primeReadableBootstrapForSubscriptions(e,t){for(let n of t)eF(n)&&this.startReadableLiveProjectionBootstrap({clientId:e,sessionId:n.sessionId})}async syncSessionStreamSubscription(e,t){let n=await this.resolveSessionStreamTarget(t);if(n.bootstrapMode===`readable`){if(t.cursor.kind===`all`){this.log(`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 this.sendSessionReadableSnapshot(e,n,`readable_bootstrap_snapshot`);return}let r=await this.sessionManager.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){this.log(`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 this.sendSessionReadableSnapshot(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){this.log(`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 this.sendSessionReadableSnapshot(e,n,`readable_cursor_out_of_range_snapshot`);return}let o=n.status===`running`?`readable_cursor_resumed_delta`:`readable_session_idle_delta`;this.log(`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 this.sendSessionReadableResumeDelta(e,n,i,o);return}if(t.cursor.kind===`all`){this.log(`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 this.sendSessionSnapshot(e,n,`cursor_all`);return}let r=await this.sessionManager.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){this.log(`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 this.sendSessionSnapshot(e,n,`empty_history_snapshot`);return}let i=t.cursor.rawSeq,a=Math.max(0,r.min-1);if(i<a||i>r.max){this.log(`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 this.sendSessionSnapshot(e,n,`cursor_out_of_range_snapshot`);return}let o=await this.sessionManager.getProjectSessionRawEventsSinceSeq(n.projectId,n.sessionId,i,2**53-1),s=o[o.length-1]?.rawSeq??i;this.log(`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}),this.sessionHub.sendStreamMessage(e,KP({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)this.sessionHub.sendStreamMessage(e,t)}async resolveSessionStreamTarget(e){let t=e.sessionId;if(!t)throw Error(`session.stream.subscribe requires sessionId`);let n=e.projectId?.trim()??``;if(n){let r=await this.sessionManager.getProjectSessionSummary(n,t);if(!r)throw Aw(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 this.log(`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:MF(r)}),i}let r=this.sessionManager.getSessionExecutionContext(t),i=await this.sessionManager.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 this.log(`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:MF(i)}),a}async buildReadableSnapshotProjection(e){let t=await this.sessionManager.getProjectSessionRawEventsCompacted(e.projectId,e.sessionId,2**53-1),n=uF({rawEvents:t,detailLevel:e.detailLevel}),r=sF({target:e,rawEvents:n,rawEventsAlreadyMatchDetailTransport:!0}),i=t[t.length-1]?.rawSeq;return{compactedRawEvents:t,detailTransportRawEvents:n,contextUsage:r.contextUsage,lastRawSeq:i,slimReadableProjection:{timelineItems:r.timelineItems,consumedMessageIds:[]},pendingApprovals:r.pendingApprovals,pendingUserInputs:r.pendingUserInputs}}restoreReadableLiveProjectionAfterBootstrapFailure(e){let t=$P(e.clientId,e.sessionId),n=this.stateByClientSession.get(t);if(!n||n.kind!==`bootstrapping`)return;let r=this.sessionHub.getSubscriptions(e.clientId).find(t=>t.sessionId===e.sessionId),i=r?.projectId?.trim()??``,a=GP(n,lF);if(!a.previousReadyState||!r||!eF(r)||i&&i!==a.previousReadyState.projectId||(r.detailLevel??`full`)!==a.previousReadyState.detailLevel||!a.nextReadyState){this.log(`readable.bootstrap.recovery.discarded`,{clientId:e.clientId,sessionId:e.sessionId,bootstrapState:AF(n),currentSubscriptionFound:!!r,currentSubscriptionProjectId:i||null,currentSubscriptionDetailLevel:r?.detailLevel??null,previousReadyState:kF(a.previousReadyState),nextReadyState:kF(a.nextReadyState)}),this.clearState(e.clientId,e.sessionId);return}if(this.stateByClientSession.set(t,a.nextReadyState),a.replayedEnvelopes.length===0){this.log(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:0,nextReadyState:kF(a.nextReadyState)});return}let o,s=a.previousReadyState;for(let t of a.replayedEnvelopes){let n=lF(s,t),r=OF(e.sessionId,t,s,n);r&&(o={...o??{},...r}),s=n}let c=jF({previousState:a.previousReadyState,nextState:a.nextReadyState,sessionSummary:o},this.log);if(!c){this.log(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:kF(a.nextReadyState),emittedDelta:!1});return}this.log(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:kF(a.nextReadyState),emittedDelta:!0,deltaFromRawSeq:c.fromRawSeq??null,deltaToRawSeq:c.toRawSeq}),this.sessionHub.sendSessionMessageToClient(e.clientId,a.previousReadyState.sessionId,YP(c))}sendReadableLiveDeltaNow(e){let t=jF({previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary},this.log);t&&this.sessionHub.sendSessionMessageToClient(e.clientId,e.previousState.sessionId,YP(t))}flushPendingReadableLiveDelta(e,t){let n=$P(e,t),r=this.pendingDeltaByClientSession.get(n);r&&(clearTimeout(r.timer),this.pendingDeltaByClientSession.delete(n),this.sendReadableLiveDeltaNow({clientId:e,previousState:r.previousState,nextState:r.nextState,sessionSummary:r.sessionSummary}))}enqueueReadableLiveDelta(e){if(this.readableLiveDeltaCoalesceMs<=0){this.sendReadableLiveDeltaNow(e);return}let t=$P(e.clientId,e.previousState.sessionId),n=this.pendingDeltaByClientSession.get(t);if(n){let t=PF({existing:{previousState:n.previousState,nextState:n.nextState,sessionSummary:n.sessionSummary},next:{previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary}});n.previousState=t.previousState,n.nextState=t.nextState,n.sessionSummary=t.sessionSummary;return}let r=setTimeout(()=>{this.flushPendingReadableLiveDelta(e.clientId,e.previousState.sessionId)},this.readableLiveDeltaCoalesceMs);r.unref?.(),this.pendingDeltaByClientSession.set(t,{clientId:e.clientId,sessionId:e.previousState.sessionId,previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary,timer:r})}};function PF(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)}}function FF(e){return e.sendProviderRaw?`relay_ws`:`direct_ws`}function IF(e){let t=performance.now(),n=JSON.stringify(e);return{payload:n,byteLength:Buffer.byteLength(n),serializeDurationMs:Number((performance.now()-t).toFixed(3))}}function LF(e){return e.kind===`session.readable.snapshot.chunk`?{snapshotId:e.payload.readable.snapshotId,chunkIndex:e.payload.readable.chunkIndex,totalChunks:e.payload.readable.totalChunks,snapshotFormat:`readable`,chunkEventCount:null,chunkTimelineItemCount:e.payload.readable.timelineItems.length}:e.kind===`session.stream.snapshot.chunk`?{snapshotId:e.payload.raw.snapshotId,chunkIndex:e.payload.raw.chunkIndex,totalChunks:e.payload.raw.totalChunks,snapshotFormat:e.payload.readable?`raw+readable`:`raw`,chunkEventCount:e.payload.raw.events.length,chunkTimelineItemCount:e.payload.readable?.timelineItems?.length??null}:null}var RF=class{clients=new Map;clientIdsBySessionId=new Map;deliveryStateByClientSession=new Map;addClient(e,t){let n=`ws_${yw(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=this.sendGatewayStreamMessage(n,e,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&&this.sendGatewayStreamMessage(r,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}this.sendGatewayStreamMessage(i,e.message)}}sendStreamMessage(e,t){let n=this.clients.get(e);!n||n.socket.readyState!==n.socket.OPEN||this.sendGatewayStreamMessage(n,t)}sendBroadcastMessage(e,t){let n=null;for(let r of this.clients.values())if(r.socket.readyState===r.socket.OPEN){if(t?.sessionId){let e=r.subscriptionsBySessionId.get(t.sessionId);if(!e||t.purpose&&e.purpose!==t.purpose)continue}n=this.sendGatewayStreamMessage(r,e,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}sendGatewayStreamMessage(e,t,n=null){let r=n??IF(t),i=LF(t);return i&&LA(`stream.snapshot.chunk.outbound`,{clientId:e.id,deviceId:e.deviceId,transport:FF(e.socket),provider:t.provider,sessionId:t.sessionId,projectId:t.projectId??null,messageKind:t.kind,messageType:t.type,snapshotId:i.snapshotId,chunkIndex:i.chunkIndex,totalChunks:i.totalChunks,snapshotFormat:i.snapshotFormat,chunkEventCount:i.chunkEventCount,chunkTimelineItemCount:i.chunkTimelineItemCount,serializedByteLength:r.byteLength,serializeDurationMs:r.serializeDurationMs}),e.socket.send(r.payload),r}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 zF=1200,BF=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`;var VF=class{statesByKey=new Map;targetsByClientId=new Map;constructor(e){this.options=e}getClientWatchTargets(e){let t=this.targetsByClientId.get(e);return t?[...t.values()]:[]}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){BF&&(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,!CP(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;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});let l=HF(i.session);if(i.historyUpdated||i.statusChanged||UF(t)&&WF(l)){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,sessionSummary:l});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`,refreshMode:i.refreshMode,fromRawSeq:i.fromRawSeq,toRawSeq:i.toRawSeq})}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:zF,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`)},zF))))}stateKey(e,t){return JSON.stringify([e,t])}};function HF(e){return{updatedAt:e.updatedAt,status:e.status,interactionLockReason:e.interactionLockReason,...e.model?{model:e.model}:{},...e.sessionTurnConfig?{sessionTurnConfig:e.sessionTurnConfig}:{},...e.sessionTurnConfigUpdatedAt?{sessionTurnConfigUpdatedAt:e.sessionTurnConfigUpdatedAt}:{}}}function UF(e){return e===`lease_added`||e===`watch`||e===`watch_catchup`}function WF(e){return!!(e?.model||e?.sessionTurnConfig||e?.sessionTurnConfigUpdatedAt)}var GF=class{constructor(e){this.config=e}issue(e){let t=KF(e.sizeBytes??0),n=uw.default.sign({sub:e.deviceId,type:`workspace_preview`,gatewayId:this.config.gatewayId,path:e.canonicalPath,disposition:e.disposition},this.config.accessSecret,{expiresIn:t}),r=uw.default.decode(n);return{ticket:n,expiresAt:r?.exp?new Date(r.exp*1e3).toISOString():new Date().toISOString()}}getExpiresAt(e){let t=uw.default.decode(e);return t?.exp?new Date(t.exp*1e3).toISOString():new Date().toISOString()}verify(e){let t;try{t=uw.default.verify(e,this.config.accessSecret)}catch(e){if(e instanceof Error){if(e.name===`TokenExpiredError`)throw Ow();if(e.name===`JsonWebTokenError`||e.name===`NotBeforeError`)throw Dw()}throw e}if(t.type!==`workspace_preview`||t.gatewayId!==this.config.gatewayId)throw Dw();return t}};function KF(e){return e>20971520?7200:600}var qF=class{constructor(e){this.dependencies=e}async listEntries(e,t=200){if(e.kind===`absolute`)return this.dependencies.fsService.listEntriesAbsolute(e.path,t);let n=await this.requireProject(e.projectId);return this.dependencies.fsService.listEntriesProjectRelative(n.path,e.path??`.`,t)}async resolveFile(e){return{file:(await this.resolveLocator(e)).descriptor}}async readTextFile(e,t={}){let n=await this.resolveLocator(e),r=await this.dependencies.fsService.readTextFile(n.canonicalPath,t);return{file:n.descriptor,...r}}async preparePreview(e,t){let n=await this.resolveLocator(e),r=t.disposition??(n.descriptor.preferredPreviewAction===`share_sheet`||n.descriptor.preferredPreviewAction===`download`?`attachment`:`inline`),i=this.dependencies.previewTicketService.issue({canonicalPath:n.canonicalPath,deviceId:t.deviceId??``,disposition:r,sizeBytes:n.descriptor.sizeBytes}),a=i.ticket,o=i.expiresAt;return{file:n.descriptor,preview:{url:t.buildPreviewUrl(a),expiresAt:o,supportsRange:n.descriptor.capabilities.supportsRange,contentType:n.descriptor.mimeType,contentDisposition:r}}}async readPreviewContent(e,t={}){let n=this.dependencies.previewTicketService.verify(e),r=await this.dependencies.fsService.resolveAbsoluteFile(n.path),i=await this.dependencies.fsService.readFileContentRange(r.canonicalPath,{rangeHeader:t.rangeHeader,includeBody:t.includeBody});return{statusCode:i.statusCode,headers:{contentType:r.mimeType,contentDisposition:YF(n.disposition,r.displayName),contentLength:i.contentLength,etag:i.etag,...r.capabilities.supportsRange?{acceptRanges:`bytes`}:{},...i.contentRange?{contentRange:i.contentRange}:{},...i.lastModified?{lastModified:i.lastModified}:{},cacheControl:`private, max-age=300`},body:i.buffer}}async openPreviewContentStream(e,t={}){let n=this.dependencies.previewTicketService.verify(e),r=await this.dependencies.fsService.resolveAbsoluteFile(n.path),i=await this.dependencies.fsService.openFileContentRangeStream(r.canonicalPath,{rangeHeader:t.rangeHeader,includeBody:t.includeBody});return{statusCode:i.statusCode,headers:{contentType:r.mimeType,contentDisposition:YF(n.disposition,r.displayName),contentLength:i.contentLength,etag:i.etag,...r.capabilities.supportsRange?{acceptRanges:`bytes`}:{},...i.contentRange?{contentRange:i.contentRange}:{},...i.lastModified?{lastModified:i.lastModified}:{},cacheControl:`private, max-age=300`},bodyStream:i.stream}}async resolveLocator(e){if(e.kind===`absolute`){let t=await this.dependencies.fsService.resolveAbsoluteFile(e.path);return{canonicalPath:t.canonicalPath,descriptor:{locator:{kind:`absolute`,path:t.canonicalPath},canonicalPath:t.canonicalPath,displayName:t.displayName,kind:`file`,sizeBytes:t.sizeBytes,mimeType:t.mimeType,extension:t.extension,updatedAt:t.updatedAt,etag:t.etag,previewCategory:t.previewCategory,preferredPreviewAction:t.preferredPreviewAction,capabilities:t.capabilities}}}if(e.kind===`project_relative`){let t=await this.requireProject(e.projectId),n=await this.dependencies.fsService.resolveProjectRelativeFile(t.path,e.path),r=JF(p.default.relative(t.path,n.canonicalPath));return{canonicalPath:n.canonicalPath,descriptor:{locator:{kind:`project_relative`,projectId:t.id,path:r},canonicalPath:n.canonicalPath,displayName:n.displayName,projectId:t.id,relativePath:r,kind:`file`,sizeBytes:n.sizeBytes,mimeType:n.mimeType,extension:n.extension,updatedAt:n.updatedAt,etag:n.etag,previewCategory:n.previewCategory,preferredPreviewAction:n.preferredPreviewAction,capabilities:n.capabilities}}}let t=this.dependencies.sessionManager.getSessionExecutionContext(e.sessionId),n=await this.dependencies.fsService.resolveProjectRelativeFile(t.projectPath,e.path),r=JF(p.default.relative(t.projectPath,n.canonicalPath));return{canonicalPath:n.canonicalPath,descriptor:{locator:{kind:`session_relative`,sessionId:e.sessionId,path:r},canonicalPath:n.canonicalPath,displayName:n.displayName,projectId:t.projectId,relativePath:r,kind:`file`,sizeBytes:n.sizeBytes,mimeType:n.mimeType,extension:n.extension,updatedAt:n.updatedAt,etag:n.etag,previewCategory:n.previewCategory,preferredPreviewAction:n.preferredPreviewAction,capabilities:n.capabilities}}}async requireProject(e){let t=await this.dependencies.sessionManager.getProject(e);if(!t)throw kw(e);return t}};function JF(e){return e.split(p.default.sep).join(`/`)}function YF(e,t){return`${e}; filename="${t.replace(/["\\]/g,`_`)}"`}function XF(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}))}const ZF=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`;process.env.SESSION_FETCH_DEBUG===`1`||process.env.EXPO_PUBLIC_SESSION_FETCH_DEBUG;let QF=null;const $F={perMessageDeflate:{threshold:1024}},eI={globalDecompression:!1,threshold:1024,customTypes:/^text\/(?!event-stream)|(?:\+|\/)json(?:;|$)|(?:\+|\/)text(?:;|$)|(?:\+|\/)xml(?:;|$)/u},tI=4096;function nI(e,t){ZF&&(console.log(`[native-watch][gateway]`,e,t),QF?.info({event:e,...t},`native session watch debug`))}function rI(e){return e?typeof e==`string`?e:e.toString(`utf8`):``}function iI(e){return{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}}async function aI(e){let t=e.limit??300,n=e.detailLevel??`full`,r=(r,i)=>{LA(`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:pE(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:pE(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:pE(o,n)};return r(s,{rangeMin:i.min,rangeMax:i.max,minExpectedCursor:a}),s}async function oI(e,t={}){await Dg(e.gatewayLogPath);let n=cI(e,t),r=sI(e,n.instance);IA(r.log),QF=r.log,await r.register(fw.default,{origin:!0}),await r.register(pw.default,eI),await r.register(dw.default,{options:$F});let i=process.env.NODE_ENV!==`production`,a=4e3,o=`[unserializable payload]`,s=new Hw(e);await s.init();let c=new Qw(e.auditLogPath),l=new RF,u=new RT,d=new FE(e.projectStoreDir),f=new ZN(e.sessionHistoryDir);await f.init();let m=new SA(p.default.join(e.sessionHistoryDir,`discovery-v1`));await m.init();let h=new lA({store:m});await h.init();let g,_=null,v=new Map,y=await gm(e.authStoreDir),b=new GF(e),x=e.relayEnabled?Lh({relayUrl:e.relayUrl,gatewayHost:e.host}):``,S=e=>{let t=v.get(e);t&&(clearTimeout(t.timeout),v.delete(e),t.resolve())},C=(e,t)=>{let n=v.get(e);n&&(clearTimeout(n.timeout),v.delete(e),n.reject(t instanceof Error?t:Error(String(t))))},w=(e,t)=>new Promise((n,r)=>{C(e,Error(`Duplicate pending relay file upload start for request ${e}`));let i=setTimeout(()=>{v.delete(e),r(Error(`Relay file upload start timed out for request ${e}`))},t);v.set(e,{resolve:n,reject:r,timeout:i})}),T=new PM({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),D.routeReadableLiveDelta(e)}}),E=new qF({fsService:u,sessionManager:T,previewTicketService:b}),D=new NF(l,T,e.readableLiveDeltaCoalesceMs,LA),O=new VF({sessionManager:T,logger:r.log,sendStreamMessage:(e,t)=>{l.sendStreamMessage(e,t)},createExternalUpdateMessage:e=>XP(e),refreshDetailSessionSnapshots:e=>D.refreshDetailSessionSnapshots(e)});T.warmStartupProviderCapabilities().catch(e=>{r.log.warn({err:e},`startup provider capability warmup failed`)});let k=new Kh({packageName:z.packageName,currentVersion:z.version,sessionHub:l,logger:r.log,consoleWrite:e=>{console.log(e)},getRunningSessionCount:async()=>T.getRunningRuntimeSessionCount(),requestPreparedUpdate:t.onUpdatePrepared});r.addHook(`onClose`,async()=>{r.log.info({hasRelayClient:!!_},`gateway shutdown starting`);try{D.shutdown(),O.close(),_?.close(),M.close(),await k.shutdown(),await T.shutdown(),await f.shutdown();for(let[e,t]of v.entries())clearTimeout(t.timeout),t.reject(Error(`Gateway shutting down`)),v.delete(e);r.log.info(`gateway shutdown completed`)}catch(e){throw r.log.error({err:e},`gateway shutdown failed`),e}finally{IA(null),QF=null,n.close()}}),i&&r.addHook(`onSend`,async(e,t,n)=>(r.log.info({method:e.method,url:e.url,statusCode:t.statusCode,responseBody:R(n)},`gateway response (dev)`),n)),r.get(`/health`,async()=>({ok:!0,service:`desktop-gateway`,now:new Date().toISOString(),wsClients:l.count(),gatewayName:e.name,machineName:Sm(),gatewayIdentity:y.identity})),r.get(`/api/pairing/descriptor`,async()=>kh({gatewayId:e.gatewayId,gatewayName:e.name,machineName:Sm(),relayBaseUrl:x,directBaseUrls:Fh({protocol:e.httpsEnabled?`https`:`http`,host:e.host,port:e.httpsEnabled?e.httpsPort:e.port}),relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:void 0,gatewayIdentity:y.identity})),r.post(`/api/pairing/start`,async(t,n)=>{if(!L(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(t,n)=>{let r=_l.safeParse(t.body);if(!r.success)return n.code(400).send({error:`Invalid request`,detail:r.error.flatten()});try{let t=he(r.data.deviceName),n=await s.claimPairingCode(r.data.code,t,r.data.deviceIdentity);return await c.record({ts:new Date().toISOString(),action:`pairing.claim`,deviceId:n.deviceId,detail:{deviceName:t}}),FP(y,{...n,gatewayName:e.name,machineName:Sm()},r.data.code,r.data.deviceIdentity)}catch(e){return n.code(400).send({error:String(e)})}}),r.post(`/api/auth/refresh`,async(e,t)=>{let n=bl.safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{return await AP({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)})}});let A=()=>ud.parse({name:e.name,machineName:Sm()}),j=async n=>{let r=ud.pick({name:!0}).parse(n);if(!t.configPath)throw Error(`Gateway config path is unavailable`);return e.name=await Lm(t.configPath,r.name),A()};r.get(`/api/gateway/settings`,async(e,t)=>{if(ne(e,t))return A()}),r.post(`/api/gateway/settings`,async(e,t)=>{if(!ne(e,t))return;let n=ud.pick({name:!0}).safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{return await j(n.data)}catch(e){return t.code(500).send({error:String(e)})}}),r.get(`/api/projects`,async(e,t)=>{if(ne(e,t))return{projects:await T.listProjects()}}),r.get(`/api/gateway/update`,async(e,t)=>{if(ne(e,t))try{return await k.getOrCheckInfo(`mobile`)}catch(e){return t.code(500).send({error:String(e)})}}),r.post(`/api/gateway/update/apply`,async(e,t)=>{if(!ne(e,t))return;let n=e.body,r=Fu.safeParse(n?.requestedBy);try{let e=await k.applyUpdate(r.success?r.data:`mobile`);return Bu.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(ne(e,t))try{return kl.parse(await T.restartCodexAppServer())}catch(e){let n=xw(e)?e.status:500;return t.code(n).send({error:String(e)})}}),r.get(`/api/codex/accounts`,async(e,t)=>{if(ne(e,t))try{return El.parse(await T.getCodexAccounts())}catch(e){return re(t,e)}}),r.post(`/api/codex/accounts/save`,async(e,t)=>{if(ne(e,t))try{return Dl.parse(await T.saveCurrentCodexAccount())}catch(e){return re(t,e)}}),r.post(`/api/codex/accounts/switch`,async(e,t)=>{if(!ne(e,t))return;let n=e.body;if(typeof n?.accountId!=`string`||!n.accountId.trim())return t.code(400).send({error:`accountId is required and must be a non-empty string`});try{return Ol.parse(await T.switchCodexAccount(n.accountId))}catch(e){return re(t,e)}}),r.get(`/api/discovery/projects`,async(e,t)=>{if(ne(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(ne(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(!ne(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 xw(e)&&e.code===`DISCOVERED_PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):VP(n)?t.code(400).send({error:n}):t.code(500).send({error:n})}}),r.get(`/api/workspace/directories`,async(e,t)=>{if(!ne(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.post(`/api/workspace/directories`,async(e,t)=>{if(!ne(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`});if(typeof n.name!=`string`||!n.name.trim())return t.code(400).send({error:`name is required and must be a non-empty string`});try{return await u.createDirectoryUnrestricted(n.path,n.name,200)}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/workspace/entries`,async(e,t)=>{if(!ne(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{let t=ie(e.query);return await E.listEntries(t,i)}catch(e){return re(t,e)}}),r.get(`/api/workspace/files/resolve`,async(e,t)=>{if(ne(e,t))try{let t=ae(e.query);return await E.resolveFile(t)}catch(e){return re(t,e)}}),r.get(`/api/workspace/files/text`,async(e,t)=>{if(!ne(e,t))return;let n=e.query,r=n.startLine?Number(n.startLine):void 0,i=n.maxLines?Number(n.maxLines):void 0,a=n.maxBytes?Number(n.maxBytes):void 0;try{let t=ae(e.query);return await E.readTextFile(t,{startLine:typeof r==`number`&&Number.isFinite(r)?r:void 0,maxLines:typeof i==`number`&&Number.isFinite(i)?i:void 0,maxBytes:typeof a==`number`&&Number.isFinite(a)?a:void 0})}catch(e){return re(t,e)}}),r.post(`/api/workspace/files/preview`,async(e,t)=>{let n=ne(e,t);if(!n)return;let r=e.body,i=Vu.safeParse(r?.locator);if(!i.success)return t.code(400).send({error:i.error.issues[0]?.message??`Invalid workspace file locator`});let a;if(r?.disposition!==void 0){let e=Zu.safeParse(r.disposition);if(!e.success)return t.code(400).send({error:e.error.issues[0]?.message??`Invalid preview disposition`});a=e.data}try{return await E.preparePreview(i.data,{deviceId:n.sub,disposition:a,buildPreviewUrl:t=>`${oe(e)}/api/workspace/files/content/${encodeURIComponent(t)}`})}catch(e){return re(t,e)}}),r.route({method:[`GET`,`HEAD`],url:`/api/workspace/files/content/:ticket`,handler:async(e,t)=>{let n=e.params.ticket?.trim()??``;if(!n)return t.code(400).send({error:`ticket is required`});try{let r=await E.readPreviewContent(n,{rangeHeader:typeof e.headers.range==`string`?e.headers.range:void 0,includeBody:e.method!==`HEAD`});return t.code(r.statusCode),t.header(`Content-Type`,r.headers.contentType),t.header(`Content-Disposition`,r.headers.contentDisposition),t.header(`Content-Length`,String(r.headers.contentLength)),t.header(`ETag`,r.headers.etag),t.header(`Cache-Control`,r.headers.cacheControl),r.headers.acceptRanges&&t.header(`Accept-Ranges`,r.headers.acceptRanges),r.headers.contentRange&&t.header(`Content-Range`,r.headers.contentRange),r.headers.lastModified&&t.header(`Last-Modified`,r.headers.lastModified),e.method===`HEAD`||!r.body?t.send():t.send(r.body)}catch(e){return re(t,e)}}}),r.get(`/api/providers/:provider/capabilities`,async(e,t)=>{if(!ne(e,t))return;let n=le(e,t);if(n)try{return{capabilities:await T.getProviderCapabilities(n.provider,n.projectId,n.agentVersion)}}catch(e){return xw(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(400).send({error:String(e)})}}),r.post(`/api/providers/:provider/execution-defaults`,async(e,t)=>{if(!ne(e,t))return;let n=e.params,r=Na.safeParse(n.provider);if(!r.success)return t.code(400).send({error:`Invalid provider`});let i=za.safeParse({...e.body&&typeof e.body==`object`&&!Array.isArray(e.body)?e.body:{},provider:r.data});if(!i.success)return t.code(400).send({error:i.error.message});try{return{defaults:await T.updateProviderExecutionDefaults(i.data)}}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/agents/:provider/config`,async(e,t)=>{if(!ne(e,t))return;let n=le(e,t);if(n)try{return await T.getAgentConfig(n.provider,{projectId:n.projectId,agentVersion:n.agentVersion})}catch(e){return xw(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(!ne(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 T.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(!ne(e,t))return;let n=e.params;try{return await T.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(!ne(e,t))return;let n=e.params,r=e.query,i=se(r.status,t);if(!i)return;let a=ce(r.syncExternal);try{return{sessions:await T.listProjectSessions(n.projectId,i,{syncExternal:a})}}catch(e){return xw(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(!ne(e,t))return;let n=e.params,r=await T.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(!ne(e,t))return;let n=e.params,r=await T.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(!ne(e,t))return;let n=e.params;try{let e=await T.syncProjectSessionHistory(n.projectId,n.sessionId);return e.historyUpdated&&await D.refreshDetailSessionSnapshots({projectId:n.projectId,sessionId:n.sessionId,reason:`explicit_history_sync`,refreshMode:e.refreshMode,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}),{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 xw(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(!ne(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=hc.safeParse(r.detailLevel).success?hc.parse(r.detailLevel):`full`;try{return await I(n.projectId,n.sessionId,i,typeof a==`number`&&Number.isFinite(a)?Math.max(0,Math.floor(a)):void 0,o,`http`)}catch(e){return xw(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/readable-items/:itemId`,async(e,t)=>{if(!ne(e,t))return;let n=e.params;try{return await OP({sessionManager:T,readableItemDetailLookup:D,projectId:n.projectId,sessionId:n.sessionId,itemId:n.itemId})||t.code(404).send({error:`Readable item not found`})}catch(e){return xw(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(!ne(e,t))return;let n=e.params,r=e.query,i=await T.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)=>L(e)?{devices:s.listDevices()}:t.code(401).send({error:`Unauthorized`})),r.post(`/api/devices/:deviceId/revoke`,async(e,t)=>{if(!L(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=ue(t.headers.authorization)??de(t.url);if(!n){e.close(1008,`Missing access token`);return}let i;try{i=s.verifyAccessToken(n)}catch(t){e.close(1008,`Unauthorized: ${String(t)}`);return}let a=l.addClient(i.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 P(kc(e),i.sub,a)}catch(e){await F({deviceId:i.sub,clientId:a,rawCommand:t,parsedInput:n,error:e})}}),e.on(`close`,(e,t)=>{let n=l.getSubscriptions(a),o=O.getClientWatchTargets(a);r.log.info({clientId:a,deviceId:i.sub,transport:`direct`,closeCode:typeof e==`number`?e:null,closeReason:rI(t),streamSubscriptionCount:n.length,streamSubscriptions:n.map(iI),externalWatchTargetCount:o.length,externalWatchTargets:o},`gateway websocket client disconnected`),O.removeClient(a),l.removeClient(a),D.clearStatesForClient(a)})});let M=new BA({gatewayId:e.gatewayId,relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:`plaintext-relay`,gatewayIdentity:y.identity,gatewayIdentityPrivateKeyPem:y.privateKeyPem,sessionHub:l,logger:r.log,describeClientState:e=>{let t=l.getSubscriptions(e),n=O.getClientWatchTargets(e);return{streamSubscriptionCount:t.length,streamSubscriptions:t.map(iI),externalWatchTargetCount:n.length,externalWatchTargets:n}},handlePairingClaim:async t=>{let n=he(t.deviceName);return FP(y,{...await s.claimPairingCode(t.code,n,t.deviceIdentity),gatewayName:e.name,machineName:Sm()},t.code,t.deviceIdentity)},handleRefresh:async t=>{let n=await AP({authService:s,execute:()=>s.refreshAccessToken(t.refreshToken),logger:r.log,refreshToken:t.refreshToken,requestedDeviceId:t.deviceId,source:`relay_http_forward`});return kP(t.deviceId,n.deviceId),{gatewayId:e.gatewayId,...n}},handleFileContentRequest:async(e,t)=>{if(t.method===`GET`&&t.responseMode===`stream_upload`){let n=await E.openPreviewContentStream(t.ticket,{rangeHeader:t.rangeHeader,includeBody:!0});if(n.bodyStream&&t.uploadUrl&&t.uploadToken){let i=w(e,15e3),a=uI({uploadUrl:t.uploadUrl,uploadToken:t.uploadToken,contentLength:n.headers.contentLength,bodyStream:n.bodyStream});a.completed.catch(n=>{C(e,n),r.log.warn({err:n,requestId:e,ticket:t.ticket},`relay workspace preview upload failed`)});try{await i}catch(e){throw a.abort(e),e}}return sf.parse({status:n.statusCode,headers:n.headers,...n.bodyStream?{bodyTransport:`stream_upload`}:{}})}let n=await E.readPreviewContent(t.ticket,{rangeHeader:t.rangeHeader,includeBody:t.method===`GET`});return sf.parse({status:n.statusCode,headers:n.headers,...n.body?{bodyBase64:n.body.toString(`base64`)}:{}})},verifyDeviceIdentityBinding:async(e,t)=>s.verifyDeviceIdentityBinding(e,t),handleRpcRequest:async(t,n)=>LP(t,{gatewayId:e.gatewayId,relayPreviewBaseUrl:x,authService:s,logger:r.log,sessionManager:T,projectDiscoveryService:h,fsService:u,workspaceFileService:E,updateService:k,gatewaySettings:{get:A,update:j},relayDeviceId:n.deviceId,readableItemDetailLookup:D,refreshDetailSessionSnapshots:e=>D.refreshDetailSessionSnapshots(e),buildRawEventsListResult:aI}),handleFileContentUploadStarted:S,sendFrame:e=>_?.send(e)??!1,dispatchCommand:async(e,t,n)=>{try{await P(e,t,n)}catch(r){await F({deviceId:t,clientId:n,rawCommand:JSON.stringify(e),parsedInput:e,error:r})}}}),N=async(e,t,n)=>{switch(e.type){case`session.start`:{let r=await T.startSession({...e.payload,deviceId:t});l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:r});return}case`turn.input`:await T.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`:await T.startReview(e.payload.sessionId,e.payload.config,t,{input:e.payload.input,turnConfig:e.payload.turnConfig});return;case`tool.approval.respond`:await T.respondToolPermission(e.payload.sessionId,e.payload.requestId,e.payload.decision,e.payload.reason,t);return;case`user.input.respond`:await T.respondUserInput(e.payload.sessionId,e.payload.requestId,e.payload.answers,t);return;case`session.interrupt`:await T.interruptSession(e.payload.sessionId,t);return;case`session.close`:throw Error(`session.close is deprecated. Use session.interrupt instead.`);case`session.external.watch.set`:{nI(`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=O.setClientWatchTargets(n,e.payload.sessions,e.payload.replace);nI(`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=XF(e.payload.sessions);await D.handleSessionStreamSubscribeCommand(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=T.getSessionExecutionContext(e.payload.sessionId),n=await u.readFile(t.projectPath,e.payload.path);await T.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=T.getSessionExecutionContext(e.payload.sessionId),n=await u.diffFile(t.projectPath,e.payload.path,e.payload.baseContent??``);await T.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)}`)}}},P=async(e,t,n)=>{await N(e,t,n)},F=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 T.emitExternalEvent({provider:`codex`,sessionId:`system`,type:`error.runtime`,raw:{message:String(e.error),source:`ws.command`}})},I=async(e,t,n=300,r,i=`full`,a=`http`)=>aI({sessionManager:T,projectId:e,sessionId:t,limit:n,fromRawSeqExclusive:r,detailLevel:i,requestSource:a}),L=t=>t.headers[`x-api-key`]===e.apiKey,R=e=>{if(e==null)return e;if(typeof e==`string`){let t=ee(e);return t===void 0?B(e,a):te(V(t))}if(Buffer.isBuffer(e)){let t=e.toString(`utf8`),n=ee(t);return n===void 0?B(t,a):te(V(n))}return typeof e==`object`?te(V(e)):String(e)},ee=e=>{try{return JSON.parse(e)}catch{return}},B=(e,t)=>e.length<=t?e:`${e.slice(0,t)}...<truncated>`,V=e=>{if(Array.isArray(e))return e.map(e=>V(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]=V(r)}return n}return e},te=e=>{let t=H(e);return t===o?t:t.length<=a?e:{truncated:!0,preview:B(t,a)}},H=e=>{try{return JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)}catch{return o}},ne=(e,t)=>{let n=ue(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}},re=(e,t)=>{let n=xw(t)?t.status:500;return xw(t)?e.code(n).send({error:String(t),code:t.code,...t.details===void 0?{}:{details:t.details}}):e.code(n).send({error:String(t)})},ie=e=>{let t=e&&typeof e==`object`?e:{},n=Hu.safeParse({kind:typeof t.locatorKind==`string`?t.locatorKind:void 0,projectId:typeof t.projectId==`string`?t.projectId:void 0,path:typeof t.path==`string`?t.path:void 0});if(!n.success)throw Error(n.error.issues[0]?.message??`Invalid workspace entries locator`);return n.data},ae=e=>{let t=e&&typeof e==`object`?e:{},n=Vu.safeParse({kind:typeof t.locatorKind==`string`?t.locatorKind:void 0,sessionId:typeof t.sessionId==`string`?t.sessionId:void 0,projectId:typeof t.projectId==`string`?t.projectId:void 0,path:typeof t.path==`string`?t.path:void 0});if(!n.success)throw Error(n.error.issues[0]?.message??`Invalid workspace file locator`);return n.data},oe=t=>{let n=t.headers.host?.trim();return n?`${t.protocol}://${n}`.replace(/\/+$/,``):`${e.httpsEnabled?`https`:`http`}://${e.host}:${e.httpsEnabled?e.httpsPort:e.port}`},se=(e,t)=>{let n=e??`all`;return[`running`,`idle`,`all`].includes(n)?n:(t.code(400).send({error:`Invalid status filter`}),null)},ce=e=>{let t=e?.trim().toLowerCase();return t===`true`||t===`1`},le=(e,t)=>{let n=e.params,r=e.query,i=Na.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)},ue=e=>{if(!e)return null;let[t,n]=e.split(` `);return t?.toLowerCase()!==`bearer`||!n?null:n},de=e=>{try{return new URL(e,`http://localhost`).searchParams.get(`token`)}catch{return null}},fe=e.httpsEnabled?e.httpsPort:e.port,pe=e.httpsEnabled?`https`:`http`,me=Sm(),he=e=>e?.trim()||`Craby mobile`;await r.listen({host:e.host,port:fe});let ge=r.server.address(),_e=typeof ge==`object`&&ge?ge.port:fe;if(r.log.info({host:e.host,port:_e,protocol:pe,machineName:me},lI(pe,e.host,_e)),e.relayEnabled&&(_=new ej({gatewayId:e.gatewayId,machineName:e.name,relayUrl:e.relayUrl,relayTransportSecurityLevel:e.relayTransportSecurityLevel,relayGatewayAccessToken:e.relayGatewayAccessToken,resolveRelayGatewayAccessToken:e.relayGatewayAccessToken.trim()?void 0:()=>aj({gatewayId:e.gatewayId,relayUrl:e.relayUrl,gatewayIdentity:y.identity,privateKeyPem:y.privateKeyPem}),gatewayIdentity:y.identity,directBaseUrls:Fh({protocol:pe,host:e.host,port:_e}),logger:r.log,onFrame:async e=>{await M.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 k.start(),{protocol:pe,listenPort:_e,gatewayName:e.name,machineName:me,gatewayIdentity:y.identity,close:()=>r.close(),getGatewayUpdateInfo:()=>k.getInfo(),requestGatewayUpdate:(e=`console`)=>k.applyUpdate(e),requestCodexAppServerRestart:async(e=`console`)=>T.restartCodexAppServer(),startupPairingCode:g}}function sI(e,t){let n=t;if(!e.httpsEnabled)return(0,mw.default)({disableRequestLogging:!0,loggerInstance:n,routerOptions:{maxParamLength:tI}});if(!e.tlsKeyPath||!e.tlsCertPath)throw Error(`TLS key/cert path is required when HTTPS is enabled.`);let r={key:(0,u.readFileSync)(e.tlsKeyPath),cert:(0,u.readFileSync)(e.tlsCertPath),...e.tlsCaPath?{ca:(0,u.readFileSync)(e.tlsCaPath)}:{}};return(0,mw.default)({disableRequestLogging:!0,loggerInstance:n,routerOptions:{maxParamLength:tI},https:r})}function cI(e,t){let n=process.env.NODE_ENV!==`production`,r=hw.default.destination({dest:e.gatewayLogPath,mkdir:!0,sync:!1}),i=t.logToConsole?hw.default.multistream([{stream:r},{stream:process.stdout}]):r;return{instance:(0,hw.default)({level:n?`debug`:`info`},i),close:()=>{try{r.flushSync()}catch{}r.end()}}}function lI(e,t,n){return`desktop-gateway listening on ${e}://${t}:${n}`}function uI(e){let t=new URL(e.uploadUrl),n=t.protocol===`https:`?S.request:t.protocol===`http:`?x.request:null;if(!n)throw Error(`Unsupported relay preview upload protocol: ${t.protocol}`);let r=null,i=e=>{};return{completed:new Promise((a,o)=>{let s=!1,c=t=>{if(s)return;if(s=!0,!t){a();return}let n=t instanceof Error?t:Error(String(t));e.bodyStream.destroy(n),r?.destroy(n),o(n)};r=n(t,{method:`PUT`,headers:{"content-type":`application/octet-stream`,"content-length":String(e.contentLength),"x-relay-upload-token":e.uploadToken}},e=>{let t=[];e.on(`data`,e=>{t.push(Buffer.isBuffer(e)?e:Buffer.from(e))}),e.on(`error`,c),e.on(`end`,()=>{let n=e.statusCode??0;if(n>=200&&n<300){c();return}c(Error(`Relay preview upload failed (${n}): ${Buffer.concat(t).toString(`utf8`)}`))})}),i=e=>{c(e??Error(`Relay preview upload aborted`))},r.on(`error`,c),(0,C.pipeline)(e.bodyStream,r).catch(c)}),abort:i}}function dI(e){return e instanceof Error?e.stack??`${e.name}: ${e.message}`:(0,b.inspect)(e,{depth:6,breakLength:120})}async function fI(e){let t=await Nm({configPath:e.configPath,ensureConfigFile:!0});Rm(t.config);let n=await oI(t.config,{configPath:t.configPath,logToConsole:e.logToConsole,onUpdatePrepared:async e=>{mI({type:`worker.update.prepared`,payload:e})}});mI({type:`worker.ready`,payload:pI(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=hI(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: ${dI(e)}`),i(1)}),process.on(`unhandledRejection`,e=>{console.error(`[gateway] worker unhandled rejection: ${dI(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);mI({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);mI({type:`worker.response`,id:e.id,method:e.method,ok:!0,result:t});return}}}catch(t){mI({type:`worker.response`,id:e.id,method:e.method,ok:!1,error:String(t)})}}await new Promise(()=>{})}function pI(e){return{protocol:e.protocol,listenPort:e.listenPort,gatewayName:e.gatewayName,machineName:e.machineName,gatewayIdentity:e.gatewayIdentity,startupPairingCode:e.startupPairingCode}}function mI(e){process.send&&process.send(e)}function hI(e){if(!gI(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 gI(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}_I(process.argv.slice(2)).catch(e=>{console.error(String(e)),process.exit(1)});async function _I(e){let t=ee(e);switch(t.command){case`help`:SI();return;case`version`:console.log(z.version);return;case`init`:await yI(t);return;case`doctor`:await bI(t);return;case`start`:await vI(t);return;case`__worker`:await xI(t);return;default:{let e=t.command;throw Error(`Unsupported command: ${e}`)}}}async function vI(e){let t=await Nm({configPath:e.configPath,ensureConfigFile:!0});Rm(t.config);let n=await rh({configPath:t.configPath,configExists:t.configExists,config:t.config});try{await yg({args:e,loaded:t,doctorReport:n})}catch(e){throw Error(Og(e,t.config))}ih(n)&&console.warn(`[doctor] startup continued despite bundled runtime check failures.`)}async function yI(e){let t=await Mm({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 Nm({configPath:t.configPath,ensureConfigFile:!1}),r=await rh({configPath:n.configPath,configExists:n.configExists,config:n.config});console.log(ah(r))}async function bI(e){let t=await Nm({configPath:jm(e.configPath),ensureConfigFile:!1,syncGatewayIdentityConfig:!1}),n=await rh({configPath:t.configPath,configExists:t.configExists,config:t.configExists?t.config:void 0});console.log(ah(n)),ih(n)&&(process.exitCode=1)}async function xI(e){try{await fI(e)}catch(t){let n=await Nm({configPath:e.configPath,ensureConfigFile:!0});throw Error(Og(t,n.config))}}function SI(){console.log(`${z.cliName} ${z.version}`),console.log(``),console.log(`Usage:`),console.log(` ${z.cliName} [start] [--config <path>] [--log]`),console.log(` ${z.cliName} init [--config <path>] [--force]`),console.log(` ${z.cliName} doctor [--config <path>]`),console.log(` ${z.cliName} --version`)}exports.runCli=_I;
|
|
527
|
+
`),t=e?`${e}\n`:``;await d.default.writeFile(n,t,`utf8`)}return this.rawEventsCacheBySession.set(e,c),c}normalizeRawEventProjectIdentity(e){let t=this.sessions.get(e.sessionId);return!t||!t.projectId||e.projectId===t.projectId?e:{...e,projectId:t.projectId}}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 aP(t);let n=this.rawEventsCacheBySession.get(e);if(!n)return;let r=iP(n);return this.compactedRawEventsCacheBySession.set(e,r),aP(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 QN(e){let t=e.projectPath?.trim()||e.projectId;return t===e.projectId?e:{...e,projectId:t}}function $N(e){return typeof e==`object`&&!!e}function eP(e){if(!(typeof e!=`number`||!Number.isInteger(e)||e<=0))return e}function tP(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 nP(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 rP(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 iP(e){let t=Kp(e),n=t.map(e=>e),r=new Map;for(let[e,t]of n.entries()){let n=Yp(t);n&&r.set(n.key,e)}return{slots:n,indexByKey:r,dense:t}}function aP(e){return e.dense||=e.slots.filter(e=>e!==null),e.dense}function oP(e,t){let n=Yp(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=Xp(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 sP(e,t){let n=e.ts.localeCompare(t.ts);return n===0?e.eventId.localeCompare(t.eventId):n}function cP(e){if(e.type===`item.completed`)return!0;if(e.type!==`native.raw`)return!1;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.message)?t.message:{};return(typeof n.method==`string`?n.method:typeof t.method==`string`?t.method:``)===`item/completed`}function lP(e){if(cP(e)||e.type===`turn.completed`||e.type===`turn.failed`)return!0;if(e.type!==`native.raw`)return!1;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(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 uP(e,t,n){if(n?.replaceMissing)return dP(e,t,n);let r=[...e].sort(hP),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&&fP(n,e)&&(r[t]=mP(n,e));continue}let n={...e,rawSeq:a};a+=1,i.set(n.eventId,r.length),r.push(n)}return gP(r.sort(hP)).sort(hP)}function dP(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(hP),c=1;for(let t of e)c=Math.max(c,t.rawSeq+1);return gP(s.map(e=>{let t=r.get(e.eventId);if(t)return fP(t,e)?mP(t,e):{...e,rawSeq:t.rawSeq};let n={...e,rawSeq:c};return c+=1,n})).sort(hP)}function fP(e,t){return pP(e)&&pP(t)}function pP(e){return e.type===`native.raw`?SP(($N(e.payload.raw)?e.payload.raw:{}).source)===`codex.history.thread_read`:!1}function mP(e,t){return{...t,rawSeq:e.rawSeq,ts:e.ts}}function hP(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 gP(e){let t=Jp(e).filter(e=>!_P(e)),n=new Set;for(let e of t){let t=vP(e);t&&n.add(t)}return n.size===0?t:t.filter(e=>{let t=yP(e);return!t||!n.has(t)})}function _P(e){let t=$N(e.payload.raw)?e.payload.raw:{},n=SP(t.source)??``;if(e.type!==`native.raw`&&(t.historyReplay===!0||n.startsWith(`codex.history.thread_read`)))return!0;if(e.type!==`native.raw`||n!==`codex.app_server`)return!1;let r=$N(t.message)?t.message:{};return SP(r.method)??SP(t.method)?!1:$N(($N(r.result)?r.result:{}).turn)}function vP(e){if(e.type===`item.completed`){let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.item)?t.item:{};return bP(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.message)?t.message:{},r=$N(n.params)?n.params:{};if((SP(n.method)??SP(t.method))!==`item/completed`)return null;let i=$N(r.item)?r.item:{};return bP(e.sessionId,i)}function yP(e){if(e.type===`item.updated`){let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.item)?t.item:{},r=SP(n.original_method)??SP(n.originalMethod)??``,i=$N(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`)&&!xP(r)?null:bP(e.sessionId,n)}if(e.type!==`native.raw`)return null;let t=$N(e.payload.raw)?e.payload.raw:{},n=$N(t.message)?t.message:{},r=$N(n.params)?n.params:{};if(!xP(SP(n.method)??SP(t.method)??``))return null;let i=$N(r.msg)?r.msg:{},a=SP(r.itemId)??SP(r.item_id)??SP(i.itemId)??SP(i.item_id);return a?`${e.sessionId}|${a}`:null}function bP(e,t){let n=SP(t.id)??SP(t.item_id)??SP(t.itemId);return n?`${e}|${n}`:null}function xP(e){return e.includes(`_delta`)||e.endsWith(`/delta`)||e.endsWith(`Delta`)||e.includes(`/delta/`)}function SP(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function CP(e){return!e||e.providerMode!==`native`?!1:e.interactionLockReason===`external_turn_running`?!0:e.status!==`running`}const wP=e=>e.filter(e=>!(e.kind===`system`&&e.title===`Turn Usage`)),TP=(e,t)=>e.find(e=>e.itemId===t||e.id===t)??null,EP=e=>e.kind!==`tool_card`&&e.kind!==`file_change_card`&&e.kind!==`terminal_card`||e.status!==void 0||`deferredDetail`in e&&e.deferredDetail!==void 0?null:e.itemId??e.id,DP=e=>{let t=wP(mp(e.sessionId,e.rawEvents,[]));return{timelineItems:yo({rawEvents:e.rawEvents,messages:t,deferCompletedToolDetails:!1}).timelineItems,lastRawSeq:e.rawEvents[e.rawEvents.length-1]?.rawSeq??null}};async function OP(e){if(e.readableItemDetailLookup)return e.readableItemDetailLookup.getReadableItemDetailResult({projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId});let t=await e.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,2**53-1),n=TP(DP({sessionId:e.sessionId,rawEvents:t}).timelineItems,e.itemId);return n?{item:n}:null}function kP(e,t){if(e&&e!==t)throw Ew()}async function AP(e){let t=jP(e.authService,e.refreshToken);e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:MP(t)},`auth refresh attempt`);try{let t=await e.execute(),n=jP(e.authService,e.refreshToken),r=jP(e.authService,t.refreshToken);return e.logger?.info?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshedDeviceId:t.deviceId,previousRefreshToken:MP(n),nextRefreshToken:MP(r)},`auth refresh succeeded`),t}catch(t){let n=jP(e.authService,e.refreshToken);throw e.logger?.warn?.({source:e.source,requestedDeviceId:e.requestedDeviceId??null,refreshToken:MP(n),error:NP(t)},`auth refresh failed`),t}}function jP(e,t){return e.inspectRefreshToken?.(t)??{tokenRecordState:`missing`}}function MP(e){return{claimDeviceId:e.claimDeviceId??null,claimExpAt:e.claimExpAt??null,claimIssuedAt:e.claimIssuedAt??null,claimJtiSuffix:PP(e.claimJti),claimType:e.claimType??null,latestActiveTokenCreatedAt:e.latestActiveTokenCreatedAt??null,latestActiveTokenJtiSuffix:PP(e.latestActiveTokenJti),tokenRecordCreatedAt:e.tokenRecordCreatedAt??null,tokenRecordDeviceId:e.tokenRecordDeviceId??null,tokenRecordRevokedAt:e.tokenRecordRevokedAt??null,tokenRecordState:e.tokenRecordState}}function NP(e){return xw(e)?{code:e.code,message:String(e),status:e.status}:e instanceof Error?{message:e.message,name:e.name}:{message:String(e)}}function PP(e){return e?e.slice(-8):null}function FP(e,t,n,r){if(!r)return t;let i={gatewayId:t.gatewayId,deviceId:t.deviceId,mobilePublicKey:r.publicKey,pairingContext:{pairingCode:IP(n),signedAt:new Date().toISOString()}};return{...t,gatewayIdentity:e.identity,pairingConfirmation:ym(e.identity,e.privateKeyPem,i)}}function IP(e){return e.replace(/\s+/gu,``).toUpperCase()}async function LP(e,t){try{let n=lf.parse(e);switch(n.method){case`auth.refresh`:{let e=await AP({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 kP(n.params.deviceId??t.relayDeviceId,e.deviceId),uf.parse({method:n.method,result:e})}case`projects.list`:{let e=await t.sessionManager.listProjects();return uf.parse({method:n.method,result:{projects:e}})}case`codex.accounts.get`:{let e=await t.sessionManager.getCodexAccounts();return uf.parse({method:n.method,result:e})}case`codex.accounts.save`:{let e=await t.sessionManager.saveCurrentCodexAccount();return uf.parse({method:n.method,result:e})}case`codex.accounts.switch`:{let e=await t.sessionManager.switchCodexAccount(n.params.accountId);return uf.parse({method:n.method,result:e})}case`gateway.settings.get`:return uf.parse({method:n.method,result:t.gatewaySettings.get()});case`gateway.settings.update`:{let e=await t.gatewaySettings.update(n.params);return uf.parse({method:n.method,result:e})}case`gateway.update.get`:{let e=await t.updateService.getOrCheckInfo(`mobile`);return uf.parse({method:n.method,result:e})}case`codex.appServer.restart`:{let e=await t.sessionManager.restartCodexAppServer();return uf.parse({method:n.method,result:e})}case`gateway.update.apply`:{let e=await t.updateService.applyUpdate(n.params.requestedBy??`mobile`);return uf.parse({method:n.method,result:e})}case`projects.discovery.get`:{let e=await t.projectDiscoveryService.getProjects();return uf.parse({method:n.method,result:e})}case`projects.discovery.refresh`:{let e=await t.projectDiscoveryService.refreshProjects();return uf.parse({method:n.method,result:e})}case`projects.create`:{let e=await t.sessionManager.createProject({path:n.params.path,title:n.params.title});return uf.parse({method:n.method,result:{project:e}})}case`projects.delete`:if(!await t.sessionManager.deleteProject(n.params.projectId))throw zP(n.method,`NOT_FOUND`,404,`Project not found`);return uf.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 uf.parse({method:n.method,result:e})}case`workspace.directories.create`:{let e=await t.fsService.createDirectoryUnrestricted(n.params.path,n.params.name,200);return uf.parse({method:n.method,result:e})}case`workspace.entries.list`:{let e=await t.workspaceFileService.listEntries(n.params.locator,n.params.limit??200);return uf.parse({method:n.method,result:e})}case`workspace.files.resolve`:{let e=await t.workspaceFileService.resolveFile(n.params.locator);return uf.parse({method:n.method,result:e})}case`workspace.files.readText`:{let e=await t.workspaceFileService.readTextFile(n.params.locator,{startLine:n.params.startLine,maxLines:n.params.maxLines,maxBytes:n.params.maxBytes});return uf.parse({method:n.method,result:e})}case`workspace.files.preparePreview`:{let e=t.relayPreviewBaseUrl?.trim(),r=t.gatewayId?.trim();if(!e||!r)throw zP(n.method,`BAD_REQUEST`,400,`Relay preview base url is not configured`);let i=await t.workspaceFileService.preparePreview(n.params.locator,{deviceId:t.relayDeviceId,disposition:n.params.disposition,buildPreviewUrl:t=>`${e.replace(/\/+$/,``)}/api/gateways/${encodeURIComponent(r)}/workspace/files/content/${encodeURIComponent(t)}`});return uf.parse({method:n.method,result:i})}case`sessions.list`:{let e=await t.sessionManager.listProjectSessions(n.params.projectId,n.params.status??`all`,{syncExternal:n.params.syncExternal});return uf.parse({method:n.method,result:{sessions:e}})}case`sessions.discovery.list`:{let e=await t.projectDiscoveryService.listProjectSessions(n.params.projectPath);return uf.parse({method:n.method,result:e})}case`sessions.get`:{let e=await t.sessionManager.getProjectSessionSummary(n.params.projectId,n.params.sessionId);if(!e)throw zP(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return uf.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 zP(n.method,`NOT_FOUND`,404,`Session ${n.params.sessionId} not found in project ${n.params.projectId}`);return uf.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`,refreshMode:e.refreshMode,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}),uf.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 t.buildRawEventsListResult({sessionManager:t.sessionManager,projectId:n.params.projectId,sessionId:n.params.sessionId,limit:e,fromRawSeqExclusive:n.params.fromRawSeqExclusive,detailLevel:n.params.detailLevel,requestSource:`rpc`});return uf.parse({method:n.method,result:r})}case`sessions.readableItem.get`:{let e=await OP({sessionManager:t.sessionManager,readableItemDetailLookup:t.readableItemDetailLookup,projectId:n.params.projectId,sessionId:n.params.sessionId,itemId:n.params.itemId});if(!e)throw zP(n.method,`NOT_FOUND`,404,`Readable item ${n.params.itemId} not found`);return uf.parse({method:n.method,result:e})}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`),uf.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`providers.execution.update`:{let e=await t.sessionManager.updateProviderExecutionDefaults(n.params);return uf.parse({method:n.method,result:{defaults:e}})}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 uf.parse({method:n.method,result:e})}case`devices.list`:return uf.parse({method:n.method,result:{devices:t.authService.listDevices()}});case`devices.revoke`:if(!await t.authService.revokeDevice(n.params.deviceId))throw zP(n.method,`NOT_FOUND`,404,`Device ${n.params.deviceId} not found`);return uf.parse({method:n.method,result:{revoked:!0}});default:{let e=n;throw zP(void 0,`INTERNAL`,500,`Unhandled relay RPC method: ${JSON.stringify(e)}`)}}}catch(e){throw RP(e)}}function RP(e){if(xw(e))switch(e.code){case`REFRESH_TOKEN_REVOKED`:case`DEVICE_REVOKED`:case`REFRESH_TOKEN_DEVICE_MISMATCH`:return zP(`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`:case`CODEX_ACCOUNT_NOT_FOUND`:return zP(`NOT_FOUND`,e.status,String(e),e.details);case`SESSION_TURN_CONFLICT`:case`PROJECT_DELETE_CONFLICT`:case`CODEX_APP_SERVER_RESTART_CONFLICT`:return zP(`BAD_REQUEST`,e.status,String(e),e.details);default:return zP(e.status>=500?`INTERNAL`:`BAD_REQUEST`,e.status,String(e),e.details)}let t=ff.safeParse(e);if(t.success)return t.data;let n=df.safeParse(e);if(n.success)return zP(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 zP(t.code,t.status,t.message,t.details)}let r=String(e);return e instanceof Error&&e.name===`ZodError`?zP(`BAD_REQUEST`,400,r):BP(e)?zP(`UNAUTHORIZED`,401,r):VP(r)?zP(`BAD_REQUEST`,400,r):zP(`INTERNAL`,500,r)}function zP(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 ff.parse({...o?{method:o}:{},code:s,status:c,message:l,...u===void 0?{}:{details:u}})}function BP(e){return xw(e)&&(e.code===`REFRESH_TOKEN_REVOKED`||e.code===`DEVICE_REVOKED`||e.code===`REFRESH_TOKEN_DEVICE_MISMATCH`)||Vw(e)}function VP(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 HP(e,t){return e.length===0?[]:t===void 0?[...e]:e.filter(e=>e.rawSeq>t)}function UP(e){return{baseRawEvents:Kp(e.rawEvents.filter(t=>t.rawSeq<=e.cursorRawSeq)),nextRawEvents:Kp(e.rawEvents)}}function WP(e,t){return t&&`kind`in t&&t.kind===`bootstrapping`?t:{kind:`bootstrapping`,sessionId:e,previousReadyState:t??null,queuedEnvelopes:[]}}function GP(e,t){let n=e.previousReadyState;if(!n)return{previousReadyState:null,nextReadyState:null,replayedEnvelopes:[]};let r=HP(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 KP(e){return{v:`1.0`,kind:`session.stream.sync`,type:`session.stream.sync`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`stream_sync_${yw(12)}`,ts:new Date().toISOString(),payload:{raw:{decision:e.decision,reason:e.reason,snapshotId:e.snapshotId,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}}}}function qP(e){return{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}:{}}}:{}}}}function JP(e){return{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}:{},...e.contextUsage===void 0?{}:{contextUsage:e.contextUsage}}}}}function YP(e){return{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}:{},...e.contextUsage===void 0?{}:{contextUsage:e.contextUsage}}}}}function XP(e){return{v:`1.0`,kind:`session.external.update`,type:`session.external.update`,provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,eventId:`session_external_update_${yw(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,...e.sessionSummary?{sessionSummary:e.sessionSummary}:{}}}}}function ZP(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}const QP=1e3,$P=(e,t)=>`${e}::${t}`,eF=e=>e.purpose===`detail_view`&&e.bootstrapMode===`readable`,tF=e=>{let t=new Map;for(let n of e)t.set(n.sessionId,n);return[...t.values()]},nF=e=>({kind:`ready`,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,rawEvents:[...e.rawEvents],detailTransportRawEvents:[...e.detailTransportRawEvents??e.rawEvents],contextUsage:e.contextUsage??null,timelineItems:[...e.timelineItems],pendingApprovals:[...e.pendingApprovals],pendingUserInputs:[...e.pendingUserInputs]}),rF=e=>typeof e==`object`&&e?e:{},iF=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}},aF=e=>{if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=rF(n),r=iF(e,`id`),i=iF(e,`header`),a=iF(e,`question`);if(!r||!i||!a)continue;let o=Array.isArray(e.options)?e.options.map(e=>{let t=rF(e),n=iF(t,`label`);if(!n)return null;let r=iF(t,`description`)??n,i=iF(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},oF=(e,t)=>{let n=pp(e,t),r=new Map,i=new Map;for(let e of n){if(e.type===`tool.permission.requested`){let t=rF(e.payload.raw),n=iF(t,`requestId`,`request_id`);if(!n)continue;let i=rF(t.rawParams??t.raw_params),a=rF(i.networkApprovalContext??i.network_approval_context);r.set(n,{requestId:n,sessionId:e.sessionId,...iF(t,`toolName`,`tool_name`)?{toolName:iF(t,`toolName`,`tool_name`)}:{},...iF(t,`reason`)?{reason:iF(t,`reason`)}:{},...iF(i,`command`)?{command:iF(i,`command`)}:{},...iF(i,`cwd`)?{cwd:iF(i,`cwd`)}:{},...iF(i,`grantRoot`,`grant_root`)?{grantRoot:iF(i,`grantRoot`,`grant_root`)}:{},...iF(a,`host`)?{networkHost:iF(a,`host`)}:{},...iF(a,`protocol`)?{networkProtocol:iF(a,`protocol`)}:{},...iF(t,`itemId`,`item_id`)?{itemId:iF(t,`itemId`,`item_id`)}:{},...iF(t,`turnId`,`turn_id`)?{turnId:iF(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`tool.permission.resolved`){let t=iF(rF(e.payload.raw),`requestId`,`request_id`);t&&r.delete(t);continue}if(e.type===`user.input.requested`){let t=rF(e.payload.raw),n=iF(t,`requestId`,`request_id`);if(!n)continue;i.set(n,{requestId:n,sessionId:e.sessionId,questions:aF(t.questions),...iF(t,`itemId`,`item_id`)?{itemId:iF(t,`itemId`,`item_id`)}:{},...iF(t,`turnId`,`turn_id`)?{turnId:iF(t,`turnId`,`turn_id`)}:{}});continue}if(e.type===`user.input.resolved`){let t=iF(rF(e.payload.raw),`requestId`,`request_id`);t&&i.delete(t)}}return{pendingApprovals:[...r.values()],pendingUserInputs:[...i.values()]}},sF=e=>{let t=e.rawEventsAlreadyMatchDetailTransport===!0?e.rawEvents:uF({rawEvents:e.rawEvents,detailLevel:e.target.detailLevel}),n=e.target.purpose===`detail_view`?Fc({provider:e.target.provider,rawEvents:t}):null,r=e.target.purpose===`detail_view`?wP(mp(e.target.sessionId,t,[])):[],i=e.target.purpose===`detail_view`?yo({rawEvents:t,messages:r,deferCompletedToolDetails:!0}):{timelineItems:[],consumedMessageIds:[]},a=e.target.purpose===`detail_view`?oF(e.target.sessionId,t):{pendingApprovals:[],pendingUserInputs:[]};return{detailTransportRawEvents:t,contextUsage:n,timelineItems:i.timelineItems,pendingApprovals:a.pendingApprovals,pendingUserInputs:a.pendingUserInputs}},cF=e=>{let t=uF({rawEvents:e.rawEvents,detailLevel:e.target.detailLevel}),n=sF({target:e.target,rawEvents:t,rawEventsAlreadyMatchDetailTransport:!0});return nF({target:e.target,rawEvents:e.rawEvents,detailTransportRawEvents:t,contextUsage:n.contextUsage,timelineItems:n.timelineItems,pendingApprovals:n.pendingApprovals,pendingUserInputs:n.pendingUserInputs})},lF=(e,t)=>{let n=vF(e.rawEvents,t),r=uF({rawEvents:vF(e.detailTransportRawEvents,t),detailLevel:e.detailLevel}),i=sF({target:{sessionId:e.sessionId,provider:e.provider,detailLevel:e.detailLevel,purpose:`detail_view`},rawEvents:r,rawEventsAlreadyMatchDetailTransport:!0});return{...e,rawEvents:n,detailTransportRawEvents:r,contextUsage:i.contextUsage,timelineItems:i.timelineItems,pendingApprovals:i.pendingApprovals,pendingUserInputs:i.pendingUserInputs}},uF=e=>{if(e.detailLevel!==`compact`||e.rawEvents.length===0)return e.rawEvents;let t=dF(e.rawEvents[0]?.sessionId??``,e.rawEvents);return pE(e.rawEvents,e.detailLevel,{preserveIncompleteCommandOutput:!0,additionalCompletedCommandItemKeys:t})},dF=(e,t)=>{if(!e||t.length===0)return new Set;let n=new Set,r=mp(e,t,[]);for(let t of r){if(t.itemType!==`command_execution`||!t.itemId||t.status!==`completed`&&t.status!==`failed`)continue;let r=hF(e,t.itemId);r&&n.add(r)}return n},fF=e=>iF(e,`id`,`itemId`,`item_id`)??null,pF=e=>{if(e.type===`item.started`||e.type===`item.updated`||e.type===`item.completed`)return fF(rF(rF(e.payload.raw).item));if(e.type!==`native.raw`)return null;let t=rF(rF(e.payload.raw).message),n=rF(t.params),r=rF(n.item),i=rF(n.msg);return fF(r)??fF(rF(t.item))??iF(n,`itemId`,`item_id`)??iF(i,`itemId`,`item_id`)??null},mF=e=>{if(e.type===`item.completed`)return!0;if(e.type!==`native.raw`)return!1;let t=rF(e.payload.raw);return(iF(rF(t.message),`method`)??iF(t,`method`))===`item/completed`},hF=(e,t)=>t?`${e}|${t}`:null,gF=e=>hF(e.sessionId,pF(e)),_F=e=>{let t=gF(e);if(t)return`item:${t}`;let n=Yp(e);return n?`delta:${n.key}`:null},vF=(e,t)=>{let n=[...e],r=gF(t),i=_F(t),a=Yp(t),o=t;if(i&&a)for(let e=n.length-1;e>=0;--e){let r=n[e];if(!r||_F(r)!==i||!Yp(r))continue;let a=Xp(r,t);if(a){n[e]=null,o=a;break}}return n.push(o),!r||!mF(t)?n.filter(e=>e!==null):n.filter(e=>e!==null&&(e.eventId===o.eventId||gF(e)!==r||!Yp(e)))},yF=e=>{let t=bF(e);if(!t)return null;let n=fF(t),r=rF(t.payload),i=iF(t,`output_delta`,`outputDelta`)??iF(r,`output_delta`,`outputDelta`);return!n||!i?null:{itemId:n,delta:i}},bF=e=>{if(e.type===`item.updated`){let t=rF(rF(e.payload.raw).item);return xF(t)?t:null}if(e.type!==`native.raw`)return null;let t=rF(e.payload.raw),n=rF(t.message);if((iF(n,`method`)??iF(t,`method`))!==`item/updated`)return null;let r=rF(rF(n.params).item);return xF(r)?r:null},xF=e=>{let t=iF(e,`type`);return t===`commandExecution`||t===`command_execution`},SF=e=>e.includes(`[compact history preview:`),CF=(e,t)=>{let n=yF(t);if(!n)return null;let r=e.timelineItems.findIndex(e=>e.kind===`terminal_card`&&e.itemId===n.itemId&&typeof e.output==`string`);if(r<0)return null;let i=e.timelineItems[r];if(!i||i.kind!==`terminal_card`||SF(i.output))return null;let a=vF(e.rawEvents,t),o=uF({rawEvents:vF(e.detailTransportRawEvents,t),detailLevel:e.detailLevel}),s={...i,output:`${i.output}${n.delta}`},c=[...e.timelineItems];c[r]=s;let l=a[a.length-1]?.rawSeq??t.rawSeq;return{nextState:{...e,rawEvents:a,detailTransportRawEvents:o,timelineItems:c},messageInput:{provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,fromRawSeq:e.rawEvents[e.rawEvents.length-1]?.rawSeq,toRawSeq:l,timelineUpserts:[],timelineRemovals:[],timelineTextDeltaPatches:[{id:i.id,field:`output`,delta:n.delta}]}}},wF=e=>Buffer.byteLength(JSON.stringify(JP(e)),`utf8`),TF=e=>{let t=Math.max(1,Math.floor(e.maxChunkBytes??524288)),n=[],r=(t,n)=>wF({provider:e.provider,sessionId:e.sessionId,projectId:e.projectId,snapshotId:e.snapshotId,chunkIndex:t,totalChunks:1,timelineItems:n,pendingApprovals:t===0?e.pendingApprovals:void 0,pendingUserInputs:t===0?e.pendingUserInputs:void 0,contextUsage:t===0?e.contextUsage:void 0});if(e.timelineItems.length===0)return[{timelineItems:[],estimatedByteLength:r(0,[])}];let i=[];for(let a of e.timelineItems){let e=n.length,o=[...i,a],s=r(e,o);if(i.length>0&&s>t){n.push({timelineItems:i,estimatedByteLength:r(e,i)}),i=[a];continue}i=o}return n.push({timelineItems:i,estimatedByteLength:r(n.length,i)}),n},EF=(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)}},DF=(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)}},OF=(e,t,n,r)=>{let i={},a=pp(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=iF(rF(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},kF=e=>e?{stateFound:!0,kind:e.kind,sessionId:e.sessionId,projectId:e.projectId,provider:e.provider,detailLevel:e.detailLevel,rawEventCount:e.rawEvents.length,detailTransportRawEventCount:e.detailTransportRawEvents.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,hasContextUsage:!!e.contextUsage}:{stateFound:!1},AF=e=>e?e.kind===`ready`?kF(e):{stateFound:!0,kind:e.kind,sessionId:e.sessionId,queuedEnvelopeCount:e.queuedEnvelopes.length,previousReadyState:kF(e.previousReadyState)}:{stateFound:!1},jF=(e,t)=>{let n,r,i;try{n=Ys(e.previousState.timelineItems,e.nextState.timelineItems),r=EF(e.previousState.pendingApprovals,e.nextState.pendingApprovals),i=DF(e.previousState.pendingUserInputs,e.nextState.pendingUserInputs)}catch(n){throw t?.(`stream.readable.delta.build.error`,{sessionId:e.previousState.sessionId,projectId:e.previousState.projectId,previousState:kF(e.previousState),nextState:kF(e.nextState),sessionSummaryKeys:e.sessionSummary?Object.keys(e.sessionSummary):[],errorMessage:n instanceof Error?n.message:String(n)}),n}let a=JSON.stringify(e.previousState.contextUsage??null)!==JSON.stringify(e.nextState.contextUsage??null);if(n.upserts.length===0&&n.removals.length===0&&n.textDeltaPatches.length===0&&r.upserts.length===0&&r.removals.length===0&&i.upserts.length===0&&i.removals.length===0&&!a&&!e.sessionSummary)return null;let o=e.nextState.rawEvents[e.nextState.rawEvents.length-1]?.rawSeq;return o===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:o,timelineUpserts:n.upserts,timelineRemovals:n.removals,timelineTextDeltaPatches:n.textDeltaPatches,pendingApprovalUpserts:r.upserts,pendingApprovalRemovals:r.removals,pendingUserInputUpserts:i.upserts,pendingUserInputRemovals:i.removals,sessionSummary:e.sessionSummary,contextUsage:a?e.nextState.contextUsage:void 0}};function MF(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}}var NF=class{stateByClientSession=new Map;pendingDeltaByClientSession=new Map;itemDetailCache=new Map;constructor(e,t,n,r,i=512){this.sessionHub=e,this.sessionManager=t,this.readableLiveDeltaCoalesceMs=n,this.log=r,this.itemDetailCacheMaxEntries=i}shutdown(){for(let e of this.pendingDeltaByClientSession.values())clearTimeout(e.timer);this.pendingDeltaByClientSession.clear(),this.stateByClientSession.clear(),this.itemDetailCache.clear()}handleSessionStreamSubscribeCommand=async(e,t,n)=>{let r=tF(t),i=new Set(r.map(e=>e.sessionId)),a=this.sessionHub.getSubscriptions(e);this.log(`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}))}),this.primeReadableBootstrapForSubscriptions(e,r);for(let t of i)this.sessionHub.pauseSession(e,t);this.sessionHub.replaceSubscriptions(e,r,n),this.syncReadableLiveProjectionSubscriptions(e,a,r,n);try{for(let t of r)try{await this.syncSessionStreamSubscription(e,t)}catch(n){throw eF(t)&&this.restoreReadableLiveProjectionAfterBootstrapFailure({clientId:e,sessionId:t.sessionId}),n}}finally{for(let t of i)this.sessionHub.resumeSession(e,t)}};clearState=(e,t)=>{let n=$P(e,t),r=this.stateByClientSession.get(n);this.stateByClientSession.delete(n);let i=this.pendingDeltaByClientSession.get(n);i&&(clearTimeout(i.timer),this.pendingDeltaByClientSession.delete(n)),(r||i)&&this.log(`readable.state.cleared`,{clientId:e,sessionId:t,hadState:!!r,previousState:AF(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})};clearStatesForClient=e=>{let t=`${e}::`;for(let e of this.stateByClientSession.keys())e.startsWith(t)&&this.stateByClientSession.delete(e);for(let[e,n]of this.pendingDeltaByClientSession)e.startsWith(t)&&(clearTimeout(n.timer),this.pendingDeltaByClientSession.delete(e))};getReadableItemDetailResult=async e=>{let t=this.getLatestReadableReadyStateForSession(e.projectId,e.sessionId),n=t?TP(t.timelineItems,e.itemId):null,r=n&&`deferredDetail`in n&&n.deferredDetail!==void 0;if(n&&!r){let r=EP(n);return r&&this.setReadableItemDetailCacheEntry({projectId:e.projectId,sessionId:e.sessionId,itemId:r,item:n}),this.log(`readable.item_detail.cache_hit`,{projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId,source:`live_state`,lastRawSeq:t?.rawEvents[t.rawEvents.length-1]?.rawSeq??null}),{item:n}}let i=this.getReadableItemDetailCacheEntry(e.projectId,e.sessionId,e.itemId);if(i)return this.log(`readable.item_detail.cache_hit`,{projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId,source:`item_cache`}),{item:i.item};let a=await this.sessionManager.getProjectSessionRawEvents(e.projectId,e.sessionId,2**53-1),o=DP({sessionId:e.sessionId,rawEvents:a}),s=this.seedReadableItemDetailCache({projectId:e.projectId,sessionId:e.sessionId,timelineItems:o.timelineItems}),c=TP(o.timelineItems,e.itemId);return this.log(`readable.item_detail.projection_rebuilt`,{projectId:e.projectId,sessionId:e.sessionId,itemId:e.itemId,source:t?`session_history_after_live_state`:`session_history`,lastRawSeq:o.lastRawSeq,timelineItemCount:o.timelineItems.length,cachedItemCount:s,found:!!c}),c?{item:c}:null};routeReadableLiveDelta=e=>{let t=this.sessionHub.getClientSubscriptionsForSession(e.sessionId,`detail_view`);if(t.length!==0)for(let{clientId:n,subscription:r}of t){if(!eF(r))continue;let t=$P(n,e.sessionId),i=this.stateByClientSession.get(t);if(!i)continue;if(i.kind===`bootstrapping`){i.queuedEnvelopes.push(e);continue}let a=CF(i,e);if(a){this.flushPendingReadableLiveDelta(n,e.sessionId),this.stateByClientSession.set(t,a.nextState),this.sessionHub.sendSessionMessageToClient(n,e.sessionId,YP(a.messageInput)),this.log(`stream.readable.live_patch.sent`,{clientId:n,sessionId:e.sessionId,projectId:i.projectId,provider:i.provider,fromRawSeq:a.messageInput.fromRawSeq??null,toRawSeq:a.messageInput.toRawSeq,timelineTextDeltaPatchCount:a.messageInput.timelineTextDeltaPatches?.length??0});continue}let o=lF(i,e);this.stateByClientSession.set(t,o);let s=OF(e.sessionId,e,i,o);this.enqueueReadableLiveDelta({clientId:n,previousState:i,nextState:o,sessionSummary:s})}};refreshDetailSessionSnapshots=async e=>{let t=this.sessionHub.getClientSubscriptionsForSession(e.sessionId,`detail_view`);for(let{clientId:n,subscription:r}of t){let t=r.projectId?.trim()??``;if(!(t&&t!==e.projectId)){this.sessionHub.pauseSession(n,e.sessionId);try{let t=await this.resolveSessionStreamTarget(r);if(t.bootstrapMode===`readable`){let r=this.getReadableRefreshDeltaBase({clientId:n,sessionId:e.sessionId,projectId:e.projectId,detailLevel:t.detailLevel,refreshMode:e.refreshMode,reason:e.reason});if(r){this.startReadableLiveProjectionBootstrap({clientId:n,sessionId:e.sessionId,previousReadyState:r.previousReadyState}),await this.sendSessionReadableResumeDelta(n,t,r.cursor,r.reason);continue}this.startReadableLiveProjectionBootstrap({clientId:n,sessionId:e.sessionId}),await this.sendSessionReadableSnapshot(n,t,e.reason)}else await this.sendSessionSnapshot(n,t,e.reason)}catch(t){throw eF(r)&&this.restoreReadableLiveProjectionAfterBootstrapFailure({clientId:n,sessionId:e.sessionId}),t}finally{this.sessionHub.resumeSession(n,e.sessionId)}}}};sendSessionSnapshot=async(e,t,n)=>{let r=`snap_${yw(12)}`,{compactedRawEvents:i,detailTransportRawEvents:a,lastRawSeq:o,slimReadableProjection:s,pendingApprovals:c,pendingUserInputs:l}=await this.buildReadableSnapshotProjection(t);this.sessionHub.sendStreamMessage(e,KP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,...o===void 0?{}:{toRawSeq:o}}));let u=ZP(a,QP),d=t.purpose===`detail_view`?ZP(s.timelineItems,QP):[],f=t.purpose===`detail_view`?`raw+readable`:`raw`,p=Math.max(u.length,d.length,1);this.log(`stream.snapshot.prepared`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,provider:t.provider,detailLevel:t.detailLevel,reason:n,snapshotId:r,snapshotFormat:f,compactedEventCount:i.length,detailTransportEventCount:a.length,readableTimelineItemCount:s.timelineItems.length,totalChunks:p,firstRawSeq:a[0]?.rawSeq??null,lastRawSeq:o??null});for(let n=0;n<p;n+=1){let i=u[n]??[],a=d[n]??[];this.sessionHub.sendStreamMessage(e,qP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:p,events:i,timelineItems:t.purpose===`detail_view`?a:void 0}))}};sendSessionReadableSnapshot=async(e,t,n)=>{let r=`snap_${yw(12)}`,i=this.startReadableLiveProjectionBootstrap({clientId:e,sessionId:t.sessionId});try{let{compactedRawEvents:a,detailTransportRawEvents:o,contextUsage:s,lastRawSeq:c,slimReadableProjection:l,pendingApprovals:u,pendingUserInputs:d}=await this.buildReadableSnapshotProjection(t),f=this.sessionHub.getSubscriptions(e).find(e=>e.sessionId===t.sessionId),p=f?.projectId?.trim()??``;if(!f||!eF(f)||p&&p!==t.projectId||(f.detailLevel??`full`)!==t.detailLevel){this.clearState(e,t.sessionId);return}let m=nF({target:t,rawEvents:a,detailTransportRawEvents:o,contextUsage:s,timelineItems:l.timelineItems,pendingApprovals:u,pendingUserInputs:d}),h=this.stateByClientSession.get(i),g=HP(h?.kind===`bootstrapping`?h.queuedEnvelopes:[],c);for(let e of g)m=lF(m,e);this.seedReadableLiveProjectionState({clientId:e,target:t,rawEvents:m.rawEvents,detailTransportRawEvents:m.detailTransportRawEvents,contextUsage:m.contextUsage,timelineItems:m.timelineItems,pendingApprovals:m.pendingApprovals,pendingUserInputs:m.pendingUserInputs});let _=m.rawEvents[m.rawEvents.length-1]?.rawSeq;this.sessionHub.sendStreamMessage(e,KP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`snapshot`,reason:n,snapshotId:r,..._===void 0?{}:{toRawSeq:_}}));let v=TF({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,timelineItems:m.timelineItems,pendingApprovals:m.pendingApprovals,pendingUserInputs:m.pendingUserInputs,contextUsage:m.contextUsage}),y=Math.max(v.length,1);this.log(`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,canonicalRawEventCount:m.rawEvents.length,detailTransportRawEventCount:m.detailTransportRawEvents.length,readableTimelineItemCount:m.timelineItems.length,bufferedReadableDeltaCount:g.length,readableChunkTargetBytes:524288,readableChunkItemCounts:v.map(e=>e.timelineItems.length),readableChunkEstimatedBytes:v.map(e=>e.estimatedByteLength),totalChunks:y,firstRawSeq:m.rawEvents[0]?.rawSeq??null,lastRawSeq:_??null});for(let n=0;n<y;n+=1){let i=v[n];this.sessionHub.sendStreamMessage(e,JP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,snapshotId:r,chunkIndex:n,totalChunks:y,timelineItems:i?.timelineItems??[],pendingApprovals:n===0?m.pendingApprovals:void 0,pendingUserInputs:n===0?m.pendingUserInputs:void 0,contextUsage:n===0?m.contextUsage:void 0}))}}catch(n){throw this.restoreReadableLiveProjectionAfterBootstrapFailure({clientId:e,sessionId:t.sessionId}),n}};sendSessionReadableResumeDelta=async(e,t,n,r)=>{let i=$P(e,t.sessionId),a=await this.sessionManager.getProjectSessionRawEvents(t.projectId,t.sessionId,2**53-1),{baseRawEvents:o,nextRawEvents:s}=UP({rawEvents:a,cursorRawSeq:n}),c=cF({target:t,rawEvents:o}),l=cF({target:t,rawEvents:s}),u=this.stateByClientSession.get(i),d=HP(u?.kind===`bootstrapping`?u.queuedEnvelopes:[],l.rawEvents[l.rawEvents.length-1]?.rawSeq);for(let e of d)l=lF(l,e);this.log(`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,baseRawEventCount:o.length,nextRawEventCount:s.length,bootstrapState:AF(u),bufferedEnvelopeCount:d.length,previousState:kF(c),nextState:kF(l)}),this.seedReadableLiveProjectionState({clientId:e,target:t,rawEvents:l.rawEvents,detailTransportRawEvents:l.detailTransportRawEvents,contextUsage:l.contextUsage,timelineItems:l.timelineItems,pendingApprovals:l.pendingApprovals,pendingUserInputs:l.pendingUserInputs});let f=l.rawEvents[l.rawEvents.length-1]?.rawSeq??n;this.sessionHub.sendStreamMessage(e,KP({provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,decision:`delta`,reason:r,fromRawSeq:n,...f===void 0?{}:{toRawSeq:f}}));let p=jF({previousState:c,nextState:l},this.log);this.log(`stream.readable.resume.delta`,{clientId:e,sessionId:t.sessionId,projectId:t.projectId,reason:r,cursorRawSeq:n,emittedDelta:!!p,deltaFromRawSeq:p?.fromRawSeq??n,deltaToRawSeq:p?.toRawSeq??f??null,timelineUpsertCount:p?.timelineUpserts.length??0,timelineRemovalCount:p?.timelineRemovals.length??0,timelineTextDeltaPatchCount:p?.timelineTextDeltaPatches.length??0,pendingApprovalUpsertCount:p?.pendingApprovalUpserts.length??0,pendingUserInputUpsertCount:p?.pendingUserInputUpserts.length??0}),this.sessionHub.sendSessionMessageToClient(e,t.sessionId,YP(p??{provider:t.provider,sessionId:t.sessionId,projectId:t.projectId,fromRawSeq:n,toRawSeq:f,timelineUpserts:[],timelineRemovals:[]}))};getReadableItemDetailCacheKey(e,t,n){return`${e}::${t}::${n}`}getReadableItemDetailCacheEntry(e,t,n){let r=this.getReadableItemDetailCacheKey(e,t,n),i=this.itemDetailCache.get(r);return i?(this.itemDetailCache.delete(r),this.itemDetailCache.set(r,i),i):null}setReadableItemDetailCacheEntry(e){let t=this.getReadableItemDetailCacheKey(e.projectId,e.sessionId,e.itemId);for(this.itemDetailCache.has(t)&&this.itemDetailCache.delete(t),this.itemDetailCache.set(t,e);this.itemDetailCache.size>Math.max(1,this.itemDetailCacheMaxEntries);){let e=this.itemDetailCache.keys().next().value;if(!e)break;this.itemDetailCache.delete(e)}}seedReadableItemDetailCache(e){let t=0;for(let n of e.timelineItems){let r=EP(n);r&&(this.setReadableItemDetailCacheEntry({projectId:e.projectId,sessionId:e.sessionId,itemId:r,item:n}),t+=1)}return t}getLatestReadableReadyStateForSession(e,t){let n=null,r=-1,i=i=>{if(!i||i.projectId!==e||i.sessionId!==t)return;let a=i.rawEvents[i.rawEvents.length-1]?.rawSeq??-1;a<r||(n=i,r=a)};for(let e of this.stateByClientSession.values())e.kind===`ready`&&i(e);for(let e of this.pendingDeltaByClientSession.values())i(e.nextState);return n}syncReadableLiveProjectionSubscriptions(e,t,n,r){let i=new Set(n.filter(eF).map(e=>e.sessionId));if(r)for(let n of t)i.has(n.sessionId)||this.clearState(e,n.sessionId);for(let t of n)eF(t)||this.clearState(e,t.sessionId)}startReadableLiveProjectionBootstrap(e){let t=$P(e.clientId,e.sessionId),n=this.stateByClientSession.get(t),r=this.pendingDeltaByClientSession.get(t),i=e.previousReadyState??(n?.kind===`bootstrapping`?n.previousReadyState:this.getReadableDeliveredReadyState(e.clientId,e.sessionId)),a=this.getReadablePendingDeltaReplayEnvelopes(i,r);r&&(clearTimeout(r.timer),this.pendingDeltaByClientSession.delete(t));let o=n?.kind===`bootstrapping`?n:i,s=WP(e.sessionId,o);if(a.length>0){let e=new Set(s.queuedEnvelopes.map(e=>e.rawSeq));for(let t of a)e.has(t.rawSeq)||(s.queuedEnvelopes.push(t),e.add(t.rawSeq))}return this.stateByClientSession.set(t,s),this.log(`readable.bootstrap.started`,{clientId:e.clientId,sessionId:e.sessionId,replacedState:AF(n),clearedPendingDelta:!!r,carriedPendingEnvelopeCount:a.length}),t}getReadableDeliveredReadyState(e,t){let n=$P(e,t),r=this.pendingDeltaByClientSession.get(n);if(r)return r.previousState;let i=this.stateByClientSession.get(n);return i?.kind===`ready`?i:null}getReadablePendingDeltaReplayEnvelopes(e,t){return t?HP(t.nextState.rawEvents,e?.rawEvents[e.rawEvents.length-1]?.rawSeq):[]}getReadableRefreshDeltaBase(e){let t=this.getReadableRefreshDeltaReason(e.reason);if(!t||e.refreshMode!==`delta`)return null;let n=this.getReadableDeliveredReadyState(e.clientId,e.sessionId);if(!n||n.projectId!==e.projectId||n.detailLevel!==e.detailLevel)return null;let r=n.rawEvents[n.rawEvents.length-1]?.rawSeq;return typeof r==`number`?{cursor:r,previousReadyState:n,reason:t}:null}getReadableRefreshDeltaReason(e){return e===`external_history_updated`||e===`explicit_history_sync`?`${e}_delta`:null}seedReadableLiveProjectionState(e){let t=nF(e);this.stateByClientSession.set($P(e.clientId,e.target.sessionId),t),this.log(`readable.state.seeded`,{clientId:e.clientId,sessionId:e.target.sessionId,projectId:e.target.projectId,provider:e.target.provider,detailLevel:e.target.detailLevel,state:kF(t)})}primeReadableBootstrapForSubscriptions(e,t){for(let n of t)eF(n)&&this.startReadableLiveProjectionBootstrap({clientId:e,sessionId:n.sessionId})}async syncSessionStreamSubscription(e,t){let n=await this.resolveSessionStreamTarget(t);if(n.bootstrapMode===`readable`){if(t.cursor.kind===`all`){this.log(`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 this.sendSessionReadableSnapshot(e,n,`readable_bootstrap_snapshot`);return}let r=await this.sessionManager.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){this.log(`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 this.sendSessionReadableSnapshot(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){this.log(`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 this.sendSessionReadableSnapshot(e,n,`readable_cursor_out_of_range_snapshot`);return}let o=n.status===`running`?`readable_cursor_resumed_delta`:`readable_session_idle_delta`;this.log(`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 this.sendSessionReadableResumeDelta(e,n,i,o);return}if(t.cursor.kind===`all`){this.log(`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 this.sendSessionSnapshot(e,n,`cursor_all`);return}let r=await this.sessionManager.getProjectSessionRawSeqRange(n.projectId,n.sessionId);if(!r){this.log(`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 this.sendSessionSnapshot(e,n,`empty_history_snapshot`);return}let i=t.cursor.rawSeq,a=Math.max(0,r.min-1);if(i<a||i>r.max){this.log(`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 this.sendSessionSnapshot(e,n,`cursor_out_of_range_snapshot`);return}let o=await this.sessionManager.getProjectSessionRawEventsSinceSeq(n.projectId,n.sessionId,i,2**53-1),s=o[o.length-1]?.rawSeq??i;this.log(`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}),this.sessionHub.sendStreamMessage(e,KP({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)this.sessionHub.sendStreamMessage(e,t)}async resolveSessionStreamTarget(e){let t=e.sessionId;if(!t)throw Error(`session.stream.subscribe requires sessionId`);let n=e.projectId?.trim()??``;if(n){let r=await this.sessionManager.getProjectSessionSummary(n,t);if(!r)throw Aw(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 this.log(`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:MF(r)}),i}let r=this.sessionManager.getSessionExecutionContext(t),i=await this.sessionManager.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 this.log(`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:MF(i)}),a}async buildReadableSnapshotProjection(e){let t=await this.sessionManager.getProjectSessionRawEventsCompacted(e.projectId,e.sessionId,2**53-1),n=uF({rawEvents:t,detailLevel:e.detailLevel}),r=sF({target:e,rawEvents:n,rawEventsAlreadyMatchDetailTransport:!0}),i=t[t.length-1]?.rawSeq;return{compactedRawEvents:t,detailTransportRawEvents:n,contextUsage:r.contextUsage,lastRawSeq:i,slimReadableProjection:{timelineItems:r.timelineItems,consumedMessageIds:[]},pendingApprovals:r.pendingApprovals,pendingUserInputs:r.pendingUserInputs}}restoreReadableLiveProjectionAfterBootstrapFailure(e){let t=$P(e.clientId,e.sessionId),n=this.stateByClientSession.get(t);if(!n||n.kind!==`bootstrapping`)return;let r=this.sessionHub.getSubscriptions(e.clientId).find(t=>t.sessionId===e.sessionId),i=r?.projectId?.trim()??``,a=GP(n,lF);if(!a.previousReadyState||!r||!eF(r)||i&&i!==a.previousReadyState.projectId||(r.detailLevel??`full`)!==a.previousReadyState.detailLevel||!a.nextReadyState){this.log(`readable.bootstrap.recovery.discarded`,{clientId:e.clientId,sessionId:e.sessionId,bootstrapState:AF(n),currentSubscriptionFound:!!r,currentSubscriptionProjectId:i||null,currentSubscriptionDetailLevel:r?.detailLevel??null,previousReadyState:kF(a.previousReadyState),nextReadyState:kF(a.nextReadyState)}),this.clearState(e.clientId,e.sessionId);return}if(this.stateByClientSession.set(t,a.nextReadyState),a.replayedEnvelopes.length===0){this.log(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:0,nextReadyState:kF(a.nextReadyState)});return}let o,s=a.previousReadyState;for(let t of a.replayedEnvelopes){let n=lF(s,t),r=OF(e.sessionId,t,s,n);r&&(o={...o??{},...r}),s=n}let c=jF({previousState:a.previousReadyState,nextState:a.nextReadyState,sessionSummary:o},this.log);if(!c){this.log(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:kF(a.nextReadyState),emittedDelta:!1});return}this.log(`readable.bootstrap.recovered`,{clientId:e.clientId,sessionId:e.sessionId,replayedEnvelopeCount:a.replayedEnvelopes.length,nextReadyState:kF(a.nextReadyState),emittedDelta:!0,deltaFromRawSeq:c.fromRawSeq??null,deltaToRawSeq:c.toRawSeq}),this.sessionHub.sendSessionMessageToClient(e.clientId,a.previousReadyState.sessionId,YP(c))}sendReadableLiveDeltaNow(e){let t=jF({previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary},this.log);t&&this.sessionHub.sendSessionMessageToClient(e.clientId,e.previousState.sessionId,YP(t))}flushPendingReadableLiveDelta(e,t){let n=$P(e,t),r=this.pendingDeltaByClientSession.get(n);r&&(clearTimeout(r.timer),this.pendingDeltaByClientSession.delete(n),this.sendReadableLiveDeltaNow({clientId:e,previousState:r.previousState,nextState:r.nextState,sessionSummary:r.sessionSummary}))}enqueueReadableLiveDelta(e){if(this.readableLiveDeltaCoalesceMs<=0){this.sendReadableLiveDeltaNow(e);return}let t=$P(e.clientId,e.previousState.sessionId),n=this.pendingDeltaByClientSession.get(t);if(n){let t=PF({existing:{previousState:n.previousState,nextState:n.nextState,sessionSummary:n.sessionSummary},next:{previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary}});n.previousState=t.previousState,n.nextState=t.nextState,n.sessionSummary=t.sessionSummary;return}let r=setTimeout(()=>{this.flushPendingReadableLiveDelta(e.clientId,e.previousState.sessionId)},this.readableLiveDeltaCoalesceMs);r.unref?.(),this.pendingDeltaByClientSession.set(t,{clientId:e.clientId,sessionId:e.previousState.sessionId,previousState:e.previousState,nextState:e.nextState,sessionSummary:e.sessionSummary,timer:r})}};function PF(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)}}function FF(e){return e.sendProviderRaw?`relay_ws`:`direct_ws`}function IF(e){let t=performance.now(),n=JSON.stringify(e);return{payload:n,byteLength:Buffer.byteLength(n),serializeDurationMs:Number((performance.now()-t).toFixed(3))}}function LF(e){return e.kind===`session.readable.snapshot.chunk`?{snapshotId:e.payload.readable.snapshotId,chunkIndex:e.payload.readable.chunkIndex,totalChunks:e.payload.readable.totalChunks,snapshotFormat:`readable`,chunkEventCount:null,chunkTimelineItemCount:e.payload.readable.timelineItems.length}:e.kind===`session.stream.snapshot.chunk`?{snapshotId:e.payload.raw.snapshotId,chunkIndex:e.payload.raw.chunkIndex,totalChunks:e.payload.raw.totalChunks,snapshotFormat:e.payload.readable?`raw+readable`:`raw`,chunkEventCount:e.payload.raw.events.length,chunkTimelineItemCount:e.payload.readable?.timelineItems?.length??null}:null}var RF=class{clients=new Map;clientIdsBySessionId=new Map;deliveryStateByClientSession=new Map;addClient(e,t){let n=`ws_${yw(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=this.sendGatewayStreamMessage(n,e,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&&this.sendGatewayStreamMessage(r,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}this.sendGatewayStreamMessage(i,e.message)}}sendStreamMessage(e,t){let n=this.clients.get(e);!n||n.socket.readyState!==n.socket.OPEN||this.sendGatewayStreamMessage(n,t)}sendBroadcastMessage(e,t){let n=null;for(let r of this.clients.values())if(r.socket.readyState===r.socket.OPEN){if(t?.sessionId){let e=r.subscriptionsBySessionId.get(t.sessionId);if(!e||t.purpose&&e.purpose!==t.purpose)continue}n=this.sendGatewayStreamMessage(r,e,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}sendGatewayStreamMessage(e,t,n=null){let r=n??IF(t),i=LF(t);return i&&LA(`stream.snapshot.chunk.outbound`,{clientId:e.id,deviceId:e.deviceId,transport:FF(e.socket),provider:t.provider,sessionId:t.sessionId,projectId:t.projectId??null,messageKind:t.kind,messageType:t.type,snapshotId:i.snapshotId,chunkIndex:i.chunkIndex,totalChunks:i.totalChunks,snapshotFormat:i.snapshotFormat,chunkEventCount:i.chunkEventCount,chunkTimelineItemCount:i.chunkTimelineItemCount,serializedByteLength:r.byteLength,serializeDurationMs:r.serializeDurationMs}),e.socket.send(r.payload),r}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 zF=1200,BF=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`;var VF=class{statesByKey=new Map;targetsByClientId=new Map;constructor(e){this.options=e}getClientWatchTargets(e){let t=this.targetsByClientId.get(e);return t?[...t.values()]:[]}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){BF&&(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,!CP(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;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});let l=HF(i.session);if(i.historyUpdated||i.statusChanged||UF(t)&&WF(l)){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,sessionSummary:l});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`,refreshMode:i.refreshMode,fromRawSeq:i.fromRawSeq,toRawSeq:i.toRawSeq})}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:zF,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`)},zF))))}stateKey(e,t){return JSON.stringify([e,t])}};function HF(e){return{updatedAt:e.updatedAt,status:e.status,interactionLockReason:e.interactionLockReason,...e.model?{model:e.model}:e.sessionTurnConfig?.model===null?{model:null}:{},...e.sessionTurnConfig?{sessionTurnConfig:e.sessionTurnConfig}:{},...e.sessionTurnConfigUpdatedAt?{sessionTurnConfigUpdatedAt:e.sessionTurnConfigUpdatedAt}:{}}}function UF(e){return e===`lease_added`||e===`watch`||e===`watch_catchup`}function WF(e){return!!(e&&Object.prototype.hasOwnProperty.call(e,`model`)||e?.sessionTurnConfig||e?.sessionTurnConfigUpdatedAt)}var GF=class{constructor(e){this.config=e}issue(e){let t=KF(e.sizeBytes??0),n=uw.default.sign({sub:e.deviceId,type:`workspace_preview`,gatewayId:this.config.gatewayId,path:e.canonicalPath,disposition:e.disposition},this.config.accessSecret,{expiresIn:t}),r=uw.default.decode(n);return{ticket:n,expiresAt:r?.exp?new Date(r.exp*1e3).toISOString():new Date().toISOString()}}getExpiresAt(e){let t=uw.default.decode(e);return t?.exp?new Date(t.exp*1e3).toISOString():new Date().toISOString()}verify(e){let t;try{t=uw.default.verify(e,this.config.accessSecret)}catch(e){if(e instanceof Error){if(e.name===`TokenExpiredError`)throw Ow();if(e.name===`JsonWebTokenError`||e.name===`NotBeforeError`)throw Dw()}throw e}if(t.type!==`workspace_preview`||t.gatewayId!==this.config.gatewayId)throw Dw();return t}};function KF(e){return e>20971520?7200:600}var qF=class{constructor(e){this.dependencies=e}async listEntries(e,t=200){if(e.kind===`absolute`)return this.dependencies.fsService.listEntriesAbsolute(e.path,t);let n=await this.requireProject(e.projectId);return this.dependencies.fsService.listEntriesProjectRelative(n.path,e.path??`.`,t)}async resolveFile(e){return{file:(await this.resolveLocator(e)).descriptor}}async readTextFile(e,t={}){let n=await this.resolveLocator(e),r=await this.dependencies.fsService.readTextFile(n.canonicalPath,t);return{file:n.descriptor,...r}}async preparePreview(e,t){let n=await this.resolveLocator(e),r=t.disposition??(n.descriptor.preferredPreviewAction===`share_sheet`||n.descriptor.preferredPreviewAction===`download`?`attachment`:`inline`),i=this.dependencies.previewTicketService.issue({canonicalPath:n.canonicalPath,deviceId:t.deviceId??``,disposition:r,sizeBytes:n.descriptor.sizeBytes}),a=i.ticket,o=i.expiresAt;return{file:n.descriptor,preview:{url:t.buildPreviewUrl(a),expiresAt:o,supportsRange:n.descriptor.capabilities.supportsRange,contentType:n.descriptor.mimeType,contentDisposition:r}}}async readPreviewContent(e,t={}){let n=this.dependencies.previewTicketService.verify(e),r=await this.dependencies.fsService.resolveAbsoluteFile(n.path),i=await this.dependencies.fsService.readFileContentRange(r.canonicalPath,{rangeHeader:t.rangeHeader,includeBody:t.includeBody});return{statusCode:i.statusCode,headers:{contentType:r.mimeType,contentDisposition:YF(n.disposition,r.displayName),contentLength:i.contentLength,etag:i.etag,...r.capabilities.supportsRange?{acceptRanges:`bytes`}:{},...i.contentRange?{contentRange:i.contentRange}:{},...i.lastModified?{lastModified:i.lastModified}:{},cacheControl:`private, max-age=300`},body:i.buffer}}async openPreviewContentStream(e,t={}){let n=this.dependencies.previewTicketService.verify(e),r=await this.dependencies.fsService.resolveAbsoluteFile(n.path),i=await this.dependencies.fsService.openFileContentRangeStream(r.canonicalPath,{rangeHeader:t.rangeHeader,includeBody:t.includeBody});return{statusCode:i.statusCode,headers:{contentType:r.mimeType,contentDisposition:YF(n.disposition,r.displayName),contentLength:i.contentLength,etag:i.etag,...r.capabilities.supportsRange?{acceptRanges:`bytes`}:{},...i.contentRange?{contentRange:i.contentRange}:{},...i.lastModified?{lastModified:i.lastModified}:{},cacheControl:`private, max-age=300`},bodyStream:i.stream}}async resolveLocator(e){if(e.kind===`absolute`){let t=await this.dependencies.fsService.resolveAbsoluteFile(e.path);return{canonicalPath:t.canonicalPath,descriptor:{locator:{kind:`absolute`,path:t.canonicalPath},canonicalPath:t.canonicalPath,displayName:t.displayName,kind:`file`,sizeBytes:t.sizeBytes,mimeType:t.mimeType,extension:t.extension,updatedAt:t.updatedAt,etag:t.etag,previewCategory:t.previewCategory,preferredPreviewAction:t.preferredPreviewAction,capabilities:t.capabilities}}}if(e.kind===`project_relative`){let t=await this.requireProject(e.projectId),n=await this.dependencies.fsService.resolveProjectRelativeFile(t.path,e.path),r=JF(p.default.relative(t.path,n.canonicalPath));return{canonicalPath:n.canonicalPath,descriptor:{locator:{kind:`project_relative`,projectId:t.id,path:r},canonicalPath:n.canonicalPath,displayName:n.displayName,projectId:t.id,relativePath:r,kind:`file`,sizeBytes:n.sizeBytes,mimeType:n.mimeType,extension:n.extension,updatedAt:n.updatedAt,etag:n.etag,previewCategory:n.previewCategory,preferredPreviewAction:n.preferredPreviewAction,capabilities:n.capabilities}}}let t=this.dependencies.sessionManager.getSessionExecutionContext(e.sessionId),n=await this.dependencies.fsService.resolveProjectRelativeFile(t.projectPath,e.path),r=JF(p.default.relative(t.projectPath,n.canonicalPath));return{canonicalPath:n.canonicalPath,descriptor:{locator:{kind:`session_relative`,sessionId:e.sessionId,path:r},canonicalPath:n.canonicalPath,displayName:n.displayName,projectId:t.projectId,relativePath:r,kind:`file`,sizeBytes:n.sizeBytes,mimeType:n.mimeType,extension:n.extension,updatedAt:n.updatedAt,etag:n.etag,previewCategory:n.previewCategory,preferredPreviewAction:n.preferredPreviewAction,capabilities:n.capabilities}}}async requireProject(e){let t=await this.dependencies.sessionManager.getProject(e);if(!t)throw kw(e);return t}};function JF(e){return e.split(p.default.sep).join(`/`)}function YF(e,t){return`${e}; filename="${t.replace(/["\\]/g,`_`)}"`}function XF(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}))}const ZF=process.env.NATIVE_SESSION_WATCH_DEBUG===`1`||process.env.EXPO_PUBLIC_NATIVE_SESSION_WATCH_DEBUG===`1`;process.env.SESSION_FETCH_DEBUG===`1`||process.env.EXPO_PUBLIC_SESSION_FETCH_DEBUG;let QF=null;const $F={perMessageDeflate:{threshold:1024}},eI={globalDecompression:!1,threshold:1024,customTypes:/^text\/(?!event-stream)|(?:\+|\/)json(?:;|$)|(?:\+|\/)text(?:;|$)|(?:\+|\/)xml(?:;|$)/u},tI=4096;function nI(e,t){ZF&&(console.log(`[native-watch][gateway]`,e,t),QF?.info({event:e,...t},`native session watch debug`))}function rI(e){return e?typeof e==`string`?e:e.toString(`utf8`):``}function iI(e){return{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}}async function aI(e){let t=e.limit??300,n=e.detailLevel??`full`,r=(r,i)=>{LA(`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:pE(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:pE(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:pE(o,n)};return r(s,{rangeMin:i.min,rangeMax:i.max,minExpectedCursor:a}),s}async function oI(e,t={}){await Dg(e.gatewayLogPath);let n=cI(e,t),r=sI(e,n.instance);IA(r.log),QF=r.log,await r.register(fw.default,{origin:!0}),await r.register(pw.default,eI),await r.register(dw.default,{options:$F});let i=process.env.NODE_ENV!==`production`,a=4e3,o=`[unserializable payload]`,s=new Hw(e);await s.init();let c=new Qw(e.auditLogPath),l=new RF,u=new RT,d=new FE(e.projectStoreDir),f=new ZN(e.sessionHistoryDir);await f.init();let m=new SA(p.default.join(e.sessionHistoryDir,`discovery-v1`));await m.init();let h=new lA({store:m});await h.init();let g,_=null,v=new Map,y=await gm(e.authStoreDir),b=new GF(e),x=e.relayEnabled?Lh({relayUrl:e.relayUrl,gatewayHost:e.host}):``,S=e=>{let t=v.get(e);t&&(clearTimeout(t.timeout),v.delete(e),t.resolve())},C=(e,t)=>{let n=v.get(e);n&&(clearTimeout(n.timeout),v.delete(e),n.reject(t instanceof Error?t:Error(String(t))))},w=(e,t)=>new Promise((n,r)=>{C(e,Error(`Duplicate pending relay file upload start for request ${e}`));let i=setTimeout(()=>{v.delete(e),r(Error(`Relay file upload start timed out for request ${e}`))},t);v.set(e,{resolve:n,reject:r,timeout:i})}),T=new PM({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),D.routeReadableLiveDelta(e)}}),E=new qF({fsService:u,sessionManager:T,previewTicketService:b}),D=new NF(l,T,e.readableLiveDeltaCoalesceMs,LA),O=new VF({sessionManager:T,logger:r.log,sendStreamMessage:(e,t)=>{l.sendStreamMessage(e,t)},createExternalUpdateMessage:e=>XP(e),refreshDetailSessionSnapshots:e=>D.refreshDetailSessionSnapshots(e)});T.warmStartupProviderCapabilities().catch(e=>{r.log.warn({err:e},`startup provider capability warmup failed`)});let k=new Kh({packageName:z.packageName,currentVersion:z.version,sessionHub:l,logger:r.log,consoleWrite:e=>{console.log(e)},getRunningSessionCount:async()=>T.getRunningRuntimeSessionCount(),requestPreparedUpdate:t.onUpdatePrepared});r.addHook(`onClose`,async()=>{r.log.info({hasRelayClient:!!_},`gateway shutdown starting`);try{D.shutdown(),O.close(),_?.close(),M.close(),await k.shutdown(),await T.shutdown(),await f.shutdown();for(let[e,t]of v.entries())clearTimeout(t.timeout),t.reject(Error(`Gateway shutting down`)),v.delete(e);r.log.info(`gateway shutdown completed`)}catch(e){throw r.log.error({err:e},`gateway shutdown failed`),e}finally{IA(null),QF=null,n.close()}}),i&&r.addHook(`onSend`,async(e,t,n)=>(r.log.info({method:e.method,url:e.url,statusCode:t.statusCode,responseBody:R(n)},`gateway response (dev)`),n)),r.get(`/health`,async()=>({ok:!0,service:`desktop-gateway`,now:new Date().toISOString(),wsClients:l.count(),gatewayName:e.name,machineName:Sm(),gatewayIdentity:y.identity})),r.get(`/api/pairing/descriptor`,async()=>kh({gatewayId:e.gatewayId,gatewayName:e.name,machineName:Sm(),relayBaseUrl:x,directBaseUrls:Fh({protocol:e.httpsEnabled?`https`:`http`,host:e.host,port:e.httpsEnabled?e.httpsPort:e.port}),relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:void 0,gatewayIdentity:y.identity})),r.post(`/api/pairing/start`,async(t,n)=>{if(!L(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(t,n)=>{let r=_l.safeParse(t.body);if(!r.success)return n.code(400).send({error:`Invalid request`,detail:r.error.flatten()});try{let t=he(r.data.deviceName),n=await s.claimPairingCode(r.data.code,t,r.data.deviceIdentity);return await c.record({ts:new Date().toISOString(),action:`pairing.claim`,deviceId:n.deviceId,detail:{deviceName:t}}),FP(y,{...n,gatewayName:e.name,machineName:Sm()},r.data.code,r.data.deviceIdentity)}catch(e){return n.code(400).send({error:String(e)})}}),r.post(`/api/auth/refresh`,async(e,t)=>{let n=bl.safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{return await AP({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)})}});let A=()=>ud.parse({name:e.name,machineName:Sm()}),j=async n=>{let r=ud.pick({name:!0}).parse(n);if(!t.configPath)throw Error(`Gateway config path is unavailable`);return e.name=await Lm(t.configPath,r.name),A()};r.get(`/api/gateway/settings`,async(e,t)=>{if(ne(e,t))return A()}),r.post(`/api/gateway/settings`,async(e,t)=>{if(!ne(e,t))return;let n=ud.pick({name:!0}).safeParse(e.body);if(!n.success)return t.code(400).send({error:`Invalid request`,detail:n.error.flatten()});try{return await j(n.data)}catch(e){return t.code(500).send({error:String(e)})}}),r.get(`/api/projects`,async(e,t)=>{if(ne(e,t))return{projects:await T.listProjects()}}),r.get(`/api/gateway/update`,async(e,t)=>{if(ne(e,t))try{return await k.getOrCheckInfo(`mobile`)}catch(e){return t.code(500).send({error:String(e)})}}),r.post(`/api/gateway/update/apply`,async(e,t)=>{if(!ne(e,t))return;let n=e.body,r=Fu.safeParse(n?.requestedBy);try{let e=await k.applyUpdate(r.success?r.data:`mobile`);return Bu.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(ne(e,t))try{return kl.parse(await T.restartCodexAppServer())}catch(e){let n=xw(e)?e.status:500;return t.code(n).send({error:String(e)})}}),r.get(`/api/codex/accounts`,async(e,t)=>{if(ne(e,t))try{return El.parse(await T.getCodexAccounts())}catch(e){return re(t,e)}}),r.post(`/api/codex/accounts/save`,async(e,t)=>{if(ne(e,t))try{return Dl.parse(await T.saveCurrentCodexAccount())}catch(e){return re(t,e)}}),r.post(`/api/codex/accounts/switch`,async(e,t)=>{if(!ne(e,t))return;let n=e.body;if(typeof n?.accountId!=`string`||!n.accountId.trim())return t.code(400).send({error:`accountId is required and must be a non-empty string`});try{return Ol.parse(await T.switchCodexAccount(n.accountId))}catch(e){return re(t,e)}}),r.get(`/api/discovery/projects`,async(e,t)=>{if(ne(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(ne(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(!ne(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 xw(e)&&e.code===`DISCOVERED_PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):VP(n)?t.code(400).send({error:n}):t.code(500).send({error:n})}}),r.get(`/api/workspace/directories`,async(e,t)=>{if(!ne(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.post(`/api/workspace/directories`,async(e,t)=>{if(!ne(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`});if(typeof n.name!=`string`||!n.name.trim())return t.code(400).send({error:`name is required and must be a non-empty string`});try{return await u.createDirectoryUnrestricted(n.path,n.name,200)}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/workspace/entries`,async(e,t)=>{if(!ne(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{let t=ie(e.query);return await E.listEntries(t,i)}catch(e){return re(t,e)}}),r.get(`/api/workspace/files/resolve`,async(e,t)=>{if(ne(e,t))try{let t=ae(e.query);return await E.resolveFile(t)}catch(e){return re(t,e)}}),r.get(`/api/workspace/files/text`,async(e,t)=>{if(!ne(e,t))return;let n=e.query,r=n.startLine?Number(n.startLine):void 0,i=n.maxLines?Number(n.maxLines):void 0,a=n.maxBytes?Number(n.maxBytes):void 0;try{let t=ae(e.query);return await E.readTextFile(t,{startLine:typeof r==`number`&&Number.isFinite(r)?r:void 0,maxLines:typeof i==`number`&&Number.isFinite(i)?i:void 0,maxBytes:typeof a==`number`&&Number.isFinite(a)?a:void 0})}catch(e){return re(t,e)}}),r.post(`/api/workspace/files/preview`,async(e,t)=>{let n=ne(e,t);if(!n)return;let r=e.body,i=Vu.safeParse(r?.locator);if(!i.success)return t.code(400).send({error:i.error.issues[0]?.message??`Invalid workspace file locator`});let a;if(r?.disposition!==void 0){let e=Zu.safeParse(r.disposition);if(!e.success)return t.code(400).send({error:e.error.issues[0]?.message??`Invalid preview disposition`});a=e.data}try{return await E.preparePreview(i.data,{deviceId:n.sub,disposition:a,buildPreviewUrl:t=>`${oe(e)}/api/workspace/files/content/${encodeURIComponent(t)}`})}catch(e){return re(t,e)}}),r.route({method:[`GET`,`HEAD`],url:`/api/workspace/files/content/:ticket`,handler:async(e,t)=>{let n=e.params.ticket?.trim()??``;if(!n)return t.code(400).send({error:`ticket is required`});try{let r=await E.readPreviewContent(n,{rangeHeader:typeof e.headers.range==`string`?e.headers.range:void 0,includeBody:e.method!==`HEAD`});return t.code(r.statusCode),t.header(`Content-Type`,r.headers.contentType),t.header(`Content-Disposition`,r.headers.contentDisposition),t.header(`Content-Length`,String(r.headers.contentLength)),t.header(`ETag`,r.headers.etag),t.header(`Cache-Control`,r.headers.cacheControl),r.headers.acceptRanges&&t.header(`Accept-Ranges`,r.headers.acceptRanges),r.headers.contentRange&&t.header(`Content-Range`,r.headers.contentRange),r.headers.lastModified&&t.header(`Last-Modified`,r.headers.lastModified),e.method===`HEAD`||!r.body?t.send():t.send(r.body)}catch(e){return re(t,e)}}}),r.get(`/api/providers/:provider/capabilities`,async(e,t)=>{if(!ne(e,t))return;let n=le(e,t);if(n)try{return{capabilities:await T.getProviderCapabilities(n.provider,n.projectId,n.agentVersion)}}catch(e){return xw(e)&&e.code===`PROJECT_NOT_FOUND`?t.code(e.status).send({error:String(e)}):t.code(400).send({error:String(e)})}}),r.post(`/api/providers/:provider/execution-defaults`,async(e,t)=>{if(!ne(e,t))return;let n=e.params,r=Na.safeParse(n.provider);if(!r.success)return t.code(400).send({error:`Invalid provider`});let i=za.safeParse({...e.body&&typeof e.body==`object`&&!Array.isArray(e.body)?e.body:{},provider:r.data});if(!i.success)return t.code(400).send({error:i.error.message});try{return{defaults:await T.updateProviderExecutionDefaults(i.data)}}catch(e){return t.code(400).send({error:String(e)})}}),r.get(`/api/agents/:provider/config`,async(e,t)=>{if(!ne(e,t))return;let n=le(e,t);if(n)try{return await T.getAgentConfig(n.provider,{projectId:n.projectId,agentVersion:n.agentVersion})}catch(e){return xw(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(!ne(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 T.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(!ne(e,t))return;let n=e.params;try{return await T.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(!ne(e,t))return;let n=e.params,r=e.query,i=se(r.status,t);if(!i)return;let a=ce(r.syncExternal);try{return{sessions:await T.listProjectSessions(n.projectId,i,{syncExternal:a})}}catch(e){return xw(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(!ne(e,t))return;let n=e.params,r=await T.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(!ne(e,t))return;let n=e.params,r=await T.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(!ne(e,t))return;let n=e.params;try{let e=await T.syncProjectSessionHistory(n.projectId,n.sessionId);return e.historyUpdated&&await D.refreshDetailSessionSnapshots({projectId:n.projectId,sessionId:n.sessionId,reason:`explicit_history_sync`,refreshMode:e.refreshMode,fromRawSeq:e.fromRawSeq,toRawSeq:e.toRawSeq}),{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 xw(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(!ne(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=hc.safeParse(r.detailLevel).success?hc.parse(r.detailLevel):`full`;try{return await I(n.projectId,n.sessionId,i,typeof a==`number`&&Number.isFinite(a)?Math.max(0,Math.floor(a)):void 0,o,`http`)}catch(e){return xw(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/readable-items/:itemId`,async(e,t)=>{if(!ne(e,t))return;let n=e.params;try{return await OP({sessionManager:T,readableItemDetailLookup:D,projectId:n.projectId,sessionId:n.sessionId,itemId:n.itemId})||t.code(404).send({error:`Readable item not found`})}catch(e){return xw(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(!ne(e,t))return;let n=e.params,r=e.query,i=await T.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)=>L(e)?{devices:s.listDevices()}:t.code(401).send({error:`Unauthorized`})),r.post(`/api/devices/:deviceId/revoke`,async(e,t)=>{if(!L(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=ue(t.headers.authorization)??de(t.url);if(!n){e.close(1008,`Missing access token`);return}let i;try{i=s.verifyAccessToken(n)}catch(t){e.close(1008,`Unauthorized: ${String(t)}`);return}let a=l.addClient(i.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 P(kc(e),i.sub,a)}catch(e){await F({deviceId:i.sub,clientId:a,rawCommand:t,parsedInput:n,error:e})}}),e.on(`close`,(e,t)=>{let n=l.getSubscriptions(a),o=O.getClientWatchTargets(a);r.log.info({clientId:a,deviceId:i.sub,transport:`direct`,closeCode:typeof e==`number`?e:null,closeReason:rI(t),streamSubscriptionCount:n.length,streamSubscriptions:n.map(iI),externalWatchTargetCount:o.length,externalWatchTargets:o},`gateway websocket client disconnected`),O.removeClient(a),l.removeClient(a),D.clearStatesForClient(a)})});let M=new BA({gatewayId:e.gatewayId,relayTransportSecurityLevel:e.relayEnabled?e.relayTransportSecurityLevel:`plaintext-relay`,gatewayIdentity:y.identity,gatewayIdentityPrivateKeyPem:y.privateKeyPem,sessionHub:l,logger:r.log,describeClientState:e=>{let t=l.getSubscriptions(e),n=O.getClientWatchTargets(e);return{streamSubscriptionCount:t.length,streamSubscriptions:t.map(iI),externalWatchTargetCount:n.length,externalWatchTargets:n}},handlePairingClaim:async t=>{let n=he(t.deviceName);return FP(y,{...await s.claimPairingCode(t.code,n,t.deviceIdentity),gatewayName:e.name,machineName:Sm()},t.code,t.deviceIdentity)},handleRefresh:async t=>{let n=await AP({authService:s,execute:()=>s.refreshAccessToken(t.refreshToken),logger:r.log,refreshToken:t.refreshToken,requestedDeviceId:t.deviceId,source:`relay_http_forward`});return kP(t.deviceId,n.deviceId),{gatewayId:e.gatewayId,...n}},handleFileContentRequest:async(e,t)=>{if(t.method===`GET`&&t.responseMode===`stream_upload`){let n=await E.openPreviewContentStream(t.ticket,{rangeHeader:t.rangeHeader,includeBody:!0});if(n.bodyStream&&t.uploadUrl&&t.uploadToken){let i=w(e,15e3),a=uI({uploadUrl:t.uploadUrl,uploadToken:t.uploadToken,contentLength:n.headers.contentLength,bodyStream:n.bodyStream});a.completed.catch(n=>{C(e,n),r.log.warn({err:n,requestId:e,ticket:t.ticket},`relay workspace preview upload failed`)});try{await i}catch(e){throw a.abort(e),e}}return sf.parse({status:n.statusCode,headers:n.headers,...n.bodyStream?{bodyTransport:`stream_upload`}:{}})}let n=await E.readPreviewContent(t.ticket,{rangeHeader:t.rangeHeader,includeBody:t.method===`GET`});return sf.parse({status:n.statusCode,headers:n.headers,...n.body?{bodyBase64:n.body.toString(`base64`)}:{}})},verifyDeviceIdentityBinding:async(e,t)=>s.verifyDeviceIdentityBinding(e,t),handleRpcRequest:async(t,n)=>LP(t,{gatewayId:e.gatewayId,relayPreviewBaseUrl:x,authService:s,logger:r.log,sessionManager:T,projectDiscoveryService:h,fsService:u,workspaceFileService:E,updateService:k,gatewaySettings:{get:A,update:j},relayDeviceId:n.deviceId,readableItemDetailLookup:D,refreshDetailSessionSnapshots:e=>D.refreshDetailSessionSnapshots(e),buildRawEventsListResult:aI}),handleFileContentUploadStarted:S,sendFrame:e=>_?.send(e)??!1,dispatchCommand:async(e,t,n)=>{try{await P(e,t,n)}catch(r){await F({deviceId:t,clientId:n,rawCommand:JSON.stringify(e),parsedInput:e,error:r})}}}),N=async(e,t,n)=>{switch(e.type){case`session.start`:{let r=await T.startSession({...e.payload,deviceId:t});l.sendSystemMessage(n,{type:`command.ack`,commandType:e.type,commandId:e.commandId,payload:r});return}case`turn.input`:await T.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`:await T.startReview(e.payload.sessionId,e.payload.config,t,{input:e.payload.input,turnConfig:e.payload.turnConfig});return;case`tool.approval.respond`:await T.respondToolPermission(e.payload.sessionId,e.payload.requestId,e.payload.decision,e.payload.reason,t);return;case`user.input.respond`:await T.respondUserInput(e.payload.sessionId,e.payload.requestId,e.payload.answers,t);return;case`session.interrupt`:await T.interruptSession(e.payload.sessionId,t);return;case`session.close`:throw Error(`session.close is deprecated. Use session.interrupt instead.`);case`session.external.watch.set`:{nI(`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=O.setClientWatchTargets(n,e.payload.sessions,e.payload.replace);nI(`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=XF(e.payload.sessions);await D.handleSessionStreamSubscribeCommand(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=T.getSessionExecutionContext(e.payload.sessionId),n=await u.readFile(t.projectPath,e.payload.path);await T.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=T.getSessionExecutionContext(e.payload.sessionId),n=await u.diffFile(t.projectPath,e.payload.path,e.payload.baseContent??``);await T.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)}`)}}},P=async(e,t,n)=>{await N(e,t,n)},F=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 T.emitExternalEvent({provider:`codex`,sessionId:`system`,type:`error.runtime`,raw:{message:String(e.error),source:`ws.command`}})},I=async(e,t,n=300,r,i=`full`,a=`http`)=>aI({sessionManager:T,projectId:e,sessionId:t,limit:n,fromRawSeqExclusive:r,detailLevel:i,requestSource:a}),L=t=>t.headers[`x-api-key`]===e.apiKey,R=e=>{if(e==null)return e;if(typeof e==`string`){let t=ee(e);return t===void 0?B(e,a):te(V(t))}if(Buffer.isBuffer(e)){let t=e.toString(`utf8`),n=ee(t);return n===void 0?B(t,a):te(V(n))}return typeof e==`object`?te(V(e)):String(e)},ee=e=>{try{return JSON.parse(e)}catch{return}},B=(e,t)=>e.length<=t?e:`${e.slice(0,t)}...<truncated>`,V=e=>{if(Array.isArray(e))return e.map(e=>V(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]=V(r)}return n}return e},te=e=>{let t=H(e);return t===o?t:t.length<=a?e:{truncated:!0,preview:B(t,a)}},H=e=>{try{return JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)}catch{return o}},ne=(e,t)=>{let n=ue(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}},re=(e,t)=>{let n=xw(t)?t.status:500;return xw(t)?e.code(n).send({error:String(t),code:t.code,...t.details===void 0?{}:{details:t.details}}):e.code(n).send({error:String(t)})},ie=e=>{let t=e&&typeof e==`object`?e:{},n=Hu.safeParse({kind:typeof t.locatorKind==`string`?t.locatorKind:void 0,projectId:typeof t.projectId==`string`?t.projectId:void 0,path:typeof t.path==`string`?t.path:void 0});if(!n.success)throw Error(n.error.issues[0]?.message??`Invalid workspace entries locator`);return n.data},ae=e=>{let t=e&&typeof e==`object`?e:{},n=Vu.safeParse({kind:typeof t.locatorKind==`string`?t.locatorKind:void 0,sessionId:typeof t.sessionId==`string`?t.sessionId:void 0,projectId:typeof t.projectId==`string`?t.projectId:void 0,path:typeof t.path==`string`?t.path:void 0});if(!n.success)throw Error(n.error.issues[0]?.message??`Invalid workspace file locator`);return n.data},oe=t=>{let n=t.headers.host?.trim();return n?`${t.protocol}://${n}`.replace(/\/+$/,``):`${e.httpsEnabled?`https`:`http`}://${e.host}:${e.httpsEnabled?e.httpsPort:e.port}`},se=(e,t)=>{let n=e??`all`;return[`running`,`idle`,`all`].includes(n)?n:(t.code(400).send({error:`Invalid status filter`}),null)},ce=e=>{let t=e?.trim().toLowerCase();return t===`true`||t===`1`},le=(e,t)=>{let n=e.params,r=e.query,i=Na.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)},ue=e=>{if(!e)return null;let[t,n]=e.split(` `);return t?.toLowerCase()!==`bearer`||!n?null:n},de=e=>{try{return new URL(e,`http://localhost`).searchParams.get(`token`)}catch{return null}},fe=e.httpsEnabled?e.httpsPort:e.port,pe=e.httpsEnabled?`https`:`http`,me=Sm(),he=e=>e?.trim()||`Craby mobile`;await r.listen({host:e.host,port:fe});let ge=r.server.address(),_e=typeof ge==`object`&&ge?ge.port:fe;if(r.log.info({host:e.host,port:_e,protocol:pe,machineName:me},lI(pe,e.host,_e)),e.relayEnabled&&(_=new ej({gatewayId:e.gatewayId,machineName:e.name,relayUrl:e.relayUrl,relayTransportSecurityLevel:e.relayTransportSecurityLevel,relayGatewayAccessToken:e.relayGatewayAccessToken,resolveRelayGatewayAccessToken:e.relayGatewayAccessToken.trim()?void 0:()=>aj({gatewayId:e.gatewayId,relayUrl:e.relayUrl,gatewayIdentity:y.identity,privateKeyPem:y.privateKeyPem}),gatewayIdentity:y.identity,directBaseUrls:Fh({protocol:pe,host:e.host,port:_e}),logger:r.log,onFrame:async e=>{await M.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 k.start(),{protocol:pe,listenPort:_e,gatewayName:e.name,machineName:me,gatewayIdentity:y.identity,close:()=>r.close(),getGatewayUpdateInfo:()=>k.getInfo(),requestGatewayUpdate:(e=`console`)=>k.applyUpdate(e),requestCodexAppServerRestart:async(e=`console`)=>T.restartCodexAppServer(),startupPairingCode:g}}function sI(e,t){let n=t;if(!e.httpsEnabled)return(0,mw.default)({disableRequestLogging:!0,loggerInstance:n,routerOptions:{maxParamLength:tI}});if(!e.tlsKeyPath||!e.tlsCertPath)throw Error(`TLS key/cert path is required when HTTPS is enabled.`);let r={key:(0,u.readFileSync)(e.tlsKeyPath),cert:(0,u.readFileSync)(e.tlsCertPath),...e.tlsCaPath?{ca:(0,u.readFileSync)(e.tlsCaPath)}:{}};return(0,mw.default)({disableRequestLogging:!0,loggerInstance:n,routerOptions:{maxParamLength:tI},https:r})}function cI(e,t){let n=process.env.NODE_ENV!==`production`,r=hw.default.destination({dest:e.gatewayLogPath,mkdir:!0,sync:!1}),i=t.logToConsole?hw.default.multistream([{stream:r},{stream:process.stdout}]):r;return{instance:(0,hw.default)({level:n?`debug`:`info`},i),close:()=>{try{r.flushSync()}catch{}r.end()}}}function lI(e,t,n){return`desktop-gateway listening on ${e}://${t}:${n}`}function uI(e){let t=new URL(e.uploadUrl),n=t.protocol===`https:`?S.request:t.protocol===`http:`?x.request:null;if(!n)throw Error(`Unsupported relay preview upload protocol: ${t.protocol}`);let r=null,i=e=>{};return{completed:new Promise((a,o)=>{let s=!1,c=t=>{if(s)return;if(s=!0,!t){a();return}let n=t instanceof Error?t:Error(String(t));e.bodyStream.destroy(n),r?.destroy(n),o(n)};r=n(t,{method:`PUT`,headers:{"content-type":`application/octet-stream`,"content-length":String(e.contentLength),"x-relay-upload-token":e.uploadToken}},e=>{let t=[];e.on(`data`,e=>{t.push(Buffer.isBuffer(e)?e:Buffer.from(e))}),e.on(`error`,c),e.on(`end`,()=>{let n=e.statusCode??0;if(n>=200&&n<300){c();return}c(Error(`Relay preview upload failed (${n}): ${Buffer.concat(t).toString(`utf8`)}`))})}),i=e=>{c(e??Error(`Relay preview upload aborted`))},r.on(`error`,c),(0,C.pipeline)(e.bodyStream,r).catch(c)}),abort:i}}function dI(e){return e instanceof Error?e.stack??`${e.name}: ${e.message}`:(0,b.inspect)(e,{depth:6,breakLength:120})}async function fI(e){let t=await Nm({configPath:e.configPath,ensureConfigFile:!0});Rm(t.config);let n=await oI(t.config,{configPath:t.configPath,logToConsole:e.logToConsole,onUpdatePrepared:async e=>{mI({type:`worker.update.prepared`,payload:e})}});mI({type:`worker.ready`,payload:pI(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=hI(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: ${dI(e)}`),i(1)}),process.on(`unhandledRejection`,e=>{console.error(`[gateway] worker unhandled rejection: ${dI(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);mI({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);mI({type:`worker.response`,id:e.id,method:e.method,ok:!0,result:t});return}}}catch(t){mI({type:`worker.response`,id:e.id,method:e.method,ok:!1,error:String(t)})}}await new Promise(()=>{})}function pI(e){return{protocol:e.protocol,listenPort:e.listenPort,gatewayName:e.gatewayName,machineName:e.machineName,gatewayIdentity:e.gatewayIdentity,startupPairingCode:e.startupPairingCode}}function mI(e){process.send&&process.send(e)}function hI(e){if(!gI(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 gI(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}_I(process.argv.slice(2)).catch(e=>{console.error(String(e)),process.exit(1)});async function _I(e){let t=ee(e);switch(t.command){case`help`:SI();return;case`version`:console.log(z.version);return;case`init`:await yI(t);return;case`doctor`:await bI(t);return;case`start`:await vI(t);return;case`__worker`:await xI(t);return;default:{let e=t.command;throw Error(`Unsupported command: ${e}`)}}}async function vI(e){let t=await Nm({configPath:e.configPath,ensureConfigFile:!0});Rm(t.config);let n=await rh({configPath:t.configPath,configExists:t.configExists,config:t.config});try{await yg({args:e,loaded:t,doctorReport:n})}catch(e){throw Error(Og(e,t.config))}ih(n)&&console.warn(`[doctor] startup continued despite bundled runtime check failures.`)}async function yI(e){let t=await Mm({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 Nm({configPath:t.configPath,ensureConfigFile:!1}),r=await rh({configPath:n.configPath,configExists:n.configExists,config:n.config});console.log(ah(r))}async function bI(e){let t=await Nm({configPath:jm(e.configPath),ensureConfigFile:!1,syncGatewayIdentityConfig:!1}),n=await rh({configPath:t.configPath,configExists:t.configExists,config:t.configExists?t.config:void 0});console.log(ah(n)),ih(n)&&(process.exitCode=1)}async function xI(e){try{await fI(e)}catch(t){let n=await Nm({configPath:e.configPath,ensureConfigFile:!0});throw Error(Og(t,n.config))}}function SI(){console.log(`${z.cliName} ${z.version}`),console.log(``),console.log(`Usage:`),console.log(` ${z.cliName} [start] [--config <path>] [--log]`),console.log(` ${z.cliName} init [--config <path>] [--force]`),console.log(` ${z.cliName} doctor [--config <path>]`),console.log(` ${z.cliName} --version`)}exports.runCli=_I;
|