agentix-cli 0.111.1 → 0.113.0

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 (121) hide show
  1. package/dist/{App-T4Q7SW6M.js → App-5ZI475WY.js} +2 -2
  2. package/dist/{ChatApp-BKUJUIDL.js → ChatApp-PLR7J5D3.js} +2 -2
  3. package/dist/agent-GRX75ANW.js +2 -0
  4. package/dist/{board-dashboard-MZVUQ2YO.js → board-dashboard-EKJHQKPH.js} +574 -288
  5. package/dist/board-dashboard-EKJHQKPH.js.map +1 -0
  6. package/dist/{chunk-WXQQO2PD.js → chunk-22LO3GBP.js} +2 -2
  7. package/dist/{chunk-5MUJZODV.js → chunk-2PJKGZWP.js} +32 -32
  8. package/dist/chunk-2PJKGZWP.js.map +1 -0
  9. package/dist/{chunk-DTQQ4DAY.js → chunk-37EDS7SZ.js} +8 -8
  10. package/dist/{chunk-M2L6S3Z5.js → chunk-4QCYSKPD.js} +2 -2
  11. package/dist/{chunk-3RHFEKFX.js → chunk-6FJ44HYY.js} +2 -2
  12. package/dist/{chunk-GQMUFSKB.js → chunk-74CQWVHE.js} +2 -2
  13. package/dist/{chunk-QJP37VVA.js → chunk-A6B5JRUG.js} +2 -2
  14. package/dist/{chunk-K24MYJFP.js → chunk-B37WAFT5.js} +219 -219
  15. package/dist/chunk-B37WAFT5.js.map +1 -0
  16. package/dist/{chunk-DXWDVKMX.js → chunk-DVJW3IWI.js} +2 -2
  17. package/dist/{chunk-U52IS3AF.js → chunk-EEOQ5C5N.js} +2 -2
  18. package/dist/{chunk-RS2T53EC.js → chunk-JBE4H7PL.js} +5 -5
  19. package/dist/{chunk-RS2T53EC.js.map → chunk-JBE4H7PL.js.map} +1 -1
  20. package/dist/{chunk-7UNS34CN.js → chunk-MEXXGNNN.js} +2 -2
  21. package/dist/{chunk-3RTOS727.js → chunk-OZDSQVHU.js} +4 -4
  22. package/dist/{chunk-3RTOS727.js.map → chunk-OZDSQVHU.js.map} +1 -1
  23. package/dist/{chunk-HCTWKWS3.js → chunk-QF377BDS.js} +6 -6
  24. package/dist/{chunk-LWYKS5JU.js → chunk-QWI3FM5R.js} +2 -2
  25. package/dist/{chunk-Z7L74GGT.js → chunk-R43TE2XX.js} +2 -2
  26. package/dist/{chunk-FBODSJU6.js → chunk-RXQ2XCKP.js} +2 -2
  27. package/dist/{chunk-53OS4TDU.js → chunk-THRWE4Y3.js} +2 -2
  28. package/dist/{chunk-SIOWVLZG.js → chunk-TXX5W3SH.js} +12 -12
  29. package/dist/chunk-TXX5W3SH.js.map +1 -0
  30. package/dist/{chunk-C245D4BZ.js → chunk-UG2OF2EI.js} +2 -2
  31. package/dist/{chunk-4NFDDTGA.js → chunk-V3C2BOYR.js} +2 -2
  32. package/dist/{chunk-XEOT2F4C.js → chunk-X7E27RYS.js} +2 -2
  33. package/dist/{chunk-WSKQUKCF.js → chunk-XG2XVGSL.js} +2 -2
  34. package/dist/{chunk-23A5K5UW.js → chunk-Y5MFVVTM.js} +2 -2
  35. package/dist/cli.js +1 -1
  36. package/dist/{client-O7SPKO5X.js → client-DBQ5QNJJ.js} +2 -2
  37. package/dist/{compaction-MECSN36J.js → compaction-FS6XNRLM.js} +3 -3
  38. package/dist/config-4T62LT27.js +2 -0
  39. package/dist/config-mutator-ARUEJ6V5.js +2 -0
  40. package/dist/{context-planner-JU7CNXCB.js → context-planner-BKHPKDX5.js} +2 -2
  41. package/dist/{doctor-XP7O45RC.js → doctor-M32NIOZH.js} +2 -2
  42. package/dist/heal-U67X6NIN.js +2 -0
  43. package/dist/index.d.ts +185 -0
  44. package/dist/index.js +1 -1
  45. package/dist/memory-extract-ATD6YLRK.js +2 -0
  46. package/dist/{program-YK3YR2CQ.js → program-7MG42JKO.js} +169 -169
  47. package/dist/program-7MG42JKO.js.map +1 -0
  48. package/dist/{promote-UGWANGI2.js → promote-DAEKJVWN.js} +2 -2
  49. package/dist/{providers-ES5KVLI4.js → providers-55NC2SFN.js} +2 -2
  50. package/dist/{query-ZET7Z5FT.js → query-MCJYD66I.js} +2 -2
  51. package/dist/{registry-UXWOY52B.js → registry-AYPPHZ3Z.js} +2 -2
  52. package/dist/{request-planner-W5YLKCGG.js → request-planner-7NKKLY7C.js} +2 -2
  53. package/dist/{review-candidates-GU4S5VQH.js → review-candidates-QG2U5YID.js} +2 -2
  54. package/dist/{routing-GJ4VXKIC.js → routing-HBNYDAGE.js} +2 -2
  55. package/dist/schedule-tool-6S35TPJJ.js +2 -0
  56. package/dist/scheduler-KZ6VVZZA.js +2 -0
  57. package/dist/{seat-L6XJ2BFA.js → seat-PQ7AMPMT.js} +2 -2
  58. package/dist/{select-T7CKKLC2.js → select-J6TO7RED.js} +2 -2
  59. package/dist/{set-enabled-U2HGNY2O.js → set-enabled-WXRUHFWW.js} +2 -2
  60. package/dist/{tool-2FMWZB4N.js → tool-I3OGQKAD.js} +2 -2
  61. package/dist/{tool-TX622HEB.js → tool-KN2QEPDO.js} +2 -2
  62. package/dist/wiki-2IKLQ6PO.js +2 -0
  63. package/package.json +1 -1
  64. package/dist/agent-YZVEXFE7.js +0 -2
  65. package/dist/board-dashboard-MZVUQ2YO.js.map +0 -1
  66. package/dist/chunk-5MUJZODV.js.map +0 -1
  67. package/dist/chunk-K24MYJFP.js.map +0 -1
  68. package/dist/chunk-SIOWVLZG.js.map +0 -1
  69. package/dist/config-ZHQYXFOJ.js +0 -2
  70. package/dist/config-mutator-RS2NTDNO.js +0 -2
  71. package/dist/heal-CMQL5SG4.js +0 -2
  72. package/dist/memory-extract-YCNCARZ2.js +0 -2
  73. package/dist/program-YK3YR2CQ.js.map +0 -1
  74. package/dist/schedule-tool-HD4LWKVC.js +0 -2
  75. package/dist/scheduler-3LEHZHWJ.js +0 -2
  76. package/dist/wiki-MYJBOJSM.js +0 -2
  77. /package/dist/{App-T4Q7SW6M.js.map → App-5ZI475WY.js.map} +0 -0
  78. /package/dist/{ChatApp-BKUJUIDL.js.map → ChatApp-PLR7J5D3.js.map} +0 -0
  79. /package/dist/{agent-YZVEXFE7.js.map → agent-GRX75ANW.js.map} +0 -0
  80. /package/dist/{chunk-WXQQO2PD.js.map → chunk-22LO3GBP.js.map} +0 -0
  81. /package/dist/{chunk-DTQQ4DAY.js.map → chunk-37EDS7SZ.js.map} +0 -0
  82. /package/dist/{chunk-M2L6S3Z5.js.map → chunk-4QCYSKPD.js.map} +0 -0
  83. /package/dist/{chunk-3RHFEKFX.js.map → chunk-6FJ44HYY.js.map} +0 -0
  84. /package/dist/{chunk-GQMUFSKB.js.map → chunk-74CQWVHE.js.map} +0 -0
  85. /package/dist/{chunk-QJP37VVA.js.map → chunk-A6B5JRUG.js.map} +0 -0
  86. /package/dist/{chunk-DXWDVKMX.js.map → chunk-DVJW3IWI.js.map} +0 -0
  87. /package/dist/{chunk-U52IS3AF.js.map → chunk-EEOQ5C5N.js.map} +0 -0
  88. /package/dist/{chunk-7UNS34CN.js.map → chunk-MEXXGNNN.js.map} +0 -0
  89. /package/dist/{chunk-HCTWKWS3.js.map → chunk-QF377BDS.js.map} +0 -0
  90. /package/dist/{chunk-LWYKS5JU.js.map → chunk-QWI3FM5R.js.map} +0 -0
  91. /package/dist/{chunk-Z7L74GGT.js.map → chunk-R43TE2XX.js.map} +0 -0
  92. /package/dist/{chunk-FBODSJU6.js.map → chunk-RXQ2XCKP.js.map} +0 -0
  93. /package/dist/{chunk-53OS4TDU.js.map → chunk-THRWE4Y3.js.map} +0 -0
  94. /package/dist/{chunk-C245D4BZ.js.map → chunk-UG2OF2EI.js.map} +0 -0
  95. /package/dist/{chunk-4NFDDTGA.js.map → chunk-V3C2BOYR.js.map} +0 -0
  96. /package/dist/{chunk-XEOT2F4C.js.map → chunk-X7E27RYS.js.map} +0 -0
  97. /package/dist/{chunk-WSKQUKCF.js.map → chunk-XG2XVGSL.js.map} +0 -0
  98. /package/dist/{chunk-23A5K5UW.js.map → chunk-Y5MFVVTM.js.map} +0 -0
  99. /package/dist/{client-O7SPKO5X.js.map → client-DBQ5QNJJ.js.map} +0 -0
  100. /package/dist/{compaction-MECSN36J.js.map → compaction-FS6XNRLM.js.map} +0 -0
  101. /package/dist/{config-ZHQYXFOJ.js.map → config-4T62LT27.js.map} +0 -0
  102. /package/dist/{config-mutator-RS2NTDNO.js.map → config-mutator-ARUEJ6V5.js.map} +0 -0
  103. /package/dist/{context-planner-JU7CNXCB.js.map → context-planner-BKHPKDX5.js.map} +0 -0
  104. /package/dist/{doctor-XP7O45RC.js.map → doctor-M32NIOZH.js.map} +0 -0
  105. /package/dist/{heal-CMQL5SG4.js.map → heal-U67X6NIN.js.map} +0 -0
  106. /package/dist/{memory-extract-YCNCARZ2.js.map → memory-extract-ATD6YLRK.js.map} +0 -0
  107. /package/dist/{promote-UGWANGI2.js.map → promote-DAEKJVWN.js.map} +0 -0
  108. /package/dist/{providers-ES5KVLI4.js.map → providers-55NC2SFN.js.map} +0 -0
  109. /package/dist/{query-ZET7Z5FT.js.map → query-MCJYD66I.js.map} +0 -0
  110. /package/dist/{registry-UXWOY52B.js.map → registry-AYPPHZ3Z.js.map} +0 -0
  111. /package/dist/{request-planner-W5YLKCGG.js.map → request-planner-7NKKLY7C.js.map} +0 -0
  112. /package/dist/{review-candidates-GU4S5VQH.js.map → review-candidates-QG2U5YID.js.map} +0 -0
  113. /package/dist/{routing-GJ4VXKIC.js.map → routing-HBNYDAGE.js.map} +0 -0
  114. /package/dist/{schedule-tool-HD4LWKVC.js.map → schedule-tool-6S35TPJJ.js.map} +0 -0
  115. /package/dist/{scheduler-3LEHZHWJ.js.map → scheduler-KZ6VVZZA.js.map} +0 -0
  116. /package/dist/{seat-L6XJ2BFA.js.map → seat-PQ7AMPMT.js.map} +0 -0
  117. /package/dist/{select-T7CKKLC2.js.map → select-J6TO7RED.js.map} +0 -0
  118. /package/dist/{set-enabled-U2HGNY2O.js.map → set-enabled-WXRUHFWW.js.map} +0 -0
  119. /package/dist/{tool-2FMWZB4N.js.map → tool-I3OGQKAD.js.map} +0 -0
  120. /package/dist/{tool-TX622HEB.js.map → tool-KN2QEPDO.js.map} +0 -0
  121. /package/dist/{wiki-MYJBOJSM.js.map → wiki-2IKLQ6PO.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{q as p}from"./chunk-M2L6S3Z5.js";import{b as i,c as u,d as l,e as c}from"./chunk-QJP37VVA.js";import d from"cronstrue";var f=Intl.DateTimeFormat().resolvedOptions().timeZone,m=600,E='Try: "every morning at 9", "weekdays at 6pm", "every 15 minutes", "every monday at 10am", "1st of every month at noon", "daily at 9:30am", "every hour"',g=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;function w(e){return g.test(e)}function x(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}),!0}catch{return!1}}function $(e){return e?e.split(",").map(r=>r.trim().toLowerCase()).filter(r=>r==="log"||r==="notify"||r==="disable"):["log"]}function S(e){let r=[...e.onError??["log"]];e.notify&&!r.includes("notify")&&r.push("notify");let t={enabled:e.enabled??!0,schedule:e.parsed.cron,timezone:e.timezone||f,agent:e.agent,prompt:e.prompt,timeout:e.timeout??m,onError:r};return e.model&&(t.model=e.model),e.notify&&(t.notify=e.notify),e.createdBy&&(t.createdBy=e.createdBy),e.approval&&(t.approval=e.approval),t}function P(e){try{return d.toString(e,{use24HourTimeFormat:!1})}catch{return e}}function T(e,r,t=new Date){try{return p(e,t,r)}catch{return null}}function A(e,r){if(!e)return"unknown (no match within a year)";try{return`${new Intl.DateTimeFormat("en-GB",{timeZone:r,weekday:"short",day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(e)} (${r})`}catch{return e.toISOString()}}function h(e){return e?.approval?.action==="create"}async function D(e,r={}){let t="",o=await i(n=>{let a=l(n,`crons.${e}`);if(!a)throw new Error(`cron "${e}" not found`);let s=a.approval;if(!s)throw new Error(`cron "${e}" has no pending request`);s.action==="create"?(delete a.approval,a.enabled=!0,t=`${e} approved and enabled (requested by ${s.requestedBy})`):(c(n,`crons.${e}`),t=`${e} deletion approved; job removed (requested by ${s.requestedBy})`)},{configPath:r.configPath,reload:r.reload});return o.success?{success:!0,message:t,result:o}:{success:!1,message:o.error||"failed",result:o}}async function I(e,r={}){let t="",o=await i(n=>{let a=l(n,`crons.${e}`);if(!a)throw new Error(`cron "${e}" not found`);let s=a.approval;if(!s)throw new Error(`cron "${e}" has no pending request`);s.action==="create"?(c(n,`crons.${e}`),t=`${e} rejected; pending job removed`):(delete a.approval,t=`${e} deletion rejected; job kept`)},{configPath:r.configPath,reload:r.reload});return o.success?{success:!0,message:t,result:o}:{success:!1,message:o.error||"failed",result:o}}async function O(e,r,t={}){return i(o=>{let n=l(o,`crons.${e}`);if(!n)throw new Error(`cron "${e}" not found`);if(r&&h(n))throw new Error(`cron "${e}" is awaiting approval; run \`agentx schedule approve ${e}\``);u(o,`crons.${e}.enabled`,r)},{configPath:t.configPath,reload:t.reload})}export{f as a,E as b,w as c,x as d,$ as e,S as f,P as g,T as h,A as i,h as j,D as k,I as l,O as m};
