@agentsmarket/cli 0.1.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +1455 -44
  2. package/dist/commands/balance.js +3 -3
  3. package/dist/commands/call.d.ts +23 -1
  4. package/dist/commands/call.js +187 -45
  5. package/dist/commands/call.js.map +1 -1
  6. package/dist/commands/info.d.ts +6 -6
  7. package/dist/commands/info.js +33 -35
  8. package/dist/commands/info.js.map +1 -1
  9. package/dist/commands/init.d.ts +11 -7
  10. package/dist/commands/init.js +71 -42
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/install.js +2 -2
  13. package/dist/commands/mcp.js +9 -11
  14. package/dist/commands/mcp.js.map +1 -1
  15. package/dist/commands/pipeline/call.d.ts +18 -0
  16. package/dist/commands/pipeline/call.js +58 -0
  17. package/dist/commands/pipeline/call.js.map +1 -0
  18. package/dist/commands/pipeline/install.d.ts +7 -0
  19. package/dist/commands/pipeline/install.js +16 -0
  20. package/dist/commands/pipeline/install.js.map +1 -0
  21. package/dist/commands/pipeline/publish.d.ts +15 -0
  22. package/dist/commands/pipeline/publish.js +22 -0
  23. package/dist/commands/pipeline/publish.js.map +1 -0
  24. package/dist/commands/publish-openapi.d.ts +16 -0
  25. package/dist/commands/publish-openapi.js +61 -0
  26. package/dist/commands/publish-openapi.js.map +1 -0
  27. package/dist/commands/publish-pipeline.d.ts +15 -0
  28. package/dist/commands/publish-pipeline.js +141 -0
  29. package/dist/commands/publish-pipeline.js.map +1 -0
  30. package/dist/commands/publish.js +37 -42
  31. package/dist/commands/publish.js.map +1 -1
  32. package/dist/commands/refund.js +15 -17
  33. package/dist/commands/refund.js.map +1 -1
  34. package/dist/commands/register.js +6 -27
  35. package/dist/commands/register.js.map +1 -1
  36. package/dist/commands/run.d.ts +31 -0
  37. package/dist/commands/run.js +305 -0
  38. package/dist/commands/run.js.map +1 -0
  39. package/dist/commands/scan.js +2 -5
  40. package/dist/commands/scan.js.map +1 -1
  41. package/dist/commands/search.js +1 -1
  42. package/dist/commands/skill/call.d.ts +12 -0
  43. package/dist/commands/skill/call.js +17 -0
  44. package/dist/commands/skill/call.js.map +1 -0
  45. package/dist/commands/skill/install.d.ts +7 -0
  46. package/dist/commands/skill/install.js +13 -0
  47. package/dist/commands/skill/install.js.map +1 -0
  48. package/dist/commands/skill/publish.d.ts +18 -0
  49. package/dist/commands/skill/publish.js +28 -0
  50. package/dist/commands/skill/publish.js.map +1 -0
  51. package/dist/commands/validate.d.ts +20 -0
  52. package/dist/commands/validate.js +91 -0
  53. package/dist/commands/validate.js.map +1 -0
  54. package/dist/index.d.ts +4 -6
  55. package/dist/index.js +90 -29
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/config.d.ts +12 -13
  58. package/dist/lib/config.js +27 -27
  59. package/dist/lib/config.js.map +1 -1
  60. package/dist/lib/http.d.ts +23 -8
  61. package/dist/lib/http.js +28 -48
  62. package/dist/lib/http.js.map +1 -1
  63. package/dist/lib/identity.d.ts +29 -0
  64. package/dist/lib/identity.js +57 -0
  65. package/dist/lib/identity.js.map +1 -0
  66. package/dist/lib/mcp-install.d.ts +36 -0
  67. package/dist/lib/mcp-install.js +149 -0
  68. package/dist/lib/mcp-install.js.map +1 -0
  69. package/dist/lib/pipeline-spec.d.ts +66 -0
  70. package/dist/lib/pipeline-spec.js +273 -0
  71. package/dist/lib/pipeline-spec.js.map +1 -0
  72. package/package.json +12 -4
  73. package/dist/lib/keys.d.ts +0 -69
  74. package/dist/lib/keys.js +0 -85
  75. package/dist/lib/keys.js.map +0 -1
  76. package/dist/lib/payment-keys.d.ts +0 -25
  77. package/dist/lib/payment-keys.js +0 -55
  78. package/dist/lib/payment-keys.js.map +0 -1
  79. package/dist/lib/payment.d.ts +0 -27
  80. package/dist/lib/payment.js +0 -123
  81. package/dist/lib/payment.js.map +0 -1
