@cjhyy/code-shell 0.1.7 → 0.2.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 (73) hide show
  1. package/dist/anthropic-OVRWAZRD.js +1 -0
  2. package/dist/arena/index.js +1 -1
  3. package/dist/{arena-OW55ZCHT.js → arena-64T2EQD4.js} +1 -1
  4. package/dist/{chunk-HIJ2XXGX.js → chunk-2EUIMKJA.js} +1 -1
  5. package/dist/{chunk-Y2NS6HPO.js → chunk-2GJ7H5NC.js} +17 -17
  6. package/dist/chunk-2OD6VR4N.js +2 -0
  7. package/dist/chunk-A4M2Y42L.js +2 -0
  8. package/dist/{chunk-WOP6MJKW.js → chunk-DEYFK6FP.js} +1 -1
  9. package/dist/chunk-DTPABBSV.js +2 -0
  10. package/dist/{chunk-RP26WO4R.js → chunk-EU3J7TBP.js} +1 -1
  11. package/dist/{chunk-XDOWC7EG.js → chunk-L7B2ORID.js} +1 -1
  12. package/dist/chunk-M7VU4YVY.js +49 -0
  13. package/dist/{chunk-NMBYBGC7.js → chunk-MGP35GKD.js} +87 -83
  14. package/dist/chunk-MLCTC53I.js +1 -0
  15. package/dist/{chunk-KCXSARAA.js → chunk-Q3RSX66I.js} +1 -1
  16. package/dist/{chunk-Q4O2HGWS.js → chunk-RERBX75D.js} +1 -1
  17. package/dist/chunk-VKKU4LOM.js +3 -0
  18. package/dist/{chunk-NFH3UQ3E.js → chunk-XXCZE2U2.js} +1 -1
  19. package/dist/chunk-ZSAONDT6.js +2 -0
  20. package/dist/cli/main.js +104 -104
  21. package/dist/cli/onboarding.d.ts +7 -2
  22. package/dist/client-base-F5FCRSB3.js +1 -0
  23. package/dist/compaction-L3Y6NG4N.js +1 -0
  24. package/dist/context/compaction.d.ts +2 -1
  25. package/dist/data/static-catalogs.d.ts +25 -0
  26. package/dist/engine/engine.d.ts +16 -0
  27. package/dist/engine/turn-loop.d.ts +20 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/llm/capabilities/index.d.ts +20 -0
  31. package/dist/llm/capabilities/rules.d.ts +26 -0
  32. package/dist/llm/capabilities/types.d.ts +108 -0
  33. package/dist/llm/model-pool.d.ts +7 -0
  34. package/dist/llm/provider-catalog.d.ts +2 -0
  35. package/dist/llm/provider-kinds.d.ts +1 -1
  36. package/dist/llm/providers/openai.d.ts +22 -0
  37. package/dist/llm/types.d.ts +8 -0
  38. package/dist/logging/logger.d.ts +10 -2
  39. package/dist/logging/session-recorder.d.ts +16 -3
  40. package/dist/manager-J6FXEUEK.js +1 -0
  41. package/dist/mcp-manager-27EVBKRT.js +1 -0
  42. package/dist/model-fetcher-X5W5EASG.js +1 -0
  43. package/dist/openai-3QEADSYL.js +1 -0
  44. package/dist/{openrouter-models-AM6M52D6.js → openrouter-models-GZVCRWD2.js} +1 -1
  45. package/dist/openrouter-sync-WG4AG5NC.js +1 -0
  46. package/dist/product/index.js +1 -1
  47. package/dist/protocol/client.d.ts +1 -1
  48. package/dist/run/index.js +1 -1
  49. package/dist/{seatbelt-WBYROQT6.js → seatbelt-L54CNI2Y.js} +5 -5
  50. package/dist/settings/schema.d.ts +75 -15
  51. package/dist/{tool-summary-5UE62VU4.js → tool-summary-V2B3MD5N.js} +1 -1
  52. package/dist/tool-system/executor.d.ts +4 -0
  53. package/dist/tool-system/sandbox/index.d.ts +7 -0
  54. package/dist/tool-system/task-guard.d.ts +30 -0
  55. package/dist/types.d.ts +13 -0
  56. package/dist/ui/components/SpinnerWithVerb.d.ts +5 -0
  57. package/dist/ui/components/StatusLine.d.ts +5 -1
  58. package/package.json +1 -1
  59. package/dist/anthropic-UBSB5AQH.js +0 -1
  60. package/dist/chunk-2NS3JMNK.js +0 -1
  61. package/dist/chunk-B7K2OWKC.js +0 -2
  62. package/dist/chunk-EWWK56K6.js +0 -2
  63. package/dist/chunk-NVAZJ5XS.js +0 -2
  64. package/dist/chunk-PGANL6F2.js +0 -3
  65. package/dist/chunk-UDPUTFQT.js +0 -2
  66. package/dist/chunk-W47Z7MGS.js +0 -33
  67. package/dist/client-base-6ZZJJYDY.js +0 -1
  68. package/dist/compaction-ECVQVOCT.js +0 -1
  69. package/dist/manager-C3TDN6MS.js +0 -1
  70. package/dist/mcp-manager-OP4XYV53.js +0 -1
  71. package/dist/model-fetcher-BJ64META.js +0 -1
  72. package/dist/openai-KEWQ54TM.js +0 -1
  73. package/dist/openrouter-sync-5JNBL3Z6.js +0 -1
