@nookplot/runtime 0.5.147 → 0.5.148

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.
Files changed (140) hide show
  1. package/dist/__tests__/apiMarketplace.test.js +189 -2
  2. package/dist/__tests__/apiMarketplace.test.js.map +1 -1
  3. package/dist/__tests__/autonomous.dedup.test.js +11 -0
  4. package/dist/__tests__/autonomous.dedup.test.js.map +1 -1
  5. package/dist/__tests__/autonomous.getAvailableActions.test.js +13 -1
  6. package/dist/__tests__/autonomous.getAvailableActions.test.js.map +1 -1
  7. package/dist/__tests__/autonomous.goalBootstrap.test.d.ts +2 -0
  8. package/dist/__tests__/autonomous.goalBootstrap.test.d.ts.map +1 -0
  9. package/dist/__tests__/autonomous.goalBootstrap.test.js +148 -0
  10. package/dist/__tests__/autonomous.goalBootstrap.test.js.map +1 -0
  11. package/dist/__tests__/autonomous.miningTrack.test.d.ts +2 -0
  12. package/dist/__tests__/autonomous.miningTrack.test.d.ts.map +1 -0
  13. package/dist/__tests__/autonomous.miningTrack.test.js +38 -0
  14. package/dist/__tests__/autonomous.miningTrack.test.js.map +1 -0
  15. package/dist/__tests__/autonomous.payApi.test.d.ts +2 -0
  16. package/dist/__tests__/autonomous.payApi.test.d.ts.map +1 -0
  17. package/dist/__tests__/autonomous.payApi.test.js +73 -0
  18. package/dist/__tests__/autonomous.payApi.test.js.map +1 -0
  19. package/dist/__tests__/autonomous.workspaceOpportunity.test.d.ts +2 -0
  20. package/dist/__tests__/autonomous.workspaceOpportunity.test.d.ts.map +1 -0
  21. package/dist/__tests__/autonomous.workspaceOpportunity.test.js +212 -0
  22. package/dist/__tests__/autonomous.workspaceOpportunity.test.js.map +1 -0
  23. package/dist/__tests__/bdAgentPack.test.js +1 -1
  24. package/dist/__tests__/bdAgentPack.test.js.map +1 -1
  25. package/dist/__tests__/bounties.test.js +12 -0
  26. package/dist/__tests__/bounties.test.js.map +1 -1
  27. package/dist/__tests__/codegen-drift.test.js +3 -1
  28. package/dist/__tests__/codegen-drift.test.js.map +1 -1
  29. package/dist/__tests__/conversation/modelThresholdsParity.test.js +19 -14
  30. package/dist/__tests__/conversation/modelThresholdsParity.test.js.map +1 -1
  31. package/dist/__tests__/economy.surplusBranch.test.js +64 -0
  32. package/dist/__tests__/economy.surplusBranch.test.js.map +1 -1
  33. package/dist/__tests__/goalLoop.test.d.ts +2 -0
  34. package/dist/__tests__/goalLoop.test.d.ts.map +1 -0
  35. package/dist/__tests__/goalLoop.test.js +358 -0
  36. package/dist/__tests__/goalLoop.test.js.map +1 -0
  37. package/dist/__tests__/helpers/mockRuntime.d.ts.map +1 -1
  38. package/dist/__tests__/helpers/mockRuntime.js +7 -0
  39. package/dist/__tests__/helpers/mockRuntime.js.map +1 -1
  40. package/dist/__tests__/loadProfile.test.d.ts +8 -0
  41. package/dist/__tests__/loadProfile.test.d.ts.map +1 -0
  42. package/dist/__tests__/loadProfile.test.js +134 -0
  43. package/dist/__tests__/loadProfile.test.js.map +1 -0
  44. package/dist/__tests__/mining.test.d.ts +2 -0
  45. package/dist/__tests__/mining.test.d.ts.map +1 -0
  46. package/dist/__tests__/mining.test.js +306 -0
  47. package/dist/__tests__/mining.test.js.map +1 -0
  48. package/dist/__tests__/signalActionMap.test.d.ts +17 -0
  49. package/dist/__tests__/signalActionMap.test.d.ts.map +1 -0
  50. package/dist/__tests__/signalActionMap.test.js +165 -0
  51. package/dist/__tests__/signalActionMap.test.js.map +1 -0
  52. package/dist/__tests__/usdcBudget.test.d.ts +2 -0
  53. package/dist/__tests__/usdcBudget.test.d.ts.map +1 -0
  54. package/dist/__tests__/usdcBudget.test.js +128 -0
  55. package/dist/__tests__/usdcBudget.test.js.map +1 -0
  56. package/dist/__tests__/x402.test.d.ts +2 -0
  57. package/dist/__tests__/x402.test.d.ts.map +1 -0
  58. package/dist/__tests__/x402.test.js +117 -0
  59. package/dist/__tests__/x402.test.js.map +1 -0
  60. package/dist/actionCatalog.d.ts.map +1 -1
  61. package/dist/actionCatalog.generated.d.ts +1 -1
  62. package/dist/actionCatalog.generated.d.ts.map +1 -1
  63. package/dist/actionCatalog.generated.js +151 -26
  64. package/dist/actionCatalog.generated.js.map +1 -1
  65. package/dist/actionCatalog.js +0 -10
  66. package/dist/actionCatalog.js.map +1 -1
  67. package/dist/api-marketplace.d.ts +146 -0
  68. package/dist/api-marketplace.d.ts.map +1 -1
  69. package/dist/api-marketplace.js +218 -0
  70. package/dist/api-marketplace.js.map +1 -1
  71. package/dist/autonomous.d.ts +16 -9
  72. package/dist/autonomous.d.ts.map +1 -1
  73. package/dist/autonomous.js +276 -59
  74. package/dist/autonomous.js.map +1 -1
  75. package/dist/bounties.d.ts +8 -0
  76. package/dist/bounties.d.ts.map +1 -1
  77. package/dist/bounties.js +2 -0
  78. package/dist/bounties.js.map +1 -1
  79. package/dist/contentSafety.d.ts +1 -1
  80. package/dist/contentSafety.d.ts.map +1 -1
  81. package/dist/contentSafety.js +6 -2
  82. package/dist/contentSafety.js.map +1 -1
  83. package/dist/discovery.js +1 -1
  84. package/dist/discovery.js.map +1 -1
  85. package/dist/economy.d.ts +10 -15
  86. package/dist/economy.d.ts.map +1 -1
  87. package/dist/economy.js +16 -29
  88. package/dist/economy.js.map +1 -1
  89. package/dist/goal/goalLoop.d.ts +78 -0
  90. package/dist/goal/goalLoop.d.ts.map +1 -0
  91. package/dist/goal/goalLoop.js +388 -0
  92. package/dist/goal/goalLoop.js.map +1 -0
  93. package/dist/goal/goalPrompts.d.ts +20 -0
  94. package/dist/goal/goalPrompts.d.ts.map +1 -0
  95. package/dist/goal/goalPrompts.js +54 -0
  96. package/dist/goal/goalPrompts.js.map +1 -0
  97. package/dist/goal/types.d.ts +102 -0
  98. package/dist/goal/types.d.ts.map +1 -0
  99. package/dist/goal/types.js +7 -0
  100. package/dist/goal/types.js.map +1 -0
  101. package/dist/identity.d.ts +51 -0
  102. package/dist/identity.d.ts.map +1 -1
  103. package/dist/identity.js +50 -0
  104. package/dist/identity.js.map +1 -1
  105. package/dist/index.d.ts +18 -3
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +15 -2
  108. package/dist/index.js.map +1 -1
  109. package/dist/loadProfile.d.ts +100 -0
  110. package/dist/loadProfile.d.ts.map +1 -0
  111. package/dist/loadProfile.js +221 -0
  112. package/dist/loadProfile.js.map +1 -0
  113. package/dist/signalActionMap.d.ts.map +1 -1
  114. package/dist/signalActionMap.js +15 -5
  115. package/dist/signalActionMap.js.map +1 -1
  116. package/dist/swarms.d.ts +13 -0
  117. package/dist/swarms.d.ts.map +1 -1
  118. package/dist/swarms.js +4 -0
  119. package/dist/swarms.js.map +1 -1
  120. package/dist/tools.js +1 -1
  121. package/dist/tools.js.map +1 -1
  122. package/dist/types.d.ts +21 -0
  123. package/dist/types.d.ts.map +1 -1
  124. package/dist/usdcBudget.d.ts +90 -0
  125. package/dist/usdcBudget.d.ts.map +1 -0
  126. package/dist/usdcBudget.js +155 -0
  127. package/dist/usdcBudget.js.map +1 -0
  128. package/dist/x402.d.ts +69 -0
  129. package/dist/x402.d.ts.map +1 -0
  130. package/dist/x402.js +139 -0
  131. package/dist/x402.js.map +1 -0
  132. package/package.json +1 -1
  133. package/dist/__tests__/economy.frontierInference.test.d.ts +0 -2
  134. package/dist/__tests__/economy.frontierInference.test.d.ts.map +0 -1
  135. package/dist/__tests__/economy.frontierInference.test.js +0 -61
  136. package/dist/__tests__/economy.frontierInference.test.js.map +0 -1
  137. package/dist/frontierPass.d.ts +0 -30
  138. package/dist/frontierPass.d.ts.map +0 -1
  139. package/dist/frontierPass.js +0 -42
  140. package/dist/frontierPass.js.map +0 -1
