suzi-cli 0.1.4 → 0.1.5

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.
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerEnvCommand(program: Command): void;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFeedbackCommand(program: Command): void;
3
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkE9D"}
@@ -0,0 +1,113 @@
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.registerFeedbackCommand = registerFeedbackCommand;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const readline_1 = __importDefault(require("readline"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const api_1 = require("../lib/api");
12
+ const history_1 = require("../lib/history");
13
+ const ui_1 = require("../utils/ui");
14
+ const pkg = require('../../package.json');
15
+ const CATEGORIES = [
16
+ { name: `${ui_1.colors.error('●')} Bug Report`, value: 'bug' },
17
+ { name: `${ui_1.colors.warning('●')} Feature Request`, value: 'feature' },
18
+ { name: `${ui_1.colors.secondary('●')} General Feedback`, value: 'general' },
19
+ ];
20
+ function collectMultiLineInput() {
21
+ return new Promise((resolve) => {
22
+ const lines = [];
23
+ let hasContent = false;
24
+ console.log(ui_1.colors.muted(' Type your message below. Press Enter twice to submit (or Ctrl+D).'));
25
+ console.log();
26
+ const rl = readline_1.default.createInterface({
27
+ input: process.stdin,
28
+ output: process.stdout,
29
+ prompt: ' ',
30
+ });
31
+ rl.prompt();
32
+ rl.on('line', (line) => {
33
+ if (line.trim() === '' && hasContent) {
34
+ // Empty line after content: submit
35
+ rl.close();
36
+ return;
37
+ }
38
+ if (line.trim() !== '') {
39
+ hasContent = true;
40
+ }
41
+ lines.push(line);
42
+ rl.prompt();
43
+ });
44
+ rl.on('close', () => {
45
+ // Trim trailing empty lines
46
+ while (lines.length > 0 && lines[lines.length - 1].trim() === '') {
47
+ lines.pop();
48
+ }
49
+ resolve(lines.join('\n'));
50
+ });
51
+ });
52
+ }
53
+ function registerFeedbackCommand(program) {
54
+ program
55
+ .command('feedback')
56
+ .description('Send feedback to the Suzi team')
57
+ .option('-c, --category <category>', 'Feedback category (bug, feature, general)')
58
+ .option('-m, --message <message>', 'Feedback message (non-interactive)')
59
+ .action(async (opts) => {
60
+ if (!(0, ui_1.requireAuth)())
61
+ return;
62
+ (0, ui_1.header)('Send Feedback');
63
+ let category;
64
+ let message;
65
+ // Category selection
66
+ if (opts.category && ['bug', 'feature', 'general'].includes(opts.category)) {
67
+ category = opts.category;
68
+ }
69
+ else {
70
+ const answer = await inquirer_1.default.prompt([
71
+ {
72
+ type: 'list',
73
+ name: 'category',
74
+ message: 'What type of feedback?',
75
+ choices: CATEGORIES,
76
+ },
77
+ ]);
78
+ category = answer.category;
79
+ }
80
+ // Message input
81
+ if (opts.message) {
82
+ message = opts.message;
83
+ }
84
+ else {
85
+ console.log();
86
+ message = await collectMultiLineInput();
87
+ }
88
+ if (!message.trim()) {
89
+ (0, ui_1.error)('Feedback message cannot be empty.');
90
+ return;
91
+ }
92
+ console.log();
93
+ const spinner = (0, ora_1.default)('Sending feedback...').start();
94
+ const resp = await (0, api_1.post)('/api/feedback', {
95
+ category,
96
+ message: message.trim(),
97
+ cliHistory: (0, history_1.getRecentHistory)(20),
98
+ cliVersion: pkg.version,
99
+ platform: `${os_1.default.platform()} ${os_1.default.release()}`,
100
+ nodeVersion: process.version,
101
+ });
102
+ if (!resp.ok) {
103
+ spinner.fail();
104
+ (0, ui_1.error)(`Failed to send feedback: ${resp.data?.message || resp.data?.error || 'Unknown error'}`);
105
+ return;
106
+ }
107
+ spinner.succeed('Feedback sent!');
108
+ console.log();
109
+ (0, ui_1.success)('Thank you for your feedback! The Suzi team will review it.');
110
+ console.log();
111
+ });
112
+ }
113
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerShareCommand(program: Command): void;
3
+ //# sourceMappingURL=share.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsP3D"}
@@ -0,0 +1,233 @@
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.registerShareCommand = registerShareCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const cli_table3_1 = __importDefault(require("cli-table3"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const api_1 = require("../lib/api");
12
+ const ui_1 = require("../utils/ui");
13
+ function registerShareCommand(program) {
14
+ const share = program
15
+ .command('share')
16
+ .description('Share and manage shared agents');
17
+ // suzi share create [agentId] — create a shareable snapshot
18
+ share
19
+ .command('create [agentId]')
20
+ .description('Create a shareable link for an agent')
21
+ .option('-s, --slug <slug>', 'Custom slug for the share URL')
22
+ .option('-e, --expires <days>', 'Expiry in days')
23
+ .action(async (agentId, opts) => {
24
+ if (!(0, ui_1.requireAuth)())
25
+ return;
26
+ // If no agentId provided, fetch agents and let user pick
27
+ if (!agentId) {
28
+ const listSpinner = (0, ora_1.default)('Loading agents...').start();
29
+ let listResp;
30
+ try {
31
+ listResp = await (0, api_1.get)('/api/agent?limit=50');
32
+ }
33
+ catch (err) {
34
+ listSpinner.fail();
35
+ (0, ui_1.error)(`Network error: ${err.message}`);
36
+ return;
37
+ }
38
+ if (!listResp.ok) {
39
+ listSpinner.fail();
40
+ (0, ui_1.error)(`Failed to load agents: ${listResp.data?.error || 'Unknown error'}`);
41
+ return;
42
+ }
43
+ listSpinner.stop();
44
+ const agents = listResp.data.agents || [];
45
+ if (agents.length === 0) {
46
+ (0, ui_1.info)('No agents found. Create one with `suzi deploy <file>`.');
47
+ return;
48
+ }
49
+ const { selected } = await inquirer_1.default.prompt([
50
+ {
51
+ type: 'list',
52
+ name: 'selected',
53
+ message: 'Which agent do you want to share?',
54
+ choices: agents.map((a) => ({
55
+ name: `${a.title || 'Untitled'} ${ui_1.colors.muted(`(${a.id.slice(0, 8)}...)`)}`,
56
+ value: a.id,
57
+ })),
58
+ },
59
+ ]);
60
+ agentId = selected;
61
+ }
62
+ const body = {};
63
+ if (opts.slug)
64
+ body.customSlug = opts.slug;
65
+ if (opts.expires) {
66
+ const days = parseInt(opts.expires, 10);
67
+ if (isNaN(days) || days < 1) {
68
+ (0, ui_1.error)('--expires must be a positive number of days.');
69
+ return;
70
+ }
71
+ body.expiresInDays = days;
72
+ }
73
+ const spinner = (0, ora_1.default)('Creating share link...').start();
74
+ let resp;
75
+ try {
76
+ resp = await (0, api_1.post)(`/api/agent/${encodeURIComponent(agentId)}/share`, body);
77
+ }
78
+ catch (err) {
79
+ spinner.fail();
80
+ (0, ui_1.error)(`Network error: ${err.message}`);
81
+ return;
82
+ }
83
+ if (!resp.ok) {
84
+ spinner.fail();
85
+ (0, ui_1.error)(`Failed to share: ${resp.data?.message || resp.data?.error || 'Unknown error'}`);
86
+ return;
87
+ }
88
+ const snapshot = resp.data?.snapshot;
89
+ if (!snapshot) {
90
+ spinner.fail('Share created but returned no snapshot data.');
91
+ return;
92
+ }
93
+ spinner.succeed('Share link created!');
94
+ console.log();
95
+ (0, ui_1.label)('Slug', snapshot.slug);
96
+ if (snapshot.expiresAt) {
97
+ (0, ui_1.label)('Expires', new Date(snapshot.expiresAt).toLocaleString());
98
+ }
99
+ console.log();
100
+ (0, ui_1.divider)();
101
+ (0, ui_1.info)(`Import with: suzi import ${snapshot.slug}`);
102
+ });
103
+ // suzi share list — list user's shared agents
104
+ share
105
+ .command('list')
106
+ .alias('ls')
107
+ .description('List your shared agents')
108
+ .action(async () => {
109
+ if (!(0, ui_1.requireAuth)())
110
+ return;
111
+ const spinner = (0, ora_1.default)('Loading shared agents...').start();
112
+ let resp;
113
+ try {
114
+ resp = await (0, api_1.get)('/api/agent/shared');
115
+ }
116
+ catch (err) {
117
+ spinner.fail();
118
+ (0, ui_1.error)(`Network error: ${err.message}`);
119
+ return;
120
+ }
121
+ if (!resp.ok) {
122
+ spinner.fail();
123
+ (0, ui_1.error)(`Failed to load shares: ${resp.data?.message || resp.data?.error || 'Unknown error'}`);
124
+ return;
125
+ }
126
+ spinner.stop();
127
+ const snapshots = resp.data?.snapshots || [];
128
+ if (snapshots.length === 0) {
129
+ (0, ui_1.header)('Shared Agents');
130
+ console.log();
131
+ (0, ui_1.info)('No shared agents. Share one with `suzi share create <agentId>`.');
132
+ return;
133
+ }
134
+ (0, ui_1.header)(`Shared Agents (${snapshots.length})`);
135
+ console.log();
136
+ const table = new cli_table3_1.default({
137
+ head: [
138
+ chalk_1.default.gray('Slug'),
139
+ chalk_1.default.gray('Title'),
140
+ chalk_1.default.gray('Clones'),
141
+ chalk_1.default.gray('Active'),
142
+ chalk_1.default.gray('Created'),
143
+ ],
144
+ style: { head: [], border: ['gray'] },
145
+ });
146
+ for (const snap of snapshots) {
147
+ table.push([
148
+ ui_1.colors.primary(snap.slug),
149
+ snap.title || 'Untitled',
150
+ String(snap.cloneCount || 0),
151
+ snap.isActive ? chalk_1.default.green('yes') : chalk_1.default.red('no'),
152
+ ui_1.colors.muted(new Date(snap.createdAt).toLocaleDateString()),
153
+ ]);
154
+ }
155
+ console.log(table.toString());
156
+ });
157
+ // suzi share update <agentId> — publish a new version
158
+ share
159
+ .command('update <agentId>')
160
+ .description('Publish a new version of a shared agent')
161
+ .requiredOption('--slug <slug>', 'Slug of the share to update')
162
+ .action(async (agentId, opts) => {
163
+ if (!(0, ui_1.requireAuth)())
164
+ return;
165
+ const spinner = (0, ora_1.default)('Publishing update...').start();
166
+ let resp;
167
+ try {
168
+ resp = await (0, api_1.post)(`/api/agent/${encodeURIComponent(agentId)}/share/update`, { slug: opts.slug });
169
+ }
170
+ catch (err) {
171
+ spinner.fail();
172
+ (0, ui_1.error)(`Network error: ${err.message}`);
173
+ return;
174
+ }
175
+ if (!resp.ok) {
176
+ spinner.fail();
177
+ (0, ui_1.error)(`Failed to publish update: ${resp.data?.message || resp.data?.error || 'Unknown error'}`);
178
+ return;
179
+ }
180
+ const snapshot = resp.data?.snapshot;
181
+ if (!snapshot) {
182
+ spinner.fail('Update published but returned no snapshot data.');
183
+ return;
184
+ }
185
+ spinner.succeed('Update published!');
186
+ console.log();
187
+ (0, ui_1.label)('Slug', snapshot.slug);
188
+ (0, ui_1.label)('Version', String(snapshot.version));
189
+ (0, ui_1.label)('Created', new Date(snapshot.createdAt).toLocaleString());
190
+ console.log();
191
+ (0, ui_1.info)('Clones of this agent can now apply the update.');
192
+ });
193
+ // suzi share revoke <snapshotId> — deactivate a share
194
+ share
195
+ .command('revoke <snapshotId>')
196
+ .description('Revoke a shared agent snapshot')
197
+ .option('-f, --force', 'Skip confirmation')
198
+ .action(async (snapshotId, opts) => {
199
+ if (!(0, ui_1.requireAuth)())
200
+ return;
201
+ if (!opts.force) {
202
+ const answers = await inquirer_1.default.prompt([
203
+ {
204
+ type: 'confirm',
205
+ name: 'confirm',
206
+ message: `Revoke share ${snapshotId.slice(0, 8)}...? This will prevent new clones.`,
207
+ default: false,
208
+ },
209
+ ]);
210
+ if (!answers.confirm) {
211
+ (0, ui_1.info)('Cancelled.');
212
+ return;
213
+ }
214
+ }
215
+ const spinner = (0, ora_1.default)('Revoking share...').start();
216
+ let resp;
217
+ try {
218
+ resp = await (0, api_1.del)(`/api/share/${encodeURIComponent(snapshotId)}`);
219
+ }
220
+ catch (err) {
221
+ spinner.fail();
222
+ (0, ui_1.error)(`Network error: ${err.message}`);
223
+ return;
224
+ }
225
+ if (!resp.ok) {
226
+ spinner.fail();
227
+ (0, ui_1.error)(`Failed to revoke: ${resp.data?.message || resp.data?.error || 'Unknown error'}`);
228
+ return;
229
+ }
230
+ spinner.succeed('Share revoked.');
231
+ });
232
+ }
233
+ //# sourceMappingURL=share.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,14 +17,18 @@ const list_tools_1 = require("./commands/list-tools");
17
17
  const agents_1 = require("./commands/agents");
18
18
  const deploy_1 = require("./commands/deploy");
19
19
  const import_1 = require("./commands/import");
20
+ const share_1 = require("./commands/share");
20
21
  const subagents_1 = require("./commands/subagents");
21
22
  const transactions_1 = require("./commands/transactions");
22
23
  const prompt_suggestions_1 = require("./commands/prompt-suggestions");
23
24
  const skills_1 = require("./commands/skills");
24
25
  const create_1 = require("./commands/create");
25
26
  const accounts_1 = require("./commands/accounts");
27
+ const feedback_1 = require("./commands/feedback");
28
+ const env_1 = require("./commands/env");
26
29
  const ui_1 = require("./utils/ui");
27
30
  const config_1 = require("./lib/config");
31
+ const history_1 = require("./lib/history");
28
32
  const program = new commander_1.Command();
29
33
  program
30
34
  .name('suzi')
@@ -56,12 +60,15 @@ program
56
60
  (0, agents_1.registerAgentsCommand)(program); // agents, agents view, agents activate, agents deactivate, agents execute, agents logs, agents delete
57
61
  (0, deploy_1.registerDeployCommand)(program); // deploy
58
62
  (0, import_1.registerImportCommand)(program); // import
63
+ (0, share_1.registerShareCommand)(program); // share, share list, share update, share revoke
59
64
  (0, subagents_1.registerSubagentsCommand)(program); // subagents, subagents init, subagents validate
60
65
  (0, transactions_1.registerTransactionsCommand)(program); // transactions / txns, tx-confirm
61
66
  (0, prompt_suggestions_1.registerPromptSuggestions)(program); // suggest / help-me
62
67
  (0, skills_1.registerSkillsCommand)(program); // skills, skills add
63
68
  (0, create_1.registerCreateCommand)(program); // create
64
69
  (0, accounts_1.registerAccountsCommand)(program); // accounts, accounts switch, accounts create, accounts rename, accounts delete
70
+ (0, feedback_1.registerFeedbackCommand)(program); // feedback
71
+ (0, env_1.registerEnvCommand)(program); // env, env set, env list, env remove
65
72
  // Default action: show quick status + suggestions
66
73
  program.action(() => {
67
74
  console.log((0, ui_1.logo)());
@@ -99,9 +106,55 @@ program.action(() => {
99
106
  console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white('suzi deploy')} ${ui_1.colors.muted('Deploy an agent')}`);
100
107
  console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white('suzi list-tools')} ${ui_1.colors.muted('Browse available tools')}`);
101
108
  console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white('suzi suggest')} ${ui_1.colors.muted('Get command suggestions')}`);
109
+ console.log(` ${ui_1.colors.primary('$')} ${chalk_1.default.white('suzi feedback')} ${ui_1.colors.muted('Send feedback to the team')}`);
102
110
  console.log();
103
111
  (0, ui_1.info)('Run `suzi --help` for all commands.');
104
112
  console.log();
105
113
  });
114
+ // Track command history via Commander's public hook API
115
+ const historyState = { start: 0, command: '', args: [] };
116
+ const HISTORY_EXCLUDED_COMMANDS = new Set(['feedback']);
117
+ function attachHistoryHooks(cmd) {
118
+ for (const sub of cmd.commands) {
119
+ attachHistoryHooks(sub);
120
+ if (HISTORY_EXCLUDED_COMMANDS.has(sub.name()))
121
+ continue;
122
+ sub.hook('preAction', (thisCommand) => {
123
+ historyState.start = Date.now();
124
+ const parts = [];
125
+ let c = thisCommand;
126
+ while (c && c !== program) {
127
+ parts.unshift(c.name());
128
+ c = c.parent;
129
+ }
130
+ historyState.command = parts.join(' ');
131
+ historyState.args = process.argv.slice(2).filter((a) => !a.startsWith('-'));
132
+ });
133
+ sub.hook('postAction', () => {
134
+ (0, history_1.appendHistory)({
135
+ command: historyState.command,
136
+ args: historyState.args,
137
+ status: 'success',
138
+ durationMs: Date.now() - historyState.start,
139
+ timestamp: new Date().toISOString(),
140
+ });
141
+ });
142
+ }
143
+ }
144
+ attachHistoryHooks(program);
145
+ // Catch unhandled errors from async actions to record failures
146
+ process.on('uncaughtException', (err) => {
147
+ if (historyState.start > 0) {
148
+ (0, history_1.appendHistory)({
149
+ command: historyState.command,
150
+ args: historyState.args,
151
+ status: 'error',
152
+ durationMs: Date.now() - historyState.start,
153
+ errorOutput: String(err?.message || err),
154
+ timestamp: new Date().toISOString(),
155
+ });
156
+ }
157
+ throw err;
158
+ });
106
159
  program.parse(process.argv);
107
160
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,sEAA6C;AAE7C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvC,IAAA,yBAAc,EAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAEjC,4CAAwD;AACxD,8CAA0D;AAC1D,oDAAgE;AAChE,wDAAoE;AACpE,sDAAiE;AACjE,8CAA0D;AAC1D,8CAA0D;AAC1D,8CAA0D;AAC1D,4CAAwD;AACxD,oDAAgE;AAChE,0DAAsE;AACtE,sEAA0E;AAC1E,8CAA0D;AAC1D,8CAA0D;AAC1D,kDAA8D;AAC9D,kDAA8D;AAC9D,wCAAoD;AACpD,mCAAyD;AACzD,yCAAuE;AACvE,2CAA8C;AAE9C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,WAAW,EAAE,IAAA,SAAI,GAAE,CAAC;KAChC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE;IACzB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE9B,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,IAAA,yBAAgB,GAAE,CAAC;QACnC,UAAU,GAAG,OAAO,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;QACtH,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,IAAI,eAAe,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,OAAO,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;IACvG,CAAC;IAED,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEL,wBAAwB;AACxB,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC,CAAI,wBAAwB;AAC1D,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC,CAAG,sDAAsD;AACxF,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC,CAAC,YAAY;AAC/C,IAAA,wCAA0B,EAAC,OAAO,CAAC,CAAC,CAAC,8DAA8D;AACnG,IAAA,qCAAwB,EAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;AACxD,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC,CAAI,sGAAsG;AACzI,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC,CAAI,SAAS;AAC5C,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC,CAAI,SAAS;AAC5C,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC,CAAK,gDAAgD;AACnF,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD;AACnF,IAAA,0CAA2B,EAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC;AACxE,IAAA,8CAAyB,EAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;AACxD,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC,CAAI,qBAAqB;AACxD,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC,CAAI,SAAS;AAC5C,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC,CAAE,+EAA+E;AAClH,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC,CAAE,WAAW;AAC9C,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC,CAAO,qCAAqC;AAExE,kDAAkD;AAClD,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,GAAE,CAAC,CAAC;IAEpB,MAAM,QAAQ,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE9B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAA,yBAAgB,GAAE,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QACjG,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAA,YAAO,GAAE,CAAC;IACV,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,WAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1H,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,WAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC;IACvI,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,WAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACrH,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,WAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACnH,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,WAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACpH,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,WAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACrH,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,WAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACpH,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,WAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC3H,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,WAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC5H,OAAO,CAAC,GAAG,CAAC,OAAO,WAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,WAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAC9H,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAA,SAAI,EAAC,qCAAqC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,wDAAwD;AACxD,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAc,EAAE,CAAC;AACrE,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAExD,SAAS,kBAAkB,CAAC,GAAY;IACtC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAExB,IAAI,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAAE,SAAS;QAExD,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;YACpC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAmB,WAAW,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACf,CAAC;YACD,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,IAAA,uBAAa,EAAC;gBACZ,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK;gBAC3C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE5B,+DAA+D;AAC/D,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAA,uBAAa,EAAC;YACZ,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK;YAC3C,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC;YACxC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface HistoryEntry {
2
+ command: string;
3
+ args: string[];
4
+ status: 'success' | 'error';
5
+ durationMs: number;
6
+ errorOutput?: string;
7
+ timestamp: string;
8
+ }
9
+ export declare function appendHistory(entry: HistoryEntry): void;
10
+ export declare function getRecentHistory(count?: number): HistoryEntry[];
11
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/lib/history.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAwDD,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAqBvD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE,CAOnE"}
@@ -0,0 +1,94 @@
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.appendHistory = appendHistory;
7
+ exports.getRecentHistory = getRecentHistory;
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.suzi');
12
+ const HISTORY_PATH = path_1.default.join(CONFIG_DIR, 'history.json');
13
+ const MAX_ENTRIES = 100;
14
+ const MAX_ERROR_LENGTH = 500;
15
+ const SENSITIVE_PATTERN = /^--.*(token|key|secret|password|auth|credential|private)/i;
16
+ const JWT_PATTERN = /eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g;
17
+ function sanitizeArgs(args) {
18
+ const sanitized = [];
19
+ let redactNext = false;
20
+ for (const arg of args) {
21
+ if (redactNext) {
22
+ sanitized.push('<REDACTED>');
23
+ redactNext = false;
24
+ continue;
25
+ }
26
+ if (SENSITIVE_PATTERN.test(arg)) {
27
+ if (arg.includes('=')) {
28
+ sanitized.push(arg.split('=')[0] + '=<REDACTED>');
29
+ }
30
+ else {
31
+ sanitized.push(arg);
32
+ redactNext = true;
33
+ }
34
+ continue;
35
+ }
36
+ sanitized.push(arg.replace(JWT_PATTERN, '<TOKEN>'));
37
+ }
38
+ return sanitized;
39
+ }
40
+ function readHistory() {
41
+ try {
42
+ if (fs_1.default.existsSync(HISTORY_PATH)) {
43
+ const raw = fs_1.default.readFileSync(HISTORY_PATH, 'utf-8');
44
+ const parsed = JSON.parse(raw);
45
+ if (Array.isArray(parsed))
46
+ return parsed;
47
+ }
48
+ }
49
+ catch {
50
+ // Corrupted file — start fresh
51
+ }
52
+ return [];
53
+ }
54
+ function writeHistory(entries) {
55
+ try {
56
+ if (!fs_1.default.existsSync(CONFIG_DIR)) {
57
+ fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
58
+ }
59
+ fs_1.default.writeFileSync(HISTORY_PATH, JSON.stringify(entries, null, 2));
60
+ }
61
+ catch {
62
+ // Silent failure — never break CLI commands
63
+ }
64
+ }
65
+ function appendHistory(entry) {
66
+ try {
67
+ const history = readHistory();
68
+ // Sanitize before storing
69
+ const sanitized = {
70
+ ...entry,
71
+ args: sanitizeArgs(entry.args),
72
+ errorOutput: entry.errorOutput
73
+ ? entry.errorOutput.replace(JWT_PATTERN, '<TOKEN>').slice(0, MAX_ERROR_LENGTH)
74
+ : undefined,
75
+ };
76
+ history.push(sanitized);
77
+ // Trim to max entries
78
+ const trimmed = history.slice(-MAX_ENTRIES);
79
+ writeHistory(trimmed);
80
+ }
81
+ catch {
82
+ // Silent failure
83
+ }
84
+ }
85
+ function getRecentHistory(count = 20) {
86
+ try {
87
+ const history = readHistory();
88
+ return history.slice(-count);
89
+ }
90
+ catch {
91
+ return [];
92
+ }
93
+ }
94
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/lib/history.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "suzi-cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Suzi CLI by SendAI",
5
5
  "main": "dist/index.js",
6
6
  "bin": {