@castari/cli 0.1.10 → 0.2.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.
- package/bin/cast.js +2 -0
- package/dist/commands/agents.d.ts +6 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +174 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/apikey.d.ts +6 -0
- package/dist/commands/apikey.d.ts.map +1 -0
- package/dist/commands/apikey.js +57 -0
- package/dist/commands/apikey.js.map +1 -0
- package/dist/commands/deploy.d.ts +3 -3
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +24 -64
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/invoke.d.ts +3 -0
- package/dist/commands/invoke.d.ts.map +1 -0
- package/dist/commands/invoke.js +50 -0
- package/dist/commands/invoke.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +123 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +16 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/secrets.d.ts +6 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +90 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/stop.d.ts +3 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +25 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/usage.d.ts +3 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +76 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +27 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -34
- package/dist/index.js.map +1 -0
- package/dist/utils/errors.d.ts +6 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +42 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/output.d.ts +45 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +75 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +55 -35
- package/LICENSE +0 -21
- package/README.md +0 -131
- package/dist/commands/client-id.d.ts +0 -1
- package/dist/commands/client-id.js +0 -25
- package/dist/commands/dev.d.ts +0 -1
- package/dist/commands/dev.js +0 -17
- package/dist/commands/generate-secrets.d.ts +0 -1
- package/dist/commands/generate-secrets.js +0 -60
- package/dist/commands/init.d.ts +0 -5
- package/dist/commands/init.js +0 -883
- package/dist/commands/start.d.ts +0 -5
- package/dist/commands/start.js +0 -100
- package/dist/utils/client-auth.d.ts +0 -11
- package/dist/utils/client-auth.js +0 -21
- package/dist/utils/client-id.d.ts +0 -10
- package/dist/utils/client-id.js +0 -36
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { CastariClient } from '@castari/sdk';
|
|
5
|
+
import { info, hint, blank } from '../utils/output.js';
|
|
6
|
+
import { handleError } from '../utils/errors.js';
|
|
7
|
+
/**
|
|
8
|
+
* cast secrets list <slug>
|
|
9
|
+
*/
|
|
10
|
+
const listCommand = new Command('list')
|
|
11
|
+
.description('List secret keys for an agent')
|
|
12
|
+
.argument('<slug>', 'Agent slug')
|
|
13
|
+
.action(async (slug) => {
|
|
14
|
+
const spinner = ora('Fetching secrets...').start();
|
|
15
|
+
try {
|
|
16
|
+
const client = new CastariClient();
|
|
17
|
+
await client.ensureAuthenticated();
|
|
18
|
+
const secrets = await client.agents.listSecrets(slug);
|
|
19
|
+
spinner.stop();
|
|
20
|
+
if (secrets.length === 0) {
|
|
21
|
+
info(`No secrets set for agent '${slug}'`);
|
|
22
|
+
hint(`Set one with: cast secrets set ${slug} <key> <value>`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
blank();
|
|
26
|
+
console.log(chalk.bold(`Secrets for '${slug}':`));
|
|
27
|
+
blank();
|
|
28
|
+
for (const secret of secrets) {
|
|
29
|
+
console.log(` ${chalk.cyan('•')} ${secret.key}`);
|
|
30
|
+
}
|
|
31
|
+
blank();
|
|
32
|
+
info('Note: Secret values are never displayed for security');
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
spinner.fail('Failed to list secrets');
|
|
36
|
+
handleError(err);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* cast secrets set <slug> <key> <value>
|
|
41
|
+
*/
|
|
42
|
+
const setCommand = new Command('set')
|
|
43
|
+
.description('Set a secret for an agent')
|
|
44
|
+
.argument('<slug>', 'Agent slug')
|
|
45
|
+
.argument('<key>', 'Secret key (e.g., API_KEY)')
|
|
46
|
+
.argument('<value>', 'Secret value')
|
|
47
|
+
.action(async (slug, key, value) => {
|
|
48
|
+
const spinner = ora('Setting secret...').start();
|
|
49
|
+
try {
|
|
50
|
+
const client = new CastariClient();
|
|
51
|
+
await client.ensureAuthenticated();
|
|
52
|
+
await client.agents.setSecret(slug, key, value);
|
|
53
|
+
spinner.succeed(`Secret '${key}' set for agent '${slug}'`);
|
|
54
|
+
hint('Redeploy the agent to apply changes');
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
spinner.fail('Failed to set secret');
|
|
58
|
+
handleError(err);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* cast secrets delete <slug> <key>
|
|
63
|
+
*/
|
|
64
|
+
const deleteCommand = new Command('delete')
|
|
65
|
+
.description('Delete a secret from an agent')
|
|
66
|
+
.argument('<slug>', 'Agent slug')
|
|
67
|
+
.argument('<key>', 'Secret key to delete')
|
|
68
|
+
.action(async (slug, key) => {
|
|
69
|
+
const spinner = ora('Deleting secret...').start();
|
|
70
|
+
try {
|
|
71
|
+
const client = new CastariClient();
|
|
72
|
+
await client.ensureAuthenticated();
|
|
73
|
+
await client.agents.deleteSecret(slug, key);
|
|
74
|
+
spinner.succeed(`Secret '${key}' deleted from agent '${slug}'`);
|
|
75
|
+
hint('Redeploy the agent to apply changes');
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
spinner.fail('Failed to delete secret');
|
|
79
|
+
handleError(err);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* cast secrets
|
|
84
|
+
*/
|
|
85
|
+
export const secretsCommand = new Command('secrets')
|
|
86
|
+
.description('Manage agent secrets')
|
|
87
|
+
.addCommand(listCommand)
|
|
88
|
+
.addCommand(setCommand)
|
|
89
|
+
.addCommand(deleteCommand);
|
|
90
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SAoBpB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { CastariClient } from '@castari/sdk';
|
|
4
|
+
import { keyValue, blank } from '../utils/output.js';
|
|
5
|
+
import { handleError } from '../utils/errors.js';
|
|
6
|
+
export const stopCommand = new Command('stop')
|
|
7
|
+
.description('Stop a running agent')
|
|
8
|
+
.argument('<slug>', 'Agent slug')
|
|
9
|
+
.action(async (slug) => {
|
|
10
|
+
const spinner = ora(`Stopping ${slug}...`).start();
|
|
11
|
+
try {
|
|
12
|
+
const client = new CastariClient();
|
|
13
|
+
await client.ensureAuthenticated();
|
|
14
|
+
const agent = await client.agents.stop(slug);
|
|
15
|
+
spinner.succeed(`Agent '${slug}' stopped`);
|
|
16
|
+
blank();
|
|
17
|
+
keyValue('Status', agent.status);
|
|
18
|
+
blank();
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
spinner.fail('Failed to stop agent');
|
|
22
|
+
handleError(err);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAW,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,sBAAsB,CAAC;KACnC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;KAChC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC;QAC3C,KAAK,EAAE,CAAC;QACR,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,EAAE,CAAC;IACV,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SAkFrB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import Table from 'cli-table3';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { CastariClient } from '@castari/sdk';
|
|
6
|
+
import { blank, formatNumber, formatCost, header } from '../utils/output.js';
|
|
7
|
+
import { handleError } from '../utils/errors.js';
|
|
8
|
+
export const usageCommand = new Command('usage')
|
|
9
|
+
.description('Show usage statistics')
|
|
10
|
+
.option('-d, --days <days>', 'Number of days to show (default: 30)', '30')
|
|
11
|
+
.option('--daily', 'Show daily breakdown')
|
|
12
|
+
.action(async (options) => {
|
|
13
|
+
const spinner = ora('Fetching usage data...').start();
|
|
14
|
+
try {
|
|
15
|
+
const client = new CastariClient();
|
|
16
|
+
await client.ensureAuthenticated();
|
|
17
|
+
const days = parseInt(options.days, 10);
|
|
18
|
+
if (options.daily) {
|
|
19
|
+
// Show daily breakdown
|
|
20
|
+
const dailyUsage = await client.usage.daily({ days });
|
|
21
|
+
spinner.stop();
|
|
22
|
+
blank();
|
|
23
|
+
header(`Usage (last ${days} days)`);
|
|
24
|
+
blank();
|
|
25
|
+
if (dailyUsage.length === 0) {
|
|
26
|
+
console.log(chalk.gray(' No usage data available'));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const table = new Table({
|
|
30
|
+
head: [
|
|
31
|
+
chalk.white('Date'),
|
|
32
|
+
chalk.white('Invocations'),
|
|
33
|
+
chalk.white('Input Tokens'),
|
|
34
|
+
chalk.white('Output Tokens'),
|
|
35
|
+
chalk.white('Cost'),
|
|
36
|
+
],
|
|
37
|
+
style: {
|
|
38
|
+
head: [],
|
|
39
|
+
border: [],
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
for (const day of dailyUsage) {
|
|
43
|
+
table.push([
|
|
44
|
+
day.date,
|
|
45
|
+
formatNumber(day.invocation_count),
|
|
46
|
+
formatNumber(day.input_tokens),
|
|
47
|
+
formatNumber(day.output_tokens),
|
|
48
|
+
formatCost(day.cost_usd),
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
console.log(table.toString());
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Show summary
|
|
55
|
+
const summary = await client.usage.summary({ days });
|
|
56
|
+
spinner.stop();
|
|
57
|
+
blank();
|
|
58
|
+
header(`Usage Summary (last ${days} days)`);
|
|
59
|
+
blank();
|
|
60
|
+
const table = new Table({
|
|
61
|
+
style: {
|
|
62
|
+
head: [],
|
|
63
|
+
border: [],
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
table.push([chalk.gray('Total Invocations'), formatNumber(summary.total_invocations)], [chalk.gray('Input Tokens'), formatNumber(summary.total_input_tokens)], [chalk.gray('Output Tokens'), formatNumber(summary.total_output_tokens)], [chalk.gray('Total Cost'), chalk.green(formatCost(summary.total_cost_usd))]);
|
|
67
|
+
console.log(table.toString());
|
|
68
|
+
blank();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
spinner.fail('Failed to fetch usage data');
|
|
73
|
+
handleError(err);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAqBtB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { CastariClient } from '@castari/sdk';
|
|
4
|
+
import { keyValue, blank } from '../utils/output.js';
|
|
5
|
+
import { handleError } from '../utils/errors.js';
|
|
6
|
+
export const whoamiCommand = new Command('whoami')
|
|
7
|
+
.description('Show current authenticated user')
|
|
8
|
+
.action(async () => {
|
|
9
|
+
const spinner = ora('Fetching user info...').start();
|
|
10
|
+
try {
|
|
11
|
+
const client = new CastariClient();
|
|
12
|
+
await client.ensureAuthenticated();
|
|
13
|
+
const user = await client.auth.me();
|
|
14
|
+
spinner.stop();
|
|
15
|
+
blank();
|
|
16
|
+
keyValue('Email', user.email);
|
|
17
|
+
keyValue('User ID', user.id);
|
|
18
|
+
keyValue('API Key', user.api_key_prefix ? `${user.api_key_prefix}...` : 'None');
|
|
19
|
+
keyValue('Created', new Date(user.created_at).toLocaleDateString());
|
|
20
|
+
blank();
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
spinner.fail('Failed to get user info');
|
|
24
|
+
handleError(err);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAEpC,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,EAAE,CAAC;QACR,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChF,QAAQ,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACpE,KAAK,EAAE,CAAC;IACV,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { loginCommand } from './commands/login.js';
|
|
4
|
+
import { logoutCommand } from './commands/logout.js';
|
|
5
|
+
import { whoamiCommand } from './commands/whoami.js';
|
|
6
|
+
import { apikeyCommand } from './commands/apikey.js';
|
|
7
|
+
import { agentsCommand } from './commands/agents.js';
|
|
8
|
+
import { deployCommand } from './commands/deploy.js';
|
|
9
|
+
import { stopCommand } from './commands/stop.js';
|
|
10
|
+
import { invokeCommand } from './commands/invoke.js';
|
|
11
|
+
import { secretsCommand } from './commands/secrets.js';
|
|
12
|
+
import { usageCommand } from './commands/usage.js';
|
|
13
|
+
const program = new Command();
|
|
14
|
+
program
|
|
15
|
+
.name('cast')
|
|
16
|
+
.description('Castari CLI - Deploy AI agents with one command')
|
|
17
|
+
.version('0.1.0');
|
|
18
|
+
// Auth commands
|
|
19
|
+
program.addCommand(loginCommand);
|
|
20
|
+
program.addCommand(logoutCommand);
|
|
21
|
+
program.addCommand(whoamiCommand);
|
|
22
|
+
program.addCommand(apikeyCommand);
|
|
23
|
+
// Agent management
|
|
24
|
+
program.addCommand(agentsCommand);
|
|
25
|
+
// Deployment
|
|
26
|
+
program.addCommand(deployCommand);
|
|
27
|
+
program.addCommand(stopCommand);
|
|
28
|
+
// Invocation
|
|
29
|
+
program.addCommand(invokeCommand);
|
|
30
|
+
// Secrets
|
|
31
|
+
program.addCommand(secretsCommand);
|
|
32
|
+
// Usage
|
|
33
|
+
program.addCommand(usageCommand);
|
|
34
|
+
// Parse arguments
|
|
35
|
+
program.parse();
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gBAAgB;AAChB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,mBAAmB;AACnB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,aAAa;AACb,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,aAAa;AACb,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,UAAU;AACV,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAEnC,QAAQ;AACR,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CA2B/C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CastariError, AuthenticationError, NotFoundError, RateLimitError, ValidationError, BadRequestError, } from '@castari/sdk';
|
|
2
|
+
import { error, hint } from './output.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handle an error and display a user-friendly message
|
|
5
|
+
* Exits the process with code 1
|
|
6
|
+
*/
|
|
7
|
+
export function handleError(err) {
|
|
8
|
+
if (err instanceof AuthenticationError) {
|
|
9
|
+
error('Authentication failed');
|
|
10
|
+
hint("Run 'cast login' to authenticate");
|
|
11
|
+
}
|
|
12
|
+
else if (err instanceof NotFoundError) {
|
|
13
|
+
error(err.message || 'Resource not found');
|
|
14
|
+
hint("Run 'cast agents list' to see your agents");
|
|
15
|
+
}
|
|
16
|
+
else if (err instanceof RateLimitError) {
|
|
17
|
+
error('Rate limit exceeded');
|
|
18
|
+
if (err.retryAfter) {
|
|
19
|
+
hint(`Try again in ${err.retryAfter} seconds`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
hint('Try again in a few moments');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else if (err instanceof ValidationError) {
|
|
26
|
+
error(`Validation error: ${err.message}`);
|
|
27
|
+
}
|
|
28
|
+
else if (err instanceof BadRequestError) {
|
|
29
|
+
error(`Bad request: ${err.message}`);
|
|
30
|
+
}
|
|
31
|
+
else if (err instanceof CastariError) {
|
|
32
|
+
error(err.message);
|
|
33
|
+
}
|
|
34
|
+
else if (err instanceof Error) {
|
|
35
|
+
error(err.message);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
error('An unexpected error occurred');
|
|
39
|
+
}
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;QACvC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/B,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;QAC3C,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QACzC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7B,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,GAAG,CAAC,UAAU,UAAU,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;QAC1C,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;QAC1C,KAAK,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;QACvC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Print a success message
|
|
3
|
+
*/
|
|
4
|
+
export declare function success(message: string): void;
|
|
5
|
+
/**
|
|
6
|
+
* Print an info message
|
|
7
|
+
*/
|
|
8
|
+
export declare function info(message: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Print a warning message
|
|
11
|
+
*/
|
|
12
|
+
export declare function warn(message: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Print an error message
|
|
15
|
+
*/
|
|
16
|
+
export declare function error(message: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Print a hint/suggestion
|
|
19
|
+
*/
|
|
20
|
+
export declare function hint(message: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Print a blank line
|
|
23
|
+
*/
|
|
24
|
+
export declare function blank(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Print a header
|
|
27
|
+
*/
|
|
28
|
+
export declare function header(title: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Print a key-value pair
|
|
31
|
+
*/
|
|
32
|
+
export declare function keyValue(key: string, value: string | number | undefined): void;
|
|
33
|
+
/**
|
|
34
|
+
* Format a number with commas
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatNumber(n: number): string;
|
|
37
|
+
/**
|
|
38
|
+
* Format a cost in USD
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatCost(usd: number): string;
|
|
41
|
+
/**
|
|
42
|
+
* Format a date string
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatDate(dateStr: string): string;
|
|
45
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASlD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Print a success message
|
|
4
|
+
*/
|
|
5
|
+
export function success(message) {
|
|
6
|
+
console.log(chalk.green('✓'), message);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Print an info message
|
|
10
|
+
*/
|
|
11
|
+
export function info(message) {
|
|
12
|
+
console.log(chalk.blue('ℹ'), message);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Print a warning message
|
|
16
|
+
*/
|
|
17
|
+
export function warn(message) {
|
|
18
|
+
console.log(chalk.yellow('⚠'), message);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Print an error message
|
|
22
|
+
*/
|
|
23
|
+
export function error(message) {
|
|
24
|
+
console.error(chalk.red('✗'), message);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Print a hint/suggestion
|
|
28
|
+
*/
|
|
29
|
+
export function hint(message) {
|
|
30
|
+
console.log(chalk.gray(' →'), chalk.gray(message));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Print a blank line
|
|
34
|
+
*/
|
|
35
|
+
export function blank() {
|
|
36
|
+
console.log();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Print a header
|
|
40
|
+
*/
|
|
41
|
+
export function header(title) {
|
|
42
|
+
console.log(chalk.bold(title));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Print a key-value pair
|
|
46
|
+
*/
|
|
47
|
+
export function keyValue(key, value) {
|
|
48
|
+
console.log(` ${chalk.gray(key + ':')} ${value ?? chalk.gray('N/A')}`);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Format a number with commas
|
|
52
|
+
*/
|
|
53
|
+
export function formatNumber(n) {
|
|
54
|
+
return n.toLocaleString();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format a cost in USD
|
|
58
|
+
*/
|
|
59
|
+
export function formatCost(usd) {
|
|
60
|
+
return `$${usd.toFixed(4)}`;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Format a date string
|
|
64
|
+
*/
|
|
65
|
+
export function formatDate(dateStr) {
|
|
66
|
+
const date = new Date(dateStr);
|
|
67
|
+
return date.toLocaleDateString('en-US', {
|
|
68
|
+
year: 'numeric',
|
|
69
|
+
month: 'short',
|
|
70
|
+
day: 'numeric',
|
|
71
|
+
hour: '2-digit',
|
|
72
|
+
minute: '2-digit',
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK;IACnB,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAkC;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,37 +1,57 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
2
|
+
"name": "@castari/cli",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Castari CLI - Deploy AI agents with one command",
|
|
5
|
+
"author": "Castari <hello@castari.dev>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/castari/cli.git",
|
|
10
|
+
"directory": "packages/cli"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://castari.dev",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/castari/cli/issues"
|
|
15
|
+
},
|
|
16
|
+
"type": "module",
|
|
17
|
+
"main": "dist/index.js",
|
|
18
|
+
"types": "dist/index.d.ts",
|
|
19
|
+
"bin": {
|
|
20
|
+
"cast": "./bin/cast.js"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc",
|
|
24
|
+
"test": "vitest run --passWithNoTests",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"clean": "rm -rf dist"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@castari/sdk": "workspace:*",
|
|
31
|
+
"chalk": "^5.3.0",
|
|
32
|
+
"cli-table3": "^0.6.0",
|
|
33
|
+
"commander": "^12.0.0",
|
|
34
|
+
"open": "^10.0.0",
|
|
35
|
+
"ora": "^8.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"typescript": "^5.3.0"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"bin"
|
|
43
|
+
],
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"keywords": [
|
|
48
|
+
"castari",
|
|
49
|
+
"ai",
|
|
50
|
+
"agents",
|
|
51
|
+
"cli",
|
|
52
|
+
"claude",
|
|
53
|
+
"anthropic",
|
|
54
|
+
"llm",
|
|
55
|
+
"deploy"
|
|
56
|
+
]
|
|
37
57
|
}
|