@@ -0,0 +1 @@
1
+ import {a as a$1}from'./chunk-P6JSTIFM.js';import {h,a}from'./chunk-3QP5BQ3L.js';h();var u=[[/^deepseek-v4(?:-|$)/i,1e6],[/(?:^|\/)deepseek-v4(?:-|$)/i,1e6]];function g(s){for(let[e,i]of u)if(e.test(s))return i}a(g,"lookupBuiltinContextWindow");var l=class{static{a(this,"ModelPool");}models=new Map;activeKey;providerCatalog;cacheDir;setProviderCatalog(e){this.providerCatalog=e;}setCacheDir(e){this.cacheDir=e;}reloadCachedContextWindows(){if(this.cacheDir)for(let[e,i]of this.models){if(i.maxContextTokens!=null||!i.providerKey)continue;let t=a$1(this.cacheDir,i.providerKey);if(!t)continue;let n=t.models.find(r=>r.id===i.model);n?.contextLength&&this.models.set(e,{...i,maxContextTokens:n.contextLength});}}constructor(e,i){if(e)for(let t of e)this.models.set(t.key,this.withBuiltinDefaults(t));i&&this.models.has(i)?this.activeKey=i:e?.length&&(this.activeKey=e[0].key);}register(e){this.models.set(e.key,this.withBuiltinDefaults(e)),this.activeKey||(this.activeKey=e.key);}withBuiltinDefaults(e){if(e.maxContextTokens!=null)return e;let i=g(e.model);return i==null?e:{...e,maxContextTokens:i}}switch(e){let i=this.models.get(e);if(!i){let t=[...this.models.keys()].join(", ");throw new Error(`Model "${e}" not found. Available: ${t}`)}return this.activeKey=e,i}get(e){if(e)return this.models.get(e);if(this.activeKey)return this.models.get(this.activeKey)}getActiveKey(){return this.activeKey}list(){return [...this.models.values()]}get size(){return this.models.size}has(e){return this.models.has(e)}toLLMConfig(e,i){let t=e.providerKey&&this.providerCatalog?this.providerCatalog.get(e.providerKey):void 0,n=a(r=>r&&r==="anthropic"?"anthropic":"openai","kindToClientProvider");return {provider:e.provider||n(t?.kind)||"openai",model:e.model,apiKey:e.apiKey??t?.apiKey??i?.apiKey,baseUrl:e.baseUrl??t?.baseUrl??i?.baseUrl,temperature:i?.temperature??.3,maxTokens:e.maxOutputTokens??i?.maxTokens??8192,enableStreaming:i?.enableStreaming??true,...e.thinking||t?.thinking||i?.thinking?{thinking:e.thinking??t?.thinking??i?.thinking}:{},...t?.kind?{providerKind:t.kind}:{}}}resolveLLMConfig(e,i){let t=this.get(e);if(t)return this.toLLMConfig(t,i)}};export{l as a};
@@ -1 +1 @@
1
- import {L,ca,ba,V,ea}from'./chunk-NMBYBGC7.js';import {h,a}from'./chunk-3QP5BQ3L.js';import {join}from'path';import {homedir}from'os';h();h();function R(y,s){let{preset:e,adapter:t,contract:o}=y,w=e.name,x=["Read","Write","Edit","Glob","Grep","Bash","AskUserQuestion","Agent","ToolSearch","TaskCreate","TaskList","TaskUpdate","TaskGet"],i=new Set([...x,...t?.enableTools??[]]);for(let n of t?.disableTools??[])i.delete(n);let S=[{tool:"Read",decision:"allow"},{tool:"Glob",decision:"allow"},{tool:"Grep",decision:"allow"},{tool:"AskUserQuestion",decision:"allow"},{tool:"ToolSearch",decision:"allow"},{tool:"TaskCreate",decision:"allow"},{tool:"TaskList",decision:"allow"},{tool:"TaskUpdate",decision:"allow"},{tool:"TaskGet",decision:"allow"},...t?.permissionRules??[]],l={name:w,label:e.label,description:e.description,promptSections:e.sections??["base","orchestration"],injectGitStatus:e.injectGitStatus??false,builtinTools:[...i],defaultPermissionRules:S};L(l);let r;o?.evaluator?Array.isArray(o.evaluator)?r=new ca(o.evaluator):r=o.evaluator:r=new ba;let c=t?.tools??[],d=c.map(n=>({definition:n.definition,execute:n.execute})),u=s.runsDir??join(homedir(),".code-shell","runs"),k=new V(u);return {manager:new ea({store:k,executor:{llm:s.llm,maxTurns:o?.maxTurns??30,maxContextTokens:o?.maxContextTokens??2e5,permissionMode:s.permissionMode??"acceptEdits",sessionStorageDir:s.sessionStorageDir,mcpServers:t?.mcpServers,enabledBuiltinTools:[...i],disabledBuiltinTools:t?.disableTools,customSystemPrompt:e.customPrompt,appendSystemPrompt:e.appendPrompt,hooks:t?.hooks,customTools:d.length>0?d:void 0},concurrency:o?.concurrency??1,runsDir:u,evaluator:r,defaultTags:o?.defaultTags,defaultMetadata:o?.defaultMetadata}),preset:l,customTools:c}}a(R,"defineProduct");export{R as a};
1
+ import {M,da,ca,W,fa}from'./chunk-MGP35GKD.js';import {h,a}from'./chunk-3QP5BQ3L.js';import {join}from'path';import {homedir}from'os';h();h();function R(y,s){let{preset:e,adapter:t,contract:o}=y,w=e.name,x=["Read","Write","Edit","Glob","Grep","Bash","AskUserQuestion","Agent","ToolSearch","TaskCreate","TaskList","TaskUpdate","TaskGet"],i=new Set([...x,...t?.enableTools??[]]);for(let n of t?.disableTools??[])i.delete(n);let S=[{tool:"Read",decision:"allow"},{tool:"Glob",decision:"allow"},{tool:"Grep",decision:"allow"},{tool:"AskUserQuestion",decision:"allow"},{tool:"ToolSearch",decision:"allow"},{tool:"TaskCreate",decision:"allow"},{tool:"TaskList",decision:"allow"},{tool:"TaskUpdate",decision:"allow"},{tool:"TaskGet",decision:"allow"},...t?.permissionRules??[]],l={name:w,label:e.label,description:e.description,promptSections:e.sections??["base","orchestration"],injectGitStatus:e.injectGitStatus??false,builtinTools:[...i],defaultPermissionRules:S};M(l);let r;o?.evaluator?Array.isArray(o.evaluator)?r=new da(o.evaluator):r=o.evaluator:r=new ca;let c=t?.tools??[],d=c.map(n=>({definition:n.definition,execute:n.execute})),u=s.runsDir??join(homedir(),".code-shell","runs"),k=new W(u);return {manager:new fa({store:k,executor:{llm:s.llm,maxTurns:o?.maxTurns??30,maxContextTokens:o?.maxContextTokens??2e5,permissionMode:s.permissionMode??"acceptEdits",sessionStorageDir:s.sessionStorageDir,mcpServers:t?.mcpServers,enabledBuiltinTools:[...i],disabledBuiltinTools:t?.disableTools,customSystemPrompt:e.customPrompt,appendSystemPrompt:e.appendPrompt,hooks:t?.hooks,customTools:d.length>0?d:void 0},concurrency:o?.concurrency??1,runsDir:u,evaluator:r,defaultTags:o?.defaultTags,defaultMetadata:o?.defaultMetadata}),preset:l,customTools:c}}a(R,"defineProduct");export{R as a};
@@ -1,4 +1,4 @@
1
- import {b as b$1}from'./chunk-Y2NS6HPO.js';import {b}from'./chunk-B7K2OWKC.js';import {h,a}from'./chunk-3QP5BQ3L.js';h();h();h();h();function x(n,e){if(n===e)return 0;if(!n||!e)return 1;let t=a(c=>{let u=new Set;for(let l=0;l<c.length-2;l++)u.add(c.slice(l,l+3));return u},"trigrams"),r=t(n),i=t(e),o=0;for(let c of r)i.has(c)&&o++;let a$1=r.size+i.size-o;return a$1===0?0:1-o/a$1}a(x,"diffRatio");function C(n){let{round:e,critiques:t,draft:r,previousDraft:i}=n,o=t.filter(u=>u.severity==="blocker").length,a=t.filter(u=>u.severity==="major").length,s=t.length,c=i?x(i.content,r.content):1;return e===1?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:false,reason:"running"}:s===0?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:false,reason:"running"}:o===0&&a===0&&s>=3?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:true,reason:"all_minor_or_praise"}:o===0&&c<.05?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:true,reason:"blockers_zero_and_stable"}:{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:false,reason:"running"}}a(C,"defaultConvergence");h();var q=`
1
+ import {b as b$1}from'./chunk-2GJ7H5NC.js';import {b}from'./chunk-ZSAONDT6.js';import {h,a}from'./chunk-3QP5BQ3L.js';h();h();h();h();function x(n,e){if(n===e)return 0;if(!n||!e)return 1;let t=a(c=>{let u=new Set;for(let l=0;l<c.length-2;l++)u.add(c.slice(l,l+3));return u},"trigrams"),r=t(n),i=t(e),o=0;for(let c of r)i.has(c)&&o++;let a$1=r.size+i.size-o;return a$1===0?0:1-o/a$1}a(x,"diffRatio");function C(n){let{round:e,critiques:t,draft:r,previousDraft:i}=n,o=t.filter(u=>u.severity==="blocker").length,a=t.filter(u=>u.severity==="major").length,s=t.length,c=i?x(i.content,r.content):1;return e===1?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:false,reason:"running"}:s===0?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:false,reason:"running"}:o===0&&a===0&&s>=3?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:true,reason:"all_minor_or_praise"}:o===0&&c<.05?{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:true,reason:"blockers_zero_and_stable"}:{blockerCount:o,majorCount:a,totalCritiques:s,diffFromPrevious:c,shouldStop:false,reason:"running"}}a(C,"defaultConvergence");h();var q=`
2
2
  Hard rules:
