suzi-cli 0.1.6 → 0.1.8

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 (76) hide show
  1. package/README.md +267 -1
  2. package/dist/commands/accounts.d.ts.map +1 -1
  3. package/dist/commands/accounts.js +59 -0
  4. package/dist/commands/accounts.js.map +1 -1
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +10 -3
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/create.d.ts.map +1 -1
  9. package/dist/commands/create.js +47 -37
  10. package/dist/commands/create.js.map +1 -1
  11. package/dist/commands/debug.d.ts +3 -0
  12. package/dist/commands/debug.d.ts.map +1 -0
  13. package/dist/commands/debug.js +332 -0
  14. package/dist/commands/debug.js.map +1 -0
  15. package/dist/commands/deploy.d.ts.map +1 -1
  16. package/dist/commands/deploy.js +8 -2
  17. package/dist/commands/deploy.js.map +1 -1
  18. package/dist/commands/init.d.ts +3 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +139 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/install-hooks.d.ts +16 -0
  23. package/dist/commands/install-hooks.d.ts.map +1 -0
  24. package/dist/commands/install-hooks.js +381 -0
  25. package/dist/commands/install-hooks.js.map +1 -0
  26. package/dist/commands/list-actions.d.ts +3 -0
  27. package/dist/commands/list-actions.d.ts.map +1 -0
  28. package/dist/commands/{list-tools.js → list-actions.js} +24 -18
  29. package/dist/commands/list-actions.js.map +1 -0
  30. package/dist/commands/list-triggers.d.ts.map +1 -1
  31. package/dist/commands/list-triggers.js +27 -1
  32. package/dist/commands/list-triggers.js.map +1 -1
  33. package/dist/commands/login.d.ts.map +1 -1
  34. package/dist/commands/login.js +51 -28
  35. package/dist/commands/login.js.map +1 -1
  36. package/dist/commands/memory.d.ts +3 -0
  37. package/dist/commands/memory.d.ts.map +1 -0
  38. package/dist/commands/memory.js +196 -0
  39. package/dist/commands/memory.js.map +1 -0
  40. package/dist/commands/portfolio.d.ts.map +1 -1
  41. package/dist/commands/portfolio.js +5 -8
  42. package/dist/commands/portfolio.js.map +1 -1
  43. package/dist/commands/prompt-suggestions.d.ts.map +1 -1
  44. package/dist/commands/prompt-suggestions.js +14 -20
  45. package/dist/commands/prompt-suggestions.js.map +1 -1
  46. package/dist/commands/share.d.ts.map +1 -1
  47. package/dist/commands/share.js +2 -0
  48. package/dist/commands/share.js.map +1 -1
  49. package/dist/commands/skills.d.ts.map +1 -1
  50. package/dist/commands/skills.js +2 -1
  51. package/dist/commands/skills.js.map +1 -1
  52. package/dist/commands/validate.d.ts.map +1 -1
  53. package/dist/commands/validate.js +1 -0
  54. package/dist/commands/validate.js.map +1 -1
  55. package/dist/index.js +41 -13
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib/memory.d.ts +45 -0
  58. package/dist/lib/memory.d.ts.map +1 -0
  59. package/dist/lib/memory.js +247 -0
  60. package/dist/lib/memory.js.map +1 -0
  61. package/dist/lib/suzi-guide.d.ts +1 -1
  62. package/dist/lib/suzi-guide.d.ts.map +1 -1
  63. package/dist/lib/suzi-guide.js +255 -52
  64. package/dist/lib/suzi-guide.js.map +1 -1
  65. package/dist/utils/ui.d.ts +3 -1
  66. package/dist/utils/ui.d.ts.map +1 -1
  67. package/dist/utils/ui.js +4 -1
  68. package/dist/utils/ui.js.map +1 -1
  69. package/package.json +1 -1
  70. package/dist/commands/list-tools.d.ts +0 -3
  71. package/dist/commands/list-tools.d.ts.map +0 -1
  72. package/dist/commands/list-tools.js.map +0 -1
  73. package/dist/commands/wallet.d.ts +0 -3
  74. package/dist/commands/wallet.d.ts.map +0 -1
  75. package/dist/commands/wallet.js +0 -191
  76. package/dist/commands/wallet.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ import { Command } from 'commander';
