@vincentai/cli 0.1.2 → 0.1.3

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.
@@ -1,4 +1,4 @@
1
- import { parseArgs, getRequired, getOptional, hasFlag, showHelp } from '../../lib/args.js';
1
+ import { parseArgs, getRequired, getRequiredNumber, getNumber, hasFlag, showHelp, } from '../../lib/args.js';
2
2
  import { resolveApiKey } from '../../lib/keystore.js';
3
3
  import { vincentPost } from '../../lib/client.js';
4
4
  export async function run(argv) {
@@ -17,11 +17,11 @@ export async function run(argv) {
17
17
  const body = {
18
18
  tokenId: getRequired(flags, 'token-id'),
19
19
  side: getRequired(flags, 'side'),
20
- amount: Number(getRequired(flags, 'amount')),
20
+ amount: getRequiredNumber(flags, 'amount'),
21
21
  };
22
- const price = getOptional(flags, 'price');
23
- if (price)
24
- body.price = Number(price);
22
+ const price = getNumber(flags, 'price');
23
+ if (price !== undefined)
24
+ body.price = price;
25
25
  const res = await vincentPost('/api/skills/polymarket/bet', apiKey, body);
26
26
  console.log(JSON.stringify(res, null, 2));
27
27
  }
@@ -1,6 +1,7 @@
1
- import { parseArgs, getRequired, getOptional, hasFlag, showHelp } from '../../lib/args.js';
1
+ import { parseArgs, getRequired, getNumber, hasFlag, showHelp } from '../../lib/args.js';
2
2
  import { vincentPost } from '../../lib/client.js';
3
3
  import { storeKey } from '../../lib/keystore.js';
4
+ import { validateSecretType } from '../../lib/types.js';
4
5
  export async function run(argv) {
5
6
  const { flags } = parseArgs(argv);
6
7
  if (hasFlag(flags, 'help')) {
@@ -15,27 +16,28 @@ export async function run(argv) {
15
16
  ]);
16
17
  return;
17
18
  }
18
- const type = getRequired(flags, 'type');
19
+ const type = validateSecretType(getRequired(flags, 'type'));
19
20
  const memo = getRequired(flags, 'memo');
20
- const chainId = getOptional(flags, 'chain-id');
21
+ const chainId = getNumber(flags, 'chain-id');
21
22
  const body = { type, memo };
22
- if (chainId)
23
- body.chainId = Number(chainId);
23
+ if (chainId !== undefined)
24
+ body.chainId = chainId;
24
25
  const res = (await vincentPost('/api/secrets', null, body));
25
- const apiKey = res.apiKey;
26
- const keyId = res.apiKeyId || res.id;
26
+ const { secret, apiKey: apiKeyObj, claimUrl } = res.data;
27
+ const apiKey = apiKeyObj.key;
28
+ const keyId = apiKeyObj.id;
29
+ const secretId = secret.id;
27
30
  storeKey({
28
31
  id: keyId,
29
32
  apiKey,
30
33
  type,
31
34
  memo,
32
- secretId: res.secretId || res.id,
35
+ secretId,
33
36
  createdAt: new Date().toISOString(),
34
37
  });
35
38
  console.log(JSON.stringify({
36
39
  keyId,
37
- claimUrl: res.claimUrl,
38
- address: res.address,
39
- secretId: res.secretId || res.id,
40
+ claimUrl,
41
+ secretId,
40
42
  }, null, 2));
41
43
  }
@@ -1,5 +1,6 @@
1
1
  import { parseArgs, getOptional, hasFlag, showHelp } from '../../lib/args.js';
2
2
  import { listKeys } from '../../lib/keystore.js';
3
+ import { validateSecretType } from '../../lib/types.js';
3
4
  export async function run(argv) {
4
5
  const { flags } = parseArgs(argv);
5
6
  if (hasFlag(flags, 'help')) {
@@ -11,7 +12,8 @@ export async function run(argv) {
11
12
  ]);
12
13
  return;
13
14
  }
14
- const type = getOptional(flags, 'type');
15
+ const rawType = getOptional(flags, 'type');
16
+ const type = rawType !== undefined ? validateSecretType(rawType) : undefined;
15
17
  const keys = listKeys(type);
16
18
  console.log(JSON.stringify(keys.map((k) => ({ id: k.id, type: k.type, memo: k.memo, createdAt: k.createdAt })), null, 2));
