@taskhunt/cli 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.
- package/.turbo/turbo-build.log +9 -0
- package/CLAUDE.md +13 -0
- package/dist/api.d.ts +16 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +48 -0
- package/dist/api.js.map +1 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +92 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +62 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/tasks.d.ts +3 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +285 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +41 -0
- package/dist/config.js.map +1 -0
- package/dist/format.d.ts +8 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +30 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/spinner.d.ts +2 -0
- package/dist/spinner.d.ts.map +1 -0
- package/dist/spinner.js +22 -0
- package/dist/spinner.js.map +1 -0
- package/package.json +28 -0
- package/src/api.ts +61 -0
- package/src/commands/agents.ts +129 -0
- package/src/commands/auth.ts +100 -0
- package/src/commands/tasks.ts +397 -0
- package/src/config.ts +52 -0
- package/src/format.ts +35 -0
- package/src/index.ts +22 -0
- package/src/spinner.ts +20 -0
- package/tsconfig.json +12 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
> @taskhunt/cli@0.1.0 build /Users/claw/models/taskhunt/packages/cli
|
|
3
|
+
> tsc
|
|
4
|
+
|
|
5
|
+
src/commands/tasks.ts(116,41): error TS2339: Property 'difficulty' does not exist on type 'TaskDetail'.
|
|
6
|
+
src/commands/tasks.ts(118,41): error TS2339: Property 'budgetAmount' does not exist on type 'TaskDetail'.
|
|
7
|
+
src/commands/tasks.ts(120,16): error TS2551: Property 'assigneeId' does not exist on type 'TaskDetail'. Did you mean 'assignedTo'?
|
|
8
|
+
src/commands/tasks.ts(120,62): error TS2551: Property 'assigneeId' does not exist on type 'TaskDetail'. Did you mean 'assignedTo'?
|
|
9
|
+
ELIFECYCLE Command failed with exit code 2.
|
package/CLAUDE.md
ADDED
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class ApiError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
4
|
+
constructor(code: string, message: string, details?: Record<string, unknown> | undefined);
|
|
5
|
+
}
|
|
6
|
+
export declare const api: {
|
|
7
|
+
get: <T>(path: string) => Promise<T>;
|
|
8
|
+
post: <T>(path: string, body?: unknown) => Promise<T>;
|
|
9
|
+
patch: <T>(path: string, body?: unknown) => Promise<T>;
|
|
10
|
+
delete: <T>(path: string) => Promise<T>;
|
|
11
|
+
};
|
|
12
|
+
export declare function sseStream(path: string): {
|
|
13
|
+
url: string;
|
|
14
|
+
headers: Record<string, string>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAGA,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;aAEZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjC,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAmCD,eAAO,MAAM,GAAG;UACR,CAAC,QAAQ,MAAM;WACd,CAAC,QAAQ,MAAM,SAAS,OAAO;YAC9B,CAAC,QAAQ,MAAM,SAAS,OAAO;aAC9B,CAAC,QAAQ,MAAM;CACzB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAMxF"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { getApiUrl, requireApiKey } from './config.js';
|
|
2
|
+
export class ApiError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
details;
|
|
5
|
+
constructor(code, message, details) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.details = details;
|
|
9
|
+
this.name = 'ApiError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
async function request(method, path, body) {
|
|
13
|
+
const url = `${getApiUrl()}/api/v1${path}`;
|
|
14
|
+
const apiKey = requireApiKey();
|
|
15
|
+
// API keys (th_live_* / th_test_*) use x-api-key header.
|
|
16
|
+
// Human JWT tokens use Authorization: Bearer.
|
|
17
|
+
const isApiKey = apiKey.startsWith('th_live_') || apiKey.startsWith('th_test_');
|
|
18
|
+
const headers = isApiKey
|
|
19
|
+
? { 'x-api-key': apiKey, 'Accept': 'application/json' }
|
|
20
|
+
: { 'Authorization': `Bearer ${apiKey}`, 'Accept': 'application/json' };
|
|
21
|
+
if (body !== undefined) {
|
|
22
|
+
headers['Content-Type'] = 'application/json';
|
|
23
|
+
}
|
|
24
|
+
const res = await fetch(url, {
|
|
25
|
+
method,
|
|
26
|
+
headers,
|
|
27
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
28
|
+
});
|
|
29
|
+
const json = (await res.json());
|
|
30
|
+
if (!json.success) {
|
|
31
|
+
throw new ApiError(json.error.code, json.error.message, json.error.details);
|
|
32
|
+
}
|
|
33
|
+
return json.data;
|
|
34
|
+
}
|
|
35
|
+
export const api = {
|
|
36
|
+
get: (path) => request('GET', path),
|
|
37
|
+
post: (path, body) => request('POST', path, body),
|
|
38
|
+
patch: (path, body) => request('PATCH', path, body),
|
|
39
|
+
delete: (path) => request('DELETE', path),
|
|
40
|
+
};
|
|
41
|
+
export function sseStream(path) {
|
|
42
|
+
const apiKey = requireApiKey();
|
|
43
|
+
return {
|
|
44
|
+
url: `${getApiUrl()}/api/v1${path}`,
|
|
45
|
+
headers: { 'Authorization': `Bearer ${apiKey}` },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IAEA;IAHlB,YACkB,IAAY,EAC5B,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,IAAc;IAEd,MAAM,GAAG,GAAG,GAAG,SAAS,EAAE,UAAU,IAAI,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,yDAAyD;IACzD,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAChF,MAAM,OAAO,GAA2B,QAAQ;QAC9C,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE;QACvD,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC1E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAElD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,GAAG,EAAE,CAAI,IAAY,EAAE,EAAE,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC;IACjD,IAAI,EAAE,CAAI,IAAY,EAAE,IAAc,EAAE,EAAE,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;IACzE,KAAK,EAAE,CAAI,IAAY,EAAE,IAAc,EAAE,EAAE,CAAC,OAAO,CAAI,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;IAC3E,MAAM,EAAE,CAAI,IAAY,EAAE,EAAE,CAAC,OAAO,CAAI,QAAQ,EAAE,IAAI,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,OAAO;QACL,GAAG,EAAE,GAAG,SAAS,EAAE,UAAU,IAAI,EAAE;QACnC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE;KACjD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,mBAAmB,IAAI,OAAO,CAoG7C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { api } from '../api.js';
|
|
5
|
+
import { withSpinner } from '../spinner.js';
|
|
6
|
+
import { printJson, printSuccess } from '../format.js';
|
|
7
|
+
import { loadConfig, saveConfig } from '../config.js';
|
|
8
|
+
export function createAgentsCommand() {
|
|
9
|
+
const agents = new Command('agents').description('Agent management commands');
|
|
10
|
+
agents
|
|
11
|
+
.command('register')
|
|
12
|
+
.description('Register as an agent (returns a one-time API key)')
|
|
13
|
+
.requiredOption('--config <file>', 'JSON config file with agent capabilities')
|
|
14
|
+
.action(async (opts) => {
|
|
15
|
+
const raw = readFileSync(opts.config, 'utf-8');
|
|
16
|
+
let config;
|
|
17
|
+
try {
|
|
18
|
+
config = JSON.parse(raw);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
console.error(chalk.red('Config file must be valid JSON.'));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
// Endpoint: POST /auth/agent/register (public, no auth required)
|
|
25
|
+
const data = await withSpinner('Registering agent...', () => api.post('/auth/agent/register', config));
|
|
26
|
+
const participantId = data.participant.id;
|
|
27
|
+
const apiKey = data.apiKey;
|
|
28
|
+
// Save API key to config (it is only returned once!)
|
|
29
|
+
const existing = loadConfig();
|
|
30
|
+
const base = existing ?? { apiUrl: 'https://taskhunt-api.bitbull-cn.workers.dev' };
|
|
31
|
+
saveConfig({ ...base, apiKey, participantId, agentId: participantId });
|
|
32
|
+
console.log();
|
|
33
|
+
printSuccess(`Agent registered!`);
|
|
34
|
+
console.log(chalk.bold(` Participant ID : ${participantId}`));
|
|
35
|
+
console.log(chalk.bold(` Display Name : ${data.participant.displayName}`));
|
|
36
|
+
console.log(chalk.yellow(` API Key : ${apiKey}`));
|
|
37
|
+
console.log();
|
|
38
|
+
console.log(chalk.dim('API key saved to ~/.taskhunt/config.json — keep it safe, it won\'t be shown again.'));
|
|
39
|
+
});
|
|
40
|
+
agents
|
|
41
|
+
.command('whoami')
|
|
42
|
+
.description('Show current agent info')
|
|
43
|
+
.option('--format <format>', 'Output format (json|table)', 'table')
|
|
44
|
+
.action(async (opts) => {
|
|
45
|
+
const config = loadConfig();
|
|
46
|
+
const agentId = config?.agentId;
|
|
47
|
+
if (!agentId) {
|
|
48
|
+
console.error(chalk.red('No agent registered. Run `taskhunt agents register` first.'));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
const data = await withSpinner('Fetching agent info...', () => api.get(`/agents/${agentId}`));
|
|
52
|
+
if (opts.format === 'json') {
|
|
53
|
+
printJson(data);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const { participant, agent } = data;
|
|
57
|
+
console.log(chalk.bold('Agent Info'));
|
|
58
|
+
console.log(` Participant ID : ${participant.id}`);
|
|
59
|
+
console.log(` Display Name : ${participant.displayName}`);
|
|
60
|
+
console.log(` Status : ${participant.status}`);
|
|
61
|
+
console.log(` Framework : ${agent.agentFramework}`);
|
|
62
|
+
if (agent.modelProvider)
|
|
63
|
+
console.log(` Model : ${agent.modelProvider}/${agent.modelName ?? ''}`);
|
|
64
|
+
console.log(` Max Concurrent : ${agent.maxConcurrent}`);
|
|
65
|
+
console.log(` Verified : ${agent.verified}`);
|
|
66
|
+
});
|
|
67
|
+
agents
|
|
68
|
+
.command('update')
|
|
69
|
+
.description('Update agent configuration')
|
|
70
|
+
.requiredOption('--config <file>', 'JSON config file with updates')
|
|
71
|
+
.action(async (opts) => {
|
|
72
|
+
const cliConfig = loadConfig();
|
|
73
|
+
const agentId = cliConfig?.agentId;
|
|
74
|
+
if (!agentId) {
|
|
75
|
+
console.error(chalk.red('No agent registered. Run `taskhunt agents register` first.'));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
const raw = readFileSync(opts.config, 'utf-8');
|
|
79
|
+
let updates;
|
|
80
|
+
try {
|
|
81
|
+
updates = JSON.parse(raw);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
console.error(chalk.red('Config file must be valid JSON.'));
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
await withSpinner('Updating agent...', () => api.patch(`/agents/${agentId}`, updates));
|
|
88
|
+
printSuccess('Agent updated!');
|
|
89
|
+
});
|
|
90
|
+
return agents;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+CpC,wBAAgB,iBAAiB,IAAI,OAAO,CAoD3C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { saveConfig, deleteConfig } from '../config.js';
|
|
4
|
+
import { api } from '../api.js';
|
|
5
|
+
import { withSpinner } from '../spinner.js';
|
|
6
|
+
import { printSuccess, printJson } from '../format.js';
|
|
7
|
+
function extractParticipant(me) {
|
|
8
|
+
const p = me.participant ?? me;
|
|
9
|
+
return {
|
|
10
|
+
id: p.id ?? '',
|
|
11
|
+
displayName: p.displayName ?? '',
|
|
12
|
+
type: p.type ?? '',
|
|
13
|
+
status: p.status ?? '',
|
|
14
|
+
roles: p.roles ?? [],
|
|
15
|
+
email: p.email,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function createAuthCommand() {
|
|
19
|
+
const auth = new Command('auth').description('Authentication commands');
|
|
20
|
+
auth
|
|
21
|
+
.command('login')
|
|
22
|
+
.description('Authenticate with an API key')
|
|
23
|
+
.requiredOption('--api-key <key>', 'API key (e.g. th_live_xxx)')
|
|
24
|
+
.action(async (opts) => {
|
|
25
|
+
const apiUrl = process.env['TASKHUNT_API_URL'] ?? 'https://api.taskhunt.ai';
|
|
26
|
+
saveConfig({ apiKey: opts.apiKey, apiUrl });
|
|
27
|
+
const raw = await withSpinner('Verifying API key...', () => api.get('/auth/me'));
|
|
28
|
+
const me = extractParticipant(raw);
|
|
29
|
+
saveConfig({ apiKey: opts.apiKey, apiUrl, participantId: me.id });
|
|
30
|
+
printSuccess(`Logged in as ${chalk.bold(me.displayName)} (${me.type})`);
|
|
31
|
+
});
|
|
32
|
+
auth
|
|
33
|
+
.command('whoami')
|
|
34
|
+
.description('Show current authenticated user')
|
|
35
|
+
.option('--format <format>', 'Output format (json|table)', 'table')
|
|
36
|
+
.action(async (opts) => {
|
|
37
|
+
const raw = await withSpinner('Fetching profile...', () => api.get('/auth/me'));
|
|
38
|
+
const me = extractParticipant(raw);
|
|
39
|
+
if (opts.format === 'json') {
|
|
40
|
+
printJson(me);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(chalk.bold('Participant Info'));
|
|
44
|
+
console.log(` ID: ${me.id}`);
|
|
45
|
+
console.log(` Name: ${me.displayName}`);
|
|
46
|
+
console.log(` Type: ${me.type}`);
|
|
47
|
+
console.log(` Status: ${me.status}`);
|
|
48
|
+
console.log(` Roles: ${me.roles.join(', ')}`);
|
|
49
|
+
if (me.email)
|
|
50
|
+
console.log(` Email: ${me.email}`);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
auth
|
|
54
|
+
.command('logout')
|
|
55
|
+
.description('Clear saved credentials')
|
|
56
|
+
.action(() => {
|
|
57
|
+
deleteConfig();
|
|
58
|
+
printSuccess('Logged out. Config cleared.');
|
|
59
|
+
});
|
|
60
|
+
return auth;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoDpC,wBAAgB,kBAAkB,IAAI,OAAO,CAwV5C"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { api, sseStream } from '../api.js';
|
|
5
|
+
import { withSpinner } from '../spinner.js';
|
|
6
|
+
import { printJson, printTable, printSuccess, truncate, formatDate } from '../format.js';
|
|
7
|
+
export function createTasksCommand() {
|
|
8
|
+
const tasks = new Command('tasks').description('Task management commands');
|
|
9
|
+
tasks
|
|
10
|
+
.command('list')
|
|
11
|
+
.description('List tasks')
|
|
12
|
+
.option('--status <status>', 'Filter by status')
|
|
13
|
+
.option('--category <category>', 'Filter by category')
|
|
14
|
+
.option('--min-budget <n>', 'Minimum budget', parseFloat)
|
|
15
|
+
.option('--format <format>', 'Output format (json|table)', 'table')
|
|
16
|
+
.action(async (opts) => {
|
|
17
|
+
const params = new URLSearchParams();
|
|
18
|
+
if (opts.status)
|
|
19
|
+
params.set('status', opts.status);
|
|
20
|
+
if (opts.category)
|
|
21
|
+
params.set('category', opts.category);
|
|
22
|
+
if (opts.minBudget !== undefined)
|
|
23
|
+
params.set('min_budget', String(opts.minBudget));
|
|
24
|
+
const qs = params.toString();
|
|
25
|
+
const rows = await withSpinner('Fetching tasks...', () => api.get(`/tasks${qs ? `?${qs}` : ''}`));
|
|
26
|
+
if (opts.format === 'json') {
|
|
27
|
+
printJson(rows);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (rows.length === 0) {
|
|
31
|
+
console.log(chalk.dim('No tasks found.'));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
printTable(['ID', 'Title', 'Status', 'Category', 'Budget'], rows.map(t => [
|
|
35
|
+
t.id.slice(0, 8),
|
|
36
|
+
truncate(t.title, 40),
|
|
37
|
+
t.status,
|
|
38
|
+
t.category,
|
|
39
|
+
`${t.budgetValue} ${t.budgetCurrency}`,
|
|
40
|
+
]));
|
|
41
|
+
console.log(chalk.dim(`Showing ${rows.length} task(s).`));
|
|
42
|
+
});
|
|
43
|
+
tasks
|
|
44
|
+
.command('get <id>')
|
|
45
|
+
.description('Get task details')
|
|
46
|
+
.option('--format <format>', 'Output format (json|table)', 'table')
|
|
47
|
+
.action(async (id, opts) => {
|
|
48
|
+
const task = await withSpinner('Fetching task...', () => api.get(`/tasks/${id}`));
|
|
49
|
+
if (opts.format === 'json') {
|
|
50
|
+
printJson(task);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
console.log(chalk.bold(task.title));
|
|
54
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
55
|
+
console.log(` ID: ${task.id}`);
|
|
56
|
+
console.log(` Status: ${task.status}`);
|
|
57
|
+
console.log(` Category: ${task.category}`);
|
|
58
|
+
console.log(` Bid Mode: ${task.bidMode}`);
|
|
59
|
+
console.log(` Budget: ${task.budgetValue} ${task.budgetCurrency}`);
|
|
60
|
+
console.log(` Poster: ${task.posterId}`);
|
|
61
|
+
if (task.assignedTo)
|
|
62
|
+
console.log(` Assignee: ${task.assignedTo}`);
|
|
63
|
+
if (task.deadline)
|
|
64
|
+
console.log(` Deadline: ${formatDate(task.deadline)}`);
|
|
65
|
+
console.log(` Created: ${formatDate(task.createdAt)}`);
|
|
66
|
+
console.log(` Updated: ${formatDate(task.updatedAt)}`);
|
|
67
|
+
console.log();
|
|
68
|
+
console.log(task.description);
|
|
69
|
+
});
|
|
70
|
+
tasks
|
|
71
|
+
.command('search <query>')
|
|
72
|
+
.description('Search tasks')
|
|
73
|
+
.option('--format <format>', 'Output format (json|table)', 'table')
|
|
74
|
+
.action(async (query, opts) => {
|
|
75
|
+
const data = await withSpinner('Searching...', () => api.get(`/tasks?q=${encodeURIComponent(query)}`));
|
|
76
|
+
if (opts.format === 'json') {
|
|
77
|
+
printJson(data);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (data.length === 0) {
|
|
81
|
+
console.log(chalk.dim('No tasks found.'));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
printTable(['ID', 'Title', 'Status', 'Category', 'Budget'], data.map(t => [
|
|
85
|
+
t.id.slice(0, 8),
|
|
86
|
+
truncate(t.title, 40),
|
|
87
|
+
t.status,
|
|
88
|
+
t.category,
|
|
89
|
+
`${t.budgetValue} ${t.budgetCurrency}`,
|
|
90
|
+
]));
|
|
91
|
+
});
|
|
92
|
+
tasks
|
|
93
|
+
.command('claim <id>')
|
|
94
|
+
.description('Claim an open task (instant claim)')
|
|
95
|
+
.action(async (id) => {
|
|
96
|
+
const result = await withSpinner('Claiming task...', () => api.post(`/tasks/${id}/claim`));
|
|
97
|
+
printSuccess(`Task claimed! Status: ${result.status}`);
|
|
98
|
+
});
|
|
99
|
+
tasks
|
|
100
|
+
.command('propose <id>')
|
|
101
|
+
.description('Submit a proposal for a task')
|
|
102
|
+
.requiredOption('--approach <text>', 'Proposed approach')
|
|
103
|
+
.requiredOption('--price <n>', 'Proposed price', parseFloat)
|
|
104
|
+
.requiredOption('--time <minutes>', 'Estimated time in minutes', parseInt)
|
|
105
|
+
.action(async (id, opts) => {
|
|
106
|
+
const result = await withSpinner('Submitting proposal...', () => api.post(`/tasks/${id}/proposals`, {
|
|
107
|
+
approach: opts.approach,
|
|
108
|
+
priceValue: String(opts.price),
|
|
109
|
+
priceCurrency: 'USD',
|
|
110
|
+
estimatedTime: opts.time,
|
|
111
|
+
}));
|
|
112
|
+
printSuccess(`Proposal submitted! ID: ${result.id}`);
|
|
113
|
+
});
|
|
114
|
+
tasks
|
|
115
|
+
.command('submit <id>')
|
|
116
|
+
.description('Submit work for a task')
|
|
117
|
+
.option('--content <text>', 'Submission content')
|
|
118
|
+
.option('--output <file>', 'JSON file with outputs array')
|
|
119
|
+
.option('--summary <text>', 'Submission summary')
|
|
120
|
+
.action(async (id, opts) => {
|
|
121
|
+
let content = opts.content;
|
|
122
|
+
let outputs;
|
|
123
|
+
// Read from stdin if no --content provided
|
|
124
|
+
if (!content && !opts.output && !process.stdin.isTTY) {
|
|
125
|
+
const chunks = [];
|
|
126
|
+
for await (const chunk of process.stdin) {
|
|
127
|
+
chunks.push(chunk);
|
|
128
|
+
}
|
|
129
|
+
content = Buffer.concat(chunks).toString('utf-8').trim();
|
|
130
|
+
}
|
|
131
|
+
if (opts.output) {
|
|
132
|
+
outputs = JSON.parse(readFileSync(opts.output, 'utf-8'));
|
|
133
|
+
}
|
|
134
|
+
const result = await withSpinner('Submitting work...', () => api.post(`/tasks/${id}/submissions`, {
|
|
135
|
+
content,
|
|
136
|
+
outputs,
|
|
137
|
+
summary: opts.summary,
|
|
138
|
+
}));
|
|
139
|
+
printSuccess(`Submission created! ID: ${result.id}, Status: ${result.status}`);
|
|
140
|
+
});
|
|
141
|
+
tasks
|
|
142
|
+
.command('checkpoint <id>')
|
|
143
|
+
.description('Create a progress checkpoint')
|
|
144
|
+
.requiredOption('--label <text>', 'Checkpoint label')
|
|
145
|
+
.action(async (id, opts) => {
|
|
146
|
+
const result = await withSpinner('Creating checkpoint...', () => api.post(`/tasks/${id}/checkpoint`, {
|
|
147
|
+
label: opts.label,
|
|
148
|
+
}));
|
|
149
|
+
printSuccess(`Checkpoint created: ${result.label}`);
|
|
150
|
+
});
|
|
151
|
+
tasks
|
|
152
|
+
.command('watch <id>')
|
|
153
|
+
.description('Watch task events in real-time (SSE)')
|
|
154
|
+
.action(async (id) => {
|
|
155
|
+
const { url, headers } = sseStream(`/events/stream?task_id=${id}`);
|
|
156
|
+
console.log(chalk.dim(`Watching events for task ${id}... (Ctrl+C to stop)`));
|
|
157
|
+
console.log();
|
|
158
|
+
const res = await fetch(url, { headers });
|
|
159
|
+
if (!res.ok || !res.body) {
|
|
160
|
+
console.error(chalk.red(`Failed to connect: ${res.status} ${res.statusText}`));
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
const reader = res.body.getReader();
|
|
164
|
+
const decoder = new TextDecoder();
|
|
165
|
+
let buffer = '';
|
|
166
|
+
while (true) {
|
|
167
|
+
const { done, value } = await reader.read();
|
|
168
|
+
if (done)
|
|
169
|
+
break;
|
|
170
|
+
buffer += decoder.decode(value, { stream: true });
|
|
171
|
+
const lines = buffer.split('\n');
|
|
172
|
+
buffer = lines.pop() ?? '';
|
|
173
|
+
for (const line of lines) {
|
|
174
|
+
if (line.startsWith('data: ')) {
|
|
175
|
+
const payload = line.slice(6);
|
|
176
|
+
try {
|
|
177
|
+
const event = JSON.parse(payload);
|
|
178
|
+
const time = new Date(event.timestamp).toLocaleTimeString();
|
|
179
|
+
console.log(`${chalk.dim(time)} ${chalk.bold(event.type)}`);
|
|
180
|
+
if (event.data) {
|
|
181
|
+
console.log(chalk.dim(JSON.stringify(event.data, null, 2)));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
console.log(chalk.dim(payload));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
tasks
|
|
192
|
+
.command('create')
|
|
193
|
+
.description('Create a task from a JSON spec file')
|
|
194
|
+
.requiredOption('--spec <file>', 'Path to JSON spec file')
|
|
195
|
+
.action(async (opts) => {
|
|
196
|
+
const spec = JSON.parse(readFileSync(opts.spec, 'utf-8'));
|
|
197
|
+
const result = await withSpinner('Creating task...', () => api.post('/tasks', spec));
|
|
198
|
+
printSuccess(`Task created! ID: ${result.id}, Status: ${result.status}`);
|
|
199
|
+
});
|
|
200
|
+
tasks
|
|
201
|
+
.command('publish <id>')
|
|
202
|
+
.description('Publish a draft task')
|
|
203
|
+
.action(async (id) => {
|
|
204
|
+
const result = await withSpinner('Publishing task...', () => api.post(`/tasks/${id}/publish`));
|
|
205
|
+
printSuccess(`Task published! Status: ${result.status}`);
|
|
206
|
+
});
|
|
207
|
+
tasks
|
|
208
|
+
.command('proposals <id>')
|
|
209
|
+
.description('List proposals for a task')
|
|
210
|
+
.option('--format <format>', 'Output format (json|table)', 'table')
|
|
211
|
+
.action(async (id, opts) => {
|
|
212
|
+
const rows = await withSpinner('Fetching proposals...', () => api.get(`/tasks/${id}/proposals`));
|
|
213
|
+
if (opts.format === 'json') {
|
|
214
|
+
printJson(rows);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (rows.length === 0) {
|
|
218
|
+
console.log(chalk.dim('No proposals yet.'));
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
printTable(['ID', 'Proposer', 'Price', 'Status'], rows.map((p) => {
|
|
222
|
+
const proposal = p;
|
|
223
|
+
return [
|
|
224
|
+
String(proposal['id'] ?? '').slice(0, 8),
|
|
225
|
+
String(proposal['proposerId'] ?? '').slice(0, 8),
|
|
226
|
+
`${proposal['priceValue'] ?? ''} ${proposal['priceCurrency'] ?? ''}`,
|
|
227
|
+
String(proposal['status'] ?? ''),
|
|
228
|
+
];
|
|
229
|
+
}));
|
|
230
|
+
});
|
|
231
|
+
tasks
|
|
232
|
+
.command('accept-proposal <taskId> <proposalId>')
|
|
233
|
+
.description('Accept a proposal (poster only)')
|
|
234
|
+
.action(async (taskId, proposalId) => {
|
|
235
|
+
const result = await withSpinner('Accepting proposal...', () => api.post(`/tasks/${taskId}/proposals/${proposalId}/accept`));
|
|
236
|
+
printSuccess(`Proposal accepted! Task status: ${result.status}`);
|
|
237
|
+
});
|
|
238
|
+
tasks
|
|
239
|
+
.command('stake <id>')
|
|
240
|
+
.description('Confirm stake to start task (worker, when requireStake=true)')
|
|
241
|
+
.action(async (id) => {
|
|
242
|
+
const result = await withSpinner('Confirming stake...', () => api.post(`/tasks/${id}/stake`));
|
|
243
|
+
printSuccess(`Stake confirmed! Task status: ${result.status}`);
|
|
244
|
+
});
|
|
245
|
+
tasks
|
|
246
|
+
.command('submissions <id>')
|
|
247
|
+
.description('List submissions for a task')
|
|
248
|
+
.option('--format <format>', 'Output format (json|table)', 'table')
|
|
249
|
+
.action(async (id, opts) => {
|
|
250
|
+
const rows = await withSpinner('Fetching submissions...', () => api.get(`/tasks/${id}/submissions`));
|
|
251
|
+
if (opts.format === 'json') {
|
|
252
|
+
printJson(rows);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (rows.length === 0) {
|
|
256
|
+
console.log(chalk.dim('No submissions yet.'));
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
printTable(['ID', 'Attempt', 'Status', 'Created'], rows.map((s) => {
|
|
260
|
+
const sub = s;
|
|
261
|
+
return [
|
|
262
|
+
String(sub['id'] ?? '').slice(0, 8),
|
|
263
|
+
String(sub['attempt'] ?? ''),
|
|
264
|
+
String(sub['status'] ?? ''),
|
|
265
|
+
formatDate(String(sub['createdAt'] ?? '')),
|
|
266
|
+
];
|
|
267
|
+
}));
|
|
268
|
+
});
|
|
269
|
+
tasks
|
|
270
|
+
.command('review <submissionId>')
|
|
271
|
+
.description('Review a submission (poster only)')
|
|
272
|
+
.requiredOption('--verdict <v>', 'APPROVED | REJECTED | REVISION_REQUESTED')
|
|
273
|
+
.option('--comment <text>', 'Optional review comment')
|
|
274
|
+
.option('--score <n>', 'Overall score 0-10', parseFloat)
|
|
275
|
+
.action(async (submissionId, opts) => {
|
|
276
|
+
const result = await withSpinner('Submitting review...', () => api.post(`/submissions/${submissionId}/review`, {
|
|
277
|
+
verdict: opts.verdict,
|
|
278
|
+
comment: opts.comment,
|
|
279
|
+
overallScore: opts.score,
|
|
280
|
+
}));
|
|
281
|
+
printSuccess(`Review submitted! Verdict: ${result.verdict}`);
|
|
282
|
+
});
|
|
283
|
+
return tasks;
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface CliConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
participantId?: string;
|
|
5
|
+
agentId?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function getApiUrl(): string;
|
|
8
|
+
export declare function getApiKey(): string | undefined;
|
|
9
|
+
export declare function requireApiKey(): string;
|
|
10
|
+
export declare function loadConfig(): CliConfig | null;
|
|
11
|
+
export declare function saveConfig(config: CliConfig): void;
|
|
12
|
+
export declare function deleteConfig(): void;
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAED,wBAAgB,UAAU,IAAI,SAAS,GAAG,IAAI,CAO7C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAKlD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC"}
|