@agentplugged/claw 0.1.1 → 0.2.1
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/dist/cli.js +3 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -5
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -40
- package/dist/index.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +380 -77
- package/dist/router/index.js.map +1 -1
- package/dist/router/logger.d.ts +3 -0
- package/dist/router/logger.d.ts.map +1 -1
- package/dist/router/logger.js +8 -5
- package/dist/router/logger.js.map +1 -1
- package/dist/router/types.d.ts +6 -9
- package/dist/router/types.d.ts.map +1 -1
- package/dist/sidecar/auth.d.ts.map +1 -1
- package/dist/sidecar/auth.js +7 -11
- package/dist/sidecar/auth.js.map +1 -1
- package/dist/sidecar/index.js +104 -21
- package/dist/sidecar/index.js.map +1 -1
- package/dist/sidecar/routes/addons.d.ts.map +1 -1
- package/dist/sidecar/routes/addons.js +3 -13
- package/dist/sidecar/routes/addons.js.map +1 -1
- package/dist/sidecar/routes/api-keys.d.ts +4 -0
- package/dist/sidecar/routes/api-keys.d.ts.map +1 -0
- package/dist/sidecar/routes/api-keys.js +221 -0
- package/dist/sidecar/routes/api-keys.js.map +1 -0
- package/dist/sidecar/routes/backup.js +3 -3
- package/dist/sidecar/routes/backup.js.map +1 -1
- package/dist/sidecar/routes/bindings.d.ts +5 -0
- package/dist/sidecar/routes/bindings.d.ts.map +1 -0
- package/dist/sidecar/routes/bindings.js +64 -0
- package/dist/sidecar/routes/bindings.js.map +1 -0
- package/dist/sidecar/routes/channels.d.ts.map +1 -1
- package/dist/sidecar/routes/channels.js +71 -75
- package/dist/sidecar/routes/channels.js.map +1 -1
- package/dist/sidecar/routes/crons.d.ts +5 -0
- package/dist/sidecar/routes/crons.d.ts.map +1 -0
- package/dist/sidecar/routes/crons.js +81 -0
- package/dist/sidecar/routes/crons.js.map +1 -0
- package/dist/sidecar/routes/health.d.ts.map +1 -1
- package/dist/sidecar/routes/health.js +1 -5
- package/dist/sidecar/routes/health.js.map +1 -1
- package/dist/sidecar/routes/kitchen-proxy.d.ts +5 -0
- package/dist/sidecar/routes/kitchen-proxy.d.ts.map +1 -0
- package/dist/sidecar/routes/kitchen-proxy.js +29 -0
- package/dist/sidecar/routes/kitchen-proxy.js.map +1 -0
- package/dist/sidecar/routes/memory.d.ts +0 -2
- package/dist/sidecar/routes/memory.d.ts.map +1 -1
- package/dist/sidecar/routes/memory.js +116 -113
- package/dist/sidecar/routes/memory.js.map +1 -1
- package/dist/sidecar/routes/metrics.d.ts.map +1 -1
- package/dist/sidecar/routes/metrics.js +30 -1
- package/dist/sidecar/routes/metrics.js.map +1 -1
- package/dist/sidecar/routes/restart.d.ts.map +1 -1
- package/dist/sidecar/routes/restart.js +13 -4
- package/dist/sidecar/routes/restart.js.map +1 -1
- package/dist/sidecar/routes/router-config.d.ts +0 -1
- package/dist/sidecar/routes/router-config.d.ts.map +1 -1
- package/dist/sidecar/routes/router-config.js +2 -139
- package/dist/sidecar/routes/router-config.js.map +1 -1
- package/dist/sidecar/routes/soul.d.ts +11 -0
- package/dist/sidecar/routes/soul.d.ts.map +1 -1
- package/dist/sidecar/routes/soul.js +58 -33
- package/dist/sidecar/routes/soul.js.map +1 -1
- package/dist/sidecar/routes/system.d.ts +7 -0
- package/dist/sidecar/routes/system.d.ts.map +1 -0
- package/dist/sidecar/routes/system.js +49 -0
- package/dist/sidecar/routes/system.js.map +1 -0
- package/dist/sidecar/routes/team.d.ts.map +1 -1
- package/dist/sidecar/routes/team.js +121 -74
- package/dist/sidecar/routes/team.js.map +1 -1
- package/dist/sidecar/routes/update.d.ts.map +1 -1
- package/dist/sidecar/routes/update.js +24 -10
- package/dist/sidecar/routes/update.js.map +1 -1
- package/dist/sidecar/routes/workflow.d.ts +8 -0
- package/dist/sidecar/routes/workflow.d.ts.map +1 -0
- package/dist/sidecar/routes/workflow.js +232 -0
- package/dist/sidecar/routes/workflow.js.map +1 -0
- package/dist/sidecar/utils.d.ts +14 -0
- package/dist/sidecar/utils.d.ts.map +1 -1
- package/dist/sidecar/utils.js +35 -1
- package/dist/sidecar/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/router/index.js
CHANGED
|
@@ -35,12 +35,37 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.createRouterServer = createRouterServer;
|
|
37
37
|
const http = __importStar(require("http"));
|
|
38
|
+
const https = __importStar(require("https"));
|
|
38
39
|
const config_1 = require("../config");
|
|
39
|
-
const classifier_1 = require("./classifier");
|
|
40
|
-
const strategy_1 = require("./strategy");
|
|
41
|
-
const fallback_1 = require("./fallback");
|
|
42
40
|
const logger_1 = require("./logger");
|
|
43
|
-
const
|
|
41
|
+
const MODEL_PRICING = new Map([
|
|
42
|
+
// Anthropic
|
|
43
|
+
["claude-haiku-4-5-20251001", { inputPrice: 0.80, outputPrice: 4.00 }],
|
|
44
|
+
["claude-sonnet-4-6", { inputPrice: 3.00, outputPrice: 15.00 }],
|
|
45
|
+
["claude-opus-4-6", { inputPrice: 15.00, outputPrice: 75.00 }],
|
|
46
|
+
// Google
|
|
47
|
+
["gemini-2.0-flash", { inputPrice: 0.10, outputPrice: 0.40 }],
|
|
48
|
+
["gemini-2.0-pro", { inputPrice: 1.25, outputPrice: 5.00 }],
|
|
49
|
+
["gemini-2.5-pro", { inputPrice: 1.25, outputPrice: 10.00 }],
|
|
50
|
+
// OpenAI
|
|
51
|
+
["gpt-4o-mini", { inputPrice: 0.15, outputPrice: 0.60 }],
|
|
52
|
+
["gpt-4o", { inputPrice: 2.50, outputPrice: 10.00 }],
|
|
53
|
+
["o3", { inputPrice: 10.00, outputPrice: 40.00 }],
|
|
54
|
+
]);
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Server-side API key injection
|
|
57
|
+
// When LLM_API_KEY is set, the router injects it into upstream requests
|
|
58
|
+
// instead of forwarding the client's key. This keeps the real API key
|
|
59
|
+
// isolated in the router process (running as clawsidecar) — the agent
|
|
60
|
+
// process (agentplugged) never sees it.
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
const SERVER_API_KEY = process.env.LLM_API_KEY ?? null;
|
|
63
|
+
if (SERVER_API_KEY) {
|
|
64
|
+
console.log("[router] Key injection mode: server-side API key will be used (client keys ignored)");
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log("[router] Passthrough mode: forwarding client API keys to upstream");
|
|
68
|
+
}
|
|
44
69
|
// ---------------------------------------------------------------------------
|
|
45
70
|
// Helpers
|
|
46
71
|
// ---------------------------------------------------------------------------
|
|
@@ -65,104 +90,380 @@ function sendError(res, status, message) {
|
|
|
65
90
|
error: { message, type: "router_error", code: status },
|
|
66
91
|
});
|
|
67
92
|
}
|
|
93
|
+
function getModelPricing(model) {
|
|
94
|
+
return MODEL_PRICING.get(model) ?? { inputPrice: 0, outputPrice: 0 };
|
|
95
|
+
}
|
|
68
96
|
// ---------------------------------------------------------------------------
|
|
69
|
-
//
|
|
97
|
+
// Passthrough proxy — forwards requests transparently to upstream APIs
|
|
98
|
+
// and logs metrics from the response. Supports both JSON and SSE streams.
|
|
70
99
|
// ---------------------------------------------------------------------------
|
|
71
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Passthrough handler for Anthropic Messages API (/v1/messages).
|
|
102
|
+
* Forwards the request to api.anthropic.com, pipes the response back,
|
|
103
|
+
* and logs metrics after the response completes.
|
|
104
|
+
*/
|
|
105
|
+
async function handleAnthropicPassthrough(req, res, db) {
|
|
72
106
|
const startMs = Date.now();
|
|
73
|
-
|
|
107
|
+
// Read the full body to parse model info for logging
|
|
108
|
+
let bodyStr;
|
|
74
109
|
try {
|
|
75
|
-
|
|
110
|
+
bodyStr = await readBody(req);
|
|
76
111
|
}
|
|
77
112
|
catch {
|
|
78
113
|
return sendError(res, 400, "Failed to read request body");
|
|
79
114
|
}
|
|
80
|
-
let
|
|
115
|
+
let parsedBody;
|
|
81
116
|
try {
|
|
82
|
-
|
|
117
|
+
parsedBody = JSON.parse(bodyStr);
|
|
83
118
|
}
|
|
84
119
|
catch {
|
|
85
120
|
return sendError(res, 400, "Invalid JSON body");
|
|
86
121
|
}
|
|
87
|
-
|
|
88
|
-
|
|
122
|
+
const model = parsedBody.model ?? "unknown";
|
|
123
|
+
const isStream = parsedBody.stream === true;
|
|
124
|
+
// Build upstream headers — forward all relevant headers
|
|
125
|
+
const upstreamHeaders = {
|
|
126
|
+
"Content-Type": "application/json",
|
|
127
|
+
"Content-Length": Buffer.byteLength(bodyStr).toString(),
|
|
128
|
+
};
|
|
129
|
+
// Forward Anthropic-specific headers — inject server key if available
|
|
130
|
+
const apiKey = SERVER_API_KEY ?? req.headers["x-api-key"];
|
|
131
|
+
if (apiKey) {
|
|
132
|
+
upstreamHeaders["x-api-key"] = apiKey;
|
|
133
|
+
}
|
|
134
|
+
const anthropicVersion = req.headers["anthropic-version"];
|
|
135
|
+
if (anthropicVersion) {
|
|
136
|
+
upstreamHeaders["anthropic-version"] = anthropicVersion;
|
|
137
|
+
}
|
|
138
|
+
const anthropicBeta = req.headers["anthropic-beta"];
|
|
139
|
+
if (anthropicBeta) {
|
|
140
|
+
upstreamHeaders["anthropic-beta"] = anthropicBeta;
|
|
89
141
|
}
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
142
|
+
const upstreamPath = req.url ?? "/v1/messages";
|
|
143
|
+
const options = {
|
|
144
|
+
hostname: "api.anthropic.com",
|
|
145
|
+
port: 443,
|
|
146
|
+
path: upstreamPath,
|
|
147
|
+
method: "POST",
|
|
148
|
+
headers: upstreamHeaders,
|
|
149
|
+
};
|
|
150
|
+
const proxyReq = https.request(options, (proxyRes) => {
|
|
151
|
+
const statusCode = proxyRes.statusCode ?? 500;
|
|
152
|
+
if (isStream && statusCode >= 200 && statusCode < 300) {
|
|
153
|
+
// --- SSE streaming mode ---
|
|
154
|
+
// Pipe the upstream SSE stream directly to the client.
|
|
155
|
+
// Collect chunks to parse usage from the final message_stop event.
|
|
156
|
+
const streamChunks = [];
|
|
157
|
+
res.writeHead(statusCode, {
|
|
158
|
+
"Content-Type": proxyRes.headers["content-type"] ?? "text/event-stream",
|
|
159
|
+
"Cache-Control": "no-cache",
|
|
160
|
+
Connection: "keep-alive",
|
|
161
|
+
});
|
|
162
|
+
proxyReq.on("error", () => {
|
|
163
|
+
// Connection dropped during stream — nothing to do
|
|
164
|
+
});
|
|
165
|
+
proxyRes.on("data", (chunk) => {
|
|
166
|
+
streamChunks.push(chunk);
|
|
167
|
+
res.write(chunk);
|
|
168
|
+
});
|
|
169
|
+
proxyRes.on("end", () => {
|
|
170
|
+
res.end();
|
|
171
|
+
const latencyMs = Date.now() - startMs;
|
|
172
|
+
// Parse SSE chunks to extract usage from the final event
|
|
173
|
+
const fullStream = Buffer.concat(streamChunks).toString("utf-8");
|
|
174
|
+
const usage = extractAnthropicStreamUsage(fullStream);
|
|
175
|
+
const pricing = getModelPricing(model);
|
|
176
|
+
const cost = (0, logger_1.calculateCost)(usage.inputTokens, usage.outputTokens, pricing.inputPrice, pricing.outputPrice);
|
|
177
|
+
(0, logger_1.logRouterRequest)(db, {
|
|
178
|
+
timestamp: new Date().toISOString(),
|
|
179
|
+
model,
|
|
180
|
+
provider: "anthropic",
|
|
181
|
+
inputTokens: usage.inputTokens,
|
|
182
|
+
outputTokens: usage.outputTokens,
|
|
183
|
+
cost,
|
|
184
|
+
latencyMs,
|
|
185
|
+
success: statusCode >= 200 && statusCode < 400,
|
|
186
|
+
});
|
|
187
|
+
console.log(`[router] Anthropic stream ${model} | ${usage.inputTokens}+${usage.outputTokens} tokens | ${latencyMs}ms | $${cost.toFixed(6)}`);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
// --- Non-streaming mode ---
|
|
192
|
+
// Collect the full response, log metrics, then forward to client.
|
|
193
|
+
const chunks = [];
|
|
194
|
+
proxyRes.on("data", (chunk) => chunks.push(chunk));
|
|
195
|
+
proxyRes.on("end", () => {
|
|
196
|
+
const responseBody = Buffer.concat(chunks);
|
|
197
|
+
const latencyMs = Date.now() - startMs;
|
|
198
|
+
// Forward the response headers and body to the original client
|
|
199
|
+
const responseHeaders = {};
|
|
200
|
+
for (const [key, value] of Object.entries(proxyRes.headers)) {
|
|
201
|
+
if (value) {
|
|
202
|
+
responseHeaders[key] = value;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
res.writeHead(statusCode, responseHeaders);
|
|
206
|
+
res.end(responseBody);
|
|
207
|
+
// Parse response for metrics logging
|
|
208
|
+
let inputTokens = 0;
|
|
209
|
+
let outputTokens = 0;
|
|
210
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
211
|
+
try {
|
|
212
|
+
const responseJson = JSON.parse(responseBody.toString("utf-8"));
|
|
213
|
+
inputTokens = responseJson.usage?.input_tokens ?? 0;
|
|
214
|
+
outputTokens = responseJson.usage?.output_tokens ?? 0;
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// Response not JSON — skip metric extraction
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const pricing = getModelPricing(model);
|
|
221
|
+
const cost = (0, logger_1.calculateCost)(inputTokens, outputTokens, pricing.inputPrice, pricing.outputPrice);
|
|
222
|
+
(0, logger_1.logRouterRequest)(db, {
|
|
223
|
+
timestamp: new Date().toISOString(),
|
|
224
|
+
model,
|
|
225
|
+
provider: "anthropic",
|
|
226
|
+
inputTokens,
|
|
227
|
+
outputTokens,
|
|
228
|
+
cost,
|
|
229
|
+
latencyMs,
|
|
230
|
+
success: statusCode >= 200 && statusCode < 400,
|
|
231
|
+
error: statusCode >= 400 ? `HTTP ${statusCode}` : undefined,
|
|
232
|
+
});
|
|
233
|
+
console.log(`[router] Anthropic ${model} | ${inputTokens}+${outputTokens} tokens | ${latencyMs}ms | $${cost.toFixed(6)}${statusCode >= 400 ? ` | ERROR ${statusCode}` : ""}`);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
proxyReq.on("error", (err) => {
|
|
238
|
+
const latencyMs = Date.now() - startMs;
|
|
239
|
+
(0, logger_1.logRouterRequest)(db, {
|
|
240
|
+
timestamp: new Date().toISOString(),
|
|
241
|
+
model,
|
|
242
|
+
provider: "anthropic",
|
|
243
|
+
inputTokens: 0,
|
|
244
|
+
outputTokens: 0,
|
|
245
|
+
cost: 0,
|
|
246
|
+
latencyMs,
|
|
247
|
+
success: false,
|
|
248
|
+
error: err.message,
|
|
249
|
+
});
|
|
250
|
+
console.error("[router] Anthropic proxy error:", err.message);
|
|
251
|
+
if (!res.headersSent) {
|
|
252
|
+
sendError(res, 502, `Upstream error: ${err.message}`);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
proxyReq.write(bodyStr);
|
|
256
|
+
proxyReq.end();
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Passthrough handler for OpenAI Chat Completions API (/v1/chat/completions).
|
|
260
|
+
* Used when the request comes from OpenClaw (via OPENAI_BASE_URL override).
|
|
261
|
+
*/
|
|
262
|
+
async function handleOpenAiPassthrough(req, res, db) {
|
|
263
|
+
const startMs = Date.now();
|
|
264
|
+
let bodyStr;
|
|
94
265
|
try {
|
|
95
|
-
|
|
266
|
+
bodyStr = await readBody(req);
|
|
96
267
|
}
|
|
97
|
-
catch
|
|
98
|
-
|
|
99
|
-
return sendError(res, 503, err.message);
|
|
268
|
+
catch {
|
|
269
|
+
return sendError(res, 400, "Failed to read request body");
|
|
100
270
|
}
|
|
101
|
-
|
|
102
|
-
let chatResponse;
|
|
271
|
+
let parsedBody;
|
|
103
272
|
try {
|
|
104
|
-
|
|
273
|
+
parsedBody = JSON.parse(bodyStr);
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
return sendError(res, 400, "Invalid JSON body");
|
|
105
277
|
}
|
|
106
|
-
|
|
278
|
+
const model = parsedBody.model ?? "unknown";
|
|
279
|
+
const isStream = parsedBody.stream === true;
|
|
280
|
+
const upstreamHeaders = {
|
|
281
|
+
"Content-Type": "application/json",
|
|
282
|
+
"Content-Length": Buffer.byteLength(bodyStr).toString(),
|
|
283
|
+
};
|
|
284
|
+
// Inject server key if available, otherwise forward client's auth
|
|
285
|
+
const auth = SERVER_API_KEY
|
|
286
|
+
? `Bearer ${SERVER_API_KEY}`
|
|
287
|
+
: req.headers["authorization"];
|
|
288
|
+
if (auth) {
|
|
289
|
+
upstreamHeaders["Authorization"] = auth;
|
|
290
|
+
}
|
|
291
|
+
const upstreamPath = req.url ?? "/v1/chat/completions";
|
|
292
|
+
const options = {
|
|
293
|
+
hostname: "api.openai.com",
|
|
294
|
+
port: 443,
|
|
295
|
+
path: upstreamPath,
|
|
296
|
+
method: "POST",
|
|
297
|
+
headers: upstreamHeaders,
|
|
298
|
+
};
|
|
299
|
+
const proxyReq = https.request(options, (proxyRes) => {
|
|
300
|
+
const statusCode = proxyRes.statusCode ?? 500;
|
|
301
|
+
if (isStream && statusCode >= 200 && statusCode < 300) {
|
|
302
|
+
// --- SSE streaming mode ---
|
|
303
|
+
const streamChunks = [];
|
|
304
|
+
res.writeHead(statusCode, {
|
|
305
|
+
"Content-Type": proxyRes.headers["content-type"] ?? "text/event-stream",
|
|
306
|
+
"Cache-Control": "no-cache",
|
|
307
|
+
Connection: "keep-alive",
|
|
308
|
+
});
|
|
309
|
+
proxyRes.on("data", (chunk) => {
|
|
310
|
+
streamChunks.push(chunk);
|
|
311
|
+
res.write(chunk);
|
|
312
|
+
});
|
|
313
|
+
proxyRes.on("end", () => {
|
|
314
|
+
res.end();
|
|
315
|
+
const latencyMs = Date.now() - startMs;
|
|
316
|
+
const fullStream = Buffer.concat(streamChunks).toString("utf-8");
|
|
317
|
+
const usage = extractOpenAiStreamUsage(fullStream);
|
|
318
|
+
const pricing = getModelPricing(model);
|
|
319
|
+
const cost = (0, logger_1.calculateCost)(usage.inputTokens, usage.outputTokens, pricing.inputPrice, pricing.outputPrice);
|
|
320
|
+
(0, logger_1.logRouterRequest)(db, {
|
|
321
|
+
timestamp: new Date().toISOString(),
|
|
322
|
+
model,
|
|
323
|
+
provider: "openai",
|
|
324
|
+
inputTokens: usage.inputTokens,
|
|
325
|
+
outputTokens: usage.outputTokens,
|
|
326
|
+
cost,
|
|
327
|
+
latencyMs,
|
|
328
|
+
success: true,
|
|
329
|
+
});
|
|
330
|
+
console.log(`[router] OpenAI stream ${model} | ${usage.inputTokens}+${usage.outputTokens} tokens | ${latencyMs}ms | $${cost.toFixed(6)}`);
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
// --- Non-streaming mode ---
|
|
335
|
+
const chunks = [];
|
|
336
|
+
proxyRes.on("data", (chunk) => chunks.push(chunk));
|
|
337
|
+
proxyRes.on("end", () => {
|
|
338
|
+
const responseBody = Buffer.concat(chunks);
|
|
339
|
+
const latencyMs = Date.now() - startMs;
|
|
340
|
+
const responseHeaders = {};
|
|
341
|
+
for (const [key, value] of Object.entries(proxyRes.headers)) {
|
|
342
|
+
if (value) {
|
|
343
|
+
responseHeaders[key] = value;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
res.writeHead(statusCode, responseHeaders);
|
|
347
|
+
res.end(responseBody);
|
|
348
|
+
let inputTokens = 0;
|
|
349
|
+
let outputTokens = 0;
|
|
350
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
351
|
+
try {
|
|
352
|
+
const responseJson = JSON.parse(responseBody.toString("utf-8"));
|
|
353
|
+
inputTokens = responseJson.usage?.prompt_tokens ?? 0;
|
|
354
|
+
outputTokens = responseJson.usage?.completion_tokens ?? 0;
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
// Response not JSON — skip metric extraction
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
const pricing = getModelPricing(model);
|
|
361
|
+
const cost = (0, logger_1.calculateCost)(inputTokens, outputTokens, pricing.inputPrice, pricing.outputPrice);
|
|
362
|
+
(0, logger_1.logRouterRequest)(db, {
|
|
363
|
+
timestamp: new Date().toISOString(),
|
|
364
|
+
model,
|
|
365
|
+
provider: "openai",
|
|
366
|
+
inputTokens,
|
|
367
|
+
outputTokens,
|
|
368
|
+
cost,
|
|
369
|
+
latencyMs,
|
|
370
|
+
success: statusCode >= 200 && statusCode < 400,
|
|
371
|
+
error: statusCode >= 400 ? `HTTP ${statusCode}` : undefined,
|
|
372
|
+
});
|
|
373
|
+
console.log(`[router] OpenAI ${model} | ${inputTokens}+${outputTokens} tokens | ${latencyMs}ms | $${cost.toFixed(6)}${statusCode >= 400 ? ` | ERROR ${statusCode}` : ""}`);
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
proxyReq.on("error", (err) => {
|
|
107
378
|
const latencyMs = Date.now() - startMs;
|
|
108
379
|
(0, logger_1.logRouterRequest)(db, {
|
|
109
380
|
timestamp: new Date().toISOString(),
|
|
110
|
-
model
|
|
111
|
-
provider:
|
|
381
|
+
model,
|
|
382
|
+
provider: "openai",
|
|
112
383
|
inputTokens: 0,
|
|
113
384
|
outputTokens: 0,
|
|
114
385
|
cost: 0,
|
|
115
386
|
latencyMs,
|
|
116
|
-
complexity,
|
|
117
|
-
strategy: config.strategy,
|
|
118
|
-
fallback: false,
|
|
119
387
|
success: false,
|
|
120
388
|
error: err.message,
|
|
121
389
|
});
|
|
122
|
-
console.error("[router]
|
|
123
|
-
|
|
390
|
+
console.error("[router] OpenAI proxy error:", err.message);
|
|
391
|
+
if (!res.headersSent) {
|
|
392
|
+
sendError(res, 502, `Upstream error: ${err.message}`);
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
proxyReq.write(bodyStr);
|
|
396
|
+
proxyReq.end();
|
|
397
|
+
}
|
|
398
|
+
// ---------------------------------------------------------------------------
|
|
399
|
+
// SSE stream usage extraction
|
|
400
|
+
// ---------------------------------------------------------------------------
|
|
401
|
+
/**
|
|
402
|
+
* Parse Anthropic SSE stream to extract usage from the `message_delta` event
|
|
403
|
+
* (which contains the final usage block).
|
|
404
|
+
*/
|
|
405
|
+
function extractAnthropicStreamUsage(stream) {
|
|
406
|
+
let inputTokens = 0;
|
|
407
|
+
let outputTokens = 0;
|
|
408
|
+
// Anthropic sends usage in the message_start event (input_tokens)
|
|
409
|
+
// and in the message_delta event (output_tokens).
|
|
410
|
+
const lines = stream.split("\n");
|
|
411
|
+
for (const line of lines) {
|
|
412
|
+
if (!line.startsWith("data: "))
|
|
413
|
+
continue;
|
|
414
|
+
const data = line.slice(6);
|
|
415
|
+
if (data === "[DONE]")
|
|
416
|
+
continue;
|
|
417
|
+
try {
|
|
418
|
+
const event = JSON.parse(data);
|
|
419
|
+
// message_start contains initial usage (input_tokens)
|
|
420
|
+
if (event.type === "message_start" && event.message?.usage) {
|
|
421
|
+
inputTokens = event.message.usage.input_tokens ?? 0;
|
|
422
|
+
}
|
|
423
|
+
// message_delta contains final usage (output_tokens)
|
|
424
|
+
if (event.type === "message_delta" && event.usage) {
|
|
425
|
+
outputTokens = event.usage.output_tokens ?? 0;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
// Skip non-JSON SSE lines
|
|
430
|
+
}
|
|
124
431
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
432
|
+
return { inputTokens, outputTokens };
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Parse OpenAI SSE stream to extract usage from the final chunk
|
|
436
|
+
* (which may contain a usage field if stream_options.include_usage was set).
|
|
437
|
+
*/
|
|
438
|
+
function extractOpenAiStreamUsage(stream) {
|
|
439
|
+
let inputTokens = 0;
|
|
440
|
+
let outputTokens = 0;
|
|
441
|
+
const lines = stream.split("\n");
|
|
442
|
+
for (const line of lines) {
|
|
443
|
+
if (!line.startsWith("data: "))
|
|
444
|
+
continue;
|
|
445
|
+
const data = line.slice(6);
|
|
446
|
+
if (data === "[DONE]")
|
|
447
|
+
continue;
|
|
448
|
+
try {
|
|
449
|
+
const event = JSON.parse(data);
|
|
450
|
+
// OpenAI may include usage in the final chunk
|
|
451
|
+
if (event.usage) {
|
|
452
|
+
inputTokens = event.usage.prompt_tokens ?? 0;
|
|
453
|
+
outputTokens = event.usage.completion_tokens ?? 0;
|
|
142
454
|
}
|
|
143
455
|
}
|
|
456
|
+
catch {
|
|
457
|
+
// Skip non-JSON SSE lines
|
|
458
|
+
}
|
|
144
459
|
}
|
|
145
|
-
|
|
146
|
-
(0, logger_1.logRouterRequest)(db, {
|
|
147
|
-
timestamp: new Date().toISOString(),
|
|
148
|
-
model: selected.model.id,
|
|
149
|
-
provider: selected.provider.name,
|
|
150
|
-
inputTokens,
|
|
151
|
-
outputTokens,
|
|
152
|
-
cost,
|
|
153
|
-
latencyMs,
|
|
154
|
-
complexity,
|
|
155
|
-
strategy: config.strategy,
|
|
156
|
-
fallback: usedFallback,
|
|
157
|
-
success: true,
|
|
158
|
-
leakDetected,
|
|
159
|
-
});
|
|
160
|
-
sendJson(res, 200, response);
|
|
460
|
+
return { inputTokens, outputTokens };
|
|
161
461
|
}
|
|
162
462
|
// ---------------------------------------------------------------------------
|
|
163
463
|
// Server factory
|
|
164
464
|
// ---------------------------------------------------------------------------
|
|
165
465
|
function createRouterServer(config, db) {
|
|
466
|
+
console.log("[router] Mode: transparent passthrough proxy");
|
|
166
467
|
const server = http.createServer(async (req, res) => {
|
|
167
468
|
const method = req.method?.toUpperCase();
|
|
168
469
|
const url = req.url ?? "/";
|
|
@@ -170,16 +471,21 @@ function createRouterServer(config, db) {
|
|
|
170
471
|
if (method === "GET" && url === "/health") {
|
|
171
472
|
return sendJson(res, 200, {
|
|
172
473
|
status: "ok",
|
|
173
|
-
version: "0.
|
|
174
|
-
|
|
175
|
-
providers: config.providers
|
|
176
|
-
.filter((p) => p.enabled)
|
|
177
|
-
.map((p) => p.name),
|
|
474
|
+
version: "0.3.0",
|
|
475
|
+
mode: "passthrough",
|
|
178
476
|
});
|
|
179
477
|
}
|
|
180
|
-
//
|
|
478
|
+
// Anthropic Messages API — passthrough to api.anthropic.com
|
|
479
|
+
if (method === "POST" && url.startsWith("/v1/messages")) {
|
|
480
|
+
return handleAnthropicPassthrough(req, res, db);
|
|
481
|
+
}
|
|
482
|
+
// OpenAI Embeddings API — passthrough to api.openai.com
|
|
483
|
+
if (method === "POST" && url === "/v1/embeddings") {
|
|
484
|
+
return handleOpenAiPassthrough(req, res, db);
|
|
485
|
+
}
|
|
486
|
+
// OpenAI Chat Completions API — passthrough to api.openai.com
|
|
181
487
|
if (method === "POST" && url === "/v1/chat/completions") {
|
|
182
|
-
return
|
|
488
|
+
return handleOpenAiPassthrough(req, res, db);
|
|
183
489
|
}
|
|
184
490
|
// 404 for everything else
|
|
185
491
|
return sendError(res, 404, `Route not found: ${method} ${url}`);
|
|
@@ -193,12 +499,9 @@ if (require.main === module) {
|
|
|
193
499
|
const config = (0, config_1.loadConfig)();
|
|
194
500
|
const db = (0, logger_1.openDatabase)(config.dataDir);
|
|
195
501
|
const server = createRouterServer(config, db);
|
|
196
|
-
server.listen(config.routerPort, () => {
|
|
197
|
-
console.log(`[router] Claw Router Proxy listening on
|
|
198
|
-
console.log(
|
|
199
|
-
.filter((p) => p.enabled)
|
|
200
|
-
.map((p) => p.name)
|
|
201
|
-
.join(", ") || "none"}`);
|
|
502
|
+
server.listen(config.routerPort, "127.0.0.1", () => {
|
|
503
|
+
console.log(`[router] Claw Router Proxy listening on http://127.0.0.1:${config.routerPort}`);
|
|
504
|
+
console.log("[router] Mode: transparent passthrough proxy + cost logging");
|
|
202
505
|
});
|
|
203
506
|
process.on("SIGTERM", () => {
|
|
204
507
|
console.log("[router] Shutting down...");
|
package/dist/router/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
|
package/dist/router/logger.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ export declare function openDatabase(dataDir: string): Database.Database;
|
|
|
8
8
|
/**
|
|
9
9
|
* Inserts a log entry synchronously (SQLite writes are fast enough for this use case).
|
|
10
10
|
* Called after every proxied request.
|
|
11
|
+
*
|
|
12
|
+
* Note: the DB schema retains complexity/strategy/fallback columns for backward
|
|
13
|
+
* compatibility with existing dashboards, but they are always set to defaults.
|
|
11
14
|
*/
|
|
12
15
|
export declare function logRouterRequest(db: Database.Database, entry: RouterLogEntry): void;
|
|
13
16
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAyBzC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAa/D;AAED
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAyBzC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAa/D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,cAAc,GACpB,IAAI,CAmCN;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,MAAM,CAKR"}
|
package/dist/router/logger.js
CHANGED
|
@@ -54,8 +54,8 @@ CREATE TABLE IF NOT EXISTS router_logs (
|
|
|
54
54
|
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
55
55
|
cost REAL NOT NULL DEFAULT 0,
|
|
56
56
|
latency_ms INTEGER NOT NULL DEFAULT 0,
|
|
57
|
-
complexity TEXT NOT NULL,
|
|
58
|
-
strategy TEXT NOT NULL,
|
|
57
|
+
complexity TEXT NOT NULL DEFAULT 'passthrough',
|
|
58
|
+
strategy TEXT NOT NULL DEFAULT 'passthrough',
|
|
59
59
|
fallback INTEGER NOT NULL DEFAULT 0,
|
|
60
60
|
success INTEGER NOT NULL DEFAULT 1,
|
|
61
61
|
error TEXT,
|
|
@@ -82,6 +82,9 @@ function openDatabase(dataDir) {
|
|
|
82
82
|
/**
|
|
83
83
|
* Inserts a log entry synchronously (SQLite writes are fast enough for this use case).
|
|
84
84
|
* Called after every proxied request.
|
|
85
|
+
*
|
|
86
|
+
* Note: the DB schema retains complexity/strategy/fallback columns for backward
|
|
87
|
+
* compatibility with existing dashboards, but they are always set to defaults.
|
|
85
88
|
*/
|
|
86
89
|
function logRouterRequest(db, entry) {
|
|
87
90
|
try {
|
|
@@ -106,9 +109,9 @@ function logRouterRequest(db, entry) {
|
|
|
106
109
|
outputTokens: entry.outputTokens,
|
|
107
110
|
cost: entry.cost,
|
|
108
111
|
latencyMs: entry.latencyMs,
|
|
109
|
-
complexity:
|
|
110
|
-
strategy:
|
|
111
|
-
fallback:
|
|
112
|
+
complexity: "passthrough",
|
|
113
|
+
strategy: "passthrough",
|
|
114
|
+
fallback: 0,
|
|
112
115
|
success: entry.success ? 1 : 0,
|
|
113
116
|
error: entry.error ?? null,
|
|
114
117
|
leakDetected: entry.leakDetected ? 1 : 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,oCAaC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,oCAaC;AASD,4CAsCC;AAMD,sCAUC;AA5GD,oEAAsC;AACtC,uCAAyB;AACzB,2CAA6B;AAG7B,uEAAuE;AACvE,6EAA6E;AAC7E,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;CAmBlB,CAAC;AAEF;;;GAGG;AACH,SAAgB,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,yDAAyD;IACzD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,EAAqB,EACrB,KAAqB;IAErB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAYvB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC;YACP,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,aAAa;YACzB,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qCAAqC;QACrC,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAC3B,WAAmB,EACnB,YAAoB,EACpB,cAAsB,EACtB,eAAuB;IAEvB,OAAO,CACL,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,cAAc;QAC1C,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,eAAe,CAC7C,CAAC;AACJ,CAAC"}
|