@code-yeongyu/senpi 2026.11.15-2 → 2026.11.15-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 +19 -0
- package/dist/bundle/chunks/{chunk-Q4RJ4WLE.js → chunk-225TDKTA.js} +4 -4
- package/dist/bundle/chunks/{chunk-QSU2456D.js → chunk-3KR3CDGM.js} +1 -1
- package/dist/bundle/chunks/{chunk-AOTHPTMU.js → chunk-5GCZFK4X.js} +2 -2
- package/dist/bundle/chunks/{chunk-BMADOJHZ.js → chunk-5QIFH624.js} +1 -1
- package/dist/bundle/chunks/{chunk-THYIV26N.js → chunk-GQEXLLWJ.js} +1 -1
- package/dist/bundle/chunks/{chunk-3RILB2OD.js → chunk-OJOPOUAY.js} +9 -9
- package/dist/bundle/chunks/{chunk-64FJ4QQJ.js → chunk-PPCAJQDJ.js} +1 -1
- package/dist/bundle/chunks/{chunk-74HCKLRH.js → chunk-TEXE4HT6.js} +1 -1
- package/dist/bundle/chunks/{chunk-RRFDLGX6.js → chunk-TNYFCGI7.js} +156 -156
- package/dist/bundle/chunks/{cli-main-GNQY2LTU.js → cli-main-CV3ODX4A.js} +1 -1
- package/dist/bundle/chunks/{hand-entry-D3DNH6XL.js → hand-entry-2NN7ZTY6.js} +1 -1
- package/dist/bundle/chunks/{interactive-mode-ATBPY4M5.js → interactive-mode-TGHZWM2T.js} +1 -1
- package/dist/bundle/chunks/{main-OMFVSMUR.js → main-B7WEY4JW.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-ACQ5N4UB.js → multi-session-host-53YLL2OD.js} +1 -1
- package/dist/bundle/chunks/{package-manager-cli-2VMRV4HL.js → package-manager-cli-2U54AVKW.js} +1 -1
- package/dist/bundle/chunks/{role-BTH5PVME.js → role-4IXZZAL4.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-XUK5SYKH.js → rpc-mode-RRYXENML.js} +1 -1
- package/dist/bundle/chunks/{runtime-session-VO3X4OE3.js → runtime-session-KKHEYZOH.js} +1 -1
- package/dist/bundle/chunks/{session-control-endpoint-Y5EIFFPY.js → session-control-endpoint-HVULSIUR.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +331 -331
- 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 +6 -0
- package/dist/core/agent-session.js +34 -3
- package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.d.ts +2 -0
- package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.js +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/failover.d.ts +2 -0
- package/dist/core/extensions/builtin/anthropic-subscription/failover.js +22 -4
- package/dist/core/extensions/builtin/anthropic-subscription/index.js +7 -2
- package/dist/core/extensions/builtin/anthropic-subscription/limit-recheck.d.ts +15 -0
- package/dist/core/extensions/builtin/anthropic-subscription/limit-recheck.js +55 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-stream.d.ts +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/session-stream.js +1 -0
- package/dist/core/extensions/builtin/anthropic-subscription/stream-guidance.js +8 -5
- package/dist/core/extensions/builtin/anthropic-subscription/stream.d.ts +1 -1
- package/dist/core/extensions/builtin/anthropic-subscription/stream.js +3 -1
- package/dist/core/extensions/builtin/terminal/extension-state.js +15 -0
- package/dist/core/extensions/builtin/terminal/notify.d.ts +2 -1
- package/dist/core/extensions/builtin/terminal/notify.js +15 -6
- package/dist/core/extensions/builtin/terminal/session-bundle.d.ts +5 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.js +41 -1
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts +4 -0
- package/dist/core/extensions/loader.js +5 -0
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.js +5 -0
- package/dist/core/extensions/types.d.ts +7 -0
- package/dist/core/run-background-jobs.d.ts +33 -0
- package/dist/core/run-background-jobs.js +47 -0
- package/dist/core/tools/bash-core.d.ts +50 -0
- package/dist/core/tools/bash-core.js +169 -0
- package/dist/core/tools/bash-schema.d.ts +48 -0
- package/dist/core/tools/bash-schema.js +34 -0
- package/dist/core/tools/bash.d.ts +4 -70
- package/dist/core/tools/bash.js +32 -409
- package/dist/core/tools/coding-tools-core.d.ts +24 -0
- package/dist/core/tools/coding-tools-core.js +14 -0
- package/dist/core/tools/edit-core.d.ts +56 -0
- package/dist/core/tools/edit-core.js +175 -0
- package/dist/core/tools/edit-diff.d.ts +0 -5
- package/dist/core/tools/edit-diff.js +0 -32
- package/dist/core/tools/edit-preview.d.ts +7 -0
- package/dist/core/tools/edit-preview.js +34 -0
- package/dist/core/tools/edit.d.ts +5 -43
- package/dist/core/tools/edit.js +10 -158
- package/dist/core/tools/encoding.d.ts +10 -0
- package/dist/core/tools/encoding.js +58 -0
- package/dist/core/tools/file-tool-host.d.ts +25 -0
- package/dist/core/tools/file-tool-host.js +109 -0
- package/dist/core/tools/fs-error-code.d.ts +2 -0
- package/dist/core/tools/fs-error-code.js +15 -0
- package/dist/core/tools/machine-output-spill.d.ts +11 -0
- package/dist/core/tools/machine-output-spill.js +65 -0
- package/dist/core/tools/machine.d.ts +4 -24
- package/dist/core/tools/machine.js +4 -44
- package/dist/core/tools/output-accumulator-core.d.ts +84 -0
- package/dist/core/tools/output-accumulator-core.js +200 -0
- package/dist/core/tools/output-accumulator.d.ts +9 -61
- package/dist/core/tools/output-accumulator.js +90 -265
- package/dist/core/tools/path-utils.js +3 -48
- package/dist/core/tools/posix-signals.d.ts +3 -0
- package/dist/core/tools/posix-signals.js +113 -0
- package/dist/core/tools/read-core.d.ts +64 -0
- package/dist/core/tools/read-core.js +180 -0
- package/dist/core/tools/read-text.d.ts +23 -0
- package/dist/core/tools/read-text.js +90 -0
- package/dist/core/tools/read.d.ts +6 -47
- package/dist/core/tools/read.js +13 -218
- package/dist/core/tools/renderers/bash.d.ts +0 -1
- package/dist/core/tools/renderers/bash.js +0 -1
- package/dist/core/tools/renderers/edit.d.ts +1 -1
- package/dist/core/tools/renderers/edit.js +1 -1
- package/dist/core/tools/secret-output-redactor.js +2 -1
- package/dist/core/tools/shell-operations.d.ts +53 -0
- package/dist/core/tools/shell-operations.js +115 -0
- package/dist/core/tools/shell-output.d.ts +20 -0
- package/dist/core/tools/shell-output.js +152 -0
- package/dist/core/tools/tail-window.js +5 -7
- package/dist/core/tools/tool-machine.d.ts +30 -0
- package/dist/core/tools/tool-machine.js +47 -0
- package/dist/core/tools/truncate.js +15 -14
- package/dist/core/tools/write-core.d.ts +47 -0
- package/dist/core/tools/write-core.js +108 -0
- package/dist/core/tools/write-result.d.ts +0 -1
- package/dist/core/tools/write-result.js +0 -13
- package/dist/core/tools/write.d.ts +6 -31
- package/dist/core/tools/write.js +25 -77
- package/dist/core/turn-origin.d.ts +4 -2
- package/dist/core/turn-origin.js +15 -8
- package/dist/modes/interactive/session-control-session-commands.js +1 -1
- package/dist/modes/rpc/connection-handler.js +2 -2
- package/dist/modes/rpc/effect-commands.d.ts +1 -4
- package/dist/modes/rpc/method-classes-schema-session.d.ts +1 -0
- package/dist/modes/rpc/method-classes-schema-session.js +5 -1
- package/dist/modes/rpc/method-classes-schema.d.ts +1 -0
- package/dist/modes/rpc/pause-command-validation.js +2 -0
- package/dist/modes/rpc/rpc-mutation-response-types.d.ts +2 -4
- package/dist/modes/rpc/rpc-session-command-types.d.ts +1 -0
- package/dist/modes/rpc/session-control-actions-data.d.ts +7 -3
- package/dist/modes/rpc/session-control-actions-data.js +12 -6
- package/dist/tools-core.d.ts +14 -0
- package/dist/tools-core.js +9 -0
- package/dist/utils/image-mime.d.ts +4 -0
- package/dist/utils/image-mime.js +99 -0
- package/dist/utils/mime.d.ts +1 -1
- package/dist/utils/mime.js +2 -97
- package/docs/extensions.md +7 -1
- package/docs/rpc.md +14 -0
- package/package.json +11 -7
- package/vendor/senpi-machine-ops/files/local-files.js +34 -5
|
@@ -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-TEXE4HT6.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
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-JWBI5LNO.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,4 +1,4 @@
|
|
|
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
|
-
var loaded;async function loadPty(){return loaded??=await import("@earendil-works/pi-pty"),loaded}var TERMINAL_BASH_TOOL="bash",TERMINAL_OUTPUT_TOOL="bash_output",TERMINAL_KILL_TOOL="kill_bash",TERMINAL_INPUT_TOOL="bash_input",TERMINAL_RESIZE_TOOL="bash_resize",TERMINAL_MONITOR_TOOL="monitor",TERMINAL_COMPANION_TOOLS=[TERMINAL_OUTPUT_TOOL,TERMINAL_KILL_TOOL,TERMINAL_MONITOR_TOOL],DEFAULT_COLS=120,DEFAULT_ROWS=40,DEFAULT_SCROLLBACK=1e4,DEFAULT_MAX_SESSIONS=32,MAX_SESSION_OUTPUT_CHARS=1e6,BACKGROUND_START_GRACE_MS=250,MONITOR_ENV_ID="SENPI_MONITOR_ID",MONITOR_ENV_STATE_DIR="SENPI_MONITOR_STATE_DIR",MONITOR_ENV_RESTORED="SENPI_MONITOR_RESTORED",MONITOR_ENV_DOWNTIME_MS="SENPI_MONITOR_DOWNTIME_MS",RESTORE_GRACE_MS=2e3,KILLED_SESSION_EXIT_GRACE_MS=5e3,DURABLE_MONITOR_EXPIRY_MS=10080*60*1e3,FIRE_BUDGET_WINDOW_MS=1440*60*1e3,DEFAULT_MONITOR_WAKES_PER_HOUR=12,DEFAULT_MONITOR_RUNAWAY_LINES_PER_MINUTE=120,DEFAULT_MONITOR_RUNAWAY_MINUTES=5,MONITOR_OVERFLOW_FILE_MAX_BYTES=4*1024*1024,RUNAWAY_PAUSE_SUMMARY_PREFIX="paused: runaway output";function runawayPauseSummary(bashId,linesPerMinute,minutes){return`${RUNAWAY_PAUSE_SUMMARY_PREFIX} (more than ${linesPerMinute} matched lines a minute for ${minutes} minute${minutes===1?"":"s"}); later lines stay in bash_output. Resume with monitor({ action: "rearm", bash_id: "${bashId}" }).`}var FOREGROUND_ENV_OVERRIDES={NO_COLOR:"1",TERM:"dumb",COLORTERM:"",PAGER:"cat",GIT_PAGER:"cat",GH_PAGER:"cat",GIT_EDITOR:"true",GIT_TERMINAL_PROMPT:"0"},KEY_SEQUENCES={enter:"\r",return:"\r",tab:" ",escape:"\x1B",esc:"\x1B",space:" ",backspace:"\x7F",delete:"\x1B[3~",up:"\x1B[A",down:"\x1B[B",right:"\x1B[C",left:"\x1B[D",home:"\x1B[H",end:"\x1B[F",pageup:"\x1B[5~",pagedown:"\x1B[6~","ctrl+c":"","ctrl+d":"","ctrl+z":"","ctrl+l":"\f","ctrl+u":"","ctrl+a":"","ctrl+e":"","ctrl+\\":""};function resolveKeySequence(key){let normalized=key.trim().toLowerCase();if(normalized.length===0)return null;let mapped=KEY_SEQUENCES[normalized];return mapped!==void 0?mapped:[...normalized].length===1?key:null}function encodeKeys(keys){let data="",unknown=[];for(let key of keys){let sequence=resolveKeySequence(key);sequence===null?unknown.push(key):data+=sequence}return{data,unknown}}function safeRegExp(pattern){try{return new RegExp(pattern)}catch{return null}}var REDACTED="<redacted>",TOKEN_CHAR=/[A-Za-z0-9_./+~=-]/,SECRET_KEY=/(?:^|_)(?:KEY|TOKEN|SECRET|AUTH|AUTHORIZATION)$|PASSWORD/i,SECRET_PREFIXES=["ghp_","gho_","ghr_","ghs_","ghu_","github_pat_","xoxa-","xoxb-","xoxp-","xoxo-","xoxr-","xoxs-","sk-ant-","sk-proj-","sk-"],PREFIX=new RegExp(`(?:^|[^A-Za-z0-9])(?:${SECRET_PREFIXES.join("|")})[A-Za-z0-9_./+~=-]+`),STARTED_PREFIX=new RegExp(`(?:^|[^A-Za-z0-9])(?:${SECRET_PREFIXES.join("|")}|AKIA|AIza|eyJ)`),CLOUD_KEY=/(?:^|[^A-Za-z0-9])(?:AKIA[A-Z0-9]{16}|AIza[A-Za-z0-9_-]{35})/,BEARER_VALUE=/^(?=.{8,}$)(?=.*[0-9_./+~=-])[A-Za-z0-9_./+~=-]+$/,JWT=/^([A-Za-z0-9_-]+)\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*\.?$/,PRIVATE_HEADER=/^-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY(?: BLOCK)?-----$/,PRIVATE_END=/-----END (?:[A-Z0-9]+ )*PRIVATE KEY(?: BLOCK)?-----$/,MAX_TOKEN_CHARS=8192;function isJwt(token){let header=JWT.exec(token)?.[1];if(!header)return!1;try{let value=JSON.parse(
|
|
2
|
+
var loaded;async function loadPty(){return loaded??=await import("@earendil-works/pi-pty"),loaded}var TERMINAL_BASH_TOOL="bash",TERMINAL_OUTPUT_TOOL="bash_output",TERMINAL_KILL_TOOL="kill_bash",TERMINAL_INPUT_TOOL="bash_input",TERMINAL_RESIZE_TOOL="bash_resize",TERMINAL_MONITOR_TOOL="monitor",TERMINAL_COMPANION_TOOLS=[TERMINAL_OUTPUT_TOOL,TERMINAL_KILL_TOOL,TERMINAL_MONITOR_TOOL],DEFAULT_COLS=120,DEFAULT_ROWS=40,DEFAULT_SCROLLBACK=1e4,DEFAULT_MAX_SESSIONS=32,MAX_SESSION_OUTPUT_CHARS=1e6,BACKGROUND_START_GRACE_MS=250,MONITOR_ENV_ID="SENPI_MONITOR_ID",MONITOR_ENV_STATE_DIR="SENPI_MONITOR_STATE_DIR",MONITOR_ENV_RESTORED="SENPI_MONITOR_RESTORED",MONITOR_ENV_DOWNTIME_MS="SENPI_MONITOR_DOWNTIME_MS",RESTORE_GRACE_MS=2e3,KILLED_SESSION_EXIT_GRACE_MS=5e3,DURABLE_MONITOR_EXPIRY_MS=10080*60*1e3,FIRE_BUDGET_WINDOW_MS=1440*60*1e3,DEFAULT_MONITOR_WAKES_PER_HOUR=12,DEFAULT_MONITOR_RUNAWAY_LINES_PER_MINUTE=120,DEFAULT_MONITOR_RUNAWAY_MINUTES=5,MONITOR_OVERFLOW_FILE_MAX_BYTES=4*1024*1024,RUNAWAY_PAUSE_SUMMARY_PREFIX="paused: runaway output";function runawayPauseSummary(bashId,linesPerMinute,minutes){return`${RUNAWAY_PAUSE_SUMMARY_PREFIX} (more than ${linesPerMinute} matched lines a minute for ${minutes} minute${minutes===1?"":"s"}); later lines stay in bash_output. Resume with monitor({ action: "rearm", bash_id: "${bashId}" }).`}var FOREGROUND_ENV_OVERRIDES={NO_COLOR:"1",TERM:"dumb",COLORTERM:"",PAGER:"cat",GIT_PAGER:"cat",GH_PAGER:"cat",GIT_EDITOR:"true",GIT_TERMINAL_PROMPT:"0"},KEY_SEQUENCES={enter:"\r",return:"\r",tab:" ",escape:"\x1B",esc:"\x1B",space:" ",backspace:"\x7F",delete:"\x1B[3~",up:"\x1B[A",down:"\x1B[B",right:"\x1B[C",left:"\x1B[D",home:"\x1B[H",end:"\x1B[F",pageup:"\x1B[5~",pagedown:"\x1B[6~","ctrl+c":"","ctrl+d":"","ctrl+z":"","ctrl+l":"\f","ctrl+u":"","ctrl+a":"","ctrl+e":"","ctrl+\\":""};function resolveKeySequence(key){let normalized=key.trim().toLowerCase();if(normalized.length===0)return null;let mapped=KEY_SEQUENCES[normalized];return mapped!==void 0?mapped:[...normalized].length===1?key:null}function encodeKeys(keys){let data="",unknown=[];for(let key of keys){let sequence=resolveKeySequence(key);sequence===null?unknown.push(key):data+=sequence}return{data,unknown}}function safeRegExp(pattern){try{return new RegExp(pattern)}catch{return null}}var encoder=new TextEncoder;function utf8ByteLength(text){let bytes=0;for(let index=0;index<text.length;index++){let code=text.charCodeAt(index);if(code<128)bytes+=1;else if(code<2048)bytes+=2;else if(code>=55296&&code<=56319&&index+1<text.length){let next=text.charCodeAt(index+1);next>=56320&&next<=57343?(bytes+=4,index++):bytes+=3}else bytes+=3}return bytes}function encodeUtf8(text){return encoder.encode(text)}function decodeUtf8(bytes){return new TextDecoder("utf-8",{ignoreBOM:!0}).decode(bytes)}function concatBytes(chunks){let total=chunks.reduce((sum,chunk)=>sum+chunk.length,0),joined=new Uint8Array(total),offset=0;for(let chunk of chunks)joined.set(chunk,offset),offset+=chunk.length;return joined}var BASE64_CHUNK=32768;function encodeBase64(bytes){let binary="";for(let start=0;start<bytes.length;start+=BASE64_CHUNK)binary+=String.fromCharCode(...bytes.subarray(start,start+BASE64_CHUNK));return btoa(binary)}function decodeBase64UrlUtf8(text){let base64=(text.length%4===1?text.slice(0,-1):text).replaceAll("-","+").replaceAll("_","/"),binary=atob(base64.padEnd(Math.ceil(base64.length/4)*4,"="));return decodeUtf8(Uint8Array.from(binary,char=>char.charCodeAt(0)))}var REDACTED="<redacted>",TOKEN_CHAR=/[A-Za-z0-9_./+~=-]/,SECRET_KEY=/(?:^|_)(?:KEY|TOKEN|SECRET|AUTH|AUTHORIZATION)$|PASSWORD/i,SECRET_PREFIXES=["ghp_","gho_","ghr_","ghs_","ghu_","github_pat_","xoxa-","xoxb-","xoxp-","xoxo-","xoxr-","xoxs-","sk-ant-","sk-proj-","sk-"],PREFIX=new RegExp(`(?:^|[^A-Za-z0-9])(?:${SECRET_PREFIXES.join("|")})[A-Za-z0-9_./+~=-]+`),STARTED_PREFIX=new RegExp(`(?:^|[^A-Za-z0-9])(?:${SECRET_PREFIXES.join("|")}|AKIA|AIza|eyJ)`),CLOUD_KEY=/(?:^|[^A-Za-z0-9])(?:AKIA[A-Z0-9]{16}|AIza[A-Za-z0-9_-]{35})/,BEARER_VALUE=/^(?=.{8,}$)(?=.*[0-9_./+~=-])[A-Za-z0-9_./+~=-]+$/,JWT=/^([A-Za-z0-9_-]+)\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*\.?$/,PRIVATE_HEADER=/^-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY(?: BLOCK)?-----$/,PRIVATE_END=/-----END (?:[A-Z0-9]+ )*PRIVATE KEY(?: BLOCK)?-----$/,MAX_TOKEN_CHARS=8192;function isJwt(token){let header=JWT.exec(token)?.[1];if(!header)return!1;try{let value=JSON.parse(decodeBase64UrlUtf8(header));return typeof value=="object"&&value!==null&&"alg"in value&&typeof value.alg=="string"}catch{return!1}}var SecretOutputRedactor=class{constructor(){this.token="",this.rawToken="",this.controls="",this.escapeText="",this.oversized=!1,this.bearer=!1,this.quote="",this.escaped=!1,this.pemTail="",this.finished=!1}push(text){if(this.finished)return"";let output="";for(let character of text){if(this.escape!==void 0){if(this.escape==="osc"||this.escape==="osc-end"){character==="\x07"||this.escape==="osc-end"&&character==="\\"?this.escape=void 0:this.escape=character==="\x1B"?"osc-end":"osc";continue}if(this.escapeText+=character,this.escape==="start"&&character==="]"){this.escape="osc",this.escapeText="";continue}if(this.escape==="start"&&character==="["){this.escape="csi";continue}if(this.escape==="start"&&/[()*+]/.test(character)){this.escape="charset";continue}(this.escape==="start"||this.escape==="charset"||/[@-~]/.test(character)||this.escapeText.length>64)&&(this.pem===void 0&&this.value===void 0&&(this.oversized?output+=this.escapeText:(this.rawToken+=this.escapeText,this.controls+=this.escapeText),this.rawToken.length>MAX_TOKEN_CHARS&&(this.token="",this.rawToken="",this.controls="",this.oversized=!0,output+=REDACTED)),this.escape=void 0,this.escapeText="");continue}if(character==="\x1B"){this.escape="start",this.escapeText=character;continue}if(this.pem!==void 0){this.pemTail+=character,this.pem==="header"?this.pemTail.endsWith("-----")?(PRIVATE_HEADER.test(this.pemTail)?(output+=REDACTED,this.pem="body"):(output+=this.pemTail,this.pem=void 0),this.pemTail=""):(this.pemTail.length>128||character===`
|
|
3
3
|
`)&&(output+=this.pemTail,this.pemTail="",this.pem=void 0):(this.pemTail=this.pemTail.slice(-128),PRIVATE_END.test(this.pemTail)&&(this.pemTail="",this.pem=void 0));continue}if(this.value!==void 0){if(this.value==="start"){if(character===" "||character===" "){output+=character;continue}if(character==='"'||character==="'"){this.quote=character,this.value="quoted",output+=character+REDACTED;continue}this.value="bare",output+=REDACTED}if(this.value==="quoted"){character===`
|
|
4
|
-
`||character==="\r"?(this.value=void 0,this.escaped=!1,output+=character):this.escaped?this.escaped=!1:character==="\\"?this.escaped=!0:character===this.quote&&(output+=character,this.value=void 0);continue}if(!/[\s'"]/.test(character))continue;this.value=void 0}if(character==="="&&!this.bearer&&!this.oversized&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(this.token)){let secret=SECRET_KEY.test(this.token);output+=this.flushToken()+"=",secret&&(this.value="start");continue}if(TOKEN_CHAR.test(character)){if(this.oversized)continue;this.token+=character,this.rawToken+=character,(this.rawToken.length>MAX_TOKEN_CHARS||this.token.length>MAX_TOKEN_CHARS)&&(this.token="",this.rawToken="",this.controls="",this.oversized=!0,output+=REDACTED);continue}if(this.token==="-----BEGIN"&&character===" "){this.pem="header",this.pemTail=this.token+character,this.token="",this.rawToken="",this.controls="";continue}output+=this.flushToken(),output+=character,/\s/.test(character)||(this.bearer=!1)}return output}flushIdle(){if(this.finished||this.oversized)return"";let token=this.token;if(token.length>0&&"-----BEGIN".startsWith(token)||this.startedPrefix()!==void 0||this.isSecret(token))return"";let output=this.rawToken;return this.rawToken="",this.controls="",output}finish(){if(this.finished)return"";this.finished=!0;let tail=this.pem==="header"?this.pemTail:"";return this.pemTail="",tail+this.flushToken()}isSecret(token){return this.bearer&&BEARER_VALUE.test(token)||PREFIX.test(token)||CLOUD_KEY.test(token)||isJwt(token)}startedPrefix(){if(this.bearer&&this.token.length>0)return"";let match=STARTED_PREFIX.exec(this.token);return match?this.token.slice(0,match.index+match[0].length):void 0}flushToken(){if(this.oversized)return this.oversized=!1,this.bearer=!1,"";let token=this.token,rawToken=this.rawToken,controls=this.controls,prefix=this.finished?this.startedPrefix():void 0;if(this.token="",this.rawToken="",this.controls="",token.length===0)return rawToken;let secret=token!==prefix&&this.isSecret(token);if(this.bearer=!secret&&/^Bearer$/i.test(token),secret)return controls+REDACTED;if(prefix!==void 0){let published=token.length-(rawToken.length-controls.length);return controls+prefix.slice(published)+REDACTED}return rawToken}};export{loadPty,TERMINAL_BASH_TOOL,TERMINAL_OUTPUT_TOOL,TERMINAL_KILL_TOOL,TERMINAL_INPUT_TOOL,TERMINAL_RESIZE_TOOL,TERMINAL_MONITOR_TOOL,TERMINAL_COMPANION_TOOLS,DEFAULT_COLS,DEFAULT_ROWS,DEFAULT_SCROLLBACK,DEFAULT_MAX_SESSIONS,MAX_SESSION_OUTPUT_CHARS,BACKGROUND_START_GRACE_MS,MONITOR_ENV_ID,MONITOR_ENV_STATE_DIR,MONITOR_ENV_RESTORED,MONITOR_ENV_DOWNTIME_MS,RESTORE_GRACE_MS,KILLED_SESSION_EXIT_GRACE_MS,DURABLE_MONITOR_EXPIRY_MS,FIRE_BUDGET_WINDOW_MS,DEFAULT_MONITOR_WAKES_PER_HOUR,DEFAULT_MONITOR_RUNAWAY_LINES_PER_MINUTE,DEFAULT_MONITOR_RUNAWAY_MINUTES,MONITOR_OVERFLOW_FILE_MAX_BYTES,RUNAWAY_PAUSE_SUMMARY_PREFIX,runawayPauseSummary,FOREGROUND_ENV_OVERRIDES,encodeKeys,safeRegExp,SecretOutputRedactor};
|
|
4
|
+
`||character==="\r"?(this.value=void 0,this.escaped=!1,output+=character):this.escaped?this.escaped=!1:character==="\\"?this.escaped=!0:character===this.quote&&(output+=character,this.value=void 0);continue}if(!/[\s'"]/.test(character))continue;this.value=void 0}if(character==="="&&!this.bearer&&!this.oversized&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(this.token)){let secret=SECRET_KEY.test(this.token);output+=this.flushToken()+"=",secret&&(this.value="start");continue}if(TOKEN_CHAR.test(character)){if(this.oversized)continue;this.token+=character,this.rawToken+=character,(this.rawToken.length>MAX_TOKEN_CHARS||this.token.length>MAX_TOKEN_CHARS)&&(this.token="",this.rawToken="",this.controls="",this.oversized=!0,output+=REDACTED);continue}if(this.token==="-----BEGIN"&&character===" "){this.pem="header",this.pemTail=this.token+character,this.token="",this.rawToken="",this.controls="";continue}output+=this.flushToken(),output+=character,/\s/.test(character)||(this.bearer=!1)}return output}flushIdle(){if(this.finished||this.oversized)return"";let token=this.token;if(token.length>0&&"-----BEGIN".startsWith(token)||this.startedPrefix()!==void 0||this.isSecret(token))return"";let output=this.rawToken;return this.rawToken="",this.controls="",output}finish(){if(this.finished)return"";this.finished=!0;let tail=this.pem==="header"?this.pemTail:"";return this.pemTail="",tail+this.flushToken()}isSecret(token){return this.bearer&&BEARER_VALUE.test(token)||PREFIX.test(token)||CLOUD_KEY.test(token)||isJwt(token)}startedPrefix(){if(this.bearer&&this.token.length>0)return"";let match=STARTED_PREFIX.exec(this.token);return match?this.token.slice(0,match.index+match[0].length):void 0}flushToken(){if(this.oversized)return this.oversized=!1,this.bearer=!1,"";let token=this.token,rawToken=this.rawToken,controls=this.controls,prefix=this.finished?this.startedPrefix():void 0;if(this.token="",this.rawToken="",this.controls="",token.length===0)return rawToken;let secret=token!==prefix&&this.isSecret(token);if(this.bearer=!secret&&/^Bearer$/i.test(token),secret)return controls+REDACTED;if(prefix!==void 0){let published=token.length-(rawToken.length-controls.length);return controls+prefix.slice(published)+REDACTED}return rawToken}};export{loadPty,TERMINAL_BASH_TOOL,TERMINAL_OUTPUT_TOOL,TERMINAL_KILL_TOOL,TERMINAL_INPUT_TOOL,TERMINAL_RESIZE_TOOL,TERMINAL_MONITOR_TOOL,TERMINAL_COMPANION_TOOLS,DEFAULT_COLS,DEFAULT_ROWS,DEFAULT_SCROLLBACK,DEFAULT_MAX_SESSIONS,MAX_SESSION_OUTPUT_CHARS,BACKGROUND_START_GRACE_MS,MONITOR_ENV_ID,MONITOR_ENV_STATE_DIR,MONITOR_ENV_RESTORED,MONITOR_ENV_DOWNTIME_MS,RESTORE_GRACE_MS,KILLED_SESSION_EXIT_GRACE_MS,DURABLE_MONITOR_EXPIRY_MS,FIRE_BUDGET_WINDOW_MS,DEFAULT_MONITOR_WAKES_PER_HOUR,DEFAULT_MONITOR_RUNAWAY_LINES_PER_MINUTE,DEFAULT_MONITOR_RUNAWAY_MINUTES,MONITOR_OVERFLOW_FILE_MAX_BYTES,RUNAWAY_PAUSE_SUMMARY_PREFIX,runawayPauseSummary,FOREGROUND_ENV_OVERRIDES,encodeKeys,safeRegExp,utf8ByteLength,encodeUtf8,decodeUtf8,concatBytes,encodeBase64,SecretOutputRedactor};
|
|
@@ -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-225TDKTA.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-75O3CWR5.js";import{carriesMedia,normalizeJsonValue,omitNormalInlineMedia}from"./chunk-XI6THO4F.js";import{BaseContentHash,compactUpdatesEnabled,fingerprintLine,parseSessionEntryLine}from"./chunk-WMDJMN5W.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-IJXKHJYR.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-36BLGKRO.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,4 +1,4 @@
|
|
|
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
2
|
import{TOOL_CHILD_ROLE_ENV,channelEnvPresent}from"./chunk-IHES3JES.js";import{ensureWindowsPowerThrottlingOptOut}from"./chunk-FQXWKEVK.js";ensureWindowsPowerThrottlingOptOut();var role=process.env[TOOL_CHILD_ROLE_ENV];if(role!==void 0&&role!==""){if(role==="launch-shim"){let{runLaunchShimRole}=await import("./launch-shim-role-CUCE7EFI.js");runLaunchShimRole()}role!=="tool-child"&&(process.stderr.write(`senpi: unknown internal role ${JSON.stringify(role)}
|
|
3
3
|
`),process.exit(70)),channelEnvPresent(process.env)||(process.stderr.write(`tool-child: channel unavailable
|
|
4
|
-
`),process.exit(70));let{runToolChildRole}=await import("./role-
|
|
4
|
+
`),process.exit(70));let{runToolChildRole}=await import("./role-4IXZZAL4.js");await runToolChildRole()}
|