anygate 0.5.4 → 0.5.5
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/LICENSE +21 -21
- package/README.md +613 -613
- package/dist/{chunk-E2MV3GDX.js → chunk-CH5IEXJN.js} +47 -22
- package/dist/chunk-CH5IEXJN.js.map +1 -0
- package/dist/{chunk-VKROC37K.js → chunk-YYSUTRMV.js} +1 -1
- package/dist/chunk-YYSUTRMV.js.map +1 -0
- package/dist/cli.js +70 -3
- package/dist/cli.js.map +1 -1
- package/dist/{command-GJYPBC6E.js → command-QEYVYS7O.js} +4 -4
- package/dist/command-QEYVYS7O.js.map +1 -0
- package/dist/{provider-templates-TWR5XSYI.js → provider-templates-75KU6VA6.js} +2 -2
- package/dist/ui/dist/assets/index-BBg1LGms.js +5 -0
- package/dist/ui/dist/assets/index-CeN2cmwU.css +1 -0
- package/dist/ui/dist/index.html +3 -3
- package/package.json +94 -94
- package/dist/chunk-E2MV3GDX.js.map +0 -1
- package/dist/chunk-VKROC37K.js.map +0 -1
- package/dist/command-GJYPBC6E.js.map +0 -1
- package/dist/ui/dist/assets/index-BXZwvwW9.css +0 -1
- package/dist/ui/dist/assets/index-CRD31gqp.js +0 -5
- /package/dist/{provider-templates-TWR5XSYI.js.map → provider-templates-75KU6VA6.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getTemplateById
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YYSUTRMV.js";
|
|
5
5
|
|
|
6
6
|
// src/core/constants.ts
|
|
7
7
|
import { homedir } from "os";
|
|
@@ -10,7 +10,7 @@ import { join } from "path";
|
|
|
10
10
|
// package.json
|
|
11
11
|
var package_default = {
|
|
12
12
|
name: "anygate",
|
|
13
|
-
version: "0.5.
|
|
13
|
+
version: "0.5.5",
|
|
14
14
|
publishConfig: {
|
|
15
15
|
access: "public"
|
|
16
16
|
},
|
|
@@ -4782,8 +4782,8 @@ function getUsage(chunk) {
|
|
|
4782
4782
|
const u = resp?.usageMetadata;
|
|
4783
4783
|
if (!u) return null;
|
|
4784
4784
|
return {
|
|
4785
|
-
|
|
4786
|
-
|
|
4785
|
+
inputTokens: u.promptTokenCount ?? 0,
|
|
4786
|
+
outputTokens: u.candidatesTokenCount ?? 0
|
|
4787
4787
|
};
|
|
4788
4788
|
}
|
|
4789
4789
|
function partThoughtSignature(part) {
|
|
@@ -4842,7 +4842,7 @@ async function streamCloudCodeToAnthropic(res, upstreamRes, model, log7) {
|
|
|
4842
4842
|
textBlockOpen: false,
|
|
4843
4843
|
pendingThoughtSignature: void 0,
|
|
4844
4844
|
toolCalls: [],
|
|
4845
|
-
usage: {
|
|
4845
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
4846
4846
|
emittedTextChars: 0,
|
|
4847
4847
|
suppressedThoughtChars: 0
|
|
4848
4848
|
};
|
|
@@ -4869,7 +4869,7 @@ async function streamCloudCodeToAnthropic(res, upstreamRes, model, log7) {
|
|
|
4869
4869
|
writeEvent(res, "message_delta", { type: "message_delta", delta: { stop_reason: "end_turn", stop_sequence: null }, usage: { output_tokens: 0 } });
|
|
4870
4870
|
writeEvent(res, "message_stop", { type: "message_stop" });
|
|
4871
4871
|
res.end();
|
|
4872
|
-
return;
|
|
4872
|
+
return state.usage;
|
|
4873
4873
|
}
|
|
4874
4874
|
const reader = upstreamRes.body.getReader();
|
|
4875
4875
|
const decoder = new TextDecoder();
|
|
@@ -4919,7 +4919,7 @@ async function streamCloudCodeToAnthropic(res, upstreamRes, model, log7) {
|
|
|
4919
4919
|
finalStopReason = mapStopReason(finishReason);
|
|
4920
4920
|
log7?.(() => {
|
|
4921
4921
|
const toolNames = state.toolCalls.map((tc) => tc.name).filter(Boolean).join(",");
|
|
4922
|
-
return `cloud-code stream finish=${finishReason} mapped=${finalStopReason} ${summarizeParts(parts)} emittedTextChars=${state.emittedTextChars} suppressedThoughtChars=${state.suppressedThoughtChars} queuedToolCalls=${state.toolCalls.length} queuedToolNames=${toolNames || "-"} outputTokens=${state.usage.
|
|
4922
|
+
return `cloud-code stream finish=${finishReason} mapped=${finalStopReason} ${summarizeParts(parts)} emittedTextChars=${state.emittedTextChars} suppressedThoughtChars=${state.suppressedThoughtChars} queuedToolCalls=${state.toolCalls.length} queuedToolNames=${toolNames || "-"} outputTokens=${state.usage.outputTokens}`;
|
|
4923
4923
|
});
|
|
4924
4924
|
if (state.textBlockOpen) {
|
|
4925
4925
|
closeBlock(res, state);
|
|
@@ -4951,11 +4951,11 @@ async function streamCloudCodeToAnthropic(res, upstreamRes, model, log7) {
|
|
|
4951
4951
|
writeEvent(res, "message_delta", {
|
|
4952
4952
|
type: "message_delta",
|
|
4953
4953
|
delta: { stop_reason: anthropicStopReason, stop_sequence: null },
|
|
4954
|
-
usage: { output_tokens: state.usage.
|
|
4954
|
+
usage: { output_tokens: state.usage.outputTokens }
|
|
4955
4955
|
});
|
|
4956
4956
|
writeEvent(res, "message_stop", { type: "message_stop" });
|
|
4957
4957
|
res.end();
|
|
4958
|
-
return;
|
|
4958
|
+
return state.usage;
|
|
4959
4959
|
}
|
|
4960
4960
|
}
|
|
4961
4961
|
}
|
|
@@ -4969,10 +4969,11 @@ async function streamCloudCodeToAnthropic(res, upstreamRes, model, log7) {
|
|
|
4969
4969
|
writeEvent(res, "message_delta", {
|
|
4970
4970
|
type: "message_delta",
|
|
4971
4971
|
delta: { stop_reason: finalStopReason, stop_sequence: null },
|
|
4972
|
-
usage: { output_tokens: state.usage.
|
|
4972
|
+
usage: { output_tokens: state.usage.outputTokens }
|
|
4973
4973
|
});
|
|
4974
4974
|
writeEvent(res, "message_stop", { type: "message_stop" });
|
|
4975
4975
|
res.end();
|
|
4976
|
+
return state.usage;
|
|
4976
4977
|
}
|
|
4977
4978
|
async function collectCloudCodeToAnthropic(upstreamRes, model, log7) {
|
|
4978
4979
|
const text4 = await upstreamRes.text();
|
|
@@ -4988,8 +4989,8 @@ async function collectCloudCodeToAnthropic(upstreamRes, model, log7) {
|
|
|
4988
4989
|
if (!chunk) continue;
|
|
4989
4990
|
const usage = getUsage(chunk);
|
|
4990
4991
|
if (usage) {
|
|
4991
|
-
inputTokens = usage.
|
|
4992
|
-
outputTokens = usage.
|
|
4992
|
+
inputTokens = usage.inputTokens;
|
|
4993
|
+
outputTokens = usage.outputTokens;
|
|
4993
4994
|
}
|
|
4994
4995
|
const candidate = getCandidate(chunk);
|
|
4995
4996
|
if (!candidate) continue;
|
|
@@ -5033,7 +5034,9 @@ async function collectCloudCodeToAnthropic(upstreamRes, model, log7) {
|
|
|
5033
5034
|
model,
|
|
5034
5035
|
stop_reason: stopReason,
|
|
5035
5036
|
stop_sequence: null,
|
|
5036
|
-
usage: { input_tokens: inputTokens, output_tokens: outputTokens }
|
|
5037
|
+
usage: { input_tokens: inputTokens, output_tokens: outputTokens },
|
|
5038
|
+
inputTokens,
|
|
5039
|
+
outputTokens
|
|
5037
5040
|
};
|
|
5038
5041
|
}
|
|
5039
5042
|
|
|
@@ -5472,6 +5475,9 @@ async function generateAnthropicResponse(model, params, modelId, options) {
|
|
|
5472
5475
|
import { appendFileSync as appendFileSync2, openSync as openSync2, writeSync as writeSync2, closeSync as closeSync2, readFileSync as readFileSync9, existsSync as existsSync9 } from "fs";
|
|
5473
5476
|
import { join as join9 } from "path";
|
|
5474
5477
|
var ANALYTICS_FILE = "analytics.jsonl";
|
|
5478
|
+
function normalizeModelKey(modelId) {
|
|
5479
|
+
return modelId.toLowerCase().replace(/\//g, ":").replace(/\s*\([^)]*\)\s*$/g, "").replace(/\s+/g, " ").trim();
|
|
5480
|
+
}
|
|
5475
5481
|
function analyticsPath() {
|
|
5476
5482
|
return join9(getAppHome(), ANALYTICS_FILE);
|
|
5477
5483
|
}
|
|
@@ -5576,21 +5582,27 @@ function aggregateAnalytics(range) {
|
|
|
5576
5582
|
const hour = Number(e.ts.slice(11, 13));
|
|
5577
5583
|
if (Number.isFinite(hour) && hour >= 0 && hour < 24) hourCounts[hour] += 1;
|
|
5578
5584
|
const provider = e.providerId ?? e.npm?.replace(/^@/, "").replace(/\//g, "-") ?? "unknown";
|
|
5579
|
-
const key = `${provider}|${e.modelId}`;
|
|
5580
|
-
const m = modelMap.get(key) ?? { provider, model: e.modelId, app: e.app, inputTokens: 0, outputTokens: 0 };
|
|
5585
|
+
const key = `${provider}|${normalizeModelKey(e.modelId)}`;
|
|
5586
|
+
const m = modelMap.get(key) ?? { provider, model: e.modelId, app: e.app, apps: /* @__PURE__ */ new Set(), inputTokens: 0, outputTokens: 0 };
|
|
5587
|
+
if (!/\s/.test(m.model) && /\s/.test(e.modelId)) m.model = e.modelId;
|
|
5581
5588
|
m.inputTokens += e.inputTokens;
|
|
5582
5589
|
m.outputTokens += e.outputTokens;
|
|
5590
|
+
m.apps.add(e.app);
|
|
5583
5591
|
modelMap.set(key, m);
|
|
5584
5592
|
}
|
|
5585
|
-
const busiestDay = Math.max(1, ...[...
|
|
5593
|
+
const busiestDay = Math.max(1, ...[...tokensByDay.values()]);
|
|
5586
5594
|
const heatmap = [];
|
|
5587
5595
|
for (let i = rangeDays(range) - 1; i >= 0; i--) {
|
|
5588
5596
|
const d = new Date(today);
|
|
5589
5597
|
d.setUTCDate(today.getUTCDate() - i);
|
|
5590
5598
|
const date = d.toISOString().slice(0, 10);
|
|
5591
|
-
const
|
|
5592
|
-
|
|
5593
|
-
|
|
5599
|
+
const tokens = tokensByDay.get(date) ?? 0;
|
|
5600
|
+
let intensity = 0;
|
|
5601
|
+
if (tokens > 0) {
|
|
5602
|
+
const pct = tokens / busiestDay;
|
|
5603
|
+
intensity = Math.max(1, Math.min(4, Math.round(1 + pct * 3)));
|
|
5604
|
+
}
|
|
5605
|
+
heatmap.push({ date, count: tokens, intensity });
|
|
5594
5606
|
}
|
|
5595
5607
|
const dailyTokens = [];
|
|
5596
5608
|
for (let i = rangeDays(range) - 1; i >= 0; i--) {
|
|
@@ -5625,12 +5637,14 @@ function aggregateAnalytics(range) {
|
|
|
5625
5637
|
}
|
|
5626
5638
|
const models = [...modelMap.entries()].map(([, m], idx) => {
|
|
5627
5639
|
const share = totalTokens > 0 ? (m.inputTokens + m.outputTokens) / totalTokens : 0;
|
|
5640
|
+
const apps = [...m.apps];
|
|
5628
5641
|
return {
|
|
5629
5642
|
provider: m.provider,
|
|
5630
5643
|
model: m.model,
|
|
5631
5644
|
tier: "",
|
|
5632
5645
|
// source tier isn't tracked in the log; UI shows it from catalog elsewhere
|
|
5633
|
-
app: m.app,
|
|
5646
|
+
app: apps[0] ?? m.app,
|
|
5647
|
+
apps,
|
|
5634
5648
|
inputTokens: m.inputTokens,
|
|
5635
5649
|
outputTokens: m.outputTokens,
|
|
5636
5650
|
share,
|
|
@@ -5939,12 +5953,22 @@ data: ${JSON.stringify({ type: "error", error: { type: errorType, message } })}
|
|
|
5939
5953
|
anthropicError(res, upstream.status >= 500 ? 502 : upstream.status, errBody);
|
|
5940
5954
|
return;
|
|
5941
5955
|
}
|
|
5956
|
+
let usage = { inputTokens: 0, outputTokens: 0 };
|
|
5942
5957
|
if (clientWantsStream) {
|
|
5943
|
-
await streamCloudCodeToAnthropic(res, upstream, route.realModelId, plog);
|
|
5958
|
+
usage = await streamCloudCodeToAnthropic(res, upstream, route.realModelId, plog);
|
|
5944
5959
|
} else {
|
|
5945
5960
|
const response = await collectCloudCodeToAnthropic(upstream, route.realModelId, plog);
|
|
5961
|
+
usage = { inputTokens: response.inputTokens ?? 0, outputTokens: response.outputTokens ?? 0 };
|
|
5946
5962
|
sendJson(res, 200, response);
|
|
5947
5963
|
}
|
|
5964
|
+
recordUsage({
|
|
5965
|
+
ts: (/* @__PURE__ */ new Date()).toISOString(),
|
|
5966
|
+
modelId: route.realModelId,
|
|
5967
|
+
providerId: route.providerId,
|
|
5968
|
+
app: route.app ?? "Antigravity",
|
|
5969
|
+
inputTokens: usage.inputTokens,
|
|
5970
|
+
outputTokens: usage.outputTokens
|
|
5971
|
+
});
|
|
5948
5972
|
} catch (err) {
|
|
5949
5973
|
const message = err instanceof Error ? err.message : String(err);
|
|
5950
5974
|
plog(() => `cloud-code fetch error: ${message}`);
|
|
@@ -10749,6 +10773,7 @@ export {
|
|
|
10749
10773
|
encodeToolUseId,
|
|
10750
10774
|
serializeToolResultContent,
|
|
10751
10775
|
translateRequest,
|
|
10776
|
+
recordUsage,
|
|
10752
10777
|
aggregateAnalytics,
|
|
10753
10778
|
aliasModelId,
|
|
10754
10779
|
startProxyCatalog,
|
|
@@ -10817,4 +10842,4 @@ export {
|
|
|
10817
10842
|
quitClaudeAppGracefully,
|
|
10818
10843
|
launchOrRestartClaudeApp
|
|
10819
10844
|
};
|
|
10820
|
-
//# sourceMappingURL=chunk-
|
|
10845
|
+
//# sourceMappingURL=chunk-CH5IEXJN.js.map
|