@@ -0,0 +1,141 @@
1
+ /**
2
+ * `agentsmarket publish-pipeline <pipeline.yaml>` — publish a pipeline to the marketplace.
3
+ *
4
+ * pipeline.yaml format (PIPELINE.md v0.2):
5
+ * # Metadata (YAML-style at top, optional)
6
+ * # name: "My Pipeline"
7
+ * # description: "Stage-by-stage description"
8
+ * # version: "1.0.0"
9
+ * # price_usdc: 100000 # 0.10 USDT (0 = free)
10
+ * # is_private: true
11
+ * # granted_to: ["0x..."]
12
+ * # tags: ["analysis", "multi-model"]
13
+ *
14
+ * stages:
15
+ * - id: plan
16
+ * model: MiniMax-M3
17
+ * system: "You are a strategic planner."
18
+ * prompt: "Plan the approach for: {{goal}}"
19
+ * - id: execute
20
+ * uses: skill_x
21
+ * input:
22
+ * goal: "{{plan}}"
23
+ */
24
+ import { readFileSync } from 'node:fs';
25
+ import yaml from 'js-yaml';
26
+ import { authedJson, HttpError } from '../lib/http.js';
27
+ import { validatePipelineSpec } from '../lib/pipeline-spec.js';
28
+ const defaultDeps = {
29
+ readFileSync,
30
+ authedJson,
31
+ HttpError,
32
+ validatePipelineSpec,
33
+ log: console.log,
34
+ error: console.error,
35
+ };
36
+ function extractMetadata(content) {
37
+ const lines = content.split('\n');
38
+ let i = 0;
39
+ const meta = {};
40
+ while (i < lines.length) {
41
+ const line = lines[i] ?? '';
42
+ if (line.startsWith('# ')) {
43
+ const m = line.slice(2).match(/^([a-z_]+):\s*(.+)$/);
44
+ if (m && m[1] && m[2]) {
45
+ const key = m[1].trim();
46
+ let value = m[2].trim();
47
+ if (key === 'price_usdc') {
48
+ value = Number(value);
49
+ }
50
+ else if (key === 'is_private') {
51
+ value = value === 'true';
52
+ }
53
+ meta[key] = value;
54
+ }
55
+ }
56
+ else if (line.trim() !== '') {
57
+ break;
58
+ }
59
+ i++;
60
+ }
61
+ const yamlBody = lines.slice(i).join('\n');
62
+ return { meta, yamlBody };
63
+ }
64
+ export async function publishPipelineCommand(filePath, depsOverrides = {}) {
65
+ const deps = { ...defaultDeps, ...depsOverrides };
66
+ const content = deps.readFileSync(filePath, 'utf-8');
67
+ const { meta, yamlBody } = extractMetadata(content);
68
+ const name = meta.name;
69
+ const description = meta.description;
70
+ const priceUsdc = meta.price_usdc;
71
+ const version = meta.version;
72
+ const isPrivate = meta.is_private;
73
+ if (typeof name !== 'string' || !name) {
74
+ throw new Error('pipeline.yaml missing `name:` in header comments');
75
+ }
76
+ if (typeof description !== 'string' || !description) {
77
+ throw new Error('pipeline.yaml missing `description:` in header comments');
78
+ }
79
+ if (typeof priceUsdc !== 'number' || !Number.isFinite(priceUsdc) || priceUsdc < 0) {
80
+ throw new Error('pipeline.yaml must have numeric `price_usdc:` in header comments (0 = free)');
81
+ }
82
+ if (version !== undefined && (typeof version !== 'string' || !/^\d+\.\d+\.\d+$/.test(version))) {
83
+ throw new Error('pipeline.yaml `version:` must be semver (e.g. "1.0.0")');
84
+ }
85
+ try {
86
+ yaml.load(yamlBody);
87
+ }
88
+ catch (e) {
89
+ throw new Error(`Invalid YAML body: ${e instanceof Error ? e.message : String(e)}`);
90
+ }
91
+ const validation = deps.validatePipelineSpec(yamlBody);
92
+ if (!validation.ok) {
93
+ throw new Error(`Pipeline spec invalid: ${validation.error}`);
94
+ }
95
+ const tagsLine = content.split('\n').find((l) => l.startsWith('# tags:'));
96
+ let tags = [];
97
+ if (tagsLine) {
98
+ const parsed = JSON.parse(tagsLine.slice(7).trim());
99
+ if (Array.isArray(parsed))
100
+ tags = parsed;
101
+ }
102
+ const grantedToLine = content.split('\n').find((l) => l.startsWith('# granted_to:'));
103
+ let grantedTo = [];
104
+ if (grantedToLine) {
105
+ const parsed = JSON.parse(grantedToLine.slice(13).trim());
106
+ if (Array.isArray(parsed))
107
+ grantedTo = parsed;
108
+ }
109
+ const publicPreviewLine = content.split('\n').find((l) => l.startsWith('# public_preview:'));
110
+ const publicPreview = publicPreviewLine ? publicPreviewLine.slice(17).trim() : '';
111
+ const body_json = {
112
+ name,
113
+ description,
114
+ version: typeof version === 'string' ? version : undefined,
115
+ is_private: typeof isPrivate === 'boolean' ? isPrivate : undefined,
116
+ granted_to: grantedTo.length > 0 ? grantedTo : undefined,
117
+ price_usdc: priceUsdc,
118
+ tags,
119
+ public_preview: publicPreview.length > 0 ? publicPreview : undefined,
120
+ spec_yaml: yamlBody,
121
+ };
122
+ try {
123
+ const result = await deps.authedJson('POST', '/v1/pipelines', body_json);
124
+ deps.log(`✓ Pipeline published!`);
125
+ deps.log(` ID: ${result.id}`);
126
+ deps.log(` Name: ${result.name}`);
127
+ deps.log(` Version: ${result.version}`);
128
+ deps.log(` Private: ${result.is_private ? 'yes' : 'no'}`);
129
+ deps.log(` Stages: ${validation.usesStages}`);
130
+ deps.log(` Spec hash: ${result.spec_hash.slice(0, 16)}...`);
131
+ deps.log(`\nView at: https://agentsmarket.world/pipelines/${result.id}`);
132
+ }
133
+ catch (err) {
134
+ if (err instanceof deps.HttpError && err.status === 409) {
135
+ deps.error(`✗ Pipeline with this (name, version) already exists.`);
136
+ deps.error(` → Bump version in pipeline header to publish an update.`);
137
+ }
138
+ throw err;
139
+ }
140
+ }
141
+ //# sourceMappingURL=publish-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-pipeline.js","sourceRoot":"","sources":["../../src/commands/publish-pipeline.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,10 @@
5
5
  * ---