2
+ export interface HookInstallResult {
3
+ scripts: Array<{
4
+ name: string;
5
+ state: 'installed' | 'updated' | 'unchanged';
6
+ }>;
7
+ settingsMerged: boolean;
8
+ memoryCreated: boolean;
9
+ }
10
+ /**
11
+ * Install Suzi hooks globally to ~/.claude/.
12
+ * Can be called programmatically (e.g. during login onboarding) or via the CLI command.
13
+ */
14
+ export declare function installHooksGlobal(): HookInstallResult;
15
+ export declare function registerInstallHooksCommand(program: Command): void;
16
+ //# sourceMappingURL=install-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../src/commands/install-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoUpC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;KAAE,CAAC,CAAC;IAC/E,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,CAyBtD;AAID,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwDlE"}
@@ -0,0 +1,381 @@
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.installHooksGlobal = installHooksGlobal;
7
+ exports.registerInstallHooksCommand = registerInstallHooksCommand;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const ui_1 = require("../utils/ui");
13
+ const memory_1 = require("../lib/memory");
14
+ // ── Hook Script Sources (embedded — single source of truth) ────────
15
+ const HOOK_SCRIPTS = [
16
+ {
17
+ name: 'Session Start',
18
+ file: 'suzi-session-start.sh',
19
+ content: `#!/bin/bash
20
+ # Claude Code SessionStart hook
21
+ # Injects Suzi learnings, preferences, and context into Claude's context window.
22
+ # Triggered on: startup, resume, compact
23
+
24
+ SUZI_DIR="$HOME/.suzi"
25
+ OUTPUT=""
26
+
27
+ # User preferences (trading style, conventions)
28
+ if [ -f "$SUZI_DIR/preferences.md" ]; then
29
+ OUTPUT+="=== Suzi User Preferences ===
30
+ "
31
+ OUTPUT+="$(cat "$SUZI_DIR/preferences.md")
32
+
33
+ "
34
+ fi
35
+
36
+ # Recent learnings (last 50 lines to stay within context budget)
37
+ if [ -f "$SUZI_DIR/memory/LEARNINGS.md" ]; then
38
+ CONTENT="$(tail -50 "$SUZI_DIR/memory/LEARNINGS.md")"
39
+ if [ -n "$CONTENT" ]; then
40
+ OUTPUT+="=== Suzi Learnings (Recent) ===
41
+ "
42
+ OUTPUT+="$CONTENT
43
+
44
+ "
45
+ fi
46
+ fi
47
+
48
+ # Active context (recent agents, wallet state)
49
+ if [ -f "$SUZI_DIR/memory/context.md" ]; then
50
+ OUTPUT+="=== Suzi Active Context ===
51
+ "
52
+ OUTPUT+="$(cat "$SUZI_DIR/memory/context.md")
53
+
54
+ "
55
+ fi
56
+
57
+ # Project-level SUZI.md
58
+ PROJECT_SUZI="\${CLAUDE_PROJECT_DIR:-$(pwd)}/SUZI.md"
59
+ if [ -f "$PROJECT_SUZI" ]; then
60
+ OUTPUT+="=== Project Suzi Config ===
61
+ "
62
+ OUTPUT+="$(cat "$PROJECT_SUZI")
63
+
64
+ "
65
+ fi
66
+
67
+ if [ -n "$OUTPUT" ]; then
68
+ echo "$OUTPUT"
69
+ fi
70
+ `,
71
+ },
72
+ {
73
+ name: 'CLI Capture',
74
+ file: 'suzi-capture-cli.sh',
75
+ content: `#!/bin/bash
76
+ # Claude Code PostToolUse hook (async)
77
+ # Captures suzi CLI command outcomes to daily log and learnings.
78
+ # Only processes commands containing "suzi ".
79
+
80
+ MAX_LEARNINGS=500
81
+ LOCK_TIMEOUT=5
82
+
83
+ INPUT=$(cat)
84
+ CMD=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
85
+
86
+ # Only process suzi commands
87
+ [[ "$CMD" != *"suzi "* ]] && exit 0
88
+
89
+ # Redact sensitive flags and JWT tokens from the command before logging
90
+ SAFE_CMD=$(echo "$CMD" | sed -E \\
91
+ -e 's/(--)(token|key|secret|password|auth|credential|private[-_]?[a-zA-Z]*)[= ][^ ]*/\\1\\2 <REDACTED>/gi' \\
92
+ -e 's/eyJ[A-Za-z0-9_-]+\\.eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/<TOKEN>/g')
93
+
94
+ RESULT=$(echo "$INPUT" | jq -r '.tool_result // empty' 2>/dev/null)
95
+ DATE=$(date +%Y-%m-%d)
96
+ TIME=$(date +%H:%M)
97
+ MEMORY_DIR="$HOME/.suzi/memory"
98
+ DAILY_DIR="$MEMORY_DIR/daily"
99
+ DAILY="$DAILY_DIR/$DATE.md"
100
+ LEARNINGS="$MEMORY_DIR/LEARNINGS.md"
101
+ LOCKDIR="$LEARNINGS.lock"
102
+
103
+ mkdir -p "$DAILY_DIR"
104
+
105
+ # Log sanitized command to daily activity
106
+ if [ ! -f "$DAILY" ]; then
107
+ echo "# $DATE" > "$DAILY"
108
+ echo "" >> "$DAILY"
109
+ fi
110
+ echo "- [$TIME] \\\`$SAFE_CMD\\\`" >> "$DAILY"
111
+
112
+ # Capture errors as learnings (only the error message, not full output)
113
+ if echo "$RESULT" | grep -qiE "error|failed|exception|ENOENT|timeout"; then
114
+ ERROR_LINE=$(echo "$RESULT" | grep -iE "error|failed|exception" | head -1 | cut -c1-200)
115
+ # Redact any secrets that might appear in error output
116
+ SAFE_ERROR=$(echo "$ERROR_LINE" | sed -E \\
117
+ -e 's/eyJ[A-Za-z0-9_-]+\\.eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/<TOKEN>/g' \\
118
+ -e 's/(0x)?[0-9a-fA-F]{64}/<KEY>/g')
119
+
120
+ if [ -n "$SAFE_ERROR" ]; then
121
+ NEW_LINE="- **$DATE**: \\\`error\\\` — $SAFE_ERROR (cmd: \\\`$SAFE_CMD\\\`)"
122
+
123
+ # Acquire lock (mkdir is atomic on all POSIX systems)
124
+ TRIES=0
125
+ while ! mkdir "$LOCKDIR" 2>/dev/null; do
126
+ TRIES=$((TRIES + 1))
127
+ if [ "$TRIES" -ge "$LOCK_TIMEOUT" ]; then
128
+ # Stale lock — force remove and retry once
129
+ rmdir "$LOCKDIR" 2>/dev/null
130
+ mkdir "$LOCKDIR" 2>/dev/null && break
131
+ exit 0
132
+ fi
133
+ sleep 1
134
+ done
135
+
136
+ # Ensure lock is released on exit or failure
137
+ trap 'rmdir "$LOCKDIR" 2>/dev/null' EXIT
138
+
139
+ # Dedup: skip if identical message already in last 20 lines
140
+ if [ -f "$LEARNINGS" ]; then
141
+ if tail -20 "$LEARNINGS" | grep -qF "$SAFE_ERROR"; then
142
+ exit 0
143
+ fi
144
+ fi
145
+
146
+ echo "$NEW_LINE" >> "$LEARNINGS"
147
+
148
+ # Trim to max lines (keep newest) using unique temp file
149
+ if [ -f "$LEARNINGS" ]; then
150
+ LINE_COUNT=$(wc -l < "$LEARNINGS")
151
+ if [ "$LINE_COUNT" -gt "$MAX_LEARNINGS" ]; then
152
+ TMPFILE=$(mktemp "$LEARNINGS.XXXXXX")
153
+ tail -n "$MAX_LEARNINGS" "$LEARNINGS" > "$TMPFILE" && mv "$TMPFILE" "$LEARNINGS"
154
+ fi
155
+ fi
156
+ fi
157
+ fi
158
+ `,
159
+ },
160
+ {
161
+ name: 'Pre-Compact',
162
+ file: 'suzi-pre-compact.sh',
163
+ content: `#!/bin/bash
164
+ # Claude Code PreCompact hook
165
+ # Saves Suzi-related state before context window compression.
166
+
167
+ CONTEXT="$HOME/.suzi/memory/context.md"
168
+ MEMORY_DIR="$HOME/.suzi/memory"
169
+
170
+ mkdir -p "$MEMORY_DIR"
171
+
172
+ echo "## Active Context" > "$CONTEXT"
173
+ echo "" >> "$CONTEXT"
174
+ echo "_Auto-saved before compaction: $(date -Iseconds)_" >> "$CONTEXT"
175
+ echo "" >> "$CONTEXT"
176
+
177
+ # Save today's activity log summary if it exists
178
+ DATE=$(date +%Y-%m-%d)
179
+ DAILY="$MEMORY_DIR/daily/$DATE.md"
180
+ if [ -f "$DAILY" ]; then
181
+ echo "### Today's Activity" >> "$CONTEXT"
182
+ tail -20 "$DAILY" >> "$CONTEXT"
183
+ echo "" >> "$CONTEXT"
184
+ fi
185
+ `,
186
+ },
187
+ ];
188
+ const PREFERENCES_TEMPLATE = `# Suzi Preferences
189
+
190
+ ## Trading Style
191
+ <!-- Define your risk preferences -->
192
+ <!-- Example:
193
+ - Conservative: max 5% per position
194
+ - Prefer high-liquidity markets
195
+ - Always set stop-losses
196
+ -->
197
+
198
+ ## Protocol Preferences
199
+ <!-- Which protocols and chains do you prefer? -->
200
+ <!-- Example:
201
+ - Primary: Polymarket
202
+ - Chain: EVM
203
+ -->
204
+
205
+ ## Agent Conventions
206
+ <!-- Any patterns you want all your agents to follow -->
207
+ <!-- Example:
208
+ - Always log on activate/deactivate
209
+ - Include a kill switch for drawdown > 10%
210
+ - Use 5-minute cron intervals minimum
211
+ -->
212
+ `;
213
+ const HOOK_CONFIG = {
214
+ hooks: {
215
+ SessionStart: [
216
+ {
217
+ matcher: 'startup|resume|compact',
218
+ hooks: [
219
+ {
220
+ type: 'command',
221
+ command: '$HOME/.claude/hooks/suzi-session-start.sh',
222
+ },
223
+ ],
224
+ },
225
+ ],
226
+ PostToolUse: [
227
+ {
228
+ matcher: 'Bash',
229
+ hooks: [
230
+ {
231
+ type: 'command',
232
+ command: '$HOME/.claude/hooks/suzi-capture-cli.sh',
233
+ async: true,
234
+ },
235
+ ],
236
+ },
237
+ ],
238
+ PreCompact: [
239
+ {
240
+ hooks: [
241
+ {
242
+ type: 'command',
243
+ command: '$HOME/.claude/hooks/suzi-pre-compact.sh',
244
+ },
245
+ ],
246
+ },
247
+ ],
248
+ },
249
+ };
250
+ // ── Core Logic (reusable) ─────────────────────────────────────────
251
+ function writeScript(filePath, content) {
252
+ const dir = path_1.default.dirname(filePath);
253
+ if (!fs_1.default.existsSync(dir)) {
254
+ fs_1.default.mkdirSync(dir, { recursive: true });
255
+ }
256
+ if (fs_1.default.existsSync(filePath)) {
257
+ const existing = fs_1.default.readFileSync(filePath, 'utf-8');
258
+ if (existing === content)
259
+ return 'unchanged';
260
+ fs_1.default.writeFileSync(filePath, content, { mode: 0o755 });
261
+ return 'updated';
262
+ }
263
+ fs_1.default.writeFileSync(filePath, content, { mode: 0o755 });
264
+ return 'installed';
265
+ }
266
+ function mergeSettings(settingsPath, hookConfig) {
267
+ let existing = {};
268
+ if (fs_1.default.existsSync(settingsPath)) {
269
+ try {
270
+ existing = JSON.parse(fs_1.default.readFileSync(settingsPath, 'utf-8'));
271
+ }
272
+ catch {
273
+ existing = {};
274
+ }
275
+ }
276
+ // Merge hooks — preserve existing hooks, add Suzi ones
277
+ if (!existing.hooks) {
278
+ existing.hooks = {};
279
+ }
280
+ for (const [event, entries] of Object.entries(hookConfig.hooks)) {
281
+ if (!existing.hooks[event]) {
282
+ existing.hooks[event] = entries;
283
+ }
284
+ else {
285
+ // Check if suzi hooks already present
286
+ const existingCommands = existing.hooks[event]
287
+ .flatMap((e) => (e.hooks || []).map((h) => h.command));
288
+ for (const entry of entries) {
289
+ const newCommands = entry.hooks.map((h) => h.command);
290
+ const alreadyPresent = newCommands.every((cmd) => existingCommands.includes(cmd));
291
+ if (!alreadyPresent) {
292
+ existing.hooks[event].push(entry);
293
+ }
294
+ }
295
+ }
296
+ }
297
+ const dir = path_1.default.dirname(settingsPath);
298
+ if (!fs_1.default.existsSync(dir)) {
299
+ fs_1.default.mkdirSync(dir, { recursive: true });
300
+ }
301
+ fs_1.default.writeFileSync(settingsPath, JSON.stringify(existing, null, 2));
302
+ }
303
+ /**
304
+ * Install Suzi hooks globally to ~/.claude/.
305
+ * Can be called programmatically (e.g. during login onboarding) or via the CLI command.
306
+ */
307
+ function installHooksGlobal() {
308
+ const home = os_1.default.homedir();
309
+ const hooksDir = path_1.default.join(home, '.claude', 'hooks');
310
+ // 1. Write hook scripts
311
+ const scripts = HOOK_SCRIPTS.map((script) => {
312
+ const filePath = path_1.default.join(hooksDir, script.file);
313
+ const state = writeScript(filePath, script.content);
314
+ return { name: script.name, state };
315
+ });
316
+ // 2. Merge settings
317
+ const settingsPath = path_1.default.join(home, '.claude', 'settings.json');
318
+ mergeSettings(settingsPath, HOOK_CONFIG);
319
+ // 3. Ensure memory directories
320
+ const memoryDir = (0, memory_1.getMemoryDir)();
321
+ const dailyDir = path_1.default.join(memoryDir, 'daily');
322
+ let memoryCreated = false;
323
+ if (!fs_1.default.existsSync(dailyDir)) {
324
+ fs_1.default.mkdirSync(dailyDir, { recursive: true });
325
+ memoryCreated = true;
326
+ }
327
+ return { scripts, settingsMerged: true, memoryCreated };
328
+ }
329
+ // ── CLI Command ───────────────────────────────────────────────────
330
+ function registerInstallHooksCommand(program) {
331
+ program
332
+ .command('install-hooks')
333
+ .description('Install Claude Code hooks for auto-context injection')
334
+ .option('--preferences', 'Also create a starter preferences.md file')
335
+ .action((opts) => {
336
+ (0, ui_1.header)('Install Suzi Hooks (Global)');
337
+ console.log();
338
+ const result = installHooksGlobal();
339
+ const lines = [];
340
+ for (const s of result.scripts) {
341
+ const icon = s.state === 'installed' ? chalk_1.default.green('✓') : s.state === 'updated' ? chalk_1.default.yellow('↑') : chalk_1.default.gray('–');
342
+ lines.push(` ${icon} ${s.name} hook: ${s.state}`);
343
+ }
344
+ lines.push(` ${chalk_1.default.green('✓')} ~/.claude/settings.json: hooks configured`);
345
+ if (result.memoryCreated) {
346
+ lines.push(` ${chalk_1.default.green('✓')} ~/.suzi/memory/daily/: created`);
347
+ }
348
+ else {
349
+ lines.push(` ${chalk_1.default.gray('–')} ~/.suzi/memory/: already exists`);
350
+ }
351
+ // Optionally create preferences.md
352
+ if (opts.preferences) {
353
+ const prefsPath = path_1.default.join(os_1.default.homedir(), '.suzi', 'preferences.md');
354
+ if (!fs_1.default.existsSync(prefsPath)) {
355
+ fs_1.default.writeFileSync(prefsPath, PREFERENCES_TEMPLATE);
356
+ lines.push(` ${chalk_1.default.green('✓')} ~/.suzi/preferences.md: created`);
357
+ }
358
+ else {
359
+ lines.push(` ${chalk_1.default.gray('–')} ~/.suzi/preferences.md: already exists`);
360
+ }
361
+ }
362
+ for (const line of lines) {
363
+ console.log(line);
364
+ }
365
+ console.log();
366
+ (0, ui_1.divider)();
367
+ console.log();
368
+ (0, ui_1.success)('Global hooks installed!');
369
+ console.log();
370
+ (0, ui_1.info)('Hooks installed to ~/.claude/hooks/ — active in all projects.');
371
+ (0, ui_1.info)('Claude Code will now auto-inject Suzi context on session start.');
372
+ (0, ui_1.info)('CLI command outcomes will be captured to learnings (async).');
373
+ (0, ui_1.info)('Context will be preserved before compaction.');
374
+ if (!opts.preferences) {
375
+ console.log();
376
+ (0, ui_1.info)(`Tip: Run ${chalk_1.default.cyan('suzi install-hooks --preferences')} to create a preferences file.`);
377
+ }
378
+ console.log();
379
+ });
380
+ }
381
+ //# sourceMappingURL=install-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../src/commands/install-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerListActionsCommand(program: Command): void;
3
+ //# sourceMappingURL=list-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-actions.d.ts","sourceRoot":"","sources":["../../src/commands/list-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2GpC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwIjE"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.registerListToolsCommand = registerListToolsCommand;
6
+ exports.registerListActionsCommand = registerListActionsCommand;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const path_1 = __importDefault(require("path"));
@@ -92,10 +92,10 @@ function groupByProtocol(actions) {
92
92
  }
