arc402-cli 1.8.6 → 1.8.8

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 (85) hide show
  1. package/dist/commands/telegram.d.ts +3 -0
  2. package/dist/commands/telegram.d.ts.map +1 -0
  3. package/dist/commands/telegram.js +147 -0
  4. package/dist/commands/telegram.js.map +1 -0
  5. package/dist/commands/wallet.d.ts.map +1 -1
  6. package/dist/commands/wallet.js +18 -0
  7. package/dist/commands/wallet.js.map +1 -1
  8. package/dist/program.d.ts.map +1 -1
  9. package/dist/program.js +2 -0
  10. package/dist/program.js.map +1 -1
  11. package/package.json +1 -1
  12. package/dist/tui-esm/App.js +0 -136
  13. package/dist/tui-esm/App.js.map +0 -1
  14. package/dist/tui-esm/Footer.js +0 -13
  15. package/dist/tui-esm/Footer.js.map +0 -1
  16. package/dist/tui-esm/Header.js +0 -19
  17. package/dist/tui-esm/Header.js.map +0 -1
  18. package/dist/tui-esm/InputLine.js +0 -121
  19. package/dist/tui-esm/InputLine.js.map +0 -1
  20. package/dist/tui-esm/Viewport.js +0 -39
  21. package/dist/tui-esm/Viewport.js.map +0 -1
  22. package/dist/tui-esm/WalletConnectPairing.js +0 -61
  23. package/dist/tui-esm/WalletConnectPairing.js.map +0 -1
  24. package/dist/tui-esm/command-catalog.js +0 -20
  25. package/dist/tui-esm/command-catalog.js.map +0 -1
  26. package/dist/tui-esm/command-renderers.js +0 -180
  27. package/dist/tui-esm/command-renderers.js.map +0 -1
  28. package/dist/tui-esm/commerce-format.js +0 -19
  29. package/dist/tui-esm/commerce-format.js.map +0 -1
  30. package/dist/tui-esm/components/Button.js +0 -21
  31. package/dist/tui-esm/components/Button.js.map +0 -1
  32. package/dist/tui-esm/components/CeremonyView.js +0 -10
  33. package/dist/tui-esm/components/CeremonyView.js.map +0 -1
  34. package/dist/tui-esm/components/CompletionDropdown.js +0 -23
  35. package/dist/tui-esm/components/CompletionDropdown.js.map +0 -1
  36. package/dist/tui-esm/components/ConfirmPrompt.js +0 -10
  37. package/dist/tui-esm/components/ConfirmPrompt.js.map +0 -1
  38. package/dist/tui-esm/components/CustomTextInput.js +0 -99
  39. package/dist/tui-esm/components/CustomTextInput.js.map +0 -1
  40. package/dist/tui-esm/components/InteractiveTable.js +0 -61
  41. package/dist/tui-esm/components/InteractiveTable.js.map +0 -1
  42. package/dist/tui-esm/components/StepSpinner.js +0 -32
  43. package/dist/tui-esm/components/StepSpinner.js.map +0 -1
  44. package/dist/tui-esm/components/Toast.js +0 -29
  45. package/dist/tui-esm/components/Toast.js.map +0 -1
  46. package/dist/tui-esm/components/commerce/AgreementList.js +0 -25
  47. package/dist/tui-esm/components/commerce/AgreementList.js.map +0 -1
  48. package/dist/tui-esm/components/commerce/ComputeCard.js +0 -9
  49. package/dist/tui-esm/components/commerce/ComputeCard.js.map +0 -1
  50. package/dist/tui-esm/components/commerce/DiscoverList.js +0 -14
  51. package/dist/tui-esm/components/commerce/DiscoverList.js.map +0 -1
  52. package/dist/tui-esm/components/commerce/HireCard.js +0 -11
  53. package/dist/tui-esm/components/commerce/HireCard.js.map +0 -1
  54. package/dist/tui-esm/components/commerce/RoundsList.js +0 -9
  55. package/dist/tui-esm/components/commerce/RoundsList.js.map +0 -1
  56. package/dist/tui-esm/components/commerce/SquadCard.js +0 -10
  57. package/dist/tui-esm/components/commerce/SquadCard.js.map +0 -1
  58. package/dist/tui-esm/components/commerce/StatusCard.js +0 -10
  59. package/dist/tui-esm/components/commerce/StatusCard.js.map +0 -1
  60. package/dist/tui-esm/components/commerce/SubscribeCard.js +0 -10
  61. package/dist/tui-esm/components/commerce/SubscribeCard.js.map +0 -1
  62. package/dist/tui-esm/components/commerce/WorkroomCard.js +0 -10
  63. package/dist/tui-esm/components/commerce/WorkroomCard.js.map +0 -1
  64. package/dist/tui-esm/components/commerce/common.js +0 -71
  65. package/dist/tui-esm/components/commerce/common.js.map +0 -1
  66. package/dist/tui-esm/components/commerce/index.js +0 -27
  67. package/dist/tui-esm/components/commerce/index.js.map +0 -1
  68. package/dist/tui-esm/index.js +0 -55
  69. package/dist/tui-esm/index.js.map +0 -1
  70. package/dist/tui-esm/kernel.js +0 -734
  71. package/dist/tui-esm/kernel.js.map +0 -1
  72. package/dist/tui-esm/render-inline.js +0 -32
  73. package/dist/tui-esm/render-inline.js.map +0 -1
  74. package/dist/tui-esm/useChat.js +0 -91
  75. package/dist/tui-esm/useChat.js.map +0 -1
  76. package/dist/tui-esm/useCommand.js +0 -142
  77. package/dist/tui-esm/useCommand.js.map +0 -1
  78. package/dist/tui-esm/useNotifications.js +0 -17
  79. package/dist/tui-esm/useNotifications.js.map +0 -1
  80. package/dist/tui-esm/useScroll.js +0 -46
  81. package/dist/tui-esm/useScroll.js.map +0 -1
  82. package/dist/tui-esm/useTerminalSize.js +0 -32
  83. package/dist/tui-esm/useTerminalSize.js.map +0 -1
  84. package/hermes/plugins/dist/arc402_hermes-1.0.0-py3-none-any.whl +0 -0
  85. package/hermes/plugins/dist/arc402_hermes-1.0.0.tar.gz +0 -0
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerTelegramCommands(program: Command): void;
3
+ //# sourceMappingURL=telegram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../src/commands/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoDpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6G/D"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerTelegramCommands = registerTelegramCommands;
7
+ const prompts_1 = __importDefault(require("prompts"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const config_1 = require("../config");
10
+ const colors_1 = require("../ui/colors");
11
+ async function telegramApi(botToken, method, body) {
12
+ const res = await fetch(`https://api.telegram.org/bot${botToken}/${method}`, {
13
+ method: body ? "POST" : "GET",
14
+ headers: body ? { "Content-Type": "application/json" } : undefined,
15
+ body: body ? JSON.stringify(body) : undefined,
16
+ signal: AbortSignal.timeout(15000),
17
+ });
18
+ const json = await res.json();
19
+ return json;
20
+ }
21
+ async function validateBotToken(botToken) {
22
+ try {
23
+ const res = await telegramApi(botToken, "getMe");
24
+ if (!res.ok)
25
+ return { ok: false, error: res.description ?? "Telegram rejected the bot token." };
26
+ return { ok: true, username: res.result?.username };
27
+ }
28
+ catch (error) {
29
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
30
+ }
31
+ }
32
+ async function sendTestMessage(botToken, chatId, threadId) {
33
+ try {
34
+ const res = await telegramApi(botToken, "sendMessage", {
35
+ chat_id: chatId,
36
+ ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
37
+ text: "🔧 ARC-402 CLI Telegram delivery test — approval prompts can be sent here.",
38
+ });
39
+ if (!res.ok || !res.result)
40
+ return { ok: false, error: res.description ?? "Telegram rejected the test message." };
41
+ return { ok: true, messageId: res.result.message_id };
42
+ }
43
+ catch (error) {
44
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
45
+ }
46
+ }
47
+ function registerTelegramCommands(program) {
48
+ const telegram = program.command("telegram").description("Configure Telegram delivery for WalletConnect approval prompts");
49
+ telegram.command("show")
50
+ .description("Show current Telegram delivery settings")
51
+ .action(() => {
52
+ const cfg = (0, config_1.loadConfig)();
53
+ console.log(JSON.stringify({
54
+ telegramBotToken: cfg.telegramBotToken ? "***configured***" : undefined,
55
+ telegramChatId: cfg.telegramChatId,
56
+ telegramThreadId: cfg.telegramThreadId,
57
+ }, null, 2));
58
+ });
59
+ telegram.command("init")
60
+ .description("Interactive setup for Telegram approval-button delivery")
61
+ .option("--bot-token <token>", "Telegram bot token from BotFather")
62
+ .option("--chat-id <id>", "Telegram chat ID, e.g. 123456789 or -100... for groups")
63
+ .option("--thread-id <id>", "Telegram topic/thread ID for forum groups")
64
+ .option("--skip-test", "Skip sending a Telegram test message")
65
+ .action(async (opts) => {
66
+ const existing = (0, config_1.loadConfig)();
67
+ console.log();
68
+ console.log(chalk_1.default.white("Telegram approval-button setup"));
69
+ console.log(chalk_1.default.dim(" 1. Create a bot with @BotFather"));
70
+ console.log(chalk_1.default.dim(" 2. Add that bot to the target chat/group"));
71
+ console.log(chalk_1.default.dim(" 3. Paste the bot token + chat ID below"));
72
+ console.log(chalk_1.default.dim(" 4. Optional: add a forum topic/thread ID"));
73
+ console.log();
74
+ const answers = await (0, prompts_1.default)([
75
+ {
76
+ type: opts.botToken ? null : "text",
77
+ name: "botToken",
78
+ message: "Telegram bot token",
79
+ initial: existing.telegramBotToken,
80
+ validate: (value) => value.trim().length > 20 ? true : "Enter a valid bot token from BotFather.",
81
+ },
82
+ {
83
+ type: opts.chatId ? null : "text",
84
+ name: "chatId",
85
+ message: "Telegram chat ID",
86
+ initial: existing.telegramChatId,
87
+ validate: (value) => value.trim() ? true : "Chat ID is required.",
88
+ },
89
+ {
90
+ type: opts.threadId !== undefined ? null : "text",
91
+ name: "threadId",
92
+ message: "Telegram thread/topic ID (optional)",
93
+ initial: existing.telegramThreadId !== undefined ? String(existing.telegramThreadId) : undefined,
94
+ validate: (value) => !value.trim() || /^\d+$/.test(value.trim()) ? true : "Thread ID must be numeric.",
95
+ },
96
+ ], {
97
+ onCancel: () => {
98
+ console.log(chalk_1.default.red("✗ Telegram setup cancelled"));
99
+ return true;
100
+ },
101
+ });
102
+ const botToken = (opts.botToken ?? answers.botToken ?? existing.telegramBotToken ?? "").trim();
103
+ const chatId = (opts.chatId ?? answers.chatId ?? existing.telegramChatId ?? "").trim();
104
+ const threadRaw = (opts.threadId ?? answers.threadId ?? "").trim();
105
+ const threadId = threadRaw ? Number(threadRaw) : undefined;
106
+ if (!botToken || !chatId) {
107
+ console.log(chalk_1.default.red("✗ Telegram setup incomplete"));
108
+ return;
109
+ }
110
+ process.stdout.write("Validating bot token… ");
111
+ const botCheck = await validateBotToken(botToken);
112
+ if (!botCheck.ok) {
113
+ console.log(chalk_1.default.red("failed"));
114
+ console.log(chalk_1.default.red(` ${botCheck.error}`));
115
+ console.log(chalk_1.default.dim(" Fix the bot token first, then rerun `arc402 telegram init`."));
116
+ return;
117
+ }
118
+ console.log(chalk_1.default.green(`✓ ${botCheck.username ? `@${botCheck.username}` : "bot ok"}`));
119
+ const cfg = {
120
+ ...existing,
121
+ telegramBotToken: botToken,
122
+ telegramChatId: chatId,
123
+ ...(threadId !== undefined ? { telegramThreadId: threadId } : {}),
124
+ };
125
+ if (threadId === undefined)
126
+ delete cfg.telegramThreadId;
127
+ (0, config_1.saveConfig)(cfg);
128
+ console.log();
129
+ console.log(" " + colors_1.c.success + colors_1.c.white(" Telegram delivery saved"));
130
+ console.log(chalk_1.default.dim(" Chat ID ") + chalk_1.default.white(chatId));
131
+ console.log(chalk_1.default.dim(" Thread ID ") + chalk_1.default.white(threadId !== undefined ? String(threadId) : "(none)"));
132
+ console.log();
133
+ if (!opts.skipTest) {
134
+ process.stdout.write("Sending test message… ");
135
+ const test = await sendTestMessage(botToken, chatId, threadId);
136
+ if (!test.ok) {
137
+ console.log(chalk_1.default.red("failed"));
138
+ console.log(chalk_1.default.red(` ${test.error}`));
139
+ console.log(chalk_1.default.dim(" The config is saved, but Telegram delivery will not work until the bot can message that chat/topic."));
140
+ return;
141
+ }
142
+ console.log(chalk_1.default.green(`✓ message ${test.messageId}`));
143
+ }
144
+ console.log(chalk_1.default.dim(" Next: any WalletConnect-backed ARC-402 CLI command can now send approval prompts here."));
145
+ });
146
+ }
147
+ //# sourceMappingURL=telegram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/commands/telegram.ts"],"names":[],"mappings":";;;;;AAoDA,4DA6GC;AAhKD,sDAA8B;AAC9B,kDAA0B;AAC1B,sCAAmD;AACnD,yCAAiC;AAYjC,KAAK,UAAU,WAAW,CAAI,QAAgB,EAAE,MAAc,EAAE,IAA8B;IAC5F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,+BAA+B,QAAQ,IAAI,MAAM,EAAE,EAAE;QAC3E,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QAC7B,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS;QAClE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA4B,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAwB,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,IAAI,kCAAkC,EAAE,CAAC;QAChG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,MAAc,EAAE,QAAiB;IAChF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAwB,QAAQ,EAAE,aAAa,EAAE;YAC5E,OAAO,EAAE,MAAM;YACf,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,IAAI,EAAE,4EAA4E;SACnF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,IAAI,qCAAqC,EAAE,CAAC;QAClH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAAgB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,gEAAgE,CAAC,CAAC;IAE3H,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,GAAG,GAAG,IAAA,mBAAU,GAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;YACvE,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;SACvC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEL,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;SAClE,MAAM,CAAC,gBAAgB,EAAE,wDAAwD,CAAC;SAClF,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;SACvE,MAAM,CAAC,aAAa,EAAE,sCAAsC,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,IAAmF,EAAE,EAAE;QACpG,MAAM,QAAQ,GAAG,IAAA,mBAAU,GAAE,CAAC;QAE9B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,OAAO,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC5B;gBACE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBACnC,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,oBAAoB;gBAC7B,OAAO,EAAE,QAAQ,CAAC,gBAAgB;gBAClC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yCAAyC;aACzG;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBACjC,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,kBAAkB;gBAC3B,OAAO,EAAE,QAAQ,CAAC,cAAc;gBAChC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB;aAC1E;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBACjD,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,qCAAqC;gBAC9C,OAAO,EAAE,QAAQ,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;gBAChG,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;aAC/G;SACF,EAAE;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/F,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvF,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3D,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAExF,MAAM,GAAG,GAAG;YACV,GAAG,QAAQ;YACX,gBAAgB,EAAE,QAAQ;YAC1B,cAAc,EAAE,MAAM;YACtB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE,CAAC;QACF,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,gBAAgB,CAAC;QACxD,IAAA,mBAAU,EAAC,GAAG,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAC,CAAC,OAAO,GAAG,UAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,eAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClH,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uGAAuG,CAAC,CAAC,CAAC;gBAChI,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0qBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4tG7D"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwrBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuuG7D"}
@@ -158,6 +158,13 @@ function getWalletAddressFromFactoryLogs(factoryInterface, logs) {
158
158
  }
159
159
  return null;
160
160
  }
161
+ async function assertAddressHasCode(provider, address, label) {
162
+ const code = await provider.getCode(address);
163
+ if (code !== "0x")
164
+ return;
165
+ throw new Error(`${label} ${address} has no contract code. ` +
166
+ `This usually means an owner EOA was saved instead of the deployed ARC402Wallet contract.`);
167
+ }
161
168
  // Standard onboarding categories required for a newly deployed wallet.
162
169
  // These cover the full ARC-402 flow: spending, hiring, compute, research, protocol ops.
163
170
  const ONBOARDING_CATEGORIES = [
@@ -1100,6 +1107,7 @@ function registerWalletCommands(program) {
1100
1107
  console.error("UserOperation failed on-chain.");
1101
1108
  process.exit(1);
1102
1109
  }
1110
+ await assertAddressHasCode(provider, senderAddress, "Deployed wallet");
1103
1111
  config.walletContractAddress = senderAddress;
1104
1112
  config.ownerAddress = ownerAddress;
1105
1113
  (0, config_1.saveConfig)(config);
@@ -1229,6 +1237,7 @@ function registerWalletCommands(program) {
1229
1237
  console.error("Could not find WalletDeployed/WalletCreated event in receipt. Check the transaction on-chain.");
1230
1238
  process.exit(1);
1231
1239
  }
1240
+ await assertAddressHasCode(provider, deployedWallet, "Deployed wallet");
1232
1241
  walletAddress = deployedWallet;
1233
1242
  // ── Step 1 complete: save wallet + owner immediately ─────────────────
1234
1243
  config.walletContractAddress = walletAddress;
@@ -1269,6 +1278,7 @@ function registerWalletCommands(program) {
1269
1278
  deploySpinner.fail("Could not find WalletDeployed/WalletCreated event in receipt. Check the transaction on-chain.");
1270
1279
  process.exit(1);
1271
1280
  }
1281
+ await assertAddressHasCode(provider, walletAddress, "Deployed wallet");
1272
1282
  deploySpinner.succeed("Wallet deployed");
1273
1283
  // Generate guardian key (separate from hot key) and call setGuardian
1274
1284
  const guardianWallet = ethers_1.ethers.Wallet.createRandom();
@@ -1327,6 +1337,14 @@ function registerWalletCommands(program) {
1327
1337
  const policyAddress = resolvePolicyEngineAddress(config);
1328
1338
  const chainId = config.network === "base-mainnet" ? 8453 : 84532;
1329
1339
  const provider = new ethers_1.ethers.JsonRpcProvider(config.rpcUrl);
1340
+ try {
1341
+ await assertAddressHasCode(provider, walletAddress, "Configured walletContractAddress");
1342
+ }
1343
+ catch (error) {
1344
+ console.error(colors_1.c.failure + " " + colors_1.c.red(error instanceof Error ? error.message : String(error)));
1345
+ console.error(colors_1.c.dim("Tip: use the deployed wallet contract address, not the owner EOA, then rerun onboarding."));
1346
+ process.exit(1);
1347
+ }
1330
1348
  // Resolve protocol contracts to whitelist
1331
1349
  const handshakeAddress = config.handshakeAddress ??
1332
1350
  config_1.NETWORK_DEFAULTS[config.network]?.handshakeAddress ??