17
19
  }
@@ -14,8 +14,7 @@ export async function run(argv) {
14
14
  relinkToken: token,
15
15
  apiKeyName: 'Re-linked API Key',
16
16
  }));
17
- const secret = res.secret;
18
- const apiKeyObj = res.apiKey;
17
+ const { secret, apiKey: apiKeyObj } = res.data;
19
18
  const apiKey = apiKeyObj.key;
20
19
  const keyId = apiKeyObj.id;
21
20
  const type = secret.type;
@@ -1,4 +1,4 @@
1
- import { parseArgs, getRequired, getOptional, hasFlag, showHelp } from '../../lib/args.js';
1
+ import { parseArgs, getRequired, getRequiredNumber, getNumber, hasFlag, showHelp, } from '../../lib/args.js';
2
2
  import { resolveApiKey } from '../../lib/keystore.js';
3
3
  import { vincentPost } from '../../lib/client.js';
4
4
  export async function run(argv) {
@@ -23,12 +23,12 @@ export async function run(argv) {
23
23
  marketId: getRequired(flags, 'market-id'),
24
24
  tokenId: getRequired(flags, 'token-id'),
25
25
  ruleType: getRequired(flags, 'rule-type'),
26
- triggerPrice: Number(getRequired(flags, 'trigger-price')),
26
+ triggerPrice: getRequiredNumber(flags, 'trigger-price'),
27
27
  action: { type: 'SELL_ALL' },
28
28
  };
29
- const trailingPercent = getOptional(flags, 'trailing-percent');
30
- if (trailingPercent)
31
- body.trailingPercent = Number(trailingPercent);
29
+ const trailingPercent = getNumber(flags, 'trailing-percent');
30
+ if (trailingPercent !== undefined)
31
+ body.trailingPercent = trailingPercent;
32
32
  const res = await vincentPost('/api/skills/polymarket/rules', apiKey, body);
33
33
  console.log(JSON.stringify(res, null, 2));
34
34
  }
@@ -1,4 +1,4 @@
1
- import { parseArgs, getRequired, hasFlag, showHelp } from '../../lib/args.js';
1
+ import { parseArgs, getRequired, getRequiredNumber, hasFlag, showHelp } from '../../lib/args.js';
2
2
  import { resolveApiKey } from '../../lib/keystore.js';
3
3
  import { vincentPatch } from '../../lib/client.js';
