suzi-cli 0.1.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.
Files changed (65) hide show
  1. package/dist/commands/agents.d.ts +3 -0
  2. package/dist/commands/agents.d.ts.map +1 -0
  3. package/dist/commands/agents.js +274 -0
  4. package/dist/commands/agents.js.map +1 -0
  5. package/dist/commands/deploy.d.ts +3 -0
  6. package/dist/commands/deploy.d.ts.map +1 -0
  7. package/dist/commands/deploy.js +149 -0
  8. package/dist/commands/deploy.js.map +1 -0
  9. package/dist/commands/import.d.ts +3 -0
  10. package/dist/commands/import.d.ts.map +1 -0
  11. package/dist/commands/import.js +70 -0
  12. package/dist/commands/import.js.map +1 -0
  13. package/dist/commands/list-tools.d.ts +3 -0
  14. package/dist/commands/list-tools.d.ts.map +1 -0
  15. package/dist/commands/list-tools.js +163 -0
  16. package/dist/commands/list-tools.js.map +1 -0
  17. package/dist/commands/login.d.ts +13 -0
  18. package/dist/commands/login.d.ts.map +1 -0
  19. package/dist/commands/login.js +311 -0
  20. package/dist/commands/login.js.map +1 -0
  21. package/dist/commands/portfolio.d.ts +3 -0
  22. package/dist/commands/portfolio.d.ts.map +1 -0
  23. package/dist/commands/portfolio.js +170 -0
  24. package/dist/commands/portfolio.js.map +1 -0
  25. package/dist/commands/preferences.d.ts +3 -0
  26. package/dist/commands/preferences.d.ts.map +1 -0
  27. package/dist/commands/preferences.js +121 -0
  28. package/dist/commands/preferences.js.map +1 -0
  29. package/dist/commands/prompt-suggestions.d.ts +3 -0
  30. package/dist/commands/prompt-suggestions.d.ts.map +1 -0
  31. package/dist/commands/prompt-suggestions.js +148 -0
  32. package/dist/commands/prompt-suggestions.js.map +1 -0
  33. package/dist/commands/skills.d.ts +3 -0
  34. package/dist/commands/skills.d.ts.map +1 -0
  35. package/dist/commands/skills.js +571 -0
  36. package/dist/commands/skills.js.map +1 -0
  37. package/dist/commands/subagents.d.ts +3 -0
  38. package/dist/commands/subagents.d.ts.map +1 -0
  39. package/dist/commands/subagents.js +194 -0
  40. package/dist/commands/subagents.js.map +1 -0
  41. package/dist/commands/transactions.d.ts +3 -0
  42. package/dist/commands/transactions.d.ts.map +1 -0
  43. package/dist/commands/transactions.js +153 -0
  44. package/dist/commands/transactions.js.map +1 -0
  45. package/dist/commands/wallet.d.ts +3 -0
  46. package/dist/commands/wallet.d.ts.map +1 -0
  47. package/dist/commands/wallet.js +183 -0
  48. package/dist/commands/wallet.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +95 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/lib/api.d.ts +12 -0
  54. package/dist/lib/api.d.ts.map +1 -0
  55. package/dist/lib/api.js +82 -0
  56. package/dist/lib/api.js.map +1 -0
  57. package/dist/lib/config.d.ts +42 -0
  58. package/dist/lib/config.d.ts.map +1 -0
  59. package/dist/lib/config.js +85 -0
  60. package/dist/lib/config.js.map +1 -0
  61. package/dist/utils/ui.d.ts +26 -0
  62. package/dist/utils/ui.d.ts.map +1 -0
  63. package/dist/utils/ui.js +111 -0
  64. package/dist/utils/ui.js.map +1 -0
  65. package/package.json +46 -0
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAgentsCommand(program: Command): void;
3
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmT5D"}
@@ -0,0 +1,274 @@
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.registerAgentsCommand = registerAgentsCommand;
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 registerAgentsCommand(program) {
14
+ const agents = program
15
+ .command('agents')
16
+ .description('List and manage your agents');
17
+ // suzi agents -- list all agents
18
+ agents
19
+ .action(async () => {
20
+ if (!(0, ui_1.requireAuth)())
21
+ return;
22
+ const spinner = (0, ora_1.default)('Loading agents...').start();
23
+ const resp = await (0, api_1.get)('/api/agent?limit=50');
24
+ if (!resp.ok) {
25
+ spinner.fail();
26
+ (0, ui_1.error)(`Failed to load agents: ${resp.data?.error || 'Unknown error'}`);
27
+ return;
28
+ }
29
+ spinner.stop();
30
+ const agentList = resp.data.agents || [];
31
+ if (agentList.length === 0) {
32
+ (0, ui_1.header)('Agents');
33
+ console.log();
34
+ (0, ui_1.info)('No agents found. Create one with `suzi deploy <file>`.');
35
+ return;
36
+ }
37
+ (0, ui_1.header)(`Agents (${agentList.length})`);
38
+ console.log();
39
+ const table = new cli_table3_1.default({
40
+ head: [
41
+ chalk_1.default.gray('#'),
42
+ chalk_1.default.gray('Name'),
43
+ chalk_1.default.gray('Status'),
44
+ chalk_1.default.gray('ID'),
45
+ chalk_1.default.gray('Created'),
46
+ ],
47
+ style: { head: [], border: ['gray'] },
48
+ });
49
+ for (let i = 0; i < agentList.length; i++) {
50
+ const agent = agentList[i];
51
+ table.push([
52
+ ui_1.colors.muted(String(i + 1)),
53
+ chalk_1.default.bold(agent.title || 'Untitled'),
54
+ (0, ui_1.statusBadge)(agent.status),
55
+ agent.id,
56
+ ui_1.colors.muted(new Date(agent.createdAt).toLocaleDateString()),
57
+ ]);
58
+ }
59
+ console.log(table.toString());
60
+ });
61
+ // suzi agents view <id>
62
+ agents
63
+ .command('view <id>')
64
+ .description('View agent details')
65
+ .action(async (id) => {
66
+ if (!(0, ui_1.requireAuth)())
67
+ return;
68
+ const spinner = (0, ora_1.default)('Loading agent...').start();
69
+ const resp = await (0, api_1.get)(`/api/agent/${id}`);
70
+ if (!resp.ok) {
71
+ spinner.fail();
72
+ (0, ui_1.error)(`Agent not found: ${resp.data?.error || 'Unknown error'}`);
73
+ return;
74
+ }
75
+ spinner.stop();
76
+ const agent = resp.data;
77
+ (0, ui_1.header)(agent.title || 'Untitled Agent');
78
+ console.log();
79
+ (0, ui_1.label)('ID', agent.id);
80
+ (0, ui_1.label)('Status', (0, ui_1.statusBadge)(agent.status));
81
+ (0, ui_1.label)('Description', agent.description || ui_1.colors.muted('None'));
82
+ (0, ui_1.label)('Created', new Date(agent.createdAt).toLocaleString());
83
+ (0, ui_1.label)('Updated', new Date(agent.updatedAt).toLocaleString());
84
+ // Show spec info
85
+ if (agent.spec) {
86
+ const spec = typeof agent.spec === 'string' ? JSON.parse(agent.spec) : agent.spec;
87
+ console.log();
88
+ console.log(ui_1.colors.muted(' Agent Spec:'));
89
+ if (spec.meta) {
90
+ (0, ui_1.label)(' Version', spec.meta.version || 'N/A');
91
+ }
92
+ if (spec.triggers) {
93
+ const triggerNames = Object.keys(spec.triggers);
94
+ (0, ui_1.label)(' Triggers', triggerNames.join(', ') || 'None');
95
+ }
96
+ if (spec.resources) {
97
+ const resourceTypes = Object.entries(spec.resources)
98
+ .map(([key, val]) => `${key}(${val.type || val})`)
99
+ .join(', ');
100
+ (0, ui_1.label)(' Resources', resourceTypes || 'None');
101
+ }
102
+ }
103
+ // Show resources
104
+ const resResp = await (0, api_1.get)(`/api/agent/${id}/resources`);
105
+ if (resResp.ok && resResp.data?.resources?.length > 0) {
106
+ console.log();
107
+ console.log(ui_1.colors.muted(' Wallet Resources:'));
108
+ for (const res of resResp.data.resources) {
109
+ (0, ui_1.label)(` ${res.walletType.toUpperCase()}`, (0, ui_1.truncateAddress)(res.address));
110
+ }
111
+ }
112
+ console.log();
113
+ (0, ui_1.divider)();
114
+ });
115
+ // suzi agents activate <id>
116
+ agents
117
+ .command('activate <id>')
118
+ .description('Activate an agent')
119
+ .action(async (id) => {
120
+ if (!(0, ui_1.requireAuth)())
121
+ return;
122
+ const spinner = (0, ora_1.default)('Activating agent...').start();
123
+ const resp = await (0, api_1.post)(`/api/agent/${id}/activate`);
124
+ if (!resp.ok) {
125
+ spinner.fail();
126
+ (0, ui_1.error)(`Failed to activate: ${resp.data?.error || resp.data?.message || 'Unknown error'}`);
127
+ return;
128
+ }
129
+ spinner.succeed();
130
+ (0, ui_1.success)(`Agent ${id.slice(0, 8)}... activated.`);
131
+ });
132
+ // suzi agents deactivate <id>
133
+ agents
134
+ .command('deactivate <id>')
135
+ .description('Deactivate an agent')
136
+ .action(async (id) => {
137
+ if (!(0, ui_1.requireAuth)())
138
+ return;
139
+ const spinner = (0, ora_1.default)('Deactivating agent...').start();
140
+ const resp = await (0, api_1.post)(`/api/agent/${id}/deactivate`);
141
+ if (!resp.ok) {
142
+ spinner.fail();
143
+ (0, ui_1.error)(`Failed to deactivate: ${resp.data?.error || resp.data?.message || 'Unknown error'}`);
144
+ return;
145
+ }
146
+ spinner.succeed();
147
+ (0, ui_1.success)(`Agent ${id.slice(0, 8)}... deactivated.`);
148
+ });
149
+ // suzi agents execute <id> [trigger]
150
+ agents
151
+ .command('execute <id> [trigger]')
152
+ .description('Manually execute an agent trigger')
153
+ .action(async (id, trigger) => {
154
+ if (!(0, ui_1.requireAuth)())
155
+ return;
156
+ // If no trigger specified, fetch agent to find manual triggers
157
+ let triggerName = trigger;
158
+ if (!triggerName) {
159
+ const agentResp = await (0, api_1.get)(`/api/agent/${id}`);
160
+ if (agentResp.ok && agentResp.data?.spec) {
161
+ const spec = typeof agentResp.data.spec === 'string'
162
+ ? JSON.parse(agentResp.data.spec)
163
+ : agentResp.data.spec;
164
+ const triggers = Object.keys(spec.triggers || {});
165
+ if (triggers.length === 1) {
166
+ triggerName = triggers[0];
167
+ }
168
+ else if (triggers.length > 1) {
169
+ const answers = await inquirer_1.default.prompt([
170
+ {
171
+ type: 'list',
172
+ name: 'trigger',
173
+ message: 'Select a trigger to execute:',
174
+ choices: triggers,
175
+ },
176
+ ]);
177
+ triggerName = answers.trigger;
178
+ }
179
+ else {
180
+ (0, ui_1.error)('No triggers found on this agent.');
181
+ return;
182
+ }
183
+ }
184
+ else {
185
+ (0, ui_1.error)('Could not fetch agent spec. Specify trigger name explicitly.');
186
+ return;
187
+ }
188
+ }
189
+ const spinner = (0, ora_1.default)(`Executing trigger "${triggerName}"...`).start();
190
+ const resp = await (0, api_1.post)(`/api/agent/${id}/execute`, {
191
+ triggerName: triggerName,
192
+ });
193
+ if (!resp.ok) {
194
+ spinner.fail();
195
+ (0, ui_1.error)(`Execution failed: ${resp.data?.error || resp.data?.message || 'Unknown error'}`);
196
+ return;
197
+ }
198
+ spinner.succeed();
199
+ (0, ui_1.success)(`Execution started. Run ID: ${resp.data.executionId || 'N/A'}`);
200
+ });
201
+ // suzi agents logs <id>
202
+ agents
203
+ .command('logs <id>')
204
+ .description('View agent logs')
205
+ .option('-n, --limit <n>', 'Number of log entries', '20')
206
+ .option('--level <level>', 'Filter by level (info|warn|error|debug)')
207
+ .action(async (id, opts) => {
208
+ if (!(0, ui_1.requireAuth)())
209
+ return;
210
+ const spinner = (0, ora_1.default)('Loading logs...').start();
211
+ let path = `/api/agent/${id}/logs?limit=${opts.limit}`;
212
+ if (opts.level)
213
+ path += `&level=${opts.level}`;
214
+ const resp = await (0, api_1.get)(path);
215
+ if (!resp.ok) {
216
+ spinner.fail();
217
+ (0, ui_1.error)(`Failed to load logs: ${resp.data?.error || 'Unknown error'}`);
218
+ return;
219
+ }
220
+ spinner.stop();
221
+ const logs = resp.data.logs || [];
222
+ if (logs.length === 0) {
223
+ (0, ui_1.info)('No logs found.');
224
+ return;
225
+ }
226
+ (0, ui_1.header)(`Agent Logs (${logs.length})`);
227
+ console.log();
228
+ for (const log of logs) {
229
+ const levelColor = log.level === 'error'
230
+ ? chalk_1.default.red
231
+ : log.level === 'warn'
232
+ ? chalk_1.default.yellow
233
+ : log.level === 'debug'
234
+ ? chalk_1.default.gray
235
+ : chalk_1.default.white;
236
+ const ts = new Date(log.createdAt).toLocaleTimeString();
237
+ console.log(` ${ui_1.colors.muted(ts)} ${levelColor(`[${log.level}]`)} ${log.log}`);
238
+ }
239
+ });
240
+ // suzi agents delete <id>
241
+ agents
242
+ .command('delete <id>')
243
+ .description('Delete an agent')
244
+ .option('-f, --force', 'Skip confirmation')
245
+ .action(async (id, opts) => {
246
+ if (!(0, ui_1.requireAuth)())
247
+ return;
248
+ if (!opts.force) {
249
+ const answers = await inquirer_1.default.prompt([
250
+ {
251
+ type: 'confirm',
252
+ name: 'confirm',
253
+ message: `Are you sure you want to delete agent ${id.slice(0, 8)}...?`,
254
+ default: false,
255
+ },
256
+ ]);
257
+ if (!answers.confirm) {
258
+ (0, ui_1.info)('Cancelled.');
259
+ return;
260
+ }
261
+ }
262
+ const spinner = (0, ora_1.default)('Deleting agent...').start();
263
+ const { del } = require('../lib/api');
264
+ const resp = await del(`/api/agent/${id}`);
265
+ if (!resp.ok) {
266
+ spinner.fail();
267
+ (0, ui_1.error)(`Failed to delete: ${resp.data?.error || 'Unknown error'}`);
268
+ return;
269
+ }
270
+ spinner.succeed();
271
+ (0, ui_1.success)(`Agent ${id.slice(0, 8)}... deleted.`);
272
+ });
273
+ }
274
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":";;;;;AAQA,sDAmTC;AA1TD,kDAA0B;AAC1B,8CAAsB;AACtB,4DAA+B;AAC/B,wDAAgC;AAChC,oCAAuC;AACvC,oCAA8H;AAE9H,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE9C,iCAAiC;IACjC,MAAM;SACH,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC,IAAA,gBAAW,GAAE;YAAE,OAAO;QAE3B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,IAAA,SAAG,EAAC,qBAAqB,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAA,UAAK,EAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAEzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAA,WAAM,EAAC,QAAQ,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,IAAA,SAAI,EAAC,wDAAwD,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAA,WAAM,EAAC,WAAW,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;YACtB,IAAI,EAAE;gBACJ,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBACf,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClB,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACpB,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChB,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC;aACtB;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;SACtC,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACT,WAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC;gBACrC,IAAA,gBAAW,EAAC,KAAK,CAAC,MAAM,CAAC;gBACzB,KAAK,CAAC,EAAE;gBACR,WAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,wBAAwB;IACxB,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAA,gBAAW,GAAE;YAAE,OAAO;QAE3B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEhD,MAAM,IAAI,GAAG,MAAM,IAAA,SAAG,EAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAA,UAAK,EAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QAExB,IAAA,WAAM,EAAC,KAAK,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAA,UAAK,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,IAAA,UAAK,EAAC,QAAQ,EAAE,IAAA,gBAAW,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAA,UAAK,EAAC,aAAa,EAAE,KAAK,CAAC,WAAW,IAAI,WAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,IAAA,UAAK,EAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7D,IAAA,UAAK,EAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAE7D,iBAAiB;QACjB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAClF,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,WAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAA,UAAK,EAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChD,IAAA,UAAK,EAAC,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;qBACjD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAgB,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;qBAChE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,IAAA,UAAK,EAAC,aAAa,EAAE,aAAa,IAAI,MAAM,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,IAAA,SAAG,EAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,WAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACjD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzC,IAAA,UAAK,EAAC,KAAK,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,IAAA,oBAAe,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAA,YAAO,GAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEL,4BAA4B;IAC5B,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAA,gBAAW,GAAE;YAAE,OAAO;QAE3B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,IAAA,UAAI,EAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAA,UAAK,EAAC,uBAAuB,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,IAAA,YAAO,EAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEL,8BAA8B;IAC9B,MAAM;SACH,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAA,gBAAW,GAAE;YAAE,OAAO;QAE3B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;QAErD,MAAM,IAAI,GAAG,MAAM,IAAA,UAAI,EAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAEvD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAA,UAAK,EAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,IAAA,YAAO,EAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEL,qCAAqC;IACrC,MAAM;SACH,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAgB,EAAE,EAAE;QAC7C,IAAI,CAAC,IAAA,gBAAW,GAAE;YAAE,OAAO;QAE3B,+DAA+D;QAC/D,IAAI,WAAW,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,IAAA,SAAG,EAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACzC,MAAM,IAAI,GACR,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;oBACrC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;oBACjC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBAE1B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;gBAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;wBACpC;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,8BAA8B;4BACvC,OAAO,EAAE,QAAQ;yBAClB;qBACF,CAAC,CAAC;oBACH,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,IAAA,UAAK,EAAC,kCAAkC,CAAC,CAAC;oBAC1C,OAAO;gBACT,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAA,UAAK,EAAC,8DAA8D,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,WAAW,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAErE,MAAM,IAAI,GAAG,MAAM,IAAA,UAAI,EAAC,cAAc,EAAE,UAAU,EAAE;YAClD,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAA,UAAK,EAAC,qBAAqB,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,IAAA,YAAO,EAAC,8BAA8B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEL,wBAAwB;IACxB,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,IAAI,CAAC;SACxD,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAS,EAAE,EAAE;QACtC,IAAI,CAAC,IAAA,gBAAW,GAAE;YAAE,OAAO;QAE3B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE/C,IAAI,IAAI,GAAG,cAAc,EAAE,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,IAAI,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,IAAA,SAAG,EAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAA,UAAK,EAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAA,SAAI,EAAC,gBAAgB,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAA,WAAM,EAAC,eAAe,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,UAAU,GACd,GAAG,CAAC,KAAK,KAAK,OAAO;gBACnB,CAAC,CAAC,eAAK,CAAC,GAAG;gBACX,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM;oBACpB,CAAC,CAAC,eAAK,CAAC,MAAM;oBACd,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,OAAO;wBACrB,CAAC,CAAC,eAAK,CAAC,IAAI;wBACZ,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC;YAEtB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,0BAA0B;IAC1B,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAS,EAAE,EAAE;QACtC,IAAI,CAAC,IAAA,gBAAW,GAAE;YAAE,OAAO;QAE3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACpC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,yCAAyC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM;oBACtE,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAA,SAAI,EAAC,YAAY,CAAC,CAAC;gBACnB,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjD,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAA,UAAK,EAAC,qBAAqB,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,IAAA,YAAO,EAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerDeployCommand(program: Command): void;
3
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +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,CAyJ5D"}
@@ -0,0 +1,149 @@
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.registerDeployCommand = registerDeployCommand;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const api_1 = require("../lib/api");
12
+ const ui_1 = require("../utils/ui");
13
+ function registerDeployCommand(program) {
14
+ program
15
+ .command('deploy [file]')
16
+ .description('Deploy an agent from a TypeScript file')
17
+ .option('-t, --title <title>', 'Agent title')
18
+ .option('-d, --description <desc>', 'Agent description')
19
+ .option('--update <agentId>', 'Update an existing agent instead of creating new')
20
+ .option('--activate', 'Activate the agent after deploying')
21
+ .action(async (file, opts) => {
22
+ if (!(0, ui_1.requireAuth)())
23
+ return;
24
+ // Find the agent file
25
+ let filePath = file;
26
+ if (!filePath) {
27
+ // Look for common agent file patterns in current directory
28
+ const candidates = [
29
+ 'agent.ts',
30
+ 'src/agent.ts',
31
+ 'index.ts',
32
+ 'src/index.ts',
33
+ ];
34
+ for (const candidate of candidates) {
35
+ const resolved = path_1.default.resolve(process.cwd(), candidate);
36
+ if (fs_1.default.existsSync(resolved)) {
37
+ filePath = resolved;
38
+ break;
39
+ }
40
+ }
41
+ if (!filePath) {
42
+ (0, ui_1.error)('No agent file found. Specify a file path: `suzi deploy ./agent.ts`');
43
+ (0, ui_1.info)('Looked for: ' + candidates.join(', '));
44
+ return;
45
+ }
46
+ }
47
+ const resolvedPath = path_1.default.resolve(process.cwd(), filePath);
48
+ if (!fs_1.default.existsSync(resolvedPath)) {
49
+ (0, ui_1.error)(`File not found: ${resolvedPath}`);
50
+ return;
51
+ }
52
+ const source = fs_1.default.readFileSync(resolvedPath, 'utf-8');
53
+ if (!source.includes('defineAgent')) {
54
+ (0, ui_1.error)('File does not appear to be a Suzi agent (missing defineAgent).');
55
+ (0, ui_1.info)('Agent files must export `defineAgent({...})`.');
56
+ return;
57
+ }
58
+ (0, ui_1.header)('Deploy Agent');
59
+ console.log();
60
+ (0, ui_1.label)('File', path_1.default.relative(process.cwd(), resolvedPath));
61
+ (0, ui_1.label)('Size', `${source.length} bytes`);
62
+ console.log();
63
+ // Determine title
64
+ let title = opts?.title;
65
+ if (!title && !opts?.update) {
66
+ // Try to extract from source
67
+ const metaMatch = source.match(/name:\s*['"]([^'"]+)['"]/);
68
+ if (metaMatch) {
69
+ title = metaMatch[1];
70
+ }
71
+ else {
72
+ const answers = await inquirer_1.default.prompt([
73
+ {
74
+ type: 'input',
75
+ name: 'title',
76
+ message: 'Agent title:',
77
+ default: path_1.default.basename(resolvedPath, path_1.default.extname(resolvedPath)),
78
+ },
79
+ ]);
80
+ title = answers.title;
81
+ }
82
+ }
83
+ const spinner = (0, ora_1.default)('Deploying agent...').start();
84
+ try {
85
+ let resp;
86
+ if (opts?.update) {
87
+ // Update existing agent
88
+ spinner.text = 'Updating agent...';
89
+ resp = await (0, api_1.put)(`/api/agent/${opts.update}`, {
90
+ code: source,
91
+ ...(title ? { title } : {}),
92
+ ...(opts?.description ? { description: opts.description } : {}),
93
+ });
94
+ }
95
+ else {
96
+ // Create new agent
97
+ spinner.text = 'Creating agent...';
98
+ resp = await (0, api_1.post)('/api/agent', {
99
+ code: source,
100
+ title: title || 'CLI Agent',
101
+ ...(opts?.description ? { description: opts.description } : {}),
102
+ });
103
+ }
104
+ if (!resp.ok) {
105
+ spinner.fail();
106
+ (0, ui_1.error)(`Deploy failed: ${resp.data?.error || resp.data?.message || 'Unknown error'}`);
107
+ if (resp.data?.details) {
108
+ console.log(ui_1.colors.muted(` ${resp.data.details}`));
109
+ }
110
+ return;
111
+ }
112
+ const agent = resp.data;
113
+ spinner.succeed(opts?.update ? 'Agent updated!' : 'Agent created!');
114
+ console.log();
115
+ (0, ui_1.label)('Agent ID', agent.id);
116
+ (0, ui_1.label)('Title', agent.title || 'Untitled');
117
+ (0, ui_1.label)('Status', (0, ui_1.statusBadge)(agent.status));
118
+ if (agent.spec) {
119
+ const spec = typeof agent.spec === 'string' ? JSON.parse(agent.spec) : agent.spec;
120
+ if (spec.triggers) {
121
+ (0, ui_1.label)('Triggers', Object.keys(spec.triggers).join(', '));
122
+ }
123
+ }
124
+ // Activate if requested
125
+ if (opts?.activate) {
126
+ console.log();
127
+ const activateSpinner = (0, ora_1.default)('Activating agent...').start();
128
+ const activateResp = await (0, api_1.post)(`/api/agent/${agent.id}/activate`);
129
+ if (activateResp.ok) {
130
+ activateSpinner.succeed('Agent activated!');
131
+ }
132
+ else {
133
+ activateSpinner.fail();
134
+ (0, ui_1.error)(`Activation failed: ${activateResp.data?.error || activateResp.data?.message || 'Unknown error'}`);
135
+ }
136
+ }
137
+ console.log();
138
+ (0, ui_1.divider)();
139
+ if (agent.status === 'draft') {
140
+ (0, ui_1.info)('Activate with: `suzi agents activate ' + agent.id + '`');
141
+ }
142
+ }
143
+ catch (err) {
144
+ spinner.fail();
145
+ (0, ui_1.error)(`Deploy error: ${err.message}`);
146
+ }
147
+ });
148
+ }
149
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerImportCommand(program: Command): void;
3
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwE5D"}
@@ -0,0 +1,70 @@
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.registerImportCommand = registerImportCommand;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const api_1 = require("../lib/api");
9
+ const ui_1 = require("../utils/ui");
10
+ function registerImportCommand(program) {
11
+ program
12
+ .command('import <slug>')
13
+ .description('Import (clone) a shared agent by its share slug')
14
+ .action(async (slug) => {
15
+ if (!(0, ui_1.requireAuth)())
16
+ return;
17
+ const spinner = (0, ora_1.default)('Fetching shared agent...').start();
18
+ // 1. Get the share preview
19
+ const previewResp = await (0, api_1.get)(`/api/share/${slug}`);
20
+ if (!previewResp.ok) {
21
+ spinner.fail();
22
+ if (previewResp.status === 410) {
23
+ (0, ui_1.error)('This share link has expired.');
24
+ }
25
+ else if (previewResp.status === 404) {
26
+ (0, ui_1.error)(`Share "${slug}" not found.`);
27
+ }
28
+ else {
29
+ (0, ui_1.error)(`Failed to fetch share: ${previewResp.data?.error || 'Unknown error'}`);
30
+ }
31
+ return;
32
+ }
33
+ const snapshot = previewResp.data.snapshot;
34
+ spinner.stop();
35
+ (0, ui_1.header)('Import Agent');
36
+ console.log();
37
+ (0, ui_1.label)('Title', snapshot.title || 'Untitled');
38
+ (0, ui_1.label)('Description', snapshot.description || ui_1.colors.muted('None'));
39
+ (0, ui_1.label)('Version', snapshot.version || '1');
40
+ (0, ui_1.label)('Clones', String(snapshot.cloneCount || 0));
41
+ if (snapshot.requiredResources) {
42
+ (0, ui_1.label)('Requires', JSON.stringify(snapshot.requiredResources));
43
+ }
44
+ if (snapshot.isExpired) {
45
+ console.log();
46
+ (0, ui_1.error)('This share has expired and cannot be cloned.');
47
+ return;
48
+ }
49
+ console.log();
50
+ // 2. Clone it
51
+ const cloneSpinner = (0, ora_1.default)('Cloning agent...').start();
52
+ const cloneResp = await (0, api_1.post)(`/api/share/${slug}/clone`);
53
+ if (!cloneResp.ok) {
54
+ cloneSpinner.fail();
55
+ (0, ui_1.error)(`Clone failed: ${cloneResp.data?.error || cloneResp.data?.message || 'Unknown error'}`);
56
+ return;
57
+ }
58
+ cloneSpinner.succeed('Agent imported!');
59
+ const agent = cloneResp.data.agent;
60
+ console.log();
61
+ (0, ui_1.label)('Agent ID', agent.id);
62
+ (0, ui_1.label)('Title', agent.title || 'Untitled');
63
+ (0, ui_1.label)('Status', (0, ui_1.statusBadge)(agent.status));
64
+ console.log();
65
+ (0, ui_1.divider)();
66
+ (0, ui_1.info)(`Activate with: suzi agents activate ${agent.id}`);
67
+ (0, ui_1.info)(`View source with: suzi agents view ${agent.id}`);
68
+ });
69
+ }
70
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerListToolsCommand(program: Command): void;
3
+ //# sourceMappingURL=list-tools.d.ts.map
@@ -0,0 +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"}