@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.
Files changed (151) hide show
  1. package/dist/__tests__/apiMarketplace.test.js +2 -189
  2. package/dist/__tests__/apiMarketplace.test.js.map +1 -1
  3. package/dist/__tests__/autonomous.dedup.test.js +0 -11
  4. package/dist/__tests__/autonomous.dedup.test.js.map +1 -1
  5. package/dist/__tests__/autonomous.getAvailableActions.test.js +1 -13
  6. package/dist/__tests__/autonomous.getAvailableActions.test.js.map +1 -1
  7. package/dist/__tests__/bdAgentPack.test.js +1 -1
  8. package/dist/__tests__/bdAgentPack.test.js.map +1 -1
  9. package/dist/__tests__/bounties.test.js +0 -12
  10. package/dist/__tests__/bounties.test.js.map +1 -1
  11. package/dist/__tests__/codegen-drift.test.js +1 -3
  12. package/dist/__tests__/codegen-drift.test.js.map +1 -1
  13. package/dist/__tests__/conversation/modelThresholdsParity.test.js +14 -19
  14. package/dist/__tests__/conversation/modelThresholdsParity.test.js.map +1 -1
  15. package/dist/__tests__/economy.frontierInference.test.d.ts +2 -0
  16. package/dist/__tests__/economy.frontierInference.test.d.ts.map +1 -0
  17. package/dist/__tests__/economy.frontierInference.test.js +61 -0
  18. package/dist/__tests__/economy.frontierInference.test.js.map +1 -0
  19. package/dist/__tests__/economy.surplusBranch.test.js +2 -66
  20. package/dist/__tests__/economy.surplusBranch.test.js.map +1 -1
  21. package/dist/__tests__/helpers/mockRuntime.d.ts.map +1 -1
  22. package/dist/__tests__/helpers/mockRuntime.js +0 -7
  23. package/dist/__tests__/helpers/mockRuntime.js.map +1 -1
  24. package/dist/__tests__/pack.test.js +14 -14
  25. package/dist/__tests__/packLoader.test.js +4 -4
  26. package/dist/__tests__/presetLoader.test.js +42 -42
  27. package/dist/__tests__/sandbox.test.js +24 -24
  28. package/dist/__tests__/surplusInference.test.js +54 -8
  29. package/dist/__tests__/surplusInference.test.js.map +1 -1
  30. package/dist/actionCatalog.d.ts.map +1 -1
  31. package/dist/actionCatalog.generated.d.ts +1 -1
  32. package/dist/actionCatalog.generated.d.ts.map +1 -1
  33. package/dist/actionCatalog.generated.js +26 -151
  34. package/dist/actionCatalog.generated.js.map +1 -1
  35. package/dist/actionCatalog.js +10 -0
  36. package/dist/actionCatalog.js.map +1 -1
  37. package/dist/api-marketplace.d.ts +0 -146
  38. package/dist/api-marketplace.d.ts.map +1 -1
  39. package/dist/api-marketplace.js +0 -218
  40. package/dist/api-marketplace.js.map +1 -1
  41. package/dist/autonomous.d.ts +9 -16
  42. package/dist/autonomous.d.ts.map +1 -1
  43. package/dist/autonomous.js +59 -276
  44. package/dist/autonomous.js.map +1 -1
  45. package/dist/bounties.d.ts +0 -8
  46. package/dist/bounties.d.ts.map +1 -1
  47. package/dist/bounties.js +0 -2
  48. package/dist/bounties.js.map +1 -1
  49. package/dist/contentSafety.d.ts +1 -1
  50. package/dist/contentSafety.d.ts.map +1 -1
  51. package/dist/contentSafety.js +2 -6
  52. package/dist/contentSafety.js.map +1 -1
  53. package/dist/conversation/modelLimits.js +17 -17
  54. package/dist/discovery.js +1 -1
  55. package/dist/discovery.js.map +1 -1
  56. package/dist/economy.d.ts +15 -10
  57. package/dist/economy.d.ts.map +1 -1
  58. package/dist/economy.js +29 -16
  59. package/dist/economy.js.map +1 -1
  60. package/dist/frontierPass.d.ts +30 -0
  61. package/dist/frontierPass.d.ts.map +1 -0
  62. package/dist/frontierPass.js +42 -0
  63. package/dist/frontierPass.js.map +1 -0
  64. package/dist/identity.d.ts +0 -51
  65. package/dist/identity.d.ts.map +1 -1
  66. package/dist/identity.js +0 -50
  67. package/dist/identity.js.map +1 -1
  68. package/dist/index.d.ts +3 -18
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +2 -15
  71. package/dist/index.js.map +1 -1
  72. package/dist/inference/surplusInference.d.ts +29 -1
  73. package/dist/inference/surplusInference.d.ts.map +1 -1
  74. package/dist/inference/surplusInference.js +132 -15
  75. package/dist/inference/surplusInference.js.map +1 -1
  76. package/dist/signalActionMap.d.ts.map +1 -1
  77. package/dist/signalActionMap.js +5 -15
  78. package/dist/signalActionMap.js.map +1 -1
  79. package/dist/swarms.d.ts +0 -13
  80. package/dist/swarms.d.ts.map +1 -1
  81. package/dist/swarms.js +0 -4
  82. package/dist/swarms.js.map +1 -1
  83. package/dist/tools.js +1 -1
  84. package/dist/tools.js.map +1 -1
  85. package/dist/types.d.ts +1 -22
  86. package/dist/types.d.ts.map +1 -1
  87. package/package.json +75 -75
  88. package/dist/__tests__/autonomous.goalBootstrap.test.d.ts +0 -2
  89. package/dist/__tests__/autonomous.goalBootstrap.test.d.ts.map +0 -1
  90. package/dist/__tests__/autonomous.goalBootstrap.test.js +0 -148
  91. package/dist/__tests__/autonomous.goalBootstrap.test.js.map +0 -1
  92. package/dist/__tests__/autonomous.miningTrack.test.d.ts +0 -2
  93. package/dist/__tests__/autonomous.miningTrack.test.d.ts.map +0 -1
  94. package/dist/__tests__/autonomous.miningTrack.test.js +0 -38
  95. package/dist/__tests__/autonomous.miningTrack.test.js.map +0 -1
  96. package/dist/__tests__/autonomous.payApi.test.d.ts +0 -2
  97. package/dist/__tests__/autonomous.payApi.test.d.ts.map +0 -1
  98. package/dist/__tests__/autonomous.payApi.test.js +0 -73
  99. package/dist/__tests__/autonomous.payApi.test.js.map +0 -1
  100. package/dist/__tests__/autonomous.workspaceOpportunity.test.d.ts +0 -2
  101. package/dist/__tests__/autonomous.workspaceOpportunity.test.d.ts.map +0 -1
  102. package/dist/__tests__/autonomous.workspaceOpportunity.test.js +0 -212
  103. package/dist/__tests__/autonomous.workspaceOpportunity.test.js.map +0 -1
  104. package/dist/__tests__/goalLoop.test.d.ts +0 -2
  105. package/dist/__tests__/goalLoop.test.d.ts.map +0 -1
  106. package/dist/__tests__/goalLoop.test.js +0 -358
  107. package/dist/__tests__/goalLoop.test.js.map +0 -1
  108. package/dist/__tests__/loadProfile.test.d.ts +0 -8
  109. package/dist/__tests__/loadProfile.test.d.ts.map +0 -1
  110. package/dist/__tests__/loadProfile.test.js +0 -134
  111. package/dist/__tests__/loadProfile.test.js.map +0 -1
  112. package/dist/__tests__/mining.test.d.ts +0 -2
  113. package/dist/__tests__/mining.test.d.ts.map +0 -1
  114. package/dist/__tests__/mining.test.js +0 -306
  115. package/dist/__tests__/mining.test.js.map +0 -1
  116. package/dist/__tests__/signalActionMap.test.d.ts +0 -17
  117. package/dist/__tests__/signalActionMap.test.d.ts.map +0 -1
  118. package/dist/__tests__/signalActionMap.test.js +0 -165
  119. package/dist/__tests__/signalActionMap.test.js.map +0 -1
  120. package/dist/__tests__/usdcBudget.test.d.ts +0 -2
  121. package/dist/__tests__/usdcBudget.test.d.ts.map +0 -1
  122. package/dist/__tests__/usdcBudget.test.js +0 -128
  123. package/dist/__tests__/usdcBudget.test.js.map +0 -1
  124. package/dist/__tests__/x402.test.d.ts +0 -2
  125. package/dist/__tests__/x402.test.d.ts.map +0 -1
  126. package/dist/__tests__/x402.test.js +0 -117
  127. package/dist/__tests__/x402.test.js.map +0 -1
  128. package/dist/goal/goalLoop.d.ts +0 -78
  129. package/dist/goal/goalLoop.d.ts.map +0 -1
  130. package/dist/goal/goalLoop.js +0 -388
  131. package/dist/goal/goalLoop.js.map +0 -1
  132. package/dist/goal/goalPrompts.d.ts +0 -20
  133. package/dist/goal/goalPrompts.d.ts.map +0 -1
  134. package/dist/goal/goalPrompts.js +0 -54
  135. package/dist/goal/goalPrompts.js.map +0 -1
  136. package/dist/goal/types.d.ts +0 -102
  137. package/dist/goal/types.d.ts.map +0 -1
  138. package/dist/goal/types.js +0 -7
  139. package/dist/goal/types.js.map +0 -1
  140. package/dist/loadProfile.d.ts +0 -100
  141. package/dist/loadProfile.d.ts.map +0 -1
  142. package/dist/loadProfile.js +0 -221
  143. package/dist/loadProfile.js.map +0 -1
  144. package/dist/usdcBudget.d.ts +0 -90
  145. package/dist/usdcBudget.d.ts.map +0 -1
  146. package/dist/usdcBudget.js +0 -155
  147. package/dist/usdcBudget.js.map +0 -1
  148. package/dist/x402.d.ts +0 -69
  149. package/dist/x402.d.ts.map +0 -1
  150. package/dist/x402.js +0 -139
  151. package/dist/x402.js.map +0 -1