93
93
  return groups;
94
94
  }
95
- function registerListToolsCommand(program) {
95
+ function registerListActionsCommand(program) {
96
96
  const cmd = program
97
- .command('list-tools')
98
- .alias('tools')
97
+ .command('list-actions')
98
+ .alias('actions')
99
99
  .description('List all available protocols and actions')
100
100
  .option('--protocol <name>', 'Filter by protocol name')
101
101
  .option('--verbose', 'Show all actions per protocol')
@@ -109,7 +109,7 @@ function registerListToolsCommand(program) {
109
109
  // --schema: show schema for a single action
110
110
  if (opts.schema) {
111
111
  if (!opts.protocol) {
112
- (0, ui_1.error)('--schema requires --protocol. Example: suzi list-tools --protocol polymarket --schema place_order');
112
+ (0, ui_1.error)('--schema requires --protocol. Example: suzi list-actions --protocol polymarket --schema place_order');
113
113
  return;
114
114
  }
115
115
  const protocolActions = grouped.get(opts.protocol);
@@ -129,11 +129,15 @@ function registerListToolsCommand(program) {
129
129
  }
130
130
  return;
131
131
  }
132
- console.log(JSON.stringify(match.parameters, null, 2));
132
+ const schema = {
133
+ parameters: match.parameters,
134
+ ...(match.response ? { response: match.response } : {}),
135
+ };
136
+ console.log(JSON.stringify(schema, null, 2));
133
137
  return;
134
138
  }
135
139
  // Default: list protocols and actions
136
- (0, ui_1.header)('Available Tools');
140
+ (0, ui_1.header)('Available Actions');
137
141
  console.log();
138
142
  const protocols = opts.protocol
139
143
  ? [[opts.protocol, grouped.get(opts.protocol)]]
@@ -143,50 +147,52 @@ function registerListToolsCommand(program) {
143
147
  (0, ui_1.info)(`Available: ${Array.from(grouped.keys()).join(', ')}`);
144
148
  return;
145
149
  }
150
+ const showDetails = opts.verbose || opts.protocol;
146
151
  for (const [protocol, protocolActions] of protocols) {
147
152
  if (!protocolActions)
148
153
  continue;
149
154
  const badge = chainBadge(protocolActions);
150
- console.log(` ${chalk_1.default.bold(protocol)} ${badge}`);
151
- const showDetails = opts.verbose || opts.protocol;
155
+ console.log(` ${ui_1.colors.highlight(protocol)} ${badge}`);
156
+ console.log();
152
157
  if (showDetails) {
153
158
  const readActions = protocolActions.filter((a) => isReadAction(a.name));
154
159
  const writeActions = protocolActions.filter((a) => !isReadAction(a.name));
155
160
  if (writeActions.length > 0) {
156
- console.log();
157
161
  console.log(` ${chalk_1.default.yellow('Write Actions:')}`);
158
162
  for (const action of writeActions) {
159
163
  const shortName = action.name.includes('.') ? action.name.split('.')[1] : action.name;
160
164
  console.log(` ${ui_1.colors.highlight(shortName)} ${ui_1.colors.muted(action.description)}`);
161
165
  }
166
+ console.log();
162
167
  }
163
168
  if (readActions.length > 0) {
164
- console.log();
165
169
  console.log(` ${chalk_1.default.cyan('Read Actions:')}`);
166
170
  for (const action of readActions) {
167
171
  const shortName = action.name.includes('.') ? action.name.split('.')[1] : action.name;
168
172
  console.log(` ${ui_1.colors.highlight(shortName)} ${ui_1.colors.muted(action.description)}`);
169
173
  }
174
+ console.log();
170
175
  }
171
176
  }
172
177
  else {
173
- const writeCount = protocolActions.filter((a) => !isReadAction(a.name)).length;
174
- const readCount = protocolActions.filter((a) => isReadAction(a.name)).length;
175
- console.log(` ${ui_1.colors.muted(`${writeCount} write`)} + ${ui_1.colors.muted(`${readCount} read`)} actions`);
178
+ for (const action of protocolActions) {
179
+ const shortName = action.name.includes('.') ? action.name.split('.')[1] : action.name;
180
+ console.log(` ${ui_1.colors.highlight(shortName)} ${ui_1.colors.muted(action.description)}`);
181
+ }
182
+ console.log();
176
183
  }
177
- console.log();
178
184
  }
179
185
  const totalActions = actions.length;
180
186
  (0, ui_1.divider)();
181
187
  (0, ui_1.info)(`${grouped.size} protocols, ${totalActions} total actions`);
182
188
  const age = cacheAge();
183
189
  if (age) {
184
- (0, ui_1.info)(`Cached ${age}. Run ${chalk_1.default.cyan('suzi list-tools reload')} to refresh.`);
190
+ (0, ui_1.info)(`Cached ${age}. Run ${chalk_1.default.cyan('suzi list-actions reload')} to refresh.`);
185
191
  }
186
192
  if (!opts.verbose && !opts.protocol) {
187
193
  (0, ui_1.info)('Use --verbose or --protocol <name> for details.');
188
194
  }
189
- (0, ui_1.info)(`Use ${chalk_1.default.cyan('suzi list-tools --protocol <name> --schema <action>')} to view schema.`);
195
+ (0, ui_1.info)(`Use ${chalk_1.default.cyan('suzi list-actions --protocol <name> --schema <action>')} to view schema.`);
190
196
  }
191
197
  catch (err) {
192
198
  (0, ui_1.error)(`Failed to fetch actions: ${err.message}`);
@@ -209,4 +215,4 @@ function registerListToolsCommand(program) {
209
215
  }
210
216
  });
