@lucid-agents/taskmarket 0.3.2 → 0.5.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.
@@ -2,25 +2,7 @@ import { Command } from 'commander';
2
2
  import { generateKeypair, encryptPrivateKey, saveKeystore, keystoreExists, getKeystorePath, loadKeystore, } from '../lib/keystore.js';
3
3
  import { API_URL } from '../lib/api.js';
4
4
  import { isHumanMode, printResult } from '../lib/output.js';
5
- async function pollAgentId(address, maxWaitMs = 60_000) {
6
- const interval = 3_000;
7
- const deadline = Date.now() + maxWaitMs;
8
- while (Date.now() < deadline) {
9
- await new Promise((r) => setTimeout(r, interval));
10
- try {
11
- const res = await fetch(`${API_URL}/api/identity/status?address=${address}`);
12
- if (res.ok) {
13
- const data = (await res.json());
14
- if (data.agentId)
15
- return data.agentId;
16
- }
17
- }
18
- catch {
19
- // ignore transient errors, keep polling
20
- }
21
- }
22
- return null;
23
- }
5
+ import { pollAgentId } from '../lib/agent.js';
24
6
  export const initCommand = new Command('init')
25
7
  .description('Create and register a new agent wallet (safe to re-run)')
26
8
  .option('--human', 'Human-readable output')
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ import { Command } from 'commander';
2
+ import { createInterface } from 'readline';
3
+ import { privateKeyToAccount } from 'viem/accounts';
4
+ import { encryptPrivateKey, saveKeystore, keystoreExists, getKeystorePath, loadKeystore, } from '../../lib/keystore.js';
5
+ import { API_URL } from '../../lib/api.js';
6
+ import { isHumanMode, printResult } from '../../lib/output.js';
7
+ import { pollAgentId } from '../../lib/agent.js';
8
+ function normalizePrivateKey(raw) {
9
+ const hex = raw.startsWith('0x') ? raw.slice(2) : raw;
10
+ if (!/^[0-9a-fA-F]{64}$/.test(hex)) {
11
+ throw new Error('Invalid private key: must be 32 bytes (64 hex characters)');
12
+ }
13
+ return `0x${hex}`;
14
+ }
15
+ function promptHiddenInput(prompt) {
16
+ return new Promise((resolve) => {
17
+ const rl = createInterface({
18
+ input: process.stdin,
19
+ output: process.stdout,
20
+ terminal: true,
21
+ });
22
+ process.stdout.write(prompt);
23
+ // Suppress echo
24
+ const muted = { muted: false };
25
+ const _write = rl.output.write.bind(rl.output);
26
+ rl.output.write = (s) => {
27
+ if (muted.muted)
28
+ return;
29
+ _write(s);
30
+ };
31
+ muted.muted = true;
32
+ rl.question('', (answer) => {
33
+ muted.muted = false;
34
+ process.stdout.write('\n');
35
+ rl.close();
36
+ resolve(answer);
37
+ });
38
+ });
39
+ }
40
+ export const walletImportCommand = new Command('import')
41
+ .description('Import an existing private key as the agent wallet')
42
+ .option('--key <privateKey>', 'Private key to import (64 hex chars, with or without 0x prefix)')
43
+ .option('--human', 'Human-readable output')
44
+ .action(async (opts) => {
45
+ const human = isHumanMode(opts.human);
46
+ if (await keystoreExists()) {
47
+ const keystore = await loadKeystore();
48
+ if (human) {
49
+ console.log('Wallet already exists:', keystore.walletAddress);
50
+ if (keystore.agentId)
51
+ console.log('Agent ID:', keystore.agentId);
52
+ }
53
+ else {
54
+ printResult({ address: keystore.walletAddress, agentId: keystore.agentId }, human);
55
+ }
56
+ return;
57
+ }
58
+ // Determine key source: --key flag, env var, or interactive prompt
59
+ let rawKey;
60
+ let keySource;
61
+ if (opts.key) {
62
+ rawKey = opts.key;
63
+ keySource = 'flag';
64
+ }
65
+ else if (process.env['TASKMARKET_IMPORT_KEY']) {
66
+ rawKey = process.env['TASKMARKET_IMPORT_KEY'];
67
+ keySource = 'env';
68
+ }
69
+ else {
70
+ rawKey = await promptHiddenInput('Enter private key (input hidden): ');
71
+ keySource = 'prompt';
72
+ }
73
+ const privateKey = normalizePrivateKey(rawKey);
74
+ const account = privateKeyToAccount(privateKey);
75
+ const address = account.address;
76
+ // Register device with backend
77
+ const res = await fetch(`${API_URL}/api/devices`, {
78
+ method: 'POST',
79
+ headers: { 'Content-Type': 'application/json' },
80
+ body: JSON.stringify({ walletAddress: address }),
81
+ });
82
+ if (!res.ok) {
83
+ const text = await res.text().catch(() => '');
84
+ throw new Error(`Device registration failed (${res.status}): ${text}`);
85
+ }
86
+ const { deviceId, apiToken, deviceEncryptionKey, agentId: initialAgentId, } = (await res.json());
87
+ const encryptedKey = encryptPrivateKey(deviceEncryptionKey, privateKey);
88
+ // agentId may be null if on-chain registration is still pending — poll for it
89
+ let agentId = initialAgentId;
90
+ await saveKeystore({ encryptedKey, walletAddress: address, deviceId, apiToken, agentId });
91
+ if (!agentId) {
92
+ agentId = await pollAgentId(address);
93
+ if (agentId) {
94
+ const keystore = await loadKeystore();
95
+ await saveKeystore({ ...keystore, agentId });
96
+ }
97
+ }
98
+ if (human) {
99
+ console.log('Wallet imported:', address);
100
+ console.log('Agent ID:', agentId ?? '(pending — run `taskmarket init` again shortly)');
101
+ console.log('Keystore saved to:', getKeystorePath());
102
+ if (keySource === 'flag') {
103
+ console.log('');
104
+ console.log('Warning: private key was passed via --key flag. It may be visible in shell history');
105
+ console.log('and in process listings (ps aux) while the command ran.');
106
+ console.log('To remove it from shell history:');
107
+ console.log('');
108
+ console.log(' # zsh');
109
+ console.log(" fc -W; sed -i '' '$d' ~/.zsh_history");
110
+ console.log('');
111
+ console.log(' # bash');
112
+ console.log(" history -d $(history 1 | awk '{print $1}') && history -w");
113
+ }
114
+ else if (keySource === 'env') {
115
+ console.log('');
116
+ console.log('Note: key was read from TASKMARKET_IMPORT_KEY env var.');
117
+ console.log('This is secure only when injected at runtime by your orchestration platform');
118
+ console.log('(Docker -e, Kubernetes Secret, systemd EnvironmentFile).');
119
+ console.log('If set in a dotfile (.env, .zshrc), the agent can read it — avoid this.');
120
+ }
121
+ }
122
+ else {
123
+ if (keySource === 'flag') {
124
+ console.error(JSON.stringify({
125
+ warning: 'Private key was passed via --key flag and may be visible in shell history and ps aux.',
126
+ }));
127
+ }
128
+ printResult({ address, agentId }, human);
129
+ }
130
+ });
131
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/wallet/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from 'commander';
2
+ import { walletImportCommand } from './import.js';
3
+ import { setWithdrawalAddressCommand } from './set-withdrawal-address.js';
4
+ export const walletCommand = new Command('wallet').description('Wallet management commands');
5
+ walletCommand.addCommand(walletImportCommand);
6
+ walletCommand.addCommand(setWithdrawalAddressCommand);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE1E,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;AAE7F,aAAa,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC9C,aAAa,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { Command } from 'commander';
2
+ import { loadKeystore } from '../../lib/keystore.js';
3
+ import { signMessage } from '../../lib/signer.js';
4
+ import { apiPost } from '../../lib/api.js';
5
+ import { isHumanMode, printResult, printError } from '../../lib/output.js';
6
+ function isValidAddress(addr) {
7
+ return /^0x[a-fA-F0-9]{40}$/.test(addr);
8
+ }
9
+ export const setWithdrawalAddressCommand = new Command('set-withdrawal-address')
10
+ .description('Set a withdrawal address for USDC withdrawals (one-time, free)')
11
+ .argument('<address>', 'Ethereum address to receive withdrawals')
12
+ .option('--human', 'Human-readable output')
13
+ .action(async (address, opts) => {
14
+ const human = isHumanMode(opts.human);
15
+ if (!isValidAddress(address)) {
16
+ printError('Invalid Ethereum address: must be 0x followed by 40 hex characters', human);
17
+ }
18
+ let keystore;
19
+ try {
20
+ keystore = await loadKeystore();
21
+ }
22
+ catch {
23
+ printError('No keystore found. Run `taskmarket init` first.', human);
24
+ }
25
+ const walletAddress = keystore.walletAddress;
26
+ const message = `taskmarket:set-withdrawal-address:${address}`;
27
+ const signature = await signMessage(message, keystore);
28
+ const result = (await apiPost('/api/wallet/set-withdrawal-address', {
29
+ walletAddress,
30
+ withdrawalAddress: address,
31
+ signature,
32
+ }));
33
+ if (human) {
34
+ console.log('Withdrawal address set:', result.withdrawalAddress);
35
+ }
36
+ else {
37
+ printResult({ withdrawalAddress: result.withdrawalAddress }, human);
38
+ }
39
+ });
40
+ //# sourceMappingURL=set-withdrawal-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-withdrawal-address.js","sourceRoot":"","sources":["../../../src/commands/wallet/set-withdrawal-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE3E,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,OAAO,CAAC,wBAAwB,CAAC;KAC7E,WAAW,CAAC,gEAAgE,CAAC;KAC7E,QAAQ,CAAC,WAAW,EAAE,yCAAyC,CAAC;KAChE,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAAyB,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,UAAU,CAAC,oEAAoE,EAAE,KAAK,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,QAAkD,CAAC;IACvD,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC7C,MAAM,OAAO,GAAG,qCAAqC,OAAO,EAAE,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,oCAAoC,EAAE;QAClE,aAAa;QACb,iBAAiB,EAAE,OAAO;QAC1B,SAAS;KACV,CAAC,CAAkC,CAAC;IAErC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { Command } from 'commander';
2
+ import { toHex } from 'viem';
3
+ import { loadKeystore } from '../lib/keystore.js';
4
+ import { signTypedData } from '../lib/signer.js';
5
+ import { apiGet, apiPost } from '../lib/api.js';
6
+ import { isHumanMode, printResult, printError } from '../lib/output.js';
7
+ const USDC_TYPES = {
8
+ TransferWithAuthorization: [
9
+ { name: 'from', type: 'address' },
10
+ { name: 'to', type: 'address' },
11
+ { name: 'value', type: 'uint256' },
12
+ { name: 'validAfter', type: 'uint256' },
13
+ { name: 'validBefore', type: 'uint256' },
14
+ { name: 'nonce', type: 'bytes32' },
15
+ ],
16
+ };
17
+ export const withdrawCommand = new Command('withdraw')
18
+ .description('Withdraw USDC to the registered withdrawal address')
19
+ .argument('<amount>', 'Amount in USDC (e.g. 5 for 5 USDC)')
20
+ .option('--human', 'Human-readable output')
21
+ .action(async (amount, opts) => {
22
+ const human = isHumanMode(opts.human);
23
+ const parsed = parseFloat(amount);
24
+ if (isNaN(parsed) || parsed <= 0) {
25
+ printError('Invalid amount: must be a positive number (e.g. 5 for 5 USDC)', human);
26
+ }
27
+ const amountBaseUnits = String(Math.round(parsed * 1_000_000));
28
+ let keystore;
29
+ try {
30
+ keystore = await loadKeystore();
31
+ }
32
+ catch {
33
+ printError('No keystore found. Run `taskmarket init` first.', human);
34
+ }
35
+ const from = keystore.walletAddress;
36
+ const addressResponse = (await apiGet(`/api/wallet/withdrawal-address?address=${from}`));
37
+ if (!addressResponse.withdrawalAddress) {
38
+ printError('No withdrawal address set. Run: taskmarket wallet set-withdrawal-address <address>', human);
39
+ }
40
+ const { withdrawalAddress, usdcDomain } = addressResponse;
41
+ const now = Math.floor(Date.now() / 1000);
42
+ const authorization = {
43
+ from,
44
+ to: withdrawalAddress,
45
+ value: amountBaseUnits,
46
+ validAfter: String(now - 60),
47
+ validBefore: String(now + 300),
48
+ nonce: toHex(crypto.getRandomValues(new Uint8Array(32))),
49
+ };
50
+ const signature = await signTypedData({
51
+ domain: usdcDomain,
52
+ types: USDC_TYPES,
53
+ primaryType: 'TransferWithAuthorization',
54
+ message: authorization,
55
+ }, keystore);
56
+ const result = (await apiPost('/api/wallet/withdraw', {
57
+ from,
58
+ amountBaseUnits,
59
+ authorization,
60
+ signature,
61
+ }));
62
+ if (human) {
63
+ const usdcAmount = (parseInt(result.amountBaseUnits) / 1_000_000).toFixed(6);
64
+ console.log(`Withdrew ${usdcAmount} USDC to ${result.to}`);
65
+ console.log('Transaction hash:', result.txHash);
66
+ }
67
+ else {
68
+ printResult({ txHash: result.txHash, amountBaseUnits: result.amountBaseUnits, to: result.to }, human);
69
+ }
70
+ });
71
+ //# sourceMappingURL=withdraw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../src/commands/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkBxE,MAAM,UAAU,GAAG;IACjB,yBAAyB,EAAE;QACzB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;QACjC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;QAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;QAClC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;QACvC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;QACxC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;KACnC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,oDAAoD,CAAC;KACjE,QAAQ,CAAC,UAAU,EAAE,oCAAoC,CAAC;KAC1D,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAyB,EAAE,EAAE;IAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACjC,UAAU,CAAC,+DAA+D,EAAE,KAAK,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAE/D,IAAI,QAAkD,CAAC;IACvD,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC;IAEpC,MAAM,eAAe,GAAG,CAAC,MAAM,MAAM,CACnC,0CAA0C,IAAI,EAAE,CACjD,CAA8B,CAAC;IAEhC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;QACvC,UAAU,CACR,oFAAoF,EACpF,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC;IAE1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG;QACpB,IAAI;QACJ,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,eAAe;QACtB,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QAC9B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KACzD,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC;QACE,MAAM,EAAE,UAAqC;QAC7C,KAAK,EAAE,UAAqC;QAC5C,WAAW,EAAE,2BAA2B;QACxC,OAAO,EAAE,aAAwC;KAClD,EACD,QAAQ,CACT,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,sBAAsB,EAAE;QACpD,IAAI;QACJ,eAAe;QACf,aAAa;QACb,SAAS;KACV,CAAC,CAAqB,CAAC;IAExB,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,YAAY,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,WAAW,CACT,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EACjF,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -8,9 +8,12 @@ import { taskCommand } from './commands/task/index.js';
8
8
  import { agentsCommand } from './commands/agents.js';