2
- //# sourceMappingURL=chunk-WXQQO2PD.js.map
1
+ import{q as p}from"./chunk-4QCYSKPD.js";import{b as i,c as u,d as l,e as c}from"./chunk-A6B5JRUG.js";import d from"cronstrue";var f=Intl.DateTimeFormat().resolvedOptions().timeZone,m=600,E='Try: "every morning at 9", "weekdays at 6pm", "every 15 minutes", "every monday at 10am", "1st of every month at noon", "daily at 9:30am", "every hour"',g=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;function w(e){return g.test(e)}function x(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}),!0}catch{return!1}}function $(e){return e?e.split(",").map(r=>r.trim().toLowerCase()).filter(r=>r==="log"||r==="notify"||r==="disable"):["log"]}function S(e){let r=[...e.onError??["log"]];e.notify&&!r.includes("notify")&&r.push("notify");let t={enabled:e.enabled??!0,schedule:e.parsed.cron,timezone:e.timezone||f,agent:e.agent,prompt:e.prompt,timeout:e.timeout??m,onError:r};return e.model&&(t.model=e.model),e.notify&&(t.notify=e.notify),e.createdBy&&(t.createdBy=e.createdBy),e.approval&&(t.approval=e.approval),t}function P(e){try{return d.toString(e,{use24HourTimeFormat:!1})}catch{return e}}function T(e,r,t=new Date){try{return p(e,t,r)}catch{return null}}function A(e,r){if(!e)return"unknown (no match within a year)";try{return`${new Intl.DateTimeFormat("en-GB",{timeZone:r,weekday:"short",day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(e)} (${r})`}catch{return e.toISOString()}}function h(e){return e?.approval?.action==="create"}async function D(e,r={}){let t="",o=await i(n=>{let a=l(n,`crons.${e}`);if(!a)throw new Error(`cron "${e}" not found`);let s=a.approval;if(!s)throw new Error(`cron "${e}" has no pending request`);s.action==="create"?(delete a.approval,a.enabled=!0,t=`${e} approved and enabled (requested by ${s.requestedBy})`):(c(n,`crons.${e}`),t=`${e} deletion approved; job removed (requested by ${s.requestedBy})`)},{configPath:r.configPath,reload:r.reload});return o.success?{success:!0,message:t,result:o}:{success:!1,message:o.error||"failed",result:o}}async function I(e,r={}){let t="",o=await i(n=>{let a=l(n,`crons.${e}`);if(!a)throw new Error(`cron "${e}" not found`);let s=a.approval;if(!s)throw new Error(`cron "${e}" has no pending request`);s.action==="create"?(c(n,`crons.${e}`),t=`${e} rejected; pending job removed`):(delete a.approval,t=`${e} deletion rejected; job kept`)},{configPath:r.configPath,reload:r.reload});return o.success?{success:!0,message:t,result:o}:{success:!1,message:o.error||"failed",result:o}}async function O(e,r,t={}){return i(o=>{let n=l(o,`crons.${e}`);if(!n)throw new Error(`cron "${e}" not found`);if(r&&h(n))throw new Error(`cron "${e}" is awaiting approval; run \`agentx schedule approve ${e}\``);u(o,`crons.${e}.enabled`,r)},{configPath:t.configPath,reload:t.reload})}export{f as a,E as b,w as c,x as d,$ as e,S as f,P as g,T as h,A as i,h as j,D as k,I as l,O as m};
2
+ //# sourceMappingURL=chunk-22LO3GBP.js.map
@@ -1,54 +1,54 @@
1
- import{a as G,b as _e}from"./chunk-7I7IEX4S.js";import{a as N}from"./chunk-QIJLFPWE.js";import{existsSync as oe,readFileSync as de,writeFileSync as ke,mkdirSync as Ae}from"fs";import E from"path";import me from"os";import B from"chalk";import I from"prompts";function S(){if(!oe(ne))return null;try{let i=JSON.parse(de(ne,"utf8"));return i.provider&&i.authType&&i.token&&i.model?i:null}catch{return null}}function we(i){oe(te)||Ae(te,{recursive:!0}),ke(ne,JSON.stringify(i,null,2),"utf8")}function L(i){if(i?.trim()){let p=i.startsWith("sk-ant-oat")?"oauth":"api-key";return{token:i.trim(),authType:p}}let e=process.env.ANTHROPIC_OAUTH_TOKEN;if(e?.trim())return{token:e.trim(),authType:"oauth"};let t=process.env.CLAUDE_CODE_OAUTH_TOKEN;if(t?.trim())return{token:t.trim(),authType:"oauth"};let r=process.env.ANTHROPIC_API_KEY;if(r?.trim())return{token:r.trim(),authType:"api-key"};let n=S();if(n)return{token:n.token,authType:n.authType};let o=me.homedir(),l=[E.join(o,".openclaw","agents","main","agent","auth-profiles.json"),E.join(o,".openclaw","auth-profiles.json"),E.join(o,".openclaw","credentials","oauth.json"),E.join(o,".claude","oauth.json"),E.join(o,".config","claude","oauth.json"),E.join(o,".config","anthropic","oauth.json")];for(let p of l){let m=xe(p);if(m)return{token:m,authType:"oauth"}}return null}function xe(i){if(!oe(i))return"";try{let e=JSON.parse(de(i,"utf8"));if(e.profiles){let t="";for(let[r,n]of Object.entries(e.profiles))if(r.startsWith("anthropic")){if(n.type==="oauth"&&n.access){if(n.expires&&Date.now()>n.expires)continue;return n.access}n.type==="token"&&n.token&&(t=n.token)}if(t)return t}return e.anthropic?.access?e.anthropic.access:e.anthropic?.token?e.anthropic.token:""}catch{return""}}async function be(){let i=process.env.ANTHROPIC_API_KEY;if(i?.trim()){let r=i.slice(0,10)+"..."+i.slice(-4),{useExisting:n}=await I({type:"confirm",name:"useExisting",message:`Use existing ANTHROPIC_API_KEY (env, ${r})?`,initial:!0});if(n)return{token:i.trim(),authType:"api-key"}}let e=S();if(e?.authType==="api-key"&&e.token){let r=e.token.slice(0,10)+"..."+e.token.slice(-4),{useExisting:n}=await I({type:"confirm",name:"useExisting",message:`Use stored API key (${r})?`,initial:!0});if(n)return{token:e.token,authType:"api-key"}}let{apiKey:t}=await I({type:"password",name:"apiKey",message:"Enter Anthropic API key",validate:r=>r.startsWith("sk-ant-api")?r.length<40?"API key seems too short":!0:"API key must start with sk-ant-api"});return t?{token:t,authType:"api-key"}:null}async function ve(){G.break();let i=46,e="Run `claude setup-token` in your terminal.",t="Then paste the generated token below.";console.log(` ${B.cyan("Anthropic setup-token")} ${"\u2500".repeat(i-21-1)}\u256E`),console.log(` ${" ".repeat(i)}\u2502`),console.log(` ${e}${" ".repeat(i-e.length)}\u2502`),console.log(` ${t}${" ".repeat(i-t.length)}\u2502`),console.log(` ${" ".repeat(i)}\u2502`),console.log(` ${"\u2500".repeat(i)}\u256F`),G.break();let{token:r}=await I({type:"password",name:"token",message:"Paste Anthropic setup-token",validate:o=>o.trim()?o.length<40?"Token seems too short":!0:"Token is required"});if(!r)return null;let{tokenName:n}=await I({type:"text",name:"tokenName",message:"Token name (blank = default)"});return{token:r,authType:"oauth"}}async function Re(){for(;;){let{provider:i}=await I({type:"select",name:"provider",message:"Model/auth provider",choices:[{title:"Anthropic",value:"anthropic",description:"setup-token + API key"}]});if(i===void 0)return null;let{method:e}=await I({type:"select",name:"method",message:"Anthropic auth method",choices:[{title:"Anthropic token (paste setup-token)",value:"setup-token",description:"run `claude setup-token` elsewhere, then paste the token here"},{title:"Anthropic API key",value:"api-key"},{title:B.dim("Back"),value:"back"}]});if(e===void 0)return null;if(e!=="back")return e==="api-key"?be():e==="setup-token"?ve():null}}async function Oe(){let i=S(),e=re.map(r=>({title:r.label,value:r.id,description:r.hint+(i?.model===r.id?" \xB7 current":"")}));if(i?.model){let r=re.find(o=>o.id===i.model),n=r?r.label:i.model;e.unshift({title:`Keep current (${n})`,value:i.model,description:"no change"})}let{modelId:t}=await I({type:"select",name:"modelId",message:"Default model",choices:e});return t||null}async function Te(){let i=await Re();if(!i)return null;let e=await Oe();if(!e)return null;let t={provider:i.authType==="oauth"?"claude-code":"claude",authType:i.authType,token:i.token,model:e};return we(t),G.break(),G.success("Configuration saved to ~/.agentx/auth.json"),console.log(` Provider: ${B.bold("anthropic")} (${t.authType})`),console.log(` Model: ${B.bold(re.find(r=>r.id===t.model)?.label||t.model)}`),t}async function qe(i){return L(i)?!0:(G.warn("No AI credentials configured."),G.break(),await Te()!==null)}var te,ne,re,H=N(()=>{"use strict";_e();te=E.join(me.homedir(),".agentx"),ne=E.join(te,"auth.json");re=[{id:"claude-sonnet-4-20250514",label:"anthropic/claude-sonnet-4",hint:"Claude Sonnet 4 \xB7 ctx 200k \xB7 recommended"},{id:"claude-opus-4-20250514",label:"anthropic/claude-opus-4-5",hint:"Claude Opus 4.5 \xB7 ctx 200k \xB7 reasoning"},{id:"claude-haiku-4-20250514",label:"anthropic/claude-haiku-4",hint:"Claude Haiku 4 \xB7 ctx 200k \xB7 fast"}]});function Pe(i){return(i?Y.filter(t=>i.includes(t.name)):Y).map(({name:t,description:r,input_schema:n})=>({name:t,description:r,input_schema:n}))}function C(){return Pe(["create_files","ask_user"])}function Je(){let i=Y.filter(t=>t.name!=="create_files"&&t.name!=="ask_user");if(i.length===0)return"";let e=["# Available Capabilities","In addition to generating files, you have the following capabilities:",""];for(let t of i)e.push(`## ${t.name}`),e.push(t.description),e.push("");return e.join(`
2
- `)}var Y,Be,W=N(()=>{"use strict";Y=[{name:"create_files",description:"Create one or more files as output. Use this when you need to generate code, documents, configs, or any file-based output.",input_schema:{type:"object",properties:{files:{type:"array",items:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root (e.g., src/components/Button.tsx)"},content:{type:"string",description:"The full content of the file"},language:{type:"string",description:"Programming language or file type"},description:{type:"string",description:"Brief description of what this file does"}},required:["path","content"]}},summary:{type:"string",description:"Brief summary of all generated files"}},required:["files"]},permission:"file-write"},{name:"ask_user",description:"Ask the user a clarifying question when you need more information to proceed. Use this when the request is ambiguous or you need to confirm important decisions.",input_schema:{type:"object",properties:{question:{type:"string",description:"The question to ask the user"},options:{type:"array",items:{type:"string"},description:"Optional list of choices for the user"}},required:["question"]},permission:"none"},{name:"read_file",description:"Read the contents of a file. Use this to inspect existing code, understand patterns, check implementations, or gather context before generating code.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root"},max_lines:{type:"number",description:"Maximum number of lines to read. Defaults to 500. Use for large files."}},required:["path"]},permission:"file-read"},{name:"search_files",description:"Search for files matching a pattern and optionally search their content with a regex. Use this to find relevant code, understand project structure, or locate specific patterns.",input_schema:{type:"object",properties:{pattern:{type:"string",description:"Glob pattern to match files (e.g., 'src/**/*.ts', '*.json')"},content_regex:{type:"string",description:"Optional regex to search within matched files. Returns matching lines."},max_results:{type:"number",description:"Maximum number of results to return. Default: 50."}},required:["pattern"]},permission:"none"},{name:"list_directory",description:"List files and directories at a given path. Use this to explore project structure.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative directory path from project root. Defaults to '.' (root)."},recursive:{type:"boolean",description:"List recursively. Default: false."},max_depth:{type:"number",description:"Maximum depth for recursive listing. Default: 3."}}},permission:"none"},{name:"run_command",description:"Execute a shell command. Use this to run build tools, test commands, linters, or inspect the environment. Commands run in the project root directory.",input_schema:{type:"object",properties:{command:{type:"string",description:"The shell command to execute"},timeout:{type:"number",description:"Timeout in milliseconds. Default: 30000 (30 seconds)."}},required:["command"]},permission:"command"},{name:"edit_file",description:"Apply search-and-replace edits to an existing file. Use this for targeted modifications to existing code rather than rewriting entire files.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root"},edits:{type:"array",items:{type:"object",properties:{old_text:{type:"string",description:"The exact text to find in the file"},new_text:{type:"string",description:"The replacement text"}},required:["old_text","new_text"]},description:"List of search/replace pairs to apply in order"}},required:["path","edits"]},permission:"file-write"},{name:"spawn_agent",description:"Spawn a sub-agent to handle a task in the background. The sub-agent runs in its own session and returns results. Use this for parallel research, long-running tasks, or delegating work to a specialized agent.",input_schema:{type:"object",properties:{agent_id:{type:"string",description:"The ID of the agent to spawn (must be a registered agent)"},prompt:{type:"string",description:"The task description for the sub-agent"},timeout_seconds:{type:"number",description:"Maximum time to wait for completion in seconds. Default: 300 (5 minutes)."}},required:["agent_id","prompt"]},permission:"none"}];Be=Y.map(i=>i.name)});function X(i){return!i||i.length<Se?i:[{type:"text",text:i,cache_control:{type:"ephemeral"}}]}var V,z,Se,q,se=N(()=>{"use strict";H();W();V="claude-sonnet-4-20250514",z=8192,Se=4*1024;q=class{name="claude";apiKey;authType="api-key";constructor(e){if(this.apiKey=e||process.env.ANTHROPIC_API_KEY||"",!this.apiKey){let t=L();t&&(this.apiKey=t.token,this.authType=t.authType)}if(!this.apiKey)throw new Error("Anthropic API key required. Run `agentx model` to configure, set ANTHROPIC_API_KEY, or pass --api-key.")}async generate(e,t){let r=t?.model||V,n=t?.maxTokens||z,o=e.find(c=>c.role==="system"),l=e.filter(c=>c.role!=="system").map(c=>({role:c.role,content:c.content})),p={model:r,max_tokens:n,messages:l,tools:C()};o&&(p.system=X(o.content)),t?.temperature!==void 0&&(p.temperature=t.temperature);let m=await this.callApi(p,t);return this.parseResponse(m)}async generateRaw(e,t,r,n){let o=n?.model||V,l=n?.maxTokens||z,p={model:o,max_tokens:l,system:X(t),messages:e,tools:r};n?.temperature!==void 0&&(p.temperature=n.temperature),n?.toolChoice&&(p.tool_choice={type:"tool",name:n.toolChoice.name});let m=await this.callApi(p,n);return{content:m.content.map(g=>g.type==="text"?{type:"text",text:g.text||""}:g.type==="tool_use"?{type:"tool_use",id:g.id||"",name:g.name||"",input:g.input||{}}:{type:"text",text:""}),stop_reason:m.stop_reason,usage:m.usage}}async*stream(e,t){let r=t?.model||V,n=t?.maxTokens||z,o=e.find(f=>f.role==="system"),l=e.filter(f=>f.role!=="system").map(f=>({role:f.role,content:f.content})),p={model:r,max_tokens:n,messages:l,stream:!0,tools:C()};o&&(p.system=X(o.content));let m=this.buildHeaders(),c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p),signal:t?.abortSignal});if(!c.ok){let f=await c.text();yield{type:"error",error:`Anthropic API error (${c.status}): ${f}`};return}let g=c.body?.getReader();if(!g){yield{type:"error",error:"No response body"};return}let _=new TextDecoder,d="",h=[],w="",A,b=0,s=null,y=f=>{let R=(f||"").trim();if(!R||R.includes("```"))return;let T=R.replace(/\r\n/g,`
1
+ import{a as G,b as _e}from"./chunk-7I7IEX4S.js";import{a as N}from"./chunk-QIJLFPWE.js";import{existsSync as oe,readFileSync as de,writeFileSync as Ae,mkdirSync as we}from"fs";import E from"path";import me from"os";import B from"chalk";import I from"prompts";function S(){if(!oe(ne))return null;try{let s=JSON.parse(de(ne,"utf8"));return s.provider&&s.authType&&s.token&&s.model?s:null}catch{return null}}function xe(s){oe(te)||we(te,{recursive:!0}),Ae(ne,JSON.stringify(s,null,2),"utf8")}function L(s){if(s?.trim()){let p=s.startsWith("sk-ant-oat")?"oauth":"api-key";return{token:s.trim(),authType:p}}let e=process.env.ANTHROPIC_OAUTH_TOKEN;if(e?.trim())return{token:e.trim(),authType:"oauth"};let t=process.env.CLAUDE_CODE_OAUTH_TOKEN;if(t?.trim())return{token:t.trim(),authType:"oauth"};let r=process.env.ANTHROPIC_API_KEY;if(r?.trim())return{token:r.trim(),authType:"api-key"};let n=S();if(n)return{token:n.token,authType:n.authType};let o=me.homedir(),l=[E.join(o,".openclaw","agents","main","agent","auth-profiles.json"),E.join(o,".openclaw","auth-profiles.json"),E.join(o,".openclaw","credentials","oauth.json"),E.join(o,".claude","oauth.json"),E.join(o,".config","claude","oauth.json"),E.join(o,".config","anthropic","oauth.json")];for(let p of l){let m=be(p);if(m)return{token:m,authType:"oauth"}}return null}function be(s){if(!oe(s))return"";try{let e=JSON.parse(de(s,"utf8"));if(e.profiles){let t="";for(let[r,n]of Object.entries(e.profiles))if(r.startsWith("anthropic")){if(n.type==="oauth"&&n.access){if(n.expires&&Date.now()>n.expires)continue;return n.access}n.type==="token"&&n.token&&(t=n.token)}if(t)return t}return e.anthropic?.access?e.anthropic.access:e.anthropic?.token?e.anthropic.token:""}catch{return""}}async function ve(){let s=process.env.ANTHROPIC_API_KEY;if(s?.trim()){let r=s.slice(0,10)+"..."+s.slice(-4),{useExisting:n}=await I({type:"confirm",name:"useExisting",message:`Use existing ANTHROPIC_API_KEY (env, ${r})?`,initial:!0});if(n)return{token:s.trim(),authType:"api-key"}}let e=S();if(e?.authType==="api-key"&&e.token){let r=e.token.slice(0,10)+"..."+e.token.slice(-4),{useExisting:n}=await I({type:"confirm",name:"useExisting",message:`Use stored API key (${r})?`,initial:!0});if(n)return{token:e.token,authType:"api-key"}}let{apiKey:t}=await I({type:"password",name:"apiKey",message:"Enter Anthropic API key",validate:r=>r.startsWith("sk-ant-api")?r.length<40?"API key seems too short":!0:"API key must start with sk-ant-api"});return t?{token:t,authType:"api-key"}:null}async function Re(){G.break();let s=46,e="Run `claude setup-token` in your terminal.",t="Then paste the generated token below.";console.log(` ${B.cyan("Anthropic setup-token")} ${"\u2500".repeat(s-21-1)}\u256E`),console.log(` ${" ".repeat(s)}\u2502`),console.log(` ${e}${" ".repeat(s-e.length)}\u2502`),console.log(` ${t}${" ".repeat(s-t.length)}\u2502`),console.log(` ${" ".repeat(s)}\u2502`),console.log(` ${"\u2500".repeat(s)}\u256F`),G.break();let{token:r}=await I({type:"password",name:"token",message:"Paste Anthropic setup-token",validate:o=>o.trim()?o.length<40?"Token seems too short":!0:"Token is required"});if(!r)return null;let{tokenName:n}=await I({type:"text",name:"tokenName",message:"Token name (blank = default)"});return{token:r,authType:"oauth"}}async function Oe(){for(;;){let{provider:s}=await I({type:"select",name:"provider",message:"Model/auth provider",choices:[{title:"Anthropic",value:"anthropic",description:"setup-token + API key"}]});if(s===void 0)return null;let{method:e}=await I({type:"select",name:"method",message:"Anthropic auth method",choices:[{title:"Anthropic token (paste setup-token)",value:"setup-token",description:"run `claude setup-token` elsewhere, then paste the token here"},{title:"Anthropic API key",value:"api-key"},{title:B.dim("Back"),value:"back"}]});if(e===void 0)return null;if(e!=="back")return e==="api-key"?ve():e==="setup-token"?Re():null}}async function Te(){let s=S(),e=re.map(r=>({title:r.label,value:r.id,description:r.hint+(s?.model===r.id?" \xB7 current":"")}));if(s?.model){let r=re.find(o=>o.id===s.model),n=r?r.label:s.model;e.unshift({title:`Keep current (${n})`,value:s.model,description:"no change"})}let{modelId:t}=await I({type:"select",name:"modelId",message:"Default model",choices:e});return t||null}async function Pe(){let s=await Oe();if(!s)return null;let e=await Te();if(!e)return null;let t={provider:s.authType==="oauth"?"claude-code":"claude",authType:s.authType,token:s.token,model:e};return xe(t),G.break(),G.success("Configuration saved to ~/.agentx/auth.json"),console.log(` Provider: ${B.bold("anthropic")} (${t.authType})`),console.log(` Model: ${B.bold(re.find(r=>r.id===t.model)?.label||t.model)}`),t}async function Ke(s){return L(s)?!0:(G.warn("No AI credentials configured."),G.break(),await Pe()!==null)}var te,ne,re,H=N(()=>{"use strict";_e();te=E.join(me.homedir(),".agentx"),ne=E.join(te,"auth.json");re=[{id:"claude-sonnet-4-20250514",label:"anthropic/claude-sonnet-4",hint:"Claude Sonnet 4 \xB7 ctx 200k \xB7 recommended"},{id:"claude-opus-4-20250514",label:"anthropic/claude-opus-4-5",hint:"Claude Opus 4.5 \xB7 ctx 200k \xB7 reasoning"},{id:"claude-haiku-4-20250514",label:"anthropic/claude-haiku-4",hint:"Claude Haiku 4 \xB7 ctx 200k \xB7 fast"}]});function Se(s){return(s?Y.filter(t=>s.includes(t.name)):Y).map(({name:t,description:r,input_schema:n})=>({name:t,description:r,input_schema:n}))}function C(){return Se(["create_files","ask_user"])}function Be(){let s=Y.filter(t=>t.name!=="create_files"&&t.name!=="ask_user");if(s.length===0)return"";let e=["# Available Capabilities","In addition to generating files, you have the following capabilities:",""];for(let t of s)e.push(`## ${t.name}`),e.push(t.description),e.push("");return e.join(`
2
+ `)}var Y,He,W=N(()=>{"use strict";Y=[{name:"create_files",description:"Create one or more files as output. Use this when you need to generate code, documents, configs, or any file-based output.",input_schema:{type:"object",properties:{files:{type:"array",items:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root (e.g., src/components/Button.tsx)"},content:{type:"string",description:"The full content of the file"},language:{type:"string",description:"Programming language or file type"},description:{type:"string",description:"Brief description of what this file does"}},required:["path","content"]}},summary:{type:"string",description:"Brief summary of all generated files"}},required:["files"]},permission:"file-write"},{name:"ask_user",description:"Ask the user a clarifying question when you need more information to proceed. Use this when the request is ambiguous or you need to confirm important decisions.",input_schema:{type:"object",properties:{question:{type:"string",description:"The question to ask the user"},options:{type:"array",items:{type:"string"},description:"Optional list of choices for the user"}},required:["question"]},permission:"none"},{name:"read_file",description:"Read the contents of a file. Use this to inspect existing code, understand patterns, check implementations, or gather context before generating code.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root"},max_lines:{type:"number",description:"Maximum number of lines to read. Defaults to 500. Use for large files."}},required:["path"]},permission:"file-read"},{name:"search_files",description:"Search for files matching a pattern and optionally search their content with a regex. Use this to find relevant code, understand project structure, or locate specific patterns.",input_schema:{type:"object",properties:{pattern:{type:"string",description:"Glob pattern to match files (e.g., 'src/**/*.ts', '*.json')"},content_regex:{type:"string",description:"Optional regex to search within matched files. Returns matching lines."},max_results:{type:"number",description:"Maximum number of results to return. Default: 50."}},required:["pattern"]},permission:"none"},{name:"list_directory",description:"List files and directories at a given path. Use this to explore project structure.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative directory path from project root. Defaults to '.' (root)."},recursive:{type:"boolean",description:"List recursively. Default: false."},max_depth:{type:"number",description:"Maximum depth for recursive listing. Default: 3."}}},permission:"none"},{name:"run_command",description:"Execute a shell command. Use this to run build tools, test commands, linters, or inspect the environment. Commands run in the project root directory.",input_schema:{type:"object",properties:{command:{type:"string",description:"The shell command to execute"},timeout:{type:"number",description:"Timeout in milliseconds. Default: 30000 (30 seconds)."}},required:["command"]},permission:"command"},{name:"edit_file",description:"Apply search-and-replace edits to an existing file. Use this for targeted modifications to existing code rather than rewriting entire files.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root"},edits:{type:"array",items:{type:"object",properties:{old_text:{type:"string",description:"The exact text to find in the file"},new_text:{type:"string",description:"The replacement text"}},required:["old_text","new_text"]},description:"List of search/replace pairs to apply in order"}},required:["path","edits"]},permission:"file-write"},{name:"spawn_agent",description:"Spawn a sub-agent to handle a task in the background. The sub-agent runs in its own session and returns results. Use this for parallel research, long-running tasks, or delegating work to a specialized agent.",input_schema:{type:"object",properties:{agent_id:{type:"string",description:"The ID of the agent to spawn (must be a registered agent)"},prompt:{type:"string",description:"The task description for the sub-agent"},timeout_seconds:{type:"number",description:"Maximum time to wait for completion in seconds. Default: 300 (5 minutes)."}},required:["agent_id","prompt"]},permission:"none"}];He=Y.map(s=>s.name)});function X(s){return!s||s.length<Ee?s:[{type:"text",text:s,cache_control:{type:"ephemeral"}}]}var V,z,Ee,q,se=N(()=>{"use strict";H();W();V="claude-sonnet-4-20250514",z=8192,Ee=4*1024;q=class{name="claude";apiKey;authType="api-key";constructor(e){if(this.apiKey=e||process.env.ANTHROPIC_API_KEY||"",!this.apiKey){let t=L();t&&(this.apiKey=t.token,this.authType=t.authType)}if(!this.apiKey)throw new Error("Anthropic API key required. Run `agentx model` to configure, set ANTHROPIC_API_KEY, or pass --api-key.")}async generate(e,t){let r=t?.model||V,n=t?.maxTokens||z,o=e.find(c=>c.role==="system"),l=e.filter(c=>c.role!=="system").map(c=>({role:c.role,content:c.content})),p={model:r,max_tokens:n,messages:l,tools:C()};o&&(p.system=X(o.content)),t?.temperature!==void 0&&(p.temperature=t.temperature);let m=await this.callApi(p,t);return this.parseResponse(m)}async generateRaw(e,t,r,n){let o=n?.model||V,l=n?.maxTokens||z,p={model:o,max_tokens:l,system:X(t),messages:e,tools:r};n?.temperature!==void 0&&(p.temperature=n.temperature),n?.toolChoice&&(p.tool_choice={type:"tool",name:n.toolChoice.name});let m=await this.callApi(p,n);return{content:m.content.map(g=>g.type==="text"?{type:"text",text:g.text||""}:g.type==="tool_use"?{type:"tool_use",id:g.id||"",name:g.name||"",input:g.input||{}}:{type:"text",text:""}),stop_reason:m.stop_reason,usage:m.usage}}async*stream(e,t){let r=t?.model||V,n=t?.maxTokens||z,o=e.find(f=>f.role==="system"),l=e.filter(f=>f.role!=="system").map(f=>({role:f.role,content:f.content})),p={model:r,max_tokens:n,messages:l,stream:!0,tools:C()};o&&(p.system=X(o.content));let m=this.buildHeaders(),c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p),signal:t?.abortSignal});if(!c.ok){let f=await c.text();yield{type:"error",error:`Anthropic API error (${c.status}): ${f}`};return}let g=c.body?.getReader();if(!g){yield{type:"error",error:"No response body"};return}let k=new TextDecoder,d="",h=[],w="",A,b=0,i=null,y=f=>{let R=(f||"").trim();if(!R||R.includes("```"))return;let T=R.replace(/\r\n/g,`
3
3
  `).split(`
4
4
  `),x=T.slice(Math.max(0,T.length-20)),u=x.join(`
5
5
  `);if(/\b(plan|proposal)\b/i.test(u)&&/(ready for your review|review (the )?plan|requesting plan approval|awaiting approval|waiting for (your )?approval|approve (the )?plan|approval to proceed)/i.test(u))return`The provider is requesting plan approval.
6
6
  Reply with:
7
7
  - approve
8
8
  - revise: <what to change>
9
- - cancel`;let k=P=>/^(question|clarification|clarify|i need|need more|before i proceed|to proceed|please (confirm|clarify)|which|what|where|when|how|do you)/i.test(P.trim()),O=-1;for(let P=x.length-1;P>=0;P--){let $=x[P].trim();if($&&(k($)||$.includes("?"))){O=P;break}}if(O===-1)return;let v=[];for(let P=O;P<x.length&&v.length<8;P++){let $=x[P],ee=$.trim();if(v.length>0&&!ee||v.length>0&&!/^(options?:|[-*]\s|\d+[\).]\s)/i.test(ee)&&!ee.includes("?"))break;v.push($.trimEnd())}let j=v.join(`
10
- `).trim();if(!(j.length<5))return j.length>800?j.slice(0,800).trimEnd():j};try{for(;;){let{done:f,value:R}=await g.read();if(f)break;d+=_.decode(R,{stream:!0});let T=d.split(`
11
- `);d=T.pop()||"";for(let x of T){if(!x.startsWith("data: "))continue;let u=x.slice(6).trim();if(u!=="[DONE]")try{let a=JSON.parse(u);if(a.type==="content_block_start"&&a.content_block?.type==="tool_use"){if(s){yield{type:"tool_use_end",name:s.name};try{let k=JSON.parse(s.json||"{}");s.name==="create_files"&&k&&(Array.isArray(k.files)&&h.push(...k.files),typeof k.summary=="string"&&k.summary.trim()&&(w+=`
12
- ${k.summary}`)),s.name==="ask_user"&&k&&typeof k.question=="string"&&k.question.trim()&&(A=k.question,Array.isArray(k.options)&&k.options.length&&(A+=`
13
- Options: ${k.options.join(", ")}`))}catch{}finally{s=null}}s={name:a.content_block.name,id:a.content_block.id,json:""},yield{type:"tool_use_start",name:a.content_block.name,id:a.content_block.id}}if(a.type==="content_block_delta"&&(a.delta?.type==="text_delta"&&(w+=a.delta.text,yield{type:"text_delta",text:a.delta.text}),a.delta?.type==="input_json_delta"&&(s&&(s.json+=a.delta.partial_json||""),yield{type:"tool_use_delta",json:a.delta.partial_json})),a.type==="content_block_stop"&&s){yield{type:"tool_use_end",name:s.name};try{let k=JSON.parse(s.json||"{}");s.name==="create_files"&&k&&(Array.isArray(k.files)&&h.push(...k.files),typeof k.summary=="string"&&k.summary.trim()&&(w+=`
14
- ${k.summary}`)),s.name==="ask_user"&&k&&typeof k.question=="string"&&k.question.trim()&&(A=k.question,Array.isArray(k.options)&&k.options.length&&(A+=`
15
- Options: ${k.options.join(", ")}`))}catch{}finally{s=null}}a.type==="message_delta"&&a.usage&&(b=(a.usage.input_tokens||0)+(a.usage.output_tokens||0)),a.type}catch{}}}}finally{g.releaseLock()}if(s){yield{type:"tool_use_end",name:s.name};try{let f=JSON.parse(s.json||"{}");s.name==="create_files"&&f&&(Array.isArray(f.files)&&h.push(...f.files),typeof f.summary=="string"&&f.summary.trim()&&(w+=`
16
- ${f.summary}`)),s.name==="ask_user"&&f&&typeof f.question=="string"&&f.question.trim()&&(A=f.question,Array.isArray(f.options)&&f.options.length&&(A+=`
17
- Options: ${f.options.join(", ")}`))}catch{}s=null}!A&&h.length===0&&(A=y(w)),yield{type:"done",result:{content:w,files:h,followUp:A,tokensUsed:b}}}async*generateRawStream(e,t,r,n){let o=n?.model||V,l=n?.maxTokens||z,p={model:o,max_tokens:l,system:X(t),messages:e,tools:r,stream:!0};n?.temperature!==void 0&&(p.temperature=n.temperature);let m=this.buildHeaders(),c;try{c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p),signal:n?.abortSignal})}catch(y){yield{type:"error",error:`Anthropic stream init failed: ${y?.message??y}`};return}if(!c.ok){let y=await c.text().catch(()=>"");yield{type:"error",error:`Anthropic API error (${c.status}): ${y.slice(0,500)}`};return}let g=c.body?.getReader();if(!g){yield{type:"error",error:"No response body on Anthropic stream"};return}let _=new TextDecoder,d="",h=[],w=null,A="end_turn",b=0,s=0;try{for(;;){let{done:y,value:f}=await g.read();if(y)break;d+=_.decode(f,{stream:!0});let R=d.split(`
18
- `);d=R.pop()||"";for(let T of R){if(!T.startsWith("data: "))continue;let x=T.slice(6).trim();if(!x||x==="[DONE]")continue;let u;try{u=JSON.parse(x)}catch{continue}if(u.type==="message_start"&&u.message?.usage&&(b=u.message.usage.input_tokens||0),u.type==="content_block_start"){let a=u.content_block;a?.type==="text"?(w=h.length,h.push({type:"text",text:""})):a?.type==="tool_use"?(w=h.length,h.push({type:"tool_use",id:a.id||"",name:a.name||"",input:{}}),h[w]._rawJson=""):w=null}if(u.type==="content_block_delta"&&w!=null){let a=h[w];u.delta?.type==="text_delta"&&a.type==="text"?(a.text+=u.delta.text,yield{type:"text_delta",text:u.delta.text}):u.delta?.type==="input_json_delta"&&a.type==="tool_use"&&(a._rawJson+=u.delta.partial_json||"")}if(u.type==="content_block_stop"&&w!=null){let a=h[w];if(a.type==="tool_use"){let k=a._rawJson||"{}";try{a.input=JSON.parse(k)}catch{a.input={}}delete a._rawJson}w=null}u.type==="message_delta"&&(u.delta?.stop_reason&&(A=u.delta.stop_reason),u.usage&&(s=u.usage.output_tokens||0))}}}catch(y){yield{type:"error",error:`Anthropic stream read failed: ${y?.message??y}`};return}finally{g.releaseLock()}yield{type:"raw_result",result:{content:h,stop_reason:A,usage:{input_tokens:b,output_tokens:s}}}}buildHeaders(){let e={"Content-Type":"application/json","anthropic-version":"2023-06-01"};return this.authType==="oauth"?(e.Authorization=`Bearer ${this.apiKey}`,e["anthropic-beta"]="claude-code-20250219,oauth-2025-04-20",e["user-agent"]="claude-cli/2.1.2 (external, cli)",e["x-app"]="cli",e["anthropic-dangerous-direct-browser-access"]="true"):e["x-api-key"]=this.apiKey,e}async callApi(e,t){let r=this.buildHeaders(),n=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:r,body:JSON.stringify(e),signal:t?.abortSignal});if(!n.ok){let o=await n.text();throw new Error(`Anthropic API error (${n.status}): ${o}`)}return await n.json()}parseResponse(e){let t=[],r="",n;for(let o of e.content)if(o.type==="text"&&(r+=o.text||""),o.type==="tool_use"){if(o.name==="create_files"&&o.input){let l=o.input;t.push(...l.files||[]),l.summary&&(r+=`
9
+ - cancel`;let _=P=>/^(question|clarification|clarify|i need|need more|before i proceed|to proceed|please (confirm|clarify)|which|what|where|when|how|do you)/i.test(P.trim()),O=-1;for(let P=x.length-1;P>=0;P--){let $=x[P].trim();if($&&(_($)||$.includes("?"))){O=P;break}}if(O===-1)return;let v=[];for(let P=O;P<x.length&&v.length<8;P++){let $=x[P],ee=$.trim();if(v.length>0&&!ee||v.length>0&&!/^(options?:|[-*]\s|\d+[\).]\s)/i.test(ee)&&!ee.includes("?"))break;v.push($.trimEnd())}let j=v.join(`
10
+ `).trim();if(!(j.length<5))return j.length>800?j.slice(0,800).trimEnd():j};try{for(;;){let{done:f,value:R}=await g.read();if(f)break;d+=k.decode(R,{stream:!0});let T=d.split(`
11
+ `);d=T.pop()||"";for(let x of T){if(!x.startsWith("data: "))continue;let u=x.slice(6).trim();if(u!=="[DONE]")try{let a=JSON.parse(u);if(a.type==="content_block_start"&&a.content_block?.type==="tool_use"){if(i){yield{type:"tool_use_end",name:i.name};try{let _=JSON.parse(i.json||"{}");i.name==="create_files"&&_&&(Array.isArray(_.files)&&h.push(..._.files),typeof _.summary=="string"&&_.summary.trim()&&(w+=`
12
+ ${_.summary}`)),i.name==="ask_user"&&_&&typeof _.question=="string"&&_.question.trim()&&(A=_.question,Array.isArray(_.options)&&_.options.length&&(A+=`
13
+ Options: ${_.options.join(", ")}`))}catch{}finally{i=null}}i={name:a.content_block.name,id:a.content_block.id,json:""},yield{type:"tool_use_start",name:a.content_block.name,id:a.content_block.id}}if(a.type==="content_block_delta"&&(a.delta?.type==="text_delta"&&(w+=a.delta.text,yield{type:"text_delta",text:a.delta.text}),a.delta?.type==="input_json_delta"&&(i&&(i.json+=a.delta.partial_json||""),yield{type:"tool_use_delta",json:a.delta.partial_json})),a.type==="content_block_stop"&&i){yield{type:"tool_use_end",name:i.name};try{let _=JSON.parse(i.json||"{}");i.name==="create_files"&&_&&(Array.isArray(_.files)&&h.push(..._.files),typeof _.summary=="string"&&_.summary.trim()&&(w+=`
14
+ ${_.summary}`)),i.name==="ask_user"&&_&&typeof _.question=="string"&&_.question.trim()&&(A=_.question,Array.isArray(_.options)&&_.options.length&&(A+=`
15
+ Options: ${_.options.join(", ")}`))}catch{}finally{i=null}}a.type==="message_delta"&&a.usage&&(b=(a.usage.input_tokens||0)+(a.usage.output_tokens||0)),a.type}catch{}}}}finally{g.releaseLock()}if(i){yield{type:"tool_use_end",name:i.name};try{let f=JSON.parse(i.json||"{}");i.name==="create_files"&&f&&(Array.isArray(f.files)&&h.push(...f.files),typeof f.summary=="string"&&f.summary.trim()&&(w+=`
16
+ ${f.summary}`)),i.name==="ask_user"&&f&&typeof f.question=="string"&&f.question.trim()&&(A=f.question,Array.isArray(f.options)&&f.options.length&&(A+=`
17
+ Options: ${f.options.join(", ")}`))}catch{}i=null}!A&&h.length===0&&(A=y(w)),yield{type:"done",result:{content:w,files:h,followUp:A,tokensUsed:b}}}async*generateRawStream(e,t,r,n){let o=n?.model||V,l=n?.maxTokens||z,p={model:o,max_tokens:l,system:X(t),messages:e,tools:r,stream:!0};n?.temperature!==void 0&&(p.temperature=n.temperature);let m=this.buildHeaders(),c;try{c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p),signal:n?.abortSignal})}catch(y){yield{type:"error",error:`Anthropic stream init failed: ${y?.message??y}`};return}if(!c.ok){let y=await c.text().catch(()=>"");yield{type:"error",error:`Anthropic API error (${c.status}): ${y.slice(0,500)}`};return}let g=c.body?.getReader();if(!g){yield{type:"error",error:"No response body on Anthropic stream"};return}let k=new TextDecoder,d="",h=[],w=null,A="end_turn",b=0,i=0;try{for(;;){let{done:y,value:f}=await g.read();if(y)break;d+=k.decode(f,{stream:!0});let R=d.split(`
18
+ `);d=R.pop()||"";for(let T of R){if(!T.startsWith("data: "))continue;let x=T.slice(6).trim();if(!x||x==="[DONE]")continue;let u;try{u=JSON.parse(x)}catch{continue}if(u.type==="message_start"&&u.message?.usage&&(b=u.message.usage.input_tokens||0),u.type==="content_block_start"){let a=u.content_block;a?.type==="text"?(w=h.length,h.push({type:"text",text:""})):a?.type==="tool_use"?(w=h.length,h.push({type:"tool_use",id:a.id||"",name:a.name||"",input:{}}),h[w]._rawJson=""):w=null}if(u.type==="content_block_delta"&&w!=null){let a=h[w];u.delta?.type==="text_delta"&&a.type==="text"?(a.text+=u.delta.text,yield{type:"text_delta",text:u.delta.text}):u.delta?.type==="input_json_delta"&&a.type==="tool_use"&&(a._rawJson+=u.delta.partial_json||"")}if(u.type==="content_block_stop"&&w!=null){let a=h[w];if(a.type==="tool_use"){let _=a._rawJson||"{}";try{a.input=JSON.parse(_)}catch{a.input={}}delete a._rawJson}w=null}u.type==="message_delta"&&(u.delta?.stop_reason&&(A=u.delta.stop_reason),u.usage&&(i=u.usage.output_tokens||0))}}}catch(y){yield{type:"error",error:`Anthropic stream read failed: ${y?.message??y}`};return}finally{g.releaseLock()}yield{type:"raw_result",result:{content:h,stop_reason:A,usage:{input_tokens:b,output_tokens:i}}}}buildHeaders(){let e={"Content-Type":"application/json","anthropic-version":"2023-06-01"};return this.authType==="oauth"?(e.Authorization=`Bearer ${this.apiKey}`,e["anthropic-beta"]="claude-code-20250219,oauth-2025-04-20",e["user-agent"]="claude-cli/2.1.2 (external, cli)",e["x-app"]="cli",e["anthropic-dangerous-direct-browser-access"]="true"):e["x-api-key"]=this.apiKey,e}async callApi(e,t){let r=this.buildHeaders(),n=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:r,body:JSON.stringify(e),signal:t?.abortSignal});if(!n.ok){let o=await n.text();throw new Error(`Anthropic API error (${n.status}): ${o}`)}return await n.json()}parseResponse(e){let t=[],r="",n;for(let o of e.content)if(o.type==="text"&&(r+=o.text||""),o.type==="tool_use"){if(o.name==="create_files"&&o.input){let l=o.input;t.push(...l.files||[]),l.summary&&(r+=`
19
19
  ${l.summary}`)}if(o.name==="ask_user"&&o.input){let l=o.input;n=l.question,l.options?.length&&(n+=`
20
- Options: ${l.options.join(", ")}`)}}return{content:r,files:t,followUp:n,tokensUsed:e.usage.input_tokens+e.usage.output_tokens}}}});import{execa as fe}from"execa";import{tmpdir as Ee}from"os";function Ce(i){let e=["-p","--output-format","json","--model",i.model,"--dangerously-skip-permissions"];return i.bare&&e.push(...Ie),i.systemPrompt&&e.push(i.bare?"--system-prompt":"--append-system-prompt",i.systemPrompt),e.push(i.prompt),e}var K,ie,ye,Ie,J,ae=N(()=>{"use strict";H();W();K="claude-sonnet-4-20250514",ie=8192,ye={"claude-sonnet-4-20250514":"sonnet","claude-opus-4-20250514":"opus","claude-haiku-4-20250514":"haiku"},Ie=["--tools","","--strict-mcp-config","--mcp-config",'{"mcpServers":{}}',"--settings",'{"disableAllHooks":true}',"--no-session-persistence","--setting-sources",""];J=class{name="claude-code";credential;constructor(){let e=S();if(e){this.credential={type:e.authType,token:e.token};return}let t=L();if(!t)throw new Error(`No Claude credentials found.
20
+ Options: ${l.options.join(", ")}`)}}return{content:r,files:t,followUp:n,tokensUsed:e.usage.input_tokens+e.usage.output_tokens}}}});import{execa as fe}from"execa";import{tmpdir as Ie}from"os";function Me(s){let e=["-p","--output-format","json","--model",s.model,"--dangerously-skip-permissions"];return s.bare&&e.push(...Ce),s.systemPrompt&&e.push(s.bare?"--system-prompt":"--append-system-prompt",s.systemPrompt),e.push(s.prompt),e}function ge(s){let e=(s.stderr||s.stdout||"").toString().trim();return e||(s.isCanceled?"Claude CLI aborted by caller (timeout or cancel)":s.timedOut?"Claude CLI timed out":s.signal?`Claude CLI killed by ${s.signal}`:`Claude CLI failed (exit ${s.exitCode??"unknown"}, no output)`)}var K,ie,ye,Ce,J,ae=N(()=>{"use strict";H();W();K="claude-sonnet-4-20250514",ie=8192,ye={"claude-sonnet-4-20250514":"sonnet","claude-opus-4-20250514":"opus","claude-haiku-4-20250514":"haiku"},Ce=["--tools","","--strict-mcp-config","--mcp-config",'{"mcpServers":{}}',"--settings",'{"disableAllHooks":true}',"--no-session-persistence","--setting-sources",""];J=class{name="claude-code";credential;constructor(){let e=S();if(e){this.credential={type:e.authType,token:e.token};return}let t=L();if(!t)throw new Error(`No Claude credentials found.
21
21
  Options:
22
22
  1. Run \`agentx model\` to configure credentials
23
23
  2. Set ANTHROPIC_API_KEY environment variable
24
24
  3. Set ANTHROPIC_OAUTH_TOKEN environment variable`);this.credential={type:t.authType,token:t.token}}async generate(e,t){return this.credential.type==="oauth"?this.generateViaCli(e,t):this.generateViaApi(e,t)}async generateRaw(e,t,r,n){if(this.credential.type==="oauth")throw new Error("generateRaw() not available for OAuth/CLI mode");let o=n?.model||K,l=n?.maxTokens||ie,p={model:o,max_tokens:l,system:t,messages:e,tools:r};n?.temperature!==void 0&&(p.temperature=n.temperature);let m={"Content-Type":"application/json","anthropic-version":"2023-06-01","x-api-key":this.credential.token},c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p)});if(!c.ok){let d=await c.text();throw new Error(`Anthropic API error (${c.status}): ${d}`)}let g=await c.json();return{content:g.content.map(d=>d.type==="text"?{type:"text",text:d.text||""}:d.type==="tool_use"?{type:"tool_use",id:d.id||"",name:d.name||"",input:d.input||{}}:{type:"text",text:""}),stop_reason:g.stop_reason,usage:g.usage}}get supportsAgenticLoop(){return this.credential.type==="api-key"}async generateViaCli(e,t){let r=t?.model||S()?.model||K,n=ye[r]||r,o=e.find(d=>d.role==="system"),p=e.filter(d=>d.role==="user").map(d=>d.content).join(`
25
25
 
26
- `),m=Ce({model:n,systemPrompt:o?.content,prompt:p,bare:t?.bare===!0}),c={...process.env};delete c.ANTHROPIC_API_KEY,delete c.ANTHROPIC_API_KEY_OLD;let g=await fe("claude",m,{env:c,extendEnv:!1,reject:!1,timeout:3e5,stdin:"ignore",...t?.bare?{cwd:Ee()}:{},...t?.abortSignal?{signal:t.abortSignal}:{}});if(g.exitCode!==0){let d=g.stderr||g.stdout||"Claude CLI failed";throw new Error(`Claude CLI error: ${d}`)}let _=g.stdout.trim();try{let d=JSON.parse(_);if(d.is_error&&d.result)throw new Error(d.result)}catch(d){if(d.message&&!d.message.includes("JSON"))throw d}return this.parseCliOutput(_)}async generateViaApi(e,t){let r=t?.model||K,n=t?.maxTokens||ie,o=e.find(_=>_.role==="system"),l=e.filter(_=>_.role!=="system").map(_=>({role:_.role,content:_.content})),p={model:r,max_tokens:n,messages:l,tools:C()};o&&(p.system=o.content),t?.temperature!==void 0&&(p.temperature=t.temperature);let m={"Content-Type":"application/json","anthropic-version":"2023-06-01","x-api-key":this.credential.token},c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p)});if(!c.ok){let _=await c.text();throw new Error(`Anthropic API error (${c.status}): ${_}`)}let g=await c.json();return this.parseApiResponse(g)}async*stream(e,t){this.credential.type==="oauth"?yield*this.streamViaCli(e,t):yield*this.streamViaApi(e,t)}async*streamViaCli(e,t){let r=t?.model||S()?.model||K,n=ye[r]||r,o=e.find(s=>s.role==="system"),p=e.filter(s=>s.role==="user").map(s=>s.content).join(`
26
+ `),m=Me({model:n,systemPrompt:o?.content,prompt:p,bare:t?.bare===!0}),c={...process.env};delete c.ANTHROPIC_API_KEY,delete c.ANTHROPIC_API_KEY_OLD;let g=await fe("claude",m,{env:c,extendEnv:!1,reject:!1,timeout:3e5,stdin:"ignore",...t?.bare?{cwd:Ie()}:{},...t?.abortSignal?{signal:t.abortSignal}:{}});if(g.exitCode!==0)throw new Error(`Claude CLI error: ${ge(g)}`);let k=g.stdout.trim();try{let d=JSON.parse(k);if(d.is_error&&d.result)throw new Error(d.result)}catch(d){if(d.message&&!d.message.includes("JSON"))throw d}return this.parseCliOutput(k)}async generateViaApi(e,t){let r=t?.model||K,n=t?.maxTokens||ie,o=e.find(k=>k.role==="system"),l=e.filter(k=>k.role!=="system").map(k=>({role:k.role,content:k.content})),p={model:r,max_tokens:n,messages:l,tools:C()};o&&(p.system=o.content),t?.temperature!==void 0&&(p.temperature=t.temperature);let m={"Content-Type":"application/json","anthropic-version":"2023-06-01","x-api-key":this.credential.token},c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p)});if(!c.ok){let k=await c.text();throw new Error(`Anthropic API error (${c.status}): ${k}`)}let g=await c.json();return this.parseApiResponse(g)}async*stream(e,t){this.credential.type==="oauth"?yield*this.streamViaCli(e,t):yield*this.streamViaApi(e,t)}async*streamViaCli(e,t){let r=t?.model||S()?.model||K,n=ye[r]||r,o=e.find(i=>i.role==="system"),p=e.filter(i=>i.role==="user").map(i=>i.content).join(`
27
27
 
28
- `),m=["-p","--output-format","stream-json","--model",n,"--dangerously-skip-permissions"];o&&m.push("--append-system-prompt",o.content),m.push(p);let c={...process.env};delete c.ANTHROPIC_API_KEY,delete c.ANTHROPIC_API_KEY_OLD;let g=fe("claude",m,{env:c,extendEnv:!1,reject:!1,timeout:3e5,stdin:"ignore"}),_="",d="",h;if(g.stderr&&g.stderr.on("data",s=>{d+=Buffer.isBuffer(s)?s.toString("utf8"):String(s)}),g.stdout){let s=new TextDecoder,y=g.stdout;for await(let f of y){let T=(typeof f=="string"?f:s.decode(f,{stream:!0})).split(`
29
- `).filter(Boolean);for(let x of T)try{let u=JSON.parse(x);if(u.type==="error"){h=String(u.error||u.message||"Claude CLI error");continue}if(u.is_error&&(u.result||u.message)){h=String(u.result||u.message);continue}u.type==="assistant"&&u.message?(_+=u.message,yield{type:"text_delta",text:u.message}):u.type==="result"&&(_=u.result||_)}catch{_+=x,yield{type:"text_delta",text:x}}}}let w=await g;if(w.exitCode!==0&&!h&&(h=(d||w.stderr||w.stdout||"Claude CLI failed").toString().trim()),h){yield{type:"error",error:`Claude CLI error: ${h}`};return}let A=this.extractFilesFromText(_),b=A.length===0?this.inferFollowUpFromText(_):void 0;yield{type:"done",result:{content:_,files:A,followUp:b,tokensUsed:0}}}async*streamViaApi(e,t){let r=t?.model||K,n=t?.maxTokens||ie,o=e.find(y=>y.role==="system"),l=e.filter(y=>y.role!=="system").map(y=>({role:y.role,content:y.content})),p={model:r,max_tokens:n,messages:l,tools:C(),stream:!0};o&&(p.system=o.content);let m={"Content-Type":"application/json","anthropic-version":"2023-06-01","x-api-key":this.credential.token},c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p)});if(!c.ok){let y=await c.text();yield{type:"error",error:`Anthropic API error (${c.status}): ${y}`};return}let g=c.body?.getReader();if(!g){yield{type:"error",error:"No response body"};return}let _=new TextDecoder,d="",h="",w=0,A=[],b,s=null;try{for(;;){let{done:y,value:f}=await g.read();if(y)break;d+=_.decode(f,{stream:!0});let R=d.split(`
30
- `);d=R.pop()||"";for(let T of R){if(!T.startsWith("data: "))continue;let x=T.slice(6).trim();if(x!=="[DONE]")try{let u=JSON.parse(x);if(u.type==="content_block_start"&&u.content_block?.type==="tool_use"){if(s){yield{type:"tool_use_end",name:s.name};try{let a=JSON.parse(s.json||"{}");s.name==="create_files"&&a&&(Array.isArray(a.files)&&A.push(...a.files),typeof a.summary=="string"&&a.summary.trim()&&(h+=`
31
- ${a.summary}`)),s.name==="ask_user"&&a&&typeof a.question=="string"&&a.question.trim()&&(b=a.question,Array.isArray(a.options)&&a.options.length&&(b+=`
32
- Options: ${a.options.join(", ")}`))}catch{}finally{s=null}}s={name:u.content_block.name,id:u.content_block.id,json:""},yield{type:"tool_use_start",name:s.name,id:s.id}}if(u.type==="content_block_delta"&&u.delta?.type==="text_delta"&&(h+=u.delta.text,yield{type:"text_delta",text:u.delta.text}),u.type==="content_block_delta"&&u.delta?.type==="input_json_delta"&&(s&&(s.json+=u.delta.partial_json||""),yield{type:"tool_use_delta",json:u.delta.partial_json}),u.type==="content_block_stop"&&s){yield{type:"tool_use_end",name:s.name};try{let a=JSON.parse(s.json||"{}");s.name==="create_files"&&a&&(Array.isArray(a.files)&&A.push(...a.files),typeof a.summary=="string"&&a.summary.trim()&&(h+=`
33
- ${a.summary}`)),s.name==="ask_user"&&a&&typeof a.question=="string"&&a.question.trim()&&(b=a.question,Array.isArray(a.options)&&a.options.length&&(b+=`
34
- Options: ${a.options.join(", ")}`))}catch{}finally{s=null}}u.type==="message_delta"&&u.usage&&(w=(u.usage.input_tokens||0)+(u.usage.output_tokens||0))}catch{}}}}finally{g.releaseLock()}if(s){yield{type:"tool_use_end",name:s.name};try{let y=JSON.parse(s.json||"{}");s.name==="create_files"&&y&&(Array.isArray(y.files)&&A.push(...y.files),typeof y.summary=="string"&&y.summary.trim()&&(h+=`
35
- ${y.summary}`)),s.name==="ask_user"&&y&&typeof y.question=="string"&&y.question.trim()&&(b=y.question,Array.isArray(y.options)&&y.options.length&&(b+=`
36
- Options: ${y.options.join(", ")}`))}catch{}s=null}A.length===0&&A.push(...this.extractFilesFromText(h)),!b&&A.length===0&&(b=this.inferFollowUpFromText(h)),yield{type:"done",result:{content:h,files:A,followUp:b,tokensUsed:w}}}parseCliOutput(e){let t;try{t=JSON.parse(e)}catch{let l=this.inferFollowUpFromText(e.trim());return{content:e.trim(),files:[],followUp:l,tokensUsed:0}}let r=t.result||t.text||t.content||"",n=this.extractFilesFromText(r),o=n.length===0?this.inferFollowUpFromText(r):void 0;return{content:r,files:n,followUp:o,tokensUsed:t.usage?(t.usage.input_tokens||0)+(t.usage.output_tokens||0):0}}extractFilesFromText(e){let t=[],r=/```[\w]*\s*([\w/._-]+\.\w+)\n([\s\S]*?)```/g,n;for(;(n=r.exec(e))!==null;){let o=n[1],l=n[2];o&&l&&t.push({path:o,content:l.trimEnd()})}return t}inferFollowUpFromText(e){let t=(e||"").trim();if(!t||t.includes("```"))return;let r=t.replace(/\r\n/g,`
28
+ `),m=["-p","--output-format","stream-json","--model",n,"--dangerously-skip-permissions"];o&&m.push("--append-system-prompt",o.content),m.push(p);let c={...process.env};delete c.ANTHROPIC_API_KEY,delete c.ANTHROPIC_API_KEY_OLD;let g=fe("claude",m,{env:c,extendEnv:!1,reject:!1,timeout:3e5,stdin:"ignore"}),k="",d="",h;if(g.stderr&&g.stderr.on("data",i=>{d+=Buffer.isBuffer(i)?i.toString("utf8"):String(i)}),g.stdout){let i=new TextDecoder,y=g.stdout;for await(let f of y){let T=(typeof f=="string"?f:i.decode(f,{stream:!0})).split(`
29
+ `).filter(Boolean);for(let x of T)try{let u=JSON.parse(x);if(u.type==="error"){h=String(u.error||u.message||"Claude CLI error");continue}if(u.is_error&&(u.result||u.message)){h=String(u.result||u.message);continue}u.type==="assistant"&&u.message?(k+=u.message,yield{type:"text_delta",text:u.message}):u.type==="result"&&(k=u.result||k)}catch{k+=x,yield{type:"text_delta",text:x}}}}let w=await g;if(w.exitCode!==0&&!h&&(h=d.toString().trim()||ge(w)),h){yield{type:"error",error:`Claude CLI error: ${h}`};return}let A=this.extractFilesFromText(k),b=A.length===0?this.inferFollowUpFromText(k):void 0;yield{type:"done",result:{content:k,files:A,followUp:b,tokensUsed:0}}}async*streamViaApi(e,t){let r=t?.model||K,n=t?.maxTokens||ie,o=e.find(y=>y.role==="system"),l=e.filter(y=>y.role!=="system").map(y=>({role:y.role,content:y.content})),p={model:r,max_tokens:n,messages:l,tools:C(),stream:!0};o&&(p.system=o.content);let m={"Content-Type":"application/json","anthropic-version":"2023-06-01","x-api-key":this.credential.token},c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p)});if(!c.ok){let y=await c.text();yield{type:"error",error:`Anthropic API error (${c.status}): ${y}`};return}let g=c.body?.getReader();if(!g){yield{type:"error",error:"No response body"};return}let k=new TextDecoder,d="",h="",w=0,A=[],b,i=null;try{for(;;){let{done:y,value:f}=await g.read();if(y)break;d+=k.decode(f,{stream:!0});let R=d.split(`
30
+ `);d=R.pop()||"";for(let T of R){if(!T.startsWith("data: "))continue;let x=T.slice(6).trim();if(x!=="[DONE]")try{let u=JSON.parse(x);if(u.type==="content_block_start"&&u.content_block?.type==="tool_use"){if(i){yield{type:"tool_use_end",name:i.name};try{let a=JSON.parse(i.json||"{}");i.name==="create_files"&&a&&(Array.isArray(a.files)&&A.push(...a.files),typeof a.summary=="string"&&a.summary.trim()&&(h+=`
31
+ ${a.summary}`)),i.name==="ask_user"&&a&&typeof a.question=="string"&&a.question.trim()&&(b=a.question,Array.isArray(a.options)&&a.options.length&&(b+=`
32
+ Options: ${a.options.join(", ")}`))}catch{}finally{i=null}}i={name:u.content_block.name,id:u.content_block.id,json:""},yield{type:"tool_use_start",name:i.name,id:i.id}}if(u.type==="content_block_delta"&&u.delta?.type==="text_delta"&&(h+=u.delta.text,yield{type:"text_delta",text:u.delta.text}),u.type==="content_block_delta"&&u.delta?.type==="input_json_delta"&&(i&&(i.json+=u.delta.partial_json||""),yield{type:"tool_use_delta",json:u.delta.partial_json}),u.type==="content_block_stop"&&i){yield{type:"tool_use_end",name:i.name};try{let a=JSON.parse(i.json||"{}");i.name==="create_files"&&a&&(Array.isArray(a.files)&&A.push(...a.files),typeof a.summary=="string"&&a.summary.trim()&&(h+=`
33
+ ${a.summary}`)),i.name==="ask_user"&&a&&typeof a.question=="string"&&a.question.trim()&&(b=a.question,Array.isArray(a.options)&&a.options.length&&(b+=`
34
+ Options: ${a.options.join(", ")}`))}catch{}finally{i=null}}u.type==="message_delta"&&u.usage&&(w=(u.usage.input_tokens||0)+(u.usage.output_tokens||0))}catch{}}}}finally{g.releaseLock()}if(i){yield{type:"tool_use_end",name:i.name};try{let y=JSON.parse(i.json||"{}");i.name==="create_files"&&y&&(Array.isArray(y.files)&&A.push(...y.files),typeof y.summary=="string"&&y.summary.trim()&&(h+=`
35
+ ${y.summary}`)),i.name==="ask_user"&&y&&typeof y.question=="string"&&y.question.trim()&&(b=y.question,Array.isArray(y.options)&&y.options.length&&(b+=`
36
+ Options: ${y.options.join(", ")}`))}catch{}i=null}A.length===0&&A.push(...this.extractFilesFromText(h)),!b&&A.length===0&&(b=this.inferFollowUpFromText(h)),yield{type:"done",result:{content:h,files:A,followUp:b,tokensUsed:w}}}parseCliOutput(e){let t;try{t=JSON.parse(e)}catch{let l=this.inferFollowUpFromText(e.trim());return{content:e.trim(),files:[],followUp:l,tokensUsed:0}}let r=t.result||t.text||t.content||"",n=this.extractFilesFromText(r),o=n.length===0?this.inferFollowUpFromText(r):void 0;return{content:r,files:n,followUp:o,tokensUsed:t.usage?(t.usage.input_tokens||0)+(t.usage.output_tokens||0):0}}extractFilesFromText(e){let t=[],r=/```[\w]*\s*([\w/._-]+\.\w+)\n([\s\S]*?)```/g,n;for(;(n=r.exec(e))!==null;){let o=n[1],l=n[2];o&&l&&t.push({path:o,content:l.trimEnd()})}return t}inferFollowUpFromText(e){let t=(e||"").trim();if(!t||t.includes("```"))return;let r=t.replace(/\r\n/g,`
37
37
  `).split(`
38
38
  `),n=r.slice(Math.max(0,r.length-20)),o=n.join(`
39
39
  `);if(/\b(plan|proposal)\b/i.test(o)&&/(ready for your review|review (the )?plan|requesting plan approval|awaiting approval|waiting for (your )?approval|approve (the )?plan|approval to proceed)/i.test(o))return`The provider is requesting plan approval.
40
40
  Reply with:
41
41
  - approve
42
42
  - revise: <what to change>
43
- - cancel`;let p=_=>/^(question|clarification|clarify|i need|need more|before i proceed|to proceed|please (confirm|clarify)|which|what|where|when|how|do you)/i.test(_.trim()),m=-1;for(let _=n.length-1;_>=0;_--){let d=n[_].trim();if(d&&(p(d)||d.includes("?"))){m=_;break}}if(m===-1)return;let c=[];for(let _=m;_<n.length&&c.length<8;_++){let d=n[_],h=d.trim();if(c.length>0&&!h||c.length>0&&!/^(options?:|[-*]\s|\d+[\).]\s)/i.test(h)&&!h.includes("?"))break;c.push(d.trimEnd())}let g=c.join(`
43
+ - cancel`;let p=k=>/^(question|clarification|clarify|i need|need more|before i proceed|to proceed|please (confirm|clarify)|which|what|where|when|how|do you)/i.test(k.trim()),m=-1;for(let k=n.length-1;k>=0;k--){let d=n[k].trim();if(d&&(p(d)||d.includes("?"))){m=k;break}}if(m===-1)return;let c=[];for(let k=m;k<n.length&&c.length<8;k++){let d=n[k],h=d.trim();if(c.length>0&&!h||c.length>0&&!/^(options?:|[-*]\s|\d+[\).]\s)/i.test(h)&&!h.includes("?"))break;c.push(d.trimEnd())}let g=c.join(`
44
44
  `).trim();if(!(g.length<5))return g.length>800?g.slice(0,800).trimEnd():g}parseApiResponse(e){let t=[],r="",n;for(let o of e.content)if(o.type==="text"&&(r+=o.text||""),o.type==="tool_use"){if(o.name==="create_files"&&o.input){let l=o.input;t.push(...l.files||[]),l.summary&&(r+=`
45
45
  ${l.summary}`)}if(o.name==="ask_user"&&o.input){let l=o.input;n=l.question,l.options?.length&&(n+=`
46
- Options: ${l.options.join(", ")}`)}}return{content:r,files:t,followUp:n,tokensUsed:e.usage.input_tokens+e.usage.output_tokens}}}});var ce,le,D,pe=N(()=>{"use strict";W();ce="gpt-4o-mini",le=8192,D=class{name="openai";apiKey;baseUrl;thinkingEnabled;constructor(e,t,r={}){this.apiKey=e||process.env.OPENAI_API_KEY||"",this.baseUrl=(t||process.env.OPENAI_BASE_URL||"https://api.openai.com/v1").replace(/\/$/,"");let n=this.baseUrl.includes("deepseek.com");if(this.thinkingEnabled=n?r.thinking!==!1:null,!this.apiKey)throw new Error("OpenAI-compatible API key required. Set OPENAI_API_KEY (or pass --api-key). For DeepSeek, also set OPENAI_BASE_URL=https://api.deepseek.com/v1.")}async generate(e,t){let r=t?.model||process.env.OPENAI_MODEL||ce,n=t?.maxTokens||le,o=e.map(m=>({role:m.role,content:m.content})),l={model:r,max_tokens:n,messages:o,tools:this.legacyToolsAsOpenAI()};t?.temperature!==void 0&&(l.temperature=t.temperature);let p=await this.callApi(l);return this.parseHighLevelResponse(p)}async generateRaw(e,t,r,n){let o=this.buildRawBody(e,t,r,n),l=await this.callApi(o,n?.abortSignal);return this.parseRawResponse(l)}async*generateRawStream(e,t,r,n){let o={...this.buildRawBody(e,t,r,n),stream:!0,stream_options:{include_usage:!0}},l;try{l=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(this.maybeDeepseekExtras(o)),signal:n?.abortSignal})}catch(f){if(f?.name==="AbortError"||n?.abortSignal?.aborted){yield{type:"error",error:"cancelled"};return}yield{type:"error",error:`OpenAI-compat raw stream init failed: ${f?.message??f}`};return}if(!l.ok){let f=await l.text().catch(()=>"");yield{type:"error",error:`OpenAI-compat API error (${l.status}): ${f.slice(0,500)}`};return}let p=l.body?.getReader();if(!p){yield{type:"error",error:"No response body on OpenAI-compat raw stream"};return}let m=()=>{p.cancel(new Error("aborted")).catch(()=>{})};n?.abortSignal&&(n.abortSignal.aborted?m():n.abortSignal.addEventListener("abort",m,{once:!0}));let c=new TextDecoder,g="",_="",d="",h=0,w=0,A=null,b={};try{for(;;){if(n?.abortSignal?.aborted){yield{type:"error",error:"cancelled"};return}let{done:f,value:R}=await p.read();if(f)break;g+=c.decode(R,{stream:!0});let T=g.split(`
47
- `);g=T.pop()||"";for(let x of T){if(!x.startsWith("data: "))continue;let u=x.slice(6).trim();if(!u||u==="[DONE]")continue;let a;try{a=JSON.parse(u)}catch{continue}let k=a.choices?.[0],O=k?.delta;if(k?.finish_reason&&(A=k.finish_reason),typeof O?.reasoning_content=="string"&&O.reasoning_content&&(d+=O.reasoning_content,yield{type:"thinking_delta",text:O.reasoning_content}),typeof O?.content=="string"&&O.content&&(_+=O.content,yield{type:"text_delta",text:O.content}),Array.isArray(O?.tool_calls))for(let v of O.tool_calls){let j=v.index;if(j==null)continue;let P=b[j]||={id:"",name:"",argumentsRaw:""};v.id&&(P.id=v.id),v.function?.name&&(P.name=v.function.name),v.function?.arguments&&(P.argumentsRaw+=v.function.arguments)}a.usage&&(h=a.usage.prompt_tokens||0,w=a.usage.completion_tokens||0)}}}catch(f){if(f?.name==="AbortError"||n?.abortSignal?.aborted){yield{type:"error",error:"cancelled"};return}yield{type:"error",error:`OpenAI-compat raw stream read failed: ${f?.message??f}`};return}finally{n?.abortSignal&&n.abortSignal.removeEventListener("abort",m)}let s=[];d&&s.push({type:"reasoning",text:d}),_&&s.push({type:"text",text:_});for(let f of Object.values(b)){if(!f.id||!f.name)continue;let R={};try{R=f.argumentsRaw?JSON.parse(f.argumentsRaw):{}}catch{}s.push({type:"tool_use",id:f.id,name:f.name,input:R})}let y="end_turn";switch(A){case"tool_calls":case"function_call":y="tool_use";break;case"length":y="max_tokens";break}yield{type:"raw_result",result:{content:s,stop_reason:y,usage:{input_tokens:h,output_tokens:w}}}}buildRawBody(e,t,r,n){let o=n?.model||process.env.OPENAI_MODEL||ce,l=n?.maxTokens||le,p=t?[{role:"system",content:t}]:[];for(let c of e){let g=Array.isArray(c.content)?c.content:[{type:"text",text:c.content}];if(c.role==="user"){let _=g.filter(h=>h.type==="tool_result"),d=g.filter(h=>h.type==="text").map(h=>h.text).join("");for(let h of _)p.push({role:"tool",tool_call_id:h.tool_use_id,content:h.is_error?`[error] ${h.content}`:h.content});d?p.push({role:"user",content:d}):_.length===0&&p.push({role:"user",content:c.content})}else{let _=g.filter(A=>A.type==="tool_use"),d=g.filter(A=>A.type==="text").map(A=>A.text).join(""),h=g.filter(A=>A.type==="reasoning").map(A=>A.text).join(""),w={role:"assistant",content:d||null};_.length>0&&(w.tool_calls=_.map(A=>({id:A.id,type:"function",function:{name:A.name,arguments:JSON.stringify(A.input||{})}}))),h&&(w.reasoning_content=h),p.push(w)}}let m={model:o,max_tokens:l,messages:p,tools:r.map(c=>({type:"function",function:{name:c.name,description:c.description,parameters:c.input_schema}})),tool_choice:"auto"};return n?.temperature!==void 0&&(m.temperature=n.temperature),n?.toolChoice&&(m.tool_choice={type:"function",function:{name:n.toolChoice.name}}),n?.responseFormat&&(m.response_format={type:"json_schema",json_schema:{name:n.responseFormat.name,schema:n.responseFormat.schema,strict:!0}}),n?.logprobs?.enabled&&(m.logprobs=!0,m.top_logprobs=n.logprobs.topK),m}async*stream(e,t){let r=t?.model||process.env.OPENAI_MODEL||ce,n=t?.maxTokens||le,o=e.map(s=>({role:s.role,content:s.content})),l={model:r,max_tokens:n,messages:o,tools:this.legacyToolsAsOpenAI(),stream:!0,stream_options:{include_usage:!0}};t?.temperature!==void 0&&(l.temperature=t.temperature);let p;try{p=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(this.maybeDeepseekExtras(l))})}catch(s){yield{type:"error",error:`OpenAI-compat stream init failed: ${s.message}`};return}if(!p.ok){let s=await p.text().catch(()=>"");yield{type:"error",error:`OpenAI-compat API error (${p.status}): ${s.slice(0,500)}`};return}let m=p.body?.getReader();if(!m){yield{type:"error",error:"No response body on OpenAI-compat stream"};return}let c=new TextDecoder,g="",_="",d,h=0,w=[],A={},b={};try{for(;;){let{done:s,value:y}=await m.read();if(s)break;g+=c.decode(y,{stream:!0});let f=g.split(`
48
- `);g=f.pop()||"";for(let R of f){if(!R.startsWith("data: "))continue;let T=R.slice(6).trim();if(T==="[DONE]")continue;let x;try{x=JSON.parse(T)}catch{continue}let a=x.choices?.[0]?.delta;if(typeof a?.reasoning_content=="string"&&a.reasoning_content&&(yield{type:"thinking_delta",text:a.reasoning_content}),typeof a?.content=="string"&&a.content&&(_+=a.content,yield{type:"text_delta",text:a.content}),Array.isArray(a?.tool_calls))for(let k of a.tool_calls){let O=k.index;if(O==null)continue;let v=A[O]||={id:"",name:"",argumentsRaw:""};k.id&&(v.id=k.id),k.function?.name&&(v.name=k.function.name),k.function?.arguments&&(v.argumentsRaw+=k.function.arguments),v.id&&v.name&&!b[O]&&(b[O]=!0,yield{type:"tool_use_start",name:v.name,id:v.id}),b[O]&&k.function?.arguments&&(yield{type:"tool_use_delta",json:k.function.arguments})}x.usage&&(h=(x.usage.prompt_tokens||0)+(x.usage.completion_tokens||0))}}}catch(s){yield{type:"error",error:`OpenAI-compat stream read failed: ${s.message}`};return}for(let s of Object.values(A))if(s.name){yield{type:"tool_use_end",name:s.name};try{let y=s.argumentsRaw?JSON.parse(s.argumentsRaw):{};s.name==="create_files"&&Array.isArray(y.files)?(w.push(...y.files),typeof y.summary=="string"&&y.summary.trim()&&(_+=(_?`
49
- `:"")+y.summary)):s.name==="ask_user"&&typeof y.question=="string"&&(d=y.question,Array.isArray(y.options)&&y.options.length&&(d+=`
50
- Options: ${y.options.join(", ")}`))}catch{}}yield{type:"done",result:{content:_,files:w,followUp:d,tokensUsed:h}}}async callApi(e,t){let r=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(this.maybeDeepseekExtras(e)),signal:t});if(!r.ok){let n=await r.text().catch(()=>"");throw new Error(`OpenAI-compatible API error (${r.status}) ${this.baseUrl}: ${n.slice(0,500)}`)}return await r.json()}maybeDeepseekExtras(e){return this.thinkingEnabled===null?e:this.thinkingEnabled===!1?{...e,enable_thinking:!1}:e}parseHighLevelResponse(e){let r=e.choices?.[0]?.message,n=[],o=r?.content||"",l;for(let m of r?.tool_calls||[]){let c={};try{c=JSON.parse(m.function.arguments||"{}")}catch{}m.function.name==="create_files"&&Array.isArray(c.files)?(n.push(...c.files),typeof c.summary=="string"&&c.summary.trim()&&(o+=(o?`
46
+ Options: ${l.options.join(", ")}`)}}return{content:r,files:t,followUp:n,tokensUsed:e.usage.input_tokens+e.usage.output_tokens}}}});var ce,le,D,pe=N(()=>{"use strict";W();ce="gpt-4o-mini",le=8192,D=class{name="openai";apiKey;baseUrl;thinkingEnabled;constructor(e,t,r={}){this.apiKey=e||process.env.OPENAI_API_KEY||"",this.baseUrl=(t||process.env.OPENAI_BASE_URL||"https://api.openai.com/v1").replace(/\/$/,"");let n=this.baseUrl.includes("deepseek.com");if(this.thinkingEnabled=n?r.thinking!==!1:null,!this.apiKey)throw new Error("OpenAI-compatible API key required. Set OPENAI_API_KEY (or pass --api-key). For DeepSeek, also set OPENAI_BASE_URL=https://api.deepseek.com/v1.")}async generate(e,t){let r=t?.model||process.env.OPENAI_MODEL||ce,n=t?.maxTokens||le,o=e.map(m=>({role:m.role,content:m.content})),l={model:r,max_tokens:n,messages:o,tools:this.legacyToolsAsOpenAI()};t?.temperature!==void 0&&(l.temperature=t.temperature);let p=await this.callApi(l);return this.parseHighLevelResponse(p)}async generateRaw(e,t,r,n){let o=this.buildRawBody(e,t,r,n),l=await this.callApi(o,n?.abortSignal);return this.parseRawResponse(l)}async*generateRawStream(e,t,r,n){let o={...this.buildRawBody(e,t,r,n),stream:!0,stream_options:{include_usage:!0}},l;try{l=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(this.maybeDeepseekExtras(o)),signal:n?.abortSignal})}catch(f){if(f?.name==="AbortError"||n?.abortSignal?.aborted){yield{type:"error",error:"cancelled"};return}yield{type:"error",error:`OpenAI-compat raw stream init failed: ${f?.message??f}`};return}if(!l.ok){let f=await l.text().catch(()=>"");yield{type:"error",error:`OpenAI-compat API error (${l.status}): ${f.slice(0,500)}`};return}let p=l.body?.getReader();if(!p){yield{type:"error",error:"No response body on OpenAI-compat raw stream"};return}let m=()=>{p.cancel(new Error("aborted")).catch(()=>{})};n?.abortSignal&&(n.abortSignal.aborted?m():n.abortSignal.addEventListener("abort",m,{once:!0}));let c=new TextDecoder,g="",k="",d="",h=0,w=0,A=null,b={};try{for(;;){if(n?.abortSignal?.aborted){yield{type:"error",error:"cancelled"};return}let{done:f,value:R}=await p.read();if(f)break;g+=c.decode(R,{stream:!0});let T=g.split(`
47
+ `);g=T.pop()||"";for(let x of T){if(!x.startsWith("data: "))continue;let u=x.slice(6).trim();if(!u||u==="[DONE]")continue;let a;try{a=JSON.parse(u)}catch{continue}let _=a.choices?.[0],O=_?.delta;if(_?.finish_reason&&(A=_.finish_reason),typeof O?.reasoning_content=="string"&&O.reasoning_content&&(d+=O.reasoning_content,yield{type:"thinking_delta",text:O.reasoning_content}),typeof O?.content=="string"&&O.content&&(k+=O.content,yield{type:"text_delta",text:O.content}),Array.isArray(O?.tool_calls))for(let v of O.tool_calls){let j=v.index;if(j==null)continue;let P=b[j]||={id:"",name:"",argumentsRaw:""};v.id&&(P.id=v.id),v.function?.name&&(P.name=v.function.name),v.function?.arguments&&(P.argumentsRaw+=v.function.arguments)}a.usage&&(h=a.usage.prompt_tokens||0,w=a.usage.completion_tokens||0)}}}catch(f){if(f?.name==="AbortError"||n?.abortSignal?.aborted){yield{type:"error",error:"cancelled"};return}yield{type:"error",error:`OpenAI-compat raw stream read failed: ${f?.message??f}`};return}finally{n?.abortSignal&&n.abortSignal.removeEventListener("abort",m)}let i=[];d&&i.push({type:"reasoning",text:d}),k&&i.push({type:"text",text:k});for(let f of Object.values(b)){if(!f.id||!f.name)continue;let R={};try{R=f.argumentsRaw?JSON.parse(f.argumentsRaw):{}}catch{}i.push({type:"tool_use",id:f.id,name:f.name,input:R})}let y="end_turn";switch(A){case"tool_calls":case"function_call":y="tool_use";break;case"length":y="max_tokens";break}yield{type:"raw_result",result:{content:i,stop_reason:y,usage:{input_tokens:h,output_tokens:w}}}}buildRawBody(e,t,r,n){let o=n?.model||process.env.OPENAI_MODEL||ce,l=n?.maxTokens||le,p=t?[{role:"system",content:t}]:[];for(let c of e){let g=Array.isArray(c.content)?c.content:[{type:"text",text:c.content}];if(c.role==="user"){let k=g.filter(h=>h.type==="tool_result"),d=g.filter(h=>h.type==="text").map(h=>h.text).join("");for(let h of k)p.push({role:"tool",tool_call_id:h.tool_use_id,content:h.is_error?`[error] ${h.content}`:h.content});d?p.push({role:"user",content:d}):k.length===0&&p.push({role:"user",content:c.content})}else{let k=g.filter(A=>A.type==="tool_use"),d=g.filter(A=>A.type==="text").map(A=>A.text).join(""),h=g.filter(A=>A.type==="reasoning").map(A=>A.text).join(""),w={role:"assistant",content:d||null};k.length>0&&(w.tool_calls=k.map(A=>({id:A.id,type:"function",function:{name:A.name,arguments:JSON.stringify(A.input||{})}}))),h&&(w.reasoning_content=h),p.push(w)}}let m={model:o,max_tokens:l,messages:p,tools:r.map(c=>({type:"function",function:{name:c.name,description:c.description,parameters:c.input_schema}})),tool_choice:"auto"};return n?.temperature!==void 0&&(m.temperature=n.temperature),n?.toolChoice&&(m.tool_choice={type:"function",function:{name:n.toolChoice.name}}),n?.responseFormat&&(m.response_format={type:"json_schema",json_schema:{name:n.responseFormat.name,schema:n.responseFormat.schema,strict:!0}}),n?.logprobs?.enabled&&(m.logprobs=!0,m.top_logprobs=n.logprobs.topK),m}async*stream(e,t){let r=t?.model||process.env.OPENAI_MODEL||ce,n=t?.maxTokens||le,o=e.map(i=>({role:i.role,content:i.content})),l={model:r,max_tokens:n,messages:o,tools:this.legacyToolsAsOpenAI(),stream:!0,stream_options:{include_usage:!0}};t?.temperature!==void 0&&(l.temperature=t.temperature);let p;try{p=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(this.maybeDeepseekExtras(l))})}catch(i){yield{type:"error",error:`OpenAI-compat stream init failed: ${i.message}`};return}if(!p.ok){let i=await p.text().catch(()=>"");yield{type:"error",error:`OpenAI-compat API error (${p.status}): ${i.slice(0,500)}`};return}let m=p.body?.getReader();if(!m){yield{type:"error",error:"No response body on OpenAI-compat stream"};return}let c=new TextDecoder,g="",k="",d,h=0,w=[],A={},b={};try{for(;;){let{done:i,value:y}=await m.read();if(i)break;g+=c.decode(y,{stream:!0});let f=g.split(`
48
+ `);g=f.pop()||"";for(let R of f){if(!R.startsWith("data: "))continue;let T=R.slice(6).trim();if(T==="[DONE]")continue;let x;try{x=JSON.parse(T)}catch{continue}let a=x.choices?.[0]?.delta;if(typeof a?.reasoning_content=="string"&&a.reasoning_content&&(yield{type:"thinking_delta",text:a.reasoning_content}),typeof a?.content=="string"&&a.content&&(k+=a.content,yield{type:"text_delta",text:a.content}),Array.isArray(a?.tool_calls))for(let _ of a.tool_calls){let O=_.index;if(O==null)continue;let v=A[O]||={id:"",name:"",argumentsRaw:""};_.id&&(v.id=_.id),_.function?.name&&(v.name=_.function.name),_.function?.arguments&&(v.argumentsRaw+=_.function.arguments),v.id&&v.name&&!b[O]&&(b[O]=!0,yield{type:"tool_use_start",name:v.name,id:v.id}),b[O]&&_.function?.arguments&&(yield{type:"tool_use_delta",json:_.function.arguments})}x.usage&&(h=(x.usage.prompt_tokens||0)+(x.usage.completion_tokens||0))}}}catch(i){yield{type:"error",error:`OpenAI-compat stream read failed: ${i.message}`};return}for(let i of Object.values(A))if(i.name){yield{type:"tool_use_end",name:i.name};try{let y=i.argumentsRaw?JSON.parse(i.argumentsRaw):{};i.name==="create_files"&&Array.isArray(y.files)?(w.push(...y.files),typeof y.summary=="string"&&y.summary.trim()&&(k+=(k?`
49
+ `:"")+y.summary)):i.name==="ask_user"&&typeof y.question=="string"&&(d=y.question,Array.isArray(y.options)&&y.options.length&&(d+=`
50
+ Options: ${y.options.join(", ")}`))}catch{}}yield{type:"done",result:{content:k,files:w,followUp:d,tokensUsed:h}}}async callApi(e,t){let r=await fetch(`${this.baseUrl}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(this.maybeDeepseekExtras(e)),signal:t});if(!r.ok){let n=await r.text().catch(()=>"");throw new Error(`OpenAI-compatible API error (${r.status}) ${this.baseUrl}: ${n.slice(0,500)}`)}return await r.json()}maybeDeepseekExtras(e){return this.thinkingEnabled===null?e:this.thinkingEnabled===!1?{...e,enable_thinking:!1}:e}parseHighLevelResponse(e){let r=e.choices?.[0]?.message,n=[],o=r?.content||"",l;for(let m of r?.tool_calls||[]){let c={};try{c=JSON.parse(m.function.arguments||"{}")}catch{}m.function.name==="create_files"&&Array.isArray(c.files)?(n.push(...c.files),typeof c.summary=="string"&&c.summary.trim()&&(o+=(o?`
51
51
  `:"")+c.summary)):m.function.name==="ask_user"&&typeof c.question=="string"&&(l=c.question,Array.isArray(c.options)&&c.options.length&&(l+=`
52
- Options: ${c.options.join(", ")}`))}let p=e.usage;return{content:o,files:n,followUp:l,tokensUsed:p?(p.prompt_tokens||0)+(p.completion_tokens||0):void 0}}parseRawResponse(e){let t=e.choices?.[0],r=t?.message,n=[];r?.reasoning_content&&n.push({type:"reasoning",text:r.reasoning_content}),r?.content&&n.push({type:"text",text:r.content});for(let p of r?.tool_calls||[]){let m={};try{m=p.function.arguments?JSON.parse(p.function.arguments):{}}catch{}n.push({type:"tool_use",id:p.id,name:p.function.name,input:m})}let o="end_turn";switch(t?.finish_reason){case"tool_calls":case"function_call":o="tool_use";break;case"length":o="max_tokens";break;case"stop":case null:case void 0:default:o="end_turn"}let l=e.usage;return{content:n,stop_reason:o,usage:{input_tokens:l?.prompt_tokens||0,output_tokens:l?.completion_tokens||0}}}legacyToolsAsOpenAI(){return C().map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema}}))}}});import{readFileSync as Me}from"fs";function je(){let i=process.env.AGENTX_DEMO_SCRIPT;if(!i)return{steps:[],fallback:ue};try{let e=JSON.parse(Me(i,"utf-8"));return{steps:Array.isArray(e.steps)?e.steps:[],fallback:e.fallback||ue}}catch(e){return{steps:[],fallback:{reply:`Demo script unreadable (${e.message}) \u2014 check AGENTX_DEMO_SCRIPT.`}}}}function U(i){for(let e=i.length-1;e>=0;e--){if(i[e].role!=="user")continue;let t=i[e].content;if(typeof t=="string")return t;if(Array.isArray(t))return t.map(r=>r?.type==="text"?r.text:r?.type==="tool_result"?r.content:"").filter(Boolean).join(`
53
- `)}return""}function M(i,e){return new Promise((t,r)=>{if(e?.aborted)return r(new Error("aborted"));let n=setTimeout(t,i);e?.addEventListener("abort",()=>{clearTimeout(n),r(new Error("aborted"))},{once:!0})})}function Q(i){return i.match(/\S+\s*/g)||[i]}var ue,F,Z,ge=N(()=>{"use strict";ue={reply:"This is demo mode \u2014 I answer from a script, not a live model. Run `agentx setup` to connect a real provider."};F=i=>Math.max(1,Math.round(i.length/4)),Z=class{name="demo";script;constructor(){this.script=je()}pick(e){let t,r=-1;for(let o of this.script.steps)try{let l=new RegExp(o.match,"ig"),p,m=-1;for(;(p=l.exec(e))!==null;)m=p.index,p.index===l.lastIndex&&l.lastIndex++;m>r&&(r=m,t=o)}catch{}if(t)return{reply:t.reply,thinking:t.thinking,delayMs:t.delayMs??700,chunkMs:t.chunkMs??35};let n=this.script.fallback||ue;return{reply:n.reply,thinking:n.thinking,delayMs:n.delayMs??700,chunkMs:n.chunkMs??35}}async generate(e,t){let r=this.pick(U(e));return await M(r.delayMs,t?.abortSignal),{content:r.reply,files:[],tokensUsed:F(r.reply)}}async*stream(e,t){let r=this.pick(U(e));if(await M(r.delayMs,t?.abortSignal),r.thinking)for(let n of Q(r.thinking))yield{type:"thinking_delta",text:n},await M(r.chunkMs,t?.abortSignal);for(let n of Q(r.reply))yield{type:"text_delta",text:n},await M(r.chunkMs,t?.abortSignal);yield{type:"done",result:{content:r.reply,files:[],tokensUsed:F(r.reply)}}}async generateRaw(e,t,r,n){let o=this.pick(U(e));return await M(o.delayMs,n?.abortSignal),{content:[{type:"text",text:o.reply}],stop_reason:"end_turn",usage:{input_tokens:F(U(e)),output_tokens:F(o.reply)}}}async*generateRawStream(e,t,r,n){let o=this.pick(U(e));if(await M(o.delayMs,n?.abortSignal),o.thinking)for(let l of Q(o.thinking))yield{type:"thinking_delta",text:l},await M(o.chunkMs,n?.abortSignal);for(let l of Q(o.reply))yield{type:"text_delta",text:l},await M(o.chunkMs,n?.abortSignal);yield{type:"raw_result",result:{content:[{type:"text",text:o.reply}],stop_reason:"end_turn",usage:{input_tokens:F(U(e)),output_tokens:F(o.reply)}}}}}});function pt(i="claude-code",e,t={}){let r=i;if(i==="claude-code"&&!e){let n=S();n&&(r=n.provider)}switch(r){case"claude-code":return new J;case"claude":return new q(e);case"openai":return new D(e,void 0,{thinking:t.thinking});case"deepseek":return new D(e||process.env[he.envKey]||process.env.OPENAI_API_KEY,he.baseUrl,{thinking:t.thinking});case"demo":return new Z;case"ollama":throw new Error("Ollama provider coming soon. Workaround: set provider to 'openai' with OPENAI_BASE_URL=http://localhost:11434/v1 (Ollama exposes an OpenAI-compatible endpoint). Or contribute at github.com/anis-marrouchi/agentx");default:throw new Error(`Unknown provider: ${r}. Supported: claude-code, claude, openai, deepseek`)}}var he,Ne=N(()=>{se();ae();pe();ge();H();se();ae();pe();he={baseUrl:"https://api.deepseek.com/v1",envKey:"DEEPSEEK_API_KEY"}});export{S as a,we as b,L as c,Te as d,qe as e,H as f,Pe as g,C as h,Je as i,Be as j,W as k,q as l,J as m,D as n,pt as o,Ne as p};
54
- //# sourceMappingURL=chunk-5MUJZODV.js.map
52
+ Options: ${c.options.join(", ")}`))}let p=e.usage;return{content:o,files:n,followUp:l,tokensUsed:p?(p.prompt_tokens||0)+(p.completion_tokens||0):void 0}}parseRawResponse(e){let t=e.choices?.[0],r=t?.message,n=[];r?.reasoning_content&&n.push({type:"reasoning",text:r.reasoning_content}),r?.content&&n.push({type:"text",text:r.content});for(let p of r?.tool_calls||[]){let m={};try{m=p.function.arguments?JSON.parse(p.function.arguments):{}}catch{}n.push({type:"tool_use",id:p.id,name:p.function.name,input:m})}let o="end_turn";switch(t?.finish_reason){case"tool_calls":case"function_call":o="tool_use";break;case"length":o="max_tokens";break;case"stop":case null:case void 0:default:o="end_turn"}let l=e.usage;return{content:n,stop_reason:o,usage:{input_tokens:l?.prompt_tokens||0,output_tokens:l?.completion_tokens||0}}}legacyToolsAsOpenAI(){return C().map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema}}))}}});import{readFileSync as je}from"fs";function Ne(){let s=process.env.AGENTX_DEMO_SCRIPT;if(!s)return{steps:[],fallback:ue};try{let e=JSON.parse(je(s,"utf-8"));return{steps:Array.isArray(e.steps)?e.steps:[],fallback:e.fallback||ue}}catch(e){return{steps:[],fallback:{reply:`Demo script unreadable (${e.message}) \u2014 check AGENTX_DEMO_SCRIPT.`}}}}function U(s){for(let e=s.length-1;e>=0;e--){if(s[e].role!=="user")continue;let t=s[e].content;if(typeof t=="string")return t;if(Array.isArray(t))return t.map(r=>r?.type==="text"?r.text:r?.type==="tool_result"?r.content:"").filter(Boolean).join(`
53
+ `)}return""}function M(s,e){return new Promise((t,r)=>{if(e?.aborted)return r(new Error("aborted"));let n=setTimeout(t,s);e?.addEventListener("abort",()=>{clearTimeout(n),r(new Error("aborted"))},{once:!0})})}function Q(s){return s.match(/\S+\s*/g)||[s]}var ue,F,Z,he=N(()=>{"use strict";ue={reply:"This is demo mode \u2014 I answer from a script, not a live model. Run `agentx setup` to connect a real provider."};F=s=>Math.max(1,Math.round(s.length/4)),Z=class{name="demo";script;constructor(){this.script=Ne()}pick(e){let t,r=-1;for(let o of this.script.steps)try{let l=new RegExp(o.match,"ig"),p,m=-1;for(;(p=l.exec(e))!==null;)m=p.index,p.index===l.lastIndex&&l.lastIndex++;m>r&&(r=m,t=o)}catch{}if(t)return{reply:t.reply,thinking:t.thinking,delayMs:t.delayMs??700,chunkMs:t.chunkMs??35};let n=this.script.fallback||ue;return{reply:n.reply,thinking:n.thinking,delayMs:n.delayMs??700,chunkMs:n.chunkMs??35}}async generate(e,t){let r=this.pick(U(e));return await M(r.delayMs,t?.abortSignal),{content:r.reply,files:[],tokensUsed:F(r.reply)}}async*stream(e,t){let r=this.pick(U(e));if(await M(r.delayMs,t?.abortSignal),r.thinking)for(let n of Q(r.thinking))yield{type:"thinking_delta",text:n},await M(r.chunkMs,t?.abortSignal);for(let n of Q(r.reply))yield{type:"text_delta",text:n},await M(r.chunkMs,t?.abortSignal);yield{type:"done",result:{content:r.reply,files:[],tokensUsed:F(r.reply)}}}async generateRaw(e,t,r,n){let o=this.pick(U(e));return await M(o.delayMs,n?.abortSignal),{content:[{type:"text",text:o.reply}],stop_reason:"end_turn",usage:{input_tokens:F(U(e)),output_tokens:F(o.reply)}}}async*generateRawStream(e,t,r,n){let o=this.pick(U(e));if(await M(o.delayMs,n?.abortSignal),o.thinking)for(let l of Q(o.thinking))yield{type:"thinking_delta",text:l},await M(o.chunkMs,n?.abortSignal);for(let l of Q(o.reply))yield{type:"text_delta",text:l},await M(o.chunkMs,n?.abortSignal);yield{type:"raw_result",result:{content:[{type:"text",text:o.reply}],stop_reason:"end_turn",usage:{input_tokens:F(U(e)),output_tokens:F(o.reply)}}}}}});function ut(s="claude-code",e,t={}){let r=s;if(s==="claude-code"&&!e){let n=S();n&&(r=n.provider)}switch(r){case"claude-code":return new J;case"claude":return new q(e);case"openai":return new D(e,void 0,{thinking:t.thinking});case"deepseek":return new D(e||process.env[ke.envKey]||process.env.OPENAI_API_KEY,ke.baseUrl,{thinking:t.thinking});case"demo":return new Z;case"ollama":throw new Error("Ollama provider coming soon. Workaround: set provider to 'openai' with OPENAI_BASE_URL=http://localhost:11434/v1 (Ollama exposes an OpenAI-compatible endpoint). Or contribute at github.com/anis-marrouchi/agentx");default:throw new Error(`Unknown provider: ${r}. Supported: claude-code, claude, openai, deepseek`)}}var ke,Ge=N(()=>{se();ae();pe();he();H();se();ae();pe();ke={baseUrl:"https://api.deepseek.com/v1",envKey:"DEEPSEEK_API_KEY"}});export{S as a,xe as b,L as c,Pe as d,Ke as e,H as f,Se as g,C as h,Be as i,He as j,W as k,q as l,J as m,D as n,ut as o,Ge as p};
54
+ //# sourceMappingURL=chunk-2PJKGZWP.js.map