@linzumi/cli 1.0.219 → 1.0.221
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/cloud-supervisor.mjs +1 -1
- package/dist/impl-res/index.js +9 -9
- package/dist/impl-res/mcp-server.mjs +21 -21
- package/dist/impl-ts/cloud-supervisor.mjs +1 -1
- package/dist/impl-ts/index.js +379 -379
- package/dist/impl-ts/mcp-server.mjs +19 -19
- package/dist/mcp-server.mjs +19 -19
- package/package.json +1 -1
- package/scripts/build-mcp-parity-oracle.mjs +18 -2
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ var Hr=Object.create;var Kn=Object.defineProperty;var Kr=Object.getOwnPropertyDe
|
|
|
9
9
|
`+t)}function ee(e,n,t,r,o,i){if(e.listenerCount("wsClientError")){let s=new Error(o);Error.captureStackTrace(s,ee),e.emit("wsClientError",s,t,n)}else Te(t,r,o,i)}});import{spawn as Us}from"node:child_process";import{appendFileSync as Ds,rmSync as Lr,writeFileSync as Re,mkdirSync as ye,chmodSync as jr,readFileSync as Fs,readdirSync as zs,statSync as qs,unlinkSync as Gs}from"node:fs";import{dirname as $r,join as nn}from"node:path";var xi=be(Gt(),1),bi=be(xn(),1),vi=be(Sn(),1),An=be(We(),1),Si=be(Yt(),1);function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function er(e){let n=[["threadId",e.threadId],["turnId",e.turnId],["itemId",e.itemId],["processId",e.processId],["requestId",e.requestId]].filter(t=>t[1]!==void 0);return Object.fromEntries(n)}function k(e){return e!==void 0&&U(e)?e:void 0}function Ke(e){return Array.isArray(e)?e:void 0}function h(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function me(e){return typeof e=="number"&&Number.isInteger(e)?e:void 0}import{appendFileSync as Ti,openSync as od}from"node:fs";import{homedir as ir}from"node:os";import{dirname as Oi,join as sr,resolve as Ai,sep as Ii}from"node:path";import{mkdirSync as Ri}from"node:fs";var q={_generated:"GENERATED by scripts/naming_dual_emit_codegen.mjs from scripts/naming_canonical_key_map.json (N2.2 dual-emit, D46) - DO NOT EDIT; run: node scripts/naming_dual_emit_codegen.mjs --write",events:[["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.child_thread_event_failed","linzumi.child_thread_event_failed"],["kandan.child_thread_event_skipped_missing_thread_binding","linzumi.child_thread_event_skipped_missing_thread_binding"],["kandan.child_thread_upsert_failed","linzumi.child_thread_upsert_failed"],["kandan.child_thread_upsert_skipped_missing_thread_binding","linzumi.child_thread_upsert_skipped_missing_thread_binding"],["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"]],keys:[["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"]],keyPrimaryLegacy:[["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"]],values:[["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"]],topic:{legacyPrefix:"local_codex_runner:",canonicalPrefix:"commander:"},originator:{legacy:"kandan-local-codex-runner",canonical:"linzumi-commander"}};var ki=new Map(q.events),Ei=new Map(q.events.map(([e,n])=>[n,e])),tr=new Map(q.keys),rr=new Map(q.keyPrimaryLegacy),Ci=new Map(q.values),Pi=new Map(q.values.map(([e,n])=>[n,e])),Ya={eventCanonicalByLegacy:ki,eventLegacyByCanonical:Ei,keyCanonicalByLegacy:tr,keyPrimaryLegacyByCanonical:rr,valueCanonicalByLegacy:Ci,valueLegacyByCanonical:Pi,originator:q.originator,topic:q.topic};function or(e){let n=new Set(e);for(let t of e){let r=tr.get(t);r!==void 0&&n.add(r);let o=rr.get(t);o!==void 0&&n.add(o)}return n}var nr=new Map;for(let[e,n]of q.keys){let t=nr.get(n)??[];t.push(e),nr.set(n,t)}var ne="<SENSITIVE_DATA>",ar=or(new Set(["access_token","authorization","code","cookie","kandan_preview_ticket","refresh_token","token"])),Mi=new Set(["--access-token","--api-key","--authorization","--cookie","--oauth-code","--password","--refresh-token","--secret","--token"]);function ji(e){if(process.env.VITEST===void 0)return;let n=sr(ir(),".linzumi"),t=Ai(e);if(t===n||t.startsWith(`${n}${Ii}`))throw new Error(`test-mode log isolation violated: refusing to open ${e} inside the real ~/.linzumi (point the logger at a temp path; the harness defaults LINZUMI_RUNNER_LOG_FILE / LINZUMI_CLI_AUDIT_LOG for exactly this - see plans/2026-07-10-cli-test-hygiene-spec.md item 2)`)}function ge(e,n,t={}){let r=t.logFile??Ni();ji(r);try{Ri(Oi(r),{recursive:!0}),Ti(r,`${JSON.stringify({ts:new Date().toISOString(),event:e,...t.sessionId===void 0?{}:{sessionId:t.sessionId},...Ji(n)})}
|
|
10
10
|
`,"utf8")}catch{return}}function Ni(){let e=process.env.LINZUMI_CLI_AUDIT_LOG?.trim();return e===void 0||e===""?sr(ir(),".linzumi","logs","command-events.jsonl"):e}function Ji(e){return dr(e)}function In(e,n){return Ui(n)?ne:typeof e=="string"?cr(e):Array.isArray(e)?n==="args"?Li(e):e.map(t=>In(t,void 0)):e!==null&&typeof e=="object"?dr(e):e}function dr(e){let n=typeof e.name=="string"?e.name.toLowerCase():void 0,t=n==="authorization"||n==="cookie"||n==="set-cookie";return Object.fromEntries(Object.entries(e).filter(([r])=>r!=="runner_console").map(([r,o])=>[r,t&&r==="value"?ne:In(o,r)]))}function Li(e){let n=!1;return e.map(t=>{if(typeof t!="string")return n=!1,In(t,void 0);if(n)return n=!1,ne;let[r,o]=$i(t);return Mi.has(r)?o===void 0?(n=!0,t):`${r}=${ne}`:cr(t)})}function $i(e){let n=e.indexOf("=");return n===-1?[e,void 0]:[e.slice(0,n),e.slice(n+1)]}function Ui(e){return e===void 0?!1:/^(authorization|cookie|set-cookie|password)$/i.test(e)||/(^|[_-])(access[_-]?token|api[_-]?key|auth[_-]?token|oauth[_-]?code|refresh[_-]?token|secret|token)$/i.test(e)}function cr(e){return Di(e).replace(/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,ne)}function Di(e){let n;try{n=new URL(e)}catch{return Fi(e)}for(let t of[...n.searchParams.keys()])ar.has(t.toLowerCase())&&n.searchParams.set(t,ne);return n.toString()}function Fi(e){let n=e.indexOf("?"),t=e.indexOf("#");if(n===-1||t!==-1&&t<n)return e;let r=e.slice(0,n),o=t===-1?e.slice(n+1):e.slice(n+1,t),i=t===-1?"":e.slice(t),s=new URLSearchParams(o),a=!1;for(let d of[...s.keys()])ar.has(d.toLowerCase())&&(s.set(d,ne),a=!0);switch(a){case!0:return`${r}?${s.toString()}${i}`;case!1:return e}}function ur(e){let n=e.channelSession;return{...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{config:{model_reasoning_effort:n.reasoningEffort}},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:Rn(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandbox:n.sandbox}}}function lr(e){let n=e.channelSession;return{cwd:e.cwd,...n.model===void 0?{}:{model:n.model},...n.reasoningEffort===void 0?{}:{effort:n.reasoningEffort},...e.fast===!0?{serviceTier:"fast"}:{},...n.codexEnvironmentId===void 0?{}:{environmentId:n.codexEnvironmentId},approvalPolicy:Rn(n.approvalPolicy,n.sandbox,{sandboxedNeverDefault:n.sandboxedApprovalNeverDefault}),...n.sandbox===void 0?{}:{sandboxPolicy:qi(n.sandbox,e.cwd)}}}function zi(e,n,t){let r=t?.sandboxedNeverDefault===!0&&n==="workspace-write";switch(e){case void 0:case"default":return r?"never":"on-request";case"never":return n==="danger-full-access"||r?"never":"on-request";case"on-request":case"on-failure":return e;default:return console.warn(`linzumi approval-policy clamp: unknown Codex approval policy ${e}; clamping to most-restrictive approval (on-request)`),"on-request"}}var fr={granular:{sandbox_approval:!1,rules:!1,skill_approval:!1,request_permissions:!1,mcp_elicitations:!0}};function Rn(e,n,t){let r=zi(e,n,t);return r==="never"&&n==="danger-full-access"?fr:r==="on-failure"?"on-request":r}function pr(e,n,t){try{return Rn(e,n,t)===fr}catch{return!1}}function qi(e,n){switch(e){case"danger-full-access":return{type:"dangerFullAccess"};case"read-only":return{type:"readOnly",networkAccess:!1};case"workspace-write":return{type:"workspaceWrite",writableRoots:[n],networkAccess:!1,excludeTmpdirEnvVar:!1,excludeSlashTmp:!1};default:throw new Error(`unsupported Codex sandbox mode: ${e}`)}}function mr(e){let n=Gi(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(k(e.item)?.id)??"assistant-message",turnId:h(e.turnId)??h(e.turn_id)??h(k(e.turn)?.id),delta:n}}function gr(e){let n=hr(e);if(!(n===void 0||n===""))return{itemKey:h(e.itemId)??h(e.item_id)??h(k(e.item)?.id)??"reasoning",turnId:h(e.turnId)??h(e.turn_id)??h(k(e.turn)?.id),delta:n}}function Gi(e){return hr(e)}function Vi(e){return e>=55296&&e<=56319}function Bi(e){return e>=56320&&e<=57343}function yr(e,n){let t=Math.min(Math.max(0,n),e.length),r=t>0&&t<e.length&&Vi(e.charCodeAt(t-1))&&Bi(e.charCodeAt(t))?t-1:t;return e.slice(0,r)}function hr(e){let n=e.delta;return typeof n=="string"?n:U(n)?h(n.text)??h(n.content)??h(n.delta)??h(n.message):h(e.text)??h(e.content)??h(e.message)}import{mkdirSync as Wi,appendFileSync as Hi}from"node:fs";import{dirname as Ki}from"node:path";function _r(e){return JSON.stringify(e)}var Oe,Qi=/(^|[_-])(token|secret|api[_-]?key|authorization|cookie|private[_-]?key|login[_-]?url)([_-]|$)/iu;function Mn(){return xr()!==void 0}function jn(e){let n=xr();if(n===void 0)return;let t=Zi(n),r=Xi(e),o={schemaVersion:1,provider:e.provider,captureKind:e.captureKind,ordinal:t.nextOrdinal,offsetMs:Math.max(0,Date.now()-t.startedAtMs),...r.rawText===void 0?{}:{rawText:r.rawText},...r.rawValue===void 0?{}:{rawValue:r.rawValue},...e.captureMetadata===void 0?{}:{captureMetadata:Ae(e.captureMetadata)},...r.transforms.length===0?e.transforms===void 0?{}:{transforms:e.transforms}:{transforms:[...e.transforms??[],...r.transforms]}};t.nextOrdinal+=1,Hi(n,`${_r(o)}
|
|
11
11
|
`,"utf8")}function xr(){let e=process.env.LINZUMI_AGENT_REPLAY_RECORD_FILE?.trim();return e===void 0||e===""?void 0:e}function Zi(e){return Oe!==void 0&&Oe.path===e||(Wi(Ki(e),{recursive:!0}),Oe={path:e,startedAtMs:Date.now(),nextOrdinal:0}),Oe}function Xi(e){if(process.env.LINZUMI_AGENT_REPLAY_EXACT_RAW==="1")return{rawText:e.rawText,rawValue:e.rawValue,transforms:[]};let n=[],t=e.rawValue===void 0?void 0:Ae(e.rawValue,"$.rawValue",n);return{rawText:Yi(e.rawText,n),rawValue:t,transforms:n}}function Yi(e,n){if(e!==void 0)try{let t=JSON.parse(e);return JSON.stringify(Ae(t,"$.rawText",n))}catch{return e}}function Ae(e,n="$",t=[]){if(Array.isArray(e))return e.map((o,i)=>Ae(o,`${n}[${i}]`,t));if(!U(e))return e;let r=Object.entries(e).map(([o,i])=>{let s=`${n}.${o}`;return Qi.test(o)?(t.push({type:"credential_redaction",path:s}),[o,"[REDACTED]"]):[o,i===void 0?void 0:Ae(i,s,t)]});return Object.fromEntries(r)}function br(e){return{name:"linzumi",command:e.command??"linzumi",args:[...e.argsPrefix??[],"mcp","server","--api-url",e.kandanUrl,...e.authFilePath===void 0?[]:["--auth-file",e.authFilePath],...e.delegationAuthFilePath===void 0?[]:["--delegation-auth-file",e.delegationAuthFilePath],...e.ownerUsername===void 0?[]:["--owner-username",e.ownerUsername],...e.cwd===void 0?[]:["--cwd",e.cwd],...e.threadId===void 0?[]:["--thread-id",e.threadId],"--mode",e.operatingMode??"text",...e.toolScope===void 0||e.toolScope==="all"?[]:["--tool-scope",e.toolScope],...e.agentSession===!0?["--agent-session"]:[],...e.askUserQuestionTool===!0?["--ask-user-question-tool"]:[],...e.multiAgentJobs===!0?["--multi-agent-jobs"]:[]],env:{...e.accessToken===void 0?{}:{LINZUMI_MCP_ACCESS_TOKEN:e.accessToken},...e.devServices===void 0?{}:{LINZUMI_DEV_SERVICES_SCOPE:e.devServices.scope,LINZUMI_DEV_SERVICES_OWNER_PID:String(e.devServices.ownerPid)},ELECTRON_RUN_AS_NODE:"1"}}}function Nn(e,n){return["-c",`mcp_servers.${e.name}.command=${JSON.stringify(e.command)}`,"-c",`mcp_servers.${e.name}.args=${es(e.args)}`,...Object.entries(e.env).flatMap(([t,r])=>["-c",`mcp_servers.${e.name}.env.${t}=${JSON.stringify(r)}`]),...n.neverEquivalentGranularApprovalPolicy?["-c",`mcp_servers.${e.name}.default_tools_approval_mode="approve"`]:[],...e.args.includes("--ask-user-question-tool")?["-c",`mcp_servers.${e.name}.tool_timeout_sec=${vr}`]:[]]}function es(e){return`[${e.map(n=>JSON.stringify(n)).join(", ")}]`}var vr=2147483,Od=vr*1e3-5*6e4;var Id=["# Managed by Linzumi - do not edit by hand.","# This isolated CODEX_HOME keeps Linzumi-spawned codex processes off the","# user's ~/.codex config and the macOS Keychain. See codexHome.ts.",'mcp_oauth_credentials_store = "file"','cli_auth_credentials_store = "file"',""].join(`
|
|
12
|
-
`);function Sr(){return["-c",'mcp_oauth_credentials_store="file"',"-c",'cli_auth_credentials_store="file"']}var ns=5*6e4;var rs=(()=>{let e=process.env.LINZUMI_CODEX_WS_KEEPALIVE_MS;if(e===void 0)return 2e4;let n=Number.parseInt(e,10);return Number.isInteger(n)&&n>0?n:2e4})();function os(e){let n=e;if(typeof n.ping=="function"&&n.readyState===WebSocket.OPEN)try{n.ping()}catch{}}function Er(e,n={}){return["app-server",...hs(n),"--listen",e]}var is=["-c","features.apps=false"],ss=["-c","features.default_mode_request_user_input=true"],as="LINZUMI_CODEX_STREAM_IDLE_TIMEOUT_MS",ds="LINZUMI_CODEX_STREAM_IDLE_TIMEOUT_SOURCE",cs=5e3,us=6e5,ls=["flag","env","server_default"];function fs(e){return ls.find(n=>n===e)}function ps(e){let n=e?.trim();if(e===void 0||n===void 0||n==="")return{state:"unset"};if(!/^[0-9]+$/.test(n))return{state:"invalid",raw:e};let t=Number(n);return!Number.isSafeInteger(t)||t<cs||t>us?{state:"invalid",raw:e}:{state:"applied",timeoutMs:t}}function ms(e=process.env){let n=ps(e[as]);if(n.state==="unset")return n;let t=fs(e[ds]?.trim())??"env";return{...n,source:t}}function gs(e=process.env){let n=ms(e);return n.state==="applied"?n.timeoutMs:void 0}var Cr="openai-linzumi";function Pr(){let e=Cr;return["-c",`model_providers.${e}.name="OpenAI"`,"-c",`model_providers.${e}.wire_api="responses"`,"-c",`model_providers.${e}.requires_openai_auth=true`,"-c",`model_providers.${e}.supports_websockets=true`]}function ys(e){let n=Cr;return[...Pr(),"-c",`model_providers.${n}.stream_idle_timeout_ms=${e}`,"-c",`model_provider="${n}"`]}function hs(e,n=process.env){let t=gs(n);return[...is,...e.nativeQuestionBridge==="durable"?ss:[],...Sr(),...e.model===void 0?[]:["-c",`model=${JSON.stringify(e.model)}`],...e.reasoningEffort===void 0?[]:["-c",`model_reasoning_effort=${JSON.stringify(e.reasoningEffort)}`],...e.fast===!0?["-c",`service_tier=${JSON.stringify("fast")}`]:[],...(e.mcpServers??[]).flatMap(r=>Nn(r,{neverEquivalentGranularApprovalPolicy:e.neverEquivalentGranularApprovalPolicy===!0})),...e.modelProvider===void 0?t===void 0?Pr():ys(t):_s(e.modelProvider,t)]}function _s(e,n){return["-c",`model_providers.${e.id}.name=${JSON.stringify(e.name)}`,"-c",`model_providers.${e.id}.base_url=${JSON.stringify(e.baseUrl)}`,"-c",`model_providers.${e.id}.env_key=${JSON.stringify(e.envKey)}`,"-c",`model_providers.${e.id}.wire_api=${JSON.stringify(e.wireApi)}`,...Object.entries(e.httpHeaders??{}).flatMap(([t,r])=>["-c",`model_providers.${e.id}.http_headers.${t}=${JSON.stringify(r)}`]),...Object.entries(e.envHttpHeaders??{}).flatMap(([t,r])=>["-c",`model_providers.${e.id}.env_http_headers.${t}=${JSON.stringify(r)}`]),...n===void 0?[]:["-c",`model_providers.${e.id}.stream_idle_timeout_ms=${n}`],"-c",`model_provider=${JSON.stringify(e.id)}`]}async function Tr(e,n=t=>new An.default(t)){let t=await ws(e,n),r=new Map,o=new Set,i=new Set,s=[],a=new Set,d={nextId:1,closeError:void 0},c=p=>{let g=new Error(p);r.forEach(u=>u.reject(g)),r.clear()},l=setInterval(()=>os(t),rs);l.unref?.();let f=p=>{if(clearInterval(l),c(p),d.closeError===void 0){d.closeError=new Error(p);for(let g of a)kr(g,d.closeError);a.clear()}};return t.addEventListener("close",()=>f("codex app-server websocket closed")),t.addEventListener("error",()=>f("codex app-server websocket closed")),t.addEventListener("message",p=>{let g=String(p.data),u=Ss(g);if(u===void 0){xs(g);return}if(Ie({direction:"codex_to_commander",captureKind:vs(u),message:u,rawText:g}),"id"in u&&("result"in u||"error"in u)){let v=r.get(u.id);v!==void 0&&(r.delete(u.id),v.resolve(u));return}if("id"in u&&typeof u.method=="string"){Es(t,u,i);return}if(!("id"in u)&&typeof u.method=="string"){let v=u;o.size===0?s.push(v):o.forEach(P=>wr(P,v))}}),await Ps(t,r),{request:(p,g)=>{let u=d.nextId;return d.nextId+=1,Or(t,r,g===void 0?{jsonrpc:"2.0",id:u,method:p}:{jsonrpc:"2.0",id:u,method:p,params:g})},notify:(p,g)=>{let u=g===void 0?{jsonrpc:"2.0",method:p}:{jsonrpc:"2.0",method:p,params:g};Ie({direction:"commander_to_codex",captureKind:"outgoing",message:u,rawText:JSON.stringify(u)}),t.send(JSON.stringify(u))},onNotification:p=>{o.add(p),s.splice(0).forEach(g=>wr(p,g))},onRequest:p=>{i.add(p)},onClose:p=>{if(d.closeError!==void 0){kr(p,d.closeError);return}a.add(p)},isClosed:()=>d.closeError!==void 0,close:()=>{clearInterval(l),t.close()}}}function Ie(e){Mn()&&jn({provider:"codex-app-server",captureKind:e.captureKind,rawText:e.rawText,rawValue:{message:e.message},captureMetadata:{direction:e.direction,capturedAtMs:Date.now(),capturePid:process.pid,...bs(e.message),...e.extraMetadata??{}}})}function xs(e){Mn()&&jn({provider:"codex-app-server",captureKind:"incoming",rawText:e,captureMetadata:{direction:"codex_to_commander",capturedAtMs:Date.now(),capturePid:process.pid,malformed:!0}})}function bs(e){return!("params"in e)||!U(e.params)?{}:er(e.params)}function vs(e){return"id"in e&&("result"in e||"error"in e)?"response":"id"in e&&typeof e.method=="string"?"request":"notification"}function Ss(e){let n=String(e);try{let t=JSON.parse(n);if(!U(t))throw new Error("codex app-server sent non-object JSON-RPC message");return t}catch(t){ge("codex.app_server_frame_malformed",{purpose:"codex.app_server",message:t instanceof Error?t.message:String(t),payload:yr(n,512),payloadChars:n.length});return}}function wr(e,n){try{e(n)}catch(t){ge("codex.notification_callback_failed",{purpose:"codex.app_server",method:n.method,message:t instanceof Error?t.message:String(t)})}}function kr(e,n){try{e(n)}catch(t){ge("codex.close_callback_failed",{purpose:"codex.app_server",message:t instanceof Error?t.message:String(t)})}}async function ws(e,n,t=2e3){let r=Date.now()+t,o;for(;Date.now()<=r;){let i=n(e);try{return await Ts(i),i}catch(s){o=s instanceof Error?s:new Error(String(s)),ks(i)}}throw o??new Error("websocket open failed")}function ks(e){try{e.close()}catch{}}async function Es(e,n,t){let r=o=>Cs(e,o,n.method);try{if(t.size===0){r({jsonrpc:"2.0",id:n.id,error:{code:-32601,message:`unhandled Codex app-server request: ${n.method}`}});return}for(let o of t){let i=await o(n);if(i!==void 0){r({jsonrpc:"2.0",id:n.id,result:i});return}}r({jsonrpc:"2.0",id:n.id,error:{code:-32601,message:`unhandled Codex app-server request: ${n.method}`}})}catch(o){r({jsonrpc:"2.0",id:n.id,error:{code:-32e3,message:o instanceof Error?o.message:String(o)}})}}function Cs(e,n,t){let r=JSON.stringify(n);Ie({direction:"commander_to_codex",captureKind:"response",message:n,rawText:r,extraMetadata:{requestMethod:t}}),e.send(r)}async function Ps(e,n){let t=await Or(e,n,{jsonrpc:"2.0",id:"initialize",method:"initialize",params:{clientInfo:{name:"kandan-local-codex-runner",version:"0.0.1"},capabilities:{experimentalApi:!0}}});if("error"in t)throw new Error(`codex initialize failed: ${t.error.message}`);let r={jsonrpc:"2.0",method:"initialized"};Ie({direction:"commander_to_codex",captureKind:"outgoing",message:r,rawText:JSON.stringify(r)}),e.send(JSON.stringify(r))}function Or(e,n,t){return e.readyState!==WebSocket.OPEN?Promise.reject(new Error("codex app-server websocket is not open")):new Promise((r,o)=>{n.set(t.id,{resolve:r,reject:o}),Ie({direction:"commander_to_codex",captureKind:"request",message:t,rawText:JSON.stringify(t)}),e.send(JSON.stringify(t))})}function Ts(e){return new Promise((n,t)=>{e.addEventListener("open",()=>n(),{once:!0}),e.addEventListener("error",()=>t(new Error("websocket open failed")),{once:!0})})}var uc=300*1e3;function Qe(e){let n=new URL(e);switch(n.protocol){case"ws:":n.protocol="http:";break;case"wss:":n.protocol="https:";break;case"http:":case"https:":break;default:throw new Error("--api-url must be ws://, wss://, http://, or https://")}return n.pathname="",n.search="",n.hash="",n.toString().replace(/\/$/,"")}function Jn(e){let n=e.fetchImpl??fetch,t=Qe(e.kandanUrl),r=e.authMode==="personal-agent-delegation"?"/api/v2/personal-agent-mcp":"/api/v2/local-runner-mcp",o=e.operatingMode??"text",i=async(s,a,d,c={})=>{let l=new URL(a,t),f={...d,operating_mode:o},y={method:s,headers:{authorization:`Bearer ${e.accessToken}`},...c.signal===void 0?{}:{signal:c.signal}};if(s==="GET")for(let[I,J]of Object.entries(f))J!=null&&l.searchParams.set(I,String(J));else y.headers={...y.headers,"content-type":"application/json"},y.body=JSON.stringify(f);let p=await n(l,y),g=await p.json(),u=U(g)?g:void 0;if(u===void 0)throw new Error(`Linzumi MCP API returned non-object JSON from ${a}`);if(p.ok&&u.ok===!0)return u;let v=typeof u.error=="string"?u.error:`HTTP ${p.status}`,P=typeof u.detail=="string"?u.detail:void 0;throw new Error(`Linzumi MCP API ${a} failed: ${v}${P===void 0?"":` detail=${P}`}`)};return{validateAuth:()=>i("GET",`${r}/validate`,{}),issueOnboardingDiscoveryToken:s=>i("POST",`${r}/onboarding-discovery-token`,s),getMessage:s=>i("GET",`${r}/message`,s),getThread:s=>i("GET",`${r}/thread`,s),getThreadTranscript:s=>i("GET",`${r}/thread-transcript`,s),getChannel:s=>i("GET",`${r}/channel`,s),searchWorkspace:s=>i("GET",`${r}/search`,s),askWorkspace:s=>i("POST",`${r}/ask`,s),aboutMe:s=>i("GET",`${r}/about-me`,s),webSearch:s=>i("GET",`${r}/web-search`,s),fetchUrl:s=>i("GET",`${r}/fetch-url`,s),listUiTargets:s=>i("GET",`${r}/ui-targets`,s),openUi:s=>i("POST",`${r}/open-ui`,s),getCodingJobMetadata:s=>i("GET",`${r}/coding-job-metadata`,s),listProjects:s=>i("GET",`${r}/projects`,s),getProjectTasks:s=>i("GET",`${r}/project-tasks`,s),createProjectTask:s=>i("POST",`${r}/project-tasks/create`,s),updateProjectTask:s=>i("POST",`${r}/project-tasks/update`,s),deleteProjectTask:s=>i("POST",`${r}/project-tasks/delete`,s),addProjectTaskDependency:s=>i("POST",`${r}/project-tasks/add-dependency`,s),removeProjectTaskDependency:s=>i("POST",`${r}/project-tasks/remove-dependency`,s),getCallTranscript:s=>i("GET",`${r}/call-transcript`,s),renameCodingJob:s=>i("POST",`${r}/coding-job-title`,s),upsertCodingJobPlan:(s,a)=>i("POST",`${r}/coding-job-plan`,s,a),replaceCodingJobPlanSteps:s=>i("POST",`${r}/coding-job-plan/steps`,s),updateCodingJobPlanStep:s=>i("POST",`${r}/coding-job-plan/step`,s),linkCodingJobPullRequest:s=>i("POST",`${r}/coding-job-primary-pr`,s),listVaultSecrets:s=>i("GET",`${r}/vault-secrets`,s),noteProjectDirectory:s=>i("POST",`${r}/discovered-project`,s),noteAgentConversation:s=>i("POST",`${r}/discovered-conversation`,s),noteOnboardingDiscoveryStatus:s=>i("POST",`${r}/discovery-status`,s),sendChannelMessage:s=>i("POST",`${r}/channel-message`,s),editMessage:s=>i("POST",`${r}/message/edit`,s),agentReply:s=>i("POST",`${r}/agent-reply`,s),declineDocumentAction:s=>i("POST",`${r}/agent/decline-document-action`,s),agentTurnProgress:s=>i("POST",`${r}/agent-turn-progress`,s),agentDocumentTool:s=>i("POST",`${r}/agent/document-tool`,s),agentTopicTool:s=>i("POST",`${r}/agent/topic-tool`,s),agentListCodingJobs:s=>i("GET",`${r}/agent/coding-jobs`,s),agentStartCodingJob:s=>i("POST",`${r}/agent/start-coding-job`,s),agentSpawnChildJob:s=>i("POST",`${r}/agent/spawn-child-job`,s),agentArchiveChildJob:s=>i("POST",`${r}/agent/archive-child-job`,s),agentUnarchiveChildJob:s=>i("POST",`${r}/agent/unarchive-child-job`,s),agentInterruptCodingJob:s=>i("POST",`${r}/agent/interrupt-coding-job`,s),agentSendCodingJobMessage:s=>i("POST",`${r}/agent/send-coding-job-message`,s),agentDiscoverCodingJobs:s=>i("GET",`${r}/agent/discover-coding-jobs`,s),agentReadCodingJobThread:s=>i("GET",`${r}/agent/coding-job-thread`,s),agentResolveJobApproval:s=>i("POST",`${r}/agent/resolve-job-approval`,s),agentArchiveCodingJob:s=>i("POST",`${r}/agent/archive-coding-job`,s),agentUnarchiveCodingJob:s=>i("POST",`${r}/agent/unarchive-coding-job`,s),agentSetThreadStatus:s=>i("POST",`${r}/agent/set-thread-status`,s),agentCreateChannel:s=>i("POST",`${r}/agent/create-channel`,s),agentRenameChannel:s=>i("POST",`${r}/agent/rename-channel`,s),agentArchiveChannel:s=>i("POST",`${r}/agent/archive-channel`,s),agentUnarchiveChannel:s=>i("POST",`${r}/agent/unarchive-channel`,s),agentAddReaction:s=>i("POST",`${r}/agent/add-reaction`,s),agentRemoveReaction:s=>i("POST",`${r}/agent/remove-reaction`,s),agentPinMessage:s=>i("POST",`${r}/agent/pin-message`,s),agentUnpinMessage:s=>i("POST",`${r}/agent/unpin-message`,s),prepareMessageUploads:s=>i("POST",`${r}/message-uploads/prepare`,s),attachMessageFiles:s=>i("POST",`${r}/message-files/attach`,s),prepareCustomEmoji:s=>i("POST",`${r}/custom-emoji/prepare`,s),renameCustomEmoji:s=>i("POST",`${r}/custom-emoji/rename`,s),sendThreadReply:s=>i("POST",`${r}/thread-reply`,s),sendDm:s=>i("POST",`${r}/dm`,s),dmOwner:s=>i("POST",`${r}/dm-owner`,s),getVaultValues:s=>i("POST",`${r}/vault-values`,s)}}import{existsSync as Os,mkdirSync as yc,readFileSync as As,renameSync as hc,rmSync as _c,writeFileSync as xc}from"node:fs";import{homedir as Is}from"node:os";import{dirname as Sc,join as Rs}from"node:path";function Ms(){return Rs(Is(),".linzumi","auth.json")}function Ln(e,n=Ms()){if(!Os(n))return;let t=js(As(n,"utf8")),r=Qe(e),o=t.local_codex_runner?.[r];if(!(o===void 0||o.access_token.trim()==="")&&!(o.expires_at!==void 0&&Date.parse(o.expires_at)<=Date.now()))return{accessToken:o.access_token,kandanBaseUrl:r,issuedAt:o.issued_at,expiresAt:o.expires_at}}function js(e){let n=JSON.parse(e);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("Kandan auth cache must contain a JSON object");let t=n,r=t.local_codex_runner,o=t.personal_agent_delegation;if(r!==void 0&&(typeof r!="object"||r===null||Array.isArray(r)))throw new Error("Kandan auth cache local_codex_runner must be an object");if(o!==void 0&&(typeof o!="object"||o===null||Array.isArray(o)))throw new Error("Kandan auth cache personal_agent_delegation must be an object");return{version:1,local_codex_runner:Js(r),personal_agent_delegation:Ns(o)}}function Ns(e){if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.access_token,t=e.issued_at,r=e.expires_at;if(!(typeof n!="string"||typeof t!="string"))return{access_token:n,issued_at:t,expires_at:typeof r=="string"?r:void 0}}function Js(e){if(!(typeof e!="object"||e===null||Array.isArray(e)))return Object.fromEntries(Object.entries(e).flatMap(([n,t])=>{if(typeof t!="object"||t===null||Array.isArray(t))return[];let r=t.access_token,o=t.issued_at,i=t.expires_at;return typeof r!="string"||typeof o!="string"?[]:[[n,{access_token:r,issued_at:o,expires_at:typeof i=="string"?i:void 0}]]}))}var $n={mcpAuthFileContents:"LINZUMI_CLOUD_MCP_AUTH_JSON",llmProxyToken:"LINZUMI_CLOUD_LLM_PROXY_TOKEN"};function Ar(e){let n;try{n=JSON.parse(Buffer.from(e,"base64").toString("utf8"))}catch{throw new Error("invalid guest cloud turn config payload (not base64 JSON)")}if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("invalid guest cloud turn config payload");let t=n;for(let[r,o]of[["codexVersion",t.codexVersion],["sandbox",t.sandbox],["approvalPolicy",t.approvalPolicy],["kandanUrl",t.kandanUrl],["cwd",t.cwd]])if(typeof o!="string"||o==="")throw new Error(`invalid guest cloud turn config payload (${r} missing)`);if(!Array.isArray(t.input))throw new Error("invalid guest cloud turn config payload (input)");if(typeof t.appServerPort!="number"||!Number.isInteger(t.appServerPort))throw new Error("invalid guest cloud turn config payload (appServerPort)");return t}var te="/home/agent",Ls=`${te}/.linzumi-provisioned`;var Un="/dev/shm/linzumi",Lc=`${Un}/codex`,$c=`${Un}/mcp-auth.json`;var Uc=`${Un}/codex.env`;var Gc=`${te}/cloud-supervisor.mjs`,Ir=`${te}/mcp-server.mjs`,Dn=`${te}/.secrets`,Fn=`${Dn}/mcp-auth.json`,Ze=`${te}/.codex`,Rr=`${Ze}/linzumi-thread-map.json`;var zn=`${te}/.turn-heartbeats`,Mr=5e3,$s=/^[A-Za-z0-9-]{8,64}$/;function qn(e){if(!$s.test(e))throw new Error(`invalid cloud turn nonce: ${JSON.stringify(e.slice(0,80))}`)}var Vs=3e4,Bs=200,Ws=18e4,Nr="LINZUMI_GUEST_MODEL_CALL_LIVENESS_MS",Hs=15*6e4,Jr="LINZUMI_GUEST_ACTIVE_LOOP_BUDGET_MS",Ye=2147483647;function Ks(e){let n=e[Jr];if(n===void 0)return Hs;let t=Number(n);if(n.trim()===""||!Number.isSafeInteger(t)||t<=0||t>Ye)throw new Error(`${Jr} must be an integer number of milliseconds between 1 and ${Ye}, got ${JSON.stringify(n)}`);return t}var Vn=class extends Error{code="active_loop_budget_exceeded";budgetMs;constructor(n){super(`active_loop_budget_exceeded: guest turn exceeded the ${n}ms wall-clock budget; killed the guest turn`),this.name="GuestActiveLoopBudgetExceeded",this.budgetMs=n}};function Qs(e){let n=e[Nr];if(n===void 0)return Ws;let t=Number(n);if(n.trim()===""||!Number.isSafeInteger(t)||t<=0)throw new Error(`${Nr} must be a positive integer number of milliseconds, got ${JSON.stringify(n)}`);return t}var Bn=class extends Error{code="guest_turn_liveness_failure";windowMs;constructor(n){super(`guest_turn_liveness_failure: zero upstream model calls for ${n}ms; killed the guest turn`),this.name="GuestTurnLivenessFailure",this.windowMs=n}};function Zs(e,n,t){if(e.method!=="thread/tokenUsage/updated")return;let r=k(e.params)??{};if(h(r.threadId)!==n||h(r.turnId)!==t)return;let o=me(k(k(r.tokenUsage)?.total)?.totalTokens),i=me(k(k(r.tokenUsage)?.last)?.totalTokens);if(!(o===void 0||o<0))return{totalTokens:o,priorCallTotalTokens:i!==void 0&&i>=0&&i<=o?o-i:void 0}}function re(e){return e.replace(/\bsmk_[A-Za-z0-9._-]+/g,"smk_[REDACTED]").replace(/\b(sk|lz|tok|bearer)[-_][A-Za-z0-9._-]{8,}/gi,"$1_[REDACTED]")}var Gn=64*1024;function Xs(e,n){let t=n.now??Date.now,r=Buffer.alloc(0),o=null,i=null,s=a=>{let d=Buffer.isBuffer(a)?a:Buffer.from(a,"utf8");r=Buffer.concat([r,d]);let c=Gn*2;r.byteLength>c&&(r=r.subarray(r.byteLength-c))};return e.stdout?.on("data",s),e.stderr?.on("data",s),e.once("exit",(a,d)=>{o=a,i=d??null}),{evidence:a=>{let d=Buffer.from(re(r.toString("utf8")),"utf8"),c=d.byteLength<=Gn?d:d.subarray(d.byteLength-Gn);return{marker:"guest_turn_failure_evidence",empty_output:r.byteLength===0,output_tail:c.toString("utf8"),exit_code:o,signal:i,duration_ms:Math.max(0,t()-n.startedAtMs),model_call_count:a}}}}var en;function Ys(e){en=e;try{ye($r(e),{recursive:!0}),Re(e,"")}catch{en=void 0}}function D(e){let n=`${JSON.stringify(e)}
|
|
12
|
+
`);function Sr(){return["-c",'mcp_oauth_credentials_store="file"',"-c",'cli_auth_credentials_store="file"']}var ns=5*6e4;var rs=(()=>{let e=process.env.LINZUMI_CODEX_WS_KEEPALIVE_MS;if(e===void 0)return 2e4;let n=Number.parseInt(e,10);return Number.isInteger(n)&&n>0?n:2e4})();function os(e){let n=e;if(typeof n.ping=="function"&&n.readyState===WebSocket.OPEN)try{n.ping()}catch{}}function Er(e,n={}){return["app-server",...hs(n),"--listen",e]}var is=["-c","features.apps=false"],ss=["-c","features.default_mode_request_user_input=true"],as="LINZUMI_CODEX_STREAM_IDLE_TIMEOUT_MS",ds="LINZUMI_CODEX_STREAM_IDLE_TIMEOUT_SOURCE",cs=5e3,us=6e5,ls=["flag","env","server_default"];function fs(e){return ls.find(n=>n===e)}function ps(e){let n=e?.trim();if(e===void 0||n===void 0||n==="")return{state:"unset"};if(!/^[0-9]+$/.test(n))return{state:"invalid",raw:e};let t=Number(n);return!Number.isSafeInteger(t)||t<cs||t>us?{state:"invalid",raw:e}:{state:"applied",timeoutMs:t}}function ms(e=process.env){let n=ps(e[as]);if(n.state==="unset")return n;let t=fs(e[ds]?.trim())??"env";return{...n,source:t}}function gs(e=process.env){let n=ms(e);return n.state==="applied"?n.timeoutMs:void 0}var Cr="openai-linzumi";function Pr(){let e=Cr;return["-c",`model_providers.${e}.name="OpenAI"`,"-c",`model_providers.${e}.wire_api="responses"`,"-c",`model_providers.${e}.requires_openai_auth=true`,"-c",`model_providers.${e}.supports_websockets=true`]}function ys(e){let n=Cr;return[...Pr(),"-c",`model_providers.${n}.stream_idle_timeout_ms=${e}`,"-c",`model_provider="${n}"`]}function hs(e,n=process.env){let t=gs(n);return[...is,...e.nativeQuestionBridge==="durable"?ss:[],...Sr(),...e.model===void 0?[]:["-c",`model=${JSON.stringify(e.model)}`],...e.reasoningEffort===void 0?[]:["-c",`model_reasoning_effort=${JSON.stringify(e.reasoningEffort)}`],...e.fast===!0?["-c",`service_tier=${JSON.stringify("fast")}`]:[],...(e.mcpServers??[]).flatMap(r=>Nn(r,{neverEquivalentGranularApprovalPolicy:e.neverEquivalentGranularApprovalPolicy===!0})),...e.modelProvider===void 0?t===void 0?Pr():ys(t):_s(e.modelProvider,t)]}function _s(e,n){return["-c",`model_providers.${e.id}.name=${JSON.stringify(e.name)}`,"-c",`model_providers.${e.id}.base_url=${JSON.stringify(e.baseUrl)}`,"-c",`model_providers.${e.id}.env_key=${JSON.stringify(e.envKey)}`,"-c",`model_providers.${e.id}.wire_api=${JSON.stringify(e.wireApi)}`,...Object.entries(e.httpHeaders??{}).flatMap(([t,r])=>["-c",`model_providers.${e.id}.http_headers.${t}=${JSON.stringify(r)}`]),...Object.entries(e.envHttpHeaders??{}).flatMap(([t,r])=>["-c",`model_providers.${e.id}.env_http_headers.${t}=${JSON.stringify(r)}`]),...n===void 0?[]:["-c",`model_providers.${e.id}.stream_idle_timeout_ms=${n}`],"-c",`model_provider=${JSON.stringify(e.id)}`]}async function Tr(e,n=t=>new An.default(t)){let t=await ws(e,n),r=new Map,o=new Set,i=new Set,s=[],a=new Set,d={nextId:1,closeError:void 0},c=p=>{let g=new Error(p);r.forEach(u=>u.reject(g)),r.clear()},l=setInterval(()=>os(t),rs);l.unref?.();let f=p=>{if(clearInterval(l),c(p),d.closeError===void 0){d.closeError=new Error(p);for(let g of a)kr(g,d.closeError);a.clear()}};return t.addEventListener("close",()=>f("codex app-server websocket closed")),t.addEventListener("error",()=>f("codex app-server websocket closed")),t.addEventListener("message",p=>{let g=String(p.data),u=Ss(g);if(u===void 0){xs(g);return}if(Ie({direction:"codex_to_commander",captureKind:vs(u),message:u,rawText:g}),"id"in u&&("result"in u||"error"in u)){let v=r.get(u.id);v!==void 0&&(r.delete(u.id),v.resolve(u));return}if("id"in u&&typeof u.method=="string"){Es(t,u,i);return}if(!("id"in u)&&typeof u.method=="string"){let v=u;o.size===0?s.push(v):o.forEach(P=>wr(P,v))}}),await Ps(t,r),{request:(p,g)=>{let u=d.nextId;return d.nextId+=1,Or(t,r,g===void 0?{jsonrpc:"2.0",id:u,method:p}:{jsonrpc:"2.0",id:u,method:p,params:g})},notify:(p,g)=>{let u=g===void 0?{jsonrpc:"2.0",method:p}:{jsonrpc:"2.0",method:p,params:g};Ie({direction:"commander_to_codex",captureKind:"outgoing",message:u,rawText:JSON.stringify(u)}),t.send(JSON.stringify(u))},onNotification:p=>{o.add(p),s.splice(0).forEach(g=>wr(p,g))},onRequest:p=>{i.add(p)},onClose:p=>{if(d.closeError!==void 0){kr(p,d.closeError);return}a.add(p)},isClosed:()=>d.closeError!==void 0,close:()=>{clearInterval(l),t.close()}}}function Ie(e){Mn()&&jn({provider:"codex-app-server",captureKind:e.captureKind,rawText:e.rawText,rawValue:{message:e.message},captureMetadata:{direction:e.direction,capturedAtMs:Date.now(),capturePid:process.pid,...bs(e.message),...e.extraMetadata??{}}})}function xs(e){Mn()&&jn({provider:"codex-app-server",captureKind:"incoming",rawText:e,captureMetadata:{direction:"codex_to_commander",capturedAtMs:Date.now(),capturePid:process.pid,malformed:!0}})}function bs(e){return!("params"in e)||!U(e.params)?{}:er(e.params)}function vs(e){return"id"in e&&("result"in e||"error"in e)?"response":"id"in e&&typeof e.method=="string"?"request":"notification"}function Ss(e){let n=String(e);try{let t=JSON.parse(n);if(!U(t))throw new Error("codex app-server sent non-object JSON-RPC message");return t}catch(t){ge("codex.app_server_frame_malformed",{purpose:"codex.app_server",message:t instanceof Error?t.message:String(t),payload:yr(n,512),payloadChars:n.length});return}}function wr(e,n){try{e(n)}catch(t){ge("codex.notification_callback_failed",{purpose:"codex.app_server",method:n.method,message:t instanceof Error?t.message:String(t)})}}function kr(e,n){try{e(n)}catch(t){ge("codex.close_callback_failed",{purpose:"codex.app_server",message:t instanceof Error?t.message:String(t)})}}async function ws(e,n,t=2e3){let r=Date.now()+t,o;for(;Date.now()<=r;){let i=n(e);try{return await Ts(i),i}catch(s){o=s instanceof Error?s:new Error(String(s)),ks(i)}}throw o??new Error("websocket open failed")}function ks(e){try{e.close()}catch{}}async function Es(e,n,t){let r=o=>Cs(e,o,n.method);try{if(t.size===0){r({jsonrpc:"2.0",id:n.id,error:{code:-32601,message:`unhandled Codex app-server request: ${n.method}`}});return}for(let o of t){let i=await o(n);if(i!==void 0){r({jsonrpc:"2.0",id:n.id,result:i});return}}r({jsonrpc:"2.0",id:n.id,error:{code:-32601,message:`unhandled Codex app-server request: ${n.method}`}})}catch(o){r({jsonrpc:"2.0",id:n.id,error:{code:-32e3,message:o instanceof Error?o.message:String(o)}})}}function Cs(e,n,t){let r=JSON.stringify(n);Ie({direction:"commander_to_codex",captureKind:"response",message:n,rawText:r,extraMetadata:{requestMethod:t}}),e.send(r)}async function Ps(e,n){let t=await Or(e,n,{jsonrpc:"2.0",id:"initialize",method:"initialize",params:{clientInfo:{name:"kandan-local-codex-runner",version:"0.0.1"},capabilities:{experimentalApi:!0}}});if("error"in t)throw new Error(`codex initialize failed: ${t.error.message}`);let r={jsonrpc:"2.0",method:"initialized"};Ie({direction:"commander_to_codex",captureKind:"outgoing",message:r,rawText:JSON.stringify(r)}),e.send(JSON.stringify(r))}function Or(e,n,t){return e.readyState!==WebSocket.OPEN?Promise.reject(new Error("codex app-server websocket is not open")):new Promise((r,o)=>{n.set(t.id,{resolve:r,reject:o}),Ie({direction:"commander_to_codex",captureKind:"request",message:t,rawText:JSON.stringify(t)}),e.send(JSON.stringify(t))})}function Ts(e){return new Promise((n,t)=>{e.addEventListener("open",()=>n(),{once:!0}),e.addEventListener("error",()=>t(new Error("websocket open failed")),{once:!0})})}var uc=300*1e3;function Qe(e){let n=new URL(e);switch(n.protocol){case"ws:":n.protocol="http:";break;case"wss:":n.protocol="https:";break;case"http:":case"https:":break;default:throw new Error("--api-url must be ws://, wss://, http://, or https://")}return n.pathname="",n.search="",n.hash="",n.toString().replace(/\/$/,"")}function Jn(e){let n=e.fetchImpl??fetch,t=Qe(e.kandanUrl),r=e.authMode==="personal-agent-delegation"?"/api/v2/personal-agent-mcp":"/api/v2/local-runner-mcp",o=e.operatingMode??"text",i=async(s,a,d,c={})=>{let l=new URL(a,t),f={...d,operating_mode:o},y={method:s,headers:{authorization:`Bearer ${e.accessToken}`},...c.signal===void 0?{}:{signal:c.signal}};if(s==="GET")for(let[I,J]of Object.entries(f))J!=null&&l.searchParams.set(I,String(J));else y.headers={...y.headers,"content-type":"application/json"},y.body=JSON.stringify(f);let p=await n(l,y),g=await p.json(),u=U(g)?g:void 0;if(u===void 0)throw new Error(`Linzumi MCP API returned non-object JSON from ${a}`);if(p.ok&&u.ok===!0)return u;let v=typeof u.error=="string"?u.error:`HTTP ${p.status}`,P=typeof u.detail=="string"?u.detail:void 0;throw new Error(`Linzumi MCP API ${a} failed: ${v}${P===void 0?"":` detail=${P}`}`)};return{validateAuth:()=>i("GET",`${r}/validate`,{}),issueOnboardingDiscoveryToken:s=>i("POST",`${r}/onboarding-discovery-token`,s),getMessage:s=>i("GET",`${r}/message`,s),getThread:s=>i("GET",`${r}/thread`,s),getThreadTranscript:s=>i("GET",`${r}/thread-transcript`,s),getChannel:s=>i("GET",`${r}/channel`,s),searchWorkspace:s=>i("GET",`${r}/search`,s),askWorkspace:s=>i("POST",`${r}/ask`,s),aboutMe:s=>i("GET",`${r}/about-me`,s),webSearch:s=>i("GET",`${r}/web-search`,s),fetchUrl:s=>i("GET",`${r}/fetch-url`,s),listUiTargets:s=>i("GET",`${r}/ui-targets`,s),openUi:s=>i("POST",`${r}/open-ui`,s),getCodingJobMetadata:s=>i("GET",`${r}/coding-job-metadata`,s),listProjects:s=>i("GET",`${r}/projects`,s),getProjectTasks:s=>i("GET",`${r}/project-tasks`,s),createProjectTask:s=>i("POST",`${r}/project-tasks/create`,s),updateProjectTask:s=>i("POST",`${r}/project-tasks/update`,s),deleteProjectTask:s=>i("POST",`${r}/project-tasks/delete`,s),addProjectTaskDependency:s=>i("POST",`${r}/project-tasks/add-dependency`,s),removeProjectTaskDependency:s=>i("POST",`${r}/project-tasks/remove-dependency`,s),getCallTranscript:s=>i("GET",`${r}/call-transcript`,s),renameCodingJob:s=>i("POST",`${r}/coding-job-title`,s),upsertCodingJobPlan:(s,a)=>i("POST",`${r}/coding-job-plan`,s,a),replaceCodingJobPlanSteps:s=>i("POST",`${r}/coding-job-plan/steps`,s),updateCodingJobPlanStep:s=>i("POST",`${r}/coding-job-plan/step`,s),linkCodingJobPullRequest:s=>i("POST",`${r}/coding-job-primary-pr`,s),listVaultSecrets:s=>i("GET",`${r}/vault-secrets`,s),noteProjectDirectory:s=>i("POST",`${r}/discovered-project`,s),noteAgentConversation:s=>i("POST",`${r}/discovered-conversation`,s),noteOnboardingDiscoveryStatus:s=>i("POST",`${r}/discovery-status`,s),sendChannelMessage:s=>i("POST",`${r}/channel-message`,s),editMessage:s=>i("POST",`${r}/message/edit`,s),agentReply:s=>i("POST",`${r}/agent-reply`,s),scheduleWake:s=>i("POST",`${r}/scheduled-wakes`,s),cancelWake:s=>i("POST",`${r}/scheduled-wakes/cancel`,s),declineDocumentAction:s=>i("POST",`${r}/agent/decline-document-action`,s),agentTurnProgress:s=>i("POST",`${r}/agent-turn-progress`,s),agentDocumentTool:s=>i("POST",`${r}/agent/document-tool`,s),agentTopicTool:s=>i("POST",`${r}/agent/topic-tool`,s),agentListCodingJobs:s=>i("GET",`${r}/agent/coding-jobs`,s),agentStartCodingJob:s=>i("POST",`${r}/agent/start-coding-job`,s),agentSpawnChildJob:s=>i("POST",`${r}/agent/spawn-child-job`,s),agentArchiveChildJob:s=>i("POST",`${r}/agent/archive-child-job`,s),agentUnarchiveChildJob:s=>i("POST",`${r}/agent/unarchive-child-job`,s),agentInterruptCodingJob:s=>i("POST",`${r}/agent/interrupt-coding-job`,s),agentSendCodingJobMessage:s=>i("POST",`${r}/agent/send-coding-job-message`,s),agentDiscoverCodingJobs:s=>i("GET",`${r}/agent/discover-coding-jobs`,s),agentReadCodingJobThread:s=>i("GET",`${r}/agent/coding-job-thread`,s),agentResolveJobApproval:s=>i("POST",`${r}/agent/resolve-job-approval`,s),agentArchiveCodingJob:s=>i("POST",`${r}/agent/archive-coding-job`,s),agentUnarchiveCodingJob:s=>i("POST",`${r}/agent/unarchive-coding-job`,s),agentSetThreadStatus:s=>i("POST",`${r}/agent/set-thread-status`,s),agentCreateChannel:s=>i("POST",`${r}/agent/create-channel`,s),agentRenameChannel:s=>i("POST",`${r}/agent/rename-channel`,s),agentArchiveChannel:s=>i("POST",`${r}/agent/archive-channel`,s),agentUnarchiveChannel:s=>i("POST",`${r}/agent/unarchive-channel`,s),agentAddReaction:s=>i("POST",`${r}/agent/add-reaction`,s),agentRemoveReaction:s=>i("POST",`${r}/agent/remove-reaction`,s),agentPinMessage:s=>i("POST",`${r}/agent/pin-message`,s),agentUnpinMessage:s=>i("POST",`${r}/agent/unpin-message`,s),prepareMessageUploads:s=>i("POST",`${r}/message-uploads/prepare`,s),attachMessageFiles:s=>i("POST",`${r}/message-files/attach`,s),prepareCustomEmoji:s=>i("POST",`${r}/custom-emoji/prepare`,s),renameCustomEmoji:s=>i("POST",`${r}/custom-emoji/rename`,s),sendThreadReply:s=>i("POST",`${r}/thread-reply`,s),sendDm:s=>i("POST",`${r}/dm`,s),dmOwner:s=>i("POST",`${r}/dm-owner`,s),getVaultValues:s=>i("POST",`${r}/vault-values`,s)}}import{existsSync as Os,mkdirSync as yc,readFileSync as As,renameSync as hc,rmSync as _c,writeFileSync as xc}from"node:fs";import{homedir as Is}from"node:os";import{dirname as Sc,join as Rs}from"node:path";function Ms(){return Rs(Is(),".linzumi","auth.json")}function Ln(e,n=Ms()){if(!Os(n))return;let t=js(As(n,"utf8")),r=Qe(e),o=t.local_codex_runner?.[r];if(!(o===void 0||o.access_token.trim()==="")&&!(o.expires_at!==void 0&&Date.parse(o.expires_at)<=Date.now()))return{accessToken:o.access_token,kandanBaseUrl:r,issuedAt:o.issued_at,expiresAt:o.expires_at}}function js(e){let n=JSON.parse(e);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("Kandan auth cache must contain a JSON object");let t=n,r=t.local_codex_runner,o=t.personal_agent_delegation;if(r!==void 0&&(typeof r!="object"||r===null||Array.isArray(r)))throw new Error("Kandan auth cache local_codex_runner must be an object");if(o!==void 0&&(typeof o!="object"||o===null||Array.isArray(o)))throw new Error("Kandan auth cache personal_agent_delegation must be an object");return{version:1,local_codex_runner:Js(r),personal_agent_delegation:Ns(o)}}function Ns(e){if(typeof e!="object"||e===null||Array.isArray(e))return;let n=e.access_token,t=e.issued_at,r=e.expires_at;if(!(typeof n!="string"||typeof t!="string"))return{access_token:n,issued_at:t,expires_at:typeof r=="string"?r:void 0}}function Js(e){if(!(typeof e!="object"||e===null||Array.isArray(e)))return Object.fromEntries(Object.entries(e).flatMap(([n,t])=>{if(typeof t!="object"||t===null||Array.isArray(t))return[];let r=t.access_token,o=t.issued_at,i=t.expires_at;return typeof r!="string"||typeof o!="string"?[]:[[n,{access_token:r,issued_at:o,expires_at:typeof i=="string"?i:void 0}]]}))}var $n={mcpAuthFileContents:"LINZUMI_CLOUD_MCP_AUTH_JSON",llmProxyToken:"LINZUMI_CLOUD_LLM_PROXY_TOKEN"};function Ar(e){let n;try{n=JSON.parse(Buffer.from(e,"base64").toString("utf8"))}catch{throw new Error("invalid guest cloud turn config payload (not base64 JSON)")}if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("invalid guest cloud turn config payload");let t=n;for(let[r,o]of[["codexVersion",t.codexVersion],["sandbox",t.sandbox],["approvalPolicy",t.approvalPolicy],["kandanUrl",t.kandanUrl],["cwd",t.cwd]])if(typeof o!="string"||o==="")throw new Error(`invalid guest cloud turn config payload (${r} missing)`);if(!Array.isArray(t.input))throw new Error("invalid guest cloud turn config payload (input)");if(typeof t.appServerPort!="number"||!Number.isInteger(t.appServerPort))throw new Error("invalid guest cloud turn config payload (appServerPort)");return t}var te="/home/agent",Ls=`${te}/.linzumi-provisioned`;var Un="/dev/shm/linzumi",Lc=`${Un}/codex`,$c=`${Un}/mcp-auth.json`;var Uc=`${Un}/codex.env`;var Gc=`${te}/cloud-supervisor.mjs`,Ir=`${te}/mcp-server.mjs`,Dn=`${te}/.secrets`,Fn=`${Dn}/mcp-auth.json`,Ze=`${te}/.codex`,Rr=`${Ze}/linzumi-thread-map.json`;var zn=`${te}/.turn-heartbeats`,Mr=5e3,$s=/^[A-Za-z0-9-]{8,64}$/;function qn(e){if(!$s.test(e))throw new Error(`invalid cloud turn nonce: ${JSON.stringify(e.slice(0,80))}`)}var Vs=3e4,Bs=200,Ws=18e4,Nr="LINZUMI_GUEST_MODEL_CALL_LIVENESS_MS",Hs=15*6e4,Jr="LINZUMI_GUEST_ACTIVE_LOOP_BUDGET_MS",Ye=2147483647;function Ks(e){let n=e[Jr];if(n===void 0)return Hs;let t=Number(n);if(n.trim()===""||!Number.isSafeInteger(t)||t<=0||t>Ye)throw new Error(`${Jr} must be an integer number of milliseconds between 1 and ${Ye}, got ${JSON.stringify(n)}`);return t}var Vn=class extends Error{code="active_loop_budget_exceeded";budgetMs;constructor(n){super(`active_loop_budget_exceeded: guest turn exceeded the ${n}ms wall-clock budget; killed the guest turn`),this.name="GuestActiveLoopBudgetExceeded",this.budgetMs=n}};function Qs(e){let n=e[Nr];if(n===void 0)return Ws;let t=Number(n);if(n.trim()===""||!Number.isSafeInteger(t)||t<=0)throw new Error(`${Nr} must be a positive integer number of milliseconds, got ${JSON.stringify(n)}`);return t}var Bn=class extends Error{code="guest_turn_liveness_failure";windowMs;constructor(n){super(`guest_turn_liveness_failure: zero upstream model calls for ${n}ms; killed the guest turn`),this.name="GuestTurnLivenessFailure",this.windowMs=n}};function Zs(e,n,t){if(e.method!=="thread/tokenUsage/updated")return;let r=k(e.params)??{};if(h(r.threadId)!==n||h(r.turnId)!==t)return;let o=me(k(k(r.tokenUsage)?.total)?.totalTokens),i=me(k(k(r.tokenUsage)?.last)?.totalTokens);if(!(o===void 0||o<0))return{totalTokens:o,priorCallTotalTokens:i!==void 0&&i>=0&&i<=o?o-i:void 0}}function re(e){return e.replace(/\bsmk_[A-Za-z0-9._-]+/g,"smk_[REDACTED]").replace(/\b(sk|lz|tok|bearer)[-_][A-Za-z0-9._-]{8,}/gi,"$1_[REDACTED]")}var Gn=64*1024;function Xs(e,n){let t=n.now??Date.now,r=Buffer.alloc(0),o=null,i=null,s=a=>{let d=Buffer.isBuffer(a)?a:Buffer.from(a,"utf8");r=Buffer.concat([r,d]);let c=Gn*2;r.byteLength>c&&(r=r.subarray(r.byteLength-c))};return e.stdout?.on("data",s),e.stderr?.on("data",s),e.once("exit",(a,d)=>{o=a,i=d??null}),{evidence:a=>{let d=Buffer.from(re(r.toString("utf8")),"utf8"),c=d.byteLength<=Gn?d:d.subarray(d.byteLength-Gn);return{marker:"guest_turn_failure_evidence",empty_output:r.byteLength===0,output_tail:c.toString("utf8"),exit_code:o,signal:i,duration_ms:Math.max(0,t()-n.startedAtMs),model_call_count:a}}}}var en;function Ys(e){en=e;try{ye($r(e),{recursive:!0}),Re(e,"")}catch{en=void 0}}function D(e){let n=`${JSON.stringify(e)}
|
|
13
13
|
`;if(process.stdout.write(n),en!==void 0)try{Ds(en,n)}catch{}}function Xe(e,n,t,r){D({phase:"exit",ok:e,reason:re(n),turnMs:t,...r===void 0?{}:{evidence:r}})}function ea(e){return{id:e.id,name:e.name,baseUrl:e.baseUrl,envKey:e.envKey,wireApi:e.wireApi,...e.httpHeaders===void 0?{}:{httpHeaders:{...e.httpHeaders}},...e.envHttpHeaders===void 0?{}:{envHttpHeaders:{...e.envHttpHeaders}}}}function na(e){if(e.sandbox!=="danger-full-access")throw new Error(`guest cloud turn requires sandbox "danger-full-access", got ${JSON.stringify(e.sandbox)}`);if(e.approvalPolicy!=="never")throw new Error(`guest cloud turn requires approvalPolicy "never", got ${JSON.stringify(e.approvalPolicy)}`)}function ta(e,n=Ze){let t=br({command:"node",argsPrefix:[Ir],kandanUrl:e.kandanUrl,authFilePath:Fn,ownerUsername:e.ownerUsername,operatingMode:"text",cwd:e.cwd,threadId:e.threadId,agentSession:!0});return Er(`ws://127.0.0.1:${e.appServerPort}`,{model:e.model,reasoningEffort:e.reasoningEffort,mcpServers:[t],neverEquivalentGranularApprovalPolicy:pr(e.approvalPolicy,e.sandbox),...e.modelProvider===void 0?{}:{modelProvider:ea(e.modelProvider)},env:{CODEX_HOME:n,...Ur(e)}})}function Ur(e){let n=process.env[$n.llmProxyToken];return e.modelProvider===void 0||n===void 0||n===""?{}:{[e.modelProvider.envKey]:n}}function ra(e,n){let t=process.env[$n.mcpAuthFileContents];if(t===void 0||t==="")throw new Error("guest cloud turn missing MCP auth-cache (LINZUMI_CLOUD_MCP_AUTH_JSON)");ye(e,{recursive:!0,mode:448}),jr(e,448),Re(n,t,{mode:384}),jr(n,384)}function oa(e){try{Lr(e,{recursive:!0,force:!0})}catch{}}var ia=64;function Dr(e){try{let n=JSON.parse(Fs(e,"utf8"));if(typeof n!="object"||n===null||Array.isArray(n))return{};let t={};for(let[r,o]of Object.entries(n))typeof o=="string"&&o!==""&&(t[r]=o);return t}catch{return{}}}function sa(e,n,t){try{let r=Dr(e);delete r[n];let o=Object.entries(r),i=o.slice(Math.max(0,o.length-(ia-1)));i.push([n,t]),ye($r(e),{recursive:!0}),Re(e,JSON.stringify(Object.fromEntries(i)))}catch{}}var aa=new Set(["turn/completed","turn/failed","turn/aborted"]),da=2e3;function Fr(e){let n=k(k(e)?.item);if(n===void 0||h(n.type)!=="agentMessage")return"";let t=h(n.text);return t!==void 0&&t!==""?t:(Ke(n.content)??[]).map(i=>{let s=k(i);if(s===void 0)return;let a=h(s.type);if(!(a!=="text"&&a!=="output_text"&&a!=="input_text"))return h(s.text)??h(s.content)}).filter(i=>i!==void 0&&i!=="").join(`
|
|
14
14
|
|
|
15
15
|
`)}function ca(e){let n=k(k(e)?.item);if(n===void 0)return!1;let t=h(n.type);if(t!=="mcpToolCall"&&t!=="dynamicToolCall"&&t!=="collabAgentToolCall"||h(n.status)!=="completed"||n.error!==void 0&&n.error!==null||n.success===!1)return!1;let r=h(n.tool)??"",o=r.split("__").pop()??r;return o==="linzumi_agent_reply"||o==="linzumi_decline_document_action"}var ua=15e3;function la(e){return/already_replied|no_active_asker_binding/i.test(e)}async function fa(e){let n=e.body.trim();if(n==="")return"skipped";let t=Ln(e.kandanUrl,e.mcpAuthPath);if(t===void 0)throw new Error("reply relay: no agent token in the guest MCP auth file");let r=async(i,s)=>{let a=new AbortController,d=setTimeout(()=>a.abort(),ua);try{return await fetch(i,{...s,signal:a.signal})}finally{clearTimeout(d)}},o=Jn({kandanUrl:e.kandanUrl,accessToken:t.accessToken,operatingMode:"text",fetchImpl:r});try{return await o.agentReply({body:n}),"posted"}catch(i){let s=i instanceof Error?i.message:String(i);if(la(s))return"already";throw new Error(`reply relay failed: ${s}`)}}var pa=900,ma=1e4,ga=3,ya=8e3;function ha(e){return/\bHTTP 4\d\d\b/.test(e)||/\b(forbidden|not_agent_session|no_active_asker_binding|invalid_agent_turn_progress_request|body_required|already_replied)\b/i.test(e)}function _a(e){return async n=>{let t=Ln(e.kandanUrl,e.mcpAuthPath);if(t===void 0)throw new Error("turn progress: no agent token in the guest MCP auth file");let r=async(i,s)=>{let a=new AbortController,d=setTimeout(()=>a.abort(),ma);try{return await fetch(i,{...s,signal:a.signal})}finally{clearTimeout(d)}};return Jn({kandanUrl:e.kandanUrl,accessToken:t.accessToken,operatingMode:"text",fetchImpl:r}).agentTurnProgress(n)}}function xa(e){let n=Date.now,t=e.flushIntervalMs??pa,r=e.log??D,o=e.post??_a({kandanUrl:e.kandanUrl,mcpAuthPath:e.mcpAuthPath}),i=new Map,s=!1,a=0,d=0,c,l,f=!1,y=!1,p=(_,m)=>{let b=i.get(_);if(b!==void 0)return b;let E={kind:m,text:"",snapshotIndex:0,state:"streaming",dirty:!1,lastFlushMs:0,ackedState:void 0};return i.set(_,E),E},g=_=>_.state==="streaming"?_.lastFlushMs+t:0,u=async(_,m)=>{let b=m.text,E=m.state;m.dirty=!1,m.snapshotIndex+=1,m.lastFlushMs=n();try{return await o({stream_key:`${e.streamKeyPrefix}:${_}`,item_id:_,kind:m.kind,body:b,stream_state:E,snapshot_index:m.snapshotIndex,...e.sourceSeq===void 0?{}:{source_seq:e.sourceSeq}}),d+=1,a=0,m.ackedState=E,!0}catch(S){a+=1;let w=S instanceof Error?S.message:String(S);return ha(w)?(y=!0,s=!0,r({phase:"progress",outcome:"permanent_reject",message:re(w)}),!1):(r({phase:"progress",outcome:"post_failed",consecutive_failures:a,message:re(w)}),a>=ga&&(s=!0,r({phase:"progress",outcome:"disabled"})),!1)}},v=async()=>{for(;;){if(s)return;let _=n(),m,b=!1;for(let[E,S]of i){if(!S.dirty||S.text===""||S.state!=="streaming"&&!f)continue;let w=g(S);w<=_?(await u(E,S),b=!0):m=m===void 0?w:Math.min(m,w)}if(!b){m!==void 0&&(clearTimeout(l),l=setTimeout(P,Math.max(10,m-n())),l.unref?.());return}}};function P(){s||f||c!==void 0||(c=v().catch(()=>{}).finally(()=>{c=void 0}))}return{onNotification:_=>{try{let m=k(_.params)??{};if(_.method==="item/agentMessage/delta"){let b=mr(m);if(b!==void 0){let E=p(b.itemKey,"codex_assistant_message");E.text+=b.delta,E.dirty=!0,P()}return}if(_.method==="item/reasoning/textDelta"){let b=gr(m);if(b!==void 0){let E=p(b.itemKey,"codex_reasoning");E.text+=b.delta,E.dirty=!0,P()}return}if(_.method==="item/completed"){let b=k(m.item),E=h(b?.type),S=h(b?.id);if(S===void 0)return;if(E==="agentMessage"){let w=Fr(_.params),T=p(S,"codex_assistant_message");w!==""&&(T.text=w),T.state="completed",T.dirty=!0,P()}else if(E==="reasoning"){let w=i.get(S);w!==void 0&&(w.state="completed",w.dirty=!0,P())}}}catch(m){r({phase:"progress",outcome:"notification_error",message:re(m instanceof Error?m.message:String(m))})}},finish:async _=>{try{let m=n()+(e.finishDeadlineMs??ya),b=()=>new Promise(S=>setTimeout(S,Math.max(0,m-n())).unref?.());f=!0,clearTimeout(l),c!==void 0&&await Promise.race([c,b()]);for(let S of i.values())S.state==="streaming"&&S.text!==""&&(S.state=_);let E=250;for(;;){let S=[...i.entries()].filter(([,T])=>T.text!==""&&T.state!==T.ackedState);if(S.length===0||y||n()>=m)break;let w=!1;for(let[T,Me]of S){if(y||n()>=m)break;await u(T,Me)||(w=!0)}w&&!y&&n()<m&&await new Promise(T=>setTimeout(T,E))}r({phase:"progress",outcome:"finished",frames_posted:d,disabled:s})}catch(m){r({phase:"progress",outcome:"finish_error",message:re(m instanceof Error?m.message:String(m))})}}}}function ba(e){if(e==="item/commandExecution/requestApproval"||e==="item/fileChange/requestApproval")return{decision:"approved"}}async function va(e,n,t){for(;;){if(t.exitCode!==null&&t.exitCode!==void 0)throw new Error(`codex app-server exited before it accepted a connection (code ${t.exitCode})`);try{return await Tr(e)}catch(r){if(Date.now()>=n)throw r;await new Promise(o=>setTimeout(o,Bs))}}}var Sa=360*60*1e3;function wa(e,n){try{for(let t of zs(e))try{let r=nn(e,t);n-qs(r).mtimeMs>Sa&&Gs(r)}catch{}}catch{}}function ka(e,n,t=Mr){qn(n);let r=nn(e,`${n}.beat`),o=()=>{try{Re(r,`${Date.now()}
|