@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.
Files changed (161) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +55 -2
  3. package/README_CN.md +37 -1
  4. package/dist/artifacts/dist/contract.js +1 -1
  5. package/dist/artifacts/dist/contract.js.map +1 -1
  6. package/dist/artifacts/dist/document-render.d.ts +1 -1
  7. package/dist/artifacts/dist/document-render.js +41 -10
  8. package/dist/artifacts/dist/document-render.js.map +1 -1
  9. package/dist/artifacts/dist/kodax.js +1 -1
  10. package/dist/artifacts/dist/kodax.js.map +1 -1
  11. package/dist/artifacts/dist/libreoffice.d.ts +6 -1
  12. package/dist/artifacts/dist/libreoffice.js +37 -13
  13. package/dist/artifacts/dist/libreoffice.js.map +1 -1
  14. package/dist/artifacts/dist/runtime.js +13 -6
  15. package/dist/artifacts/dist/runtime.js.map +1 -1
  16. package/dist/artifacts/skills/artifact-review/SKILL.md +5 -1
  17. package/dist/chunks/agent-NWQPMZ7B.js +2 -0
  18. package/dist/chunks/agent-adapter-V3IPADCX.js +2 -0
  19. package/dist/chunks/argument-completer-VNKHT4X4.js +2 -0
  20. package/dist/chunks/{bedrock-native-Z5VNWF5U.js → bedrock-native-OEPOBW6W.js} +1 -1
  21. package/dist/chunks/{chunk-NSR4RW2F.js → chunk-3I2MIS4D.js} +1 -1
  22. package/dist/chunks/{chunk-RYBUYHDL.js → chunk-3Y5PBEOD.js} +1 -1
  23. package/dist/chunks/chunk-4FVCMKG2.js +20 -0
  24. package/dist/chunks/{chunk-F6GJXQNA.js → chunk-4GYXZTOD.js} +7 -7
  25. package/dist/chunks/{chunk-EISRVOBJ.js → chunk-4Z7ZHL6V.js} +2 -2
  26. package/dist/chunks/{chunk-W2CWO4PQ.js → chunk-576AAIQM.js} +1 -1
  27. package/dist/chunks/chunk-5E2P4RYS.js +4 -0
  28. package/dist/chunks/{chunk-X5M7TLJV.js → chunk-5LFQ5FVY.js} +1 -1
  29. package/dist/chunks/{chunk-WMMESRP3.js → chunk-6RDMSU4B.js} +1 -1
  30. package/dist/chunks/{chunk-3CP7AUWY.js → chunk-7BA4TSKC.js} +1 -1
  31. package/dist/chunks/{chunk-I325ER7D.js → chunk-AUU3N4V4.js} +1 -1
  32. package/dist/chunks/{chunk-DCE7XQUG.js → chunk-AYDLX2UK.js} +1 -1
  33. package/dist/chunks/{chunk-D36OIMV7.js → chunk-BP3NAYKY.js} +64 -64
  34. package/dist/chunks/{chunk-6TITQQAI.js → chunk-BSCSKJNC.js} +230 -229
  35. package/dist/chunks/{chunk-2HH5AS7E.js → chunk-DAQGOWKD.js} +88 -462
  36. package/dist/chunks/{chunk-UF3GZ5PO.js → chunk-EZF6ZRCO.js} +1 -1
  37. package/dist/chunks/chunk-F2TFWNVZ.js +2 -0
  38. package/dist/chunks/{chunk-53CJDQS2.js → chunk-FVXZ5L33.js} +1 -1
  39. package/dist/chunks/{chunk-MCDZNQWD.js → chunk-G32BMSHH.js} +75 -71
  40. package/dist/chunks/chunk-HJLYZ5AX.js +361 -0
  41. package/dist/chunks/{chunk-P55RJIOG.js → chunk-IOIFCU46.js} +1 -1
  42. package/dist/chunks/{chunk-DV5YPYLW.js → chunk-IR46ZHXU.js} +1 -1
  43. package/dist/chunks/chunk-NJDR5EEF.js +6 -0
  44. package/dist/chunks/{chunk-KDSO7V4O.js → chunk-OC3DQXN6.js} +1 -1
  45. package/dist/chunks/{chunk-J2L2NK6E.js → chunk-OMVAPRQI.js} +90 -57
  46. package/dist/chunks/chunk-OXCB2TRF.js +42 -0
  47. package/dist/chunks/{chunk-C6JGLEYD.js → chunk-P6R6V7EW.js} +1 -1
  48. package/dist/chunks/{chunk-SK3RRGHJ.js → chunk-PFBZ4ZXO.js} +28 -28
  49. package/dist/chunks/{chunk-V2XJSFFE.js → chunk-QDE6THC5.js} +1 -1
  50. package/dist/chunks/{chunk-EPK6EWRI.js → chunk-QRYEP34M.js} +1 -1
  51. package/dist/chunks/chunk-ROWYE472.js +460 -0
  52. package/dist/chunks/{chunk-R42S4BLA.js → chunk-SQGESMNC.js} +1 -1
  53. package/dist/chunks/{chunk-XZSFUGPN.js → chunk-U73VEVMP.js} +1 -1
  54. package/dist/chunks/{chunk-D425EZGC.js → chunk-V2TG7GNW.js} +1 -1
  55. package/dist/chunks/{chunk-QSZCR5GC.js → chunk-VRO2CDBY.js} +97 -97
  56. package/dist/chunks/{chunk-BBZWF2EA.js → chunk-WMQQQY3D.js} +1 -1
  57. package/dist/chunks/{chunk-JAF2YLZO.js → chunk-X3YYJJTF.js} +2 -2
  58. package/dist/chunks/{chunk-UL6YIT4M.js → chunk-XYRI6ER5.js} +1 -1
  59. package/dist/chunks/chunk-YRPB3LID.js +3 -0
  60. package/dist/chunks/{chunk-5MUVRFMU.js → chunk-ZDAU3LZ2.js} +1 -1
  61. package/dist/chunks/{chunk-WWPVEK6B.js → chunk-ZP3YSYWM.js} +10 -10
  62. package/dist/chunks/{client-LTIFNED5.js → client-NJ32JBC3.js} +1 -1
  63. package/dist/chunks/compaction-config-JBQGU3NO.js +2 -0
  64. package/dist/chunks/{construction-bootstrap-OAZKGI5Y.js → construction-bootstrap-CM47ZXG7.js} +1 -1
  65. package/dist/chunks/dist-O6BHIQEP.js +2 -0
  66. package/dist/chunks/{google-native-WLL27OV7.js → google-native-BV5GKT5B.js} +1 -1
  67. package/dist/chunks/host-PI5NL4W4.js +2 -0
  68. package/dist/chunks/{mistral-native-JXPIDDYZ.js → mistral-native-X42JCFZH.js} +1 -1
  69. package/dist/chunks/{model-DZF6URW3.js → model-MT3WJX76.js} +1 -1
  70. package/dist/chunks/{permission-YVVMLQ5I.js → permission-YVDVSE6H.js} +1 -1
  71. package/dist/chunks/{pi-messages-5LLOZH57.js → pi-messages-DVJANXV5.js} +1 -1
  72. package/dist/chunks/readline-helpers-5JS7UGTE.js +2 -0
  73. package/dist/chunks/run-manager-Y6VYEWSJ.js +2 -0
  74. package/dist/chunks/running-session-ANMBA5XV.js +2 -0
  75. package/dist/chunks/skills-XL2XIBWV.js +2 -0
  76. package/dist/chunks/{tool-dispatch-MLM3QTSU.js → tool-dispatch-2FOG65FC.js} +1 -1
  77. package/dist/chunks/{utils-2QNMYRGA.js → utils-XZ22R6VB.js} +1 -1
  78. package/dist/client-history.js +2 -0
  79. package/dist/history-turn.js +3 -0
  80. package/dist/index.d.ts +19 -19
  81. package/dist/index.js +2 -2
  82. package/dist/kodax_bootstrap.js +1 -1
  83. package/dist/kodax_cli.js +1472 -1810
  84. package/dist/kodax_doctor.js +1 -1
  85. package/dist/maintenance-scheduler.js +2 -0
  86. package/dist/manual-topics.json +32 -3
  87. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  88. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  89. package/dist/native/win32-x64/manifest.json +2 -2
  90. package/dist/one-shot-task.js +1 -1
  91. package/dist/provider-auth-cli.js +1 -1
  92. package/dist/runtime-daemon-schema.json +1 -1
  93. package/dist/sandbox-network-broker.js +93 -441
  94. package/dist/sdk-a2a.d.ts +13 -13
  95. package/dist/sdk-a2a.js +1 -1
  96. package/dist/sdk-agent.d.ts +17 -12
  97. package/dist/sdk-agent.js +1 -1
  98. package/dist/sdk-client.d.ts +6 -6
  99. package/dist/sdk-client.js +1 -1
  100. package/dist/sdk-coding.d.ts +17 -17
  101. package/dist/sdk-coding.js +1 -1
  102. package/dist/sdk-experimental-memory.d.ts +2 -2
  103. package/dist/sdk-experimental-memory.js +1 -1
  104. package/dist/sdk-llm.d.ts +4 -2
  105. package/dist/sdk-llm.js +1 -1
  106. package/dist/sdk-mcp.js +1 -1
  107. package/dist/sdk-media.d.ts +13 -13
  108. package/dist/sdk-media.js +1 -1
  109. package/dist/sdk-repl.d.ts +16 -16
  110. package/dist/sdk-repl.js +1 -1
  111. package/dist/sdk-runtime.d.ts +46 -46
  112. package/dist/sdk-runtime.js +1 -1
  113. package/dist/sdk-sandbox.js +1 -1
  114. package/dist/sdk-session.d.ts +7 -7
  115. package/dist/sdk-session.js +1 -1
  116. package/dist/sdk-skills.js +1 -1
  117. package/dist/semantic-worker.js +87 -435
  118. package/dist/storage-repair-cli.js +1 -1
  119. package/dist/types-chunks/{bash-prefix-extractor.d-CJliu5-D.d.ts → bash-prefix-extractor.d-BghXa_md.d.ts} +9 -3
  120. package/dist/types-chunks/{capsule.d-EMwSALqK.d.ts → capsule.d-BTlvC5qq.d.ts} +4 -4
  121. package/dist/types-chunks/{client-contract-B7q69yMA.d.ts → client-contract-B7ZSFKTv.d.ts} +52 -4
  122. package/dist/types-chunks/{controller.d-C0SAuNKu.d.ts → controller.d-Btu5FDdw.d.ts} +1 -1
  123. package/dist/types-chunks/{controller.d-D-hPLKaA.d.ts → controller.d-D6rEz5LS.d.ts} +3 -3
  124. package/dist/types-chunks/{history-retrieval.d-BwEUR9cb.d.ts → history-retrieval.d-B_AriUJp.d.ts} +1 -1
  125. package/dist/types-chunks/{manifest.d-YE3-AIeO.d.ts → manifest.d-Yyce-hHj.d.ts} +1 -1
  126. package/dist/types-chunks/{public-api.d-BhDU643p.d.ts → public-api.d-BLv3lFmw.d.ts} +9 -4
  127. package/dist/types-chunks/{review-inbox.d-Bgt46S7L.d.ts → review-inbox.d-yREk25Vf.d.ts} +2 -0
  128. package/dist/types-chunks/{review-packet.d-ChOfJaNI.d.ts → review-packet.d-xwXxHmML.d.ts} +1 -1
  129. package/dist/types-chunks/{run-manager.d-ChzguipG.d.ts → run-manager.d-D4sa9JYz.d.ts} +26 -12
  130. package/dist/types-chunks/{runtime-client-info-P_mRDG7j.d.ts → runtime-client-info-oRMrkHmb.d.ts} +2 -2
  131. package/dist/types-chunks/{runtime-event-BW5Pla7a.d.ts → runtime-event-BOyaILWg.d.ts} +3 -1
  132. package/dist/types-chunks/{sdk-runtime-cDe7qmN3.d.ts → sdk-runtime-CYyXmQok.d.ts} +27 -13
  133. package/dist/types-chunks/{sdk-session-D3pcSbnA.d.ts → sdk-session-D6mS5qgO.d.ts} +6 -3
  134. package/dist/types-chunks/{skill-invocation-error.d-gsNNDnnt.d.ts → skill-invocation-error.d-Be3qg4JQ.d.ts} +3 -3
  135. package/dist/types-chunks/{trusted-repl-entry-Bbkd2HlO.d.ts → trusted-repl-entry-YWNc4m-Z.d.ts} +7 -7
  136. package/dist/types-chunks/{types.d-BlXTogOo.d.ts → types.d-BQ-hbni4.d.ts} +1 -1
  137. package/dist/types-chunks/{utils.d-CxHyBvO6.d.ts → utils.d-C0F3Uf2X.d.ts} +6 -6
  138. package/dist/windows-effect-job-programs.json +4 -0
  139. package/docs/ARTIFACT_SDK.md +3 -3
  140. package/docs/CLIENT_CONTRACT.md +4 -2
  141. package/docs/SDK_MIGRATION.md +9 -5
  142. package/docs/SPACE_SDK_SEAMS.md +12 -1
  143. package/package.json +4 -3
  144. package/public_docs/README.md +10 -3
  145. package/public_docs/sdk/embedder-guide.md +1 -1
  146. package/dist/chunks/agent-DS7M57WD.js +0 -2
  147. package/dist/chunks/agent-adapter-TLWGGK3V.js +0 -2
  148. package/dist/chunks/argument-completer-OGCXKTRQ.js +0 -2
  149. package/dist/chunks/chunk-GJXOTOZB.js +0 -465
  150. package/dist/chunks/chunk-KE2NBMAP.js +0 -20
  151. package/dist/chunks/chunk-OGTRDK4Q.js +0 -359
  152. package/dist/chunks/chunk-R2HTPDI7.js +0 -2
  153. package/dist/chunks/chunk-SDPZFH6M.js +0 -4
  154. package/dist/chunks/chunk-XDMNJW6J.js +0 -42
  155. package/dist/chunks/compaction-config-ECMOFP5H.js +0 -2
  156. package/dist/chunks/dist-5J53DGAO.js +0 -2
  157. package/dist/chunks/host-65E5NM5P.js +0 -2
  158. package/dist/chunks/readline-helpers-UZXWBRXQ.js +0 -2
  159. package/dist/chunks/run-manager-ZFACIZM2.js +0 -2
  160. package/dist/chunks/running-session-Q5Y6A2QV.js +0 -2
  161. package/dist/chunks/skills-TJP6BLZJ.js +0 -2