3
3
  - Output the FULL artifact, not a sketch or outline.
4
4
  - No "...", "(continued)", "see above", "TBD", or placeholders.
@@ -0,0 +1,3 @@
1
+ import {a as a$2}from'./chunk-O5HFCH2U.js';import {a as a$1}from'./chunk-2EUIMKJA.js';import {b as b$1,c,d}from'./chunk-FU7AHZNN.js';import {b}from'./chunk-ZSAONDT6.js';import {h,a}from'./chunk-3QP5BQ3L.js';import O from'openai';h();h();h();var I=[{kind:"openai",match:/^(?:o[1-9]\d*|gpt-[5-9])(?:[-.]|$)/i,capability:{tokenLimitField:"max_completion_tokens",rejectedParams:new Set(["temperature","top_p","presence_penalty","frequency_penalty","logit_bias","logprobs","top_logprobs"]),reasoning:{kind:"openai-effort"},echoReasoning:"optional"},why:"OpenAI o-series + gpt-5+ reject classic sampling params; use max_completion_tokens + reasoning_effort."},{kind:"deepseek",match:/^deepseek-v4(?:[-.]|$)/i,capability:{reasoning:{kind:"deepseek-thinking"},echoReasoning:"when-tools"},why:"DeepSeek V4 thinking mode \u2014 top-level thinking:{type}; echo reasoning_content when tools are present."},{kind:"deepseek",match:/^deepseek-reasoner(?:[-.]|$)/i,capability:{reasoning:{kind:"none"},echoReasoning:"never"},why:"deepseek-reasoner refuses prior reasoning_content in input; always-on reasoning, no toggle."},{kind:"zai",match:/^glm-[4-9](?:[-.]|$)/i,capability:{reasoning:{kind:"deepseek-thinking"},echoReasoning:"optional"},why:"Z.AI GLM-4.5+ thinking shape is identical to DeepSeek V4; default is enabled."},{kind:"anthropic",match:/^claude-(?:opus|sonnet|haiku)-4-[6-9](?:[-.]|$)/i,capability:{reasoning:{kind:"anthropic-adaptive"},echoReasoning:"when-tools",parallelToolCalls:"anthropic-disable-flag",streamUsage:"auto"},why:"Claude 4.6+ thinking is adaptive \u2014 no opt-in field. Echo thinking blocks on tool turns."},{kind:"anthropic",match:/^claude-(?:opus|sonnet|haiku)-4(?:[-.]|$)/i,capability:{reasoning:{kind:"anthropic-budget",minBudgetTokens:1024},echoReasoning:"when-tools",parallelToolCalls:"anthropic-disable-flag",streamUsage:"auto"},why:"Claude 4.x \u22644.5 supports explicit thinking:{type:enabled, budget_tokens\u22651024}."},{kind:"anthropic",match:/^claude-/i,capability:{parallelToolCalls:"anthropic-disable-flag",streamUsage:"auto"},why:"Pre-Claude-4 \u2014 no extended thinking; keep Anthropic tool_choice/stream shape."},{kind:"google",match:/^gemini-(?:[2-9]\.\d|[2-9])/i,capability:{reasoning:{kind:"openai-effort"},echoReasoning:"optional"},why:"Gemini 2.5+ via OpenAI-compat \u2014 reasoning_effort is auto-mapped to thinking_level."},{kind:"openrouter",match:/./,capability:{reasoning:{kind:"openrouter-reasoning"},echoReasoning:"optional"},why:"OpenRouter exposes a unified reasoning:{effort,max_tokens,exclude,enabled} field for every backend."},{kind:"xai",match:/^grok-4\.3(?:[-.]|$)/i,capability:{reasoning:{kind:"openai-effort",disabledEffort:"low"}},why:"xAI grok-4.3 supports reasoning_effort none|low|medium|high \u2014 no `minimal`."},{kind:"mistral",match:/^magistral/i,capability:{reasoning:{kind:"openai-effort",disabledEffort:"none"}},why:"Mistral magistral models accept only reasoning_effort `high` or `none`."},{kind:"groq",match:/^(?:gpt-oss-(?:20b|120b)|qwen3-)/i,capability:{reasoning:{kind:"openai-effort"},tokenLimitField:"max_completion_tokens"},why:"Groq reasoning-capable models use max_completion_tokens + reasoning_effort."}];h();var y={tokenLimitField:"max_tokens",rejectedParams:new Set,reasoning:{kind:"none"},echoReasoning:"optional",parallelToolCalls:"openai-flag",streamUsage:"include-usage-flag"};function S(_,e){for(let t of I)if(t.kind===_&&t.match.test(e))return {...y,...t.capability,rejectedParams:t.capability.rejectedParams?new Set(t.capability.rejectedParams):new Set(y.rejectedParams)};return {...y,rejectedParams:new Set(y.rejectedParams)}}a(S,"capabilitiesFor");var E=class extends a$1{static{a(this,"OpenAIClient");}_client=null;_forceMaxCompletionTokens=false;constructor(e){super(e);}initClient(){}get client(){return this._client||(this._client=new O({apiKey:this.config.apiKey??process.env.OPENAI_API_KEY,...this.config.baseUrl?{baseURL:this.config.baseUrl}:{},timeout:this.timeout})),this._client}_capability=null;get capability(){if(!this._capability){let e=this.config.providerKind??"openai";this._capability=S(e,this.model);}return this._capability}async createMessage(e){return this.withRetry(async()=>{let t=e.thinking??this.config.thinking,c=this.buildMessages(e.systemPrompt,e.messages,t),i=e.tools?.length?this.convertTools(e.tools):void 0,a=b.span("llm.request",{cat:"llm",provider:this.provider,model:this.model,stream:!!(e.stream&&e.onChunk),messageCount:c.length,toolCount:i?.length??0});try{let n=e.stream&&e.onChunk?await this.streamMessage(e,c,i,t):await this.nonStreamMessage(e,c,i,t);return a.end({stopReason:n.stopReason,promptTokens:n.usage?.promptTokens,completionTokens:n.usage?.completionTokens,cacheReadTokens:n.usage?.cacheReadTokens,cacheCreationTokens:n.usage?.cacheCreationTokens}),n}catch(n){throw a.fail(n),n}})}buildRequestBody(e,t,c,i,a){let n=this.capability,d=e.maxTokens??this.maxTokens,s=this._forceMaxCompletionTokens||n.tokenLimitField==="max_completion_tokens"?{max_completion_tokens:d}:{max_tokens:d},p={};n.rejectedParams.has("temperature")||(p.temperature=e.temperature!==void 0?e.temperature:this.temperature);let r={};if(i)switch(n.reasoning.kind){case "deepseek-thinking":r.thinking={type:i};break;case "openai-effort":r.reasoning_effort=i==="disabled"?n.reasoning.disabledEffort??"minimal":"medium";break;case "openrouter-reasoning":r.reasoning=i==="disabled"?{effort:"minimal",exclude:true}:{effort:"medium"};break;}return {model:this.model,messages:t,...s,...p,...r,...c?{tools:c}:{},...a?{stream:true,stream_options:{include_usage:true}}:{}}}async nonStreamMessage(e,t,c,i){try{let a=await this.client.chat.completions.create(this.buildRequestBody(e,t,c,i,!1),{signal:e.signal}),n=a.choices[0];if(!n)throw new b$1("No response from OpenAI","openai");let d={promptTokens:a.usage?.prompt_tokens??0,completionTokens:a.usage?.completion_tokens??0,totalTokens:a.usage?.total_tokens??0};return this.recordUsage(d,e),this.processChoice(n,d)}catch(a){throw this.handleApiError(a),a}}async streamMessage(e,t,c,i){try{let a=await this.client.chat.completions.create(this.buildRequestBody(e,t,c,i,!0),{signal:e.signal}),n="",d="",h=new Map,s,p=Date.now(),r=!1;for await(let o of a){o.usage&&(s=o.usage);let m=o.choices[0]?.delta;if(!m)continue;let w=m.reasoning_content;if(typeof w=="string"&&w.length>0&&(d+=w),m.content&&(r||(r=!0,b.debug("llm.first_byte",{cat:"llm",provider:this.provider,model:this.model,ttft_ms:Date.now()-p})),n+=m.content,e.onChunk?.({type:"text",text:m.content,tokens:a$2(m.content)})),m.tool_calls)for(let g of m.tool_calls){let x=g.index;h.has(x)||(h.set(x,{id:g.id??"",name:g.function?.name??"",args:""}),e.onChunk?.({type:"tool_use_start",toolCall:{id:g.id,toolName:g.function?.name}}));let f=h.get(x);if(g.id&&(f.id=g.id),g.function?.name&&(f.name=g.function.name),g.function?.arguments&&(f.args+=g.function.arguments,f.id))try{let U=JSON.parse(f.args||"{}");e.onChunk?.({type:"tool_use_delta",toolCall:{id:f.id,toolName:f.name,args:U}});}catch{}}o.choices[0]?.finish_reason&&e.onChunk?.({type:"stop",stopReason:o.choices[0].finish_reason});}let l=[];for(let[,o]of h){let m={};try{m=JSON.parse(o.args||"{}");}catch{}l.push({id:o.id,toolName:o.name,args:m});}let k={promptTokens:s?.prompt_tokens??0,completionTokens:s?.completion_tokens??0,totalTokens:s?.total_tokens??0};return this.recordUsage(k,e),{text:n,toolCalls:l,usage:k,stopReason:"stop",...d?{reasoningContent:d}:{}}}catch(a){throw this.handleApiError(a),a}}processChoice(e,t){let c=e.message.content??"",i=[];if(e.message.tool_calls)for(let n of e.message.tool_calls){let d={};try{d=JSON.parse(n.function.arguments||"{}");}catch{}i.push({id:n.id,toolName:n.function.name,args:d});}let a=j(e.message);return {text:c,toolCalls:i,usage:t,stopReason:e.finish_reason??void 0,...a?{reasoningContent:a}:{}}}buildMessages(e,t,c){let i=[{role:"system",content:e}],a=this.capability,n=t.some(s=>Array.isArray(s.content)&&s.content.some(p=>p.type==="tool_use"||p.type==="tool_result")),d=c!=="disabled"&&a.echoReasoning==="when-tools"&&n,h=a.echoReasoning==="never";for(let s of t)if(s.role!=="system")if(s.role==="assistant"){let p={role:"assistant"},r;if(typeof s.content=="string")p.content=s.content;else {let l=[],k=[];for(let o of s.content)o.type==="text"&&o.text?l.push(o.text):o.type==="tool_use"&&o.id&&o.name?k.push({id:o.id,type:"function",function:{name:o.name,arguments:JSON.stringify(o.input??{})}}):o.type==="reasoning"&&o.reasoningContent&&(r=o.reasoningContent),!r&&o.reasoningContent&&(r=o.reasoningContent);l.length&&(p.content=l.join(`
2
+ `)),k.length&&(p.tool_calls=k);}h?r=void 0:!r&&d&&(r=""),r!==void 0&&(p.reasoning_content=r),i.push(p);}else if(s.role==="tool")i.push({role:"tool",tool_call_id:s.tool_call_id??"",content:typeof s.content=="string"?s.content:""});else if(typeof s.content=="string")i.push({role:"user",content:s.content});else {let p=[],r=[];for(let l of s.content)l.type==="tool_result"&&l.tool_use_id?r.push({tool_use_id:l.tool_use_id,content:typeof l.content=="string"?l.content:""}):l.type==="text"&&l.text&&p.push(l.text);for(let l of r)i.push({role:"tool",tool_call_id:l.tool_use_id,content:l.content});p.length>0&&i.push({role:"user",content:p.join(`
3
+ `)});}return i}convertTools(e){return e.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:t.inputSchema}}))}handleApiError(e){if(e instanceof O.APIError){if(e.status===429)throw new c("openai");let t=(e.message??"").toLowerCase();throw e.status===400&&t.includes("max_tokens")&&t.includes("max_completion_tokens")&&(this._forceMaxCompletionTokens=true),t.includes("context_length_exceeded")||t.includes("maximum context length")||t.includes("too many tokens")||t.includes("prompt is too long")?new d("openai"):e.status===401&&t.includes("provider returned error")?new b$1(`OpenAI-compatible endpoint returned 401 "Provider returned error". Two likely causes: (1) the API key is invalid/revoked, or (2) the upstream provider rejects tool calls for this model (common on OpenRouter's gpt-4o-mini route). Verify the key, then try a tool-capable model such as openai/gpt-4.1-mini or anthropic/claude-3.5-haiku.`,"openai",{status:e.status}):new b$1(`OpenAI API error: ${e.message}`,"openai",{status:e.status})}throw e}};function j(_){let e=_.reasoning_content??_.reasoning;return typeof e=="string"&&e.length>0?e:void 0}a(j,"extractReasoningContent");export{E as a};
@@ -1,2 +1,2 @@
1
- import {a as a$2}from'./chunk-NVAZJ5XS.js';import {h,a as a$1}from'./chunk-3QP5BQ3L.js';h();var a="https://openrouter.ai/api/v1/models";function c(t){if(!t)return 0;let e=Number(t);return Number.isFinite(e)?e*1e6:0}a$1(c,"priceToPerMillion");function p(t){return {id:t.id,name:t.name??t.id,created:t.created??0,contextLength:t.top_provider?.context_length??t.context_length??0,maxOutputTokens:t.top_provider?.max_completion_tokens??0,inputPricePerMillion:c(t.pricing?.prompt),outputPricePerMillion:c(t.pricing?.completion),modalities:t.architecture?.input_modalities??[]}}a$1(p,"slim");async function f(t=15e3){try{let e=await fetch(a,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(t)});if(!e.ok)return {ok:!1,count:0,error:`HTTP ${e.status} ${e.statusText}`};let r=((await e.json()).data??[]).map(p).sort((s,u)=>u.created-s.created);return a$2({fetchedAt:new Date().toISOString(),source:a,count:r.length,models:r}),{ok:!0,count:r.length}}catch(e){return {ok:false,count:0,error:e.message}}}a$1(f,"syncOpenRouterCatalog");
1
+ import {a as a$2}from'./chunk-A4M2Y42L.js';import {h,a as a$1}from'./chunk-3QP5BQ3L.js';h();var a="https://openrouter.ai/api/v1/models";function c(t){if(!t)return 0;let e=Number(t);return Number.isFinite(e)?e*1e6:0}a$1(c,"priceToPerMillion");function p(t){return {id:t.id,name:t.name??t.id,created:t.created??0,contextLength:t.top_provider?.context_length??t.context_length??0,maxOutputTokens:t.top_provider?.max_completion_tokens??0,inputPricePerMillion:c(t.pricing?.prompt),outputPricePerMillion:c(t.pricing?.completion),modalities:t.architecture?.input_modalities??[]}}a$1(p,"slim");async function f(t=15e3){try{let e=await fetch(a,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(t)});if(!e.ok)return {ok:!1,count:0,error:`HTTP ${e.status} ${e.statusText}`};let r=((await e.json()).data??[]).map(p).sort((s,u)=>u.created-s.created);return a$2({fetchedAt:new Date().toISOString(),source:a,count:r.length,models:r}),{ok:!0,count:r.length}}catch(e){return {ok:false,count:0,error:e.message}}}a$1(f,"syncOpenRouterCatalog");
2
2
  export{f as a};
