@lucid-agents/taskmarket 0.6.4 → 0.7.1

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 (69) hide show
  1. package/dist/index.js +6816 -19
  2. package/package.json +7 -3
  3. package/dist/commands/address.js +0 -10
  4. package/dist/commands/address.js.map +0 -1
  5. package/dist/commands/agents.js +0 -23
  6. package/dist/commands/agents.js.map +0 -1
  7. package/dist/commands/deposit.js +0 -34
  8. package/dist/commands/deposit.js.map +0 -1
  9. package/dist/commands/identity.js +0 -22
  10. package/dist/commands/identity.js.map +0 -1
  11. package/dist/commands/inbox.js +0 -19
  12. package/dist/commands/inbox.js.map +0 -1
  13. package/dist/commands/init.js +0 -74
  14. package/dist/commands/init.js.map +0 -1
  15. package/dist/commands/stats.js +0 -35
  16. package/dist/commands/stats.js.map +0 -1
  17. package/dist/commands/task/accept.js +0 -15
  18. package/dist/commands/task/accept.js.map +0 -1
  19. package/dist/commands/task/bid.js +0 -16
  20. package/dist/commands/task/bid.js.map +0 -1
  21. package/dist/commands/task/claim.js +0 -19
  22. package/dist/commands/task/claim.js.map +0 -1
  23. package/dist/commands/task/create.js +0 -41
  24. package/dist/commands/task/create.js.map +0 -1
  25. package/dist/commands/task/download.js +0 -40
  26. package/dist/commands/task/download.js.map +0 -1
  27. package/dist/commands/task/get.js +0 -14
  28. package/dist/commands/task/get.js.map +0 -1
  29. package/dist/commands/task/index.js +0 -31
  30. package/dist/commands/task/index.js.map +0 -1
  31. package/dist/commands/task/pitch.js +0 -22
  32. package/dist/commands/task/pitch.js.map +0 -1
  33. package/dist/commands/task/proof.js +0 -24
  34. package/dist/commands/task/proof.js.map +0 -1
  35. package/dist/commands/task/rate.js +0 -23
  36. package/dist/commands/task/rate.js.map +0 -1
  37. package/dist/commands/task/search.js +0 -38
  38. package/dist/commands/task/search.js.map +0 -1
  39. package/dist/commands/task/select-winner.js +0 -20
  40. package/dist/commands/task/select-winner.js.map +0 -1
  41. package/dist/commands/task/select-worker.js +0 -24
  42. package/dist/commands/task/select-worker.js.map +0 -1
  43. package/dist/commands/task/submissions.js +0 -18
  44. package/dist/commands/task/submissions.js.map +0 -1
  45. package/dist/commands/task/submit.js +0 -23
  46. package/dist/commands/task/submit.js.map +0 -1
  47. package/dist/commands/wallet/balance.js +0 -17
  48. package/dist/commands/wallet/balance.js.map +0 -1
  49. package/dist/commands/wallet/import.js +0 -96
  50. package/dist/commands/wallet/import.js.map +0 -1
  51. package/dist/commands/wallet/index.js +0 -9
  52. package/dist/commands/wallet/index.js.map +0 -1
  53. package/dist/commands/wallet/set-withdrawal-address.js +0 -33
  54. package/dist/commands/wallet/set-withdrawal-address.js.map +0 -1
  55. package/dist/commands/withdraw.js +0 -62
  56. package/dist/commands/withdraw.js.map +0 -1
  57. package/dist/index.js.map +0 -1
  58. package/dist/lib/agent.js +0 -21
  59. package/dist/lib/agent.js.map +0 -1
  60. package/dist/lib/api.js +0 -25
  61. package/dist/lib/api.js.map +0 -1
  62. package/dist/lib/keystore.js +0 -62
  63. package/dist/lib/keystore.js.map +0 -1
  64. package/dist/lib/output.js +0 -8
  65. package/dist/lib/output.js.map +0 -1
  66. package/dist/lib/signer.js +0 -57
  67. package/dist/lib/signer.js.map +0 -1
  68. package/dist/lib/x402.js +0 -55
  69. package/dist/lib/x402.js.map +0 -1
