cckit 0.3.0 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +254 -13
  2. package/dist/commands.d.ts +13 -3
  3. package/dist/commands.d.ts.map +1 -1
  4. package/dist/commands.js +1 -564
  5. package/dist/commands.js.map +1 -1
  6. package/dist/config.d.ts +18 -2
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +1 -293
  9. package/dist/config.js.map +1 -1
  10. package/dist/i18n.js +1 -246
  11. package/dist/i18n.js.map +1 -1
  12. package/dist/index.js +1 -152
  13. package/dist/index.js.map +1 -1
  14. package/dist/providers.js +1 -196
  15. package/dist/providers.js.map +1 -1
  16. package/dist/proxy/chat-to-response.d.ts +9 -0
  17. package/dist/proxy/chat-to-response.d.ts.map +1 -0
  18. package/dist/proxy/chat-to-response.js +1 -0
  19. package/dist/proxy/chat-to-response.js.map +1 -0
  20. package/dist/proxy/constants.d.ts +2 -0
  21. package/dist/proxy/constants.d.ts.map +1 -0
  22. package/dist/proxy/constants.js +1 -0
  23. package/dist/proxy/constants.js.map +1 -0
  24. package/dist/proxy/proxy-manager.d.ts +61 -0
  25. package/dist/proxy/proxy-manager.d.ts.map +1 -0
  26. package/dist/proxy/proxy-manager.js +1 -0
  27. package/dist/proxy/proxy-manager.js.map +1 -0
  28. package/dist/tools/base-adapter.d.ts +31 -0
  29. package/dist/tools/base-adapter.d.ts.map +1 -0
  30. package/dist/tools/base-adapter.js +1 -0
  31. package/dist/tools/base-adapter.js.map +1 -0
  32. package/dist/tools/claude-code-adapter.d.ts +15 -0
  33. package/dist/tools/claude-code-adapter.d.ts.map +1 -0
  34. package/dist/tools/claude-code-adapter.js +1 -0
  35. package/dist/tools/claude-code-adapter.js.map +1 -0
  36. package/dist/tools/codex-adapter.d.ts +43 -0
  37. package/dist/tools/codex-adapter.d.ts.map +1 -0
  38. package/dist/tools/codex-adapter.js +1 -0
  39. package/dist/tools/codex-adapter.js.map +1 -0
  40. package/dist/tools/index.d.ts +20 -0
  41. package/dist/tools/index.d.ts.map +1 -0
  42. package/dist/tools/index.js +1 -0
  43. package/dist/tools/index.js.map +1 -0
  44. package/dist/tools/opencode-adapter.d.ts +41 -0
  45. package/dist/tools/opencode-adapter.d.ts.map +1 -0
  46. package/dist/tools/opencode-adapter.js +1 -0
  47. package/dist/tools/opencode-adapter.js.map +1 -0
  48. package/dist/tools/types.d.ts +16 -0
  49. package/dist/tools/types.d.ts.map +1 -0
  50. package/dist/tools/types.js +1 -0
  51. package/dist/tools/types.js.map +1 -0
  52. package/dist/types.d.ts +42 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js +1 -2
  55. package/dist/types.js.map +1 -1
  56. package/dist/utils/constants.d.ts +1 -1
  57. package/dist/utils/constants.js +1 -69
  58. package/dist/utils/constants.js.map +1 -1
  59. package/dist/utils/errors.js +1 -92
  60. package/dist/utils/errors.js.map +1 -1
  61. package/dist/utils/helpers.js +1 -117
  62. package/dist/utils/helpers.js.map +1 -1
  63. package/dist/utils/index.js +1 -8
  64. package/dist/utils/index.js.map +1 -1
  65. package/dist/utils/logger.js +1 -68
  66. package/dist/utils/logger.js.map +1 -1
  67. package/package.json +2 -3
