@linzumi/cli 1.0.171 → 1.0.172
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/README.md +1 -1
- package/dist/impl-res/index.js +1 -1
- package/dist/impl-ts/index.js +1 -1
- package/package.json +1 -1
- package/scripts/codex-wire-canary.sh +56 -0
- package/scripts/replay-agent-backend.ts +45 -2
package/README.md
CHANGED
package/dist/impl-res/index.js
CHANGED
|
@@ -321,7 +321,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
321
321
|
`);if(t===-1)return null;let r=this._buffer.toString("utf8",0,t).replace(/\r$/,"");return this._buffer=this._buffer.subarray(t+1),ZH(r)}clear(){this._buffer=void 0}};function ZH(e){return CA.parse(JSON.parse(e))}function _P(e){return JSON.stringify(e)+`
|
|
322
322
|
`}var zm=class{constructor(t=gP.stdin,r=gP.stdout){this._stdin=t,this._stdout=r,this._readBuffer=new jm,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let t=this._readBuffer.readMessage();if(t===null)break;this.onmessage?.(t)}catch(t){this.onerror?.(t)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(t){return new Promise(r=>{let n=_P(t);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};function HH(e){let t={};t.listChanged=!1;let r={};r.resources=t,e.server.registerCapabilities(r),e.server.setRequestHandler(al,()=>{let n={};return n.resources=[],n}),e.server.setRequestHandler(sl,()=>{let n={};return n.resourceTemplates=[],n})}function BH(e){return{registerTool:(t,r,n,i)=>{e.tool(t,r,n,i)}}}async function $v(e){let t=e.delegationAuthFilePath;if(t!==void 0){let n=e.explicitToken,i=e.authFilePath;if(n!==void 0)return{TAG:"Error",_0:"--delegation-auth-file cannot be combined with --token or --auth-file"};if(i!==void 0)return{TAG:"Error",_0:"--delegation-auth-file cannot be combined with --token or --auth-file"};let o=hk(t,Date.now());return o.TAG==="Ok"?{TAG:"Ok",_0:{accessToken:o._0.accessToken,mode:"PersonalAgentDelegation"}}:{TAG:"Error",_0:o._0.summary}}let r=await Dk(e.serviceUrl,e.explicitToken,e.authFilePath,e.workspaceSlug,e.channelSlug,void 0);return r.TAG==="Ok"?{TAG:"Ok",_0:{accessToken:r._0,mode:"LocalRunner"}}:{TAG:"Error",_0:r._0.summary}}function Mv(e,t){let r=Tr(e,"token");return{serviceUrl:t,explicitToken:r!==void 0?r:process.env.LINZUMI_MCP_ACCESS_TOKEN,authFilePath:Tr(e,"auth-file"),delegationAuthFilePath:Tr(e,"delegation-auth-file"),workspaceSlug:Tr(e,"workspace"),channelSlug:Tr(e,"channel")}}async function KH(e){let t=fc(e);if(t.TAG!=="Ok")return{TAG:"Error",_0:t._0};let r=t._0;if(mc(r,"help"))return ma(_c()),{TAG:"Ok",_0:void 0};let n=pc(r,"api-url");if(n.TAG!=="Ok")return{TAG:"Error",_0:n._0};let i=n._0,o=await $v(Mv(r,i));if(o.TAG!=="Ok")return{TAG:"Error",_0:o._0};let a=o._0,s=hc(Tr(r,"mode")),l=Qp(Tr(r,"tool-scope"));if(s.TAG!=="Ok")return{TAG:"Error",_0:s._0};let d=s._0;if(l.TAG!=="Ok")return{TAG:"Error",_0:l._0};let u=Tr(r,"owner-username"),c=u!==void 0?u:process.env.LINZUMI_MCP_OWNER_USERNAME,f=Tr(r,"cwd"),h=f!==void 0?f:process.cwd(),m=Tr(r,"thread-id"),p=m!==void 0?m:process.env[tx],_=s_({serviceUrl:i,accessToken:a.accessToken,authMode:a.mode,operatingMode:d});if(_.TAG!=="Ok")return{TAG:"Error",_0:_._0};let g=new Mm({name:"linzumi",version:"0.1.0"});return HH(g),Px(BH(g),{client:_._0,toolScope:l._0,operatingMode:d,cwd:h,serviceUrl:i,defaultThreadId:p,ownerUsername:c,agentSession:mc(r,"agent-session"),devServices:kx(process.env)}),await g.connect(new zm),{TAG:"Ok",_0:void 0}}async function JH(e){let t=fc(e);if(t.TAG!=="Ok")return{TAG:"Error",_0:t._0};let r=t._0,n=pc(r,"api-url");if(n.TAG!=="Ok")return{TAG:"Error",_0:n._0};let i=n._0,o=Tr(r,"format"),a=o!==void 0?o:"codex",s=hc(Tr(r,"mode"));if(s.TAG!=="Ok")return{TAG:"Error",_0:s._0};let l;if(mc(r,"include-token")){let f=await $v(Mv(r,i));l=f.TAG==="Ok"?{TAG:"Ok",_0:f._0.accessToken}:{TAG:"Error",_0:f._0}}else l={TAG:"Ok",_0:void 0};if(l.TAG!=="Ok")return{TAG:"Error",_0:l._0};let d=Qp(Tr(r,"tool-scope"));if(d.TAG!=="Ok")return{TAG:"Error",_0:d._0};let u=Tr(r,"owner-username"),c=Qs({command:Tr(r,"command"),serviceUrl:i,accessToken:l._0,delegationAuthFilePath:Tr(r,"delegation-auth-file"),ownerUsername:u!==void 0?u:process.env.LINZUMI_MCP_OWNER_USERNAME,operatingMode:s._0,toolScope:d._0});switch(a){case"claude-code":return ma(Mx(c)),{TAG:"Ok",_0:void 0};case"codex":return ma(jx(c)),{TAG:"Ok",_0:void 0};default:return{TAG:"Error",_0:"--format must be codex or claude-code"}}}async function YH(e){let t=fc(e);if(t.TAG!=="Ok")return{TAG:"Error",_0:t._0};let r=t._0,n=pc(r,"api-url");if(n.TAG!=="Ok")return{TAG:"Error",_0:n._0};let i=n._0,o=await $v(Mv(r,i));if(o.TAG!=="Ok")return{TAG:"Error",_0:o._0};let a=o._0,s=a.mode,l;if(s==="LocalRunner"){let d=await qs(i,a.accessToken,Tr(r,"workspace"),Tr(r,"channel"),void 0);if(d.TAG==="Ok")switch(d._0){case"Usable":l={TAG:"Ok",_0:void 0};break;case"Rejected":case"NotFound":l={TAG:"Error",_0:"Linzumi MCP auth validation failed"};break}else l={TAG:"Error",_0:d._0.summary}}else{let d=hc(Tr(r,"mode"));if(d.TAG==="Ok"){let u=s_({serviceUrl:i,accessToken:a.accessToken,authMode:a.mode,operatingMode:d._0});if(u.TAG==="Ok")try{await u._0.validateAuth(),l={TAG:"Ok",_0:void 0}}catch(c){let f=Y(c);l={TAG:"Error",_0:xs(f)}}else l={TAG:"Error",_0:u._0}}else l={TAG:"Error",_0:d._0}}return l.TAG!=="Ok"?{TAG:"Error",_0:l._0}:(ma(`Linzumi MCP auth OK
|
|
323
323
|
`),{TAG:"Ok",_0:void 0})}async function yP(e){let t=e.slice(1),r=e[0];if(r!==void 0)switch(r){case"--help":case"-h":return ma(_c()),{TAG:"Ok",_0:void 0};case"config":return await JH(t);case"doctor":return await YH(t);case"server":return await KH(t);default:return{TAG:"Error",_0:"unknown linzumi mcp command: "+r}}else return ma(_c()),{TAG:"Ok",_0:void 0}}import*as SP from"node:fs";import*as wP from"node:url";import*as hn from"node:path";import*as kP from"node:module";var QH=[["linux","x64",{triple:"x86_64-unknown-linux-musl",packageName:"@openai/codex-linux-x64"}],["linux","arm64",{triple:"aarch64-unknown-linux-musl",packageName:"@openai/codex-linux-arm64"}],["android","x64",{triple:"x86_64-unknown-linux-musl",packageName:"@openai/codex-linux-x64"}],["android","arm64",{triple:"aarch64-unknown-linux-musl",packageName:"@openai/codex-linux-arm64"}],["darwin","x64",{triple:"x86_64-apple-darwin",packageName:"@openai/codex-darwin-x64"}],["darwin","arm64",{triple:"aarch64-apple-darwin",packageName:"@openai/codex-darwin-arm64"}],["win32","x64",{triple:"x86_64-pc-windows-msvc",packageName:"@openai/codex-win32-x64"}],["win32","arm64",{triple:"aarch64-pc-windows-msvc",packageName:"@openai/codex-win32-arm64"}]];function xP(e,t){return G(QH.find(r=>r[0]===e?r[1]===t:!1),r=>r[2])}function e4(e){try{return kP.createRequire(import.meta.url).resolve(e)}catch{return}}function t4(e){let t=ws(e);return t.TAG==="Ok"?t._0:[]}function Nm(){return{platform:process.platform,arch:process.arch,fileExists:e=>SP.existsSync(e),listDirectory:t4,resolveModulePath:e4,moduleDir:hn.dirname(wP.fileURLToPath(import.meta.url))}}function TP(e,t,r){let n=t;for(;;){let i=n,o=hn.join(...[i,"node_modules"].concat(e.split("/")));if(r(hn.join(o,"package.json")))return o;let a=hn.dirname(i);if(a===i)return;n=a}}function jv(e,t){let r=t.resolveModulePath(e+"/package.json");return r!==void 0?hn.dirname(r):TP(e,t.moduleDir,t.fileExists)}function r4(e,t,r){let i=r.platform==="win32"?"codex.exe":"codex",o=hn.join(e,t),s=[hn.join(o,"codex",i),hn.join(o,"bin",i),hn.join(o,i)].find(l=>r.fileExists(l));return s!==void 0?s:r.listDirectory(o).map(l=>hn.join(o,l,i)).find(l=>r.fileExists(l))}function n4(e){let t=xP(e.platform,e.arch);if(t===void 0)return;let r=[],n=jv(t.packageName,e);n!==void 0&&r.push(hn.join(n,"vendor"));let i=jv("@openai/codex",e);return i!==void 0&&r.push(hn.join(i,"vendor")),Ze(r,void 0,(o,a)=>o!==void 0?o:r4(a,t.triple,e))}function i4(e){let t=jv("@openai/codex",e);if(t===void 0)return;let r=Xt(hn.join(t,"package.json"));if(r.TAG!=="Ok")return;let n;try{n=JSON.parse(r._0)}catch{n=void 0}if(n===void 0||typeof n!="object"||n===null||Array.isArray(n))return;let i=n.version;if(i!==void 0&&typeof i=="string"&&i.trim()!=="")return i.trim()}var o4=new RegExp("(\\d+\\.\\d+\\.\\d+)");function Gm(e){let t=ks(e,["--version"],1e4,1048576);if(t.TAG!=="Ok")return;let r=o4.exec(t._0);if(r!=null)return w(r.slice(1)[0],n=>n)}function a4(e,t){return e!==void 0&&t!==void 0?e===t?{TAG:"Match",version:e}:{TAG:"Mismatch",pathVersion:e,pinnedVersion:t}:{TAG:"Unverified",pathVersion:e,pinnedVersion:t}}function s4(e){switch(e.TAG){case"Match":return"match";case"Mismatch":return"mismatch";case"Unverified":return"unverified"}}var zv="LINZUMI_ALLOW_HARNESS_MISMATCH",bP={contents:!1};var l4="Warning: the Codex engine bundled with @linzumi/cli could not be located in its install (@openai/codex platform binary missing). Falling back to `codex` from PATH - the engine version may not match this CLI release. Pass --codex-bin <path> to pin an engine explicitly.\n";function d4(e){if(!bP.contents)return bP.contents=!0,e(l4)}function vP(e,t){return"the codex engine bundled with @linzumi/cli is missing from this install and the `codex` on PATH is version "+e+", but this CLI release pins engine "+t+". "+("Running a mismatched engine breaks the wire protocol (codex "+t+" vocabulary), so refusing to start. ")+("Fix: reinstall the CLI (a fresh `npx -y @linzumi/cli@latest` restores the bundled engine), pass --codex-bin <path> to pin an engine deliberately, or set "+zv+"=1 to accept the skew.")}function u4(e,t){return"Warning: proceeding with the PATH codex "+e+" despite the CLI pinning engine "+t+" ("+zv+`=1). Engine/CLI version skew can break the wire protocol.
|
|
324
|
-
`}function c4(e,t){}function Fm(e,t,r,n,i,o){let a=o!==void 0?o:c4;if(e!==void 0)return{TAG:"Ok",_0:{codexBin:e,source:"ExplicitFlag"}};let s=n4(t);if(s!==void 0){let f={};return f.codex_bin_path=s,f.codex_bin_source="bundled",a("codex.binary.resolved",f),{TAG:"Ok",_0:{codexBin:s,source:"Bundled"}}}d4(r);let l=i4(t),d=l!==void 0?n("codex"):void 0,u=a4(d,l),c={};switch(c.codex_bin_path="codex",c.codex_bin_source="path-fallback",c.harness_version_check=s4(u),u.TAG){case"Match":c.harness_version=u.version;break;case"Mismatch":c.path_harness_version=u.pathVersion,c.pinned_harness_version=u.pinnedVersion;break;case"Unverified":c.path_harness_version=dn(u.pathVersion,null,f=>f),c.pinned_harness_version=dn(u.pinnedVersion,null,f=>f);break}switch(a("codex.binary.resolved",c),u.TAG){case"Mismatch":let f=u.pinnedVersion,h=u.pathVersion,m=i[zv];return m===void 0?{TAG:"Error",_0:vP(h,f)}:m!=="1"?{TAG:"Error",_0:vP(h,f)}:(r(u4(h,f)),{TAG:"Ok",_0:{codexBin:"codex",source:"PathFallback"}});case"Match":case"Unverified":return{TAG:"Ok",_0:{codexBin:"codex",source:"PathFallback"}}}}function AP(e){if(typeof e=="number"&&e%1===0)return e}function f4(e){if(typeof e=="string")return e}function m4(e){let t=e.replaceAll("-","+").replaceAll("_","/");switch(t.length&3){case 2:return t+"==";case 3:return t+"=";default:return t}}function OP(e){let t=e.split(".")[1];if(t===void 0)return;let r=Buffer.from(m4(t),"base64").toString("utf8"),n;try{n=JSON.parse(r)}catch{n=void 0}if(typeof n=="object"&&n!==null&&!Array.isArray(n))return n}function Iu(e){let t=OP(e);if(t===void 0)return{actorUserId:void 0,actorUsername:void 0};let r=AP(t.actor_id);return{actorUserId:r!==void 0?r:AP(t.sub),actorUsername:f4(t.actor_username)}}function CP(e){let t=w(OP(e),n=>n.workspace_scope),r=t!==void 0?Array.isArray(t)?Ne(t,n=>{if(typeof n=="string"&&n.trim()!=="")return n}):[]:[];if(r.length===1)return r[0]}var Fv=[["codex.agent_turn_narration_only_no_reply","harness.agent_turn_narration_only_no_reply"],["codex.cost_cap_402_seen","harness.cost_cap_402_seen"],["codex.edge_blocked_captured","harness.edge_blocked_captured"],["codex.empty_turn_auto_retry_suppressed_cost_cap","harness.empty_turn_auto_retry_suppressed_cost_cap"],["codex.empty_turn_loop_guard_tripped","harness.empty_turn_loop_guard_tripped"],["codex.error_without_http_status_captured","harness.error_without_http_status_captured"],["codex.mid_stream_stall_auto_resume_flagged","harness.mid_stream_stall_auto_resume_flagged"],["codex.mid_stream_stall_fresh_session_resume","harness.mid_stream_stall_fresh_session_resume"],["codex.mid_stream_stall_fresh_session_resume_failed","harness.mid_stream_stall_fresh_session_resume_failed"],["codex.mid_stream_stall_fresh_session_resume_flagged","harness.mid_stream_stall_fresh_session_resume_flagged"],["codex.mid_stream_stall_resume_suppressed_rate_limit","harness.mid_stream_stall_resume_suppressed_rate_limit"],["codex.mid_stream_stall_second_stall_after_resume","harness.mid_stream_stall_second_stall_after_resume"],["codex.pre_first_byte_stall_auto_retry_flagged","harness.pre_first_byte_stall_auto_retry_flagged"],["codex.pre_first_byte_stall_retry_suppressed_cost_cap","harness.pre_first_byte_stall_retry_suppressed_cost_cap"],["codex.provider_outage_flagged_captured","harness.provider_outage_flagged_captured"],["codex.reasoning_loop_breaker_tripped","harness.reasoning_loop_breaker_tripped"],["codex.tool_fatal_captured","harness.tool_fatal_captured"],["codex.turn_completed","job.turn_completed"],["codex.turn_completed_with_protocol_failure","job.turn_completed_with_protocol_failure"],["codex.turn_completed_with_unsupported_tool_call_ignored","job.turn_completed_with_unsupported_tool_call_ignored"],["codex.turn_completed_without_assistant_output","job.turn_completed_without_assistant_output"],["codex.turn_demoted_late_upstream_error","job.turn_demoted_late_upstream_error"],["codex.turn_forward_failed","job.turn_forward_failed"],["codex.upstream_error_captured","harness.upstream_error_captured"],["codex.upstream_rejection_captured","harness.upstream_rejection_captured"],["codex.upstream_turn_error_captured","harness.upstream_turn_error_captured"],["kandan.chat_event","linzumi.chat_event"],["kandan.chat_event_abandoned","linzumi.chat_event_abandoned"],["kandan.chat_event_failed","linzumi.chat_event_failed"],["kandan.chat_event_failure_cleared","linzumi.chat_event_failure_cleared"],["kandan.claude_code_interrupt_state_push_failed","linzumi.claude_code_interrupt_state_push_failed"],["kandan.claude_code_stop_state_push_failed","linzumi.claude_code_stop_state_push_failed"],["kandan.claude_code_typing_heartbeat_failed","linzumi.claude_code_typing_heartbeat_failed"],["kandan.claude_code_typing_start_wait_timeout","linzumi.claude_code_typing_start_wait_timeout"],["kandan.claude_code_typing_stop_failed","linzumi.claude_code_typing_stop_failed"],["kandan.claude_code_user_input_abort_publish_failed","linzumi.claude_code_user_input_abort_publish_failed"],["kandan.claude_code_user_question_completed_publish_failed","linzumi.claude_code_user_question_completed_publish_failed"],["kandan.codex_command_output_forwarded","linzumi.codex_command_output_forwarded"],["kandan.codex_delta_forwarded","linzumi.codex_delta_forwarded"],["kandan.codex_file_change_forwarded","linzumi.codex_file_change_forwarded"],["kandan.codex_notification_push_failed","linzumi.codex_notification_push_failed"],["kandan.codex_output_forwarded","linzumi.codex_output_forwarded"],["kandan.codex_reasoning_delta_forwarded","linzumi.codex_reasoning_delta_forwarded"],["kandan.codex_web_search_progress_forwarded","linzumi.codex_web_search_progress_forwarded"],["kandan.connection_force_reconnect","linzumi.connection_force_reconnect"],["kandan.connection_force_reconnect_dispatched","linzumi.connection_force_reconnect_dispatched"],["kandan.connection_hard_reset","linzumi.connection_hard_reset"],["kandan.connection_hard_reset_exhausted","linzumi.connection_hard_reset_exhausted"],["kandan.connection_recovered","linzumi.connection_recovered"],["kandan.connection_stale","linzumi.connection_stale"],["kandan.connection_unrecoverable","linzumi.connection_unrecoverable"],["kandan.control","linzumi.control"],["kandan.control_ack_withheld_on_failure","linzumi.control_ack_withheld_on_failure"],["kandan.control_epoch_changed","linzumi.control_epoch_changed"],["kandan.control_handler_threw","linzumi.control_handler_threw"],["kandan.control_ignored","linzumi.control_ignored"],["kandan.control_response_push_failed","linzumi.control_response_push_failed"],["kandan.failed_seq_overflow","linzumi.failed_seq_overflow"],["kandan.forward_port_revoked_push_failed","linzumi.forward_port_revoked_push_failed"],["kandan.forward_response","linzumi.forward_response"],["kandan.forward_response_push_failed","linzumi.forward_response_push_failed"],["kandan.forward_tunnel_error","linzumi.forward_tunnel_error"],["kandan.forward_tunnel_open_failed","linzumi.forward_tunnel_open_failed"],["kandan.heartbeat_push_failed","linzumi.heartbeat_push_failed"],["kandan.local_editor_initial_status_failed","linzumi.local_editor_initial_status_failed"],["kandan.local_editor_status_push_failed","linzumi.local_editor_status_push_failed"],["kandan.message_duplicate_ignored","linzumi.message_duplicate_ignored"],["kandan.message_ignored","linzumi.message_ignored"],["kandan.message_queued","linzumi.message_queued"],["kandan.message_spawn_on_miss","linzumi.message_spawn_on_miss"],["kandan.message_spawn_on_miss_failed","linzumi.message_spawn_on_miss_failed"],["kandan.message_state_refresh_failed","linzumi.message_state_refresh_failed"],["kandan.optional_push_failed","linzumi.optional_push_failed"],["kandan.post_stop_queue_drain_failed","linzumi.post_stop_queue_drain_failed"],["kandan.queue_drain_blocked","linzumi.queue_drain_blocked"],["kandan.queue_drain_dead_worker_fail_publish_failed","linzumi.queue_drain_dead_worker_fail_publish_failed"],["kandan.queue_drain_dead_worker_rebuild","linzumi.queue_drain_dead_worker_rebuild"],["kandan.queue_drain_dead_worker_rebuild_exhausted","linzumi.queue_drain_dead_worker_rebuild_exhausted"],["kandan.queue_drain_dead_worker_rebuild_failed","linzumi.queue_drain_dead_worker_rebuild_failed"],["kandan.reconnect_handling_failed","linzumi.reconnect_handling_failed"],["kandan.reconnect_thread_context_fetch_failed","linzumi.reconnect_thread_context_fetch_failed"],["kandan.reconnect_thread_cwd_failed_state_push_failed","linzumi.reconnect_thread_cwd_failed_state_push_failed"],["kandan.reconnect_thread_failed","linzumi.reconnect_thread_failed"],["kandan.reconnect_thread_processing_state_push_failed","linzumi.reconnect_thread_processing_state_push_failed"],["kandan.reconnect_thread_queue_closed_state_push_failed","linzumi.reconnect_thread_queue_closed_state_push_failed"],["kandan.reconnect_thread_queue_failed_state_push_failed","linzumi.reconnect_thread_queue_failed_state_push_failed"],["kandan.reconnect_thread_queue_state_push_failed","linzumi.reconnect_thread_queue_state_push_failed"],["kandan.reconnect_thread_rehydrate_forced","linzumi.reconnect_thread_rehydrate_forced"],["kandan.reconnect_thread_rehydrated","linzumi.reconnect_thread_rehydrated"],["kandan.reconnect_thread_rehydrated_state_push_failed","linzumi.reconnect_thread_rehydrated_state_push_failed"],["kandan.reconnect_thread_rehydration_failed","linzumi.reconnect_thread_rehydration_failed"],["kandan.reconnect_thread_rehydration_ir_emitted","linzumi.reconnect_thread_rehydration_ir_emitted"],["kandan.reconnect_thread_rehydration_items_failed","linzumi.reconnect_thread_rehydration_items_failed"],["kandan.reconnect_thread_resume_failed","linzumi.reconnect_thread_resume_failed"],["kandan.reconnect_thread_seq_already_applied","linzumi.reconnect_thread_seq_already_applied"],["kandan.reconnect_thread_transcript_fetch_failed","linzumi.reconnect_thread_transcript_fetch_failed"],["kandan.reconnect_thread_unarchive_failed","linzumi.reconnect_thread_unarchive_failed"],["kandan.reconnect_thread_unarchive_resumed","linzumi.reconnect_thread_unarchive_resumed"],["kandan.reconnect_thread_unarchive_started","linzumi.reconnect_thread_unarchive_started"],["kandan.reconnect_thread_unavailable_state_push_failed","linzumi.reconnect_thread_unavailable_state_push_failed"],["kandan.reconnected","linzumi.reconnected"],["kandan.roster_seeded","linzumi.roster_seeded"],["kandan.session_app_server_lost_push_failed","linzumi.session_app_server_lost_push_failed"],["kandan.session_settings_publish_failed","linzumi.session_settings_publish_failed"],["kandan.start_instance_claude_code_attachment_failed_state_push_failed","linzumi.start_instance_claude_code_attachment_failed_state_push_failed"],["kandan.start_instance_codex_app_server_unavailable","linzumi.start_instance_codex_app_server_unavailable"],["kandan.start_instance_cwd_failed_state_push_failed","linzumi.start_instance_cwd_failed_state_push_failed"],["kandan.start_instance_cwd_rejected","linzumi.start_instance_cwd_rejected"],["kandan.start_instance_failed","linzumi.start_instance_failed"],["kandan.start_instance_processing_state_push_failed","linzumi.start_instance_processing_state_push_failed"],["kandan.start_instance_skipped_known_session","linzumi.start_instance_skipped_known_session"],["kandan.start_instance_stale_skipped","linzumi.start_instance_stale_skipped"],["kandan.start_instance_unavailable_state_push_failed","linzumi.start_instance_unavailable_state_push_failed"],["kandan.start_instance_wafer_state_push_failed","linzumi.start_instance_wafer_state_push_failed"],["kandan.start_turn_replay_skipped","linzumi.start_turn_replay_skipped"],["kandan.steer_duplicate_ignored","linzumi.steer_duplicate_ignored"],["kandan.steer_parked_as_own_turn","linzumi.steer_parked_as_own_turn"],["kandan.thread_bind_from_historical_reply_failed","linzumi.thread_bind_from_historical_reply_failed"],["kandan.thread_bound_from_historical_reply","linzumi.thread_bound_from_historical_reply"],["kandan.thread_sessions_reannounce_failed","linzumi.thread_sessions_reannounce_failed"],["kandan.thread_sessions_reannounced","linzumi.thread_sessions_reannounced"],["kandan.tui_input_mirrored","linzumi.tui_input_mirrored"],["kandan.typing_heartbeat_failed","linzumi.typing_heartbeat_failed"],["kandan.typing_stop_after_completion_failed","linzumi.typing_stop_after_completion_failed"]],EP=[["codexThreadId","harness_session_id"],["codex_thread_id","harness_session_id"],["kandanThreadId","thread_id"],["kandan_preview_ticket","linzumi_preview_ticket"],["kandan_thread_id","thread_id"],["linzumiThreadId","thread_id"],["linzumi_thread_id","thread_id"],["local_codex_runner","commander"],["runnerId","commander_id"],["runner_config","commander_config"],["runner_id","commander_id"]],Dm=[["commander","local_codex_runner"],["commander_config","runner_config"],["commander_id","runner_id"],["harness_session_id","codex_thread_id"],["linzumi_preview_ticket","kandan_preview_ticket"],["thread_id","kandan_thread_id"]],Dv=[["engine_boot_reconnect","harness_boot_reconnect"],["engine_for_runner_event_type","harness_for_commander_event_type"],["engine_rejected_steer","harness_rejected_steer"],["engine_unavailable","harness_unavailable"],["join_engine","join_harness"],["kandan-local-codex-runner","linzumi-commander"],["local_codex_runner","commander"],["original_engine","original_harness"],["resume_engine","resume_harness"]];function $u(){return k("1.0.171","0.0.0-unbundled")}function Lv(){return"linzumi "+k("1.0.171","0.0.0-unbundled")}function Ol(e,t){let r=e.indexOf(t);if(r!==-1)return r}function Uv(){let e=process.env.LINZUMI_NAMING_DUAL_EMIT;if(e===void 0)return!0;let t=e.trim().toLowerCase();return t!=="0"?t!=="false":!1}function Wv(e){let t={};return e.forEach(r=>{t[r[0]]=r[1]}),t}function p4(e){let t={};return e.forEach(r=>{t[r[1]]=r[0]}),t}var IP=Wv(EP),$P=Wv(Dm),h4=Wv(Dv),_4=p4(Dv);function g4(e){return e.endsWith("_canonical")?!0:e.endsWith("_legacy")}function MP(e,t){return t>=32?e:Array.isArray(e)?e.map(r=>MP(r,t+1|0)):e===null?e:typeof e==="object"?jP(e,t):e}function jP(e,t){let r=Object.keys(e),n={};return r.forEach(i=>{let o=e[i];if(o!==void 0){n[i]=MP(o,t+1|0);return}}),r.forEach(i=>{if(g4(i))return;let o=n[i];if(o===void 0)return;let a=IP[i];if(a!==void 0)n[a]=o;else{let c=$P[i];c!==void 0&&(n[c]!==void 0||(n[c]=o))}let s=n[i];if(s===void 0||typeof s!="string")return;let l=h4[s];if(l!==void 0){if(n[i+"_canonical"]!==void 0)return;n[i+"_canonical"]=l;return}let d=_4[s];if(!(d===void 0||n[i+"_legacy"]!==void 0)){n[i+"_legacy"]=d;return}}),n}function qm(e){return Uv()?jP(e,0):e}function zP(e){let t=e.slice();return e.forEach(r=>{let n=IP[r];n!==void 0&&!t.includes(n)&&t.push(n);let i=$P[r];if(i!==void 0&&!t.includes(i)){t.push(i);return}}),t}var Cl="<SENSITIVE_DATA>",y4=zP(["access_token","authorization","code","cookie","kandan_preview_ticket","refresh_token","token"]),b4=["--access-token","--api-key","--authorization","--cookie","--oauth-code","--password","--refresh-token","--secret","--token"],v4=new RegExp("^(authorization|cookie|set-cookie|password)$","i"),S4=new RegExp("(^|[_-])(access[_-]?token|api[_-]?key|auth[_-]?token|oauth[_-]?code|refresh[_-]?token|secret|token)$","i"),w4=new RegExp("\\beyJ[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b","g");function k4(e){return e!==void 0?v4.test(e)?!0:S4.test(e):!1}function NP(e){let t={contents:!1};return l0(e).forEach(r=>{if(y4.includes(r.toLowerCase())){e.set(r,Cl),t.contents=!0;return}}),t.contents}function x4(e){let t=Ol(e,"?"),r=Ol(e,"#");if(t===void 0||r!==void 0&&r<t)return e;let n=e.slice(0,t),i=r!==void 0?e.slice(t+1|0,r):e.slice(t+1|0),o=r!==void 0?e.slice(r):"",a=new URLSearchParams(i);return NP(a)?n+"?"+a.toString()+o:e}function T4(e){let t=Hn(e);if(t===void 0)return x4(e);let r=de(t);return NP(r.searchParams),r.toString()}function GP(e){return T4(e).replace(w4,Cl)}function A4(e){let t=Ol(e,"=");return t!==void 0?[e.slice(0,t),e.slice(t+1|0)]:[e,void 0]}function Vv(e,t){if(k4(t))return Cl;if(Array.isArray(e))return t==="args"?O4(e):e.map(r=>Vv(r,void 0));if(e===null)return e;switch(typeof e){case"string":return GP(e);case"object":return FP(e);default:return e}}function O4(e){let t={contents:!1};return e.map(r=>{if(typeof r=="string"){if(t.contents)return t.contents=!1,Cl;let n=A4(r),i=n[0];return b4.includes(i)?n[1]!==void 0?i+"="+Cl:(t.contents=!0,r):GP(r)}return t.contents=!1,Vv(r,void 0)})}function FP(e){let t=e.name,r=typeof t=="string"?t.toLowerCase():void 0,n;if(r!==void 0)switch(r){case"authorization":case"cookie":case"set-cookie":n=!0;break;default:n=!1}else n=!1;let i={};return Object.entries(e).forEach(o=>{let a=o[0];if(a!=="runner_console"){i[a]=n&&a==="value"?Cl:Vv(o[1],a);return}}),i}var Lm=FP;import*as sa from"node:os";import*as Wp from"node:path";import*as Gw from"node:crypto";function qn(e){let t=parseFloat(e);if(!Number.isNaN(t))return t}function qP(e){return"local_runner:"+e}var C4="kandan-local-codex-runner",E4="rescript";function LP(e){let t={};t.clientName=C4,t.clientId=e.clientId;let r=e.machineFingerprint;t.machineFingerprint=r!==void 0?r:null,Object.entries(Mk(e.machineFingerprintV2)).forEach(a=>{t[a[0]]=a[1]}),t.runnerPid=e.runnerPid,t.version=e.version,t.hostname=e.hostname,t.cwd=e.cwd;let n=e.workspace;t.workspace=n!==void 0?n:null;let i=e.channel;t.channel=i!==void 0?i:null,t.capabilities=e.capabilities;let o=e.generationOverlapEpoch;if(o!==void 0){let a={};a.epoch=o,a.overlap=!0,t.generation=a}return t.commander_impl=E4,t}function UP(e,t,r){let n={};return n.last_seq=r,t!==void 0&&(n.runner_id=e,n.thread_id=t),n}function Ln(e,t){return e.catch(r=>t(Y(r)))}function ZP(){let e=[],t=[],r={contents:!1},n=()=>{let a=e.shift();return a!==void 0?Promise.resolve({done:!1,value:a}):r.contents?Promise.resolve({done:!0}):new Promise((s,l)=>{t.push(s)})},i=()=>(r.contents=!0,Promise.resolve({done:!0})),o={};return o[Symbol.asyncIterator]=()=>({next:n,return:i}),{iterable:o,push:a=>{if(r.contents)return!1;let s=t.shift();return s!==void 0?(s({done:!1,value:a}),!0):(e.push(a),!0)},close:()=>{r.contents=!0,(()=>{for(;;){let s=t.shift();if(s===void 0)return;s({done:!0})}})()}}}function VP(e){return import(e)}var R4="@anthropic-ai/claude-agent-sdk";function HP(e){return ZP()}function I4(e){return{next:()=>e.next(),close:()=>{e.close()},interrupt:()=>e.interrupt(),setModel:t=>e.setModel(t),setPermissionMode:t=>e.setPermissionMode(t),applyFlagSettings:t=>e.applyFlagSettings(t),supportedCommands:()=>e.supportedCommands()}}async function BP(){let e=await VP(R4);return{query:t=>I4(e.query(t)),getSessionInfo:(t,r)=>e.getSessionInfo(t,r),listSessions:t=>e.listSessions(t),getSessionMessages:(t,r)=>e.getSessionMessages(t,r)}}var Hv=["codex","claude-code","pi","opencode"];function is(e){return e}function Um(e){switch(e.TAG){case"SessionStarted":return"session_started";case"TurnStarted":return"turn_started";case"ItemStarted":return"item_started";case"ItemDelta":return"item_delta";case"ItemCompleted":return"item_completed";case"ApprovalRequested":return"approval_requested";case"UsageUpdated":return"usage_updated";case"RateLimitUpdated":return"rate_limit_updated";case"ActivityPulse":return"activity_pulse";case"TurnCompleted":return"turn_completed";case"TurnFailed":return"turn_failed";case"TurnInterrupted":return"turn_interrupted";case"HarnessDied":return"harness_died"}}function Jv(e){switch(e){case"BindingNotObject":return"binding_not_object";case"SessionIdInvalid":return"session_id_invalid";case"LeaseEpochInvalid":return"lease_epoch_invalid";case"NextFrameIndexInvalid":return"next_frame_index_invalid";case"CheckpointConfigMissing":return"checkpoint_config_missing";case"CheckpointConfigInvalid":return"checkpoint_config_invalid";case"SourceSeqInvalid":return"source_seq_invalid"}}function Bv(e){return"adt_stream_v1 dispatch refused: "+Jv(e)+"; the commander refuses to stream unconfigured (no baked fallback thresholds exist by law - plan doc 2.4/MF9)"}function YP(e){switch(e){case"Checkpoint":return"checkpoint";case"Delta":return"delta";case"Terminal":return"terminal"}}function Zm(e){if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}function os(e){if(e!==void 0&&typeof e=="number"&&e>=1&&Math.trunc(e)===e)return e}function $4(e){let t=Zm(e);if(t===void 0)return;let r=os(t.version),n=w(t.thresholds,Zm);if(r===void 0||n===void 0)return;let i=os(n.max_bytes),o=os(n.max_deltas),a=os(n.max_interval_ms);if(i!==void 0&&o!==void 0&&a!==void 0)return{version:r,thresholds:{maxBytes:i,maxDeltas:o,maxIntervalMs:a}}}function M4(e){let t=Zm(e);if(t===void 0)return{TAG:"ParseRefused",_0:"BindingNotObject"};let r=os(t.session_id);if(r===void 0)return{TAG:"ParseRefused",_0:"SessionIdInvalid"};let n=os(t.lease_epoch);if(n===void 0)return{TAG:"ParseRefused",_0:"LeaseEpochInvalid"};let i=os(t.next_frame_index);if(i===void 0)return{TAG:"ParseRefused",_0:"NextFrameIndexInvalid"};let o=t.checkpoint_config;if(o===void 0)return{TAG:"ParseRefused",_0:"CheckpointConfigMissing"};let a=$4(o);return a!==void 0?{TAG:"Parsed",_0:{sessionId:r,leaseEpoch:n,nextFrameIndex:i,checkpointConfig:a}}:{TAG:"ParseRefused",_0:"CheckpointConfigInvalid"}}function j4(e){return yn(YP(e.frameKind)+`
|
|
324
|
+
`}function c4(e,t){}function Fm(e,t,r,n,i,o){let a=o!==void 0?o:c4;if(e!==void 0)return{TAG:"Ok",_0:{codexBin:e,source:"ExplicitFlag"}};let s=n4(t);if(s!==void 0){let f={};return f.codex_bin_path=s,f.codex_bin_source="bundled",a("codex.binary.resolved",f),{TAG:"Ok",_0:{codexBin:s,source:"Bundled"}}}d4(r);let l=i4(t),d=l!==void 0?n("codex"):void 0,u=a4(d,l),c={};switch(c.codex_bin_path="codex",c.codex_bin_source="path-fallback",c.harness_version_check=s4(u),u.TAG){case"Match":c.harness_version=u.version;break;case"Mismatch":c.path_harness_version=u.pathVersion,c.pinned_harness_version=u.pinnedVersion;break;case"Unverified":c.path_harness_version=dn(u.pathVersion,null,f=>f),c.pinned_harness_version=dn(u.pinnedVersion,null,f=>f);break}switch(a("codex.binary.resolved",c),u.TAG){case"Mismatch":let f=u.pinnedVersion,h=u.pathVersion,m=i[zv];return m===void 0?{TAG:"Error",_0:vP(h,f)}:m!=="1"?{TAG:"Error",_0:vP(h,f)}:(r(u4(h,f)),{TAG:"Ok",_0:{codexBin:"codex",source:"PathFallback"}});case"Match":case"Unverified":return{TAG:"Ok",_0:{codexBin:"codex",source:"PathFallback"}}}}function AP(e){if(typeof e=="number"&&e%1===0)return e}function f4(e){if(typeof e=="string")return e}function m4(e){let t=e.replaceAll("-","+").replaceAll("_","/");switch(t.length&3){case 2:return t+"==";case 3:return t+"=";default:return t}}function OP(e){let t=e.split(".")[1];if(t===void 0)return;let r=Buffer.from(m4(t),"base64").toString("utf8"),n;try{n=JSON.parse(r)}catch{n=void 0}if(typeof n=="object"&&n!==null&&!Array.isArray(n))return n}function Iu(e){let t=OP(e);if(t===void 0)return{actorUserId:void 0,actorUsername:void 0};let r=AP(t.actor_id);return{actorUserId:r!==void 0?r:AP(t.sub),actorUsername:f4(t.actor_username)}}function CP(e){let t=w(OP(e),n=>n.workspace_scope),r=t!==void 0?Array.isArray(t)?Ne(t,n=>{if(typeof n=="string"&&n.trim()!=="")return n}):[]:[];if(r.length===1)return r[0]}var Fv=[["codex.agent_turn_narration_only_no_reply","harness.agent_turn_narration_only_no_reply"],["codex.cost_cap_402_seen","harness.cost_cap_402_seen"],["codex.edge_blocked_captured","harness.edge_blocked_captured"],["codex.empty_turn_auto_retry_suppressed_cost_cap","harness.empty_turn_auto_retry_suppressed_cost_cap"],["codex.empty_turn_loop_guard_tripped","harness.empty_turn_loop_guard_tripped"],["codex.error_without_http_status_captured","harness.error_without_http_status_captured"],["codex.mid_stream_stall_auto_resume_flagged","harness.mid_stream_stall_auto_resume_flagged"],["codex.mid_stream_stall_fresh_session_resume","harness.mid_stream_stall_fresh_session_resume"],["codex.mid_stream_stall_fresh_session_resume_failed","harness.mid_stream_stall_fresh_session_resume_failed"],["codex.mid_stream_stall_fresh_session_resume_flagged","harness.mid_stream_stall_fresh_session_resume_flagged"],["codex.mid_stream_stall_resume_suppressed_rate_limit","harness.mid_stream_stall_resume_suppressed_rate_limit"],["codex.mid_stream_stall_second_stall_after_resume","harness.mid_stream_stall_second_stall_after_resume"],["codex.pre_first_byte_stall_auto_retry_flagged","harness.pre_first_byte_stall_auto_retry_flagged"],["codex.pre_first_byte_stall_retry_suppressed_cost_cap","harness.pre_first_byte_stall_retry_suppressed_cost_cap"],["codex.provider_outage_flagged_captured","harness.provider_outage_flagged_captured"],["codex.reasoning_loop_breaker_tripped","harness.reasoning_loop_breaker_tripped"],["codex.tool_fatal_captured","harness.tool_fatal_captured"],["codex.turn_completed","job.turn_completed"],["codex.turn_completed_with_protocol_failure","job.turn_completed_with_protocol_failure"],["codex.turn_completed_with_unsupported_tool_call_ignored","job.turn_completed_with_unsupported_tool_call_ignored"],["codex.turn_completed_without_assistant_output","job.turn_completed_without_assistant_output"],["codex.turn_demoted_late_upstream_error","job.turn_demoted_late_upstream_error"],["codex.turn_forward_failed","job.turn_forward_failed"],["codex.upstream_error_captured","harness.upstream_error_captured"],["codex.upstream_rejection_captured","harness.upstream_rejection_captured"],["codex.upstream_turn_error_captured","harness.upstream_turn_error_captured"],["kandan.chat_event","linzumi.chat_event"],["kandan.chat_event_abandoned","linzumi.chat_event_abandoned"],["kandan.chat_event_failed","linzumi.chat_event_failed"],["kandan.chat_event_failure_cleared","linzumi.chat_event_failure_cleared"],["kandan.claude_code_interrupt_state_push_failed","linzumi.claude_code_interrupt_state_push_failed"],["kandan.claude_code_stop_state_push_failed","linzumi.claude_code_stop_state_push_failed"],["kandan.claude_code_typing_heartbeat_failed","linzumi.claude_code_typing_heartbeat_failed"],["kandan.claude_code_typing_start_wait_timeout","linzumi.claude_code_typing_start_wait_timeout"],["kandan.claude_code_typing_stop_failed","linzumi.claude_code_typing_stop_failed"],["kandan.claude_code_user_input_abort_publish_failed","linzumi.claude_code_user_input_abort_publish_failed"],["kandan.claude_code_user_question_completed_publish_failed","linzumi.claude_code_user_question_completed_publish_failed"],["kandan.codex_command_output_forwarded","linzumi.codex_command_output_forwarded"],["kandan.codex_delta_forwarded","linzumi.codex_delta_forwarded"],["kandan.codex_file_change_forwarded","linzumi.codex_file_change_forwarded"],["kandan.codex_notification_push_failed","linzumi.codex_notification_push_failed"],["kandan.codex_output_forwarded","linzumi.codex_output_forwarded"],["kandan.codex_reasoning_delta_forwarded","linzumi.codex_reasoning_delta_forwarded"],["kandan.codex_web_search_progress_forwarded","linzumi.codex_web_search_progress_forwarded"],["kandan.connection_force_reconnect","linzumi.connection_force_reconnect"],["kandan.connection_force_reconnect_dispatched","linzumi.connection_force_reconnect_dispatched"],["kandan.connection_hard_reset","linzumi.connection_hard_reset"],["kandan.connection_hard_reset_exhausted","linzumi.connection_hard_reset_exhausted"],["kandan.connection_recovered","linzumi.connection_recovered"],["kandan.connection_stale","linzumi.connection_stale"],["kandan.connection_unrecoverable","linzumi.connection_unrecoverable"],["kandan.control","linzumi.control"],["kandan.control_ack_withheld_on_failure","linzumi.control_ack_withheld_on_failure"],["kandan.control_epoch_changed","linzumi.control_epoch_changed"],["kandan.control_handler_threw","linzumi.control_handler_threw"],["kandan.control_ignored","linzumi.control_ignored"],["kandan.control_response_push_failed","linzumi.control_response_push_failed"],["kandan.failed_seq_overflow","linzumi.failed_seq_overflow"],["kandan.forward_port_revoked_push_failed","linzumi.forward_port_revoked_push_failed"],["kandan.forward_response","linzumi.forward_response"],["kandan.forward_response_push_failed","linzumi.forward_response_push_failed"],["kandan.forward_tunnel_error","linzumi.forward_tunnel_error"],["kandan.forward_tunnel_open_failed","linzumi.forward_tunnel_open_failed"],["kandan.heartbeat_push_failed","linzumi.heartbeat_push_failed"],["kandan.local_editor_initial_status_failed","linzumi.local_editor_initial_status_failed"],["kandan.local_editor_status_push_failed","linzumi.local_editor_status_push_failed"],["kandan.message_duplicate_ignored","linzumi.message_duplicate_ignored"],["kandan.message_ignored","linzumi.message_ignored"],["kandan.message_queued","linzumi.message_queued"],["kandan.message_spawn_on_miss","linzumi.message_spawn_on_miss"],["kandan.message_spawn_on_miss_failed","linzumi.message_spawn_on_miss_failed"],["kandan.message_state_refresh_failed","linzumi.message_state_refresh_failed"],["kandan.optional_push_failed","linzumi.optional_push_failed"],["kandan.post_stop_queue_drain_failed","linzumi.post_stop_queue_drain_failed"],["kandan.queue_drain_blocked","linzumi.queue_drain_blocked"],["kandan.queue_drain_dead_worker_fail_publish_failed","linzumi.queue_drain_dead_worker_fail_publish_failed"],["kandan.queue_drain_dead_worker_rebuild","linzumi.queue_drain_dead_worker_rebuild"],["kandan.queue_drain_dead_worker_rebuild_exhausted","linzumi.queue_drain_dead_worker_rebuild_exhausted"],["kandan.queue_drain_dead_worker_rebuild_failed","linzumi.queue_drain_dead_worker_rebuild_failed"],["kandan.reconnect_handling_failed","linzumi.reconnect_handling_failed"],["kandan.reconnect_thread_context_fetch_failed","linzumi.reconnect_thread_context_fetch_failed"],["kandan.reconnect_thread_cwd_failed_state_push_failed","linzumi.reconnect_thread_cwd_failed_state_push_failed"],["kandan.reconnect_thread_failed","linzumi.reconnect_thread_failed"],["kandan.reconnect_thread_processing_state_push_failed","linzumi.reconnect_thread_processing_state_push_failed"],["kandan.reconnect_thread_queue_closed_state_push_failed","linzumi.reconnect_thread_queue_closed_state_push_failed"],["kandan.reconnect_thread_queue_failed_state_push_failed","linzumi.reconnect_thread_queue_failed_state_push_failed"],["kandan.reconnect_thread_queue_state_push_failed","linzumi.reconnect_thread_queue_state_push_failed"],["kandan.reconnect_thread_rehydrate_forced","linzumi.reconnect_thread_rehydrate_forced"],["kandan.reconnect_thread_rehydrated","linzumi.reconnect_thread_rehydrated"],["kandan.reconnect_thread_rehydrated_state_push_failed","linzumi.reconnect_thread_rehydrated_state_push_failed"],["kandan.reconnect_thread_rehydration_failed","linzumi.reconnect_thread_rehydration_failed"],["kandan.reconnect_thread_rehydration_ir_emitted","linzumi.reconnect_thread_rehydration_ir_emitted"],["kandan.reconnect_thread_rehydration_items_failed","linzumi.reconnect_thread_rehydration_items_failed"],["kandan.reconnect_thread_resume_failed","linzumi.reconnect_thread_resume_failed"],["kandan.reconnect_thread_seq_already_applied","linzumi.reconnect_thread_seq_already_applied"],["kandan.reconnect_thread_transcript_fetch_failed","linzumi.reconnect_thread_transcript_fetch_failed"],["kandan.reconnect_thread_unarchive_failed","linzumi.reconnect_thread_unarchive_failed"],["kandan.reconnect_thread_unarchive_resumed","linzumi.reconnect_thread_unarchive_resumed"],["kandan.reconnect_thread_unarchive_started","linzumi.reconnect_thread_unarchive_started"],["kandan.reconnect_thread_unavailable_state_push_failed","linzumi.reconnect_thread_unavailable_state_push_failed"],["kandan.reconnected","linzumi.reconnected"],["kandan.roster_seeded","linzumi.roster_seeded"],["kandan.session_app_server_lost_push_failed","linzumi.session_app_server_lost_push_failed"],["kandan.session_settings_publish_failed","linzumi.session_settings_publish_failed"],["kandan.start_instance_claude_code_attachment_failed_state_push_failed","linzumi.start_instance_claude_code_attachment_failed_state_push_failed"],["kandan.start_instance_codex_app_server_unavailable","linzumi.start_instance_codex_app_server_unavailable"],["kandan.start_instance_cwd_failed_state_push_failed","linzumi.start_instance_cwd_failed_state_push_failed"],["kandan.start_instance_cwd_rejected","linzumi.start_instance_cwd_rejected"],["kandan.start_instance_failed","linzumi.start_instance_failed"],["kandan.start_instance_processing_state_push_failed","linzumi.start_instance_processing_state_push_failed"],["kandan.start_instance_skipped_known_session","linzumi.start_instance_skipped_known_session"],["kandan.start_instance_stale_skipped","linzumi.start_instance_stale_skipped"],["kandan.start_instance_unavailable_state_push_failed","linzumi.start_instance_unavailable_state_push_failed"],["kandan.start_instance_wafer_state_push_failed","linzumi.start_instance_wafer_state_push_failed"],["kandan.start_turn_replay_skipped","linzumi.start_turn_replay_skipped"],["kandan.steer_duplicate_ignored","linzumi.steer_duplicate_ignored"],["kandan.steer_parked_as_own_turn","linzumi.steer_parked_as_own_turn"],["kandan.thread_bind_from_historical_reply_failed","linzumi.thread_bind_from_historical_reply_failed"],["kandan.thread_bound_from_historical_reply","linzumi.thread_bound_from_historical_reply"],["kandan.thread_sessions_reannounce_failed","linzumi.thread_sessions_reannounce_failed"],["kandan.thread_sessions_reannounced","linzumi.thread_sessions_reannounced"],["kandan.tui_input_mirrored","linzumi.tui_input_mirrored"],["kandan.typing_heartbeat_failed","linzumi.typing_heartbeat_failed"],["kandan.typing_stop_after_completion_failed","linzumi.typing_stop_after_completion_failed"]],EP=[["codexThreadId","harness_session_id"],["codex_thread_id","harness_session_id"],["kandanThreadId","thread_id"],["kandan_preview_ticket","linzumi_preview_ticket"],["kandan_thread_id","thread_id"],["linzumiThreadId","thread_id"],["linzumi_thread_id","thread_id"],["local_codex_runner","commander"],["runnerId","commander_id"],["runner_config","commander_config"],["runner_id","commander_id"]],Dm=[["commander","local_codex_runner"],["commander_config","runner_config"],["commander_id","runner_id"],["harness_session_id","codex_thread_id"],["linzumi_preview_ticket","kandan_preview_ticket"],["thread_id","kandan_thread_id"]],Dv=[["engine_boot_reconnect","harness_boot_reconnect"],["engine_for_runner_event_type","harness_for_commander_event_type"],["engine_rejected_steer","harness_rejected_steer"],["engine_unavailable","harness_unavailable"],["join_engine","join_harness"],["kandan-local-codex-runner","linzumi-commander"],["local_codex_runner","commander"],["original_engine","original_harness"],["resume_engine","resume_harness"]];function $u(){return k("1.0.172","0.0.0-unbundled")}function Lv(){return"linzumi "+k("1.0.172","0.0.0-unbundled")}function Ol(e,t){let r=e.indexOf(t);if(r!==-1)return r}function Uv(){let e=process.env.LINZUMI_NAMING_DUAL_EMIT;if(e===void 0)return!0;let t=e.trim().toLowerCase();return t!=="0"?t!=="false":!1}function Wv(e){let t={};return e.forEach(r=>{t[r[0]]=r[1]}),t}function p4(e){let t={};return e.forEach(r=>{t[r[1]]=r[0]}),t}var IP=Wv(EP),$P=Wv(Dm),h4=Wv(Dv),_4=p4(Dv);function g4(e){return e.endsWith("_canonical")?!0:e.endsWith("_legacy")}function MP(e,t){return t>=32?e:Array.isArray(e)?e.map(r=>MP(r,t+1|0)):e===null?e:typeof e==="object"?jP(e,t):e}function jP(e,t){let r=Object.keys(e),n={};return r.forEach(i=>{let o=e[i];if(o!==void 0){n[i]=MP(o,t+1|0);return}}),r.forEach(i=>{if(g4(i))return;let o=n[i];if(o===void 0)return;let a=IP[i];if(a!==void 0)n[a]=o;else{let c=$P[i];c!==void 0&&(n[c]!==void 0||(n[c]=o))}let s=n[i];if(s===void 0||typeof s!="string")return;let l=h4[s];if(l!==void 0){if(n[i+"_canonical"]!==void 0)return;n[i+"_canonical"]=l;return}let d=_4[s];if(!(d===void 0||n[i+"_legacy"]!==void 0)){n[i+"_legacy"]=d;return}}),n}function qm(e){return Uv()?jP(e,0):e}function zP(e){let t=e.slice();return e.forEach(r=>{let n=IP[r];n!==void 0&&!t.includes(n)&&t.push(n);let i=$P[r];if(i!==void 0&&!t.includes(i)){t.push(i);return}}),t}var Cl="<SENSITIVE_DATA>",y4=zP(["access_token","authorization","code","cookie","kandan_preview_ticket","refresh_token","token"]),b4=["--access-token","--api-key","--authorization","--cookie","--oauth-code","--password","--refresh-token","--secret","--token"],v4=new RegExp("^(authorization|cookie|set-cookie|password)$","i"),S4=new RegExp("(^|[_-])(access[_-]?token|api[_-]?key|auth[_-]?token|oauth[_-]?code|refresh[_-]?token|secret|token)$","i"),w4=new RegExp("\\beyJ[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b","g");function k4(e){return e!==void 0?v4.test(e)?!0:S4.test(e):!1}function NP(e){let t={contents:!1};return l0(e).forEach(r=>{if(y4.includes(r.toLowerCase())){e.set(r,Cl),t.contents=!0;return}}),t.contents}function x4(e){let t=Ol(e,"?"),r=Ol(e,"#");if(t===void 0||r!==void 0&&r<t)return e;let n=e.slice(0,t),i=r!==void 0?e.slice(t+1|0,r):e.slice(t+1|0),o=r!==void 0?e.slice(r):"",a=new URLSearchParams(i);return NP(a)?n+"?"+a.toString()+o:e}function T4(e){let t=Hn(e);if(t===void 0)return x4(e);let r=de(t);return NP(r.searchParams),r.toString()}function GP(e){return T4(e).replace(w4,Cl)}function A4(e){let t=Ol(e,"=");return t!==void 0?[e.slice(0,t),e.slice(t+1|0)]:[e,void 0]}function Vv(e,t){if(k4(t))return Cl;if(Array.isArray(e))return t==="args"?O4(e):e.map(r=>Vv(r,void 0));if(e===null)return e;switch(typeof e){case"string":return GP(e);case"object":return FP(e);default:return e}}function O4(e){let t={contents:!1};return e.map(r=>{if(typeof r=="string"){if(t.contents)return t.contents=!1,Cl;let n=A4(r),i=n[0];return b4.includes(i)?n[1]!==void 0?i+"="+Cl:(t.contents=!0,r):GP(r)}return t.contents=!1,Vv(r,void 0)})}function FP(e){let t=e.name,r=typeof t=="string"?t.toLowerCase():void 0,n;if(r!==void 0)switch(r){case"authorization":case"cookie":case"set-cookie":n=!0;break;default:n=!1}else n=!1;let i={};return Object.entries(e).forEach(o=>{let a=o[0];if(a!=="runner_console"){i[a]=n&&a==="value"?Cl:Vv(o[1],a);return}}),i}var Lm=FP;import*as sa from"node:os";import*as Wp from"node:path";import*as Gw from"node:crypto";function qn(e){let t=parseFloat(e);if(!Number.isNaN(t))return t}function qP(e){return"local_runner:"+e}var C4="kandan-local-codex-runner",E4="rescript";function LP(e){let t={};t.clientName=C4,t.clientId=e.clientId;let r=e.machineFingerprint;t.machineFingerprint=r!==void 0?r:null,Object.entries(Mk(e.machineFingerprintV2)).forEach(a=>{t[a[0]]=a[1]}),t.runnerPid=e.runnerPid,t.version=e.version,t.hostname=e.hostname,t.cwd=e.cwd;let n=e.workspace;t.workspace=n!==void 0?n:null;let i=e.channel;t.channel=i!==void 0?i:null,t.capabilities=e.capabilities;let o=e.generationOverlapEpoch;if(o!==void 0){let a={};a.epoch=o,a.overlap=!0,t.generation=a}return t.commander_impl=E4,t}function UP(e,t,r){let n={};return n.last_seq=r,t!==void 0&&(n.runner_id=e,n.thread_id=t),n}function Ln(e,t){return e.catch(r=>t(Y(r)))}function ZP(){let e=[],t=[],r={contents:!1},n=()=>{let a=e.shift();return a!==void 0?Promise.resolve({done:!1,value:a}):r.contents?Promise.resolve({done:!0}):new Promise((s,l)=>{t.push(s)})},i=()=>(r.contents=!0,Promise.resolve({done:!0})),o={};return o[Symbol.asyncIterator]=()=>({next:n,return:i}),{iterable:o,push:a=>{if(r.contents)return!1;let s=t.shift();return s!==void 0?(s({done:!1,value:a}),!0):(e.push(a),!0)},close:()=>{r.contents=!0,(()=>{for(;;){let s=t.shift();if(s===void 0)return;s({done:!0})}})()}}}function VP(e){return import(e)}var R4="@anthropic-ai/claude-agent-sdk";function HP(e){return ZP()}function I4(e){return{next:()=>e.next(),close:()=>{e.close()},interrupt:()=>e.interrupt(),setModel:t=>e.setModel(t),setPermissionMode:t=>e.setPermissionMode(t),applyFlagSettings:t=>e.applyFlagSettings(t),supportedCommands:()=>e.supportedCommands()}}async function BP(){let e=await VP(R4);return{query:t=>I4(e.query(t)),getSessionInfo:(t,r)=>e.getSessionInfo(t,r),listSessions:t=>e.listSessions(t),getSessionMessages:(t,r)=>e.getSessionMessages(t,r)}}var Hv=["codex","claude-code","pi","opencode"];function is(e){return e}function Um(e){switch(e.TAG){case"SessionStarted":return"session_started";case"TurnStarted":return"turn_started";case"ItemStarted":return"item_started";case"ItemDelta":return"item_delta";case"ItemCompleted":return"item_completed";case"ApprovalRequested":return"approval_requested";case"UsageUpdated":return"usage_updated";case"RateLimitUpdated":return"rate_limit_updated";case"ActivityPulse":return"activity_pulse";case"TurnCompleted":return"turn_completed";case"TurnFailed":return"turn_failed";case"TurnInterrupted":return"turn_interrupted";case"HarnessDied":return"harness_died"}}function Jv(e){switch(e){case"BindingNotObject":return"binding_not_object";case"SessionIdInvalid":return"session_id_invalid";case"LeaseEpochInvalid":return"lease_epoch_invalid";case"NextFrameIndexInvalid":return"next_frame_index_invalid";case"CheckpointConfigMissing":return"checkpoint_config_missing";case"CheckpointConfigInvalid":return"checkpoint_config_invalid";case"SourceSeqInvalid":return"source_seq_invalid"}}function Bv(e){return"adt_stream_v1 dispatch refused: "+Jv(e)+"; the commander refuses to stream unconfigured (no baked fallback thresholds exist by law - plan doc 2.4/MF9)"}function YP(e){switch(e){case"Checkpoint":return"checkpoint";case"Delta":return"delta";case"Terminal":return"terminal"}}function Zm(e){if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}function os(e){if(e!==void 0&&typeof e=="number"&&e>=1&&Math.trunc(e)===e)return e}function $4(e){let t=Zm(e);if(t===void 0)return;let r=os(t.version),n=w(t.thresholds,Zm);if(r===void 0||n===void 0)return;let i=os(n.max_bytes),o=os(n.max_deltas),a=os(n.max_interval_ms);if(i!==void 0&&o!==void 0&&a!==void 0)return{version:r,thresholds:{maxBytes:i,maxDeltas:o,maxIntervalMs:a}}}function M4(e){let t=Zm(e);if(t===void 0)return{TAG:"ParseRefused",_0:"BindingNotObject"};let r=os(t.session_id);if(r===void 0)return{TAG:"ParseRefused",_0:"SessionIdInvalid"};let n=os(t.lease_epoch);if(n===void 0)return{TAG:"ParseRefused",_0:"LeaseEpochInvalid"};let i=os(t.next_frame_index);if(i===void 0)return{TAG:"ParseRefused",_0:"NextFrameIndexInvalid"};let o=t.checkpoint_config;if(o===void 0)return{TAG:"ParseRefused",_0:"CheckpointConfigMissing"};let a=$4(o);return a!==void 0?{TAG:"Parsed",_0:{sessionId:r,leaseEpoch:n,nextFrameIndex:i,checkpointConfig:a}}:{TAG:"ParseRefused",_0:"CheckpointConfigInvalid"}}function j4(e){return yn(YP(e.frameKind)+`
|
|
325
325
|
`+e.body).slice(0,16)}function z4(e){let t={};return t.session_id=e.sessionId,t.lease_epoch=e.leaseEpoch,t.frame_index=e.frameIndex,t.frame_kind=YP(e.frameKind),t.body=e.body,t.byte_len=e.byteLen,t}function XP(e){let t=z4(e);return t.digest=j4(e),t}function Yv(e){switch(e){case"StaleEpoch":return"stale_epoch";case"PostSettle":return"post_settle";case"PostTerminal":return"post_terminal";case"FrameIndexReuse":return"frame_index_reuse";case"UnknownRejection":return"unknown"}}function QP(e){if(e===void 0||typeof e!="string")return"UnknownRejection";switch(e){case"frame_index_reuse":return"FrameIndexReuse";case"post_settle":return"PostSettle";case"post_terminal":return"PostTerminal";case"stale_epoch":return"StaleEpoch";default:return"UnknownRejection"}}function N4(e,t){return{binding:e,cumulative:"",pendingBody:"",pendingBytes:0,pendingDeltas:0,lastFrameAtMs:t,nextFrameIndex:e.nextFrameIndex,emittedFrameCount:0,checkpointPending:!1,terminalEmitted:!1,fenced:!1}}function eR(e,t,r){let n;switch(t){case"Delta":n=e.pendingBody;break;case"Checkpoint":case"Terminal":n=e.cumulative;break}let i=e.binding.sessionId,o=e.binding.leaseEpoch,a=e.nextFrameIndex,s=Buffer.byteLength(n,"utf8"),l={sessionId:i,leaseEpoch:o,frameIndex:a,frameKind:t,body:n,byteLen:s};switch(e.nextFrameIndex=e.nextFrameIndex+1,e.emittedFrameCount=e.emittedFrameCount+1|0,e.pendingBody="",e.pendingBytes=0,e.pendingDeltas=0,e.lastFrameAtMs=r,t){case"Delta":break;case"Checkpoint":case"Terminal":e.checkpointPending=!1;break}return l}function G4(e,t){let r=e.binding.checkpointConfig.thresholds;return e.pendingDeltas>0?e.pendingBytes>=r.maxBytes||e.pendingDeltas>=r.maxDeltas?!0:t-e.lastFrameAtMs>=r.maxIntervalMs:!1}function F4(e){let t=e.emittedFrameCount,r=e.checkpointPending;return t!==0&&!r?"Delta":"Checkpoint"}function D4(e,t,r){if(!(e.fenced||e.terminalEmitted||t===""))return e.cumulative=e.cumulative+t,e.pendingBody=e.pendingBody+t,e.pendingBytes=e.pendingBytes+Buffer.byteLength(t,"utf8")|0,e.pendingDeltas=e.pendingDeltas+1|0,G4(e,r)?eR(e,F4(e),r):void 0}function q4(e,t){if(!(e.fenced||e.terminalEmitted))return e.terminalEmitted=!0,eR(e,"Terminal",t)}function L4(e){if(!(e.fenced||e.terminalEmitted)){e.cumulative="",e.pendingBody="",e.pendingBytes=0,e.pendingDeltas=0,e.checkpointPending=!0;return}}function tR(e){e.fenced=!0}function U4(e){switch(e){case"failed":case"ignored":case"interrupted":case"processed":return!0;default:return!1}}function rR(e,t,r){if(e===void 0||e===null)return"Absent";let n=M4(e);if(n.TAG==="Parsed"){let o=n._0;if(t===void 0)return{TAG:"Refused",reason:"SourceSeqInvalid",message:Bv("SourceSeqInvalid")};if(!(t>=1&&Math.trunc(t)===t))return{TAG:"Refused",reason:"SourceSeqInvalid",message:Bv("SourceSeqInvalid")};let a={};return a.session_id=o.sessionId,a.lease_epoch=o.leaseEpoch,a.checkpoint_config_version=o.checkpointConfig.version,{TAG:"Accepted",session:{binding:o,sourceSeq:t,emitter:N4(o,r),trackedItemKey:void 0,trackedItemRank:0,itemFirstSeenOrdinals:{},lastBody:"",done:!1},ackPayload:a}}let i=n._0;return{TAG:"Refused",reason:i,message:Bv(i)}}function Mu(e,t){let r=e[t];if(typeof r=="string")return r}function JP(e,t){let r=e[t];if(r!==void 0&&typeof r=="number"&&Math.trunc(r)===r)return r}function W4(e){return w(w(e.structured,Zm),r=>Mu(r,"phase"))==="final_answer"?1:0}function nR(e,t,r,n,i){if(e.done||e.emitter.fenced)return[];if(t===i.messageState){let _=JP(r,"seq"),g=Mu(r,"status");if(_===void 0)return[];if(g===void 0)return[];if(!(_===e.sourceSeq&&U4(g)))return[];let b=q4(e.emitter,n);return e.done=!0,b!==void 0?[b]:[]}let a=(t===i.postStreamedRow||t===i.streamSnapshot||t===i.finalizeRow||t===i.postCompletedRow)&&oe(Mu(r,"stream_kind"),"assistant")&&oe(JP(r,"source_seq"),e.sourceSeq),s=Mu(r,"item_key");if(!a)return[];if(s===void 0)return[];let l=W4(r),d=e.itemFirstSeenOrdinals[s],u;if(d!==void 0)u=d;else{let _=Object.keys(e.itemFirstSeenOrdinals).length;e.itemFirstSeenOrdinals[s]=_,u=_}let c=e.trackedItemKey,f;if(c!==void 0)if(c===s)e.trackedItemRank=l,f=!0;else{let _=k(e.itemFirstSeenOrdinals[c],-1);l>e.trackedItemRank||l===e.trackedItemRank&&u>_?(e.trackedItemKey=s,e.trackedItemRank=l,e.lastBody="",L4(e.emitter),f=!0):f=!1}else e.trackedItemKey=s,e.trackedItemRank=l,f=!0;if(!f)return[];let h=k(Mu(r,"body"),""),m=h.startsWith(e.lastBody)?h.slice(e.lastBody.length,h.length):h;e.lastBody=h;let p=D4(e.emitter,m,n);return p!==void 0?[p]:[]}var Vm={},Wm={},Kv=[];function iR(e,t){Vm[e]=t}function Xv(e){return Vm[e]}function oR(e,t){let r=Vm[e];if(r!==void 0&&r.binding.sessionId===t.binding.sessionId&&r.binding.leaseEpoch===t.binding.leaseEpoch)return Yt(Vm,e)}function aR(e){let t=e.toString();if(Wm[t]===void 0)for(Wm[t]=!0,Kv.push(t);Kv.length>256;){let n=Kv.shift();n!==void 0&&Yt(Wm,n)}}function sR(e){return k(Wm[e.toString()],!1)}var lR="adt_stream_v1";var dR="adt_frame",uR="adt_binding_ack",Qv="adt.frame";function Z4(e){switch(e){case"SocketOpen":return"open";case"SocketMessage":return"message";case"SocketClose":return"close";case"SocketError":return"error"}}function V4(e){let t=e.data,r;r=t==null||typeof t!="string"?void 0:t;let n=e.code,i;i=n==null||typeof n!="number"||(n|0)!==n?void 0:n|0;let o=e.reason,a;return a=o==null||typeof o!="string"?void 0:o,{data:r,code:i,reason:a}}function H4(e){return{readyState:()=>e.readyState,send:t=>{e.send(t)},close:()=>{e.close()},on:(t,r)=>{e.addEventListener(Z4(t),n=>r(V4(n)),{})}}}function Hm(e,t){return H4(new WebSocket(e,t))}var fR=0,as=1;var eS="file",tS=["mcp_oauth_credentials_store","cli_auth_credentials_store"],B4=tS.flatMap(e=>["-c",e+'="'+eS+'"']),K4=["-c","features.apps=false"];function ki(e){return JSON.stringify(e)}function J4(e){let t=(r,n)=>r!==void 0?Object.entries(r).flatMap(i=>["-c","model_providers."+e.id+"."+n+"."+i[0]+"="+ki(i[1])]):[];return[["-c","model_providers."+e.id+".name="+ki(e.name),"-c","model_providers."+e.id+".base_url="+ki(e.baseUrl),"-c","model_providers."+e.id+".env_key="+ki(e.envKey),"-c","model_providers."+e.id+".wire_api="+ki(e.wireApi)],t(e.httpHeaders,"http_headers"),t(e.envHttpHeaders,"env_http_headers"),["-c","model_provider="+ki(e.id)]].flat()}var Y4=["-c","model_providers.openai-linzumi.name="+ki("OpenAI"),"-c","model_providers.openai-linzumi.wire_api="+ki("responses"),"-c","model_providers.openai-linzumi.requires_openai_auth=true","-c","model_providers.openai-linzumi.supports_websockets=true"];function X4(e){let t=e.model,r=e.reasoningEffort,n=e.modelProvider;return[K4,B4,t!==void 0?["-c","model="+ki(t)]:[],r!==void 0?["-c","model_reasoning_effort="+ki(r)]:[],e.fast?["-c","service_tier="+ki("fast")]:[],e.mcpConfigArgs.flat(),n!==void 0?J4(n):Y4].flat()}function pR(e,t){return[["app-server"],X4(t),["--listen",e]].flat()}var Q4=["LINZUMI_MCP_ACCESS_TOKEN","LINZUMI_MCP_OWNER_USERNAME"];function hR(e,t,r){let n=r?Object.fromEntries(Object.entries(e)):{};return Q4.forEach(i=>Yt(n,i)),t.forEach(i=>{let o=i[1],a=i[0];if(o!==void 0){n[a]=o;return}else return Yt(n,a)}),n}var _R=["ignore","pipe","pipe"];function gR(e){let t=e.length;return t>12e3?e.slice(t-12e3|0,t):e}function yR(e,t,r){return r<3&&e.includes("codex app-server exited before readyz")&&t.includes("EADDRINUSE")?t.includes("listen"):!1}function bR(e){let t=Hn(e);if(t===void 0)return;let r=de(t),i=r.protocol==="wss:"?"https:":"http:";return r.protocol=i,r.pathname="/readyz",r.search="",r.hash="",r.toString()}var eB="kandan-local-codex-runner",tB="0.0.1";function vR(){return Object.fromEntries([["clientInfo",Object.fromEntries([["name",eB],["version",tB]])],["capabilities",Object.fromEntries([["experimentalApi",!0]])]])}var rB=new RegExp("\\bsession\\b.+\\bis archived\\b","i");function SR(e){return rB.test(e)}var nB=new RegExp("^thread not found(?:\\s*:|\\b)","i");function wR(e){return nB.test(e.trim())}var kR=2e3;function iB(e){try{e.unref();return}catch{return}}var xR="codex app-server websocket closed",oB="codex app-server websocket is not open";function aB(e){let t=e.method;if(typeof t=="string")return t}function rS(e){let t=e.error;if(t===void 0)return{TAG:"ResultReply",_0:k(e.result,null)};if(typeof t!="object"||t===null||Array.isArray(t))return{TAG:"ErrorReply",code:0,message:JSON.stringify(t)};let r=t.code,n=r!==void 0&&typeof r=="number"?r:0,i=t.message;return{TAG:"ErrorReply",code:n,message:typeof i=="string"?i:""}}function Km(e,t,r,n){let i=JSON.stringify(n);t(r,i);try{return e.socket.send(i),{TAG:"Ok",_0:void 0}}catch(o){let a=Y(o);return{TAG:"Error",_0:Me(a).message}}}function CR(e,t,r){try{return t(r)}catch(n){let i=Y(n);return e("codex.notification_callback_failed",Object.fromEntries([["purpose","codex.app_server"],["method",r.method],["message",Me(i).message]]))}}function TR(e,t,r){try{return t(r)}catch(n){let i=Y(n);return e("codex.close_callback_failed",Object.fromEntries([["purpose","codex.app_server"],["message",Me(i).message]]))}}function sB(e,t){let r;if(t.TAG==="Ok")r=[["jsonrpc","2.0"],["id",e],["result",t._0]];else{let n=t._0;r=[["jsonrpc","2.0"],["id",e],["error",Object.fromEntries([["code",n[0]],["message",n[1]]])]]}return Object.fromEntries(r)}async function lB(e,t,r,n){let i={TAG:"Error",_0:[-32601,"unhandled Codex app-server request: "+n.method]},o=e.requestCallbacks.slice(),a,s=0;for(;gn(a)&&s<o.length;){let d=o[s];if(d!==void 0){let u=0,c;try{c=await d(n),u=1}catch(f){let h=Y(f);a={TAG:"Error",_0:[-32e3,Me(h).message]}}u===1&&c!==void 0&&(a={TAG:"Ok",_0:c})}s=s+1|0}let l=k(a,i);Km(t,r,"outgoing",sB(n.id,l))}function dB(e,t,r,n,i){let o;try{o=JSON.parse(i)}catch(h){let m=Y(h);r("codex.app_server_frame_malformed",Object.fromEntries([["purpose","codex.app_server"],["message",Me(m).message],["payload",i.slice(0,512)],["payloadChars",i.length]])),o=void 0}let a;if(o!==void 0){let h=0;typeof o=="object"&&o!==null&&!Array.isArray(o)?a=o:h=1,h===1&&(r("codex.app_server_frame_malformed",Object.fromEntries([["purpose","codex.app_server"],["message","codex app-server sent non-object JSON-RPC message"],["payload",i.slice(0,512)],["payloadChars",i.length]])),a=void 0)}else a=void 0;if(a===void 0)return;let s=Zt(a.id),l=s&&(Zt(a.result)||Zt(a.error)),d=aB(a);if(l){let h=k(a.id,null),m=JSON.stringify(h),p=e.pending[m];return p!==void 0?(Yt(e.pending,m),p.resolvePending({TAG:"Ok",_0:rS(a)})):void 0}if(s)if(d!==void 0){Ln(lB(e,t,n,{id:k(a.id,null),method:d,params:a.params}),h=>Promise.resolve());return}else return;if(d===void 0)return;let u=a.params,c={method:d,params:u};e.notificationCallbacks.length!==0?e.notificationCallbacks.forEach(h=>CR(r,h,c)):e.pendingNotifications.push(c)}function uB(e,t,r){return Object.fromEntries(r!==void 0?[["jsonrpc","2.0"],["id",e],["method",t],["params",r]]:[["jsonrpc","2.0"],["id",e],["method",t]])}function AR(e,t){return Object.fromEntries(t!==void 0?[["jsonrpc","2.0"],["method",e],["params",t]]:[["jsonrpc","2.0"],["method",e]])}function OR(e,t,r,n,i,o){return t.socket.readyState()===as?new Promise((a,s)=>{e.pending[JSON.stringify(n)]={resolvePending:a};let l=Km(t,r,"request",uB(n,i,o));l.TAG!=="Ok"&&(Yt(e.pending,JSON.stringify(n)),a({TAG:"Error",_0:l._0}))}):Promise.resolve({TAG:"Error",_0:oB})}async function Jm(e,t,r,n){let i=t!==void 0?t:u=>({socket:Hm(u,[]),ping:void 0}),o=r!==void 0?r:2e3,a=n!==void 0?n:()=>Date.now(),s=a()+o,l,d="websocket open failed";for(;gn(l);){let u;try{u={TAG:"Ok",_0:i(e)}}catch(c){let f=Y(c);u={TAG:"Error",_0:Me(f).message}}if(u.TAG==="Ok"){let c=u._0;if(await new Promise((f,h)=>{c.socket.on("SocketOpen",m=>f(!0)),c.socket.on("SocketError",m=>f(!1))}))l={TAG:"Ok",_0:c};else{try{c.socket.close()}catch{}a()>s&&(l={TAG:"Error",_0:d})}}else d=u._0,a()>s&&(l={TAG:"Error",_0:d})}return k(l,{TAG:"Error",_0:d})}async function Ym(e,t){let r={pending:{},notificationCallbacks:[],requestCallbacks:[],pendingNotifications:[],closeCallbacks:[],nextId:1,closeError:void 0},n=t.audit,i=t.onWire,o=setInterval(()=>{let d=e.ping;if(d!==void 0&&e.socket.readyState()===as)try{return d()}catch{return}},t.keepaliveIntervalMs);iB(o);let a=d=>{clearInterval(o);let u=Object.entries(r.pending);if(Object.entries(r.pending).forEach(h=>Yt(r.pending,h[0])),u.forEach(h=>h[1].resolvePending({TAG:"Error",_0:d})),r.closeError!==void 0)return;r.closeError=d;let f=r.closeCallbacks.slice();r.closeCallbacks.splice(0,r.closeCallbacks.length),f.forEach(h=>TR(n,h,d))};e.socket.on("SocketClose",d=>a(xR)),e.socket.on("SocketError",d=>a(xR)),e.socket.on("SocketMessage",d=>{let u=d.data;if(u!==void 0)return i("incoming",u),dB(r,e,n,i,u)});let s=await OR(r,e,i,"initialize","initialize",vR());if(s.TAG!=="Ok")return{TAG:"Error",_0:s._0};let l=s._0;return l.TAG!=="ResultReply"?{TAG:"Error",_0:"codex initialize failed: "+l.message}:(Km(e,i,"outgoing",AR("initialized",void 0)),{TAG:"Ok",_0:{request:(d,u)=>{let c=r.nextId;return r.nextId=r.nextId+1|0,OR(r,e,i,c,d,u)},notify:(d,u)=>{Km(e,i,"outgoing",AR(d,u))},onNotification:d=>{r.notificationCallbacks.push(d);let u=r.pendingNotifications.slice();r.pendingNotifications.splice(0,r.pendingNotifications.length),u.forEach(c=>CR(n,d,c))},onRequest:d=>{r.requestCallbacks.push(d)},onClose:d=>{let u=r.closeError;if(u!==void 0)return TR(n,d,u);r.closeCallbacks.push(d)},isClosed:()=>Zt(r.closeError),close:()=>{clearInterval(o);try{return e.socket.close()}catch{return}}}})}function Il(e){if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}function Li(e){if(e!==void 0&&typeof e=="string"&&e.trim()!=="")return e.trim()}function Rl(e){if(e!==void 0&&typeof e=="number"&&Ct(e))return e}function ER(e){if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}var PR="linzumi_thread_codex_worker_ready",RR="linzumi_thread_codex_worker_session_closed",IR="linzumi_thread_codex_worker_request",$R="linzumi_thread_codex_worker_notify",aS="linzumi_thread_codex_worker_response",MR="linzumi_thread_codex_worker_notification",jR="linzumi_thread_codex_worker_server_request",zR="linzumi_thread_codex_worker_server_request_response";function NR(e,t){let r={};return r.type=PR,r.kandanThreadId=e,r.commanderManagedPorts=t.map(n=>{let i={};i.port=n.port;let o=n.pid;o!==void 0&&(i.pid=o);let a=n.processName;a!==void 0&&(i.processName=a);let s=n.processIconKey;s!==void 0&&(i.processIconKey=s);let l=n.agentProvider;return l!==void 0&&(i.agentProvider=l),i}),r}function GR(e,t){let r={};return r.type=RR,r.kandanThreadId=e,r.reason=t,r}function cB(e,t,r){let n={};return n.type=IR,n.id=e,n.method=t,r!==void 0&&(n.params=r),n}function fB(e,t){let r={};return r.type=$R,r.method=e,t!==void 0&&(r.params=t),r}function mB(e,t){let r={};return r.type=aS,r.id=e,r.response=t,r}function pB(e,t){let r={};return r.type=aS,r.id=e,r.error=t,r}function hB(e){let t={};return t.type=MR,t.notification=e,t}function _B(e,t){let r={};return r.type=jR,r.id=e,r.request=t,r}function iS(e,t,r){let n={};return n.type=zR,n.id=e,t!==void 0&&(n.result=t),r!==void 0&&(n.error=r),n}function gB(e){if(e===void 0||typeof e!="object"||e===null||Array.isArray(e)||e.id===void 0)return;let r=e.result,n=e.error;if(r!==void 0||n!==void 0)return e}function yB(e){if(e===void 0||typeof e!="object"||e===null||Array.isArray(e))return;let t=e.id,r=e.method;if(!(t!==void 0||typeof r!="string"))return e}function bB(e){if(e===void 0||typeof e!="object"||e===null||Array.isArray(e))return;let t=e.id,r=e.method;if(t!==void 0&&typeof r=="string")return e}function vB(e){let t=Il(e);if(t===void 0)return;let r=t.type;if(r===void 0||typeof r!="string")return;if(r===IR){let i=Rl(t.id),o=Li(t.method);return i!==void 0&&o!==void 0?{TAG:"ParentRequest",id:i,method_:o,params:ER(t.params)}:void 0}if(r===$R){let i=Li(t.method);return i!==void 0?{TAG:"ParentNotify",method_:i,params:ER(t.params)}:void 0}if(r!==zR)return;let n=Rl(t.id);if(n!==void 0)return{TAG:"ParentServerRequestResponse",id:n,result:t.result,error:Li(t.error)}}function SB(e){let t=Il(e);if(t===void 0)return;let r=t.type;if(r===void 0||typeof r!="string")return;if(r===aS){let o=Rl(t.id);return o!==void 0?{TAG:"ChildResponse",id:o,response:gB(t.response),error:Li(t.error)}:void 0}if(r===MR){let o=yB(t.notification);return o!==void 0?{TAG:"ChildNotification",notification:o}:void 0}if(r!==jR)return;let n=Rl(t.id),i=bB(t.request);if(n!==void 0&&i!==void 0)return{TAG:"ChildServerRequest",id:n,request:i}}function FR(e){let t=Il(e);if(t===void 0)return;let r=t.type;if(typeof r=="string"&&r===RR)return[k(Li(t.kandanThreadId),""),k(Li(t.reason),"")]}var wB="thread Codex worker reported invalid ready payload";function kB(e){let t=Li(e);if(t!==void 0)switch(t){case"claude-code":return"claude-code";case"codex":return"codex";default:return}}function xB(e){return e!==void 0?Array.isArray(e)?Ne(e,t=>{let r=Il(t);if(r===void 0)return;let n=Rl(r.port);if(n!==void 0&&n>=1&&n<=65535)return{port:n,pid:Rl(r.pid),processName:Li(r.processName),processIconKey:Li(r.processIconKey),agentProvider:kB(r.agentProvider)}}):[]:[]}function DR(e,t){let r=Il(e);if(r===void 0)return{TAG:"Ok",_0:void 0};let n=r.type;if(n===void 0)return{TAG:"Ok",_0:void 0};if(typeof n!="string")return{TAG:"Ok",_0:void 0};if(n!==PR)return{TAG:"Ok",_0:void 0};let i=Li(r.kandanThreadId);return i!==void 0&&i===t?{TAG:"Ok",_0:{kandanThreadId:i,commanderManagedPorts:xB(r.commanderManagedPorts)}}:{TAG:"Error",_0:wB}}function qR(e,t){}var LR="linzumi.thread_runner",TB="thread Codex worker requires a codex client with onRequest",oS="thread Codex worker IPC channel closed";function UR(e,t,r){let n=r!==void 0?r:qR,i=e.onRequest;if(i===void 0)return{TAG:"Error",_0:TB};let o=new Map,a={contents:1},s={contents:!1},l=u=>{if(s.contents)return;s.contents=!0;let c={};c.purpose=LR,c.reason=u,n("thread_codex_worker.ipc_send_dropped",c)},d=u=>{let c=t.send,f=t.isConnected();if(c===void 0||!f)return l("ipc_channel_closed");let h=c(u);if(h.TAG!=="Ok")return l(h._0)};return t.onMessage(u=>{let c=vB(u);if(c!==void 0)switch(c.TAG){case"ParentRequest":let f=c.id;e.request(c.method_,c.params).then(_=>_.TAG==="Ok"?d(mB(f,_._0)):d(pB(f,_._0)));return;case"ParentNotify":return e.notify(c.method_,c.params);case"ParentServerRequestResponse":let h=c.error,m=c.id,p=o.get(m);return p!==void 0?(o.delete(m),p(h!==void 0?{TAG:"Error",_0:h}:{TAG:"Ok",_0:c.result})):void 0}}),e.onNotification(u=>d(hB(u))),i(u=>new Promise((c,f)=>{let h=a.contents;a.contents=h+1,o.set(h,c),d(_B(h,u))})),t.onceDisconnect(()=>{o.forEach(u=>u({TAG:"Error",_0:oS})),o.clear()}),{TAG:"Ok",_0:void 0}}var AB="thread Codex worker IPC client is closed",OB="thread Codex worker response missing body",CB="thread Codex worker IPC client closed";async function EB(e,t,r,n,i,o){let a=d=>{let u=e(d);if(u.TAG==="Ok")return;let c={};c.purpose=LR,c.requestMethod=n,c.message=u._0,o("thread_codex_worker.ipc_response_dropped",c)},s=!1,l=0;for(;!s&&l<i.length;){let d=i[l];if(d!==void 0){let u=await d(r);if(u.TAG==="Ok"){let c=u._0;c!==void 0&&(s=!0,a(iS(t,c,void 0)))}else s=!0,a(iS(t,void 0,u._0))}l=l+1|0}if(!s)return a(iS(t,void 0,"unhandled Codex app-server request: "+n))}function PB(e){let t=Il(e);if(t===void 0)return"";let r=t.method;return typeof r=="string"?r:""}function WR(e,t){let r=t!==void 0?t:qR,n=new Map,i=[],o=[],a=[],s={contents:1},l={contents:!1},d=_=>{n.forEach(g=>g({TAG:"Error",_0:_})),n.clear()},u=_=>{if(l.contents)return{TAG:"Error",_0:AB};let g=e.send,b=e.isConnected();return g!==void 0&&b?g(_):{TAG:"Error",_0:oS}},c=_=>{let g=SB(_);if(g!==void 0)switch(g.TAG){case"ChildResponse":let b=g.error,y=g.response,v=g.id,S=n.get(v);return S!==void 0?(n.delete(v),S(b!==void 0?{TAG:"Error",_0:b}:y!==void 0?{TAG:"Ok",_0:y}:{TAG:"Error",_0:OB})):void 0;case"ChildNotification":let A=g.notification;i.length!==0?i.forEach(z=>z(A)):a.push(A);return;case"ChildServerRequest":let $=g.request;EB(u,g.id,$,PB($),o,r);return}},f=e.onMessage(c),h=()=>{l.contents=!0,d(oS)},m=e.onceExit(h),p=e.onceDisconnect(h);return{request:(_,g)=>new Promise((b,y)=>{let v=s.contents;s.contents=v+1,n.set(v,b);let S=u(cB(v,_,g));S.TAG!=="Ok"&&(n.delete(v),b({TAG:"Error",_0:S._0}))}),notify:(_,g)=>u(fB(_,g)),onNotification:_=>{i.push(_);let g=a.slice();a.splice(0,a.length),g.forEach(b=>_(b))},onRequest:_=>{o.push(_)},isClosed:()=>l.contents?!0:!e.isConnected(),close:()=>{l.contents=!0,f(),m(),p(),d(CB)}}}import*as mS from"node:child_process";import*as VR from"node:os";import*as HR from"node:path";function BR(){return HR.join(VR.homedir(),".linzumi","protected-dev-listeners")}var RB=new RegExp("^(\\d+)\\s+(\\d+)$");function IB(e){return Ne(e.split(`
|
|
326
326
|
`),t=>{let r=RB.exec(t.trim());if(r==null)return;let n=r.slice(1);if(n.length!==2)return;let i=n[0];if(i===void 0)return;let o=n[1];if(o===void 0)return;let a=qn(i),s=qn(o);if(a!==void 0&&s!==void 0)return{pid:a,pgid:s}})}function $B(e){let t=ks("ps",["-axo","pid=,pgid="],5e3,16e6);if(t.TAG==="Ok")return IB(t._0).filter(r=>r.pgid===e).map(r=>r.pid)}function Xm(e,t,r,n,i){let o=n!==void 0?n:$B,a;if(i.size>0){let l=o(e);if(l!==void 0){let d=l.filter(u=>i.has(u));if(d.length!==0){let u=[],c=new Set(l.filter(f=>!i.has(f)));c.add(e),Array.from(c).forEach(f=>{let h=r(f|0,t);if(h.TAG==="Ok")return;let m=h._0;if(!oe(m.code,"ESRCH")){u.push({pid:f,code:m.code,message:m.message});return}}),a={mode:"IndividualSignals",sparedPids:d,failures:u,groupSignalError:void 0}}else a=void 0}else a=void 0}else a=void 0;if(a!==void 0)return a;let s=r(-e|0,t);return s.TAG==="Ok"?{mode:"GroupSignal",sparedPids:[],failures:[],groupSignalError:void 0}:{mode:"GroupSignal",sparedPids:[],failures:[],groupSignalError:s._0}}var YR={contents:(e,t)=>{}};var sS="SIGKILL",ss={children:new Set,handlersInstalled:!1,removeHandlers:void 0};function ju(e,t,r,n,i){let o=e.pid;YR.contents("process.reap_failed",Object.fromEntries([["purpose",e.kind],["pid",o!==void 0?o:null],["ownProcessGroup",e.ownProcessGroup],["reason",t],["stage",r],["code",n!==void 0?n:null],["message",i]]))}function MB(e,t,r,n){let i;try{e.stop(),i={TAG:"Ok",_0:void 0}}catch(l){i={TAG:"Error",_0:Y(l)}}if(i.TAG!=="Ok"){let l=Me(i._0);ju(e,n,"stop",l.code,l.message)}let o=e.pid;if(o===void 0)return;if(e.ownProcessGroup){let l=Xm(o,sS,t,void 0,r);l.sparedPids.length!==0&&YR.contents("process.reap_spared_listeners",Object.fromEntries([["purpose",e.kind],["pid",o],["reason",n],["sparedPids",l.sparedPids.map(f=>f)]])),l.failures.forEach(f=>ju(e,n,"member_kill:"+f.pid.toString(),f.code,f.message));let d=l.groupSignalError;if(d===void 0||oe(d.code,"ESRCH"))return;ju(e,n,"group_kill",d.code,d.message);let u=t(o,sS);if(u.TAG==="Ok")return;let c=u._0;return oe(c.code,"ESRCH")?void 0:ju(e,n,"pid_kill",c.code,c.message)}let a=t(o,sS);if(a.TAG==="Ok")return;let s=a._0;if(!oe(s.code,"ESRCH"))return ju(e,n,"pid_kill",s.code,s.message)}function lS(e,t,r){let n=e!==void 0?e:Bi,i=t!==void 0?t:new Set,o=r!==void 0?r:"exit",a=Array.from(ss.children);return ss.children.clear(),a.forEach(s=>MB(s,n,i,o)),a.length}function JR(e,t){let r;return r=typeof t=="string"?t:JSON.stringify(t),"linzumi commander "+e+": "+r+`
|
|
327
327
|
`}function jB(){if(ss.handlersInstalled)return;ss.handlersInstalled=!0;let e=o=>{lS(void 0,void 0,"process_exit")};process.on("exit",e);let t=process.listenerCount("uncaughtException")===0,r=process.listenerCount("unhandledRejection")===0,n=o=>{lS(void 0,void 0,"uncaught_exception"),gr(JR("uncaughtException",o)),process.exit(1)},i=o=>{lS(void 0,void 0,"unhandled_rejection"),gr(JR("unhandledRejection",o)),process.exit(1)};t&&process.on("uncaughtException",n),r&&process.on("unhandledRejection",i),ss.removeHandlers=()=>{if(process.off("exit",e),t&&process.off("uncaughtException",n),r){process.off("unhandledRejection",i);return}}}function Qm(e){return ss.children.add(e),jB(),{unregister:()=>{ss.children.delete(e)}}}import*as Bo from"node:path";import*as QR from"node:net";function $l(e,t){try{return e.kill(t)}catch{return!1}}function eI(){return new Promise((e,t)=>{let r=QR.createServer();r.on("error",n=>e({TAG:"Error",_0:n.message})),r.listen(0,"127.0.0.1",()=>{let n=r.address();if(n==null)return r.close(o=>{}),e({TAG:"Error",_0:"failed to allocate loopback port"});let i=n.port;r.close(o=>o==null?e({TAG:"Ok",_0:i}):e({TAG:"Error",_0:o.message}))})})}var Wne=new RegExp("[^0-9A-Za-z._-]","g");var eie=new RegExp("[\\\\/]");var tI="cannot fork thread runner without current CLI script path";var tie=15*6e4,rie=120*6e4,nie=1440*6e4,iie=2*6e4;var GB="this computer is updating its Linzumi runner",oie=GB+" to a new version - nothing was started. Retry in a few minutes once the update finishes.";var aie=15*6e4;var rI="this computer restarted its Linzumi runner for an update",sie=rI+" after waiting for this job past the drain timeout - the job was interrupted. Send your message again to continue.",lie=rI+" while this job was waiting on your approval - the approval prompt was interrupted. Send your message again and answer the approval prompt to continue.";function nI(e,t,r){return e==="SIGTERM"&&t?r!=="win32":!1}var iI="runner.thread_worker_sigterm_deferred_to_drain";function FB(e,t){}var uS="linzumi.thread_runner";function aI(e,t){return e!==void 0&&e.trim()!==""?{TAG:"Ok",_0:Bo.isAbsolute(e)?e:Bo.resolve(t,e)}:{TAG:"Error",_0:tI}}function DB(e){return["--require","-r","--import","--loader","--experimental-loader"].includes(e)}function qB(e){return["--require=","-r=","--import=","--loader=","--experimental-loader="].some(t=>e.startsWith(t))}function LB(e){let t=[],r=0;for(;r<e.length;){let n=e[r];if(n!==void 0){let i=DB(n),o=qB(n);if(i){let a=e[r+1|0];a!==void 0&&(t.push(n),t.push(a)),r=r+2|0}else o&&t.push(n),r=r+1|0}else r=r+1|0}return t}function cS(e,t,r){return LB(r).concat([e].concat(t))}function _n(e,t){return t!==void 0?t!==""?[e,t]:[]:[]}function sI(e){let t=i=>{let o=i.join(",");if(o!=="")return o},r=e.codexModelProvider,n=e.runtimeDefaults;return[["--api-url",e.kandanUrl],["--cwd",e.cwd],["--codex-bin",e.codexBin],_n("--workspace",e.workspaceSlug),_n("--log-file",e.logFile),_n("--debug-trace-dir",G(e.debugTrace,i=>i.dir)),_n("--debug-trace-content",w(e.debugTrace,i=>i.contentMode)),e.fast?["--fast"]:[],_n("--allowed-cwd",t(e.allowedCwds)),_n("--forward-port",t(e.allowedForwardPorts.map(i=>i.toString()))),_n("--code-server-bin",e.codeServerBin),_n("--model",w(e.runtimeDefaults,i=>i.model)),_n("--reasoning-effort",w(e.runtimeDefaults,i=>i.reasoningEffort)),_n("--sandbox",w(e.runtimeDefaults,i=>i.sandbox)),_n("--approval-policy",w(e.runtimeDefaults,i=>i.approvalPolicy)),r!==void 0?["--model-provider",r.provider,"--llm-proxy-base-url",r.llmProxyBaseUrl]:[],e.vmExecution?["--vm-execution"]:[],_n("--execution-mode",e.executionMode),_n("--egress-mode",e.egressMode),_n("--project-public-id",e.projectPublicId),_n("--golden-image-id",e.goldenImagePublicId),n!==void 0?n.allowPortForwardingByDefault?["--allow-port-forwarding-by-default"]:["--no-allow-port-forwarding-by-default"]:[]].flat()}function lI(e){let t=[],r=0;for(;r<e.length;){let n=e[r];n!==void 0?n==="--token"?(t.push("--token"),t.push("<redacted>"),r=r+2|0):(t.push(n),r=r+1|0):r=r+1|0}return t}function dI(e,t,r){let n=[["LINZUMI_THREAD_RUNNER_ROLE","thread"],["LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID",e.kandanThreadId],["LINZUMI_THREAD_RUNNER_TOKEN",e.token],["LINZUMI_DEV_SERVICES_PARENT_PID",t.toString()]],i=e.codexModelProvider;return i!==void 0&&n.push(["LINZUMI_LLM_PROXY_TOKEN",i.llmProxyToken]),n.push(["LINZUMI_THREAD_RUNNER_AGENT_MCP_TOKEN",k(e.linzumiAgentMcpToken,"")]),r!==void 0&&n.push(["OPENAI_API_KEY",r]),n}function uI(e){let t=e.length;return t>12e3?e.slice(t-12e3|0,t):e}function ep(e){let t=dn(e.code,"null",o=>o.toString()),r=k(e.signal,"null"),n="thread Codex worker exited before ready: code="+t+" signal="+r,i=e.capturedOutput.trim();return i===""?n:n+`
|
package/dist/impl-ts/index.js
CHANGED
|
@@ -1510,7 +1510,7 @@ To kick the agent off:
|
|
|
1510
1510
|
`,M=Buffer.byteLength(T,"utf8");if(M>s)return l("runner_diagnostics.spool_entry_dropped",{reason:"entry_too_large",entry_bytes:M,max_entry_bytes:s}),!1;iEe(n,{recursive:!0}),m(u)+M>i&&f(),_(M);let P=b()?`
|
|
1511
1511
|
`:"";return tEe(u,`${P}${T}`,"utf8"),!0}catch(R){return l("runner_diagnostics.spool_failed",{error:R instanceof Error?R.message:String(R)}),!1}},w=S=>{let R=[],T=aEe(S,"utf8");for(let M of T.split(`
|
|
1512
1512
|
`))if(M.trim()!=="")try{let P=JSON.parse(M);P!==null&&typeof P=="object"&&R.push({parsed:P,raw:M})}catch{}return R};return{append:v,drain:async S=>{if(c)return{uploadedBatches:0,uploadedEntries:0,remainingBatches:p().length,skipped:!0};c=!0;let R=0,T=0;try{f(),_(0);let M=a()-o;for(let P of p()){let D;try{D=w(P)}catch(Z){l("runner_diagnostics.spool_batch_unreadable",{file:P,error:Z instanceof Error?Z.message:String(Z)}),y(P,"unreadable");continue}let F=D.filter(Z=>{let H=kEe(Z.parsed);return H===void 0||H>=M});if(F.length===0){y(P,"empty_or_expired");continue}let E=pR(P,".jsonl"),N=F.map(Z=>Z.raw).join(`
|
|
1513
|
-
`),V=F.map(Z=>Z.parsed.spooled_at).filter(Z=>typeof Z=="string"),G={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:E,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:E,entry_count:F.length,...V.length===0?{}:{first_spooled_at:V[0],last_spooled_at:V[V.length-1]}},telemetry_ndjson:N};try{await S(G)}catch(Z){l("runner_diagnostics.spool_upload_failed",{file:P,remaining_batches:p().length,error:Z instanceof Error?Z.message:String(Z)});break}R+=1,T+=F.length;try{mJ(P)}catch(Z){l("runner_diagnostics.spool_delete_failed",{file:P,error:Z instanceof Error?Z.message:String(Z)})}}}catch(M){l("runner_diagnostics.spool_drain_failed",{error:M instanceof Error?M.message:String(M)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var fEe,mEe,hEe,gEe,yEe,hJ,xEe,bEe,yJ=q(()=>{"use strict";Sx();fEe=32*1024*1024,mEe=10080*60*1e3,hEe=4*1024*1024,gEe=1024*1024,yEe="spool.jsonl",hJ=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;xEe=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,bEe=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Kt,mR,wa=q(()=>{"use strict";Kt="1.0.
|
|
1513
|
+
`),V=F.map(Z=>Z.parsed.spooled_at).filter(Z=>typeof Z=="string"),G={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:E,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:E,entry_count:F.length,...V.length===0?{}:{first_spooled_at:V[0],last_spooled_at:V[V.length-1]}},telemetry_ndjson:N};try{await S(G)}catch(Z){l("runner_diagnostics.spool_upload_failed",{file:P,remaining_batches:p().length,error:Z instanceof Error?Z.message:String(Z)});break}R+=1,T+=F.length;try{mJ(P)}catch(Z){l("runner_diagnostics.spool_delete_failed",{file:P,error:Z instanceof Error?Z.message:String(Z)})}}}catch(M){l("runner_diagnostics.spool_drain_failed",{error:M instanceof Error?M.message:String(M)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var fEe,mEe,hEe,gEe,yEe,hJ,xEe,bEe,yJ=q(()=>{"use strict";Sx();fEe=32*1024*1024,mEe=10080*60*1e3,hEe=4*1024*1024,gEe=1024*1024,yEe="spool.jsonl",hJ=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;xEe=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,bEe=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Kt,mR,wa=q(()=>{"use strict";Kt="1.0.172",mR=`linzumi ${Kt}`});import{closeSync as xJ,existsSync as gR,mkdirSync as CEe,openSync as bJ,readFileSync as wJ,renameSync as TEe,unlinkSync as Zd,writeFileSync as PEe,writeSync as vJ}from"node:fs";import{dirname as SJ,join as IEe}from"node:path";function yR(e){return e instanceof Ds||e instanceof Error&&e.name===CJ&&"lockPath"in e&&"heldBy"in e}function _R(e,n=et(),t){let r=t===void 0?encodeURIComponent(e):Ud(t);return IEe(SJ(n),"runners",`${r}.lock`)}function jb(e){let n=_R(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??MJ,r=e.now??(()=>new Date),o=e.killPid??zEe,i=r().toISOString(),s={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:zn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??Kt,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};MEe(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),AEe(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>TJ(n,s,r),d=setInterval(a,kJ);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),EJ(n,s)}}}function TJ(e,n,t){try{let r=Nb(e);if(r===void 0||r.machineId!==n.machineId||r.runnerId!==n.runnerId||r.pid!==n.pid||r.startedAt!==n.startedAt)return;let o={...r,heartbeatAt:t().toISOString()},i=`${e}.tmp`;PEe(i,`${JSON.stringify(o,null,2)}
|
|
1514
1514
|
`,"utf8"),TEe(i,e)}catch{}}function Qd(e,n,t){if(!n(e.pid))return{state:"dead"};let r=e.heartbeatAt??e.startedAt,o=Date.parse(r);return Number.isNaN(o)||t().getTime()-o>REe?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function PJ(e,n,t,r){return t!==qb||e.launchSource!==qb?!1:r.state!=="live"?!0:EEe(n,e.cliVersion)>0}function EEe(e,n){let t=_J(e),r=_J(n);for(let o=0;o<3;o++){let i=t.core[o],s=r.core[o];if(i===void 0||s===void 0)throw new Error(`compareCliVersions: unexpected undefined at core index ${o}`);if(i!==s)return i>s?1:-1}return t.prerelease.length===0&&r.prerelease.length===0?0:t.prerelease.length===0?1:r.prerelease.length===0?-1:DEe(t.prerelease,r.prerelease)}function _J(e){let n=e.trim().replace(/^v/i,"").split("+",1)[0]??"",t=n.indexOf("-"),r=t===-1?n:n.slice(0,t),o=t===-1?"":n.slice(t+1),i=r.split("."),s=[hR(i[0]),hR(i[1]),hR(i[2])],a=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:a}}function hR(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function DEe(e,n){let t=Math.max(e.length,n.length);for(let r=0;r<t;r++){let o=e[r],i=n[r];if(o===void 0)return-1;if(i===void 0)return 1;let s=Number.parseInt(o,10),a=Number.parseInt(i,10),d=s.toString()===o,u=a.toString()===i;if(d&&u){if(s!==a)return s>a?1:-1}else{if(d!==u)return d?-1:1;if(o!==i)return o>i?1:-1}}return 0}function IJ(e,n,t,r,o){try{r(n.pid)}catch(i){let s=i!==null&&typeof i=="object"&&"code"in i?i.code:void 0;if(s!=="ESRCH")throw s==="EPERM"||s==="EACCES"?new Error(`Cannot take over the runner lock at ${e}: its holder process (pid ${n.pid}) is owned by another user and cannot be stopped. Stop that process, or remove the lock file, then retry.`):i}o?.({lockPath:e,holderPid:n.pid,holderRunnerId:n.runnerId,reason:t})}function MEe(e,n,t,r,o,i,s){if(t===void 0||kr(t)!==kr(Qt))return;let a=_R(e,n),d=Nb(a);if(d!==void 0){if(Qd(d,r,o).state==="live")throw new Ds(a,d);RJ(a,r,()=>{let u=gR(a)?xR(a):void 0;if(u===void 0)return;let c=Qd(u,r,o);if(c.state==="live")throw new Ds(a,u);c.state==="wedged"&&IJ(a,u,c.reason,i,s),Zd(a)})}}function AEe(e,n,t,r,o,i,s,a){if(Fb(e,n))return;s?.();let d=Nb(e);if(d===void 0){if(Fb(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(Qd(d,t,r).state==="live")throw new Ds(e,d);a?.(),RJ(e,t,()=>{let u=gR(e)?xR(e):void 0;if(u!==void 0){let c=Qd(u,t,r);if(c.state==="live")throw new Ds(e,u);c.state==="wedged"&&IJ(e,u,c.reason,o,i),Zd(e)}if(!Fb(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function Fb(e,n){CEe(SJ(e),{recursive:!0});try{let t=bJ(e,"wx");try{vJ(t,`${JSON.stringify(n,null,2)}
|
|
1515
1515
|
`)}finally{xJ(t)}return!0}catch(t){if(Pl(t,"EEXIST"))return!1;throw t}}function RJ(e,n,t){let r=`${e}.replace`;for(;;)try{let o=bJ(r,"wx");try{vJ(o,`${process.pid}
|
|
1516
1516
|
`),t()}finally{xJ(o),Zd(r)}return}catch(o){if(Pl(o,"EEXIST")){let i=OEe(r);if(i===void 0)continue;if(n(i))throw new Error(["another Linzumi runner is already replacing a stale runner lock",`lock: ${e}`,"Wait for that startup to finish, then retry."].join(`
|
package/package.json
CHANGED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Codex wire canary launcher (spec/codex-wire-capture-replay.spec.md, "Live
|
|
3
|
+
# canary lane"): resolves the wire corpus + the pinned @openai/codex version
|
|
4
|
+
# and runs the ReScript canary bin (HarnessCodexWireCanaryMain.res).
|
|
5
|
+
#
|
|
6
|
+
# codex-wire-canary.sh corpus the scheduled corpus check
|
|
7
|
+
# (fidelity + shape baseline +
|
|
8
|
+
# freshness vs the pinned codex)
|
|
9
|
+
# codex-wire-canary.sh fresh <capture> drift-diff a freshly recorded
|
|
10
|
+
# canary capture BEFORE promotion
|
|
11
|
+
#
|
|
12
|
+
# The canary corpus is every wire capture the replay lane treats as real
|
|
13
|
+
# wire truth: test/fixtures/agent-raw-replay/wire-corpus/*.ndjson plus the
|
|
14
|
+
# real-probe session (test/fixtures/agent-raw-replay/real-probe/codex.ndjson).
|
|
15
|
+
# The committed shape baseline lives beside the corpus
|
|
16
|
+
# (wire-corpus/shape-baseline.json); the vitest corpus gate pins the same
|
|
17
|
+
# set, so this script and the test cannot disagree silently.
|
|
18
|
+
#
|
|
19
|
+
# Build the ReScript package first (`npx rescript build
|
|
20
|
+
# packages/linzumi-cli-rescript`); the CLI test pipeline already does.
|
|
21
|
+
set -euo pipefail
|
|
22
|
+
|
|
23
|
+
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
24
|
+
cli_root="$(cd "$here/.." && pwd)"
|
|
25
|
+
bin_module="$cli_root/../linzumi-cli-rescript/src/harness/HarnessCodexWireCanaryMain.res.mjs"
|
|
26
|
+
baseline="$cli_root/test/fixtures/agent-raw-replay/wire-corpus/shape-baseline.json"
|
|
27
|
+
|
|
28
|
+
if [[ ! -f "$bin_module" ]]; then
|
|
29
|
+
echo "codex-wire-canary: compiled module missing at $bin_module - run: npx rescript build <repo>/packages/linzumi-cli-rescript" >&2
|
|
30
|
+
exit 66
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
mode="${1:-}"
|
|
34
|
+
case "$mode" in
|
|
35
|
+
corpus)
|
|
36
|
+
pinned_version="$(node -p "require('$cli_root/package.json').dependencies['@openai/codex'].replace(/^[^0-9]*/, '')")"
|
|
37
|
+
captures=("$cli_root"/test/fixtures/agent-raw-replay/wire-corpus/*.ndjson)
|
|
38
|
+
captures+=("$cli_root/test/fixtures/agent-raw-replay/real-probe/codex.ndjson")
|
|
39
|
+
exec node "$bin_module" corpus \
|
|
40
|
+
--baseline "$baseline" \
|
|
41
|
+
--pinned-codex-version "$pinned_version" \
|
|
42
|
+
"${captures[@]}"
|
|
43
|
+
;;
|
|
44
|
+
fresh)
|
|
45
|
+
shift
|
|
46
|
+
if [[ $# -lt 1 ]]; then
|
|
47
|
+
echo "codex-wire-canary: fresh mode needs the freshly recorded capture path" >&2
|
|
48
|
+
exit 64
|
|
49
|
+
fi
|
|
50
|
+
exec node "$bin_module" fresh --baseline "$baseline" "$@"
|
|
51
|
+
;;
|
|
52
|
+
*)
|
|
53
|
+
echo "codex-wire-canary: unknown mode '${mode}' (use corpus or fresh)" >&2
|
|
54
|
+
exit 64
|
|
55
|
+
;;
|
|
56
|
+
esac
|
|
@@ -67,6 +67,15 @@ type BackendReplayOptions = {
|
|
|
67
67
|
// machinery is exercised against the REAL backend.
|
|
68
68
|
readonly wire: boolean;
|
|
69
69
|
readonly wireStrictness: string | undefined;
|
|
70
|
+
// Replay-to-a-point (spec §Replay-to-a-point): --wire-breakpoint specs
|
|
71
|
+
// for the wire stub (`ordinal:<n>`, `method:<rpcMethod>[:<n>]`,
|
|
72
|
+
// `first-delta`, `turn-started[:<n>]`, `turn-completed[:<n>]`), in hold
|
|
73
|
+
// order. While the stub holds, the whole stack (runner -> backend ->
|
|
74
|
+
// client projection) is frozen at the recorded prefix; an external
|
|
75
|
+
// driver (Playwright DOM assertions, the film rig) observes and releases
|
|
76
|
+
// the hold over the stub's HTTP control routes (GET /replay/breakpoint,
|
|
77
|
+
// POST /replay/resume against the printed control URL).
|
|
78
|
+
readonly wireBreakpoints: readonly string[];
|
|
70
79
|
};
|
|
71
80
|
|
|
72
81
|
type WireReplayServerHandle = {
|
|
@@ -93,6 +102,7 @@ async function startWireReplayServerForFixture(
|
|
|
93
102
|
readonly capturePath?: string;
|
|
94
103
|
readonly strictness?: string | undefined;
|
|
95
104
|
readonly clock?: string | undefined;
|
|
105
|
+
readonly breakpoints?: readonly string[];
|
|
96
106
|
}) => Promise<WireReplayServerHandle>;
|
|
97
107
|
wireReplayClockForBackendSpeed: (
|
|
98
108
|
speed: string | undefined
|
|
@@ -105,13 +115,27 @@ async function startWireReplayServerForFixture(
|
|
|
105
115
|
// test/agentReplayFixture.test.ts.
|
|
106
116
|
const wireClock = wireModule.wireReplayClockForBackendSpeed(options.speed);
|
|
107
117
|
|
|
108
|
-
|
|
118
|
+
const server = await wireModule.startWireReplayServerJs({
|
|
109
119
|
capturePath: options.fixturePath,
|
|
110
120
|
...(options.wireStrictness === undefined
|
|
111
121
|
? {}
|
|
112
122
|
: { strictness: options.wireStrictness }),
|
|
113
123
|
...(wireClock === undefined ? {} : { clock: wireClock }),
|
|
124
|
+
...(options.wireBreakpoints.length === 0
|
|
125
|
+
? {}
|
|
126
|
+
: { breakpoints: options.wireBreakpoints }),
|
|
114
127
|
});
|
|
128
|
+
if (options.wireBreakpoints.length > 0) {
|
|
129
|
+
// The external driver's handle on the frozen stack: poll GET
|
|
130
|
+
// /replay/breakpoint until held, assert on the frozen DOM/projection,
|
|
131
|
+
// then POST /replay/resume.
|
|
132
|
+
console.error(
|
|
133
|
+
`[wire-breakpoint] control http://127.0.0.1:${server.port} breakpoints=${options.wireBreakpoints.join(
|
|
134
|
+
','
|
|
135
|
+
)}`
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
return server;
|
|
115
139
|
}
|
|
116
140
|
|
|
117
141
|
type BackendReplayBrowserAuth = {
|
|
@@ -403,6 +427,7 @@ function parseArgs(args: readonly string[]): BackendReplayOptions {
|
|
|
403
427
|
oracleFeatureId: argValue(args, '--oracle-feature'),
|
|
404
428
|
wire: args.includes('--wire'),
|
|
405
429
|
wireStrictness: argValue(args, '--wire-strictness'),
|
|
430
|
+
wireBreakpoints: argValues(args, '--wire-breakpoint'),
|
|
406
431
|
};
|
|
407
432
|
}
|
|
408
433
|
|
|
@@ -1888,6 +1913,24 @@ function evaluateRequiredFeatureGate(
|
|
|
1888
1913
|
}
|
|
1889
1914
|
}
|
|
1890
1915
|
|
|
1916
|
+
// Every value of a repeatable flag, in argv order (--wire-breakpoint may
|
|
1917
|
+
// name several ordered holds).
|
|
1918
|
+
function argValues(args: readonly string[], name: string): readonly string[] {
|
|
1919
|
+
const values: string[] = [];
|
|
1920
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
1921
|
+
if (args[index] !== name) {
|
|
1922
|
+
continue;
|
|
1923
|
+
}
|
|
1924
|
+
const value = args[index + 1];
|
|
1925
|
+
if (value === undefined) {
|
|
1926
|
+
throw new Error(`${name} requires a value`);
|
|
1927
|
+
}
|
|
1928
|
+
values.push(value);
|
|
1929
|
+
index += 1;
|
|
1930
|
+
}
|
|
1931
|
+
return values;
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1891
1934
|
function argValue(args: readonly string[], name: string): string | undefined {
|
|
1892
1935
|
const index = args.indexOf(name);
|
|
1893
1936
|
|
|
@@ -1906,7 +1949,7 @@ function argValue(args: readonly string[], name: string): string | undefined {
|
|
|
1906
1949
|
|
|
1907
1950
|
function printHelp(): void {
|
|
1908
1951
|
process.stdout.write(
|
|
1909
|
-
`Usage: pnpm run replay:agent-backend -- --fixture <path> [options]\n\nOptions:\n --dry-run Validate fixture/manifest/diagnostics without backend connection\n --probe-backend Also join the real Phoenix local_runner channel, then exit\n --provider auto|codex|claude-code Replay provider. Default: auto\n --speed immediate|realtime|<n>x|<n>ms\n Replay speed. Default: immediate\n --backend-url <url> Local Phoenix backend URL; required by --probe-backend/replay\n --setup-fixture Create a throwaway fixture user/workspace/channel first; requires local fixture registration\n --setup-label <label> Prefix for throwaway fixture setup. Default: agent-backend-replay\n --workspace <slug> Target workspace slug for session-token exchange and future replay\n --channel <slug> Target channel slug for token scoping and future replay\n --thread-id <id> Target thread id for the future backend replay slice\n --runner-id <id> Local runner id for backend probing. Default: generated\n --cwd <path> Cwd advertised in backend probe/replay. Default: current directory\n --work-description <text> Work description sent through the normal start mutation\n --token <token> Local-runner token; also reads LINZUMI_AGENT_BACKEND_REPLAY_TOKEN\n --session-token <token> Browser/session token to exchange for a local-runner token; also reads LINZUMI_AGENT_BACKEND_REPLAY_SESSION_TOKEN\n --out-dir <path> Artifact directory for summary.json. Default: agent-backend-replay-output\n --wire Serve the fixture from the stub codex app-server websocket (spec/codex-wire-capture-replay.spec.md) so the runner's real socket machinery is exercised\n --wire-strictness shape|exact Wire mode validation of runner-sent packets against the recording. Default: shape\n --require-feature <featureId> Fail before backend setup unless manifest readiness says the feature is ready\n --oracle-feature <featureId> Run feature-specific backend oracles without using readiness as a preflight gate\n --no-summary Do not write summary.json; stdout JSON is still printed\n\nExamples:\n pnpm --filter @linzumi/cli run replay:agent-backend -- --fixture test/fixtures/agent-raw-replay/real-probe/claude.ndjson --provider claude-code --dry-run\n pnpm --filter @linzumi/cli run replay:agent-backend -- --fixture test/fixtures/agent-raw-replay/real-probe/claude.ndjson --provider claude-code --probe-backend --backend-url http://127.0.0.1:4140 --workspace default --session-token <browser-session-token>\n pnpm --filter @linzumi/cli run replay:agent-backend -- --fixture test/fixtures/agent-raw-replay/real-probe/claude.ndjson --provider claude-code --backend-url http://127.0.0.1:4140 --setup-fixture\n`
|
|
1952
|
+
`Usage: pnpm run replay:agent-backend -- --fixture <path> [options]\n\nOptions:\n --dry-run Validate fixture/manifest/diagnostics without backend connection\n --probe-backend Also join the real Phoenix local_runner channel, then exit\n --provider auto|codex|claude-code Replay provider. Default: auto\n --speed immediate|realtime|<n>x|<n>ms\n Replay speed. Default: immediate\n --backend-url <url> Local Phoenix backend URL; required by --probe-backend/replay\n --setup-fixture Create a throwaway fixture user/workspace/channel first; requires local fixture registration\n --setup-label <label> Prefix for throwaway fixture setup. Default: agent-backend-replay\n --workspace <slug> Target workspace slug for session-token exchange and future replay\n --channel <slug> Target channel slug for token scoping and future replay\n --thread-id <id> Target thread id for the future backend replay slice\n --runner-id <id> Local runner id for backend probing. Default: generated\n --cwd <path> Cwd advertised in backend probe/replay. Default: current directory\n --work-description <text> Work description sent through the normal start mutation\n --token <token> Local-runner token; also reads LINZUMI_AGENT_BACKEND_REPLAY_TOKEN\n --session-token <token> Browser/session token to exchange for a local-runner token; also reads LINZUMI_AGENT_BACKEND_REPLAY_SESSION_TOKEN\n --out-dir <path> Artifact directory for summary.json. Default: agent-backend-replay-output\n --wire Serve the fixture from the stub codex app-server websocket (spec/codex-wire-capture-replay.spec.md) so the runner's real socket machinery is exercised\n --wire-strictness shape|exact Wire mode validation of runner-sent packets against the recording. Default: shape\n --wire-breakpoint <spec> Replay-to-a-point hold (repeatable, ordered): ordinal:<n> | method:<rpcMethod>[:<n>] | first-delta | turn-started[:<n>] | turn-completed[:<n>]. The stub freezes the stack at the hold; observe/release via GET /replay/breakpoint + POST /replay/resume on the printed control URL\n --require-feature <featureId> Fail before backend setup unless manifest readiness says the feature is ready\n --oracle-feature <featureId> Run feature-specific backend oracles without using readiness as a preflight gate\n --no-summary Do not write summary.json; stdout JSON is still printed\n\nExamples:\n pnpm --filter @linzumi/cli run replay:agent-backend -- --fixture test/fixtures/agent-raw-replay/real-probe/claude.ndjson --provider claude-code --dry-run\n pnpm --filter @linzumi/cli run replay:agent-backend -- --fixture test/fixtures/agent-raw-replay/real-probe/claude.ndjson --provider claude-code --probe-backend --backend-url http://127.0.0.1:4140 --workspace default --session-token <browser-session-token>\n pnpm --filter @linzumi/cli run replay:agent-backend -- --fixture test/fixtures/agent-raw-replay/real-probe/claude.ndjson --provider claude-code --backend-url http://127.0.0.1:4140 --setup-fixture\n`
|
|
1910
1953
|
);
|
|
1911
1954
|
}
|
|
1912
1955
|
|