@@ -1,128 +0,0 @@
1
- /**
2
- * Unit tests for the UsdcBudget primitive (the hard-stop x402 spend cap).
3
- */
4
- import { describe, it, expect } from "vitest";
5
- import { UsdcBudget, createUsdcBudget, parseUsdcToBaseUnits, formatUsdc, DEFAULT_DAILY_USDC_CAP_BASE_UNITS, } from "../usdcBudget.js";
6
- const USDC = 1000000n; // 1 USDC in base units
7
- describe("parseUsdcToBaseUnits", () => {
8
- it("parses whole and fractional USDC", () => {
9
- expect(parseUsdcToBaseUnits("10")).toBe(10n * USDC);
10
- expect(parseUsdcToBaseUnits("0.5")).toBe(500000n);
11
- expect(parseUsdcToBaseUnits("1.234567")).toBe(1234567n);
12
- });
13
- it("truncates beyond 6 decimals", () => {
14
- expect(parseUsdcToBaseUnits("1.2345678")).toBe(1234567n);
15
- });
16
- it("returns 0n (unlimited) for empty / invalid input", () => {
17
- expect(parseUsdcToBaseUnits(undefined)).toBe(0n);
18
- expect(parseUsdcToBaseUnits("")).toBe(0n);
19
- expect(parseUsdcToBaseUnits("abc")).toBe(0n);
20
- expect(parseUsdcToBaseUnits("-5")).toBe(0n);
21
- });
22
- });
23
- describe("formatUsdc", () => {
24
- it("formats base units to a $ string", () => {
25
- expect(formatUsdc(10n * USDC)).toBe("$10");
26
- expect(formatUsdc(500000n)).toBe("$0.5");
27
- expect(formatUsdc(1230000n)).toBe("$1.23");
28
- });
29
- });
30
- describe("UsdcBudget", () => {
31
- it("unlimited (cap 0n) never blocks or exhausts", () => {
32
- const b = new UsdcBudget({ dailyCapBaseUnits: 0n });
33
- expect(b.check(1000n * USDC).allowed).toBe(true);
34
- expect(b.maxForNextCall()).toBeUndefined();
35
- b.record(1000n * USDC);
36
- expect(b.isExhausted()).toBe(false);
37
- expect(b.remaining()).toBe(-1n);
38
- });
39
- it("enforces the daily cap with zero overshoot via maxForNextCall", () => {
40
- const b = new UsdcBudget({ dailyCapBaseUnits: 2n * USDC });
41
- expect(b.maxForNextCall()).toBe(2n * USDC);
42
- // first $1.50 call fits
43
- expect(b.check(1500000n).allowed).toBe(true);
44
- b.record(1500000n);
45
- // remaining is $0.50 → a second $1.50 call is refused by the ceiling
46
- expect(b.maxForNextCall()).toBe(500000n);
47
- expect(b.check(1500000n).allowed).toBe(false);
48
- expect(b.remaining()).toBe(500000n);
49
- });
50
- it("isExhausted flips once the cap is fully consumed", () => {
51
- const b = new UsdcBudget({ dailyCapBaseUnits: 1n * USDC });
52
- expect(b.isExhausted()).toBe(false);
53
- b.record(1n * USDC);
54
- expect(b.isExhausted()).toBe(true);
55
- expect(b.maxForNextCall()).toBe(0n);
56
- });
57
- it("honors a per-call ceiling independent of the daily cap", () => {
58
- const b = new UsdcBudget({ dailyCapBaseUnits: 100n * USDC, perCallCapBaseUnits: 2n * USDC });
59
- expect(b.check(3n * USDC).allowed).toBe(false); // exceeds per-call ceiling
60
- expect(b.check(2n * USDC).allowed).toBe(true);
61
- // maxForNextCall = min(perCall 2, remaining 100) = 2
62
- expect(b.maxForNextCall()).toBe(2n * USDC);
63
- });
64
- it("rolls the window after the period elapses", () => {
65
- let t = 1_000_000;
66
- const b = new UsdcBudget({ dailyCapBaseUnits: 1n * USDC, windowMs: 1000, now: () => t });
67
- b.record(1n * USDC);
68
- expect(b.isExhausted()).toBe(true);
69
- t += 1001; // advance past the window
70
- expect(b.isExhausted()).toBe(false);
71
- expect(b.spent).toBe(0n);
72
- });
73
- });
74
- describe("createUsdcBudget", () => {
75
- it("defaults to the conservative daily cap when nothing is configured", () => {
76
- const prevDaily = process.env.X402_DAILY_USDC_CAP;
77
- const prevPer = process.env.X402_PER_CALL_USDC_CAP;
78
- delete process.env.X402_DAILY_USDC_CAP;
79
- delete process.env.X402_PER_CALL_USDC_CAP;
80
- try {
81
- const b = createUsdcBudget();
82
- expect(b.dailyCapBaseUnits).toBe(DEFAULT_DAILY_USDC_CAP_BASE_UNITS);
83
- expect(b.perCallCapBaseUnits).toBe(0n);
84
- }
85
- finally {
86
- if (prevDaily !== undefined)
87
- process.env.X402_DAILY_USDC_CAP = prevDaily;
88
- if (prevPer !== undefined)
89
- process.env.X402_PER_CALL_USDC_CAP = prevPer;
90
- }
91
- });
92
- it("reads caps from env (USDC display units)", () => {
93
- const prevDaily = process.env.X402_DAILY_USDC_CAP;
94
- const prevPer = process.env.X402_PER_CALL_USDC_CAP;
95
- process.env.X402_DAILY_USDC_CAP = "25";
96
- process.env.X402_PER_CALL_USDC_CAP = "0.5";
97
- try {
98
- const b = createUsdcBudget();
99
- expect(b.dailyCapBaseUnits).toBe(25n * USDC);
100
- expect(b.perCallCapBaseUnits).toBe(500000n);
101
- }
102
- finally {
103
- if (prevDaily !== undefined)
104
- process.env.X402_DAILY_USDC_CAP = prevDaily;
105
- else
106
- delete process.env.X402_DAILY_USDC_CAP;
107
- if (prevPer !== undefined)
108
- process.env.X402_PER_CALL_USDC_CAP = prevPer;
109
- else
110
- delete process.env.X402_PER_CALL_USDC_CAP;
111
- }
112
- });
113
- it("explicit options win over env", () => {
114
- const prev = process.env.X402_DAILY_USDC_CAP;
115
- process.env.X402_DAILY_USDC_CAP = "25";
116
- try {
117
- const b = createUsdcBudget({ dailyCapBaseUnits: 0n });
118
- expect(b.dailyCapBaseUnits).toBe(0n); // explicit unlimited beats env
119
- }
120
- finally {
121
- if (prev !== undefined)
122
- process.env.X402_DAILY_USDC_CAP = prev;
123
- else
124
- delete process.env.X402_DAILY_USDC_CAP;
125
- }
126
- });
127
- });
128
- //# sourceMappingURL=usdcBudget.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usdcBudget.test.js","sourceRoot":"","sources":["../../src/__tests__/usdcBudget.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=x402.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"x402.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/x402.test.ts"],"names":[],"mappings":""}
@@ -1,117 +0,0 @@
1
- import { describe, it, expect, vi, afterEach } from "vitest";
2
- import { ethers } from "ethers";
3
- import { X402Manager } from "../x402.js";
4
- const SPLITTER = "0x5555555555555555555555555555555555555555";
5
- const USDC = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
6
- const GATEWAY = "https://gw.example.com";
7
- const RECEIVE_TYPES = {
8
- ReceiveWithAuthorization: [
9
- { name: "from", type: "address" },
10
- { name: "to", type: "address" },
11
- { name: "value", type: "uint256" },
12
- { name: "validAfter", type: "uint256" },
13
- { name: "validBefore", type: "uint256" },
14
- { name: "nonce", type: "bytes32" },
15
- ],
16
- };
17
- function challenge() {
18
- return {
19
- x402Version: 2,
20
- accepts: [
21
- {
22
- scheme: "exact",
23
- network: "eip155:8453",
24
- asset: USDC,
25
- payTo: SPLITTER,
26
- maxAmountRequired: "1000000",
27
- maxTimeoutSeconds: 600,
28
- extra: { listingId: "42" },
29
- },
30
- ],
31
- };
32
- }
33
- function res(status, body) {
34
- return new Response(typeof body === "string" ? body : JSON.stringify(body), {
35
- status,
36
- headers: { "content-type": "application/json" },
37
- });
38
- }
39
- describe("X402Manager.payAndCall", () => {
40
- afterEach(() => vi.unstubAllGlobals());
41
- it("probes, signs EIP-3009, and re-sends a gateway-recoverable authorization", async () => {
42
- const wallet = ethers.Wallet.createRandom();
43
- const fetchFn = vi
44
- .fn()
45
- .mockResolvedValueOnce(res(402, challenge()))
46
- .mockResolvedValueOnce(res(200, { ok: "upstream" }));
47
- vi.stubGlobal("fetch", fetchFn);
48
- const mgr = new X402Manager(GATEWAY);
49
- const result = await mgr.payAndCall({ listingId: 42, path: "chat", method: "POST", body: { q: "hi" } }, wallet);
50
- expect(result.paid).toBe(true);
51
- expect(result.status).toBe(200);
52
- expect(result.body).toEqual({ ok: "upstream" });
53
- expect(fetchFn).toHaveBeenCalledTimes(2);
54
- expect(fetchFn.mock.calls[0][0]).toBe(`${GATEWAY}/v1/api-x402/42/chat`);
55
- // The re-send carries the encoded payment header.
56
- const init2 = fetchFn.mock.calls[1][1];
57
- const header = init2.headers["PAYMENT-SIGNATURE"];
58
- expect(header).toBeTruthy();
59
- // Decode it and confirm the EIP-3009 signature recovers to the buyer — i.e.
60
- // exactly what the gateway facilitator's verify() will check.
61
- const decoded = JSON.parse(Buffer.from(header, "base64").toString("utf8"));
62
- const auth = decoded.payload.authorization;
63
- expect(auth.from).toBe(wallet.address);
64
- expect(auth.to).toBe(SPLITTER);
65
- expect(auth.value).toBe("1000000");
66
- const recovered = ethers.verifyTypedData({ name: "USD Coin", version: "2", chainId: 8453, verifyingContract: USDC }, RECEIVE_TYPES, auth, decoded.payload.signature);
67
- expect(recovered).toBe(wallet.address);
68
- });
69
- it("returns immediately (no signing) when the gateway does not answer 402", async () => {
70
- const wallet = ethers.Wallet.createRandom();
71
- const fetchFn = vi.fn().mockResolvedValueOnce(res(404, { error: "listing not available for x402" }));
72
- vi.stubGlobal("fetch", fetchFn);
73
- const result = await new X402Manager(GATEWAY).payAndCall({ listingId: 9, path: "x" }, wallet);
74
- expect(result.paid).toBe(false);
75
- expect(result.status).toBe(404);
76
- expect(fetchFn).toHaveBeenCalledTimes(1);
77
- });
78
- it("throws when the 402 offers no supported 'exact' scheme", async () => {
79
- const wallet = ethers.Wallet.createRandom();
80
- const fetchFn = vi.fn().mockResolvedValueOnce(res(402, { x402Version: 2, accepts: [{ scheme: "weird" }] }));
81
- vi.stubGlobal("fetch", fetchFn);
82
- await expect(new X402Manager(GATEWAY).payAndCall({ listingId: 1, path: "x" }, wallet)).rejects.toThrow(/exact/);
83
- });
84
- it("aborts BEFORE signing when the quote exceeds maxAmountBaseUnits (spend cap)", async () => {
85
- const wallet = ethers.Wallet.createRandom();
86
- const fetchFn = vi.fn().mockResolvedValueOnce(res(402, challenge())); // quote = 1_000_000
87
- vi.stubGlobal("fetch", fetchFn);
88
- await expect(new X402Manager(GATEWAY).payAndCall({ listingId: 42, path: "x", maxAmountBaseUnits: 500000n }, // ceiling below quote
89
- wallet)).rejects.toThrow(/spend blocked/i);
90
- // Only the probe ran — no payment was signed or submitted.
91
- expect(fetchFn).toHaveBeenCalledTimes(1);
92
- });
93
- it("returns amountPaidBaseUnits on a paid call within the ceiling", async () => {
94
- const wallet = ethers.Wallet.createRandom();
95
- const fetchFn = vi.fn().mockResolvedValueOnce(res(402, challenge())).mockResolvedValueOnce(res(200, {}));
96
- vi.stubGlobal("fetch", fetchFn);
97
- const result = await new X402Manager(GATEWAY).payAndCall({ listingId: 42, path: "x", maxAmountBaseUnits: 1000000n }, // == quote, allowed
98
- wallet);
99
- expect(result.paid).toBe(true);
100
- expect(result.amountPaidBaseUnits).toBe("1000000");
101
- expect(fetchFn).toHaveBeenCalledTimes(2);
102
- });
103
- it("derives chainId from the 402 network and honors an override", async () => {
104
- const wallet = ethers.Wallet.createRandom();
105
- const ch = challenge();
106
- ch.accepts[0].network = "base-sepolia";
107
- const fetchFn = vi.fn().mockResolvedValueOnce(res(402, ch)).mockResolvedValueOnce(res(200, {}));
108
- vi.stubGlobal("fetch", fetchFn);
109
- await new X402Manager(GATEWAY).payAndCall({ listingId: 42, path: "x" }, wallet);
110
- const header = fetchFn.mock.calls[1][1].headers;
111
- const decoded = JSON.parse(Buffer.from(header["PAYMENT-SIGNATURE"], "base64").toString("utf8"));
112
- // Signature recovers only under chainId 84532 (base-sepolia).
113
- const recovered = ethers.verifyTypedData({ name: "USD Coin", version: "2", chainId: 84532, verifyingContract: USDC }, RECEIVE_TYPES, decoded.payload.authorization, decoded.payload.signature);
114
- expect(recovered).toBe(wallet.address);
115
- });
116
- });
117
- //# sourceMappingURL=x402.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"x402.test.js","sourceRoot":"","sources":["../../src/__tests__/x402.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,QAAQ,GAAG,4CAA4C,CAAC;AAC9D,MAAM,IAAI,GAAG,4CAA4C,CAAC;AAC1D,MAAM,OAAO,GAAG,wBAAwB,CAAC;AAEzC,MAAM,aAAa,GAAG;IACpB,wBAAwB,EAAE;QACxB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;QACjC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;QAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;QAClC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;QACvC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;QACxC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;KACnC;CACF,CAAC;AAEF,SAAS,SAAS;IAChB,OAAO;QACL,WAAW,EAAE,CAAC;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,aAAa;gBACtB,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,QAAQ;gBACf,iBAAiB,EAAE,SAAS;gBAC5B,iBAAiB,EAAE,GAAG;gBACtB,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;aAC3B;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,MAAc,EAAE,IAAa;IACxC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QAC1E,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEvC,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,EAAE;aACf,EAAE,EAAE;aACJ,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;aAC5C,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAEhH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,sBAAsB,CAAC,CAAC;QAExE,kDAAkD;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAC;QACtD,MAAM,MAAM,GAAI,KAAK,CAAC,OAAkC,CAAC,mBAAmB,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAE5B,4EAA4E;QAC5E,8DAA8D;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CACtC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAC1E,aAAa,EACb,IAAI,EACJ,OAAO,CAAC,OAAO,CAAC,SAAS,CAC1B,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC,CAAC;QACrG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5G,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAC1F,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,MAAM,CACV,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CACjC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAQ,EAAE,EAAE,sBAAsB;QAClF,MAAM,CACP,CACF,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACpC,2DAA2D;QAC3D,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACzG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CACtD,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,QAAU,EAAE,EAAE,oBAAoB;QAClF,MAAM,CACP,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;QACvB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC;QACvC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAChG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAChF,MAAM,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAiB,CAAC,OAAiC,CAAC;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAChG,8DAA8D;QAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CACtC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAC3E,aAAa,EACb,OAAO,CAAC,OAAO,CAAC,aAAa,EAC7B,OAAO,CAAC,OAAO,CAAC,SAAS,CAC1B,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,78 +0,0 @@
1
- /**
2
- * GoalLoop — the L3 step-by-step execution engine for goal-driven agents.
3
- *
4
- * Invoked by `AutonomousAgent.bootstrapGoal()` when an agent was forged
5
- * with `initial_goal` set (typically via an L1 swarm suggestion).
6
- *
7
- * The loop:
8
- * 1. Asks the LLM "what's the next step?" given the goal + recent history
9
- * 2. Parses a JSON decision from the response
10
- * 3. Executes or records the decision
11
- * 4. Checks termination conditions (complete, budget, stuck, capability gap)
12
- *
13
- * Design choices (see ROADMAP_orchestrator-swarm-autodeploy.md §3):
14
- * - Atomic goals, no project decomposition (v1 simplification)
15
- * - Budget is soft — the real gate is owner NOOK balance, not the goal cap
16
- * - 3 reformulations of the same step → blocked_stuck
17
- * - 3 consecutive no-ops → treat as complete (the agent has nothing else to do)
18
- *
19
- * @module goal/goalLoop
20
- */
21
- import type { GoalAction, GoalResult, GoalLoopOptions } from "./types.js";
22
- export declare class GoalLoop {
23
- private readonly runtime;
24
- private readonly goal;
25
- private readonly budgetNook;
26
- private readonly maxSteps;
27
- private readonly maxNoops;
28
- private readonly maxReformulations;
29
- private readonly verbose;
30
- private readonly inferenceCall;
31
- private readonly parentSwarmId;
32
- private recentSteps;
33
- private spentNook;
34
- private stepsExecuted;
35
- private toolSignatures;
36
- private doomLoopTriggers;
37
- private doomLoopNote;
38
- constructor(opts: GoalLoopOptions);
39
- /**
40
- * Run the loop to completion. Returns exactly one of four outcomes.
41
- * Never throws for normal termination — only throws for unrecoverable
42
- * infrastructure errors (e.g. runtime not connected).
43
- */
44
- run(): Promise<GoalResult>;
45
- private askLLMForNextAction;
46
- /**
47
- * Default inference caller — uses the runtime's inference API if available,
48
- * otherwise returns a noop response. Consumers with custom inference wiring
49
- * should pass `inferenceCall` in GoalLoopOptions.
50
- */
51
- private defaultInferenceCall;
52
- /**
53
- * Execute one action via the runtime's action dispatch pipeline.
54
- *
55
- * All actions go through `POST /v1/actions/execute` which handles both
56
- * off-chain (direct) and on-chain (sign-required) action types. This
57
- * preserves the CLAUDE.md Rule 5 invariant that all on-chain state
58
- * changes go through prepare → sign → relay.
59
- */
60
- private executeAction;
61
- private recordStepRemotely;
62
- /**
63
- * Treat the current state as a completed goal. Used when the LLM stalls
64
- * or the max step count is exceeded. Produces a summary artifact from
65
- * the recent step history so the user has something to review.
66
- */
67
- private finalizeFallback;
68
- }
69
- /**
70
- * Parse a goal action from an LLM response. Tries to extract the first
71
- * `{...}` JSON block from the content and coerce it into a GoalAction.
72
- *
73
- * Exported for unit testing.
74
- */
75
- export declare function parseGoalAction(content: string): (GoalAction & {
76
- description: string;
77
- }) | null;
78
- //# sourceMappingURL=goalLoop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"goalLoop.d.ts","sourceRoot":"","sources":["../../src/goal/goalLoop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,eAAe,EAEhB,MAAM,YAAY,CAAC;AAqBpB,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgD;IAC9E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAAuB;gBAE/B,IAAI,EAAE,eAAe;IAYjC;;;;OAIG;IACG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;YAyIlB,mBAAmB;IA4BjC;;;;OAIG;YACW,oBAAoB;IA6BlC;;;;;;;OAOG;YACW,aAAa;YAyDb,kBAAkB;IAuBhC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CA6BzB;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,UAAU,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAgD9F"}