@@ -1,3 +1,3 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as y,b as v}from"./chunks/chunk-D5OW7UD5.js";import{a as g}from"./chunks/chunk-3CP7AUWY.js";import"./chunks/chunk-P55RJIOG.js";import"./chunks/chunk-QSZCR5GC.js";import"./chunks/chunk-V2XJSFFE.js";import"./chunks/chunk-JAF2YLZO.js";import"./chunks/chunk-DV5YPYLW.js";import"./chunks/chunk-X5M7TLJV.js";import"./chunks/chunk-C6JGLEYD.js";import"./chunks/chunk-D36OIMV7.js";import"./chunks/chunk-BBZWF2EA.js";import"./chunks/chunk-F6GJXQNA.js";import"./chunks/chunk-XDMNJW6J.js";import"./chunks/chunk-RYBUYHDL.js";import"./chunks/chunk-4Y6U7AH4.js";import"./chunks/chunk-EPK6EWRI.js";import"./chunks/chunk-ISLK6R2P.js";import"./chunks/chunk-OGTRDK4Q.js";import"./chunks/chunk-GZUWQZJD.js";import"./chunks/chunk-W2CWO4PQ.js";import"./chunks/chunk-TQ475LOI.js";import"./chunks/chunk-65652LR4.js";import"./chunks/chunk-5MUVRFMU.js";import"./chunks/chunk-2HH5AS7E.js";import{b as u}from"./chunks/chunk-J2L2NK6E.js";import"./chunks/chunk-KDSO7V4O.js";import{B as f,Ca as p,ga as m}from"./chunks/chunk-SK3RRGHJ.js";import"./chunks/chunk-WMMESRP3.js";import"./chunks/chunk-QP47JIWP.js";import"./chunks/chunk-52EN2777.js";import"./chunks/chunk-UF3GZ5PO.js";import"./chunks/chunk-KE2NBMAP.js";import"./chunks/chunk-V5RCDBKU.js";import"./chunks/chunk-KDLOPBFZ.js";import{a as c}from"./chunks/chunk-V4WSBIXB.js";import $ from"node:fs";import b from"node:os";import d from"node:path";async function S(r,e){let t=performance.now();try{let i=m(r),s=await p({provider:i,model:i.getModel(),system:"Connectivity probe.",messages:[{role:"user",content:"Reply with the single word: ok"}],timeoutMs:1e4,querySource:"doctor-ping"}),a=Math.round(performance.now()-t);if(s.stopReason==="end_turn"||s.stopReason==="max_tokens")return{name:r,apiKeyEnv:e,reachable:!0,latencyMs:a,detail:"ok"};if(s.stopReason==="timeout")return{name:r,apiKeyEnv:e,reachable:!1,latencyMs:a,detail:"timeout (>10s)"};let o=s.error?.message??s.stopReason;return{name:r,apiKeyEnv:e,reachable:!1,latencyMs:a,detail:P(o)}}catch(i){let s=Math.round(performance.now()-t),a=i instanceof Error?i.message:String(i);return{name:r,apiKeyEnv:e,reachable:!1,latencyMs:s,detail:P(a)}}}c(S,"pingProvider");function P(r){let e=r.replace(/\s+/g," ").trim();return e.length>80?`${e.slice(0,77)}...`:e}c(P,"shortReason");async function R(r){let e=r.filter(t=>t.configured);return Promise.all(e.map(t=>S(t.name,t.apiKeyEnv)))}c(R,"pingConfiguredProviders");function k(){return Object.entries(f).map(([r,e])=>({name:r,apiKeyEnv:e.apiKeyEnv,configured:!!process.env[e.apiKeyEnv]})).sort((r,e)=>Number(e.configured)-Number(r.configured)||r.name.localeCompare(e.name))}c(k,"buildProviderStatuses");function h(r){let e;try{e=$.readdirSync(r)}catch{return null}let t=0,i=0;for(let s of e)try{let a=$.statSync(d.join(r,s));a.isFile()&&(t+=a.size,i+=1)}catch{}return{count:i,bytes:t}}c(h,"summarizeDir");function x(r){if(r<1024)return`${r} B`;let e=["KB","MB","GB"],t=r/1024,i=0;for(;t>=1024&&i<e.length-1;)t/=1024,i+=1;return`${t.toFixed(1)} ${e[i]}`}c(x,"formatBytes");function C(r){let e=u();return{version:r,runtime:{node:process.version,platform:`${b.platform()} ${b.release()}`},terminal:{tty:!!process.stdout.isTTY,truecolor:process.env.COLORTERM==="truecolor"},providers:k(),configHome:e,coreConfig:y(e),locks:v(e),sessions:h(d.join(e,"sessions")),traces:h(d.join(e,".traces"))}}c(C,"buildReport");function T(r,e){return e?` ${r}: ${e.count} files, ${x(e.bytes)}`:` ${r}: (none)`}c(T,"summaryLine");async function j(r,e,t={}){let i=C(r),s=t.ping?await R(i.providers):void 0,a=t.nativeText?g():void 0,o={...i,...s===void 0?{}:{providersPing:s},...a===void 0?{}:{trustedTextNative:a}};if(e){console.log(JSON.stringify(o,null,2));return}let l=[`KodaX v${o.version} diagnostic`,"","Runtime",` Node ${o.runtime.node}`,` Platform: ${o.runtime.platform}`,"","Terminal",` TTY: ${o.terminal.tty?"yes":"no"}`,` Truecolor: ${o.terminal.truecolor?"yes":"unknown"}`,"","Providers (configured = API key env var present; NOT verified reachable)",...o.providers.map(n=>n.configured?` \u2713 ${n.name.padEnd(16)} ${n.apiKeyEnv}`:` \u2717 ${n.name.padEnd(16)} ${n.apiKeyEnv} (set to enable)`),"",`Storage (${o.configHome})`,T("sessions",o.sessions),T("traces ",o.traces),` Core config: ${o.coreConfig.state} (${o.coreConfig.path})${"offset"in o.coreConfig?`; JSON offset ${o.coreConfig.offset}`:""}`,"","Retained locks (presence alone does not prove abandonment)",...o.locks.items.map(n=>` ${n.state}: ${n.path}${n.record?`; ${n.kind}, record=${n.record}, ownership=${n.ownership}`:""}`),...o.locks.issues.map(n=>` unavailable (${n.code}): ${n.path}`),` ${o.locks.recovery}`,` ${o.locks.scope}`];o.providersPing&&l.push("","Provider reachability (live probe \u2014 sent a minimal request, small token cost)",...o.providersPing.length===0?[" (no configured providers to probe)"]:o.providersPing.map(n=>n.reachable?` \u2713 ${n.name.padEnd(16)} ${n.detail} (${n.latencyMs}ms)`:` \u2717 ${n.name.padEnd(16)} ${n.detail}`)),o.trustedTextNative&&l.push("","Trusted text native binding (explicit load/hash check)",o.trustedTextNative.ready?` \u2713 protocol ${o.trustedTextNative.protocol}`:` \u2717 ${o.trustedTextNative.error}`),console.log(l.join(`
2
+ import{a as y,b as v}from"./chunks/chunk-D5OW7UD5.js";import{a as g}from"./chunks/chunk-7BA4TSKC.js";import"./chunks/chunk-IOIFCU46.js";import"./chunks/chunk-VRO2CDBY.js";import"./chunks/chunk-P6R6V7EW.js";import"./chunks/chunk-BP3NAYKY.js";import"./chunks/chunk-QDE6THC5.js";import"./chunks/chunk-WMQQQY3D.js";import"./chunks/chunk-X3YYJJTF.js";import"./chunks/chunk-4GYXZTOD.js";import"./chunks/chunk-576AAIQM.js";import"./chunks/chunk-IR46ZHXU.js";import"./chunks/chunk-OXCB2TRF.js";import"./chunks/chunk-3Y5PBEOD.js";import"./chunks/chunk-5LFQ5FVY.js";import"./chunks/chunk-4Y6U7AH4.js";import"./chunks/chunk-QRYEP34M.js";import"./chunks/chunk-ISLK6R2P.js";import"./chunks/chunk-HJLYZ5AX.js";import"./chunks/chunk-GZUWQZJD.js";import"./chunks/chunk-TQ475LOI.js";import"./chunks/chunk-65652LR4.js";import"./chunks/chunk-ZDAU3LZ2.js";import"./chunks/chunk-DAQGOWKD.js";import{b as u}from"./chunks/chunk-OMVAPRQI.js";import"./chunks/chunk-OC3DQXN6.js";import{B as f,Ca as p,ga as m}from"./chunks/chunk-PFBZ4ZXO.js";import"./chunks/chunk-52EN2777.js";import"./chunks/chunk-6RDMSU4B.js";import"./chunks/chunk-QP47JIWP.js";import"./chunks/chunk-EZF6ZRCO.js";import"./chunks/chunk-4FVCMKG2.js";import"./chunks/chunk-V5RCDBKU.js";import"./chunks/chunk-KDLOPBFZ.js";import{a as c}from"./chunks/chunk-V4WSBIXB.js";import $ from"node:fs";import b from"node:os";import d from"node:path";async function S(r,e){let t=performance.now();try{let i=m(r),s=await p({provider:i,model:i.getModel(),system:"Connectivity probe.",messages:[{role:"user",content:"Reply with the single word: ok"}],timeoutMs:1e4,querySource:"doctor-ping"}),a=Math.round(performance.now()-t);if(s.stopReason==="end_turn"||s.stopReason==="max_tokens")return{name:r,apiKeyEnv:e,reachable:!0,latencyMs:a,detail:"ok"};if(s.stopReason==="timeout")return{name:r,apiKeyEnv:e,reachable:!1,latencyMs:a,detail:"timeout (>10s)"};let o=s.error?.message??s.stopReason;return{name:r,apiKeyEnv:e,reachable:!1,latencyMs:a,detail:P(o)}}catch(i){let s=Math.round(performance.now()-t),a=i instanceof Error?i.message:String(i);return{name:r,apiKeyEnv:e,reachable:!1,latencyMs:s,detail:P(a)}}}c(S,"pingProvider");function P(r){let e=r.replace(/\s+/g," ").trim();return e.length>80?`${e.slice(0,77)}...`:e}c(P,"shortReason");async function R(r){let e=r.filter(t=>t.configured);return Promise.all(e.map(t=>S(t.name,t.apiKeyEnv)))}c(R,"pingConfiguredProviders");function k(){return Object.entries(f).map(([r,e])=>({name:r,apiKeyEnv:e.apiKeyEnv,configured:!!process.env[e.apiKeyEnv]})).sort((r,e)=>Number(e.configured)-Number(r.configured)||r.name.localeCompare(e.name))}c(k,"buildProviderStatuses");function h(r){let e;try{e=$.readdirSync(r)}catch{return null}let t=0,i=0;for(let s of e)try{let a=$.statSync(d.join(r,s));a.isFile()&&(t+=a.size,i+=1)}catch{}return{count:i,bytes:t}}c(h,"summarizeDir");function x(r){if(r<1024)return`${r} B`;let e=["KB","MB","GB"],t=r/1024,i=0;for(;t>=1024&&i<e.length-1;)t/=1024,i+=1;return`${t.toFixed(1)} ${e[i]}`}c(x,"formatBytes");function C(r){let e=u();return{version:r,runtime:{node:process.version,platform:`${b.platform()} ${b.release()}`},terminal:{tty:!!process.stdout.isTTY,truecolor:process.env.COLORTERM==="truecolor"},providers:k(),configHome:e,coreConfig:y(e),locks:v(e),sessions:h(d.join(e,"sessions")),traces:h(d.join(e,".traces"))}}c(C,"buildReport");function T(r,e){return e?` ${r}: ${e.count} files, ${x(e.bytes)}`:` ${r}: (none)`}c(T,"summaryLine");async function j(r,e,t={}){let i=C(r),s=t.ping?await R(i.providers):void 0,a=t.nativeText?g():void 0,o={...i,...s===void 0?{}:{providersPing:s},...a===void 0?{}:{trustedTextNative:a}};if(e){console.log(JSON.stringify(o,null,2));return}let l=[`KodaX v${o.version} diagnostic`,"","Runtime",` Node ${o.runtime.node}`,` Platform: ${o.runtime.platform}`,"","Terminal",` TTY: ${o.terminal.tty?"yes":"no"}`,` Truecolor: ${o.terminal.truecolor?"yes":"unknown"}`,"","Providers (configured = API key env var present; NOT verified reachable)",...o.providers.map(n=>n.configured?` \u2713 ${n.name.padEnd(16)} ${n.apiKeyEnv}`:` \u2717 ${n.name.padEnd(16)} ${n.apiKeyEnv} (set to enable)`),"",`Storage (${o.configHome})`,T("sessions",o.sessions),T("traces ",o.traces),` Core config: ${o.coreConfig.state} (${o.coreConfig.path})${"offset"in o.coreConfig?`; JSON offset ${o.coreConfig.offset}`:""}`,"","Retained locks (presence alone does not prove abandonment)",...o.locks.items.map(n=>` ${n.state}: ${n.path}${n.record?`; ${n.kind}, record=${n.record}, ownership=${n.ownership}`:""}`),...o.locks.issues.map(n=>` unavailable (${n.code}): ${n.path}`),` ${o.locks.recovery}`,` ${o.locks.scope}`];o.providersPing&&l.push("","Provider reachability (live probe \u2014 sent a minimal request, small token cost)",...o.providersPing.length===0?[" (no configured providers to probe)"]:o.providersPing.map(n=>n.reachable?` \u2713 ${n.name.padEnd(16)} ${n.detail} (${n.latencyMs}ms)`:` \u2717 ${n.name.padEnd(16)} ${n.detail}`)),o.trustedTextNative&&l.push("","Trusted text native binding (explicit load/hash check)",o.trustedTextNative.ready?` \u2713 protocol ${o.trustedTextNative.protocol}`:` \u2717 ${o.trustedTextNative.error}`),console.log(l.join(`
3
3
  `))}c(j,"runDoctor");export{j as runDoctor};
@@ -0,0 +1,2 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{i as l,n as y}from"./chunks/chunk-5E2P4RYS.js";import"./chunks/chunk-DAQGOWKD.js";import{h as p}from"./chunks/chunk-OMVAPRQI.js";import"./chunks/chunk-OC3DQXN6.js";import"./chunks/chunk-PFBZ4ZXO.js";import"./chunks/chunk-52EN2777.js";import"./chunks/chunk-6RDMSU4B.js";import"./chunks/chunk-QP47JIWP.js";import"./chunks/chunk-EZF6ZRCO.js";import"./chunks/chunk-4FVCMKG2.js";import"./chunks/chunk-V5RCDBKU.js";import"./chunks/chunk-KDLOPBFZ.js";import{a as c}from"./chunks/chunk-V4WSBIXB.js";import{constants as g}from"node:fs";import{isUtf8 as E}from"node:buffer";import{lstat as b,open as O,opendir as N,unlink as A}from"node:fs/promises";import I from"node:path";import{isDeepStrictEqual as L}from"node:util";var R="[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}",D=new RegExp(`^daemon\\.lock\\.${R}\\.tmp$`,"i"),h=new RegExp(`^daemon\\.json\\.([1-9][0-9]{0,9})\\.${R}\\.tmp$`,"i");function m(t,n){return t.dev===n.dev&&t.ino===n.ino&&t.size===n.size&&t.mtimeNs===n.mtimeNs&&t.ctimeNs===n.ctimeNs}c(m,"sameFile");async function f(t){try{let n=await b(t,{bigint:!0});if(!n.isFile()||n.size>65536n)return;let i=await O(t,g.O_RDONLY|(g.O_NOFOLLOW??0));try{let e=await i.stat({bigint:!0});if(!m(n,e))return;let a=Buffer.alloc(Number(e.size)+1),{bytesRead:u}=await i.read(a,0,a.length,0);if(BigInt(u)!==e.size)return;let s=a.subarray(0,u);if(!E(s))return;let r=await i.stat({bigint:!0});return m(e,r)?{raw:s,stat:r}:void 0}finally{await i.close()}}catch(n){if(["ENOENT","ELOOP"].includes(n.code??""))return;throw n}}c(f,"readSnapshot");function P(t){try{let n=JSON.parse(t.toString("utf8"));return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:void 0}catch{return}}c(P,"parseRecord");function M(t,n,i){let e=P(n);if(!e||!Number.isSafeInteger(e.pid)||Number(e.pid)<=0||typeof e.runtimeId!="string"||e.runtimeId.length===0||e.runtimeId.length>256)return;let a=h.exec(t);if(a)return e.pid===Number(a[1])&&e.profile===i&&typeof e.startedAt=="string"&&Number.isFinite(Date.parse(e.startedAt))&&typeof e.endpoint=="string"&&e.endpoint.length>0&&typeof e.version=="string"&&e.version.length>0&&["starting","ready","draining","stopping","unhealthy","crashed"].includes(String(e.status))?Number(e.pid):void 0;if(!(!D.test(t)||typeof e.processStartIdentity!="string"||e.processStartIdentity.length===0||e.processStartIdentity.length>512||typeof e.createdAt!="string"||!Number.isFinite(Date.parse(e.createdAt))))return Number(e.pid)}c(M,"publicationPid");async function k(t,n){let i=await f(t.lockFile);return i!==void 0&&L(P(i.raw),n)}c(k,"stillOwnsProfile");async function B(t,n,i,e){let a=I.join(t.rootDir,i),u=await f(a),s=u&&M(i,u.raw,t.profile);if(s===void 0||l({pid:s})!=="gone"||e?.aborted)return!1;let r=y(t.lockFile);if(!r)return!1;try{let o=await f(a);if(!o||!o.raw.equals(u.raw)||!m(o.stat,u.stat)||e?.aborted||!await k(t,n)||l({pid:s})!=="gone")return!1;let d=await b(a,{bigint:!0});return!d.isFile()||!m(d,o.stat)||e?.aborted?!1:(await A(a),!0)}catch(o){if(o.code==="ENOENT")return!1;throw o}finally{r()}}c(B,"removeAbandonedPublication");function v(t,n){let i,e=!1,a,u=c(async()=>{let r=i;i=void 0,await r?.close()},"closeDirectory"),s=c(async r=>{let o={scanned:0,removed:0};if(e||r?.aborted)return o;if(!await k(t,n))return e=!0,await u(),o;for(i??=await N(t.rootDir,{bufferSize:32});o.scanned<32&&!e&&!r?.aborted;){let d=await i.read().catch(async w=>{try{await u()}catch(S){throw new AggregateError([w,S],"Runtime maintenance and directory close failed.")}throw w});if(!d){await u();break}o.scanned+=1,d.isFile()&&(D.test(d.name)||h.test(d.name))&&await B(t,n,d.name,r)&&(o.removed+=1)}return o},"sweep");return{runOnce(r){return a||(a=s(r).finally(()=>{a=void 0})),a},async close(){e=!0;try{await a}finally{await u()}}}}c(v,"createRuntimeDaemonMaintenance");function W(t,n,i,e){let a=v(t,n),u=T({canSweep:c(async s=>{try{let r=await i.preflight(s);return r.runtimeId===n.runtimeId&&r.blockers.every(o=>o==="connected_clients")&&(r.pendingBackgroundWork??0)===0}catch(r){if(r instanceof Error&&"code"in r&&r.code==="conflict")return!1;throw r}},"canSweep"),sweep:c(async s=>{let r=await a.runOnce(s);r.removed>0&&p({source:"runtime.daemon.maintenance",level:"info",message:"Runtime daemon abandoned temporary files removed.",detail:r})},"sweep"),onError:e});return{async close(){await u.close(),await a.close()}}}c(W,"startRuntimeDaemonHostMaintenance");function T(t){let n=new AbortController,i,e,a=c(async()=>{let s,r=new Promise(o=>{s=c(()=>o(!1),"cancelCheck")});n.signal.addEventListener("abort",s,{once:!0});try{await Promise.race([t.canSweep(n.signal),r])&&!n.signal.aborted&&await t.sweep(n.signal)}catch(o){n.signal.aborted&&o instanceof Error&&o.name==="AbortError"||t.onError(o)}finally{n.signal.removeEventListener("abort",s)}},"run"),u=c(s=>{n.signal.aborted||(i=setTimeout(()=>{i=void 0,e=a().finally(()=>{e=void 0,u(3e5)})},s),i.unref())},"schedule");return u(0),{async close(){n.abort(),clearTimeout(i),i=void 0,await e}}}c(T,"startRuntimeDaemonMaintenanceScheduler");export{W as startRuntimeDaemonHostMaintenance,T as startRuntimeDaemonMaintenanceScheduler};
@@ -397,7 +397,19 @@
397
397
  "",
398
398
  "Env mirrors / extras: KODAX_PROVIDER, KODAX_EFFORT, KODAX_FALLBACK_PROVIDERS, KODAX_FAST_*/KODAX_DEEP_*,",
399
399
  "KODAX_REPO_INTELLIGENCE. Env generally overrides file. Project vs user config:",
400
- "user config is ~/.kodax; project-scoped state lives under <repo>/.kodax/."
400
+ "user config is ~/.kodax; project-scoped state lives under <repo>/.kodax/.",
401
+ "",
402
+ "Markdown instructions: ~/.kodax/rules/*.md (relocated by KODAX_HOME) and",
403
+ "<repo>/.kodax/rules/*.md load direct files in filename order, with complete bodies",
404
+ "and source paths in the initial project context. Without a Git root, use cwd.",
405
+ "Precedence: user rules, user AGENTS.md, project rules, root-to-cwd AGENTS.md,",
406
+ "then project .kodax/AGENTS.md. Same-named files in both scopes accumulate.",
407
+ "Each fragment has an 8 KiB UTF-8 limit and each scope a separate 16 KiB budget including source headings.",
408
+ "Empty rules add no prompt text. Oversized or unreadable files are skipped whole.",
409
+ "/reload lists loaded files and skipped reasons. Active managed Runs retain their snapshot.",
410
+ "Host readable-path policies apply to fragments. Writable children inherit project rules.",
411
+ "SDK prompt overrides and read-only children keep their own instruction contracts.",
412
+ "Use exec-policy.jsonc for enforced command policy and Skills for longer task procedures."
401
413
  ],
402
414
  "sources": [
403
415
  {
@@ -568,7 +580,7 @@
568
580
  "Workspace-local .kodax/runtime state remains readable but is denied to shell writes even when the workspace root is writable.",
569
581
  "Its recoverable Session sequence cursor uses a lock-held durable write and reconstructs from event ledgers after truncation.",
570
582
  "Beta.3 repairs Windows WFP probe allocation in doctor and bundled ASRT 0.0.65; SDK installs with --ignore-scripts include the fix.",
571
- "The v0.7.97-beta.2 release uses Windows native shell protocol 10. It uses two authenticated, nonce-bound protocol streams,",
583
+ "The v0.7.97-beta.3 release uses Windows native shell protocol 10. It uses two authenticated, nonce-bound protocol streams,",
572
584
  "keeps control available after target stdin EOF, and accepts timeout/cancellation only after validating a",
573
585
  "nonce-bound terminal record that proves the command Job drained. Runtime capability `sandboxRuntime:11`",
574
586
  "prevents an older daemon from silently serving this authority split.",
@@ -1612,7 +1624,7 @@
1612
1624
  "The v0.7.94 SDK keeps `sandboxRuntime:4` and `crashOutcomeModel:2`.",
1613
1625
  "The v0.7.95 SDK advertises Windows `sandboxRuntime:5` and local",
1614
1626
  "`runtimeExitSettlement:2`; `crashOutcomeModel:2` is unchanged and publication remains manual.",
1615
- "The v0.7.97-beta.2 release advertises Windows `sandboxRuntime:11`; setup generation 11;",
1627
+ "The v0.7.97-beta.3 release advertises Windows `sandboxRuntime:11`; setup generation 11;",
1616
1628
  "`runtimeExitSettlement:2` is retired; `crashOutcomeModel:2` remains current. Linux native text authorities build in digest-pinned",
1617
1629
  "`manylinux_2_28` images and require no `GLIBC_*` symbol newer than 2.28 (Issue 328).",
1618
1630
  "The v0.7.97-alpha.10 release resumes checkpointed Runs and task trees after Host",
@@ -1686,6 +1698,23 @@
1686
1698
  "draining and protected project references land. Script model-facing reliability stays",
1687
1699
  "recommend-iterate; no efficiency or general intelligence improvement is claimed.",
1688
1700
  "Every v0.7.96 stable and v0.7.97-alpha.1 through beta.1 contract is retained.",
1701
+ "The v0.7.97-beta.3 release repairs long-context recovery, durable Actor settlement and saved",
1702
+ "Session history. Context-capacity errors recover through bounded reads, adaptive compaction",
1703
+ "budgets and strict complete-summary parsing that retain original tool evidence and report",
1704
+ "capacity failure instead of stalling; a paged original input replaced by capacity admission",
1705
+ "stays unread so the model reads it again. Independent Actor Runs settle only from the exact",
1706
+ "Turn's durable terminal state and reconcile both crash windows without replaying completed",
1707
+ "execution; Session work mode locks after the first accepted root Run and survives Actor",
1708
+ "settlement, checkpoint recovery and verified legacy generation recovery. The",
1709
+ "`productHistoryLocation` and `productHistoryTurnResolution` Host capabilities locate saved",
1710
+ "history around search hits and resolve complete turns for Fork and rewind; Markdown rule",
1711
+ "fragments load from `~/.kodax/rules` and `.kodax/rules`. Interrupted Host exits recover from",
1712
+ "verified Windows containment evidence, identical Host builds are shared across installations,",
1713
+ "and abandoned daemon publications are removed in bounded idle rounds. DOCX visual review",
1714
+ "converts through a host-supplied LibreOffice by default and discloses field recalculation.",
1715
+ "Complete audited Windows programs ship as byte-verified resources, restoring the 49 KiB CLI",
1716
+ "reserve beneath the unchanged 5 MiB limit.",
1717
+ "Every v0.7.96 stable and v0.7.97-alpha.1 through beta.2 contract is retained.",
1689
1718
  "The v0.7.97-alpha.9 release checks Session admission through canonical identity",
1690
1719
  "metadata instead of loading complete historical transcripts: a readable metadata",
1691
1720
  "header with an unreadable body (for example a Windows ERROR_CRC surfacing as EIO)",
@@ -5,7 +5,7 @@
5
5
  "textTransaction": {
6
6
  "file": "kodax-windows-text-transaction.node",
7
7
  "protocol": 5,
8
- "sha256": "ed6ada1550519c82ee2f1536b628ffb9bc5567ce4b887cd4503b5fc2f9529ed9"
8
+ "sha256": "fdfe70320a832265a4ba5ab8f3d931d084e5a591ae3807562d5accfa46a49079"
9
9
  },
10
10
  "legal": [
11
11
  {
@@ -20,7 +20,7 @@
20
20
  "shellSandbox": {
21
21
  "file": "kodax-windows-sandbox.exe",
22
22
  "protocol": 10,
23
- "sha256": "69f4553420ecc2936e7f2fac429e85898ff4373ec265ddfb2863b09f8a913ebb"
23
+ "sha256": "88718ce6cee55226660ea4f2a956cd2798dac116a20628f12e66005cad17f72b"
24
24
  },
25
25
  "asrtRunner": {
26
26
  "file": "srt-win.exe",
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as P}from"./chunks/chunk-W33QJA3M.js";import"./chunks/chunk-6TITQQAI.js";import"./chunks/chunk-53CJDQS2.js";import"./chunks/chunk-MCDZNQWD.js";import"./chunks/chunk-ZQYWDI4O.js";import{ja as k}from"./chunks/chunk-EISRVOBJ.js";import"./chunks/chunk-DCE7XQUG.js";import"./chunks/chunk-QSZCR5GC.js";import"./chunks/chunk-V2XJSFFE.js";import"./chunks/chunk-JAF2YLZO.js";import"./chunks/chunk-DV5YPYLW.js";import"./chunks/chunk-X5M7TLJV.js";import"./chunks/chunk-C6JGLEYD.js";import"./chunks/chunk-D36OIMV7.js";import"./chunks/chunk-BBZWF2EA.js";import"./chunks/chunk-F6GJXQNA.js";import"./chunks/chunk-XDMNJW6J.js";import"./chunks/chunk-RYBUYHDL.js";import"./chunks/chunk-4Y6U7AH4.js";import"./chunks/chunk-EPK6EWRI.js";import"./chunks/chunk-ISLK6R2P.js";import"./chunks/chunk-OGTRDK4Q.js";import"./chunks/chunk-GZUWQZJD.js";import"./chunks/chunk-W2CWO4PQ.js";import"./chunks/chunk-TQ475LOI.js";import"./chunks/chunk-65652LR4.js";import"./chunks/chunk-5MUVRFMU.js";import"./chunks/chunk-2HH5AS7E.js";import{h as g}from"./chunks/chunk-J2L2NK6E.js";import"./chunks/chunk-KDSO7V4O.js";import"./chunks/chunk-SK3RRGHJ.js";import"./chunks/chunk-WMMESRP3.js";import"./chunks/chunk-QP47JIWP.js";import"./chunks/chunk-52EN2777.js";import"./chunks/chunk-UF3GZ5PO.js";import"./chunks/chunk-KE2NBMAP.js";import"./chunks/chunk-V5RCDBKU.js";import"./chunks/chunk-KDLOPBFZ.js";import{a as s}from"./chunks/chunk-V4WSBIXB.js";import{randomUUID as D}from"node:crypto";function u(t){return typeof t=="object"&&t!==null}s(u,"isRecord");function X(t,e,n,r){let d=n.meta;if(e.type==="assistant.delta"&&typeof n.text=="string")t?.onTextDelta?.(n.text,d);else if(e.type==="thinking.delta"&&typeof n.text=="string")t?.onThinkingDelta?.(n.text,d);else if(e.type==="thinking.finished"&&typeof n.thinking=="string")t?.onThinkingEnd?.(n.thinking,d);else if(e.type==="tool.started"&&u(n.tool)){let o=n.tool;typeof o.id=="string"&&u(o.input)&&r.set(o.id,o.input),t?.onToolUseStart?.(o,n.meta)}else if(e.type==="tool.progress")y(t,n);else if(e.type==="tool.sandbox"){let o=P(e);if(!o.ok)throw new Error(o.error);o.event.type==="tool.sandbox"&&t?.onToolSandboxObservation?.(o.event.payload.update,o.event.payload.meta)}else if(e.type==="tool.finished"&&u(n.result)){let o=n.result;typeof o.id=="string"&&r.delete(o.id),t?.onToolResult?.(o,n.meta)}else return!1;return!0}s(X,"forwardDaemonStreamEvent");function y(t,e){u(e.update)?t?.onToolProgress?.(e.update,e.meta):typeof e.toolName=="string"&&typeof e.partialJson=="string"&&t?.onToolInputDelta?.(e.toolName,e.partialJson,e.meta)}s(y,"forwardDaemonToolProgress");function I(t,e,n){if(e.type==="session.loaded")t?.onSessionStart?.(e.payload);else if(e.type==="turn.started")t?.onTurnStarted?.(e.payload);else if(e.type==="turn.completed")t?.onTurnCompleted?.(e.payload);else if(e.type==="turn.failed")t?.onTurnFailed?.(e.payload);else if(e.type==="run.progress")v(t,n);else if(e.type.startsWith("context.compaction."))x(t,e,n);else if(e.type==="child_activity.finished")t?.onChildActivityEnd?.(n.meta);else return!1;return!0}s(I,"forwardDaemonLifecycleEvent");function v(t,e){e.kind==="stream_end"?t?.onStreamEnd?.(e.meta):e.kind==="iteration_start"&&typeof e.iter=="number"&&typeof e.maxIter=="number"?t?.onIterationStart?.(e.iter,e.maxIter,e.meta):e.kind==="iteration_end"&&u(e.info)?t?.onIterationEnd?.(e.info):e.kind==="mid_turn_user_messages"&&Array.isArray(e.contents)?t?.onMidTurnUserMessages?.(e.contents.filter(n=>typeof n=="string"),e.meta):e.kind==="managed_task_status"&&u(e.status)?t?.onManagedTaskStatus?.(e.status):e.kind==="complete"&&t?.onComplete?.(e.meta)}s(v,"forwardDaemonRunProgress");function x(t,e,n){let r=n.meta;if(e.type==="context.compaction.started")t?.onCompactStart?.(r);else if(e.type==="context.compaction.finished"&&typeof n.tokensAfter=="number")n.committed===!0&&t?.onCompact?.(n.tokensAfter,r),t?.onContextCompactionFinished?.(e.payload);else if(e.type==="context.compaction.stats")t?.onCompactStats?.(e.payload);else if(e.type==="context.compaction.ended"){let{meta:d,...o}=n;t?.onCompactEnd?.(r,typeof o.outcome=="string"?o:void 0)}else e.type==="context.compaction.skipped"&&t?.onContextCompactionSkipped?.(e.payload)}s(x,"forwardDaemonCompactionEvent");function C(t,e,n){e.type==="provider.retry"?T(t,n):e.type==="provider.recovery"?O(t,n):e.type==="repo_intelligence.trace"?t?.onRepoIntelligenceTrace?.(e.payload):e.type==="context.budget.snapshot"?t?.onContextBudgetSnapshot?.(e.payload):e.type==="provider.cache.diagnostics"?t?.onPromptCacheDiagnostics?.(e.payload):e.type==="tool.exposure.planned"?t?.onToolExposurePlanned?.(e.payload):e.type==="todo.updated"&&Array.isArray(n.items)?t?.onTodoUpdate?.(n.items,n.meta):e.type==="todo.warning"?t?.onTodoDriftWarning?.(e.payload):e.type==="config.effective"?t?.onEffectiveConfig?.(e.payload):e.type.startsWith("workflow.")?t?.onWorkflowProcessEvent?.(e.payload):e.type==="runtime.warning"&&typeof n.message=="string"&&t?.onError?.(new Error(n.message))}s(C,"forwardDaemonDiagnosticEvent");function T(t,e){u(e.retryAfter)?t?.onRetryAfter?.(e.retryAfter,e.meta):e.reason==="rate_limit"&&typeof e.attempt=="number"&&typeof e.maxAttempts=="number"&&typeof e.delayMs=="number"?t?.onProviderRateLimit?.(e.attempt,e.maxAttempts,e.delayMs):typeof e.reason=="string"&&typeof e.attempt=="number"&&typeof e.maxAttempts=="number"&&t?.onRetry?.(e.reason,e.attempt,e.maxAttempts)}s(T,"forwardDaemonRetryEvent");function O(t,e){e.kind==="reasoning_effort_rejected"&&u(e.event)?t?.onReasoningEffortRejected?.(e.event):u(e.event)&&t?.onProviderRecovery?.(e.event,e.meta)}s(O,"forwardDaemonRecoveryEvent");function A(t,e,n,r){X(t,e,n,r)||I(t,e,n)||C(t,e,n)}s(A,"forwardRunProgressEvent");function K(t,e){let n=new Map,r,d=[],o=s(i=>{let l=u(i.payload)?i.payload:{};try{A(e.events,i,l,n)}catch(c){e.events?.onError?.(c instanceof Error?c:new Error(String(c)))}},"dispatch"),f=t.events.subscribe({sessionId:e.sessionId},i=>{r===void 0?d.push(i):i.runId===r&&o(i)});return{setRunId(i){r=i;for(let l of d.splice(0))l.runId===i&&o(l)},close(){f.close()}}}s(K,"attachRunProgressAdapter");function M(t){return t.success?0:t.interrupted?130:1}s(M,"exitCodeForOneShotResult");function _(t){return{success:!1,lastText:"",messages:[],sessionId:t,interrupted:!0,signal:"BLOCKED",signalReason:"Runtime run cancelled."}}s(_,"interruptedOneShotResult");function j(t){return t instanceof Error&&t.message.startsWith("Session not found:")}s(j,"isSessionNotFound");function U(t,e,n){if(t.error!==void 0)throw new Error(t.error);if(t.result!==void 0)return t.result;if(t.phase==="cancelled"||t.phase==="interrupted")return _(n);throw new Error(`Runtime run ${e} ended without a result.`)}s(U,"projectOneShotOutcome");async function F(t,e,n){let r=await k()??process.cwd(),d=e.session===void 0,o=s(i=>({...i!==void 0?{sessionId:i}:{},title:n.slice(0,50),projectPath:process.cwd(),gitRoot:r,surface:"cli",...d?{temporary:!0}:{}}),"createInput");if(e.session?.id!==void 0)try{let i=await t.sessions.read(e.session.id);if(i.archived)throw new Error(`Session is archived: ${i.id}`);return{sessionId:e.session.id,resumed:!0,temporary:!1}}catch(i){if(e.session.resume||!j(i))throw i;return{sessionId:(await t.sessions.create(o(e.session.id))).id,resumed:!1,temporary:!1}}if(e.session?.resume===!0||e.session?.autoResume===!0){let l=(await t.sessions.list({projectRoot:r,scope:"user",limit:Number.MAX_SAFE_INTEGER})).find(c=>c.msgCount>0);if(l!==void 0)return{sessionId:l.id,resumed:!0,temporary:!1}}return{sessionId:(await t.sessions.create(o())).id,resumed:!1,temporary:d}}s(F,"resolveOneShotSession");function $(t){return{...t.provider!==void 0?{provider:t.provider}:{},...t.context?.repoIntelligenceMode!==void 0?{repoIntelligenceMode:t.context.repoIntelligenceMode}:{},...t.context?.repoIntelligenceTrace!==void 0?{repoIntelligenceTrace:t.context.repoIntelligenceTrace}:{},...t.model!==void 0?{model:t.model}:{},...t.effort!==void 0?{effort:t.effort}:{},...t.thinking!==void 0?{thinking:t.thinking}:{},...t.reasoningMode!==void 0?{reasoningMode:t.reasoningMode}:{},...t.agentMode!==void 0?{agentMode:t.agentMode}:{},...t.workMode!==void 0?{workMode:t.workMode}:{},...t.maxIter!==void 0?{maxIter:t.maxIter}:{}}}s($,"toOneShotSettingsPatch");function W(t,e){let n={};for(let r of Object.keys(e)){let d=t[r];n[r]=typeof d=="string"||typeof d=="number"||typeof d=="boolean"?d:null}return n}s(W,"restoreSettingsPatch");async function Y(t){let{client:e,runtime:n,options:r,prompt:d}=t,o=await F(e,r,d),f=$(r),l=Object.keys(f).length>0&&!o.temporary?await e.sessions.getSettingsVersioned(o.sessionId):void 0,c;l!==void 0?c=(await e.sessions.updateSettingsVersioned(o.sessionId,f,{expectedRevision:l.revision})).revision:Object.keys(f).length>0&&await e.sessions.updateSettings(o.sessionId,f);let E=K(n,{sessionId:o.sessionId,events:r.events}),b=`cli-${Date.now().toString(36)}-${D().slice(0,8)}`,h,w,N=[],R=new Set,S=s(()=>{for(let a of N)a.runId!==w||R.has(a.requestId)||(R.add(a.requestId),e.interactions.respond(a.requestId,a.kind==="permission"?{kind:"permission",decision:{type:"reject",reason:"The non-interactive CLI cannot approve permission requests. Run interactively to review this action."}}:{kind:"skip",reason:"non_interactive"}).catch(m=>{g({source:"kodax.one-shot",level:"error",message:"Failed to dismiss an unattended interaction.",detail:m}),r.events?.onError?.(m instanceof Error?m:new Error(String(m)))}))},"dismissUnattendedInteractions");try{h=await e.sessions.observe(o.sessionId,p=>{N=p.interactions,S()});let a=await e.inputs.submit({sessionId:o.sessionId,inputId:b,text:d,delivery:"immediate"});if(a.runId===void 0)throw new Error(`One-shot input ${b} was not attached to a run (state ${a.state}).`);w=a.runId,S(),E.setRunId(a.runId);let m=s(()=>{e.runs.stop(a.runId).catch(p=>{g({source:"kodax.one-shot",level:"warn",message:`The stop request for run ${a.runId} failed; the run may still be executing.`,detail:p})})},"requestStop");t.abortSignal?.addEventListener("abort",m,{once:!0}),t.abortSignal?.aborted&&m();try{let p=await e.runs.await(a.runId);return U(p,a.runId,o.sessionId)}finally{t.abortSignal?.removeEventListener("abort",m)}}finally{h?.close(),E.close(),l!==void 0&&c!==void 0&&await e.sessions.updateSettingsVersioned(o.sessionId,W(l.value,f),{expectedRevision:c}).catch(a=>{g({source:"kodax.one-shot",level:"warn",message:`Failed to restore settings for session ${o.sessionId}; invocation flags may remain active.`,detail:a}),r.events?.onError?.(a instanceof Error?a:new Error(String(a)))})}}s(Y,"runOneShotClientTask");export{M as exitCodeForOneShotResult,U as projectOneShotOutcome,F as resolveOneShotSession,Y as runOneShotClientTask};
2
+ import{a as P}from"./chunks/chunk-W33QJA3M.js";import"./chunks/chunk-BSCSKJNC.js";import"./chunks/chunk-G32BMSHH.js";import"./chunks/chunk-AYDLX2UK.js";import"./chunks/chunk-FVXZ5L33.js";import"./chunks/chunk-ZQYWDI4O.js";import{ja as k}from"./chunks/chunk-4Z7ZHL6V.js";import"./chunks/chunk-VRO2CDBY.js";import"./chunks/chunk-P6R6V7EW.js";import"./chunks/chunk-BP3NAYKY.js";import"./chunks/chunk-QDE6THC5.js";import"./chunks/chunk-WMQQQY3D.js";import"./chunks/chunk-X3YYJJTF.js";import"./chunks/chunk-4GYXZTOD.js";import"./chunks/chunk-576AAIQM.js";import"./chunks/chunk-IR46ZHXU.js";import"./chunks/chunk-OXCB2TRF.js";import"./chunks/chunk-3Y5PBEOD.js";import"./chunks/chunk-5LFQ5FVY.js";import"./chunks/chunk-4Y6U7AH4.js";import"./chunks/chunk-QRYEP34M.js";import"./chunks/chunk-ISLK6R2P.js";import"./chunks/chunk-HJLYZ5AX.js";import"./chunks/chunk-GZUWQZJD.js";import"./chunks/chunk-TQ475LOI.js";import"./chunks/chunk-65652LR4.js";import"./chunks/chunk-ZDAU3LZ2.js";import"./chunks/chunk-DAQGOWKD.js";import{h as g}from"./chunks/chunk-OMVAPRQI.js";import"./chunks/chunk-OC3DQXN6.js";import"./chunks/chunk-PFBZ4ZXO.js";import"./chunks/chunk-52EN2777.js";import"./chunks/chunk-6RDMSU4B.js";import"./chunks/chunk-QP47JIWP.js";import"./chunks/chunk-EZF6ZRCO.js";import"./chunks/chunk-4FVCMKG2.js";import"./chunks/chunk-V5RCDBKU.js";import"./chunks/chunk-KDLOPBFZ.js";import{a as s}from"./chunks/chunk-V4WSBIXB.js";import{randomUUID as D}from"node:crypto";function u(t){return typeof t=="object"&&t!==null}s(u,"isRecord");function X(t,e,n,r){let d=n.meta;if(e.type==="assistant.delta"&&typeof n.text=="string")t?.onTextDelta?.(n.text,d);else if(e.type==="thinking.delta"&&typeof n.text=="string")t?.onThinkingDelta?.(n.text,d);else if(e.type==="thinking.finished"&&typeof n.thinking=="string")t?.onThinkingEnd?.(n.thinking,d);else if(e.type==="tool.started"&&u(n.tool)){let o=n.tool;typeof o.id=="string"&&u(o.input)&&r.set(o.id,o.input),t?.onToolUseStart?.(o,n.meta)}else if(e.type==="tool.progress")y(t,n);else if(e.type==="tool.sandbox"){let o=P(e);if(!o.ok)throw new Error(o.error);o.event.type==="tool.sandbox"&&t?.onToolSandboxObservation?.(o.event.payload.update,o.event.payload.meta)}else if(e.type==="tool.finished"&&u(n.result)){let o=n.result;typeof o.id=="string"&&r.delete(o.id),t?.onToolResult?.(o,n.meta)}else return!1;return!0}s(X,"forwardDaemonStreamEvent");function y(t,e){u(e.update)?t?.onToolProgress?.(e.update,e.meta):typeof e.toolName=="string"&&typeof e.partialJson=="string"&&t?.onToolInputDelta?.(e.toolName,e.partialJson,e.meta)}s(y,"forwardDaemonToolProgress");function I(t,e,n){if(e.type==="session.loaded")t?.onSessionStart?.(e.payload);else if(e.type==="turn.started")t?.onTurnStarted?.(e.payload);else if(e.type==="turn.completed")t?.onTurnCompleted?.(e.payload);else if(e.type==="turn.failed")t?.onTurnFailed?.(e.payload);else if(e.type==="run.progress")v(t,n);else if(e.type.startsWith("context.compaction."))x(t,e,n);else if(e.type==="child_activity.finished")t?.onChildActivityEnd?.(n.meta);else return!1;return!0}s(I,"forwardDaemonLifecycleEvent");function v(t,e){e.kind==="stream_end"?t?.onStreamEnd?.(e.meta):e.kind==="iteration_start"&&typeof e.iter=="number"&&typeof e.maxIter=="number"?t?.onIterationStart?.(e.iter,e.maxIter,e.meta):e.kind==="iteration_end"&&u(e.info)?t?.onIterationEnd?.(e.info):e.kind==="mid_turn_user_messages"&&Array.isArray(e.contents)?t?.onMidTurnUserMessages?.(e.contents.filter(n=>typeof n=="string"),e.meta):e.kind==="managed_task_status"&&u(e.status)?t?.onManagedTaskStatus?.(e.status):e.kind==="complete"&&t?.onComplete?.(e.meta)}s(v,"forwardDaemonRunProgress");function x(t,e,n){let r=n.meta;if(e.type==="context.compaction.started")t?.onCompactStart?.(r);else if(e.type==="context.compaction.finished"&&typeof n.tokensAfter=="number")n.committed===!0&&t?.onCompact?.(n.tokensAfter,r),t?.onContextCompactionFinished?.(e.payload);else if(e.type==="context.compaction.stats")t?.onCompactStats?.(e.payload);else if(e.type==="context.compaction.ended"){let{meta:d,...o}=n;t?.onCompactEnd?.(r,typeof o.outcome=="string"?o:void 0)}else e.type==="context.compaction.skipped"&&t?.onContextCompactionSkipped?.(e.payload)}s(x,"forwardDaemonCompactionEvent");function C(t,e,n){e.type==="provider.retry"?T(t,n):e.type==="provider.recovery"?O(t,n):e.type==="repo_intelligence.trace"?t?.onRepoIntelligenceTrace?.(e.payload):e.type==="context.budget.snapshot"?t?.onContextBudgetSnapshot?.(e.payload):e.type==="provider.cache.diagnostics"?t?.onPromptCacheDiagnostics?.(e.payload):e.type==="tool.exposure.planned"?t?.onToolExposurePlanned?.(e.payload):e.type==="todo.updated"&&Array.isArray(n.items)?t?.onTodoUpdate?.(n.items,n.meta):e.type==="todo.warning"?t?.onTodoDriftWarning?.(e.payload):e.type==="config.effective"?t?.onEffectiveConfig?.(e.payload):e.type.startsWith("workflow.")?t?.onWorkflowProcessEvent?.(e.payload):e.type==="runtime.warning"&&typeof n.message=="string"&&t?.onError?.(new Error(n.message))}s(C,"forwardDaemonDiagnosticEvent");function T(t,e){u(e.retryAfter)?t?.onRetryAfter?.(e.retryAfter,e.meta):e.reason==="rate_limit"&&typeof e.attempt=="number"&&typeof e.maxAttempts=="number"&&typeof e.delayMs=="number"?t?.onProviderRateLimit?.(e.attempt,e.maxAttempts,e.delayMs):typeof e.reason=="string"&&typeof e.attempt=="number"&&typeof e.maxAttempts=="number"&&t?.onRetry?.(e.reason,e.attempt,e.maxAttempts)}s(T,"forwardDaemonRetryEvent");function O(t,e){e.kind==="reasoning_effort_rejected"&&u(e.event)?t?.onReasoningEffortRejected?.(e.event):u(e.event)&&t?.onProviderRecovery?.(e.event,e.meta)}s(O,"forwardDaemonRecoveryEvent");function M(t,e,n,r){X(t,e,n,r)||I(t,e,n)||C(t,e,n)}s(M,"forwardRunProgressEvent");function K(t,e){let n=new Map,r,d=[],o=s(i=>{let l=u(i.payload)?i.payload:{};try{M(e.events,i,l,n)}catch(c){e.events?.onError?.(c instanceof Error?c:new Error(String(c)))}},"dispatch"),f=t.events.subscribe({sessionId:e.sessionId},i=>{r===void 0?d.push(i):i.runId===r&&o(i)});return{setRunId(i){r=i;for(let l of d.splice(0))l.runId===i&&o(l)},close(){f.close()}}}s(K,"attachRunProgressAdapter");function A(t){return t.success?0:t.interrupted?130:1}s(A,"exitCodeForOneShotResult");function _(t){return{success:!1,lastText:"",messages:[],sessionId:t,interrupted:!0,signal:"BLOCKED",signalReason:"Runtime run cancelled."}}s(_,"interruptedOneShotResult");function j(t){return t instanceof Error&&t.message.startsWith("Session not found:")}s(j,"isSessionNotFound");function U(t,e,n){if(t.error!==void 0)throw new Error(t.error);if(t.result!==void 0)return t.result;if(t.phase==="cancelled"||t.phase==="interrupted")return _(n);throw new Error(`Runtime run ${e} ended without a result.`)}s(U,"projectOneShotOutcome");async function F(t,e,n){let r=await k()??process.cwd(),d=e.session===void 0,o=s(i=>({...i!==void 0?{sessionId:i}:{},title:n.slice(0,50),projectPath:process.cwd(),gitRoot:r,surface:"cli",...d?{temporary:!0}:{}}),"createInput");if(e.session?.id!==void 0)try{let i=await t.sessions.read(e.session.id);if(i.archived)throw new Error(`Session is archived: ${i.id}`);return{sessionId:e.session.id,resumed:!0,temporary:!1}}catch(i){if(e.session.resume||!j(i))throw i;return{sessionId:(await t.sessions.create(o(e.session.id))).id,resumed:!1,temporary:!1}}if(e.session?.resume===!0||e.session?.autoResume===!0){let l=(await t.sessions.list({projectRoot:r,scope:"user",limit:Number.MAX_SAFE_INTEGER})).find(c=>c.msgCount>0);if(l!==void 0)return{sessionId:l.id,resumed:!0,temporary:!1}}return{sessionId:(await t.sessions.create(o())).id,resumed:!1,temporary:d}}s(F,"resolveOneShotSession");function $(t){return{...t.provider!==void 0?{provider:t.provider}:{},...t.context?.repoIntelligenceMode!==void 0?{repoIntelligenceMode:t.context.repoIntelligenceMode}:{},...t.context?.repoIntelligenceTrace!==void 0?{repoIntelligenceTrace:t.context.repoIntelligenceTrace}:{},...t.model!==void 0?{model:t.model}:{},...t.effort!==void 0?{effort:t.effort}:{},...t.thinking!==void 0?{thinking:t.thinking}:{},...t.reasoningMode!==void 0?{reasoningMode:t.reasoningMode}:{},...t.agentMode!==void 0?{agentMode:t.agentMode}:{},...t.workMode!==void 0?{workMode:t.workMode}:{},...t.maxIter!==void 0?{maxIter:t.maxIter}:{}}}s($,"toOneShotSettingsPatch");function W(t,e){let n={};for(let r of Object.keys(e)){if(r==="workMode")continue;let d=t[r];n[r]=typeof d=="string"||typeof d=="number"||typeof d=="boolean"?d:null}return n}s(W,"restoreSettingsPatch");async function Y(t){let{client:e,runtime:n,options:r,prompt:d}=t,o=await F(e,r,d),f=$(r),l=Object.keys(f).length>0&&!o.temporary?await e.sessions.getSettingsVersioned(o.sessionId):void 0,c;l!==void 0?c=(await e.sessions.updateSettingsVersioned(o.sessionId,f,{expectedRevision:l.revision})).revision:Object.keys(f).length>0&&await e.sessions.updateSettings(o.sessionId,f);let E=K(n,{sessionId:o.sessionId,events:r.events}),b=`cli-${Date.now().toString(36)}-${D().slice(0,8)}`,w,h,N=[],R=new Set,S=s(()=>{for(let a of N)a.runId!==h||R.has(a.requestId)||(R.add(a.requestId),e.interactions.respond(a.requestId,a.kind==="permission"?{kind:"permission",decision:{type:"reject",reason:"The non-interactive CLI cannot approve permission requests. Run interactively to review this action."}}:{kind:"skip",reason:"non_interactive"}).catch(m=>{g({source:"kodax.one-shot",level:"error",message:"Failed to dismiss an unattended interaction.",detail:m}),r.events?.onError?.(m instanceof Error?m:new Error(String(m)))}))},"dismissUnattendedInteractions");try{w=await e.sessions.observe(o.sessionId,p=>{N=p.interactions,S()});let a=await e.inputs.submit({sessionId:o.sessionId,inputId:b,text:d,delivery:"immediate"});if(a.runId===void 0)throw new Error(`One-shot input ${b} was not attached to a run (state ${a.state}).`);h=a.runId,S(),E.setRunId(a.runId);let m=s(()=>{e.runs.stop(a.runId).catch(p=>{g({source:"kodax.one-shot",level:"warn",message:`The stop request for run ${a.runId} failed; the run may still be executing.`,detail:p})})},"requestStop");t.abortSignal?.addEventListener("abort",m,{once:!0}),t.abortSignal?.aborted&&m();try{let p=await e.runs.await(a.runId);return U(p,a.runId,o.sessionId)}finally{t.abortSignal?.removeEventListener("abort",m)}}finally{w?.close(),E.close(),l!==void 0&&c!==void 0&&await e.sessions.updateSettingsVersioned(o.sessionId,W(l.value,f),{expectedRevision:c}).catch(a=>{g({source:"kodax.one-shot",level:"warn",message:`Failed to restore settings for session ${o.sessionId}; invocation flags may remain active.`,detail:a}),r.events?.onError?.(a instanceof Error?a:new Error(String(a)))})}}s(Y,"runOneShotClientTask");export{A as exitCodeForOneShotResult,U as projectOneShotOutcome,F as resolveOneShotSession,Y as runOneShotClientTask};
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{c as h,d as b,e as v,f as O,g as f}from"./chunks/chunk-R42S4BLA.js";import"./chunks/chunk-SDPZFH6M.js";import"./chunks/chunk-6TITQQAI.js";import"./chunks/chunk-53CJDQS2.js";import{J as P,P as S}from"./chunks/chunk-MCDZNQWD.js";import"./chunks/chunk-ZQYWDI4O.js";import"./chunks/chunk-EISRVOBJ.js";import"./chunks/chunk-DCE7XQUG.js";import"./chunks/chunk-QSZCR5GC.js";import"./chunks/chunk-V2XJSFFE.js";import"./chunks/chunk-JAF2YLZO.js";import"./chunks/chunk-DV5YPYLW.js";import"./chunks/chunk-X5M7TLJV.js";import"./chunks/chunk-C6JGLEYD.js";import"./chunks/chunk-D36OIMV7.js";import"./chunks/chunk-BBZWF2EA.js";import"./chunks/chunk-F6GJXQNA.js";import"./chunks/chunk-XDMNJW6J.js";import"./chunks/chunk-RYBUYHDL.js";import"./chunks/chunk-4Y6U7AH4.js";import"./chunks/chunk-EPK6EWRI.js";import"./chunks/chunk-ISLK6R2P.js";import"./chunks/chunk-OGTRDK4Q.js";import"./chunks/chunk-GZUWQZJD.js";import"./chunks/chunk-W2CWO4PQ.js";import"./chunks/chunk-TQ475LOI.js";import"./chunks/chunk-65652LR4.js";import"./chunks/chunk-5MUVRFMU.js";import"./chunks/chunk-2HH5AS7E.js";import{c as g}from"./chunks/chunk-J2L2NK6E.js";import"./chunks/chunk-KDSO7V4O.js";import{Ea as w,Fa as y,Q as C}from"./chunks/chunk-SK3RRGHJ.js";import"./chunks/chunk-WMMESRP3.js";import"./chunks/chunk-QP47JIWP.js";import"./chunks/chunk-52EN2777.js";import"./chunks/chunk-UF3GZ5PO.js";import"./chunks/chunk-KE2NBMAP.js";import"./chunks/chunk-V5RCDBKU.js";import"./chunks/chunk-KDLOPBFZ.js";import{a as u}from"./chunks/chunk-V4WSBIXB.js";import{readFile as U}from"node:fs/promises";import A from"node:path";import{createServer as I}from"node:http";import{spawn as x}from"node:child_process";async function R(c,s){let i=JSON.parse(await U(c,"utf8"));if(!i||typeof i!="object"||!("customProviders"in i)||!Array.isArray(i.customProviders))throw new Error("Configure a custom OAuth provider with kodax setup first.");let o=i.customProviders.find(e=>e&&typeof e=="object"&&"name"in e&&e.name===s);if(!o?.oauth)throw new Error("Choose a configured OAuth provider alias.");return C(o),o}u(R,"readOAuthConnection");function E(c){let s=process.env.SystemRoot;if(process.platform==="win32"&&(!s||!A.isAbsolute(s)))return Promise.reject(new Error("Windows system browser launcher is unavailable."));let[i,o]=process.platform==="win32"?[A.join(s,"System32","rundll32.exe"),[A.join(s,"System32","url.dll")+",FileProtocolHandler",c]]:process.platform==="darwin"?["open",[c]]:["xdg-open",[c]];return new Promise((e,t)=>{let r=x(i,o,{windowsHide:!0,stdio:"ignore"});r.once("error",()=>t(new Error("Browser launch failed. Open the printed authorization URL on this machine."))),r.once("spawn",()=>{r.unref(),e()})})}u(E,"openBrowser");function j(c,s,i,o=E){let e=new URL(c);if(e.protocol!=="http:"||!["127.0.0.1","localhost","[::1]"].includes(e.hostname)||e.username||e.password||e.search||e.hash||!e.port)throw new Error("Browser login requires an explicit registered HTTP loopback callback and port.");return new Promise((t,r)=>{let n=I((p,m)=>{let k=new URL(p.url??"/",e.origin);if(p.method!=="GET"||k.pathname!==e.pathname){m.writeHead(404).end();return}m.writeHead(200,{"content-type":"text/plain","cache-control":"no-store"}).end("Authorization received. Return to KodaX."),a(void 0,k.href)}),d=!1,l=u(()=>a(new Error("OAuth browser login cancelled or timed out.")),"abort"),a=u((p,m)=>{d||(d=!0,i.removeEventListener("abort",l),n.close(),n.closeIdleConnections(),p?r(p):t(m))},"finish");if(n.once("error",()=>a(new Error("Cannot bind the registered OAuth callback port."))),i.addEventListener("abort",l,{once:!0}),i.aborted){l();return}n.listen(Number(e.port),e.hostname.replace(/^\[|\]$/g,""),()=>{o(s).catch(()=>{process.stderr.write(`Browser launch unavailable; open the printed authorization URL on this machine.
2
+ import{c as h,d as b,e as v,f as O,g as f}from"./chunks/chunk-SQGESMNC.js";import"./chunks/chunk-5E2P4RYS.js";import"./chunks/chunk-BSCSKJNC.js";import{J as P,P as S}from"./chunks/chunk-G32BMSHH.js";import"./chunks/chunk-AYDLX2UK.js";import"./chunks/chunk-FVXZ5L33.js";import"./chunks/chunk-ZQYWDI4O.js";import"./chunks/chunk-4Z7ZHL6V.js";import"./chunks/chunk-VRO2CDBY.js";import"./chunks/chunk-P6R6V7EW.js";import"./chunks/chunk-BP3NAYKY.js";import"./chunks/chunk-QDE6THC5.js";import"./chunks/chunk-WMQQQY3D.js";import"./chunks/chunk-X3YYJJTF.js";import"./chunks/chunk-4GYXZTOD.js";import"./chunks/chunk-576AAIQM.js";import"./chunks/chunk-IR46ZHXU.js";import"./chunks/chunk-OXCB2TRF.js";import"./chunks/chunk-3Y5PBEOD.js";import"./chunks/chunk-5LFQ5FVY.js";import"./chunks/chunk-4Y6U7AH4.js";import"./chunks/chunk-QRYEP34M.js";import"./chunks/chunk-ISLK6R2P.js";import"./chunks/chunk-HJLYZ5AX.js";import"./chunks/chunk-GZUWQZJD.js";import"./chunks/chunk-TQ475LOI.js";import"./chunks/chunk-65652LR4.js";import"./chunks/chunk-ZDAU3LZ2.js";import"./chunks/chunk-DAQGOWKD.js";import{c as g}from"./chunks/chunk-OMVAPRQI.js";import"./chunks/chunk-OC3DQXN6.js";import{Ea as w,Fa as y,Q as C}from"./chunks/chunk-PFBZ4ZXO.js";import"./chunks/chunk-52EN2777.js";import"./chunks/chunk-6RDMSU4B.js";import"./chunks/chunk-QP47JIWP.js";import"./chunks/chunk-EZF6ZRCO.js";import"./chunks/chunk-4FVCMKG2.js";import"./chunks/chunk-V5RCDBKU.js";import"./chunks/chunk-KDLOPBFZ.js";import{a as u}from"./chunks/chunk-V4WSBIXB.js";import{readFile as U}from"node:fs/promises";import A from"node:path";import{createServer as I}from"node:http";import{spawn as x}from"node:child_process";async function R(c,s){let i=JSON.parse(await U(c,"utf8"));if(!i||typeof i!="object"||!("customProviders"in i)||!Array.isArray(i.customProviders))throw new Error("Configure a custom OAuth provider with kodax setup first.");let o=i.customProviders.find(e=>e&&typeof e=="object"&&"name"in e&&e.name===s);if(!o?.oauth)throw new Error("Choose a configured OAuth provider alias.");return C(o),o}u(R,"readOAuthConnection");function E(c){let s=process.env.SystemRoot;if(process.platform==="win32"&&(!s||!A.isAbsolute(s)))return Promise.reject(new Error("Windows system browser launcher is unavailable."));let[i,o]=process.platform==="win32"?[A.join(s,"System32","rundll32.exe"),[A.join(s,"System32","url.dll")+",FileProtocolHandler",c]]:process.platform==="darwin"?["open",[c]]:["xdg-open",[c]];return new Promise((e,t)=>{let r=x(i,o,{windowsHide:!0,stdio:"ignore"});r.once("error",()=>t(new Error("Browser launch failed. Open the printed authorization URL on this machine."))),r.once("spawn",()=>{r.unref(),e()})})}u(E,"openBrowser");function j(c,s,i,o=E){let e=new URL(c);if(e.protocol!=="http:"||!["127.0.0.1","localhost","[::1]"].includes(e.hostname)||e.username||e.password||e.search||e.hash||!e.port)throw new Error("Browser login requires an explicit registered HTTP loopback callback and port.");return new Promise((t,r)=>{let n=I((p,m)=>{let k=new URL(p.url??"/",e.origin);if(p.method!=="GET"||k.pathname!==e.pathname){m.writeHead(404).end();return}m.writeHead(200,{"content-type":"text/plain","cache-control":"no-store"}).end("Authorization received. Return to KodaX."),a(void 0,k.href)}),d=!1,l=u(()=>a(new Error("OAuth browser login cancelled or timed out.")),"abort"),a=u((p,m)=>{d||(d=!0,i.removeEventListener("abort",l),n.close(),n.closeIdleConnections(),p?r(p):t(m))},"finish");if(n.once("error",()=>a(new Error("Cannot bind the registered OAuth callback port."))),i.addEventListener("abort",l,{once:!0}),i.aborted){l();return}n.listen(Number(e.port),e.hostname.replace(/^\[|\]$/g,""),()=>{o(s).catch(()=>{process.stderr.write(`Browser launch unavailable; open the printed authorization URL on this machine.
3
3
  `)})})})}u(j,"receiveOAuthCallback");function N(c,s){let i=s??c.command("auth").description("Save API keys, login, inspect or revoke provider credentials");i.command("set-key <provider>").description("Enter a hidden API key and save it in permission-protected plaintext auth.json").action(async o=>{let e=f(),t=await e.describe(o),r=S({input:process.stdin,output:process.stdout});try{let n=await r.secret?.("API key (hidden; saved locally in plaintext auth.json)");if(n===void 0){process.stdout.write(`Key update cancelled.
4
4
  `);return}await e.setApiKey(o,n,t),process.stdout.write(`Saved API key for ${o}; online validity unverified.
5
5
  `)}finally{r.close?.()}}),i.command("remove-key <provider>").description("Remove the saved API key; show the remaining credential source").action(async o=>{let e=f(),t=await e.describe(o),r=await e.removeApiKey(o,t);process.stdout.write(`Saved API key removed. Credential source: ${r.source}.