clawd-automaton 0.1.0

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 (228) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +178 -0
  3. package/constitution.md +25 -0
  4. package/dist/__tests__/heartbeat.test.d.ts +7 -0
  5. package/dist/__tests__/heartbeat.test.d.ts.map +1 -0
  6. package/dist/__tests__/heartbeat.test.js +125 -0
  7. package/dist/__tests__/heartbeat.test.js.map +1 -0
  8. package/dist/__tests__/loop.test.d.ts +7 -0
  9. package/dist/__tests__/loop.test.d.ts.map +1 -0
  10. package/dist/__tests__/loop.test.js +150 -0
  11. package/dist/__tests__/loop.test.js.map +1 -0
  12. package/dist/__tests__/mocks.d.ts +72 -0
  13. package/dist/__tests__/mocks.d.ts.map +1 -0
  14. package/dist/__tests__/mocks.js +197 -0
  15. package/dist/__tests__/mocks.js.map +1 -0
  16. package/dist/agent/context.d.ts +26 -0
  17. package/dist/agent/context.d.ts.map +1 -0
  18. package/dist/agent/context.js +115 -0
  19. package/dist/agent/context.js.map +1 -0
  20. package/dist/agent/injection-defense.d.ts +13 -0
  21. package/dist/agent/injection-defense.d.ts.map +1 -0
  22. package/dist/agent/injection-defense.js +236 -0
  23. package/dist/agent/injection-defense.js.map +1 -0
  24. package/dist/agent/loop.d.ts +25 -0
  25. package/dist/agent/loop.d.ts.map +1 -0
  26. package/dist/agent/loop.js +263 -0
  27. package/dist/agent/loop.js.map +1 -0
  28. package/dist/agent/system-prompt.d.ts +30 -0
  29. package/dist/agent/system-prompt.d.ts.map +1 -0
  30. package/dist/agent/system-prompt.js +241 -0
  31. package/dist/agent/system-prompt.js.map +1 -0
  32. package/dist/agent/tools.d.ts +17 -0
  33. package/dist/agent/tools.d.ts.map +1 -0
  34. package/dist/agent/tools.js +1413 -0
  35. package/dist/agent/tools.js.map +1 -0
  36. package/dist/clawd/backroom.d.ts +54 -0
  37. package/dist/clawd/backroom.d.ts.map +1 -0
  38. package/dist/clawd/backroom.js +130 -0
  39. package/dist/clawd/backroom.js.map +1 -0
  40. package/dist/clawd/client.d.ts +16 -0
  41. package/dist/clawd/client.d.ts.map +1 -0
  42. package/dist/clawd/client.js +256 -0
  43. package/dist/clawd/client.js.map +1 -0
  44. package/dist/clawd/convex-client.d.ts +130 -0
  45. package/dist/clawd/convex-client.d.ts.map +1 -0
  46. package/dist/clawd/convex-client.js +118 -0
  47. package/dist/clawd/convex-client.js.map +1 -0
  48. package/dist/clawd/credits.d.ts +24 -0
  49. package/dist/clawd/credits.d.ts.map +1 -0
  50. package/dist/clawd/credits.js +64 -0
  51. package/dist/clawd/credits.js.map +1 -0
  52. package/dist/clawd/deepseek-inference.d.ts +40 -0
  53. package/dist/clawd/deepseek-inference.d.ts.map +1 -0
  54. package/dist/clawd/deepseek-inference.js +143 -0
  55. package/dist/clawd/deepseek-inference.js.map +1 -0
  56. package/dist/clawd/inference.d.ts +17 -0
  57. package/dist/clawd/inference.d.ts.map +1 -0
  58. package/dist/clawd/inference.js +114 -0
  59. package/dist/clawd/inference.js.map +1 -0
  60. package/dist/clawd/x402.d.ts +48 -0
  61. package/dist/clawd/x402.d.ts.map +1 -0
  62. package/dist/clawd/x402.js +350 -0
  63. package/dist/clawd/x402.js.map +1 -0
  64. package/dist/config.d.ts +36 -0
  65. package/dist/config.d.ts.map +1 -0
  66. package/dist/config.js +84 -0
  67. package/dist/config.js.map +1 -0
  68. package/dist/git/state-versioning.d.ts +39 -0
  69. package/dist/git/state-versioning.d.ts.map +1 -0
  70. package/dist/git/state-versioning.js +93 -0
  71. package/dist/git/state-versioning.js.map +1 -0
  72. package/dist/git/tools.d.ts +40 -0
  73. package/dist/git/tools.d.ts.map +1 -0
  74. package/dist/git/tools.js +140 -0
  75. package/dist/git/tools.js.map +1 -0
  76. package/dist/heartbeat/config.d.ts +23 -0
  77. package/dist/heartbeat/config.d.ts.map +1 -0
  78. package/dist/heartbeat/config.js +156 -0
  79. package/dist/heartbeat/config.js.map +1 -0
  80. package/dist/heartbeat/daemon.d.ts +28 -0
  81. package/dist/heartbeat/daemon.d.ts.map +1 -0
  82. package/dist/heartbeat/daemon.js +141 -0
  83. package/dist/heartbeat/daemon.js.map +1 -0
  84. package/dist/heartbeat/tasks.d.ts +24 -0
  85. package/dist/heartbeat/tasks.d.ts.map +1 -0
  86. package/dist/heartbeat/tasks.js +277 -0
  87. package/dist/heartbeat/tasks.js.map +1 -0
  88. package/dist/identity/provision.d.ts +28 -0
  89. package/dist/identity/provision.d.ts.map +1 -0
  90. package/dist/identity/provision.js +131 -0
  91. package/dist/identity/provision.js.map +1 -0
  92. package/dist/identity/wallet.d.ts +28 -0
  93. package/dist/identity/wallet.d.ts.map +1 -0
  94. package/dist/identity/wallet.js +69 -0
  95. package/dist/identity/wallet.js.map +1 -0
  96. package/dist/index.d.ts +10 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +358 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/ooda/claude-decision.d.ts +18 -0
  101. package/dist/ooda/claude-decision.d.ts.map +1 -0
  102. package/dist/ooda/claude-decision.js +82 -0
  103. package/dist/ooda/claude-decision.js.map +1 -0
  104. package/dist/ooda/journal.d.ts +22 -0
  105. package/dist/ooda/journal.d.ts.map +1 -0
  106. package/dist/ooda/journal.js +26 -0
  107. package/dist/ooda/journal.js.map +1 -0
  108. package/dist/ooda/loop.d.ts +3 -0
  109. package/dist/ooda/loop.d.ts.map +1 -0
  110. package/dist/ooda/loop.js +210 -0
  111. package/dist/ooda/loop.js.map +1 -0
  112. package/dist/ooda/observe.d.ts +21 -0
  113. package/dist/ooda/observe.d.ts.map +1 -0
  114. package/dist/ooda/observe.js +75 -0
  115. package/dist/ooda/observe.js.map +1 -0
  116. package/dist/ooda/state.d.ts +34 -0
  117. package/dist/ooda/state.d.ts.map +1 -0
  118. package/dist/ooda/state.js +48 -0
  119. package/dist/ooda/state.js.map +1 -0
  120. package/dist/ooda/tui.d.ts +3 -0
  121. package/dist/ooda/tui.d.ts.map +1 -0
  122. package/dist/ooda/tui.js +132 -0
  123. package/dist/ooda/tui.js.map +1 -0
  124. package/dist/ooda/validate.d.ts +33 -0
  125. package/dist/ooda/validate.d.ts.map +1 -0
  126. package/dist/ooda/validate.js +91 -0
  127. package/dist/ooda/validate.js.map +1 -0
  128. package/dist/registry/agent-card.d.ts +26 -0
  129. package/dist/registry/agent-card.d.ts.map +1 -0
  130. package/dist/registry/agent-card.js +94 -0
  131. package/dist/registry/agent-card.js.map +1 -0
  132. package/dist/registry/discovery.d.ts +24 -0
  133. package/dist/registry/discovery.d.ts.map +1 -0
  134. package/dist/registry/discovery.js +74 -0
  135. package/dist/registry/discovery.js.map +1 -0
  136. package/dist/registry/erc8004.d.ts +39 -0
  137. package/dist/registry/erc8004.d.ts.map +1 -0
  138. package/dist/registry/erc8004.js +209 -0
  139. package/dist/registry/erc8004.js.map +1 -0
  140. package/dist/replication/genesis.d.ts +26 -0
  141. package/dist/replication/genesis.d.ts.map +1 -0
  142. package/dist/replication/genesis.js +72 -0
  143. package/dist/replication/genesis.js.map +1 -0
  144. package/dist/replication/lineage.d.ts +35 -0
  145. package/dist/replication/lineage.d.ts.map +1 -0
  146. package/dist/replication/lineage.js +79 -0
  147. package/dist/replication/lineage.js.map +1 -0
  148. package/dist/replication/spawn.d.ts +25 -0
  149. package/dist/replication/spawn.d.ts.map +1 -0
  150. package/dist/replication/spawn.js +166 -0
  151. package/dist/replication/spawn.js.map +1 -0
  152. package/dist/self-mod/audit-log.d.ts +24 -0
  153. package/dist/self-mod/audit-log.d.ts.map +1 -0
  154. package/dist/self-mod/audit-log.js +49 -0
  155. package/dist/self-mod/audit-log.js.map +1 -0
  156. package/dist/self-mod/code.d.ts +51 -0
  157. package/dist/self-mod/code.d.ts.map +1 -0
  158. package/dist/self-mod/code.js +317 -0
  159. package/dist/self-mod/code.js.map +1 -0
  160. package/dist/self-mod/tools-manager.d.ts +30 -0
  161. package/dist/self-mod/tools-manager.d.ts.map +1 -0
  162. package/dist/self-mod/tools-manager.js +74 -0
  163. package/dist/self-mod/tools-manager.js.map +1 -0
  164. package/dist/self-mod/upstream.d.ts +36 -0
  165. package/dist/self-mod/upstream.d.ts.map +1 -0
  166. package/dist/self-mod/upstream.js +66 -0
  167. package/dist/self-mod/upstream.js.map +1 -0
  168. package/dist/setup/banner.d.ts +2 -0
  169. package/dist/setup/banner.d.ts.map +1 -0
  170. package/dist/setup/banner.js +22 -0
  171. package/dist/setup/banner.js.map +1 -0
  172. package/dist/setup/defaults.d.ts +3 -0
  173. package/dist/setup/defaults.d.ts.map +1 -0
  174. package/dist/setup/defaults.js +113 -0
  175. package/dist/setup/defaults.js.map +1 -0
  176. package/dist/setup/environment.d.ts +6 -0
  177. package/dist/setup/environment.d.ts.map +1 -0
  178. package/dist/setup/environment.js +24 -0
  179. package/dist/setup/environment.js.map +1 -0
  180. package/dist/setup/prompts.d.ts +5 -0
  181. package/dist/setup/prompts.d.ts.map +1 -0
  182. package/dist/setup/prompts.js +70 -0
  183. package/dist/setup/prompts.js.map +1 -0
  184. package/dist/setup/wizard.d.ts +3 -0
  185. package/dist/setup/wizard.d.ts.map +1 -0
  186. package/dist/setup/wizard.js +128 -0
  187. package/dist/setup/wizard.js.map +1 -0
  188. package/dist/skills/format.d.ts +14 -0
  189. package/dist/skills/format.d.ts.map +1 -0
  190. package/dist/skills/format.js +145 -0
  191. package/dist/skills/format.js.map +1 -0
  192. package/dist/skills/loader.d.ts +19 -0
  193. package/dist/skills/loader.d.ts.map +1 -0
  194. package/dist/skills/loader.js +98 -0
  195. package/dist/skills/loader.js.map +1 -0
  196. package/dist/skills/registry.d.ts +31 -0
  197. package/dist/skills/registry.d.ts.map +1 -0
  198. package/dist/skills/registry.js +111 -0
  199. package/dist/skills/registry.js.map +1 -0
  200. package/dist/social/client.d.ts +13 -0
  201. package/dist/social/client.d.ts.map +1 -0
  202. package/dist/social/client.js +89 -0
  203. package/dist/social/client.js.map +1 -0
  204. package/dist/state/database.d.ts +9 -0
  205. package/dist/state/database.d.ts.map +1 -0
  206. package/dist/state/database.js +401 -0
  207. package/dist/state/database.js.map +1 -0
  208. package/dist/state/schema.d.ts +11 -0
  209. package/dist/state/schema.d.ts.map +1 -0
  210. package/dist/state/schema.js +232 -0
  211. package/dist/state/schema.js.map +1 -0
  212. package/dist/survival/funding.d.ts +19 -0
  213. package/dist/survival/funding.d.ts.map +1 -0
  214. package/dist/survival/funding.js +62 -0
  215. package/dist/survival/funding.js.map +1 -0
  216. package/dist/survival/low-compute.d.ts +30 -0
  217. package/dist/survival/low-compute.d.ts.map +1 -0
  218. package/dist/survival/low-compute.js +72 -0
  219. package/dist/survival/low-compute.js.map +1 -0
  220. package/dist/survival/monitor.d.ts +23 -0
  221. package/dist/survival/monitor.d.ts.map +1 -0
  222. package/dist/survival/monitor.js +70 -0
  223. package/dist/survival/monitor.js.map +1 -0
  224. package/dist/types.d.ts +461 -0
  225. package/dist/types.d.ts.map +1 -0
  226. package/dist/types.js +25 -0
  227. package/dist/types.js.map +1 -0
  228. package/package.json +85 -0
