@code-yeongyu/senpi 2026.11.10-2 → 2026.11.10-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/bundle/chunks/{args-77GYOPEO.js → args-HFYB6URH.js} +1 -1
- package/dist/bundle/chunks/{azure-openai-responses-YFZ734T3.js → azure-openai-responses-MNN2TINI.js} +1 -1
- package/dist/bundle/chunks/{chunk-ZUQCYIRY.js → chunk-2ODGHBUD.js} +1 -1
- package/dist/bundle/chunks/{chunk-MSDBBOB2.js → chunk-5H43O4MA.js} +1 -1
- package/dist/bundle/chunks/{chunk-IKJCA5SH.js → chunk-6Q7Y2G5A.js} +1 -1
- package/dist/bundle/chunks/{chunk-YCPURLPU.js → chunk-AC6MDRAE.js} +64 -64
- package/dist/bundle/chunks/{chunk-33MZJTQ3.js → chunk-B4WD5XHP.js} +1 -1
- package/dist/bundle/chunks/{chunk-V5FSENW6.js → chunk-COKX65TE.js} +1 -1
- package/dist/bundle/chunks/{chunk-YNGEZBTP.js → chunk-DEQLHN2J.js} +2 -2
- package/dist/bundle/chunks/{chunk-EJB5E2JK.js → chunk-DHAAWL2H.js} +1 -1
- package/dist/bundle/chunks/{chunk-2EJ4BGBM.js → chunk-DHORIIVQ.js} +1 -1
- package/dist/bundle/chunks/{chunk-2M54EAAY.js → chunk-DIHIEJFV.js} +1 -1
- package/dist/bundle/chunks/{chunk-RCHIMH7N.js → chunk-DQY26AX3.js} +1 -1
- package/dist/bundle/chunks/{chunk-3Q5ZENSD.js → chunk-E6ZBTSC6.js} +1 -1
- package/dist/bundle/chunks/{chunk-74IB3JPP.js → chunk-H3VJVKUK.js} +4 -4
- package/dist/bundle/chunks/{chunk-OF3XVGG4.js → chunk-HZDKQOWB.js} +1 -1
- package/dist/bundle/chunks/chunk-IREUIMFE.js +11 -0
- package/dist/bundle/chunks/{chunk-TUEZNIBK.js → chunk-JSD6O3RJ.js} +2 -2
- package/dist/bundle/chunks/{chunk-UOZDDYBN.js → chunk-L3KVP7VJ.js} +1 -1
- package/dist/bundle/chunks/{chunk-7MN7YNO5.js → chunk-L7DGTA3L.js} +1 -1
- package/dist/bundle/chunks/{chunk-J2NGJKXL.js → chunk-LXINMDMX.js} +1 -1
- package/dist/bundle/chunks/{chunk-QATU6BBC.js → chunk-NN7NESW2.js} +1 -1
- package/dist/bundle/chunks/{chunk-2U6HXWXS.js → chunk-NNQ34ZDW.js} +1 -1
- package/dist/bundle/chunks/chunk-NQKCJQHB.js +2 -0
- package/dist/bundle/chunks/{chunk-XH24X5B2.js → chunk-O5WJVIEU.js} +1 -1
- package/dist/bundle/chunks/{chunk-O3FG6HML.js → chunk-PJI5GT7U.js} +1 -1
- package/dist/bundle/chunks/{chunk-BPNSOZ2C.js → chunk-QUVSIW2R.js} +1 -1
- package/dist/bundle/chunks/{chunk-WXYMAUFX.js → chunk-QX7WD3IM.js} +1 -1
- package/dist/bundle/chunks/{chunk-Y4ONXQMR.js → chunk-RGHVPUUX.js} +1 -1
- package/dist/bundle/chunks/{chunk-RYPM5BZQ.js → chunk-S7NAJQB3.js} +1 -1
- package/dist/bundle/chunks/{chunk-LT353NSF.js → chunk-T4CUD7RF.js} +1 -1
- package/dist/bundle/chunks/{chunk-J7FW7MED.js → chunk-TCZORL3V.js} +1 -1
- package/dist/bundle/chunks/{chunk-KU72IKV5.js → chunk-VGSWOLIY.js} +1 -1
- package/dist/bundle/chunks/{chunk-Q4G5DECT.js → chunk-Z2C5N2LM.js} +2 -2
- package/dist/bundle/chunks/{cli-main-Y6ALA5OI.js → cli-main-ZTT3N4DO.js} +1 -1
- package/dist/bundle/chunks/{credential-accounts-LVVPKFEY.js → credential-accounts-5KHVGSCY.js} +1 -1
- package/dist/bundle/chunks/{dispatch-EP35KKJ3.js → dispatch-YUYZQXRP.js} +1 -1
- package/dist/bundle/chunks/{hand-entry-IPDAIOGI.js → hand-entry-UV5XPMBF.js} +3 -3
- package/dist/bundle/chunks/{headless-host-HKGNJGYT.js → headless-host-53UMJMM6.js} +1 -1
- package/dist/bundle/chunks/{health-write-FBF74QJ7.js → health-write-JLSF5EVV.js} +1 -1
- package/dist/bundle/chunks/{help-fast-path-5SCPY3OH.js → help-fast-path-552QLMWT.js} +1 -1
- package/dist/bundle/chunks/{host-command-2326GCUP.js → host-command-BZN7WYYV.js} +1 -1
- package/dist/bundle/chunks/{host-session-command-BZYBDOIE.js → host-session-command-O5WYHZXH.js} +1 -1
- package/dist/bundle/chunks/{interactive-mode-LBQB7DDR.js → interactive-mode-OCU4NDPC.js} +1 -1
- package/dist/bundle/chunks/{login-health-EVXVLHB2.js → login-health-TOSQT5RG.js} +1 -1
- package/dist/bundle/chunks/{main-FFRFP34W.js → main-CNDP6HCF.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-NDIHHJ2L.js → multi-session-host-ODGJAGJP.js} +1 -1
- package/dist/bundle/chunks/openai-codex-responses-VRGOAFEG.js +10 -0
- package/dist/bundle/chunks/{openai-responses-NIVBWE2H.js → openai-responses-I7PXRWCM.js} +2 -2
- package/dist/bundle/chunks/{package-manager-cli-XCPAMOYI.js → package-manager-cli-HSPUG4RJ.js} +1 -1
- package/dist/bundle/chunks/{role-HQUN4XXK.js → role-AEOLJRTP.js} +1 -1
- package/dist/bundle/chunks/{rotation-stream-F3BEMXBE.js → rotation-stream-E3FJFHXJ.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-TKNZM4PZ.js → rpc-mode-KOZPXU3U.js} +1 -1
- package/dist/bundle/chunks/{run-attached-tui-JDUKXDI2.js → run-attached-tui-4AENRP7P.js} +1 -1
- package/dist/bundle/chunks/{schedule-command-HF2DHABB.js → schedule-command-SG44FE23.js} +1 -1
- package/dist/bundle/chunks/{session-control-endpoint-A6R6W2JQ.js → session-control-endpoint-5A24JYPE.js} +1 -1
- package/dist/bundle/chunks/{session-picker-GWA4S2PO.js → session-picker-73YRS3GE.js} +1 -1
- package/dist/bundle/chunks/{session-slot-CZGQQCOC.js → session-slot-RH7JLO3F.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +139 -139
- package/dist/bundle/chunks/{state-store-S7QAESIF.js → state-store-IECVTYXC.js} +1 -1
- package/dist/bundle/cli.js +2 -2
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/bundle/runtime-manifest.json +1 -1
- package/dist/core/agent-session.d.ts +12 -2
- package/dist/core/agent-session.js +59 -8
- package/dist/core/assistant-error-redaction.d.ts +9 -0
- package/dist/core/assistant-error-redaction.js +27 -0
- package/dist/core/config-reference-redaction.js +90 -10
- package/dist/core/context-files.d.ts +10 -0
- package/dist/core/context-files.js +58 -12
- package/dist/core/egress/wire.d.ts +13 -0
- package/dist/core/extensions/loader.js +24 -4
- package/dist/core/extensions/runner.d.ts +9 -1
- package/dist/core/extensions/runner.js +9 -4
- package/dist/core/extensions/types.d.ts +17 -3
- package/dist/core/hand/hook-advertise.d.ts +41 -0
- package/dist/core/hand/hook-advertise.js +98 -0
- package/dist/core/hand/hook-contract.d.ts +66 -0
- package/dist/core/hand/hook-contract.js +138 -0
- package/dist/core/resource-loader.js +2 -0
- package/dist/core/retry-fallback/log.d.ts +7 -1
- package/dist/core/retry-fallback/log.js +82 -5
- package/dist/core/retry-fallback/model-config-error.js +2 -1
- package/dist/core/settings-manager.d.ts +6 -0
- package/dist/core/settings-manager.js +8 -0
- package/dist/core/turn-origin.d.ts +19 -13
- package/dist/core/turn-origin.js +34 -30
- package/dist/core/ultrafast-lanes.d.ts +1 -0
- package/dist/core/ultrafast-lanes.js +4 -2
- package/dist/modes/interactive/components/footer.d.ts +23 -5
- package/dist/modes/interactive/components/footer.js +45 -16
- package/dist/modes/interactive/interactive-mode.js +9 -1
- package/dist/modes/rpc/admit-external-message-command.d.ts +2 -2
- package/dist/modes/rpc/admit-external-message-command.js +2 -10
- package/dist/modes/rpc/connection-handler.js +10 -6
- package/dist/modes/rpc/connection-roles.d.ts +2 -0
- package/dist/modes/rpc/connection-roles.js +4 -0
- package/dist/modes/rpc/custom-capability.d.ts +2 -0
- package/dist/modes/rpc/custom-capability.js +2 -0
- package/dist/modes/rpc/delegated-drive-origin.d.ts +6 -6
- package/dist/modes/rpc/delegated-drive-origin.js +7 -8
- package/dist/modes/rpc/delegation-declaration.d.ts +2 -0
- package/dist/modes/rpc/delegation-declaration.js +5 -1
- package/dist/modes/rpc/host-capabilities.js +3 -1
- package/dist/modes/rpc/loopless-tool-handlers.d.ts +6 -0
- package/dist/modes/rpc/loopless-tool-handlers.js +14 -1
- package/docs/extensions.md +10 -0
- package/docs/settings.md +1 -0
- package/docs/usage.md +1 -1
- package/native/socket-secret/prebuilds/win32-arm64/senpi_socket_secret.win32-arm64.node +0 -0
- package/native/socket-secret/prebuilds/win32-x64/senpi_socket_secret.win32-x64.node +0 -0
- package/package.json +6 -6
- package/dist/bundle/chunks/chunk-DLAY7CIU.js +0 -2
- package/dist/bundle/chunks/chunk-XH2MWTXA.js +0 -11
- package/dist/bundle/chunks/openai-codex-responses-ABB2J43U.js +0 -10
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,exitAfterOutput,isPackageCommandArgv}from"./chunk-
|
|
2
|
+
import{CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,exitAfterOutput,isPackageCommandArgv}from"./chunk-6Q7Y2G5A.js";import{APP_NAME,CONFIG_DIR_NAME,CONFIG_FLAT_LAYOUT,ENV_PREFIX,brandEnvNames,getAgentDir}from"./chunk-SODMQEHO.js";import{homedir}from"node:os";try{process.cwd()}catch{let fallback=homedir();process.chdir(fallback),console.error(`the current working directory no longer exists; continuing from ${fallback}`)}import{homedir as homedir2}from"node:os";import{join}from"node:path";async function dispatchAgentDirectoryCommand(args){if(!(args[0]!=="config"||args[1]!=="agent-dir")){(args.length!==3||args[2]!=="--json")&&await exitAfterOutput(`${JSON.stringify({version:1,ok:!1,code:"invalid_arguments",message:`Usage: ${APP_NAME} config agent-dir --json`})}
|
|
3
3
|
`,2);try{let dir=getAgentDir(),selector=brandEnvNames("CODING_AGENT_DIR").find(name=>process.env[name]!==void 0),explicit=selector!==void 0&&process.env[selector]?selector:void 0,homeDefault=CONFIG_FLAT_LAYOUT?join(homedir2(),CONFIG_DIR_NAME):join(homedir2(),CONFIG_DIR_NAME,"agent"),rule=explicit!==void 0?"environment":dir===homeDefault?"home-default":"project-local";await exitAfterOutput(`${JSON.stringify({version:1,ok:!0,dir,source:explicit??(rule==="project-local"?"project-local":"default"),rule,brandedPrefix:ENV_PREFIX})}
|
|
4
4
|
`,0)}catch(error){await exitAfterOutput(`${JSON.stringify({version:1,ok:!1,code:"selection_failed",message:error instanceof Error?error.message:"Unable to resolve the agent directory."})}
|
|
5
|
-
`,1)}}}import*as nodeModule from"node:module";async function enableStartupCompileCache(){let enable=nodeModule.enableCompileCache;if(typeof enable!="function")return;let args=process.argv.slice(2);if(!isPackageCommandArgv(args)&&args[0]!==CONFIG_COMMAND_ARGV&&(args.includes("--version")||args.includes("-v")))return;let scheduleWatch=!1;if(args[0]===SCHEDULE_COMMAND_ARGV&&args[1]==="run")for(let index=2;index<args.length;index++){let arg=args[index];arg==="--watch"?scheduleWatch=!0:["--exec","--poll-seconds","--timeout-seconds","--concurrency"].includes(arg??"")&&index++}if(!(isPackageCommandArgv(args)||args[0]===HOST_COMMAND_ARGV||args[0]===SCHEDULE_COMMAND_ARGV&&!scheduleWatch)){if(!scheduleWatch&&args.some(arg=>["--help","-h","--export","--list-models","--list-tips"].includes(arg)))try{let{parseArgs}=await import("./args-
|
|
5
|
+
`,1)}}}import*as nodeModule from"node:module";async function enableStartupCompileCache(){let enable=nodeModule.enableCompileCache;if(typeof enable!="function")return;let args=process.argv.slice(2);if(!isPackageCommandArgv(args)&&args[0]!==CONFIG_COMMAND_ARGV&&(args.includes("--version")||args.includes("-v")))return;let scheduleWatch=!1;if(args[0]===SCHEDULE_COMMAND_ARGV&&args[1]==="run")for(let index=2;index<args.length;index++){let arg=args[index];arg==="--watch"?scheduleWatch=!0:["--exec","--poll-seconds","--timeout-seconds","--concurrency"].includes(arg??"")&&index++}if(!(isPackageCommandArgv(args)||args[0]===HOST_COMMAND_ARGV||args[0]===SCHEDULE_COMMAND_ARGV&&!scheduleWatch)){if(!scheduleWatch&&args.some(arg=>["--help","-h","--export","--list-models","--list-tips"].includes(arg)))try{let{parseArgs}=await import("./args-HFYB6URH.js"),parsed=parseArgs(args);if(parsed.version||parsed.export||parsed.listModels!==void 0||parsed.listTips||parsed.help&&!(parsed.mode==="rpc"&&parsed.multiSession))return}catch{}try{let result=enable();result.directory!==void 0&&process.env.NODE_COMPILE_CACHE===void 0&&(process.env.NODE_COMPILE_CACHE=result.directory)}catch{}}}export{dispatchAgentDirectoryCommand,enableStartupCompileCache};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{emitProviderAccountsChanged,slotsOfOwnKind,subscriptionLimits}from"./chunk-GILDYS3O.js";import{signalSpawnedChild}from"./chunk-KLAX467B.js";import{discoverEnvSlots}from"./chunk-C4AHHZ6P.js";import{CredentialSlotRepository,applicableStoredState}from"./chunk-J7FW7MED.js";import{roundRobinState}from"./chunk-WHQ2QPP5.js";import{applyAccountOrder,isAvailable,isSlotBlocked,orderAccounts,preferHeadroom,withoutOrderedAccount}from"./chunk-J2NGJKXL.js";import{activeModelBlockUntil,modelBlockApplies,pruneModelBlocks}from"./chunk-NJ43NBSP.js";import{accountDisplayName,listSlots,normalizeProviderId,pinSlot,projectSlot,removeSlot,renameSlotDisplayName}from"./chunk-OH5TKHW7.js";import{getAgentDir}from"./chunk-SODMQEHO.js";import{lstat as lstat2}from"node:fs/promises";import{dirname as dirname3,join as join4}from"node:path";function isForeignAuthBlock(slot){let fields=slot;if(fields.store!=="claude-cli"||fields.blockReason!=="auth_error"||fields.signInRequired==="login_expired")return!1;let verdict=fields.authVerdict;return verdict?.dirId!==fields.dirId||verdict?.at!==fields.blockedAt}function withoutForeignAuthBlock(slot){if(!isForeignAuthBlock(slot))return slot;let{blockedUntil:_until,blockReason:_reason,blockedAt:_at,authVerdict:_verdict,...rest}=slot;return rest}function isEnvSlot(slot){return slot.store===void 0}var SENTINEL_OAUTH_FIELDS={access:"claude-sdk-oauth-managed",refresh:"claude-sdk-oauth-managed",expires:41024448e5};function emptyCredential(){return{type:"oauth",...SENTINEL_OAUTH_FIELDS,accounts:[]}}function storedSlots(credential){return credential.accounts??[]}function isListedStoredSlot(slot){let candidate=slot,name=candidate.name;return candidate.store==="claude-cli"&&typeof name=="string"&&name.trim()!==""}function unusableStoredSlotCount(credential){if(credential===null||typeof credential!="object"||!("accounts"in credential))return 0;let stored=credential.accounts;return Array.isArray(stored)?stored.filter(slot=>slot!==null&&typeof slot=="object"&&slot.store==="claude-cli"&&!isListedStoredSlot(slot)).length:0}function listAccounts(credential,env){let slots=storedSlots(credential).filter(isListedStoredSlot).map(withoutForeignAuthBlock);if(env){let state=credential.slotState??{};for(let slot of envSlots(env)){let persisted=state[slot.name];slots.push(persisted?{...slot,...persisted}:slot)}}return slots}var ACCOUNT_NAME_PATTERN=/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;function assertValidAccountName(name){if(!ACCOUNT_NAME_PATTERN.test(name))throw new Error(`Invalid account name '${name}': use letters, digits, '-' or '_', starting with a letter or digit`)}function pinAccount(credential,name){return{...credential,pinned:name}}function envSlots(env){let slots=[],read=suffix=>env(suffix===void 0?"CLAUDE_CODE_OAUTH_TOKEN":`CLAUDE_CODE_OAUTH_TOKEN_${suffix}`),names=[{slot:"env"}];for(let index=2;index<=16;index++)names.push({suffix:String(index),slot:`env-${index}`});for(let{suffix,slot}of names)read(suffix)&&slots.push({name:slot,refresh:"",access:"",expires:0,source:"env"});return slots}function envSlotToken(env,slotName){let match=/^env(?:-(\d+))?$/.exec(slotName);if(!match)return;let suffix=match[1];return env(suffix===void 0?"CLAUDE_CODE_OAUTH_TOKEN":`CLAUDE_CODE_OAUTH_TOKEN_${suffix}`)}import{createHash}from"node:crypto";var DEFAULT_AFFINITY_KEY="claude-sdk-oauth-default";function describeAccountState(state){let until=state.until===void 0?"re-login":new Date(state.until).toISOString(),login=state.reason==="auth_error"?` (run /login anthropic-subscription for ${state.name})`:"";return`${state.name}: ${state.reason} until ${until}${login}`}var AllAccountsBlockedError=class extends Error{constructor(soonestUnblockAt2,blockReason,limitedModel2,unavailableAccount,accounts=[],rateLimitedUntil){let until=soonestUnblockAt2===void 0?void 0:new Date(soonestUnblockAt2).toISOString(),summary=limitedModel2!==void 0&&until!==void 0?`All Anthropic Subscription accounts have hit the usage limit for model ${limitedModel2} until ${until}.`:until===void 0?"All Anthropic Subscription accounts are blocked until re-login.":`All Anthropic Subscription accounts are blocked until ${until}.`;super(accounts.length===0?summary:`${summary} Accounts: ${accounts.map(describeAccountState).join("; ")}.`),this.accounts=accounts,this.limitedModel=limitedModel2,this.name="AllAccountsBlockedError",this.soonestUnblockAt=soonestUnblockAt2,this.blockReason=blockReason,this.unavailableAccount=unavailableAccount,this.rateLimitedUntil=rateLimitedUntil}};function getAffinityKey(options){return options.affinityKey??options.sessionId??DEFAULT_AFFINITY_KEY}function score(key,accountName){return createHash("sha256").update(`${key}\0${accountName}`).digest().readBigUInt64BE(0)}function rendezvousOrder(key,accounts){return[...accounts].map(account=>({account,score:score(key,account.name)})).sort((left,right)=>right.score>left.score?1:right.score<left.score?-1:0).map(({account})=>account)}function isAccountBlocked(account,now){return account.blockedUntil!==void 0&&account.blockedUntil>now}function isBlockedFor(account,now,model){return isAccountBlocked(account,now)||activeModelBlockUntil(account.modelBlocks,model,now)!==void 0}function clearExpiredBlocks(accounts,now=Date.now()){return accounts.map(account=>{let available=account;if(account.blockReason!==void 0&&(account.blockedUntil===void 0||account.blockedUntil<=now)){let{blockedUntil:_blockedUntil,blockReason:_blockReason,blockedAt:_blockedAt,authVerdict:_authVerdict,...rest2}=account;available=rest2}if(available.modelBlocks===void 0)return available;let{modelBlocks,...rest}=available,live=pruneModelBlocks(modelBlocks,now);return live===void 0?rest:{...rest,modelBlocks:live}})}function selectUnblocked(accounts,options,now,roundRobinOffset=0){let pinned=options.pinnedAccount===void 0?void 0:accounts.find(account=>account.name===options.pinnedAccount);if(pinned&&!isBlockedFor(pinned,now,options.model))return pinned;let preferred=options.preferredAccount===void 0?void 0:accounts.find(account=>account.name===options.preferredAccount),usable=orderAccounts(accounts,rendezvousOrder(getAffinityKey(options),accounts),options.accountOrder,options.accountStrategy,roundRobinOffset).filter(account=>!isBlockedFor(account,now,options.model));return preferHeadroom(usable,"anthropic-subscription",subscriptionLimits.snapshot(),now,preferred?.name)[0]}function unblockAt(account,now,model){let accountUntil=account.blockedUntil!==void 0&&account.blockedUntil>now?account.blockedUntil:void 0,modelUntil=activeModelBlockUntil(account.modelBlocks,model,now);return accountUntil===void 0?modelUntil:modelUntil===void 0?accountUntil:Math.max(accountUntil,modelUntil)}function soonestUnblockAt(accounts,now,model){let candidates=accounts.map(account=>unblockAt(account,now,model)).filter(value=>value!==void 0);return candidates.length===0?void 0:Math.min(...candidates)}var OUT_OF_POOL_REASONS=new Set(["billing","org_not_allowed","auth_error"]);function poolRateLimitedUntil(accounts,now,model){let waiting=accounts.filter(account=>!(isAccountBlocked(account,now)&&OUT_OF_POOL_REASONS.has(account.blockReason??""))),resets=[];for(let account of waiting){let rateLimited=isAccountBlocked(account,now)?account.blockReason==="rate_limit":activeModelBlockUntil(account.modelBlocks,model,now)!==void 0,until=unblockAt(account,now,model);if(!rateLimited||until===void 0)return;resets.push(until)}return resets.length===0?void 0:Math.min(...resets)}function limitedModel(accounts,now,model){return accounts.some(account=>!isAccountBlocked(account,now)&&activeModelBlockUntil(account.modelBlocks,model,now)!==void 0)?model:void 0}function selectAccount(accounts,requestedOptions={}){let roundRobin=requestedOptions.accountStrategy==="round-robin"?roundRobinState.session("anthropic-subscription",getAffinityKey(requestedOptions)):void 0,options=roundRobin?.account!==void 0&&requestedOptions.preferredAccount===void 0?{...requestedOptions,preferredAccount:roundRobin.account}:requestedOptions,now=options.now??Date.now(),candidates=accounts,unavailableAccount;if(options.accountFallback===!1){let name=options.pinnedAccount??options.preferredAccount??orderAccounts(accounts,rendezvousOrder(getAffinityKey(options),accounts),options.accountOrder,options.accountStrategy,roundRobin?.offset)[0]?.name;candidates=accounts.filter(account=>account.name===name);let pinnedBy=options.pinnedAccount!==void 0?options.pinSource:void 0;name!==void 0&&(unavailableAccount={name,configured:candidates.length>0,...pinnedBy===void 0?{}:{pinnedBy}})}let selected=selectUnblocked(candidates,options,now,roundRobin?.offset);if(selected)return roundRobin!==void 0&&(roundRobin.account=selected.name),selected;let cleared=clearExpiredBlocks(candidates,now),afterClear=selectUnblocked(cleared,options,now,roundRobin?.offset);if(afterClear)return roundRobin!==void 0&&(roundRobin.account=afterClear.name),afterClear;throw new AllAccountsBlockedError(soonestUnblockAt(candidates,now,options.model),candidates.length>0&&candidates.every(account=>account.blockReason==="auth_error")?"auth_error":void 0,limitedModel(candidates,now,options.model),unavailableAccount,candidates.map(account=>({name:account.name,reason:account.blockReason??(isAccountBlocked(account,now)?"blocked":"model_limit"),until:unblockAt(account,now,options.model)})),poolRateLimitedUntil(candidates,now,options.model))}import{randomBytes}from"node:crypto";import{chmodSync,constants,lstatSync,mkdirSync,readlinkSync,symlinkSync,unlinkSync}from"node:fs";import{lstat,mkdir,open,rm,unlink}from"node:fs/promises";import{homedir}from"node:os";import{join,resolve}from"node:path";import{spawn}from"node:child_process";function isClaudeOauthTokenName(name){return name==="CLAUDE_CODE_OAUTH_TOKEN"||/^CLAUDE_CODE_OAUTH_TOKEN_\d+$/.test(name)}function hasRequestOauthToken(requestEnvironment){return Object.entries(requestEnvironment??{}).some(([name,value])=>isClaudeOauthTokenName(name)&&!!value)}function mergeRequestAuthEnvironment(hostEnvironment,requestEnvironment){let environment={...hostEnvironment},requestTokens=Object.entries(requestEnvironment??{}).filter(([name])=>isClaudeOauthTokenName(name));if(requestTokens.length===0)return environment;for(let name of Object.keys(environment))isClaudeOauthTokenName(name)&&delete environment[name];for(let[name,value]of requestTokens)environment[name]=value;return environment}function stripManagedAuthEnvironment(parent){let{ANTHROPIC_API_KEY:_apiKey,ANTHROPIC_AUTH_TOKEN:_authToken,ANTHROPIC_BASE_URL:_gateway,ANTHROPIC_CUSTOM_HEADERS:_customHeaders,CLAUDE_CODE_OAUTH_TOKEN:_oauthToken,CLAUDE_CODE_USE_BEDROCK:_bedrock,CLAUDE_CODE_USE_FOUNDRY:_foundry,CLAUDE_CODE_USE_GATEWAY:_gatewayMode,CLAUDE_CODE_USE_VERTEX:_vertex,...environment}=parent;for(let name of Object.keys(environment))/^CLAUDE_CODE_OAUTH_TOKEN_\d+$/.test(name)&&delete environment[name],name.startsWith("SENPI_")&&delete environment[name];return environment}var HOST_REDIRECT_NAMES=["CLAUDE_SECURESTORAGE_CONFIG_DIR","CLAUDE_CONFIG_DIR","BROWSER"],INHERITED_CREDENTIAL_DESCRIPTORS=["CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR","CLAUDE_CODE_API_KEY_FILE_DESCRIPTOR"];function buildClaudeCliEnvironment(parent,options){let environment=stripManagedAuthEnvironment(parent);for(let name of[...HOST_REDIRECT_NAMES,...INHERITED_CREDENTIAL_DESCRIPTORS])delete environment[name];return environment.CLAUDE_CONFIG_DIR=options.configDir,environment.NO_COLOR="1",options.browser!==void 0&&(environment.BROWSER=options.browser),environment}function spawnClaudeCli(run,args,browser){return spawn(run.executable,[...args],{cwd:run.configDir,env:buildClaudeCliEnvironment(run.parentEnv??process.env,{configDir:run.configDir,...browser===void 0?{}:{browser}}),stdio:["pipe","pipe","pipe"],windowsHide:!0})}function stopClaudeCli(child,graceMs){if(child.exitCode!==null||child.signalCode!==null)return;signalSpawnedChild(child,"SIGTERM");let escalate=setTimeout(()=>signalSpawnedChild(child,"SIGKILL"),graceMs);escalate.unref?.(),child.once("close",()=>clearTimeout(escalate))}var DEFAULT_SHORT_COMMAND_TIMEOUT_MS=1e4;function runClaudeCliToExit(run,args,timeoutMs=DEFAULT_SHORT_COMMAND_TIMEOUT_MS,signal){return signal?.aborted?Promise.resolve(void 0):new Promise(resolve2=>{let child=spawnClaudeCli(run,args);child.stdin?.end();let stdout="";child.stdout?.setEncoding("utf8"),child.stdout?.on("data",chunk=>{stdout+=chunk}),child.stderr?.resume();let deadline=setTimeout(()=>{signalSpawnedChild(child,"SIGKILL"),resolve2(void 0)},timeoutMs);deadline.unref?.();let onAbort=()=>{clearTimeout(deadline),signalSpawnedChild(child,"SIGKILL"),resolve2(void 0)};signal?.addEventListener("abort",onAbort,{once:!0}),child.once("error",()=>{clearTimeout(deadline),signal?.removeEventListener("abort",onAbort),resolve2(void 0)}),child.once("close",exitCode=>{clearTimeout(deadline),signal?.removeEventListener("abort",onAbort),resolve2({exitCode,stdout})})})}function stringField(record,name){let value=record[name];return typeof value=="string"&&value.length>0?value:void 0}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function parseClaudeCliAuthStatus(stdout,exitCode){let parsed;try{parsed=JSON.parse(stdout)}catch{return{state:"unreadable"}}if(!isRecord(parsed)||typeof parsed.loggedIn!="boolean")return{state:"unreadable"};if(!parsed.loggedIn)return exitCode===0?{state:"unreadable"}:{state:"signed_out"};if(exitCode!==0)return{state:"unreadable"};if(parsed.authMethod!=="claude.ai")return{state:"rejected",reason:"auth_method"};if(parsed.apiProvider!=="firstParty")return{state:"rejected",reason:"api_provider"};let email=stringField(parsed,"email"),orgName=stringField(parsed,"orgName"),subscriptionType=stringField(parsed,"subscriptionType");return{state:"signed_in",profile:{...email===void 0?{}:{email},...orgName===void 0?{}:{orgName},...subscriptionType===void 0?{}:{subscriptionType}}}}async function readClaudeCliAuthStatus(run,timeoutMs){let exit=await runClaudeCliToExit(run,["auth","status","--json"],timeoutMs);return exit===void 0?{state:"unreadable"}:parseClaudeCliAuthStatus(exit.stdout,exit.exitCode)}async function logoutClaudeCli(run,timeoutMs,signal){return(await runClaudeCliToExit(run,["auth","logout"],timeoutMs,signal))?.exitCode===0}var CLAUDE_CLI_SHARED_LINKS=["projects","settings.json","CLAUDE.md","agents","commands","skills","output-styles"],SHARED_FILES=new Set(["settings.json","CLAUDE.md"]),DIR_ID_PATTERN=/^[0-9a-f]{32}$/;function newAccountDirId(){return randomBytes(16).toString("hex")}function isValidAccountDirId(dirId){return DIR_ID_PATTERN.test(dirId)}function accountDirFor(agentDir,dirId){if(!isValidAccountDirId(dirId))throw new Error("Invalid Claude account dir id");return join(agentDir,"anthropic-subscription-claude",dirId)}async function readClaudeCliAccessToken(accountDir,now){let file=join(accountDir,".credentials.json"),parsed;try{let[dirStats,fileStats]=await Promise.all([lstat(accountDir),lstat(file)]);if(!dirStats.isDirectory()||!fileStats.isFile())return;let handle=await open(file,constants.O_RDONLY|(constants.O_NOFOLLOW??0));try{let opened=await handle.stat();if(!opened.isFile()||opened.ino!==fileStats.ino||opened.dev!==fileStats.dev)return;parsed=JSON.parse(await handle.readFile("utf8"))}finally{await handle.close()}let dirAfter=await lstat(accountDir);if(!dirAfter.isDirectory()||dirAfter.ino!==dirStats.ino||dirAfter.dev!==dirStats.dev)return}catch{return}let oauth=typeof parsed=="object"&&parsed!==null?parsed.claudeAiOauth:void 0;if(typeof oauth!="object"||oauth===null)return;let{accessToken,expiresAt}=oauth;if(!(typeof accessToken!="string"||accessToken==="")&&!(typeof expiresAt=="number"&&expiresAt<=now))return accessToken}function claudeCliSharedRoot(env){let inherited=env.CLAUDE_CONFIG_DIR;return inherited?resolve(inherited):join(homedir(),".claude")}function isLink(path){try{return lstatSync(path).isSymbolicLink()}catch{return!1}}function exists(path){try{return lstatSync(path),!0}catch{return!1}}async function lstatOrUndefined(path){try{return await lstat(path)}catch(error){if(error.code==="ENOENT")return;throw error}}function linkEntry(entry,target,path){if(!SHARED_FILES.has(entry)){mkdirSync(target,{recursive:!0}),symlinkSync(target,path,process.platform==="win32"?"junction":"dir");return}if(exists(target))try{symlinkSync(target,path,"file")}catch(error){if(process.platform!=="win32")throw error}}function ensureAccountDir(options){let accountDir=accountDirFor(options.agentDir,options.dirId);mkdirSync(accountDir,{recursive:!0,mode:448}),process.platform!=="win32"&&chmodSync(accountDir,448);for(let entry of CLAUDE_CLI_SHARED_LINKS){let path=join(accountDir,entry),target=join(options.sharedRoot,entry);if(isLink(path)){if(resolve(accountDir,readlinkSync(path))===resolve(target))continue;unlinkSync(path)}else if(exists(path))continue;linkEntry(entry,target,path)}return accountDir}async function removeAccountDir(options){let accountDir=accountDirFor(options.agentDir,options.dirId);if(options.signal?.throwIfAborted(),await lstatOrUndefined(accountDir)===void 0&&await mkdir(accountDir,{recursive:!0,mode:448}),!(await lstatOrUndefined(accountDir))?.isDirectory())return"not_an_account_dir";let signedOut=options.executable!==void 0&&await logoutClaudeCli({executable:options.executable,configDir:accountDir,...options.parentEnv===void 0?{}:{parentEnv:options.parentEnv}},void 0,options.signal).catch(()=>!1);options.signal?.throwIfAborted();for(let entry of CLAUDE_CLI_SHARED_LINKS){let path=join(accountDir,entry);(await lstatOrUndefined(path))?.isSymbolicLink()&&await unlink(path)}return await rm(accountDir,{recursive:!0,force:!0}),signedOut?"removed":"removed_without_sign_out"}import{readFileSync as readFileSync3,statSync}from"node:fs";import{createRequire}from"node:module";import{dirname as dirname2,posix as posix2,win32 as win322}from"node:path";import{createHash as createHash2,randomBytes as randomBytes2}from"crypto";import{chmodSync as chmodSync2,closeSync,constants as fsConstants,fchmodSync,fstatSync,lstatSync as lstatSync2,mkdirSync as mkdirSync2,openSync,readFileSync,readSync,renameSync,unlinkSync as unlinkSync2,writeFileSync}from"fs";import{tmpdir as osTmpdir}from"os";import{basename,join as join2}from"path";function tmpdir(){return process.env.CLAUDE_CODE_TMPDIR?process.env.CLAUDE_CODE_TMPDIR:process.platform==="darwin"?"/tmp":osTmpdir()}function safeTempBase(){let dir=join2(tmpdir(),process.platform==="win32"?"claude-agent-sdk":`claude-agent-sdk-${process.getuid?.()??0}`);if(typeof process.getuid=="function"){mkdirSync2(dir,{recursive:!0,mode:448});let uid=process.getuid(),st=lstatSync2(dir);if(!st.isDirectory())throw new Error(`Temp directory ${dir} is not a directory (may be an attacker-planted symlink). Refusing to use it.`);if(st.uid!==uid)throw new Error(`Temp directory ${dir} is owned by uid ${st.uid}, expected ${uid}. Refusing to use it \u2014 another user may have pre-created it.`);(st.mode&511)!==448&&chmodSync2(dir,448)}else try{mkdirSync2(dir,{recursive:!0,mode:448})}catch{}return dir}function isNoFileId(ino){return ino===0n||ino===-1n||ino===0xffffffffffffffffn||ino===1n<<64n}function isExtractedCopy(file,content){let fd,inoAtPath;try{if(typeof process.getuid=="function")fd=openSync(file,fsConstants.O_RDONLY|fsConstants.O_NOFOLLOW|fsConstants.O_NONBLOCK);else{let atPath=lstatSync2(file,{bigint:!0});if(!atPath.isFile())return!1;inoAtPath=atPath.ino,fd=openSync(file,"r")}let st=fstatSync(fd,{bigint:!0});if(!st.isFile()||Number(st.nlink)!==1||Number(st.size)!==content.length||inoAtPath!==void 0&&!isNoFileId(inoAtPath)&&!isNoFileId(st.ino)&&st.ino!==inoAtPath)return!1;let chunk=Buffer.allocUnsafe(1<<20),offset=0;for(;offset<content.length;){let n=readSync(fd,chunk,0,chunk.length,offset);if(n<=0||!chunk.subarray(0,n).equals(content.subarray(offset,offset+n)))return!1;offset+=n}return!0}catch{return!1}finally{fd!==void 0&&closeSync(fd)}}function extractFromBunfs(embeddedPath){if(!embeddedPath.includes("$bunfs")&&!embeddedPath.includes("~BUN"))return embeddedPath;try{let content=readFileSync(embeddedPath),hash=createHash2("sha256").update(content).digest("hex").slice(0,16),tmpDir=join2(safeTempBase(),`claude-agent-sdk-${hash}`),fileName=basename(embeddedPath),tmpPath=join2(tmpDir,fileName);if(mkdirSync2(tmpDir,{recursive:!0,mode:448}),!lstatSync2(tmpDir).isDirectory())throw new Error("The claude-agent-sdk-<hash> folder under the temp directory is a symlink or not a directory, possibly planted; delete it and restart");if(isExtractedCopy(tmpPath,content))return tmpPath;let tmpFile=join2(tmpDir,`${fileName}.tmp.${process.pid}.${randomBytes2(8).toString("hex")}`),fd=openSync(tmpFile,"wx",448),renamed=!1;try{try{writeFileSync(fd,content),fchmodSync(fd,493)}finally{closeSync(fd)}try{renameSync(tmpFile,tmpPath)}catch(e){if(e.code!=="EEXIST"&&e.code!=="EPERM"&&e.code!=="EBUSY")throw e;if(isExtractedCopy(tmpPath,content))return tmpPath;try{unlinkSync2(tmpPath)}catch(unlinkError){if(unlinkError.code!=="ENOENT")throw unlinkError}try{renameSync(tmpFile,tmpPath)}catch{if(isExtractedCopy(tmpPath,content))return tmpPath;throw e}}return renamed=!0,tmpPath}finally{if(!renamed)try{unlinkSync2(tmpFile)}catch{}}}catch(err){return console.warn(`[claude-agent-sdk] Failed to extract CLI from $bunfs: ${err.message}. Child processes cannot access $bunfs paths \u2014 the CLI will likely fail to start.`),embeddedPath}}import{posix,win32}from"node:path";var WIN32_BATCH_EXTENSIONS=new Set([".bat",".cmd"]),CMD_SHIM_NATIVE_TARGET=/"%~?dp0%?\\([^"%]+?\.exe)"/i;function nativeTargetOfBatchFile(batchPath,deps){let text=deps.readText?.(batchPath),match=text===void 0?null:CMD_SHIM_NATIVE_TARGET.exec(text);if(!match?.[1])return;let target=win32.join(win32.dirname(batchPath),match[1]);return deps.isFile(target)?target:void 0}var WIN32_DEFAULT_PATHEXT=".COM;.EXE;.BAT;.CMD";function namesToProbe(name,platform,pathext){return platform!=="win32"?[name]:(pathext??WIN32_DEFAULT_PATHEXT).split(";").filter(extension=>extension.length>0).map(extension=>extension.toLowerCase()).map(extension=>`${name}${extension}`)}function pathDirectories(platform,path){if(path===void 0)return[];let delimiter=platform==="win32"?";":":";return path.split(delimiter).map(entry=>platform==="win32"?entry.replace(/^"(.*)"$/,"$1"):entry).filter(entry=>entry.length>0)}function findExecutableOnPath(name,deps){let join5=deps.platform==="win32"?win32.join:posix.join,names=namesToProbe(name,deps.platform,deps.env("PATHEXT"));for(let directory of pathDirectories(deps.platform,deps.env("PATH")))for(let candidate of names){let path=join5(directory,candidate);if(!deps.isFile(path))continue;if(deps.platform!=="win32"||!WIN32_BATCH_EXTENSIONS.has(win32.extname(path).toLowerCase()))return path;let target=nativeTargetOfBatchFile(path,deps);if(target!==void 0)return target;deps.onSkip?.(path)}}import{execFileSync}from"node:child_process";import{readFileSync as readFileSync2}from"node:fs";import{dirname,join as join3}from"node:path";import{fileURLToPath}from"node:url";var VERSION_PATTERN=/(\d+)\.(\d+)\.(\d+)/,VERSION_PROBE_TIMEOUT_MS=5e3;function parseClaudeCodeVersion(text){let match=text===void 0?null:VERSION_PATTERN.exec(text);if(match)return[Number(match[1]),Number(match[2]),Number(match[3])]}function isNewerClaudeCodeVersion(candidate,baseline){let left=parseClaudeCodeVersion(candidate),right=parseClaudeCodeVersion(baseline);if(left===void 0||right===void 0)return!1;for(let index=0;index<3;index++)if(left[index]!==right[index])return left[index]>right[index];return!1}var probedVersions=new Map;function probeClaudeCodeVersion(executable){if(probedVersions.has(executable))return probedVersions.get(executable);let version;try{let output=execFileSync(executable,["--version"],{encoding:"utf8",timeout:VERSION_PROBE_TIMEOUT_MS,windowsHide:!0,stdio:["ignore","pipe","ignore"]});version=VERSION_PATTERN.exec(output)?.[0]}catch{version=void 0}return probedVersions.set(executable,version),version}function bundledClaudeCodeVersion(){try{let entry=fileURLToPath(import.meta.resolve("@anthropic-ai/claude-agent-sdk")),manifest=JSON.parse(readFileSync2(join3(dirname(entry),"package.json"),"utf8"));return typeof manifest!="object"||manifest===null||!("claudeCodeVersion"in manifest)?void 0:typeof manifest.claudeCodeVersion=="string"?manifest.claudeCodeVersion:void 0}catch{return}}function claudeCodeExecutableCandidates(platform,arch,preferMusl=!1){let ext=platform==="win32"?".exe":"";if(platform==="linux"){let glibc=`@anthropic-ai/claude-agent-sdk-linux-${arch}/claude${ext}`,musl=`@anthropic-ai/claude-agent-sdk-linux-${arch}-musl/claude${ext}`;return preferMusl?[musl,glibc]:[glibc,musl]}return[`@anthropic-ai/claude-agent-sdk-${platform}-${arch}/claude${ext}`]}function spawnableSpelling(platform,candidate){return platform==="win32"?win322.toNamespacedPath(win322.resolve(candidate)):posix2.resolve(candidate)}function describeClaudeCodeExecutable(deps){let tried=[],accept=candidate=>{let spelled=spawnableSpelling(deps.platform,candidate);return tried.push(spelled),deps.isFile(spelled)?spelled:void 0},done=(executable,source)=>({executable,source,tried}),override=deps.env("CLAUDE_CODE_EXECUTABLE");if(override){let accepted=accept(override);if(accepted!==void 0)return done(accepted,"override")}let candidates=claudeCodeExecutableCandidates(deps.platform,deps.arch,deps.platform==="linux"&&deps.isMusl?.()===!0),bundled=acceptBundled(deps,candidates,accept,tried);if(bundled!==void 0){let newer=newerClaudeOnPath(deps,bundled);return newer===void 0?done(bundled,"bundled"):(tried.push(newer),done(newer,"path"))}let onPath=findExecutableOnPath("claude",{...deps,onSkip:batchFile=>tried.push(`${batchFile} (batch file wrapping no native binary)`)});if(onPath!==void 0){let accepted=accept(onPath);if(accepted!==void 0)return done(accepted,"path")}else tried.push(deps.env("PATH")?"claude on PATH":"claude on PATH (PATH is unset)");return{executable:void 0,source:void 0,tried}}function acceptBundled(deps,candidates,accept,tried){if(deps.isCompiledBun?.()&&deps.extractFromBunfs)for(let candidate of candidates){let extracted;try{extracted=deps.extractFromBunfs(deps.resolve(candidate))}catch{continue}let accepted=accept(extracted);if(accepted!==void 0)return accepted}for(let candidate of candidates){let resolved;try{resolved=deps.resolve(candidate)}catch{tried.push(candidate);continue}let accepted=accept(resolved);if(accepted!==void 0)return accepted}let executableDir=deps.isCompiledBun?.()?deps.executableDir?.():void 0;if(executableDir!==void 0){let path=deps.platform==="win32"?win322:posix2;for(let candidate of candidates){let accepted=accept(path.join(executableDir,"node_modules",...candidate.split("/")));if(accepted!==void 0)return accepted}}}function newerClaudeOnPath(deps,bundled){let versionOf=deps.versionOf;if(versionOf===void 0)return;let onPath=findExecutableOnPath("claude",deps);if(onPath===void 0)return;let spelled=spawnableSpelling(deps.platform,onPath);if(spelled===bundled||!deps.isFile(spelled))return;let pathVersion=versionOf(spelled);if(pathVersion===void 0)return;let bundledVersion=deps.bundledVersion?.()??versionOf(bundled);return isNewerClaudeCodeVersion(pathVersion,bundledVersion)?spelled:void 0}function resolveClaudeCodeExecutable(deps){return resolveClaudeCodeRun(deps).executable}function resolveClaudeCodeRun(deps){let resolution=describeClaudeCodeExecutable(deps);if(resolution.executable!==void 0&&resolution.source!==void 0)return{executable:resolution.executable,source:resolution.source};throw new Error([`Claude Code executable not found for ${deps.platform}-${deps.arch}. Tried:`,...resolution.tried.map(candidate=>` - ${candidate}`),"Reinstall @anthropic-ai/claude-agent-sdk without --omit=optional, install Claude Code so `claude` is on PATH, or set CLAUDE_CODE_EXECUTABLE to the binary."].join(`
|
|
2
|
+
import{emitProviderAccountsChanged,slotsOfOwnKind,subscriptionLimits}from"./chunk-GILDYS3O.js";import{signalSpawnedChild}from"./chunk-KLAX467B.js";import{discoverEnvSlots}from"./chunk-C4AHHZ6P.js";import{CredentialSlotRepository,applicableStoredState}from"./chunk-TCZORL3V.js";import{roundRobinState}from"./chunk-WHQ2QPP5.js";import{applyAccountOrder,isAvailable,isSlotBlocked,orderAccounts,preferHeadroom,withoutOrderedAccount}from"./chunk-LXINMDMX.js";import{activeModelBlockUntil,modelBlockApplies,pruneModelBlocks}from"./chunk-NJ43NBSP.js";import{accountDisplayName,listSlots,normalizeProviderId,pinSlot,projectSlot,removeSlot,renameSlotDisplayName}from"./chunk-OH5TKHW7.js";import{getAgentDir}from"./chunk-SODMQEHO.js";import{lstat as lstat2}from"node:fs/promises";import{dirname as dirname3,join as join4}from"node:path";function isForeignAuthBlock(slot){let fields=slot;if(fields.store!=="claude-cli"||fields.blockReason!=="auth_error"||fields.signInRequired==="login_expired")return!1;let verdict=fields.authVerdict;return verdict?.dirId!==fields.dirId||verdict?.at!==fields.blockedAt}function withoutForeignAuthBlock(slot){if(!isForeignAuthBlock(slot))return slot;let{blockedUntil:_until,blockReason:_reason,blockedAt:_at,authVerdict:_verdict,...rest}=slot;return rest}function isEnvSlot(slot){return slot.store===void 0}var SENTINEL_OAUTH_FIELDS={access:"claude-sdk-oauth-managed",refresh:"claude-sdk-oauth-managed",expires:41024448e5};function emptyCredential(){return{type:"oauth",...SENTINEL_OAUTH_FIELDS,accounts:[]}}function storedSlots(credential){return credential.accounts??[]}function isListedStoredSlot(slot){let candidate=slot,name=candidate.name;return candidate.store==="claude-cli"&&typeof name=="string"&&name.trim()!==""}function unusableStoredSlotCount(credential){if(credential===null||typeof credential!="object"||!("accounts"in credential))return 0;let stored=credential.accounts;return Array.isArray(stored)?stored.filter(slot=>slot!==null&&typeof slot=="object"&&slot.store==="claude-cli"&&!isListedStoredSlot(slot)).length:0}function listAccounts(credential,env){let slots=storedSlots(credential).filter(isListedStoredSlot).map(withoutForeignAuthBlock);if(env){let state=credential.slotState??{};for(let slot of envSlots(env)){let persisted=state[slot.name];slots.push(persisted?{...slot,...persisted}:slot)}}return slots}var ACCOUNT_NAME_PATTERN=/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;function assertValidAccountName(name){if(!ACCOUNT_NAME_PATTERN.test(name))throw new Error(`Invalid account name '${name}': use letters, digits, '-' or '_', starting with a letter or digit`)}function pinAccount(credential,name){return{...credential,pinned:name}}function envSlots(env){let slots=[],read=suffix=>env(suffix===void 0?"CLAUDE_CODE_OAUTH_TOKEN":`CLAUDE_CODE_OAUTH_TOKEN_${suffix}`),names=[{slot:"env"}];for(let index=2;index<=16;index++)names.push({suffix:String(index),slot:`env-${index}`});for(let{suffix,slot}of names)read(suffix)&&slots.push({name:slot,refresh:"",access:"",expires:0,source:"env"});return slots}function envSlotToken(env,slotName){let match=/^env(?:-(\d+))?$/.exec(slotName);if(!match)return;let suffix=match[1];return env(suffix===void 0?"CLAUDE_CODE_OAUTH_TOKEN":`CLAUDE_CODE_OAUTH_TOKEN_${suffix}`)}import{createHash}from"node:crypto";var DEFAULT_AFFINITY_KEY="claude-sdk-oauth-default";function describeAccountState(state){let until=state.until===void 0?"re-login":new Date(state.until).toISOString(),login=state.reason==="auth_error"?` (run /login anthropic-subscription for ${state.name})`:"";return`${state.name}: ${state.reason} until ${until}${login}`}var AllAccountsBlockedError=class extends Error{constructor(soonestUnblockAt2,blockReason,limitedModel2,unavailableAccount,accounts=[],rateLimitedUntil){let until=soonestUnblockAt2===void 0?void 0:new Date(soonestUnblockAt2).toISOString(),summary=limitedModel2!==void 0&&until!==void 0?`All Anthropic Subscription accounts have hit the usage limit for model ${limitedModel2} until ${until}.`:until===void 0?"All Anthropic Subscription accounts are blocked until re-login.":`All Anthropic Subscription accounts are blocked until ${until}.`;super(accounts.length===0?summary:`${summary} Accounts: ${accounts.map(describeAccountState).join("; ")}.`),this.accounts=accounts,this.limitedModel=limitedModel2,this.name="AllAccountsBlockedError",this.soonestUnblockAt=soonestUnblockAt2,this.blockReason=blockReason,this.unavailableAccount=unavailableAccount,this.rateLimitedUntil=rateLimitedUntil}};function getAffinityKey(options){return options.affinityKey??options.sessionId??DEFAULT_AFFINITY_KEY}function score(key,accountName){return createHash("sha256").update(`${key}\0${accountName}`).digest().readBigUInt64BE(0)}function rendezvousOrder(key,accounts){return[...accounts].map(account=>({account,score:score(key,account.name)})).sort((left,right)=>right.score>left.score?1:right.score<left.score?-1:0).map(({account})=>account)}function isAccountBlocked(account,now){return account.blockedUntil!==void 0&&account.blockedUntil>now}function isBlockedFor(account,now,model){return isAccountBlocked(account,now)||activeModelBlockUntil(account.modelBlocks,model,now)!==void 0}function clearExpiredBlocks(accounts,now=Date.now()){return accounts.map(account=>{let available=account;if(account.blockReason!==void 0&&(account.blockedUntil===void 0||account.blockedUntil<=now)){let{blockedUntil:_blockedUntil,blockReason:_blockReason,blockedAt:_blockedAt,authVerdict:_authVerdict,...rest2}=account;available=rest2}if(available.modelBlocks===void 0)return available;let{modelBlocks,...rest}=available,live=pruneModelBlocks(modelBlocks,now);return live===void 0?rest:{...rest,modelBlocks:live}})}function selectUnblocked(accounts,options,now,roundRobinOffset=0){let pinned=options.pinnedAccount===void 0?void 0:accounts.find(account=>account.name===options.pinnedAccount);if(pinned&&!isBlockedFor(pinned,now,options.model))return pinned;let preferred=options.preferredAccount===void 0?void 0:accounts.find(account=>account.name===options.preferredAccount),usable=orderAccounts(accounts,rendezvousOrder(getAffinityKey(options),accounts),options.accountOrder,options.accountStrategy,roundRobinOffset).filter(account=>!isBlockedFor(account,now,options.model));return preferHeadroom(usable,"anthropic-subscription",subscriptionLimits.snapshot(),now,preferred?.name)[0]}function unblockAt(account,now,model){let accountUntil=account.blockedUntil!==void 0&&account.blockedUntil>now?account.blockedUntil:void 0,modelUntil=activeModelBlockUntil(account.modelBlocks,model,now);return accountUntil===void 0?modelUntil:modelUntil===void 0?accountUntil:Math.max(accountUntil,modelUntil)}function soonestUnblockAt(accounts,now,model){let candidates=accounts.map(account=>unblockAt(account,now,model)).filter(value=>value!==void 0);return candidates.length===0?void 0:Math.min(...candidates)}var OUT_OF_POOL_REASONS=new Set(["billing","org_not_allowed","auth_error"]);function poolRateLimitedUntil(accounts,now,model){let waiting=accounts.filter(account=>!(isAccountBlocked(account,now)&&OUT_OF_POOL_REASONS.has(account.blockReason??""))),resets=[];for(let account of waiting){let rateLimited=isAccountBlocked(account,now)?account.blockReason==="rate_limit":activeModelBlockUntil(account.modelBlocks,model,now)!==void 0,until=unblockAt(account,now,model);if(!rateLimited||until===void 0)return;resets.push(until)}return resets.length===0?void 0:Math.min(...resets)}function limitedModel(accounts,now,model){return accounts.some(account=>!isAccountBlocked(account,now)&&activeModelBlockUntil(account.modelBlocks,model,now)!==void 0)?model:void 0}function selectAccount(accounts,requestedOptions={}){let roundRobin=requestedOptions.accountStrategy==="round-robin"?roundRobinState.session("anthropic-subscription",getAffinityKey(requestedOptions)):void 0,options=roundRobin?.account!==void 0&&requestedOptions.preferredAccount===void 0?{...requestedOptions,preferredAccount:roundRobin.account}:requestedOptions,now=options.now??Date.now(),candidates=accounts,unavailableAccount;if(options.accountFallback===!1){let name=options.pinnedAccount??options.preferredAccount??orderAccounts(accounts,rendezvousOrder(getAffinityKey(options),accounts),options.accountOrder,options.accountStrategy,roundRobin?.offset)[0]?.name;candidates=accounts.filter(account=>account.name===name);let pinnedBy=options.pinnedAccount!==void 0?options.pinSource:void 0;name!==void 0&&(unavailableAccount={name,configured:candidates.length>0,...pinnedBy===void 0?{}:{pinnedBy}})}let selected=selectUnblocked(candidates,options,now,roundRobin?.offset);if(selected)return roundRobin!==void 0&&(roundRobin.account=selected.name),selected;let cleared=clearExpiredBlocks(candidates,now),afterClear=selectUnblocked(cleared,options,now,roundRobin?.offset);if(afterClear)return roundRobin!==void 0&&(roundRobin.account=afterClear.name),afterClear;throw new AllAccountsBlockedError(soonestUnblockAt(candidates,now,options.model),candidates.length>0&&candidates.every(account=>account.blockReason==="auth_error")?"auth_error":void 0,limitedModel(candidates,now,options.model),unavailableAccount,candidates.map(account=>({name:account.name,reason:account.blockReason??(isAccountBlocked(account,now)?"blocked":"model_limit"),until:unblockAt(account,now,options.model)})),poolRateLimitedUntil(candidates,now,options.model))}import{randomBytes}from"node:crypto";import{chmodSync,constants,lstatSync,mkdirSync,readlinkSync,symlinkSync,unlinkSync}from"node:fs";import{lstat,mkdir,open,rm,unlink}from"node:fs/promises";import{homedir}from"node:os";import{join,resolve}from"node:path";import{spawn}from"node:child_process";function isClaudeOauthTokenName(name){return name==="CLAUDE_CODE_OAUTH_TOKEN"||/^CLAUDE_CODE_OAUTH_TOKEN_\d+$/.test(name)}function hasRequestOauthToken(requestEnvironment){return Object.entries(requestEnvironment??{}).some(([name,value])=>isClaudeOauthTokenName(name)&&!!value)}function mergeRequestAuthEnvironment(hostEnvironment,requestEnvironment){let environment={...hostEnvironment},requestTokens=Object.entries(requestEnvironment??{}).filter(([name])=>isClaudeOauthTokenName(name));if(requestTokens.length===0)return environment;for(let name of Object.keys(environment))isClaudeOauthTokenName(name)&&delete environment[name];for(let[name,value]of requestTokens)environment[name]=value;return environment}function stripManagedAuthEnvironment(parent){let{ANTHROPIC_API_KEY:_apiKey,ANTHROPIC_AUTH_TOKEN:_authToken,ANTHROPIC_BASE_URL:_gateway,ANTHROPIC_CUSTOM_HEADERS:_customHeaders,CLAUDE_CODE_OAUTH_TOKEN:_oauthToken,CLAUDE_CODE_USE_BEDROCK:_bedrock,CLAUDE_CODE_USE_FOUNDRY:_foundry,CLAUDE_CODE_USE_GATEWAY:_gatewayMode,CLAUDE_CODE_USE_VERTEX:_vertex,...environment}=parent;for(let name of Object.keys(environment))/^CLAUDE_CODE_OAUTH_TOKEN_\d+$/.test(name)&&delete environment[name],name.startsWith("SENPI_")&&delete environment[name];return environment}var HOST_REDIRECT_NAMES=["CLAUDE_SECURESTORAGE_CONFIG_DIR","CLAUDE_CONFIG_DIR","BROWSER"],INHERITED_CREDENTIAL_DESCRIPTORS=["CLAUDE_CODE_OAUTH_TOKEN_FILE_DESCRIPTOR","CLAUDE_CODE_API_KEY_FILE_DESCRIPTOR"];function buildClaudeCliEnvironment(parent,options){let environment=stripManagedAuthEnvironment(parent);for(let name of[...HOST_REDIRECT_NAMES,...INHERITED_CREDENTIAL_DESCRIPTORS])delete environment[name];return environment.CLAUDE_CONFIG_DIR=options.configDir,environment.NO_COLOR="1",options.browser!==void 0&&(environment.BROWSER=options.browser),environment}function spawnClaudeCli(run,args,browser){return spawn(run.executable,[...args],{cwd:run.configDir,env:buildClaudeCliEnvironment(run.parentEnv??process.env,{configDir:run.configDir,...browser===void 0?{}:{browser}}),stdio:["pipe","pipe","pipe"],windowsHide:!0})}function stopClaudeCli(child,graceMs){if(child.exitCode!==null||child.signalCode!==null)return;signalSpawnedChild(child,"SIGTERM");let escalate=setTimeout(()=>signalSpawnedChild(child,"SIGKILL"),graceMs);escalate.unref?.(),child.once("close",()=>clearTimeout(escalate))}var DEFAULT_SHORT_COMMAND_TIMEOUT_MS=1e4;function runClaudeCliToExit(run,args,timeoutMs=DEFAULT_SHORT_COMMAND_TIMEOUT_MS,signal){return signal?.aborted?Promise.resolve(void 0):new Promise(resolve2=>{let child=spawnClaudeCli(run,args);child.stdin?.end();let stdout="";child.stdout?.setEncoding("utf8"),child.stdout?.on("data",chunk=>{stdout+=chunk}),child.stderr?.resume();let deadline=setTimeout(()=>{signalSpawnedChild(child,"SIGKILL"),resolve2(void 0)},timeoutMs);deadline.unref?.();let onAbort=()=>{clearTimeout(deadline),signalSpawnedChild(child,"SIGKILL"),resolve2(void 0)};signal?.addEventListener("abort",onAbort,{once:!0}),child.once("error",()=>{clearTimeout(deadline),signal?.removeEventListener("abort",onAbort),resolve2(void 0)}),child.once("close",exitCode=>{clearTimeout(deadline),signal?.removeEventListener("abort",onAbort),resolve2({exitCode,stdout})})})}function stringField(record,name){let value=record[name];return typeof value=="string"&&value.length>0?value:void 0}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function parseClaudeCliAuthStatus(stdout,exitCode){let parsed;try{parsed=JSON.parse(stdout)}catch{return{state:"unreadable"}}if(!isRecord(parsed)||typeof parsed.loggedIn!="boolean")return{state:"unreadable"};if(!parsed.loggedIn)return exitCode===0?{state:"unreadable"}:{state:"signed_out"};if(exitCode!==0)return{state:"unreadable"};if(parsed.authMethod!=="claude.ai")return{state:"rejected",reason:"auth_method"};if(parsed.apiProvider!=="firstParty")return{state:"rejected",reason:"api_provider"};let email=stringField(parsed,"email"),orgName=stringField(parsed,"orgName"),subscriptionType=stringField(parsed,"subscriptionType");return{state:"signed_in",profile:{...email===void 0?{}:{email},...orgName===void 0?{}:{orgName},...subscriptionType===void 0?{}:{subscriptionType}}}}async function readClaudeCliAuthStatus(run,timeoutMs){let exit=await runClaudeCliToExit(run,["auth","status","--json"],timeoutMs);return exit===void 0?{state:"unreadable"}:parseClaudeCliAuthStatus(exit.stdout,exit.exitCode)}async function logoutClaudeCli(run,timeoutMs,signal){return(await runClaudeCliToExit(run,["auth","logout"],timeoutMs,signal))?.exitCode===0}var CLAUDE_CLI_SHARED_LINKS=["projects","settings.json","CLAUDE.md","agents","commands","skills","output-styles"],SHARED_FILES=new Set(["settings.json","CLAUDE.md"]),DIR_ID_PATTERN=/^[0-9a-f]{32}$/;function newAccountDirId(){return randomBytes(16).toString("hex")}function isValidAccountDirId(dirId){return DIR_ID_PATTERN.test(dirId)}function accountDirFor(agentDir,dirId){if(!isValidAccountDirId(dirId))throw new Error("Invalid Claude account dir id");return join(agentDir,"anthropic-subscription-claude",dirId)}async function readClaudeCliAccessToken(accountDir,now){let file=join(accountDir,".credentials.json"),parsed;try{let[dirStats,fileStats]=await Promise.all([lstat(accountDir),lstat(file)]);if(!dirStats.isDirectory()||!fileStats.isFile())return;let handle=await open(file,constants.O_RDONLY|(constants.O_NOFOLLOW??0));try{let opened=await handle.stat();if(!opened.isFile()||opened.ino!==fileStats.ino||opened.dev!==fileStats.dev)return;parsed=JSON.parse(await handle.readFile("utf8"))}finally{await handle.close()}let dirAfter=await lstat(accountDir);if(!dirAfter.isDirectory()||dirAfter.ino!==dirStats.ino||dirAfter.dev!==dirStats.dev)return}catch{return}let oauth=typeof parsed=="object"&&parsed!==null?parsed.claudeAiOauth:void 0;if(typeof oauth!="object"||oauth===null)return;let{accessToken,expiresAt}=oauth;if(!(typeof accessToken!="string"||accessToken==="")&&!(typeof expiresAt=="number"&&expiresAt<=now))return accessToken}function claudeCliSharedRoot(env){let inherited=env.CLAUDE_CONFIG_DIR;return inherited?resolve(inherited):join(homedir(),".claude")}function isLink(path){try{return lstatSync(path).isSymbolicLink()}catch{return!1}}function exists(path){try{return lstatSync(path),!0}catch{return!1}}async function lstatOrUndefined(path){try{return await lstat(path)}catch(error){if(error.code==="ENOENT")return;throw error}}function linkEntry(entry,target,path){if(!SHARED_FILES.has(entry)){mkdirSync(target,{recursive:!0}),symlinkSync(target,path,process.platform==="win32"?"junction":"dir");return}if(exists(target))try{symlinkSync(target,path,"file")}catch(error){if(process.platform!=="win32")throw error}}function ensureAccountDir(options){let accountDir=accountDirFor(options.agentDir,options.dirId);mkdirSync(accountDir,{recursive:!0,mode:448}),process.platform!=="win32"&&chmodSync(accountDir,448);for(let entry of CLAUDE_CLI_SHARED_LINKS){let path=join(accountDir,entry),target=join(options.sharedRoot,entry);if(isLink(path)){if(resolve(accountDir,readlinkSync(path))===resolve(target))continue;unlinkSync(path)}else if(exists(path))continue;linkEntry(entry,target,path)}return accountDir}async function removeAccountDir(options){let accountDir=accountDirFor(options.agentDir,options.dirId);if(options.signal?.throwIfAborted(),await lstatOrUndefined(accountDir)===void 0&&await mkdir(accountDir,{recursive:!0,mode:448}),!(await lstatOrUndefined(accountDir))?.isDirectory())return"not_an_account_dir";let signedOut=options.executable!==void 0&&await logoutClaudeCli({executable:options.executable,configDir:accountDir,...options.parentEnv===void 0?{}:{parentEnv:options.parentEnv}},void 0,options.signal).catch(()=>!1);options.signal?.throwIfAborted();for(let entry of CLAUDE_CLI_SHARED_LINKS){let path=join(accountDir,entry);(await lstatOrUndefined(path))?.isSymbolicLink()&&await unlink(path)}return await rm(accountDir,{recursive:!0,force:!0}),signedOut?"removed":"removed_without_sign_out"}import{readFileSync as readFileSync3,statSync}from"node:fs";import{createRequire}from"node:module";import{dirname as dirname2,posix as posix2,win32 as win322}from"node:path";import{createHash as createHash2,randomBytes as randomBytes2}from"crypto";import{chmodSync as chmodSync2,closeSync,constants as fsConstants,fchmodSync,fstatSync,lstatSync as lstatSync2,mkdirSync as mkdirSync2,openSync,readFileSync,readSync,renameSync,unlinkSync as unlinkSync2,writeFileSync}from"fs";import{tmpdir as osTmpdir}from"os";import{basename,join as join2}from"path";function tmpdir(){return process.env.CLAUDE_CODE_TMPDIR?process.env.CLAUDE_CODE_TMPDIR:process.platform==="darwin"?"/tmp":osTmpdir()}function safeTempBase(){let dir=join2(tmpdir(),process.platform==="win32"?"claude-agent-sdk":`claude-agent-sdk-${process.getuid?.()??0}`);if(typeof process.getuid=="function"){mkdirSync2(dir,{recursive:!0,mode:448});let uid=process.getuid(),st=lstatSync2(dir);if(!st.isDirectory())throw new Error(`Temp directory ${dir} is not a directory (may be an attacker-planted symlink). Refusing to use it.`);if(st.uid!==uid)throw new Error(`Temp directory ${dir} is owned by uid ${st.uid}, expected ${uid}. Refusing to use it \u2014 another user may have pre-created it.`);(st.mode&511)!==448&&chmodSync2(dir,448)}else try{mkdirSync2(dir,{recursive:!0,mode:448})}catch{}return dir}function isNoFileId(ino){return ino===0n||ino===-1n||ino===0xffffffffffffffffn||ino===1n<<64n}function isExtractedCopy(file,content){let fd,inoAtPath;try{if(typeof process.getuid=="function")fd=openSync(file,fsConstants.O_RDONLY|fsConstants.O_NOFOLLOW|fsConstants.O_NONBLOCK);else{let atPath=lstatSync2(file,{bigint:!0});if(!atPath.isFile())return!1;inoAtPath=atPath.ino,fd=openSync(file,"r")}let st=fstatSync(fd,{bigint:!0});if(!st.isFile()||Number(st.nlink)!==1||Number(st.size)!==content.length||inoAtPath!==void 0&&!isNoFileId(inoAtPath)&&!isNoFileId(st.ino)&&st.ino!==inoAtPath)return!1;let chunk=Buffer.allocUnsafe(1<<20),offset=0;for(;offset<content.length;){let n=readSync(fd,chunk,0,chunk.length,offset);if(n<=0||!chunk.subarray(0,n).equals(content.subarray(offset,offset+n)))return!1;offset+=n}return!0}catch{return!1}finally{fd!==void 0&&closeSync(fd)}}function extractFromBunfs(embeddedPath){if(!embeddedPath.includes("$bunfs")&&!embeddedPath.includes("~BUN"))return embeddedPath;try{let content=readFileSync(embeddedPath),hash=createHash2("sha256").update(content).digest("hex").slice(0,16),tmpDir=join2(safeTempBase(),`claude-agent-sdk-${hash}`),fileName=basename(embeddedPath),tmpPath=join2(tmpDir,fileName);if(mkdirSync2(tmpDir,{recursive:!0,mode:448}),!lstatSync2(tmpDir).isDirectory())throw new Error("The claude-agent-sdk-<hash> folder under the temp directory is a symlink or not a directory, possibly planted; delete it and restart");if(isExtractedCopy(tmpPath,content))return tmpPath;let tmpFile=join2(tmpDir,`${fileName}.tmp.${process.pid}.${randomBytes2(8).toString("hex")}`),fd=openSync(tmpFile,"wx",448),renamed=!1;try{try{writeFileSync(fd,content),fchmodSync(fd,493)}finally{closeSync(fd)}try{renameSync(tmpFile,tmpPath)}catch(e){if(e.code!=="EEXIST"&&e.code!=="EPERM"&&e.code!=="EBUSY")throw e;if(isExtractedCopy(tmpPath,content))return tmpPath;try{unlinkSync2(tmpPath)}catch(unlinkError){if(unlinkError.code!=="ENOENT")throw unlinkError}try{renameSync(tmpFile,tmpPath)}catch{if(isExtractedCopy(tmpPath,content))return tmpPath;throw e}}return renamed=!0,tmpPath}finally{if(!renamed)try{unlinkSync2(tmpFile)}catch{}}}catch(err){return console.warn(`[claude-agent-sdk] Failed to extract CLI from $bunfs: ${err.message}. Child processes cannot access $bunfs paths \u2014 the CLI will likely fail to start.`),embeddedPath}}import{posix,win32}from"node:path";var WIN32_BATCH_EXTENSIONS=new Set([".bat",".cmd"]),CMD_SHIM_NATIVE_TARGET=/"%~?dp0%?\\([^"%]+?\.exe)"/i;function nativeTargetOfBatchFile(batchPath,deps){let text=deps.readText?.(batchPath),match=text===void 0?null:CMD_SHIM_NATIVE_TARGET.exec(text);if(!match?.[1])return;let target=win32.join(win32.dirname(batchPath),match[1]);return deps.isFile(target)?target:void 0}var WIN32_DEFAULT_PATHEXT=".COM;.EXE;.BAT;.CMD";function namesToProbe(name,platform,pathext){return platform!=="win32"?[name]:(pathext??WIN32_DEFAULT_PATHEXT).split(";").filter(extension=>extension.length>0).map(extension=>extension.toLowerCase()).map(extension=>`${name}${extension}`)}function pathDirectories(platform,path){if(path===void 0)return[];let delimiter=platform==="win32"?";":":";return path.split(delimiter).map(entry=>platform==="win32"?entry.replace(/^"(.*)"$/,"$1"):entry).filter(entry=>entry.length>0)}function findExecutableOnPath(name,deps){let join5=deps.platform==="win32"?win32.join:posix.join,names=namesToProbe(name,deps.platform,deps.env("PATHEXT"));for(let directory of pathDirectories(deps.platform,deps.env("PATH")))for(let candidate of names){let path=join5(directory,candidate);if(!deps.isFile(path))continue;if(deps.platform!=="win32"||!WIN32_BATCH_EXTENSIONS.has(win32.extname(path).toLowerCase()))return path;let target=nativeTargetOfBatchFile(path,deps);if(target!==void 0)return target;deps.onSkip?.(path)}}import{execFileSync}from"node:child_process";import{readFileSync as readFileSync2}from"node:fs";import{dirname,join as join3}from"node:path";import{fileURLToPath}from"node:url";var VERSION_PATTERN=/(\d+)\.(\d+)\.(\d+)/,VERSION_PROBE_TIMEOUT_MS=5e3;function parseClaudeCodeVersion(text){let match=text===void 0?null:VERSION_PATTERN.exec(text);if(match)return[Number(match[1]),Number(match[2]),Number(match[3])]}function isNewerClaudeCodeVersion(candidate,baseline){let left=parseClaudeCodeVersion(candidate),right=parseClaudeCodeVersion(baseline);if(left===void 0||right===void 0)return!1;for(let index=0;index<3;index++)if(left[index]!==right[index])return left[index]>right[index];return!1}var probedVersions=new Map;function probeClaudeCodeVersion(executable){if(probedVersions.has(executable))return probedVersions.get(executable);let version;try{let output=execFileSync(executable,["--version"],{encoding:"utf8",timeout:VERSION_PROBE_TIMEOUT_MS,windowsHide:!0,stdio:["ignore","pipe","ignore"]});version=VERSION_PATTERN.exec(output)?.[0]}catch{version=void 0}return probedVersions.set(executable,version),version}function bundledClaudeCodeVersion(){try{let entry=fileURLToPath(import.meta.resolve("@anthropic-ai/claude-agent-sdk")),manifest=JSON.parse(readFileSync2(join3(dirname(entry),"package.json"),"utf8"));return typeof manifest!="object"||manifest===null||!("claudeCodeVersion"in manifest)?void 0:typeof manifest.claudeCodeVersion=="string"?manifest.claudeCodeVersion:void 0}catch{return}}function claudeCodeExecutableCandidates(platform,arch,preferMusl=!1){let ext=platform==="win32"?".exe":"";if(platform==="linux"){let glibc=`@anthropic-ai/claude-agent-sdk-linux-${arch}/claude${ext}`,musl=`@anthropic-ai/claude-agent-sdk-linux-${arch}-musl/claude${ext}`;return preferMusl?[musl,glibc]:[glibc,musl]}return[`@anthropic-ai/claude-agent-sdk-${platform}-${arch}/claude${ext}`]}function spawnableSpelling(platform,candidate){return platform==="win32"?win322.toNamespacedPath(win322.resolve(candidate)):posix2.resolve(candidate)}function describeClaudeCodeExecutable(deps){let tried=[],accept=candidate=>{let spelled=spawnableSpelling(deps.platform,candidate);return tried.push(spelled),deps.isFile(spelled)?spelled:void 0},done=(executable,source)=>({executable,source,tried}),override=deps.env("CLAUDE_CODE_EXECUTABLE");if(override){let accepted=accept(override);if(accepted!==void 0)return done(accepted,"override")}let candidates=claudeCodeExecutableCandidates(deps.platform,deps.arch,deps.platform==="linux"&&deps.isMusl?.()===!0),bundled=acceptBundled(deps,candidates,accept,tried);if(bundled!==void 0){let newer=newerClaudeOnPath(deps,bundled);return newer===void 0?done(bundled,"bundled"):(tried.push(newer),done(newer,"path"))}let onPath=findExecutableOnPath("claude",{...deps,onSkip:batchFile=>tried.push(`${batchFile} (batch file wrapping no native binary)`)});if(onPath!==void 0){let accepted=accept(onPath);if(accepted!==void 0)return done(accepted,"path")}else tried.push(deps.env("PATH")?"claude on PATH":"claude on PATH (PATH is unset)");return{executable:void 0,source:void 0,tried}}function acceptBundled(deps,candidates,accept,tried){if(deps.isCompiledBun?.()&&deps.extractFromBunfs)for(let candidate of candidates){let extracted;try{extracted=deps.extractFromBunfs(deps.resolve(candidate))}catch{continue}let accepted=accept(extracted);if(accepted!==void 0)return accepted}for(let candidate of candidates){let resolved;try{resolved=deps.resolve(candidate)}catch{tried.push(candidate);continue}let accepted=accept(resolved);if(accepted!==void 0)return accepted}let executableDir=deps.isCompiledBun?.()?deps.executableDir?.():void 0;if(executableDir!==void 0){let path=deps.platform==="win32"?win322:posix2;for(let candidate of candidates){let accepted=accept(path.join(executableDir,"node_modules",...candidate.split("/")));if(accepted!==void 0)return accepted}}}function newerClaudeOnPath(deps,bundled){let versionOf=deps.versionOf;if(versionOf===void 0)return;let onPath=findExecutableOnPath("claude",deps);if(onPath===void 0)return;let spelled=spawnableSpelling(deps.platform,onPath);if(spelled===bundled||!deps.isFile(spelled))return;let pathVersion=versionOf(spelled);if(pathVersion===void 0)return;let bundledVersion=deps.bundledVersion?.()??versionOf(bundled);return isNewerClaudeCodeVersion(pathVersion,bundledVersion)?spelled:void 0}function resolveClaudeCodeExecutable(deps){return resolveClaudeCodeRun(deps).executable}function resolveClaudeCodeRun(deps){let resolution=describeClaudeCodeExecutable(deps);if(resolution.executable!==void 0&&resolution.source!==void 0)return{executable:resolution.executable,source:resolution.source};throw new Error([`Claude Code executable not found for ${deps.platform}-${deps.arch}. Tried:`,...resolution.tried.map(candidate=>` - ${candidate}`),"Reinstall @anthropic-ai/claude-agent-sdk without --omit=optional, install Claude Code so `claude` is on PATH, or set CLAUDE_CODE_EXECUTABLE to the binary."].join(`
|
|
3
3
|
`))}var defaultRequire=null,isCompiledBunBinary=import.meta.url.includes("$bunfs")||import.meta.url.includes("~BUN")||import.meta.url.includes("%7EBUN");function isMuslLinuxRuntime(){if(process.platform!=="linux"||typeof process.report?.getReport!="function")return!1;let report=process.report.getReport();return report===null||!("header"in report)||typeof report.header!="object"||report.header===null?!1:!("glibcVersionRuntime"in report.header)||report.header.glibcVersionRuntime===void 0}function readBatchFileText(path){try{return readFileSync3(path,"utf8")}catch{return}}function isRegularFile(path){try{return statSync(path).isFile()}catch{return!1}}var defaultDeps={platform:process.platform,arch:process.arch,env:name=>process.env[name],isFile:isRegularFile,readText:readBatchFileText,isMusl:isMuslLinuxRuntime,isCompiledBun:()=>isCompiledBunBinary,extractFromBunfs,bundledVersion:bundledClaudeCodeVersion,versionOf:probeClaudeCodeVersion,executableDir:()=>dirname2(process.execPath),resolve:spec=>(defaultRequire||(defaultRequire=createRequire(import.meta.resolve("@anthropic-ai/claude-agent-sdk"))),defaultRequire.resolve(spec))},activeDeps=defaultDeps;function defaultExecutableDeps(){return activeDeps}function accountCanServe(account,modelId,now){return account.blocked||account.signedOut===!0?!1:!(account.blockedModels??[]).some(block=>block.until>now&&modelBlockApplies(block.model,modelId))}function objectField(value,key){let found=Object.entries(value).find(([candidate])=>candidate===key)?.[1];return typeof found=="object"&&found!==null&&!Array.isArray(found)?found:void 0}function storedCheck(slot){let check=objectField(slot,"check");if(check===void 0)return;let model=stringField2(check,"model"),outcome=stringField2(check,"outcome"),at=numberField(check,"at");if(model===void 0||at===void 0||outcome!=="ok"&&outcome!=="failed")return;let reason=stringField2(check,"reason");return{model,outcome,...reason===void 0?{}:{reason},at}}function claudeCliSlotFields(slot){if(stringField2(slot,"store")!=="claude-cli")return{};let profile=objectField(slot,"profile")??{},signedInAt=numberField(slot,"signedInAt"),email=stringField2(profile,"email"),orgName=stringField2(profile,"orgName"),subscriptionType=stringField2(profile,"subscriptionType"),check=storedCheck(slot);return{store:"claude-cli",...signedInAt===void 0?{}:{signedInAt},...email===void 0?{}:{email},...orgName===void 0?{}:{orgName},...subscriptionType===void 0?{}:{subscriptionType},...check===void 0?{}:{check},signIn:stringField2(slot,"signInRequired")===void 0?"signed_in":"needs_sign_in"}}var ACCOUNT_NAME_PATTERN2=/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;function assertValidAccountName2(name){if(!ACCOUNT_NAME_PATTERN2.test(name))throw new Error(`Invalid account name '${name}': use letters, digits, '-' or '_', starting with a letter or digit`)}function selectedOAuthAccount(storage,provider,name){assertValidAccountName2(name);let credential=projectSlot(storage.get(provider),name);if(credential?.type!=="oauth")throw new Error(`OAuth account not found: ${name}`);return credential}function pooledFrom(credential){return credential===void 0?void 0:credential}function pinnedName(credential){return credential?.pinned}function numberField(value,key){let found=Object.entries(value).find(([candidate])=>candidate===key)?.[1];return typeof found=="number"?found:void 0}function credentialPoolRepository(storage){let authPath=storage.getStoragePath();return new CredentialSlotRepository(authPath?join4(dirname3(authPath),"credential-pool-state.json"):void 0)}function stringField2(value,key){let found=Object.entries(value).find(([candidate])=>candidate===key)?.[1];return typeof found=="string"?found:void 0}var UNBLOCKED={blocked:!1};function accountBlockedReason(reason){switch(reason){case"auth_error":case"rate_limit":return reason;case"account_disabled":return"disabled";default:return}}function liveBlock(reason,blockedUntil,now){let blockedReason=accountBlockedReason(reason);return blockedReason==="disabled"?{blocked:!0,blockedReason}:blockedUntil===void 0||blockedUntil<=now?UNBLOCKED:{blocked:!0,...blockedReason===void 0?{}:{blockedReason},blockedUntil}}function sidecarBlock(sidecar,now){return sidecar?.usageLimit?{blocked:!0,paused:!0,usageUrl:"https://chatgpt.com/settings/usage"}:sidecar===void 0||isAvailable(sidecar,now)?UNBLOCKED:liveBlock(sidecar?.blockReason,sidecar?.blockedUntil,now)}function storedSlotBlock(provider,slot,now){let blockReason=stringField2(slot,"blockReason"),blockedUntil=numberField(slot,"blockedUntil"),blockedReason=accountBlockedReason(blockReason);return blockedReason==="disabled"?{blocked:!0,blockedReason}:normalizeProviderId(provider)==="anthropic-subscription"&&isForeignAuthBlock(slot)||!(normalizeProviderId(provider)==="anthropic-subscription"?isAccountBlocked({blockedUntil},now):isSlotBlocked({blockReason,blockedUntil},now))?UNBLOCKED:{blocked:!0,...blockedReason===void 0?{}:{blockedReason},...blockedUntil===void 0||blockedUntil<=now?{}:{blockedUntil}}}function slotBlocked(provider,slot,sidecar,now){let fromSidecar=sidecarBlock(sidecar,now),lane=normalizeProviderId(provider);if(lane!=="cursor-cli-oauth"&&lane!=="anthropic-subscription")return fromSidecar;let fromSlot=storedSlotBlock(provider,slot,now);if(fromSlot.blockedReason==="disabled")return fromSlot;if(fromSidecar.blockedReason==="disabled"||!fromSlot.blocked)return fromSidecar;if(!fromSidecar.blocked||fromSlot.blockedUntil===void 0)return fromSlot;let later=(fromSlot.blockedUntil??0)>(fromSidecar.blockedUntil??0)?fromSlot:fromSidecar;return[fromSidecar,fromSlot].some(block=>block.blockedReason==="auth_error")?{...later,blockedReason:"auth_error"}:later}function storedModelBlocks(slot){let found=Object.entries(slot).find(([candidate])=>candidate==="modelBlocks")?.[1];if(found===null||typeof found!="object")return;let entries=Object.entries(found).flatMap(([model,block])=>{let until=block!==null&&typeof block=="object"?numberField(block,"blockedUntil"):void 0;return until===void 0?[]:[[model,{blockedUntil:until}]]});return entries.length===0?void 0:Object.fromEntries(entries)}function blockedModels(now,...sources){let until=new Map;for(let blocks of sources)for(let[model,block]of Object.entries(pruneModelBlocks(blocks,now)??{}))until.set(model,Math.max(until.get(model)??0,block.blockedUntil));return until.size===0?{}:{blockedModels:[...until].map(([model,at])=>({model,until:at}))}}async function getCredentialAccounts(storage,provider,env=process.env,repository,activeName){let accounts=await summarizeCredentialAccounts(provider,storage.get(provider),env,repository??credentialPoolRepository(storage));return normalizeProviderId(provider)!=="chatgpt-subscription"?accounts:accounts.map(account=>account.name===activeName&&!account.blocked&&!account.signedOut&&!account.unused?{...account,active:!0}:account)}async function summarizeCredentialAccounts(provider,stored,env=process.env,repository=new CredentialSlotRepository){let credential=pooledFrom(stored);return applyAccountOrder(credential?.order,await summarizeInStoredOrder(provider,credential,env,repository))}async function summarizeInStoredOrder(provider,credential,env,repository){let now=Date.now(),pinned=pinnedName(credential),summaries=[];if(credential){let state2=await repository.listSlots(provider,"stored"),isClaudeSubscription=normalizeProviderId(provider)==="anthropic-subscription",storedAccounts=isClaudeSubscription?Array.isArray(credential.accounts)?listSlots(credential).filter(isListedStoredSlot):[]:listSlots(credential),usable=new Set(slotsOfOwnKind(credential).map(slot=>slot.name));for(let slot of storedAccounts){let displayName=accountDisplayName(slot.displayName),persisted=state2[slot.name],revisions=await repository.storedSlotRevisions(provider,slot.name,{key:slot.key,access:slot.access,refresh:slot.refresh}),applicable=applicableStoredState(persisted,revisions);summaries.push({name:slot.name,...normalizeProviderId(provider)==="chatgpt-subscription"&&credential.type==="oauth"?{route:slot.route==="siwc"?"siwc":"legacy",...slot.route==="siwc"&&typeof slot.planUsageEnabled=="boolean"?{planUsageEnabled:slot.planUsageEnabled}:{},...slot.signedOut===!0?{signedOut:!0}:{}}:{},...displayName===void 0?{}:{displayName},source:slot.source??"login",...slotBlocked(provider,slot,applicable,now),pinned:pinned===slot.name,...blockedModels(now,applicable?.modelBlocks,storedModelBlocks(slot)),...usable.has(slot.name)?{}:{unused:!0},...isClaudeSubscription?claudeCliSlotFields(slot):{}})}if(normalizeProviderId(provider)!=="anthropic-subscription")return summaries}let state=await repository.listSlots(provider,"env");for(let slot of discoverEnvSlots(provider,name=>env[name])){let persisted=state[slot.name],revision=await repository.envCredentialRevision(slot.envVarName,slot.key),applicable=persisted?.credentialRevision===revision?persisted:void 0;summaries.push({name:slot.name,source:"env",...sidecarBlock(applicable,now),pinned:pinned===slot.name,...blockedModels(now,applicable?.modelBlocks)})}return summaries}async function renameCredentialAccount(storage,provider,name,displayName){await storage.modify(provider,async current=>{if(!current)throw new Error(`No stored credential for provider: ${provider}`);if(current.type==="oauth"&&!Array.isArray(current.accounts)&¤t.access===current.refresh&¤t.access.endsWith("-managed"))throw new Error(`Stored provider account not found: ${name}`);return renameSlotDisplayName(current,name,displayName)}),emitProviderAccountsChanged(provider)}async function pinCredentialAccount(storage,provider,name,env=process.env,repository){let repo=repository??credentialPoolRepository(storage);if(name!==null){assertValidAccountName2(name);let account=(await getCredentialAccounts(storage,provider,env,repo)).find(candidate=>candidate.name===name);if(!account)throw new Error(`Provider account not found: ${name}`);if(account.unused)throw new Error(`Account ${name} holds a login of the other kind and is never used, so it cannot be pinned. To switch ${provider} to it, save it again with /login.`)}await storage.modify(provider,async current=>{if(current===void 0){if(normalizeProviderId(provider)!=="anthropic-subscription"||name===null)throw new Error(`No stored credential for provider: ${provider}`);return pinSlot({type:"oauth",...SENTINEL_OAUTH_FIELDS,accounts:[]},name)}if(name===null){if(pinnedName(current)===void 0)return current;let{pinned:_pinned,...unpinned}={...current,pinned:void 0};return unpinned}return pinSlot(current,name)}),emitProviderAccountsChanged(provider)}async function removeCredentialAccount(storage,provider,name,env=process.env,repository){let repo=repository??credentialPoolRepository(storage),account=(await getCredentialAccounts(storage,provider,env,repo)).find(candidate=>candidate.name===name);if(!account)throw new Error(`Provider account not found: ${name}`);if(account.source==="env")throw new Error(`Environment provider account cannot be removed: ${name}`);let notice=await signOutAndDropSlot(storage,provider,name,env,repo);return emitProviderAccountsChanged(provider),notice===void 0?{}:{notice}}async function dropStoredSlot(storage,provider,name,repo){let removed=removeSlot(await storage.read(provider),name),remaining=removed===void 0?void 0:withoutOrderedAccount(removed,name);remaining===void 0?await storage.delete(provider):await storage.modify(provider,async()=>remaining),await repo.mutateSlotState(provider,"stored",name,()=>{})}async function pathExists(path){try{return await lstat2(path),!0}catch{return!1}}async function signOutAndDropSlot(storage,provider,name,env,repo,signal){let credential=await storage.read(provider);if(credential===void 0)throw new Error(`No stored credential for provider: ${provider}`);let notice;if(normalizeProviderId(provider)==="anthropic-subscription"){let accountDir=claudeCliAccountDir(storage,credential,name),dirExisted=accountDir!==void 0&&await pathExists(accountDir);try{notice=await signOutClaudeCliSlot(storage,credential,name,env,signal)}catch(error){throw dirExisted&&!await pathExists(accountDir)&&await dropStoredSlot(storage,provider,name,repo),error}}return await dropStoredSlot(storage,provider,name,repo),notice}async function signOutClaudeCliSlotsForLogout(storage,provider,env=process.env,signal,slotName){if(normalizeProviderId(provider)!=="anthropic-subscription")return[];let credential=await storage.read(provider);if(credential===void 0)return[];let repo=credentialPoolRepository(storage),notices=[],dropped=!1;try{for(let slot of listSlots(credential)){if(stringField2(slot,"store")!=="claude-cli"||slotName!==void 0&&slot.name!==slotName)continue;signal?.throwIfAborted();let notice=await signOutAndDropSlot(storage,provider,slot.name,env,repo,signal);dropped=!0,notice!==void 0&¬ices.push(notice)}}finally{dropped&&emitProviderAccountsChanged(provider)}return notices}function claudeCliAgentDir(storage){let authPath=storage.getStoragePath();return authPath?dirname3(authPath):getAgentDir()}function claudeCliAccountDir(storage,credential,name){let slot=listSlots(credential).find(candidate=>candidate.name===name);if(slot===void 0||stringField2(slot,"store")!=="claude-cli")return;let dirId=stringField2(slot,"dirId");return dirId!==void 0&&isValidAccountDirId(dirId)?accountDirFor(claudeCliAgentDir(storage),dirId):void 0}async function signOutClaudeCliSlot(storage,credential,name,env,signal){let slot=listSlots(credential).find(candidate=>candidate.name===name);if(slot===void 0||stringField2(slot,"store")!=="claude-cli")return;let dirId=stringField2(slot,"dirId"),agentDir=claudeCliAgentDir(storage);if(dirId===void 0||!isValidAccountDirId(dirId))return`Removed Claude account ${name} without a Claude sign-out: it names no valid account dir.`;let executable;try{executable=resolveClaudeCodeExecutable({...defaultExecutableDeps(),env:key=>env[key]})}catch{executable=void 0}let outcome=await removeAccountDir({agentDir,dirId,executable,parentEnv:env,...signal===void 0?{}:{signal}});if(outcome!=="removed")return outcome==="removed_without_sign_out"?`Removed Claude account ${name}, but the Claude CLI sign-out could not run; its stored sign-in may remain in the Claude CLI's credential store.`:`Removed Claude account ${name} without a Claude sign-out: its account dir is a link or a file, left untouched at ${accountDirFor(agentDir,dirId)}.`}export{isEnvSlot,SENTINEL_OAUTH_FIELDS,emptyCredential,isListedStoredSlot,unusableStoredSlotCount,listAccounts,assertValidAccountName,pinAccount,envSlotToken,hasRequestOauthToken,mergeRequestAuthEnvironment,stripManagedAuthEnvironment,buildClaudeCliEnvironment,spawnClaudeCli,stopClaudeCli,readClaudeCliAuthStatus,logoutClaudeCli,CLAUDE_CLI_SHARED_LINKS,newAccountDirId,isValidAccountDirId,accountDirFor,readClaudeCliAccessToken,claudeCliSharedRoot,ensureAccountDir,removeAccountDir,AllAccountsBlockedError,isBlockedFor,clearExpiredBlocks,selectAccount,resolveClaudeCodeExecutable,resolveClaudeCodeRun,defaultExecutableDeps,accountCanServe,assertValidAccountName2,selectedOAuthAccount,credentialPoolRepository,getCredentialAccounts,summarizeCredentialAccounts,renameCredentialAccount,pinCredentialAccount,removeCredentialAccount,signOutClaudeCliSlotsForLogout};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{require_proper_lockfile}from"./chunk-GZVCRV7I.js";import{appendDebugLogEntry}from"./chunk-
|
|
2
|
+
import{require_proper_lockfile}from"./chunk-GZVCRV7I.js";import{appendDebugLogEntry}from"./chunk-5H43O4MA.js";import{__toESM}from"./chunk-IKOFCODM.js";var import_proper_lockfile=__toESM(require_proper_lockfile(),1);import{createHash}from"node:crypto";import{basename}from"node:path";var FileLockLostError=class extends Error{constructor(path,cause){super(`File lock on ${basename(path)} was lost before the write committed: the lock was removed or reclaimed by another process. The write was skipped.`,{cause}),this.code="ELOCKLOST",this.name="FileLockLostError",this.path=path}};function lockLogFields(path){return{lock:basename(path),lockId:createHash("sha256").update(path).digest("hex").slice(0,12)}}function logLockEvent(header,fields){try{appendDebugLogEntry(header,JSON.stringify(fields))}catch{}}async function lockWithLossHandling(path,options={}){let{onLost,...lockOptions}=options,released=!1,lostError,releaseLock=await import_proper_lockfile.default.lock(path,{...lockOptions,onCompromised:error=>{if(released||lostError!==void 0)return;lostError=error;let fields=lockLogFields(lockOptions.lockfilePath??`${path}.lock`);logLockEvent("file lock lost while held",{event:"file_lock_lost",...fields,code:error.code});try{onLost?.(error)}catch(callbackError){logLockEvent("file lock onLost callback threw",{event:"file_lock_on_lost_threw",...fields,name:callbackError instanceof Error?callbackError.name:typeof callbackError,code:callbackError?.code})}}});return{release:async()=>{released||(released=!0,lostError===void 0&&await releaseLock())},lost:()=>lostError!==void 0,assertHeld:()=>{if(lostError!==void 0)throw new FileLockLostError(path,lostError)}}}export{lockWithLossHandling};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{COMPACT_LEAF_CODE_UNITS,CatalogNodeWriter,CompactComponentRoots,CompactContentStore,CompactReadError,CompactReadLease,CompactSelection,CompactValues,CompactWriteError,DEFAULT_TRANSCRIPT_ANCESTRY_BYTES,EVENT_RESYNC_CAPABILITY,ExtensionTransportOwner,FRAGMENT_MAX_BYTES,McpPresenterAuthority,SECRET_INPUT_FEATURE,SEQUENCED,SocketPeerRecovery,StagedReadError,TransferStaging,TransferStagingError,answerSealedFrame,applyContextPatch,assertRange,attachMcpGrantPresentation,baseRef,catalogDigest,catalogDigester,catalogRootRef,checkSealedAnswer,childRef,createAuthority,declarationReply,decodeCatalogNode,effectStatusRecord,features,isCorrelatedReply,maskOfRoles,nextIncarnation,observeLifecycleDelivery,openFrozenBytes,parseBoundedId,parseContentDigest,parseContentRef,parseDeclaration,parsePageRef,privateRootStat,producePage,protocolId,publishedSessionContext,readAuthority,readRootMarker,refSteps,remoteOriginField,rolesOfMask,rootOwnerState,samePrincipal,secretBinding,secretRequestHash,secretRequestTranscript,sessionQuestionBridges,startAtOrBefore,storeNarrowed,storeRetired,storedBytes,unvouchedCall,withReceipt}from"./chunk-
|
|
2
|
+
import{COMPACT_LEAF_CODE_UNITS,CatalogNodeWriter,CompactComponentRoots,CompactContentStore,CompactReadError,CompactReadLease,CompactSelection,CompactValues,CompactWriteError,DEFAULT_TRANSCRIPT_ANCESTRY_BYTES,EVENT_RESYNC_CAPABILITY,ExtensionTransportOwner,FRAGMENT_MAX_BYTES,McpPresenterAuthority,SECRET_INPUT_FEATURE,SEQUENCED,SocketPeerRecovery,StagedReadError,TransferStaging,TransferStagingError,answerSealedFrame,applyContextPatch,assertRange,attachMcpGrantPresentation,baseRef,catalogDigest,catalogDigester,catalogRootRef,checkSealedAnswer,childRef,createAuthority,declarationReply,decodeCatalogNode,effectStatusRecord,features,isCorrelatedReply,maskOfRoles,nextIncarnation,observeLifecycleDelivery,openFrozenBytes,parseBoundedId,parseContentDigest,parseContentRef,parseDeclaration,parsePageRef,privateRootStat,producePage,protocolId,publishedSessionContext,readAuthority,readRootMarker,refSteps,remoteOriginField,rolesOfMask,rootOwnerState,samePrincipal,secretBinding,secretRequestHash,secretRequestTranscript,sessionQuestionBridges,startAtOrBefore,storeNarrowed,storeRetired,storedBytes,unvouchedCall,withReceipt}from"./chunk-H3VJVKUK.js";import{RPC_ERROR_INVALID_SESSION_CONTEXT,RPC_ERROR_INVALID_SUBSCRIPTION,RPC_ERROR_RESPONSE_UNWRITABLE,RPC_ERROR_SESSION_NOT_ATTACHED,RPC_ERROR_SUBSCRIPTION_LIMIT,RPC_ERROR_UNKNOWN_SUBSCRIPTION,RPC_ERROR_UNSUPPORTED_TRANSPORT}from"./chunk-3IYEGHBI.js";import{carriesMedia,normalizeJsonValue,omitNormalInlineMedia}from"./chunk-XI6THO4F.js";import{BaseContentHash,compactUpdatesEnabled,fingerprintLine,parseSessionEntryLine}from"./chunk-J2I56WLK.js";import{bindPrivateMcpForms,isRecord}from"./chunk-MOVB6H22.js";import{COMPACT_EVENTS_CAPABILITY,MEDIA_PLACEHOLDERS_CAPABILITY,RAISER_NOTICE_CAPABILITY,RPC_METHOD_CLASS,RPC_METHOD_CLASSES_DIGEST,RPC_METHOD_CLASSES_VERSION,classifyRpcMethod,hostGeneration,hostInstanceId}from"./chunk-Z2C5N2LM.js";import{PRESENTER_EXCHANGE_MS,PRESENTER_PARKING_MS}from"./chunk-7WYJAYHH.js";import{RPC_LAUNCH_PROOF_RECORD}from"./chunk-VUY4BZDI.js";import{LegacyRecordDepthError,attachJsonlLineReader,isStackOverflow,serializeJsonLine}from"./chunk-SF4MQDKZ.js";import{external_exports}from"./chunk-KUPQO7MC.js";import{randomUUID}from"node:crypto";import{tmpdir}from"node:os";import{join}from"node:path";var SKIPPED=new Set(["undefined","function","symbol"]),isRecord2=value=>typeof value=="object"&&value!==null&&!Array.isArray(value);function jsonSize(value){let bytes=0,units=0;for(let piece of walk(value))bytes+=Buffer.byteLength(piece),units+=piece.length;return{bytes,units}}function*jsonChunks(value,size){let pending="";for(let piece of walk(value))for(pending+=piece;pending.length>=size;)yield pending.slice(0,size),pending=pending.slice(size);pending.length>0&&(yield pending)}function*walk(value){let stack=[],pending={value};for(;;){if(pending){let current=pending.value;if(pending=void 0,Array.isArray(current))yield"[",stack.push({entries:current,array:!0,index:0});else if(isRecord2(current)){yield"{";let members=Object.entries(current).filter(([,child])=>!SKIPPED.has(typeof child));stack.push({entries:members,array:!1,index:0})}else yield JSON.stringify(current)??"null"}let frame=stack.at(-1);if(!frame)return;if(frame.index===frame.entries.length){stack.pop(),yield frame.array?"]":"}";continue}frame.index>0&&(yield",");let entry=frame.entries[frame.index++];if(frame.array)pending={value:entry};else{let[key,child]=entry;yield`${JSON.stringify(key)}:`,pending={value:child}}}}function stageRecord(staging,record,content){let kind=protocolId("event"),id=protocolId("record");if(typeof content=="string")return staging.stage(kind,id,content.slice(0,-1));let chunks2="chunks"in content?content.chunks:()=>jsonChunks(record,FRAGMENT_MAX_BYTES/2),units="units"in content?content.units:0;if("chunks"in content)for(let chunk of chunks2())units+=chunk.length;let transfer=staging.begin(kind,id,units*2);try{for(let chunk of chunks2())transfer.append(chunk);return transfer.commit()}catch(cause){throw transfer.abort(),cause}}function assertNever(value){throw new Error(`unexpected recovery failure: ${JSON.stringify(value)}`)}function refusalReason(failure){switch(failure.kind){case"storage_unavailable":return failure.kind;case"repair_needed":return failure.reason;default:return assertNever(failure)}}var recovered=value=>({ok:!0,value}),repairNeeded=reason=>({kind:"repair_needed",reason}),storageUnavailable=reason=>({kind:"storage_unavailable",reason}),RecoveryRefusedError=class extends Error{constructor(failure){super(`recovery refused (${failure.kind}: ${failure.reason})`),this.name="RecoveryRefusedError",this.failure=failure}};var COMPACT_RECORD_MAX_BYTES=2*FRAGMENT_MAX_BYTES,PEER_EVENT_LEASES_MAX=32,RELEASED_LEASES_REMEMBERED=256,EVENT_RECORD_COMPONENT="record",EventLeases=class{constructor(peerLimit=PEER_EVENT_LEASES_MAX){this.peers=new Map,this.shared=new WeakMap,this.ended=new Set,this.refusals=new Map,this.open=0,this.minted=0,this.released=0,this.duplicates=0,this.abandoned=0,this.contentBytes=0,this.peerLimit=peerLimit}onLeaseEnd(listener){this.ended.add(listener)}mint(caller,at,record,content){let peer=this.peers.get(caller.socketEpoch)??{held:new Map,released:new Map};if(peer.held.size>=this.peerLimit)return this.refuse("lease_limit");let shared=this.stage(record,content);if(!shared)return this.refuse("storage_unavailable");let{entry}=shared.content.ref,lease=Object.freeze({kind:"event",id:protocolId(`event:${caller.socketEpoch}:${++this.minted}`),admissionId:caller.admissionId,...at,componentRef:EVENT_RECORD_COMPONENT,length:entry.length,digest:entry.digest});shared.holders+=1;let held={lease,sessionId:caller.sessionId,shared,admissions:new Set([caller.admissionId]),reads:new CompactReadLease(()=>this.dispose(peer,held))};return peer.held.set(lease.id,held),this.peers.set(caller.socketEpoch,peer),this.open+=1,{ok:!0,value:lease}}claim(caller,leaseId,admissionId){let held=this.peers.get(caller.socketEpoch)?.held.get(leaseId);return!held||held.sessionId!==caller.sessionId||!held.admissions.has(admissionId)?{ok:!1,failure:repairNeeded("unknown_token")}:recovered(held)}async page(held,componentRef,offset,signal){let staging=this.staging;if(componentRef!==EVENT_RECORD_COMPONENT||!staging)return{ok:!1,failure:storageUnavailable("range")};try{return staging.store.health.needsRecovery&&await staging.store.repair(),recovered(await held.reads.run(async()=>{held.shared.opened??=staging.open(held.shared.content);let bytes=await held.shared.opened;if(signal?.aborted)throw new CompactReadError("aborted");return producePage(bytes,offset,()=>held.reads.assert())}))}catch(cause){if(held.shared.opened=void 0,cause instanceof StagedReadError)return{ok:!1,failure:storageUnavailable("integrity")};if(!(cause instanceof CompactReadError))throw cause;return{ok:!1,failure:cause.reason==="released"?repairNeeded("released"):storageUnavailable(cause.reason)}}}release(caller,leaseId,admissionId){let peer=this.peers.get(caller.socketEpoch),receipt=(outcome,remaining)=>recovered({lease:{kind:"event",id:leaseId},outcome,remaining});if(!peer)return{ok:!1,failure:repairNeeded("unknown_token")};let held=peer.held.get(leaseId);if(held?.sessionId===caller.sessionId&&held.admissions.delete(admissionId))return this.remember(peer,held,admissionId),held.admissions.size>0?receipt("held",held.admissions.size):(this.released+=1,held.reads.release(),receipt("released",0));let done=peer.released.get(leaseId);return done?.sessionId===caller.sessionId&&done.admissions.has(admissionId)?(this.duplicates+=1,receipt("duplicate",held?.admissions.size??0)):{ok:!1,failure:repairNeeded("unknown_token")}}abandon(socketEpoch,leaseId){let held=this.peers.get(socketEpoch)?.held.get(leaseId);!held||!held.reads.release()||(this.abandoned+=1)}forgetAdmission(caller,admissionId){for(let held of this.peers.get(caller.socketEpoch)?.held.values()??[])held.sessionId!==caller.sessionId||!held.admissions.delete(admissionId)||held.admissions.size===0&&this.abandon(caller.socketEpoch,held.lease.id)}forgetPeer(socketEpoch){let peer=this.peers.get(socketEpoch);this.peers.delete(socketEpoch);for(let held of peer?.held.values()??[])held.reads.release()}status(){return{open:this.open,peers:this.peers.size,minted:this.minted,released:this.released,duplicates:this.duplicates,abandoned:this.abandoned,contentBytes:this.contentBytes,refused:Object.fromEntries(this.refusals)}}stage(record,content){let existing=this.shared.get(record);if(existing&&existing.holders>0)return existing;this.staging??=new TransferStaging(new CompactContentStore({dir:join(tmpdir(),`senpi-event-leases-${randomUUID()}`)}));try{let staged=stageRecord(this.staging,record,content);this.staging.adopt(staged);let shared={content:staged,holders:0};return this.contentBytes+=staged.ref.entry.length,this.shared.set(record,shared),shared}catch(cause){if(cause instanceof TransferStagingError||cause instanceof CompactWriteError||cause instanceof CompactReadError){process.stderr.write(`senpi rpc event lease: record not staged (${cause.message})
|
|
3
3
|
`);return}throw cause}}remember(peer,held,admissionId){let admissions=new Set([...peer.released.get(held.lease.id)?.admissions??[],admissionId]);peer.released.set(held.lease.id,{sessionId:held.sessionId,admissions});for(let oldest of peer.released.keys()){if(peer.released.size<=RELEASED_LEASES_REMEMBERED)break;peer.released.delete(oldest)}}dispose(peer,held){peer.held.delete(held.lease.id),this.open-=1,held.shared.holders-=1,held.shared.holders===0&&this.staging&&(this.staging.release(held.shared.content),this.contentBytes-=held.shared.content.ref.entry.length);for(let listener of this.ended)listener(held.lease.id)}refuse(reason){return this.refusals.set(reason,(this.refusals.get(reason)??0)+1),{ok:!1,reason}}};var MESSAGE_KEY="message",COMPACT_DELTA_TYPES=new Set(["text_delta","thinking_delta","toolcall_delta"]);function compactDelta(value){if(value.type!=="message_update"||!Object.hasOwn(value,"message"))return;let event=value.assistantMessageEvent;if(typeof event!="object"||event===null)return;let{type,contentIndex,delta}=event;if(!(typeof type!="string"||!COMPACT_DELTA_TYPES.has(type)||typeof contentIndex!="number"||typeof delta!="string"))return{type,contentIndex,delta}}function demoteToDeltaOnly(value){let event=value.assistantMessageEvent;return{...value,message:null,assistantMessageEvent:{...event,partial:null}}}function toolUpdateKey(value){return value.type==="tool_execution_update"&&typeof value.toolCallId=="string"?`tool:${value.toolCallId}`:void 0}import{AsyncLocalStorage}from"node:async_hooks";var requests=new AsyncLocalStorage;function captureAdmissionReply(){let scope=requests.getStore();return scope&&{id:scope.command.id,admissionId:scope.command.admissionId,peer:scope.peer}}function withAdmissionReply(scope,action){return scope===void 0?action():requests.run({command:scope,peer:scope.peer},action)}function withAdmissionRequest(command,peer,action){return compactUpdatesEnabled()?requests.run({command,peer},action):action()}function replyAdmission(id,peer,routes){let request=requests.getStore();if(!request||request.command.id!==id||request.peer!==peer)return null;let admissionId=request.command.admissionId;return admissionId===void 0?void 0:routes.find(route=>route===admissionId)??null}var BaselineBarrier=class{constructor(cursor,live){this.cancelled=!1,this.ended=!1,this.cursor=cursor,this.live=live}get active(){return!this.cancelled&&!this.ended&&this.live()}cancel(){this.cancelled=!0,this.end()}end(){this.ended||(this.ended=!0,this.cursor.release())}async deliver(write,head){try{if(!this.active)return;let line=await this.cursor.next();for(head!==void 0&&this.active&&await write(head);line!==void 0&&this.active;)await write(line),line=await this.cursor.next()}finally{this.end()}}};var blockedMsTotal=0;function recordLoopBlockedMs(driftMs){driftMs>0&&(blockedMsTotal+=driftMs)}function loopBlockedMark(){return blockedMsTotal}function loopBlockedMsSince(mark){return blockedMsTotal-mark}var SocketEventQueueStallError=class extends Error{constructor(pendingBytes,stallMs){super(`socket event queue stalled: peer did not drain ${pendingBytes} queued bytes within ${stallMs}ms`),this.name="SocketEventQueueStallError",this.pendingBytes=pendingBytes,this.stallMs=stallMs}},SocketEventQueueOverflowError=class extends Error{constructor(queuedBytes,incomingBytes,maxQueueBytes,incomingPreview){super(`socket event queue overflow: ${queuedBytes} queued + ${incomingBytes} incoming > ${maxQueueBytes} (incoming: ${incomingPreview})`),this.name="SocketEventQueueOverflowError",this.queuedBytes=queuedBytes,this.incomingBytes=incomingBytes,this.maxQueueBytes=maxQueueBytes,this.incomingPreview=incomingPreview}};function waitForDrainOrStall(peer,writtenBytes){return new Promise((resolve2,reject)=>{let timer,blockedMark=loopBlockedMark(),cleanup=()=>{clearTimeout(timer),peer.stopped.removeEventListener("abort",onStop)},onStop=()=>{cleanup(),resolve2()},onDeadline=()=>{let blockedMs=loopBlockedMsSince(blockedMark);if(blockedMs>0){blockedMark=loopBlockedMark(),timer=setTimeout(onDeadline,Math.min(blockedMs,peer.stallMs));return}try{if(peer.shedAndPing()){blockedMark=loopBlockedMark(),timer=setTimeout(onDeadline,peer.stallMs);return}}catch(cause){cleanup(),reject(cause);return}let stall=new SocketEventQueueStallError(peer.queuedBytes()+writtenBytes,peer.stallMs);try{peer.sink.writeRaw(`${JSON.stringify({type:"overflow",error:"stalled, resync required"})}
|
|
4
4
|
`)}catch{}cleanup(),reject(stall)};timer=setTimeout(onDeadline,peer.stallMs),peer.stopped.addEventListener("abort",onStop,{once:!0}),peer.sink.waitForBackpressure().then(()=>{cleanup(),resolve2()},cause=>{cleanup(),reject(cause)})})}var isBarrier=item=>"kind"in item,SocketEventQueue=class{constructor(){this.items=[],this.charged=0}get bytes(){return this.charged}get length(){return this.items.length}push(item){this.items.push(item),isBarrier(item)||(this.charged+=item.bytes)}shift(){let item=this.items.shift();return item!==void 0&&!isBarrier(item)&&(this.charged-=item.bytes),item}insertBefore(before,entry){let at=this.items.indexOf(before);at<0?this.items.push(entry):this.items.splice(at,0,entry),this.charged+=entry.bytes}supersede(key){let existing=this.items.find(item=>!isBarrier(item)&&item.key===key);existing===void 0||isBarrier(existing)||(existing.demotedLine!==void 0&&(this.charged-=existing.bytes,existing.line=existing.demotedLine,existing.bytes=Buffer.byteLength(existing.line),this.charged+=existing.bytes,existing.demotedLine=void 0,existing.onWritten?.(!1),existing.onWritten=void 0),existing.key=void 0)}retain(keep){let kept=[];for(let item of this.items)keep(item)?kept.push(item):isBarrier(item)?item.barrier.cancel():item.onWritten?.(!1);this.items=kept,this.charged=kept.reduce((bytes,item)=>isBarrier(item)?bytes:bytes+item.bytes,0)}clear(){for(let item of this.items)isBarrier(item)&&item.barrier.cancel();this.items.length=0,this.charged=0}};var SocketPeerShed=class{constructor(queue,mode){this.queue=queue,this.mode=mode}get isPending(){return this.pending!==void 0}get dropsRecords(){return this.pending!==void 0&&(this.mode==="drop"||this.pending.stale)}cut(reason,snapshot,live){this.queue.retain(item=>!isBarrier(item)&&item.reply);let cut=snapshot(reason);this.pending={kind:"recovery",reason,sessions:cut.sessions,barrier:new BaselineBarrier(cut,live),stale:!1},this.queue.push(this.pending)}supersede(){if(!this.pending||this.pending.stale)return;let recovery=this.pending;this.queue.retain(item=>isBarrier(item)?item===recovery:item.reply),recovery.barrier.cancel(),recovery.stale=!0}admitReply(entry){this.pending&&this.mode==="drop"?this.queue.insertBefore(this.pending,entry):this.queue.push(entry)}take(entry,snapshot,live){return entry.stale&&snapshot&&(entry.barrier=new BaselineBarrier(snapshot(entry.reason,entry.sessions),live)),this.pending===entry&&(this.pending=void 0),entry.barrier}clear(){this.pending=void 0}};var DEFAULT_QUEUE_BYTES=64*1024*1024,DEFAULT_STALL_MS=3e4,SocketEventSinkActor=class{constructor(sink,onFailure,maxQueueBytes=DEFAULT_QUEUE_BYTES,stallMs=DEFAULT_STALL_MS,shedMode="drop"){this.queue=new SocketEventQueue,this.closed=!1,this.recoveryEnabled=!1,this.frameBytes=0,this.stopped=new AbortController,this.sink=sink,this.onFailure=onFailure,this.maxQueueBytes=maxQueueBytes,this.shed=new SocketPeerShed(this.queue,shedMode),this.stallPeer={sink,stallMs,stopped:this.stopped.signal,queuedBytes:()=>this.queue.bytes,shedAndPing:()=>!this.recovery||!this.recoveryEnabled?!1:(this.cutOnce("stall"),this.recovery.ping(),!0)}}enableRecovery(snapshot){this.recoveryEnabled=!0,this.snapshot=snapshot,this.recovery??=new SocketPeerRecovery(line=>this.sink.writeRaw(line)),this.recovery.acknowledge()}disableRecovery(){this.recoveryEnabled=!1,this.recovery?.pending||(this.recovery=void 0)}installBaseline(cursor,live){if(this.closed||cursor.empty||this.shed.dropsRecords){cursor.release();return}this.queue.push({kind:"attach",barrier:new BaselineBarrier(cursor,live)}),this.drain()}enqueue(line,key,onWritten,demotedLine,reply=!1,held,current){if(this.closed)return;let bytes=Buffer.byteLength(line);if(this.shed.dropsRecords){reply?this.admitReply({line,bytes,onWritten,reply,current}):onWritten?.(!1);return}if(key!==void 0&&this.queue.supersede(key),!this.fits(bytes)){if(this.recovery&&this.recoveryEnabled){this.shed.isPending?this.shed.supersede():this.cut("overflow"),reply?this.admitReply({line,bytes,onWritten,reply,current}):onWritten?.(!1),this.drain();return}this.failOverflow(bytes,line);return}this.queue.push({line,bytes,key,demotedLine,onWritten,reply,held:this.shed.isPending?held:void 0,current}),this.drain()}async flush(){for(;this.draining;)await this.draining;if(this.failure!==void 0)throw this.failure}waitForAcceptance(){return Promise.resolve()}close(){this.closed=!0,this.dropQueue(),this.stopped.abort()}fits(bytes){return this.queue.bytes+this.frameBytes+bytes<=this.maxQueueBytes}admitReply(entry){if(!this.fits(entry.bytes)){this.recovery?.loseReply(),entry.onWritten?.(!1);return}this.shed.admitReply(entry),this.drain()}failOverflow(bytes,line){let overflow=new SocketEventQueueOverflowError(this.queue.bytes+this.frameBytes,bytes,this.maxQueueBytes,line.slice(0,120));this.closed=!0,this.dropQueue();try{this.sink.writeRaw(`${JSON.stringify({type:"overflow",error:"overflow, resync required"})}
|
|
5
5
|
`)}catch(cause){this.onFailure(cause)}this.onFailure(overflow)}dropQueue(){this.queue.clear(),this.attempt?.cancel(),this.shed.clear()}cutOnce(reason){this.recovery?.pending||this.cut(reason)}cut(reason){!this.recovery||!this.snapshot||(this.attempt?.cancel(),this.recovery.shed(reason),this.shed.cut(reason,this.snapshot,()=>!this.closed))}async write(line){this.sink.writeRaw(line),await waitForDrainOrStall(this.stallPeer,Buffer.byteLength(line))}async writeFrame(line){let bytes=Buffer.byteLength(line);if(!this.fits(bytes)){this.recovery&&this.recoveryEnabled?this.cutOnce("overflow"):this.failOverflow(bytes,line);return}this.frameBytes=bytes;try{await this.write(line)}finally{this.frameBytes=0}}async deliver(entry){if(entry.kind==="attach"){await this.stream(entry.barrier,line=>this.writeFrame(line));return}if(await waitForDrainOrStall(this.stallPeer,0),this.closed||!this.recovery)return;let barrier=this.shed.take(entry,this.snapshot,()=>!this.closed),gap=this.recovery.takeGap();this.recoveryEnabled||(this.recovery=void 0),await this.stream(barrier,line=>this.write(line),gap)}async stream(barrier,write,head){this.attempt=barrier;try{await barrier.deliver(write,head)}finally{barrier.end(),this.attempt===barrier&&(this.attempt=void 0)}}drain(){return this.draining?this.draining:(this.draining=(async()=>{try{for(;!this.closed&&this.queue.length>0;){let item=this.queue.shift();if(item===void 0)break;if(isBarrier(item)){try{await this.deliver(item)}finally{item.barrier.end()}continue}let written=(item.held?.()??!0)&&(item.current?.()??!0);written&&await this.write(item.line),item.onWritten?.(written)}}catch(cause){this.failure=cause,this.closed=!0,this.dropQueue(),this.onFailure(cause)}})().finally(()=>{this.draining=void 0,!this.closed&&this.queue.length>0&&this.drain()}),this.draining)}};var AdmissionRoutingActor=class extends SocketEventSinkActor{constructor(){super(...arguments),this.admissions=new Set,this.subscriptions=new Map,this.mirrorOwners=new Map,this.pendingMirrors=new Map,this.opened=new Map,this.retireAfterReply=new Map,this.terminal=new Map}close(){this.subscriptions.clear(),this.mirrorOwners.clear();for(let pending of this.pendingMirrors.values())pending.retire();this.pendingMirrors.clear(),this.admissions.clear(),this.opened.clear(),this.retireAfterReply.clear(),this.terminal.clear(),super.close()}remember(sessionId,checkpoints,socketEpoch){let stream=checkpoints.stream({socketEpoch,sessionId}),remembered=stream??this.terminal.get(sessionId),routes=remembered?.routes.filter(id=>this.admissions.has(id)||[...this.mirrorOwners.values()].includes(id))??[];return stream&&routes.length>0&&this.terminal.set(sessionId,{...stream,routes}),remembered?{...remembered,routes}:void 0}route(line,checkpoints,socketEpoch){if(this.admissions.size===0&&this.subscriptions.size===0&&this.mirrorOwners.size===0)return[line];let record=JSON.parse(line);if(typeof record.sessionId!="string"||record.admissionId!==void 0)return[line];if(typeof record.subscriptionId=="string"){let subscription=this.subscriptions.get(record.subscriptionId);return subscription===void 0?[line]:[serializeJsonLine({...record,admissionId:subscription,generation:0})]}let mirrors=record.type==="response"?[]:this.mirrorAdmissions?.(record.sessionId,String(record.type))??[],stream=this.remember(record.sessionId,checkpoints,socketEpoch),terminal=record.type==="session_closed"||record.type==="session_parked",routes=[...new Set([...(stream?.routes??[]).filter(id=>this.admissions.has(id)||terminal&&[...this.mirrorOwners.values()].includes(id)),...mirrors])];if(record.type==="response"&&typeof record.id=="string"){let admissionId=replyAdmission(record.id,this.peer,routes);return admissionId===null?[]:admissionId===void 0?[line]:[serializeJsonLine({...record,admissionId,generation:stream?.generation})]}return routes.length===0?[line]:routes.map(admissionId=>serializeJsonLine({...record,admissionId,generation:stream?.generation}))}deferRetire(id,retire){this.retireAfterReply.set(id,retire)}retireReplied(line){if(this.retireAfterReply.size===0)return;let record=JSON.parse(line);if(record.type!=="response"||typeof record.id!="string")return;let retire=this.retireAfterReply.get(record.id);this.retireAfterReply.delete(record.id),retire?.()}bind(checkpoints,socketEpoch,peer){this.peer=peer;let enqueue=super.enqueue.bind(this);this.enqueue=(line,key,written,demoted,reply,held)=>{let lines2=this.route(line,checkpoints,socketEpoch);if(this.retireReplied(line),lines2.length===0){written?.(!1);return}let replacements=demoted===void 0?void 0:this.route(demoted,checkpoints,socketEpoch),remaining=lines2.length,delivered=!1,receipt=ok=>{delivered||=ok,--remaining===0&&written?.(delivered)};for(let i=0;i<lines2.length;i++){let line2=lines2[i]??"",admissionId=Reflect.get(JSON.parse(line2),"admissionId"),pending=typeof admissionId=="string"?this.pendingMirrors.get(admissionId):void 0,deliver=()=>enqueue(lines2[i]??line2,key===void 0?void 0:`${key}:${i}`,receipt,replacements?.[i],reply,held);pending&&!reply?pending.enqueue(line2,deliver,()=>receipt(!1)):deliver()}}}};var CompactRequiredStreams=class{constructor(fanout,status){this.states=new WeakMap,this.fanout=fanout,this.status=status}sessions(peer){return this.status.requiredSessions(peer)}routes(peer,sessionId,type){let registered=this.fanout.get(peer),actor=registered?.actor;return!(actor instanceof AdmissionRoutingActor)||!registered?[]:[...new Set([...(this.fanout.checkpoints.stream({socketEpoch:registered.socketEpoch,sessionId})?.routes??[]).filter(id=>actor.admissions.has(id)),...this.status.mirrorAdmissions(peer,sessionId,type)])]}prepare(sessionId,record){let lane=this.fanout.acceptance.get(sessionId);if(!(!lane||lane.retired))for(let peer of this.fanout.connectionIds()){if(!this.fanout.connectionHas(peer,COMPACT_EVENTS_CAPABILITY))continue;let registered=this.fanout.get(peer),actor=registered?.actor;if(!(actor instanceof AdmissionRoutingActor)||!registered)continue;let routes=this.status.requiredAdmissions(peer,sessionId),caller={socketEpoch:registered.socketEpoch,sessionId};for(let admissionId of routes){if(this.fanout.checkpoints.stream(caller)?.routes.includes(admissionId))continue;let frozen=this.fanout.checkpoints.freeze({...caller,peer,admissionId,routeKind:"mirror"},lane,!0);if(!frozen.ok){registered.close("checkpoint_unavailable",frozen.failure.reason);continue}}let stream=this.fanout.checkpoints.stream(caller);if(!stream?.routes.length)continue;let states=this.states.get(actor)??new Map;this.states.set(actor,states);let state=states.get(sessionId);if(state?.epoch!==lane.sessionEpoch&&(state={epoch:lane.sessionEpoch,dirty:!1},states.set(sessionId,state),state.seed=this.fanout.checkpoints.tokens().find(t=>t.admission.socketEpoch===caller.socketEpoch&&t.admission.sessionId===sessionId)),!record)continue;let type=String(Reflect.get(record,"type"));if(!(stream.routes.some(id=>actor.admissions.has(id))||this.status.mirrorAdmissions(peer,sessionId,type).length>0)){state.dirty=!0;continue}if(state.dirty){let frozen=this.fanout.checkpoints.freeze({...caller,peer,admissionId:stream.routes[0],routeKind:routes.length?"mirror":"ordinary"},lane);if(!frozen.ok){registered.close("checkpoint_unavailable",frozen.failure.reason);continue}state.seed=frozen.value.token,state.dirty=!1}}}takeSeed(peer,sessionId){let actor=this.fanout.get(peer)?.actor,state=actor instanceof AdmissionRoutingActor?this.states.get(actor)?.get(sessionId):void 0,seed=state?.seed;return state&&(state.seed=void 0),seed}forgetSession(sessionId){for(let peer of this.fanout.connectionIds()){let actor=this.fanout.get(peer)?.actor;actor instanceof AdmissionRoutingActor&&this.states.get(actor)?.delete(sessionId)}}};function causeLine(cause){let text=cause instanceof Error?`${cause.name}: ${cause.message}`:String(cause);return text.split(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{signalSpawnedChild}from"./chunk-KLAX467B.js";import{getShellConfig}from"./chunk-33MZJTQ3.js";import{rememberResolvedReferenceValue}from"./chunk-DLAY7CIU.js";import{Compile}from"./chunk-WXYMAUFX.js";import{ConfigReferenceError}from"./chunk-OH5TKHW7.js";import{sanitizeProviderDiagnostic}from"./chunk-JGKH3D6W.js";import{attachProviderDiagnostic}from"./chunk-3SASTB6Y.js";import{typebox_exports}from"./chunk-MIENF2YK.js";var PRE_COMMIT_EVENT_TYPES=new Set(["start","text_start","thinking_start","toolcall_start"]);function isCommittedRotationOutput(event){return!PRE_COMMIT_EVENT_TYPES.has(event.type)}function isRotationStreamStart(event){return event.type==="start"}function rotationErrorFromEvent(event){if(event.type!=="error")return;let failure=new Error(event.error.errorMessage??"provider stream error");attachProviderDiagnostic(failure,sanitizeProviderDiagnostic(event.error.providerDiagnostic));let status=event.error.providerDiagnostic?.httpStatus;return status===void 0?failure:Object.assign(failure,{status})}var FileReferenceSchema=typebox_exports.Object({$file:typebox_exports.String({minLength:1})},{additionalProperties:!1}),EnvReferenceSchema=typebox_exports.Object({$env:typebox_exports.String({pattern:"^[A-Za-z_][A-Za-z0-9_]*$"})},{additionalProperties:!1}),ConcatReferenceSchema=typebox_exports.Object({$concat:typebox_exports.Array(typebox_exports.Union([typebox_exports.String(),FileReferenceSchema,EnvReferenceSchema]))},{additionalProperties:!1}),ConfigReferenceSchema=typebox_exports.Union([FileReferenceSchema,EnvReferenceSchema,ConcatReferenceSchema]),ConfigValueSchema=typebox_exports.Union([typebox_exports.String(),ConfigReferenceSchema]),NonemptyConfigValueSchema=typebox_exports.Union([typebox_exports.String({minLength:1}),ConfigReferenceSchema]),validateReference=Compile(ConfigReferenceSchema);function isConfigReference(value){return validateReference.Check(value)}function assertConfigValue(value,field){if(typeof value!="string"&&!isConfigReference(value))throw new ConfigReferenceError(field,value,"malformed")}function sleep(ms,signal){return new Promise((resolve,reject)=>{if(signal?.aborted){reject(new Error("Aborted"));return}let timeout=setTimeout(resolve,ms);signal?.addEventListener("abort",()=>{clearTimeout(timeout),reject(new Error("Aborted"))})})}var warnedVariables=new Set;function warnOpaqueConfigEnvironment(name,value){value!==void 0&&/\{(?:file|env):/.test(value)&&!warnedVariables.has(name)&&(warnedVariables.add(name),console.warn(`${name}: environment value contains reference-looking text; inserted literally`))}function warnMissingConfigEnvironment(name){warnedVariables.has(name)||(warnedVariables.add(name),console.warn(`${name}: configuration environment variable is unset`))}import{dirname as dirname2}from"node:path";import{constants}from"node:fs";import{lstat,open,readlink}from"node:fs/promises";import{homedir}from"node:os";import{dirname,isAbsolute,join,parse,sep}from"node:path";var MAX_BYTES=65536,readableWarnings=new Set;function fail(input,reason){throw new ConfigReferenceError(input.field,input.reference,reason)}function checkOwner(input,stat){process.platform!=="win32"&&stat.uid!==0&&stat.uid!==process.getuid?.()&&fail(input,"unsafe-owner")}function checkWritable(input,stat,ancestor){process.platform==="win32"||stat.isSymbolicLink()||(stat.mode&18)===0||ancestor&&stat.isDirectory()&&(stat.mode&512)!==0||fail(input,"unsafe-permissions")}function sameFile(left,right){return left.dev===right.dev&&left.ino===right.ino}function absolutePath(input){let declared=input.reference.$file;return declared.startsWith("~/")||process.platform==="win32"&&declared.startsWith("~\\")?`${homedir()}${sep}${declared.slice(2)}`:isAbsolute(declared)?declared:`${input.baseDir}${sep}${declared}`}async function walk(input){let absolute=absolutePath(input),current=parse(absolute).root,pending=absolute.slice(current.length).split(sep).filter(Boolean),stat=await lstat(current),links=0;checkOwner(input,stat),checkWritable(input,stat,!0);for(let part=pending.shift();part!==void 0;part=pending.shift()){if(part===".")continue;stat.isDirectory()||fail(input,"non-regular");let next=part===".."?dirname(current):join(current,part),nextStat=await lstat(next);if(checkOwner(input,nextStat),process.platform!=="win32"&&(stat.mode&18)!==0&&!nextStat.isSymbolicLink()&&(nextStat.mode&18)!==0&&fail(input,"unsafe-permissions"),checkWritable(input,nextStat,pending.length>0),nextStat.isSymbolicLink()){++links>40&&fail(input,"unreadable");let target=await readlink(next);sameFile(nextStat,await lstat(next))||fail(input,"changed");let targetPath=isAbsolute(target)?target:`${current}${sep}${target}`;current=parse(targetPath).root,pending=[...targetPath.slice(current.length).split(sep).filter(Boolean),...pending],stat=await lstat(current),checkOwner(input,stat),checkWritable(input,stat,!0)}else current=next,stat=nextStat}return stat.isFile()||fail(input,"non-regular"),{path:current,stat}}async function readConfigReferenceFile(input){try{let walked=await walk(input),flags=constants.O_RDONLY|(constants.O_NOFOLLOW??0)|(constants.O_NONBLOCK??0),handle=await open(walked.path,flags);try{let stat=await handle.stat();sameFile(walked.stat,stat)||fail(input,"changed"),stat.isFile()||fail(input,"non-regular"),checkOwner(input,stat),checkWritable(input,stat,!1),stat.size>MAX_BYTES&&fail(input,"oversize");let buffer=Buffer.alloc(MAX_BYTES+1),length=0;for(;length<buffer.length;){let{bytesRead}=await handle.read(buffer,length,buffer.length-length,length);if(bytesRead===0)break;length+=bytesRead}length>MAX_BYTES&&fail(input,"oversize");let value;try{value=new TextDecoder("utf-8",{fatal:!0}).decode(buffer.subarray(0,length)).trim()}catch{fail(input,"invalid-utf8")}return value.length===0&&fail(input,"empty"),process.platform!=="win32"&&(stat.mode&36)!==0&&!readableWarnings.has(walked.path)&&(readableWarnings.add(walked.path),console.warn(`${input.field}: reference file is readable by other users`)),value}finally{await handle.close()}}catch(error){if(error instanceof ConfigReferenceError)throw error;let code=Reflect.get(Object(error),"code");fail(input,code==="ENOENT"||code==="ENOTDIR"?"missing":"unreadable")}}var origins=new WeakMap;function rememberConfigReferenceOrigin(value,context){typeof value!="string"&&origins.set(value,context)}function configReferenceContext(value,context){return context??(typeof value=="string"?void 0:origins.get(value))}function assertConfigReferenceAuthority(value,context){if(typeof value=="string")return;let source=configReferenceContext(value,context);if(source?.authority!=="trusted")throw new ConfigReferenceError(source?.field??"configuration value",value,"forbidden");assertConfigValue(value,source.field)}async function resolveConfigReference(value,context,env){let source=configReferenceContext(value,context);if(assertConfigReferenceAuthority(value,source),source===void 0)throw new ConfigReferenceError("configuration value",value,"forbidden");if("$file"in value){let text=await readConfigReferenceFile({field:source.field,reference:value,baseDir:source.baseDir??dirname2(source.origin)});return rememberResolvedReferenceValue(text),text}if("$env"in value){let result2=(env??source.env??process.env)[value.$env];if(warnOpaqueConfigEnvironment(value.$env,result2),result2===void 0)throw new ConfigReferenceError(source.field,value,"unset");if(result2==="")throw new ConfigReferenceError(source.field,value,"empty");return rememberResolvedReferenceValue(result2),result2}let parts=[];for(let part of value.$concat)parts.push(typeof part=="string"?part:await resolveConfigReference(part,source,env));let result=parts.join("");if(result==="")throw new ConfigReferenceError(source.field,value,"empty");return rememberResolvedReferenceValue(result),result}import{spawn}from"child_process";var COMMAND_EXECUTION_MAX_ATTEMPTS=3,COMMAND_EXECUTION_BACKOFF_MS=[250,1e3],COMMAND_TIMEOUT_MS=1e4,COMMAND_MAX_OUTPUT_BYTES=1024*1024;function runCommandProcess(file,args,options){return new Promise(resolveOutcome=>{let spawnOptions={shell:options.shell,windowsHide:!0,...options.env===void 0?{}:{env:{...process.env,...options.env}}},child=options.stdin===void 0?spawn(file,[...args],{...spawnOptions,stdio:["ignore","pipe","ignore"]}):spawn(file,[...args],{...spawnOptions,stdio:["pipe","pipe","ignore"]}),stdout="",settled=!1,finish=outcome=>{settled||(settled=!0,clearTimeout(timer),resolveOutcome(outcome))},timer=setTimeout(()=>{signalSpawnedChild(child,"SIGTERM"),child.unref(),finish({executed:!0,value:void 0})},COMMAND_TIMEOUT_MS);child.stdout.setEncoding("utf-8"),child.stdout.on("data",chunk=>{stdout+=chunk,!(stdout.length<=COMMAND_MAX_OUTPUT_BYTES)&&(signalSpawnedChild(child,"SIGTERM"),finish({executed:!0,value:void 0}))}),child.on("error",error=>finish({executed:error.code!=="ENOENT",value:void 0})),child.on("close",code=>{let value=stdout.trim();finish({executed:!0,value:code===0&&value?value:void 0})}),child.stdin?.end(options.stdin)})}async function executeWithConfiguredShell(command,env){try{let{shell,args,commandTransport}=getShellConfig(),commandFromStdin=commandTransport==="stdin";return await runCommandProcess(shell,commandFromStdin?args:[...args,command],{shell:!1,...commandFromStdin?{stdin:command}:{},...env===void 0?{}:{env}})}catch{return{executed:!1,value:void 0}}}async function executeCommandOnce(command,env){if(process.platform==="win32"){let configured=await executeWithConfiguredShell(command,env);if(configured.executed)return configured.value}return(await runCommandProcess(command,[],{shell:!0,...env===void 0?{}:{env}})).value}async function runConfigCommand(commandConfig,env){let command=commandConfig.slice(1);for(let attempt=0;attempt<COMMAND_EXECUTION_MAX_ATTEMPTS;attempt++){let value=await executeCommandOnce(command,env);if(value!==void 0)return value;let backoffMs=COMMAND_EXECUTION_BACKOFF_MS[attempt];backoffMs!==void 0&&await sleep(backoffMs)}}var commandResultCache=new Map,ENV_VAR_NAME_RE=/^[A-Za-z_][A-Za-z0-9_]*$/,ENV_VAR_NAME_PREFIX_RE=/^[A-Za-z_][A-Za-z0-9_]*/;function appendLiteral(parts,value){if(!value)return;let previousPart=parts[parts.length-1];if(previousPart?.type==="literal"){previousPart.value+=value;return}parts.push({type:"literal",value})}function parseConfigValueTemplate(config){let parts=[],index=0;for(;index<config.length;){let dollarIndex=config.indexOf("$",index);if(dollarIndex<0){appendLiteral(parts,config.slice(index));break}appendLiteral(parts,config.slice(index,dollarIndex));let nextChar=config[dollarIndex+1];if(nextChar==="$"||nextChar==="!"){appendLiteral(parts,nextChar),index=dollarIndex+2;continue}if(nextChar==="{"){let endIndex=config.indexOf("}",dollarIndex+2);if(endIndex<0){appendLiteral(parts,"$"),index=dollarIndex+1;continue}let name=config.slice(dollarIndex+2,endIndex);ENV_VAR_NAME_RE.test(name)?parts.push({type:"env",name}):appendLiteral(parts,config.slice(dollarIndex,endIndex+1)),index=endIndex+1;continue}let match=config.slice(dollarIndex+1).match(ENV_VAR_NAME_PREFIX_RE);if(match){parts.push({type:"env",name:match[0]}),index=dollarIndex+1+match[0].length;continue}appendLiteral(parts,"$"),index=dollarIndex+1}return parts}function parseConfigValueReference(config){return config.startsWith("!")?{type:"command",config}:{type:"template",parts:parseConfigValueTemplate(config)}}function resolveEnvConfigValue(name,env){let value=env?.[name]||process.env[name]||void 0;return warnOpaqueConfigEnvironment(name,value),value}function getTemplateEnvVarNames(parts){let names=[];for(let part of parts)part.type!=="env"||names.includes(part.name)||names.push(part.name);return names}function resolveTemplate(parts,env){let resolved="";for(let part of parts){if(part.type==="literal"){resolved+=part.value;continue}let envValue=resolveEnvConfigValue(part.name,env);if(envValue===void 0){warnMissingConfigEnvironment(part.name);return}resolved+=envValue}return resolved}function getConfigValueEnvVarNames(config){if(typeof config!="string")return"$env"in config?[config.$env]:"$concat"in config?[...new Set(config.$concat.flatMap(part=>typeof part!="string"&&"$env"in part?[part.$env]:[]))]:[];let reference=parseConfigValueReference(config);return reference.type==="template"?getTemplateEnvVarNames(reference.parts):[]}function getMissingConfigValueEnvVarNames(config,env){return getConfigValueEnvVarNames(config).filter(name=>resolveEnvConfigValue(name,env)===void 0)}function isCommandConfigValue(config){return typeof config=="string"&&parseConfigValueReference(config).type==="command"}function isConfigValueConfigured(config,env){return typeof config!="string"||getMissingConfigValueEnvVarNames(config,env).length===0}function resolveConfigValue(config,env,context){if(typeof config!="string")return resolveConfigReference(config,context,env);let reference=parseConfigValueReference(config);return reference.type==="command"?env===void 0?executeCommand(reference.config):runConfigCommand(reference.config,env):Promise.resolve(resolveTemplate(reference.parts,env))}function executeCommand(commandConfig){let cached=commandResultCache.get(commandConfig);if(cached)return cached;let result=runConfigCommand(commandConfig);return commandResultCache.set(commandConfig,result),result}function resolveConfigValueUncached(config,env,context){if(typeof config!="string")return resolveConfigReference(config,context,env);let reference=parseConfigValueReference(config);return reference.type==="command"?runConfigCommand(reference.config,env):Promise.resolve(resolveTemplate(reference.parts,env))}async function resolveConfigValueOrThrow(config,description,env,context){if(typeof config!="string")return resolveConfigReference(config,context,env);let resolvedValue=await resolveConfigValueUncached(config,env,context);if(resolvedValue!==void 0)return resolvedValue;let reference=parseConfigValueReference(config);if(reference.type==="command")throw new Error(`Failed to resolve ${description} from shell command: ${reference.config.slice(1)}`);if(reference.type==="template"){let missingEnvVars=getMissingConfigValueEnvVarNames(config,env);if(missingEnvVars.length===1)throw new Error(`Failed to resolve ${description} from environment variable: ${missingEnvVars[0]}`);if(missingEnvVars.length>1)throw new Error(`Failed to resolve ${description} from environment variables: ${missingEnvVars.join(", ")}`)}throw new Error(`Failed to resolve ${description}`)}async function resolveHeadersOrThrow(headers,description,env){if(!headers)return;for(let value of Object.values(headers))assertConfigReferenceAuthority(value);let resolved={};for(let[key,value]of Object.entries(headers))resolved[key]=await resolveConfigValueOrThrow(value,`${description} header "${key}"`,env);return Object.keys(resolved).length>0?resolved:void 0}export{ConfigValueSchema,NonemptyConfigValueSchema,isConfigReference,warnOpaqueConfigEnvironment,warnMissingConfigEnvironment,rememberConfigReferenceOrigin,assertConfigReferenceAuthority,resolveConfigReference,sleep,getConfigValueEnvVarNames,isCommandConfigValue,isConfigValueConfigured,resolveConfigValue,resolveConfigValueOrThrow,resolveHeadersOrThrow,isCommittedRotationOutput,isRotationStreamStart,rotationErrorFromEvent};
|
|
2
|
+
import{signalSpawnedChild}from"./chunk-KLAX467B.js";import{getShellConfig}from"./chunk-B4WD5XHP.js";import{rememberResolvedReferenceValue}from"./chunk-NQKCJQHB.js";import{Compile}from"./chunk-QX7WD3IM.js";import{ConfigReferenceError}from"./chunk-OH5TKHW7.js";import{sanitizeProviderDiagnostic}from"./chunk-JGKH3D6W.js";import{attachProviderDiagnostic}from"./chunk-3SASTB6Y.js";import{typebox_exports}from"./chunk-MIENF2YK.js";var PRE_COMMIT_EVENT_TYPES=new Set(["start","text_start","thinking_start","toolcall_start"]);function isCommittedRotationOutput(event){return!PRE_COMMIT_EVENT_TYPES.has(event.type)}function isRotationStreamStart(event){return event.type==="start"}function rotationErrorFromEvent(event){if(event.type!=="error")return;let failure=new Error(event.error.errorMessage??"provider stream error");attachProviderDiagnostic(failure,sanitizeProviderDiagnostic(event.error.providerDiagnostic));let status=event.error.providerDiagnostic?.httpStatus;return status===void 0?failure:Object.assign(failure,{status})}var FileReferenceSchema=typebox_exports.Object({$file:typebox_exports.String({minLength:1})},{additionalProperties:!1}),EnvReferenceSchema=typebox_exports.Object({$env:typebox_exports.String({pattern:"^[A-Za-z_][A-Za-z0-9_]*$"})},{additionalProperties:!1}),ConcatReferenceSchema=typebox_exports.Object({$concat:typebox_exports.Array(typebox_exports.Union([typebox_exports.String(),FileReferenceSchema,EnvReferenceSchema]))},{additionalProperties:!1}),ConfigReferenceSchema=typebox_exports.Union([FileReferenceSchema,EnvReferenceSchema,ConcatReferenceSchema]),ConfigValueSchema=typebox_exports.Union([typebox_exports.String(),ConfigReferenceSchema]),NonemptyConfigValueSchema=typebox_exports.Union([typebox_exports.String({minLength:1}),ConfigReferenceSchema]),validateReference=Compile(ConfigReferenceSchema);function isConfigReference(value){return validateReference.Check(value)}function assertConfigValue(value,field){if(typeof value!="string"&&!isConfigReference(value))throw new ConfigReferenceError(field,value,"malformed")}function sleep(ms,signal){return new Promise((resolve,reject)=>{if(signal?.aborted){reject(new Error("Aborted"));return}let timeout=setTimeout(resolve,ms);signal?.addEventListener("abort",()=>{clearTimeout(timeout),reject(new Error("Aborted"))})})}var warnedVariables=new Set;function warnOpaqueConfigEnvironment(name,value){value!==void 0&&/\{(?:file|env):/.test(value)&&!warnedVariables.has(name)&&(warnedVariables.add(name),console.warn(`${name}: environment value contains reference-looking text; inserted literally`))}function warnMissingConfigEnvironment(name){warnedVariables.has(name)||(warnedVariables.add(name),console.warn(`${name}: configuration environment variable is unset`))}import{dirname as dirname2}from"node:path";import{constants}from"node:fs";import{lstat,open,readlink}from"node:fs/promises";import{homedir}from"node:os";import{dirname,isAbsolute,join,parse,sep}from"node:path";var MAX_BYTES=65536,readableWarnings=new Set;function fail(input,reason){throw new ConfigReferenceError(input.field,input.reference,reason)}function checkOwner(input,stat){process.platform!=="win32"&&stat.uid!==0&&stat.uid!==process.getuid?.()&&fail(input,"unsafe-owner")}function checkWritable(input,stat,ancestor){process.platform==="win32"||stat.isSymbolicLink()||(stat.mode&18)===0||ancestor&&stat.isDirectory()&&(stat.mode&512)!==0||fail(input,"unsafe-permissions")}function sameFile(left,right){return left.dev===right.dev&&left.ino===right.ino}function absolutePath(input){let declared=input.reference.$file;return declared.startsWith("~/")||process.platform==="win32"&&declared.startsWith("~\\")?`${homedir()}${sep}${declared.slice(2)}`:isAbsolute(declared)?declared:`${input.baseDir}${sep}${declared}`}async function walk(input){let absolute=absolutePath(input),current=parse(absolute).root,pending=absolute.slice(current.length).split(sep).filter(Boolean),stat=await lstat(current),links=0;checkOwner(input,stat),checkWritable(input,stat,!0);for(let part=pending.shift();part!==void 0;part=pending.shift()){if(part===".")continue;stat.isDirectory()||fail(input,"non-regular");let next=part===".."?dirname(current):join(current,part),nextStat=await lstat(next);if(checkOwner(input,nextStat),process.platform!=="win32"&&(stat.mode&18)!==0&&!nextStat.isSymbolicLink()&&(nextStat.mode&18)!==0&&fail(input,"unsafe-permissions"),checkWritable(input,nextStat,pending.length>0),nextStat.isSymbolicLink()){++links>40&&fail(input,"unreadable");let target=await readlink(next);sameFile(nextStat,await lstat(next))||fail(input,"changed");let targetPath=isAbsolute(target)?target:`${current}${sep}${target}`;current=parse(targetPath).root,pending=[...targetPath.slice(current.length).split(sep).filter(Boolean),...pending],stat=await lstat(current),checkOwner(input,stat),checkWritable(input,stat,!0)}else current=next,stat=nextStat}return stat.isFile()||fail(input,"non-regular"),{path:current,stat}}async function readConfigReferenceFile(input){try{let walked=await walk(input),flags=constants.O_RDONLY|(constants.O_NOFOLLOW??0)|(constants.O_NONBLOCK??0),handle=await open(walked.path,flags);try{let stat=await handle.stat();sameFile(walked.stat,stat)||fail(input,"changed"),stat.isFile()||fail(input,"non-regular"),checkOwner(input,stat),checkWritable(input,stat,!1),stat.size>MAX_BYTES&&fail(input,"oversize");let buffer=Buffer.alloc(MAX_BYTES+1),length=0;for(;length<buffer.length;){let{bytesRead}=await handle.read(buffer,length,buffer.length-length,length);if(bytesRead===0)break;length+=bytesRead}length>MAX_BYTES&&fail(input,"oversize");let value;try{value=new TextDecoder("utf-8",{fatal:!0}).decode(buffer.subarray(0,length)).trim()}catch{fail(input,"invalid-utf8")}return value.length===0&&fail(input,"empty"),process.platform!=="win32"&&(stat.mode&36)!==0&&!readableWarnings.has(walked.path)&&(readableWarnings.add(walked.path),console.warn(`${input.field}: reference file is readable by other users`)),value}finally{await handle.close()}}catch(error){if(error instanceof ConfigReferenceError)throw error;let code=Reflect.get(Object(error),"code");fail(input,code==="ENOENT"||code==="ENOTDIR"?"missing":"unreadable")}}var origins=new WeakMap;function rememberConfigReferenceOrigin(value,context){typeof value!="string"&&origins.set(value,context)}function configReferenceContext(value,context){return context??(typeof value=="string"?void 0:origins.get(value))}function assertConfigReferenceAuthority(value,context){if(typeof value=="string")return;let source=configReferenceContext(value,context);if(source?.authority!=="trusted")throw new ConfigReferenceError(source?.field??"configuration value",value,"forbidden");assertConfigValue(value,source.field)}async function resolveConfigReference(value,context,env){let source=configReferenceContext(value,context);if(assertConfigReferenceAuthority(value,source),source===void 0)throw new ConfigReferenceError("configuration value",value,"forbidden");if("$file"in value){let text=await readConfigReferenceFile({field:source.field,reference:value,baseDir:source.baseDir??dirname2(source.origin)});return rememberResolvedReferenceValue(text),text}if("$env"in value){let result2=(env??source.env??process.env)[value.$env];if(warnOpaqueConfigEnvironment(value.$env,result2),result2===void 0)throw new ConfigReferenceError(source.field,value,"unset");if(result2==="")throw new ConfigReferenceError(source.field,value,"empty");return rememberResolvedReferenceValue(result2),result2}let parts=[];for(let part of value.$concat)parts.push(typeof part=="string"?part:await resolveConfigReference(part,source,env));let result=parts.join("");if(result==="")throw new ConfigReferenceError(source.field,value,"empty");return rememberResolvedReferenceValue(result),result}import{spawn}from"child_process";var COMMAND_EXECUTION_MAX_ATTEMPTS=3,COMMAND_EXECUTION_BACKOFF_MS=[250,1e3],COMMAND_TIMEOUT_MS=1e4,COMMAND_MAX_OUTPUT_BYTES=1024*1024;function runCommandProcess(file,args,options){return new Promise(resolveOutcome=>{let spawnOptions={shell:options.shell,windowsHide:!0,...options.env===void 0?{}:{env:{...process.env,...options.env}}},child=options.stdin===void 0?spawn(file,[...args],{...spawnOptions,stdio:["ignore","pipe","ignore"]}):spawn(file,[...args],{...spawnOptions,stdio:["pipe","pipe","ignore"]}),stdout="",settled=!1,finish=outcome=>{settled||(settled=!0,clearTimeout(timer),resolveOutcome(outcome))},timer=setTimeout(()=>{signalSpawnedChild(child,"SIGTERM"),child.unref(),finish({executed:!0,value:void 0})},COMMAND_TIMEOUT_MS);child.stdout.setEncoding("utf-8"),child.stdout.on("data",chunk=>{stdout+=chunk,!(stdout.length<=COMMAND_MAX_OUTPUT_BYTES)&&(signalSpawnedChild(child,"SIGTERM"),finish({executed:!0,value:void 0}))}),child.on("error",error=>finish({executed:error.code!=="ENOENT",value:void 0})),child.on("close",code=>{let value=stdout.trim();finish({executed:!0,value:code===0&&value?value:void 0})}),child.stdin?.end(options.stdin)})}async function executeWithConfiguredShell(command,env){try{let{shell,args,commandTransport}=getShellConfig(),commandFromStdin=commandTransport==="stdin";return await runCommandProcess(shell,commandFromStdin?args:[...args,command],{shell:!1,...commandFromStdin?{stdin:command}:{},...env===void 0?{}:{env}})}catch{return{executed:!1,value:void 0}}}async function executeCommandOnce(command,env){if(process.platform==="win32"){let configured=await executeWithConfiguredShell(command,env);if(configured.executed)return configured.value}return(await runCommandProcess(command,[],{shell:!0,...env===void 0?{}:{env}})).value}async function runConfigCommand(commandConfig,env){let command=commandConfig.slice(1);for(let attempt=0;attempt<COMMAND_EXECUTION_MAX_ATTEMPTS;attempt++){let value=await executeCommandOnce(command,env);if(value!==void 0)return value;let backoffMs=COMMAND_EXECUTION_BACKOFF_MS[attempt];backoffMs!==void 0&&await sleep(backoffMs)}}var commandResultCache=new Map,ENV_VAR_NAME_RE=/^[A-Za-z_][A-Za-z0-9_]*$/,ENV_VAR_NAME_PREFIX_RE=/^[A-Za-z_][A-Za-z0-9_]*/;function appendLiteral(parts,value){if(!value)return;let previousPart=parts[parts.length-1];if(previousPart?.type==="literal"){previousPart.value+=value;return}parts.push({type:"literal",value})}function parseConfigValueTemplate(config){let parts=[],index=0;for(;index<config.length;){let dollarIndex=config.indexOf("$",index);if(dollarIndex<0){appendLiteral(parts,config.slice(index));break}appendLiteral(parts,config.slice(index,dollarIndex));let nextChar=config[dollarIndex+1];if(nextChar==="$"||nextChar==="!"){appendLiteral(parts,nextChar),index=dollarIndex+2;continue}if(nextChar==="{"){let endIndex=config.indexOf("}",dollarIndex+2);if(endIndex<0){appendLiteral(parts,"$"),index=dollarIndex+1;continue}let name=config.slice(dollarIndex+2,endIndex);ENV_VAR_NAME_RE.test(name)?parts.push({type:"env",name}):appendLiteral(parts,config.slice(dollarIndex,endIndex+1)),index=endIndex+1;continue}let match=config.slice(dollarIndex+1).match(ENV_VAR_NAME_PREFIX_RE);if(match){parts.push({type:"env",name:match[0]}),index=dollarIndex+1+match[0].length;continue}appendLiteral(parts,"$"),index=dollarIndex+1}return parts}function parseConfigValueReference(config){return config.startsWith("!")?{type:"command",config}:{type:"template",parts:parseConfigValueTemplate(config)}}function resolveEnvConfigValue(name,env){let value=env?.[name]||process.env[name]||void 0;return warnOpaqueConfigEnvironment(name,value),value}function getTemplateEnvVarNames(parts){let names=[];for(let part of parts)part.type!=="env"||names.includes(part.name)||names.push(part.name);return names}function resolveTemplate(parts,env){let resolved="";for(let part of parts){if(part.type==="literal"){resolved+=part.value;continue}let envValue=resolveEnvConfigValue(part.name,env);if(envValue===void 0){warnMissingConfigEnvironment(part.name);return}resolved+=envValue}return resolved}function getConfigValueEnvVarNames(config){if(typeof config!="string")return"$env"in config?[config.$env]:"$concat"in config?[...new Set(config.$concat.flatMap(part=>typeof part!="string"&&"$env"in part?[part.$env]:[]))]:[];let reference=parseConfigValueReference(config);return reference.type==="template"?getTemplateEnvVarNames(reference.parts):[]}function getMissingConfigValueEnvVarNames(config,env){return getConfigValueEnvVarNames(config).filter(name=>resolveEnvConfigValue(name,env)===void 0)}function isCommandConfigValue(config){return typeof config=="string"&&parseConfigValueReference(config).type==="command"}function isConfigValueConfigured(config,env){return typeof config!="string"||getMissingConfigValueEnvVarNames(config,env).length===0}function resolveConfigValue(config,env,context){if(typeof config!="string")return resolveConfigReference(config,context,env);let reference=parseConfigValueReference(config);return reference.type==="command"?env===void 0?executeCommand(reference.config):runConfigCommand(reference.config,env):Promise.resolve(resolveTemplate(reference.parts,env))}function executeCommand(commandConfig){let cached=commandResultCache.get(commandConfig);if(cached)return cached;let result=runConfigCommand(commandConfig);return commandResultCache.set(commandConfig,result),result}function resolveConfigValueUncached(config,env,context){if(typeof config!="string")return resolveConfigReference(config,context,env);let reference=parseConfigValueReference(config);return reference.type==="command"?runConfigCommand(reference.config,env):Promise.resolve(resolveTemplate(reference.parts,env))}async function resolveConfigValueOrThrow(config,description,env,context){if(typeof config!="string")return resolveConfigReference(config,context,env);let resolvedValue=await resolveConfigValueUncached(config,env,context);if(resolvedValue!==void 0)return resolvedValue;let reference=parseConfigValueReference(config);if(reference.type==="command")throw new Error(`Failed to resolve ${description} from shell command: ${reference.config.slice(1)}`);if(reference.type==="template"){let missingEnvVars=getMissingConfigValueEnvVarNames(config,env);if(missingEnvVars.length===1)throw new Error(`Failed to resolve ${description} from environment variable: ${missingEnvVars[0]}`);if(missingEnvVars.length>1)throw new Error(`Failed to resolve ${description} from environment variables: ${missingEnvVars.join(", ")}`)}throw new Error(`Failed to resolve ${description}`)}async function resolveHeadersOrThrow(headers,description,env){if(!headers)return;for(let value of Object.values(headers))assertConfigReferenceAuthority(value);let resolved={};for(let[key,value]of Object.entries(headers))resolved[key]=await resolveConfigValueOrThrow(value,`${description} header "${key}"`,env);return Object.keys(resolved).length>0?resolved:void 0}export{ConfigValueSchema,NonemptyConfigValueSchema,isConfigReference,warnOpaqueConfigEnvironment,warnMissingConfigEnvironment,rememberConfigReferenceOrigin,assertConfigReferenceAuthority,resolveConfigReference,sleep,getConfigValueEnvVarNames,isCommandConfigValue,isConfigValueConfigured,resolveConfigValue,resolveConfigValueOrThrow,resolveHeadersOrThrow,isCommittedRotationOutput,isRotationStreamStart,rotationErrorFromEvent};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
|
|
2
|
-
import{CONTEXT_PROVENANCE_FIELD,contextProvenanceFingerprint,getContextProvenance}from"./chunk-
|
|
2
|
+
import{CONTEXT_PROVENANCE_FIELD,contextProvenanceFingerprint,getContextProvenance}from"./chunk-IREUIMFE.js";function isUserWord(value){return typeof value=="object"&&value!==null&&"label"in value&&typeof value.label=="string"&&"text"in value&&typeof value.text=="string"}function toolResultUserWords(message){let details=message.details;return typeof details!="object"||details===null||!("userWords"in details)?[]:Array.isArray(details.userWords)?details.userWords.filter(isUserWord):[]}function userWordBlocks(words){return words.flatMap(word=>[{type:"text",text:`[${word.label}]`},{type:"text",text:word.text}])}function appendToolResultUserWords(messages){if(!messages.some(message=>message.role==="toolResult"&&toolResultUserWords(message).length>0))return messages;let result=[],pending=[],source,flush=next=>{source&&!startsWithBlocks(next,pending)&&result.push(wordMessage(pending,source)),pending=[],source=void 0};for(let message of messages){if(message.role!=="toolResult"&&flush(message),result.push(message),message.role!=="toolResult")continue;let blocks=userWordBlocks(toolResultUserWords(message));blocks.length!==0&&(pending.push(...blocks),source=message)}return flush(void 0),result}function wordMessage(content,source){let message={role:"user",content,timestamp:source.timestamp},provenance=getContextProvenance(source);if(!provenance)return message;let{integrity,...owned}=provenance;if(!(integrity===void 0||integrity===contextProvenanceFingerprint(source)))return message;let sealed=integrity===void 0?owned:{...owned,integrity:contextProvenanceFingerprint(message)};return Object.assign(message,{[CONTEXT_PROVENANCE_FIELD]:sealed})}function startsWithBlocks(message,blocks){if(message?.role!=="user"||typeof message.content=="string")return!1;let content=message.content;return blocks.every((block,index)=>{let candidate=content[index];return candidate?.type==="text"&&candidate.text===block.text})}export{toolResultUserWords,userWordBlocks,appendToolResultUserWords};
|