@nookplot/runtime 0.5.146 → 0.5.147
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/__tests__/apiMarketplace.test.js +2 -189
- package/dist/__tests__/apiMarketplace.test.js.map +1 -1
- package/dist/__tests__/autonomous.dedup.test.js +0 -11
- package/dist/__tests__/autonomous.dedup.test.js.map +1 -1
- package/dist/__tests__/autonomous.getAvailableActions.test.js +1 -13
- package/dist/__tests__/autonomous.getAvailableActions.test.js.map +1 -1
- package/dist/__tests__/bdAgentPack.test.js +1 -1
- package/dist/__tests__/bdAgentPack.test.js.map +1 -1
- package/dist/__tests__/bounties.test.js +0 -12
- package/dist/__tests__/bounties.test.js.map +1 -1
- package/dist/__tests__/codegen-drift.test.js +1 -3
- package/dist/__tests__/codegen-drift.test.js.map +1 -1
- package/dist/__tests__/conversation/modelThresholdsParity.test.js +14 -19
- package/dist/__tests__/conversation/modelThresholdsParity.test.js.map +1 -1
- package/dist/__tests__/economy.frontierInference.test.d.ts +2 -0
- package/dist/__tests__/economy.frontierInference.test.d.ts.map +1 -0
- package/dist/__tests__/economy.frontierInference.test.js +61 -0
- package/dist/__tests__/economy.frontierInference.test.js.map +1 -0
- package/dist/__tests__/economy.surplusBranch.test.js +2 -66
- package/dist/__tests__/economy.surplusBranch.test.js.map +1 -1
- package/dist/__tests__/helpers/mockRuntime.d.ts.map +1 -1
- package/dist/__tests__/helpers/mockRuntime.js +0 -7
- package/dist/__tests__/helpers/mockRuntime.js.map +1 -1
- package/dist/__tests__/pack.test.js +14 -14
- package/dist/__tests__/packLoader.test.js +4 -4
- package/dist/__tests__/presetLoader.test.js +42 -42
- package/dist/__tests__/sandbox.test.js +24 -24
- package/dist/__tests__/surplusInference.test.js +54 -8
- package/dist/__tests__/surplusInference.test.js.map +1 -1
- package/dist/actionCatalog.d.ts.map +1 -1
- package/dist/actionCatalog.generated.d.ts +1 -1
- package/dist/actionCatalog.generated.d.ts.map +1 -1
- package/dist/actionCatalog.generated.js +26 -151
- package/dist/actionCatalog.generated.js.map +1 -1
- package/dist/actionCatalog.js +10 -0
- package/dist/actionCatalog.js.map +1 -1
- package/dist/api-marketplace.d.ts +0 -146
- package/dist/api-marketplace.d.ts.map +1 -1
- package/dist/api-marketplace.js +0 -218
- package/dist/api-marketplace.js.map +1 -1
- package/dist/autonomous.d.ts +9 -16
- package/dist/autonomous.d.ts.map +1 -1
- package/dist/autonomous.js +59 -276
- package/dist/autonomous.js.map +1 -1
- package/dist/bounties.d.ts +0 -8
- package/dist/bounties.d.ts.map +1 -1
- package/dist/bounties.js +0 -2
- package/dist/bounties.js.map +1 -1
- package/dist/contentSafety.d.ts +1 -1
- package/dist/contentSafety.d.ts.map +1 -1
- package/dist/contentSafety.js +2 -6
- package/dist/contentSafety.js.map +1 -1
- package/dist/conversation/modelLimits.js +17 -17
- package/dist/discovery.js +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/economy.d.ts +15 -10
- package/dist/economy.d.ts.map +1 -1
- package/dist/economy.js +29 -16
- package/dist/economy.js.map +1 -1
- package/dist/frontierPass.d.ts +30 -0
- package/dist/frontierPass.d.ts.map +1 -0
- package/dist/frontierPass.js +42 -0
- package/dist/frontierPass.js.map +1 -0
- package/dist/identity.d.ts +0 -51
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -50
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +3 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -15
- package/dist/index.js.map +1 -1
- package/dist/inference/surplusInference.d.ts +29 -1
- package/dist/inference/surplusInference.d.ts.map +1 -1
- package/dist/inference/surplusInference.js +132 -15
- package/dist/inference/surplusInference.js.map +1 -1
- package/dist/signalActionMap.d.ts.map +1 -1
- package/dist/signalActionMap.js +5 -15
- package/dist/signalActionMap.js.map +1 -1
- package/dist/swarms.d.ts +0 -13
- package/dist/swarms.d.ts.map +1 -1
- package/dist/swarms.js +0 -4
- package/dist/swarms.js.map +1 -1
- package/dist/tools.js +1 -1
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +1 -22
- package/dist/types.d.ts.map +1 -1
- package/package.json +75 -75
- package/dist/__tests__/autonomous.goalBootstrap.test.d.ts +0 -2
- package/dist/__tests__/autonomous.goalBootstrap.test.d.ts.map +0 -1
- package/dist/__tests__/autonomous.goalBootstrap.test.js +0 -148
- package/dist/__tests__/autonomous.goalBootstrap.test.js.map +0 -1
- package/dist/__tests__/autonomous.miningTrack.test.d.ts +0 -2
- package/dist/__tests__/autonomous.miningTrack.test.d.ts.map +0 -1
- package/dist/__tests__/autonomous.miningTrack.test.js +0 -38
- package/dist/__tests__/autonomous.miningTrack.test.js.map +0 -1
- package/dist/__tests__/autonomous.payApi.test.d.ts +0 -2
- package/dist/__tests__/autonomous.payApi.test.d.ts.map +0 -1
- package/dist/__tests__/autonomous.payApi.test.js +0 -73
- package/dist/__tests__/autonomous.payApi.test.js.map +0 -1
- package/dist/__tests__/autonomous.workspaceOpportunity.test.d.ts +0 -2
- package/dist/__tests__/autonomous.workspaceOpportunity.test.d.ts.map +0 -1
- package/dist/__tests__/autonomous.workspaceOpportunity.test.js +0 -212
- package/dist/__tests__/autonomous.workspaceOpportunity.test.js.map +0 -1
- package/dist/__tests__/goalLoop.test.d.ts +0 -2
- package/dist/__tests__/goalLoop.test.d.ts.map +0 -1
- package/dist/__tests__/goalLoop.test.js +0 -358
- package/dist/__tests__/goalLoop.test.js.map +0 -1
- package/dist/__tests__/loadProfile.test.d.ts +0 -8
- package/dist/__tests__/loadProfile.test.d.ts.map +0 -1
- package/dist/__tests__/loadProfile.test.js +0 -134
- package/dist/__tests__/loadProfile.test.js.map +0 -1
- package/dist/__tests__/mining.test.d.ts +0 -2
- package/dist/__tests__/mining.test.d.ts.map +0 -1
- package/dist/__tests__/mining.test.js +0 -306
- package/dist/__tests__/mining.test.js.map +0 -1
- package/dist/__tests__/signalActionMap.test.d.ts +0 -17
- package/dist/__tests__/signalActionMap.test.d.ts.map +0 -1
- package/dist/__tests__/signalActionMap.test.js +0 -165
- package/dist/__tests__/signalActionMap.test.js.map +0 -1
- package/dist/__tests__/usdcBudget.test.d.ts +0 -2
- package/dist/__tests__/usdcBudget.test.d.ts.map +0 -1
- package/dist/__tests__/usdcBudget.test.js +0 -128
- package/dist/__tests__/usdcBudget.test.js.map +0 -1
- package/dist/__tests__/x402.test.d.ts +0 -2
- package/dist/__tests__/x402.test.d.ts.map +0 -1
- package/dist/__tests__/x402.test.js +0 -117
- package/dist/__tests__/x402.test.js.map +0 -1
- package/dist/goal/goalLoop.d.ts +0 -78
- package/dist/goal/goalLoop.d.ts.map +0 -1
- package/dist/goal/goalLoop.js +0 -388
- package/dist/goal/goalLoop.js.map +0 -1
- package/dist/goal/goalPrompts.d.ts +0 -20
- package/dist/goal/goalPrompts.d.ts.map +0 -1
- package/dist/goal/goalPrompts.js +0 -54
- package/dist/goal/goalPrompts.js.map +0 -1
- package/dist/goal/types.d.ts +0 -102
- package/dist/goal/types.d.ts.map +0 -1
- package/dist/goal/types.js +0 -7
- package/dist/goal/types.js.map +0 -1
- package/dist/loadProfile.d.ts +0 -100
- package/dist/loadProfile.d.ts.map +0 -1
- package/dist/loadProfile.js +0 -221
- package/dist/loadProfile.js.map +0 -1
- package/dist/usdcBudget.d.ts +0 -90
- package/dist/usdcBudget.d.ts.map +0 -1
- package/dist/usdcBudget.js +0 -155
- package/dist/usdcBudget.js.map +0 -1
- package/dist/x402.d.ts +0 -69
- package/dist/x402.d.ts.map +0 -1
- package/dist/x402.js +0 -139
- package/dist/x402.js.map +0 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EconomyManager.frontierInference() — the one-shot frontier (Surplus) call that
|
|
3
|
+
* backs the `use_frontier_model` autonomous action (spends an owner-reserved
|
|
4
|
+
* pass). Contract:
|
|
5
|
+
* 1. ALWAYS routes to Surplus regardless of the configured default source.
|
|
6
|
+
* 2. Returns `costUsdcMicros` = the spend-tracker delta for this call (so the
|
|
7
|
+
* caller can finalize the reserved pass with the real settled spend).
|
|
8
|
+
* 3. Throws a keyless SurplusError (no network) when there's no private key.
|
|
9
|
+
*
|
|
10
|
+
* `surplusInference` is mocked here so the test doesn't require the optional
|
|
11
|
+
* x402/viem peers (the real-client path is covered by economy.surplusBranch).
|
|
12
|
+
*/
|
|
13
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
14
|
+
vi.mock("../inference/surplusInference.js", async (importOriginal) => {
|
|
15
|
+
const actual = await importOriginal();
|
|
16
|
+
return {
|
|
17
|
+
...actual,
|
|
18
|
+
// Simulate an x402 spend of $0.042 by bumping the shared tracker, and echo
|
|
19
|
+
// the requested model so we can assert the override took effect.
|
|
20
|
+
surplusInference: vi.fn(async (params) => {
|
|
21
|
+
if (params.tracker)
|
|
22
|
+
params.tracker.spentBaseUnits += 42000n;
|
|
23
|
+
return {
|
|
24
|
+
content: "frontier says hi",
|
|
25
|
+
model: params.options?.model ?? "unknown",
|
|
26
|
+
provider: "surplus",
|
|
27
|
+
usage: { promptTokens: 1, completionTokens: 1, totalTokens: 2, creditsCost: 0 },
|
|
28
|
+
};
|
|
29
|
+
}),
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
const { ConnectionManager } = await import("../connection.js");
|
|
33
|
+
const { EconomyManager } = await import("../economy.js");
|
|
34
|
+
const surplusMod = await import("../inference/surplusInference.js");
|
|
35
|
+
const TEST_PK = "0x" + "ab".repeat(32);
|
|
36
|
+
const TEST_BASE = "https://gateway.example.com";
|
|
37
|
+
const MSGS = [{ role: "user", content: "Prove the theorem." }];
|
|
38
|
+
beforeEach(() => vi.clearAllMocks());
|
|
39
|
+
describe("EconomyManager.frontierInference()", () => {
|
|
40
|
+
it("routes to Surplus even when the default source is platform, and returns the cost delta", async () => {
|
|
41
|
+
const economy = new EconomyManager(new ConnectionManager({
|
|
42
|
+
gatewayUrl: TEST_BASE,
|
|
43
|
+
apiKey: "nk_test",
|
|
44
|
+
privateKey: TEST_PK,
|
|
45
|
+
inferenceSource: "platform", // default — frontierInference overrides to Surplus
|
|
46
|
+
surplus: { model: "llama-3.3-70b-instruct" },
|
|
47
|
+
}));
|
|
48
|
+
const result = await economy.frontierInference(MSGS, { model: "claude-opus-4.8" });
|
|
49
|
+
expect(surplusMod.surplusInference).toHaveBeenCalledTimes(1);
|
|
50
|
+
expect(result.provider).toBe("surplus");
|
|
51
|
+
expect(result.content).toBe("frontier says hi");
|
|
52
|
+
expect(result.model).toBe("claude-opus-4.8"); // the per-call override won
|
|
53
|
+
expect(result.costUsdcMicros).toBe(42_000); // tracker delta, 6-dec base units
|
|
54
|
+
});
|
|
55
|
+
it("throws keyless (no surplus call) when there is no private key", async () => {
|
|
56
|
+
const economy = new EconomyManager(new ConnectionManager({ gatewayUrl: TEST_BASE, apiKey: "nk_test" }));
|
|
57
|
+
await expect(economy.frontierInference(MSGS, { model: "claude-opus-4.8" })).rejects.toMatchObject({ code: "keyless" });
|
|
58
|
+
expect(surplusMod.surplusInference).not.toHaveBeenCalled();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=economy.frontierInference.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"economy.frontierInference.test.js","sourceRoot":"","sources":["../../src/__tests__/economy.frontierInference.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ function urlOf(args) {
|
|
|
32
32
|
}
|
|
33
33
|
const SURPLUS_OK = () => new Response(JSON.stringify({
|
|
34
34
|
choices: [{ message: { content: "surplus says hi" } }],
|
|
35
|
-
model: "llama-3.3-70b",
|
|
35
|
+
model: "llama-3.3-70b-instruct",
|
|
36
36
|
usage: { prompt_tokens: 3, completion_tokens: 2, total_tokens: 5 },
|
|
37
37
|
}), { status: 200, headers: { "Content-Type": "application/json" } });
|
|
38
38
|
const GATEWAY_OK = () => new Response(JSON.stringify({
|
|
@@ -57,7 +57,7 @@ describe("EconomyManager.inference() — source routing", () => {
|
|
|
57
57
|
apiKey: "nk_test",
|
|
58
58
|
privateKey: TEST_PK,
|
|
59
59
|
inferenceSource: "surplus",
|
|
60
|
-
surplus: { model: "llama-3.3-70b" },
|
|
60
|
+
surplus: { model: "llama-3.3-70b-instruct" },
|
|
61
61
|
}));
|
|
62
62
|
const result = await economy.inference(MSGS);
|
|
63
63
|
expect(result.provider).toBe("surplus");
|
|
@@ -92,68 +92,4 @@ describe("EconomyManager.inference() — source routing", () => {
|
|
|
92
92
|
expect(calls.some((u) => u.includes("surplusintelligence"))).toBe(false);
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
|
-
/**
|
|
96
|
-
* Phase 4 — per-call source override. `options.inferenceSource` overrides the
|
|
97
|
-
* connection-level source for a single call (D7: the override is the enum, NOT a
|
|
98
|
-
* `surplus` boolean). The showcase is a platform-default self-hosted agent
|
|
99
|
-
* escalating ONE task to frontier inference paid in USDC via x402. The per-call
|
|
100
|
-
* cap / selector behaviour itself is covered by `surplusInference.test.ts`; here
|
|
101
|
-
* we assert only the routing decision the override controls.
|
|
102
|
-
*/
|
|
103
|
-
describe("EconomyManager.inference() — per-call source override (Phase 4)", () => {
|
|
104
|
-
it("per-call inferenceSource='surplus' escalates a platform-default agent to x402 (gateway bypassed)", async () => {
|
|
105
|
-
const calls = [];
|
|
106
|
-
const fetchSpy = vi.fn(async (...args) => {
|
|
107
|
-
calls.push(urlOf(args));
|
|
108
|
-
return SURPLUS_OK();
|
|
109
|
-
});
|
|
110
|
-
vi.stubGlobal("fetch", fetchSpy);
|
|
111
|
-
// Connection default is "platform" (inferenceSource unset) — the whole point
|
|
112
|
-
// is escalating a SINGLE call without reconfiguring the runtime's source.
|
|
113
|
-
const economy = new EconomyManager(new ConnectionManager({
|
|
114
|
-
gatewayUrl: TEST_BASE,
|
|
115
|
-
apiKey: "nk_test",
|
|
116
|
-
privateKey: TEST_PK,
|
|
117
|
-
surplus: { model: "llama-3.3-70b" },
|
|
118
|
-
}));
|
|
119
|
-
const result = await economy.inference(MSGS, { inferenceSource: "surplus" });
|
|
120
|
-
expect(result.provider).toBe("surplus");
|
|
121
|
-
expect(result.content).toBe("surplus says hi");
|
|
122
|
-
expect(result.usage.creditsCost).toBe(0);
|
|
123
|
-
expect(calls.some((u) => u.startsWith(SURPLUS_URL))).toBe(true);
|
|
124
|
-
expect(calls.some((u) => u.includes("/v1/inference/chat"))).toBe(false);
|
|
125
|
-
});
|
|
126
|
-
it("per-call escalation WITHOUT a key throws keyless and makes no network call", async () => {
|
|
127
|
-
const fetchSpy = vi.fn(async () => SURPLUS_OK());
|
|
128
|
-
vi.stubGlobal("fetch", fetchSpy);
|
|
129
|
-
// Platform-default AND key-less: the per-call escalation must refuse rather
|
|
130
|
-
// than silently fall back to a paid platform call (default-restrictive).
|
|
131
|
-
const economy = new EconomyManager(new ConnectionManager({ gatewayUrl: TEST_BASE, apiKey: "nk_test" }));
|
|
132
|
-
await expect(economy.inference(MSGS, { inferenceSource: "surplus" })).rejects.toMatchObject({ code: "keyless" });
|
|
133
|
-
expect(fetchSpy).not.toHaveBeenCalled();
|
|
134
|
-
});
|
|
135
|
-
it("per-call inferenceSource='platform' overrides a surplus-default agent back to the gateway", async () => {
|
|
136
|
-
const calls = [];
|
|
137
|
-
const fetchSpy = vi.fn(async (...args) => {
|
|
138
|
-
calls.push(urlOf(args));
|
|
139
|
-
return GATEWAY_OK();
|
|
140
|
-
});
|
|
141
|
-
vi.stubGlobal("fetch", fetchSpy);
|
|
142
|
-
// Reverse direction: a surplus-default runtime forces ONE call to platform.
|
|
143
|
-
const economy = new EconomyManager(new ConnectionManager({
|
|
144
|
-
gatewayUrl: TEST_BASE,
|
|
145
|
-
apiKey: "nk_test",
|
|
146
|
-
privateKey: TEST_PK,
|
|
147
|
-
inferenceSource: "surplus",
|
|
148
|
-
surplus: { model: "llama-3.3-70b" },
|
|
149
|
-
}));
|
|
150
|
-
const result = await economy.inference(MSGS, {
|
|
151
|
-
model: "claude",
|
|
152
|
-
inferenceSource: "platform",
|
|
153
|
-
});
|
|
154
|
-
expect(result.provider).toBe("anthropic");
|
|
155
|
-
expect(calls.some((u) => u === `${TEST_BASE}/v1/inference/chat`)).toBe(true);
|
|
156
|
-
expect(calls.some((u) => u.includes("surplusintelligence"))).toBe(false);
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
95
|
//# sourceMappingURL=economy.surplusBranch.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"economy.surplusBranch.test.js","sourceRoot":"","sources":["../../src/__tests__/economy.surplusBranch.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG/D,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACvC,MAAM,SAAS,GAAG,6BAA6B,CAAC;AAChD,MAAM,IAAI,GAAuB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAEnE,SAAS,KAAK,CAAC,IAAe;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,YAAY,GAAG;QAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1C,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,MAAM,CAAE,CAAsB,CAAC,GAAG,CAAC,CAAC;IACzF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;IACb,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC;IACtD,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"economy.surplusBranch.test.js","sourceRoot":"","sources":["../../src/__tests__/economy.surplusBranch.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockRuntime.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/mockRuntime.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED,wBAAgB,iBAAiB,IAAI;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"mockRuntime.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/mockRuntime.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED,wBAAgB,iBAAiB,IAAI;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAA;CAAE,CAyI9F"}
|
|
@@ -17,13 +17,6 @@ export function createMockRuntime() {
|
|
|
17
17
|
identity: {
|
|
18
18
|
getAddress: vi.fn().mockReturnValue("0xAGENT0000000000000000000000000000000001"),
|
|
19
19
|
updateProfile: vi.fn().mockResolvedValue(ok),
|
|
20
|
-
// Goal execution (L3 — migration 247). Defaults to "no goal" so existing
|
|
21
|
-
// tests don't accidentally trigger bootstrap paths.
|
|
22
|
-
getGoal: vi.fn().mockResolvedValue(null),
|
|
23
|
-
updateGoalStatus: vi.fn().mockResolvedValue(undefined),
|
|
24
|
-
completeGoal: vi.fn().mockResolvedValue(undefined),
|
|
25
|
-
recordGoalStep: vi.fn().mockResolvedValue({ id: "step-1" }),
|
|
26
|
-
createPendingTask: vi.fn().mockResolvedValue({ id: "task-1" }),
|
|
27
20
|
},
|
|
28
21
|
memory: {
|
|
29
22
|
publishKnowledge: vi.fn().mockResolvedValue({ cid: "Qm_mock_cid", txHash: "0xMOCK_TX" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockRuntime.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/mockRuntime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAG5B,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAQ1C,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAEvE,MAAM,OAAO,GAAG;QACd,UAAU,EAAE;YACV,OAAO,EAAE,2CAA2C;YACpD,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SACtD;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,2CAA2C,CAAC;YAChF,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mockRuntime.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/mockRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -161,20 +161,20 @@ describe("schemaVersion (pack-format gate)", () => {
|
|
|
161
161
|
});
|
|
162
162
|
describe("parsePack", () => {
|
|
163
163
|
it("parses a YAML pack document", () => {
|
|
164
|
-
const result = parsePack(`
|
|
165
|
-
name: notion-research-agent
|
|
166
|
-
version: 1.0.0
|
|
167
|
-
tools: [search_knowledge, send_dm]
|
|
168
|
-
mcpServers:
|
|
169
|
-
- name: notion
|
|
170
|
-
url: https://mcp.notion.com/mcp
|
|
171
|
-
connection: notion
|
|
172
|
-
connections:
|
|
173
|
-
- service: notion
|
|
174
|
-
owner: agent
|
|
175
|
-
connectors:
|
|
176
|
-
- platform: email
|
|
177
|
-
mode: outbound
|
|
164
|
+
const result = parsePack(`
|
|
165
|
+
name: notion-research-agent
|
|
166
|
+
version: 1.0.0
|
|
167
|
+
tools: [search_knowledge, send_dm]
|
|
168
|
+
mcpServers:
|
|
169
|
+
- name: notion
|
|
170
|
+
url: https://mcp.notion.com/mcp
|
|
171
|
+
connection: notion
|
|
172
|
+
connections:
|
|
173
|
+
- service: notion
|
|
174
|
+
owner: agent
|
|
175
|
+
connectors:
|
|
176
|
+
- platform: email
|
|
177
|
+
mode: outbound
|
|
178
178
|
`);
|
|
179
179
|
expect(result.errors).toEqual([]);
|
|
180
180
|
expect(result.ok).toBe(true);
|
|
@@ -234,10 +234,10 @@ describe("preset delegation", () => {
|
|
|
234
234
|
});
|
|
235
235
|
describe("pack file loading", () => {
|
|
236
236
|
it("reads + parses the pack from packPath", async () => {
|
|
237
|
-
mockReadFile.mockResolvedValueOnce(`
|
|
238
|
-
name: from-file
|
|
239
|
-
version: 1.0.0
|
|
240
|
-
tools: [search_knowledge]
|
|
237
|
+
mockReadFile.mockResolvedValueOnce(`
|
|
238
|
+
name: from-file
|
|
239
|
+
version: 1.0.0
|
|
240
|
+
tools: [search_knowledge]
|
|
241
241
|
`);
|
|
242
242
|
const { runtime } = makeRuntime();
|
|
243
243
|
const report = await new PackLoader(runtime, { packPath: "./my.pack.yaml" }).load();
|
|
@@ -27,28 +27,28 @@ function createMockRuntime() {
|
|
|
27
27
|
identity: { getAddress: vi.fn().mockReturnValue("0xtest") },
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
-
const SAMPLE_YAML = `
|
|
31
|
-
version: "1.0"
|
|
32
|
-
gateway: https://gateway.nookplot.com
|
|
33
|
-
agent:
|
|
34
|
-
name: TestAgent
|
|
35
|
-
preset:
|
|
36
|
-
id: "research-biology"
|
|
37
|
-
version: 1
|
|
38
|
-
trustLevel: "verified"
|
|
39
|
-
failurePolicy: "continue"
|
|
40
|
-
maxCostNook: 5000000
|
|
41
|
-
sources:
|
|
42
|
-
- type: "mining"
|
|
43
|
-
label: "Biology traces"
|
|
44
|
-
config:
|
|
45
|
-
domainTags: ["biology"]
|
|
46
|
-
minScore: 0.6
|
|
47
|
-
maxTraces: 10
|
|
48
|
-
- type: "bundle"
|
|
49
|
-
label: "Bio papers"
|
|
50
|
-
config:
|
|
51
|
-
bundleId: 42
|
|
30
|
+
const SAMPLE_YAML = `
|
|
31
|
+
version: "1.0"
|
|
32
|
+
gateway: https://gateway.nookplot.com
|
|
33
|
+
agent:
|
|
34
|
+
name: TestAgent
|
|
35
|
+
preset:
|
|
36
|
+
id: "research-biology"
|
|
37
|
+
version: 1
|
|
38
|
+
trustLevel: "verified"
|
|
39
|
+
failurePolicy: "continue"
|
|
40
|
+
maxCostNook: 5000000
|
|
41
|
+
sources:
|
|
42
|
+
- type: "mining"
|
|
43
|
+
label: "Biology traces"
|
|
44
|
+
config:
|
|
45
|
+
domainTags: ["biology"]
|
|
46
|
+
minScore: 0.6
|
|
47
|
+
maxTraces: 10
|
|
48
|
+
- type: "bundle"
|
|
49
|
+
label: "Bio papers"
|
|
50
|
+
config:
|
|
51
|
+
bundleId: 42
|
|
52
52
|
`;
|
|
53
53
|
const FETCH_RESPONSE = {
|
|
54
54
|
presetId: "research-biology",
|
|
@@ -713,26 +713,26 @@ describe("E2E: forge data/fetch → KG batch ingest → self-model memory", () =
|
|
|
713
713
|
totalItems: 2,
|
|
714
714
|
totalCostNook: 50000,
|
|
715
715
|
};
|
|
716
|
-
const YAML_WITH_AGG = `
|
|
717
|
-
version: "1.0"
|
|
718
|
-
gateway: https://gateway.nookplot.com
|
|
719
|
-
agent:
|
|
720
|
-
name: GenomicsAgent
|
|
721
|
-
preset:
|
|
722
|
-
id: "genomics-researcher"
|
|
723
|
-
version: 1
|
|
724
|
-
trustLevel: "verified"
|
|
725
|
-
failurePolicy: "continue"
|
|
726
|
-
maxCostNook: 5000000
|
|
727
|
-
sources:
|
|
728
|
-
- type: "mining"
|
|
729
|
-
label: "Genomics traces"
|
|
730
|
-
config:
|
|
731
|
-
domainTags: ["genomics"]
|
|
732
|
-
- type: "aggregate"
|
|
733
|
-
label: "Genomics aggregates"
|
|
734
|
-
config:
|
|
735
|
-
domainTags: ["genomics"]
|
|
716
|
+
const YAML_WITH_AGG = `
|
|
717
|
+
version: "1.0"
|
|
718
|
+
gateway: https://gateway.nookplot.com
|
|
719
|
+
agent:
|
|
720
|
+
name: GenomicsAgent
|
|
721
|
+
preset:
|
|
722
|
+
id: "genomics-researcher"
|
|
723
|
+
version: 1
|
|
724
|
+
trustLevel: "verified"
|
|
725
|
+
failurePolicy: "continue"
|
|
726
|
+
maxCostNook: 5000000
|
|
727
|
+
sources:
|
|
728
|
+
- type: "mining"
|
|
729
|
+
label: "Genomics traces"
|
|
730
|
+
config:
|
|
731
|
+
domainTags: ["genomics"]
|
|
732
|
+
- type: "aggregate"
|
|
733
|
+
label: "Genomics aggregates"
|
|
734
|
+
config:
|
|
735
|
+
domainTags: ["genomics"]
|
|
736
736
|
`;
|
|
737
737
|
setupReadFileMocks(YAML_WITH_AGG);
|
|
738
738
|
setupKgAvailable(runtime, AGGREGATE_FETCH_RESPONSE);
|
|
@@ -299,30 +299,30 @@ describe("DockerSandbox lifecycle (via fake docker shim)", () => {
|
|
|
299
299
|
// `exec id sh -c CMD` -> exec sh -c CMD
|
|
300
300
|
// `cp SRC DST` -> cp SRC DST
|
|
301
301
|
// `rm -f id` -> exit 0
|
|
302
|
-
const script = `#!/bin/sh
|
|
303
|
-
case "$1" in
|
|
304
|
-
run) echo "fake-container-abc123"; exit 0 ;;
|
|
305
|
-
port) echo "0.0.0.0:54321"; exit 0 ;;
|
|
306
|
-
inspect) echo "true"; exit 0 ;;
|
|
307
|
-
rm) exit 0 ;;
|
|
308
|
-
exec)
|
|
309
|
-
# Skip "exec", any flags (-i, -w X, -e K=V), and the container id.
|
|
310
|
-
shift
|
|
311
|
-
while [ "$1" = "-i" ] || [ "$1" = "-w" ] || [ "$1" = "-e" ]; do
|
|
312
|
-
if [ "$1" = "-w" ] || [ "$1" = "-e" ]; then shift; fi
|
|
313
|
-
shift
|
|
314
|
-
done
|
|
315
|
-
shift # container id
|
|
316
|
-
exec "$@"
|
|
317
|
-
;;
|
|
318
|
-
cp)
|
|
319
|
-
shift
|
|
320
|
-
src=\${1#*:}
|
|
321
|
-
dst=\${2#*:}
|
|
322
|
-
cp "$src" "$dst"
|
|
323
|
-
;;
|
|
324
|
-
*) echo "shim: unknown $1" 1>&2; exit 2 ;;
|
|
325
|
-
esac
|
|
302
|
+
const script = `#!/bin/sh
|
|
303
|
+
case "$1" in
|
|
304
|
+
run) echo "fake-container-abc123"; exit 0 ;;
|
|
305
|
+
port) echo "0.0.0.0:54321"; exit 0 ;;
|
|
306
|
+
inspect) echo "true"; exit 0 ;;
|
|
307
|
+
rm) exit 0 ;;
|
|
308
|
+
exec)
|
|
309
|
+
# Skip "exec", any flags (-i, -w X, -e K=V), and the container id.
|
|
310
|
+
shift
|
|
311
|
+
while [ "$1" = "-i" ] || [ "$1" = "-w" ] || [ "$1" = "-e" ]; do
|
|
312
|
+
if [ "$1" = "-w" ] || [ "$1" = "-e" ]; then shift; fi
|
|
313
|
+
shift
|
|
314
|
+
done
|
|
315
|
+
shift # container id
|
|
316
|
+
exec "$@"
|
|
317
|
+
;;
|
|
318
|
+
cp)
|
|
319
|
+
shift
|
|
320
|
+
src=\${1#*:}
|
|
321
|
+
dst=\${2#*:}
|
|
322
|
+
cp "$src" "$dst"
|
|
323
|
+
;;
|
|
324
|
+
*) echo "shim: unknown $1" 1>&2; exit 2 ;;
|
|
325
|
+
esac
|
|
326
326
|
`;
|
|
327
327
|
await fs.writeFile(shimBin, script, { mode: 0o755 });
|
|
328
328
|
});
|
|
@@ -11,7 +11,7 @@ import { describe, it, expect, vi } from "vitest";
|
|
|
11
11
|
import { mkdtempSync, readFileSync, writeFileSync, rmSync } from "node:fs";
|
|
12
12
|
import { tmpdir } from "node:os";
|
|
13
13
|
import { join } from "node:path";
|
|
14
|
-
import { surplusInference, makeSurplusSelector, buildSurplusBody, parseSurplusResponse, usdcToBaseUnits, resolveSurplusPayTo, createSurplusSpendTracker, SurplusError, SURPLUS_URL, SURPLUS_PAYTO, BASE_USDC, DEFAULT_MAX_USDC_PER_SESSION, } from "../inference/surplusInference.js";
|
|
14
|
+
import { surplusInference, makeSurplusSelector, buildSurplusBody, buildExactPaymentHeader, parseSurplusResponse, usdcToBaseUnits, resolveSurplusPayTo, createSurplusSpendTracker, SurplusError, SURPLUS_URL, SURPLUS_PAYTO, SURPLUS_NETWORK_NAME, BASE_USDC, DEFAULT_MAX_USDC_PER_SESSION, } from "../inference/surplusInference.js";
|
|
15
15
|
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
16
16
|
const TEST_PK = "0x" + "ab".repeat(32);
|
|
17
17
|
function req(over = {}) {
|
|
@@ -33,7 +33,7 @@ function openAIResponse(body, init) {
|
|
|
33
33
|
}
|
|
34
34
|
const OK_BODY = {
|
|
35
35
|
choices: [{ message: { role: "assistant", content: "hello from surplus" } }],
|
|
36
|
-
model: "llama-3.3-70b",
|
|
36
|
+
model: "llama-3.3-70b-instruct",
|
|
37
37
|
usage: { prompt_tokens: 12, completion_tokens: 7, total_tokens: 19 },
|
|
38
38
|
};
|
|
39
39
|
// ─────────────────────────────────────────────────────────────────────────
|
|
@@ -219,9 +219,9 @@ describe("buildSurplusBody", () => {
|
|
|
219
219
|
{ role: "assistant", content: "hello" },
|
|
220
220
|
];
|
|
221
221
|
it("maps messages and forces non-streaming", () => {
|
|
222
|
-
const body = buildSurplusBody(msgs, undefined, "llama-3.3-70b");
|
|
222
|
+
const body = buildSurplusBody(msgs, undefined, "llama-3.3-70b-instruct");
|
|
223
223
|
expect(body).toMatchObject({
|
|
224
|
-
model: "llama-3.3-70b",
|
|
224
|
+
model: "llama-3.3-70b-instruct",
|
|
225
225
|
stream: false,
|
|
226
226
|
messages: [
|
|
227
227
|
{ role: "user", content: "hi" },
|
|
@@ -248,10 +248,10 @@ describe("buildSurplusBody", () => {
|
|
|
248
248
|
// ─────────────────────────────────────────────────────────────────────────
|
|
249
249
|
describe("parseSurplusResponse", () => {
|
|
250
250
|
it("maps a 200 OpenAI body to an InferenceResult (creditsCost = 0)", async () => {
|
|
251
|
-
const result = await parseSurplusResponse(openAIResponse(OK_BODY), "llama-3.3-70b");
|
|
251
|
+
const result = await parseSurplusResponse(openAIResponse(OK_BODY), "llama-3.3-70b-instruct");
|
|
252
252
|
expect(result).toEqual({
|
|
253
253
|
content: "hello from surplus",
|
|
254
|
-
model: "llama-3.3-70b",
|
|
254
|
+
model: "llama-3.3-70b-instruct",
|
|
255
255
|
provider: "surplus",
|
|
256
256
|
usage: { promptTokens: 12, completionTokens: 7, totalTokens: 19, creditsCost: 0 },
|
|
257
257
|
});
|
|
@@ -281,6 +281,14 @@ describe("parseSurplusResponse", () => {
|
|
|
281
281
|
const settle = Buffer.from(JSON.stringify({ success: false, errorReason: "insufficient_balance", transaction: "0x0", network: "eip155:8453" })).toString("base64");
|
|
282
282
|
await expect(parseSurplusResponse(openAIResponse(OK_BODY, { settleHeader: settle }), "m")).rejects.toMatchObject({ code: "settle_failed" });
|
|
283
283
|
});
|
|
284
|
+
it("also reads the non-prefixed PAYMENT-RESPONSE header (Surplus's form)", async () => {
|
|
285
|
+
const settle = Buffer.from(JSON.stringify({ success: false, errorReason: "x" })).toString("base64");
|
|
286
|
+
const res = new Response(JSON.stringify(OK_BODY), {
|
|
287
|
+
status: 200,
|
|
288
|
+
headers: { "Content-Type": "application/json", "PAYMENT-RESPONSE": settle },
|
|
289
|
+
});
|
|
290
|
+
await expect(parseSurplusResponse(res, "m")).rejects.toMatchObject({ code: "settle_failed" });
|
|
291
|
+
});
|
|
284
292
|
it("ignores an undecodable or successful settlement header", async () => {
|
|
285
293
|
const ok = Buffer.from(JSON.stringify({ success: true, transaction: "0xabc", network: "eip155:8453" })).toString("base64");
|
|
286
294
|
await expect(parseSurplusResponse(openAIResponse(OK_BODY, { settleHeader: ok }), "m")).resolves.toBeTruthy();
|
|
@@ -288,6 +296,44 @@ describe("parseSurplusResponse", () => {
|
|
|
288
296
|
});
|
|
289
297
|
});
|
|
290
298
|
// ─────────────────────────────────────────────────────────────────────────
|
|
299
|
+
describe("buildExactPaymentHeader — flat x402 payload Surplus accepts", () => {
|
|
300
|
+
// Stub signer (no viem needed here — signature-recovery correctness is proven
|
|
301
|
+
// in the gateway's surplusServerInference test, which shares this exact logic).
|
|
302
|
+
const account = {
|
|
303
|
+
address: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
|
304
|
+
signTypedData: vi.fn(async (_args) => ("0x" + "11".repeat(65))),
|
|
305
|
+
};
|
|
306
|
+
const identityGetAddress = (a) => a;
|
|
307
|
+
function decode(b64) {
|
|
308
|
+
return JSON.parse(Buffer.from(b64, "base64").toString("utf8"));
|
|
309
|
+
}
|
|
310
|
+
it("emits the FLAT shape with the short network name (not the nested v2 envelope)", async () => {
|
|
311
|
+
const decoded = decode(await buildExactPaymentHeader(account, identityGetAddress, req({ extra: { name: "USD Coin", version: "2" } })));
|
|
312
|
+
expect(decoded.x402Version).toBe(1);
|
|
313
|
+
expect(decoded.scheme).toBe("exact");
|
|
314
|
+
expect(decoded.network).toBe(SURPLUS_NETWORK_NAME); // "base", NOT "eip155:8453"
|
|
315
|
+
expect(decoded.network).toBe("base");
|
|
316
|
+
// The bug we fixed: 2.14.0 buried scheme/network under `accepted` + added `resource`.
|
|
317
|
+
expect(decoded).not.toHaveProperty("accepted");
|
|
318
|
+
expect(decoded).not.toHaveProperty("resource");
|
|
319
|
+
const payload = decoded.payload;
|
|
320
|
+
expect(payload.authorization.from).toBe(account.address);
|
|
321
|
+
expect(payload.authorization.value).toBe("3306");
|
|
322
|
+
expect(payload.signature).toMatch(/^0x[0-9a-f]+$/i);
|
|
323
|
+
});
|
|
324
|
+
it("signs the EIP-3009 TransferWithAuthorization with the USDC domain from `extra`", async () => {
|
|
325
|
+
account.signTypedData.mockClear();
|
|
326
|
+
await buildExactPaymentHeader(account, identityGetAddress, req({ extra: { name: "USD Coin", version: "2" } }));
|
|
327
|
+
const arg = account.signTypedData.mock.calls[0][0];
|
|
328
|
+
expect(arg.primaryType).toBe("TransferWithAuthorization");
|
|
329
|
+
expect(arg.domain).toMatchObject({ name: "USD Coin", version: "2", chainId: 8453 });
|
|
330
|
+
expect(arg.message.value).toBe(3306n); // bigint uint256
|
|
331
|
+
});
|
|
332
|
+
it("throws bad_quote when the EIP-712 token domain is missing", async () => {
|
|
333
|
+
await expect(buildExactPaymentHeader(account, identityGetAddress, req())).rejects.toThrow(expect.objectContaining({ code: "bad_quote" }));
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
291
337
|
describe("surplusInference — orchestration & gate (injected paymentFetch)", () => {
|
|
292
338
|
it("MANDATORY keyless gate: throws and makes NO call when privateKey is absent", async () => {
|
|
293
339
|
const spy = vi.fn();
|
|
@@ -301,7 +347,7 @@ describe("surplusInference — orchestration & gate (injected paymentFetch)", ()
|
|
|
301
347
|
const result = await surplusInference({
|
|
302
348
|
privateKey: TEST_PK,
|
|
303
349
|
messages: [{ role: "user", content: "hi" }],
|
|
304
|
-
options: { model: "llama-3.3-70b", maxTokens: 128 },
|
|
350
|
+
options: { model: "llama-3.3-70b-instruct", maxTokens: 128 },
|
|
305
351
|
paymentFetch: spy,
|
|
306
352
|
});
|
|
307
353
|
expect(result.provider).toBe("surplus");
|
|
@@ -310,7 +356,7 @@ describe("surplusInference — orchestration & gate (injected paymentFetch)", ()
|
|
|
310
356
|
expect(url).toBe(SURPLUS_URL);
|
|
311
357
|
expect(init.method).toBe("POST");
|
|
312
358
|
const sent = JSON.parse(init.body);
|
|
313
|
-
expect(sent).toMatchObject({ model: "llama-3.3-70b", max_tokens: 128, stream: false });
|
|
359
|
+
expect(sent).toMatchObject({ model: "llama-3.3-70b-instruct", max_tokens: 128, stream: false });
|
|
314
360
|
});
|
|
315
361
|
it("honors model precedence (options.model > config.model > default) and a baseUrl override", async () => {
|
|
316
362
|
const spy = vi.fn(async (_url, _init) => openAIResponse(OK_BODY));
|