claudebox 0.1.0 ā 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.
- package/README.md +10 -2
- package/dist/background-update.d.ts +2 -0
- package/dist/background-update.d.ts.map +1 -0
- package/dist/background-update.js +48 -0
- package/dist/background-update.js.map +1 -0
- package/dist/cli.js +58 -50
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +69 -47
- package/dist/config.js.map +1 -1
- package/dist/configure.d.ts +2 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +121 -0
- package/dist/configure.js.map +1 -0
- package/dist/converter.d.ts.map +1 -1
- package/dist/converter.js +42 -33
- package/dist/converter.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +20 -16
- package/dist/logger.js.map +1 -1
- package/dist/providers/gemini.d.ts +2 -2
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +14 -11
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +3 -3
- package/dist/providers/index.js +3 -3
- package/dist/providers/ollama.d.ts +2 -2
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +14 -11
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -2
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +10 -10
- package/dist/providers/openai.js.map +1 -1
- package/dist/server.js +20 -20
- package/dist/translator.d.ts +1 -1
- package/dist/translator.d.ts.map +1 -1
- package/dist/translator.js +40 -42
- package/dist/translator.js.map +1 -1
- package/dist/types.d.ts +14 -14
- package/dist/update-checker.d.ts +4 -0
- package/dist/update-checker.d.ts.map +1 -0
- package/dist/update-checker.js +96 -0
- package/dist/update-checker.js.map +1 -0
- package/package.json +12 -4
package/dist/providers/openai.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import OpenAI from
|
|
2
|
-
import { config } from
|
|
3
|
-
import { convertNonStreaming, convertStream } from
|
|
4
|
-
import { logVerbose } from
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
import { config } from '../config.js';
|
|
3
|
+
import { convertNonStreaming, convertStream } from '../converter.js';
|
|
4
|
+
import { logVerbose } from '../logger.js';
|
|
5
5
|
let client = null;
|
|
6
6
|
function getClient() {
|
|
7
7
|
if (!client) {
|
|
@@ -12,18 +12,18 @@ function getClient() {
|
|
|
12
12
|
export async function forwardToOpenAI(req, model, reply, requestId) {
|
|
13
13
|
const client = getClient();
|
|
14
14
|
if (req.stream) {
|
|
15
|
-
reply.raw.setHeader(
|
|
16
|
-
reply.raw.setHeader(
|
|
17
|
-
reply.raw.setHeader(
|
|
18
|
-
const stream = await client.chat.completions.create({ ...req, stream: true });
|
|
15
|
+
reply.raw.setHeader('Content-Type', 'text/event-stream');
|
|
16
|
+
reply.raw.setHeader('Cache-Control', 'no-cache');
|
|
17
|
+
reply.raw.setHeader('Connection', 'keep-alive');
|
|
18
|
+
const stream = (await client.chat.completions.create({ ...req, stream: true }));
|
|
19
19
|
async function* lines() {
|
|
20
20
|
for await (const chunk of stream) {
|
|
21
21
|
if (config.verbose >= 2 && requestId) {
|
|
22
|
-
logVerbose(requestId,
|
|
22
|
+
logVerbose(requestId, 'RESPONSE', chunk);
|
|
23
23
|
}
|
|
24
24
|
yield `data: ${JSON.stringify(chunk)}\n`;
|
|
25
25
|
}
|
|
26
|
-
yield
|
|
26
|
+
yield 'data: [DONE]\n';
|
|
27
27
|
}
|
|
28
28
|
const msgId = `msg_${Date.now()}`;
|
|
29
29
|
for await (const sseEvent of convertStream(lines(), model, msgId)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,SAAS;IAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,SAAS;IAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAkB,EAClB,KAAa,EACb,KAAmB,EACnB,SAAkB;IAElB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACzD,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACjD,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,EAAS,CAAC,CAAQ,CAAC;QAE9F,KAAK,SAAS,CAAC,CAAC,KAAK;YACnB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;oBACrC,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;gBAC3C,CAAC;gBACD,MAAM,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3C,CAAC;YACD,MAAM,gBAAgB,CAAC;QACzB,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAClC,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,KAAK,EAAS,CAAC,CAAC;IACxF,OAAO,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import Fastify from
|
|
3
|
-
import { config } from
|
|
4
|
-
import { translateRequest } from
|
|
5
|
-
import { forwardToOpenAI, forwardToGemini, forwardToOllama } from
|
|
6
|
-
import { logRequest, logVerbose, logRequestStart, logInfo } from
|
|
7
|
-
import { randomBytes } from
|
|
2
|
+
import Fastify from 'fastify';
|
|
3
|
+
import { config } from './config.js';
|
|
4
|
+
import { translateRequest } from './translator.js';
|
|
5
|
+
import { forwardToOpenAI, forwardToGemini, forwardToOllama } from './providers/index.js';
|
|
6
|
+
import { logRequest, logVerbose, logRequestStart, logInfo } from './logger.js';
|
|
7
|
+
import { randomBytes } from 'node:crypto';
|
|
8
8
|
const fastify = Fastify({ logger: false });
|
|
9
9
|
function generateId() {
|
|
10
|
-
return randomBytes(4).toString(
|
|
10
|
+
return randomBytes(4).toString('hex');
|
|
11
11
|
}
|
|
12
|
-
fastify.post(
|
|
12
|
+
fastify.post('/v1/messages', async (request, reply) => {
|
|
13
13
|
const body = request.body;
|
|
14
14
|
const startTime = Date.now();
|
|
15
15
|
const requestId = generateId();
|
|
@@ -18,16 +18,16 @@ fastify.post("/v1/messages", async (request, reply) => {
|
|
|
18
18
|
logRequestStart(requestId, body.model, model, provider, body.messages?.length ?? 0, body.tools?.length ?? 0);
|
|
19
19
|
logInfo(requestId, `Forwarding to ${provider} as ${model}`);
|
|
20
20
|
if (config.verbose >= 2) {
|
|
21
|
-
logVerbose(requestId,
|
|
21
|
+
logVerbose(requestId, 'PROMPT', body);
|
|
22
22
|
}
|
|
23
23
|
let response;
|
|
24
|
-
if (provider ===
|
|
24
|
+
if (provider === 'openai') {
|
|
25
25
|
response = await forwardToOpenAI(translatedRequest, model, reply, requestId);
|
|
26
26
|
}
|
|
27
|
-
else if (provider ===
|
|
27
|
+
else if (provider === 'gemini') {
|
|
28
28
|
response = await forwardToGemini(translatedRequest, model, reply, requestId);
|
|
29
29
|
}
|
|
30
|
-
else if (provider ===
|
|
30
|
+
else if (provider === 'ollama') {
|
|
31
31
|
response = await forwardToOllama(translatedRequest, model, reply, requestId);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
@@ -35,31 +35,31 @@ fastify.post("/v1/messages", async (request, reply) => {
|
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
37
|
if (config.verbose >= 2 && !body.stream) {
|
|
38
|
-
logVerbose(requestId,
|
|
38
|
+
logVerbose(requestId, 'RESPONSE', response);
|
|
39
39
|
}
|
|
40
|
-
logInfo(requestId,
|
|
40
|
+
logInfo(requestId, 'Request processed successfully');
|
|
41
41
|
logRequest(requestId, body.model, model, provider, body.messages?.length ?? 0, body.tools?.length ?? 0, reply.statusCode, Date.now() - startTime);
|
|
42
42
|
return response;
|
|
43
43
|
}
|
|
44
44
|
catch (err) {
|
|
45
45
|
console.error(`\nā Error processing request ${requestId}:`, err);
|
|
46
|
-
logRequest(requestId, body.model,
|
|
46
|
+
logRequest(requestId, body.model, 'error', 'unknown', body.messages?.length ?? 0, body.tools?.length ?? 0, 500, Date.now() - startTime);
|
|
47
47
|
reply.code(500).send({
|
|
48
|
-
type:
|
|
49
|
-
error: { type:
|
|
48
|
+
type: 'error',
|
|
49
|
+
error: { type: 'server_error', message: err?.message ?? 'Internal server error' },
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
});
|
|
53
|
-
fastify.get(
|
|
53
|
+
fastify.get('/health', async () => ({ status: 'ok' }));
|
|
54
54
|
const start = async () => {
|
|
55
55
|
try {
|
|
56
|
-
await fastify.listen({ port: config.port, host:
|
|
56
|
+
await fastify.listen({ port: config.port, host: '0.0.0.0' });
|
|
57
57
|
console.log(`\nš claude-code-proxy running on http://localhost:${config.port}`);
|
|
58
58
|
console.log(` Provider : ${config.preferredProvider}`);
|
|
59
59
|
console.log(` Big model: ${config.bigModel}`);
|
|
60
60
|
console.log(` Small mdl: ${config.smallModel}`);
|
|
61
61
|
console.log(` Verbose : ${config.verbose}`);
|
|
62
|
-
if (config.preferredProvider ===
|
|
62
|
+
if (config.preferredProvider === 'ollama') {
|
|
63
63
|
console.log(` Ollama : ${config.ollamaApiBase}`);
|
|
64
64
|
}
|
|
65
65
|
console.log(`\n Use with: ANTHROPIC_BASE_URL=http://localhost:${config.port} claude\n`);
|
package/dist/translator.d.ts
CHANGED
package/dist/translator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAQhB,iBAAiB,EAClB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAQhB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAqJpB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,iBAAiB,CA2BzE"}
|
package/dist/translator.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import { config } from
|
|
1
|
+
import { config } from './config.js';
|
|
2
2
|
// Map Claude model names ā big/small model based on provider
|
|
3
3
|
function resolveModel(claudeModel) {
|
|
4
4
|
const lc = claudeModel.toLowerCase();
|
|
5
5
|
// If the user explicitly passes a known model name, use it directly
|
|
6
6
|
if (config.isOpenAIModel(claudeModel))
|
|
7
|
-
return { provider:
|
|
7
|
+
return { provider: 'openai', model: claudeModel };
|
|
8
8
|
if (config.isGeminiModel(claudeModel))
|
|
9
|
-
return { provider:
|
|
10
|
-
if (config.isOllamaModel(claudeModel))
|
|
11
|
-
return { provider: "ollama", model: claudeModel };
|
|
9
|
+
return { provider: 'gemini', model: claudeModel };
|
|
12
10
|
// Map Claude haiku ā small model, sonnet/opus ā big model
|
|
13
|
-
const isSmall = lc.includes(
|
|
11
|
+
const isSmall = lc.includes('haiku');
|
|
14
12
|
const targetModel = isSmall ? config.smallModel : config.bigModel;
|
|
15
13
|
const provider = config.resolveProvider(targetModel);
|
|
16
14
|
return { provider, model: targetModel };
|
|
@@ -18,24 +16,22 @@ function resolveModel(claudeModel) {
|
|
|
18
16
|
function systemPromptToString(system) {
|
|
19
17
|
if (!system)
|
|
20
18
|
return undefined;
|
|
21
|
-
if (typeof system ===
|
|
19
|
+
if (typeof system === 'string')
|
|
22
20
|
return system;
|
|
23
|
-
return system.map((b) => b.text).join(
|
|
21
|
+
return system.map((b) => b.text).join('\n');
|
|
24
22
|
}
|
|
25
23
|
function contentBlocksToOpenAI(content) {
|
|
26
|
-
if (typeof content ===
|
|
24
|
+
if (typeof content === 'string')
|
|
27
25
|
return content;
|
|
28
26
|
const parts = [];
|
|
29
27
|
for (const block of content) {
|
|
30
|
-
if (block.type ===
|
|
31
|
-
parts.push({ type:
|
|
28
|
+
if (block.type === 'text') {
|
|
29
|
+
parts.push({ type: 'text', text: block.text });
|
|
32
30
|
}
|
|
33
|
-
else if (block.type ===
|
|
31
|
+
else if (block.type === 'image') {
|
|
34
32
|
const src = block.source;
|
|
35
|
-
const url = src.type ===
|
|
36
|
-
|
|
37
|
-
: (src.url ?? "");
|
|
38
|
-
parts.push({ type: "image_url", image_url: { url } });
|
|
33
|
+
const url = src.type === 'base64' ? `data:${src.media_type};base64,${src.data}` : (src.url ?? '');
|
|
34
|
+
parts.push({ type: 'image_url', image_url: { url } });
|
|
39
35
|
}
|
|
40
36
|
// tool_use and tool_result handled separately below
|
|
41
37
|
}
|
|
@@ -45,53 +41,55 @@ function translateMessages(messages) {
|
|
|
45
41
|
const result = [];
|
|
46
42
|
for (const msg of messages) {
|
|
47
43
|
const content = msg.content;
|
|
48
|
-
if (typeof content ===
|
|
44
|
+
if (typeof content === 'string') {
|
|
49
45
|
result.push({ role: msg.role, content });
|
|
50
46
|
continue;
|
|
51
47
|
}
|
|
52
48
|
// Check if this assistant message contains tool_use blocks
|
|
53
|
-
const toolUseBlocks = content.filter((b) => b.type ===
|
|
54
|
-
const textBlocks = content.filter((b) => b.type ===
|
|
55
|
-
if (msg.role ===
|
|
49
|
+
const toolUseBlocks = content.filter((b) => b.type === 'tool_use');
|
|
50
|
+
const textBlocks = content.filter((b) => b.type === 'text');
|
|
51
|
+
if (msg.role === 'assistant' && toolUseBlocks.length > 0) {
|
|
56
52
|
const toolCalls = toolUseBlocks.map((b) => {
|
|
57
|
-
if (b.type !==
|
|
58
|
-
throw new Error(
|
|
53
|
+
if (b.type !== 'tool_use')
|
|
54
|
+
throw new Error('unreachable');
|
|
59
55
|
return {
|
|
60
56
|
id: b.id,
|
|
61
|
-
type:
|
|
57
|
+
type: 'function',
|
|
62
58
|
function: {
|
|
63
59
|
name: b.name,
|
|
64
60
|
arguments: JSON.stringify(b.input),
|
|
65
61
|
},
|
|
66
62
|
};
|
|
67
63
|
});
|
|
68
|
-
const textContent = textBlocks.length > 0
|
|
69
|
-
|
|
64
|
+
const textContent = textBlocks.length > 0
|
|
65
|
+
? textBlocks.map((b) => (b.type === 'text' ? b.text : '')).join('')
|
|
66
|
+
: null;
|
|
67
|
+
result.push({ role: 'assistant', content: textContent, tool_calls: toolCalls });
|
|
70
68
|
continue;
|
|
71
69
|
}
|
|
72
70
|
// Check for tool_result blocks (user role)
|
|
73
|
-
const toolResultBlocks = content.filter((b) => b.type ===
|
|
74
|
-
if (msg.role ===
|
|
71
|
+
const toolResultBlocks = content.filter((b) => b.type === 'tool_result');
|
|
72
|
+
if (msg.role === 'user' && toolResultBlocks.length > 0) {
|
|
75
73
|
for (const block of toolResultBlocks) {
|
|
76
|
-
if (block.type !==
|
|
74
|
+
if (block.type !== 'tool_result')
|
|
77
75
|
continue;
|
|
78
|
-
const toolContent = typeof block.content ===
|
|
76
|
+
const toolContent = typeof block.content === 'string'
|
|
79
77
|
? block.content
|
|
80
78
|
: Array.isArray(block.content)
|
|
81
|
-
? block.content.map((b) => (
|
|
82
|
-
:
|
|
79
|
+
? block.content.map((b) => ('text' in b ? b.text : '')).join('')
|
|
80
|
+
: '';
|
|
83
81
|
result.push({
|
|
84
|
-
role:
|
|
82
|
+
role: 'tool',
|
|
85
83
|
tool_call_id: block.tool_use_id,
|
|
86
84
|
content: toolContent,
|
|
87
85
|
});
|
|
88
86
|
}
|
|
89
87
|
// Any non-tool_result content goes as a separate user message
|
|
90
|
-
const nonToolBlocks = content.filter((b) => b.type !==
|
|
88
|
+
const nonToolBlocks = content.filter((b) => b.type !== 'tool_result');
|
|
91
89
|
if (nonToolBlocks.length > 0) {
|
|
92
90
|
const parts = contentBlocksToOpenAI(nonToolBlocks);
|
|
93
91
|
if (parts)
|
|
94
|
-
result.push({ role:
|
|
92
|
+
result.push({ role: 'user', content: parts });
|
|
95
93
|
}
|
|
96
94
|
continue;
|
|
97
95
|
}
|
|
@@ -107,7 +105,7 @@ function translateTools(tools) {
|
|
|
107
105
|
if (!tools || tools.length === 0)
|
|
108
106
|
return undefined;
|
|
109
107
|
return tools.map((t) => ({
|
|
110
|
-
type:
|
|
108
|
+
type: 'function',
|
|
111
109
|
function: {
|
|
112
110
|
name: t.name,
|
|
113
111
|
description: t.description,
|
|
@@ -118,12 +116,12 @@ function translateTools(tools) {
|
|
|
118
116
|
function translateToolChoice(toolChoice) {
|
|
119
117
|
if (!toolChoice)
|
|
120
118
|
return undefined;
|
|
121
|
-
if (toolChoice.type ===
|
|
122
|
-
return
|
|
123
|
-
if (toolChoice.type ===
|
|
124
|
-
return
|
|
125
|
-
if (toolChoice.type ===
|
|
126
|
-
return { type:
|
|
119
|
+
if (toolChoice.type === 'auto')
|
|
120
|
+
return 'auto';
|
|
121
|
+
if (toolChoice.type === 'any')
|
|
122
|
+
return 'required';
|
|
123
|
+
if (toolChoice.type === 'tool' && toolChoice.name) {
|
|
124
|
+
return { type: 'function', function: { name: toolChoice.name } };
|
|
127
125
|
}
|
|
128
126
|
return undefined;
|
|
129
127
|
}
|
|
@@ -132,7 +130,7 @@ export function translateRequest(req) {
|
|
|
132
130
|
const systemContent = systemPromptToString(req.system);
|
|
133
131
|
const messages = translateMessages(req.messages);
|
|
134
132
|
if (systemContent) {
|
|
135
|
-
messages.unshift({ role:
|
|
133
|
+
messages.unshift({ role: 'system', content: systemContent });
|
|
136
134
|
}
|
|
137
135
|
const openAIReq = {
|
|
138
136
|
model,
|
package/dist/translator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translator.js","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAarC,6DAA6D;AAC7D,SAAS,YAAY,CAAC,WAAmB;
|
|
1
|
+
{"version":3,"file":"translator.js","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
export interface AnthropicContentBlockText {
|
|
2
|
-
type:
|
|
2
|
+
type: 'text';
|
|
3
3
|
text: string;
|
|
4
4
|
}
|
|
5
5
|
export interface AnthropicContentBlockImage {
|
|
6
|
-
type:
|
|
6
|
+
type: 'image';
|
|
7
7
|
source: {
|
|
8
|
-
type:
|
|
8
|
+
type: 'base64' | 'url';
|
|
9
9
|
media_type?: string;
|
|
10
10
|
data?: string;
|
|
11
11
|
url?: string;
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
export interface AnthropicContentBlockToolUse {
|
|
15
|
-
type:
|
|
15
|
+
type: 'tool_use';
|
|
16
16
|
id: string;
|
|
17
17
|
name: string;
|
|
18
18
|
input: Record<string, unknown>;
|
|
19
19
|
}
|
|
20
20
|
export interface AnthropicContentBlockToolResult {
|
|
21
|
-
type:
|
|
21
|
+
type: 'tool_result';
|
|
22
22
|
tool_use_id: string;
|
|
23
23
|
content: string | AnthropicContentBlock[];
|
|
24
24
|
}
|
|
25
25
|
export type AnthropicContentBlock = AnthropicContentBlockText | AnthropicContentBlockImage | AnthropicContentBlockToolUse | AnthropicContentBlockToolResult;
|
|
26
26
|
export interface AnthropicMessage {
|
|
27
|
-
role:
|
|
27
|
+
role: 'user' | 'assistant';
|
|
28
28
|
content: string | AnthropicContentBlock[];
|
|
29
29
|
}
|
|
30
30
|
export interface AnthropicTool {
|
|
@@ -51,11 +51,11 @@ export interface AnthropicRequest {
|
|
|
51
51
|
stop_sequences?: string[];
|
|
52
52
|
}
|
|
53
53
|
export interface OpenAIContentPartText {
|
|
54
|
-
type:
|
|
54
|
+
type: 'text';
|
|
55
55
|
text: string;
|
|
56
56
|
}
|
|
57
57
|
export interface OpenAIContentPartImage {
|
|
58
|
-
type:
|
|
58
|
+
type: 'image_url';
|
|
59
59
|
image_url: {
|
|
60
60
|
url: string;
|
|
61
61
|
};
|
|
@@ -63,21 +63,21 @@ export interface OpenAIContentPartImage {
|
|
|
63
63
|
export type OpenAIContentPart = OpenAIContentPartText | OpenAIContentPartImage;
|
|
64
64
|
export interface OpenAIToolCall {
|
|
65
65
|
id: string;
|
|
66
|
-
type:
|
|
66
|
+
type: 'function';
|
|
67
67
|
function: {
|
|
68
68
|
name: string;
|
|
69
69
|
arguments: string;
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
72
|
export interface OpenAIMessage {
|
|
73
|
-
role:
|
|
73
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
74
74
|
content: string | OpenAIContentPart[] | null;
|
|
75
75
|
tool_calls?: OpenAIToolCall[];
|
|
76
76
|
tool_call_id?: string;
|
|
77
77
|
name?: string;
|
|
78
78
|
}
|
|
79
79
|
export interface OpenAITool {
|
|
80
|
-
type:
|
|
80
|
+
type: 'function';
|
|
81
81
|
function: {
|
|
82
82
|
name: string;
|
|
83
83
|
description?: string;
|
|
@@ -92,8 +92,8 @@ export interface OpenAIRequest {
|
|
|
92
92
|
top_p?: number;
|
|
93
93
|
stream?: boolean;
|
|
94
94
|
tools?: OpenAITool[];
|
|
95
|
-
tool_choice?:
|
|
96
|
-
type:
|
|
95
|
+
tool_choice?: 'auto' | 'none' | 'required' | {
|
|
96
|
+
type: 'function';
|
|
97
97
|
function: {
|
|
98
98
|
name: string;
|
|
99
99
|
};
|
|
@@ -101,7 +101,7 @@ export interface OpenAIRequest {
|
|
|
101
101
|
stop?: string[];
|
|
102
102
|
}
|
|
103
103
|
export interface TranslatedRequest {
|
|
104
|
-
provider:
|
|
104
|
+
provider: 'openai' | 'gemini' | 'ollama';
|
|
105
105
|
model: string;
|
|
106
106
|
translatedRequest: OpenAIRequest;
|
|
107
107
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"AAmBA,wBAAsB,cAAc;;GA0FnC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as os from 'node:os';
|
|
4
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { confirm } from '@inquirer/prompts';
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
const currentPackage = require('../package.json');
|
|
10
|
+
const currentVersion = currentPackage.version;
|
|
11
|
+
const CONFIG_DIR = path.join(os.homedir(), '.ccproxy');
|
|
12
|
+
const STATUS_FILE = path.join(CONFIG_DIR, 'update-status.json');
|
|
13
|
+
const UPDATE_SCRIPT_PATH = path.join(new URL('.', import.meta.url).pathname, 'background-update.js');
|
|
14
|
+
export async function checkAndUpdate() {
|
|
15
|
+
// 1. Synchronously check if there's a pending update
|
|
16
|
+
let pendingUpdate = false;
|
|
17
|
+
let latestVersion = currentVersion;
|
|
18
|
+
if (fs.existsSync(STATUS_FILE)) {
|
|
19
|
+
try {
|
|
20
|
+
const statusContent = fs.readFileSync(STATUS_FILE, 'utf-8');
|
|
21
|
+
const status = JSON.parse(statusContent);
|
|
22
|
+
// Basic semver check for string comparison. E.g "0.1.1" !== "0.1.0"
|
|
23
|
+
if (status.latestVersion && status.latestVersion !== currentVersion) {
|
|
24
|
+
pendingUpdate = true;
|
|
25
|
+
latestVersion = status.latestVersion;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
// ignore parse errors
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// 2. If update found, prompt synchronously
|
|
33
|
+
if (pendingUpdate) {
|
|
34
|
+
console.log(chalk.yellow(`\nš A new version of claudebox is available! ${currentVersion} -> ${latestVersion}`));
|
|
35
|
+
// Check if inquirer/prompts is bypassed by strict shell pipes
|
|
36
|
+
if (process.stdout.isTTY) {
|
|
37
|
+
const doUpdate = await confirm({
|
|
38
|
+
message: `Do you want to update to ${latestVersion} now?`,
|
|
39
|
+
default: true,
|
|
40
|
+
});
|
|
41
|
+
if (doUpdate) {
|
|
42
|
+
console.log(chalk.cyan('\nUpdating claudebox... Please wait.'));
|
|
43
|
+
const result = spawnSync('npm', ['install', '-g', 'claudebox'], {
|
|
44
|
+
stdio: 'inherit',
|
|
45
|
+
shell: true,
|
|
46
|
+
});
|
|
47
|
+
if (result.status === 0) {
|
|
48
|
+
console.log(chalk.green('ā
Update successful!'));
|
|
49
|
+
// Delete the status file so we don't end in an immediate update loop if versions hadn't synced
|
|
50
|
+
try {
|
|
51
|
+
fs.unlinkSync(STATUS_FILE);
|
|
52
|
+
}
|
|
53
|
+
catch (e) { }
|
|
54
|
+
console.log(chalk.cyan('Restarting ccproxy...\n'));
|
|
55
|
+
// Respawn with the same arguments using the newly globally installed binary
|
|
56
|
+
const newProcess = spawn('ccproxy', process.argv.slice(2), {
|
|
57
|
+
stdio: 'inherit',
|
|
58
|
+
shell: true,
|
|
59
|
+
detached: false,
|
|
60
|
+
});
|
|
61
|
+
newProcess.on('close', (code) => {
|
|
62
|
+
process.exit(code ?? 0);
|
|
63
|
+
});
|
|
64
|
+
return { handled: true }; // Tell CLI to not continue execution natively
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log(chalk.red('Update failed. Resuming normal execution...\n'));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.log(chalk.dim('Run `npm i -g claudebox` to update.\n'));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// 3. Spawn the detached background checker
|
|
76
|
+
if (fs.existsSync(UPDATE_SCRIPT_PATH)) {
|
|
77
|
+
try {
|
|
78
|
+
const { config } = await import('./config.js');
|
|
79
|
+
const args = [UPDATE_SCRIPT_PATH];
|
|
80
|
+
if (config.verbose > 0)
|
|
81
|
+
args.push('--verbose');
|
|
82
|
+
const child = spawn(process.execPath, args, {
|
|
83
|
+
detached: true,
|
|
84
|
+
stdio: 'ignore',
|
|
85
|
+
});
|
|
86
|
+
child.unref(); // Ensure parent can exit without waiting for this
|
|
87
|
+
if (config.verbose > 0)
|
|
88
|
+
console.log(chalk.dim(`[update-checker] Spawned background check with PID ${child.pid}`));
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
// Silent fail
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { handled: false };
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=update-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claudebox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Use Claude Code with any AI provider: OpenAI, Gemini, or Ollama",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
"ccproxy": "dist/cli.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
+
"prepare": "husky install",
|
|
11
12
|
"build": "tsc",
|
|
12
13
|
"dev": "tsx watch src/cli.ts",
|
|
13
14
|
"start": "node dist/cli.js",
|
|
14
|
-
"prepublishOnly": "npm run build"
|
|
15
|
+
"prepublishOnly": "npm run build",
|
|
16
|
+
"format": "prettier --write \"src/**/*.ts\""
|
|
15
17
|
},
|
|
16
18
|
"keywords": [
|
|
17
19
|
"claude",
|
|
@@ -24,14 +26,20 @@
|
|
|
24
26
|
],
|
|
25
27
|
"license": "BSD-3-Clause",
|
|
26
28
|
"dependencies": {
|
|
29
|
+
"@inquirer/prompts": "^8.3.0",
|
|
27
30
|
"chalk": "^5.6.2",
|
|
28
31
|
"dotenv": "^16.4.5",
|
|
29
|
-
"fastify": "^
|
|
32
|
+
"fastify": "^5.7.3",
|
|
30
33
|
"figlet": "^1.10.0",
|
|
34
|
+
"husky": "^9.1.7",
|
|
35
|
+
"inquirer": "^13.3.0",
|
|
31
36
|
"openai": "^4.77.0"
|
|
32
37
|
},
|
|
33
38
|
"devDependencies": {
|
|
39
|
+
"@types/inquirer": "^9.0.9",
|
|
34
40
|
"@types/node": "^22.0.0",
|
|
41
|
+
"commitlint": "^20.4.3",
|
|
42
|
+
"prettier": "^3.8.1",
|
|
35
43
|
"tsx": "^4.19.0",
|
|
36
44
|
"typescript": "^5.7.0"
|
|
37
45
|
},
|
|
@@ -56,4 +64,4 @@
|
|
|
56
64
|
"type": "git",
|
|
57
65
|
"url": "git+https://github.com/himasnhu-at/mockserver.git"
|
|
58
66
|
}
|
|
59
|
-
}
|
|
67
|
+
}
|