@stigmer/runner 3.0.2-dev.20260608121523 → 3.0.2-dev.20260609093630
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/.build-fingerprint +1 -1
- package/dist/activities/execute-cursor/usage-accumulator.js +6 -4
- package/dist/activities/execute-cursor/usage-accumulator.js.map +1 -1
- package/package.json +2 -2
- package/src/activities/execute-cursor/__tests__/usage-accumulator.test.ts +46 -0
- package/src/activities/execute-cursor/usage-accumulator.ts +6 -5
package/dist/.build-fingerprint
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"hash":"
|
|
1
|
+
{"hash":"4971b259dfd933ca","builtAt":"2026-06-09T09:38:00.401Z","fileCount":192}
|
|
@@ -75,10 +75,12 @@ export class UsageAccumulator {
|
|
|
75
75
|
outputTokens: BigInt(this.outputTokens),
|
|
76
76
|
cacheReadTokens: BigInt(this.cacheReadTokens),
|
|
77
77
|
cacheWriteTokens: BigInt(this.cacheWriteTokens),
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
// The Cursor SDK follows Anthropic's convention: inputTokens already
|
|
79
|
+
// INCLUDES the cached portions (cacheReadTokens/cacheWriteTokens are
|
|
80
|
+
// subsets of it, not additive). The true total throughput is therefore
|
|
81
|
+
// inputTokens + outputTokens. Adding the cache buckets again would
|
|
82
|
+
// double-count them and inflate the figure the Usage widget shows.
|
|
83
|
+
totalTokens: BigInt(this.inputTokens + this.outputTokens),
|
|
82
84
|
turnCount: this.turnCount,
|
|
83
85
|
estimatedCostUsd: this.estimatedCostUsd,
|
|
84
86
|
model: this.model,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-accumulator.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/usage-accumulator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqB5E,MAAM,cAAc,GAAkB;IACpC,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,EAAE;IAChB,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,EAAE;IACpB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,CAAC;IACZ,gBAAgB,EAAE,CAAC;IACnB,KAAK,EAAE,EAAE;IACT,UAAU,EAAE,EAAE;CACf,CAAC;AAUF,MAAM,OAAO,gBAAgB;IAUE;IATrB,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,GAAG,CAAC,CAAC;IACjB,eAAe,GAAG,CAAC,CAAC;IACpB,gBAAgB,GAAG,CAAC,CAAC;IACrB,SAAS,GAAG,CAAC,CAAC;IACd,gBAAgB,GAAG,CAAC,CAAC;IACrB,UAAU,GAAG,EAAE,CAAC;IACP,WAAW,GAAiB,EAAE,CAAC;IAEhD,YAA6B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9C,OAAO,CAAC,KAAgB;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC;QAC5B,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC;QAClC,IAAI,CAAC,gBAAgB,IAAI,UAAU,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,MAAM;YACpB,eAAe,EAAE,SAAS;YAC1B,gBAAgB,EAAE,UAAU;SAC7B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,IAAI,eAAe,CACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC;QAEhD,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YACvC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAC7C,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC/C,
|
|
1
|
+
{"version":3,"file":"usage-accumulator.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/usage-accumulator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stigmer/runner",
|
|
3
|
-
"version": "3.0.2-dev.
|
|
3
|
+
"version": "3.0.2-dev.20260609093630",
|
|
4
4
|
"description": "Embeddable Temporal worker for the Stigmer AI agent platform — handles agent execution, workflow orchestration, and MCP server management",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"@opentelemetry/resources": "^2.0.0",
|
|
85
85
|
"@opentelemetry/sdk-trace-base": "^2.0.0",
|
|
86
86
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
87
|
-
"@stigmer/protos": "3.0.2-dev.
|
|
87
|
+
"@stigmer/protos": "3.0.2-dev.20260609093630",
|
|
88
88
|
"@temporalio/activity": "^1.11.0",
|
|
89
89
|
"@temporalio/client": "^1.11.0",
|
|
90
90
|
"@temporalio/common": "^1.11.0",
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
|
|
3
|
+
import { UsageAccumulator } from "../usage-accumulator.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Guards the token-accounting convention the Usage widget and the billing
|
|
7
|
+
* parity test both depend on: the Cursor SDK's inputTokens already INCLUDES
|
|
8
|
+
* the cached portions, so the true total is input + output. Adding the cache
|
|
9
|
+
* buckets again would double-count them.
|
|
10
|
+
*/
|
|
11
|
+
describe("UsageAccumulator", () => {
|
|
12
|
+
it("reports total_tokens as input + output (cache is a subset of input, not additive)", () => {
|
|
13
|
+
const acc = new UsageAccumulator("claude-sonnet-4-5");
|
|
14
|
+
|
|
15
|
+
// Two turns. cacheRead/cacheWrite are subsets of inputTokens.
|
|
16
|
+
acc.addTurn({ inputTokens: 100, outputTokens: 50, cacheReadTokens: 30, cacheWriteTokens: 10 });
|
|
17
|
+
acc.addTurn({ inputTokens: 300, outputTokens: 20, cacheReadTokens: 200, cacheWriteTokens: 0 });
|
|
18
|
+
|
|
19
|
+
const snap = acc.snapshot();
|
|
20
|
+
|
|
21
|
+
expect(snap.inputTokens).toBe(400n);
|
|
22
|
+
expect(snap.outputTokens).toBe(70n);
|
|
23
|
+
expect(snap.cacheReadTokens).toBe(230n);
|
|
24
|
+
expect(snap.cacheWriteTokens).toBe(10n);
|
|
25
|
+
// True total = input + output = 470. NOT 470 + 230 + 10 (which would
|
|
26
|
+
// double-count the cached tokens already inside inputTokens).
|
|
27
|
+
expect(snap.totalTokens).toBe(470n);
|
|
28
|
+
expect(snap.turnCount).toBe(2);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("returns an empty snapshot when no turns were observed", () => {
|
|
32
|
+
const acc = new UsageAccumulator("claude-sonnet-4-5");
|
|
33
|
+
const snap = acc.snapshot();
|
|
34
|
+
expect(snap.totalTokens).toBe(0n);
|
|
35
|
+
expect(snap.turnCount).toBe(0);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("treats missing token fields as zero", () => {
|
|
39
|
+
const acc = new UsageAccumulator("claude-sonnet-4-5");
|
|
40
|
+
acc.addTurn({ inputTokens: 42 });
|
|
41
|
+
const snap = acc.snapshot();
|
|
42
|
+
expect(snap.inputTokens).toBe(42n);
|
|
43
|
+
expect(snap.outputTokens).toBe(0n);
|
|
44
|
+
expect(snap.totalTokens).toBe(42n);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -112,11 +112,12 @@ export class UsageAccumulator {
|
|
|
112
112
|
outputTokens: BigInt(this.outputTokens),
|
|
113
113
|
cacheReadTokens: BigInt(this.cacheReadTokens),
|
|
114
114
|
cacheWriteTokens: BigInt(this.cacheWriteTokens),
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
// The Cursor SDK follows Anthropic's convention: inputTokens already
|
|
116
|
+
// INCLUDES the cached portions (cacheReadTokens/cacheWriteTokens are
|
|
117
|
+
// subsets of it, not additive). The true total throughput is therefore
|
|
118
|
+
// inputTokens + outputTokens. Adding the cache buckets again would
|
|
119
|
+
// double-count them and inflate the figure the Usage widget shows.
|
|
120
|
+
totalTokens: BigInt(this.inputTokens + this.outputTokens),
|
|
120
121
|
turnCount: this.turnCount,
|
|
121
122
|
estimatedCostUsd: this.estimatedCostUsd,
|
|
122
123
|
model: this.model,
|