@agentsmarket/cli 0.1.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +36 -38
  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 +13 -0
  67. package/dist/lib/mcp-install.js +6 -6
  68. package/dist/lib/mcp-install.js.map +1 -1
  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
@@ -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 {};
@@ -0,0 +1,305 @@
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 * as fs from 'node:fs';
19
+ import * as path from 'node:path';
20
+ import { MiniMaxProvider, OpenRouterProvider, runPipelineV2, createModelResolver, createDefaultPricingResolver, LLMProviderRegistry, UnknownProviderError, ProviderMismatchError, loadPipelineYaml, MissingEnvVarError, } from '@agentsmarket/pipeline-runtime';
21
+ import { validatePipelineSpec } from '../lib/pipeline-spec.js';
22
+ function parseInputs(raw, specInputs) {
23
+ if (!raw)
24
+ return specInputs ?? {};
25
+ try {
26
+ const parsed = JSON.parse(raw);
27
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
28
+ throw new Error('--inputs must be a JSON object');
29
+ }
30
+ return { ...(specInputs ?? {}), ...parsed };
31
+ }
32
+ catch (e) {
33
+ throw new Error(`Failed to parse --inputs JSON: ${e.message}`);
34
+ }
35
+ }
36
+ class MockProvider {
37
+ name = 'mock';
38
+ models = ['mock'];
39
+ simpleModel = 'mock';
40
+ complexModel = 'mock';
41
+ supports(model) {
42
+ return this.models.includes(model);
43
+ }
44
+ async generateText(prompt, _opts) {
45
+ const preview = prompt.slice(0, 200);
46
+ return {
47
+ text: `[mock] echo: ${preview}${prompt.length > 200 ? '…' : ''}`,
48
+ usage: { inputTokens: prompt.length, outputTokens: 50 },
49
+ };
50
+ }
51
+ async generateJson(prompt, _schema, opts) {
52
+ const { text } = await this.generateText(prompt, opts);
53
+ try {
54
+ return JSON.parse(text);
55
+ }
56
+ catch {
57
+ return { mock_response: text };
58
+ }
59
+ }
60
+ }
61
+ export function buildProviderRegistry() {
62
+ const providers = [];
63
+ const minimaxKey = process.env.MINIMAX_API_KEY;
64
+ if (minimaxKey) {
65
+ try {
66
+ providers.push(new MiniMaxProvider({ apiKey: minimaxKey }));
67
+ }
68
+ catch { }
69
+ }
70
+ const openrouterKey = process.env.OPENROUTER_API_KEY;
71
+ if (openrouterKey) {
72
+ try {
73
+ providers.push(new OpenRouterProvider({ apiKey: openrouterKey }));
74
+ }
75
+ catch { }
76
+ }
77
+ return new LLMProviderRegistry(providers);
78
+ }
79
+ export function validateStageProviders(spec, registry) {
80
+ const errors = [];
81
+ for (const stage of spec.stages) {
82
+ if (!stage.provider) {
83
+ const isLlmStage = (typeof stage.model === 'string' && stage.model.length > 0)
84
+ || (typeof stage.prompt === 'string' && stage.prompt.length > 0 && !stage.uses);
85
+ if (isLlmStage) {
86
+ errors.push(`Stage '${stage.id}': R6 requires explicit 'provider:' field (auto-dispatch by model name removed). Add 'provider: minimax' (or openrouter/openai/anthropic/replicate).`);
87
+ }
88
+ continue;
89
+ }
90
+ const stageModel = stage.model ?? spec.defaults?.model ?? 'MiniMax-M3';
91
+ try {
92
+ registry.resolveWithSupports(stage.provider, stageModel);
93
+ }
94
+ catch (e) {
95
+ if (e instanceof UnknownProviderError || e instanceof ProviderMismatchError) {
96
+ errors.push(`Stage '${stage.id}': ${e.message}`);
97
+ }
98
+ else {
99
+ throw e;
100
+ }
101
+ }
102
+ }
103
+ return errors;
104
+ }
105
+ function resolveFallbackProvider(registry, stages) {
106
+ const providers = registry.names();
107
+ if (providers.length === 0) {
108
+ throw new Error('No LLM providers configured. Set MINIMAX_API_KEY or OPENROUTER_API_KEY, ' +
109
+ 'or pass --mock to run with the deterministic mock provider.');
110
+ }
111
+ for (const stage of stages) {
112
+ if (typeof stage.provider === 'string' && registry.hasName(stage.provider)) {
113
+ return registry.resolve(stage.provider);
114
+ }
115
+ }
116
+ const fallbackName = providers[0];
117
+ return registry.resolve(fallbackName);
118
+ }
119
+ const COLOR = {
120
+ reset: '\x1b[0m', dim: '\x1b[2m', bold: '\x1b[1m',
121
+ green: '\x1b[32m', yellow: '\x1b[33m', cyan: '\x1b[36m', red: '\x1b[31m',
122
+ };
123
+ function colorize(s, color, enabled) {
124
+ return enabled ? `${COLOR[color]}${s}${COLOR.reset}` : s;
125
+ }
126
+ function warnIfDeprecatedFlag(usedDeprecated, useColor) {
127
+ if (usedDeprecated.apiKey) {
128
+ console.error(colorize('⚠ --api-key is deprecated. Pass LLM credentials via env (export MINIMAX_API_KEY=...) and reference them inside your pipeline YAML as ${MINIMAX_API_KEY} (or ${NAME:-default} for a fallback). See docs/R7-ENV-VARS.md for syntax.', 'yellow', useColor));
129
+ }
130
+ }
131
+ function getMarketplaceUrl(override) {
132
+ return override ?? process.env.AGENTSMARKET_URL ?? 'https://api.agentsmarket.world';
133
+ }
134
+ async function fetchSkillFromMarketplace(skillId, baseUrl, agentId) {
135
+ const url = `${baseUrl}/v1/skills/${encodeURIComponent(skillId)}`;
136
+ const headers = { 'Content-Type': 'application/json' };
137
+ if (agentId)
138
+ headers['X-Agent-ID'] = agentId;
139
+ const res = await fetch(url, { headers });
140
+ if (res.status === 404)
141
+ return null;
142
+ if (!res.ok)
143
+ throw new Error(`Failed to fetch skill ${skillId}: HTTP ${res.status}`);
144
+ return await res.json();
145
+ }
146
+ export async function runCommand(filePath, opts) {
147
+ const useColor = !opts.noColor && process.stdout.isTTY !== false;
148
+ warnIfDeprecatedFlag(opts, useColor);
149
+ const absPath = path.resolve(filePath);
150
+ if (!fs.existsSync(absPath)) {
151
+ console.error(colorize(`✗ File not found: ${absPath}`, 'red', useColor));
152
+ process.exit(1);
153
+ }
154
+ const raw = fs.readFileSync(absPath, 'utf8');
155
+ let spec;
156
+ try {
157
+ spec = loadPipelineYaml(raw);
158
+ }
159
+ catch (e) {
160
+ if (e instanceof MissingEnvVarError) {
161
+ console.error(colorize(`✗ ${e.message}`, 'red', useColor));
162
+ process.exit(1);
163
+ }
164
+ console.error(colorize(`✗ Invalid YAML: ${e.message}`, 'red', useColor));
165
+ process.exit(1);
166
+ }
167
+ const validation = validatePipelineSpec(spec);
168
+ if ('error' in validation) {
169
+ console.error(colorize(`✗ Spec validation failed: ${validation.error}`, 'red', useColor));
170
+ process.exit(1);
171
+ }
172
+ const inputs = parseInputs(opts.inputs, spec.inputs);
173
+ const baseUrl = getMarketplaceUrl(opts.url);
174
+ const stageCount = spec.stages.length;
175
+ const usesStages = validation.usesStages;
176
+ console.log(colorize(`▶ ${spec.name} v${spec.version ?? '0.0.0'}`, 'bold', useColor));
177
+ console.log(colorize(` ${stageCount} stages · mock=${opts.mock ? 'yes' : 'no'} · inputs=${Object.keys(inputs).length} · url=${baseUrl}`, 'dim', useColor));
178
+ console.log('');
179
+ if (validation.warnings.length > 0) {
180
+ console.log(colorize('⚠ Spec warnings (v0.2 forward-compat):', 'yellow', useColor));
181
+ for (const w of validation.warnings) {
182
+ console.log(colorize(` - ${w}`, 'yellow', useColor));
183
+ }
184
+ console.log('');
185
+ }
186
+ const stagesForRuntime = spec.stages.map((s) => ({
187
+ id: s.id,
188
+ model: opts.model ?? s.model,
189
+ system: s.system,
190
+ prompt: s.prompt,
191
+ uses: s.uses,
192
+ input: s.input,
193
+ output_format: s.output_format,
194
+ fields: s.fields,
195
+ mcp_servers: s.mcp_servers,
196
+ mcp_tools: s.mcp_tools,
197
+ working_dir: s.working_dir,
198
+ provider: s.provider,
199
+ }));
200
+ const providerRegistry = buildProviderRegistry();
201
+ const preFlightErrors = validateStageProviders(spec, providerRegistry);
202
+ if (preFlightErrors.length > 0) {
203
+ for (const msg of preFlightErrors) {
204
+ console.error(colorize(`✗ ${msg}`, 'red', useColor));
205
+ }
206
+ process.exit(1);
207
+ }
208
+ const t0 = Date.now();
209
+ try {
210
+ const result = await runPipelineV2({
211
+ spec: { name: spec.name, version: spec.version ?? '0.0.0', defaults: spec.defaults, stages: stagesForRuntime },
212
+ inputs,
213
+ deps: {
214
+ provider: opts.mock
215
+ ? new MockProvider()
216
+ : resolveFallbackProvider(providerRegistry, stagesForRuntime),
217
+ registry: providerRegistry,
218
+ pricing: createDefaultPricingResolver({ openrouterApiKey: process.env.OPENROUTER_API_KEY }),
219
+ modelResolver: createModelResolver({
220
+ agentDefault: process.env.AGENTSMARKET_DEFAULT_MODEL,
221
+ envDefault: process.env.AGENTSMARKET_DEFAULT_MODEL,
222
+ }),
223
+ fetchSkill: async (skillId) => {
224
+ const skill = await fetchSkillFromMarketplace(skillId, baseUrl);
225
+ if (!skill)
226
+ return null;
227
+ return {
228
+ id: skill.id,
229
+ name: skill.name,
230
+ full_md: skill.full_md ?? '',
231
+ description: skill.description,
232
+ preferred_model: 'MiniMax-M3',
233
+ is_private: skill.is_private ? 1 : 0,
234
+ granted_to: JSON.stringify(skill.granted_to ?? []),
235
+ author_agent_id: skill.author_agent_id,
236
+ };
237
+ },
238
+ getCurrentAgentId: () => '0xcli-local',
239
+ getPipelineAuthorId: () => '0xcli-local',
240
+ isLocal: true,
241
+ },
242
+ hooks: {
243
+ onStageStart: (stageId) => {
244
+ const stage = spec.stages.find((s) => s.id === stageId);
245
+ if (stage?.working_dir) {
246
+ const resolved = path.resolve(path.dirname(absPath), stage.working_dir);
247
+ fs.mkdirSync(resolved, { recursive: true });
248
+ console.log(colorize(` ▸ ${stageId}... [working_dir=${resolved}]`, 'cyan', useColor));
249
+ }
250
+ else {
251
+ console.log(colorize(` ▸ ${stageId}...`, 'cyan', useColor));
252
+ }
253
+ },
254
+ onStageComplete: (stageId, ms) => {
255
+ console.log(colorize(` ✓ ${stageId} (${ms}ms)`, 'green', useColor));
256
+ },
257
+ },
258
+ });
259
+ const totalMs = Date.now() - t0;
260
+ const totalCostUsdc = result.totalCostMicroUsdc / 1_000_000;
261
+ console.log('');
262
+ console.log(colorize('═'.repeat(60), 'dim', useColor));
263
+ console.log(colorize(`Total: ${totalMs}ms · ~$${totalCostUsdc.toFixed(6)} USDC`, 'bold', useColor));
264
+ console.log('');
265
+ if (usesStages.length > 0) {
266
+ const nestedCount = result.stageTimings.reduce((acc, s) => acc + (s.skillIds?.length ?? 0), 0);
267
+ console.log(colorize(` ${nestedCount} nested skill calls executed`, 'dim', useColor));
268
+ }
269
+ if (result.stageProvenance) {
270
+ const usesWithProvenance = Object.entries(result.stageProvenance).filter(([, prov]) => (prov.uses_details?.length ?? 0) > 0 || prov.mcp || prov.working_dir);
271
+ if (usesWithProvenance.length > 0) {
272
+ console.log(colorize('Stage provenance (v0.2):', 'bold', useColor));
273
+ for (const [stageId, prov] of usesWithProvenance) {
274
+ console.log(colorize(` ${stageId}:`, 'dim', useColor));
275
+ for (const d of prov.uses_details ?? []) {
276
+ const label = d.requested_version
277
+ ? `${d.skill_id}@${d.requested_version} (pin=${d.version_pin})`
278
+ : `${d.skill_id} (latest, pin=loose)`;
279
+ console.log(colorize(` uses ${label} v${d.actual_version} sha256:${d.content_hash.slice(0, 12)}…`, 'dim', useColor));
280
+ }
281
+ if (prov.mcp) {
282
+ console.log(colorize(` mcp_servers=[${prov.mcp.validated_servers.join(', ')}] mcp_tools=[${prov.mcp.validated_tools.join(', ')}]`, 'dim', useColor));
283
+ }
284
+ if (prov.working_dir) {
285
+ console.log(colorize(` working_dir=${prov.working_dir}${prov.working_dir_ignored_on_server ? ' (IGNORED — server execution)' : ''}`, 'dim', useColor));
286
+ }
287
+ }
288
+ console.log('');
289
+ }
290
+ }
291
+ console.log(colorize('Final outputs:', 'bold', useColor));
292
+ for (const stageId of Object.keys(result.outputs)) {
293
+ const output = result.outputs[stageId] ?? '';
294
+ console.log('');
295
+ console.log(colorize(` ┌── ${stageId} ──`, 'cyan', useColor));
296
+ console.log(output.split('\n').map((line) => ` │ ${line}`).join('\n'));
297
+ }
298
+ console.log('');
299
+ }
300
+ catch (e) {
301
+ console.error(colorize(`✗ Pipeline failed: ${e.message}`, 'red', useColor));
302
+ process.exit(1);
303
+ }
304
+ }
305
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GAKnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAyB,MAAM,yBAAyB,CAAC;AAWtF,SAAS,WAAW,CAAC,GAAuB,EAAE,UAA+C;IAC3F,IAAI,CAAC,GAAG;QAAE,OAAO,UAAU,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kCAAmC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,YAAY;IACP,IAAI,GAAG,MAAM,CAAC;IACd,MAAM,GAAG,CAAC,MAAM,CAAU,CAAC;IAC3B,WAAW,GAAG,MAAM,CAAC;IACrB,YAAY,GAAG,MAAM,CAAC;IAE/B,QAAQ,CAAC,KAAa;QACpB,OAAQ,IAAI,CAAC,MAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,KAAW;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,gBAAgB,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAChE,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAgB;SACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAI,MAAc,EAAE,OAAgB,EAAE,IAAU;QAChE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAO,CAAC;QAAC,CAAC;IACtF,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IAC/E,CAAC;IACD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACrD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAsB,EACtB,QAA6B;IAE7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;mBACzE,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClF,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,sJAAsJ,CAAC,CAAC;YACxL,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,YAAY,CAAC;QACvE,IAAI,CAAC;YACH,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,oBAAoB,IAAI,CAAC,YAAY,qBAAqB,EAAE,CAAC;gBAC5E,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAA6B,EAAE,MAA2B;IACzF,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,0EAA0E;YAC1E,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3E,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;IACnC,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IACjD,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU;CACzE,CAAC;AAEF,SAAS,QAAQ,CAAC,CAAS,EAAE,KAAyB,EAAE,OAAgB;IACtE,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAAC,cAAmC,EAAE,QAAiB;IAClF,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CACpB,mOAAmO,EACnO,QAAQ,EACR,QAAQ,CACT,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,OAAO,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,gCAAgC,CAAC;AACtF,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,OAAe,EAAE,OAAe,EAAE,OAAgB;IACzF,MAAM,GAAG,GAAG,GAAG,OAAO,cAAc,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;IAClE,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,IAAI,OAAO;QAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,IAAgB;IACjE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;IACjE,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,IAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAqB,CAAC;IACnD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,kBAAkB,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAoB,CAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,6BAA6B,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,UAAU,kBAAkB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,aAAa,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,UAAU,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5J,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,wCAAwC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpF,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,gBAAgB,GAAwB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAqC;QAC7C,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,aAAa,EAAE,CAAC,CAAC,aAA6E;QAC9F,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC,CAAC;IAEJ,MAAM,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;IAEjD,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACvE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE;YAC9G,MAAM;YACN,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACjB,CAAC,CAAC,IAAI,YAAY,EAAE;oBACpB,CAAC,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;gBAC/D,QAAQ,EAAE,gBAAgB;gBAC1B,OAAO,EAAE,4BAA4B,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAC3F,aAAa,EAAE,mBAAmB,CAAC;oBACjC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;oBACpD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;iBACnD,CAAC;gBACF,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBAC5B,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAChE,IAAI,CAAC,KAAK;wBAAE,OAAO,IAAI,CAAC;oBACxB,OAAO;wBACL,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;wBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,eAAe,EAAE,YAAY;wBAC7B,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;wBAClD,eAAe,EAAE,KAAK,CAAC,eAAe;qBACvC,CAAC;gBACJ,CAAC;gBACD,iBAAiB,EAAE,GAAG,EAAE,CAAC,aAAa;gBACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,aAAa;gBACxC,OAAO,EAAE,IAAI;aACd;YACD,KAAK,EAAE;gBACL,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;oBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;oBACxD,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;wBACxE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,OAAO,oBAAoB,QAAQ,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACzF,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;oBAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACvE,CAAC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAChC,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,GAAG,SAAS,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,OAAO,UAAU,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/F,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,WAAW,8BAA8B,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CACtE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CACnF,CAAC;YACF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,0BAA0B,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpE,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACxD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;wBACxC,MAAM,KAAK,GAAG,CAAC,CAAC,iBAAiB;4BAC/B,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,iBAAiB,SAAS,CAAC,CAAC,WAAW,GAAG;4BAC/D,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,sBAAsB,CAAC;wBACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAClB,YAAY,KAAK,KAAK,CAAC,CAAC,cAAc,WAAW,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAC/E,KAAK,EAAE,QAAQ,CAChB,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,GAAG,CAAC,QAAQ,CAClB,oBAAoB,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC/G,KAAK,EAAE,QAAQ,CAChB,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACrB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAClB,mBAAmB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE,EACjH,KAAK,EAAE,QAAQ,CAChB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAuB,CAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}