@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
@@ -3,6 +3,11 @@
3
3
  *
4
4
  * Stores agent identity + network preference in ~/.config/agentsmarket/
5
5
  *
6
+ * Storage layout:
7
+ * mnemonic.txt — 12-word BIP-39 phrase (primary backup, import to Trust Wallet)
8
+ * agent.key — secp256k1 private key hex (convenience, derived from mnemonic)
9
+ * config.json — public info (agent_id, network, created_at)
10
+ *
6
11
  * MVP: file-based storage with 0700 dir / 0600 file permissions.
7
12
  * Production: migrate to OS keychain (macOS Keychain / Linux libsecret /
8
13
  * Windows Credential Manager) via @napi-rs/keyring.
@@ -12,9 +17,8 @@ import * as path from 'node:path';
12
17
  import * as os from 'node:os';
13
18
  const CONFIG_DIR_NAME = 'agentsmarket';
14
19
  const KEY_FILE_NAME = 'agent.key';
15
- const PAYMENT_KEY_FILE_NAME = 'payment.key';
20
+ const MNEMONIC_FILE_NAME = 'mnemonic.txt';
16
21
  const CONFIG_FILE_NAME = 'config.json';
17
- /** Returns ~/.config/agentsmarket (platform-correct home dir). */
18
22
  export function getConfigDir() {
19
23
  const home = os.homedir();
20
24
  if (process.platform === 'win32') {
@@ -23,28 +27,23 @@ export function getConfigDir() {
23
27
  if (process.platform === 'darwin') {
24
28
  return path.join(home, 'Library', 'Application Support', CONFIG_DIR_NAME);
25
29
  }
26
- // Linux / Unix — XDG default
27
30
  const xdgConfig = process.env.XDG_CONFIG_HOME ?? path.join(home, '.config');
28
31
  return path.join(xdgConfig, CONFIG_DIR_NAME);
29
32
  }
30
33
  export function getKeyPath() {
31
34
  return path.join(getConfigDir(), KEY_FILE_NAME);
32
35
  }
33
- export function getPaymentKeyPath() {
34
- return path.join(getConfigDir(), PAYMENT_KEY_FILE_NAME);
36
+ export function getMnemonicPath() {
37
+ return path.join(getConfigDir(), MNEMONIC_FILE_NAME);
35
38
  }
36
39
  export function getConfigPath() {
37
40
  return path.join(getConfigDir(), CONFIG_FILE_NAME);
38
41
  }
39
- /** Returns existing config or null. */
40
42
  export function loadConfig() {
41
43
  try {
42
44
  const content = fs.readFileSync(getConfigPath(), 'utf-8');
43
45
  const parsed = JSON.parse(content);
44
- if (typeof parsed.agent_id !== 'string' || !parsed.agent_id.startsWith('ed25519:')) {
45
- return null;
46
- }
47
- if (typeof parsed.payment_address !== 'string' || !/^0x[0-9a-fA-F]{40}$/.test(parsed.payment_address)) {
46
+ if (typeof parsed.agent_id !== 'string' || !/^0x[0-9a-fA-F]{40}$/.test(parsed.agent_id)) {
48
47
  return null;
49
48
  }
50
49
  if (parsed.network !== 'base-sepolia' && parsed.network !== 'base-mainnet') {
@@ -59,7 +58,6 @@ export function loadConfig() {
59
58
  return null;
60
59
  }
61
60
  }
62
- /** Save config file with 0600 permissions. Creates parent dir if needed. */
63
61
  export function saveConfig(config) {
64
62
  const dir = getConfigDir();
65
63
  fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
@@ -68,26 +66,29 @@ export function saveConfig(config) {
68
66
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', { mode: 0o600 });
69
67
  setPermissions(configPath, 0o600);
70
68
  }
71
- /** Save private key with 0600 permissions. */
72
- export function savePrivateKey(pem) {
69
+ export function savePrivateKey(hexPrivateKey) {
73
70
  const dir = getConfigDir();
74
71
  fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
75
72
  setPermissions(dir, 0o700);
76
73
  const keyPath = getKeyPath();
77
- fs.writeFileSync(keyPath, pem, { mode: 0o600 });
74
+ const normalized = hexPrivateKey.startsWith('0x') ? hexPrivateKey : '0x' + hexPrivateKey;
75
+ fs.writeFileSync(keyPath, normalized + '\n', { mode: 0o600 });
78
76
  setPermissions(keyPath, 0o600);
79
77
  }
80
- /** Save secp256k1 payment key with 0600 permissions. */
81
- export function savePaymentKey(pem) {
78
+ export function loadPrivateKeyHex() {
79
+ const content = fs.readFileSync(getKeyPath(), 'utf-8').trim();
80
+ return content.startsWith('0x') ? content : '0x' + content;
81
+ }
82
+ export function saveMnemonic(mnemonic) {
82
83
  const dir = getConfigDir();
83
84
  fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
84
85
  setPermissions(dir, 0o700);
85
- const keyPath = getPaymentKeyPath();
86
- fs.writeFileSync(keyPath, pem, { mode: 0o600 });
87
- setPermissions(keyPath, 0o600);
86
+ const mnemonicPath = getMnemonicPath();
87
+ fs.writeFileSync(mnemonicPath, mnemonic.trim() + '\n', { mode: 0o600 });
88
+ setPermissions(mnemonicPath, 0o600);
88
89
  }
89
- export function loadPaymentKeyPem() {
90
- return fs.readFileSync(getPaymentKeyPath(), 'utf-8');
90
+ export function loadMnemonic() {
91
+ return fs.readFileSync(getMnemonicPath(), 'utf-8').trim();
91
92
  }
92
93
  export function configExists() {
93
94
  return fs.existsSync(getConfigPath());
@@ -95,18 +96,17 @@ export function configExists() {
95
96
  export function keyExists() {
96
97
  return fs.existsSync(getKeyPath());
97
98
  }
98
- export function paymentKeyExists() {
99
- return fs.existsSync(getPaymentKeyPath());
99
+ export function mnemonicExists() {
100
+ return fs.existsSync(getMnemonicPath());
100
101
  }
101
- /** Set file permissions — best-effort on Windows (chmod doesn't fully apply). */
102
- function setPermissions(path, mode) {
102
+ function setPermissions(filePath, mode) {
103
103
  if (process.platform === 'win32')
104
104
  return;
105
105
  try {
106
- fs.chmodSync(path, mode);
106
+ fs.chmodSync(filePath, mode);
107
107
  }
108
108
  catch {
109
- // Ignore — best effort
109
+ // best effort
110
110
  }
111
111
  }
112
112
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,39 @@
1
1
  /**
2
2
  * Authenticated HTTP client for the marketplace server.
3
3
  *
4
- * Signs every request with the agent's Ed25519 key per server protocol:
5
- * Headers:
6
- * X-Agent-ID: ed25519:...
7
- * X-Signature: base64(64-byte Ed25519 sig)
8
- * X-Timestamp: unix ms (within 5 min drift)
4
+ * Signs requests with EIP-191 personal_sign using the agent's secp256k1 key.
5
+ * Server uses ecrecover to determine caller address.
6
+ *
7
+ * Headers (when requireAuth=true, the default):
8
+ * X-Signature: 0x + 130 hex (65-byte EIP-191 sig: r||s||v)
9
+ * X-Timestamp: unix ms (within 5 min drift)
9
10
  * Message: METHOD\nPATH\nTIMESTAMP\nSHA256(BODY)
11
+ *
12
+ * Note: caller address is derived from signature on server side
13
+ * (no X-Agent-ID header needed).
10
14
  */
15
+ export interface ErrorBody {
16
+ error?: string;
17
+ code?: string;
18
+ detail?: string;
19
+ recipient?: string;
20
+ price_usdc?: number;
21
+ chain_id?: number;
22
+ token_address?: string;
23
+ mode?: string;
24
+ hint?: string;
25
+ agent_id?: string;
26
+ }
11
27
  export declare class HttpError extends Error {
12
28
  readonly status: number;
13
29
  readonly code: string;
14
- constructor(status: number, code: string, message: string);
30
+ readonly body: ErrorBody;
31
+ constructor(status: number, code: string, message: string, body?: ErrorBody);
15
32
  }
16
- /** Make an authenticated request to the marketplace server. */
17
33
  export declare function authedFetch(method: string, path: string, body?: unknown, opts?: {
18
34
  baseUrl?: string;
19
35
  requireAuth?: boolean;
20
36
  }): Promise<Response>;
21
- /** Convenience: authed JSON request, returns parsed body. */
22
37
  export declare function authedJson<T>(method: string, path: string, body?: unknown, opts?: {
23
38
  baseUrl?: string;
24
39
  requireAuth?: boolean;
package/dist/lib/http.js CHANGED
@@ -1,66 +1,40 @@
1
1
  /**
2
2
  * Authenticated HTTP client for the marketplace server.
3
3
  *
4
- * Signs every request with the agent's Ed25519 key per server protocol:
5
- * Headers:
6
- * X-Agent-ID: ed25519:...
7
- * X-Signature: base64(64-byte Ed25519 sig)
8
- * X-Timestamp: unix ms (within 5 min drift)
4
+ * Signs requests with EIP-191 personal_sign using the agent's secp256k1 key.
5
+ * Server uses ecrecover to determine caller address.
6
+ *
7
+ * Headers (when requireAuth=true, the default):
8
+ * X-Signature: 0x + 130 hex (65-byte EIP-191 sig: r||s||v)
9
+ * X-Timestamp: unix ms (within 5 min drift)
9
10
  * Message: METHOD\nPATH\nTIMESTAMP\nSHA256(BODY)
11
+ *
12
+ * Note: caller address is derived from signature on server side
13
+ * (no X-Agent-ID header needed).
10
14
  */
11
- import * as crypto from 'node:crypto';
12
15
  import { createHash } from 'node:crypto';
13
- import * as fs from 'node:fs';
14
- import * as os from 'node:os';
15
- import * as path from 'node:path';
16
- import { loadConfig } from './config.js';
17
- import { loadPrivateKey, exportPublicKeyRaw } from './keys.js';
18
- // Override at runtime with AGENTSMARKET_URL env var (used by smoke.sh, tests, dev).
16
+ import { loadConfig, loadPrivateKeyHex } from './config.js';
17
+ import { signEip191 } from './identity.js';
19
18
  const DEFAULT_BASE_URL = 'https://api.agentsmarket.world';
20
19
  export class HttpError extends Error {
21
20
  status;
22
21
  code;
23
- constructor(status, code, message) {
22
+ body;
23
+ constructor(status, code, message, body = {}) {
24
24
  super(message);
25
25
  this.status = status;
26
26
  this.code = code;
27
27
  this.name = 'HttpError';
28
+ this.body = body;
28
29
  }
29
30
  }
30
- function getKeyPath() {
31
- const home = os.homedir();
32
- if (process.platform === 'win32') {
33
- return path.join(home, 'AppData', 'Roaming', 'agentsmarket', 'agent.key');
34
- }
35
- if (process.platform === 'darwin') {
36
- return path.join(home, 'Library', 'Application Support', 'agentsmarket', 'agent.key');
37
- }
38
- const xdgConfig = process.env.XDG_CONFIG_HOME ?? path.join(home, '.config');
39
- return path.join(xdgConfig, 'agentsmarket', 'agent.key');
40
- }
41
- function getSigningKey() {
42
- const config = loadConfig();
43
- if (!config) {
44
- throw new Error('Agent not initialized. Run `agentsmarket init` first.');
45
- }
46
- const pem = fs.readFileSync(getKeyPath(), 'utf-8');
47
- const privateKey = loadPrivateKey(pem);
48
- const publicKey = crypto.createPublicKey(privateKey);
49
- const raw = exportPublicKeyRaw(publicKey);
50
- const derivedId = 'ed25519:' + raw.toString('base64url');
51
- if (derivedId !== config.agent_id) {
52
- throw new Error(`Key file does not match stored agent_id. Stored: ${config.agent_id}, Derived: ${derivedId}`);
53
- }
54
- return { privateKey, agentId: config.agent_id };
55
- }
56
- function signRequest(privateKey, method, path, body) {
31
+ async function signRequest(privateKeyHex, method, path, body) {
57
32
  const timestamp = Date.now().toString();
58
33
  const bodyHash = createHash('sha256').update(body || '').digest('hex');
59
34
  const message = `${method}\n${path}\n${timestamp}\n${bodyHash}`;
60
- const sig = crypto.sign(null, Buffer.from(message), privateKey);
61
- return { signature: sig.toString('base64'), timestamp };
35
+ const { signature, address } = await signEip191(privateKeyHex, message);
36
+ return { signature, timestamp, address };
62
37
  }
63
- /** Make an authenticated request to the marketplace server. */
64
38
  export async function authedFetch(method, path, body, opts = {}) {
65
39
  const baseUrl = (opts.baseUrl ?? process.env.AGENTSMARKET_URL ?? DEFAULT_BASE_URL).replace(/\/$/, '');
66
40
  const bodyStr = body !== undefined ? JSON.stringify(body) : '';
@@ -69,9 +43,12 @@ export async function authedFetch(method, path, body, opts = {}) {
69
43
  'Content-Type': 'application/json',
70
44
  };
71
45
  if (opts.requireAuth !== false) {
72
- const { privateKey, agentId } = getSigningKey();
73
- const { signature, timestamp } = signRequest(privateKey, method, path, bodyStr);
74
- headers['X-Agent-ID'] = agentId;
46
+ const config = loadConfig();
47
+ if (!config) {
48
+ throw new Error('Agent not initialized. Run `agentsmarket init` first.');
49
+ }
50
+ const privateKey = loadPrivateKeyHex();
51
+ const { signature, timestamp } = await signRequest(privateKey, method, path, bodyStr);
75
52
  headers['X-Signature'] = signature;
76
53
  headers['X-Timestamp'] = timestamp;
77
54
  }
@@ -83,21 +60,24 @@ export async function authedFetch(method, path, body, opts = {}) {
83
60
  if (!res.ok) {
84
61
  let code = 'UNKNOWN';
85
62
  let message = `HTTP ${res.status}`;
63
+ const body = {};
86
64
  try {
87
65
  const parsed = await res.json();
66
+ Object.assign(body, parsed);
88
67
  if (parsed.code)
89
68
  code = parsed.code;
90
69
  if (parsed.error)
91
70
  message = `${parsed.code ?? 'UNKNOWN'}: ${parsed.error}`;
71
+ if (parsed.detail)
72
+ message += ` (${parsed.detail})`;
92
73
  }
93
74
  catch {
94
75
  // not JSON
95
76
  }
96
- throw new HttpError(res.status, code, message);
77
+ throw new HttpError(res.status, code, message, body);
97
78
  }
98
79
  return res;
99
80
  }
100
- /** Convenience: authed JSON request, returns parsed body. */
101
81
  export async function authedJson(method, path, body, opts) {
102
82
  const res = await authedFetch(method, path, body, opts);
103
83
  return await res.json();
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Agent identity: BIP-39 mnemonic → secp256k1 keypair (Ethereum-style).
3
+ *
4
+ * agent_id = 0x<address> (same as payment_address — single identity).
5
+ * Signing format: EIP-191 personal_sign → ecrecover on server.
6
+ *
7
+ * Storage:
8
+ * mnemonic.txt — 12-word phrase (PRIMARY backup, import to Trust Wallet)
9
+ * agent.key — secp256k1 private key hex (convenience, derived from mnemonic)
10
+ */
11
+ export interface Identity {
12
+ address: string;
13
+ publicKeyHex: string;
14
+ privateKeyHex: string;
15
+ }
16
+ export declare function generateMnemonic(): string;
17
+ export declare function isValidMnemonic(mnemonic: string): boolean;
18
+ export declare function mnemonicToIdentity(mnemonic: string): Identity;
19
+ export declare function addressFromPrivateKey(privateKeyHex: string): string;
20
+ export interface SignedMessage {
21
+ signature: string;
22
+ address: string;
23
+ }
24
+ export declare function signEip191(privateKeyHex: string, message: string): Promise<SignedMessage>;
25
+ export declare function verifyEip191(message: string, signature: string): {
26
+ ok: boolean;
27
+ address?: string;
28
+ error?: string;
29
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Agent identity: BIP-39 mnemonic → secp256k1 keypair (Ethereum-style).
3
+ *
4
+ * agent_id = 0x<address> (same as payment_address — single identity).
5
+ * Signing format: EIP-191 personal_sign → ecrecover on server.
6
+ *
7
+ * Storage:
8
+ * mnemonic.txt — 12-word phrase (PRIMARY backup, import to Trust Wallet)
9
+ * agent.key — secp256k1 private key hex (convenience, derived from mnemonic)
10
+ */
11
+ import { Wallet, HDNodeWallet, verifyMessage } from 'ethers';
12
+ export function generateMnemonic() {
13
+ const wallet = Wallet.createRandom();
14
+ return wallet.mnemonic.phrase;
15
+ }
16
+ export function isValidMnemonic(mnemonic) {
17
+ try {
18
+ HDNodeWallet.fromPhrase(mnemonic);
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ export function mnemonicToIdentity(mnemonic) {
26
+ const hdNode = HDNodeWallet.fromPhrase(mnemonic);
27
+ return {
28
+ address: hdNode.address,
29
+ publicKeyHex: hdNode.publicKey.slice(2),
30
+ privateKeyHex: hdNode.privateKey.slice(2),
31
+ };
32
+ }
33
+ export function addressFromPrivateKey(privateKeyHex) {
34
+ const key = privateKeyHex.startsWith('0x') ? privateKeyHex : '0x' + privateKeyHex;
35
+ const wallet = new Wallet(key);
36
+ return wallet.address;
37
+ }
38
+ export async function signEip191(privateKeyHex, message) {
39
+ const key = privateKeyHex.startsWith('0x') ? privateKeyHex : '0x' + privateKeyHex;
40
+ const wallet = new Wallet(key);
41
+ const signature = await wallet.signMessage(message);
42
+ const recovered = verifyMessage(message, signature);
43
+ return { signature, address: recovered };
44
+ }
45
+ export function verifyEip191(message, signature) {
46
+ try {
47
+ if (!signature.startsWith('0x') || signature.length !== 132) {
48
+ return { ok: false, error: 'signature must be 0x + 130 hex chars' };
49
+ }
50
+ const address = verifyMessage(message, signature);
51
+ return { ok: true, address };
52
+ }
53
+ catch (err) {
54
+ return { ok: false, error: err.message };
55
+ }
56
+ }
57
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/lib/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAQ7D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACrC,OAAO,MAAM,CAAC,QAAS,CAAC,MAAM,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IACzD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,aAAqB,EAAE,OAAe;IACrE,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,SAAiB;IAC7D,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC;QACtE,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;AACH,CAAC"}
@@ -19,5 +19,18 @@ export type InstallReportEntry = {
19
19
  action: 'skipped';
20
20
  reason: string;
21
21
  };
22
+ interface CandidateConfig {
23
+ agent: AgentName;
24
+ path: string;
25
+ }
26
+ export declare function detectCandidates(): CandidateConfig[];
27
+ export declare function stripJsoncComments(input: string): string;
28
+ export declare function readJsonConfig(filePath: string): {
29
+ parsed: Record<string, unknown>;
30
+ hadComments: boolean;
31
+ };
32
+ export declare function sameMcpEntry(a: unknown): boolean;
33
+ export declare function installOne(c: CandidateConfig): InstallReportEntry;
22
34
  export declare function installMcpForAll(): InstallReportEntry[];
23
35
  export declare function detectAgents(): AgentName[];
36
+ export {};
@@ -15,7 +15,7 @@ const MCP_ENTRY = {
15
15
  command: 'npx',
16
16
  args: ['-y', '@agentsmarket/cli', 'mcp'],
17
17
  };
18
- function detectCandidates() {
18
+ export function detectCandidates() {
19
19
  const home = os.homedir();
20
20
  const found = [];
21
21
  const ocJson = path.join(home, '.config', 'opencode', 'opencode.json');
@@ -44,7 +44,7 @@ function detectCandidates() {
44
44
  }
45
45
  return found;
46
46
  }
47
- function stripJsoncComments(input) {
47
+ export function stripJsoncComments(input) {
48
48
  let out = '';
49
49
  let i = 0;
50
50
  let inString = false;
@@ -88,13 +88,13 @@ function stripJsoncComments(input) {
88
88
  }
89
89
  return out;
90
90
  }
91
- function readJsonConfig(filePath) {
91
+ export function readJsonConfig(filePath) {
92
92
  const raw = fs.readFileSync(filePath, 'utf8');
93
93
  const stripped = stripJsoncComments(raw);
94
94
  const hadComments = stripped !== raw;
95
95
  return { parsed: JSON.parse(stripped), hadComments };
96
96
  }
97
- function sameMcpEntry(a) {
97
+ export function sameMcpEntry(a) {
98
98
  if (!a || typeof a !== 'object')
99
99
  return false;
100
100
  const e = a;
@@ -107,7 +107,7 @@ function sameMcpEntry(a) {
107
107
  return false;
108
108
  return MCP_ENTRY.args.every((v, i) => args[i] === v);
109
109
  }
110
- function installOne(c) {
110
+ export function installOne(c) {
111
111
  const fileExists = fs.existsSync(c.path);
112
112
  if (!fileExists) {
113
113
  const dir = path.dirname(c.path);
@@ -125,7 +125,7 @@ function installOne(c) {
125
125
  parsed = readJsonConfig(c.path).parsed;
126
126
  }
127
127
  catch (err) {
128
- const msg = err instanceof Error ? err.message : String(err);
128
+ const msg = err.message;
129
129
  return { agent: c.agent, action: 'skipped', reason: `parse error: ${msg}` };
130
130
  }
131
131
  const mcpServers = (parsed.mcpServers ?? {});
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../src/lib/mcp-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../src/lib/mcp-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Pipeline spec validation — shared between `agentsmarket run` and `agentsmarket validate`.
3
+ *
4
+ * Returns:
5
+ * { ok: true, usesStages, warnings } — spec is valid
6
+ * { ok: false, error } — spec has issue
7
+ *
8
+ * v0.2 additions:
9
+ * - `uses@version` syntax validation (semver-like hint; full validation at runtime)
10
+ * - `output_format: structured_json` requires non-empty `fields: [...]`
11
+ * - `mcp_servers`/`mcp_tools` are arrays of strings (declaration-level only)
12
+ * - `working_dir` is a non-empty string
13
+ * - `uses_parallel` (v0.3) is rejected with a clear message
14
+ *
15
+ * v0.3 R6 additions (Provider ≠ Model):
16
+ * - When a stage declares `provider:`, the (provider, model) pair must be
17
+ * registered in `PROVIDER_REGISTRY` (openai, anthropic, minimax,
18
+ * openrouter, replicate). Validated via `validateProviderModel()` from
19
+ * `@agentsmarket/pipeline-runtime`. Auto-dispatch by model name removed.
20
+ */
21
+ export interface PipelineFileSpec {
22
+ name: string;
23
+ version?: string;
24
+ description?: string;
25
+ inputs?: Record<string, unknown>;
26
+ defaults?: {
27
+ model?: string;
28
+ };
29
+ stages: Array<{
30
+ id: string;
31
+ model?: string;
32
+ system?: string;
33
+ prompt?: string;
34
+ uses?: unknown;
35
+ uses_parallel?: unknown;
36
+ input?: unknown;
37
+ output_format?: string;
38
+ fields?: string[];
39
+ mcp_servers?: string[];
40
+ mcp_tools?: string[];
41
+ working_dir?: string;
42
+ provider?: string;
43
+ retry?: {
44
+ attempts?: number;
45
+ backoff?: 'exponential' | 'linear' | 'fixed';
46
+ retryable_status?: number[];
47
+ initial_ms?: number;
48
+ };
49
+ run_if?: string;
50
+ when?: string | {
51
+ all: string[];
52
+ } | {
53
+ any: string[];
54
+ };
55
+ }>;
56
+ }
57
+ export declare const COST_PER_LLM_CALL_USDC = 0.01;
58
+ export type ValidationResult = {
59
+ ok: true;
60
+ usesStages: string[];
61
+ warnings: string[];
62
+ } | {
63
+ ok: false;
64
+ error: string;
65
+ };
66
+ export declare function validatePipelineSpec(spec: unknown): ValidationResult;