@@ -0,0 +1,2 @@
1
+ import {h as h$1,a as a$1}from'./chunk-3QP5BQ3L.js';import {existsSync,mkdirSync,appendFileSync,readdirSync,unlinkSync}from'fs';import {join}from'path';import {homedir}from'os';h$1();var l={debug:0,info:1,warn:2,error:3},g=join(homedir(),".code-shell","logs"),h=7,x=100,_=new Set(["ui","ink","render","stream"]);function D(n,e){let r=(n??e??"").toLowerCase();return _.has(r)?"ui-ink":"engine"}a$1(D,"routeBucket");function C(){return process.env.CODE_SHELL_DEV==="1"||process.argv.includes("--debug")||process.argv.includes("-d")||process.argv.some(e=>e.startsWith("--debug="))?true:process.env.NODE_ENV==="test"||process.env.BUN_TEST==="1"||process.argv.some(e=>e.includes("/tests/")||e.endsWith(".test.ts"))?false:!!(process.argv[1]??"").includes("/src/")}a$1(C,"isLocalDev");function O(){let n=process.env.CODE_SHELL_LOG_LEVEL?.toLowerCase().trim();return n&&Object.hasOwn(l,n)?n:C()?"debug":"info"}a$1(O,"resolveDefaultLevel");function F(){let n=process.argv.find(t=>t.startsWith("--debug=")),e;if(n)e=n.slice(8);else {let t=process.env.CODE_SHELL_DEBUG;t&&t!=="1"&&t!=="true"&&(e=t);}if(!e)return null;let r=new Set(e.split(",").map(t=>t.trim().toLowerCase()).filter(Boolean));return r.size>0?r:null}a$1(F,"resolveCategoryFilter");var v=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`;function M(n){v=n;}a$1(M,"setCurrentSid");function $(){return v}a$1($,"getCurrentSid");var a=[];var d=class n{constructor(e={}){this.context=e;this.enabled=process.env.CODE_SHELL_LOG!=="0",this.minLevel=O(),this.categoryFilter=F(),this.stderrEcho=process.env.CODE_SHELL_DEBUG==="1"||process.argv.includes("--debug-to-stderr")||process.argv.includes("-d2e");}static{a$1(this,"Logger");}enabled;minLevel;categoryFilter;stderrEcho;dirReady=false;child(e){return new n({...this.context,...e})}setSid(e){M(e);}getSid(){return $()}debug(e,r){this.write("debug",e,r);}info(e,r){this.write("info",e,r);}warn(e,r){this.write("warn",e,r);}error(e,r){let t,o;typeof e=="string"?(t=e,r instanceof Error?(o={error:r.message,stack:r.stack}):o=r):e instanceof Error?(t=e.message,o={stack:e.stack}):t=String(e),this.recordError(t,o),this.write("error",t,o);}recordError(e,r){a.length>=x&&a.shift(),a.push({msg:e,t:new Date().toISOString(),data:r});}write(e,r,t){if(!this.enabled||l[e]<l[this.minLevel])return;let o=t?.cat??this.context.cat;if(e==="debug"&&this.categoryFilter&&(!o||!this.categoryFilter.has(o.toLowerCase())))return;let i=new Date().toISOString(),c={t:i,l:e,msg:r,...this.context};o&&!c.cat&&(c.cat=o),c.sid===void 0&&(c.sid=v),t&&(c.d=t);let u=JSON.stringify(c)+`
2
+ `;if(this.stderrEcho){process.stderr.write(u);return}try{this.dirReady||(existsSync(g)||mkdirSync(g,{recursive:!0}),this.dirReady=!0);let w=i.slice(0,10),S=D(o,this.context.cat),y=join(g,`${S}-${w}.log`);appendFileSync(y,u,"utf-8");}catch{}}getMinLevel(){return this.minLevel}isCategoryActive(e){return !this.categoryFilter||this.categoryFilter.has(e.toLowerCase())}span(e,r){let t=Date.now();return this.write("debug",`${e}.begin`,r),{end:a$1(o=>{let i=Date.now()-t;this.write("info",`${e}.end`,{...r,...o,duration_ms:i});},"end"),fail:a$1((o,i)=>{let c=Date.now()-t,u=o instanceof Error?o.message:String(o);this.write("error",`${e}.fail`,{...r,...i,duration_ms:c,error:u});},"fail")}}},V=new d;function W(){try{if(!existsSync(g))return;let n=readdirSync(g).filter(e=>e.endsWith(".log")).sort();if(n.length<=h)return;for(let e of n.slice(0,n.length-h))try{unlinkSync(join(g,e));}catch{}}catch{}}a$1(W,"rotateLogs");export{$ as a,V as b,W as c};