package/dist/providers.js CHANGED
@@ -1,196 +1 @@
1
- import axios from 'axios';
2
- export const PROVIDER_CONFIGS = {
3
- zhipu: {
4
- provider_type: 'zhipu',
5
- display_name: '智谱 Coding Plan',
6
- default_model: 'GLM-4.7',
7
- base_url: 'https://open.bigmodel.cn/api/anthropic',
8
- auth_header_name: 'Authorization',
9
- auth_prefix: 'Bearer ',
10
- endpoint: '/v1/messages',
11
- capabilities: ['Chat', 'Code Generation', 'Chinese Support', 'Multi-modal'],
12
- },
13
- minimax: {
14
- provider_type: 'minimax',
15
- display_name: 'MiniMax Coding Plan',
16
- default_model: 'MiniMax-M2',
17
- base_url: 'https://api.minimaxi.com/anthropic',
18
- auth_header_name: 'Authorization',
19
- auth_prefix: 'Bearer ',
20
- endpoint: '/v1/messages',
21
- capabilities: ['Chat', 'Code Generation', 'Multi-language', 'Voice Synthesis'],
22
- },
23
- kimi: {
24
- provider_type: 'kimi',
25
- display_name: 'Kimi Coding Plan',
26
- default_model: 'kimi-for-coding',
27
- base_url: 'https://api.kimi.com/coding/',
28
- auth_header_name: 'Authorization',
29
- auth_prefix: 'Bearer ',
30
- endpoint: '/v1/messages',
31
- capabilities: ['Chat', 'Long Context', 'Code Generation', 'Document Processing'],
32
- },
33
- claude: {
34
- provider_type: 'claude',
35
- display_name: 'Claude (Official)',
36
- default_model: 'claude-3-5-sonnet-20241022',
37
- base_url: 'https://api.anthropic.com',
38
- auth_header_name: 'x-api-key',
39
- auth_prefix: '',
40
- endpoint: '/v1/messages',
41
- api_version_header: ['anthropic-version', '2023-06-01'],
42
- capabilities: ['Chat', 'Code Generation', 'Analysis', 'Multimodal', 'Reasoning'],
43
- },
44
- zenmux: {
45
- provider_type: 'zenmux',
46
- display_name: 'ZenMux.ai',
47
- default_model: 'claude-3-5-sonnet-20241022',
48
- base_url: 'https://zenmux.ai/api/anthropic',
49
- auth_header_name: 'Authorization',
50
- auth_prefix: 'Bearer ',
51
- endpoint: '/v1/messages',
52
- api_version_header: ['anthropic-version', '2023-06-01'],
53
- capabilities: ['Model Gateway', 'Multi-provider', 'Claude Compatible', 'Load Balancing'],
54
- },
55
- streamlake: {
56
- provider_type: 'streamlake',
57
- display_name: '快手 StreamLake Coding Plan',
58
- default_model: 'kat-coder-pro-v1',
59
- base_url: 'https://wanqing.streamlakeapi.com/api/gateway/v1/endpoints/kat-coder-pro-v1/claude-code-proxy',
60
- auth_header_name: 'Authorization',
61
- auth_prefix: 'Bearer ',
62
- endpoint: '/v1/messages',
63
- api_version_header: ['anthropic-version', '2023-06-01'],
64
- capabilities: ['Chat', 'Code Generation', 'Chinese Support', 'Video Understanding', 'Multimodal'],
65
- },
66
- volcengine: {
67
- provider_type: 'volcengine',
68
- display_name: '火山引擎 Coding Plan',
69
- default_model: 'ark-code-latest',
70
- base_url: 'https://ark.cn-beijing.volces.com/api/coding',
71
- auth_header_name: 'Authorization',
72
- auth_prefix: 'Bearer ',
73
- endpoint: '/v1/messages',
74
- api_version_header: ['anthropic-version', '2023-06-01'],
75
- capabilities: ['Chat', 'Code Generation', 'Chinese Support', 'Multimodal'],
76
- },
77
- aliyun: {
78
- provider_type: 'aliyun',
79
- display_name: '阿里云 Coding Plan',
80
- default_model: 'claude-sonnet-4-20250514',
81
- base_url: 'https://coding.dashscope.aliyuncs.com/apps/anthropic',
82
- auth_header_name: 'Authorization',
83
- auth_prefix: 'Bearer ',
84
- endpoint: '/v1/messages',
85
- api_version_header: ['anthropic-version', '2023-06-01'],
86
- capabilities: ['Chat', 'Code Generation', 'Chinese Support', 'Multimodal'],
87
- },
88
- tencent: {
89
- provider_type: 'tencent',
90
- display_name: '腾讯云 Coding Plan',
91
- default_model: 'GLM-5',
92
- base_url: 'https://api.lkeap.cloud.tencent.com/coding/anthropic',
93
- auth_header_name: 'Authorization',
94
- auth_prefix: 'Bearer ',
95
- endpoint: '/v1/messages',
96
- api_version_header: ['anthropic-version', '2023-06-01'],
97
- capabilities: ['Chat', 'Code Generation', 'Chinese Support', 'Multimodal'],
98
- },
99
- xfyun: {
100
- provider_type: 'xfyun',
101
- display_name: '讯飞 Coding Plan',
102
- default_model: 'GLM-5',
103
- base_url: 'https://maas-coding-api.cn-huabei-1.xf-yun.com/anthropic',
104
- auth_header_name: 'Authorization',
105
- auth_prefix: 'Bearer ',
106
- endpoint: '/v1/messages',
107
- api_version_header: ['anthropic-version', '2023-06-01'],
108
- capabilities: ['Chat', 'Code Generation', 'Chinese Support', 'Multimodal'],
109
- },
110
- custom: {
111
- provider_type: 'custom',
112
- display_name: 'Custom Provider',
113
- default_model: '',
114
- base_url: '',
115
- auth_header_name: 'Authorization',
116
- auth_prefix: 'Bearer ',
117
- endpoint: '/v1/messages',
118
- capabilities: ['Custom', 'User-defined', 'Local LLM', 'Anthropic Compatible API'],
119
- },
120
- };
121
- export function findProviderConfig(providerType) {
122
- return PROVIDER_CONFIGS[providerType];
123
- }
124
- async function testProviderGeneric(provider, config) {
125
- const startTime = Date.now();
126
- const modelName = provider.current_model || provider.models[0] || config.default_model;
127
- const baseUrl = provider.base_url || config.base_url;
128
- const url = `${baseUrl}${config.endpoint}`;
129
- const headers = {
130
- 'Content-Type': 'application/json',
131
- };
132
- if (config.auth_prefix) {
133
- headers[config.auth_header_name] = `${config.auth_prefix}${provider.api_key}`;
134
- }
135
- else {
136
- headers[config.auth_header_name] = provider.api_key;
137
- }
138
- if (config.api_version_header) {
139
- headers[config.api_version_header[0]] = config.api_version_header[1];
140
- }
141
- const payload = {
142
- model: modelName,
143
- max_tokens: 100,
144
- messages: [
145
- {
146
- role: 'user',
147
- content: 'Test message',
148
- },
149
- ],
150
- };
151
- try {
152
- const response = await axios.post(url, payload, {
153
- headers,
154
- timeout: 10000,
155
- });
156
- const responseTime = Date.now() - startTime;
157
- return {
158
- success: true,
159
- message: `Successfully connected to ${provider.name}`,
160
- model_info: {
161
- model_name: modelName,
162
- provider_name: provider.name,
163
- capabilities: config.capabilities,
164
- },
165
- response_time_ms: responseTime,
166
- };
167
- }
168
- catch (error) {
169
- const responseTime = Date.now() - startTime;
170
- const errorMessage = error.response?.data?.message || error.message || 'Unknown error';
171
- return {
172
- success: false,
173
- message: `Failed to connect to ${provider.name}: ${errorMessage}`,
174
- response_time_ms: responseTime,
175
- };
176
- }
177
- }
178
- export async function testProvider(provider) {
179
- if (!provider.api_key) {
180
- return {
181
- success: false,
182
- message: 'Provider is not configured with an API key',
183
- response_time_ms: 0,
184
- };
185
- }
186
- const config = findProviderConfig(provider.provider_type);
187
- if (!config) {
188
- return {
189
- success: false,
190
- message: `Unsupported provider type: ${provider.provider_type}`,
191
- response_time_ms: 0,
192
- };
193
- }
194
- return testProviderGeneric(provider, config);
195
- }
196
- //# sourceMappingURL=providers.js.map
1
+ import e from"axios";export const PROVIDER_CONFIGS={zhipu:{provider_type:"zhipu",display_name:"智谱 Coding Plan",default_model:"GLM-4.7",base_url:"https://open.bigmodel.cn/api/anthropic",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",capabilities:["Chat","Code Generation","Chinese Support","Multi-modal"]},minimax:{provider_type:"minimax",display_name:"MiniMax Coding Plan",default_model:"MiniMax-M2",base_url:"https://api.minimaxi.com/anthropic",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",capabilities:["Chat","Code Generation","Multi-language","Voice Synthesis"]},kimi:{provider_type:"kimi",display_name:"Kimi Coding Plan",default_model:"kimi-for-coding",base_url:"https://api.kimi.com/coding/",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",capabilities:["Chat","Long Context","Code Generation","Document Processing"]},claude:{provider_type:"claude",display_name:"Claude (Official)",default_model:"claude-3-5-sonnet-20241022",base_url:"https://api.anthropic.com",auth_header_name:"x-api-key",auth_prefix:"",endpoint:"/v1/messages",api_version_header:["anthropic-version","2023-06-01"],capabilities:["Chat","Code Generation","Analysis","Multimodal","Reasoning"]},zenmux:{provider_type:"zenmux",display_name:"ZenMux.ai",default_model:"claude-3-5-sonnet-20241022",base_url:"https://zenmux.ai/api/anthropic",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",api_version_header:["anthropic-version","2023-06-01"],capabilities:["Model Gateway","Multi-provider","Claude Compatible","Load Balancing"]},streamlake:{provider_type:"streamlake",display_name:"快手 StreamLake Coding Plan",default_model:"kat-coder-pro-v1",base_url:"https://wanqing.streamlakeapi.com/api/gateway/v1/endpoints/kat-coder-pro-v1/claude-code-proxy",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",api_version_header:["anthropic-version","2023-06-01"],capabilities:["Chat","Code Generation","Chinese Support","Video Understanding","Multimodal"]},volcengine:{provider_type:"volcengine",display_name:"火山引擎 Coding Plan",default_model:"ark-code-latest",base_url:"https://ark.cn-beijing.volces.com/api/coding",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",api_version_header:["anthropic-version","2023-06-01"],capabilities:["Chat","Code Generation","Chinese Support","Multimodal"]},aliyun:{provider_type:"aliyun",display_name:"阿里云 Coding Plan",default_model:"claude-sonnet-4-20250514",base_url:"https://coding.dashscope.aliyuncs.com/apps/anthropic",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",api_version_header:["anthropic-version","2023-06-01"],capabilities:["Chat","Code Generation","Chinese Support","Multimodal"]},tencent:{provider_type:"tencent",display_name:"腾讯云 Coding Plan",default_model:"GLM-5",base_url:"https://api.lkeap.cloud.tencent.com/coding/anthropic",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",api_version_header:["anthropic-version","2023-06-01"],capabilities:["Chat","Code Generation","Chinese Support","Multimodal"]},xfyun:{provider_type:"xfyun",display_name:"讯飞 Coding Plan",default_model:"GLM-5",base_url:"https://maas-coding-api.cn-huabei-1.xf-yun.com/anthropic",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",api_version_header:["anthropic-version","2023-06-01"],capabilities:["Chat","Code Generation","Chinese Support","Multimodal"]},custom:{provider_type:"custom",display_name:"Custom Provider",default_model:"",base_url:"",auth_header_name:"Authorization",auth_prefix:"Bearer ",endpoint:"/v1/messages",capabilities:["Custom","User-defined","Local LLM","Anthropic Compatible API"]}};export function findProviderConfig(e){return PROVIDER_CONFIGS[e]}export async function testProvider(a){if(!a.api_key)return{success:!1,message:"Provider is not configured with an API key",response_time_ms:0};const i=findProviderConfig(a.provider_type);return i?async function(a,i){const n=Date.now(),t=a.current_model||a.models[0]||i.default_model,o=`${a.base_url||i.base_url}${i.endpoint}`,r={"Content-Type":"application/json"};i.auth_prefix?r[i.auth_header_name]=`${i.auth_prefix}${a.api_key}`:r[i.auth_header_name]=a.api_key,i.api_version_header&&(r[i.api_version_header[0]]=i.api_version_header[1]);const s={model:t,max_tokens:100,messages:[{role:"user",content:"Test message"}]};try{await e.post(o,s,{headers:r,timeout:1e4});const p=Date.now()-n;return{success:!0,message:`Successfully connected to ${a.name}`,model_info:{model_name:t,provider_name:a.name,capabilities:i.capabilities},response_time_ms:p}}catch(e){const i=Date.now()-n,t=e.response?.data?.message||e.message||"Unknown error";return{success:!1,message:`Failed to connect to ${a.name}: ${t}`,response_time_ms:i}}}(a,i):{success:!1,message:`Unsupported provider type: ${a.provider_type}`,response_time_ms:0}}
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"/Users/qiutian00lw/Code/cckit_cli/cckit-node/dist/providers.js","names":["axios","PROVIDER_CONFIGS","zhipu","provider_type","display_name","default_model","base_url","auth_header_name","auth_prefix","endpoint","capabilities","minimax","kimi","claude","api_version_header","zenmux","streamlake","volcengine","aliyun","tencent","xfyun","custom","findProviderConfig","providerType","async","testProvider","provider","api_key","success","message","response_time_ms","config","startTime","Date","now","modelName","current_model","models","url","headers","payload","model","max_tokens","messages","role","content","post","timeout","responseTime","name","model_info","model_name","provider_name","error","errorMessage","response","data","testProviderGeneric"],"sources":["../src/providers.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Chat-to-Response Proxy for Codex CLI
3
+ *
4
+ * Converts OpenAI Response API requests to Chat Completions API format
5
+ * This allows Codex CLI to work with domestic LLM providers (Aliyun, Zhipu, etc.)
6
+ */
7
+ export declare function startProxy(port?: number): void;
8
+ export declare function stopProxy(): void;
9
+ //# sourceMappingURL=chat-to-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-to-response.d.ts","sourceRoot":"","sources":["../../src/proxy/chat-to-response.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAijBH,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAmB,GAAG,IAAI,CAe1D;AAED,wBAAgB,SAAS,IAAI,IAAI,CAIhC"}
@@ -0,0 +1 @@
1
+ import e from"http";import t from"https";import{URL as o}from"url";import{randomUUID as n}from"crypto";import{DEFAULT_PROXY_PORT as r}from"./constants.js";const s=process.env.UPSTREAM_URL||"https://coding.dashscope.aliyuncs.com/v1",a=process.env.UPSTREAM_API_KEY||"",i=parseInt(process.env.PROXY_PORT||String(r),10),p=[{id:"qwen-max",name:"Qwen Max",context_window:128e3},{id:"qwen-plus",name:"Qwen Plus",context_window:128e3},{id:"qwen-turbo",name:"Qwen Turbo",context_window:128e3},{id:"qwen3.5-plus",name:"Qwen 3.5 Plus",context_window:128e3},{id:"glm-4-plus",name:"GLM 4 Plus",context_window:128e3},{id:"glm-5",name:"GLM 5",context_window:128e3},{id:"deepseek-chat",name:"DeepSeek Chat",context_window:64e3}];function c(){const e=process.env.MODELS;return e?e.split(",").map(e=>{const t=e.trim().split(":");return{id:t[0],name:t[1]||t[0],context_window:128e3}}):p}const d=e.createServer(async(r,i)=>{const p=r.url||"/";if(i.setHeader("Access-Control-Allow-Origin","*"),i.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),i.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),"OPTIONS"===r.method)return i.writeHead(204),void i.end();if("/health"===p)return i.writeHead(200,{"Content-Type":"application/json"}),void i.end(JSON.stringify({status:"ok",proxy_type:"chat-to-response"}));if("/shutdown"===p&&"GET"===r.method)return i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({status:"stopping"})),void setTimeout(()=>d.close(),100);if(("/v1/models"===p||"/models"===p)&&"GET"===r.method){const e=c();return i.writeHead(200,{"Content-Type":"application/json"}),void i.end(JSON.stringify({object:"list",data:e.map(e=>({id:e.id,object:"model",created:17e8,owned_by:"proxy",name:e.name,context_window:e.context_window}))}))}const l=p.match(/^\/v1\/models\/([^\/]+)$/);if(l&&"GET"===r.method){const e=l[1],t=c().find(t=>t.id===e);return void(t?(i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({id:t.id,object:"model",created:17e8,owned_by:"proxy",name:t.name,context_window:t.context_window,supports_vision:!1,supports_functions:!0,supports_streaming:!0}))):(i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({id:e,object:"model",created:17e8,owned_by:"proxy",name:e,context_window:128e3,supports_vision:!1,supports_functions:!0,supports_streaming:!0}))))}if(("/v1/responses"===p||"/responses"===p)&&"POST"===r.method){let p="";return r.on("data",e=>p+=e),void r.on("end",async()=>{try{const r=JSON.parse(p),c=function(e){const t=e.model||"qwen-max",o=e.input||"";let n=[];if("string"==typeof o)n=[{role:"user",content:o}];else if(Array.isArray(o))for(const e of o)"object"==typeof e&&null!==e&&"role"in e?n.push(e):n.push({role:"user",content:String(e)});const r={model:t,messages:n,stream:e.stream||!1,temperature:e.temperature??.7,max_tokens:e.max_output_tokens??4096};if(e.tools&&(r.tools=function(e){const t=[];for(const o of e)"web_search"===o.type?t.push({type:"function",function:{name:"web_search",description:"Search the web for information",parameters:{type:"object",properties:{query:{type:"string"}},required:["query"]}}}):"function"===o.type&&t.push({type:"function",function:{name:o.name||"unnamed_function",description:o.description||"",parameters:o.parameters||{type:"object",properties:{}}}});return t}(e.tools)),e.text?.format&&(r.response_format={type:"json_schema",json_schema:e.text.format}),e.reasoning?.effort){const t={low:.3,medium:.7,high:.9};r.temperature=t[e.reasoning.effort]??.7}return r}(r);if(console.log(`[Proxy] Request: model=${r.model} -> ${c.model}`),r.stream)return void await async function(r,i,p,c){const d=new o(`${s}/chat/completions`),l="https:"===d.protocol,u=l?t:e,m=`resp_${n()}`;i.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),i.write(`data: ${JSON.stringify({type:"response.created",response:{id:m}})}\n\n`);const y=JSON.stringify(c),f={hostname:d.hostname,port:d.port||(l?443:80),path:d.pathname+d.search,method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(y),Authorization:`Bearer ${a}`}},w=u.request(f,e=>{e.on("data",e=>{const t=e.toString().split("\n");for(const e of t){if(!e.startsWith("data: "))continue;const t=e.slice(6);if("[DONE]"===t)return i.write(`data: ${JSON.stringify({type:"response.completed",response:{id:m}})}\n\n`),i.write("data: [DONE]\n\n"),void i.end();try{const e=JSON.parse(t),o=e.choices?.[0]?.delta||{};o.content&&i.write(`data: ${JSON.stringify({type:"response.output_text.delta",delta:o.content})}\n\n`)}catch{}}}),e.on("end",()=>{i.write(`data: ${JSON.stringify({type:"response.completed",response:{id:m}})}\n\n`),i.write("data: [DONE]\n\n"),i.end()})});w.on("error",e=>{console.error("[Proxy] Upstream error:",e.message),i.write(`data: ${JSON.stringify({type:"error",error:e.message})}\n\n`),i.end()}),w.write(y),w.end()}(0,i,0,c);const d=await function(n,r,s){return new Promise((a,i)=>{const p=new o(n),c="https:"===p.protocol,d=c?t:e,l=JSON.stringify(r),u={hostname:p.hostname,port:p.port||(c?443:80),path:p.pathname+p.search,method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(l),...s}},m=d.request(u,e=>{let t="";e.on("data",e=>t+=e),e.on("end",()=>{a({status:e.statusCode||500,data:t,headers:e.headers})})});m.on("error",i),m.setTimeout(12e4,()=>{m.destroy(),i(new Error("Request timeout"))}),m.write(l),m.end()})}(`${s}/chat/completions`,c,{Authorization:`Bearer ${a}`});if(200!==d.status)return i.writeHead(d.status,{"Content-Type":"application/json"}),void i.end(d.data);const l=function(e,t){const o=(e.choices?.[0]||{}).message||{},r=[];o.reasoning_content&&r.push({type:"reasoning",content:o.reasoning_content});const s=o.content||"";s&&r.push({type:"message",role:"assistant",content:[{type:"output_text",text:s}]});const a=o.tool_calls||[];for(const e of a)r.push({type:"function_call",call_id:e.id||`call_${n().slice(0,8)}`,name:e.function.name,arguments:e.function.arguments});return{id:`resp_${e.id||n()}`,object:"response",created_at:e.created||Math.floor(Date.now()/1e3),model:t.model||"unknown",output:r,usage:{input_tokens:e.usage?.prompt_tokens||0,output_tokens:e.usage?.completion_tokens||0,total_tokens:e.usage?.total_tokens||0},incomplete_details:null,error:null}}(JSON.parse(d.data),r);i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify(l))}catch(e){const t=e instanceof Error?e.message:String(e);console.error("[Proxy] Error:",t),i.writeHead(500,{"Content-Type":"application/json"}),i.end(JSON.stringify({error:t}))}})}i.writeHead(404,{"Content-Type":"application/json"}),i.end(JSON.stringify({error:"Not found"}))});export function startProxy(e=i){d.on("error",t=>{"EADDRINUSE"===t.code&&(console.error(`[Proxy] Error: Port ${e} is already in use`),process.exit(1)),console.error("[Proxy] Server error:",t.message),process.exit(1)}),d.listen(e,()=>{console.log(`[Proxy] Chat-to-Response Proxy started on port ${e}`),console.log(`[Proxy] Upstream: ${s}`),console.log(`[Proxy] Ready to accept requests at http://localhost:${e}/v1/responses`)})}export function stopProxy(){d.close(()=>{console.log("[Proxy] Server stopped")})}process.argv[1]?.includes("chat-to-response")&&startProxy();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"/Users/qiutian00lw/Code/cckit_cli/cckit-node/dist/proxy/chat-to-response.js","names":["http","https","URL","randomUUID","DEFAULT_PROXY_PORT","UPSTREAM_URL","process","env","UPSTREAM_API_KEY","PROXY_PORT","parseInt","String","DEFAULT_MODELS","id","name","context_window","getAvailableModels","modelsEnv","MODELS","split","map","m","parts","trim","server","createServer","async","req","res","url","setHeader","method","writeHead","end","JSON","stringify","status","proxy_type","setTimeout","close","models","object","data","created","owned_by","modelMatch","match","modelId","model","find","supports_vision","supports_functions","supports_streaming","bodyStr","on","chunk","body","parse","chatBody","inputData","input","messages","role","content","Array","isArray","msg","push","stream","temperature","max_tokens","max_output_tokens","tools","chatTools","tool","type","function","description","parameters","properties","query","required","text","format","response_format","json_schema","reasoning","effort","effortTempMap","low","medium","high","console","log","parsedUrl","isHttps","protocol","httpModule","responseId","Connection","write","response","requestBody","options","hostname","port","path","pathname","search","headers","Buffer","byteLength","Authorization","upstreamReq","request","upstreamRes","lines","toString","line","startsWith","slice","delta","choices","error","message","result","Promise","resolve","reject","statusCode","destroy","Error","responseData","chatData","originalBody","outputItems","reasoning_content","toolCalls","tool_calls","toolCall","call_id","arguments","created_at","Math","floor","Date","now","output","usage","input_tokens","prompt_tokens","output_tokens","completion_tokens","total_tokens","incomplete_details","startProxy","err","code","exit","listen","stopProxy","argv","includes"],"sources":["../../src/proxy/chat-to-response.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_PROXY_PORT = 8080;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/proxy/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,OAAO,CAAC"}
@@ -0,0 +1 @@
1
+ export const DEFAULT_PROXY_PORT=8080;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"/Users/qiutian00lw/Code/cckit_cli/cckit-node/dist/proxy/constants.js","names":["DEFAULT_PROXY_PORT"],"sources":["../../src/proxy/constants.ts"],"mappings":"OAAO,MAAMA,mBAAqB","ignoreList":[]}
@@ -0,0 +1,61 @@
1
+ export interface ProxyConfig {
2
+ port: number;
3
+ upstreamUrl: string;
4
+ upstreamApiKey: string;
5
+ providerType: string;
6
+ }
7
+ export declare class ProxyManager {
8
+ private configPath;
9
+ constructor();
10
+ /**
11
+ * Check if the proxy is running by hitting the health endpoint
12
+ */
13
+ isRunning(): Promise<boolean>;
14
+ /**
15
+ * Check if a port is in use (by another process)
16
+ * Returns true if port is already in use, false if port is free
17
+ */
18
+ private checkPortInUse;
19
+ /**
20
+ * Check the proxy health endpoint
21
+ */
22
+ private checkHealth;
23
+ /**
24
+ * Start the chat-to-response proxy server
25
+ */
26
+ start(config: ProxyConfig): Promise<void>;
27
+ /**
28
+ * Stop the proxy server
29
+ */
30
+ stop(): Promise<void>;
31
+ /**
32
+ * Try graceful stop via HTTP request
33
+ */
34
+ private tryGracefulStop;
35
+ /**
36
+ * Kill process using port
37
+ */
38
+ private killByPort;
39
+ /**
40
+ * Get the proxy URL
41
+ */
42
+ getProxyUrl(port?: number): string;
43
+ /**
44
+ * Save proxy configuration
45
+ */
46
+ private saveConfig;
47
+ /**
48
+ * Load proxy configuration
49
+ */
50
+ loadConfig(): ProxyConfig | null;
51
+ /**
52
+ * Clear proxy configuration
53
+ */
54
+ private clearConfig;
55
+ /**
56
+ * Get default upstream URLs for different providers
57
+ */
58
+ static getUpstreamUrl(providerType: string): string;
59
+ }
60
+ export declare function getProxyManager(): ProxyManager;
61
+ //# sourceMappingURL=proxy-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-manager.d.ts","sourceRoot":"","sources":["../../src/proxy/proxy-manager.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;;IAM3B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBnC;;;OAGG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAqF/C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,WAAW,CAAC,IAAI,GAAE,MAA2B,GAAG,MAAM;IAItD;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,UAAU,IAAI,WAAW,GAAG,IAAI;IAYhC;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAapD;AAKD,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
@@ -0,0 +1 @@
1
+ import{spawn as t}from"child_process";import o from"path";import{fileURLToPath as r}from"url";import e from"fs";import{homedir as n}from"os";import s from"http";import{DEFAULT_PROXY_PORT as i}from"./constants.js";const a=o.dirname(r(import.meta.url));export class ProxyManager{constructor(){this.configPath=o.join(n(),".cckit","proxy-config.json")}async isRunning(){const t=this.loadConfig();if(!t)return!1;try{return!!await this.checkPortInUse(t.port)&&await this.checkHealth(t.port)}catch{return!1}}checkPortInUse(t){return new Promise(o=>{const r=s.createServer(),e=setTimeout(()=>{r.close(),o(!1)},1e3);r.once("error",t=>{clearTimeout(e),"EADDRINUSE"===t.code?o(!0):o(!1)}),r.once("listening",()=>{clearTimeout(e),r.close(),o(!1)}),r.listen(t)})}checkHealth(t){return new Promise(o=>{const r=s.get(`http://localhost:${t}/health`,t=>{let r="";t.on("data",t=>r+=t),t.on("end",()=>{try{const t=JSON.parse(r);o("chat-to-response"===t.proxy_type)}catch{o(!1)}})});r.on("error",()=>o(!1)),r.setTimeout(5e3,()=>{r.destroy(),o(!1)})})}async start(r){if(await this.isRunning())throw new Error("Proxy is already running on port "+r.port);if(!r.upstreamApiKey)throw new Error("UPSTREAM_API_KEY is required to start the proxy");this.saveConfig(r);const n=o.join(a,"chat-to-response.js");if(!e.existsSync(n))throw new Error(`Proxy script not found at ${n}. Please run 'pnpm build' first.`);const s=t("node",[n],{env:{...process.env,PROXY_PORT:String(r.port),UPSTREAM_URL:r.upstreamUrl,UPSTREAM_API_KEY:r.upstreamApiKey},stdio:["ignore","pipe","pipe"],detached:!0});s.stdout?.on("data",t=>{console.log(`[Proxy] ${t.toString().trim()}`)}),s.stderr?.on("data",t=>{console.error(`[Proxy Error] ${t.toString().trim()}`)}),s.on("error",t=>{console.error(`[Proxy] Failed to start: ${t.message}`)}),s.on("exit",t=>{0!==t&&null!==t&&console.log(`[Proxy] Process exited with code ${t}`)}),s.unref();for(let t=0;t<15;t++)if(await new Promise(t=>setTimeout(t,500)),await this.checkPortInUse(r.port)&&await this.checkHealth(r.port))return void console.log(`Proxy started on port ${r.port}`);if(!await this.checkPortInUse(r.port))throw new Error("Failed to start proxy server - health check failed");console.log(`Proxy process started on port ${r.port} (health check may have issues)`)}async stop(){const t=this.loadConfig();if(t)try{await this.tryGracefulStop(t.port)?console.log("Proxy stopped"):(await this.killByPort(t.port),console.log("Proxy stopped (force killed)"))}catch(t){console.error("Error stopping proxy:",t)}finally{this.clearConfig()}else console.log("No proxy configuration found")}tryGracefulStop(t){return new Promise(o=>{const r=s.request({hostname:"localhost",port:t,path:"/shutdown",method:"GET",timeout:1e3},()=>o(!0));r.on("error",()=>o(!1)),r.on("timeout",()=>{r.destroy(),o(!1)}),r.end()})}killByPort(o){return new Promise((r,e)=>{try{const e=t("lsof",["-ti",`tcp:${o}`],{shell:!0});let n="";e.stdout.on("data",t=>n+=t.toString()),e.on("close",()=>{n=n.trim(),n?t("kill",["-9",n]).on("close",()=>r()):r()})}catch{r()}})}getProxyUrl(t=i){return`http://localhost:${t}`}saveConfig(t){const r=o.dirname(this.configPath);e.existsSync(r)||e.mkdirSync(r,{recursive:!0}),e.writeFileSync(this.configPath,JSON.stringify(t,null,2))}loadConfig(){if(!e.existsSync(this.configPath))return null;try{const t=e.readFileSync(this.configPath,"utf-8");return JSON.parse(t)}catch{return null}}clearConfig(){e.existsSync(this.configPath)&&e.unlinkSync(this.configPath)}static getUpstreamUrl(t){return{zhipu:"https://open.bigmodel.cn/api/paas/v4",minimax:"https://api.minimaxi.com/v1",kimi:"https://api.moonshot.cn/v1",aliyun:"https://coding.dashscope.aliyuncs.com/v1",tencent:"https://api.lkeap.cloud.tencent.com/v1",xfyun:"https://maas.cn-huabei-1.xf-yun.com/v1",volcengine:"https://ark.cn-beijing.volces.com/api/v3",streamlake:"https://wanqing.streamlakeapi.com/api/gateway/v1/endpoints/kat-coder-pro-v1"}[t]||""}}let c=null;export function getProxyManager(){return c||(c=new ProxyManager),c}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"/Users/qiutian00lw/Code/cckit_cli/cckit-node/dist/proxy/proxy-manager.js","names":["spawn","path","fileURLToPath","fs","homedir","http","DEFAULT_PROXY_PORT","__dirname","dirname","url","ProxyManager","constructor","this","configPath","join","isRunning","config","loadConfig","checkPortInUse","port","checkHealth","Promise","resolve","server","createServer","timeout","setTimeout","close","once","err","clearTimeout","code","listen","req","get","res","data","on","chunk","json","JSON","parse","proxy_type","destroy","start","Error","upstreamApiKey","saveConfig","scriptPath","existsSync","child","env","process","PROXY_PORT","String","UPSTREAM_URL","upstreamUrl","UPSTREAM_API_KEY","stdio","detached","stdout","console","log","toString","trim","stderr","error","message","unref","i","stop","tryGracefulStop","killByPort","clearConfig","request","hostname","method","end","reject","lsof","shell","pid","getProxyUrl","dir","mkdirSync","recursive","writeFileSync","stringify","content","readFileSync","unlinkSync","getUpstreamUrl","providerType","zhipu","minimax","kimi","aliyun","tencent","xfyun","volcengine","streamlake","proxyManager","getProxyManager"],"sources":["../../src/proxy/proxy-manager.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ import { ToolConfig, ToolType, ModelProvider } from '../types.js';
2
+ import { ToolAdapter } from './types.js';
3
+ /**
4
+ * Abstract base implementation for tool adapters
5
+ * Provides common file handling operations
6
+ */
7
+ export declare abstract class BaseToolAdapter implements ToolAdapter {
8
+ abstract readonly toolType: ToolType;
9
+ abstract readonly toolConfig: ToolConfig;
10
+ /**
11
+ * Get the full path to the tool's config file
12
+ */
13
+ getConfigPath(): string;
14
+ /**
15
+ * Load the tool's configuration file
16
+ */
17
+ loadConfig(): Promise<Record<string, unknown>>;
18
+ /**
19
+ * Save configuration to the tool's config file
20
+ */
21
+ saveConfig(config: Record<string, unknown>): Promise<void>;
22
+ /**
23
+ * Check if the tool is installed (config file or directory exists)
24
+ */
25
+ isInstalled(): boolean;
26
+ abstract parseConfig(content: string): Record<string, unknown>;
27
+ abstract serializeConfig(config: Record<string, unknown>): string;
28
+ abstract applyProvider(provider: ModelProvider): Promise<void>;
29
+ abstract removeProvider(): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=base-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/base-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,8BAAsB,eAAgB,YAAW,WAAW;IAC1D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEzC;;OAEG;IACH,aAAa,IAAI,MAAM;IAsBvB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAkBpD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE;;OAEG;IACH,WAAW,IAAI,OAAO;IAQtB,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IACjE,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9D,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CACzC"}
@@ -0,0 +1 @@
1
+ import t from"fs";import i from"path";import{homedir as s}from"os";export class BaseToolAdapter{getConfigPath(){const t=this.toolConfig.config_path;if(t.startsWith("~"))return i.join(s(),t.slice(1));if(t.startsWith("$HOME"))return i.join(s(),t.slice(5));if(t.startsWith("$XDG_CONFIG_HOME")){const e=process.env.XDG_CONFIG_HOME||i.join(s(),".config");return i.join(e,t.slice(16))}return i.isAbsolute(t)?t:i.join(s(),t)}async loadConfig(){const i=this.getConfigPath();if(!t.existsSync(i))return{};try{const s=t.readFileSync(i,"utf-8");return this.parseConfig(s)}catch(t){return t instanceof SyntaxError?console.error(`Failed to parse config file ${i}: ${t.message}`):console.error(`Failed to read config file ${i}: ${t}`),{}}}async saveConfig(s){const e=this.getConfigPath(),n=i.dirname(e);t.existsSync(n)||t.mkdirSync(n,{recursive:!0});const o=this.serializeConfig(s);t.writeFileSync(e,o,"utf-8")}isInstalled(){const s=this.getConfigPath(),e=i.dirname(s);return t.existsSync(s)||t.existsSync(e)}}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"/Users/qiutian00lw/Code/cckit_cli/cckit-node/dist/tools/base-adapter.js","names":["fs","path","homedir","BaseToolAdapter","getConfigPath","base","this","toolConfig","config_path","startsWith","join","slice","xdgConfig","process","env","XDG_CONFIG_HOME","isAbsolute","loadConfig","configPath","existsSync","content","readFileSync","parseConfig","error","SyntaxError","console","message","saveConfig","config","dir","dirname","mkdirSync","recursive","serializeConfig","writeFileSync","isInstalled","configDir"],"sources":["../../src/tools/base-adapter.ts"],"mappings":"OAAOA,MAAQ,YACRC,MAAU,yBACRC,MAAe,YAQlB,MAAgBC,gBAOpB,aAAAC,GACE,MAAMC,EAAOC,KAAKC,WAAWC,YAE7B,GAAIH,EAAKI,WAAW,KAClB,OAAOR,EAAKS,KAAKR,IAAWG,EAAKM,MAAM,IAEzC,GAAIN,EAAKI,WAAW,SAClB,OAAOR,EAAKS,KAAKR,IAAWG,EAAKM,MAAM,IAGzC,GAAIN,EAAKI,WAAW,oBAAqB,CACvC,MAAMG,EAAYC,QAAQC,IAAIC,iBAAmBd,EAAKS,KAAKR,IAAW,WACtE,OAAOD,EAAKS,KAAKE,EAAWP,EAAKM,MAAM,IACzC,CAEA,OAAIV,EAAKe,WAAWX,GACXA,EAGFJ,EAAKS,KAAKR,IAAWG,EAC9B,CAKA,gBAAMY,GACJ,MAAMC,EAAaZ,KAAKF,gBACxB,IAAKJ,EAAGmB,WAAWD,GACjB,MAAO,GAET,IACE,MAAME,EAAUpB,EAAGqB,aAAaH,EAAY,SAC5C,OAAOZ,KAAKgB,YAAYF,EAC1B,CAAE,MAAOG,GAMP,OALIA,aAAiBC,YACnBC,QAAQF,MAAM,+BAA+BL,MAAeK,EAAMG,WAElED,QAAQF,MAAM,8BAA8BL,MAAeK,KAEtD,EACT,CACF,CAKA,gBAAMI,CAAWC,GACf,MAAMV,EAAaZ,KAAKF,gBAClByB,EAAM5B,EAAK6B,QAAQZ,GACpBlB,EAAGmB,WAAWU,IACjB7B,EAAG+B,UAAUF,EAAK,CAAEG,WAAW,IAEjC,MAAMZ,EAAUd,KAAK2B,gBAAgBL,GACrC5B,EAAGkC,cAAchB,EAAYE,EAAS,QACxC,CAKA,WAAAe,GACE,MAAMjB,EAAaZ,KAAKF,gBAClBgC,EAAYnC,EAAK6B,QAAQZ,GAE/B,OAAOlB,EAAGmB,WAAWD,IAAelB,EAAGmB,WAAWiB,EACpD","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { BaseToolAdapter } from './base-adapter.js';
2
+ import { ModelProvider, ToolConfig, ToolType } from '../types.js';
3
+ /**
4
+ * Claude Code CLI tool adapter
5
+ * Manages ~/.claude/settings.json configuration
6
+ */
7
+ export declare class ClaudeCodeAdapter extends BaseToolAdapter {
8
+ readonly toolType: ToolType;
9
+ readonly toolConfig: ToolConfig;
10
+ parseConfig(content: string): Record<string, unknown>;
11
+ serializeConfig(config: Record<string, unknown>): string;
12
+ applyProvider(provider: ModelProvider): Promise<void>;
13
+ removeProvider(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=claude-code-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/claude-code-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAkB,MAAM,aAAa,CAAC;AA6BlF;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAiB;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQrD,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAIlD,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmIrD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CActC"}
@@ -0,0 +1 @@
1
+ import{BaseToolAdapter as e}from"./base-adapter.js";const _={zhipu:"https://open.bigmodel.cn/api/anthropic",minimax:"https://api.minimaxi.com/anthropic",kimi:"https://api.kimi.com/coding/",zenmux:"https://zenmux.ai/api/anthropic",streamlake:"https://wanqing.streamlakeapi.com/api/gateway/v1/endpoints/kat-coder-pro-v1/claude-code-proxy",volcengine:"https://ark.cn-beijing.volces.com/api/coding",aliyun:"https://coding.dashscope.aliyuncs.com/apps/anthropic",tencent:"https://api.lkeap.cloud.tencent.com/coding/anthropic",xfyun:"https://maas-coding-api.cn-huabei-1.xf-yun.com/anthropic"},a={zhipu:"GLM-4.7",minimax:"MiniMax-M2",kimi:"kimi-for-coding",zenmux:"claude-3-5-sonnet-20241022",claude:"claude-3-5-sonnet-20241022",streamlake:"kat-coder-pro-v1",volcengine:"ark-code-latest",aliyun:"claude-sonnet-4-20250514",tencent:"GLM-5",xfyun:"GLM-5"};export class ClaudeCodeAdapter extends e{constructor(){super(...arguments),this.toolType="claude-code",this.toolConfig={id:"claude-code",display_name:"Claude Code",config_path:"~/.claude/settings.json",description:"Official Anthropic Claude Code CLI"}}parseConfig(e){try{return JSON.parse(e)}catch{return{env:{}}}}serializeConfig(e){return JSON.stringify(e,null,2)}async applyProvider(e){const O=await this.loadConfig();O.env=O.env||{};const i=e.current_model||e.models[0]||a[e.provider_type]||"claude-3-5-sonnet-20241022",n=e.base_url||_[e.provider_type]||"",A=e.default_opus_model||i,t=e.default_sonnet_model||i,E=e.default_haiku_model||i;switch(e.provider_type){case"claude":O.env={ANTHROPIC_API_KEY:e.api_key};break;case"zhipu":case"minimax":O.env={ANTHROPIC_AUTH_TOKEN:e.api_key,ANTHROPIC_BASE_URL:n,ANTHROPIC_MODEL:i};break;case"kimi":O.env={ANTHROPIC_API_KEY:e.api_key,ANTHROPIC_BASE_URL:n,ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E};break;case"zenmux":O.env={ANTHROPIC_API_KEY:e.api_key,ANTHROPIC_BASE_URL:n||"https://zenmux.ai/api/anthropic",ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E,CC_PROVIDER:e.provider_type};break;case"streamlake":O.env={ANTHROPIC_API_KEY:e.api_key,ANTHROPIC_BASE_URL:n||"https://wanqing.streamlakeapi.com/api/gateway/v1/endpoints/kat-coder-pro-v1/claude-code-proxy",ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E,CC_PROVIDER:e.provider_type};break;case"volcengine":O.env={ANTHROPIC_AUTH_TOKEN:e.api_key,ANTHROPIC_BASE_URL:n||"https://ark.cn-beijing.volces.com/api/coding",ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E,ANTHROPIC_API_KEY:"",CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:"1",CC_PROVIDER:e.provider_type};break;case"aliyun":O.env={ANTHROPIC_AUTH_TOKEN:e.api_key,ANTHROPIC_BASE_URL:n||"https://coding.dashscope.aliyuncs.com/apps/anthropic",ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E,CC_PROVIDER:e.provider_type};break;case"tencent":O.env={ANTHROPIC_AUTH_TOKEN:e.api_key,ANTHROPIC_BASE_URL:n||"https://api.lkeap.cloud.tencent.com/coding/anthropic",ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E,CC_PROVIDER:e.provider_type};break;case"xfyun":O.env={ANTHROPIC_AUTH_TOKEN:e.api_key,ANTHROPIC_BASE_URL:n||"https://maas-coding-api.cn-huabei-1.xf-yun.com/anthropic",ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E,CC_PROVIDER:e.provider_type};break;case"custom":O.env={ANTHROPIC_API_KEY:e.api_key,ANTHROPIC_BASE_URL:n||"",ANTHROPIC_MODEL:i,ANTHROPIC_DEFAULT_OPUS_MODEL:A,ANTHROPIC_DEFAULT_SONNET_MODEL:t,ANTHROPIC_DEFAULT_HAIKU_MODEL:E,CC_PROVIDER:e.name};break;default:O.env={ANTHROPIC_API_KEY:e.api_key,ANTHROPIC_BASE_URL:n,ANTHROPIC_MODEL:i,CC_PROVIDER:e.provider_type}}await this.saveConfig(O)}async removeProvider(){const e=await this.loadConfig();e.env=e.env||{},e.env.ANTHROPIC_API_KEY="",e.env.ANTHROPIC_AUTH_TOKEN="",e.env.ANTHROPIC_BASE_URL="",e.env.ANTHROPIC_MODEL="",e.env.ANTHROPIC_DEFAULT_OPUS_MODEL="",e.env.ANTHROPIC_DEFAULT_SONNET_MODEL="",e.env.ANTHROPIC_DEFAULT_HAIKU_MODEL="",delete e.env.CC_PROVIDER,delete e.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC,await this.saveConfig(e)}}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"/Users/qiutian00lw/Code/cckit_cli/cckit-node/dist/tools/claude-code-adapter.js","names":["BaseToolAdapter","DEFAULT_BASE_URLS","zhipu","minimax","kimi","zenmux","streamlake","volcengine","aliyun","tencent","xfyun","DEFAULT_MODELS","claude","ClaudeCodeAdapter","constructor","this","toolType","toolConfig","id","display_name","config_path","description","parseConfig","content","JSON","parse","env","serializeConfig","config","stringify","applyProvider","provider","loadConfig","activeModel","current_model","models","provider_type","baseUrl","base_url","opusModel","default_opus_model","sonnetModel","default_sonnet_model","haikuModel","default_haiku_model","ANTHROPIC_API_KEY","api_key","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_BASE_URL","ANTHROPIC_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","CC_PROVIDER","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","name","saveConfig","removeProvider"],"sources":["../../src/tools/claude-code-adapter.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ import { BaseToolAdapter } from './base-adapter.js';
2
+ import { ModelProvider, ToolConfig, ToolType } from '../types.js';
3
+ /**
4
+ * Codex CLI tool adapter
5
+ * Manages ~/.codex/config.toml configuration
6
+ *
7
+ * Codex config format (TOML):
8
+ * model = "gpt-4o"
9
+ * model_provider = "my-provider"
10
+ *
11
+ * [model_providers.my-provider]
12
+ * name = "My Provider"
13
+ * base_url = "https://api.example.com/v1"
14
+ * env_key = "MY_API_KEY"
15
+ */
16
+ export declare class CodexAdapter extends BaseToolAdapter {
17
+ readonly toolType: ToolType;
18
+ readonly toolConfig: ToolConfig;
19
+ /**
20
+ * Parse TOML content into a JavaScript object
21
+ * Simple TOML parser supporting basic structures
22
+ */
23
+ parseConfig(content: string): Record<string, unknown>;
24
+ /**
25
+ * Serialize a JavaScript object to TOML format
26
+ */
27
+ serializeConfig(config: Record<string, unknown>): string;
28
+ private serializeValue;
29
+ private serializeSection;
30
+ /**
31
+ * Map cckit provider type to Codex provider ID
32
+ */
33
+ private getCodexProviderId;
34
+ applyProvider(provider: ModelProvider): Promise<void>;
35
+ removeProvider(): Promise<void>;
36
+ /**
37
+ * Check if Codex CLI is installed
38
+ */
39
+ isInstalled(): boolean;
40
+ private getDefaultBaseUrl;
41
+ private getDefaultModel;
42
+ }
43
+ //# sourceMappingURL=codex-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/codex-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAW;IACtC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoErD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IA4BxD,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAKpB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCrD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC;;OAEG;IACH,WAAW,IAAI,OAAO;IAKtB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,eAAe;CAexB"}
@@ -0,0 +1 @@
1
+ import e from"fs";import{BaseToolAdapter as t}from"./base-adapter.js";export class CodexAdapter extends t{constructor(){super(...arguments),this.toolType="codex",this.toolConfig={id:"codex",display_name:"Codex CLI",config_path:"~/.codex/config.toml",description:"OpenAI Codex CLI - AI coding agent"}}parseConfig(e){const t={};let o=t,r="";const i=e.split("\n");for(let e of i){const i=e.indexOf("#");if(-1!==i&&(e=e.substring(0,i)),e=e.trim(),!e)continue;const s=e.match(/^\[([^\]]+)\]$/);if(s){const e=s[1].split(".");o=t,r=e[0];for(const t of e)o[t]||(o[t]={}),o=o[t];continue}const n=e.match(/^([^=]+)=(.*)$/);if(n){const e=n[1].trim();let t=n[2].trim();"string"==typeof t&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t=t.slice(1,-1):"true"===t?t=!0:"false"===t?t=!1:/^-?\d+$/.test(t)?t=parseInt(t,10):/^-?\d+\.\d+$/.test(t)&&(t=parseFloat(t))),o[e]=t}}return t}serializeConfig(e){const t=[],o=[],r=[];for(const[t,i]of Object.entries(e))"object"!=typeof i||null===i||Array.isArray(i)?o.push(t):r.push(t);for(const r of o)t.push(this.serializeValue(r,e[r]));for(const o of r){const r=e[o];this.serializeSection(t,o,r)}return t.join("\n")}serializeValue(e,t){if("string"==typeof t){return`${e} = "${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`}if("boolean"==typeof t)return`${e} = ${t}`;if("number"==typeof t)return`${e} = ${t}`;if(Array.isArray(t)){return`${e} = [${t.map(e=>{if("string"==typeof e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`}return String(e)}).join(", ")}]`}return`${e} = "${String(t)}"`}serializeSection(e,t,o,r=""){const i=r?`${r}.${t}`:t,s=[],n=[];for(const[e,t]of Object.entries(o))"object"!=typeof t||null===t||Array.isArray(t)?n.push(this.serializeValue(e,t)):s.push(e);const a=s.length>0;if(n.length>0||!a){e.push(""),e.push(`[${i}]`);for(const t of n)e.push(t)}for(const t of s)this.serializeSection(e,t,o[t],i)}getCodexProviderId(e){return`cckit-${e.provider_type.toLowerCase()}`}async applyProvider(e){const t=await this.loadConfig(),o=this.getCodexProviderId(e),r=e.base_url||this.getDefaultBaseUrl(e.provider_type),i=e.current_model||this.getDefaultModel(e.provider_type);t.model_providers=t.model_providers||{};for(const e of Object.keys(t.model_providers))e.startsWith("cckit-")&&delete t.model_providers[e];t.model_providers[o]={name:e.name,base_url:r,wire_api:"responses",requires_openai_auth:!1,experimental_bearer_token:e.api_key},t.model=i,t.model_provider=o,await this.saveConfig(t)}async removeProvider(){const e=await this.loadConfig();if(e.model_providers)for(const t of Object.keys(e.model_providers))t.startsWith("cckit-")&&delete e.model_providers[t];delete e.model,delete e.model_provider,await this.saveConfig(e)}isInstalled(){const t=this.getConfigPath();return e.existsSync(t)}getDefaultBaseUrl(e){return{zhipu:"https://open.bigmodel.cn/api/paas/v4",minimax:"https://api.minimaxi.com/v1",kimi:"https://api.moonshot.cn/v1",zenmux:"https://zenmux.ai/api/v1",claude:"https://api.anthropic.com/v1",streamlake:"https://wanqing.streamlakeapi.com/api/gateway/v1/endpoints/kat-coder-pro-v1",volcengine:"https://ark.cn-beijing.volces.com/api/v3",aliyun:"https://dashscope.aliyuncs.com/api/v1",tencent:"https://api.lkeap.cloud.tencent.com",xfyun:"https://maas.cn-huabei-1.xf-yun.com"}[e]||""}getDefaultModel(e){return{zhipu:"glm-4-plus",minimax:"minimax-text01",kimi:"moonshot-v1-128k",zenmux:"gpt-4o",claude:"claude-3-5-sonnet-20241022",streamlake:"kat-coder-pro-v1",volcengine:"doubao-pro-32k",aliyun:"qwen-max",tencent:"hunyuan",xfyun:"spark-3.5"}[e]||"gpt-4o"}}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"/Users/qiutian00lw/Code/cckit_cli/cckit-node/dist/tools/codex-adapter.js","names":["fs","BaseToolAdapter","CodexAdapter","constructor","this","toolType","toolConfig","id","display_name","config_path","description","parseConfig","content","result","currentSection","currentSectionName","lines","split","line","commentIndex","indexOf","substring","trim","sectionMatch","match","sectionPath","part","keyValueMatch","key","value","startsWith","endsWith","slice","test","parseInt","parseFloat","serializeConfig","config","topLevelKeys","sections","Object","entries","Array","isArray","push","serializeValue","sectionKey","sectionValue","serializeSection","join","replace","map","v","String","prefix","fullKey","subSections","values","hasChildren","length","valueLine","subKey","getCodexProviderId","provider","provider_type","toLowerCase","applyProvider","loadConfig","codexProviderId","baseUrl","base_url","getDefaultBaseUrl","activeModel","current_model","getDefaultModel","model_providers","keys","name","wire_api","requires_openai_auth","experimental_bearer_token","api_key","model","model_provider","saveConfig","removeProvider","isInstalled","configFile","getConfigPath","existsSync","providerType","zhipu","minimax","kimi","zenmux","claude","streamlake","volcengine","aliyun","tencent","xfyun"],"sources":["../../src/tools/codex-adapter.ts"],"mappings":"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","ignoreList":[]}