agora-skill 1.1.5 → 1.1.6

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.
@@ -4,7 +4,7 @@ import { install } from '../installer.js';
4
4
  const program = new Command()
5
5
  .name('agora-skill')
6
6
  .description('Agora marketplace skill — install once, your agent can publish, bid, and settle tasks')
7
- .version('1.1.5');
7
+ .version('1.1.6');
8
8
  program
9
9
  .command('install')
10
10
  .description('Install the Agora skill for your agent')
package/dist/installer.js CHANGED
@@ -9,7 +9,7 @@ export async function install(options) {
9
9
  const endpoint = options.endpoint || DEFAULT_ENDPOINT;
10
10
  console.log('');
11
11
  console.log(' ╭──────────────────────────────────╮');
12
- console.log(' │ Agora Skill Installer v1.1.5 │');
12
+ console.log(' │ Agora Skill Installer v1.1.6 │');
13
13
  console.log(' ╰──────────────────────────────────╯');
14
14
  console.log('');
15
15
  ensureAgoraDirs();
package/dist/server.js CHANGED
@@ -22,7 +22,7 @@ export async function startServer() {
22
22
  const client = new AgoraClient(creds);
23
23
  const server = new McpServer({
24
24
  name: `agora-skill`,
25
- version: '1.1.5',
25
+ version: '1.1.6',
26
26
  });
27
27
  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) => {
28
28
  const result = await publish(client, publishSchema.parse(params));
@@ -3,7 +3,7 @@ export const a2aSendSchema = z.object({
3
3
  target_agent: z.string().describe('Agent ID (UUID) or agent name to send the task to'),
4
4
  message: z.string().min(1).max(5000).describe('Task description for the target agent (1-5000 chars)'),
5
5
  skills: z.array(z.string()).optional().describe('Skill IDs for task classification'),
6
- budget: z.number().positive().optional().describe('Budget in USDC for the task'),
6
+ budget: z.coerce.number().positive().optional().describe('Budget in USDC for the task'),
7
7
  });
8
8
  export async function a2aSend(client, params) {
9
9
  const result = await client.a2aSend({
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-send.js","sourceRoot":"","sources":["../../src/tools/a2a-send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACtF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACrG,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CACjF,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAmB,EAAE,MAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;IACF,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,SAAS;QAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,oBAAoB,MAAM,CAAC,YAAY,cAAc,MAAM,CAAC,SAAS,EAAE;KACjF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"a2a-send.js","sourceRoot":"","sources":["../../src/tools/a2a-send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACtF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACrG,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACpF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CACxF,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAmB,EAAE,MAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;IACF,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,SAAS;QAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,oBAAoB,MAAM,CAAC,YAAY,cAAc,MAAM,CAAC,SAAS,EAAE;KACjF,CAAA;AACH,CAAC"}
package/dist/tools/bid.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  export const bidSchema = z.object({
3
3
  task_id: z.string().describe('ID of the task to bid on'),
4
- price: z.number().positive().describe('Your asking price in USDC'),
5
- estimated_hours: z.number().min(1).max(720).describe('Estimated hours to complete (1-720)'),
4
+ price: z.coerce.number().positive().describe('Your asking price in USDC'),
5
+ estimated_hours: z.coerce.number().min(1).max(720).describe('Estimated hours to complete (1-720)'),
6
6
  message: z.string().max(1000).optional().describe('Pitch or context for your bid'),
7
7
  });
8
8
  export async function bid(client, params) {
@@ -1 +1 @@
1
- {"version":3,"file":"bid.js","sourceRoot":"","sources":["../../src/tools/bid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAClE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC3F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACnF,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,MAAmB,EAAE,MAAiB;IAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,eAAe;QACtC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAA;IACF,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,OAAO;QAC7B,OAAO,EAAE,oBAAoB,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,eAAe,cAAc;KACxF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"bid.js","sourceRoot":"","sources":["../../src/tools/bid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAClG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACnF,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,MAAmB,EAAE,MAAiB;IAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,eAAe;QACtC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAA;IACF,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,OAAO;QAC7B,OAAO,EAAE,oBAAoB,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,eAAe,cAAc;KACxF,CAAA;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export const negotiateSchema = z.object({
3
3
  task_id: z.string().describe('ID of the task to negotiate on'),
4
- proposed_price: z.number().min(0.01, 'proposed_price must be at least 0.01').describe('Counter-offer price in USDC'),
4
+ proposed_price: z.coerce.number().min(0.01, 'proposed_price must be at least 0.01').describe('Counter-offer price in USDC'),
5
5
  proposed_scope: z.string().max(1000, 'proposed_scope must be under 1000 characters').optional().describe('Revised scope description'),
6
6
  message: z.string().max(500, 'message must be under 500 characters').optional().describe('Rationale for the counter-offer'),
7
7
  });
@@ -1 +1 @@
1
- {"version":3,"file":"negotiate.js","sourceRoot":"","sources":["../../src/tools/negotiate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACpH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,8CAA8C,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC5H,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAmB,EAAE,MAAuB;IAC1E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,aAAa,EAAE,MAAM,CAAC,cAAc;QACpC,aAAa,EAAE,MAAM,CAAC,cAAc;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAA;IACF,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,GAAG,MAAM,CAAC,cAAc,OAAO;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,oBAAoB,MAAM,CAAC,cAAc,0BAA0B,MAAM,CAAC,KAAK,IAAI;KAC7F,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"negotiate.js","sourceRoot":"","sources":["../../src/tools/negotiate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC3H,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,8CAA8C,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC5H,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAmB,EAAE,MAAuB;IAC1E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,aAAa,EAAE,MAAM,CAAC,cAAc;QACpC,aAAa,EAAE,MAAM,CAAC,cAAc;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAA;IACF,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,GAAG,MAAM,CAAC,cAAc,OAAO;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,oBAAoB,MAAM,CAAC,cAAc,0BAA0B,MAAM,CAAC,KAAK,IAAI;KAC7F,CAAA;AACH,CAAC"}
@@ -3,7 +3,7 @@ export const publishSchema = z.object({
3
3
  title: z.string().min(5).max(200).describe('What you need done (5-200 chars)'),
4
4
  description: z.string().min(20).max(5000).describe('Detailed requirements (20-5000 chars)'),
5
5
  skill: z.string().describe('Required capability (e.g., "compute", "nlp-sentiment", "legal-review")'),
6
- budget: z.number().positive().describe('Payment amount in USDC (min 0.01)'),
6
+ budget: z.coerce.number().positive().describe('Payment amount in USDC as a number (e.g., 5, not "5")'),
7
7
  deadline: z.string().describe('Deadline — shorthand like "30m", "2h", "1d" or ISO 8601'),
8
8
  executor_type: z.enum(['agent', 'human', 'hybrid']).default('agent').describe('Who can do this: agent, human, or hybrid'),
9
9
  acceptance_criteria: z.string().optional().describe('How to verify completion (auto-generated if omitted)'),
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/tools/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC9E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC3F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;IACpG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACxF,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACzH,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CAC5G,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAmB,EAAE,MAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;QACtC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,mBAAmB,EAAE,MAAM,CAAC,aAAa;QACzC,kBAAkB,EAAE,MAAM,CAAC,mBAAmB;KAC/C,CAAC,CAAA;IACF,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,OAAO;QAC/B,OAAO,EAAE,oDAAoD;KAC9D,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/tools/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC9E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC3F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;IACpG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACtG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACxF,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACzH,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CAC5G,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAmB,EAAE,MAAqB;IACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;QACtC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,mBAAmB,EAAE,MAAM,CAAC,aAAa;QACzC,kBAAkB,EAAE,MAAM,CAAC,mBAAmB;KAC/C,CAAC,CAAA;IACF,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,OAAO;QAC/B,OAAO,EAAE,oDAAoD;KAC9D,CAAA;AACH,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  export const searchSchema = z.object({
3
3
  skill: z.string().optional().describe('Filter by required skill (e.g., "compute", "design")'),
4
- budget_min: z.number().optional().describe('Minimum budget in USDC'),
5
- budget_max: z.number().optional().describe('Maximum budget in USDC'),
4
+ budget_min: z.coerce.number().optional().describe('Minimum budget in USDC'),
5
+ budget_max: z.coerce.number().optional().describe('Maximum budget in USDC'),
6
6
  executor_type: z.enum(['agent', 'human', 'hybrid']).optional().describe('Filter by executor requirement'),
7
7
  keyword: z.string().optional().describe('Full-text search in title and description'),
8
- limit: z.number().default(10).describe('Max results to return (1-100)'),
8
+ limit: z.coerce.number().default(10).describe('Max results to return (1-100)'),
9
9
  });
10
10
  export async function search(client, params) {
11
11
  const result = await client.searchTasks({
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACpE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxE,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAmB,EAAE,MAAoB;IACpE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,mBAAmB,EAAE,MAAM,CAAC,aAAa;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;IAChC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;QACxB,KAAK;KACN,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC3E,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACpF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC/E,CAAC,CAAA;AAIF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAmB,EAAE,MAAoB;IACpE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,mBAAmB,EAAE,MAAM,CAAC,aAAa;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;IAChC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;QACxB,KAAK;KACN,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agora-skill",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "description": "Agora marketplace skill — install once, your agent can publish, bid, and settle tasks",
5
5
  "type": "module",
6
6
  "bin": {
@@ -6,7 +6,7 @@ import { install } from '../installer.js'
6
6
  const program = new Command()
7
7
  .name('agora-skill')
8
8
  .description('Agora marketplace skill — install once, your agent can publish, bid, and settle tasks')
9
- .version('1.1.5')
9
+ .version('1.1.6')
10
10
 
11
11
  program
12
12
  .command('install')
package/src/installer.ts CHANGED
@@ -22,7 +22,7 @@ export async function install(options: InstallOptions): Promise<void> {
22
22
 
23
23
  console.log('')
24
24
  console.log(' ╭──────────────────────────────────╮')
25
- console.log(' │ Agora Skill Installer v1.1.5 │')
25
+ console.log(' │ Agora Skill Installer v1.1.6 │')
26
26
  console.log(' ╰──────────────────────────────────╯')
27
27
  console.log('')
28
28
 
package/src/server.ts CHANGED
@@ -25,7 +25,7 @@ export async function startServer() {
25
25
 
26
26
  const server = new McpServer({
27
27
  name: `agora-skill`,
28
- version: '1.1.5',
28
+ version: '1.1.6',
29
29
  })
30
30
 
31
31
  server.tool(
@@ -5,7 +5,7 @@ export const a2aSendSchema = z.object({
5
5
  target_agent: z.string().describe('Agent ID (UUID) or agent name to send the task to'),
6
6
  message: z.string().min(1).max(5000).describe('Task description for the target agent (1-5000 chars)'),
7
7
  skills: z.array(z.string()).optional().describe('Skill IDs for task classification'),
8
- budget: z.number().positive().optional().describe('Budget in USDC for the task'),
8
+ budget: z.coerce.number().positive().optional().describe('Budget in USDC for the task'),
9
9
  })
10
10
 
11
11
  export type A2ASendParams = z.infer<typeof a2aSendSchema>
package/src/tools/bid.ts CHANGED
@@ -3,8 +3,8 @@ import { AgoraClient } from '../client.js'
3
3
 
4
4
  export const bidSchema = z.object({
5
5
  task_id: z.string().describe('ID of the task to bid on'),
6
- price: z.number().positive().describe('Your asking price in USDC'),
7
- estimated_hours: z.number().min(1).max(720).describe('Estimated hours to complete (1-720)'),
6
+ price: z.coerce.number().positive().describe('Your asking price in USDC'),
7
+ estimated_hours: z.coerce.number().min(1).max(720).describe('Estimated hours to complete (1-720)'),
8
8
  message: z.string().max(1000).optional().describe('Pitch or context for your bid'),
9
9
  })
10
10
 
@@ -3,7 +3,7 @@ import { AgoraClient } from '../client.js'
3
3
 
4
4
  export const negotiateSchema = z.object({
5
5
  task_id: z.string().describe('ID of the task to negotiate on'),
6
- proposed_price: z.number().min(0.01, 'proposed_price must be at least 0.01').describe('Counter-offer price in USDC'),
6
+ proposed_price: z.coerce.number().min(0.01, 'proposed_price must be at least 0.01').describe('Counter-offer price in USDC'),
7
7
  proposed_scope: z.string().max(1000, 'proposed_scope must be under 1000 characters').optional().describe('Revised scope description'),
8
8
  message: z.string().max(500, 'message must be under 500 characters').optional().describe('Rationale for the counter-offer'),
9
9
  })
@@ -5,7 +5,7 @@ export const publishSchema = z.object({
5
5
  title: z.string().min(5).max(200).describe('What you need done (5-200 chars)'),
6
6
  description: z.string().min(20).max(5000).describe('Detailed requirements (20-5000 chars)'),
7
7
  skill: z.string().describe('Required capability (e.g., "compute", "nlp-sentiment", "legal-review")'),
8
- budget: z.number().positive().describe('Payment amount in USDC (min 0.01)'),
8
+ budget: z.coerce.number().positive().describe('Payment amount in USDC as a number (e.g., 5, not "5")'),
9
9
  deadline: z.string().describe('Deadline — shorthand like "30m", "2h", "1d" or ISO 8601'),
10
10
  executor_type: z.enum(['agent', 'human', 'hybrid']).default('agent').describe('Who can do this: agent, human, or hybrid'),
11
11
  acceptance_criteria: z.string().optional().describe('How to verify completion (auto-generated if omitted)'),
@@ -3,11 +3,11 @@ import { AgoraClient } from '../client.js'
3
3
 
4
4
  export const searchSchema = z.object({
5
5
  skill: z.string().optional().describe('Filter by required skill (e.g., "compute", "design")'),
6
- budget_min: z.number().optional().describe('Minimum budget in USDC'),
7
- budget_max: z.number().optional().describe('Maximum budget in USDC'),
6
+ budget_min: z.coerce.number().optional().describe('Minimum budget in USDC'),
7
+ budget_max: z.coerce.number().optional().describe('Maximum budget in USDC'),
8
8
  executor_type: z.enum(['agent', 'human', 'hybrid']).optional().describe('Filter by executor requirement'),
9
9
  keyword: z.string().optional().describe('Full-text search in title and description'),
10
- limit: z.number().default(10).describe('Max results to return (1-100)'),
10
+ limit: z.coerce.number().default(10).describe('Max results to return (1-100)'),
11
11
  })
12
12
 
13
13
  export type SearchParams = z.infer<typeof searchSchema>
@@ -19,7 +19,7 @@ describe('Smoke Tests', () => {
19
19
 
20
20
  test('CLI --version exits 0', () => {
21
21
  const output = execSync(`node ${CLI_PATH} --version`, { encoding: 'utf-8' })
22
- expect(output.trim()).toBe('1.1.5')
22
+ expect(output.trim()).toBe('1.1.6')
23
23
  })
24
24
 
25
25
  test('CLI install --help shows endpoint option', () => {