suzi-cli 0.1.4 → 0.1.6
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/CLAUDE.md +2 -2
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +117 -20
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +19 -0
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +295 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/feedback.d.ts +3 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +113 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/list-triggers.d.ts +3 -0
- package/dist/commands/list-triggers.d.ts.map +1 -0
- package/dist/commands/list-triggers.js +150 -0
- package/dist/commands/list-triggers.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +55 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/share.d.ts +3 -0
- package/dist/commands/share.d.ts.map +1 -0
- package/dist/commands/share.js +233 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +30 -31
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +164 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.js +58 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +13 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/history.d.ts +11 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +94 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/skills.d.ts +20 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +73 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/suzi-guide.d.ts +1 -1
- package/dist/lib/suzi-guide.d.ts.map +1 -1
- package/dist/lib/suzi-guide.js +27 -8
- package/dist/lib/suzi-guide.js.map +1 -1
- package/package.json +1 -1
package/CLAUDE.md
CHANGED
|
@@ -45,11 +45,11 @@ src/
|
|
|
45
45
|
├── wallet.ts # Wallet subcommands (balance, fund, address)
|
|
46
46
|
├── agents.ts # Agent CRUD, execute, logs
|
|
47
47
|
├── deploy.ts # Deploy .ts agent files to API
|
|
48
|
-
├── create.ts # AI-assisted agent creation (
|
|
48
|
+
├── create.ts # AI-assisted agent creation (supports Claude Code + Codex)
|
|
49
49
|
├── accounts.ts # Multi-account switching
|
|
50
50
|
├── transactions.ts # Transaction history viewer
|
|
51
51
|
├── list-tools.ts # Browse protocols/actions with local caching
|
|
52
|
-
├── skills.ts # Claude Code
|
|
52
|
+
├── skills.ts # Skill installation for Claude Code + Codex
|
|
53
53
|
├── import.ts # Clone shared agents
|
|
54
54
|
├── subagents.ts # Agent template scaffolding
|
|
55
55
|
├── portfolio.ts # Portfolio overview
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA8B,MAAM,WAAW,CAAC;AA2KhE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmI5D"}
|
package/dist/commands/create.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.registerCreateCommand = registerCreateCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
7
8
|
const child_process_1 = require("child_process");
|
|
8
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
10
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -11,6 +12,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
11
12
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
12
13
|
const ui_1 = require("../utils/ui");
|
|
13
14
|
const suzi_guide_1 = require("../lib/suzi-guide");
|
|
15
|
+
const config_1 = require("../lib/config");
|
|
14
16
|
const AGENT_TS_TEMPLATE = `export default defineAgent({
|
|
15
17
|
meta: {
|
|
16
18
|
name: 'My Agent',
|
|
@@ -39,7 +41,7 @@ function buildSuziSystemPrompt() {
|
|
|
39
41
|
return `<suzi-agent-creator>
|
|
40
42
|
You are helping the user create a Suzi autonomous agent. You have full knowledge of the Suzi platform, its CLI, and the agent DSL. Your job is to help the user write an agent.ts file that implements their desired strategy or automation.
|
|
41
43
|
|
|
42
|
-
The working directory contains an agent.ts template file.
|
|
44
|
+
The working directory contains an agent.ts template file and an AGENTS.md instruction file. Follow AGENTS.md while helping the user modify agent.ts.
|
|
43
45
|
|
|
44
46
|
<suzi-guide>
|
|
45
47
|
${suzi_guide_1.SUZI_GUIDE_CONTENT}
|
|
@@ -65,9 +67,59 @@ After the agent.ts file is ready, instruct the user to:
|
|
|
65
67
|
</workflow>
|
|
66
68
|
</suzi-agent-creator>`;
|
|
67
69
|
}
|
|
68
|
-
function
|
|
70
|
+
function buildCodexInitialPrompt() {
|
|
71
|
+
return [
|
|
72
|
+
'You are helping the user create a Suzi autonomous agent in this directory.',
|
|
73
|
+
'Always follow AGENTS.md in this project.',
|
|
74
|
+
'Use the Suzi skill context (`$suzi-guide`) for Suzi-specific CLI and agent DSL guidance.',
|
|
75
|
+
'Update `agent.ts` based on the user\'s strategy and keep it self-contained with no imports.',
|
|
76
|
+
].join(' ');
|
|
77
|
+
}
|
|
78
|
+
const AGENTS_MD_TEMPLATE = `# AGENTS.md
|
|
79
|
+
|
|
80
|
+
This directory contains a Suzi agent project.
|
|
81
|
+
|
|
82
|
+
When assisting in this directory:
|
|
83
|
+
- Prefer using Suzi skill context (\`$suzi-guide\`) for platform-specific behavior.
|
|
84
|
+
- Keep agent code in \`agent.ts\` self-contained.
|
|
85
|
+
- Agent files must default-export \`defineAgent({...})\`.
|
|
86
|
+
- Do not add imports in \`agent.ts\` (runtime globals are provided).
|
|
87
|
+
- Ensure at least one trigger exists before finishing.
|
|
88
|
+
- Use \`ctx.actions.suzi.log()\` for debugging logs.
|
|
89
|
+
|
|
90
|
+
Useful commands:
|
|
91
|
+
- \`suzi list-tools --verbose\` to discover protocols/actions
|
|
92
|
+
- \`suzi deploy ./agent.ts\` to deploy
|
|
93
|
+
- \`suzi agents activate <id>\` to activate
|
|
94
|
+
- \`suzi agents execute <id>\` to test
|
|
95
|
+
- \`suzi agents logs <id>\` to inspect logs
|
|
96
|
+
`;
|
|
97
|
+
const AI_PROVIDERS = {
|
|
98
|
+
claude: {
|
|
99
|
+
command: 'claude',
|
|
100
|
+
displayName: 'Claude Code',
|
|
101
|
+
docsUrl: 'https://docs.anthropic.com/en/docs/claude-code',
|
|
102
|
+
installCommand: 'npm install -g @anthropic-ai/claude-code',
|
|
103
|
+
buildArgs: () => ['--append-system-prompt', buildSuziSystemPrompt()],
|
|
104
|
+
},
|
|
105
|
+
codex: {
|
|
106
|
+
command: 'codex',
|
|
107
|
+
displayName: 'Codex',
|
|
108
|
+
docsUrl: 'https://developers.openai.com/codex/cli',
|
|
109
|
+
installCommand: 'npm install -g @openai/codex',
|
|
110
|
+
buildArgs: () => [buildCodexInitialPrompt()],
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
function parseAiProvider(input) {
|
|
114
|
+
const normalized = input.trim().toLowerCase();
|
|
115
|
+
if (normalized === 'claude' || normalized === 'codex') {
|
|
116
|
+
return normalized;
|
|
117
|
+
}
|
|
118
|
+
throw new commander_1.InvalidOptionArgumentError('AI provider must be one of: claude, codex');
|
|
119
|
+
}
|
|
120
|
+
function isCommandAvailable(command) {
|
|
69
121
|
try {
|
|
70
|
-
const cmd = process.platform === 'win32' ?
|
|
122
|
+
const cmd = process.platform === 'win32' ? `where ${command}` : `which ${command}`;
|
|
71
123
|
(0, child_process_1.execSync)(cmd, { stdio: 'ignore' });
|
|
72
124
|
return true;
|
|
73
125
|
}
|
|
@@ -75,11 +127,45 @@ function isClaudeAvailable() {
|
|
|
75
127
|
return false;
|
|
76
128
|
}
|
|
77
129
|
}
|
|
130
|
+
function getInstallHelpLines() {
|
|
131
|
+
return (Object.values(AI_PROVIDERS)).map((provider) => ` ${ui_1.colors.primary('$')} ${chalk_1.default.white(provider.installCommand)} ${ui_1.colors.muted(`(${provider.displayName})`)}`);
|
|
132
|
+
}
|
|
133
|
+
function ensureAgentsFile(workingDir) {
|
|
134
|
+
const agentsPath = path_1.default.join(workingDir, 'AGENTS.md');
|
|
135
|
+
if (!fs_1.default.existsSync(agentsPath)) {
|
|
136
|
+
fs_1.default.writeFileSync(agentsPath, AGENTS_MD_TEMPLATE);
|
|
137
|
+
(0, ui_1.success)(`Created AGENTS.md at ${path_1.default.relative(process.cwd(), agentsPath)}`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
(0, ui_1.info)(`Using existing AGENTS.md at ${path_1.default.relative(process.cwd(), agentsPath)}`);
|
|
141
|
+
}
|
|
142
|
+
return agentsPath;
|
|
143
|
+
}
|
|
144
|
+
function resolveProvider(explicitProvider) {
|
|
145
|
+
if (explicitProvider)
|
|
146
|
+
return AI_PROVIDERS[explicitProvider];
|
|
147
|
+
const configured = (0, config_1.getDefaultAi)();
|
|
148
|
+
if (configured)
|
|
149
|
+
return AI_PROVIDERS[configured];
|
|
150
|
+
return AI_PROVIDERS.claude;
|
|
151
|
+
}
|
|
78
152
|
function registerCreateCommand(program) {
|
|
79
|
-
program
|
|
80
|
-
.command('create
|
|
81
|
-
.description('Create an agent with AI assistance (
|
|
153
|
+
const create = program
|
|
154
|
+
.command('create')
|
|
155
|
+
.description('Create an agent with AI assistance (Claude Code or Codex)');
|
|
156
|
+
create
|
|
157
|
+
.argument('[dir]')
|
|
82
158
|
.option('--no-scaffold', 'Skip agent.ts template creation')
|
|
159
|
+
.option('--ai <provider>', 'AI provider to use (claude|codex)', parseAiProvider)
|
|
160
|
+
.addHelpText('after', [
|
|
161
|
+
'',
|
|
162
|
+
'Examples:',
|
|
163
|
+
` ${ui_1.colors.primary('$')} suzi create`,
|
|
164
|
+
` ${ui_1.colors.primary('$')} suzi create --ai codex`,
|
|
165
|
+
` ${ui_1.colors.primary('$')} suzi create default --ai codex`,
|
|
166
|
+
` ${ui_1.colors.primary('$')} suzi create ./default ${ui_1.colors.muted('# Create a directory literally named "default"')}`,
|
|
167
|
+
'',
|
|
168
|
+
].join('\n'))
|
|
83
169
|
.action(async (dir, opts) => {
|
|
84
170
|
let agentName;
|
|
85
171
|
if (dir) {
|
|
@@ -108,21 +194,25 @@ function registerCreateCommand(program) {
|
|
|
108
194
|
}
|
|
109
195
|
const workingDir = path_1.default.resolve(process.cwd(), agentName);
|
|
110
196
|
const shouldScaffold = opts?.scaffold !== false;
|
|
111
|
-
|
|
112
|
-
|
|
197
|
+
const provider = resolveProvider(opts?.ai);
|
|
198
|
+
// Check that selected CLI is available
|
|
199
|
+
if (!isCommandAvailable(provider.command)) {
|
|
113
200
|
console.log();
|
|
114
|
-
(0, ui_1.error)(
|
|
201
|
+
(0, ui_1.error)(`${provider.displayName} is required but not found in PATH.`);
|
|
115
202
|
console.log();
|
|
116
|
-
console.log(
|
|
117
|
-
|
|
203
|
+
console.log(' Install one of the supported AI CLIs:');
|
|
204
|
+
for (const line of getInstallHelpLines()) {
|
|
205
|
+
console.log(line);
|
|
206
|
+
}
|
|
118
207
|
console.log();
|
|
119
|
-
(0, ui_1.info)(
|
|
208
|
+
(0, ui_1.info)(`Selected provider docs: ${provider.docsUrl}`);
|
|
120
209
|
process.exit(1);
|
|
121
210
|
}
|
|
122
211
|
// Ensure working directory exists
|
|
123
212
|
if (!fs_1.default.existsSync(workingDir)) {
|
|
124
213
|
fs_1.default.mkdirSync(workingDir, { recursive: true });
|
|
125
214
|
}
|
|
215
|
+
ensureAgentsFile(workingDir);
|
|
126
216
|
const agentPath = path_1.default.join(workingDir, 'agent.ts');
|
|
127
217
|
const agentExists = fs_1.default.existsSync(agentPath);
|
|
128
218
|
// Scaffold agent.ts template
|
|
@@ -142,21 +232,18 @@ function registerCreateCommand(program) {
|
|
|
142
232
|
console.log();
|
|
143
233
|
console.log(` ${chalk_1.default.bold('Starting AI-assisted agent creation...')}`);
|
|
144
234
|
console.log(` ${ui_1.colors.muted(`Working directory: ${workingDir}`)}`);
|
|
145
|
-
console.log(` ${ui_1.colors.muted(
|
|
235
|
+
console.log(` ${ui_1.colors.muted(`AI provider: ${provider.displayName}`)}`);
|
|
236
|
+
console.log(` ${ui_1.colors.muted(`Type your agent idea and ${provider.displayName} will build it for you.`)}`);
|
|
146
237
|
console.log(` ${ui_1.colors.muted('Press Ctrl+C to exit at any time.')}`);
|
|
147
238
|
console.log();
|
|
148
|
-
|
|
149
|
-
const
|
|
150
|
-
'--append-system-prompt',
|
|
151
|
-
buildSuziSystemPrompt(),
|
|
152
|
-
];
|
|
153
|
-
const child = (0, child_process_1.spawn)('claude', args, {
|
|
239
|
+
const args = provider.buildArgs();
|
|
240
|
+
const child = (0, child_process_1.spawn)(provider.command, args, {
|
|
154
241
|
stdio: 'inherit',
|
|
155
242
|
cwd: workingDir,
|
|
156
243
|
env: { ...process.env },
|
|
157
244
|
});
|
|
158
245
|
child.on('error', (err) => {
|
|
159
|
-
(0, ui_1.error)(`Failed to start
|
|
246
|
+
(0, ui_1.error)(`Failed to start ${provider.displayName}: ${err.message}`);
|
|
160
247
|
process.exit(1);
|
|
161
248
|
});
|
|
162
249
|
child.on('exit', (code) => {
|
|
@@ -174,5 +261,15 @@ function registerCreateCommand(program) {
|
|
|
174
261
|
process.exit(code ?? 0);
|
|
175
262
|
});
|
|
176
263
|
});
|
|
264
|
+
create
|
|
265
|
+
.command('default')
|
|
266
|
+
.description('Set your default AI provider for `suzi create`')
|
|
267
|
+
.requiredOption('--ai <provider>', 'Default AI provider (claude|codex)', parseAiProvider)
|
|
268
|
+
.action((opts) => {
|
|
269
|
+
(0, config_1.setDefaultAi)(opts.ai);
|
|
270
|
+
const provider = AI_PROVIDERS[opts.ai];
|
|
271
|
+
(0, ui_1.success)(`Default AI set to ${chalk_1.default.bold(provider.displayName)}.`);
|
|
272
|
+
(0, ui_1.info)('This applies to `suzi create` when --ai is not provided.');
|
|
273
|
+
});
|
|
177
274
|
}
|
|
178
275
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+K5D"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.registerDeployCommand = registerDeployCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
7
8
|
const ora_1 = __importDefault(require("ora"));
|
|
8
9
|
const fs_1 = __importDefault(require("fs"));
|
|
9
10
|
const path_1 = __importDefault(require("path"));
|
|
@@ -121,6 +122,24 @@ function registerDeployCommand(program) {
|
|
|
121
122
|
(0, ui_1.label)('Triggers', Object.keys(spec.triggers).join(', '));
|
|
122
123
|
}
|
|
123
124
|
}
|
|
125
|
+
// Show action validation warnings
|
|
126
|
+
if (agent.actionValidation?.issues?.length > 0) {
|
|
127
|
+
console.log();
|
|
128
|
+
(0, ui_1.warn)('Action validation issues:');
|
|
129
|
+
for (const issue of agent.actionValidation.issues) {
|
|
130
|
+
if (issue.type === 'unknown_protocol') {
|
|
131
|
+
console.log(` ${ui_1.colors.warning('⚠')} Unknown protocol: ${chalk_1.default.bold(issue.protocol)} ${ui_1.colors.muted(`(line ${issue.line})`)}`);
|
|
132
|
+
}
|
|
133
|
+
else if (issue.type === 'unknown_action') {
|
|
134
|
+
console.log(` ${ui_1.colors.warning('⚠')} Unknown action: ${chalk_1.default.bold(issue.protocol + '.' + issue.action)} ${ui_1.colors.muted(`(line ${issue.line})`)}`);
|
|
135
|
+
}
|
|
136
|
+
if (issue.suggestions?.length > 0) {
|
|
137
|
+
console.log(` ${ui_1.colors.muted('Did you mean:')} ${issue.suggestions.join(', ')}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
console.log();
|
|
141
|
+
(0, ui_1.info)('Run `suzi validate` for detailed validation.');
|
|
142
|
+
}
|
|
124
143
|
// Activate if requested
|
|
125
144
|
if (opts?.activate) {
|
|
126
145
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":";;;;;AASA,
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6QzD"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerEnvCommand = registerEnvCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
11
|
+
const api_1 = require("../lib/api");
|
|
12
|
+
const ui_1 = require("../utils/ui");
|
|
13
|
+
const NAME_REGEX = /^[A-Z][A-Z0-9_]*$/;
|
|
14
|
+
function withSpinner(spinner, fn) {
|
|
15
|
+
return fn().catch((err) => {
|
|
16
|
+
spinner.fail();
|
|
17
|
+
(0, ui_1.error)(err.message || 'An unexpected error occurred.');
|
|
18
|
+
throw err;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function formatDate(iso) {
|
|
22
|
+
const d = new Date(iso);
|
|
23
|
+
return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
|
|
24
|
+
}
|
|
25
|
+
function displayTable(vars) {
|
|
26
|
+
const table = new cli_table3_1.default({
|
|
27
|
+
head: [
|
|
28
|
+
chalk_1.default.gray('Name'),
|
|
29
|
+
chalk_1.default.gray('Scope'),
|
|
30
|
+
chalk_1.default.gray('Created'),
|
|
31
|
+
],
|
|
32
|
+
style: { head: [], border: ['gray'] },
|
|
33
|
+
});
|
|
34
|
+
for (const v of vars) {
|
|
35
|
+
table.push([
|
|
36
|
+
chalk_1.default.bold(v.name),
|
|
37
|
+
v.agentId ? `Agent ${v.agentId.slice(0, 8)}...` : 'User',
|
|
38
|
+
formatDate(v.createdAt),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
console.log(table.toString());
|
|
42
|
+
}
|
|
43
|
+
async function fetchEnvVars(agentId) {
|
|
44
|
+
const path = agentId ? `/api/env-vars/agent/${agentId}` : '/api/env-vars';
|
|
45
|
+
const resp = await (0, api_1.get)(path);
|
|
46
|
+
if (!resp.ok) {
|
|
47
|
+
(0, ui_1.error)(`Failed to fetch environment variables: ${resp.data?.error || resp.status}`);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return resp.data.envVars || [];
|
|
51
|
+
}
|
|
52
|
+
function registerEnvCommand(program) {
|
|
53
|
+
const env = program
|
|
54
|
+
.command('env')
|
|
55
|
+
.description('Manage environment variables');
|
|
56
|
+
// suzi env (bare) — interactive mode
|
|
57
|
+
env.action(async () => {
|
|
58
|
+
if (!(0, ui_1.requireAuth)())
|
|
59
|
+
return;
|
|
60
|
+
const spinner = (0, ora_1.default)('Fetching environment variables...').start();
|
|
61
|
+
try {
|
|
62
|
+
const vars = await withSpinner(spinner, () => fetchEnvVars());
|
|
63
|
+
spinner.stop();
|
|
64
|
+
if (vars === null)
|
|
65
|
+
return;
|
|
66
|
+
(0, ui_1.header)('Environment Variables');
|
|
67
|
+
console.log();
|
|
68
|
+
if (vars.length > 0) {
|
|
69
|
+
displayTable(vars);
|
|
70
|
+
console.log();
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
(0, ui_1.info)('No environment variables set.');
|
|
74
|
+
console.log();
|
|
75
|
+
}
|
|
76
|
+
// Interactive menu
|
|
77
|
+
const { action } = await inquirer_1.default.prompt([
|
|
78
|
+
{
|
|
79
|
+
type: 'list',
|
|
80
|
+
name: 'action',
|
|
81
|
+
message: 'What would you like to do?',
|
|
82
|
+
choices: [
|
|
83
|
+
{ name: 'Set a variable', value: 'set' },
|
|
84
|
+
{ name: 'Remove a variable', value: 'remove' },
|
|
85
|
+
new inquirer_1.default.Separator(),
|
|
86
|
+
{ name: chalk_1.default.gray('Done'), value: 'done' },
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
]);
|
|
90
|
+
if (action === 'done')
|
|
91
|
+
return;
|
|
92
|
+
if (action === 'set') {
|
|
93
|
+
const { name } = await inquirer_1.default.prompt([
|
|
94
|
+
{
|
|
95
|
+
type: 'input',
|
|
96
|
+
name: 'name',
|
|
97
|
+
message: 'Variable name (e.g. MY_API_KEY):',
|
|
98
|
+
validate: (input) => {
|
|
99
|
+
if (!NAME_REGEX.test(input)) {
|
|
100
|
+
return 'Must start with A-Z and contain only A-Z, 0-9, _ (e.g. MY_API_KEY)';
|
|
101
|
+
}
|
|
102
|
+
return true;
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
]);
|
|
106
|
+
const { value } = await inquirer_1.default.prompt([
|
|
107
|
+
{
|
|
108
|
+
type: 'password',
|
|
109
|
+
name: 'value',
|
|
110
|
+
message: `Value for ${chalk_1.default.bold(name)}:`,
|
|
111
|
+
mask: '*',
|
|
112
|
+
validate: (input) => input.length > 0 || 'Value cannot be empty',
|
|
113
|
+
},
|
|
114
|
+
]);
|
|
115
|
+
const { agentId } = await inquirer_1.default.prompt([
|
|
116
|
+
{
|
|
117
|
+
type: 'input',
|
|
118
|
+
name: 'agentId',
|
|
119
|
+
message: 'Agent ID (leave empty for user-level):',
|
|
120
|
+
},
|
|
121
|
+
]);
|
|
122
|
+
const body = { name, value };
|
|
123
|
+
if (agentId.trim())
|
|
124
|
+
body.agentId = agentId.trim();
|
|
125
|
+
const setSpinner = (0, ora_1.default)(`Setting ${name}...`).start();
|
|
126
|
+
const resp = await withSpinner(setSpinner, () => (0, api_1.post)('/api/env-vars', body));
|
|
127
|
+
setSpinner.stop();
|
|
128
|
+
if (!resp.ok) {
|
|
129
|
+
(0, ui_1.error)(`Failed to set variable: ${resp.data?.error || resp.status}`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
(0, ui_1.success)(`Set ${chalk_1.default.bold(name)}${body.agentId ? ` for agent ${body.agentId.slice(0, 8)}...` : ''}`);
|
|
133
|
+
}
|
|
134
|
+
if (action === 'remove') {
|
|
135
|
+
if (vars.length === 0) {
|
|
136
|
+
(0, ui_1.info)('No variables to remove.');
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const { selected } = await inquirer_1.default.prompt([
|
|
140
|
+
{
|
|
141
|
+
type: 'list',
|
|
142
|
+
name: 'selected',
|
|
143
|
+
message: 'Select a variable to remove:',
|
|
144
|
+
choices: [
|
|
145
|
+
...vars.map(v => ({
|
|
146
|
+
name: `${v.name}${v.agentId ? ` (agent ${v.agentId.slice(0, 8)}...)` : ''}`,
|
|
147
|
+
value: v,
|
|
148
|
+
})),
|
|
149
|
+
new inquirer_1.default.Separator(),
|
|
150
|
+
{ name: chalk_1.default.gray('Cancel'), value: null },
|
|
151
|
+
],
|
|
152
|
+
},
|
|
153
|
+
]);
|
|
154
|
+
if (!selected)
|
|
155
|
+
return;
|
|
156
|
+
const { confirmed } = await inquirer_1.default.prompt([
|
|
157
|
+
{
|
|
158
|
+
type: 'confirm',
|
|
159
|
+
name: 'confirmed',
|
|
160
|
+
message: `Remove ${chalk_1.default.bold(selected.name)}? This cannot be undone.`,
|
|
161
|
+
default: false,
|
|
162
|
+
},
|
|
163
|
+
]);
|
|
164
|
+
if (!confirmed) {
|
|
165
|
+
(0, ui_1.info)('Cancelled.');
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const delSpinner = (0, ora_1.default)(`Removing ${selected.name}...`).start();
|
|
169
|
+
const resp = await withSpinner(delSpinner, () => (0, api_1.del)(`/api/env-vars/${selected.id}`));
|
|
170
|
+
delSpinner.stop();
|
|
171
|
+
if (!resp.ok) {
|
|
172
|
+
(0, ui_1.error)(`Failed to remove variable: ${resp.data?.error || resp.status}`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
(0, ui_1.success)(`Removed ${chalk_1.default.bold(selected.name)}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// Error already displayed by withSpinner
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// suzi env list [--agent <id>]
|
|
183
|
+
env
|
|
184
|
+
.command('list')
|
|
185
|
+
.description('List environment variable names')
|
|
186
|
+
.option('-a, --agent <id>', 'Scope to a specific agent')
|
|
187
|
+
.action(async (opts) => {
|
|
188
|
+
if (!(0, ui_1.requireAuth)())
|
|
189
|
+
return;
|
|
190
|
+
const spinner = (0, ora_1.default)('Fetching environment variables...').start();
|
|
191
|
+
try {
|
|
192
|
+
const vars = await withSpinner(spinner, () => fetchEnvVars(opts.agent));
|
|
193
|
+
spinner.stop();
|
|
194
|
+
if (vars === null)
|
|
195
|
+
return;
|
|
196
|
+
if (vars.length === 0) {
|
|
197
|
+
(0, ui_1.info)('No environment variables found.');
|
|
198
|
+
(0, ui_1.info)('Set one with `suzi env set MY_KEY`.');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
(0, ui_1.header)(opts.agent ? `Environment Variables (Agent ${opts.agent.slice(0, 8)}...)` : 'Environment Variables');
|
|
202
|
+
console.log();
|
|
203
|
+
displayTable(vars);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Error already displayed by withSpinner
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
// suzi env set <KEY> [--agent <id>]
|
|
210
|
+
env
|
|
211
|
+
.command('set <key>')
|
|
212
|
+
.description('Set an environment variable (prompts for value)')
|
|
213
|
+
.option('-a, --agent <id>', 'Scope to a specific agent')
|
|
214
|
+
.action(async (key, opts) => {
|
|
215
|
+
if (!(0, ui_1.requireAuth)())
|
|
216
|
+
return;
|
|
217
|
+
if (!NAME_REGEX.test(key)) {
|
|
218
|
+
(0, ui_1.error)('Invalid variable name. Must start with A-Z and contain only A-Z, 0-9, _ (e.g. MY_API_KEY)');
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const { value } = await inquirer_1.default.prompt([
|
|
222
|
+
{
|
|
223
|
+
type: 'password',
|
|
224
|
+
name: 'value',
|
|
225
|
+
message: `Value for ${chalk_1.default.bold(key)}:`,
|
|
226
|
+
mask: '*',
|
|
227
|
+
validate: (input) => input.length > 0 || 'Value cannot be empty',
|
|
228
|
+
},
|
|
229
|
+
]);
|
|
230
|
+
const body = { name: key, value };
|
|
231
|
+
if (opts.agent)
|
|
232
|
+
body.agentId = opts.agent;
|
|
233
|
+
const spinner = (0, ora_1.default)(`Setting ${key}...`).start();
|
|
234
|
+
try {
|
|
235
|
+
const resp = await withSpinner(spinner, () => (0, api_1.post)('/api/env-vars', body));
|
|
236
|
+
spinner.stop();
|
|
237
|
+
if (!resp.ok) {
|
|
238
|
+
(0, ui_1.error)(`Failed to set variable: ${resp.data?.error || resp.status}`);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
(0, ui_1.success)(`Set ${chalk_1.default.bold(key)}${opts.agent ? ` for agent ${opts.agent.slice(0, 8)}...` : ''}`);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// Error already displayed by withSpinner
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
// suzi env remove <KEY> [--agent <id>]
|
|
248
|
+
env
|
|
249
|
+
.command('remove <key>')
|
|
250
|
+
.description('Remove an environment variable')
|
|
251
|
+
.option('-a, --agent <id>', 'Scope to a specific agent')
|
|
252
|
+
.action(async (key, opts) => {
|
|
253
|
+
if (!(0, ui_1.requireAuth)())
|
|
254
|
+
return;
|
|
255
|
+
const spinner = (0, ora_1.default)('Fetching environment variables...').start();
|
|
256
|
+
try {
|
|
257
|
+
const vars = await withSpinner(spinner, () => fetchEnvVars(opts.agent));
|
|
258
|
+
spinner.stop();
|
|
259
|
+
if (vars === null)
|
|
260
|
+
return;
|
|
261
|
+
const match = vars.find(v => v.name === key);
|
|
262
|
+
if (!match) {
|
|
263
|
+
(0, ui_1.error)(`Variable "${key}" not found.`);
|
|
264
|
+
if (vars.length > 0) {
|
|
265
|
+
(0, ui_1.info)(`Available variables: ${vars.map(v => v.name).join(', ')}`);
|
|
266
|
+
}
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const { confirmed } = await inquirer_1.default.prompt([
|
|
270
|
+
{
|
|
271
|
+
type: 'confirm',
|
|
272
|
+
name: 'confirmed',
|
|
273
|
+
message: `Remove ${chalk_1.default.bold(key)}? This cannot be undone.`,
|
|
274
|
+
default: false,
|
|
275
|
+
},
|
|
276
|
+
]);
|
|
277
|
+
if (!confirmed) {
|
|
278
|
+
(0, ui_1.info)('Cancelled.');
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const delSpinner = (0, ora_1.default)(`Removing ${key}...`).start();
|
|
282
|
+
const resp = await withSpinner(delSpinner, () => (0, api_1.del)(`/api/env-vars/${match.id}`));
|
|
283
|
+
delSpinner.stop();
|
|
284
|
+
if (!resp.ok) {
|
|
285
|
+
(0, ui_1.error)(`Failed to remove variable: ${resp.data?.error || resp.status}`);
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
(0, ui_1.success)(`Removed ${chalk_1.default.bold(key)}`);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
// Error already displayed by withSpinner
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"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"}
|