package/package.json CHANGED
@@ -1,21 +1,24 @@
1
1
  {
2
2
  "name": "@lucid-agents/taskmarket",
3
- "version": "0.6.4",
3
+ "version": "0.7.1",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "taskmarket": "./dist/index.js"
7
7
  },
8
8
  "prettier": "@taskmarket/prettier-config",
9
9
  "dependencies": {
10
+ "@xmtp/node-sdk": "^2.0.0",
10
11
  "commander": "^12.0.0",
11
12
  "viem": "^2.41.2"
12
13
  },
13
14
  "devDependencies": {
14
15
  "@types/node": "^20.11.0",
16
+ "tsup": "^8.0.0",
15
17
  "tsx": "^4.7.0",
16
18
  "typescript": "^5.3.3",
17
19
  "vitest": "^2.0.0",
18
20
  "@taskmarket/eslint-config": "0.0.0",
21
+ "@taskmarket/shared": "1.0.0",
19
22
  "@taskmarket/prettier-config": "0.0.0"
20
23
  },
21
24
  "files": [
@@ -25,7 +28,7 @@
25
28
  "access": "public"
26
29
  },
27
30
  "scripts": {
28
- "build": "tsc",
31
+ "build": "tsup",
29
32
  "dev": "tsx src/index.ts",
30
33
  "lint:check": "eslint src/",
31
34
  "lint:write": "eslint src/ --fix",
@@ -33,6 +36,7 @@
33
36
  "format:write": "prettier --write src/",
34
37
  "type-check": "tsc --noEmit",
35
38
  "test": "vitest run",
36
- "test:watch": "vitest watch"
39
+ "test:watch": "vitest watch",
40
+ "smoke:xmtp-live": "tsx scripts/smoke-xmtp-live.ts"
37
41
  }
38
42
  }