6
6
  * name: "Skill name"
7
7
  * description: "One-paragraph description"
8
- * price_usdt: 50000 # 0.05 USDT (0 = free)
8
+ * version: "1.0.0"
9
+ * price_usdc: 50000 # 0.05 USDT (0 = free)
10
+ * is_private: true
11
+ * granted_to: ["0x...", "0x..."]
9
12
  * tags: ["design", "ui"]
10
13
  * ---
11
14
  *
@@ -13,6 +16,7 @@
13
16
  * # First paragraph becomes public_md (auto-generated)
14
17
  */
15
18
  import { readFileSync } from 'node:fs';
19
+ import yaml from 'js-yaml';
16
20
  import { authedJson, HttpError } from '../lib/http.js';
17
21
  function parseFrontmatter(content) {
18
22
  const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
@@ -23,59 +27,47 @@ function parseFrontmatter(content) {
23
27
  if (!yamlBlock || body === undefined) {
24
28
  throw new Error('Invalid SKILL.md frontmatter');
25
29
  }
26
- const frontmatter = {};
27
- for (const line of yamlBlock.split('\n')) {
28
- const m = line.match(/^([a-zA-Z_]+):\s*(.+)$/);
29
- if (!m)
30
- continue;
31
- const [, key, valueRaw] = m;
32
- if (!key || valueRaw === undefined)
33
- continue;
34
- const value = valueRaw.trim();
35
- if (value.startsWith('"') && value.endsWith('"')) {
36
- frontmatter[key] = value.slice(1, -1);
37
- }
38
- else if (value.startsWith('[') && value.endsWith(']')) {
39
- // Simple array of strings: ["a", "b", "c"]
40
- try {
41
- frontmatter[key] = JSON.parse(value);
42
- }
43
- catch {
44
- frontmatter[key] = value;
45
- }
46
- }
47
- else if (!Number.isNaN(Number(value))) {
48
- frontmatter[key] = Number(value);
49
- }
50
- else {
51
- frontmatter[key] = value;
52
- }
30
+ const parsed = yaml.load(yamlBlock);
31
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
32
+ throw new Error('Frontmatter must be a YAML mapping');
53
33
  }
54
- return { frontmatter, body: body.trim() };
34
+ return { frontmatter: parsed, body: body.trim() };
55
35
  }
56
36
  export async function publishCommand(filePath) {
57
37
  const content = readFileSync(filePath, 'utf-8');
58
38
  const { frontmatter, body } = parseFrontmatter(content);
59
39
  const name = frontmatter.name;
60
40
  const description = frontmatter.description;
61
- const priceUsdt = frontmatter.price_usdt;
41
+ const priceUsdc = frontmatter.price_usdc;
62
42
  const tags = Array.isArray(frontmatter.tags) ? frontmatter.tags : [];
43
+ const version = frontmatter.version;
44
+ const isPrivate = frontmatter.is_private;
45
+ const grantedTo = frontmatter.granted_to;
63
46
  if (typeof name !== 'string' || !name)
64
47
  throw new Error('SKILL.md frontmatter missing `name`');
65
48
  if (typeof description !== 'string' || !description)
66
49
  throw new Error('SKILL.md frontmatter missing `description`');
67
- if (typeof priceUsdt !== 'number' || priceUsdt < 0)
68
- throw new Error('SKILL.md frontmatter must have numeric `price_usdt` (0 = free)');
69
- // public_md: explicit public_preview in frontmatter wins; else first paragraph of body
70
- const explicitPreview = frontmatter.public_preview;
71
- const autoPreview = body.split('\n\n')[0]?.slice(0, 500) ?? '';
72
- const publicMd = (typeof explicitPreview === 'string' && explicitPreview.length > 0)
73
- ? explicitPreview.slice(0, 500)
74
- : autoPreview;
50
+ if (typeof priceUsdc !== 'number' || priceUsdc < 0)
51
+ throw new Error('SKILL.md frontmatter must have numeric `price_usdc` (0 = free)');
52
+ if (version !== undefined && (typeof version !== 'string' || !/^\d+\.\d+\.\d+$/.test(version))) {
53
+ throw new Error('SKILL.md frontmatter `version` must be semver (e.g. "1.0.0")');
54
+ }
55
+ if (isPrivate !== undefined && typeof isPrivate !== 'boolean') {
56
+ throw new Error('SKILL.md frontmatter `is_private` must be boolean');
57
+ }
58
+ if (grantedTo !== undefined && !Array.isArray(grantedTo)) {
59
+ throw new Error('SKILL.md frontmatter `granted_to` must be array of EVM addresses');
60
+ }
61
+ const publicMd = (typeof frontmatter.public_preview === 'string' && frontmatter.public_preview.length > 0)
62
+ ? frontmatter.public_preview.slice(0, 500)
63
+ : body.split('\n\n')[0].slice(0, 500);
75
64
  const body_json = {
76
65
  name,
77
66
  description,
78
- price_usdt: priceUsdt,
67
+ version: typeof version === 'string' ? version : undefined,
68
+ is_private: typeof isPrivate === 'boolean' ? isPrivate : undefined,
69
+ granted_to: Array.isArray(grantedTo) ? grantedTo : undefined,
70
+ price_usdc: priceUsdc,
79
71
  tags,
80
72
  public_md: publicMd,
81
73
  full_md: body,
@@ -83,13 +75,16 @@ export async function publishCommand(filePath) {
83
75
  try {
84
76
  const result = await authedJson('POST', '/v1/skills', body_json);
85
77
  console.log(`✓ Skill published!`);
86
- console.log(` ID: ${result.id}`);
87
- console.log(` Name: ${result.name}`);
78
+ console.log(` ID: ${result.id}`);
79
+ console.log(` Name: ${result.name}`);
80
+ console.log(` Version: ${result.version}`);
81
+ console.log(` Private: ${result.is_private ? 'yes' : 'no'}`);
88
82
  console.log(`\nView at: https://agentsmarket.world/skills/${result.id}`);
89
83
  }
90
84
  catch (err) {
91
85
  if (err instanceof HttpError && err.status === 409) {
92
- console.error(`✗ Skill with this ID already exists or validation failed.`);
86
+ console.error(`✗ Skill with this (name, version) already exists.`);
87
+ console.error(` → Bump version in SKILL.md to publish an update.`);
93
88
  }
94
89
  throw err;
95
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -9,27 +9,25 @@ export async function refundCommand(purchaseId) {
9
9
  try {
10
10
  const res = await authedJson('POST', `/v1/purchases/${encodeURIComponent(purchaseId)}/refund`);
11
11
  console.log(`✓ Refunded purchase ${res.purchase_id}`);
12
- console.log(` Amount: ${res.refunded_amount_usdt} μUSDC (${res.refunded_amount_usdt / 1_000_000} USDC)`);
12
+ console.log(` Amount: ${res.refunded_amount_usdc} μUSDC (${res.refunded_amount_usdc / 1_000_000} USDC)`);
13
13
  console.log(` At: ${res.refunded_at}`);
14
14
  }
15
15
  catch (err) {
16
16
  if (err instanceof HttpError) {
17
- if (err.status === 410) {
18
- console.error(`✗ Refund window expired (24h). Purchase is settled.`);
19
- process.exit(1);
20
- }
21
- if (err.status === 400) {
22
- console.error(`✗ Output not eligible for auto-refund (length >= 100 chars).`);
23
- console.error(` For longer outputs, manual dispute resolution coming in Phase 2.`);
24
- process.exit(1);
25
- }
26
- if (err.status === 409) {
27
- console.error(`✗ Already refunded.`);
28
- process.exit(1);
29
- }
30
- if (err.status === 404) {
31
- console.error(`✗ Purchase not found or not yours.`);
32
- process.exit(1);
17
+ switch (err.status) {
18
+ case 410:
19
+ console.error(`✗ Refund window expired (24h). Purchase is settled.`);
20
+ process.exit(1);
21
+ case 400:
22
+ console.error(`✗ Output not eligible for auto-refund (length >= 100 chars).`);
23
+ console.error(` For longer outputs, manual dispute resolution coming in Phase 2.`);
24
+ process.exit(1);
25
+ case 409:
26
+ console.error(`✗ Already refunded.`);
27
+ process.exit(1);
28
+ case 404:
29
+ console.error(`✗ Purchase not found or not yours.`);
30
+ process.exit(1);
33
31
  }
34
32
  }
35
33
  throw err;
@@ -1 +1 @@
1
- {"version":3,"file":"refund.js","sourceRoot":"","sources":["../../src/commands/refund.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASvD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAC1B,MAAM,EACN,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,SAAS,CACzD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,oBAAoB,WAAW,GAAG,CAAC,oBAAoB,GAAG,SAAS,QAAQ,CAAC,CAAC;QAC1G,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBAC9E,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;gBACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"refund.js","sourceRoot":"","sources":["../../src/commands/refund.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASvD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAC1B,MAAM,EACN,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,SAAS,CACzD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,oBAAoB,WAAW,GAAG,CAAC,oBAAoB,GAAG,SAAS,QAAQ,CAAC,CAAC;QAC1G,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;YAC7B,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;oBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;oBAC9E,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;oBACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;oBACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,KAAK,GAAG;oBACN,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -3,40 +3,18 @@
3
3
  *
4
4
  * Useful when init failed to register (offline) or the agent record was deleted.
5
5
  */
6
- import { loadConfig } from '../lib/config.js';
7
- import { loadPrivateKey, exportPublicKeyRaw, exportPublicKeyHex } from '../lib/keys.js';
8
- import * as crypto from 'node:crypto';
9
- import * as fs from 'node:fs';
10
- import * as os from 'node:os';
11
- import * as path from 'node:path';
6
+ import { loadConfig, loadPrivateKeyHex } from '../lib/config.js';
7
+ import { SigningKey } from 'ethers';
12
8
  import { authedJson } from '../lib/http.js';
13
- function getKeyPath() {
14
- const home = os.homedir();
15
- if (process.platform === 'win32')
16
- return path.join(home, 'AppData', 'Roaming', 'agentsmarket', 'agent.key');
17
- if (process.platform === 'darwin')
18
- return path.join(home, 'Library', 'Application Support', 'agentsmarket', 'agent.key');
19
- const xdgConfig = process.env.XDG_CONFIG_HOME ?? path.join(home, '.config');
20
- return path.join(xdgConfig, 'agentsmarket', 'agent.key');
21
- }
22
9
  export async function registerCommand() {
23
10
  const config = loadConfig();
24
11
  if (!config) {
25
12
  console.error('✗ Agent not initialized. Run `agentsmarket init` first.');
26
13
  process.exit(1);
27
14
  }
28
- const pem = fs.readFileSync(getKeyPath(), 'utf-8');
29
- const privateKey = loadPrivateKey(pem);
30
- const publicKey = crypto.createPublicKey(privateKey);
31
- const publicKeyHex = exportPublicKeyHex(publicKey);
32
- const raw = exportPublicKeyRaw(publicKey);
33
- const derivedId = 'ed25519:' + raw.toString('base64url');
34
- if (derivedId !== config.agent_id) {
35
- console.error('✗ Key file does not match stored agent_id.');
36
- console.error(' Stored: ' + config.agent_id);
37
- console.error(' Derived: ' + derivedId);
38
- process.exit(1);
39
- }
15
+ const privateKey = loadPrivateKeyHex();
16
+ const sk = new SigningKey(privateKey);
17
+ const publicKeyHex = sk.publicKey.slice(2);
40
18
  console.log('→ Registering ' + config.agent_id + ' on server...');
41
19
  try {
42
20
  const res = await authedJson('POST', '/v1/agents/register', {
@@ -45,6 +23,7 @@ export async function registerCommand() {
45
23
  display_name: null,
46
24
  });
47
25
  console.log('✓ Registered: ' + res.agent_id);
26
+ console.log(' Address: ' + config.agent_id);
48
27
  }
49
28
  catch (err) {
50
29
  const msg = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,GAAG,eAAe,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAC1B,MAAM,EACN,qBAAqB,EACrB;YACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,YAAY;YAC5B,YAAY,EAAE,IAAI;SACnB,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `agentsmarket run <pipeline.yaml>` — execute a pipeline locally.
3
+ *
4
+ * Supports all stage types from the shared executor:
5
+ * - llm stage (model + prompt) — direct LLM call
6
+ * - uses (string) — single skill invocation
7
+ * - uses (string[]) — sequential array of skill invocations
8
+ *
9
+ * Skills are fetched via HTTP from the configured marketplace server
10
+ * (AGENTSMARKET_URL or https://api.agentsmarket.world).
11
+ *
12
+ * Examples:
13
+ * agentsmarket run pipeline.yaml
14
+ * agentsmarket run pipeline.yaml --inputs '{"name":"Alice"}'
15
+ * agentsmarket run pipeline.yaml --mock
16
+ * agentsmarket run pipeline.yaml --model MiniMax-M3
17
+ */
18
+ import { LLMProviderRegistry } from '@agentsmarket/pipeline-runtime';
19
+ import { type PipelineFileSpec } from '../lib/pipeline-spec.js';
20
+ interface RunOptions {
21
+ inputs?: string;
22
+ mock?: boolean;
23
+ apiKey?: string;
24
+ model?: string;
25
+ noColor?: boolean;
26
+ url?: string;
27
+ }
28
+ export declare function buildProviderRegistry(): LLMProviderRegistry;
29
+ export declare function validateStageProviders(spec: PipelineFileSpec, registry: LLMProviderRegistry): string[];
30
+ export declare function runCommand(filePath: string, opts: RunOptions): Promise<void>;
31
+ export {};