@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,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{i as F,k as A,o as p}from"./chunk-SDPZFH6M.js";import{c as k}from"./chunk-J2L2NK6E.js";import{B as E,Da as h,E as R,Ea as K,Fa as $,Ka as D,La as j,Q as x,R as U,Ua as m}from"./chunk-SK3RRGHJ.js";import{a as l}from"./chunk-V4WSBIXB.js";import{createHash as T,randomUUID as O}from"node:crypto";import{mkdir as M,readFile as X,open as N,rename as b,unlink as B,rm as L,lstat as V}from"node:fs/promises";import w from"node:path";import{spawn as Z}from"node:child_process";import{setTimeout as G}from"node:timers/promises";function v(e){return!!e&&typeof e=="object"&&"code"in e&&e.code==="ENOENT"}l(v,"missing");function u(e){let i=new h("storage_failed");return e&&(i.message+=` Retained lock: ${e}. Inspect with kodax doctor before offline repair.`),i}l(u,"storageError");async function S(e){let i=await V(e);if(i.isSymbolicLink())throw u(e);return i.isDirectory()?w.join(e,"owner.json"):e}l(S,"lockOwnerFile");async function Q(e){let i=Date.now()+3e4;for(;;)try{let t=O();if(A({rootDir:w.dirname(e),lockFile:e},{runtimeId:t,pid:process.pid,createdAt:new Date().toISOString()}))return async()=>{if(p(await S(e))?.runtimeId!==t)throw u(e);let r=`${e}.released.${t}`;await b(e,r),await L(r,{recursive:!0,force:!0,maxRetries:3,retryDelay:20})};let a=await S(e),c=p(a);if(c&&F(c)==="gone"){let r=T("sha256").update(JSON.stringify(c)).digest("hex"),n=`${e}.reclaim.${r}`;if(A({rootDir:w.dirname(e),lockFile:n},{runtimeId:O(),pid:process.pid,createdAt:new Date().toISOString()})){if(JSON.stringify(p(await S(e)))!==JSON.stringify(c))throw u(e);let o=`${e}.abandoned.${r}`;await b(e,o),await L(o,{recursive:!0,force:!0,maxRetries:3,retryDelay:20});continue}}if(Date.now()>=i)throw u(e);await G(20)}catch(t){if(v(t))continue;throw t instanceof h?t:u(e)}}l(Q,"lock");function _(e,i){if(!e||typeof e!="object"||!("id"in e)||e.id!==i||!("clientId"in e)||typeof e.clientId!="string"||!e.clientId.trim()||!("accountId"in e)||typeof e.accountId!="string"||!e.accountId.trim()||!("service"in e)||typeof e.service!="string")throw u();return e}l(_,"registration");async function Y(e,i,t){let s;try{s=await X(e)}catch(a){if(v(a))return;throw u()}try{if(s.length>1024*1024)throw u();let a=await t.unseal(s);try{return _(JSON.parse(Buffer.from(a).toString("utf8")),i)}finally{a.fill(0)}}catch{throw u()}}l(Y,"readRecord");async function ee(e,i,t){if(!i){try{await B(e)}catch(c){if(!v(c))throw u()}return}let s=`${e}.${O()}.tmp`,a=Buffer.from(JSON.stringify(i));try{let c=await t.seal(a),r=await N(s,"wx",384);try{await r.writeFile(c),await r.sync()}finally{await r.close()}if(await b(s,e),process.platform!=="win32"){let n=await N(w.dirname(e),"r");try{await n.sync()}finally{await n.close()}}}catch{throw u()}finally{a.fill(0);try{await B(s)}catch(c){if(!v(c))throw u()}}}l(ee,"commit");function re(e,i){if(!w.isAbsolute(e))throw new Error("OAuth store requires an absolute trusted directory.");return{async transact(t,s){if(!t.trim()||t.length>512)throw u();await M(e,{recursive:!0,mode:448});let a=w.join(e,`${T("sha256").update(t).digest("hex")}.sealed`),c=await Q(`${a}.lock`);try{let r=await Y(a,t,i),n=await s(r?structuredClone(r):void 0);if(n.record&&(_(n.record,t),r&&(r.service!==n.record.service||r.clientId!==n.record.clientId||r.accountId!==n.record.accountId||r.issuer!==n.record.issuer||r.identityKind!==n.record.identityKind||r.profile!==n.record.profile)))throw u();return await ee(a,n.record,i),n.result}finally{await c()}}}}l(re,"createEncryptedOAuthSessionStore");function z(e,i){let t=process.env.SystemRoot;if(!t||!w.isAbsolute(t))return Promise.reject(u());let a=`Add-Type -AssemblyName System.Security; $data = [Convert]::FromBase64String([Console]::In.ReadToEnd()); $result = [Security.Cryptography.ProtectedData]::${i?"Protect":"Unprotect"}($data, $null, [Security.Cryptography.DataProtectionScope]::CurrentUser); [Console]::Out.Write([Convert]::ToBase64String($result))`;return new Promise((c,r)=>{let n=Z(w.join(t,"System32","WindowsPowerShell","v1.0","powershell.exe"),["-NoLogo","-NoProfile","-NonInteractive","-EncodedCommand",Buffer.from(a,"utf16le").toString("base64")],{windowsHide:!0,stdio:["pipe","pipe","pipe"],timeout:15e3}),o=[],d=0;n.stdout.on("data",f=>{d+=f.length,d>2*1024*1024?n.kill():o.push(f)}),n.stderr.resume(),n.on("error",()=>r(u())),n.stdin.on("error",()=>r(u())),n.on("close",f=>{let g=Buffer.concat(o).toString().trim();f!==0||!g||d>2*1024*1024||!/^[A-Za-z0-9+/]+={0,2}$/.test(g)?r(u()):c(Buffer.from(g,"base64"))}),n.stdin.end(Buffer.from(e).toString("base64"))})}l(z,"dpapi");function q(e){if(process.platform!=="win32")throw new Error("Windows DPAPI is unavailable. Supply the trusted Main OS secure-store adapter.");return re(e,{seal:l(i=>z(i,!0),"seal"),unseal:l(i=>z(i,!1),"unseal")})}l(q,"createWindowsOAuthSessionStore");import{createHash as ie}from"node:crypto";import{lstat as te}from"node:fs/promises";import y from"node:path";function ne(e){return m(y.join(y.dirname(e),"auth.json")).oauth}l(ne,"providerOAuthStore");function Oe(e,i){if(e.service!==i.service)throw new Error("OAuth source and session must match.");if(e.profile!==void 0&&(i.profile??"default")!==e.profile)throw new Error("OAuth registration belongs to another profile.");if(e.service==="radius"){if(e.issuer===void 0)throw new Error("Radius requires an approved OAuth issuer.");let t=l(s=>{try{return new URL(s??"").href.replace(/\/$/,"")}catch{throw new Error("Invalid OAuth issuer metadata.")}},"normalize");if(t(e.issuer)!==t(i.issuer))throw new Error("OAuth registration issuer does not match the approved connection.")}}l(Oe,"assertProviderOAuthSessionScope");async function be(e){let i=ne(e.configPath),t=e.registrationId;if(await i.transact(t,async a=>({record:a,result:a!==void 0})))return"current";let s=e.legacyStore;if(!s){let a=y.join(y.dirname(e.configPath),"provider-oauth"),c=y.join(a,`${ie("sha256").update(t).digest("hex")}.sealed`);try{let r=await te(c);if(!r.isFile()||r.isSymbolicLink())throw new Error("Invalid legacy OAuth registration file.")}catch(r){if(r&&typeof r=="object"&&"code"in r&&r.code==="ENOENT")return"absent";throw r}s=q(a)}return s.transact(t,async a=>{if(!a)return{record:a,result:"absent"};let c=await i.transact(t,async r=>r?{record:r,result:!1}:{record:a,result:!0});return{record:a,result:c?"migrated":"current"}})}l(be,"migrateProviderOAuthRegistration");import{randomUUID as J}from"node:crypto";async function Ee(e){if(!e.clientId?.trim()||!!e.browser==!!e.device)throw new h("invalid_session");if(e.profile!==void 0&&(typeof e.profile!="string"||!e.profile.trim()))throw new h("invalid_session");let i,t,s={service:e.service,clientId:e.clientId,scopes:[...e.scopes],issuer:e.issuer,fetch:e.fetch,signal:e.signal};if(e.browser){if(!e.redirectUri)throw new h("invalid_session");let d=await D({...s,redirectUri:e.redirectUri});t=d.nonce;try{i=await d.exchange(await e.browser({authorizationUrl:d.authorizationUrl,signal:e.signal}),e.signal)}finally{d.close()}}else{let d=await j(s);try{await e.device({verificationUri:d.verificationUriComplete??d.verificationUri,userCode:d.userCode,expiresAt:d.expiresAt}),i=await d.poll(e.signal)}finally{d.close()}}e.signal?.throwIfAborted();let a=e.clientId.trim(),c=e.verifyIdentity?await e.verifyIdentity(i,{service:e.service,clientId:a,nonce:t,signal:e.signal}):`grant:${J()}`;if(typeof c!="string"||!c.trim()||c.length>1024)throw new h("invalid_session");let r={id:J(),service:e.service,clientId:a,accountId:c,identityKind:e.verifyIdentity?"account":"grant",credentials:i.tokens,...e.issuer?{issuer:e.issuer}:{},...e.profile?{profile:e.profile}:{}};e.signal?.throwIfAborted(),await e.store.transact(r.id,async d=>{if(d)throw new h("invalid_session");return e.signal?.throwIfAborted(),{record:r,result:void 0}});let n=l(()=>K({id:r.id,store:e.store,driver:$(r.service,{fetch:e.fetch})}),"open"),o;try{return e.signal?.throwIfAborted(),o=await n(),e.signal?.throwIfAborted(),{registrationId:r.id,accountId:r.accountId,identityKind:r.identityKind,session:o}}catch(d){throw e.signal?.aborted&&(o??=await n(),await o.revoke()),d}}l(Ee,"loginProviderOAuth");import{createHash as oe}from"node:crypto";import{readFile as se}from"node:fs/promises";import P from"node:path";async function H(e){let i="";try{i=await se(e,"utf8")}catch(s){if(!s||typeof s!="object"||!("code"in s)||s.code!=="ENOENT")throw new Error("Cannot read provider configuration.")}let t;try{t=i?JSON.parse(i):{}}catch{throw new Error("Invalid provider configuration.")}if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Invalid provider configuration.");return{config:t,revision:oe("sha256").update(i).digest("hex")}}l(H,"readConfig");function ae(e,i){let t=Object.entries(E).find(([r])=>r===i)?.[1];if(t)return{provider:R(i),apiKeyEnv:t.apiKeyEnv,kind:t.capabilityProfile.transport==="cli-bridge"?"external":"key"};let s=e.customProviders;if(!Array.isArray(s))throw new Error("Unknown configured provider.");let a=s.filter(r=>r&&typeof r=="object"&&"name"in r&&r.name===i);if(a.length!==1)throw new Error("Unknown or duplicate configured provider.");let c=a[0];return x(c),{provider:U(c),apiKeyEnv:c.apiKeyEnv,kind:c.oauth?"oauth":c.cloud?"cloud":"key"}}l(ae,"configuredTarget");function Fe(e={}){let i=e.configPath??k("config.json"),t=e.profile??"default";if(!P.isAbsolute(i)||!t.trim())throw new Error("Credential manager requires a trusted config path and profile.");let s=m(P.join(P.dirname(i),"auth.json")),a=l(async n=>{let o=await H(i),d=ae(o.config,n);return{...d,configRevision:o.revision,binding:{profile:t,provider:n,connectionFingerprint:d.provider.getCredentialConnectionFingerprint()}}},"target"),c=l(async n=>{let o=await a(n),d=await s.describeApiKey(o.binding),f=(e.environment?.()??process.env)[o.apiKeyEnv]?.trim(),g=o.kind==="oauth"||o.kind==="external"?o.kind:d.configured?"file":f?"environment":o.kind==="cloud"?"cloud":"missing";return{binding:o.binding,configRevision:o.configRevision,revision:d.revision??null,apiKeyEnv:o.apiKeyEnv,stored:d.configured,configured:g==="file"||g==="environment",source:g}},"describe"),r=l(async(n,o,d)=>{if(!o||o.revision!==null&&(typeof o.revision!="string"||!o.revision.trim()))throw new Error("Credential update requires an expected revision. Refresh its state before retrying.");let f=await a(n);if(f.kind==="oauth"||f.kind==="external")throw new Error(`Use the provider's ${f.kind==="oauth"?"OAuth":"external"} authentication flow.`);if(o.configRevision!==f.configRevision||o.binding.profile!==f.binding.profile||o.binding.provider!==f.binding.provider||o.binding.connectionFingerprint!==f.binding.connectionFingerprint)throw new Error("Provider configuration or connection changed. Refresh its state before retrying.");let g=await s.readApiKey(f.binding),I=d===void 0?await s.removeApiKey(f.binding,o.revision):await s.setApiKey(f.binding,d.key,o.revision);try{if((await H(i)).revision!==f.configRevision)throw new Error("Provider configuration changed while saving credentials.");return await c(n)}catch(C){try{g?await s.setApiKey(f.binding,g.key,I.revision):await s.removeApiKey(f.binding,I.revision)}catch(W){throw new AggregateError([C,W],"Credential update failed and rollback conflicted. Refresh its state before retrying.")}throw C}},"mutate");return{filePath:s.filePath,describe:c,setApiKey:l((n,o,d)=>r(n,d,{key:o}),"setApiKey"),removeApiKey:l((n,o)=>r(n,o),"removeApiKey")}}l(Fe,"createProviderCredentialManager");export{re as a,q as b,ne as c,Oe as d,be as e,Ee as f,Fe as g};
2
+ import{i as F,k as A,o as p}from"./chunk-5E2P4RYS.js";import{c as k}from"./chunk-OMVAPRQI.js";import{B as E,Da as h,E as R,Ea as K,Fa as $,Ka as D,La as j,Q as x,R as U,Ua as m}from"./chunk-PFBZ4ZXO.js";import{a as l}from"./chunk-V4WSBIXB.js";import{createHash as T,randomUUID as O}from"node:crypto";import{mkdir as M,readFile as X,open as N,rename as b,unlink as B,rm as L,lstat as V}from"node:fs/promises";import w from"node:path";import{spawn as Z}from"node:child_process";import{setTimeout as G}from"node:timers/promises";function v(e){return!!e&&typeof e=="object"&&"code"in e&&e.code==="ENOENT"}l(v,"missing");function u(e){let i=new h("storage_failed");return e&&(i.message+=` Retained lock: ${e}. Inspect with kodax doctor before offline repair.`),i}l(u,"storageError");async function S(e){let i=await V(e);if(i.isSymbolicLink())throw u(e);return i.isDirectory()?w.join(e,"owner.json"):e}l(S,"lockOwnerFile");async function Q(e){let i=Date.now()+3e4;for(;;)try{let t=O();if(A({rootDir:w.dirname(e),lockFile:e},{runtimeId:t,pid:process.pid,createdAt:new Date().toISOString()}))return async()=>{if(p(await S(e))?.runtimeId!==t)throw u(e);let r=`${e}.released.${t}`;await b(e,r),await L(r,{recursive:!0,force:!0,maxRetries:3,retryDelay:20})};let a=await S(e),c=p(a);if(c&&F(c)==="gone"){let r=T("sha256").update(JSON.stringify(c)).digest("hex"),n=`${e}.reclaim.${r}`;if(A({rootDir:w.dirname(e),lockFile:n},{runtimeId:O(),pid:process.pid,createdAt:new Date().toISOString()})){if(JSON.stringify(p(await S(e)))!==JSON.stringify(c))throw u(e);let o=`${e}.abandoned.${r}`;await b(e,o),await L(o,{recursive:!0,force:!0,maxRetries:3,retryDelay:20});continue}}if(Date.now()>=i)throw u(e);await G(20)}catch(t){if(v(t))continue;throw t instanceof h?t:u(e)}}l(Q,"lock");function _(e,i){if(!e||typeof e!="object"||!("id"in e)||e.id!==i||!("clientId"in e)||typeof e.clientId!="string"||!e.clientId.trim()||!("accountId"in e)||typeof e.accountId!="string"||!e.accountId.trim()||!("service"in e)||typeof e.service!="string")throw u();return e}l(_,"registration");async function Y(e,i,t){let s;try{s=await X(e)}catch(a){if(v(a))return;throw u()}try{if(s.length>1024*1024)throw u();let a=await t.unseal(s);try{return _(JSON.parse(Buffer.from(a).toString("utf8")),i)}finally{a.fill(0)}}catch{throw u()}}l(Y,"readRecord");async function ee(e,i,t){if(!i){try{await B(e)}catch(c){if(!v(c))throw u()}return}let s=`${e}.${O()}.tmp`,a=Buffer.from(JSON.stringify(i));try{let c=await t.seal(a),r=await N(s,"wx",384);try{await r.writeFile(c),await r.sync()}finally{await r.close()}if(await b(s,e),process.platform!=="win32"){let n=await N(w.dirname(e),"r");try{await n.sync()}finally{await n.close()}}}catch{throw u()}finally{a.fill(0);try{await B(s)}catch(c){if(!v(c))throw u()}}}l(ee,"commit");function re(e,i){if(!w.isAbsolute(e))throw new Error("OAuth store requires an absolute trusted directory.");return{async transact(t,s){if(!t.trim()||t.length>512)throw u();await M(e,{recursive:!0,mode:448});let a=w.join(e,`${T("sha256").update(t).digest("hex")}.sealed`),c=await Q(`${a}.lock`);try{let r=await Y(a,t,i),n=await s(r?structuredClone(r):void 0);if(n.record&&(_(n.record,t),r&&(r.service!==n.record.service||r.clientId!==n.record.clientId||r.accountId!==n.record.accountId||r.issuer!==n.record.issuer||r.identityKind!==n.record.identityKind||r.profile!==n.record.profile)))throw u();return await ee(a,n.record,i),n.result}finally{await c()}}}}l(re,"createEncryptedOAuthSessionStore");function z(e,i){let t=process.env.SystemRoot;if(!t||!w.isAbsolute(t))return Promise.reject(u());let a=`Add-Type -AssemblyName System.Security; $data = [Convert]::FromBase64String([Console]::In.ReadToEnd()); $result = [Security.Cryptography.ProtectedData]::${i?"Protect":"Unprotect"}($data, $null, [Security.Cryptography.DataProtectionScope]::CurrentUser); [Console]::Out.Write([Convert]::ToBase64String($result))`;return new Promise((c,r)=>{let n=Z(w.join(t,"System32","WindowsPowerShell","v1.0","powershell.exe"),["-NoLogo","-NoProfile","-NonInteractive","-EncodedCommand",Buffer.from(a,"utf16le").toString("base64")],{windowsHide:!0,stdio:["pipe","pipe","pipe"],timeout:15e3}),o=[],d=0;n.stdout.on("data",f=>{d+=f.length,d>2*1024*1024?n.kill():o.push(f)}),n.stderr.resume(),n.on("error",()=>r(u())),n.stdin.on("error",()=>r(u())),n.on("close",f=>{let g=Buffer.concat(o).toString().trim();f!==0||!g||d>2*1024*1024||!/^[A-Za-z0-9+/]+={0,2}$/.test(g)?r(u()):c(Buffer.from(g,"base64"))}),n.stdin.end(Buffer.from(e).toString("base64"))})}l(z,"dpapi");function q(e){if(process.platform!=="win32")throw new Error("Windows DPAPI is unavailable. Supply the trusted Main OS secure-store adapter.");return re(e,{seal:l(i=>z(i,!0),"seal"),unseal:l(i=>z(i,!1),"unseal")})}l(q,"createWindowsOAuthSessionStore");import{createHash as ie}from"node:crypto";import{lstat as te}from"node:fs/promises";import y from"node:path";function ne(e){return m(y.join(y.dirname(e),"auth.json")).oauth}l(ne,"providerOAuthStore");function Oe(e,i){if(e.service!==i.service)throw new Error("OAuth source and session must match.");if(e.profile!==void 0&&(i.profile??"default")!==e.profile)throw new Error("OAuth registration belongs to another profile.");if(e.service==="radius"){if(e.issuer===void 0)throw new Error("Radius requires an approved OAuth issuer.");let t=l(s=>{try{return new URL(s??"").href.replace(/\/$/,"")}catch{throw new Error("Invalid OAuth issuer metadata.")}},"normalize");if(t(e.issuer)!==t(i.issuer))throw new Error("OAuth registration issuer does not match the approved connection.")}}l(Oe,"assertProviderOAuthSessionScope");async function be(e){let i=ne(e.configPath),t=e.registrationId;if(await i.transact(t,async a=>({record:a,result:a!==void 0})))return"current";let s=e.legacyStore;if(!s){let a=y.join(y.dirname(e.configPath),"provider-oauth"),c=y.join(a,`${ie("sha256").update(t).digest("hex")}.sealed`);try{let r=await te(c);if(!r.isFile()||r.isSymbolicLink())throw new Error("Invalid legacy OAuth registration file.")}catch(r){if(r&&typeof r=="object"&&"code"in r&&r.code==="ENOENT")return"absent";throw r}s=q(a)}return s.transact(t,async a=>{if(!a)return{record:a,result:"absent"};let c=await i.transact(t,async r=>r?{record:r,result:!1}:{record:a,result:!0});return{record:a,result:c?"migrated":"current"}})}l(be,"migrateProviderOAuthRegistration");import{randomUUID as J}from"node:crypto";async function Ee(e){if(!e.clientId?.trim()||!!e.browser==!!e.device)throw new h("invalid_session");if(e.profile!==void 0&&(typeof e.profile!="string"||!e.profile.trim()))throw new h("invalid_session");let i,t,s={service:e.service,clientId:e.clientId,scopes:[...e.scopes],issuer:e.issuer,fetch:e.fetch,signal:e.signal};if(e.browser){if(!e.redirectUri)throw new h("invalid_session");let d=await D({...s,redirectUri:e.redirectUri});t=d.nonce;try{i=await d.exchange(await e.browser({authorizationUrl:d.authorizationUrl,signal:e.signal}),e.signal)}finally{d.close()}}else{let d=await j(s);try{await e.device({verificationUri:d.verificationUriComplete??d.verificationUri,userCode:d.userCode,expiresAt:d.expiresAt}),i=await d.poll(e.signal)}finally{d.close()}}e.signal?.throwIfAborted();let a=e.clientId.trim(),c=e.verifyIdentity?await e.verifyIdentity(i,{service:e.service,clientId:a,nonce:t,signal:e.signal}):`grant:${J()}`;if(typeof c!="string"||!c.trim()||c.length>1024)throw new h("invalid_session");let r={id:J(),service:e.service,clientId:a,accountId:c,identityKind:e.verifyIdentity?"account":"grant",credentials:i.tokens,...e.issuer?{issuer:e.issuer}:{},...e.profile?{profile:e.profile}:{}};e.signal?.throwIfAborted(),await e.store.transact(r.id,async d=>{if(d)throw new h("invalid_session");return e.signal?.throwIfAborted(),{record:r,result:void 0}});let n=l(()=>K({id:r.id,store:e.store,driver:$(r.service,{fetch:e.fetch})}),"open"),o;try{return e.signal?.throwIfAborted(),o=await n(),e.signal?.throwIfAborted(),{registrationId:r.id,accountId:r.accountId,identityKind:r.identityKind,session:o}}catch(d){throw e.signal?.aborted&&(o??=await n(),await o.revoke()),d}}l(Ee,"loginProviderOAuth");import{createHash as oe}from"node:crypto";import{readFile as se}from"node:fs/promises";import P from"node:path";async function H(e){let i="";try{i=await se(e,"utf8")}catch(s){if(!s||typeof s!="object"||!("code"in s)||s.code!=="ENOENT")throw new Error("Cannot read provider configuration.")}let t;try{t=i?JSON.parse(i):{}}catch{throw new Error("Invalid provider configuration.")}if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Invalid provider configuration.");return{config:t,revision:oe("sha256").update(i).digest("hex")}}l(H,"readConfig");function ae(e,i){let t=Object.entries(E).find(([r])=>r===i)?.[1];if(t)return{provider:R(i),apiKeyEnv:t.apiKeyEnv,kind:t.capabilityProfile.transport==="cli-bridge"?"external":"key"};let s=e.customProviders;if(!Array.isArray(s))throw new Error("Unknown configured provider.");let a=s.filter(r=>r&&typeof r=="object"&&"name"in r&&r.name===i);if(a.length!==1)throw new Error("Unknown or duplicate configured provider.");let c=a[0];return x(c),{provider:U(c),apiKeyEnv:c.apiKeyEnv,kind:c.oauth?"oauth":c.cloud?"cloud":"key"}}l(ae,"configuredTarget");function Fe(e={}){let i=e.configPath??k("config.json"),t=e.profile??"default";if(!P.isAbsolute(i)||!t.trim())throw new Error("Credential manager requires a trusted config path and profile.");let s=m(P.join(P.dirname(i),"auth.json")),a=l(async n=>{let o=await H(i),d=ae(o.config,n);return{...d,configRevision:o.revision,binding:{profile:t,provider:n,connectionFingerprint:d.provider.getCredentialConnectionFingerprint()}}},"target"),c=l(async n=>{let o=await a(n),d=await s.describeApiKey(o.binding),f=(e.environment?.()??process.env)[o.apiKeyEnv]?.trim(),g=o.kind==="oauth"||o.kind==="external"?o.kind:d.configured?"file":f?"environment":o.kind==="cloud"?"cloud":"missing";return{binding:o.binding,configRevision:o.configRevision,revision:d.revision??null,apiKeyEnv:o.apiKeyEnv,stored:d.configured,configured:g==="file"||g==="environment",source:g}},"describe"),r=l(async(n,o,d)=>{if(!o||o.revision!==null&&(typeof o.revision!="string"||!o.revision.trim()))throw new Error("Credential update requires an expected revision. Refresh its state before retrying.");let f=await a(n);if(f.kind==="oauth"||f.kind==="external")throw new Error(`Use the provider's ${f.kind==="oauth"?"OAuth":"external"} authentication flow.`);if(o.configRevision!==f.configRevision||o.binding.profile!==f.binding.profile||o.binding.provider!==f.binding.provider||o.binding.connectionFingerprint!==f.binding.connectionFingerprint)throw new Error("Provider configuration or connection changed. Refresh its state before retrying.");let g=await s.readApiKey(f.binding),I=d===void 0?await s.removeApiKey(f.binding,o.revision):await s.setApiKey(f.binding,d.key,o.revision);try{if((await H(i)).revision!==f.configRevision)throw new Error("Provider configuration changed while saving credentials.");return await c(n)}catch(C){try{g?await s.setApiKey(f.binding,g.key,I.revision):await s.removeApiKey(f.binding,I.revision)}catch(W){throw new AggregateError([C,W],"Credential update failed and rollback conflicted. Refresh its state before retrying.")}throw C}},"mutate");return{filePath:s.filePath,describe:c,setApiKey:l((n,o,d)=>r(n,d,{key:o}),"setApiKey"),removeApiKey:l((n,o)=>r(n,o),"removeApiKey")}}l(Fe,"createProviderCredentialManager");export{re as a,q as b,ne as c,Oe as d,be as e,Ee as f,Fe as g};
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{Bb as r,Rb as o}from"./chunk-6TITQQAI.js";import{a as n}from"./chunk-D425EZGC.js";import{a as e}from"./chunk-V4WSBIXB.js";function u(t){return o(n(t))}e(u,"runInteractiveMode");function a(t){return r(n(t))}e(a,"runInkInteractiveMode");export{u as a,a as b};
2
+ import{Bb as r,Rb as o}from"./chunk-BSCSKJNC.js";import{a as n}from"./chunk-V2TG7GNW.js";import{a as e}from"./chunk-V4WSBIXB.js";function u(t){return o(n(t))}e(u,"runInteractiveMode");function a(t){return r(n(t))}e(a,"runInkInteractiveMode");export{u as a,a as b};
@@ -1,2 +1,2 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as m}from"./chunk-AGUM5SWX.js";import{b as C}from"./chunk-3CP7AUWY.js";import{B as k,I as O,o as X}from"./chunk-QSZCR5GC.js";import{b as K}from"./chunk-C6JGLEYD.js";import{Db as g,Fb as p}from"./chunk-D36OIMV7.js";import{d as x,za as f}from"./chunk-OGTRDK4Q.js";import{a as s}from"./chunk-V4WSBIXB.js";import{isDeepStrictEqual as R}from"node:util";function y(e,o){let a=e.events,r=new Map;return{...e,guardrails:e.guardrails?.map(t=>{if(t.kind!=="tool"||t.name!=="auto-mode")return t;let n=t.beforeTool;return n?{...t,kind:"tool",async beforeTool(d,i){let T=f(d),c=T?.ok?T.call:d;o.revoke(c.id),r.delete(c.id);let l=await n.call(t,d,i);return l.action==="allow"&&r.set(c.id,structuredClone(c)),l}}:t}),events:{...a,async beforeToolExecute(t,n,d){let i=d?.toolId,T=i===void 0?void 0:r.get(i);i!==void 0&&(o.revoke(i),r.delete(i));let c=await a?.beforeToolExecute?.(t,n,d);if(i!==void 0){let l={id:i,name:t,input:n};(c===!0||c===void 0&&R(l,T))&&o.grant(l)}return c??!0},onToolExecutionEnd(t,n){o.revoke(t.id),a?.onToolExecutionEnd?.(t,n)}}}}s(y,"withDirectTextApprovals");function u(e){if(e.context?.trustedTextMutationHost!==void 0)return e;let o=e.context?.gitRoot??e.context?.executionCwd??process.cwd(),a=e.context?.executionCwd??o,r=m(a,()=>e.context?.resolveShellPermissionMode?.()==="auto"),t=C(()=>[o,a,...e.context?.workspaceSandboxRoots?.list()??[]],n=>x(n,a,[],e.context?.resolveShellPermissionMode?.()==="full-access"),()=>e.context?.resolveShellPermissionMode?.()==="full-access",r.authorize);return y({...e,context:{...e.context,trustedTextMutationHost:t}},r)}s(u,"withTrustedTextMutationHost");function v(e,o){return p(u(e),o)}s(v,"runKodaX");function P(e,o){return K(u(e),o)}s(P,"startKodaX");function S(e,o){return k(u(e),o)}s(S,"runManagedTask");function E(e){let o=e.runAgent??p,a=e.createOptions;return O({...e,createOptions:s((r,t,n)=>u(a?.(r,t,n)??n),"createOptions"),runAgent:s((r,t)=>o(u(r),t),"runAgent")})}s(E,"createKodaXTaskRunner");function D(e={}){let o=g(e),a=o.substrateExecutor;return Object.freeze({...o,substrateExecutor:s(((r,t,n,d)=>{let i=n?.presetOptions??{};return a(r,t,{...n,presetOptions:u(i)},d)}),"substrateExecutor")})}s(D,"createDefaultCodingAgent");var A=class extends X{static{s(this,"KodaXClient")}constructor(o){super(o,v)}};export{u as a,v as b,P as c,S as d,E as e,D as f,A as g};
2
+ import{a as m}from"./chunk-AGUM5SWX.js";import{b as C}from"./chunk-7BA4TSKC.js";import{B as k,I as O,o as X}from"./chunk-VRO2CDBY.js";import{b as K}from"./chunk-P6R6V7EW.js";import{Db as g,Fb as p}from"./chunk-BP3NAYKY.js";import{Aa as f,d as x}from"./chunk-HJLYZ5AX.js";import{a as s}from"./chunk-V4WSBIXB.js";import{isDeepStrictEqual as R}from"node:util";function y(e,o){let a=e.events,r=new Map;return{...e,guardrails:e.guardrails?.map(t=>{if(t.kind!=="tool"||t.name!=="auto-mode")return t;let n=t.beforeTool;return n?{...t,kind:"tool",async beforeTool(d,i){let T=f(d),c=T?.ok?T.call:d;o.revoke(c.id),r.delete(c.id);let l=await n.call(t,d,i);return l.action==="allow"&&r.set(c.id,structuredClone(c)),l}}:t}),events:{...a,async beforeToolExecute(t,n,d){let i=d?.toolId,T=i===void 0?void 0:r.get(i);i!==void 0&&(o.revoke(i),r.delete(i));let c=await a?.beforeToolExecute?.(t,n,d);if(i!==void 0){let l={id:i,name:t,input:n};(c===!0||c===void 0&&R(l,T))&&o.grant(l)}return c??!0},onToolExecutionEnd(t,n){o.revoke(t.id),a?.onToolExecutionEnd?.(t,n)}}}}s(y,"withDirectTextApprovals");function u(e){if(e.context?.trustedTextMutationHost!==void 0)return e;let o=e.context?.gitRoot??e.context?.executionCwd??process.cwd(),a=e.context?.executionCwd??o,r=m(a,()=>e.context?.resolveShellPermissionMode?.()==="auto"),t=C(()=>[o,a,...e.context?.workspaceSandboxRoots?.list()??[]],n=>x(n,a,[],e.context?.resolveShellPermissionMode?.()==="full-access"),()=>e.context?.resolveShellPermissionMode?.()==="full-access",r.authorize);return y({...e,context:{...e.context,trustedTextMutationHost:t}},r)}s(u,"withTrustedTextMutationHost");function v(e,o){return p(u(e),o)}s(v,"runKodaX");function P(e,o){return K(u(e),o)}s(P,"startKodaX");function S(e,o){return k(u(e),o)}s(S,"runManagedTask");function E(e){let o=e.runAgent??p,a=e.createOptions;return O({...e,createOptions:s((r,t,n)=>u(a?.(r,t,n)??n),"createOptions"),runAgent:s((r,t)=>o(u(r),t),"runAgent")})}s(E,"createKodaXTaskRunner");function D(e={}){let o=g(e),a=o.substrateExecutor;return Object.freeze({...o,substrateExecutor:s(((r,t,n,d)=>{let i=n?.presetOptions??{};return a(r,t,{...n,presetOptions:u(i)},d)}),"substrateExecutor")})}s(D,"createDefaultCodingAgent");var A=class extends X{static{s(this,"KodaXClient")}constructor(o){super(o,v)}};export{u as a,v as b,P as c,S as d,E as e,D as f,A as g};