@@ -1,10 +0,0 @@
1
- import { Command } from 'commander';
2
- import { loadKeystore } from '../lib/keystore.js';
3
- import { printResult } from '../lib/output.js';
4
- export const addressCommand = new Command('address')
5
- .description('Print the wallet address')
6
- .action(async () => {
7
- const keystore = await loadKeystore();
8
- printResult({ address: keystore.walletAddress });
9
- });
10
- //# sourceMappingURL=address.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/commands/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC"}
@@ -1,23 +0,0 @@
1
- import { Command } from 'commander';
2
- import { apiGet } from '../lib/api.js';
3
- import { printResult } from '../lib/output.js';
4
- export const agentsCommand = new Command('agents')
5
- .description('Browse the agent directory')
6
- .option('--sort <order>', 'Sort order: reputation or tasks', 'reputation')
7
- .option('--skill <tag>', 'Filter by skill tag')
8
- .option('--search <query>', 'Search by agentId or wallet address')
9
- .option('--limit <n>', 'Maximum results to return', '20')
10
- .action(async (opts) => {
11
- const params = new URLSearchParams();
12
- if (opts.sort)
13
- params.set('sort', opts.sort);
14
- if (opts.skill)
15
- params.set('skill', opts.skill);
16
- if (opts.search)
17
- params.set('search', opts.search);
18
- if (opts.limit)
19
- params.set('limit', opts.limit);
20
- const result = await apiGet(`/api/agents/leaderboard?${params.toString()}`);
21
- printResult(result);
22
- });
23
- //# sourceMappingURL=agents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,EAAE,YAAY,CAAC;KACzE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;KAC9C,MAAM,CAAC,kBAAkB,EAAE,qCAAqC,CAAC;KACjE,MAAM,CAAC,aAAa,EAAE,2BAA2B,EAAE,IAAI,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,IAAwE,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,IAAI,CAAC,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,2BAA2B,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC"}
@@ -1,34 +0,0 @@
1
- import { Command } from 'commander';
2
- import { getWalletAddress } from '../lib/signer.js';
3
- import { printResult, printError } from '../lib/output.js';
4
- import { apiGet } from '../lib/api.js';
5
- export const depositCommand = new Command('deposit')
6
- .description('Show wallet address and network info for funding')
7
- .action(async () => {
8
- let address;
9
- try {
10
- address = await getWalletAddress();
11
- }
12
- catch (err) {
13
- const msg = err instanceof Error ? err.message : 'No keystore found. Run `taskmarket init` first.';
14
- printError(msg);
15
- }
16
- let networkInfo;
17
- try {
18
- const response = (await apiGet('/trpc/network.info'));
19
- networkInfo = response.result.data;
20
- }
21
- catch (err) {
22
- const msg = err instanceof Error ? err.message : 'Failed to fetch network info from backend.';
23
- printError(msg);
24
- }
25
- const data = {
26
- address: address,
27
- network: networkInfo.networkName,
28
- chainId: networkInfo.chainId,
29
- currency: 'USDC',
30
- usdcContract: networkInfo.usdcAddress,
31
- };
32
- printResult(data);
33
- });
34
- //# sourceMappingURL=deposit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../src/commands/deposit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAUvC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC;QACzF,UAAU,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,WAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAEnD,CAAC;QACF,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;IACrC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4CAA4C,CAAC;QAC9F,UAAU,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG;QACX,OAAO,EAAE,OAAQ;QACjB,OAAO,EAAE,WAAY,CAAC,WAAW;QACjC,OAAO,EAAE,WAAY,CAAC,OAAO;QAC7B,QAAQ,EAAE,MAAM;QAChB,YAAY,EAAE,WAAY,CAAC,WAAW;KACvC,CAAC;IAEF,WAAW,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { Command } from 'commander';
2
- import { loadKeystore } from '../lib/keystore.js';
3
- import { apiGet } from '../lib/api.js';
4
- import { x402Post } from '../lib/x402.js';
5
- import { printResult } from '../lib/output.js';
6
- export const identityCommand = new Command('identity').description('Manage agent identity');
7
- identityCommand
8
- .command('register')
9
- .description('Register ERC-8004 agent identity (costs 0.001 USDC)')
10
- .action(async () => {
11
- const result = (await x402Post('/api/identity/register', {}));
12
- printResult({ agentId: result.agentId });
13
- });
14
- identityCommand
15
- .command('status')
16
- .description('Check identity registration status')
17
- .action(async () => {
18
- const keystore = await loadKeystore();
19
- const result = (await apiGet(`/api/identity/status?address=${keystore.walletAddress}`));
20
- printResult({ registered: result.registered, agentId: result.agentId });
21
- });
22
- //# sourceMappingURL=identity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/commands/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAE5F,eAAe;KACZ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAG3D,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEL,eAAe;KACZ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,gCAAgC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAGrF,CAAC;IACF,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC"}
@@ -1,19 +0,0 @@
1
- import { Command } from 'commander';
2
- import { apiGet } from '../lib/api.js';
3
- import { getWalletAddress } from '../lib/signer.js';
4
- import { printResult, printError } from '../lib/output.js';
5
- export const inboxCommand = new Command('inbox')
6
- .description('Show tasks you created and tasks you are working on')
7
- .action(async () => {
8
- let address;
9
- try {
10
- address = await getWalletAddress();
11
- }
12
- catch (err) {
13
- const msg = err instanceof Error ? err.message : 'No keystore found. Run `taskmarket init` first.';
14
- printError(msg);
15
- }
16
- const result = (await apiGet(`/api/agents/inbox?address=${encodeURIComponent(address)}`));
17
- printResult(result);
18
- });
19
- //# sourceMappingURL=inbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAgB3D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC;QACzF,UAAU,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAC1B,6BAA6B,kBAAkB,CAAC,OAAQ,CAAC,EAAE,CAC5D,CAAgB,CAAC;IAClB,WAAW,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC"}
@@ -1,74 +0,0 @@
1
- import { Command } from 'commander';
2
- import { generateKeypair, encryptPrivateKey, saveKeystore, keystoreExists, loadKeystore, } from '../lib/keystore.js';
3
- import { API_URL, apiGet } from '../lib/api.js';
4
- import { printResult } from '../lib/output.js';
5
- import { pollAgentId } from '../lib/agent.js';
6
- export const initCommand = new Command('init')
7
- .description('Create and register a new agent wallet (safe to re-run)')
8
- .action(async () => {
9
- if (await keystoreExists()) {
10
- const keystore = await loadKeystore();
11
- // Poll for agentId if not yet assigned (background registration in progress)
12
- let agentId = keystore.agentId;
13
- if (!agentId) {
14
- agentId = await pollAgentId(keystore.walletAddress);
15
- if (agentId) {
16
- await saveKeystore({ ...keystore, agentId });
17
- }
18
- }
19
- let networkInfo;
20
- try {
21
- const response = (await apiGet('/trpc/network.info'));
22
- networkInfo = response.result.data;
23
- }
24
- catch {
25
- // Non-fatal
26
- }
27
- printResult({
28
- address: keystore.walletAddress,
29
- agentId,
30
- network: networkInfo?.networkName,
31
- chainId: networkInfo?.chainId,
32
- });
33
- return;
34
- }
35
- const { privateKey, address } = generateKeypair();
36
- // Register device with backend
37
- const res = await fetch(`${API_URL}/api/devices`, {
38
- method: 'POST',
39
- headers: { 'Content-Type': 'application/json' },
40
- body: JSON.stringify({ walletAddress: address }),
41
- });
42
- if (!res.ok) {
43
- const text = await res.text().catch(() => '');
44
- throw new Error(`Device registration failed (${res.status}): ${text}`);
45
- }
46
- const { deviceId, apiToken, deviceEncryptionKey, agentId: initialAgentId, } = (await res.json());
47
- const encryptedKey = encryptPrivateKey(deviceEncryptionKey, privateKey);
48
- // agentId may be null if on-chain registration is still pending — poll for it
49
- let agentId = initialAgentId;
50
- await saveKeystore({ encryptedKey, walletAddress: address, deviceId, apiToken, agentId });
51
- if (!agentId) {
52
- agentId = await pollAgentId(address);
53
- if (agentId) {
54
- const keystore = await loadKeystore();
55
- await saveKeystore({ ...keystore, agentId });
56
- }
57
- }
58
- // Fetch network info to show funding details
59
- let networkInfo;
60
- try {
61
- const response = (await apiGet('/trpc/network.info'));
62
- networkInfo = response.result.data;
63
- }
64
- catch {
65
- // Non-fatal — show fallback text if backend unreachable
66
- }
67
- printResult({
68
- address,
69
- agentId,
70
- network: networkInfo?.networkName,
71
- chainId: networkInfo?.chainId,
72
- });
73
- });
74
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import { Command } from 'commander';
2
- import { loadKeystore } from '../lib/keystore.js';
3
- import { apiGet } from '../lib/api.js';
4
- import { printResult } from '../lib/output.js';
5
- export const statsCommand = new Command('stats')
6
- .description('View agent statistics')
7
- .option('--address <addr>', 'Wallet address (defaults to own wallet)')
8
- .option('--agent <agentId>', 'Agent ID (alternative to --address)')
9
- .action(async (opts) => {
10
- let address = opts.address;
11
- if (!address) {
12
- const keystore = await loadKeystore();
13
- address = keystore.walletAddress;
14
- }
15
- const statsQuery = opts.agent
16
- ? `/api/agents/stats?agentId=${opts.agent}`
17
- : `/api/agents/stats?address=${address}`;
18
- const [result, balanceResult] = await Promise.all([
19
- apiGet(statsQuery),
20
- apiGet(`/api/wallet/balance?address=${address}`),
21
- ]);
22
- printResult({
23
- agentId: result.agentId,
24
- address: result.address,
25
- balanceUsdc: balanceResult.balanceUsdc,
26
- balanceBaseUnits: balanceResult.balanceBaseUnits,
27
- completedTasks: result.completedTasks,
28
- ratedTasks: result.ratedTasks,
29
- averageRating: result.averageRating,
30
- totalEarnings: result.totalEarnings,
31
- skills: result.skills,
32
- recentRatings: result.recentRatings,
33
- });
34
- });
35
- //# sourceMappingURL=stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,kBAAkB,EAAE,yCAAyC,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,qCAAqC,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,IAA0C,EAAE,EAAE;IAC3D,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;QACtC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC;IACnC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK;QAC3B,CAAC,CAAC,6BAA6B,IAAI,CAAC,KAAK,EAAE;QAC3C,CAAC,CAAC,6BAA6B,OAAO,EAAE,CAAC;IAE3C,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChD,MAAM,CAAC,UAAU,CASf;QACF,MAAM,CAAC,+BAA+B,OAAO,EAAE,CAG7C;KACH,CAAC,CAAC;IAEH,WAAW,CAAC;QACV,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- import { Command } from 'commander';
2
- import { x402Post } from '../../lib/x402.js';
3
- import { printResult } from '../../lib/output.js';
4
- export const acceptCmd = new Command('accept')
5
- .description('Accept a submission (costs 0.001 USDC)')
6
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
7
- .requiredOption('--worker <addr>', 'Worker wallet address')
8
- .action(async (taskId, opts) => {
9
- await x402Post(`/api/tasks/${taskId}/accept`, {
10
- taskId,
11
- worker: opts.worker,
12
- });
13
- printResult({ accepted: true });
14
- });
15
- //# sourceMappingURL=accept.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../../src/commands/task/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC3C,WAAW,CAAC,wCAAwC,CAAC;KACrD,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,cAAc,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAwB,EAAE,EAAE;IACzD,MAAM,QAAQ,CAAC,cAAc,MAAM,SAAS,EAAE;QAC5C,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC"}
@@ -1,16 +0,0 @@
1
- import { Command } from 'commander';
2
- import { x402Post } from '../../lib/x402.js';
3
- import { printResult } from '../../lib/output.js';
4
- export const bidCmd = new Command('bid')
5
- .description('Submit a bid on an auction task')
6
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
7
- .requiredOption('--price <usdc>', 'Bid price in USDC (e.g. 3 or 1.5)')
8
- .action(async (taskId, opts) => {
9
- const priceBaseUnits = String(Math.round(parseFloat(opts.price) * 1e6));
10
- const result = (await x402Post(`/api/tasks/${taskId}/bids`, {
11
- taskId,
12
- price: priceBaseUnits,
13
- }));
14
- printResult({ bidId: result.bidId });
15
- });
16
- //# sourceMappingURL=bid.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bid.js","sourceRoot":"","sources":["../../../src/commands/task/bid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACrC,WAAW,CAAC,iCAAiC,CAAC;KAC9C,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,cAAc,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAuB,EAAE,EAAE;IACxD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,cAAc,MAAM,OAAO,EAAE;QAC1D,MAAM;QACN,KAAK,EAAE,cAAc;KACtB,CAAC,CAAsB,CAAC;IAEzB,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC"}
@@ -1,19 +0,0 @@
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 { printResult } from '../../lib/output.js';
6
- export const claimCmd = new Command('claim')
7
- .description('Claim a task as a worker')
8
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
9
- .action(async (taskId) => {
10
- const keystore = await loadKeystore();
11
- const message = `taskmarket:claim:${taskId}`;
12
- const signature = await signMessage(message, keystore);
13
- const result = (await apiPost(`/api/tasks/${taskId}/claim`, {
14
- workerAddress: keystore.walletAddress,
15
- signature,
16
- }));
17
- printResult({ claimId: result.claimId });
18
- });
19
- //# sourceMappingURL=claim.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/commands/task/claim.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,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KACzC,WAAW,CAAC,0BAA0B,CAAC;KACvC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;IAC/B,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,oBAAoB,MAAM,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,MAAM,QAAQ,EAAE;QAC1D,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,SAAS;KACV,CAAC,CAAwB,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
@@ -1,41 +0,0 @@
1
- import { Command } from 'commander';
2
- import { x402Post } from '../../lib/x402.js';
3
- import { printResult, printError } from '../../lib/output.js';
4
- export const createCmd = new Command('create')
5
- .description('Create a new task (costs reward amount in USDC)')
6
- .requiredOption('--description <text>', 'Task description')
7
- .requiredOption('--reward <usdc>', 'Reward in USDC (e.g. 5 for 5 USDC)')
8
- .requiredOption('--duration <hours>', 'Task duration in hours')
9
- .option('--mode <mode>', 'Task mode: bounty, claim, pitch, benchmark, auction', 'bounty')
10
- .option('--tags <tags>', 'Comma-separated tags')
11
- .option('--pitch-deadline <hours>', 'Pitch deadline in hours from now (pitch mode only)')
12
- .option('--bid-deadline <hours>', 'Bid deadline in hours from now (auction mode only)')
13
- .option('--max-price <usdc>', 'Maximum bid price in USDC (required for auction mode)')
14
- .action(async (opts) => {
15
- if (opts.mode === 'auction' && !opts.maxPrice) {
16
- printError('--max-price is required for auction mode');
17
- }
18
- const rewardBaseUnits = String(Math.round(parseFloat(opts.reward) * 1e6));
19
- const tags = opts.tags ? opts.tags.split(',').map((t) => t.trim()) : [];
20
- const body = {
21
- description: opts.description,
22
- reward: rewardBaseUnits,
23
- duration: parseInt(opts.duration, 10),
24
- mode: opts.mode,
25
- tags,
26
- stakeRequired: false,
27
- stakeBps: 0,
28
- };
29
- if (opts.pitchDeadline) {
30
- body.pitchDeadline = parseInt(opts.pitchDeadline, 10) * 3600;
31
- }
32
- if (opts.bidDeadline) {
33
- body.bidDeadline = parseInt(opts.bidDeadline, 10);
34
- }
35
- if (opts.maxPrice) {
36
- body.maxPrice = String(Math.round(parseFloat(opts.maxPrice) * 1e6));
37
- }
38
- const result = (await x402Post('/api/tasks', body));
39
- printResult({ taskId: result.taskId });
40
- });
41
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/task/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC3C,WAAW,CAAC,iDAAiD,CAAC;KAC9D,cAAc,CAAC,sBAAsB,EAAE,kBAAkB,CAAC;KAC1D,cAAc,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;KACvE,cAAc,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;KAC9D,MAAM,CAAC,eAAe,EAAE,qDAAqD,EAAE,QAAQ,CAAC;KACxF,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,0BAA0B,EAAE,oDAAoD,CAAC;KACxF,MAAM,CAAC,wBAAwB,EAAE,oDAAoD,CAAC;KACtF,MAAM,CAAC,oBAAoB,EAAE,uDAAuD,CAAC;KACrF,MAAM,CACL,KAAK,EAAE,IASN,EAAE,EAAE;IACH,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9C,UAAU,CAAC,0CAA0C,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExE,MAAM,IAAI,GAA4B;QACpC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI;QACJ,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/D,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAyC,CAAC;IAC5F,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,CAAC,CACF,CAAC"}
@@ -1,40 +0,0 @@
1
- import { Command } from 'commander';
2
- import { loadKeystore } from '../../lib/keystore.js';
3
- import { apiPost } from '../../lib/api.js';
4
- import { printError } from '../../lib/output.js';
5
- import { writeFileSync } from 'fs';
6
- export const downloadCmd = new Command('download')
7
- .description('Download a submission file (requester or worker)')
8
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
9
- .requiredOption('--submission <id>', 'Submission ID (from `task submissions`)')
10
- .option('--output <path>', 'Save to file instead of printing to stdout')
11
- .action(async (taskId, opts) => {
12
- const keystore = await loadKeystore();
13
- let presignedUrl;
14
- try {
15
- const result = (await apiPost(`/api/tasks/${taskId}/submissions/${opts.submission}/preview`, {
16
- taskId,
17
- submissionId: opts.submission,
18
- deviceId: keystore.deviceId,
19
- apiToken: keystore.apiToken,
20
- }));
21
- presignedUrl = result.presignedUrl;
22
- }
23
- catch (err) {
24
- const msg = err instanceof Error ? err.message : 'Failed to get download URL.';
25
- printError(msg);
26
- }
27
- const res = await fetch(presignedUrl);
28
- if (!res.ok) {
29
- printError(`Failed to download file: ${res.status}`);
30
- }
31
- const content = await res.text();
32
- if (opts.output) {
33
- writeFileSync(opts.output, content, 'utf8');
34
- process.stdout.write(JSON.stringify({ ok: true, data: { savedTo: opts.output } }) + '\n');
35
- }
36
- else {
37
- process.stdout.write(content);
38
- }
39
- });
40
- //# sourceMappingURL=download.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/commands/task/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAEnC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KAC/C,WAAW,CAAC,kDAAkD,CAAC;KAC/D,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,cAAc,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;KAC9E,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;KACvE,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAA6C,EAAE,EAAE;IAC9E,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAEtC,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,MAAM,gBAAgB,IAAI,CAAC,UAAU,UAAU,EAAE;YAC3F,MAAM;YACN,YAAY,EAAE,IAAI,CAAC,UAAU;YAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC,CAA6B,CAAC;QAChC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACrC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;QAC/E,UAAU,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAa,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,UAAU,CAAC,4BAA4B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAEjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1,14 +0,0 @@
1
- import { Command } from 'commander';
2
- import { apiGet } from '../../lib/api.js';
3
- import { printResult, printError } from '../../lib/output.js';
4
- export const getCmd = new Command('get')
5
- .description('Get task details')
6
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
7
- .action(async (taskId) => {
8
- const task = (await apiGet(`/api/tasks/${taskId}`));
9
- if (!task) {
10
- printError(`Task not found: ${taskId}`);
11
- }
12
- printResult(task);
13
- });
14
- //# sourceMappingURL=get.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/task/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACrC,WAAW,CAAC,kBAAkB,CAAC;KAC/B,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;IAC/B,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,cAAc,MAAM,EAAE,CAAC,CAAmC,CAAC;IACtF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,UAAU,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -1,31 +0,0 @@
1
- import { Command } from 'commander';
2
- import { createCmd } from './create.js';
3
- import { listCmd } from './search.js';
4
- import { getCmd } from './get.js';
5
- import { submitCmd } from './submit.js';
6
- import { acceptCmd } from './accept.js';
7
- import { rateCmd } from './rate.js';
8
- import { claimCmd } from './claim.js';
9
- import { pitchCmd } from './pitch.js';
10
- import { selectWorkerCmd } from './select-worker.js';
11
- import { proofCmd } from './proof.js';
12
- import { bidCmd } from './bid.js';
13
- import { submissionsCmd } from './submissions.js';
14
- import { selectWinnerCmd } from './select-winner.js';
15
- import { downloadCmd } from './download.js';
16
- export const taskCommand = new Command('task').description('Manage tasks');
17
- taskCommand.addCommand(createCmd);
18
- taskCommand.addCommand(listCmd);
19
- taskCommand.addCommand(getCmd);
20
- taskCommand.addCommand(submitCmd);
21
- taskCommand.addCommand(acceptCmd);
22
- taskCommand.addCommand(rateCmd);
23
- taskCommand.addCommand(claimCmd);
24
- taskCommand.addCommand(pitchCmd);
25
- taskCommand.addCommand(selectWorkerCmd);
26
- taskCommand.addCommand(proofCmd);
27
- taskCommand.addCommand(bidCmd);
28
- taskCommand.addCommand(submissionsCmd);
29
- taskCommand.addCommand(selectWinnerCmd);
30
- taskCommand.addCommand(downloadCmd);
31
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/task/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAE3E,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAClC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/B,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAClC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAClC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACxC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/B,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACvC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACxC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC"}
@@ -1,22 +0,0 @@
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 { printResult } from '../../lib/output.js';
6
- export const pitchCmd = new Command('pitch')
7
- .description('Submit a pitch for a task')
8
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
9
- .requiredOption('--text <text>', 'Pitch text')
10
- .option('--duration <hours>', 'Estimated duration in hours')
11
- .action(async (taskId, opts) => {
12
- const keystore = await loadKeystore();
13
- const signature = await signMessage(`taskmarket:pitch:${taskId}`, keystore);
14
- const result = (await apiPost(`/api/tasks/${taskId}/pitches`, {
15
- workerAddress: keystore.walletAddress,
16
- pitchText: opts.text,
17
- ...(opts.duration ? { estimatedDuration: parseInt(opts.duration, 10) } : {}),
18
- signature,
19
- }));
20
- printResult({ pitchId: result.pitchId });
21
- });
22
- //# sourceMappingURL=pitch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pitch.js","sourceRoot":"","sources":["../../../src/commands/task/pitch.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,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KACzC,WAAW,CAAC,2BAA2B,CAAC;KACxC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;KAC7C,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAyC,EAAE,EAAE;IAC1E,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,oBAAoB,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,MAAM,UAAU,EAAE;QAC5D,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,SAAS;KACV,CAAC,CAAwB,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
@@ -1,24 +0,0 @@
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 { printResult } from '../../lib/output.js';
6
- export const proofCmd = new Command('proof')
7
- .description('Submit a proof for a task')
8
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
9
- .requiredOption('--data <data>', 'Proof data')
10
- .requiredOption('--type <type>', 'Proof type')
11
- .option('--metric <val>', 'Metric value')
12
- .action(async (taskId, opts) => {
13
- const keystore = await loadKeystore();
14
- const signature = await signMessage(`taskmarket:proof:${taskId}`, keystore);
15
- const result = (await apiPost(`/api/tasks/${taskId}/proofs`, {
16
- workerAddress: keystore.walletAddress,
17
- proofData: opts.data,
18
- proofType: opts.type,
19
- ...(opts.metric ? { metricValue: opts.metric } : {}),
20
- signature,
21
- }));
22
- printResult({ proofId: result.proofId });
23
- });
24
- //# sourceMappingURL=proof.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proof.js","sourceRoot":"","sources":["../../../src/commands/task/proof.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,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KACzC,WAAW,CAAC,2BAA2B,CAAC;KACxC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;KAC7C,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;KAC7C,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC;KACxC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAqD,EAAE,EAAE;IACtF,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,oBAAoB,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,MAAM,SAAS,EAAE;QAC3D,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,SAAS;KACV,CAAC,CAAwB,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
@@ -1,23 +0,0 @@
1
- import { Command } from 'commander';
2
- import { x402Post } from '../../lib/x402.js';
3
- import { printResult, printError } from '../../lib/output.js';
4
- export const rateCmd = new Command('rate')
5
- .description('Rate a worker (costs 0.001 USDC)')
6
- .argument('<taskId>', 'Task ID (0x-prefixed hex)')
7
- .requiredOption('--worker <addr>', 'Worker wallet address')
8
- .requiredOption('--rating <n>', 'Rating 0-100')
9
- .option('--feedback <text>', 'Optional feedback text')
10
- .action(async (taskId, opts) => {
11
- const rating = parseInt(opts.rating, 10);
12
- if (rating < 0 || rating > 100) {
13
- printError('Rating must be between 0 and 100');
14
- }
15
- const result = (await x402Post(`/api/tasks/${taskId}/rate`, {
16
- taskId,
17
- worker: opts.worker,
18
- rating,
19
- ...(opts.feedback ? { feedbackText: opts.feedback } : {}),
20
- }));
21
- printResult({ feedbackId: result.feedbackId });
22
- });
23
- //# sourceMappingURL=rate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rate.js","sourceRoot":"","sources":["../../../src/commands/task/rate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACvC,WAAW,CAAC,kCAAkC,CAAC;KAC/C,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACjD,cAAc,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAC1D,cAAc,CAAC,cAAc,EAAE,cAAc,CAAC;KAC9C,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAA2D,EAAE,EAAE;IAC5F,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAC/B,UAAU,CAAC,kCAAkC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,cAAc,MAAM,OAAO,EAAE;QAC1D,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM;QACN,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAA6C,CAAC;IAEhD,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC"}