211
217
  }
212
- //# sourceMappingURL=list-tools.js.map
218
+ //# sourceMappingURL=list-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-actions.js","sourceRoot":"","sources":["../../src/commands/list-actions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-triggers.d.ts","sourceRoot":"","sources":["../../src/commands/list-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCpC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2IlE"}
1
+ {"version":3,"file":"list-triggers.d.ts","sourceRoot":"","sources":["../../src/commands/list-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsDpC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4JlE"}
@@ -30,6 +30,16 @@ function formatConfigFields(schema) {
30
30
  }
31
31
  return lines;
32
32
  }
33
+ function formatOutputFields(schema) {
34
+ const properties = (schema?.properties ?? {});
35
+ const lines = [];
36
+ for (const [name, prop] of Object.entries(properties)) {
37
+ const type = prop.type ?? 'unknown';
38
+ const desc = prop.description ? ` ${ui_1.colors.muted(prop.description)}` : '';
39
+ lines.push(` ${ui_1.colors.highlight(name)} ${ui_1.colors.muted(`(${type})`)}${desc}`);
40
+ }
41
+ return lines;
42
+ }
33
43
  function registerListTriggersCommand(program) {
34
44
  program
35
45
  .command('list-triggers')
@@ -59,6 +69,7 @@ function registerListTriggersCommand(program) {
59
69
  ? Array.from(groupByProtocol(allRes.data.triggers).keys())
60
70
  : [];
61
71
  spinner.fail(`Protocol "${opts.protocol}" not found`);
72
+ process.exitCode = 1;
62
73
  if (allProtocols.length > 0) {
63
74
  (0, ui_1.info)(`Available: ${allProtocols.join(', ')}`);
64
75
  }
@@ -74,6 +85,7 @@ function registerListTriggersCommand(program) {
74
85
  const protocolTriggers = grouped.get(opts.protocol);
75
86
  if (!protocolTriggers) {
76
87
  spinner.fail(`Protocol "${opts.protocol}" not found.`);
88
+ process.exitCode = 1;
77
89
  (0, ui_1.info)(`Available: ${Array.from(grouped.keys()).join(', ')}`);
78
90
  return;
79
91
  }
@@ -81,6 +93,7 @@ function registerListTriggersCommand(program) {
81
93
  const match = protocolTriggers.find((t) => t.name === fullName);
82
94
  if (!match) {
83
95
  spinner.fail(`Trigger "${opts.schema}" not found in ${opts.protocol}.`);
96
+ process.exitCode = 1;
84
97
  (0, ui_1.info)('Available triggers:');
85
98
  for (const t of protocolTriggers) {
86
99
  const short = t.name.includes('.') ? t.name.split('.')[1] : t.name;
@@ -89,7 +102,11 @@ function registerListTriggersCommand(program) {
89
102
  return;
90
103
  }
91
104
  spinner.succeed(`Schema for ${opts.protocol}.${opts.schema}`);
92
- console.log(JSON.stringify(match.configSchema, null, 2));
105
+ const schema = {
106
+ configSchema: match.configSchema,
107
+ ...(match.outputSchema ? { outputSchema: match.outputSchema } : {}),
108
+ };
109
+ console.log(JSON.stringify(schema, null, 2));
93
110
  return;
94
111
  }
95
112
  // Default: list protocols and triggers
@@ -117,6 +134,15 @@ function registerListTriggersCommand(program) {
117
134
  console.log(line);
118
135
  }
119
136
  }
137
+ if (trigger.outputSchema) {
138
+ const outputLines = formatOutputFields(trigger.outputSchema);
139
+ if (outputLines.length > 0) {
140
+ console.log(` ${chalk_1.default.cyan('Output:')}`);
141
+ for (const line of outputLines) {
142
+ console.log(line);
143
+ }
144
+ }
145
+ }
120
146
  if (trigger.example) {
121
147
  console.log(` ${chalk_1.default.cyan('Example:')}`);
122
148
  for (const line of trigger.example.split('\n')) {