suzi-cli 0.1.1 → 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.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # suzi
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAccountsCommand(program: Command): void;
3
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/commands/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsFpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+P9D"}
@@ -0,0 +1,310 @@
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.registerAccountsCommand = registerAccountsCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const config_1 = require("../lib/config");
11
+ const api_1 = require("../lib/api");
12
+ const ui_1 = require("../utils/ui");
13
+ // Name match takes priority over ID prefix match
14
+ function resolveAccount(nameOrId, accounts) {
15
+ if (!nameOrId.trim())
16
+ return null;
17
+ const exactName = accounts.filter(a => a.name.toLowerCase() === nameOrId.toLowerCase());
18
+ if (exactName.length === 1)
19
+ return exactName[0];
20
+ if (exactName.length > 1)
21
+ return exactName;
22
+ const idPrefix = accounts.filter(a => a.id.toLowerCase().startsWith(nameOrId.toLowerCase()));
23
+ if (idPrefix.length === 1)
24
+ return idPrefix[0];
25
+ if (idPrefix.length > 1)
26
+ return idPrefix;
27
+ return null;
28
+ }
29
+ async function pickAccount(matches, action) {
30
+ const { picked } = await inquirer_1.default.prompt([
31
+ {
32
+ type: 'list',
33
+ name: 'picked',
34
+ message: `Multiple accounts match. Which one do you want to ${action}?`,
35
+ choices: matches.map(a => ({ name: `${a.name} (${(0, ui_1.truncateAddress)(a.evmWalletAddress, 4)})`, value: a })),
36
+ },
37
+ ]);
38
+ return picked;
39
+ }
40
+ async function resolveOrPick(nameOrId, accounts, action) {
41
+ const match = resolveAccount(nameOrId, accounts);
42
+ if (!match) {
43
+ (0, ui_1.error)(`No account matching "${nameOrId}".`);
44
+ (0, ui_1.info)('Run `suzi accounts` to see available accounts.');
45
+ return null;
46
+ }
47
+ if (Array.isArray(match)) {
48
+ return pickAccount(match, action);
49
+ }
50
+ return match;
51
+ }
52
+ async function fetchAccounts() {
53
+ const resp = await (0, api_1.get)('/api/accounts');
54
+ if (!resp.ok) {
55
+ (0, ui_1.error)(`Failed to fetch accounts: ${resp.data?.error || resp.status}`);
56
+ return null;
57
+ }
58
+ const accounts = resp.data.accounts || [];
59
+ const config = (0, config_1.getConfig)();
60
+ (0, config_1.setAccounts)(accounts);
61
+ return { accounts, activeAccountId: config.activeAccountId };
62
+ }
63
+ async function refreshAccountCache() {
64
+ const result = await fetchAccounts();
65
+ if (!result) {
66
+ (0, ui_1.info)('Warning: could not refresh local account cache. Run `suzi accounts` to sync.');
67
+ }
68
+ }
69
+ function validateName(name) {
70
+ const trimmed = name.trim();
71
+ if (trimmed.length < 1 || trimmed.length > 64) {
72
+ return 'Account name must be between 1 and 64 characters.';
73
+ }
74
+ return null;
75
+ }
76
+ function withSpinner(spinner, fn) {
77
+ return fn().catch((err) => {
78
+ spinner.fail();
79
+ (0, ui_1.error)(err.message || 'An unexpected error occurred.');
80
+ throw err;
81
+ });
82
+ }
83
+ function registerAccountsCommand(program) {
84
+ const accounts = program
85
+ .command('accounts')
86
+ .description('Manage accounts (wallets)');
87
+ // suzi accounts / suzi accounts list -- list all accounts
88
+ const listAction = async () => {
89
+ if (!(0, ui_1.requireAuth)())
90
+ return;
91
+ const spinner = (0, ora_1.default)('Fetching accounts...').start();
92
+ try {
93
+ const result = await withSpinner(spinner, fetchAccounts);
94
+ spinner.stop();
95
+ if (!result)
96
+ return;
97
+ const { accounts: accts, activeAccountId } = result;
98
+ if (accts.length === 0) {
99
+ (0, ui_1.info)('No accounts found. Create one with `suzi accounts create <name>`.');
100
+ return;
101
+ }
102
+ (0, ui_1.header)('Accounts');
103
+ console.log();
104
+ for (const acct of accts) {
105
+ const isActive = acct.id === activeAccountId;
106
+ const marker = isActive ? chalk_1.default.green('●') : chalk_1.default.gray('○');
107
+ const name = isActive ? chalk_1.default.bold(acct.name) : acct.name;
108
+ const tag = isActive ? ui_1.colors.primary(' (active)') : '';
109
+ console.log(` ${marker} ${name}${tag}`);
110
+ (0, ui_1.label)(' EVM', (0, ui_1.truncateAddress)(acct.evmWalletAddress));
111
+ (0, ui_1.label)(' SOL', (0, ui_1.truncateAddress)(acct.svmWalletAddress));
112
+ console.log();
113
+ }
114
+ (0, ui_1.divider)();
115
+ (0, ui_1.info)(`${accts.length} account${accts.length === 1 ? '' : 's'} total.`);
116
+ (0, ui_1.info)('Use `suzi accounts switch <name>` to change active account.');
117
+ }
118
+ catch {
119
+ // Error already displayed by withSpinner
120
+ }
121
+ };
122
+ accounts.action(listAction);
123
+ accounts.command('list').description('List all accounts').action(listAction);
124
+ // suzi accounts switch <name>
125
+ accounts
126
+ .command('switch <name>')
127
+ .description('Switch active account')
128
+ .action(async (name) => {
129
+ if (!(0, ui_1.requireAuth)())
130
+ return;
131
+ const spinner = (0, ora_1.default)('Fetching accounts...').start();
132
+ try {
133
+ const result = await withSpinner(spinner, fetchAccounts);
134
+ spinner.stop();
135
+ if (!result)
136
+ return;
137
+ const { accounts: accts, activeAccountId } = result;
138
+ const account = await resolveOrPick(name, accts, 'switch to');
139
+ if (!account)
140
+ return;
141
+ if (account.id === activeAccountId) {
142
+ (0, ui_1.info)(`"${account.name}" is already the active account.`);
143
+ return;
144
+ }
145
+ const switchSpinner = (0, ora_1.default)(`Switching to "${account.name}"...`).start();
146
+ const resp = await withSpinner(switchSpinner, () => (0, api_1.post)(`/api/accounts/${account.id}/switch`));
147
+ switchSpinner.stop();
148
+ if (!resp.ok) {
149
+ (0, ui_1.error)(`Failed to switch: ${resp.data?.error || resp.status}`);
150
+ return;
151
+ }
152
+ const switched = resp.data.account;
153
+ (0, config_1.setToken)(resp.data.accessToken);
154
+ (0, config_1.setActiveAccountId)(switched.id);
155
+ await refreshAccountCache();
156
+ (0, ui_1.success)(`Switched to "${switched.name}"`);
157
+ (0, ui_1.label)(' EVM', (0, ui_1.truncateAddress)(switched.evmWalletAddress));
158
+ (0, ui_1.label)(' SOL', (0, ui_1.truncateAddress)(switched.svmWalletAddress));
159
+ }
160
+ catch {
161
+ // Error already displayed by withSpinner
162
+ }
163
+ });
164
+ // suzi accounts create <name>
165
+ accounts
166
+ .command('create <name>')
167
+ .description('Create a new account')
168
+ .action(async (name) => {
169
+ if (!(0, ui_1.requireAuth)())
170
+ return;
171
+ const nameErr = validateName(name);
172
+ if (nameErr) {
173
+ (0, ui_1.error)(nameErr);
174
+ return;
175
+ }
176
+ const spinner = (0, ora_1.default)(`Creating account "${name.trim()}"...`).start();
177
+ try {
178
+ const resp = await withSpinner(spinner, () => (0, api_1.post)('/api/accounts', { name: name.trim() }));
179
+ spinner.stop();
180
+ if (!resp.ok) {
181
+ (0, ui_1.error)(`Failed to create account: ${resp.data?.error || resp.status}`);
182
+ return;
183
+ }
184
+ const created = resp.data.account;
185
+ (0, ui_1.success)(`Created account "${created.name}"`);
186
+ (0, ui_1.label)(' EVM', (0, ui_1.truncateAddress)(created.evmWalletAddress));
187
+ (0, ui_1.label)(' SOL', (0, ui_1.truncateAddress)(created.svmWalletAddress));
188
+ console.log();
189
+ const { shouldSwitch } = await inquirer_1.default.prompt([
190
+ {
191
+ type: 'confirm',
192
+ name: 'shouldSwitch',
193
+ message: `Switch to "${created.name}" now?`,
194
+ default: true,
195
+ },
196
+ ]);
197
+ if (shouldSwitch) {
198
+ const switchSpinner = (0, ora_1.default)('Switching...').start();
199
+ const switchResp = await withSpinner(switchSpinner, () => (0, api_1.post)(`/api/accounts/${created.id}/switch`));
200
+ switchSpinner.stop();
201
+ if (!switchResp.ok) {
202
+ (0, ui_1.error)(`Failed to switch: ${switchResp.data?.error || switchResp.status}`);
203
+ // fall through to refreshAccountCache below
204
+ }
205
+ else {
206
+ (0, config_1.setToken)(switchResp.data.accessToken);
207
+ (0, config_1.setActiveAccountId)(switchResp.data.account.id);
208
+ (0, ui_1.success)(`Switched to "${switchResp.data.account.name}"`);
209
+ }
210
+ }
211
+ await refreshAccountCache();
212
+ }
213
+ catch {
214
+ // Error already displayed by withSpinner
215
+ }
216
+ });
217
+ // suzi accounts rename <name> <newName>
218
+ accounts
219
+ .command('rename <name> <newName>')
220
+ .description('Rename an account')
221
+ .action(async (name, newName) => {
222
+ if (!(0, ui_1.requireAuth)())
223
+ return;
224
+ const nameErr = validateName(newName);
225
+ if (nameErr) {
226
+ (0, ui_1.error)(nameErr);
227
+ return;
228
+ }
229
+ const spinner = (0, ora_1.default)('Fetching accounts...').start();
230
+ try {
231
+ const result = await withSpinner(spinner, fetchAccounts);
232
+ spinner.stop();
233
+ if (!result)
234
+ return;
235
+ const { accounts: accts } = result;
236
+ const account = await resolveOrPick(name, accts, 'rename');
237
+ if (!account)
238
+ return;
239
+ const renameSpinner = (0, ora_1.default)(`Renaming to "${newName.trim()}"...`).start();
240
+ const resp = await withSpinner(renameSpinner, () => (0, api_1.put)(`/api/accounts/${account.id}`, { name: newName.trim() }));
241
+ renameSpinner.stop();
242
+ if (!resp.ok) {
243
+ (0, ui_1.error)(`Failed to rename: ${resp.data?.error || resp.status}`);
244
+ return;
245
+ }
246
+ await refreshAccountCache();
247
+ (0, ui_1.success)(`Renamed "${account.name}" → "${resp.data.account.name}"`);
248
+ }
249
+ catch {
250
+ // Error already displayed by withSpinner
251
+ }
252
+ });
253
+ // suzi accounts delete <name>
254
+ accounts
255
+ .command('delete <name>')
256
+ .description('Delete an account')
257
+ .option('-f, --force', 'Skip confirmation')
258
+ .action(async (name, opts) => {
259
+ if (!(0, ui_1.requireAuth)())
260
+ return;
261
+ const spinner = (0, ora_1.default)('Fetching accounts...').start();
262
+ try {
263
+ const result = await withSpinner(spinner, fetchAccounts);
264
+ spinner.stop();
265
+ if (!result)
266
+ return;
267
+ const { accounts: accts, activeAccountId } = result;
268
+ if (accts.length === 1) {
269
+ (0, ui_1.error)('Cannot delete your only account. Create another account first.');
270
+ (0, ui_1.info)('Use `suzi accounts create <name>` to create a new account.');
271
+ return;
272
+ }
273
+ const account = await resolveOrPick(name, accts, 'delete');
274
+ if (!account)
275
+ return;
276
+ if (account.id === activeAccountId) {
277
+ (0, ui_1.error)('Cannot delete the active account. Switch to another account first.');
278
+ (0, ui_1.info)('Use `suzi accounts switch <name>` to change accounts.');
279
+ return;
280
+ }
281
+ if (!opts.force) {
282
+ const { confirmed } = await inquirer_1.default.prompt([
283
+ {
284
+ type: 'confirm',
285
+ name: 'confirmed',
286
+ message: `Delete account "${account.name}"? This cannot be undone.`,
287
+ default: false,
288
+ },
289
+ ]);
290
+ if (!confirmed) {
291
+ (0, ui_1.info)('Cancelled.');
292
+ return;
293
+ }
294
+ }
295
+ const deleteSpinner = (0, ora_1.default)(`Deleting "${account.name}"...`).start();
296
+ const resp = await withSpinner(deleteSpinner, () => (0, api_1.del)(`/api/accounts/${account.id}`));
297
+ deleteSpinner.stop();
298
+ if (!resp.ok) {
299
+ (0, ui_1.error)(`Failed to delete: ${resp.data?.error || resp.status}`);
300
+ return;
301
+ }
302
+ await refreshAccountCache();
303
+ (0, ui_1.success)(`Deleted account "${account.name}".`);
304
+ }
305
+ catch {
306
+ // Error already displayed by withSpinner
307
+ }
308
+ });
309
+ }
310
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/commands/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerCreateCommand(program: Command): void;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8E5D"}
@@ -0,0 +1,148 @@
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.registerCreateCommand = registerCreateCommand;
7
+ const child_process_1 = require("child_process");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const ui_1 = require("../utils/ui");
12
+ const suzi_guide_1 = require("../lib/suzi-guide");
13
+ const AGENT_TS_TEMPLATE = `export default defineAgent({
14
+ meta: {
15
+ name: 'My Agent',
16
+ version: '0.1.0',
17
+ },
18
+ resources: {
19
+ wallet: resource.wallet('evm'),
20
+ },
21
+ lifecycle: {
22
+ onActivate: async (ctx) => {
23
+ await ctx.actions.suzi.log({ message: 'Agent activated' });
24
+ },
25
+ onDeactivate: async (ctx) => {
26
+ await ctx.actions.suzi.log({ message: 'Agent deactivated' });
27
+ },
28
+ },
29
+ triggers: {
30
+ manual: on.suzi.manual(async (ctx, input) => {
31
+ await ctx.actions.suzi.log({ message: 'Agent executed manually' });
32
+ return { ok: true };
33
+ }),
34
+ },
35
+ });
36
+ `;
37
+ function buildSuziSystemPrompt() {
38
+ return `<suzi-agent-creator>
39
+ 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.
40
+
41
+ The working directory contains an agent.ts template file. Help the user modify it to match their needs.
42
+
43
+ <suzi-guide>
44
+ ${suzi_guide_1.SUZI_GUIDE_CONTENT}
45
+ </suzi-guide>
46
+
47
+ <rules>
48
+ - Agent code MUST default-export defineAgent({...})
49
+ - No imports allowed — agent code is self-contained
50
+ - The runtime provides defineAgent, on, resource, config, requirement as globals
51
+ - Use ctx.actions.<protocol>.<action>() for all external calls
52
+ - Always include at least one trigger
53
+ - Use ctx.actions.suzi.log() for debugging
54
+ - To discover available protocols and actions, run: suzi list-tools --verbose
55
+ - To discover actions for a specific protocol, run: suzi list-tools --protocol <name>
56
+ </rules>
57
+
58
+ <workflow>
59
+ After the agent.ts file is ready, instruct the user to:
60
+ 1. suzi deploy ./agent.ts — deploy the agent to Suzi
61
+ 2. suzi agents activate <id> — activate it (the deploy output shows the agent ID)
62
+ 3. suzi agents execute <id> — test it with a manual execution
63
+ 4. suzi agents logs <id> — check the execution logs
64
+ </workflow>
65
+ </suzi-agent-creator>`;
66
+ }
67
+ function isClaudeAvailable() {
68
+ try {
69
+ const cmd = process.platform === 'win32' ? 'where claude' : 'which claude';
70
+ (0, child_process_1.execSync)(cmd, { stdio: 'ignore' });
71
+ return true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ function registerCreateCommand(program) {
78
+ program
79
+ .command('create [dir]')
80
+ .description('Create an agent with AI assistance (launches Claude Code)')
81
+ .option('--no-scaffold', 'Skip agent.ts template creation')
82
+ .action(async (dir, opts) => {
83
+ const workingDir = path_1.default.resolve(process.cwd(), dir || './my-agent');
84
+ const shouldScaffold = opts?.scaffold !== false;
85
+ // Check that claude CLI is available
86
+ if (!isClaudeAvailable()) {
87
+ console.log();
88
+ (0, ui_1.error)('Claude Code is required but not found in PATH.');
89
+ console.log();
90
+ console.log(` Install it with:`);
91
+ console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white('npm install -g @anthropic-ai/claude-code')}`);
92
+ console.log();
93
+ (0, ui_1.info)('Learn more: https://docs.anthropic.com/en/docs/claude-code');
94
+ process.exit(1);
95
+ }
96
+ // Ensure working directory exists
97
+ if (!fs_1.default.existsSync(workingDir)) {
98
+ fs_1.default.mkdirSync(workingDir, { recursive: true });
99
+ }
100
+ const agentPath = path_1.default.join(workingDir, 'agent.ts');
101
+ const agentExists = fs_1.default.existsSync(agentPath);
102
+ // Scaffold agent.ts template
103
+ if (shouldScaffold && !agentExists) {
104
+ fs_1.default.writeFileSync(agentPath, AGENT_TS_TEMPLATE);
105
+ (0, ui_1.success)(`Created agent.ts template at ${path_1.default.relative(process.cwd(), agentPath)}`);
106
+ }
107
+ else if (agentExists) {
108
+ (0, ui_1.info)(`Using existing agent.ts at ${path_1.default.relative(process.cwd(), agentPath)}`);
109
+ }
110
+ console.log();
111
+ (0, ui_1.divider)();
112
+ console.log();
113
+ console.log(` ${chalk_1.default.bold('Starting AI-assisted agent creation...')}`);
114
+ console.log(` ${ui_1.colors.muted(`Working directory: ${workingDir}`)}`);
115
+ console.log(` ${ui_1.colors.muted('Type your agent idea and Claude will build it for you.')}`);
116
+ console.log(` ${ui_1.colors.muted('Press Ctrl+C to exit at any time.')}`);
117
+ console.log();
118
+ // Spawn claude with suzi context appended to system prompt
119
+ const args = [
120
+ '--append-system-prompt',
121
+ buildSuziSystemPrompt(),
122
+ ];
123
+ const child = (0, child_process_1.spawn)('claude', args, {
124
+ stdio: 'inherit',
125
+ cwd: workingDir,
126
+ env: { ...process.env },
127
+ });
128
+ child.on('error', (err) => {
129
+ (0, ui_1.error)(`Failed to start Claude Code: ${err.message}`);
130
+ process.exit(1);
131
+ });
132
+ child.on('exit', (code) => {
133
+ console.log();
134
+ if (fs_1.default.existsSync(agentPath)) {
135
+ (0, ui_1.divider)();
136
+ console.log();
137
+ console.log(chalk_1.default.bold(' Next steps:'));
138
+ console.log();
139
+ console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white(`suzi deploy ${path_1.default.relative(process.cwd(), agentPath)}`)}`);
140
+ console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white('suzi agents activate <id>')}`);
141
+ console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white('suzi agents execute <id>')}`);
142
+ console.log();
143
+ }
144
+ process.exit(code ?? 0);
145
+ });
146
+ });
147
+ }
148
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-tools.d.ts","sourceRoot":"","sources":["../../src/commands/list-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8GpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmE/D"}
1
+ {"version":3,"file":"list-tools.d.ts","sourceRoot":"","sources":["../../src/commands/list-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0GpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqI/D"}