4
4
  export async function run(argv) {
@@ -14,7 +14,7 @@ export async function run(argv) {
14
14
  const apiKey = resolveApiKey(flags, 'POLYMARKET_WALLET');
15
15
  const ruleId = getRequired(flags, 'rule-id');
16
16
  const res = await vincentPatch(`/api/skills/polymarket/rules/${ruleId}`, apiKey, {
17
- triggerPrice: Number(getRequired(flags, 'trigger-price')),
17
+ triggerPrice: getRequiredNumber(flags, 'trigger-price'),
18
18
  });
19
19
  console.log(JSON.stringify(res, null, 2));
20
20
  }
@@ -1,4 +1,4 @@
1
- import { parseArgs, getRequired, getOptional, hasFlag, showHelp } from '../../lib/args.js';
1
+ import { parseArgs, getRequired, getRequiredNumber, getNumber, hasFlag, showHelp, } from '../../lib/args.js';
2
2
  import { resolveApiKey } from '../../lib/keystore.js';
3
3
  import { vincentPost } from '../../lib/client.js';
4
4
  export async function run(argv) {
@@ -24,12 +24,12 @@ export async function run(argv) {
24
24
  sellToken: getRequired(flags, 'sell-token'),
25
25
  buyToken: getRequired(flags, 'buy-token'),
26
26
  sellAmount: getRequired(flags, 'sell-amount'),
27
- chainId: Number(getRequired(flags, 'chain-id')),
27
+ chainId: getRequiredNumber(flags, 'chain-id'),
28
28
  };
29
29
  if (subcommand === 'execute') {
30
- const slippage = getOptional(flags, 'slippage');
31
- if (slippage)
32
- body.slippageBps = Number(slippage);
30
+ const slippage = getNumber(flags, 'slippage');
31
+ if (slippage !== undefined)
32
+ body.slippageBps = slippage;
33
33
  }
34
34
  const res = await vincentPost(`/api/skills/evm-wallet/swap/${subcommand}`, apiKey, body);
35
35
  console.log(JSON.stringify(res, null, 2));
@@ -1,4 +1,4 @@
1
- import { parseArgs, getRequired, getOptional, hasFlag, showHelp } from '../../lib/args.js';
1
+ import { parseArgs, getRequired, getRequiredNumber, getNumber, hasFlag, showHelp, } from '../../lib/args.js';
2
2
  import { resolveApiKey } from '../../lib/keystore.js';
3
3
  import { vincentPost, vincentGet } from '../../lib/client.js';
4
4
  export async function run(argv) {
@@ -43,15 +43,15 @@ export async function run(argv) {
43
43
  }
44
44
  const body = {
45
45
  toSecretId: getRequired(flags, 'to-secret-id'),
46
- fromChainId: Number(getRequired(flags, 'from-chain')),
47
- toChainId: Number(getRequired(flags, 'to-chain')),
46
+ fromChainId: getRequiredNumber(flags, 'from-chain'),
47
+ toChainId: getRequiredNumber(flags, 'to-chain'),
48
48
  tokenIn: getRequired(flags, 'token-in'),
49
49
  tokenInAmount: getRequired(flags, 'amount'),
50
50
  tokenOut: getRequired(flags, 'token-out'),
51
51
  };
52
- const slippage = getOptional(flags, 'slippage');
53
- if (slippage)
54
- body.slippage = Number(slippage);
52
+ const slippage = getNumber(flags, 'slippage');
53
+ if (slippage !== undefined)
54
+ body.slippage = slippage;
55
55
  const res = await vincentPost(`/api/skills/evm-wallet/transfer-between-secrets/${subcommand}`, apiKey, body);
56
56
  console.log(JSON.stringify(res, null, 2));
57
57
  }
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ const require = createRequire(import.meta.url);
4
+ const pkg = require('../package.json');
2
5
  const COMMANDS = {
3
6
  secret: {
4
7
  create: () => import('./commands/secret/create.js'),
@@ -74,7 +77,7 @@ async function main() {
74
77
  process.exit(0);
75
78
  }
76
79
  if (argv[0] === '--version' || argv[0] === '-v') {
77
- console.log('0.1.0');
80
+ console.log(pkg.version);
78
81
  process.exit(0);
79
82
  }
80
83
  const group = argv[0];
@@ -108,4 +111,3 @@ main().catch((err) => {
108
111
  console.error(`Error: ${message}`);
109
112
  process.exit(1);
110
113
  });
111
- export {};
@@ -26,9 +26,10 @@ async function request(method, path, apiKey, body) {
26
26
  data = text;
27
27
  }
28
28
  if (!res.ok) {
29
+ const err = data?.error;
29
30
  const msg = typeof data === 'object' && data !== null
30
31
  ? data.message ||
31
- data.error ||
32
+ (typeof err === 'string' ? err : err?.message) ||
32
33
  text
33
34
  : text;
34
35
  console.error(`API error (${res.status}): ${msg}`);
@@ -22,7 +22,7 @@ export function storeKey(keyData) {
22
22
  const dir = getDirForType(keyData.type);
23
23
  mkdirSync(dir, { recursive: true });
24
24
  const filePath = join(dir, `${keyData.id}.json`);
25
- writeFileSync(filePath, JSON.stringify(keyData, null, 2) + '\n');
25
+ writeFileSync(filePath, JSON.stringify(keyData, null, 2) + '\n', { mode: 0o600 });
26
26
  }
27
27
  export function getKey(keyId) {
28
28
  const root = getCredentialsRoot();
package/dist/lib/types.js CHANGED
@@ -1 +1,13 @@
1
- export {};
1
+ const VALID_SECRET_TYPES = [
2
+ 'EVM_WALLET',
3
+ 'POLYMARKET_WALLET',
4
+ 'RAW_SIGNER',
5
+ 'DATA_SOURCES',
6
+ ];
7
+ export function validateSecretType(value) {
8
+ if (!VALID_SECRET_TYPES.includes(value)) {
9
+ console.error(`Invalid secret type "${value}". Expected one of: ${VALID_SECRET_TYPES.join(', ')}`);
10
+ process.exit(1);
11
+ }
12
+ return value;
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vincentai/cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "CLI for Vincent AI agent skills",
5
5
  "type": "module",
6
6
  "bin": {