@@ -0,0 +1,114 @@
1
+ /**
2
+ * CLAWD Inference Client
3
+ *
4
+ * Wraps CLAWD Runtime's /v1/chat/completions endpoint (OpenAI-compatible).
5
+ * The automaton pays for its own thinking through CLAWD credits.
6
+ */
7
+ export function createInferenceClient(options) {
8
+ const { apiUrl, apiKey } = options;
9
+ let currentModel = options.defaultModel;
10
+ let maxTokens = options.maxTokens;
11
+ const chat = async (messages, opts) => {
12
+ const model = opts?.model || currentModel;
13
+ const tools = opts?.tools;
14
+ // Newer models (o-series, gpt-5.x) require max_completion_tokens
15
+ // GPT-4.1 and similar models also use max_completion_tokens
16
+ const usesCompletionTokens = /^(o[1-9]|gpt-5)/.test(model) ||
17
+ model.includes("4.1") ||
18
+ model.includes("4o-mini");
19
+ const tokenLimit = opts?.maxTokens || maxTokens;
20
+ const body = {
21
+ model,
22
+ messages: messages.map(formatMessage),
23
+ stream: false,
24
+ };
25
+ if (usesCompletionTokens) {
26
+ body.max_completion_tokens = tokenLimit;
27
+ }
28
+ else {
29
+ body.max_tokens = tokenLimit;
30
+ }
31
+ if (opts?.temperature !== undefined) {
32
+ body.temperature = opts.temperature;
33
+ }
34
+ if (tools && tools.length > 0) {
35
+ body.tools = tools;
36
+ body.tool_choice = "auto";
37
+ }
38
+ const resp = await fetch(`${apiUrl}/v1/chat/completions`, {
39
+ method: "POST",
40
+ headers: {
41
+ "Content-Type": "application/json",
42
+ Authorization: apiKey,
43
+ },
44
+ body: JSON.stringify(body),
45
+ });
46
+ if (!resp.ok) {
47
+ const text = await resp.text();
48
+ throw new Error(`Inference error: ${resp.status}: ${text}`);
49
+ }
50
+ const data = await resp.json();
51
+ const choice = data.choices?.[0];
52
+ if (!choice) {
53
+ throw new Error("No completion choice returned from inference");
54
+ }
55
+ const message = choice.message;
56
+ const usage = {
57
+ promptTokens: data.usage?.prompt_tokens || 0,
58
+ completionTokens: data.usage?.completion_tokens || 0,
59
+ totalTokens: data.usage?.total_tokens || 0,
60
+ };
61
+ const toolCalls = message.tool_calls?.map((tc) => ({
62
+ id: tc.id,
63
+ type: "function",
64
+ function: {
65
+ name: tc.function.name,
66
+ arguments: tc.function.arguments,
67
+ },
68
+ }));
69
+ return {
70
+ id: data.id || "",
71
+ model: data.model || model,
72
+ message: {
73
+ role: message.role,
74
+ content: message.content || "",
75
+ tool_calls: toolCalls,
76
+ },
77
+ toolCalls,
78
+ usage,
79
+ finishReason: choice.finish_reason || "stop",
80
+ };
81
+ };
82
+ const setLowComputeMode = (enabled) => {
83
+ if (enabled) {
84
+ currentModel = "gpt-4o-mini";
85
+ maxTokens = 4096;
86
+ }
87
+ else {
88
+ currentModel = options.defaultModel;
89
+ maxTokens = options.maxTokens;
90
+ }
91
+ };
92
+ const getDefaultModel = () => {
93
+ return currentModel;
94
+ };
95
+ return {
96
+ chat,
97
+ setLowComputeMode,
98
+ getDefaultModel,
99
+ };
100
+ }
101
+ function formatMessage(msg) {
102
+ const formatted = {
103
+ role: msg.role,
104
+ content: msg.content,
105
+ };
106
+ if (msg.name)
107
+ formatted.name = msg.name;
108
+ if (msg.tool_calls)
109
+ formatted.tool_calls = msg.tool_calls;
110
+ if (msg.tool_call_id)
111
+ formatted.tool_call_id = msg.tool_call_id;
112
+ return formatted;
113
+ }
114
+ //# sourceMappingURL=inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/clawd/inference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * x402 Payment Protocol
3
+ *
4
+ * Enables the automaton to make USDC micropayments via HTTP 402.
5
+ * Adapted from runtime-mcp/src/x402/index.ts
6
+ */
7
+ import { type Address, type PrivateKeyAccount } from "viem";
8
+ declare const USDC_ADDRESSES: Record<string, Address>;
9
+ type NetworkId = keyof typeof USDC_ADDRESSES;
10
+ interface PaymentRequirement {
11
+ scheme: string;
12
+ network: NetworkId;
13
+ maxAmountRequired: string;
14
+ payToAddress: Address;
15
+ requiredDeadlineSeconds: number;
16
+ usdcAddress: Address;
17
+ }
18
+ interface X402PaymentResult {
19
+ success: boolean;
20
+ response?: any;
21
+ error?: string;
22
+ status?: number;
23
+ }
24
+ export interface UsdcBalanceResult {
25
+ balance: number;
26
+ network: string;
27
+ ok: boolean;
28
+ error?: string;
29
+ }
30
+ /**
31
+ * Get the USDC balance for the automaton's wallet on a given network.
32
+ */
33
+ export declare function getUsdcBalance(address: Address, network?: string): Promise<number>;
34
+ /**
35
+ * Get the USDC balance and read status details for diagnostics.
36
+ */
37
+ export declare function getUsdcBalanceDetailed(address: Address, network?: string): Promise<UsdcBalanceResult>;
38
+ /**
39
+ * Check if a URL requires x402 payment.
40
+ */
41
+ export declare function checkX402(url: string): Promise<PaymentRequirement | null>;
42
+ /**
43
+ * Fetch a URL with automatic x402 payment.
44
+ * If the endpoint returns 402, sign and pay, then retry.
45
+ */
46
+ export declare function x402Fetch(url: string, account: PrivateKeyAccount, method?: string, body?: string, headers?: Record<string, string>): Promise<X402PaymentResult>;
47
+ export {};
48
+ //# sourceMappingURL=x402.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../../src/clawd/x402.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACvB,MAAM,MAAM,CAAC;AAId,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAG3C,CAAC;AAMF,KAAK,SAAS,GAAG,MAAM,OAAO,cAAc,CAAC;AAY7C,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;CACtB;AAYD,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiHD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,MAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,MAAsB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAWpC;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,EAC1B,MAAM,GAAE,MAAc,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA8D5B"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * x402 Payment Protocol
3
+ *
4
+ * Enables the automaton to make USDC micropayments via HTTP 402.
5
+ * Adapted from runtime-mcp/src/x402/index.ts
6
+ */
7
+ import { createPublicClient, http, parseUnits, } from "viem";
8
+ import { base, baseSepolia } from "viem/chains";
9
+ // USDC contract addresses
10
+ const USDC_ADDRESSES = {
11
+ "eip155:8453": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // Base mainnet
12
+ "eip155:84532": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", // Base Sepolia
13
+ };
14
+ const CHAINS = {
15
+ "eip155:8453": base,
16
+ "eip155:84532": baseSepolia,
17
+ };
18
+ const BALANCE_OF_ABI = [
19
+ {
20
+ inputs: [{ name: "account", type: "address" }],
21
+ name: "balanceOf",
22
+ outputs: [{ name: "", type: "uint256" }],
23
+ stateMutability: "view",
24
+ type: "function",
25
+ },
26
+ ];
27
+ function safeJsonParse(value) {
28
+ try {
29
+ return JSON.parse(value);
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ function parsePositiveInt(value) {
36
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
37
+ return Math.floor(value);
38
+ }
39
+ if (typeof value === "string" && value.trim()) {
40
+ const parsed = Number(value);
41
+ if (Number.isFinite(parsed) && parsed > 0) {
42
+ return Math.floor(parsed);
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ function normalizeNetwork(raw) {
48
+ if (typeof raw !== "string")
49
+ return null;
50
+ const normalized = raw.trim().toLowerCase();
51
+ if (normalized === "base")
52
+ return "eip155:8453";
53
+ if (normalized === "base-sepolia")
54
+ return "eip155:84532";
55
+ if (normalized === "eip155:8453" || normalized === "eip155:84532") {
56
+ return normalized;
57
+ }
58
+ return null;
59
+ }
60
+ function normalizePaymentRequirement(raw) {
61
+ if (typeof raw !== "object" || raw === null)
62
+ return null;
63
+ const value = raw;
64
+ const network = normalizeNetwork(value.network);
65
+ if (!network)
66
+ return null;
67
+ const scheme = typeof value.scheme === "string" ? value.scheme : null;
68
+ const maxAmountRequired = typeof value.maxAmountRequired === "string"
69
+ ? value.maxAmountRequired
70
+ : typeof value.maxAmountRequired === "number" &&
71
+ Number.isFinite(value.maxAmountRequired)
72
+ ? String(value.maxAmountRequired)
73
+ : null;
74
+ const payToAddress = typeof value.payToAddress === "string"
75
+ ? value.payToAddress
76
+ : typeof value.payTo === "string"
77
+ ? value.payTo
78
+ : null;
79
+ const usdcAddress = typeof value.usdcAddress === "string"
80
+ ? value.usdcAddress
81
+ : typeof value.asset === "string"
82
+ ? value.asset
83
+ : USDC_ADDRESSES[network];
84
+ const requiredDeadlineSeconds = parsePositiveInt(value.requiredDeadlineSeconds) ??
85
+ parsePositiveInt(value.maxTimeoutSeconds) ??
86
+ 300;
87
+ if (!scheme || !maxAmountRequired || !payToAddress || !usdcAddress) {
88
+ return null;
89
+ }
90
+ return {
91
+ scheme,
92
+ network,
93
+ maxAmountRequired,
94
+ payToAddress: payToAddress,
95
+ requiredDeadlineSeconds,
96
+ usdcAddress: usdcAddress,
97
+ };
98
+ }
99
+ function normalizePaymentRequired(raw) {
100
+ if (typeof raw !== "object" || raw === null)
101
+ return null;
102
+ const value = raw;
103
+ if (!Array.isArray(value.accepts))
104
+ return null;
105
+ const accepts = value.accepts
106
+ .map(normalizePaymentRequirement)
107
+ .filter((v) => v !== null);
108
+ if (!accepts.length)
109
+ return null;
110
+ const x402Version = parsePositiveInt(value.x402Version) ?? 1;
111
+ return { x402Version, accepts };
112
+ }
113
+ function parseMaxAmountRequired(maxAmountRequired, x402Version) {
114
+ const amount = maxAmountRequired.trim();
115
+ if (!/^\d+(\.\d+)?$/.test(amount)) {
116
+ throw new Error(`Invalid maxAmountRequired: ${maxAmountRequired}`);
117
+ }
118
+ if (amount.includes(".")) {
119
+ return parseUnits(amount, 6);
120
+ }
121
+ if (x402Version >= 2 || amount.length > 6) {
122
+ return BigInt(amount);
123
+ }
124
+ return parseUnits(amount, 6);
125
+ }
126
+ function selectRequirement(parsed) {
127
+ const exactSupported = parsed.accepts.find((r) => r.scheme === "exact" && !!CHAINS[r.network]);
128
+ if (exactSupported)
129
+ return exactSupported;
130
+ return parsed.accepts[0];
131
+ }
132
+ /**
133
+ * Get the USDC balance for the automaton's wallet on a given network.
134
+ */
135
+ export async function getUsdcBalance(address, network = "eip155:8453") {
136
+ const result = await getUsdcBalanceDetailed(address, network);
137
+ return result.balance;
138
+ }
139
+ /**
140
+ * Get the USDC balance and read status details for diagnostics.
141
+ */
142
+ export async function getUsdcBalanceDetailed(address, network = "eip155:8453") {
143
+ const chain = CHAINS[network];
144
+ const usdcAddress = USDC_ADDRESSES[network];
145
+ if (!chain || !usdcAddress) {
146
+ return {
147
+ balance: 0,
148
+ network,
149
+ ok: false,
150
+ error: `Unsupported USDC network: ${network}`,
151
+ };
152
+ }
153
+ try {
154
+ const client = createPublicClient({
155
+ chain,
156
+ transport: http(),
157
+ });
158
+ const balance = await client.readContract({
159
+ address: usdcAddress,
160
+ abi: BALANCE_OF_ABI,
161
+ functionName: "balanceOf",
162
+ args: [address],
163
+ });
164
+ // USDC has 6 decimals
165
+ return {
166
+ balance: Number(balance) / 1_000_000,
167
+ network,
168
+ ok: true,
169
+ };
170
+ }
171
+ catch (err) {
172
+ return {
173
+ balance: 0,
174
+ network,
175
+ ok: false,
176
+ error: err?.message || String(err),
177
+ };
178
+ }
179
+ }
180
+ /**
181
+ * Check if a URL requires x402 payment.
182
+ */
183
+ export async function checkX402(url) {
184
+ try {
185
+ const resp = await fetch(url, { method: "GET" });
186
+ if (resp.status !== 402) {
187
+ return null;
188
+ }
189
+ const parsed = await parsePaymentRequired(resp);
190
+ return parsed?.requirement ?? null;
191
+ }
192
+ catch {
193
+ return null;
194
+ }
195
+ }
196
+ /**
197
+ * Fetch a URL with automatic x402 payment.
198
+ * If the endpoint returns 402, sign and pay, then retry.
199
+ */
200
+ export async function x402Fetch(url, account, method = "GET", body, headers) {
201
+ try {
202
+ // Initial request
203
+ const initialResp = await fetch(url, {
204
+ method,
205
+ headers: { ...headers, "Content-Type": "application/json" },
206
+ body,
207
+ });
208
+ if (initialResp.status !== 402) {
209
+ const data = await initialResp
210
+ .json()
211
+ .catch(() => initialResp.text());
212
+ return { success: initialResp.ok, response: data, status: initialResp.status };
213
+ }
214
+ // Parse payment requirements
215
+ const parsed = await parsePaymentRequired(initialResp);
216
+ if (!parsed) {
217
+ return {
218
+ success: false,
219
+ error: "Could not parse payment requirements",
220
+ status: initialResp.status,
221
+ };
222
+ }
223
+ // Sign payment
224
+ let payment;
225
+ try {
226
+ payment = await signPayment(account, parsed.requirement, parsed.x402Version);
227
+ }
228
+ catch (err) {
229
+ return {
230
+ success: false,
231
+ error: `Failed to sign payment: ${err?.message || String(err)}`,
232
+ status: initialResp.status,
233
+ };
234
+ }
235
+ // Retry with payment
236
+ const paymentHeader = Buffer.from(JSON.stringify(payment)).toString("base64");
237
+ const paidResp = await fetch(url, {
238
+ method,
239
+ headers: {
240
+ ...headers,
241
+ "Content-Type": "application/json",
242
+ "X-Payment": paymentHeader,
243
+ },
244
+ body,
245
+ });
246
+ const data = await paidResp.json().catch(() => paidResp.text());
247
+ return { success: paidResp.ok, response: data, status: paidResp.status };
248
+ }
249
+ catch (err) {
250
+ return { success: false, error: err.message };
251
+ }
252
+ }
253
+ async function parsePaymentRequired(resp) {
254
+ const header = resp.headers.get("X-Payment-Required");
255
+ if (header) {
256
+ const rawHeader = safeJsonParse(header);
257
+ const normalizedRaw = normalizePaymentRequired(rawHeader);
258
+ if (normalizedRaw) {
259
+ return {
260
+ x402Version: normalizedRaw.x402Version,
261
+ requirement: selectRequirement(normalizedRaw),
262
+ };
263
+ }
264
+ try {
265
+ const decoded = Buffer.from(header, "base64").toString("utf-8");
266
+ const parsedDecoded = normalizePaymentRequired(safeJsonParse(decoded));
267
+ if (parsedDecoded) {
268
+ return {
269
+ x402Version: parsedDecoded.x402Version,
270
+ requirement: selectRequirement(parsedDecoded),
271
+ };
272
+ }
273
+ }
274
+ catch {
275
+ // Ignore header decode errors and continue with body parsing.
276
+ }
277
+ }
278
+ try {
279
+ const body = await resp.json();
280
+ const parsedBody = normalizePaymentRequired(body);
281
+ if (!parsedBody)
282
+ return null;
283
+ return {
284
+ x402Version: parsedBody.x402Version,
285
+ requirement: selectRequirement(parsedBody),
286
+ };
287
+ }
288
+ catch {
289
+ return null;
290
+ }
291
+ }
292
+ async function signPayment(account, requirement, x402Version) {
293
+ const chain = CHAINS[requirement.network];
294
+ if (!chain) {
295
+ throw new Error(`Unsupported network: ${requirement.network}`);
296
+ }
297
+ const nonce = `0x${Buffer.from(crypto.getRandomValues(new Uint8Array(32))).toString("hex")}`;
298
+ const now = Math.floor(Date.now() / 1000);
299
+ const validAfter = now - 60;
300
+ const validBefore = now + requirement.requiredDeadlineSeconds;
301
+ const amount = parseMaxAmountRequired(requirement.maxAmountRequired, x402Version);
302
+ // EIP-712 typed data for TransferWithAuthorization
303
+ const domain = {
304
+ name: "USD Coin",
305
+ version: "2",
306
+ chainId: chain.id,
307
+ verifyingContract: requirement.usdcAddress,
308
+ };
309
+ const types = {
310
+ TransferWithAuthorization: [
311
+ { name: "from", type: "address" },
312
+ { name: "to", type: "address" },
313
+ { name: "value", type: "uint256" },
314
+ { name: "validAfter", type: "uint256" },
315
+ { name: "validBefore", type: "uint256" },
316
+ { name: "nonce", type: "bytes32" },
317
+ ],
318
+ };
319
+ const message = {
320
+ from: account.address,
321
+ to: requirement.payToAddress,
322
+ value: amount,
323
+ validAfter: BigInt(validAfter),
324
+ validBefore: BigInt(validBefore),
325
+ nonce: nonce,
326
+ };
327
+ const signature = await account.signTypedData({
328
+ domain,
329
+ types,
330
+ primaryType: "TransferWithAuthorization",
331
+ message,
332
+ });
333
+ return {
334
+ x402Version,
335
+ scheme: requirement.scheme,
336
+ network: requirement.network,
337
+ payload: {
338
+ signature,
339
+ authorization: {
340
+ from: account.address,
341
+ to: requirement.payToAddress,
342
+ value: amount.toString(),
343
+ validAfter: validAfter.toString(),
344
+ validBefore: validBefore.toString(),
345
+ nonce,
346
+ },
347
+ },
348
+ };
349
+ }
350
+ //# sourceMappingURL=x402.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.js","sourceRoot":"","sources":["../../src/clawd/x402.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Automaton Configuration
3
+ *
4
+ * Loads and saves the automaton's configuration from ~/.automaton/automaton.json
5
+ */
6
+ import type { AutomatonConfig } from "./types.js";
7
+ import type { Address } from "viem";
8
+ export declare function getConfigPath(): string;
9
+ /**
10
+ * Load the automaton config from disk.
11
+ * Merges with defaults for any missing fields.
12
+ */
13
+ export declare function loadConfig(): AutomatonConfig | null;
14
+ /**
15
+ * Save the automaton config to disk.
16
+ */
17
+ export declare function saveConfig(config: AutomatonConfig): void;
18
+ /**
19
+ * Resolve ~ paths to absolute paths.
20
+ */
21
+ export declare function resolvePath(p: string): string;
22
+ /**
23
+ * Create a fresh config from setup wizard inputs.
24
+ */
25
+ export declare function createConfig(params: {
26
+ name: string;
27
+ genesisPrompt: string;
28
+ creatorMessage?: string;
29
+ creatorAddress: Address;
30
+ registeredWithClawd: boolean;
31
+ sandboxId: string;
32
+ walletAddress: Address;
33
+ apiKey: string;
34
+ parentAddress?: Address;
35
+ }): AutomatonConfig;
36
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAOpC,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,eAAe,GAAG,IAAI,CAkBnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAUxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,eAAe,CAqBlB"}
package/dist/config.js ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Automaton Configuration
3
+ *
4
+ * Loads and saves the automaton's configuration from ~/.automaton/automaton.json
5
+ */
6
+ import fs from "fs";
7
+ import path from "path";
8
+ import { DEFAULT_CONFIG } from "./types.js";
9
+ import { getAutomatonDir } from "./identity/wallet.js";
10
+ import { loadApiKeyFromConfig } from "./identity/provision.js";
11
+ const CONFIG_FILENAME = "automaton.json";
12
+ export function getConfigPath() {
13
+ return path.join(getAutomatonDir(), CONFIG_FILENAME);
14
+ }
15
+ /**
16
+ * Load the automaton config from disk.
17
+ * Merges with defaults for any missing fields.
18
+ */
19
+ export function loadConfig() {
20
+ const configPath = getConfigPath();
21
+ if (!fs.existsSync(configPath)) {
22
+ return null;
23
+ }
24
+ try {
25
+ const raw = JSON.parse(fs.readFileSync(configPath, "utf-8"));
26
+ const apiKey = raw.clawdApiKey || loadApiKeyFromConfig();
27
+ return {
28
+ ...DEFAULT_CONFIG,
29
+ ...raw,
30
+ clawdApiKey: apiKey,
31
+ };
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ /**
38
+ * Save the automaton config to disk.
39
+ */
40
+ export function saveConfig(config) {
41
+ const dir = getAutomatonDir();
42
+ if (!fs.existsSync(dir)) {
43
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
44
+ }
45
+ const configPath = getConfigPath();
46
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), {
47
+ mode: 0o600,
48
+ });
49
+ }
50
+ /**
51
+ * Resolve ~ paths to absolute paths.
52
+ */
53
+ export function resolvePath(p) {
54
+ if (p.startsWith("~")) {
55
+ return path.join(process.env.HOME || "/root", p.slice(1));
56
+ }
57
+ return p;
58
+ }
59
+ /**
60
+ * Create a fresh config from setup wizard inputs.
61
+ */
62
+ export function createConfig(params) {
63
+ return {
64
+ name: params.name,
65
+ genesisPrompt: params.genesisPrompt,
66
+ creatorMessage: params.creatorMessage,
67
+ creatorAddress: params.creatorAddress,
68
+ registeredWithClawd: params.registeredWithClawd,
69
+ sandboxId: params.sandboxId,
70
+ clawdApiUrl: DEFAULT_CONFIG.clawdApiUrl,
71
+ clawdApiKey: params.apiKey,
72
+ inferenceModel: DEFAULT_CONFIG.inferenceModel,
73
+ maxTokensPerTurn: DEFAULT_CONFIG.maxTokensPerTurn,
74
+ heartbeatConfigPath: DEFAULT_CONFIG.heartbeatConfigPath,
75
+ dbPath: DEFAULT_CONFIG.dbPath,
76
+ logLevel: DEFAULT_CONFIG.logLevel,
77
+ walletAddress: params.walletAddress,
78
+ version: DEFAULT_CONFIG.version,
79
+ skillsDir: DEFAULT_CONFIG.skillsDir,
80
+ maxChildren: DEFAULT_CONFIG.maxChildren,
81
+ parentAddress: params.parentAddress,
82
+ };
83
+ }
84
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}