@lucid-agents/taskmarket 0.6.4 → 0.7.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.
@@ -0,0 +1,258 @@
1
+ import { Command } from 'commander';
2
+ import { loadKeystore } from '../lib/keystore.js';
3
+ import { apiGet, apiPost } from '../lib/api.js';
4
+ import { printResult } from '../lib/output.js';
5
+ import { createXmtpClient, listenForEnvelopes } from '../lib/xmtp-client.js';
6
+ // --- Pure helpers (exported for testing) ---
7
+ export function diffTaskStatuses(prev, next) {
8
+ const changes = [];
9
+ for (const [taskId, newStatus] of next) {
10
+ const oldStatus = prev.get(taskId);
11
+ if (oldStatus !== undefined && oldStatus !== newStatus) {
12
+ changes.push({ taskId, from: oldStatus, to: newStatus });
13
+ }
14
+ }
15
+ return changes;
16
+ }
17
+ export function collectNewTaskIds(tasks, seenIds) {
18
+ return tasks.filter((t) => !seenIds.has(t.id)).map((t) => t.id);
19
+ }
20
+ // --- Utilities ---
21
+ function sleepOrAbort(ms, signal) {
22
+ return new Promise((resolve) => {
23
+ const id = setTimeout(resolve, ms);
24
+ signal.addEventListener('abort', () => {
25
+ clearTimeout(id);
26
+ resolve();
27
+ }, { once: true });
28
+ });
29
+ }
30
+ const MAX_SEEN_TASK_IDS = 2000;
31
+ // --- Daemon command ---
32
+ export const daemonCommand = new Command('daemon')
33
+ .description('Long-running agent daemon: XMTP stream, heartbeats, and task polling')
34
+ .option('--heartbeat-interval <ms>', 'Heartbeat interval in milliseconds', '1800000')
35
+ .option('--inbox-interval <ms>', 'Inbox poll interval in milliseconds', '15000')
36
+ .option('--task-interval <ms>', 'New task poll interval in milliseconds', '60000')
37
+ .option('--task-filters <json>', 'JSON filter object for new-task discovery')
38
+ .option('--no-xmtp', 'Disable XMTP stream and heartbeat')
39
+ .action(async (opts) => {
40
+ const heartbeatIntervalMs = Number(opts.heartbeatInterval);
41
+ const inboxIntervalMs = Number(opts.inboxInterval);
42
+ const taskIntervalMs = Number(opts.taskInterval);
43
+ if (!Number.isFinite(heartbeatIntervalMs) || heartbeatIntervalMs <= 0) {
44
+ throw new Error('--heartbeat-interval must be a positive number');
45
+ }
46
+ if (!Number.isFinite(inboxIntervalMs) || inboxIntervalMs <= 0) {
47
+ throw new Error('--inbox-interval must be a positive number');
48
+ }
49
+ if (!Number.isFinite(taskIntervalMs) || taskIntervalMs <= 0) {
50
+ throw new Error('--task-interval must be a positive number');
51
+ }
52
+ let taskFilters = {};
53
+ if (opts.taskFilters) {
54
+ try {
55
+ const parsed = JSON.parse(opts.taskFilters);
56
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
57
+ throw new Error('must be a JSON object');
58
+ }
59
+ taskFilters = parsed;
60
+ }
61
+ catch (err) {
62
+ throw new Error(`--task-filters: ${err instanceof Error ? err.message : String(err)}`);
63
+ }
64
+ }
65
+ const keystore = await loadKeystore();
66
+ const address = keystore.walletAddress;
67
+ let stopped = false;
68
+ const abortController = new AbortController();
69
+ const stop = () => {
70
+ stopped = true;
71
+ abortController.abort();
72
+ };
73
+ process.once('SIGINT', stop);
74
+ process.once('SIGTERM', stop);
75
+ // Determine XMTP availability
76
+ const xmtpRequested = opts.xmtp;
77
+ const xmtpAvailable = xmtpRequested && !!keystore.xmtpInboxId;
78
+ if (xmtpRequested && !keystore.xmtpInboxId) {
79
+ process.stderr.write('XMTP not initialized. Run `taskmarket xmtp init` first. Continuing without XMTP.\n');
80
+ }
81
+ try {
82
+ let xmtpClient;
83
+ if (xmtpAvailable) {
84
+ xmtpClient = await createXmtpClient({
85
+ walletAddress: keystore.walletAddress,
86
+ existingInboxId: keystore.xmtpInboxId,
87
+ existingInstallationId: keystore.xmtpInstallationId,
88
+ existingDbPath: keystore.xmtpDbPath,
89
+ keystore,
90
+ });
91
+ }
92
+ const xmtpLoop = async () => {
93
+ if (!xmtpClient)
94
+ return;
95
+ await listenForEnvelopes({
96
+ client: xmtpClient,
97
+ shouldStop: () => stopped,
98
+ signal: abortController.signal,
99
+ onEnvelope: (envelope) => {
100
+ printResult({ event: 'xmtp.envelope', ...envelope });
101
+ },
102
+ });
103
+ };
104
+ const heartbeatLoop = async () => {
105
+ if (!xmtpClient)
106
+ return;
107
+ const client = xmtpClient;
108
+ while (!stopped) {
109
+ await sleepOrAbort(heartbeatIntervalMs, abortController.signal);
110
+ if (stopped)
111
+ break;
112
+ try {
113
+ await apiPost('/trpc/xmtp.heartbeat', {
114
+ deviceId: keystore.deviceId,
115
+ apiToken: keystore.apiToken,
116
+ installationId: client.installationId,
117
+ });
118
+ printResult({ event: 'xmtp.heartbeat', installationId: client.installationId });
119
+ }
120
+ catch (err) {
121
+ process.stderr.write(`Heartbeat failed: ${err instanceof Error ? err.message : String(err)}\n`);
122
+ }
123
+ }
124
+ };
125
+ const taskPollLoop = async () => {
126
+ const knownStatuses = new Map();
127
+ const seenTaskIds = new Set();
128
+ const buildTaskParams = () => {
129
+ const params = new URLSearchParams();
130
+ params.set('status', 'open');
131
+ params.set('limit', '50');
132
+ if (typeof taskFilters.mode === 'string') {
133
+ params.set('mode', taskFilters.mode);
134
+ }
135
+ const tagsValue = taskFilters.tags;
136
+ if (typeof tagsValue === 'string') {
137
+ params.set('tags', tagsValue);
138
+ }
139
+ else if (Array.isArray(tagsValue)) {
140
+ params.set('tags', tagsValue.join(','));
141
+ }
142
+ return params;
143
+ };
144
+ // Initialization: populate baseline without emitting events
145
+ try {
146
+ const inbox = (await apiGet(`/api/agents/inbox?address=${encodeURIComponent(address)}`));
147
+ for (const task of [...inbox.asRequester, ...inbox.asWorker]) {
148
+ knownStatuses.set(task.id, task.status);
149
+ }
150
+ }
151
+ catch {
152
+ // Non-fatal: will pick up on first real poll
153
+ }
154
+ try {
155
+ const result = (await apiGet(`/api/tasks?${buildTaskParams().toString()}`));
156
+ for (const task of result.tasks) {
157
+ seenTaskIds.add(task.id);
158
+ }
159
+ }
160
+ catch {
161
+ // Non-fatal
162
+ }
163
+ const inboxPollLoop = async () => {
164
+ while (!stopped) {
165
+ await sleepOrAbort(inboxIntervalMs, abortController.signal);
166
+ if (stopped)
167
+ break;
168
+ try {
169
+ const inbox = (await apiGet(`/api/agents/inbox?address=${encodeURIComponent(address)}`));
170
+ const allTasks = [...inbox.asRequester, ...inbox.asWorker];
171
+ const nextStatuses = new Map();
172
+ for (const task of allTasks) {
173
+ nextStatuses.set(task.id, task.status);
174
+ }
175
+ const changes = diffTaskStatuses(knownStatuses, nextStatuses);
176
+ for (const change of changes) {
177
+ const isRequester = inbox.asRequester.some((t) => t.id === change.taskId);
178
+ const role = isRequester ? 'requester' : 'worker';
179
+ let pendingActions = [];
180
+ try {
181
+ const detail = (await apiGet(`/api/tasks/${change.taskId}`));
182
+ pendingActions = detail.pendingActions ?? [];
183
+ }
184
+ catch {
185
+ // Non-fatal: emit without pendingActions
186
+ }
187
+ printResult({
188
+ event: 'task.status_changed',
189
+ taskId: change.taskId,
190
+ role,
191
+ from: change.from,
192
+ to: change.to,
193
+ pendingActions,
194
+ });
195
+ knownStatuses.set(change.taskId, change.to);
196
+ }
197
+ // Register newly seen tasks in knownStatuses
198
+ for (const task of allTasks) {
199
+ if (!knownStatuses.has(task.id)) {
200
+ knownStatuses.set(task.id, task.status);
201
+ }
202
+ }
203
+ }
204
+ catch (err) {
205
+ process.stderr.write(`Inbox poll failed: ${err instanceof Error ? err.message : String(err)}\n`);
206
+ }
207
+ }
208
+ };
209
+ const newTaskPollLoop = async () => {
210
+ while (!stopped) {
211
+ await sleepOrAbort(taskIntervalMs, abortController.signal);
212
+ if (stopped)
213
+ break;
214
+ try {
215
+ const result = (await apiGet(`/api/tasks?${buildTaskParams().toString()}`));
216
+ const newIds = collectNewTaskIds(result.tasks, seenTaskIds);
217
+ const taskMap = new Map(result.tasks.map((t) => [t.id, t]));
218
+ for (const id of newIds) {
219
+ const task = taskMap.get(id);
220
+ if (task) {
221
+ printResult({
222
+ event: 'task.new',
223
+ taskId: task.id,
224
+ description: task.description,
225
+ reward: task.reward,
226
+ mode: task.mode,
227
+ tags: task.tags,
228
+ });
229
+ }
230
+ seenTaskIds.add(id);
231
+ }
232
+ // Bound seenTaskIds to MAX_SEEN_TASK_IDS (LRU eviction of oldest entries)
233
+ if (seenTaskIds.size > MAX_SEEN_TASK_IDS) {
234
+ const excess = seenTaskIds.size - MAX_SEEN_TASK_IDS;
235
+ const iter = seenTaskIds.values();
236
+ for (let i = 0; i < excess; i++) {
237
+ const next = iter.next();
238
+ if (!next.done) {
239
+ seenTaskIds.delete(next.value);
240
+ }
241
+ }
242
+ }
243
+ }
244
+ catch (err) {
245
+ process.stderr.write(`New task poll failed: ${err instanceof Error ? err.message : String(err)}\n`);
246
+ }
247
+ }
248
+ };
249
+ await Promise.allSettled([inboxPollLoop(), newTaskPollLoop()]);
250
+ };
251
+ await Promise.allSettled([xmtpLoop(), heartbeatLoop(), taskPollLoop()]);
252
+ }
253
+ finally {
254
+ process.off('SIGINT', stop);
255
+ process.off('SIGTERM', stop);
256
+ }
257
+ });
258
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,321 @@
1
+ import { Command } from 'commander';
2
+ import { apiGet, apiPost } from '../lib/api.js';
3
+ import { loadKeystore, saveKeystore } from '../lib/keystore.js';
4
+ import { printResult } from '../lib/output.js';
5
+ import { createXmtpClient, listenForEnvelopes, runQueryWithClient, sendMessageEnvelope, } from '../lib/xmtp-client.js';
6
+ import { buildEnvelope } from '../lib/xmtp-envelope.js';
7
+ function isAddress(value) {
8
+ return /^0x[a-fA-F0-9]{40}$/.test(value);
9
+ }
10
+ function parseJsonPayload(value) {
11
+ const parsed = JSON.parse(value);
12
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
13
+ throw new Error('Payload must be a JSON object');
14
+ }
15
+ return parsed;
16
+ }
17
+ async function resolveInboxId(to) {
18
+ // Raw inboxId passed directly — no resolution needed
19
+ if (!isAddress(to) && to.length === 64 && /^[0-9a-f]+$/.test(to)) {
20
+ return to;
21
+ }
22
+ const param = isAddress(to)
23
+ ? `address=${encodeURIComponent(to)}`
24
+ : `agentId=${encodeURIComponent(to)}`;
25
+ const result = (await apiGet(`/api/xmtp/resolve?${param}`));
26
+ if (!result.inboxId) {
27
+ const label = isAddress(to) ? `address ${to}` : `agent "${to}"`;
28
+ throw new Error(`No XMTP inbox found for ${label}`);
29
+ }
30
+ return result.inboxId;
31
+ }
32
+ function getDefaultQueryTimeoutMs() {
33
+ const raw = process.env.TASKMARKET_XMTP_QUERY_TIMEOUT_MS;
34
+ if (!raw) {
35
+ return 10_000;
36
+ }
37
+ const parsed = Number(raw);
38
+ if (!Number.isFinite(parsed) || parsed <= 0) {
39
+ throw new Error('TASKMARKET_XMTP_QUERY_TIMEOUT_MS must be a positive number');
40
+ }
41
+ return Math.floor(parsed);
42
+ }
43
+ export const xmtpCommand = new Command('xmtp').description('Manage XMTP messaging for this agent');
44
+ xmtpCommand
45
+ .command('init')
46
+ .description('Initialize XMTP client and register installation metadata with backend')
47
+ .action(async () => {
48
+ const keystore = await loadKeystore();
49
+ const client = await createXmtpClient({
50
+ walletAddress: keystore.walletAddress,
51
+ existingInboxId: keystore.xmtpInboxId,
52
+ existingInstallationId: keystore.xmtpInstallationId,
53
+ existingDbPath: keystore.xmtpDbPath,
54
+ keystore,
55
+ });
56
+ const status = (await apiPost('/api/xmtp/bootstrap', {
57
+ deviceId: keystore.deviceId,
58
+ apiToken: keystore.apiToken,
59
+ inboxId: client.inboxId,
60
+ installationId: client.installationId,
61
+ dbPath: client.dbPath,
62
+ clientVersion: process.env.npm_package_version ?? 'unknown',
63
+ }));
64
+ await saveKeystore({
65
+ ...keystore,
66
+ xmtpInboxId: status.inboxId,
67
+ xmtpInstallationId: status.installationId,
68
+ xmtpDbPath: client.dbPath,
69
+ });
70
+ printResult({ policyMode: status.policyMode });
71
+ });
72
+ xmtpCommand
73
+ .command('status')
74
+ .description('Check XMTP status and active installation state')
75
+ .action(async () => {
76
+ const keystore = await loadKeystore();
77
+ const result = (await apiGet(`/api/xmtp/status?deviceId=${encodeURIComponent(keystore.deviceId)}`, {
78
+ headers: {
79
+ 'x-taskmarket-api-token': keystore.apiToken,
80
+ },
81
+ }));
82
+ printResult(result);
83
+ });
84
+ xmtpCommand
85
+ .command('send')
86
+ .description('Send a structured XMTP envelope to a peer')
87
+ .requiredOption('--to <addressOrInboxId>', 'Target wallet address or inboxId')
88
+ .requiredOption('--type <type>', 'Envelope type')
89
+ .requiredOption('--json <payloadJson>', 'JSON object payload')
90
+ .action(async (options) => {
91
+ const payload = parseJsonPayload(options.json);
92
+ const keystore = await loadKeystore();
93
+ const client = await createXmtpClient({
94
+ walletAddress: keystore.walletAddress,
95
+ existingInboxId: keystore.xmtpInboxId,
96
+ existingInstallationId: keystore.xmtpInstallationId,
97
+ existingDbPath: keystore.xmtpDbPath,
98
+ keystore,
99
+ });
100
+ const toInboxId = await resolveInboxId(options.to);
101
+ const senderInboxId = keystore.xmtpInboxId ?? client.inboxId;
102
+ const envelope = buildEnvelope({
103
+ type: options.type,
104
+ senderInboxId,
105
+ senderAddress: keystore.walletAddress,
106
+ payload,
107
+ });
108
+ await sendMessageEnvelope(client, toInboxId, envelope);
109
+ printResult({
110
+ sent: true,
111
+ requestId: envelope.requestId,
112
+ toInboxId,
113
+ });
114
+ });
115
+ xmtpCommand
116
+ .command('query')
117
+ .description('Send query envelope and wait for correlated response')
118
+ .requiredOption('--to <addressOrInboxId>', 'Target wallet address or inboxId')
119
+ .requiredOption('--type <type>', 'Envelope type')
120
+ .requiredOption('--json <payloadJson>', 'JSON object payload')
121
+ .option('--timeout-ms <timeoutMs>', 'Query timeout in milliseconds')
122
+ .action(async (options) => {
123
+ const payload = parseJsonPayload(options.json);
124
+ const timeoutMs = options.timeoutMs ? Number(options.timeoutMs) : getDefaultQueryTimeoutMs();
125
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
126
+ throw new Error('timeout-ms must be a positive number');
127
+ }
128
+ const keystore = await loadKeystore();
129
+ const client = await createXmtpClient({
130
+ walletAddress: keystore.walletAddress,
131
+ existingInboxId: keystore.xmtpInboxId,
132
+ existingInstallationId: keystore.xmtpInstallationId,
133
+ existingDbPath: keystore.xmtpDbPath,
134
+ keystore,
135
+ });
136
+ const toInboxId = await resolveInboxId(options.to);
137
+ const senderInboxId = keystore.xmtpInboxId ?? client.inboxId;
138
+ const envelope = buildEnvelope({
139
+ type: options.type,
140
+ senderInboxId,
141
+ senderAddress: keystore.walletAddress,
142
+ payload,
143
+ deadlineMs: Math.floor(timeoutMs),
144
+ });
145
+ const response = await runQueryWithClient({
146
+ client,
147
+ toInboxId,
148
+ envelope,
149
+ timeoutMs: Math.floor(timeoutMs),
150
+ });
151
+ printResult({
152
+ requestId: envelope.requestId,
153
+ response,
154
+ });
155
+ });
156
+ xmtpCommand
157
+ .command('listen')
158
+ .description('Listen for inbound XMTP envelopes')
159
+ .option('--types <typesCsv>', 'Comma-separated allowed message types')
160
+ .action(async (options) => {
161
+ const keystore = await loadKeystore();
162
+ const client = await createXmtpClient({
163
+ walletAddress: keystore.walletAddress,
164
+ existingInboxId: keystore.xmtpInboxId,
165
+ existingInstallationId: keystore.xmtpInstallationId,
166
+ existingDbPath: keystore.xmtpDbPath,
167
+ keystore,
168
+ });
169
+ const allowedTypes = options.types
170
+ ? new Set(options.types
171
+ .split(',')
172
+ .map((value) => value.trim())
173
+ .filter(Boolean))
174
+ : undefined;
175
+ let stopped = false;
176
+ const abortController = new AbortController();
177
+ const stop = () => {
178
+ stopped = true;
179
+ abortController.abort();
180
+ };
181
+ process.once('SIGINT', stop);
182
+ process.once('SIGTERM', stop);
183
+ try {
184
+ await listenForEnvelopes({
185
+ client,
186
+ shouldStop: () => stopped,
187
+ allowedTypes,
188
+ signal: abortController.signal,
189
+ onEnvelope: (envelope) => {
190
+ printResult(envelope);
191
+ },
192
+ });
193
+ }
194
+ finally {
195
+ process.off('SIGINT', stop);
196
+ process.off('SIGTERM', stop);
197
+ }
198
+ });
199
+ xmtpCommand
200
+ .command('heartbeat')
201
+ .description('Send a one-shot heartbeat to keep the XMTP installation active')
202
+ .action(async () => {
203
+ const keystore = await loadKeystore();
204
+ if (!keystore.xmtpInstallationId) {
205
+ throw new Error('XMTP not initialized. Run `taskmarket xmtp init` first.');
206
+ }
207
+ const result = await apiPost('/api/xmtp/heartbeat', {
208
+ deviceId: keystore.deviceId,
209
+ apiToken: keystore.apiToken,
210
+ installationId: keystore.xmtpInstallationId,
211
+ });
212
+ printResult(result);
213
+ });
214
+ const peersCommand = xmtpCommand
215
+ .command('peers')
216
+ .description('Manage taskmarket peer messaging policies');
217
+ peersCommand
218
+ .command('list')
219
+ .description('List per-peer messaging policies stored on the backend')
220
+ .action(async () => {
221
+ const keystore = await loadKeystore();
222
+ const result = (await apiGet(`/api/xmtp/peers?deviceId=${encodeURIComponent(keystore.deviceId)}`, { headers: { 'x-taskmarket-api-token': keystore.apiToken } }));
223
+ printResult(result);
224
+ });
225
+ peersCommand
226
+ .command('set')
227
+ .description('Set messaging policy for a specific peer')
228
+ .requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
229
+ .requiredOption('--policy <policy>', 'Policy: allow | deny | quarantine')
230
+ .option('--reason <reason>', 'Optional reason text')
231
+ .action(async (options) => {
232
+ const validPolicies = ['allow', 'deny', 'quarantine'];
233
+ if (!validPolicies.includes(options.policy)) {
234
+ throw new Error(`--policy must be one of: ${validPolicies.join(', ')}`);
235
+ }
236
+ const keystore = await loadKeystore();
237
+ const peerInboxId = await resolveInboxId(options.to);
238
+ const result = await apiPost('/api/xmtp/peers', {
239
+ deviceId: keystore.deviceId,
240
+ apiToken: keystore.apiToken,
241
+ peerInboxId,
242
+ policy: options.policy,
243
+ reason: options.reason,
244
+ });
245
+ printResult(result);
246
+ });
247
+ const allowlistCommand = xmtpCommand
248
+ .command('allowlist')
249
+ .description('Manage XMTP SDK consent allowlist (protocol-level)');
250
+ allowlistCommand
251
+ .command('add')
252
+ .description('Allow messages from a peer inbox (XMTP SDK consent)')
253
+ .requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
254
+ .action(async (options) => {
255
+ const keystore = await loadKeystore();
256
+ const client = await createXmtpClient({
257
+ walletAddress: keystore.walletAddress,
258
+ existingInboxId: keystore.xmtpInboxId,
259
+ existingInstallationId: keystore.xmtpInstallationId,
260
+ existingDbPath: keystore.xmtpDbPath,
261
+ keystore,
262
+ });
263
+ const targetInboxId = await resolveInboxId(options.to);
264
+ if (!client.setConsentState) {
265
+ throw new Error('setConsentState not available in this XMTP client mode');
266
+ }
267
+ await client.setConsentState(targetInboxId, 'allowed');
268
+ printResult({ ok: true, inboxId: targetInboxId, state: 'allowed' });
269
+ });
270
+ allowlistCommand
271
+ .command('remove')
272
+ .description('Deny messages from a peer inbox (XMTP SDK consent)')
273
+ .requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
274
+ .action(async (options) => {
275
+ const keystore = await loadKeystore();
276
+ const client = await createXmtpClient({
277
+ walletAddress: keystore.walletAddress,
278
+ existingInboxId: keystore.xmtpInboxId,
279
+ existingInstallationId: keystore.xmtpInstallationId,
280
+ existingDbPath: keystore.xmtpDbPath,
281
+ keystore,
282
+ });
283
+ const targetInboxId = await resolveInboxId(options.to);
284
+ if (!client.setConsentState) {
285
+ throw new Error('setConsentState not available in this XMTP client mode');
286
+ }
287
+ await client.setConsentState(targetInboxId, 'denied');
288
+ printResult({ ok: true, inboxId: targetInboxId, state: 'denied' });
289
+ });
290
+ allowlistCommand
291
+ .command('check')
292
+ .description('Check the XMTP SDK consent state for a specific peer inbox')
293
+ .requiredOption('--to <agentIdOrAddrOrInboxId>', 'Target agent ID, wallet address, or inboxId')
294
+ .action(async (options) => {
295
+ const keystore = await loadKeystore();
296
+ const client = await createXmtpClient({
297
+ walletAddress: keystore.walletAddress,
298
+ existingInboxId: keystore.xmtpInboxId,
299
+ existingInstallationId: keystore.xmtpInstallationId,
300
+ existingDbPath: keystore.xmtpDbPath,
301
+ keystore,
302
+ });
303
+ const targetInboxId = await resolveInboxId(options.to);
304
+ if (!client.getConsentState) {
305
+ throw new Error('getConsentState not available in this XMTP client mode');
306
+ }
307
+ const state = await client.getConsentState(targetInboxId);
308
+ printResult({ inboxId: targetInboxId, state });
309
+ });
310
+ xmtpCommand
311
+ .command('purge')
312
+ .description('Revoke stale XMTP installations that have missed heartbeats')
313
+ .action(async () => {
314
+ const keystore = await loadKeystore();
315
+ const result = await apiPost('/api/xmtp/purge', {
316
+ deviceId: keystore.deviceId,
317
+ apiToken: keystore.apiToken,
318
+ });
319
+ printResult(result);
320
+ });
321
+ //# sourceMappingURL=xmtp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xmtp.js","sourceRoot":"","sources":["../../src/commands/xmtp.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11,6 +11,8 @@ import { inboxCommand } from './commands/inbox.js';
11
11
  import { depositCommand } from './commands/deposit.js';
