@echoclaw/echo-0g 1.2.0 → 1.2.3

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 (116) hide show
  1. package/README.md +33 -1162
  2. package/dist/0g-compute/constants.d.ts +1 -0
  3. package/dist/0g-compute/constants.d.ts.map +1 -1
  4. package/dist/0g-compute/constants.js +1 -0
  5. package/dist/0g-compute/constants.js.map +1 -1
  6. package/dist/0g-compute/helpers.d.ts +18 -0
  7. package/dist/0g-compute/helpers.d.ts.map +1 -0
  8. package/dist/0g-compute/helpers.js +53 -0
  9. package/dist/0g-compute/helpers.js.map +1 -0
  10. package/dist/0g-compute/monitor.d.ts.map +1 -1
  11. package/dist/0g-compute/monitor.js +1 -0
  12. package/dist/0g-compute/monitor.js.map +1 -1
  13. package/dist/0g-compute/operations.d.ts +51 -0
  14. package/dist/0g-compute/operations.d.ts.map +1 -0
  15. package/dist/0g-compute/operations.js +118 -0
  16. package/dist/0g-compute/operations.js.map +1 -0
  17. package/dist/0g-compute/readiness.d.ts +50 -0
  18. package/dist/0g-compute/readiness.d.ts.map +1 -0
  19. package/dist/0g-compute/readiness.js +251 -0
  20. package/dist/0g-compute/readiness.js.map +1 -0
  21. package/dist/bot/daemon.d.ts +0 -1
  22. package/dist/bot/daemon.d.ts.map +1 -1
  23. package/dist/bot/daemon.js +1 -39
  24. package/dist/bot/daemon.js.map +1 -1
  25. package/dist/bot/state.d.ts +0 -2
  26. package/dist/bot/state.d.ts.map +1 -1
  27. package/dist/bot/state.js +0 -12
  28. package/dist/bot/state.js.map +1 -1
  29. package/dist/bot/types.d.ts +0 -4
  30. package/dist/bot/types.d.ts.map +1 -1
  31. package/dist/bot/types.js +0 -4
  32. package/dist/bot/types.js.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +2 -0
  35. package/dist/cli.js.map +1 -1
  36. package/dist/commands/0g-compute-wizard.d.ts +12 -0
  37. package/dist/commands/0g-compute-wizard.d.ts.map +1 -0
  38. package/dist/commands/0g-compute-wizard.js +420 -0
  39. package/dist/commands/0g-compute-wizard.js.map +1 -0
  40. package/dist/commands/0g-compute.d.ts.map +1 -1
  41. package/dist/commands/0g-compute.js +18 -95
  42. package/dist/commands/0g-compute.js.map +1 -1
  43. package/dist/commands/marketmaker.d.ts.map +1 -1
  44. package/dist/commands/marketmaker.js +0 -5
  45. package/dist/commands/marketmaker.js.map +1 -1
  46. package/dist/commands/onboard/index.d.ts +3 -0
  47. package/dist/commands/onboard/index.d.ts.map +1 -0
  48. package/dist/commands/onboard/index.js +185 -0
  49. package/dist/commands/onboard/index.js.map +1 -0
  50. package/dist/commands/onboard/steps/compute.d.ts +3 -0
  51. package/dist/commands/onboard/steps/compute.d.ts.map +1 -0
  52. package/dist/commands/onboard/steps/compute.js +346 -0
  53. package/dist/commands/onboard/steps/compute.js.map +1 -0
  54. package/dist/commands/onboard/steps/config.d.ts +3 -0
  55. package/dist/commands/onboard/steps/config.d.ts.map +1 -0
  56. package/dist/commands/onboard/steps/config.js +30 -0
  57. package/dist/commands/onboard/steps/config.js.map +1 -0
  58. package/dist/commands/onboard/steps/monitor.d.ts +3 -0
  59. package/dist/commands/onboard/steps/monitor.d.ts.map +1 -0
  60. package/dist/commands/onboard/steps/monitor.js +157 -0
  61. package/dist/commands/onboard/steps/monitor.js.map +1 -0
  62. package/dist/commands/onboard/steps/openclaw.d.ts +3 -0
  63. package/dist/commands/onboard/steps/openclaw.d.ts.map +1 -0
  64. package/dist/commands/onboard/steps/openclaw.js +35 -0
  65. package/dist/commands/onboard/steps/openclaw.js.map +1 -0
  66. package/dist/commands/onboard/steps/password.d.ts +3 -0
  67. package/dist/commands/onboard/steps/password.d.ts.map +1 -0
  68. package/dist/commands/onboard/steps/password.js +71 -0
  69. package/dist/commands/onboard/steps/password.js.map +1 -0
  70. package/dist/commands/onboard/steps/wallet.d.ts +3 -0
  71. package/dist/commands/onboard/steps/wallet.d.ts.map +1 -0
  72. package/dist/commands/onboard/steps/wallet.js +113 -0
  73. package/dist/commands/onboard/steps/wallet.js.map +1 -0
  74. package/dist/commands/onboard/steps/webhooks.d.ts +3 -0
  75. package/dist/commands/onboard/steps/webhooks.d.ts.map +1 -0
  76. package/dist/commands/onboard/steps/webhooks.js +100 -0
  77. package/dist/commands/onboard/steps/webhooks.js.map +1 -0
  78. package/dist/commands/onboard/types.d.ts +27 -0
  79. package/dist/commands/onboard/types.d.ts.map +1 -0
  80. package/dist/commands/onboard/types.js +2 -0
  81. package/dist/commands/onboard/types.js.map +1 -0
  82. package/dist/commands/setup.d.ts.map +1 -1
  83. package/dist/commands/setup.js +12 -97
  84. package/dist/commands/setup.js.map +1 -1
  85. package/dist/commands/wallet.d.ts.map +1 -1
  86. package/dist/commands/wallet.js +20 -53
  87. package/dist/commands/wallet.js.map +1 -1
  88. package/dist/echobook/notifications.d.ts +1 -0
  89. package/dist/echobook/notifications.d.ts.map +1 -1
  90. package/dist/echobook/notifications.js.map +1 -1
  91. package/dist/errors.d.ts +6 -0
  92. package/dist/errors.d.ts.map +1 -1
  93. package/dist/errors.js +8 -0
  94. package/dist/errors.js.map +1 -1
  95. package/dist/guardrails/wallet-mutation.d.ts +11 -0
  96. package/dist/guardrails/wallet-mutation.d.ts.map +1 -0
  97. package/dist/guardrails/wallet-mutation.js +21 -0
  98. package/dist/guardrails/wallet-mutation.js.map +1 -0
  99. package/dist/setup/openclaw-link.d.ts +19 -0
  100. package/dist/setup/openclaw-link.d.ts.map +1 -0
  101. package/dist/setup/openclaw-link.js +111 -0
  102. package/dist/setup/openclaw-link.js.map +1 -0
  103. package/dist/utils/ui.d.ts +1 -0
  104. package/dist/utils/ui.d.ts.map +1 -1
  105. package/dist/utils/ui.js +1 -0
  106. package/dist/utils/ui.js.map +1 -1
  107. package/dist/wallet/create.d.ts +15 -0
  108. package/dist/wallet/create.d.ts.map +1 -0
  109. package/dist/wallet/create.js +30 -0
  110. package/dist/wallet/create.js.map +1 -0
  111. package/dist/wallet/import.d.ts +15 -0
  112. package/dist/wallet/import.d.ts.map +1 -0
  113. package/dist/wallet/import.js +31 -0
  114. package/dist/wallet/import.js.map +1 -0
  115. package/package.json +1 -1
  116. package/skills/echo0g/SKILL.md +67 -6
