@kodax-ai/kodax 0.7.97-beta.2 → 0.7.97-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +96 -0
- package/README.md +55 -2
- package/README_CN.md +37 -1
- package/dist/artifacts/dist/contract.js +1 -1
- package/dist/artifacts/dist/contract.js.map +1 -1
- package/dist/artifacts/dist/document-render.d.ts +1 -1
- package/dist/artifacts/dist/document-render.js +41 -10
- package/dist/artifacts/dist/document-render.js.map +1 -1
- package/dist/artifacts/dist/kodax.js +1 -1
- package/dist/artifacts/dist/kodax.js.map +1 -1
- package/dist/artifacts/dist/libreoffice.d.ts +6 -1
- package/dist/artifacts/dist/libreoffice.js +37 -13
- package/dist/artifacts/dist/libreoffice.js.map +1 -1
- package/dist/artifacts/dist/runtime.js +13 -6
- package/dist/artifacts/dist/runtime.js.map +1 -1
- package/dist/artifacts/skills/artifact-review/SKILL.md +5 -1
- package/dist/chunks/agent-NWQPMZ7B.js +2 -0
- package/dist/chunks/agent-adapter-V3IPADCX.js +2 -0
- package/dist/chunks/argument-completer-VNKHT4X4.js +2 -0
- package/dist/chunks/{bedrock-native-Z5VNWF5U.js → bedrock-native-OEPOBW6W.js} +1 -1
- package/dist/chunks/{chunk-NSR4RW2F.js → chunk-3I2MIS4D.js} +1 -1
- package/dist/chunks/{chunk-RYBUYHDL.js → chunk-3Y5PBEOD.js} +1 -1
- package/dist/chunks/chunk-4FVCMKG2.js +20 -0
- package/dist/chunks/{chunk-F6GJXQNA.js → chunk-4GYXZTOD.js} +7 -7
- package/dist/chunks/{chunk-EISRVOBJ.js → chunk-4Z7ZHL6V.js} +2 -2
- package/dist/chunks/{chunk-W2CWO4PQ.js → chunk-576AAIQM.js} +1 -1
- package/dist/chunks/chunk-5E2P4RYS.js +4 -0
- package/dist/chunks/{chunk-X5M7TLJV.js → chunk-5LFQ5FVY.js} +1 -1
- package/dist/chunks/{chunk-WMMESRP3.js → chunk-6RDMSU4B.js} +1 -1
- package/dist/chunks/{chunk-3CP7AUWY.js → chunk-7BA4TSKC.js} +1 -1
- package/dist/chunks/{chunk-I325ER7D.js → chunk-AUU3N4V4.js} +1 -1
- package/dist/chunks/{chunk-DCE7XQUG.js → chunk-AYDLX2UK.js} +1 -1
- package/dist/chunks/{chunk-D36OIMV7.js → chunk-BP3NAYKY.js} +64 -64
- package/dist/chunks/{chunk-6TITQQAI.js → chunk-BSCSKJNC.js} +230 -229
- package/dist/chunks/{chunk-2HH5AS7E.js → chunk-DAQGOWKD.js} +88 -462
- package/dist/chunks/{chunk-UF3GZ5PO.js → chunk-EZF6ZRCO.js} +1 -1
- package/dist/chunks/chunk-F2TFWNVZ.js +2 -0
- package/dist/chunks/{chunk-53CJDQS2.js → chunk-FVXZ5L33.js} +1 -1
- package/dist/chunks/{chunk-MCDZNQWD.js → chunk-G32BMSHH.js} +75 -71
- package/dist/chunks/chunk-HJLYZ5AX.js +361 -0
- package/dist/chunks/{chunk-P55RJIOG.js → chunk-IOIFCU46.js} +1 -1
- package/dist/chunks/{chunk-DV5YPYLW.js → chunk-IR46ZHXU.js} +1 -1
- package/dist/chunks/chunk-NJDR5EEF.js +6 -0
- package/dist/chunks/{chunk-KDSO7V4O.js → chunk-OC3DQXN6.js} +1 -1
- package/dist/chunks/{chunk-J2L2NK6E.js → chunk-OMVAPRQI.js} +90 -57
- package/dist/chunks/chunk-OXCB2TRF.js +42 -0
- package/dist/chunks/{chunk-C6JGLEYD.js → chunk-P6R6V7EW.js} +1 -1
- package/dist/chunks/{chunk-SK3RRGHJ.js → chunk-PFBZ4ZXO.js} +28 -28
- package/dist/chunks/{chunk-V2XJSFFE.js → chunk-QDE6THC5.js} +1 -1
- package/dist/chunks/{chunk-EPK6EWRI.js → chunk-QRYEP34M.js} +1 -1
- package/dist/chunks/chunk-ROWYE472.js +460 -0
- package/dist/chunks/{chunk-R42S4BLA.js → chunk-SQGESMNC.js} +1 -1
- package/dist/chunks/{chunk-XZSFUGPN.js → chunk-U73VEVMP.js} +1 -1
- package/dist/chunks/{chunk-D425EZGC.js → chunk-V2TG7GNW.js} +1 -1
- package/dist/chunks/{chunk-QSZCR5GC.js → chunk-VRO2CDBY.js} +97 -97
- package/dist/chunks/{chunk-BBZWF2EA.js → chunk-WMQQQY3D.js} +1 -1
- package/dist/chunks/{chunk-JAF2YLZO.js → chunk-X3YYJJTF.js} +2 -2
- package/dist/chunks/{chunk-UL6YIT4M.js → chunk-XYRI6ER5.js} +1 -1
- package/dist/chunks/chunk-YRPB3LID.js +3 -0
- package/dist/chunks/{chunk-5MUVRFMU.js → chunk-ZDAU3LZ2.js} +1 -1
- package/dist/chunks/{chunk-WWPVEK6B.js → chunk-ZP3YSYWM.js} +10 -10
- package/dist/chunks/{client-LTIFNED5.js → client-NJ32JBC3.js} +1 -1
- package/dist/chunks/compaction-config-JBQGU3NO.js +2 -0
- package/dist/chunks/{construction-bootstrap-OAZKGI5Y.js → construction-bootstrap-CM47ZXG7.js} +1 -1
- package/dist/chunks/dist-O6BHIQEP.js +2 -0
- package/dist/chunks/{google-native-WLL27OV7.js → google-native-BV5GKT5B.js} +1 -1
- package/dist/chunks/host-PI5NL4W4.js +2 -0
- package/dist/chunks/{mistral-native-JXPIDDYZ.js → mistral-native-X42JCFZH.js} +1 -1
- package/dist/chunks/{model-DZF6URW3.js → model-MT3WJX76.js} +1 -1
- package/dist/chunks/{permission-YVVMLQ5I.js → permission-YVDVSE6H.js} +1 -1
- package/dist/chunks/{pi-messages-5LLOZH57.js → pi-messages-DVJANXV5.js} +1 -1
- package/dist/chunks/readline-helpers-5JS7UGTE.js +2 -0
- package/dist/chunks/run-manager-Y6VYEWSJ.js +2 -0
- package/dist/chunks/running-session-ANMBA5XV.js +2 -0
- package/dist/chunks/skills-XL2XIBWV.js +2 -0
- package/dist/chunks/{tool-dispatch-MLM3QTSU.js → tool-dispatch-2FOG65FC.js} +1 -1
- package/dist/chunks/{utils-2QNMYRGA.js → utils-XZ22R6VB.js} +1 -1
- package/dist/client-history.js +2 -0
- package/dist/history-turn.js +3 -0
- package/dist/index.d.ts +19 -19
- package/dist/index.js +2 -2
- package/dist/kodax_bootstrap.js +1 -1
- package/dist/kodax_cli.js +1472 -1810
- package/dist/kodax_doctor.js +1 -1
- package/dist/maintenance-scheduler.js +2 -0
- package/dist/manual-topics.json +32 -3
- package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
- package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
- package/dist/native/win32-x64/manifest.json +2 -2
- package/dist/one-shot-task.js +1 -1
- package/dist/provider-auth-cli.js +1 -1
- package/dist/runtime-daemon-schema.json +1 -1
- package/dist/sandbox-network-broker.js +93 -441
- package/dist/sdk-a2a.d.ts +13 -13
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.d.ts +17 -12
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-client.d.ts +6 -6
- package/dist/sdk-client.js +1 -1
- package/dist/sdk-coding.d.ts +17 -17
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +2 -2
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +4 -2
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +13 -13
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +16 -16
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +46 -46
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +7 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +87 -435
- package/dist/storage-repair-cli.js +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-CJliu5-D.d.ts → bash-prefix-extractor.d-BghXa_md.d.ts} +9 -3
- package/dist/types-chunks/{capsule.d-EMwSALqK.d.ts → capsule.d-BTlvC5qq.d.ts} +4 -4
- package/dist/types-chunks/{client-contract-B7q69yMA.d.ts → client-contract-B7ZSFKTv.d.ts} +52 -4
- package/dist/types-chunks/{controller.d-C0SAuNKu.d.ts → controller.d-Btu5FDdw.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-D-hPLKaA.d.ts → controller.d-D6rEz5LS.d.ts} +3 -3
- package/dist/types-chunks/{history-retrieval.d-BwEUR9cb.d.ts → history-retrieval.d-B_AriUJp.d.ts} +1 -1
- package/dist/types-chunks/{manifest.d-YE3-AIeO.d.ts → manifest.d-Yyce-hHj.d.ts} +1 -1
- package/dist/types-chunks/{public-api.d-BhDU643p.d.ts → public-api.d-BLv3lFmw.d.ts} +9 -4
- package/dist/types-chunks/{review-inbox.d-Bgt46S7L.d.ts → review-inbox.d-yREk25Vf.d.ts} +2 -0
- package/dist/types-chunks/{review-packet.d-ChOfJaNI.d.ts → review-packet.d-xwXxHmML.d.ts} +1 -1
- package/dist/types-chunks/{run-manager.d-ChzguipG.d.ts → run-manager.d-D4sa9JYz.d.ts} +26 -12
- package/dist/types-chunks/{runtime-client-info-P_mRDG7j.d.ts → runtime-client-info-oRMrkHmb.d.ts} +2 -2
- package/dist/types-chunks/{runtime-event-BW5Pla7a.d.ts → runtime-event-BOyaILWg.d.ts} +3 -1
- package/dist/types-chunks/{sdk-runtime-cDe7qmN3.d.ts → sdk-runtime-CYyXmQok.d.ts} +27 -13
- package/dist/types-chunks/{sdk-session-D3pcSbnA.d.ts → sdk-session-D6mS5qgO.d.ts} +6 -3
- package/dist/types-chunks/{skill-invocation-error.d-gsNNDnnt.d.ts → skill-invocation-error.d-Be3qg4JQ.d.ts} +3 -3
- package/dist/types-chunks/{trusted-repl-entry-Bbkd2HlO.d.ts → trusted-repl-entry-YWNc4m-Z.d.ts} +7 -7
- package/dist/types-chunks/{types.d-BlXTogOo.d.ts → types.d-BQ-hbni4.d.ts} +1 -1
- package/dist/types-chunks/{utils.d-CxHyBvO6.d.ts → utils.d-C0F3Uf2X.d.ts} +6 -6
- package/dist/windows-effect-job-programs.json +4 -0
- package/docs/ARTIFACT_SDK.md +3 -3
- package/docs/CLIENT_CONTRACT.md +4 -2
- package/docs/SDK_MIGRATION.md +9 -5
- package/docs/SPACE_SDK_SEAMS.md +12 -1
- package/package.json +4 -3
- package/public_docs/README.md +10 -3
- package/public_docs/sdk/embedder-guide.md +1 -1
- package/dist/chunks/agent-DS7M57WD.js +0 -2
- package/dist/chunks/agent-adapter-TLWGGK3V.js +0 -2
- package/dist/chunks/argument-completer-OGCXKTRQ.js +0 -2
- package/dist/chunks/chunk-GJXOTOZB.js +0 -465
- package/dist/chunks/chunk-KE2NBMAP.js +0 -20
- package/dist/chunks/chunk-OGTRDK4Q.js +0 -359
- package/dist/chunks/chunk-R2HTPDI7.js +0 -2
- package/dist/chunks/chunk-SDPZFH6M.js +0 -4
- package/dist/chunks/chunk-XDMNJW6J.js +0 -42
- package/dist/chunks/compaction-config-ECMOFP5H.js +0 -2
- package/dist/chunks/dist-5J53DGAO.js +0 -2
- package/dist/chunks/host-65E5NM5P.js +0 -2
- package/dist/chunks/readline-helpers-UZXWBRXQ.js +0 -2
- package/dist/chunks/run-manager-ZFACIZM2.js +0 -2
- package/dist/chunks/running-session-Q5Y6A2QV.js +0 -2
- package/dist/chunks/skills-TJP6BLZJ.js +0 -2
|
@@ -1,465 +0,0 @@
|
|
|
1
|
-
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{a as dn}from"./chunk-W33QJA3M.js";import{a as Z,b as Te,c as st,d as _e,e as at,f as tn,g as Me,h as rn,i as Oe,j as dt,l as ut,m as on,o as B,p as de}from"./chunk-SDPZFH6M.js";import{n as sn}from"./chunk-6TITQQAI.js";import{D as z,v as an}from"./chunk-EISRVOBJ.js";import{ba as rt,ca as it,ma as ot}from"./chunk-QSZCR5GC.js";import{Za as Qn,_a as Yn,ad as tt,bb as Zn,ob as nn}from"./chunk-2HH5AS7E.js";import{D as nt,h as E,l as en,w as et}from"./chunk-J2L2NK6E.js";import{a as o}from"./chunk-V4WSBIXB.js";function ct(e){return{name:e.name,sideEffect:e.sideEffect==="none"?"readonly":"mutates-state",planModeAllowed:e.sideEffect==="none"}}o(ct,"hostToolMetadata");function lt(e,n){if(e.requiredWorkMode!==void 0&&e.requiredWorkMode!=="agent")throw new Error("Unsupported required work mode.");let r=e.toolVisibilityPolicy!==void 0||(e.excludeTools?.length??0)>0;if(r&&n===void 0)throw new Error("A tool policy requires the Host catalog. Use authorizeExecution services.createExecutionProfile.");let t=n?.map(s=>({name:s.name,sideEffect:s.sideEffect,planModeAllowed:s.planModeAllowed===!0})).filter(s=>!e.excludeTools?.includes(s.name)&&(e.toolVisibilityPolicy?.(s)??!0));return structuredClone({...e.requiredWorkMode===void 0?{}:{requiredWorkMode:e.requiredWorkMode},...e.defaultSkill===void 0?{}:{defaultSkill:e.defaultSkill},...e.agentProfile===void 0?{}:{agentProfile:e.agentProfile},...e.taskVerification===void 0?{}:{taskVerification:e.taskVerification},...r?{tools:t.map(s=>s.name),toolMetadata:t}:{}})}o(lt,"createExecutionProfile");import{randomUUID as we}from"node:crypto";import{randomUUID as Cr}from"node:crypto";function mt(e,n,r){let t=new Map,s=new Map,a=o(()=>{if(n.productExecutionBinding?.version!==1)throw Object.assign(new Error("Execution bindings require an upgraded Host."),{code:"daemon_upgrade_required"})},"requireCapability");return{service:{async register(c){if(a(),typeof c!="function")throw new TypeError("Execution binding resolver must be a function.");let l=`binding_${Cr().replace(/-/g,"")}`;t.set(l,c);try{await e("execution.register",{leaseId:l})}catch(m){throw t.set(l,void 0),m}return{id:l}},async revoke(c){if(a(),!t.has(c))return!1;t.set(c,void 0);let l=await e("execution.revoke",{leaseId:c});return t.delete(c),l.revoked}},async handle(c){if(c===null||typeof c!="object")throw new Error("Invalid execution binding notification.");let l=c;if(typeof l.requestId!="string"||typeof l.leaseId!="string"||!l.request||typeof l.request.sessionId!="string"||!["admission","recovery"].includes(l.request.phase))throw new Error("Invalid execution binding request identity.");let m=t.get(l.leaseId),p=new AbortController;s.set(l.requestId,p);let g;try{if(!m)throw new Error("Execution binding was revoked.");let h=await m(structuredClone(l.request),r(l.request.sessionId),p.signal);g={requestId:l.requestId,resolution:structuredClone(h)}}catch{g={requestId:l.requestId,error:"execution_binding_rejected"}}finally{s.delete(l.requestId)}p.signal.aborted||await e("execution.complete",g)},close(){for(let c of s.values())c.abort();s.clear(),t.clear()}}}o(mt,"createExecutionBindingClient");function ft(e,n){return{get identity(){return e.identity},credentials:e.credentials,hostTools:e.hostTools,executionBindings:e.executionBindings,async createExecutionProfile(r,t=[]){if(r.requiredWorkMode!==void 0&&e.capabilities?.productExecutionModeConstraint?.version!==1)throw Object.assign(new Error("Execution mode constraints require an upgraded Host."),{code:"daemon_upgrade_required"});if(e.capabilities?.productExecutionProfile?.version!==2)throw Object.assign(new Error("Execution profiles require an upgraded Host."),{code:"daemon_upgrade_required"});if(r.defaultSkill!==void 0&&e.capabilities?.productExecutionBinding?.version!==1)throw Object.assign(new Error("Default Skills require an upgraded Host."),{code:"daemon_upgrade_required"});if(n===void 0)throw new Error("An execution profile requires a Session identity.");if(!e.catalog.executionTools)throw new Error("Host tool catalog is unavailable.");let s=await e.catalog.executionTools(n),a=new Set(s.map(d=>d.name));for(let d of t){if(a.has(d.name))throw new Error(`Host tool collides with a registered tool: ${d.name}`);a.add(d.name)}return lt(r,[...s,...t.map(ct)])}}}o(ft,"createExecutionServices");import{isDeepStrictEqual as Nr}from"node:util";function pt(e){if(e.kind==="permission")return null;let n={id:e.requestId,revision:0,sessionId:e.sessionId,runId:e.runId,createdAt:e.createdAt,...e.expiresAt!==void 0?{expiresAt:e.expiresAt}:{}};return e.kind==="question"?{...n,kind:"askUser",options:e.options}:e.kind==="question_multi"?{...n,kind:"askUserMulti",options:e.options}:{...n,kind:"askUserInput",options:e.options}}o(pt,"toRuntimeUserInputRequest");function gt(e){return e.kind!=="permission"?null:{id:e.requestId,sessionId:e.sessionId,runId:e.runId,...e.options.toolCallId!==void 0?{toolCallId:e.options.toolCallId}:{},toolName:e.options.toolName,...e.options.reason!==void 0?{reason:e.options.reason}:{},...e.options.risk!==void 0?{risk:e.options.risk}:{},...e.options.inputPreview!==void 0?{inputPreview:e.options.inputPreview}:{},...e.options.plan!==void 0?{plan:e.options.plan}:{},...e.options.executionCwd!==void 0?{executionCwd:e.options.executionCwd}:{},...e.options.grantSuggestions!==void 0?{grantSuggestions:e.options.grantSuggestions}:{},createdAt:e.createdAt,...e.expiresAt!==void 0?{expiresAt:e.expiresAt}:{}}}o(gt,"toRuntimePermissionRequest");function Re(e){return typeof e=="string"?e:e.flatMap(n=>n.type==="text"?[n.text]:[]).join(`
|
|
3
|
-
`)}o(Re,"toolResultText");function ht(e){return typeof e=="string"?[]:e.flatMap(n=>n.type==="image"?[{kind:"image",path:n.path,...n.mediaType?{mediaType:n.mediaType}:{}}]:[])}o(ht,"toolResultAttachments");function he(e){let n=e?.metadata;return(n?.truncated===!0||n?.capacityFallback===!0)&&typeof n.outputPath=="string"&&n.outputPath.length>0&&!n.outputPath.startsWith("kodax-transient:")?n.outputPath:void 0}o(he,"toolResultOutputPath");function yt(e){if(!e||e.metadata?.cancelled===!0)return"cancelled";let n=Re(e.content).trimStart();return e.metadata?.cancelled===void 0&&e.is_error!==!1&&/^\[(?:Cancelled|Blocked)\]/u.test(n)?"cancelled":e.is_error!==void 0?e.is_error?"error":"success":/^(?:Error:|\[Error\])/u.test(n)?"error":"success"}o(yt,"resultStatus");function De(e,n){return JSON.stringify([n??null,e])}o(De,"canonicalToolKey");function un(e){let n=new Map,r=new Map;for(let t of e){let s=t.timestamp===void 0?NaN:Date.parse(t.timestamp),a=Number.isFinite(s)&&s>=0?s:void 0;t.role==="assistant"&&r.clear();for(let d of typeof t.content=="string"?[]:t.content)if(d.type==="tool_use"){let c=De(d.id,t.outputId);n.set(c,{id:t.outputId?`output:${t.outputId}:tool:${d.id}`:`tool:${d.id}`,type:"tool",text:"[Cancelled] Tool execution did not complete before the session ended.",...a!==void 0?{timestamp:a}:{},tool:{assistantOutputId:t.outputId,callId:d.id,name:d.name,status:yt(void 0),inputText:JSON.stringify(d.input),startedAt:a}}),r.set(d.id,c)}else if(d.type==="tool_result"){let c=r.get(d.tool_use_id),l=c===void 0?void 0:n.get(c);if(!l?.tool||c===void 0)continue;let m=ht(d.content);n.set(c,{...l,text:Re(d.content),...m.length>0?{attachments:m}:{},tool:{...l.tool,status:yt(d),endedAt:a,...he(d)?{outputPath:he(d)}:{}}}),r.delete(d.tool_use_id)}}return n}o(un,"canonicalTools");import{createReadStream as Er}from"node:fs";async function cn(e,n,r=0){if(!Number.isSafeInteger(r)||r<0)throw new Error("Item offset must be a non-negative integer.");let t=r+65536,s="",a=0;try{for await(let c of Er(e,{encoding:"utf8"})){let l=String(c);a<t&&a+l.length>r&&(s+=l.slice(Math.max(0,r-a),t-a)),a+=l.length}}catch(c){let l=c instanceof Error&&"code"in c&&c.code==="ENOENT"?"not_found":"internal_error";throw Object.assign(new Error("Saved tool output is unavailable.",{cause:c}),{code:l})}let d=r+s.length;return{id:n,text:s,offset:r,totalLength:a,...d<a?{nextOffset:d}:{}}}o(cn,"readSavedToolOutput");var Ar=65536,Rt=512;async function ln(e,n,r){let t=[],s=[];for(let[a,d]of n.entries.entries()){d.oversized&&s.push({itemId:_r(e,n.revision,d.index),byteLength:d.byteLength});let c=d.entry??(d.oversized?await je(r,e,n.revision,d.index):void 0);if(!c)continue;let m=c.message.role==="assistant"&&Array.isArray(c.message.content)&&c.message.content.some(g=>g.type==="tool_use")?n.entries[a+1]?.entry?.message??await fn(r,e,n.revision,d.index):void 0,p=m?.role==="user"&&Array.isArray(m.content)?m.content.filter(g=>g.type==="tool_result"):[];t.push(...St(e,n.revision,d.index,p.length>0?[c.message,{role:"user",content:p,...m?.timestamp!==void 0?{timestamp:m.timestamp}:{}}]:[c.message]).map(g=>Or({...g,...g.type==="user"&&Array.isArray(c.message.content)&&c.message.content.some(h=>h.type==="image")?{attachments:c.message.content.flatMap(h=>h.type==="image"?[{kind:"image",path:h.path,...h.mediaType?{mediaType:h.mediaType}:{}}]:[])}:{},...d.boundaryId!==void 0?{historyBoundary:{entryId:d.boundaryId,sourceRevision:n.sourceRevision}}:{}})))}return{items:t,revision:n.revision,sourceRevision:n.sourceRevision,status:n.status,issues:n.issues,...n.hasMore&&n.nextCursor!==void 0?{nextCursor:n.nextCursor}:{},oversized:s}}o(ln,"projectConversationHistoryPage");async function mn(e,n,r,t={},s="history"){if(t.part==="attachment")throw new Error("Read image attachments through sessions.readItem.");let a=Mr(e,n,s);if(a===void 0)return null;let d=await je(r,e,a.revision,a.entryIndex);if(d===null)return null;let c=a.ordinal===void 0?void 0:St(e,a.revision,a.entryIndex,[d.message])[a.ordinal];if(a.ordinal!==void 0&&c===void 0)return null;let l=s==="history"&&a.ordinal===void 0&&t.part!=="input"?tt(d.message):[],m=c?.text??(l.length>0?l.map(v=>v.summary).join(`
|
|
4
|
-
|
|
5
|
-
`):jr(d.message,t.part==="input"?"input":"text"));if(c?.tool!==void 0){let I=(Array.isArray(d.message.content)?d.message.content:[]).find(T=>T.type==="tool_use"&&T.id===c.tool?.callId);if(t.part==="input"){if(I?.type!=="tool_use")return null;m=JSON.stringify(I.input)}else{let T=await fn(r,e,a.revision,a.entryIndex),A=(Array.isArray(T?.content)?T.content:[]).find(S=>S.type==="tool_result"&&S.tool_use_id===c.tool?.callId);if(A?.type!=="tool_result")return null;let R=he(A);if(t.part==="original"&&R)return cn(R,n,t.offset);m=Re(A.content)}}let p=t.offset??0;if(!Number.isSafeInteger(p)||p<0)throw new Error("Item offset must be a non-negative integer.");if(p>=m.length&&m.length>0)return null;let g=m.slice(p,p+Ar),h=p+g.length;return{id:n,text:g,offset:p,totalLength:m.length,...h<m.length?{nextOffset:h}:{}}}o(mn,"readConversationHistoryEntry");async function fn(e,n,r,t){try{return(await je(e,n,r,t+1))?.message}catch(s){if(s instanceof Error&&s.message.startsWith("Transcript entry index is out of range:"))return;throw s}}o(fn,"readFollowingMessage");async function pn(e,n){try{return await e()}catch(r){if(n.cursor!==void 0||!Tr(r))throw r;return await new Promise(t=>{setTimeout(t,50).unref?.()}),e()}}o(pn,"readHistoryPageWithBoundaryRetry");function Tr(e){if(typeof e!="object"||e===null||!("code"in e))return!1;let n=e.code;return n==="data_changed"||n==="resync_required"}o(Tr,"isTransientHistoryBoundaryError");function _r(e,n,r){return`${e}:history:${n}:${r}`}o(_r,"historyEntryItemId");function Mr(e,n,r){let t=`${e}:${r}:`;if(!n.startsWith(t))return;let[s="",a,d]=n.slice(t.length).split("#");if(d!==void 0||r==="transcript"&&a!==void 0||a!==void 0&&!/^\d+$/u.test(a))return;let c=s.lastIndexOf(":");if(c<=0)return;let l=s.slice(0,c);if(!/^sha256:[0-9a-f]{8,}$/u.test(l))return;let m=/^(\d+)$/u.exec(s.slice(c+1));if(m===null||m[1]===void 0)return;let p=Number(m[1]);if(!(!Number.isSafeInteger(p)||a!==void 0&&!Number.isSafeInteger(Number(a))))return{revision:l,entryIndex:p,...a!==void 0?{ordinal:Number(a)}:{}}}o(Mr,"parseHistoryEntryItemId");function St(e,n,r,t){let s=sn({messages:t,historyScope:"all",structuredTaskResults:!0}),a=un(t),d=[],c=0;for(let l of s){if(l.type==="tool_group"){for(let m of l.tools){let p=a.get(De(m.id,m.assistantOutputId));p&&(d.push({...p,id:wt(e,n,r,c)}),c+=1)}continue}d.push({id:wt(e,n,r,c),type:l.type,text:l.text,...l.taskResult?{taskResult:l.taskResult}:{},...l.inputId!==void 0?{inputId:l.inputId}:{},...l.outputId!==void 0?{outputId:l.outputId,outputState:"committed",textRevision:0}:{},..."icon"in l?{icon:l.icon}:{},...l.timestamp!==void 0?{timestamp:l.timestamp}:{}}),c+=1}return d}o(St,"projectHistoryEntry");function Or(e){let r=e.tool?.inputText;return{...e,...e.text.length>8192?{text:e.text.slice(0,8192),textOffset:0,totalTextLength:e.text.length}:{},...e.tool&&r&&r.length>8192?{tool:{...e.tool,inputText:r.slice(0,8192),totalInputLength:r.length}}:{}}}o(Or,"boundHistoryItem");function wt(e,n,r,t){return`${e}:history:${n}:${r}#${t}`}o(wt,"historyItemId");async function je(e,n,r,t){let s,a=[];for(let d=0;d<Rt;d+=1){let c=await e({sessionId:n,revision:r,entryIndex:t,...s!==void 0?{cursor:s}:{}});if(c===null)return null;if(a.push(Buffer.from(c.data,"base64")),!c.hasMore){let l=Dr(Buffer.concat(a));if(l===void 0)throw E({source:"client.history",level:"error",message:`History entry chunk stream for ${n} entry ${t} did not decode.`}),Object.assign(new Error(`History entry ${n}#${t} is unreadable.`),{code:"internal_error"});return{message:l.message}}if(s=c.nextCursor,s===void 0)return null}throw E({source:"client.history",level:"error",message:`History entry chunk stream for ${n} entry ${t} exceeded ${Rt} chunks.`}),Object.assign(new Error(`History entry ${n}#${t} exceeded the chunk read limit.`),{code:"internal_error"})}o(je,"assembleConversationHistoryEntry");function Dr(e){try{let n=JSON.parse(e.toString("utf8"));if(typeof n!="object"||n===null)return;let r=n.message;return typeof r!="object"||r===null||typeof r.role!="string"?void 0:n}catch{return}}o(Dr,"decodeEntryJson");function jr(e,n){let r=Array.isArray(e.content)?e.content:[];if(n==="input")return r.filter(s=>s.type==="tool_use").map(s=>JSON.stringify(s.input)).join(`
|
|
6
|
-
`);let t=[];for(let s of r)s.type==="text"&&typeof s.text=="string"?t.push(s.text):s.type==="tool_result"&&t.push(Re(s.content));return t.length===0&&typeof e.content=="string"&&t.push(e.content),t.join(`
|
|
7
|
-
`)}o(jr,"entryBody");var Sn=256,vt=1e3,oe=class extends Error{constructor(r,t){super(t);this.path=r;this.name="RuntimeTransportBoundaryError"}path;static{o(this,"RuntimeTransportBoundaryError")}code="invalid_transport_value"},hn=class extends Error{static{o(this,"RuntimeDaemonUpgradeRequiredError")}code="daemon_upgrade_required";capability="actorControlPlane";restartRequired=!0;constructor(){super("Runtime daemon does not advertise actorControlPlane v1. Upgrade KodaX and restart the daemon before using Runtime Actor control."),this.name="RuntimeDaemonUpgradeRequiredError"}},Rn=class extends Error{static{o(this,"RuntimeInvocationPreparationUpgradeRequiredError")}code="daemon_upgrade_required";capability="invocationPreparation";restartRequired=!0;constructor(){super("Runtime daemon does not advertise invocationPreparation v1. Upgrade KodaX and restart the daemon before preparing invocations."),this.name="RuntimeInvocationPreparationUpgradeRequiredError"}},Ne=class extends Error{static{o(this,"RuntimePermissionScopeUpgradeRequiredError")}code="daemon_upgrade_required";capability="runtimeAutoModeGuardrail";requiredVersion=3;restartRequired=!0;constructor(){super("Runtime daemon does not advertise concrete permission scopes. Upgrade KodaX and restart the daemon before requesting grants for a concrete tool call."),this.name="RuntimePermissionScopeUpgradeRequiredError"}},qe=class extends Error{static{o(this,"RuntimeCredentialBrokerUpgradeRequiredError")}code="daemon_upgrade_required";capability="providerCredentialBroker";restartRequired=!0;constructor(){super("Runtime daemon does not advertise providerCredentialBroker v2. Upgrade KodaX and restart the daemon before using scoped credential leases."),this.name="RuntimeCredentialBrokerUpgradeRequiredError"}},ue=class extends Error{static{o(this,"RuntimeRunLifecycleUpgradeRequiredError")}code="daemon_upgrade_required";capability="runLifecycleControl";requiredVersion=1;restartRequired=!0;constructor(){super("Runtime daemon does not advertise structured Stop receipts and protocol-level request cancellation. Upgrade KodaX and restart the daemon."),this.name="RuntimeRunLifecycleUpgradeRequiredError"}},wn=class extends Error{static{o(this,"RuntimeSubscriptionUpgradeRequiredError")}code="daemon_upgrade_required";capability="subscriptionLifecycle";requiredVersion=1;constructor(){super("Runtime daemon lacks subscriptionLifecycle v1. Upgrade and restart the Host before observing Learning or Workflow."),this.name="RuntimeSubscriptionUpgradeRequiredError"}};function It(e){let n=e.activeAgentTurns??e.activeAgentTasks??[];return{...e,activeAgentTurns:n,activeAgentTasks:n}}o(It,"normalizeRuntimeDaemonPreflight");function vn(e){let n=e.capabilities??{},r=o(()=>{if(n.sessionPromotion?.version!==1)throw Object.assign(new Error("Session promotion requires an upgraded Host."),{code:"daemon_upgrade_required",capability:"sessionPromotion",requiredVersion:1})},"requirePromotionContract"),t=o((i,u,f)=>{if((i==="repo.intelligence.inspect"||i==="repo.intelligence.prewarm")&&n.repoIntelligenceDiagnostics?.version!==1)return Promise.reject(Object.assign(new Error("Repository intelligence diagnostics require an upgraded Host."),{code:"daemon_upgrade_required"}));let y=u!==null&&typeof u=="object"&&"authorization"in u?u.authorization:void 0;return y?.profile?.requiredWorkMode!==void 0&&n.productExecutionModeConstraint?.version!==1?Promise.reject(Object.assign(new Error("Execution mode constraints require an upgraded Host."),{code:"daemon_upgrade_required"})):(y?.binding!==void 0||y?.businessBinding!==void 0||y?.profile?.defaultSkill!==void 0)&&n.productExecutionBinding?.version!==1?Promise.reject(Object.assign(new Error("Execution bindings require an upgraded Host."),{code:"daemon_upgrade_required"})):e.transport.request(i,u,f)},"request"),s=mt(t,n,i=>ft(U,i)),a=o((i,u)=>{let f=e.capabilities?.subscriptionLifecycle;return typeof f!="object"||f===null||!("version"in f)||f.version!==1||!("errorNotifications"in f)||f.errorNotifications!==!0?Promise.reject(new wn):t(i,i.endsWith(".subscribe")?{...O(u),reportErrors:!0}:u)},"subscriptionRequest"),d=o((i,u,f)=>{try{if(Mt(f),(f?.timeoutMs!==void 0||f?.signal!==void 0)&&!Et(e.capabilities))throw new ue}catch(D){return Promise.reject(D)}let y=new AbortController,x=t(i,{...u,...f?.timeoutMs!==void 0?{timeoutMs:f.timeoutMs}:{}},{signal:y.signal});return Wr(x,f,D=>{y.abort(D)})},"readRequest"),c=o(()=>{let i=e.capabilities?.actorControlPlane;if(typeof i!="object"||i===null||!("version"in i)||i.version!==1||!("methodNamespace"in i)||i.methodNamespace!=="agents")return new hn},"actorControlPlaneError"),l=o(()=>{let i=e.capabilities?.invocationPreparation;if(typeof i!="object"||i===null||!("version"in i)||i.version!==1)return new Rn},"invocationPreparationError"),m=o(()=>{let i=e.capabilities?.runtimeAutoModeGuardrail;if(typeof i!="object"||i===null||!("version"in i)||typeof i.version!="number"||i.version<3||!("concretePermissionMatchers"in i)||i.concretePermissionMatchers!==!0||!("permissionGrantSuggestions"in i)||i.permissionGrantSuggestions!==!0)return new Ne},"concretePermissionScopeError"),p=new Map,g=new Map,h=new Map,v=new Set,I={state:"connected",connectionId:`connection_${we().replace(/-/g,"")}`,runtimeEpoch:e.identity.runtimeId,reconnectable:!1},T=e.transport.subscribeLifecycle?.(i=>{I={...i,runtimeEpoch:e.identity.runtimeId};for(let u of v)try{u(I)}catch(f){E({source:"runtime.daemon.client",level:"warn",message:"Runtime connection lifecycle listener failed.",detail:{errorType:f instanceof Error?f.name:typeof f}})}}),k=e.transport.subscribe(i=>{i.method==="execution.resolve"?s.handle(i.params).catch(()=>gn("execution binding")):i.method==="credential.request"?Fr(i.params,p,t).catch(()=>gn("credential request")):i.method==="host_tool.invoke"&&Lr(i.params,g,h,t).catch(()=>gn("host tool invocation"))}),A=!1,R=!1,S,C=o(()=>{if(R)return Promise.resolve();if(S)return S;let i=(async()=>{A||(s.close(),T?.close(),k.close(),v.clear(),p.clear(),g.clear(),h.clear(),A=!0),await e.transport.close?.(),R=!0})();return S=i,i.finally(()=>{S===i&&(S=void 0)}).catch(()=>{}),i},"closeClient"),w=o(i=>t("interaction.list",i),"listInteractions"),P=o(async i=>(await w()).find(u=>u.requestId===i),"findInteraction"),b=o(async i=>(await w(i?.sessionId!==void 0?{sessionId:i.sessionId}:void 0)).map(f=>gt(f)).filter(f=>f!==null),"permissionInteractions"),M=o((i,u)=>{if(i.kind!=="permission"&&nn(u)){if(u.reason==="timeout")throw Object.assign(new Error("A client cannot submit a timeout as an answer; the Host owns the question deadline."),{code:"invalid_input"});return u.reason==="non_interactive"?{kind:"skip",reason:"non_interactive"}:{kind:"skip"}}if(i.kind==="question_input")return{kind:"question_input",text:u};if(i.kind==="question_multi")return{kind:"question_multi",answers:u};if(i.kind==="question")return{kind:"question",answer:u}},"questionResponseFor"),K=o((i,u)=>(u?.runId===void 0||i.runId===u.runId)&&(u?.expectedRevision===void 0||u.expectedRevision===0),"matchesUserInputBindings"),U={identity:e.identity,statistics:{read:o(i=>t("session.facts.read",{sessionId:i}),"read"),readRequests:o((i,u)=>t("session.facts.requests",{sessionId:i,...u}),"readRequests"),readTools:o((i,u)=>t("session.facts.tools",{sessionId:i,...u}),"readTools")},lifecycle:{requestExit:o(i=>t("client.exit.request",i),"requestExit"),readExit:o(i=>t("client.exit.read",{requestId:i}),"readExit"),listPendingExits:o(()=>t("client.exit.pending"),"listPendingExits")},capabilities:e.capabilities,executionBindings:s.service,...e.grantedScopes!==void 0?{grantedScopes:e.grantedScopes}:{},sessions:{promote:o(async i=>(r(),t("session.promote",i)),"promote"),readPromotion:o(async(i,u)=>(r(),t("session.promotion.read",{sessionId:i,requestId:u})),"readPromotion"),create(i={}){return t("session.create",i)},load(i,u){return d("session.load",{sessionId:i},u)},list(i){return t("session.list",i)},status(i){return t("session.status",{sessionId:i})},transcript(i,u){return d("session.transcript",{sessionId:i},u)},transcriptPage(i,u){return d("session.transcript.page",{...i},u)},transcriptEntryChunk(i,u){return d("session.transcript.entryChunk",{...i},u)},transcriptSearch(i,u){return d("session.transcript.search",{...i},u)},conversation(i,u){return d("session.conversation",{sessionId:i},u)},conversationPage(i,u){return d("session.conversation.page",i,u)},conversationEntryChunk(i,u){return d("session.conversation.entryChunk",i,u)},observe(i,u,f){return Hr(e.transport,d,i,u,f)},observeView(i,u,f){return Br(e.transport,i,u,f)},readViewItem(i,u,f){return t("session.view.item",{sessionId:i,itemId:u,...f})},async readHistory(i,u){let f=await pn(()=>d("session.conversation.page",{sessionId:i,...u?.cursor!==void 0?{cursor:u.cursor}:{},...u?.limit!==void 0?{limit:u.limit}:{}}),{...u?.cursor!==void 0?{cursor:u.cursor}:{}});if(f===null)throw new Error("Runtime daemon returned no conversation history page.");return ln(i,f,y=>d("session.conversation.entryChunk",{...y}))},readHistoryEntry(i,u,f){if(f?.part==="original")return t("session.view.item",{sessionId:i,itemId:u,...f});let y=u.startsWith(`${i}:transcript:`);return mn(i,u,async x=>d(y?"session.transcript.entryChunk":"session.conversation.entryChunk",x),f,y?"transcript":"history")},async searchHistory(i,u){let f=await d("session.transcript.search",{sessionId:i,query:u.query,scope:u.scope??"all",...u.limit!==void 0?{limit:u.limit}:{},...u.role!==void 0?{role:u.role}:{}});if(f===null)throw new Error("Runtime daemon returned no transcript search result.");return{revision:f.revision,hits:f.hits.map(y=>({itemId:`${i}:transcript:${f.revision}:${y.entryIndex}`,entryIndex:y.entryIndex,role:y.role==="user"?"user":"assistant",...y.timestamp!==void 0?{timestamp:y.timestamp}:{},snippet:y.snippet}))}},diagnostics(i){return d("session.diagnostics",{sessionId:i.sessionId,...i.runId!==void 0?{runId:i.runId}:{}},i).then(u=>({...u,sdkVersion:z,runtimeVersion:e.identity.version,daemonVersion:e.identity.mode==="daemon"?e.identity.version:null,runtimeMode:e.identity.mode}))},fork(i){return t("session.fork",i)},recover(i){return t("session.recover",i)},getSettings(i){return t("session.settings.get",{sessionId:i})},getSettingsVersioned(i){return t("session.settings.getVersioned",{sessionId:i})},getAutoModeStats(i){return t("session.autoMode.getStats",{sessionId:i})},async updateSettings(i,u){return Ct(e.capabilities,u),t("session.settings.update",{sessionId:i,patch:u})},async updateSettingsVersioned(i,u,f){return Ct(e.capabilities,u),t("session.settings.updateVersioned",{sessionId:i,patch:u,expectedRevision:f.expectedRevision})},appendNotice(i){return t("session.notice.append",i)},readGoal(i){return t("session.goal.get",{sessionId:i})},createGoal(i){return t("session.goal.create",i)},pauseGoal(i){return t("session.goal.pause",{sessionId:i})},resumeGoal(i){return t("session.goal.resume",{sessionId:i})},clearGoal(i){return t("session.goal.clear",{sessionId:i}).then(()=>{})},readLineage(i){return t("session.lineage.get",{sessionId:i})},labelEntry(i){return t("session.lineage.label",i)},rewind(i){return t("session.rewind",i)},confirmIdentityAlias(i){return t("session.identityAlias.confirm",i)},setActiveEntry(i){return t("session.active_entry.set",i)},compact(i){return t("session.compact",i)},async archive(i){await t("session.archive",{sessionId:i})},async unarchive(i){await t("session.unarchive",{sessionId:i})},async delete(i){await t("session.delete",{sessionId:i})},async cancel(i){let u=e.capabilities?.sessionCancellation;if(typeof u!="object"||u===null||!("version"in u)||u.version!==1||!("durableFrontier"in u)||u.durableFrontier!==!0)throw Object.assign(new Error("Session Stop requires a Runtime with sessionCancellation v1; upgrade the owner."),{code:"client_upgrade_required"});let f=O(await t("session.cancel",i));if(f.sessionId!==i.sessionId||f.expectedRunId!==i.expectedRunId||f.requestId!==i.requestId||typeof f.frontier!="number"||!Number.isSafeInteger(f.frontier)||!Array.isArray(f.receipts))throw new Error("Runtime returned an invalid Session Stop receipt");let y=f.receipts.map(x=>{let D=Tt(x,_(O(x),"runId"));if(D.sessionId!==i.sessionId)throw new Error("Session Stop receipt belongs to another Session");return D});return{...i,frontier:f.frontier,receipts:y}}},runs:{acceptInput(i){return t("input.submit",i)},getInput(i,u){return t("input.read",{sessionId:i,inputId:u})},withdrawInput(i,u){return e.transport.request("input.withdraw",{sessionId:i,inputId:u})},async start(i){let u=e.capabilities?.toolInvocation;if(i.options?.toolInvocation&&(typeof u!="object"||u===null||!("version"in u)||u.version!==1))throw Object.assign(new Error("Explicit tool invocation requires Runtime toolInvocation v1; upgrade the owner."),{code:"client_upgrade_required"});let f=i;V(f,"run.start");let y=O(await t("run.start",f)),x=_(y,"runId"),D=_(y,"sessionId"),N=ne(y,"turnId"),Y;return{runId:x,sessionId:D,...N!==void 0?{turnId:N}:{},get result(){return Y??=yn(t,x)}}},async recover(i){V(i,"run.recover");let u=O(await t("run.recover",i)),f=_(u,"runId"),y=_(u,"sessionId"),x=ne(u,"turnId"),D;return{runId:f,sessionId:y,...x?{turnId:x}:{},get result(){return D??=yn(t,f)}}},async submitInput(i){let u=i;return V(u,"run.input.submit"),t("run.input.submit",u)},await(i){return yn(t,i)},get(i){return t("run.get",{runId:i})},list(i){return t("run.list",i)},abort(i){return Et(e.capabilities)?t("run.abort",{runId:i}).then(u=>Tt(u,i)):Promise.reject(new ue)},async setModel(i,u){await t("run.model.set",{runId:i,model:u})},async setProvider(i,u){await t("run.provider.set",{runId:i,provider:u})},async setReasoning(i,u){await t("run.reasoning.set",{runId:i,reasoning:u})}},events:{subscribe(i,u){return Kr(e.transport,t,i,u)}},interactions:{list(i){return w(i)},respond(i,u){return t("interaction.respond",{requestId:i,response:u})}},permissions:{request(i){return Promise.reject(Object.assign(new Error("Clients can no longer mint permission requests; only Host execution creates them."),{code:"client_upgrade_required"}))},async listPending(i){return(await b(i)).filter(f=>(i?.runId===void 0||f.runId===i.runId)&&(i?.toolName===void 0||f.toolName===i.toolName))},async respond(i,u,f){let y=await P(i);return y!==void 0&&(y.kind!=="permission"||f?.runId!==void 0&&y.runId!==f.runId)?!1:(await t("interaction.respond",{requestId:i,response:{kind:"permission",decision:u}})).accepted},listGrants(){return t("permission.grants.list")},revokeGrant(i,u){return t("permission.grants.revoke",{grantId:i,expectedRevision:u})}},userInputs:{async listPending(i){return(await w(i?.sessionId!==void 0?{sessionId:i.sessionId}:void 0)).map(f=>pt(f)).filter(f=>f!==null).filter(f=>i?.runId===void 0||f.runId===i.runId)},async respond(i,u,f){let y=await P(i);if(y===void 0||!K(y,f))return{requestId:i,accepted:!1,status:"already_resolved"};let x=M(y,u);return x===void 0?{requestId:i,accepted:!1,status:"already_resolved"}:t("interaction.respond",{requestId:i,response:x})},async dismiss(i,u){let f=await P(i);return f===void 0||f.kind==="permission"||!K(f,u)?{requestId:i,accepted:!1,status:"already_resolved"}:t("interaction.respond",{requestId:i,response:{kind:"cancel"}})}},credentials:{async register(i,u){let f=`credlease_${we().replace(/-/g,"")}`;p.set(f,{version:1,broker:u});try{return await t("credential.register",{leaseId:f,providers:i.providers,...i.expiresAt!==void 0?{expiresAt:i.expiresAt}:{}})}catch(y){throw p.delete(f),y}},async resume(i,u){p.set(i,{version:1,broker:u});try{let f=await t("credential.get",{leaseId:i});if(f==null)throw Object.assign(new Error(`Credential lease is unavailable after Runtime reconnect: ${i}`),{code:"credential_unavailable"});let y=O(f);if(y.brokerVersion===2)throw Object.assign(new Error(`Credential lease is scoped v2 and cannot use the v1 broker: ${i}`),{code:"credential_unavailable"});return y}catch(f){throw p.delete(i),f}},async registerScoped(i,u){if(!At(e.capabilities))throw new qe;let f=`credlease_${we().replace(/-/g,"")}`;p.set(f,{version:2,broker:u});try{return await t("credential.register",{leaseId:f,providers:i.providers,brokerVersion:2,...i.expiresAt!==void 0?{expiresAt:i.expiresAt}:{}})}catch(y){throw p.delete(f),y}},async resumeScoped(i,u){if(!At(e.capabilities))throw new qe;p.set(i,{version:2,broker:u});try{let f=await t("credential.get",{leaseId:i});if(f==null)throw Object.assign(new Error(`Credential lease is unavailable after Runtime reconnect: ${i}`),{code:"credential_unavailable"});let y=O(f);if(y.brokerVersion!==2)throw Object.assign(new Error(`Credential lease is not a scoped v2 lease: ${i}`),{code:"credential_unavailable"});return y}catch(f){throw p.delete(i),f}},async revoke(i){let u=await t("credential.revoke",{leaseId:i});return p.delete(i),u}},hostTools:{async register(i,u){bt(i,u);let f=`hostlease_${we().replace(/-/g,"")}`;g.set(f,u);try{return await t("host_tool.register",{leaseId:f,tools:i})}catch(y){throw g.delete(f),y}},async resume(i,u){g.set(i,u);try{let f=await t("host_tool.get",{leaseId:i});if(f==null)throw Object.assign(new Error(`Host tool lease is unavailable after Runtime reconnect: ${i}`),{code:"host_tool_unavailable"});let y=O(f);return bt(y.tools,u),y}catch(f){throw g.delete(i),f}},async getInvocation(i){return ee(await t("host_tool.invocation.get",{invocationId:i}))},async revoke(i){let u=await t("host_tool.revoke",{leaseId:i});return u&&g.delete(i),u}},memory:{async forProject(i){let u=e.capabilities?.memoryManagement;if(typeof u!="object"||u===null||!("version"in u)||u.version!==1)throw Object.assign(new Error("Upgrade KodaX and restart the daemon to manage Memory."),{code:"daemon_upgrade_required"});let f=await t("memory.describe",{projectRoot:i});return{controller:{listInbox:o(()=>t("memory.listInbox",{projectRoot:i}),"listInbox"),showProposal:o(x=>t("memory.showProposal",{projectRoot:i,id:x}).then(ee),"showProposal"),listRefs:o(x=>t("memory.listRefs",{projectRoot:i,filter:x}),"listRefs"),readRef:o(x=>t("memory.readRef",{projectRoot:i,id:x.id}),"readRef"),remember:o(x=>t("memory.remember",{projectRoot:i,input:x}),"remember"),forgetRef:o((x,D)=>t("memory.forgetRef",{projectRoot:i,id:x,expectedBodyFingerprint:D}),"forgetRef"),approveProposal:o((x,D,N)=>t("memory.approveProposal",{projectRoot:i,id:x,expectedFingerprints:D,expectedRevision:N}),"approveProposal"),rejectProposal:o((x,D,N)=>t("memory.rejectProposal",{projectRoot:i,id:x,reason:D,expectedRevision:N}),"rejectProposal")},memoryRoot:f.memoryRoot,entrypointPath:f.entrypointPath,reviewerProviderConfigured:o(()=>f.reviewerProviderConfigured,"reviewerProviderConfigured"),listReviews:o(()=>t("memory.listReviews",{projectRoot:i}),"listReviews"),rebuild:o(()=>t("memory.rebuild",{projectRoot:i}),"rebuild"),ensureOpenTarget:o(x=>t("memory.ensureOpenTarget",{projectRoot:i,targetPath:x}),"ensureOpenTarget")}}},invocations:{readCommandPrompt(i){return t("invocations.readCommandPrompt",i)},startReview(i){return t("invocations.startReview",i)},startAgentsLean(i){return t("invocations.startAgentsLean",i)},executeCommand(i){return t("invocations.executeCommand",i)},prepareSkill(i,u){let f=l();return f?Promise.reject(f):d("invocations.prepareSkill",i,u)},prepareCommand(i){let u=l();return u?Promise.reject(u):t("invocations.prepareCommand",i)},prepareReview(i){let u=l();return u?Promise.reject(u):t("invocations.prepareReview",i)},prepareAgentsLean(i){let u=l();return u?Promise.reject(u):t("invocations.prepareAgentsLean",i)}},workflows:{list(i){return t("workflow.list",i)},get(i){return t("workflow.get",{runId:i}).then(ee)},subscribe(i,u,f){return Vr(e.transport,a,i,u,f)},pause(i){return t("workflow.pause",{runId:i})},resume(i){return t("workflow.resume",{runId:i})},stop(i,u){return t("workflow.stop",{runId:i,...u})},async start(i){let u=e.capabilities?.workflowSettingsDefaults;if(i.settingsDefaults==="product"&&(!u||typeof u!="object"||!("version"in u)||u.version!==1))throw Object.assign(new Error("Host does not support product Workflow defaults. Upgrade and restart the Host."),{code:"daemon_upgrade_required",capability:"workflowSettingsDefaults",restartRequired:!0});return t("workflow.start",i)}},learning:{list(i){return t("learning.list",i??{})},get(i){return t("learning.get",{nameOrSlug:i})},getSnapshot(){return t("learning.snapshot")},events(i){return t("learning.events",{...i!==void 0?{afterRevision:i}:{}})},subscribe(i){return qr(e.transport,a,i)},async acknowledge(i){await t("learning.acknowledge",{nameOrSlug:i})},async snooze(i,u){await t("learning.snooze",{nameOrSlug:i,until:u})},async reject(i){await t("learning.reject",{nameOrSlug:i})},async disable(i){await t("learning.disable",{nameOrSlug:i})},async rollback(i){await t("learning.rollback",{nameOrSlug:i})},async promote(i,u){await t("learning.promote",{nameOrSlug:i,scope:u})},async review(i){await t("learning.review",{nameOrSlug:i})},async trust(i){await t("learning.trust",{nameOrSlug:i})}},config:{read(){return t("config.read")},readEffective(){return t("config.effective")},patch(i){return t("config.patch",{patch:i})},reload(){return t("config.reload")}},catalog:{inspectRepoIntelligence(i){return t("repo.intelligence.inspect",{sessionId:i})},prewarmRepoIntelligence(i){return t("repo.intelligence.prewarm",{sessionId:i})},executionTools(i){return t("tool.catalog",{sessionId:i})},reasoningEfforts(i){return t("provider.reasoning.efforts",i)},probeReasoningEfforts(i){return t("provider.reasoning.probe",i)},async forgetCapabilities(i){await t("provider.capabilities.forget",i??{})},providers(){return t("provider.list")},models(i){return t("model.list",i)},commands(i){return t("command.list",i!==void 0?{projectRoot:i}:void 0)},resolveCommand(i){return t("command.resolve",i)},skills(i){return t("skill.list",i)},describeSkill(i){return t("skill.describe",i)},customProviders(){return t("provider.custom.list")},upsertCustomProvider(i){return t("provider.custom.upsert",{config:i})},deleteCustomProvider(i){return t("provider.custom.remove",{name:i})},extensions(){return t("extension.list")},reloadExtensions(){return t("extension.reload")}},mcp:{status(){return t("mcp.server.status")},listServers(){return t("mcp.server.list")},getServer(i){return t("mcp.server.get",{name:i}).then(ee)},validateServer(i,u){return t("mcp.server.validate",{name:i,config:u})},upsertServer(i,u){return t("mcp.server.upsert",{name:i,config:u})},deleteServer(i){return t("mcp.server.delete",{name:i})},reloadServers(){return t("mcp.server.reload")},listTools(i){return t("mcp.tool.list",i)}},artifacts:{create(i){return t("artifact.create",i)},get(i){return t("artifact.get",{artifactId:i}).then(ee)},delete(i){return t("artifact.delete",{artifactId:i})}},admin:{agentRegistrations:{list(){return t("agentRegistrations.list")},upsert(i,u){return V(i,"agentRegistrations.upsert.registration"),t("agentRegistrations.upsert",{registration:i,...u?.expectedConfigurationRevision!==void 0?{expectedConfigurationRevision:u.expectedConfigurationRevision}:{},...u?.expectedManagementOwner!==void 0?{expectedManagementOwner:u.expectedManagementOwner}:{}})},setEnabled(i,u,f){return t("agentRegistrations.setEnabled",{agentId:i,enabled:u,...f?.expectedConfigurationRevision!==void 0?{expectedConfigurationRevision:f.expectedConfigurationRevision}:{},...f?.expectedManagementOwner!==void 0?{expectedManagementOwner:f.expectedManagementOwner}:{},...f?.claimOwner!==void 0?{claimOwner:f.claimOwner}:{}}).then(ee)},remove(i,u){return t("agentRegistrations.remove",{agentId:i,...u?.expectedConfigurationRevision!==void 0?{expectedConfigurationRevision:u.expectedConfigurationRevision}:{},...u?.expectedManagementOwner!==void 0?{expectedManagementOwner:u.expectedManagementOwner}:{}})}}},agents:{enabled:e.capabilities?.externalAgents===!0,listDispatchable(i){return t("agents.listDispatchable",i)},describe(i,u){return t("agents.describe",{agentId:i,query:u}).then(ee)},preflight(i){return t("agents.preflight",i)},tree(i){let u=c();return u?Promise.reject(u):t("agents.tree",{sessionId:i})},detail(i,u){let f=c();return f?Promise.reject(f):t("agents.detail",{sessionId:i,actorPath:u})},spawn(i,u,f){let y=c();return y?Promise.reject(y):(V(u,"agents.spawn"),V(f?.credential,"agents.spawn.credential"),t("agents.spawn",{sessionId:i,input:u,...f?.authorization===void 0?{}:{authorization:f.authorization},...f?.credential!==void 0?{credential:f.credential}:{}}))},async send(i,u,f,y){let x=c();if(x)throw x;await t("agents.send",{sessionId:i,actorPath:u,content:f,...y!==void 0?{classification:y}:{}})},followup(i,u,f,y){let x=c();return x?Promise.reject(x):y?.resumeCheckpoint===!0&&n.actorCheckpointRecovery?.version!==1?Promise.reject(Object.assign(new Error("Actor checkpoint recovery requires an upgraded Host."),{code:"daemon_upgrade_required"})):(V(y?.credential,"agents.followup.credential"),t("agents.followup",{sessionId:i,actorPath:u,objective:f,...y?.resumeCheckpoint===void 0?{}:{resumeCheckpoint:y.resumeCheckpoint},...y?.authorization===void 0?{}:{authorization:y.authorization},...y?.expectedRevision!==void 0?{expectedRevision:y.expectedRevision}:{},...y?.credential!==void 0?{credential:y.credential}:{}}))},async interrupt(i,u,f){let y=c();if(y)throw y;await t("agents.interrupt",{sessionId:i,actorPath:u,...f!==void 0?{reason:f}:{}})},output(i,u,f){let y=c();return y?Promise.reject(y):t("agents.output",{sessionId:i,actorPath:u,...f!==void 0?{turnId:f}:{}})},events(i,u){let f=c();return f?Promise.reject(f):t("agents.events",{sessionId:i,...u!==void 0?{afterSequence:u}:{}})},wait(i,u,f,y){let x=c();return x?Promise.reject(x):d("agents.wait",{sessionId:i,...u!==void 0?{afterSequence:u}:{},...f!==void 0?{timeoutMs:f}:{}},y).then(ee)}},status:{snapshot(){return t("daemon.status")},preflight(i){return t("daemon.preflight",void 0,i).then(u=>It(u))}},daemon:{async shutdown(){try{await t("runtime.shutdown")}catch(i){throw i instanceof Error&&"code"in i&&i.code==="conflict"?Object.assign(new Error(i.message,{cause:i}),{code:"busy"}):i}return{accepted:!0}},inspect(){return t("daemon.management.get").then(i=>{let u=i;return{...u,preflight:It(u.preflight)}})}},connection:{current(){return I},subscribe(i){return v.add(i),i(I),{close(){v.delete(i)}}}},close:C};return U}o(vn,"createRuntimeDaemonClient");function qr(e,n,r){let t=[],s=[],a=!1,d=!1,c,l=o(g=>{if(!(a||d)){d=!0,c=g,t.length=0;for(let h of s.splice(0))h.reject(g)}},"fail"),m=Dt(e,n,"learning.subscribe",{...r?.afterRevision!==void 0?{afterRevision:r.afterRevision}:{}},g=>{if(a||d)return;let h=g,v=s.shift();v?v.resolve({value:h,done:!1}):t.push(h)},l);return m.ready?.catch(l),{ready:m.ready,[Symbol.asyncIterator](){return this},async next(){if(a)return{done:!0,value:void 0};if(d)throw c;return t.length>0?{value:t.shift(),done:!1}:new Promise((g,h)=>{s.push({resolve:g,reject:h})})},async return(){a=!0,t.length=0,m.close();for(let g of s.splice(0))g.resolve({done:!0,value:void 0});return{done:!0,value:void 0}}}}o(qr,"learningEventPushIterable");function gn(e){E({source:"runtime.daemon.client",level:"warn",message:`Failed to deliver ${e} result to the Runtime daemon.`})}o(gn,"reportReverseBridgeFailure");async function Fr(e,n,r){let t=O(e),s=_(t,"requestId"),a=_(t,"leaseId"),d=n.get(a);if(!d){await r("credential.supply",{requestId:s,error:"credential_lease_unavailable"});return}try{let c=d.version===1?await d.broker({leaseId:a,provider:_(t,"provider"),sessionId:_(t,"sessionId"),runId:_(t,"runId")}):await d.broker({requestId:s,leaseId:a,provider:_(t,"provider"),sessionId:_(t,"sessionId"),...t.connectionFingerprint!==void 0?{connectionFingerprint:_t(t.connectionFingerprint)}:{},...t.credentialContextVersion!==void 0?{credentialContextVersion:Qr(t.credentialContextVersion)}:{},...t.rejectedCredentialFingerprint!==void 0?{rejectedCredentialFingerprint:_t(t.rejectedCredentialFingerprint)}:{},target:Xr(t.target),purpose:$r(t.purpose)});await r("credential.supply",{requestId:s,...c!==void 0?{credential:c}:{error:"credential_unavailable"}})}catch{await r("credential.supply",{requestId:s,error:"credential_broker_failed"})}}o(Fr,"answerCredentialRequest");async function Lr(e,n,r,t){let s=O(e),a=_(s,"invocationId"),d=_(s,"leaseId"),c=_(s,"toolName"),l=n.get(d)?.[c];if(!l){await t("host_tool.complete",{invocationId:a,error:"host_tool_unavailable"});return}let m=r.get(a);if(!m){let p=Promise.resolve().then(()=>l({invocationId:a,leaseId:d,toolName:c,sessionId:_(s,"sessionId"),runId:_(s,"runId"),input:O(s.input)}));m={promise:p,settled:!1},r.set(a,m);let g=m;p.finally(()=>{g.settled=!0,kt(r)}).catch(()=>{}),kt(r)}try{await t("host_tool.complete",{invocationId:a,result:await m.promise})}catch{try{await t("host_tool.complete",{invocationId:a,error:"host_tool_failed"})}catch(p){throw new Error("Failed to report the Host Tool outcome to the Runtime daemon.",{cause:p})}}}o(Lr,"answerHostToolInvocation");function bt(e,n){let r=new Set(e.map(t=>t.name));if(r.size!==e.length||e.length===0)throw new Error("Host tool descriptors must have unique, non-empty names.");for(let t of r)if(typeof n[t]!="function")throw new Error(`Missing host tool handler: ${t}`)}o(bt,"validateHostToolHandlers");function kt(e){if(!(e.size<=vt))for(let[n,r]of e){if(e.size<=vt)return;r.settled&&e.delete(n)}}o(kt,"pruneHostToolResults");function Kr(e,n,r,t){let s=!1,a,d=[],c=o(g=>!(r.runId!==void 0&&g.runId!==r.runId||r.type!==void 0&&!(Array.isArray(r.type)?r.type:[r.type]).includes(g.type)),"matches"),l=e.subscribe(g=>{if(s||g.method!=="event"&&g.method!=="observation.invalidated")return;let h=O(g.params);if(a===void 0){d.length>=Sn&&d.shift(),d.push({method:g.method,payload:h});return}if(h.subscriptionId===a){if(g.method==="observation.invalidated"){m();return}xt(h.event,v=>{c(v)&&t(v)})}}),m=o(()=>{if(s)return;s=!0,l.close();let g=a;a=void 0,g!==void 0&&n("subscription.close",{subscriptionId:g}).catch(h=>{E({source:"runtime.daemon.client",level:"warn",message:"Failed to close a remote Session observation subscription.",detail:h})})},"close"),p=n("session.observe",{sessionId:r.sessionId}).then(g=>{let h=O(g);if(a=_(h,"subscriptionId"),s){n("subscription.close",{subscriptionId:a}).catch(v=>{E({source:"runtime.daemon.client",level:"warn",message:"Failed to close a remote Session observation subscription.",detail:v})}),d.length=0;return}for(let{method:v,payload:I}of d.splice(0))if(I.subscriptionId===a){if(v==="observation.invalidated"){m();break}xt(I.event,T=>{c(T)&&t(T)})}}).catch(g=>{throw d.length=0,l.close(),g});return p.catch(()=>{}),{ready:p,close:m}}o(Kr,"subscribeToDaemonEvents");async function Br(e,n,r,t={}){let s=`view_${we()}`,a=!1,d=!1,c,l=o(S=>{if(c?.state!==S.state){c=S;try{t.onStatus?.(S)}catch(C){E({source:"session.view",level:"warn",message:"Session observation status listener failed.",detail:C})}}},"report"),m,p,g,h,v,I=0,T=o(S=>{let C=new Map(p?.items.map(b=>[b.id,b])),w=S.items.map(b=>{let M=C.get(b.id);return M&&Nr(M,b)?M:b}),P=p?.items.length===w.length&&w.every((b,M)=>b===p?.items[M]);p={...S,items:P?p.items:w},r(p),l({state:"live"})},"deliver"),k=e.subscribe(S=>{if(a||S.method!=="session.view")return;let C=O(S.params);if(C.subscriptionId!==s)return;if(C.status!==void 0){let P=O(C.status);P.state==="closed"?R("unavailable"):P.state==="interrupted"&&l({state:"interrupted"});return}let w=O(C.view);if(w.session.id!==n)throw new Error("Session view identity did not match its subscription.");if(d)try{T(w)}catch(P){R("unavailable"),E({source:"session.view",level:"warn",message:"Session observer failed and was detached.",detail:P})}else m=w}),A=o(async S=>{let C=O(await e.request("session.view.observe",{sessionId:n,subscriptionId:s}));if(a)throw e.request("session.view.close",{subscriptionId:s}).catch(w=>{E({source:"session.view",level:"warn",message:"Unable to release the remote Session observation.",detail:w})}),new Error("Connection closed while opening the Session view.");if(S!==void 0&&!S())throw new Error("Session view reopen was superseded by a newer connection generation.");T(m??O(C.view)),m=void 0,d=!0},"openRemoteView");h=e.subscribeLifecycle?.(S=>{if(!a){if(S.state==="connected"){if(g===void 0||g===S.connectionId){g=S.connectionId;return}if(g=S.connectionId,a||d)return;m=void 0,I+=1;let C=I,w=0;v=(async()=>{for(;!a&&!d;){w+=1;let P=g;try{await A(()=>C===I&&g===P);return}catch(b){if(a||C!==I)return;if(g!==P){w=0;continue}if(w>=3){E({source:"session.view",level:"warn",message:"Session view could not reopen after a Runtime reconnect; the observation was detached.",detail:b}),R("unavailable");return}await new Promise(M=>{setTimeout(M,250).unref?.()})}}})().finally(()=>{C===I&&(v=void 0)});return}d=!1,m=void 0,I+=1,S.reconnectable===!1?R("unavailable"):l({state:"interrupted"})}});function R(S="client"){if(a){h?.close();return}a=!0,k.close(),h?.close(),m=void 0,p=void 0,l({state:"closed",reason:S}),e.request("session.view.close",{subscriptionId:s}).catch(C=>{E({source:"session.view",level:"warn",message:"Unable to release the remote Session observation.",detail:C})})}o(R,"close");try{let S=I;return await A(()=>S===I),{close:R}}catch(S){throw R("unavailable"),S}}o(Br,"observeDaemonSessionView");async function Hr(e,n,r,t,s){let a=!1,d=!1,c,l=!1,m,p=!1,g,h,v=new Promise(w=>{h=w}),I=[],T,k,A=o(()=>{I.length=0,T?.close(),T=void 0,k?.close(),k=void 0;let w=c;c=void 0,w!==void 0&&n("subscription.close",{subscriptionId:w}).catch(P=>{E({source:"runtime.daemon.client",level:"warn",message:"Failed to unsubscribe an invalidated Session observation.",detail:P})})},"closeResources"),R=o((w,P,b)=>{a||p||(p=!0,A(),h?.({code:"observation_invalidated",reason:w,runtimeId:b,message:P}))},"invalidate"),S=o((w,P)=>{let b=Ot(w.event);if(b===void 0){R("event_order","Runtime delivered an invalid observation event; full resync is required.",P);return}if(m!==void 0){if(b.seq<m){if(!d)return;R("event_order",`Runtime observation event order regressed from ${m} to ${b.seq}.`,P);return}if(b.seq===m)return}m=b.seq;try{t(b)}catch(M){E({source:"runtime.daemon.client",level:"error",message:`Session observation listener failed for ${b.type}.`,detail:M}),R("delivery_failed",`Session observation listener failed while delivering ${b.type}; discard local state and resync.`,P)}},"deliver"),C=o((w,P)=>{let b=zr(w.invalidation);if(b===void 0){R("event_order","Runtime delivered an invalid observation invalidation; full resync is required.",P);return}R(b.reason,b.message,b.runtimeId)},"deliverInvalidation");T=e.subscribe(w=>{if(a||p||w.method!=="event"&&w.method!=="observation.invalidated")return;let P=O(w.params);if(c===void 0||!d){if(w.method==="event"&&!Ur(P.event,r)||w.method==="observation.invalidated"&&typeof P.sessionId=="string"&&P.sessionId!==r)return;I.length>=Sn?(l=!0,R("event_overflow","Runtime observation handoff overflowed; full resync is required.","daemon")):I.push({method:w.method,payload:P});return}P.subscriptionId===c&&(w.method==="event"?S(P,"daemon"):C(P,"daemon"))}),k=e.subscribeLifecycle?.(w=>{if(w.state==="connected"){g!==void 0&&g!==w.connectionId&&R("runtime_changed","Runtime transport connection changed; discard the observation and resync.","daemon"),g=w.connectionId;return}R("transport_disconnected",w.reason??"Runtime transport disconnected; observation is invalid.","daemon")});try{let w=O(await n("session.observe",{sessionId:r},s));if(c=_(w,"subscriptionId"),l)throw Object.assign(new Error("Runtime session observation handshake exceeded its event buffer; full resync is required."),{code:"resync_required"});let P=O(w.snapshot);m=typeof P.seq=="number"?P.seq:void 0;let b={snapshot:P,invalidated:v,close(){a||(a=!0,A())}};return queueMicrotask(()=>queueMicrotask(()=>{if(!(a||p)){for(;I.length>0;){let M=I.splice(0);for(let K of M){if(p)break;let{method:U,payload:i}=K;i.subscriptionId===c&&(U==="event"?S(i,P.runtimeId):C(i,P.runtimeId))}}d=!0}})),b}catch(w){throw a=!0,A(),w}}o(Hr,"observeDaemonSession");function $r(e){if(e==="primary"||e==="fallback"||e==="classifier"||e==="sidecar"||e==="compaction"||e==="workflow"||e==="utility")return e;throw new Error("Invalid scoped credential purpose.")}o($r,"parseScopedCredentialPurpose");function Xr(e){let n=O(e),r=_(n,"kind");if(r==="run")return{kind:r,runId:_(n,"runId"),...ne(n,"operationId")!==void 0?{operationId:ne(n,"operationId")}:{}};if(r==="operation"){let t=_(n,"operation");if(t!=="session.compact"&&t!=="provider.reasoning.probe")throw new Error("Invalid credential operation target.");return{kind:r,operation:t,operationId:_(n,"operationId")}}if(r==="actor_turn")return{kind:r,actorPath:_(n,"actorPath"),turnId:_(n,"turnId"),...ne(n,"parentRunId")!==void 0?{parentRunId:ne(n,"parentRunId")}:{}};if(r==="workflow")return{kind:r,workflowRunId:_(n,"workflowRunId"),...ne(n,"parentRunId")!==void 0?{parentRunId:ne(n,"parentRunId")}:{}};throw new Error("Invalid scoped credential target.")}o(Xr,"parseScopedCredentialTarget");async function Wr(e,n,r){if(Mt(n),n?.signal===void 0&&n?.timeoutMs===void 0)return e;let t,s;try{return await Promise.race([e,new Promise((a,d)=>{n?.timeoutMs!==void 0&&(t=setTimeout(()=>{let c=Object.assign(new Error(`Runtime read timed out after ${n.timeoutMs}ms`),{code:"read_timeout"});d(c),r(c)},n.timeoutMs)),n?.signal!==void 0&&(s=o(()=>{let c=Object.assign(new Error("Runtime read cancelled"),{code:"read_cancelled"});d(c),r(c)},"abort"),n.signal.addEventListener("abort",s,{once:!0}))})])}finally{t!==void 0&&clearTimeout(t),s!==void 0&&n?.signal?.removeEventListener("abort",s)}}o(Wr,"raceRuntimeDaemonRead");function Mt(e){if(e?.signal?.aborted)throw Object.assign(new Error("Runtime read cancelled"),{code:"read_cancelled"});if(e?.timeoutMs!==void 0&&(!Number.isSafeInteger(e.timeoutMs)||e.timeoutMs<=0))throw new Error("Runtime read timeoutMs must be a positive safe integer")}o(Mt,"validateRuntimeDaemonReadOptions");function Ur(e,n){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.sessionId===n}o(Ur,"isRuntimeEventForSession");function zr(e){if(e===null||typeof e!="object"||Array.isArray(e))return;let n=e;if(!(n.code!=="observation_invalidated"||n.reason!=="event_overflow"&&n.reason!=="event_order"&&n.reason!=="delivery_failed"&&n.reason!=="runtime_changed"&&n.reason!=="transport_disconnected"||typeof n.runtimeId!="string"||typeof n.message!="string"))return{code:"observation_invalidated",reason:n.reason,runtimeId:n.runtimeId,message:n.message}}o(zr,"parseRuntimeObservationInvalidation");function xt(e,n){let r=Ot(e);r!==void 0&&n(r)}o(xt,"deliverRuntimeEvent");function Ot(e){let n=dn(e);if(!n.ok){E({source:"runtime.daemon.client",level:"warn",message:`Ignored malformed Runtime event: ${n.error}`});return}return n.event}o(Ot,"parseRuntimeEventForClient");function Vr(e,n,r,t,s){return Dt(e,n,"workflow.subscribe",{filter:r},a=>{t(a)},s)}o(Vr,"subscribeToDaemonWorkflowEvents");function Dt(e,n,r,t,s,a){let d=!1,c,l,m,p,g=new Promise((k,A)=>{m=k,p=A});g.catch(()=>{});let h=[],v,I=o(()=>{d||(d=!0,h.length=0,v?.close(),l?.close(),c!==void 0&&Pt(n,r,c))},"close"),T=o(k=>{if(!d)if(I(),p(k),a)try{a(k)}catch(A){E({source:"runtime.daemon.client",level:"warn",message:"Subscription error listener failed.",detail:String(A)})}else E({source:"runtime.daemon.client",level:"warn",message:`${r} observation stopped.`,detail:k instanceof Error?k.message:String(k)})},"fail");return v=e.subscribe(k=>{if(d||k.method!=="event"&&k.method!=="subscription.error")return;let A=O(k.params);if(c===void 0){if(h.length>=Sn){T(new Error("Subscription handshake notification buffer overflowed; rebuild from a snapshot."));return}h.push({payload:A,failed:k.method==="subscription.error"});return}A.subscriptionId===c&&(k.method==="subscription.error"?T(new Error(_(A,"message"))):s(A.event))}),d&&v.close(),l=e.subscribeLifecycle?.(k=>{k.state==="disconnected"&&T(new Error(k.reason??"Runtime transport disconnected; rebuild the subscription and read a snapshot."))}),d&&l?.close(),n(r,t).then(k=>{if(c=_(O(k),"subscriptionId"),d){Pt(n,r,c);return}for(let{payload:A,failed:R}of h.splice(0)){if(d)break;A.subscriptionId===c&&(R?T(new Error(_(A,"message"))):s(A.event))}d||m()}).catch(T),{ready:g,close(){I(),p(new Error("Subscription closed before registration completed."))}}}o(Dt,"subscribeToDaemonNotification");function yn(e,n){return e("run.await",{runId:n}).then(Gr)}o(yn,"requestRuntimeRunResult");function Gr(e){let n=O(e),r=Object.prototype.hasOwnProperty.call(n,"error")?Jr(n.error):void 0,t={...n};return delete t.error,{...t,...r!==void 0?{error:r}:{}}}o(Gr,"deserializeRuntimeRunResult");function Jr(e){if(e==null)return;if(e instanceof Error)return e;if(typeof e=="string")return new Error(e);let n=O(e),r=new Error(typeof n.message=="string"&&n.message.length>0?n.message:"Runtime run failed.");return typeof n.name=="string"&&n.name.length>0&&(r.name=n.name),typeof n.stack=="string"&&n.stack.length>0&&(r.stack=n.stack),r}o(Jr,"deserializeRuntimeError");function Pt(e,n,r){e(n==="workflow.subscribe"?"workflow.unsubscribe":"learning.unsubscribe",{subscriptionId:r}).catch(s=>{E({source:"runtime.daemon.client",level:"warn",message:"Failed to release a remote subscription.",detail:s instanceof Error?s.message:String(s)})})}o(Pt,"unsubscribeRemote");function ee(e){return e??void 0}o(ee,"nullToUndefined");function O(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Expected daemon response object.");return e}o(O,"requireRecord");function Ct(e,n){let r=e?.sharedSessionSettings;for(let t of["planModeEffort","workMode"])if(n[t]!==void 0&&!(r&&typeof r=="object"&&"keys"in r&&Array.isArray(r.keys)&&r.keys.includes(t)))throw Object.assign(new Error(`Host does not support Session ${t}. Upgrade and restart the Host.`),{code:"daemon_upgrade_required",capability:"sharedSessionSettings",restartRequired:!0})}o(Ct,"assertNewSessionSettingsSupported");function Et(e){let n=e?.runLifecycleControl;if(!n||typeof n!="object"||Array.isArray(n))return!1;let r=n;return Number.isSafeInteger(r.version)&&Number(r.version)>=1&&r.structuredStopReceipt===!0&&r.protocolCancellation===!0&&r.responseAcknowledgement===!0}o(Et,"supportsRunLifecycleControl");function At(e){let n=e?.providerCredentialBroker;return n!==null&&typeof n=="object"&&!Array.isArray(n)&&"version"in n&&Number.isSafeInteger(n.version)&&Number(n.version)>=2}o(At,"supportsScopedCredentialBroker");function Tt(e,n){let r;try{r=O(e)}catch{throw new ue}let t=r.runId,s=r.sessionId,a=r.accepted,d=r.state,c=r.outcome,l=r.phase,m=r.revision,p=["unknown","confirmed"],g=["unknown","cancelled","interrupted","completed","failed"],h=["queued","running","waiting_agent","recovering","waiting_permission","waiting_user_input","unknown","completed","failed","cancelled","interrupted"];if(typeof a!="boolean"||typeof t!="string"||t.length===0||t!==n||typeof s!="string"||s.length===0||typeof d!="string"||!p.includes(d)||typeof c!="string"||!g.includes(c)||typeof l!="string"||!h.includes(l)||!Number.isSafeInteger(m)||Number(m)<0)throw new ue;return{runId:t,sessionId:s,accepted:a,state:d,outcome:c,phase:l,revision:Number(m)}}o(Tt,"parseRuntimeRunStopReceipt");function _(e,n){let r=e[n];if(typeof r!="string"||r.length===0)throw new Error(`Expected daemon response string field: ${n}`);return r}o(_,"requireStringField");function ne(e,n){let r=e[n];if(r!=null){if(typeof r!="string")throw new Error(`Expected daemon response optional string field: ${n}`);return r}}o(ne,"optionalStringField");function V(e,n,r=new WeakSet){if(e==null||typeof e=="string"||typeof e=="boolean")return;if(typeof e=="number"){if(Number.isFinite(e))return;throw new oe(n,`${n} is not transport-safe: numbers must be finite.`)}if(typeof e=="function"||typeof e=="symbol"||typeof e=="bigint")throw new oe(n,`${n} is not transport-safe: ${typeof e} values cannot cross a Runtime boundary.`);if(typeof e!="object")return;if(r.has(e))throw new oe(n,`${n} is not transport-safe: cyclic values cannot cross a Runtime boundary.`);let t=Object.getPrototypeOf(e);if(!Array.isArray(e)&&t!==Object.prototype&&t!==null){let s=t?.constructor?.name??"object";throw new oe(n,`${n} is not transport-safe: ${s} instances cannot cross a Runtime boundary.`)}if(r.add(e),Array.isArray(e))e.forEach((s,a)=>V(s,`${n}[${a}]`,r));else for(let[s,a]of Object.entries(e))V(a,`${n}.${s}`,r);r.delete(e)}o(V,"assertRuntimeTransportSafe");function _t(e){if(typeof e!="string"||!/^[a-f0-9]{64}$/.test(e))throw new Error("Invalid credential connection fingerprint.");return e}o(_t,"parseCredentialConnectionFingerprint");function Qr(e){if(e!==1)throw new Error("Unsupported credential context version.");return 1}o(Qr,"parseCredentialContextVersion");var se="kodax-runtime-daemon",Fe=1,Le=["session.facts.read","session.facts.requests","session.facts.tools","client.exit.request","client.exit.read","client.exit.pending","initialize","runtime.initialize","ping","runtime.identity","runtime.status","runtime.shutdown","runtime.capabilities","daemon.status","daemon.stop","daemon.logs","daemon.preflight","daemon.management.get","session.create","session.promote","session.load","session.promotion.read","session.list","session.status","session.transcript","session.transcript.page","session.transcript.entryChunk","session.transcript.search","session.conversation","session.conversation.page","session.conversation.entryChunk","session.observe","session.view.observe","session.view.close","session.view.item","session.diagnostics","session.fork","session.recover","session.notice.append","session.goal.get","session.lineage.get","session.lineage.label","session.goal.create","session.goal.pause","session.goal.resume","session.goal.clear","session.rewind","session.identityAlias.confirm","session.active_entry.set","session.activeEntry.set","session.compact","session.archive","session.unarchive","session.cancel","session.delete","session.settings.get","session.settings.getVersioned","session.autoMode.getStats","session.settings.update","session.settings.updateVersioned","input.submit","input.withdraw","run.start","run.recover","run.input.submit","input.read","run.get","run.list","run.await","run.abort","run.model.set","run.provider.set","run.reasoning.set","run.setModel","run.setProvider","run.setReasoning","request.cancel","request.ack","subscription.close","permission.grants.list","permission.grants.revoke","interaction.list","interaction.respond","execution.register","execution.revoke","execution.complete","credential.register","credential.get","credential.revoke","credential.supply","host_tool.register","host_tool.get","host_tool.invocation.get","host_tool.revoke","host_tool.complete","workflow.list","workflow.get","workflow.subscribe","workflow.unsubscribe","workflow.pause","workflow.resume","workflow.stop","workflow.start","learning.list","learning.get","learning.snapshot","learning.events","learning.subscribe","learning.unsubscribe","learning.acknowledge","learning.snooze","learning.reject","learning.disable","learning.rollback","learning.promote","learning.review","learning.trust","config.read","config.effective","config.patch","config.reload","model.list","provider.list","provider.reasoning.efforts","provider.reasoning.probe","provider.capabilities.forget","provider.custom.list","provider.custom.upsert","provider.custom.remove","mcp.server.list","mcp.server.status","mcp.server.get","mcp.server.validate","mcp.server.upsert","mcp.server.delete","mcp.server.remove","mcp.server.reload","mcp.tool.list","extension.list","tool.catalog","repo.intelligence.inspect","repo.intelligence.prewarm","extension.reload","command.list","command.resolve","skill.list","skill.describe","skill.read","memory.describe","memory.listReviews","memory.listInbox","memory.showProposal","memory.listRefs","memory.readRef","memory.remember","memory.forgetRef","memory.approveProposal","memory.rejectProposal","memory.rebuild","memory.ensureOpenTarget","invocations.prepareSkill","invocations.prepareCommand","invocations.readCommandPrompt","invocations.executeCommand","invocations.startReview","invocations.startAgentsLean","invocations.prepareReview","invocations.prepareAgentsLean","artifact.create","artifact.get","artifact.delete","agentRegistrations.list","agentRegistrations.upsert","agentRegistrations.setEnabled","agentRegistrations.remove","agents.listDispatchable","agents.describe","agents.preflight","agents.tree","agents.detail","agents.spawn","agents.send","agents.followup","agents.interrupt","agents.output","agents.events","agents.wait"],Yr=["invocations.executeCommand","invocations.startReview","invocations.startAgentsLean","invocations.prepareSkill","runtime.shutdown","daemon.stop","memory.remember","memory.forgetRef","memory.approveProposal","memory.rejectProposal","memory.rebuild","memory.ensureOpenTarget","invocations.prepareReview","session.goal.create","session.goal.pause","session.goal.resume","session.goal.clear","session.create","session.promote","session.fork","session.recover","session.notice.append","session.rewind","session.identityAlias.confirm","session.active_entry.set","session.activeEntry.set","session.lineage.label","session.compact","session.archive","session.unarchive","session.cancel","session.delete","session.settings.update","session.settings.updateVersioned","input.submit","input.withdraw","run.start","run.recover","run.input.submit","run.abort","run.model.set","run.provider.set","run.reasoning.set","run.setModel","run.setProvider","run.setReasoning","permission.grants.revoke","interaction.respond","workflow.pause","workflow.resume","workflow.stop","workflow.start","learning.acknowledge","learning.snooze","learning.reject","learning.disable","learning.rollback","learning.promote","learning.review","learning.trust","config.patch","config.reload","provider.custom.upsert","provider.custom.remove","mcp.server.upsert","mcp.server.delete","mcp.server.remove","mcp.server.reload","extension.reload","artifact.create","artifact.delete","agentRegistrations.upsert","agentRegistrations.setEnabled","agentRegistrations.remove","agents.spawn","agents.send","agents.followup","agents.interrupt"],Zr=["permission.request","permission.list","permission.listPending","permission.respond","user_input.listPending","user_input.respond","user_input.dismiss","agentTasks.list","agentTasks.start","agentTasks.get","agentTasks.events","agentTasks.wait","agentTasks.sendInput","agentTasks.cancel","agentTasks.reconcile"],ei=new Set([...Le,...Zr]),da=new Set(Yr);var ni=new Set(["subscription.error","session.view","event","observation.invalidated","execution.resolve","credential.request","host_tool.invoke","runtime.warning"]),ti=new Set(["execution_mode_mismatch","execution_binding_unavailable","execution_binding_rejected","execution_binding_changed","default_skill_unavailable","invalid_frame","invalid_request","invalid_params","not_initialized","method_not_found","unauthorized","permission_denied","conflict","not_found","session_not_admitted","cancelled","overloaded","client_upgrade_required","resync_required","read_timeout","read_cancelled","data_changed","observation_invalidated","runtime_changed","data_corrupt","version_incompatible","credential_unavailable","host_tool_unavailable","host_tool_unknown","internal_error"]);function In(e,n,r){return{protocol:se,version:1,kind:"request",id:e,method:n,...r!==void 0?{params:r}:{}}}o(In,"createRuntimeDaemonRequest");function Nt(e,n){return{protocol:se,version:1,kind:"error",...n!==void 0?{id:n}:{},error:e}}o(Nt,"createRuntimeDaemonErrorResponse");function qt(e){if(!Ke(e))return!1;let n=e;return n.kind==="request"&&typeof n.id=="string"&&n.id.length>0&&typeof n.method=="string"&&ei.has(n.method)}o(qt,"isRuntimeDaemonRequest");function bn(e){if(!Ke(e))return!1;let n=e;return n.kind==="response"&&typeof n.id=="string"&&n.id.length>0&&Object.prototype.hasOwnProperty.call(n,"result")}o(bn,"isRuntimeDaemonSuccessResponse");function kn(e){if(!Ke(e))return!1;let n=e;return n.kind==="error"&&(n.id===void 0||typeof n.id=="string")&&ii(n.error)}o(kn,"isRuntimeDaemonErrorResponse");function xn(e){if(!Ke(e))return!1;let n=e;return n.kind==="notification"&&typeof n.method=="string"&&ni.has(n.method)}o(xn,"isRuntimeDaemonNotification");function ri(e){return qt(e)||bn(e)||kn(e)||xn(e)}o(ri,"isRuntimeDaemonFrame");function Ft(e){let n;try{n=JSON.parse(e)}catch{return jt("Frame is not valid JSON.")}return ri(n)?n:jt("Frame does not match the runtime daemon protocol.")}o(Ft,"parseRuntimeDaemonFrame");function jt(e){return Nt({code:"invalid_frame",message:e})}o(jt,"invalidFrame");function Ke(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let n=e;return n.protocol===se&&n.version===1}o(Ke,"isFrameBase");function ii(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let n=e;return typeof n.code=="string"&&ti.has(n.code)&&typeof n.message=="string"}o(ii,"isRuntimeDaemonError");import{createHash as oi,randomUUID as ce}from"node:crypto";import*as En from"node:net";import si from"node:os";import Lt from"node:path";import{StringDecoder as Pn}from"node:string_decoder";var Kt=8*1024*1024,le=class extends Error{constructor(r,t,s){super(r);this.code=t;this.data=s;this.name="RuntimeDaemonTransportError"}code;data;static{o(this,"RuntimeDaemonTransportError")}};function An(e){return e instanceof le}o(An,"isRuntimeDaemonTransportError");var me=class extends Error{constructor(r,t,s,a,d){super(r,d);this.code=t;this.connectionId=s;this.reconnectable=a;this.name="RuntimeDaemonDisconnectError"}code;connectionId;reconnectable;static{o(this,"RuntimeDaemonDisconnectError")}};function Tn(e){return e instanceof me}o(Tn,"isRuntimeDaemonDisconnectError");function He(e="default",n){let r=at(e),t=n===void 0?r:`${r}-${ai(Lt.resolve(n))}`;return process.platform==="win32"?{kind:"pipe",path:`\\\\.\\pipe\\kodax-runtime-${t}`}:{kind:"unix",path:Lt.join(si.tmpdir(),`kodax-runtime-${process.getuid?.()??"user"}-${t}.sock`)}}o(He,"defaultRuntimeDaemonEndpoint");function ai(e){return oi("sha256").update(e).digest("hex").slice(0,12)}o(ai,"shortPathHash");function di(e,n={}){let r="",t=0,s=new Pn("utf8"),a=n.maxFrameBytes??Kt;if(!Number.isSafeInteger(a)||a<=0)throw new Error("Runtime daemon maxFrameBytes must be a positive safe integer.");let d=o(l=>{Bt(l,a),l.trim()&&e(Ft(l))},"consumeLine"),c=o(l=>{r+=l,t+=Buffer.byteLength(l,"utf8")},"append");return{push(l){for(typeof l=="string"?(c(s.end()),s=new Pn("utf8"),c(l)):c(s.write(l));;){let m=r.indexOf(`
|
|
8
|
-
`);if(m<0)break;let p=r.slice(0,m).replace(/\r$/,""),g=r.slice(0,m+1);r=r.slice(m+1),t-=Buffer.byteLength(g,"utf8"),d(p)}Ht(t,a)},flush(){c(s.end()),s=new Pn("utf8");let l=r.trim();r="",t=0,l.length>0&&d(l)}}}o(di,"createRuntimeDaemonFrameParser");async function fe(e,n={}){n.signal?.throwIfAborted();let r=En.createConnection(e.path);r.setEncoding("utf8");let t=new Promise(R=>{r.once("close",()=>R())});await li(r,n.connectTimeoutMs,n.signal);let s=n.maxFrameBytes??Kt,a=!1,d=`transport_${ce().replace(/-/g,"")}`,c=ce().replace(/-/g,"")+ce().replace(/-/g,""),l=`connection_${ce().replace(/-/g,"")}`,m=new Set,p=new Set,g={state:"connected",connectionId:l,reconnectable:!1},h,v=o((R,S,C,w)=>{if(h!==void 0)return h;h=new me(S,R,l,C,w===void 0?void 0:{cause:w}),g={state:"disconnected",connectionId:l,code:R,reason:S,reconnectable:C};for(let P of p)try{P(g)}catch{E({source:"runtime.daemon.transport",level:"warn",message:"Runtime transport lifecycle listener failed."})}return h},"disconnect"),I=new Map,T=!1,k=o((R,S)=>{if(!T||a||r.destroyed)return;let w=In(`${R==="request.ack"?"ack":"cancel"}_${ce().replace(/-/g,"").slice(0,12)}`,R,{requestId:S});r.write(`${JSON.stringify(w)}
|
|
9
|
-
`)},"sendRequestLifecycleFrame"),A=di(R=>{if(bn(R)){let S=I.get(R.id);if(S){I.delete(R.id),S.cleanup(),ci(R.result)&&(T=!0),k("request.ack",R.id),S.resolve(R.result);return}R.id.startsWith("req_")&&k("request.cancel",R.id);return}if(kn(R)){if(!R.id)return;let S=I.get(R.id);S&&(I.delete(R.id),S.cleanup(),S.reject(new le(R.error.message,R.error.code,R.error.data)));return}if(xn(R))for(let S of m)try{S(R)}catch{E({source:"runtime.daemon.transport",level:"warn",message:"Runtime transport notification listener failed."})}},{maxFrameBytes:n.maxFrameBytes});return r.on("data",R=>{try{A.push(R)}catch(S){a=!0;let C=Cn(S),w=v("invalid_frame",C.message,!0,C);Be(I,w),r.destroy(C)}}),r.on("close",()=>{a=!0;let R=v("protocol_closed","Runtime daemon transport closed.",!0);Be(I,R)}),r.on("error",R=>{a=!0;let S=v("transport_error",R.message,!0,R);Be(I,S)}),{request(R,S,C){if(a)return Promise.reject(h??new me("Runtime daemon transport is closed.","protocol_closed",l,!0));let w=`req_${ce().replace(/-/g,"").slice(0,12)}`,P=R==="initialize"||R==="runtime.initialize"?ui(S,d,c):S,b=In(w,R,P),M;try{M=JSON.stringify(b),Bt(M,s)}catch(f){return An(f)?Promise.reject(f):Promise.reject(new le(`Runtime daemon request params are not JSON-serializable: ${Cn(f).message}`,"invalid_params"))}let K,U=!1,i=o(()=>{K!==void 0&&C?.signal?.removeEventListener("abort",K)},"cleanup"),u=new Promise((f,y)=>{let x={resolve:f,reject:y,cleanup:i};I.set(w,x),C?.signal!==void 0&&(K=o(()=>{I.get(w)===x&&(I.delete(w),i(),U&&!r.destroyed&&k("request.cancel",w),y(mi(C.signal?.reason)))},"abort"),C.signal.addEventListener("abort",K,{once:!0}),C.signal.aborted&&K())});return C?.signal?.aborted||(r.write(`${M}
|
|
10
|
-
`),U=!0),u},subscribe(R){return m.add(R),{close(){m.delete(R)}}},subscribeLifecycle(R){return p.add(R),R(g),{close(){p.delete(R)}}},async close(){let R;if(!a){a=!0;let S=v("client_closed","Runtime daemon transport closed by client.",!1);try{A.flush()}catch(C){R=Cn(C)}r.end(),r.destroy(),Be(I,S)}if(await t,p.clear(),R!==void 0)throw R}}}o(fe,"createRuntimeDaemonSocketClientTransport");function ui(e,n,r){let t=Se(e)??{},s=Se(t.clientInfo)??{name:"kodax-transport"};return{...t,clientInfo:{...s,instanceId:typeof s.instanceId=="string"?s.instanceId:n,instanceSecret:typeof s.instanceSecret=="string"?s.instanceSecret:r}}}o(ui,"withClientInstanceIdentity");function Se(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}o(Se,"asRecord");function ci(e){let n=Se(e),r=Se(n?.capabilities),t=Se(r?.runLifecycleControl);return t!==void 0&&Number.isSafeInteger(t.version)&&Number(t?.version)>=1&&t.structuredStopReceipt===!0&&t.protocolCancellation===!0&&t.responseAcknowledgement===!0}o(ci,"runtimeDaemonSupportsRequestLifecycle");function Bt(e,n){Ht(Buffer.byteLength(e,"utf8"),n)}o(Bt,"assertFrameSize");function Ht(e,n){if(!(e<=n))throw new le(`Runtime daemon frame exceeds the ${n}-byte limit.`,"invalid_frame",{actualBytes:e,maxFrameBytes:n})}o(Ht,"assertFrameByteSize");function li(e,n=2e3,r){return new Promise((t,s)=>{let a=setTimeout(()=>{d(),e.destroy(),s(Object.assign(new Error("Timed out connecting to runtime daemon."),{code:"ETIMEDOUT"}))},n);a.unref?.();let d=o(()=>{clearTimeout(a),e.off("connect",c),e.off("error",l),r?.removeEventListener("abort",m)},"cleanup"),c=o(()=>{d(),t()},"onConnect"),l=o(p=>{d(),s(p)},"onError"),m=o(()=>{d(),e.destroy(),s(r?.reason)},"onAbort");e.once("connect",c),e.once("error",l),r?.addEventListener("abort",m,{once:!0}),r?.aborted&&m()})}o(li,"waitForConnect");function Be(e,n){for(let r of e.values())r.cleanup(),r.reject(n);e.clear()}o(Be,"rejectPending");function mi(e){return e instanceof Error?e:new Error("Runtime daemon request cancelled.")}o(mi,"normalizeTransportAbortReason");function Cn(e){return e instanceof Error?e:new Error(String(e))}o(Cn,"normalizeTransportError");async function ve(e,n={}){let r=rn(e);if(!r)return{pidAlive:!1,endpointReachable:!1,identityMatches:!1};let t=B(e.lockFile),s=o(()=>n.isPidAlive?n.isPidAlive(r.pid):Ie(r.pid,_n(t,r)?t?.processStartIdentity:void 0),"readPidAlive"),a=$e(r),d=Me(e),c;try{c=await(n.createTransport?n.createTransport(a):fe(a,{connectTimeoutMs:n.connectTimeoutMs??1e3}));let l=c.request("initialize",{profile:r.profile,connectionPurpose:n.connectionPurpose??"probe",...d!==void 0?{token:d}:{}});l.catch(()=>{});let m=await fi(l,n.handshakeTimeoutMs??1e3,"Timed out waiting for runtime daemon handshake."),p=s(),g=r;if(r.status==="starting"){let h=rn(e),v=B(e.lockFile);h?.status==="ready"&&h.runtimeId===r.runtimeId&&h.pid===r.pid&&h.profile===r.profile&&h.endpoint===r.endpoint&&_n(v,h)&&v?.createdAt===t?.createdAt&&v?.processStartIdentity===t?.processStartIdentity&&(g=h)}return{state:g,initialization:m,pidAlive:p,endpointReachable:!0,identityMatches:pi(m,r)&&_n(t,r),...t!==void 0?{observedLockOwner:t}:{}}}catch(l){return An(l)&&l.code==="unauthorized"?{state:r,pidAlive:s(),endpointReachable:!0,identityMatches:!1,...t!==void 0?{observedLockOwner:t}:{}}:{state:r,pidAlive:s(),endpointReachable:!1,identityMatches:!1,...t!==void 0?{observedLockOwner:t}:{}}}finally{await c?.close?.()}}o(ve,"observeRuntimeDaemonHealth");function $e(e){return{kind:process.platform==="win32"||e.endpoint.startsWith("\\\\.\\pipe\\")?"pipe":"unix",path:e.endpoint}}o($e,"runtimeDaemonEndpointFromState");function Ie(e,n){return Oe({pid:e,processStartIdentity:n})!=="gone"}o(Ie,"isRuntimeDaemonOwnerPidAlive");async function fi(e,n,r){let t;try{return await Promise.race([e,new Promise((s,a)=>{t=setTimeout(()=>a(new Error(r)),n),t.unref?.()})])}finally{t!==void 0&&clearTimeout(t)}}o(fi,"withTimeout");function pi(e,n){let r=$t(e),t=$t(r?.identity)??r;return t?.runtimeId===n.runtimeId&&t.profile===n.profile}o(pi,"daemonIdentityMatchesState");function _n(e,n){return e?.runtimeId===n.runtimeId&&e.pid===n.pid}o(_n,"runtimeDaemonLockMatchesState");function $t(e){if(!(e===null||typeof e!="object"||Array.isArray(e)))return e}o($t,"asRecord");var gi=15e3,yi=25;async function hi(e){if(!Number.isSafeInteger(e.owner.pid)||e.owner.pid<=0)throw new Error("Runtime daemon shutdown verification requires a positive owner PID.");let n=e.timeoutMs??gi,r=e.pollIntervalMs??yi;if(!Number.isSafeInteger(n)||n<=0)throw new Error("Runtime daemon shutdown verification timeout must be positive.");if(!Number.isSafeInteger(r)||r<=0)throw new Error("Runtime daemon shutdown verification poll interval must be positive.");if(e.owner.processStartIdentity!==void 0&&(typeof e.owner.processStartIdentity!="string"||e.owner.processStartIdentity.length===0))throw new Error("Runtime daemon process identity must be non-empty when provided.");if(e.owner.processContainment==="windows-job"&&(!Number.isSafeInteger(e.owner.supervisorPid)||e.owner.supervisorPid<=0))throw new Error("Windows Job containment requires a positive supervisor PID.");if(e.owner.supervisorProcessStartIdentity!==void 0&&(e.owner.processContainment!=="windows-job"||typeof e.owner.supervisorProcessStartIdentity!="string"||e.owner.supervisorProcessStartIdentity.length===0))throw new Error("A supervisor process identity requires Windows Job containment and must be non-empty.");let t=Z(e.configHome,e.profile??"default"),s=Date.now()+n,a="outcome_missing";for(;;){let d=B(t.lockFile),c=d?.kind==="daemon"&&Ie(d.pid,d.processStartIdentity)&&(d.runtimeId!==e.owner.runtimeId||d.pid!==e.owner.pid)?d:void 0,l=dt(t,e.owner),m=Ie(e.owner.pid,e.owner.processStartIdentity),p=e.owner.processContainment==="windows-job"&&Ie(e.owner.supervisorPid,e.owner.supervisorProcessStartIdentity);if(l?.status==="failed")return{status:"failed",outcome:l};if(process.platform==="win32"&&e.owner.processContainment!=="windows-job")return{status:"unverified",reason:"containment_unavailable"};if(l?.status==="succeeded"&&!m&&!p)return c!==void 0?{status:"replacement_running",runtimeId:c.runtimeId,pid:c.pid}:{status:"succeeded",outcome:l};if(a=m?"daemon_active":p?"containment_active":"outcome_missing",Date.now()>=s)return{status:"unverified",reason:a};await Ri(Math.min(r,Math.max(1,s-Date.now())))}}o(hi,"waitForRuntimeDaemonShutdown");function Ri(e){return new Promise(n=>setTimeout(n,e))}o(Ri,"delay");import{existsSync as wi,readFileSync as Si}from"node:fs";import be from"node:path";import{fileURLToPath as vi}from"node:url";var ke;function Xt(){if(!ke){let e=be.dirname(vi(import.meta.url)),n=process.env.KODAX_BUNDLED==="true"?[be.join(be.dirname(process.execPath),"runtime-daemon-schema.json")]:[be.join(e,"runtime-daemon-schema.json"),be.join(e,"..","runtime-daemon-schema.json")];if(ke=JSON.parse(Si(n.find(wi)??n[0],"utf8")),ke.protocol!==se||ke.version!==1)throw new Error("Runtime daemon schema resource version mismatch.")}return ke}o(Xt,"loadSchemaResource");var Ii={type:"boolean"};var Oa=zt({ok:Ii},["ok"]),Da=zt({}),Mn=Xt().methods,Wt=Xt().notifications,Ut={protocol:se,version:1,methods:Mn,notifications:Wt},bi=JSON.stringify(Ut,null,2);function ki(){return Le}o(ki,"listRuntimeDaemonSchemaMethods");function zt(e,n=[],r=!1){return{type:"object",properties:e,required:n,additionalProperties:r}}o(zt,"objectSchema");function G(e){let n;return r=>{if(e===void 0)return;let t=r.stage==="waiting"?`${r.stage}:${r.reason}`:r.stage==="initializing"?`${r.stage}:${r.phase}`:r.stage;if(n===t)return;n=t;let s=o(a=>{E({source:"client.startup-progress",level:"warn",message:"Startup progress observer failed.",detail:a})},"reportFailure");try{let a=e(r);a!==void 0&&Promise.resolve(a).catch(s)}catch(a){s(a)}}}o(G,"createClientStartupProgressReporter");import{createHash as xi}from"node:crypto";import{closeSync as Pi,fstatSync as Ci,openSync as Ei,readSync as Ai,readdirSync as Ti,realpathSync as Vt,statSync as Gt}from"node:fs";import F from"node:path";import{fileURLToPath as _i}from"node:url";function Dn(e=import.meta.url,n=process.env.KODAX_BUNDLED==="true"){if(n)return;let r=_i(e),t=F.dirname(r);return r.endsWith(".ts")?F.join(t,"kodax_cli.ts"):F.join(F.basename(t)==="chunks"?F.dirname(t):t,"kodax_cli.js")}o(Dn,"resolveDaemonCliEntry");var Mi=new Set([".git","node_modules","docs","tests","__tests__","types-chunks","binary"]);function Oi(e){return!(/\.(?:test|spec)\.[^.]+$|\.d\.[cm]?ts$|\.map$|\.tsbuildinfo$/u.test(e)||/^(?:bundle-meta|bun-build-metadata)\.json$/u.test(e)||/^(?:README|CHANGELOG|LICENSE|NOTICE)(?:[.-]|$)/iu.test(e))}o(Oi,"isRuntimeFile");function Xe(e,n,r=new Set){let t=Vt(e);if(r.has(t))throw new Error(`Runtime build contains a directory cycle: ${e}`);let s=new Set(r).add(t);for(let a of Ti(e,{withFileTypes:!0})){let d=F.join(e,a.name),c=a.isSymbolicLink()?Gt(d):a;c.isDirectory()?Mi.has(a.name)||Xe(d,n,s):c.isFile()&&Oi(a.name)&&n.add(d)}}o(Xe,"collectRuntimeFiles");function On(e,n){let r=Gt(e,{throwIfNoEntry:!1});r?.isDirectory()?Xe(e,n):r?.isFile()&&n.add(e)}o(On,"addOptionalFileOrDirectory");function Di(e,n,r,t){let s=Ei(n,"r");try{e.update(`${r}\0${Ci(s).size}\0`);let a;for(;(a=Ai(s,t,0,t.length,null))>0;)e.update(t.subarray(0,a))}finally{Pi(s)}}o(Di,"hashRuntimeFile");function jn(e=Dn()??process.execPath){let n=Vt(e),r=n.endsWith(".ts"),t=n.endsWith(".js"),s=F.dirname(n),a=r||t?F.dirname(s):s,d=new Set([n]);if(r||t){Xe(s,d),d.add(F.join(a,"package.json"));for(let p of["package-lock.json","config-templates","scripts/production-env.cjs","scripts/kodax-bin.cjs"])On(F.join(a,p),d);if(r){let p=`${process.platform}-${process.arch}`;for(let g of["native","dist/native"])On(F.join(a,g,p),d);for(let g of["llm","agent","coding","repl"]){let h=F.join(a,"packages",g);d.add(F.join(h,"package.json")),Xe(F.join(h,"dist"),d)}}}else for(let p of["builtin","vendor","native","provider-capabilities.json","manual-topics.json","semantic-worker.js","constructed-handler-worker.js","sandbox-network-broker.js"])On(F.join(a,p),d);let c=xi("sha256"),l=[...d].map(p=>({file:p,relative:F.relative(a,p).replaceAll("\\","/")})).sort((p,g)=>p.relative<g.relative?-1:p.relative>g.relative?1:0),m=Buffer.allocUnsafe(64*1024);for(let{file:p,relative:g}of l)Di(c,p,g,m);return{origin:process.platform==="win32"?n.toLowerCase():n,fingerprint:c.digest("hex")}}o(jn,"readRuntimeBuildIdentity");var ae=Object.freeze(jn());import{AsyncLocalStorage as ji}from"node:async_hooks";var Ya=new ji;import{createHash as Xp,randomUUID as wr}from"node:crypto";function Gi(e){let{provider:n,model:r,effort:t,planModeEffort:s,thinking:a,reasoningMode:d,permissionMode:c,agentMode:l,autoModeClassifierModel:m,compactionTriggerPercent:p,compactionTriggerTokens:g,maxIter:h,compactionReasoning:v,repoIntelligenceMode:I,repoIntelligenceTrace:T,workMode:k}=e;return{provider:n,model:r,effort:t,thinking:a,reasoningMode:d,permissionMode:c,agentMode:l,...s!==void 0?{planModeEffort:s}:{},autoModeClassifierModel:m,compactionTriggerPercent:p,compactionTriggerTokens:g,maxIter:h,...v!==void 0?{compactionReasoning:v}:{},...I!==void 0?{repoIntelligenceMode:I}:{},...T!==void 0?{repoIntelligenceTrace:T}:{},...k!==void 0?{workMode:k}:{}}}o(Gi,"toClientSessionSettings");var Jt=["provider","model","effort","planModeEffort","thinking","reasoningMode","permissionMode","agentMode","locale","providerModels","extensions","fallbackProviders","repoIntelligenceMode","repoIntelligenceTrace","stallLog","fastProvider","fastModel","deepProvider","deepModel","maxOutputTokens","disablePromptCache","lsp","lspAutoDownload","acpLogLevel","sessionRetentionDays","repoIntelligence","workflow"],Ji=Object.fromEntries(Jt.map(e=>[e,["fallbackProviders","stallLog"].includes(e)?"immediate":e==="extensions"?"extension_reload":["locale","providerModels","lspAutoDownload","acpLogLevel","sessionRetentionDays","repoIntelligence"].includes(e)?"restart":"next_run"]));function Qi(e){if(!e||typeof e!="object")return{};let n=e;return Object.fromEntries(Jt.filter(r=>n[r]!==void 0).map(r=>[r,structuredClone(n[r])]))}o(Qi,"toClientConfig");var Yt=Object.freeze({version:6,owner:"session-runtime",sandboxFirst:!0,sandboxCompletionAuthority:!0,hostBoundaryReviewOnly:!0,escalationCreatesPermission:!1,automaticUserPromptOnDeny:!1,defaultClassifierTimeoutMs:rt,retryClassifierTimeoutMs:it,maxClassifierAttempts:2,boundedClassifierInput:!0,diagnosticsVersion:1,permissionGrantSuggestions:!0,concretePermissionMatchers:!0,clientScopeExpansion:!1,exactTextMutationApproval:!0,livePermissionContext:!0});import*as j from"node:fs";import is from"node:os";import Q from"node:path";var so=["read","grep","glob"],ao=["write","edit","multi_edit","insert_after_anchor"];var $u=new Set([...so,...ao]);import{execFile as lo}from"node:child_process";import{promisify as mo}from"node:util";var Ec=mo(lo);import{spawn as Mo}from"node:child_process";import{randomUUID as dr}from"node:crypto";import{appendFileSync as Vc,closeSync as ur,existsSync as Pe,ftruncateSync as Oo,openSync as cr,readFileSync as Gc,readSync as Do,renameSync as jo,statSync as lr,unlinkSync as mr,writeFileSync as No,writeSync as qo}from"node:fs";import Fo from"node:os";import J from"node:path";import{spawn as fo}from"node:child_process";import{randomUUID as xe}from"node:crypto";import{readFileSync as po,rmSync as We,writeFileSync as go}from"node:fs";import Nn from"node:os";import qn from"node:path";var yo=15e3,ze="KODAX_INTERNAL_WINDOWS_JOB_LAUNCH",Ve="KODAX_INTERNAL_WINDOWS_JOB_READY_FILE",Ue="KODAX_INTERNAL_WINDOWS_JOB_SCRIPT_FILE",Zt="KODAX_INTERNAL_WINDOWS_JOB_TEST_OWNER_AFTER_READY",Fn="KODAX_INTERNAL_WINDOWS_JOB_HANDOFF",ho=String.raw`
|
|
11
|
-
const { spawn } = require('node:child_process');
|
|
12
|
-
const { appendFileSync, closeSync, existsSync, openSync, readFileSync, rmSync, writeFileSync } = require('node:fs');
|
|
13
|
-
const readyFile = process.env.${Ve};
|
|
14
|
-
const scriptFile = process.env.${Ue};
|
|
15
|
-
const handoffFile = process.env.${Fn};
|
|
16
|
-
const logFile = JSON.parse(Buffer.from(process.env.${ze}, 'base64').toString('utf8')).logFile;
|
|
17
|
-
const childEnv = { ...process.env };
|
|
18
|
-
delete childEnv.${Ue};
|
|
19
|
-
delete childEnv.${Zt};
|
|
20
|
-
// The supervisor needed Bun runtime mode for its own -e entrypoint; the
|
|
21
|
-
// contained daemon must run as the ordinary KodaX CLI instead.
|
|
22
|
-
delete childEnv.BUN_BE_BUN;
|
|
23
|
-
const fail = (message) => {
|
|
24
|
-
if (!existsSync(readyFile)) writeFileSync(readyFile, 'ERROR:' + message);
|
|
25
|
-
};
|
|
26
|
-
let child;
|
|
27
|
-
let childExited = false;
|
|
28
|
-
let phase = 'candidate';
|
|
29
|
-
const reportError = (error) => {
|
|
30
|
-
try { appendFileSync(logFile, 'Windows Job startup control failed: ' + error.message + '\n'); }
|
|
31
|
-
catch (logError) { process.stderr.write(String(logError) + '\n'); }
|
|
32
|
-
};
|
|
33
|
-
const cleanHandoff = () => {
|
|
34
|
-
if (!handoffFile) return;
|
|
35
|
-
try { rmSync(handoffFile, { force: true }); }
|
|
36
|
-
catch (error) { reportError(error); }
|
|
37
|
-
};
|
|
38
|
-
const cleanReady = () => {
|
|
39
|
-
try { rmSync(readyFile, { force: true }); }
|
|
40
|
-
catch (error) { reportError(error); }
|
|
41
|
-
};
|
|
42
|
-
const cleanScript = () => {
|
|
43
|
-
try { rmSync(scriptFile, { force: true }); }
|
|
44
|
-
catch (error) { reportError(error); }
|
|
45
|
-
};
|
|
46
|
-
const cleanAfterExit = async () => {
|
|
47
|
-
if (!handoffFile) return;
|
|
48
|
-
cleanScript();
|
|
49
|
-
if (phase === 'aborting') {
|
|
50
|
-
// The wrapper owns this ready file until teardown. Missing publication
|
|
51
|
-
// proves the suspended target was never resumed; malformed data does not.
|
|
52
|
-
let targetPid;
|
|
53
|
-
try {
|
|
54
|
-
const ready = JSON.parse(readFileSync(readyFile, 'utf8'));
|
|
55
|
-
if (!Number.isSafeInteger(ready.processPid) || ready.processPid <= 0
|
|
56
|
-
|| ready.containmentSupervisorPid !== child.pid) throw new Error('Cannot verify startup target identity after Job owner exit.');
|
|
57
|
-
targetPid = ready.processPid;
|
|
58
|
-
} catch (error) {
|
|
59
|
-
if (error.code !== 'ENOENT') { reportError(error); return; }
|
|
60
|
-
}
|
|
61
|
-
const deadline = Date.now() + 2000;
|
|
62
|
-
while (targetPid !== undefined) {
|
|
63
|
-
try { process.kill(targetPid, 0); }
|
|
64
|
-
catch (error) {
|
|
65
|
-
if (error.code === 'ESRCH') break;
|
|
66
|
-
reportError(error); return;
|
|
67
|
-
}
|
|
68
|
-
if (Date.now() >= deadline) {
|
|
69
|
-
reportError(new Error('Startup target did not exit; preserving abort marker.'));
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
cleanHandoff();
|
|
76
|
-
cleanReady();
|
|
77
|
-
};
|
|
78
|
-
const stopCandidate = () => {
|
|
79
|
-
if (childExited || phase === 'aborting') return 'terminating';
|
|
80
|
-
if (phase === 'persistent') return 'retained';
|
|
81
|
-
if (handoffFile) {
|
|
82
|
-
// Only this wrapper and the trusted target create the one-shot marker.
|
|
83
|
-
// After observing commit, remember it before removing the marker.
|
|
84
|
-
let descriptor;
|
|
85
|
-
try { descriptor = openSync(handoffFile, 'wx', 0o600); }
|
|
86
|
-
catch (error) {
|
|
87
|
-
if (error.code !== 'EEXIST') throw error;
|
|
88
|
-
phase = 'persistent';
|
|
89
|
-
cleanHandoff();
|
|
90
|
-
cleanReady();
|
|
91
|
-
cleanScript();
|
|
92
|
-
return 'retained';
|
|
93
|
-
}
|
|
94
|
-
phase = 'aborting';
|
|
95
|
-
try { closeSync(descriptor); } catch (error) { reportError(error); }
|
|
96
|
-
} else phase = 'aborting';
|
|
97
|
-
if (child?.pid) child.kill();
|
|
98
|
-
else process.exit(1);
|
|
99
|
-
return 'terminating';
|
|
100
|
-
};
|
|
101
|
-
const reply = (message) => {
|
|
102
|
-
if (!process.connected) return;
|
|
103
|
-
try { process.send(message, (error) => { if (error) reportError(error); }); }
|
|
104
|
-
catch (error) { reportError(error); }
|
|
105
|
-
};
|
|
106
|
-
process.on('message', (message) => {
|
|
107
|
-
if (message?.kind !== 'terminate') return;
|
|
108
|
-
try {
|
|
109
|
-
const outcome = stopCandidate();
|
|
110
|
-
if (handoffFile) reply({ kind: 'termination', requestId: message.requestId, outcome });
|
|
111
|
-
} catch (error) {
|
|
112
|
-
reportError(error);
|
|
113
|
-
reply({ kind: 'termination', requestId: message.requestId, error: error.message });
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
if (handoffFile) process.on('disconnect', () => {
|
|
117
|
-
try { stopCandidate(); }
|
|
118
|
-
catch (error) { reportError(error); }
|
|
119
|
-
});
|
|
120
|
-
child = spawn('powershell.exe', [
|
|
121
|
-
'-NoProfile',
|
|
122
|
-
'-NonInteractive',
|
|
123
|
-
'-ExecutionPolicy',
|
|
124
|
-
'Bypass',
|
|
125
|
-
'-File',
|
|
126
|
-
process.env.${Ue},
|
|
127
|
-
], { detached: false, windowsHide: true, stdio: 'ignore', env: childEnv });
|
|
128
|
-
child.once('error', (error) => {
|
|
129
|
-
if (!handoffFile) { fail(error.message); return; }
|
|
130
|
-
reportError(error);
|
|
131
|
-
if (child.pid !== undefined) return;
|
|
132
|
-
// A failed spawn emits error without exit; there is no Job or target to wait for.
|
|
133
|
-
childExited = true;
|
|
134
|
-
cleanScript();
|
|
135
|
-
cleanHandoff();
|
|
136
|
-
cleanReady();
|
|
137
|
-
process.exit(1);
|
|
138
|
-
});
|
|
139
|
-
child.once('exit', async (code) => {
|
|
140
|
-
childExited = true;
|
|
141
|
-
if (code !== 0 && !handoffFile) fail('PowerShell supervisor exited before readiness.');
|
|
142
|
-
await cleanAfterExit();
|
|
143
|
-
process.exit(code ?? 1);
|
|
144
|
-
});
|
|
145
|
-
const publishOwner = () => {
|
|
146
|
-
if (!Number.isSafeInteger(child.pid) || child.pid <= 0 || !process.send) return;
|
|
147
|
-
process.send({ kind: 'owner', pid: child.pid }, (error) => {
|
|
148
|
-
if (!error) return;
|
|
149
|
-
try { stopCandidate(); } catch (cleanupError) { reportError(cleanupError); }
|
|
150
|
-
if (handoffFile) reportError(new Error('Could not publish the PowerShell Job owner: ' + error.message));
|
|
151
|
-
else fail('Could not publish the PowerShell Job owner: ' + error.message);
|
|
152
|
-
});
|
|
153
|
-
};
|
|
154
|
-
if (process.env.${Zt} === '1') {
|
|
155
|
-
const timer = setInterval(() => {
|
|
156
|
-
if (!existsSync(readyFile)) return;
|
|
157
|
-
clearInterval(timer);
|
|
158
|
-
publishOwner();
|
|
159
|
-
}, 10);
|
|
160
|
-
} else {
|
|
161
|
-
publishOwner();
|
|
162
|
-
}
|
|
163
|
-
`,Ro=String.raw`
|
|
164
|
-
using System;
|
|
165
|
-
using System.IO;
|
|
166
|
-
using System.Runtime.InteropServices;
|
|
167
|
-
using System.Text;
|
|
168
|
-
using System.Threading;
|
|
169
|
-
|
|
170
|
-
public static class KodaXWindowsJobSupervisor {
|
|
171
|
-
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
|
172
|
-
private struct StartupInfo {
|
|
173
|
-
public uint cb;
|
|
174
|
-
public string lpReserved;
|
|
175
|
-
public string lpDesktop;
|
|
176
|
-
public string lpTitle;
|
|
177
|
-
public uint dwX;
|
|
178
|
-
public uint dwY;
|
|
179
|
-
public uint dwXSize;
|
|
180
|
-
public uint dwYSize;
|
|
181
|
-
public uint dwXCountChars;
|
|
182
|
-
public uint dwYCountChars;
|
|
183
|
-
public uint dwFillAttribute;
|
|
184
|
-
public uint dwFlags;
|
|
185
|
-
public ushort wShowWindow;
|
|
186
|
-
public ushort cbReserved2;
|
|
187
|
-
public IntPtr lpReserved2;
|
|
188
|
-
public IntPtr hStdInput;
|
|
189
|
-
public IntPtr hStdOutput;
|
|
190
|
-
public IntPtr hStdError;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
[StructLayout(LayoutKind.Sequential)]
|
|
194
|
-
private struct ProcessInformation {
|
|
195
|
-
public IntPtr hProcess;
|
|
196
|
-
public IntPtr hThread;
|
|
197
|
-
public uint dwProcessId;
|
|
198
|
-
public uint dwThreadId;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
[StructLayout(LayoutKind.Sequential)]
|
|
202
|
-
private struct SecurityAttributes {
|
|
203
|
-
public int length;
|
|
204
|
-
public IntPtr securityDescriptor;
|
|
205
|
-
public int inheritHandle;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
[StructLayout(LayoutKind.Sequential)]
|
|
209
|
-
private struct BasicLimitInformation {
|
|
210
|
-
public long PerProcessUserTimeLimit;
|
|
211
|
-
public long PerJobUserTimeLimit;
|
|
212
|
-
public uint LimitFlags;
|
|
213
|
-
public UIntPtr MinimumWorkingSetSize;
|
|
214
|
-
public UIntPtr MaximumWorkingSetSize;
|
|
215
|
-
public uint ActiveProcessLimit;
|
|
216
|
-
public UIntPtr Affinity;
|
|
217
|
-
public uint PriorityClass;
|
|
218
|
-
public uint SchedulingClass;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
[StructLayout(LayoutKind.Sequential)]
|
|
222
|
-
private struct IoCounters {
|
|
223
|
-
public ulong ReadOperationCount;
|
|
224
|
-
public ulong WriteOperationCount;
|
|
225
|
-
public ulong OtherOperationCount;
|
|
226
|
-
public ulong ReadTransferCount;
|
|
227
|
-
public ulong WriteTransferCount;
|
|
228
|
-
public ulong OtherTransferCount;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
[StructLayout(LayoutKind.Sequential)]
|
|
232
|
-
private struct ExtendedLimitInformation {
|
|
233
|
-
public BasicLimitInformation BasicLimitInformation;
|
|
234
|
-
public IoCounters IoInfo;
|
|
235
|
-
public UIntPtr ProcessMemoryLimit;
|
|
236
|
-
public UIntPtr JobMemoryLimit;
|
|
237
|
-
public UIntPtr PeakProcessMemoryUsed;
|
|
238
|
-
public UIntPtr PeakJobMemoryUsed;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
[StructLayout(LayoutKind.Sequential)]
|
|
242
|
-
private struct BasicAccountingInformation {
|
|
243
|
-
public long TotalUserTime;
|
|
244
|
-
public long TotalKernelTime;
|
|
245
|
-
public long ThisPeriodTotalUserTime;
|
|
246
|
-
public long ThisPeriodTotalKernelTime;
|
|
247
|
-
public uint TotalPageFaultCount;
|
|
248
|
-
public uint TotalProcesses;
|
|
249
|
-
public uint ActiveProcesses;
|
|
250
|
-
public uint TotalTerminatedProcesses;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
254
|
-
private static extern bool CreateProcessW(
|
|
255
|
-
string applicationName,
|
|
256
|
-
StringBuilder commandLine,
|
|
257
|
-
IntPtr processAttributes,
|
|
258
|
-
IntPtr threadAttributes,
|
|
259
|
-
bool inheritHandles,
|
|
260
|
-
uint creationFlags,
|
|
261
|
-
IntPtr environment,
|
|
262
|
-
string currentDirectory,
|
|
263
|
-
ref StartupInfo startupInfo,
|
|
264
|
-
out ProcessInformation processInformation);
|
|
265
|
-
|
|
266
|
-
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
267
|
-
private static extern IntPtr CreateJobObjectW(IntPtr attributes, string name);
|
|
268
|
-
|
|
269
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
270
|
-
private static extern bool SetInformationJobObject(
|
|
271
|
-
IntPtr job,
|
|
272
|
-
int informationClass,
|
|
273
|
-
ref ExtendedLimitInformation information,
|
|
274
|
-
uint informationLength);
|
|
275
|
-
|
|
276
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
277
|
-
private static extern bool QueryInformationJobObject(
|
|
278
|
-
IntPtr job,
|
|
279
|
-
int informationClass,
|
|
280
|
-
out BasicAccountingInformation information,
|
|
281
|
-
uint informationLength,
|
|
282
|
-
IntPtr returnLength);
|
|
283
|
-
|
|
284
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
285
|
-
private static extern bool AssignProcessToJobObject(IntPtr job, IntPtr process);
|
|
286
|
-
|
|
287
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
288
|
-
private static extern bool TerminateProcess(IntPtr process, uint exitCode);
|
|
289
|
-
|
|
290
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
291
|
-
private static extern uint ResumeThread(IntPtr thread);
|
|
292
|
-
|
|
293
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
294
|
-
private static extern uint WaitForSingleObject(IntPtr handle, uint milliseconds);
|
|
295
|
-
|
|
296
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
297
|
-
private static extern bool GetExitCodeProcess(IntPtr process, out uint exitCode);
|
|
298
|
-
|
|
299
|
-
[DllImport("kernel32.dll", SetLastError = true)]
|
|
300
|
-
private static extern bool TerminateJobObject(IntPtr job, uint exitCode);
|
|
301
|
-
|
|
302
|
-
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
303
|
-
private static extern IntPtr CreateFileW(
|
|
304
|
-
string fileName,
|
|
305
|
-
uint desiredAccess,
|
|
306
|
-
uint shareMode,
|
|
307
|
-
ref SecurityAttributes securityAttributes,
|
|
308
|
-
uint creationDisposition,
|
|
309
|
-
uint flagsAndAttributes,
|
|
310
|
-
IntPtr templateFile);
|
|
311
|
-
|
|
312
|
-
[DllImport("kernel32.dll")]
|
|
313
|
-
private static extern bool CloseHandle(IntPtr handle);
|
|
314
|
-
|
|
315
|
-
private const uint CreateSuspended = 0x00000004;
|
|
316
|
-
private const uint CreateNoWindow = 0x08000000;
|
|
317
|
-
private const uint StartfUseStdHandles = 0x00000100;
|
|
318
|
-
private const uint JobObjectLimitKillOnJobClose = 0x00002000;
|
|
319
|
-
private const uint FileAppendData = 0x00000004;
|
|
320
|
-
private const uint Synchronize = 0x00100000;
|
|
321
|
-
private const uint FileShareRead = 0x00000001;
|
|
322
|
-
private const uint FileShareWrite = 0x00000002;
|
|
323
|
-
private const uint FileShareDelete = 0x00000004;
|
|
324
|
-
private const uint OpenAlways = 4;
|
|
325
|
-
private const uint FileAttributeNormal = 0x00000080;
|
|
326
|
-
|
|
327
|
-
private static void Require(bool result, string operation) {
|
|
328
|
-
if (!result) throw new InvalidOperationException(
|
|
329
|
-
operation + " failed with Win32 error " + Marshal.GetLastWin32Error());
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
private static void PublishReady(string readyFile, uint processId) {
|
|
333
|
-
var temporaryFile = readyFile + "." + Guid.NewGuid().ToString("N") + ".tmp";
|
|
334
|
-
try {
|
|
335
|
-
File.WriteAllText(
|
|
336
|
-
temporaryFile,
|
|
337
|
-
"{\"processPid\":" + processId +
|
|
338
|
-
",\"containmentSupervisorPid\":" +
|
|
339
|
-
System.Diagnostics.Process.GetCurrentProcess().Id + "}");
|
|
340
|
-
File.Move(temporaryFile, readyFile);
|
|
341
|
-
} finally {
|
|
342
|
-
if (File.Exists(temporaryFile)) File.Delete(temporaryFile);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
public static int Run(
|
|
347
|
-
string executable,
|
|
348
|
-
string commandLine,
|
|
349
|
-
string cwd,
|
|
350
|
-
string readyFile,
|
|
351
|
-
string logFile,
|
|
352
|
-
string jobName) {
|
|
353
|
-
var job = CreateJobObjectW(IntPtr.Zero, jobName);
|
|
354
|
-
if (job == IntPtr.Zero) throw new InvalidOperationException(
|
|
355
|
-
"CreateJobObject failed with Win32 error " + Marshal.GetLastWin32Error());
|
|
356
|
-
var process = new ProcessInformation();
|
|
357
|
-
var processAssigned = false;
|
|
358
|
-
var security = new SecurityAttributes();
|
|
359
|
-
security.length = Marshal.SizeOf(typeof(SecurityAttributes));
|
|
360
|
-
security.inheritHandle = 1;
|
|
361
|
-
var logHandle = CreateFileW(
|
|
362
|
-
logFile,
|
|
363
|
-
FileAppendData | Synchronize,
|
|
364
|
-
FileShareRead | FileShareWrite | FileShareDelete,
|
|
365
|
-
ref security,
|
|
366
|
-
OpenAlways,
|
|
367
|
-
FileAttributeNormal,
|
|
368
|
-
IntPtr.Zero);
|
|
369
|
-
if (logHandle == new IntPtr(-1)) throw new InvalidOperationException(
|
|
370
|
-
"CreateFile for daemon log failed with Win32 error " + Marshal.GetLastWin32Error());
|
|
371
|
-
try {
|
|
372
|
-
var limits = new ExtendedLimitInformation();
|
|
373
|
-
limits.BasicLimitInformation.LimitFlags = JobObjectLimitKillOnJobClose;
|
|
374
|
-
Require(SetInformationJobObject(
|
|
375
|
-
job,
|
|
376
|
-
9,
|
|
377
|
-
ref limits,
|
|
378
|
-
(uint)Marshal.SizeOf(typeof(ExtendedLimitInformation))),
|
|
379
|
-
"SetInformationJobObject");
|
|
380
|
-
|
|
381
|
-
var startup = new StartupInfo();
|
|
382
|
-
startup.cb = (uint)Marshal.SizeOf(typeof(StartupInfo));
|
|
383
|
-
startup.dwFlags = StartfUseStdHandles;
|
|
384
|
-
startup.hStdInput = IntPtr.Zero;
|
|
385
|
-
startup.hStdOutput = logHandle;
|
|
386
|
-
startup.hStdError = logHandle;
|
|
387
|
-
Require(CreateProcessW(
|
|
388
|
-
executable,
|
|
389
|
-
new StringBuilder(commandLine),
|
|
390
|
-
IntPtr.Zero,
|
|
391
|
-
IntPtr.Zero,
|
|
392
|
-
true,
|
|
393
|
-
CreateSuspended | CreateNoWindow,
|
|
394
|
-
IntPtr.Zero,
|
|
395
|
-
cwd,
|
|
396
|
-
ref startup,
|
|
397
|
-
out process),
|
|
398
|
-
"CreateProcess");
|
|
399
|
-
Require(AssignProcessToJobObject(job, process.hProcess), "AssignProcessToJobObject");
|
|
400
|
-
processAssigned = true;
|
|
401
|
-
PublishReady(readyFile, process.dwProcessId);
|
|
402
|
-
if (ResumeThread(process.hThread) == 0xffffffff) {
|
|
403
|
-
throw new InvalidOperationException(
|
|
404
|
-
"ResumeThread failed with Win32 error " + Marshal.GetLastWin32Error());
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
if (WaitForSingleObject(process.hProcess, 0xffffffff) == 0xffffffff) {
|
|
408
|
-
throw new InvalidOperationException(
|
|
409
|
-
"WaitForSingleObject failed with Win32 error " + Marshal.GetLastWin32Error());
|
|
410
|
-
}
|
|
411
|
-
uint exitCode;
|
|
412
|
-
if (!GetExitCodeProcess(process.hProcess, out exitCode)) exitCode = 1;
|
|
413
|
-
Require(TerminateJobObject(job, exitCode), "TerminateJobObject");
|
|
414
|
-
while (true) {
|
|
415
|
-
BasicAccountingInformation accounting;
|
|
416
|
-
Require(QueryInformationJobObject(
|
|
417
|
-
job,
|
|
418
|
-
1,
|
|
419
|
-
out accounting,
|
|
420
|
-
(uint)Marshal.SizeOf(typeof(BasicAccountingInformation)),
|
|
421
|
-
IntPtr.Zero),
|
|
422
|
-
"QueryInformationJobObject");
|
|
423
|
-
if (accounting.ActiveProcesses == 0) return unchecked((int)exitCode);
|
|
424
|
-
Thread.Sleep(10);
|
|
425
|
-
}
|
|
426
|
-
} finally {
|
|
427
|
-
if (process.hProcess != IntPtr.Zero && !processAssigned) {
|
|
428
|
-
TerminateProcess(process.hProcess, 1);
|
|
429
|
-
WaitForSingleObject(process.hProcess, 2000);
|
|
430
|
-
}
|
|
431
|
-
if (process.hThread != IntPtr.Zero) CloseHandle(process.hThread);
|
|
432
|
-
if (process.hProcess != IntPtr.Zero) CloseHandle(process.hProcess);
|
|
433
|
-
CloseHandle(logHandle);
|
|
434
|
-
CloseHandle(job);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}`,wo=String.raw`
|
|
438
|
-
$ErrorActionPreference = 'Stop'
|
|
439
|
-
try {
|
|
440
|
-
$readyFile = $env:${Ve}
|
|
441
|
-
$payloadBytes = [Convert]::FromBase64String($env:${ze})
|
|
442
|
-
$payload = [Text.Encoding]::UTF8.GetString($payloadBytes) | ConvertFrom-Json
|
|
443
|
-
Remove-Item Env:${ze} -ErrorAction SilentlyContinue
|
|
444
|
-
Remove-Item Env:${Ve} -ErrorAction SilentlyContinue
|
|
445
|
-
$env:KODAX_DAEMON_JOB_CONTAINED = '1'
|
|
446
|
-
$env:KODAX_DAEMON_JOB_SUPERVISOR_PID = [string]$PID
|
|
447
|
-
$env:KODAX_DAEMON_JOB_NAME = [string]$payload.jobName
|
|
448
|
-
$source = @'
|
|
449
|
-
${Ro}
|
|
450
|
-
'@
|
|
451
|
-
Add-Type -TypeDefinition $source
|
|
452
|
-
$exitCode = [KodaXWindowsJobSupervisor]::Run(
|
|
453
|
-
[string]$payload.executable,
|
|
454
|
-
[string]$payload.commandLine,
|
|
455
|
-
[string]$payload.cwd,
|
|
456
|
-
[string]$payload.readyFile,
|
|
457
|
-
[string]$payload.logFile,
|
|
458
|
-
[string]$payload.jobName)
|
|
459
|
-
exit $exitCode
|
|
460
|
-
} catch {
|
|
461
|
-
[IO.File]::WriteAllText($readyFile, 'ERROR:' + $_.Exception.Message)
|
|
462
|
-
exit 1
|
|
463
|
-
}
|
|
464
|
-
`;function So(e){return e.length>0&&!/[\s"]/u.test(e)?e:`"${e.replace(/(\\*)"/gu,'$1$1\\"').replace(/(\\+)$/u,"$1$1")}"`}o(So,"quoteWindowsCommandLineArg");function vo(e,n){return[e,...n].map(So).join(" ")}o(vo,"buildWindowsCommandLine");async function tr(e){if(e.startupSignal?.throwIfAborted(),process.platform!=="win32")throw new Error("Windows Job containment is available only on Windows.");let n=qn.join(Nn.tmpdir(),`kodax-daemon-job-${xe()}.ready`),r=qn.join(Nn.tmpdir(),`kodax-daemon-job-${xe()}.ps1`),t=e.startupHandoff?qn.join(Nn.tmpdir(),`kodax-daemon-handoff-${xe()}`):void 0;go(r,wo,{encoding:"utf8",flag:"wx",mode:384});let s=Buffer.from(JSON.stringify({executable:e.executable,commandLine:vo(e.executable,e.args),cwd:e.cwd,readyFile:n,logFile:e.logFile,jobName:`KodaXDaemonJob-${xe()}`}),"utf8").toString("base64"),a={...e.env};delete a.KODAX_DAEMON_JOB_CONTAINED,delete a.KODAX_DAEMON_JOB_SUPERVISOR_PID,delete a.KODAX_DAEMON_JOB_NAME,delete a[Fn];let d;try{d=fo(process.execPath,["-e",ho],{cwd:e.cwd,detached:!0,windowsHide:!0,stdio:["ignore","ignore","ignore","ipc"],env:{...a,[Yn]:process.env.KODAX_BUNDLED==="true"?"1":void 0,[ze]:s,[Ve]:n,[Ue]:r,...t===void 0?{}:{[Fn]:t}}})}catch(m){throw We(n,{force:!0}),We(r,{force:!0}),m}let c=await Io(d,n,e.startupTimeoutMs??yo,e.startupSignal).catch(async m=>{try{await nr(d,void 0,e.startupHandoff)==="retained"&&er(d)}catch(p){throw new AggregateError([m,p],"Windows Job supervisor startup failed and its process tree was not reclaimed.")}throw m}).finally(()=>{t===void 0&&We(n,{force:!0}),We(r,{force:!0})}),l=!1;return{...c,supervisor:d,release:o(()=>{l=!0,er(d)},"release"),terminate:o(()=>l&&e.startupHandoff&&d.exitCode===null&&d.signalCode===null?Promise.resolve("retained"):nr(d,c.processPid,e.startupHandoff),"terminate")}}o(tr,"spawnWindowsJobContainedProcess");async function Io(e,n,r,t){let s,a,d=o(m=>{s=m},"captureLaunchError"),c=o(m=>{m!==null&&typeof m=="object"&&"kind"in m&&m.kind==="owner"&&"pid"in m&&Number.isSafeInteger(m.pid)&&Number(m.pid)>0&&(a=Number(m.pid))},"captureOwner");e.once("error",d),e.on("message",c);let l=Date.now()+r;try{for(;;){if(t?.throwIfAborted(),s!==void 0)throw s;try{let m=po(n,"utf8").trim();if(m.startsWith("ERROR:"))throw new Error(`Windows Job supervisor startup failed: ${m.slice(6)}`);let p=JSON.parse(m);if(!Number.isSafeInteger(p.processPid)||Number(p.processPid)<=0||!Number.isSafeInteger(p.containmentSupervisorPid)||Number(p.containmentSupervisorPid)<=0)throw new Error("Windows Job supervisor wrote invalid readiness identities.");if(a!==void 0){if(Number(p.containmentSupervisorPid)!==a)throw new Error("Windows Job supervisor readiness owner identities do not match.");return{processPid:Number(p.processPid),containmentSupervisorPid:a}}}catch(m){if(m.code!=="ENOENT")throw m}if(e.exitCode!==null||e.signalCode!==null)throw new Error(`Windows Job supervisor exited before daemon readiness (code ${e.exitCode??"unknown"}).`);if(Date.now()>=l)throw new Error("Windows Job supervisor did not report daemon readiness in time.");await new Promise(m=>setTimeout(m,10))}}finally{e.off("error",d),e.off("message",c)}}o(Io,"waitForSupervisorReadiness");function er(e){e.connected&&e.disconnect(),e.unref()}o(er,"releaseSupervisor");async function nr(e,n,r=!1){if(e.pid===void 0)return;let t=Date.now()+2e3,s;if(e.exitCode===null&&e.signalCode===null&&e.connected)try{if(await bo(e,r,t)==="retained")return"retained"}catch(a){s=a}try{await ko(e,t),n!==void 0&&await xo(n,2e3)}catch(a){throw s!==void 0?new AggregateError([s,a],"Windows Job supervisor control failed and process cleanup could not be confirmed."):a}}o(nr,"terminateSupervisor");async function bo(e,n,r){let t=xe(),s,a,d;try{return await new Promise((c,l)=>{n&&(s=o(m=>{m===null||typeof m!="object"||!("kind"in m)||m.kind!=="termination"||!("requestId"in m)||m.requestId!==t||("error"in m&&typeof m.error=="string"?l(new Error(m.error)):"outcome"in m&&m.outcome==="retained"?c("retained"):c())},"onMessage"),a=o(()=>c(),"onExit"),e.on("message",s),e.once("exit",a),d=setTimeout(()=>l(new Error("Windows Job startup control did not acknowledge termination.")),Math.max(0,r-Date.now()))),e.send({kind:"terminate",requestId:t},m=>{m?l(m):n||c()})})}finally{s&&e.off("message",s),a&&e.off("exit",a),d&&clearTimeout(d)}}o(bo,"requestSupervisorTermination");async function ko(e,n){for(;e.exitCode===null&&e.signalCode===null;){if(Date.now()>=n)throw new Error("Windows Job supervisor did not exit after startup cleanup.");await new Promise(r=>setTimeout(r,10))}}o(ko,"waitForWrapperExit");async function xo(e,n){let r=Date.now()+n;for(;Po(e);){if(Date.now()>=r)throw new Error(`Process ${e} did not exit after termination.`);await new Promise(t=>setTimeout(t,10))}}o(xo,"waitForPidExit");function Po(e){try{return process.kill(e,0),!0}catch(n){if(n.code==="ESRCH")return!1;throw n}}o(Po,"isPidAlive");import{closeSync as Co,fstatSync as Eo,openSync as Ao,readSync as To}from"node:fs";var Ln="KODAX_INTERNAL_DAEMON_STARTUP_PROGRESS_ID",rr="[kodax-startup] ",_o=["modules","extensions","runtime","recovery","mcp","sessions","a2a","listener"];function ir(e,n,r){let t;try{t=Ao(e,"r")}catch(s){if(typeof s=="object"&&s!==null&&"code"in s&&s.code==="ENOENT")return;throw s}try{let s=Eo(t).size,a=Buffer.alloc(Math.min(s,4096)),d=To(t,a,0,a.length,s-a.length);for(let c of a.subarray(0,d).toString("utf8").split(`
|
|
465
|
-
`).reverse()){if(!c.startsWith(rr))continue;let l;try{l=JSON.parse(c.slice(rr.length))}catch{continue}if(!(typeof l!="object"||l===null||!("startupId"in l)||!("pid"in l)||!("phase"in l))&&l.startupId===n&&l.pid===r&&_o.includes(l.phase))return l.phase}}finally{Co(t)}}o(ir,"readDaemonStartupPhase");var Ge=class extends Error{constructor(r){super(`Runtime daemon child ${r??"unknown"} process-tree cleanup could not be verified.`);this.pid=r;this.name="RuntimeDaemonProcessCleanupIncompleteError"}pid;static{o(this,"RuntimeDaemonProcessCleanupIncompleteError")}code="process_tree_cleanup_incomplete"},Lo=1e3,fr=256*1024,or="KODAX_INTERNAL_DAEMON_OWNER_BOOTSTRAP",al=1024*1024;function Ko(e,n){tn(e);let r=Zo(JSON.parse(JSON.stringify(n))),t=J.join(e.rootDir,`owner-bootstrap-${dr()}.json`);return No(t,JSON.stringify(r),{encoding:"utf8",flag:"wx",mode:384}),t}o(Ko,"createRuntimeDaemonOwnerBootstrapFile");function ge(e){return J.join(e.rootDir,"bootstrap.log")}o(ge,"runtimeDaemonBootstrapLogPath");function Bo(e,n=fr){tn(e);let r=ge(e),t=Math.max(1,n),s=`${r}.1`;return Kn(s,t),Pe(r)&&lr(r).size>=t&&(Kn(r,t),Pe(s)&&mr(s),jo(r,s)),cr(r,"a",384)}o(Bo,"openRuntimeDaemonBootstrapLog");function Ho(e,n=fr){Kn(ge(e),Math.max(1,n))}o(Ho,"capRuntimeDaemonBootstrapLog");function Kn(e,n){if(!Pe(e))return;let r=lr(e).size;if(r<=n)return;let t=cr(e,"r+");try{let s=Buffer.allocUnsafe(n),a=0;for(;a<s.length;){let d=Do(t,s,a,s.length-a,r-n+a);if(d===0)break;a+=d}Oo(t,0),a>0&&qo(t,s,0,a,0)}finally{ur(t)}}o(Kn,"capFileToTail");var L=class extends Error{constructor(r,t){super(r);this.reason=t;this.name="RuntimeDaemonStartupError",this.retryable=t==="timeout"||t==="unhealthy"}reason;static{o(this,"RuntimeDaemonStartupError")}code="daemon_startup_failed";retryable};async function $n(e,n,r){if(!Number.isSafeInteger(e.pid)||e.pid<=0||!e.processStartIdentity)throw new Error("Cannot confirm Host exit without its exact process identity.");if(!Number.isSafeInteger(n)||n<=0)throw new Error("Host exit timeout must be a positive integer.");let t=Date.now()+n;for(;;){if(r?.aborted)throw X();let s=Oe(e);if(s==="gone")return;if(Date.now()>=t)throw new Error(s==="unknown"?"Cannot verify the original Host process identity; retry startup after it exits.":"The original Host is still running; retry startup after it exits.");await $(pe(Math.min(50,t-Date.now())),r)}}o($n,"waitForRuntimeDaemonOwnerExit");async function Xn(e){let n=Date.now()+(e.startupTimeoutMs??6e4);if(e.orphanExitMs!==void 0&&(!Number.isSafeInteger(e.orphanExitMs)||e.orphanExitMs<=0))throw new Error("orphanExitMs must be a positive safe integer.");let r=e.profile??"default",t=J.resolve(e.homeDir??Fo.homedir()),s=J.resolve(e.configHome??J.join(t,".kodax")),a=Z(s,r),d=He(a.profile,Te(t,s));if(e.endpoint&&e.endpoint.path!==d.path)throw new Error("SDK daemon auto-start only supports the profile default endpoint; use attach-only mode for custom endpoints.");if(e.startupSignal?.aborted)throw X();_e(a,e.sessionsDir??J.join(s,"sessions"));let c=G(e.onStartupProgress);c({stage:"checking"});let l=await $(ve(a,e.healthCheck),e.startupSignal),m=de(l);if(m==="unhealthy"){let g=Date.now()+Math.min(1e4,Math.max(0,n-Date.now()));for(;m==="unhealthy"&&Date.now()<g&&!e.startupSignal?.aborted;)await $(pe(Math.max(0,Math.min(250,g-Date.now()))),e.startupSignal),l=await $(ve(a,e.healthCheck),e.startupSignal),m=de(l)}if(e.startupSignal?.aborted)throw X();if(l.pidAlive&&(l.state?.status==="stopping"||l.state?.status==="draining")){let g=l.observedLockOwner;if(m==="mismatch"||g?.runtimeId!==l.state.runtimeId||g.pid!==l.state.pid||g.kind!=="daemon")throw new L("Cannot confirm the stopping Runtime daemon owner identity.","identity_mismatch");let h=n-Date.now();if(h<=0)throw H(a);c({stage:"waiting",reason:"host_stopping"}),await $n(g,h,e.startupSignal);let v=n-Date.now();if(v<=0)throw H(a);return Xn({...e,startupTimeoutMs:v})}if(m==="healthy"&&l.state){if(Date.now()>=n)throw H(a);if(e.ownerBootstrap!==void 0)throw new Error("Trusted daemon owner policy cannot be applied to an existing daemon. Stop that owner and retry the bootstrap.");let g=l.state.status==="ready"?{...l,state:l.state}:await Xo(a,e,l,void 0,n);return sr(a,$e(g.state),!1,e,n,g.initialization)}if(m==="unhealthy"||m==="mismatch"){let g=l.state?.pid;throw new L(`Runtime daemon is ${m}; refusing to start a competing owner. [state pid=${g} status=${l.state?.status} endpoint=${l.state?.endpoint} pidAlive=${l.pidAlive} reachable=${l.endpointReachable} identityMatches=${l.identityMatches}]`,m==="unhealthy"?"unhealthy":"identity_mismatch")}if(Date.now()>=n)throw H(a);let p=e.ownerBootstrap===void 0?void 0:Ko(a,e.ownerBootstrap);try{if(c({stage:"starting"}),e.startupSignal?.aborted)throw X();let g=await Vo({profile:a.profile,homeDir:t,configHome:s,defaultProvider:e.defaultProvider,defaultModel:e.defaultModel,sessionsDir:e.sessionsDir,permissionTimeoutMs:e.permissionTimeoutMs,userInputTimeoutMs:e.userInputTimeoutMs,orphanExitMs:e.orphanExitMs,startupTimeoutMs:Math.max(1,n-Date.now()),startupSignal:e.startupSignal,ownerBootstrapFile:p,startupProgressId:e.onStartupProgress===void 0?void 0:dr()}),h=await $o(a,e,g,void 0,n),v=h.state.pid===g.pid;if(e.ownerBootstrap!==void 0&&!v)throw new Error("Trusted daemon owner policy lost a concurrent startup race and was not applied. Retry after the current owner stops.");let I=$e(h.state);return sr(a,I,v,e,n,h.initialization)}finally{p!==void 0&&Pe(p)&&mr(p)}}o(Xn,"acquireRuntimeDaemonProcessLease");async function sr(e,n,r,t,s,a){if(t.startupSignal?.aborted)throw X();let d=s-Date.now();if(d<=0)throw H(e);G(t.onStartupProgress)({stage:"connecting"});let c=await fe(n,{connectTimeoutMs:Math.min(t.connectTimeoutMs??2e3,d),signal:t.startupSignal});if(t.startupSignal?.aborted||Date.now()>=s)throw await c.close?.(),t.startupSignal?.aborted?X():H(e);let l=!1,m,p=!1,g,h=o(()=>{if(l)return Promise.resolve();if(m)return m;let v=(async()=>{await c.close?.(),l=!0})();return m=v,v.finally(()=>{m===v&&(m=void 0)}).catch(()=>{}),v},"closeTransport");return{transport:c,endpoint:n,paths:e,ownsHost:r,...a===void 0?{}:{probeInitialization:a},close:h,shutdown(){if(g)return g;let v=(async()=>{p||(await c.request("runtime.shutdown"),p=!0),await h()})();return g=v,v.finally(()=>{g===v&&(g=void 0)}).catch(()=>{}),v}}}o(sr,"connectProcessLease");async function $o(e,n,r,t=ve,s=Date.now()+(n.startupTimeoutMs??6e4)){let a=G(n.onStartupProgress);try{a({stage:"waiting",reason:"host_starting"});let d=n.onStartupProgress!==void 0&&r.startupProgressId!==void 0;for(;;){if(n.startupSignal?.aborted)throw X();if(Date.now()>=s)throw H(e);let c=await Wo(e,n,r,t,s);if(n.startupSignal?.aborted)throw X();if(Date.now()>=s)throw H(e);if(d&&r.pid!==void 0&&r.startupProgressId!==void 0)try{let p=ir(ge(e),r.startupProgressId,r.pid);p&&a({stage:"initializing",phase:p})}catch(p){d=!1,E({source:"client.startup-progress",level:"warn",message:"Host startup progress could not be read.",detail:p})}let l=de(c);if(l==="healthy"&&c.state?.status==="ready")return c.state.pid===r.pid?r.unref():await Go(r),{...c,state:c.state};if(l==="mismatch")throw new L("Runtime daemon endpoint identity does not match its persisted owner state.","identity_mismatch");let m=s-Date.now();if(m<=0)throw H(e);await Uo(Math.min(Math.max(1,n.pollIntervalMs??100),m),e,r,n.startupSignal)}}catch(d){try{await r.terminate()}catch(c){throw new AggregateError([d,c],"Runtime daemon startup failed and its child process could not be reclaimed.")}try{Ho(e)}catch{}throw d}}o($o,"waitForHealthyDaemonStartup");async function Xo(e,n,r,t=ve,s=Date.now()+(n.startupTimeoutMs??6e4)){let a=r.state;if(a===void 0)throw new L("Runtime daemon owner state disappeared before it reached ready.","identity_mismatch");G(n.onStartupProgress)({stage:"waiting",reason:"host_starting"});let d=r;for(;;){if(n.startupSignal?.aborted)throw X();if(Date.now()>=s)throw H(e);let c=de(d);if(d.state!==void 0&&(d.state.runtimeId!==a.runtimeId||d.state.pid!==a.pid||d.state.profile!==a.profile||d.state.endpoint!==a.endpoint))throw new L("Runtime daemon owner identity changed before it reached ready.","identity_mismatch");if(c==="healthy"&&d.state?.status==="ready")return{...d,state:d.state};if(c==="mismatch")throw new L("Runtime daemon endpoint identity does not match its persisted owner state.","identity_mismatch");let l=s-Date.now();if(l<=0)throw H(e);await $(pe(Math.min(Math.max(1,n.pollIntervalMs??100),l)),n.startupSignal),d=await $(t(e,n.healthCheck),n.startupSignal)}}o(Xo,"waitForReadyRuntimeDaemonOwner");async function Wo(e,n,r,t,s){let a={...n.healthCheck,connectionPurpose:"startup"},d=await $(Promise.race([t(e,a).then(c=>({kind:"health",observation:c})),r.exit.then(c=>({kind:"exit",exit:c}))]),n.startupSignal);if(d.kind==="exit"){if(Bn(e,r))return t(e,n.healthCheck);if(d.exit.code===0&&d.exit.signal===null){let c=Math.min(Lo,Math.max(0,s-Date.now())),l=Date.now()+c;for(;Date.now()<=l;){let m=await $(t(e,n.healthCheck),n.startupSignal);if(de(m)!=="missing"||Bn(e,r))return m;await $(pe(Math.min(n.pollIntervalMs??100,Math.max(1,l-Date.now()))),n.startupSignal)}}throw pr(e,d.exit)}return d.observation}o(Wo,"observeStartupHealth");async function Uo(e,n,r,t){let s=await $(Promise.race([pe(e).then(()=>{}),r.exit]),t);if(s!==void 0&&!(s.code===0&&s.signal===null)){if(Bn(n,r)){await $(pe(e),t);return}throw pr(n,s)}}o(Uo,"waitForStartupPoll");function Bn(e,n){let r=B(e.lockFile);return r!==void 0&&r.pid!==n.pid}o(Bn,"hasCompetingStartupOwner");function pr(e,n){let r=n.signal!==null?`signal ${n.signal}`:`code ${n.code??"unknown"}`;return new L(`Runtime daemon child exited before becoming healthy (${r}). See daemon bootstrap log: ${ge(e)}`,"child_exit")}o(pr,"runtimeDaemonExitedEarly");function H(e){let n=process.versions.electron===void 0?"":" Packaged Electron auto-start requires the RunAsNode fuse to remain enabled.";return new L(`Timed out waiting for runtime daemon profile "${e.profile}" to become ready.${n} See daemon bootstrap log: ${ge(e)}`,"timeout")}o(H,"runtimeDaemonStartupTimeout");function zo(e,n,r=process.execArgv){let t=[...n!==void 0?rs(r,n.endsWith(".ts")):[],...n!==void 0?[n]:[],"daemon","serve","--profile",e.profile,"--home",e.homeDir,"--config-home",e.configHome];return e.defaultProvider!==void 0&&t.push("--provider",e.defaultProvider),e.defaultModel!==void 0&&t.push("--model",e.defaultModel),e.sessionsDir!==void 0&&t.push("--sessions-dir",e.sessionsDir),e.permissionTimeoutMs!==void 0&&t.push("--permission-timeout-ms",String(e.permissionTimeoutMs)),e.userInputTimeoutMs!==void 0&&t.push("--user-input-timeout-ms",String(e.userInputTimeoutMs)),e.orphanExitMs!==void 0&&t.push("--orphan-exit-ms",String(e.orphanExitMs)),t}o(zo,"buildRuntimeDaemonServeArgs");async function Vo(e){let n=Dn();Qo(n);let r=zo(e,n),t=Zn({args:r,env:Yo({homeDir:e.homeDir,configHome:e.configHome,parentEnv:process.env,ownerBootstrapFile:e.ownerBootstrapFile,startupProgressId:e.startupProgressId}),isElectron:process.versions.electron!==void 0}),s=Z(e.configHome,e.profile),a=Bo(s),d,c,l,m;try{if(process.platform==="win32"){let g=await tr({executable:process.execPath,args:t.args,cwd:process.cwd(),env:t.env,logFile:ge(s),startupTimeoutMs:e.startupTimeoutMs,startupSignal:e.startupSignal,startupHandoff:!0});d=g.supervisor,c=g.processPid,l=g.terminate,m=g.release}else d=Mo(process.execPath,t.args,{detached:!0,stdio:["ignore",a,a],windowsHide:!0,env:t.env})}finally{ur(a)}let p=d.exitCode!==null||d.signalCode!==null?Promise.resolve({code:d.exitCode,signal:d.signalCode}):new Promise(g=>{d.once("exit",(h,v)=>g({code:h,signal:v}))});return c===void 0&&await new Promise((g,h)=>{d.once("spawn",g),d.once("error",h)}),l===void 0&&et(d),{...Jo(d,p,c,l,m),startupProgressId:e.startupProgressId}}o(Vo,"spawnRuntimeDaemonServeProcess");async function Go(e){if(e.hasExited?.()!==!0)try{if(await e.terminate()==="retained")throw new L("Startup candidate already published a service while observing a competing owner.","identity_mismatch")}catch(n){if(!(n instanceof Ge)||!await Hn(e.exit,1e3))throw n}}o(Go,"terminateCompetingStartupChild");function Jo(e,n,r=e.pid,t,s){return{pid:r,exit:n,hasExited(){return en(e)},unref(){s!==void 0?s():e.unref()},async terminate(){if(t!==void 0){if(await t()==="retained")return s?.(),"retained";if(!await Hn(n,1e3))throw new Error(`Runtime daemon Job supervisor ${e.pid??"unknown"} did not exit after termination.`);return}let a=en(e);if((await nt(e)).status==="unknown"&&!a)throw new Ge(r);if(!await Hn(n,1e3))throw new Error(`Runtime daemon child ${r??"unknown"} did not exit after termination.`)}}}o(Jo,"createRuntimeDaemonStartupProcess");async function Hn(e,n){let r;try{return await Promise.race([e.then(()=>!0),new Promise(t=>{r=setTimeout(()=>t(!1),n)})])}finally{r!==void 0&&clearTimeout(r)}}o(Hn,"didExitWithin");function Qo(e){if(e!==void 0&&!Pe(e))throw new Error(`Runtime daemon CLI entry is unavailable at "${e}". Keep the published KodaX dist files external to the embedder bundle.`)}o(Qo,"assertRuntimeDaemonCliEntryAvailable");function Yo(e){let n={...e.parentEnv,KODAX_DAEMON_SERVE:"1",KODAX_HOME:e.configHome??J.join(e.homeDir,".kodax")};return delete n[Qn],delete n[or],delete n[Ln],e.startupProgressId!==void 0&&(n[Ln]=e.startupProgressId),e.ownerBootstrapFile!==void 0&&(n[or]=e.ownerBootstrapFile),n}o(Yo,"createRuntimeDaemonServeEnvironment");function Zo(e){if(!Qe(e))throw new Error("Runtime daemon owner bootstrap must be an object.");return Je(e,["execPolicy","autoReview"],"owner bootstrap"),{...e.execPolicy===void 0?{}:{execPolicy:es(e.execPolicy)},...e.autoReview===void 0?{}:{autoReview:ts(e.autoReview)}}}o(Zo,"parseRuntimeDaemonOwnerBootstrap");function es(e){if(!Qe(e))throw new Error("Runtime daemon owner execPolicy must be an object.");Je(e,["adminRules","trustedProjectRoots"],"owner execPolicy");let n=e.trustedProjectRoots;if(n!==void 0&&(!Array.isArray(n)||!n.every(r=>typeof r=="string")))throw new Error("Runtime daemon owner trustedProjectRoots must be strings.");return{...e.adminRules===void 0?{}:{adminRules:ns(e.adminRules)},...n===void 0?{}:{trustedProjectRoots:n}}}o(es,"parseRuntimeDaemonExecPolicy");function ns(e){if(!Array.isArray(e))throw new Error("Runtime daemon owner adminRules must be an array.");return e.map((n,r)=>{if(!Qe(n))throw new Error(`Runtime daemon owner adminRules[${r}] must be an object.`);Je(n,["prefix","decision","justification","match","notMatch","hostExecutable","network","compound"],`owner adminRules[${r}]`);let t=ot(JSON.stringify({rules:[{prefix:n.prefix,decision:n.decision,justification:n.justification,match:n.match,notMatch:n.notMatch,hostExecutable:n.hostExecutable,network:n.network,compound:n.compound}]}),"host:admin","admin");if(!t.ok||t.rules[0]===void 0)throw new Error(`Invalid Runtime daemon owner adminRules[${r}]: ${t.ok?"missing rule":t.error}`);let{source:s,sourcePath:a,...d}=t.rules[0];return d})}o(ns,"parseRuntimeDaemonAdminRules");function ts(e){if(!Qe(e))throw new Error("Runtime daemon owner autoReview must be an object.");if(Je(e,["administratorPolicy","modelGuidance"],"owner autoReview"),e.administratorPolicy!==void 0&&typeof e.administratorPolicy!="string")throw new Error("Runtime daemon owner administratorPolicy must be a string.");if(e.modelGuidance!==void 0&&typeof e.modelGuidance!="string")throw new Error("Runtime daemon owner modelGuidance must be a string.");return{...typeof e.administratorPolicy=="string"?{administratorPolicy:e.administratorPolicy}:{},...typeof e.modelGuidance=="string"?{modelGuidance:e.modelGuidance}:{}}}o(ts,"parseRuntimeDaemonAutoReview");function Je(e,n,r){let t=new Set(n),s=Object.keys(e).find(a=>!t.has(a));if(s!==void 0)throw new Error(`Runtime daemon ${r}.${s} is not supported.`)}o(Je,"assertOnlyFields");function Qe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(Qe,"isRecord");function rs(e,n){let r=[];for(let t=0;t<e.length;t+=1){let s=e[t]??"",a=s.toLowerCase();if(a==="--require"||a==="-r"){let d=e[t+1];d!==void 0&&(ar(d)&&r.push(s,d),t+=1)}else if(a.startsWith("--require=")){let d=s.slice(10);ar(d)&&r.push(s)}else(a.startsWith("--max-old-space-size")||a==="--enable-source-maps")&&r.push(s)}return n&&r.push("--import","tsx"),r}o(rs,"daemonServeExecArgv");function ar(e){return J.resolve(e)===J.resolve("scripts","production-env.cjs")}o(ar,"isKodaXProductionEnvPreload");function pe(e){return new Promise(n=>setTimeout(n,e))}o(pe,"delay");async function $(e,n){if(!n)return e;if(n.aborted)throw X();let r;try{return await Promise.race([e,new Promise((t,s)=>{r=o(()=>s(X()),"cancel"),n.addEventListener("abort",r,{once:!0})})])}finally{r&&n.removeEventListener("abort",r)}}o($,"raceRuntimeDaemonStartupStep");function X(){return new L("Runtime daemon startup cancelled.","cancelled")}o(X,"runtimeDaemonStartupCancelled");var q=class extends Error{constructor(r,t,s,a="runtimeAutoModeGuardrail",d){super(r,s);this.preflight=t;this.ownerProfile=d;this.name="RuntimeDaemonCapabilityUpgradeError",this.capability=a,this.retryable=t?.canStop===!1}preflight;ownerProfile;static{o(this,"RuntimeDaemonCapabilityUpgradeError")}code="daemon_capability_upgrade_required";recoverable=!0;restartRequired=!0;capability;retryable},Ye=class extends Error{static{o(this,"RuntimeHostMigrationRequiredError")}code="runtime_host_migration_required";constructor(n){super(n),this.name="RuntimeHostMigrationRequiredError"}},gr=class extends Error{static{o(this,"RuntimeAutoModeConfigurationError")}code="auto_mode_classifier_model_required";recoverable=!0;constructor(n){super(n),this.name="RuntimeAutoModeConfigurationError"}};function Gn(e){let n=Q.resolve(e??is.homedir());return{homeDir:n,configHome:e===void 0?Q.resolve(an):Q.join(n,".kodax")}}o(Gn,"resolveRuntimeDaemonClientLocation");function Sr(e,n="default"){let r=Gn(e);return{...r,paths:Z(r.configHome,n)}}o(Sr,"resolveRuntimeDaemonClientPaths");function Eg(e={}){let{paths:n}=Sr(e.homeDir,e.profile),r=B(n.lockFile),t=st(n);return{profile:n.profile,policy:{mode:t.mode,revision:t.revision,updatedAt:t.updatedAt},ownerStatus:r!==void 0?"owned":j.existsSync(n.lockFile)?"unreadable":"unowned",owner:r===void 0?null:{runtimeId:r.runtimeId,pid:r.pid,createdAt:r.createdAt,...r.kind===void 0?{}:{kind:r.kind},...r.processStartIdentity===void 0?{}:{processStartIdentity:r.processStartIdentity},...r.processContainment===void 0?{}:{processContainment:r.processContainment},...r.supervisorPid===void 0?{}:{supervisorPid:r.supervisorPid},...r.supervisorProcessStartIdentity===void 0?{}:{supervisorProcessStartIdentity:r.supervisorProcessStartIdentity}}}}o(Eg,"getKodaXRuntimeOwnerState");function os(e){let n=(e.execPolicy?.adminRules?.length??0)>0||(e.execPolicy?.trustedProjectRoots?.length??0)>0?e.execPolicy:void 0,r=(e.autoReview?.administratorPolicy?.trim().length??0)>0||(e.autoReview?.modelGuidance?.trim().length??0)>0?e.autoReview:void 0;if(!(n===void 0&&r===void 0))return{...n===void 0?{}:{execPolicy:n},...r===void 0?{}:{autoReview:r}}}o(os,"runtimeDaemonOwnerBootstrap");var Ag=Object.freeze({productClient:1,sessionDrafts:1,sessionPromotion:1,productExecutionBinding:1,productInputRecovery:1,productExecutionModeConstraint:1,actorSettlementConvergence:2,conversationHistory:2,crashOutcomeModel:2,daemonOrphanExit:1,daemonShutdownVerification:1,effectiveConfig:1,managedRunDurability:1,runtimeAutoModeGuardrail:Yt.version,sandboxRuntime:11,sharedSessionSettings:2,runtimeEventCoalescing:1,liveOutputSegments:1});function ss(){return{type:"reject",reason:"permission request timed out; choose a safer approach that does not require this approval",cause:"approval_timeout"}}o(ss,"runtimePermissionTimeoutDecision");async function Tg(e,n,r){let t=new AbortController,s=ss(),a=ds(e,n,s);try{let d=await cs(e,n,r,t.signal,a.ready,a.outcome,s);return await ls(e,n,d,s,t,a.observedDecision)}finally{a.close()}}o(Tg,"handleRuntimePermissionRequest");async function as(e,n,r){if(typeof e.permissions.listPending!="function")return{source:"pending"};let t=Promise.resolve().then(()=>e.permissions.listPending({runId:n.runId})).then(s=>s.some(a=>a.id===n.id)?{source:"pending"}:{source:"runtime"},s=>({source:"prompt",decision:{type:"reject",reason:`Unable to verify the pending approval safely: ${s instanceof Error?s.message:String(s)}`}}));return Promise.race([t,r])}o(as,"runtimePermissionPromptGate");function ds(e,n,r){let t=o(()=>{},"resolveRuntime"),s,a=new Promise(m=>{t=m}),d=e.events.subscribe({sessionId:n.sessionId,runId:n.runId,type:"permission.resolved"},m=>{let p=W(m.payload)?m.payload:void 0;p?.requestId===n.id&&(s=ms(p.decision),t({source:"runtime",decision:s}))}),c=n.expiresAt===void 0?void 0:Date.parse(n.expiresAt),l=c!==void 0&&Number.isFinite(c)?setTimeout(()=>t({source:"deadline",decision:r}),As(n.expiresAt,1)):void 0;return l?.unref?.(),{...d.ready!==void 0?{ready:d.ready}:{},outcome:a,observedDecision:o(()=>s,"observedDecision"),close:o(()=>{l!==void 0&&clearTimeout(l),d.close()},"close")}}o(ds,"createRuntimePermissionPromptObserver");function us(e,n,r){return Promise.resolve().then(()=>n(e,{signal:r})).then(t=>({source:"prompt",decision:t}),t=>({source:"prompt",decision:{type:"reject",reason:t instanceof Error?t.message:String(t)}}))}o(us,"runRuntimePermissionPrompt");async function cs(e,n,r,t,s,a,d){let c=await Promise.race([Promise.resolve(s).then(()=>({source:"ready"}),m=>({source:"prompt",decision:{type:"reject",reason:m instanceof Error?m.message:String(m)}})),a]);if(c.source!=="ready")return c;if(Vn(n.expiresAt))return{source:"deadline",decision:d};let l=await as(e,n,a);return l.source!=="pending"?l:Vn(n.expiresAt)?{source:"deadline",decision:d}:Promise.race([us(n,r,t),a])}o(cs,"waitForRuntimePermissionPromptOutcome");async function ls(e,n,r,t,s,a){if(r.source==="runtime")return s.abort(),{requestId:n.id,status:"already_resolved",...r.decision!==void 0?{decision:r.decision}:{}};let d=Vn(n.expiresAt),c=d?t:r.decision;if((r.source==="deadline"||d)&&s.abort(),await e.permissions.respond(n.id,c,{runId:n.runId}))return{requestId:n.id,status:"responded",decision:c};s.abort();let m=a();return{requestId:n.id,status:"already_resolved",...m!==void 0?{decision:m}:{}}}o(ls,"commitRuntimePermissionPromptOutcome");function ms(e){if(!(!W(e)||typeof e.type!="string")&&!(e.type!=="allow_once"&&e.type!=="allow_session"&&e.type!=="allow_always"&&e.type!=="reject"))return e}o(ms,"runtimePermissionDecisionFromPayload");async function _g(e,n){return e.sessions.diagnostics(n)}o(_g,"captureRuntimeSessionDiagnostics");var Mg=5*6e4;var Un=2147483647;var Og=1024*1024;var Dg=2*1024*1024;var jg=256*1024*1024;var Ng=8*1024;var qg=512*1024,Fg=128*1024,Lg=256*1024;var Kg=64*1024*1024;var Bg=4*1024;var Hg=1024*1024;var $g=5*6e4;var Xg="runtime run redirected by user";async function Wg(e){if(!W(e)||e.mode!=="daemon")throw new Ye("Private Runtime construction has been removed. Use ensureKodaXClient() for product execution or createKodaXRuntime({ mode: 'daemon' }) to connect to the shared Host.");for(let t of["sharedDaemonHost","daemonHostRuntimeId","externalAgents"])if(t in e)throw new Ye(`Public Runtime construction no longer accepts ${t}. Owner construction and executor factories belong to the Host; clients must connect to the shared Host.`);re("permissionTimeoutMs",e.permissionTimeoutMs,0),re("userInputTimeoutMs",e.userInputTimeoutMs,0);let n=e.autoStartDaemon??(e.daemonTransport===void 0&&e.daemonEndpoint===void 0),r=os(e);if(r!==void 0&&(!n||e.daemonTransport!==void 0))throw new Error("Trusted daemon execPolicy/autoReview options require owner auto-start; attach clients cannot change daemon administrator policy.");return vr({onStartupProgress:e.onStartupProgress,profile:e.profile,transport:e.daemonTransport,endpoint:e.daemonEndpoint,autoStart:n,homeDir:e.homeDir,sessionsDir:e.sessionsDir,defaultProvider:e.defaultProvider,defaultModel:e.defaultModel,permissionTimeoutMs:e.permissionTimeoutMs,userInputTimeoutMs:e.userInputTimeoutMs,daemonStartupTimeoutMs:e.daemonStartupTimeoutMs,daemonConnectTimeoutMs:e.daemonConnectTimeoutMs,...e.daemonOrphanExitMs!==void 0?{daemonOrphanExitMs:e.daemonOrphanExitMs}:{},daemonLifecycle:e.daemonLifecycle,daemonToken:e.daemonToken,clientInfo:e.clientInfo,capabilities:e.capabilities,requirements:{...e.requirements,liveOutputSegments:1,runtimeAutoModeGuardrail:6,sharedSessionSettings:2,...n?{actorSettlementConvergence:2,crashOutcomeModel:2,managedRunDurability:1,...process.platform==="win32"?{daemonShutdownVerification:1,sandboxRuntime:11}:{},runtimeEventCoalescing:1,...e.daemonOrphanExitMs!==void 0?{daemonOrphanExit:1}:{}}:{}}},!0,r)}o(Wg,"createKodaXRuntime");function fs(e,n){if(!n?.externalAgents&&n?.externalAgentAdmin===void 0&&n?.a2aConfigReconciler===void 0&&n?.sessionObservation===void 0&&n?.afterTurnInput===void 0&&n?.learningCenter===void 0&&n?.skillLearningLoop===void 0&&n?.interruptInput===void 0&&n?.askUserTransport===void 0&&n?.permissionCas===void 0&&n?.providerCredentialBroker===void 0&&n?.providerCredentialConnectionBinding===void 0&&n?.providerProbeAuthorization===void 0&&n?.runBoundHostTools===void 0&&n?.coderOwnerFencing===void 0&&n?.crashOutcomeModel===void 0&&n?.coderFeatureMatrix===void 0&&n?.sessionAdmission===void 0&&n?.completeObservationSnapshot===void 0&&n?.contextCompaction===void 0&&n?.transcriptPaging===void 0&&n?.transcriptSearch===void 0&&n?.conversationHistory===void 0&&n?.connectionLifecycle===void 0&&n?.typedRuntimeEvents===void 0&&n?.daemonSafeRunInput===void 0&&n?.sharedSessionSettings===void 0&&n?.durableRecoveryQueries===void 0&&n?.managedRunDurability===void 0&&n?.actorSettlementConvergence===void 0&&n?.daemonManagement===void 0&&n?.daemonClientInventory===void 0&&n?.daemonOrphanExit===void 0&&n?.daemonShutdownVerification===void 0&&n?.runtimeEventCoalescing===void 0&&n?.liveOutputSegments===void 0&&n?.integrationConfigResilience===void 0&&n?.effectiveConfig===void 0&&n?.actorControlPlane===void 0&&n?.sandboxRuntime===void 0&&n?.runtimeAutoModeGuardrail===void 0&&n?.sessionDrafts===void 0&&n?.sessionPromotion===void 0&&n?.productExecutionBinding===void 0&&n?.productInputRecovery===void 0&&n?.productExecutionModeConstraint===void 0&&n?.productClient===void 0&&n?.productHistoryBoundaries===void 0&&n?.productExecutionAuthorization===void 0&&n?.productExitControl===void 0&&n?.productExecutionFacts===void 0&&n?.productActorAuthorization===void 0)return;let r=ye(e);if(n.externalAgents&&r.externalAgents!==!0)throw new Error("Runtime does not support the required externalAgents capability.");let t=[["productExitControl",n.productExitControl],["productExecutionFacts",n.productExecutionFacts],["productActorAuthorization",n.productActorAuthorization],["productClient",n.productClient],["sessionDrafts",n.sessionDrafts],["sessionPromotion",n.sessionPromotion],["productExecutionBinding",n.productExecutionBinding],["productInputRecovery",n.productInputRecovery],["productExecutionModeConstraint",n.productExecutionModeConstraint],["productHistoryBoundaries",n.productHistoryBoundaries],["productExecutionAuthorization",n.productExecutionAuthorization],["externalAgentAdmin",n.externalAgentAdmin],["a2aConfigReconciler",n.a2aConfigReconciler],["sessionObservation",n.sessionObservation],["afterTurnInput",n.afterTurnInput],["learningCenter",n.learningCenter],["skillLearningLoop",n.skillLearningLoop],["interruptInput",n.interruptInput],["askUserTransport",n.askUserTransport],["permissionCas",n.permissionCas],["providerCredentialBroker",n.providerCredentialBroker],["providerCredentialConnectionBinding",n.providerCredentialConnectionBinding],["providerProbeAuthorization",n.providerProbeAuthorization],["runBoundHostTools",n.runBoundHostTools],["coderOwnerFencing",n.coderOwnerFencing],["crashOutcomeModel",n.crashOutcomeModel],["coderFeatureMatrix",n.coderFeatureMatrix],["sessionAdmission",n.sessionAdmission],["completeObservationSnapshot",n.completeObservationSnapshot],["contextCompaction",n.contextCompaction],["transcriptPaging",n.transcriptPaging],["transcriptSearch",n.transcriptSearch],["conversationHistory",n.conversationHistory],["connectionLifecycle",n.connectionLifecycle],["typedRuntimeEvents",n.typedRuntimeEvents],["daemonSafeRunInput",n.daemonSafeRunInput],["sharedSessionSettings",n.sharedSessionSettings],["durableRecoveryQueries",n.durableRecoveryQueries],["managedRunDurability",n.managedRunDurability],["actorSettlementConvergence",n.actorSettlementConvergence],["daemonManagement",n.daemonManagement],["daemonClientInventory",n.daemonClientInventory],["daemonOrphanExit",n.daemonOrphanExit],["daemonShutdownVerification",n.daemonShutdownVerification],["runtimeEventCoalescing",n.runtimeEventCoalescing],["liveOutputSegments",n.liveOutputSegments],["integrationConfigResilience",n.integrationConfigResilience],["effectiveConfig",n.effectiveConfig],["actorControlPlane",n.actorControlPlane],["sandboxRuntime",n.sandboxRuntime],["runtimeAutoModeGuardrail",n.runtimeAutoModeGuardrail]];for(let[s,a]of t)a!==void 0&&ps(r,s,a)}o(fs,"assertRuntimeCapabilities");function ps(e,n,r){let t=e[n];if(!W(t)||!Number.isSafeInteger(t.version)||Number(t.version)<r)throw new Error(`Runtime does not support the required ${n} capability.`)}o(ps,"assertVersionedRuntimeCapability");async function Ug(e={}){if(e.autoStart===!0)throw new Error("connectKodaXRuntime is passive; use ensureKodaXRuntime to start or update a Host.");if(e.daemonLifecycle!==void 0)throw new Error("Daemon lifecycle changes require ensureKodaXRuntime; connectKodaXRuntime is passive.");return te(e,!1)}o(Ug,"connectKodaXRuntime");async function zg(e={}){return vr({...e,autoStart:!0},!0)}o(zg,"ensureKodaXRuntime");async function vr(e,n,r){if(e.autoStart!==!0||e.transport!==void 0)return te(e,n,r);re("daemonStartupTimeoutMs",e.daemonStartupTimeoutMs,1);let t=Date.now()+(e.daemonStartupTimeoutMs??6e4),s=Gn(e.homeDir),a=e.sessionsDir??Q.join(s.configHome,"sessions"),d=G(e.onStartupProgress),c;for(;c===void 0;){if(e.daemonStartupSignal?.throwIfAborted(),Date.now()>=t)throw new q("Host startup timed out while another launcher was initializing.");c=ut(a),c===void 0&&(d({stage:"waiting",reason:"host_starting"}),await Ae(Math.min(50,t-Date.now()),e.daemonStartupSignal))}try{return await te(e,n,r,2,t,0,d)}finally{c()}}o(vr,"connectKodaXRuntimeWithStartupCoordination");function Jn(e,n,r){let t=e[n];return W(t)&&Number.isSafeInteger(t.version)&&Number(t.version)>=r}o(Jn,"hasVersionedRuntimeCapability");var yr=!1;function gs(e){if(yr)return;let n=e.sandboxRuntime;W(n)&&n.gitSafeDirectory!=="authorized-repo-roots"&&(yr=!0,E({source:"runtime.daemon.capabilities",level:"warn",message:"Connected daemon predates sandbox git safe-directory authorization; sandboxed git may keep hitting dubious ownership on authorized roots until the daemon restarts."}))}o(gs,"diagnoseStaleGitSafeDirectory");async function ys(e,n,r){let t=!1,s;if(await e.close().then(()=>{t=!0},a=>{s=a,E({source:"runtime.daemon.upgrade",level:"warn",message:"Failed to close the incompatible daemon client.",detail:Rr(a)})}),!t)try{await n.close()}catch(a){throw E({source:"runtime.daemon.upgrade",level:"error",message:"Failed to release the incompatible daemon process lease.",detail:Rr(a)}),new q("The temporary incompatible-daemon client could not be closed. Relaunch before retrying the capability upgrade so a retained client lease cannot block settlement.",void 0,{cause:new AggregateError([s,a],"Both temporary daemon client close attempts failed.")},r)}}o(ys,"closeRejectedCapabilityUpgrade");function hs(e){return vn({identity:{...e.identity,mode:"daemon",isolation:"process"},transport:e.transport,capabilities:e.capabilities,...e.grantedScopes!==void 0?{grantedScopes:e.grantedScopes}:{}})}o(hs,"createCapabilityUpgradeRuntime");function Rs(e){return{...e.requirements,liveOutputSegments:1,runtimeAutoModeGuardrail:6,sharedSessionSettings:2,...process.platform==="win32"?{sandboxRuntime:11}:{},...e.autoStart===!0?{actorSettlementConvergence:2,crashOutcomeModel:2,managedRunDurability:1,...process.platform==="win32"?{daemonShutdownVerification:1}:{},runtimeEventCoalescing:1,...e.daemonOrphanExitMs!==void 0?{daemonOrphanExit:1}:{}}:{}}}o(Rs,"daemonCapabilityRequirements");function ws(e,n){let r=["productClient","sessionDrafts","sessionPromotion","productExecutionBinding","productInputRecovery","productExecutionModeConstraint","productHistoryBoundaries","productExecutionAuthorization","productExitControl","productExecutionFacts","productActorAuthorization","actorSettlementConvergence","crashOutcomeModel","managedRunDurability","conversationHistory","sharedSessionSettings","runtimeAutoModeGuardrail","runtimeEventCoalescing","liveOutputSegments","daemonShutdownVerification","sandboxRuntime","daemonClientInventory","daemonOrphanExit"];for(let t of r){let s=n[t];if(typeof s=="number"&&!Jn(e,t,s))return E({source:"runtime.daemon.capabilities",level:"warn",message:"Runtime daemon does not satisfy a required capability.",detail:{stage:"capability-check",capability:t,requiredVersion:s}}),{name:t,version:s}}}o(ws,"firstUpgradeableCapability");function hr(e,n,r,t){let s=z,a=!t||s==="0.0.0"||e.version==="0.0.0"?0:Ce(e.version,s);if(a===void 0)throw new q(`Runtime daemon version ${JSON.stringify(e.version)} is not a comparable Semantic Version. The client will not replace an owner whose version ordering is unknown.`,void 0,void 0,"runtimeVersion");let d=ws(n,r);if(d!==void 0)return d;if(t&&a!==1)return a===0&&Ss(e)?{name:"runtimeBuild",version:1}:s!=="0.0.0"&&a===-1?{name:"runtimeVersion",version:1}:void 0}o(hr,"firstRequiredDaemonUpgrade");function Ss(e){if(!e.build)throw new q("This Host predates build identification. Finish its work and perform one normal daemon restart; its loaded code cannot be verified.",void 0,void 0,"runtimeBuild");if(e.build.origin!==ae.origin)throw new q("A different KodaX installation owns this profile. Connect passively to use that Host, or stop it explicitly before starting this installation.",void 0,void 0,"runtimeBuild");return e.build.fingerprint!==ae.fingerprint}o(Ss,"requiresRuntimeBuildRefresh");function zn(){if(jn().fingerprint!==ae.fingerprint)throw new q("This launcher loaded an earlier build. Restart the calling process before starting or updating a Host.",void 0,void 0,"launcherBuild")}o(zn,"assertCurrentLauncherBuild");function Ce(e,n){let r=o(a=>{let d=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.exec(a);if(d===null)return;let c=[];for(let l of(d[4]??"").split(".").filter(Boolean))if(/^\d+$/.test(l)){if(!/^(0|[1-9]\d*)$/.test(l))return;c.push(BigInt(l))}else c.push(l);return{core:[BigInt(d[1]),BigInt(d[2]),BigInt(d[3])],prerelease:c}},"parse"),t=r(e),s=r(n);if(!(t===void 0||s===void 0)){for(let a=0;a<3;a+=1)if(t.core[a]!==s.core[a])return t.core[a]<s.core[a]?-1:1;if(t.prerelease.length===0||s.prerelease.length===0)return t.prerelease.length===s.prerelease.length?0:t.prerelease.length===0?1:-1;for(let a=0;a<Math.max(t.prerelease.length,s.prerelease.length);a+=1){let d=t.prerelease[a],c=s.prerelease[a];if(d!==c)return d===void 0?-1:c===void 0?1:typeof d=="bigint"&&typeof c=="string"?-1:typeof d=="string"&&typeof c=="bigint"?1:d<c?-1:1}return 0}}o(Ce,"compareSemanticVersions");function vs(e){if(e?.probeInitialization===void 0)return;let n=ye(e.probeInitialization);return{identity:br(n.identity),capabilities:n.capabilities===void 0?{}:ye(n.capabilities)}}o(vs,"parseProbedDaemon");function Is(){return{name:"kodax-host-launcher",instanceId:`sdk_launcher_${wr().replace(/-/g,"")}`,clientType:"automation"}}o(Is,"capabilityUpgradeClientInfo");function Ir(e){return W(e)&&e.code==="conflict"||Tn(e)&&e.reconnectable&&(e.code==="protocol_closed"||e.code==="transport_error")}o(Ir,"isDaemonStartupReadInterruption");var Ee=class extends q{static{o(this,"RuntimeDaemonInspectionInterruptedError")}retryable=!0};async function bs(e){let n=hs(e),r,t=!1;try{if(!Jn(e.capabilities,"daemonManagement",1))throw new Error("The older Host does not support normal managed shutdown; stop it and retry startup.");let s=e.identity.build?.origin===ae.origin&&e.identity.build.fingerprint!==ae.fingerprint&&Ce(e.identity.version,z)===0,a=e.requiredCapability==="daemonOrphanExit"&&e.orphanExitMs!==void 0&&e.identity.build?.fingerprint===ae.fingerprint&&Ce(e.identity.version,z)===0;if(!s&&!a&&Ce(e.identity.version,z)!==-1)throw new Error("Only a provably older Host can be refreshed automatically; use a compatible installation.");t=!0;let d=await n.daemon.inspect();if(t=!1,r=d.preflight,!r.canStop)throw new Error(`The older Host is busy: ${r.blockers.join(", ")}. Finish or stop that work and retry.`);let c=d.owner,l=B(e.lease.paths.lockFile),m=e.sharedOwnerFile===void 0?void 0:B(e.sharedOwnerFile);if(d.runtimeId!==e.identity.runtimeId||c.runtimeId!==e.identity.runtimeId||l?.runtimeId!==c.runtimeId||l.pid!==c.pid||l.createdAt!==c.createdAt||c.kind!=="daemon"||l.kind!==c.kind||!c.processStartIdentity||l.processStartIdentity!==c.processStartIdentity||e.sharedOwnerFile!==void 0&&(m?.runtimeId!==c.runtimeId||m.pid!==c.pid||m.processStartIdentity!==c.processStartIdentity))throw new Error("The original Host process identity cannot be confirmed; retry against the current owner.");if(zn(),e.startupSignal?.throwIfAborted(),Date.now()>=e.startupDeadline)throw new Error("Host startup timed out before managed shutdown.");e.reportProgress({stage:"upgrading"}),await e.transport.request("runtime.shutdown"),e.reportProgress({stage:"waiting",reason:"host_stopping"}),await n.close();let p=e.startupDeadline-Date.now();if(p<=0)throw new Error("Host startup timed out before owner exit could be confirmed. Wait for the old Host to exit before retrying startup.");await $n(c,p,e.startupSignal)}catch(s){let a=t&&Ir(s)?Ee:q;throw E({source:"runtime.daemon.upgrade-blocked",level:"warn",message:s instanceof Error?s.message:"Host refresh failed.",detail:{ownerProfile:e.identity.profile,runtimeId:e.identity.runtimeId,capability:e.requiredCapability,blockers:r?.blockers}}),new a(s instanceof Error?s.message:"The older Host could not be refreshed.",r,{cause:s},e.requiredCapability,e.identity.profile)}finally{await ys(n,e.lease,e.requiredCapability)}}o(bs,"replaceRuntimeDaemonForCapabilityUpgrade");function Ae(e,n){return n?.throwIfAborted(),new Promise((r,t)=>{let s=setTimeout(()=>{n?.removeEventListener("abort",a),r()},e),a=o(()=>{clearTimeout(s),n?.removeEventListener("abort",a),t(n?.reason)},"cancel");n?.addEventListener("abort",a,{once:!0})})}o(Ae,"waitForDaemonStartupRetry");async function ks(e,n,r,t){let s=new AbortController,a=t?AbortSignal.any([s.signal,t]):s.signal;a.throwIfAborted();let d=r-Date.now(),c=new L("Host startup timed out during authenticated attachment.","timeout");if(d<=0)throw c;try{return await Promise.race([e.request("initialize",n,{signal:a}),Ae(d,a).then(()=>{throw s.abort(c),c})])}finally{s.abort()}}o(ks,"initializeRuntimeDaemonForStartup");function Ze(e,n){if(n?.throwIfAborted(),Date.now()>=e)throw new L("Host startup timed out before the Client became ready.","timeout")}o(Ze,"assertRuntimeDaemonStartupActive");async function Wn(e,n,r,t,s){for(;;){Ze(r,t);try{let a=on(e,n);return Ze(r,t),a}catch(a){if(!W(a)||a.code!=="session_storage_owned"||a.retryable!==!0||Date.now()>=r||(s({stage:"waiting",reason:"host_starting"}),await Ae(Math.min(250,r-Date.now()),t),Date.now()>=r))throw a}}}o(Wn,"waitForRuntimeSessionStorageHost");async function te(e,n,r,t=2,s=Date.now()+(e.daemonStartupTimeoutMs??6e4),a=0,d=G(e.onStartupProgress)){n&&e.autoStart===!0&&zn(),re("permissionTimeoutMs",e.permissionTimeoutMs,0),re("userInputTimeoutMs",e.userInputTimeoutMs,0),re("daemonStartupTimeoutMs",e.daemonStartupTimeoutMs,1),re("daemonConnectTimeoutMs",e.daemonConnectTimeoutMs,1),re("daemonOrphanExitMs",e.daemonOrphanExitMs,1);let c=e.daemonOrphanExitMs??(e.daemonLifecycle==="interactive"?3e4:void 0);if(e.daemonLifecycle==="persistent"&&e.daemonOrphanExitMs!==void 0)throw new Error("A persistent daemon cannot also request daemonOrphanExitMs.");if(e.daemonLifecycle!==void 0&&e.autoStart!==!0)throw new Error("Daemon lifecycle changes require owner auto-start.");if(e.daemonStartupSignal?.throwIfAborted(),n&&e.autoStart===!0&&Date.now()>=s)throw new q("Host startup timed out before another connection attempt.",void 0,void 0,"runtimeBuild");let l=e.endpoint!==void 0?Es(e.endpoint):void 0,m=Gn(e.homeDir),p=n&&e.autoStart===!0&&e.transport===void 0&&l===void 0?await Wn(m.configHome,e.sessionsDir??Q.join(m.configHome,"sessions"),s,e.daemonStartupSignal,d):void 0,g=p?.profile??e.profile??"default";if(p){let b=Z(m.configHome,e.profile??"default");g!==b.profile&&_e(b,e.sessionsDir??Q.join(m.configHome,"sessions"),p)}p&&a===0&&E({source:"runtime.daemon.storage-owner",level:"info",message:`Session storage is owned by Host profile ${p.profile}.`,detail:{requestedProfile:e.profile??"default",ownerProfile:p.profile,runtimeId:p.owner.runtimeId,pid:p.owner.pid}});let h;try{h=e.transport===void 0&&e.autoStart===!0?await Xn({homeDir:m.homeDir,configHome:m.configHome,profile:g,endpoint:l,defaultProvider:e.defaultProvider,defaultModel:e.defaultModel,sessionsDir:e.sessionsDir,permissionTimeoutMs:e.permissionTimeoutMs,userInputTimeoutMs:e.userInputTimeoutMs,orphanExitMs:c,startupTimeoutMs:Math.max(1,s-Date.now()),startupSignal:e.daemonStartupSignal,onStartupProgress:e.onStartupProgress===void 0?void 0:d,connectTimeoutMs:e.daemonConnectTimeoutMs,ownerBootstrap:r}):void 0}catch(b){if(e.daemonStartupSignal?.throwIfAborted(),Date.now()>=s)throw b;let M=n&&e.autoStart===!0&&e.transport===void 0&&l===void 0?await Wn(m.configHome,e.sessionsDir??Q.join(m.configHome,"sessions"),s,e.daemonStartupSignal,d):void 0;if(!M||M.owner.runtimeId===p?.owner.runtimeId)throw b;if(t>0&&Date.now()<s)return te(e,!0,r,t-1,s,a,d);throw Object.assign(new Error(`Shared Host profile ${M.profile} won Session storage startup; retry against its current owner.`,{cause:b}),{code:"session_storage_owned",retryable:!0,ownerProfile:M.profile})}let v=l??h?.endpoint??(e.transport===void 0?He(g,Te(m.homeDir,m.configHome)):void 0);d({stage:"connecting"});let I=e.transport??h?.transport??(v!==void 0?await fe(v,{connectTimeoutMs:e.daemonConnectTimeoutMs}):void 0);if(!I)throw new Error("connectKodaXRuntime requires a daemon transport, endpoint, or autoStart: true.");let T=Cs({...e,profile:g}),k,A={},R,S=!1,C=!0,w=!1;try{let b=Rs(e),M=vs(h),K=M===void 0?void 0:hr(M.identity,M.capabilities,b,n&&e.autoStart===!0),U={name:e.clientInfo?.name??"kodax-sdk",instanceId:e.clientInfo?.instanceId??`sdk_${wr().replace(/-/g,"")}`,...e.clientInfo?.instanceSecret!==void 0?{instanceSecret:e.clientInfo.instanceSecret}:{},...e.clientInfo?.title!==void 0?{title:e.clientInfo.title}:{},...e.clientInfo?.version!==void 0?{version:e.clientInfo.version}:{},...e.clientInfo?.clientType!==void 0?{clientType:e.clientInfo.clientType}:{}},i=K===void 0?void 0:Is(),u=i??U,f={profile:g,connectionPurpose:"client",autoStart:e.autoStart===!0,...e.daemonLifecycle==="persistent"&&i===void 0?{daemonLifecycle:"persistent"}:{},...T!==void 0?{token:T}:{},clientInfo:u,capabilities:{...e.capabilities},...v!==void 0?{endpoint:v.path}:{}},y=ye(await(n&&e.autoStart===!0?ks(I,f,s,e.daemonStartupSignal):I.request("initialize",f)));C=!1,k=br(y.identity);let x=g;if(k.profile!==x)throw new Error(`Runtime daemon profile mismatch: expected ${x}, got ${k.profile}`);let D=p;if(p&&k.runtimeId===p.owner.runtimeId)try{D=on(m.configHome,e.sessionsDir??Q.join(m.configHome,"sessions"))}catch(Y){throw w=W(Y)&&Y.code==="session_storage_owned"&&Y.retryable===!0,Y}if(n&&e.autoStart===!0&&Ze(s,e.daemonStartupSignal),p&&(k.runtimeId!==p.owner.runtimeId||D?.owner.runtimeId!==k.runtimeId||D.profile!==k.profile))throw w=!0,Object.assign(new Error("The shared Session Host changed during attachment; retry against its current owner."),{code:"session_storage_owned",retryable:!0});A=y.capabilities===void 0?{}:ye(y.capabilities),process.platform==="win32"&&gs(A),R=xs(y.grantedScopes);let N=hr(k,A,b,n&&e.autoStart===!0);if(M!==void 0&&M.identity.runtimeId!==k.runtimeId)throw w=!0,new q("Runtime daemon owner changed between capability probe and authenticated attach. Retry against the current owner.",void 0,void 0,N?.name??K?.name??"runtimeIdentity");if(N!==void 0){if((y.daemonRetention==="explicit"||y.daemonRetention==="service")&&b.daemonOrphanExit!==void 0)throw new q("This Host is explicitly retained or serves A2A. Connect without an idle-exit requirement, or stop it explicitly before changing its lifetime.",void 0,void 0,"daemonOrphanExit");if(t<0)throw new q("Host startup did not converge on the requested build. Retry after the installation has finished updating.",void 0,void 0,N.name);if(z!=="0.0.0"&&Ce(k.version,z)===1)throw new q(`A newer Runtime daemon does not satisfy ${N.name} v${N.version}. The older client will not replace it; use a compatible KodaX client.`,void 0,void 0,N.name);if(!n||e.autoStart!==!0||h===void 0)throw new q(`Runtime daemon does not support ${N.name} v${N.version}. Stop all daemon work and restart it with a compatible KodaX installation.`,void 0,void 0,N.name);let Y=Date.now();try{await bs({identity:k,capabilities:A,transport:I,lease:h,...R!==void 0?{grantedScopes:R}:{},requiredCapability:N.name,...p?{sharedOwnerFile:p.ownerFile}:{},orphanExitMs:c,startupDeadline:s,startupSignal:e.daemonStartupSignal,reportProgress:d})}catch(ie){if(ie instanceof q&&(ie instanceof Ee||ie.preflight?.blockers.length===1&&ie.preflight.blockers[0]==="connected_clients")&&Date.now()<s){let xr=Math.max(Math.min(950,100*2**Math.min(a,4)),2*(Date.now()-Y)),Pr=50+Math.floor(Math.random()*xr);if(d(ie instanceof Ee?{stage:"checking"}:{stage:"waiting",reason:"connected_clients"}),await Ae(Math.min(Pr,s-Date.now()),e.daemonStartupSignal),Date.now()>=s)throw ie;return te(e,!0,r,t,s,a+1,d)}throw ie}finally{S=!0}let kr=y.daemonLifecycle==="persistent"||y.daemonLifecycle!=="interactive"&&!Jn(A,"daemonOrphanExit",1);return te(e.daemonOrphanExitMs===void 0&&b.daemonOrphanExit===void 0&&(y.daemonRetention==="explicit"||e.daemonLifecycle==="interactive"&&kr&&y.daemonRetention!=="service")?{...e,daemonLifecycle:y.daemonRetention==="explicit"?"persistent":void 0}:e,n,r,t-1,s,a,d)}fs(A,b),n&&e.autoStart===!0&&zn(),n&&e.autoStart===!0&&Ze(s,e.daemonStartupSignal)}catch(b){if(S||(h!==void 0?await h.close():await I.close?.()),w&&n&&e.autoStart===!0&&e.transport===void 0&&l===void 0&&t>0&&Date.now()<s)return e.daemonStartupSignal?.throwIfAborted(),await Wn(m.configHome,e.sessionsDir??Q.join(m.configHome,"sessions"),s,e.daemonStartupSignal,d),te(e,!0,r,t-1,s,a,d);if(n&&h&&C&&t>0&&Ir(b)){if(Date.now()>=s||(await Ae(Math.min(50+Math.floor(Math.random()*100),s-Date.now()),e.daemonStartupSignal),Date.now()>=s))throw b;return te(e,!0,r,t-1,s,a,d)}throw b}let P=vn({identity:{...k,mode:"daemon",isolation:"process"},transport:I,capabilities:A,...R!==void 0?{grantedScopes:R}:{}});return d({stage:"ready"}),h?{...P,async close(){await P.close()}}:P}o(te,"connectKodaXRuntimeInternal");function re(e,n,r){if(n===void 0||Number.isSafeInteger(n)&&n>=r&&n<=Un)return;let t=r===0?"non-negative":"positive";throw new Error(`${e} must be a ${t} integer no greater than ${Un}.`)}o(re,"assertRuntimeTimeout");function xs(e){if(!Array.isArray(e))return;let n=e.filter(r=>typeof r=="string"&&Ps(r));return n.length===e.length?n:void 0}o(xs,"parseRuntimeGrantedScopes");function Ps(e){return e==="session:observe"||e==="session:write"||e==="run:control"||e==="interaction:respond"||e==="permission:respond"||e==="permission:grant-admin"||e==="integration:admin"||e==="workflow:control"||e==="learning:read"||e==="learning:control"||e==="artifact:write"||e==="agent:control"||e==="credential:register"||e==="host-tool:register"||e==="execution:register"||e==="owner:admin"||e==="daemon:admin"}o(Ps,"isRuntimeGrantedScope");function Cs(e){if(e.daemonToken!==void 0)return e.daemonToken;if(!(e.transport!==void 0&&e.autoStart!==!0))return Me(Sr(e.homeDir,e.profile).paths)}o(Cs,"resolveConnectDaemonToken");function Es(e){return typeof e!="string"?e:{kind:process.platform==="win32"||e.startsWith("\\\\.\\pipe\\")?"pipe":"unix",path:e}}o(Es,"normalizeRuntimeDaemonEndpoint");function As(e,n){if(e===void 0)return n;let r=Date.parse(e);return Number.isFinite(r)?Math.min(Un,Math.max(1,r-Date.now())):1}o(As,"resolvePermissionTimeoutMs");function Vn(e){if(e===void 0)return!1;let n=Date.parse(e);return Number.isFinite(n)&&n<=Date.now()}o(Vn,"runtimeDeadlineReached");function W(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}o(W,"isRecord");function ye(e){if(!W(e))throw new Error("Invalid runtime daemon response: expected object");return e}o(ye,"requireRuntimeRecord");function br(e){let n=ye(e);if(typeof n.runtimeId!="string"||typeof n.mode!="string"||typeof n.profile!="string"||typeof n.startedAt!="string"||typeof n.version!="string")throw new Error("Invalid runtime daemon response: missing identity fields");let r=n.build,t;if(r!==void 0){if(!W(r)||typeof r.origin!="string"||r.origin.length===0||r.origin.length>4096||typeof r.fingerprint!="string"||!/^[a-f0-9]{64}$/.test(r.fingerprint))throw new Error("Invalid runtime daemon response: invalid build identity");t={origin:r.origin,fingerprint:r.fingerprint}}return{runtimeId:n.runtimeId,mode:n.mode==="daemon"?"daemon":"embedded",profile:n.profile,startedAt:n.startedAt,version:n.version,...t===void 0?{}:{build:t},...n.isolation==="inline"||n.isolation==="process"?{isolation:n.isolation}:{}}}o(br,"parseRuntimeIdentity");function Rr(e){return e instanceof Error?e:new Error(String(e))}o(Rr,"normalizeError");export{lt as a,Gi as b,Qi as c,ft as d,oe as e,Ne as f,se as g,Fe as h,Le as i,me as j,Tn as k,Ie as l,hi as m,Mn as n,Wt as o,Ut as p,bi as q,ki as r,q as s,Ye as t,gr as u,Eg as v,Ag as w,Tg as x,_g as y,Xg as z,Wg as A,Ug as B,zg as C};
|