9
9
  import { inboxCommand } from './commands/inbox.js';
10
10
  import { depositCommand } from './commands/deposit.js';
11
+ import { walletCommand } from './commands/wallet/index.js';
12
+ import { withdrawCommand } from './commands/withdraw.js';
11
13
  const program = new Command();
12
14
  program.name('taskmarket').description('Taskmarket CLI for AI agents').version('0.3.1');
13
15
  program.addCommand(initCommand);
16
+ program.addCommand(walletCommand);
14
17
  program.addCommand(addressCommand);
15
18
  program.addCommand(identityCommand);
16
19
  program.addCommand(statsCommand);
@@ -18,6 +21,7 @@ program.addCommand(taskCommand);
18
21
  program.addCommand(agentsCommand);
19
22
  program.addCommand(inboxCommand);
20
23
  program.addCommand(depositCommand);
24
+ program.addCommand(withdrawCommand);
21
25
  program.parseAsync(process.argv).catch((err) => {
22
26
  const human = process.argv.includes('--human') || process.env['TASKMARKET_FORMAT'] === 'human';
23
27
  if (!human) {
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,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;AAEvD,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,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;AAEnC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC;IAC/F,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,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,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,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,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC;IAC/F,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { API_URL } from './api.js';
2
+ export async function pollAgentId(address, maxWaitMs = 60_000) {
3
+ const interval = 3_000;
4
+ const deadline = Date.now() + maxWaitMs;
5
+ while (Date.now() < deadline) {
6
+ await new Promise((r) => setTimeout(r, interval));
7
+ try {
8
+ const res = await fetch(`${API_URL}/api/identity/status?address=${address}`);
9
+ if (res.ok) {
10
+ const data = (await res.json());
11
+ if (data.agentId)
12
+ return data.agentId;
13
+ }
14
+ }
15
+ catch {
16
+ // ignore transient errors, keep polling
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,SAAS,GAAG,MAAM;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gCAAgC,OAAO,EAAE,CAAC,CAAC;YAC7E,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAgC,CAAC;gBAC/D,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucid-agents/taskmarket",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "taskmarket": "./dist/index.js"
@@ -15,8 +15,8 @@
15
15
  "tsx": "^4.7.0",
16
16
  "typescript": "^5.3.3",
17
17
  "vitest": "^2.0.0",
18
- "@taskmarket/prettier-config": "0.0.0",
19
- "@taskmarket/eslint-config": "0.0.0"
18
+ "@taskmarket/eslint-config": "0.0.0",
19
+ "@taskmarket/prettier-config": "0.0.0"
20
20
  },
21
21
  "files": [
22
22
  "dist"