@@ -0,0 +1,346 @@
1
+ import inquirer from "inquirer";
2
+ import { parseUnits, formatUnits } from "viem";
3
+ import { getAuthenticatedBroker } from "../../../0g-compute/broker-factory.js";
4
+ import { withSuppressedConsole } from "../../../0g-compute/bridge.js";
5
+ import { normalizeSubAccount } from "../../../0g-compute/account.js";
6
+ import { calculateProviderPricing, formatPricePerMTokens } from "../../../0g-compute/pricing.js";
7
+ import { checkComputeReadiness, saveComputeState } from "../../../0g-compute/readiness.js";
8
+ import { redactToken } from "../../../0g-compute/helpers.js";
9
+ import { patchOpenclawConfig } from "../../../openclaw/config.js";
10
+ import { spinner, colors, infoBox } from "../../../utils/ui.js";
11
+ import { writeStderr } from "../../../utils/output.js";
12
+ import { getPublicClient } from "../../../wallet/client.js";
13
+ import logger from "../../../utils/logger.js";
14
+ // ── Detect (strict readiness — on-chain + config checks) ────────────
15
+ async function detect(state) {
16
+ if (!state.walletAddress) {
17
+ return { configured: false, summary: "Wallet required first" };
18
+ }
19
+ try {
20
+ const result = await checkComputeReadiness();
21
+ if (result.ready) {
22
+ state.computeReady = true;
23
+ if (result.provider)
24
+ state.selectedProvider = result.provider;
25
+ return { configured: true, summary: "0G Compute configured" };
26
+ }
27
+ // Return first failing check as summary
28
+ const { checks } = result;
29
+ if (!checks.wallet.ok)
30
+ return { configured: false, summary: checks.wallet.hint ?? "Wallet not configured" };
31
+ if (!checks.broker.ok)
32
+ return { configured: false, summary: "Cannot connect to 0G network" };
33
+ if (!checks.ledger.ok)
34
+ return { configured: false, summary: "No ledger found" };
35
+ if (!checks.subAccount.ok)
36
+ return { configured: false, summary: checks.subAccount.detail ?? "Sub-account balance too low" };
37
+ if (!checks.ack.ok)
38
+ return { configured: false, summary: "Provider signer not acknowledged" };
39
+ if (!checks.openclawConfig.ok)
40
+ return { configured: false, summary: "OpenClaw config missing 0G provider" };
41
+ return { configured: false, summary: "0G Compute not fully configured" };
42
+ }
43
+ catch {
44
+ return { configured: false, summary: "0G Compute not configured (check failed)" };
45
+ }
46
+ }
47
+ // ── Run ─────────────────────────────────────────────────────────────
48
+ async function run(state) {
49
+ if (!state.walletAddress) {
50
+ return { action: "failed", message: "Wallet must be configured first." };
51
+ }
52
+ // ── 6a. Connect to 0G network ────────────────────────────────────
53
+ const connectSpin = spinner("Connecting to 0G network...");
54
+ connectSpin.start();
55
+ let broker;
56
+ try {
57
+ broker = await getAuthenticatedBroker();
58
+ connectSpin.succeed("Connected to 0G network");
59
+ }
60
+ catch (err) {
61
+ connectSpin.fail("Failed to connect to 0G network");
62
+ const msg = err instanceof Error ? err.message : String(err);
63
+ return { action: "failed", message: `Broker init failed: ${msg}` };
64
+ }
65
+ // ── 6b. Fetch models + select (BEFORE deposit) ───────────────────
66
+ const modelsSpin = spinner("Fetching available chat models...");
67
+ modelsSpin.start();
68
+ let chatServices;
69
+ try {
70
+ const allServices = await withSuppressedConsole(() => broker.inference.listServiceWithDetail());
71
+ chatServices = allServices.filter((s) => s.serviceType === "chatbot");
72
+ modelsSpin.succeed(`Found ${chatServices.length} chat model(s)`);
73
+ }
74
+ catch (err) {
75
+ modelsSpin.fail("Failed to fetch models");
76
+ const msg = err instanceof Error ? err.message : String(err);
77
+ return { action: "failed", message: `Failed to list services: ${msg}` };
78
+ }
79
+ if (chatServices.length === 0) {
80
+ return { action: "failed", message: "No chat models available on the 0G network." };
81
+ }
82
+ writeStderr("");
83
+ writeStderr(colors.bold(" Available chat models:"));
84
+ writeStderr("");
85
+ const choices = chatServices.map((svc, i) => {
86
+ const inputPriceStr = formatPricePerMTokens(svc.inputPrice);
87
+ const outputPriceStr = formatPricePerMTokens(svc.outputPrice);
88
+ const providerShort = svc.provider.slice(0, 10) + "...";
89
+ return {
90
+ name: `${svc.model} (${inputPriceStr} / ${outputPriceStr} 0G per M tokens) [${providerShort}]`,
91
+ value: i,
92
+ };
93
+ });
94
+ const { modelIndex } = await inquirer.prompt([{
95
+ type: "list",
96
+ name: "modelIndex",
97
+ message: "Select a chat model:",
98
+ choices,
99
+ }]);
100
+ const selectedService = chatServices[modelIndex];
101
+ const selectedProvider = selectedService.provider;
102
+ const pricing = calculateProviderPricing(selectedService.inputPrice, selectedService.outputPrice);
103
+ infoBox("Selected Model", [
104
+ `Model: ${colors.bold(selectedService.model)}`,
105
+ `Provider: ${colors.address(selectedProvider)}`,
106
+ `Price: ${formatPricePerMTokens(selectedService.inputPrice)} / ${formatPricePerMTokens(selectedService.outputPrice)} 0G per M tokens`,
107
+ `Recommended min locked: ${colors.value(pricing.recommendedMinLockedOg.toFixed(3) + " 0G")}`,
108
+ ].join("\n"));
109
+ // ── 6c. Ledger — smart deposit based on selection ─────────────────
110
+ const recommendedDeposit = Math.max(pricing.recommendedMinLockedOg + 2, 10);
111
+ let hasLedger = false;
112
+ try {
113
+ await withSuppressedConsole(() => broker.ledger.getLedger());
114
+ hasLedger = true;
115
+ writeStderr(` ${colors.success("✓")} Ledger exists`);
116
+ }
117
+ catch {
118
+ writeStderr(` ${colors.warn("○")} No ledger found`);
119
+ }
120
+ if (!hasLedger) {
121
+ // Read-before-write: check wallet 0G balance before deposit
122
+ let walletBalanceOg = 0;
123
+ try {
124
+ const client = getPublicClient();
125
+ const walletBalance = await client.getBalance({ address: state.walletAddress });
126
+ walletBalanceOg = parseFloat(formatUnits(walletBalance, 18));
127
+ writeStderr(` Wallet balance: ${colors.value(walletBalanceOg.toFixed(4) + " 0G")}`);
128
+ }
129
+ catch {
130
+ writeStderr(colors.muted(" Could not fetch wallet balance"));
131
+ }
132
+ writeStderr("");
133
+ writeStderr(` Deposit needed for ${colors.bold(selectedService.model)}:`);
134
+ writeStderr(` Min locked: ${colors.value(pricing.recommendedMinLockedOg.toFixed(1) + " 0G")} ${colors.muted("(from provider pricing)")}`);
135
+ writeStderr(` Buffer: ${colors.value("+2.0 0G")}`);
136
+ writeStderr(` Total: ${colors.value(recommendedDeposit.toFixed(1) + " 0G")}`);
137
+ writeStderr("");
138
+ const { depositAmount } = await inquirer.prompt([{
139
+ type: "input",
140
+ name: "depositAmount",
141
+ message: "Amount to deposit (0G):",
142
+ default: recommendedDeposit.toFixed(1),
143
+ validate: (input) => {
144
+ const n = Number(input);
145
+ if (!Number.isFinite(n) || n <= 0)
146
+ return "Must be a positive number";
147
+ if (n < pricing.recommendedMinLockedOg)
148
+ return `Minimum ${pricing.recommendedMinLockedOg.toFixed(1)} 0G required for ${selectedService.model}`;
149
+ return true;
150
+ },
151
+ }]);
152
+ const depositDisplay = Number(depositAmount);
153
+ // Fail early if wallet balance is clearly insufficient
154
+ if (walletBalanceOg > 0 && walletBalanceOg < depositDisplay + 0.01) {
155
+ return { action: "failed", message: `Insufficient wallet balance (${walletBalanceOg.toFixed(4)} 0G) for deposit of ${depositAmount} 0G + gas` };
156
+ }
157
+ const depositSpin = spinner(`Depositing ${depositAmount} 0G to ledger...`);
158
+ depositSpin.start();
159
+ try {
160
+ await withSuppressedConsole(() => broker.ledger.addLedger(Number(depositAmount)));
161
+ // Read-after-write: verify ledger was created
162
+ try {
163
+ await withSuppressedConsole(() => broker.ledger.getLedger());
164
+ depositSpin.succeed(`Deposited ${depositAmount} 0G to ledger (verified)`);
165
+ }
166
+ catch {
167
+ depositSpin.warn(`Deposited ${depositAmount} 0G — could not verify ledger on re-read`);
168
+ }
169
+ hasLedger = true;
170
+ }
171
+ catch (err) {
172
+ depositSpin.fail("Deposit failed");
173
+ const msg = err instanceof Error ? err.message : String(err);
174
+ return { action: "failed", message: `Ledger deposit failed: ${msg}` };
175
+ }
176
+ }
177
+ // ── 6d. Fund provider sub-account ────────────────────────────────
178
+ let currentLocked = 0;
179
+ try {
180
+ const account = await withSuppressedConsole(() => broker.inference.getAccount(selectedProvider));
181
+ const normalized = normalizeSubAccount(account);
182
+ currentLocked = normalized.lockedOg;
183
+ writeStderr(` Current locked balance: ${colors.value(currentLocked.toFixed(4) + " 0G")}`);
184
+ }
185
+ catch {
186
+ writeStderr(colors.muted(" No existing sub-account for this provider"));
187
+ }
188
+ if (currentLocked < pricing.recommendedMinLockedOg) {
189
+ const suggestedFund = Math.max(0.5, pricing.recommendedMinLockedOg - currentLocked + 1);
190
+ const { fundAmountInput } = await inquirer.prompt([{
191
+ type: "input",
192
+ name: "fundAmountInput",
193
+ message: `Amount to fund to provider sub-account (0G) (need ${pricing.recommendedMinLockedOg.toFixed(1)} 0G min):`,
194
+ default: suggestedFund.toFixed(1),
195
+ validate: (input) => {
196
+ const n = Number(input);
197
+ if (!Number.isFinite(n) || n <= 0)
198
+ return "Must be a positive number";
199
+ return true;
200
+ },
201
+ }]);
202
+ const fundDisplay = Number(fundAmountInput);
203
+ // Warn if resulting locked is below recommended
204
+ if (currentLocked + fundDisplay < pricing.recommendedMinLockedOg) {
205
+ const { confirmLow } = await inquirer.prompt([{
206
+ type: "confirm",
207
+ name: "confirmLow",
208
+ message: `${fundAmountInput} 0G will result in ${(currentLocked + fundDisplay).toFixed(1)} 0G locked (below ${pricing.recommendedMinLockedOg.toFixed(1)} 0G min). Continue anyway?`,
209
+ default: false,
210
+ }]);
211
+ if (!confirmLow) {
212
+ return { action: "failed", message: "Fund amount too low (user cancelled)" };
213
+ }
214
+ }
215
+ const amountWei = parseUnits(fundAmountInput, 18);
216
+ const fundSpin = spinner(`Funding provider sub-account with ${fundAmountInput} 0G...`);
217
+ fundSpin.start();
218
+ try {
219
+ await withSuppressedConsole(() => broker.ledger.transferFund(selectedProvider, "inference", amountWei));
220
+ // Read-after-write: verify sub-account balance
221
+ try {
222
+ const accountAfter = await withSuppressedConsole(() => broker.inference.getAccount(selectedProvider));
223
+ const normalizedAfter = normalizeSubAccount(accountAfter);
224
+ fundSpin.succeed(`Funded ${fundAmountInput} 0G to provider sub-account`);
225
+ writeStderr(` Post-fund locked balance: ${colors.value(normalizedAfter.lockedOg.toFixed(4) + " 0G")}`);
226
+ if (normalizedAfter.lockedOg < pricing.recommendedMinLockedOg) {
227
+ writeStderr(colors.warn(` ⚠ Balance still below recommended minimum (${pricing.recommendedMinLockedOg.toFixed(3)} 0G)`));
228
+ }
229
+ }
230
+ catch {
231
+ fundSpin.warn(`Funded ${fundAmountInput} 0G — could not verify post-fund balance`);
232
+ }
233
+ }
234
+ catch (err) {
235
+ fundSpin.fail("Fund transfer failed");
236
+ const msg = err instanceof Error ? err.message : String(err);
237
+ return { action: "failed", message: `Fund transfer failed: ${msg}` };
238
+ }
239
+ }
240
+ else {
241
+ writeStderr(colors.success(` Balance OK (${currentLocked.toFixed(4)} 0G >= ${pricing.recommendedMinLockedOg.toFixed(3)} 0G min)`));
242
+ }
243
+ // ── 6e. Acknowledge provider signer (with retry/readback) ─────────
244
+ const ackSpin = spinner("Acknowledging provider signer...");
245
+ ackSpin.start();
246
+ let ackWarning = false;
247
+ try {
248
+ await withSuppressedConsole(() => broker.inference.acknowledgeProviderSigner(selectedProvider));
249
+ }
250
+ catch {
251
+ // May already be acknowledged — continue to readback
252
+ }
253
+ // Readback: poll acknowledged() with timeout
254
+ const ACK_TIMEOUT_MS = 120_000;
255
+ const ACK_POLL_MS = 5_000;
256
+ const ackDeadline = Date.now() + ACK_TIMEOUT_MS;
257
+ let ackConfirmed = false;
258
+ while (Date.now() < ackDeadline) {
259
+ try {
260
+ ackConfirmed = await withSuppressedConsole(() => broker.inference.acknowledged(selectedProvider));
261
+ if (ackConfirmed)
262
+ break;
263
+ }
264
+ catch {
265
+ // Retry on error
266
+ }
267
+ await new Promise(r => setTimeout(r, ACK_POLL_MS));
268
+ }
269
+ if (ackConfirmed) {
270
+ ackSpin.succeed("Provider signer acknowledged (verified on-chain)");
271
+ }
272
+ else {
273
+ ackSpin.warn("Provider signer ACK sent but not confirmed within timeout");
274
+ ackWarning = true;
275
+ }
276
+ // ── 6f. Create API key (token ID 0, auto) ─────────────────────────
277
+ const apiKeySpin = spinner("Creating API key on-chain...");
278
+ apiKeySpin.start();
279
+ let apiKeyInfo;
280
+ try {
281
+ apiKeyInfo = await withSuppressedConsole(() => broker.inference.requestProcessor.createApiKey(selectedProvider, {
282
+ tokenId: 0,
283
+ expiresIn: 0,
284
+ }));
285
+ apiKeySpin.succeed("API key created");
286
+ }
287
+ catch (err) {
288
+ apiKeySpin.fail("API key creation failed");
289
+ const msg = err instanceof Error ? err.message : String(err);
290
+ return { action: "failed", message: `API key creation failed: ${msg}` };
291
+ }
292
+ // ── 6g. Patch OpenClaw config (auto — set default) ────────────────
293
+ let metadata;
294
+ try {
295
+ metadata = await withSuppressedConsole(() => broker.inference.getServiceMetadata(selectedProvider));
296
+ }
297
+ catch (err) {
298
+ const msg = err instanceof Error ? err.message : String(err);
299
+ return { action: "failed", message: `Failed to get provider metadata: ${msg}` };
300
+ }
301
+ const providerConfig = {
302
+ baseUrl: metadata.endpoint,
303
+ apiKey: apiKeyInfo.rawToken,
304
+ api: "openai-completions",
305
+ models: [{
306
+ id: metadata.model,
307
+ name: `${metadata.model} (0G Compute)`,
308
+ contextWindow: 128000,
309
+ maxTokens: 8192,
310
+ }],
311
+ };
312
+ patchOpenclawConfig("models.providers.zg", providerConfig, { force: true });
313
+ patchOpenclawConfig("models.mode", "merge", { force: false });
314
+ patchOpenclawConfig("agents.defaults.model", {
315
+ primary: `zg/${metadata.model}`,
316
+ }, { force: true });
317
+ writeStderr(colors.success(" ✓ OpenClaw config patched"));
318
+ writeStderr(colors.muted(` Default model: zg/${metadata.model}`));
319
+ // ── Persist provider state for cross-invocation readiness detection ─
320
+ saveComputeState({
321
+ activeProvider: selectedProvider,
322
+ model: metadata.model,
323
+ configuredAt: Date.now(),
324
+ });
325
+ // ── Done ──────────────────────────────────────────────────────────
326
+ state.computeReady = true;
327
+ state.selectedProvider = selectedProvider;
328
+ logger.info(`[Onboard] 0G Compute configured: provider=${selectedProvider}, model=${metadata.model}`);
329
+ const summaryParts = [
330
+ `Provider: ${selectedProvider.slice(0, 10)}...`,
331
+ `Model: ${metadata.model}`,
332
+ `API key: ${redactToken(apiKeyInfo.rawToken)}`,
333
+ ];
334
+ if (ackWarning) {
335
+ summaryParts.push("⚠ ACK not confirmed on-chain (may propagate shortly)");
336
+ return { action: "configured_with_warning", message: summaryParts.join(" | ") };
337
+ }
338
+ return { action: "configured", message: summaryParts.join(" | ") };
339
+ }
340
+ export const computeStep = {
341
+ name: "0G Compute",
342
+ description: "Sets up decentralized AI inference. Instead of paying OpenAI/Anthropic, your agent runs through 0G Network — powered and paid with 0G tokens.",
343
+ detect,
344
+ run,
345
+ };
346
+ //# sourceMappingURL=compute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../../src/commands/onboard/steps/compute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OnboardStep } from "../types.js";
2
+ export declare const configStep: OnboardStep;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/commands/onboard/steps/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,WAAW,EAA0B,MAAM,aAAa,CAAC;AAyBrF,eAAO,MAAM,UAAU,EAAE,WAKxB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { configExists, getDefaultConfig, loadConfig, saveConfig } from "../../../config/store.js";
2
+ import { CONFIG_FILE } from "../../../config/paths.js";
3
+ function detect(state) {
4
+ const exists = configExists();
5
+ if (exists) {
6
+ const cfg = loadConfig();
7
+ state.configInitialized = true;
8
+ return {
9
+ configured: true,
10
+ summary: `Config at ${CONFIG_FILE} (chain: ${cfg.chain.chainId})`,
11
+ };
12
+ }
13
+ return { configured: false, summary: "No config file found" };
14
+ }
15
+ async function run(state) {
16
+ const cfg = getDefaultConfig();
17
+ saveConfig(cfg);
18
+ state.configInitialized = true;
19
+ return {
20
+ action: "configured",
21
+ message: `Config initialized (0G Mainnet, chain ${cfg.chain.chainId})`,
22
+ };
23
+ }
24
+ export const configStep = {
25
+ name: "Configuration",
26
+ description: "Creates your local settings file — stores your preferred RPC endpoint and network config. Like .env for your crypto wallet.",
27
+ detect,
28
+ run,
29
+ };
30
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/commands/onboard/steps/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,SAAS,MAAM,CAAC,KAAmB;IACjC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC/B,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,aAAa,WAAW,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG;SAClE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,KAAmB;IACpC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC/B,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,yCAAyC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG;KACvE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,6HAA6H;IAC1I,MAAM;IACN,GAAG;CACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { OnboardStep } from "../types.js";
2
+ export declare const monitorStep: OnboardStep;
3
+ //# sourceMappingURL=monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../../../src/commands/onboard/steps/monitor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAgB,WAAW,EAA0B,MAAM,aAAa,CAAC;AAgKrF,eAAO,MAAM,WAAW,EAAE,WAKzB,CAAC"}
@@ -0,0 +1,157 @@
1
+ import { existsSync, readFileSync, openSync, mkdirSync, closeSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { spawn } from "node:child_process";
4
+ import inquirer from "inquirer";
5
+ import { ZG_COMPUTE_DIR, ZG_MONITOR_PID_FILE, ZG_MONITOR_LOG_FILE, ZG_MONITOR_STATE_FILE } from "../../../0g-compute/constants.js";
6
+ import { writeStderr } from "../../../utils/output.js";
7
+ import { colors } from "../../../utils/ui.js";
8
+ function detect(state) {
9
+ if (!existsSync(ZG_MONITOR_PID_FILE)) {
10
+ return { configured: false, summary: "Balance monitor not running" };
11
+ }
12
+ let pid;
13
+ try {
14
+ pid = parseInt(readFileSync(ZG_MONITOR_PID_FILE, "utf-8").trim(), 10);
15
+ process.kill(pid, 0); // Check if alive
16
+ }
17
+ catch {
18
+ return { configured: false, summary: "Monitor not running (stale PID file)" };
19
+ }
20
+ // PID is alive — check state file for config parity
21
+ if (state.selectedProvider && existsSync(ZG_MONITOR_STATE_FILE)) {
22
+ try {
23
+ const monitorState = JSON.parse(readFileSync(ZG_MONITOR_STATE_FILE, "utf-8"));
24
+ const monitorProviders = (monitorState.providers ?? []).map(p => p.toLowerCase());
25
+ if (!monitorProviders.includes(state.selectedProvider.toLowerCase())) {
26
+ return {
27
+ configured: false,
28
+ summary: `Monitor running (PID ${pid}) but not tracking current provider — reconfigure recommended`,
29
+ };
30
+ }
31
+ }
32
+ catch {
33
+ // Cannot parse state file — treat as running with warning
34
+ state.monitorRunning = true;
35
+ return {
36
+ configured: true,
37
+ summary: `Monitor running (PID ${pid})`,
38
+ warning: "Could not verify monitor config — state file unreadable",
39
+ };
40
+ }
41
+ }
42
+ state.monitorRunning = true;
43
+ return { configured: true, summary: `Monitor running (PID ${pid})` };
44
+ }
45
+ async function run(state) {
46
+ if (!state.selectedProvider) {
47
+ return { action: "failed", message: "No provider selected. Complete the 0G Compute step first." };
48
+ }
49
+ if (!state.webhooksConfigured) {
50
+ writeStderr(colors.warn(" ⚠ Notifications not configured — monitor will check balance but cannot send alerts."));
51
+ writeStderr(colors.muted(" To enable alerts, go back and set up Notifications."));
52
+ writeStderr("");
53
+ }
54
+ const { startMonitor } = await inquirer.prompt([{
55
+ type: "confirm",
56
+ name: "startMonitor",
57
+ message: "Start balance monitor daemon?",
58
+ default: true,
59
+ }]);
60
+ if (!startMonitor) {
61
+ return { action: "skipped", message: "Monitor not started" };
62
+ }
63
+ const { mode } = await inquirer.prompt([{
64
+ type: "list",
65
+ name: "mode",
66
+ message: "Monitor mode:",
67
+ choices: [
68
+ { name: "Recommended (auto-calculates threshold from provider pricing)", value: "recommended" },
69
+ { name: "Fixed threshold", value: "fixed" },
70
+ ],
71
+ }]);
72
+ let threshold;
73
+ let buffer = "0";
74
+ if (mode === "fixed") {
75
+ const { thresholdInput } = await inquirer.prompt([{
76
+ type: "input",
77
+ name: "thresholdInput",
78
+ message: "Alert threshold (in 0G):",
79
+ default: "1.0",
80
+ validate: (input) => {
81
+ const n = Number(input);
82
+ return (Number.isFinite(n) && n > 0) || "Must be a positive number";
83
+ },
84
+ }]);
85
+ threshold = thresholdInput;
86
+ }
87
+ else {
88
+ const { bufferInput } = await inquirer.prompt([{
89
+ type: "input",
90
+ name: "bufferInput",
91
+ message: "Extra buffer above recommended min (in 0G):",
92
+ default: "0",
93
+ validate: (input) => {
94
+ const n = Number(input);
95
+ return (Number.isFinite(n) && n >= 0) || "Must be >= 0";
96
+ },
97
+ }]);
98
+ buffer = bufferInput;
99
+ }
100
+ const { interval } = await inquirer.prompt([{
101
+ type: "input",
102
+ name: "interval",
103
+ message: "Check interval (seconds):",
104
+ default: "300",
105
+ validate: (input) => {
106
+ const n = Number(input);
107
+ return (Number.isInteger(n) && n >= 60) || "Must be an integer >= 60";
108
+ },
109
+ }]);
110
+ // Ensure log directory
111
+ if (!existsSync(ZG_COMPUTE_DIR)) {
112
+ mkdirSync(ZG_COMPUTE_DIR, { recursive: true });
113
+ }
114
+ // Build daemon args
115
+ const childArgs = [
116
+ "0g-compute", "monitor", "start",
117
+ "--providers", state.selectedProvider,
118
+ "--mode", mode,
119
+ "--interval", interval,
120
+ "--buffer", buffer,
121
+ ];
122
+ if (threshold != null) {
123
+ childArgs.push("--threshold", threshold);
124
+ }
125
+ const cliPath = fileURLToPath(new URL("../../../cli.js", import.meta.url));
126
+ const logFd = openSync(ZG_MONITOR_LOG_FILE, "a");
127
+ try {
128
+ const child = spawn(process.execPath, [cliPath, ...childArgs], {
129
+ detached: true,
130
+ stdio: ["ignore", logFd, logFd],
131
+ });
132
+ child.unref();
133
+ closeSync(logFd);
134
+ state.monitorRunning = true;
135
+ writeStderr(colors.muted(` PID: ${child.pid}`));
136
+ writeStderr(colors.muted(` Log: ${ZG_MONITOR_LOG_FILE}`));
137
+ return {
138
+ action: "configured",
139
+ message: `Monitor daemon started (PID ${child.pid})`,
140
+ };
141
+ }
142
+ catch (err) {
143
+ try {
144
+ closeSync(logFd);
145
+ }
146
+ catch { /* ignore */ }
147
+ const msg = err instanceof Error ? err.message : String(err);
148
+ return { action: "failed", message: `Failed to start monitor: ${msg}` };
149
+ }
150
+ }
151
+ export const monitorStep = {
152
+ name: "Balance Monitor",
153
+ description: "Starts a background watchdog that checks your AI compute balance. It alerts you before your credits run out so your agent never goes offline.",
154
+ detect,
155
+ run,
156
+ };
157
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../../../src/commands/onboard/steps/monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OnboardStep } from "../types.js";
2
+ export declare const openclawStep: OnboardStep;
3
+ //# sourceMappingURL=openclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../../../src/commands/onboard/steps/openclaw.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAgB,WAAW,EAA0B,MAAM,aAAa,CAAC;AA6BrF,eAAO,MAAM,YAAY,EAAE,WAK1B,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ import { linkOpenclawSkill } from "../../../setup/openclaw-link.js";
5
+ import { writeStderr } from "../../../utils/output.js";
6
+ import { colors } from "../../../utils/ui.js";
7
+ const SKILL_NAME = "echo0g";
8
+ function detect(state) {
9
+ const target = join(homedir(), ".openclaw", "skills", SKILL_NAME);
10
+ if (existsSync(target)) {
11
+ state.openclawLinked = true;
12
+ return { configured: true, summary: `Skill linked at ${target}` };
13
+ }
14
+ return { configured: false, summary: "OpenClaw skill not linked" };
15
+ }
16
+ async function run(state) {
17
+ const result = linkOpenclawSkill(SKILL_NAME, { force: true });
18
+ state.openclawLinked = true;
19
+ writeStderr(colors.muted(` Source: ${result.source}`));
20
+ writeStderr(colors.muted(` Target: ${result.target} (${result.linkType})`));
21
+ if (result.workspaceLinked) {
22
+ writeStderr(colors.muted(` Workspace: ${result.workspaceTarget}`));
23
+ }
24
+ return {
25
+ action: "configured",
26
+ message: `OpenClaw skill linked (${result.linkType})`,
27
+ };
28
+ }
29
+ export const openclawStep = {
30
+ name: "OpenClaw Skill",
31
+ description: "Links EchoClaw into your AI agent platform. After this, your AI assistant can trade, check balances, and manage your wallet through chat.",
32
+ detect,
33
+ run,
34
+ };
35
+ //# sourceMappingURL=openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../../src/commands/onboard/steps/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,MAAM,UAAU,GAAG,QAAQ,CAAC;AAE5B,SAAS,MAAM,CAAC,KAAmB;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,mBAAmB,MAAM,EAAE,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,KAAmB;IACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IAE5B,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxD,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,0BAA0B,MAAM,CAAC,QAAQ,GAAG;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAgB;IACvC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,2IAA2I;IACxJ,MAAM;IACN,GAAG;CACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { OnboardStep } from "../types.js";
2
+ export declare const passwordStep: OnboardStep;
3
+ //# sourceMappingURL=password.d.ts.map