@@ -1,61 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"economy.frontierInference.test.js","sourceRoot":"","sources":["../../src/__tests__/economy.frontierInference.test.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Shared `use_frontier_model` executor — used by BOTH the runtime's autonomous
3
- * loop (autonomous.ts) and the CLI dispatcher (agentLoop.ts), which have
4
- * parallel action-dispatch paths. Keeping the logic here prevents the two from
5
- * drifting on a money path.
6
- *
7
- * Flow (client-executed, non-custodial — the gateway can't run this):
8
- * 1. consume — claim ONE owner-reserved pass (gateway enforces reserved count
9
- * + rolling daily cap; a 409/429 surfaces as a thrown request error).
10
- * 2. run — one-shot Surplus completion paid by the agent's OWN client-signed
11
- * x402 key (economy.frontierInference).
12
- * 3. finalize — record the real settled spend; OR revert the pass to
13
- * 'reserved' on failure so it isn't wasted.
14
- *
15
- * @module frontierPass
16
- */
17
- import type { ConnectionManager } from "./connection.js";
18
- import type { EconomyManager } from "./economy.js";
19
- export interface FrontierPassResult {
20
- ok?: boolean;
21
- model?: string;
22
- answer?: string;
23
- spent_usdc?: string;
24
- error?: string;
25
- message?: string;
26
- /** Loose result object the agent reads as a tool result. */
27
- [key: string]: unknown;
28
- }
29
- export declare function runFrontierPass(connection: ConnectionManager, economy: EconomyManager, args: Record<string, unknown>, agentAddress?: string): Promise<FrontierPassResult>;
30
- //# sourceMappingURL=frontierPass.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frontierPass.d.ts","sourceRoot":"","sources":["../src/frontierPass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAyC7B"}
@@ -1,42 +0,0 @@
1
- export async function runFrontierPass(connection, economy, args, agentAddress) {
2
- const model = String(args.model ?? "").trim();
3
- const task = String(args.task ?? "").trim();
4
- const reason = typeof args.reason === "string" ? args.reason.slice(0, 280) : undefined;
5
- if (!model)
6
- return { error: "bad_model", message: "Pass a `model` (a Surplus model id)." };
7
- if (!task)
8
- return { error: "bad_task", message: "Pass the `task` — the full self-contained prompt for the frontier model." };
9
- if (!agentAddress)
10
- return { error: "frontier_unavailable", message: "Agent address unknown — cannot consume a pass." };
11
- // 1. Claim a reserved pass.
12
- let claim;
13
- try {
14
- claim = await connection.request("POST", `/v1/agents/${agentAddress}/inference-passes/consume`, { model, reason });
15
- }
16
- catch (err) {
17
- const msg = err instanceof Error ? err.message : String(err);
18
- return {
19
- error: "no_reserved_pass",
20
- message: `Couldn't claim a ${model} pass: ${msg}. Ask your owner to reserve passes in the agent's vault.`,
21
- };
22
- }
23
- // 2. Run the one-shot frontier completion (client-signed x402, own USDC).
24
- try {
25
- const out = await economy.frontierInference([{ role: "user", content: task }], { model });
26
- const costUsdcMicros = Number.isFinite(out.costUsdcMicros) ? out.costUsdcMicros : 0;
27
- // 3. Record the settled spend (best-effort — the inference already happened).
28
- await connection
29
- .request("POST", `/v1/agents/${agentAddress}/inference-passes/${claim.passId}/finalize`, { costUsdcMicros })
30
- .catch(() => { });
31
- return { ok: true, model, answer: out.content ?? "", spent_usdc: (costUsdcMicros / 1e6).toFixed(6) };
32
- }
33
- catch (err) {
34
- // x402 declined / timed out / provider error → return the pass to 'reserved'.
35
- await connection
36
- .request("POST", `/v1/agents/${agentAddress}/inference-passes/${claim.passId}/revert`, {})
37
- .catch(() => { });
38
- const msg = err instanceof Error ? err.message : String(err);
39
- return { error: "frontier_call_failed", message: `Frontier call failed (your pass was NOT spent): ${msg}` };
40
- }
41
- }
42
- //# sourceMappingURL=frontierPass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frontierPass.js","sourceRoot":"","sources":["../src/frontierPass.ts"],"names":[],"mappings":"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"}