12
12
  import { walletCommand } from './commands/wallet/index.js';
13
13
  import { withdrawCommand } from './commands/withdraw.js';
14
+ import { xmtpCommand } from './commands/xmtp.js';
15
+ import { daemonCommand } from './commands/daemon.js';
14
16
  const require = createRequire(import.meta.url);
15
17
  const { version } = require('../package.json');
16
18
  const program = new Command();
@@ -25,6 +27,8 @@ program.addCommand(agentsCommand);
25
27
  program.addCommand(inboxCommand);
26
28
  program.addCommand(depositCommand);
27
29
  program.addCommand(withdrawCommand);
30
+ program.addCommand(xmtpCommand);
31
+ program.addCommand(daemonCommand);
28
32
  program.parseAsync(process.argv).catch((err) => {
29
33
  process.stderr.write(JSON.stringify({ ok: false, error: err.message }) + '\n');
30
34
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAEpC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/lib/api.js CHANGED
@@ -1,8 +1,11 @@
1
1
  export const API_URL = process.env.TASKMARKET_API_URL ?? 'https://api-market.daydreams.systems';
2
- export async function apiGet(path) {
2
+ export async function apiGet(path, options) {
3
3
  const res = await fetch(`${API_URL}${path}`, {
4
4
  method: 'GET',
5
- headers: { 'Content-Type': 'application/json' },
5
+ headers: {
6
+ 'Content-Type': 'application/json',
7
+ ...(options?.headers ?? {}),
8
+ },
6
9
  });
7
10
  const body = await res.json();
8
11
  if (!res.ok) {