agora-skill 1.0.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 +4 -0
- package/.turbo/turbo-test.log +18 -0
- package/dist/auth/credentials.d.ts +22 -0
- package/dist/auth/credentials.d.ts.map +1 -0
- package/dist/auth/credentials.js +65 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/bin/agora-skill.d.ts +3 -0
- package/dist/bin/agora-skill.d.ts.map +1 -0
- package/dist/bin/agora-skill.js +22 -0
- package/dist/bin/agora-skill.js.map +1 -0
- package/dist/client.d.ts +73 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +143 -0
- package/dist/client.js.map +1 -0
- package/dist/installer.d.ts +6 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +127 -0
- package/dist/installer.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +50 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/bid.d.ts +26 -0
- package/dist/tools/bid.d.ts.map +1 -0
- package/dist/tools/bid.js +22 -0
- package/dist/tools/bid.js.map +1 -0
- package/dist/tools/deliver.d.ts +26 -0
- package/dist/tools/deliver.d.ts.map +1 -0
- package/dist/tools/deliver.js +22 -0
- package/dist/tools/deliver.js.map +1 -0
- package/dist/tools/publish.d.ts +35 -0
- package/dist/tools/publish.d.ts.map +1 -0
- package/dist/tools/publish.js +28 -0
- package/dist/tools/publish.js.map +1 -0
- package/dist/tools/search.d.ts +31 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +25 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/status.d.ts +21 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +18 -0
- package/dist/tools/status.js.map +1 -0
- package/package.json +26 -0
- package/src/auth/credentials.ts +83 -0
- package/src/bin/agora-skill.ts +26 -0
- package/src/client.ts +186 -0
- package/src/installer.ts +154 -0
- package/src/server.ts +85 -0
- package/src/tools/bid.ts +26 -0
- package/src/tools/deliver.ts +26 -0
- package/src/tools/publish.ts +32 -0
- package/src/tools/search.ts +29 -0
- package/src/tools/status.ts +22 -0
- package/test/client.test.ts +174 -0
- package/test/credentials.test.ts +155 -0
- package/test/installer.test.ts +99 -0
- package/test/smoke.test.ts +64 -0
- package/test/tools.test.ts +223 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
> agora-skill@1.0.0 test /Users/dorayo/Codes/agora/packages/skill
|
|
3
|
+
> vitest run
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
RUN v3.2.4 /Users/dorayo/Codes/agora/packages/skill
|
|
7
|
+
|
|
8
|
+
✓ test/installer.test.ts (4 tests) 5ms
|
|
9
|
+
✓ test/credentials.test.ts (14 tests) 5ms
|
|
10
|
+
✓ test/client.test.ts (6 tests) 6ms
|
|
11
|
+
✓ test/tools.test.ts (21 tests) 6ms
|
|
12
|
+
✓ test/smoke.test.ts (7 tests) 305ms
|
|
13
|
+
|
|
14
|
+
Test Files 5 passed (5)
|
|
15
|
+
Tests 52 passed (52)
|
|
16
|
+
Start at 22:37:14
|
|
17
|
+
Duration 556ms (transform 154ms, setup 0ms, collect 239ms, tests 327ms, environment 0ms, prepare 325ms)
|
|
18
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface AgentCredentials {
|
|
2
|
+
agent_id: string;
|
|
3
|
+
agent_name: string;
|
|
4
|
+
api_key: string;
|
|
5
|
+
api_key_live: string | null;
|
|
6
|
+
api_endpoint: string;
|
|
7
|
+
wallet_address: string;
|
|
8
|
+
environment: 'sandbox' | 'production';
|
|
9
|
+
created_at: string;
|
|
10
|
+
key_rotated_at: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function getAgoraDir(): string;
|
|
13
|
+
export declare function ensureAgoraDirs(): void;
|
|
14
|
+
export declare function loadCredentials(agentName?: string): AgentCredentials | null;
|
|
15
|
+
export declare function saveCredentials(creds: AgentCredentials, agentName?: string): void;
|
|
16
|
+
export declare function generateApiKey(environment: 'sandbox' | 'production'): string;
|
|
17
|
+
export declare function maskApiKey(key: string): string;
|
|
18
|
+
export declare function getActiveEnvironment(creds: AgentCredentials): 'sandbox' | 'production';
|
|
19
|
+
export declare function getActiveApiKey(creds: AgentCredentials): string;
|
|
20
|
+
export declare function getApiEndpoint(creds: AgentCredentials): string;
|
|
21
|
+
export declare function listAgents(): string[];
|
|
22
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAA;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAOD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAED,wBAAgB,eAAe,CAAC,SAAS,SAAY,GAAG,gBAAgB,GAAG,IAAI,CAS9E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,SAAY,GAAG,IAAI,CAIpF;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,CAG5E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAAG,YAAY,CAEtF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAK/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAE9D;AAED,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAMrC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { randomBytes } from 'node:crypto';
|
|
5
|
+
const AGORA_DIR = join(homedir(), '.agora');
|
|
6
|
+
const CREDENTIALS_DIR = join(AGORA_DIR, 'credentials');
|
|
7
|
+
const WALLETS_DIR = join(AGORA_DIR, 'wallets');
|
|
8
|
+
const DEFAULT_ENDPOINT = 'https://api.agora.youlidao.ai';
|
|
9
|
+
export function getAgoraDir() {
|
|
10
|
+
return AGORA_DIR;
|
|
11
|
+
}
|
|
12
|
+
export function ensureAgoraDirs() {
|
|
13
|
+
for (const dir of [AGORA_DIR, CREDENTIALS_DIR, WALLETS_DIR]) {
|
|
14
|
+
if (!existsSync(dir)) {
|
|
15
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function loadCredentials(agentName = 'default') {
|
|
20
|
+
const credPath = join(CREDENTIALS_DIR, `${agentName}.json`);
|
|
21
|
+
if (!existsSync(credPath))
|
|
22
|
+
return null;
|
|
23
|
+
try {
|
|
24
|
+
const raw = readFileSync(credPath, 'utf-8');
|
|
25
|
+
return JSON.parse(raw);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function saveCredentials(creds, agentName = 'default') {
|
|
32
|
+
ensureAgoraDirs();
|
|
33
|
+
const credPath = join(CREDENTIALS_DIR, `${agentName}.json`);
|
|
34
|
+
writeFileSync(credPath, JSON.stringify(creds, null, 2), { mode: 0o600 });
|
|
35
|
+
}
|
|
36
|
+
export function generateApiKey(environment) {
|
|
37
|
+
const prefix = environment === 'sandbox' ? 'agora_sk_test_' : 'agora_sk_live_';
|
|
38
|
+
return prefix + randomBytes(24).toString('hex');
|
|
39
|
+
}
|
|
40
|
+
export function maskApiKey(key) {
|
|
41
|
+
if (key.length <= 20)
|
|
42
|
+
return key.slice(0, 10) + '****';
|
|
43
|
+
return key.slice(0, -8) + '****' + key.slice(-4);
|
|
44
|
+
}
|
|
45
|
+
export function getActiveEnvironment(creds) {
|
|
46
|
+
return creds.environment;
|
|
47
|
+
}
|
|
48
|
+
export function getActiveApiKey(creds) {
|
|
49
|
+
if (creds.environment === 'production' && creds.api_key_live) {
|
|
50
|
+
return creds.api_key_live;
|
|
51
|
+
}
|
|
52
|
+
return creds.api_key;
|
|
53
|
+
}
|
|
54
|
+
export function getApiEndpoint(creds) {
|
|
55
|
+
return creds.api_endpoint || DEFAULT_ENDPOINT;
|
|
56
|
+
}
|
|
57
|
+
export function listAgents() {
|
|
58
|
+
if (!existsSync(CREDENTIALS_DIR))
|
|
59
|
+
return [];
|
|
60
|
+
const { readdirSync } = require('node:fs');
|
|
61
|
+
return readdirSync(CREDENTIALS_DIR)
|
|
62
|
+
.filter((f) => f.endsWith('.json'))
|
|
63
|
+
.map((f) => f.replace('.json', ''));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAczC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAA;AAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;AACtD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAC9C,MAAM,gBAAgB,GAAG,+BAA+B,CAAA;AAExD,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAS,GAAG,SAAS;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;IAC3D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAA;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAuB,EAAE,SAAS,GAAG,SAAS;IAC5E,eAAe,EAAE,CAAA;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;IAC3D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAqC;IAClE,MAAM,MAAM,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAA;IAC9E,OAAO,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAA;IACtD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,OAAO,KAAK,CAAC,WAAW,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAuB;IACrD,IAAI,KAAK,CAAC,WAAW,KAAK,YAAY,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC,YAAY,CAAA;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,OAAO,KAAK,CAAC,YAAY,IAAI,gBAAgB,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,EAAE,CAAA;IAC3C,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;IACtE,OAAO,WAAW,CAAC,eAAe,CAAC;SAChC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agora-skill.d.ts","sourceRoot":"","sources":["../../src/bin/agora-skill.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { install } from '../installer.js';
|
|
4
|
+
const program = new Command()
|
|
5
|
+
.name('agora-skill')
|
|
6
|
+
.description('Agora marketplace skill — install once, your agent can publish, bid, and settle tasks')
|
|
7
|
+
.version('1.0.0');
|
|
8
|
+
program
|
|
9
|
+
.command('install')
|
|
10
|
+
.description('Install the Agora skill for your agent')
|
|
11
|
+
.option('--endpoint <url>', 'API endpoint override')
|
|
12
|
+
.action(async (opts) => {
|
|
13
|
+
await install({ endpoint: opts.endpoint });
|
|
14
|
+
});
|
|
15
|
+
program
|
|
16
|
+
.command('serve')
|
|
17
|
+
.description('Start the Agora MCP server (used by agent platforms)')
|
|
18
|
+
.action(async () => {
|
|
19
|
+
await import('../server.js');
|
|
20
|
+
});
|
|
21
|
+
program.parse();
|
|
22
|
+
//# sourceMappingURL=agora-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agora-skill.js","sourceRoot":"","sources":["../../src/bin/agora-skill.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,uFAAuF,CAAC;KACpG,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,IAA2B,EAAE,EAAE;IAC5C,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC5C,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;AAC9B,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type AgentCredentials } from './auth/credentials.js';
|
|
2
|
+
export declare class AgoraClient {
|
|
3
|
+
private readonly endpoint;
|
|
4
|
+
private readonly apiKey;
|
|
5
|
+
constructor(creds: AgentCredentials);
|
|
6
|
+
private request;
|
|
7
|
+
static register(endpoint: string, params: {
|
|
8
|
+
name: string;
|
|
9
|
+
capabilities: string[];
|
|
10
|
+
walletAddress: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
agent: {
|
|
14
|
+
id: string;
|
|
15
|
+
apiKey: string;
|
|
16
|
+
name: string;
|
|
17
|
+
};
|
|
18
|
+
protocol: Record<string, unknown>;
|
|
19
|
+
}>;
|
|
20
|
+
publishTask(params: {
|
|
21
|
+
title: string;
|
|
22
|
+
description: string;
|
|
23
|
+
skill: string;
|
|
24
|
+
budget: number;
|
|
25
|
+
deadline: string;
|
|
26
|
+
executorRequirement?: string;
|
|
27
|
+
acceptanceCriteria?: string;
|
|
28
|
+
executionEnvironment?: string;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
id: string;
|
|
31
|
+
status: string;
|
|
32
|
+
}>;
|
|
33
|
+
searchTasks(params: {
|
|
34
|
+
skills?: string;
|
|
35
|
+
budgetMin?: number;
|
|
36
|
+
budgetMax?: number;
|
|
37
|
+
executorRequirement?: string;
|
|
38
|
+
keyword?: string;
|
|
39
|
+
limit?: number;
|
|
40
|
+
}): Promise<{
|
|
41
|
+
tasks: Array<Record<string, unknown>>;
|
|
42
|
+
total: number;
|
|
43
|
+
}>;
|
|
44
|
+
submitBid(params: {
|
|
45
|
+
taskId: string;
|
|
46
|
+
price: number;
|
|
47
|
+
estimatedHours: number;
|
|
48
|
+
message?: string;
|
|
49
|
+
}): Promise<{
|
|
50
|
+
id: string;
|
|
51
|
+
status: string;
|
|
52
|
+
}>;
|
|
53
|
+
deliver(params: {
|
|
54
|
+
taskId: string;
|
|
55
|
+
content?: string;
|
|
56
|
+
fileReferences?: string[];
|
|
57
|
+
notes?: string;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
id: string;
|
|
60
|
+
status: string;
|
|
61
|
+
revision: number;
|
|
62
|
+
}>;
|
|
63
|
+
getTaskStatus(taskId: string): Promise<Record<string, unknown>>;
|
|
64
|
+
listTasks(params?: {
|
|
65
|
+
status?: string;
|
|
66
|
+
page?: number;
|
|
67
|
+
pageSize?: number;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
tasks: Array<Record<string, unknown>>;
|
|
70
|
+
total: number;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAmC,MAAM,uBAAuB,CAAA;AAE9F,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAEnB,KAAK,EAAE,gBAAgB;YAKrB,OAAO;WA0BR,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QAC9C,IAAI,EAAE,MAAM,CAAA;QACZ,YAAY,EAAE,MAAM,EAAE,CAAA;QACtB,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IA0BjG,WAAW,CAAC,MAAM,EAAE;QACxB,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,mBAAmB,CAAC,EAAE,MAAM,CAAA;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAC9B,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAmBrC,WAAW,CAAC,MAAM,EAAE;QACxB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,mBAAmB,CAAC,EAAE,MAAM,CAAA;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAY/D,SAAS,CAAC,MAAM,EAAE;QACtB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,cAAc,EAAE,MAAM,CAAA;QACtB,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAQrC,OAAO,CAAC,MAAM,EAAE;QACpB,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;QACzB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAQvD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI/D,SAAS,CAAC,MAAM,CAAC,EAAE;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAOtE"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { getActiveApiKey, getApiEndpoint } from './auth/credentials.js';
|
|
3
|
+
export class AgoraClient {
|
|
4
|
+
endpoint;
|
|
5
|
+
apiKey;
|
|
6
|
+
constructor(creds) {
|
|
7
|
+
this.endpoint = getApiEndpoint(creds);
|
|
8
|
+
this.apiKey = getActiveApiKey(creds);
|
|
9
|
+
}
|
|
10
|
+
async request(method, path, body) {
|
|
11
|
+
const url = `${this.endpoint}${path}`;
|
|
12
|
+
const headers = {
|
|
13
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
'X-Request-Id': randomUUID(),
|
|
16
|
+
'X-Timestamp': new Date().toISOString(),
|
|
17
|
+
'X-Protocol-Version': '1.0.0',
|
|
18
|
+
};
|
|
19
|
+
const res = await fetch(url, {
|
|
20
|
+
method,
|
|
21
|
+
headers,
|
|
22
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
23
|
+
});
|
|
24
|
+
if (!res.ok) {
|
|
25
|
+
const errBody = await res.text();
|
|
26
|
+
throw new Error(`Agora API error ${res.status}: ${errBody}`);
|
|
27
|
+
}
|
|
28
|
+
return res.json();
|
|
29
|
+
}
|
|
30
|
+
// --- Registration (unauthenticated) ---
|
|
31
|
+
static async register(endpoint, params) {
|
|
32
|
+
const url = `${endpoint}/v1/agents`;
|
|
33
|
+
const res = await fetch(url, {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
headers: {
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
'X-Request-Id': randomUUID(),
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify({
|
|
40
|
+
name: params.name,
|
|
41
|
+
capabilities: params.capabilities,
|
|
42
|
+
walletAddress: params.walletAddress,
|
|
43
|
+
description: params.description || `Agent ${params.name} on Agora`,
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
if (!res.ok) {
|
|
47
|
+
const errBody = await res.text();
|
|
48
|
+
throw new Error(`Registration failed (${res.status}): ${errBody}`);
|
|
49
|
+
}
|
|
50
|
+
return res.json();
|
|
51
|
+
}
|
|
52
|
+
// --- Tasks ---
|
|
53
|
+
async publishTask(params) {
|
|
54
|
+
// Convert deadline shorthand (e.g., "2h", "30m") to ISO 8601
|
|
55
|
+
const deadlineDate = resolveDeadline(params.deadline);
|
|
56
|
+
return this.request('POST', '/v1/tasks', {
|
|
57
|
+
title: params.title,
|
|
58
|
+
description: params.description,
|
|
59
|
+
requiredSkills: [params.skill],
|
|
60
|
+
budget: params.budget,
|
|
61
|
+
deadline: deadlineDate,
|
|
62
|
+
initiatorRole: 'AA',
|
|
63
|
+
executorRequirement: mapExecutorType(params.executorRequirement || 'agent'),
|
|
64
|
+
executionEnvironment: params.executionEnvironment || 'DIG',
|
|
65
|
+
taskComplexity: 'ATM',
|
|
66
|
+
acceptanceCriteria: params.acceptanceCriteria || `Complete the task as described: ${params.title}`,
|
|
67
|
+
paymentMethod: 'x402',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async searchTasks(params) {
|
|
71
|
+
const query = new URLSearchParams();
|
|
72
|
+
if (params.skills)
|
|
73
|
+
query.set('skills', params.skills);
|
|
74
|
+
if (params.budgetMin)
|
|
75
|
+
query.set('budgetMin', String(params.budgetMin));
|
|
76
|
+
if (params.budgetMax)
|
|
77
|
+
query.set('budgetMax', String(params.budgetMax));
|
|
78
|
+
if (params.executorRequirement)
|
|
79
|
+
query.set('executorRequirement', params.executorRequirement);
|
|
80
|
+
if (params.keyword)
|
|
81
|
+
query.set('keyword', params.keyword);
|
|
82
|
+
if (params.limit)
|
|
83
|
+
query.set('pageSize', String(params.limit));
|
|
84
|
+
return this.request('GET', `/v1/tasks/search?${query.toString()}`);
|
|
85
|
+
}
|
|
86
|
+
async submitBid(params) {
|
|
87
|
+
return this.request('POST', `/v1/tasks/${params.taskId}/bids`, {
|
|
88
|
+
price: params.price,
|
|
89
|
+
estimatedHours: params.estimatedHours,
|
|
90
|
+
message: params.message,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async deliver(params) {
|
|
94
|
+
return this.request('POST', `/v1/tasks/${params.taskId}/deliverables`, {
|
|
95
|
+
content: params.content,
|
|
96
|
+
fileReferences: params.fileReferences,
|
|
97
|
+
notes: params.notes,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async getTaskStatus(taskId) {
|
|
101
|
+
return this.request('GET', `/v1/tasks/${taskId}`);
|
|
102
|
+
}
|
|
103
|
+
async listTasks(params) {
|
|
104
|
+
const query = new URLSearchParams();
|
|
105
|
+
if (params?.status)
|
|
106
|
+
query.set('status', params.status);
|
|
107
|
+
if (params?.page)
|
|
108
|
+
query.set('page', String(params.page));
|
|
109
|
+
if (params?.pageSize)
|
|
110
|
+
query.set('pageSize', String(params.pageSize));
|
|
111
|
+
return this.request('GET', `/v1/tasks?${query.toString()}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function mapExecutorType(friendly) {
|
|
115
|
+
const map = {
|
|
116
|
+
'agent': 'MX',
|
|
117
|
+
'human': 'HR',
|
|
118
|
+
'hybrid': 'FL',
|
|
119
|
+
// Also accept raw enum values
|
|
120
|
+
'MX': 'MX',
|
|
121
|
+
'HR': 'HR',
|
|
122
|
+
'FL': 'FL',
|
|
123
|
+
};
|
|
124
|
+
return map[friendly] || 'FL';
|
|
125
|
+
}
|
|
126
|
+
function resolveDeadline(shorthand) {
|
|
127
|
+
const now = new Date();
|
|
128
|
+
const match = shorthand.match(/^(\d+)(m|h|d)$/);
|
|
129
|
+
if (match) {
|
|
130
|
+
const [, num, unit] = match;
|
|
131
|
+
const value = parseInt(num, 10);
|
|
132
|
+
if (unit === 'm')
|
|
133
|
+
now.setMinutes(now.getMinutes() + value);
|
|
134
|
+
else if (unit === 'h')
|
|
135
|
+
now.setHours(now.getHours() + value);
|
|
136
|
+
else if (unit === 'd')
|
|
137
|
+
now.setDate(now.getDate() + value);
|
|
138
|
+
return now.toISOString();
|
|
139
|
+
}
|
|
140
|
+
// Assume ISO 8601 already
|
|
141
|
+
return shorthand;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAeA,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiHpE"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { randomBytes } from 'node:crypto';
|
|
4
|
+
import { input } from '@inquirer/prompts';
|
|
5
|
+
import { ensureAgoraDirs, saveCredentials, loadCredentials, maskApiKey, } from './auth/credentials.js';
|
|
6
|
+
import { AgoraClient } from './client.js';
|
|
7
|
+
const DEFAULT_ENDPOINT = 'https://api.agora.youlidao.ai';
|
|
8
|
+
export async function install(options) {
|
|
9
|
+
const endpoint = options.endpoint || DEFAULT_ENDPOINT;
|
|
10
|
+
console.log('');
|
|
11
|
+
console.log(' ╭──────────────────────────────────╮');
|
|
12
|
+
console.log(' │ Agora Skill Installer v1.0 │');
|
|
13
|
+
console.log(' ╰──────────────────────────────────╯');
|
|
14
|
+
console.log('');
|
|
15
|
+
ensureAgoraDirs();
|
|
16
|
+
// Check if already registered
|
|
17
|
+
const existing = loadCredentials('default');
|
|
18
|
+
if (existing) {
|
|
19
|
+
console.log(` Found existing agent: ${existing.agent_name} (${existing.agent_id})`);
|
|
20
|
+
console.log(` Environment: ${existing.environment}`);
|
|
21
|
+
console.log(` Key: ${maskApiKey(existing.api_key)}`);
|
|
22
|
+
console.log('');
|
|
23
|
+
injectMcpConfig(join(process.cwd(), '.mcp.json'));
|
|
24
|
+
console.log(' ✓ MCP config injected into .mcp.json');
|
|
25
|
+
console.log(' ✓ Your agent already has the Agora skill.');
|
|
26
|
+
console.log('');
|
|
27
|
+
console.log(' Tools: agora_publish, agora_search, agora_bid,');
|
|
28
|
+
console.log(' agora_deliver, agora_status');
|
|
29
|
+
console.log('');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// First time — register a new agent
|
|
33
|
+
console.log(' First time setup. Let\'s register your agent on Agora.');
|
|
34
|
+
console.log('');
|
|
35
|
+
const name = await input({
|
|
36
|
+
message: 'What should your agent be called on Agora?',
|
|
37
|
+
validate: (v) => {
|
|
38
|
+
if (!v.trim())
|
|
39
|
+
return 'Name is required';
|
|
40
|
+
if (v.length < 3)
|
|
41
|
+
return 'Name must be at least 3 characters';
|
|
42
|
+
if (v.length > 50)
|
|
43
|
+
return 'Name must be at most 50 characters';
|
|
44
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(v))
|
|
45
|
+
return 'Must start with letter/number, only letters, numbers, hyphens, underscores';
|
|
46
|
+
return true;
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
// Generate a wallet address for the agent
|
|
50
|
+
const walletAddress = '0x' + randomBytes(20).toString('hex');
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log(` Registering "${name}" on Agora...`);
|
|
53
|
+
try {
|
|
54
|
+
// Call the real API
|
|
55
|
+
const result = await AgoraClient.register(endpoint, {
|
|
56
|
+
name,
|
|
57
|
+
capabilities: ['general'],
|
|
58
|
+
walletAddress,
|
|
59
|
+
description: `Agent ${name} registered via Agora Skill installer`,
|
|
60
|
+
});
|
|
61
|
+
const creds = {
|
|
62
|
+
agent_id: result.agent.id,
|
|
63
|
+
agent_name: result.agent.name,
|
|
64
|
+
api_key: result.agent.apiKey,
|
|
65
|
+
api_key_live: null,
|
|
66
|
+
api_endpoint: endpoint,
|
|
67
|
+
wallet_address: walletAddress,
|
|
68
|
+
environment: 'sandbox',
|
|
69
|
+
created_at: new Date().toISOString(),
|
|
70
|
+
key_rotated_at: null,
|
|
71
|
+
};
|
|
72
|
+
saveCredentials(creds, 'default');
|
|
73
|
+
console.log('');
|
|
74
|
+
console.log(` ✓ Agent registered: ${name} (${result.agent.id})`);
|
|
75
|
+
console.log(` ✓ API key saved to ~/.agora/credentials/default.json`);
|
|
76
|
+
console.log(` ✓ Wallet: ${walletAddress}`);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
// If API is unreachable, fall back to local registration
|
|
80
|
+
console.log('');
|
|
81
|
+
console.log(` ⚠ API unreachable (${endpoint}). Creating local credentials.`);
|
|
82
|
+
console.log(' Your agent will sync with Agora when the API is available.');
|
|
83
|
+
console.log('');
|
|
84
|
+
const agentId = 'agent_local_' + randomBytes(12).toString('hex');
|
|
85
|
+
const apiKey = 'agora_sk_test_' + randomBytes(24).toString('hex');
|
|
86
|
+
const creds = {
|
|
87
|
+
agent_id: agentId,
|
|
88
|
+
agent_name: name,
|
|
89
|
+
api_key: apiKey,
|
|
90
|
+
api_key_live: null,
|
|
91
|
+
api_endpoint: endpoint,
|
|
92
|
+
wallet_address: walletAddress,
|
|
93
|
+
environment: 'sandbox',
|
|
94
|
+
created_at: new Date().toISOString(),
|
|
95
|
+
key_rotated_at: null,
|
|
96
|
+
};
|
|
97
|
+
saveCredentials(creds, 'default');
|
|
98
|
+
console.log(` ✓ Agent created locally: ${name} (${agentId})`);
|
|
99
|
+
console.log(` ✓ API key saved to ~/.agora/credentials/default.json`);
|
|
100
|
+
}
|
|
101
|
+
injectMcpConfig(join(process.cwd(), '.mcp.json'));
|
|
102
|
+
console.log(` ✓ MCP config injected into .mcp.json`);
|
|
103
|
+
console.log('');
|
|
104
|
+
console.log(' Your agent now has the Agora skill.');
|
|
105
|
+
console.log(' Tools: agora_publish, agora_search, agora_bid,');
|
|
106
|
+
console.log(' agora_deliver, agora_status');
|
|
107
|
+
console.log('');
|
|
108
|
+
}
|
|
109
|
+
function injectMcpConfig(mcpPath) {
|
|
110
|
+
let config = {};
|
|
111
|
+
if (existsSync(mcpPath)) {
|
|
112
|
+
try {
|
|
113
|
+
config = JSON.parse(readFileSync(mcpPath, 'utf-8'));
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Invalid JSON, start fresh
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const servers = config['mcpServers'] || {};
|
|
120
|
+
servers['agora'] = {
|
|
121
|
+
command: 'npx',
|
|
122
|
+
args: ['-y', 'agora-skill', 'serve'],
|
|
123
|
+
};
|
|
124
|
+
config['mcpServers'] = servers;
|
|
125
|
+
writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n');
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,kBAqEhC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { loadCredentials, maskApiKey, getActiveEnvironment } from './auth/credentials.js';
|
|
4
|
+
import { AgoraClient } from './client.js';
|
|
5
|
+
import { publishSchema, publish } from './tools/publish.js';
|
|
6
|
+
import { searchSchema, search } from './tools/search.js';
|
|
7
|
+
import { bidSchema, bid } from './tools/bid.js';
|
|
8
|
+
import { deliverSchema, deliver } from './tools/deliver.js';
|
|
9
|
+
import { statusSchema, status } from './tools/status.js';
|
|
10
|
+
export async function startServer() {
|
|
11
|
+
const creds = loadCredentials('default');
|
|
12
|
+
if (!creds) {
|
|
13
|
+
console.error('No credentials found. Run: npx agora-skill install');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const env = getActiveEnvironment(creds);
|
|
17
|
+
const client = new AgoraClient(creds);
|
|
18
|
+
const server = new McpServer({
|
|
19
|
+
name: `agora-skill`,
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
});
|
|
22
|
+
server.tool('agora_publish', 'Publish a task on the Agora marketplace for other agents to bid on. Locks USDC in escrow.', publishSchema.shape, async (params) => {
|
|
23
|
+
const result = await publish(client, publishSchema.parse(params));
|
|
24
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
25
|
+
});
|
|
26
|
+
server.tool('agora_search', 'Search the Agora marketplace for tasks matching capabilities. Returns available tasks with stakes and deadlines.', searchSchema.shape, async (params) => {
|
|
27
|
+
const result = await search(client, searchSchema.parse(params));
|
|
28
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
29
|
+
});
|
|
30
|
+
server.tool('agora_bid', 'Submit a bid on an Agora task. Specify your price and delivery SLA.', bidSchema.shape, async (params) => {
|
|
31
|
+
const result = await bid(client, bidSchema.parse(params));
|
|
32
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
33
|
+
});
|
|
34
|
+
server.tool('agora_deliver', 'Submit deliverables for a completed task. Triggers publisher review and escrow release.', deliverSchema.shape, async (params) => {
|
|
35
|
+
const result = await deliver(client, deliverSchema.parse(params));
|
|
36
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
37
|
+
});
|
|
38
|
+
server.tool('agora_status', 'Check status of your Agora tasks and bids. Shows escrow state and lifecycle position.', statusSchema.shape, async (params) => {
|
|
39
|
+
const result = await status(client, statusSchema.parse(params));
|
|
40
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
41
|
+
});
|
|
42
|
+
const transport = new StdioServerTransport();
|
|
43
|
+
await server.connect(transport);
|
|
44
|
+
console.error(`Agora skill active [${env}] agent=${creds.agent_name} key=${maskApiKey(creds.api_key)}`);
|
|
45
|
+
}
|
|
46
|
+
startServer().catch((err) => {
|
|
47
|
+
console.error('Failed to start Agora skill server:', err);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { AgoraClient } from '../client.js';
|
|
3
|
+
export declare const bidSchema: z.ZodObject<{
|
|
4
|
+
task_id: z.ZodString;
|
|
5
|
+
price: z.ZodNumber;
|
|
6
|
+
estimated_hours: z.ZodNumber;
|
|
7
|
+
message: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
task_id: string;
|
|
10
|
+
price: number;
|
|
11
|
+
estimated_hours: number;
|
|
12
|
+
message?: string | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
task_id: string;
|
|
15
|
+
price: number;
|
|
16
|
+
estimated_hours: number;
|
|
17
|
+
message?: string | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export type BidParams = z.infer<typeof bidSchema>;
|
|
20
|
+
export declare function bid(client: AgoraClient, params: BidParams): Promise<{
|
|
21
|
+
bid_id: string;
|
|
22
|
+
status: string;
|
|
23
|
+
price: string;
|
|
24
|
+
message: string;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=bid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bid.d.ts","sourceRoot":"","sources":["../../src/tools/bid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;EAKpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAEjD,wBAAsB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS;;;;;GAa/D"}
|