orca-agent 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 (97) hide show
  1. package/dist/__tests__/challenge.test.d.ts +2 -0
  2. package/dist/__tests__/challenge.test.d.ts.map +1 -0
  3. package/dist/__tests__/challenge.test.js +146 -0
  4. package/dist/__tests__/challenge.test.js.map +1 -0
  5. package/dist/__tests__/config.test.d.ts +2 -0
  6. package/dist/__tests__/config.test.d.ts.map +1 -0
  7. package/dist/__tests__/config.test.js +141 -0
  8. package/dist/__tests__/config.test.js.map +1 -0
  9. package/dist/__tests__/keypair.test.d.ts +2 -0
  10. package/dist/__tests__/keypair.test.d.ts.map +1 -0
  11. package/dist/__tests__/keypair.test.js +144 -0
  12. package/dist/__tests__/keypair.test.js.map +1 -0
  13. package/dist/__tests__/task_handler.test.d.ts +2 -0
  14. package/dist/__tests__/task_handler.test.d.ts.map +1 -0
  15. package/dist/__tests__/task_handler.test.js +216 -0
  16. package/dist/__tests__/task_handler.test.js.map +1 -0
  17. package/dist/cli.d.ts +3 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +87 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/commands/connect.d.ts +2 -0
  22. package/dist/commands/connect.d.ts.map +1 -0
  23. package/dist/commands/connect.js +81 -0
  24. package/dist/commands/connect.js.map +1 -0
  25. package/dist/commands/daemon.d.ts +2 -0
  26. package/dist/commands/daemon.d.ts.map +1 -0
  27. package/dist/commands/daemon.js +42 -0
  28. package/dist/commands/daemon.js.map +1 -0
  29. package/dist/commands/join.d.ts +8 -0
  30. package/dist/commands/join.d.ts.map +1 -0
  31. package/dist/commands/join.js +96 -0
  32. package/dist/commands/join.js.map +1 -0
  33. package/dist/commands/status.d.ts +2 -0
  34. package/dist/commands/status.d.ts.map +1 -0
  35. package/dist/commands/status.js +75 -0
  36. package/dist/commands/status.js.map +1 -0
  37. package/dist/commands/stop.d.ts +2 -0
  38. package/dist/commands/stop.d.ts.map +1 -0
  39. package/dist/commands/stop.js +10 -0
  40. package/dist/commands/stop.js.map +1 -0
  41. package/dist/config.d.ts +26 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +59 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/crypto/keypair.d.ts +14 -0
  46. package/dist/crypto/keypair.d.ts.map +1 -0
  47. package/dist/crypto/keypair.js +76 -0
  48. package/dist/crypto/keypair.js.map +1 -0
  49. package/dist/daemon/heartbeat.d.ts +5 -0
  50. package/dist/daemon/heartbeat.d.ts.map +1 -0
  51. package/dist/daemon/heartbeat.js +49 -0
  52. package/dist/daemon/heartbeat.js.map +1 -0
  53. package/dist/daemon/nats.d.ts +22 -0
  54. package/dist/daemon/nats.d.ts.map +1 -0
  55. package/dist/daemon/nats.js +73 -0
  56. package/dist/daemon/nats.js.map +1 -0
  57. package/dist/daemon/task_handler.d.ts +3 -0
  58. package/dist/daemon/task_handler.d.ts.map +1 -0
  59. package/dist/daemon/task_handler.js +161 -0
  60. package/dist/daemon/task_handler.js.map +1 -0
  61. package/dist/index.d.ts +7 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +8 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/install/daemon.d.ts +4 -0
  66. package/dist/install/daemon.d.ts.map +1 -0
  67. package/dist/install/daemon.js +214 -0
  68. package/dist/install/daemon.js.map +1 -0
  69. package/dist/install/skills.d.ts +4 -0
  70. package/dist/install/skills.d.ts.map +1 -0
  71. package/dist/install/skills.js +83 -0
  72. package/dist/install/skills.js.map +1 -0
  73. package/dist/moltbook/challenge.d.ts +35 -0
  74. package/dist/moltbook/challenge.d.ts.map +1 -0
  75. package/dist/moltbook/challenge.js +157 -0
  76. package/dist/moltbook/challenge.js.map +1 -0
  77. package/dist/moltbook/client.d.ts +35 -0
  78. package/dist/moltbook/client.d.ts.map +1 -0
  79. package/dist/moltbook/client.js +73 -0
  80. package/dist/moltbook/client.js.map +1 -0
  81. package/dist/moltbook/executor.d.ts +8 -0
  82. package/dist/moltbook/executor.d.ts.map +1 -0
  83. package/dist/moltbook/executor.js +74 -0
  84. package/dist/moltbook/executor.js.map +1 -0
  85. package/dist/moltbook/register.d.ts +14 -0
  86. package/dist/moltbook/register.d.ts.map +1 -0
  87. package/dist/moltbook/register.js +64 -0
  88. package/dist/moltbook/register.js.map +1 -0
  89. package/dist/openclaw/poll.d.ts +7 -0
  90. package/dist/openclaw/poll.d.ts.map +1 -0
  91. package/dist/openclaw/poll.js +57 -0
  92. package/dist/openclaw/poll.js.map +1 -0
  93. package/dist/openclaw/webhook.d.ts +16 -0
  94. package/dist/openclaw/webhook.d.ts.map +1 -0
  95. package/dist/openclaw/webhook.js +45 -0
  96. package/dist/openclaw/webhook.js.map +1 -0
  97. package/package.json +35 -0
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Tests for task handler.
3
+ */
4
+ import { describe, it, expect } from '@jest/globals';
5
+ // Helper to create a task offer
6
+ function createTaskOffer(overrides = {}) {
7
+ const futureDate = new Date();
8
+ futureDate.setHours(futureDate.getHours() + 1);
9
+ return {
10
+ task_id: 'test-task-123',
11
+ task_type: 'twitter',
12
+ action: 'like',
13
+ target_post_url: 'https://twitter.com/test/status/123',
14
+ orca_reward: '50.00',
15
+ suggested_delay_seconds: 5,
16
+ expires_at: futureDate.toISOString(),
17
+ ...overrides,
18
+ };
19
+ }
20
+ // Helper to create a config
21
+ function createConfig(overrides = {}) {
22
+ return {
23
+ agentId: 'test-agent',
24
+ coordinatorUrl: 'https://coordinator.example.com',
25
+ natsUrl: 'nats://localhost:4222',
26
+ solanaWallet: 'test-wallet',
27
+ telegramChatId: '12345',
28
+ keypairPath: '/path/to/keypair',
29
+ ...overrides,
30
+ };
31
+ }
32
+ // Re-implement checkAutoAccept logic for testing (mirrors the actual implementation)
33
+ function checkAutoAccept(offer, config) {
34
+ if (!config?.autoAccept?.enabled) {
35
+ return false;
36
+ }
37
+ const rules = config.autoAccept;
38
+ const reward = parseFloat(offer.orca_reward);
39
+ // Check min/max bounds
40
+ if (rules.minOrca !== undefined && reward < rules.minOrca) {
41
+ return false;
42
+ }
43
+ if (rules.maxOrca !== undefined && reward > rules.maxOrca) {
44
+ return false;
45
+ }
46
+ // Check allowed actions
47
+ if (rules.allowedActions && rules.allowedActions.length > 0) {
48
+ if (!rules.allowedActions.includes(offer.action)) {
49
+ return false;
50
+ }
51
+ }
52
+ return true;
53
+ }
54
+ describe('checkAutoAccept', () => {
55
+ describe('with matching rules', () => {
56
+ it('returns true when reward is within range and action is allowed', () => {
57
+ const config = createConfig({
58
+ autoAccept: {
59
+ enabled: true,
60
+ minOrca: 10,
61
+ maxOrca: 100,
62
+ allowedActions: ['like', 'comment'],
63
+ },
64
+ });
65
+ const offer = createTaskOffer({ orca_reward: '50.00', action: 'like' });
66
+ expect(checkAutoAccept(offer, config)).toBe(true);
67
+ });
68
+ it('returns true when only minOrca is set and reward exceeds it', () => {
69
+ const config = createConfig({
70
+ autoAccept: {
71
+ enabled: true,
72
+ minOrca: 25,
73
+ },
74
+ });
75
+ const offer = createTaskOffer({ orca_reward: '50.00' });
76
+ expect(checkAutoAccept(offer, config)).toBe(true);
77
+ });
78
+ it('returns true when only maxOrca is set and reward is under it', () => {
79
+ const config = createConfig({
80
+ autoAccept: {
81
+ enabled: true,
82
+ maxOrca: 100,
83
+ },
84
+ });
85
+ const offer = createTaskOffer({ orca_reward: '50.00' });
86
+ expect(checkAutoAccept(offer, config)).toBe(true);
87
+ });
88
+ it('returns true when no bounds or actions specified', () => {
89
+ const config = createConfig({
90
+ autoAccept: {
91
+ enabled: true,
92
+ },
93
+ });
94
+ const offer = createTaskOffer();
95
+ expect(checkAutoAccept(offer, config)).toBe(true);
96
+ });
97
+ it('returns true when reward equals minOrca exactly', () => {
98
+ const config = createConfig({
99
+ autoAccept: {
100
+ enabled: true,
101
+ minOrca: 50,
102
+ },
103
+ });
104
+ const offer = createTaskOffer({ orca_reward: '50.00' });
105
+ expect(checkAutoAccept(offer, config)).toBe(true);
106
+ });
107
+ it('returns true when reward equals maxOrca exactly', () => {
108
+ const config = createConfig({
109
+ autoAccept: {
110
+ enabled: true,
111
+ maxOrca: 50,
112
+ },
113
+ });
114
+ const offer = createTaskOffer({ orca_reward: '50.00' });
115
+ expect(checkAutoAccept(offer, config)).toBe(true);
116
+ });
117
+ });
118
+ describe('with non-matching rules', () => {
119
+ it('returns false when autoAccept is disabled', () => {
120
+ const config = createConfig({
121
+ autoAccept: {
122
+ enabled: false,
123
+ minOrca: 10,
124
+ maxOrca: 100,
125
+ allowedActions: ['like'],
126
+ },
127
+ });
128
+ const offer = createTaskOffer({ orca_reward: '50.00', action: 'like' });
129
+ expect(checkAutoAccept(offer, config)).toBe(false);
130
+ });
131
+ it('returns false when autoAccept is not configured', () => {
132
+ const config = createConfig();
133
+ const offer = createTaskOffer();
134
+ expect(checkAutoAccept(offer, config)).toBe(false);
135
+ });
136
+ it('returns false when config is null', () => {
137
+ const offer = createTaskOffer();
138
+ expect(checkAutoAccept(offer, null)).toBe(false);
139
+ });
140
+ it('returns false when reward is below minOrca', () => {
141
+ const config = createConfig({
142
+ autoAccept: {
143
+ enabled: true,
144
+ minOrca: 100,
145
+ },
146
+ });
147
+ const offer = createTaskOffer({ orca_reward: '50.00' });
148
+ expect(checkAutoAccept(offer, config)).toBe(false);
149
+ });
150
+ it('returns false when reward exceeds maxOrca', () => {
151
+ const config = createConfig({
152
+ autoAccept: {
153
+ enabled: true,
154
+ maxOrca: 25,
155
+ },
156
+ });
157
+ const offer = createTaskOffer({ orca_reward: '50.00' });
158
+ expect(checkAutoAccept(offer, config)).toBe(false);
159
+ });
160
+ it('returns false when action is not in allowed list', () => {
161
+ const config = createConfig({
162
+ autoAccept: {
163
+ enabled: true,
164
+ allowedActions: ['comment', 'retweet'],
165
+ },
166
+ });
167
+ const offer = createTaskOffer({ action: 'like' });
168
+ expect(checkAutoAccept(offer, config)).toBe(false);
169
+ });
170
+ it('returns false when reward is outside range', () => {
171
+ const config = createConfig({
172
+ autoAccept: {
173
+ enabled: true,
174
+ minOrca: 60,
175
+ maxOrca: 100,
176
+ },
177
+ });
178
+ const offer = createTaskOffer({ orca_reward: '50.00' });
179
+ expect(checkAutoAccept(offer, config)).toBe(false);
180
+ });
181
+ });
182
+ });
183
+ describe('task offer expiration', () => {
184
+ function isExpired(offer) {
185
+ const expiresAt = new Date(offer.expires_at);
186
+ return expiresAt <= new Date();
187
+ }
188
+ it('correctly identifies non-expired task', () => {
189
+ const futureDate = new Date();
190
+ futureDate.setHours(futureDate.getHours() + 1);
191
+ const offer = createTaskOffer({ expires_at: futureDate.toISOString() });
192
+ expect(isExpired(offer)).toBe(false);
193
+ });
194
+ it('correctly identifies expired task', () => {
195
+ const pastDate = new Date();
196
+ pastDate.setHours(pastDate.getHours() - 1);
197
+ const offer = createTaskOffer({ expires_at: pastDate.toISOString() });
198
+ expect(isExpired(offer)).toBe(true);
199
+ });
200
+ it('correctly identifies task expiring now as expired', () => {
201
+ const now = new Date();
202
+ const offer = createTaskOffer({ expires_at: now.toISOString() });
203
+ expect(isExpired(offer)).toBe(true);
204
+ });
205
+ it('handles far future expiration', () => {
206
+ const farFuture = new Date();
207
+ farFuture.setFullYear(farFuture.getFullYear() + 1);
208
+ const offer = createTaskOffer({ expires_at: farFuture.toISOString() });
209
+ expect(isExpired(offer)).toBe(false);
210
+ });
211
+ it('handles ISO date string format correctly', () => {
212
+ const offer = createTaskOffer({ expires_at: '2099-12-31T23:59:59.999Z' });
213
+ expect(isExpired(offer)).toBe(false);
214
+ });
215
+ });
216
+ //# sourceMappingURL=task_handler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task_handler.test.js","sourceRoot":"","sources":["../../src/__tests__/task_handler.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Orca Agent CLI
4
+ *
5
+ * Commands:
6
+ * - join: Register with coordinator and start daemon
7
+ * - connect-moltbook: Connect Moltbook account
8
+ * - status: Show agent status
9
+ * - stop: Stop the daemon
10
+ * - daemon: Run daemon in foreground (used by launchd/systemd)
11
+ */
12
+ import { Command } from "commander";
13
+ import { joinCommand } from "./commands/join.js";
14
+ import { connectMoltbookCommand } from "./commands/connect.js";
15
+ import { statusCommand } from "./commands/status.js";
16
+ import { stopCommand } from "./commands/stop.js";
17
+ import { daemonCommand } from "./commands/daemon.js";
18
+ const program = new Command();
19
+ program
20
+ .name("orca-agent")
21
+ .description("Orca Network Agent CLI")
22
+ .version("0.1.0");
23
+ program
24
+ .command("join")
25
+ .description("Join the Orca Network")
26
+ .requiredOption("-w, --wallet <address>", "Solana wallet address")
27
+ .requiredOption("-t, --telegram <id>", "Telegram chat ID")
28
+ .option("-c, --coordinator <url>", "Coordinator URL", "http://localhost:8000")
29
+ .action(async (options) => {
30
+ try {
31
+ await joinCommand(options);
32
+ }
33
+ catch (error) {
34
+ console.error("Error:", error.message);
35
+ process.exit(1);
36
+ }
37
+ });
38
+ program
39
+ .command("connect-moltbook")
40
+ .description("Connect your Moltbook account")
41
+ .action(async () => {
42
+ try {
43
+ await connectMoltbookCommand();
44
+ }
45
+ catch (error) {
46
+ console.error("Error:", error.message);
47
+ process.exit(1);
48
+ }
49
+ });
50
+ program
51
+ .command("status")
52
+ .description("Show agent status")
53
+ .action(async () => {
54
+ try {
55
+ await statusCommand();
56
+ }
57
+ catch (error) {
58
+ console.error("Error:", error.message);
59
+ process.exit(1);
60
+ }
61
+ });
62
+ program
63
+ .command("stop")
64
+ .description("Stop the agent daemon")
65
+ .action(async () => {
66
+ try {
67
+ await stopCommand();
68
+ }
69
+ catch (error) {
70
+ console.error("Error:", error.message);
71
+ process.exit(1);
72
+ }
73
+ });
74
+ program
75
+ .command("daemon")
76
+ .description("Run daemon in foreground (used by launchd/systemd)")
77
+ .action(async () => {
78
+ try {
79
+ await daemonCommand();
80
+ }
81
+ catch (error) {
82
+ console.error("Daemon error:", error.message);
83
+ process.exit(1);
84
+ }
85
+ });
86
+ program.parse();
87
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function connectMoltbookCommand(): Promise<void>;
2
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAkBA,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwF5D"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Connect Moltbook command - registers and connects a Moltbook account.
3
+ *
4
+ * Flow:
5
+ * 1. Register with Moltbook API
6
+ * 2. Display claim URL and verification code
7
+ * 3. Poll for claim status
8
+ * 4. Save credentials
9
+ * 5. Notify coordinator
10
+ */
11
+ import { getRequiredConfig } from "../config.js";
12
+ import { registerMoltbookAgent, pollClaimStatus, saveMoltbookCredentials, } from "../moltbook/register.js";
13
+ import { sendWebhook, isOpenClawAvailable } from "../openclaw/webhook.js";
14
+ export async function connectMoltbookCommand() {
15
+ console.log("Connecting to Moltbook...\n");
16
+ const config = getRequiredConfig();
17
+ // Step 1: Register with Moltbook
18
+ console.log("Step 1/4: Registering with Moltbook API...");
19
+ const registration = await registerMoltbookAgent(`OrcaAgent-${config.agentId.slice(0, 8)}`, "OpenClaw agent on Orca Network");
20
+ console.log(" Registration successful!");
21
+ console.log(` Verification code: ${registration.verificationCode}`);
22
+ // Step 2: Display claim instructions
23
+ console.log("\nStep 2/4: Claim your agent account");
24
+ console.log("━".repeat(50));
25
+ console.log(`\nVisit this URL to claim your agent:\n`);
26
+ console.log(` ${registration.claimUrl}`);
27
+ console.log(`\nEnter this verification code when prompted:\n`);
28
+ console.log(` ${registration.verificationCode}`);
29
+ console.log("\n" + "━".repeat(50));
30
+ // Send to Telegram if OpenClaw available
31
+ const openclawAvailable = await isOpenClawAvailable();
32
+ if (openclawAvailable) {
33
+ try {
34
+ await sendWebhook(`Moltbook Connection\n\n` +
35
+ `Visit this URL to claim your agent:\n${registration.claimUrl}\n\n` +
36
+ `Verification code: ${registration.verificationCode}`);
37
+ console.log("\n (Also sent to Telegram)");
38
+ }
39
+ catch {
40
+ // Ignore
41
+ }
42
+ }
43
+ // Step 3: Poll for claim status
44
+ console.log("\nStep 3/4: Waiting for you to claim the account...");
45
+ console.log(" (This will wait up to 2 hours, checking every 30 seconds)");
46
+ console.log(" Press Ctrl+C to cancel and claim later\n");
47
+ // Save credentials immediately so they're not lost
48
+ saveMoltbookCredentials(registration.apiKey, false);
49
+ const claimed = await pollClaimStatus(registration.apiKey);
50
+ if (!claimed) {
51
+ console.log("\nClaim timeout reached.");
52
+ console.log("The API key has been saved. You can claim later and run:");
53
+ console.log(" orca-agent poll-claim");
54
+ return;
55
+ }
56
+ // Step 4: Update credentials and notify coordinator
57
+ console.log("\nStep 4/4: Finalizing connection...");
58
+ saveMoltbookCredentials(registration.apiKey, true);
59
+ // Notify coordinator
60
+ const response = await fetch(`${config.coordinatorUrl}/agents/${config.agentId}/moltbook/connect`, {
61
+ method: "POST",
62
+ headers: { "Content-Type": "application/json" },
63
+ body: JSON.stringify({
64
+ api_key: registration.apiKey,
65
+ }),
66
+ });
67
+ if (!response.ok) {
68
+ console.warn("Warning: Could not notify coordinator of connection");
69
+ }
70
+ console.log("\n✓ Successfully connected to Moltbook!");
71
+ console.log(" You can now receive and execute Moltbook tasks.");
72
+ if (openclawAvailable) {
73
+ try {
74
+ await sendWebhook("Moltbook connected successfully! You're now ready to earn ORCA tokens.");
75
+ }
76
+ catch {
77
+ // Ignore
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function daemonCommand(): Promise<void>;
2
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAUA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCnD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Daemon command - runs the agent daemon in the foreground.
3
+ *
4
+ * This is typically started by launchd/systemd/pm2, not directly.
5
+ */
6
+ import { connectNats, subscribeToTasks } from "../daemon/nats.js";
7
+ import { startHeartbeat, stopHeartbeat } from "../daemon/heartbeat.js";
8
+ import { handleTaskOffer } from "../daemon/task_handler.js";
9
+ import { loadConfig } from "../config.js";
10
+ export async function daemonCommand() {
11
+ const config = loadConfig();
12
+ if (!config) {
13
+ console.error("Agent not configured. Run 'orca-agent join' first.");
14
+ process.exit(1);
15
+ }
16
+ console.log("Starting Orca Agent daemon...");
17
+ console.log(` Agent ID: ${config.agentId}`);
18
+ console.log(` Coordinator: ${config.coordinatorUrl}`);
19
+ console.log(` NATS: ${config.natsUrl}`);
20
+ // Handle graceful shutdown
21
+ process.on("SIGINT", async () => {
22
+ console.log("\nShutting down...");
23
+ stopHeartbeat();
24
+ process.exit(0);
25
+ });
26
+ process.on("SIGTERM", async () => {
27
+ console.log("\nShutting down...");
28
+ stopHeartbeat();
29
+ process.exit(0);
30
+ });
31
+ // Connect to NATS
32
+ console.log("\nConnecting to NATS...");
33
+ await connectNats();
34
+ // Start heartbeat
35
+ console.log("Starting heartbeat...");
36
+ startHeartbeat();
37
+ // Subscribe to task offers
38
+ console.log("Subscribing to task offers...");
39
+ console.log("\n✓ Daemon running. Waiting for tasks...\n");
40
+ await subscribeToTasks(handleTaskOffer);
41
+ }
42
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,MAAM,WAAW,EAAE,CAAC;IAEpB,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,cAAc,EAAE,CAAC;IAEjB,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,MAAM,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface JoinOptions {
2
+ wallet: string;
3
+ telegram: string;
4
+ coordinator?: string;
5
+ }
6
+ export declare function joinCommand(options: JoinOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAsBA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFrE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Join command - registers a new agent with the coordinator.
3
+ *
4
+ * Flow:
5
+ * 1. Generate or load keypair
6
+ * 2. Register with coordinator
7
+ * 3. Install OpenClaw skills
8
+ * 4. Save config
9
+ * 5. Install daemon
10
+ * 6. Start daemon
11
+ * 7. Send welcome message
12
+ */
13
+ import { getOrCreateKeypair, publicKeyBase58, getKeypairPath, } from "../crypto/keypair.js";
14
+ import { saveConfig, getConfigDir } from "../config.js";
15
+ import { installAllSkills } from "../install/skills.js";
16
+ import { installDaemon, startDaemon } from "../install/daemon.js";
17
+ import { sendWebhook, isOpenClawAvailable } from "../openclaw/webhook.js";
18
+ const DEFAULT_COORDINATOR_URL = "http://localhost:8000";
19
+ const DEFAULT_NATS_URL = "nats://localhost:4222";
20
+ export async function joinCommand(options) {
21
+ console.log("Joining Orca Network...\n");
22
+ // Step 1: Generate or load keypair
23
+ console.log("Step 1/7: Setting up keypair...");
24
+ const keypair = getOrCreateKeypair();
25
+ const pubkey = publicKeyBase58(keypair);
26
+ console.log(` Public key: ${pubkey}`);
27
+ console.log(` Keypair saved to: ${getKeypairPath()}`);
28
+ // Step 2: Register with coordinator
29
+ console.log("\nStep 2/7: Registering with coordinator...");
30
+ const coordinatorUrl = options.coordinator || DEFAULT_COORDINATOR_URL;
31
+ const registerResponse = await fetch(`${coordinatorUrl}/agents/register`, {
32
+ method: "POST",
33
+ headers: { "Content-Type": "application/json" },
34
+ body: JSON.stringify({
35
+ pubkey,
36
+ solana_wallet: options.wallet,
37
+ telegram_chat_id: options.telegram,
38
+ }),
39
+ });
40
+ if (!registerResponse.ok) {
41
+ const error = await registerResponse.text();
42
+ throw new Error(`Registration failed: ${error}`);
43
+ }
44
+ const registerData = (await registerResponse.json());
45
+ console.log(` Agent ID: ${registerData.agent_id}`);
46
+ console.log(` NATS URL: ${registerData.nats_url}`);
47
+ // Step 3: Install OpenClaw skills
48
+ console.log("\nStep 3/7: Installing OpenClaw skills...");
49
+ const openclawAvailable = await isOpenClawAvailable();
50
+ if (openclawAvailable) {
51
+ await installAllSkills();
52
+ }
53
+ else {
54
+ console.log(" OpenClaw not detected, skipping skill installation");
55
+ console.log(" (Telegram delivery will not work without OpenClaw)");
56
+ }
57
+ // Step 4: Save config
58
+ console.log("\nStep 4/7: Saving configuration...");
59
+ const config = {
60
+ agentId: registerData.agent_id,
61
+ coordinatorUrl,
62
+ natsUrl: registerData.nats_url || DEFAULT_NATS_URL,
63
+ solanaWallet: options.wallet,
64
+ telegramChatId: options.telegram,
65
+ keypairPath: getKeypairPath(),
66
+ };
67
+ saveConfig(config);
68
+ console.log(` Config saved to: ${getConfigDir()}/config.json`);
69
+ // Step 5: Install daemon
70
+ console.log("\nStep 5/7: Installing daemon...");
71
+ await installDaemon();
72
+ // Step 6: Start daemon
73
+ console.log("\nStep 6/7: Starting daemon...");
74
+ await startDaemon();
75
+ // Step 7: Send welcome message
76
+ console.log("\nStep 7/7: Sending welcome message...");
77
+ if (openclawAvailable) {
78
+ try {
79
+ await sendWebhook(`Welcome to Orca Network! Your agent is now online.\n\n` +
80
+ `Agent ID: ${registerData.agent_id}\n` +
81
+ `Next step: Run 'orca-agent connect-moltbook' to start earning.`);
82
+ console.log(" Welcome message sent to Telegram!");
83
+ }
84
+ catch (error) {
85
+ console.log(" Could not send welcome message (OpenClaw issue)");
86
+ }
87
+ }
88
+ else {
89
+ console.log(" Skipping welcome message (OpenClaw not available)");
90
+ }
91
+ console.log("\n✓ Successfully joined Orca Network!");
92
+ console.log("\nNext steps:");
93
+ console.log(" 1. Run 'orca-agent connect-moltbook' to connect your Moltbook account");
94
+ console.log(" 2. Run 'orca-agent status' to check your agent status");
95
+ }
96
+ //# sourceMappingURL=join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function statusCommand(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAoFnD"}