@cynicalsally/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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +332 -0
  3. package/dist/commands/login.d.ts +3 -0
  4. package/dist/commands/login.d.ts.map +1 -0
  5. package/dist/commands/login.js +54 -0
  6. package/dist/commands/login.js.map +1 -0
  7. package/dist/commands/logout.d.ts +3 -0
  8. package/dist/commands/logout.d.ts.map +1 -0
  9. package/dist/commands/logout.js +15 -0
  10. package/dist/commands/logout.js.map +1 -0
  11. package/dist/commands/mcp.d.ts +3 -0
  12. package/dist/commands/mcp.d.ts.map +1 -0
  13. package/dist/commands/mcp.js +47 -0
  14. package/dist/commands/mcp.js.map +1 -0
  15. package/dist/commands/results.d.ts +3 -0
  16. package/dist/commands/results.d.ts.map +1 -0
  17. package/dist/commands/results.js +60 -0
  18. package/dist/commands/results.js.map +1 -0
  19. package/dist/commands/roast.d.ts +3 -0
  20. package/dist/commands/roast.d.ts.map +1 -0
  21. package/dist/commands/roast.js +233 -0
  22. package/dist/commands/roast.js.map +1 -0
  23. package/dist/commands/tools.d.ts +8 -0
  24. package/dist/commands/tools.d.ts.map +1 -0
  25. package/dist/commands/tools.js +460 -0
  26. package/dist/commands/tools.js.map +1 -0
  27. package/dist/commands/upgrade.d.ts +3 -0
  28. package/dist/commands/upgrade.d.ts.map +1 -0
  29. package/dist/commands/upgrade.js +82 -0
  30. package/dist/commands/upgrade.js.map +1 -0
  31. package/dist/commands/usage.d.ts +3 -0
  32. package/dist/commands/usage.d.ts.map +1 -0
  33. package/dist/commands/usage.js +87 -0
  34. package/dist/commands/usage.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +60 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mcp-server.d.ts +12 -0
  40. package/dist/mcp-server.d.ts.map +1 -0
  41. package/dist/mcp-server.js +266 -0
  42. package/dist/mcp-server.js.map +1 -0
  43. package/dist/utils/api.d.ts +108 -0
  44. package/dist/utils/api.d.ts.map +1 -0
  45. package/dist/utils/api.js +79 -0
  46. package/dist/utils/api.js.map +1 -0
  47. package/dist/utils/background.d.ts +9 -0
  48. package/dist/utils/background.d.ts.map +1 -0
  49. package/dist/utils/background.js +91 -0
  50. package/dist/utils/background.js.map +1 -0
  51. package/dist/utils/config.d.ts +13 -0
  52. package/dist/utils/config.d.ts.map +1 -0
  53. package/dist/utils/config.js +65 -0
  54. package/dist/utils/config.js.map +1 -0
  55. package/dist/utils/files.d.ts +14 -0
  56. package/dist/utils/files.d.ts.map +1 -0
  57. package/dist/utils/files.js +141 -0
  58. package/dist/utils/files.js.map +1 -0
  59. package/dist/utils/flavor.d.ts +48 -0
  60. package/dist/utils/flavor.d.ts.map +1 -0
  61. package/dist/utils/flavor.js +79 -0
  62. package/dist/utils/flavor.js.map +1 -0
  63. package/dist/utils/git.d.ts +29 -0
  64. package/dist/utils/git.d.ts.map +1 -0
  65. package/dist/utils/git.js +90 -0
  66. package/dist/utils/git.js.map +1 -0
  67. package/dist/utils/output.d.ts +5 -0
  68. package/dist/utils/output.d.ts.map +1 -0
  69. package/dist/utils/output.js +206 -0
  70. package/dist/utils/output.js.map +1 -0
  71. package/dist/utils/report.d.ts +12 -0
  72. package/dist/utils/report.d.ts.map +1 -0
  73. package/dist/utils/report.js +190 -0
  74. package/dist/utils/report.js.map +1 -0
  75. package/package.json +54 -0
@@ -0,0 +1,460 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { resolve } from "node:path";
5
+ import { readFileSync, statSync, existsSync, readdirSync } from "node:fs";
6
+ import { extname } from "node:path";
7
+ import { submitTool } from "../utils/api.js";
8
+ import { printSally, handleApiError } from "../utils/output.js";
9
+ import { saveToolReport } from "../utils/report.js";
10
+ import { getFlavor } from "../utils/flavor.js";
11
+ // ---------------------------------------------------------------------------
12
+ // Shared helpers
13
+ // ---------------------------------------------------------------------------
14
+ const TERMINAL_WIDTH = Math.min(process.stdout.columns || 80, 90);
15
+ const MAX_INPUT_SIZE = 500 * 1024; // 500KB
16
+ function divider() {
17
+ console.log(chalk.gray(" " + "\u2500".repeat(Math.min(56, TERMINAL_WIDTH - 4))));
18
+ }
19
+ function highlightCode(text) {
20
+ return text.replace(/`([^`]+)`/g, (_, code) => chalk.cyan(`\`${code}\``));
21
+ }
22
+ function printWrapped(text, indent = " ", color = chalk.white) {
23
+ const contentWidth = TERMINAL_WIDTH - 6;
24
+ const words = highlightCode(text).split(/\s+/);
25
+ const lines = [];
26
+ let current = "";
27
+ for (const word of words) {
28
+ const plainCurrent = current.replace(/\x1b\[[0-9;]*m/g, "");
29
+ const plainWord = word.replace(/\x1b\[[0-9;]*m/g, "");
30
+ if (plainCurrent.length + plainWord.length + 1 > contentWidth && current) {
31
+ lines.push(indent + current);
32
+ current = word;
33
+ }
34
+ else {
35
+ current = current ? current + " " + word : word;
36
+ }
37
+ }
38
+ if (current)
39
+ lines.push(indent + current);
40
+ for (const line of lines)
41
+ console.log(color(line));
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // Input resolution (#1: extracted from 6 copy-pasted patterns)
45
+ // ---------------------------------------------------------------------------
46
+ /** Format collected files into markdown for the API */
47
+ function filesToContent(files) {
48
+ return files.map((f) => `### ${f.path}\n\`\`\`\n${f.content}\n\`\`\``).join("\n\n");
49
+ }
50
+ /** Read file content or return raw text argument */
51
+ function resolveContent(input) {
52
+ const resolved = resolve(input);
53
+ try {
54
+ if (existsSync(resolved) && statSync(resolved).isFile()) {
55
+ const stat = statSync(resolved);
56
+ if (stat.size > MAX_INPUT_SIZE) {
57
+ throw new Error(`File too large (${Math.round(stat.size / 1024)}KB). Max ${MAX_INPUT_SIZE / 1024}KB.`);
58
+ }
59
+ return readFileSync(resolved, "utf-8");
60
+ }
61
+ }
62
+ catch (err) {
63
+ if (err instanceof Error && err.message.includes("too large"))
64
+ throw err;
65
+ }
66
+ return input;
67
+ }
68
+ /** Read from stdin if available (with size limit) */
69
+ async function readStdin() {
70
+ if (process.stdin.isTTY)
71
+ return null;
72
+ const chunks = [];
73
+ let totalSize = 0;
74
+ for await (const chunk of process.stdin) {
75
+ totalSize += chunk.length;
76
+ if (totalSize > MAX_INPUT_SIZE) {
77
+ throw new Error(`Input too large (>${MAX_INPUT_SIZE / 1024}KB). Pipe a smaller file.`);
78
+ }
79
+ chunks.push(chunk);
80
+ }
81
+ const text = Buffer.concat(chunks).toString("utf-8").trim();
82
+ return text || null;
83
+ }
84
+ /**
85
+ * Resolve input from: explicit arg → stdin → directory scan.
86
+ * Covers explain, refactor, and frontend commands.
87
+ */
88
+ async function resolveInput(input, emptyMessage, opts) {
89
+ if (input) {
90
+ if (opts?.allowDirectory) {
91
+ const resolved = resolve(input);
92
+ try {
93
+ if (statSync(resolved).isDirectory()) {
94
+ const { collectFiles } = await import("../utils/files.js");
95
+ return filesToContent(collectFiles(resolved));
96
+ }
97
+ }
98
+ catch { /* not a directory, fall through */ }
99
+ }
100
+ return resolveContent(input);
101
+ }
102
+ const stdin = await readStdin();
103
+ if (stdin)
104
+ return stdin;
105
+ const { collectFiles } = await import("../utils/files.js");
106
+ const files = collectFiles(resolve("."));
107
+ if (files.length > 0)
108
+ return filesToContent(files);
109
+ console.log(chalk.yellow(`\n${emptyMessage}`) + chalk.gray(" No code files found.\n"));
110
+ process.exit(1);
111
+ }
112
+ function displayRefactors(items) {
113
+ divider();
114
+ console.log();
115
+ console.log(chalk.magenta.bold(" REFACTORING SUGGESTIONS"));
116
+ console.log();
117
+ for (let i = 0; i < items.length; i++) {
118
+ const r = items[i];
119
+ const priorityColor = r.priority === "high" ? chalk.red.bold : r.priority === "medium" ? chalk.yellow.bold : chalk.gray;
120
+ console.log(` ${chalk.white.bold(`${i + 1}.`)} ${priorityColor(r.priority.toUpperCase())} ${chalk.white.bold(r.title)}`);
121
+ console.log(` ${chalk.gray("Pattern:")} ${chalk.cyan(r.pattern)}`);
122
+ if (r.before) {
123
+ console.log(chalk.gray(" Before:"));
124
+ for (const line of r.before.split("\n").slice(0, 6)) {
125
+ console.log(chalk.red(` ${line}`));
126
+ }
127
+ }
128
+ if (r.after) {
129
+ console.log(chalk.gray(" After:"));
130
+ for (const line of r.after.split("\n").slice(0, 6)) {
131
+ console.log(chalk.green(` ${line}`));
132
+ }
133
+ }
134
+ console.log();
135
+ }
136
+ }
137
+ function displayIssues(items) {
138
+ divider();
139
+ console.log();
140
+ console.log(chalk.magenta.bold(" ISSUES FOUND"));
141
+ console.log();
142
+ for (let i = 0; i < items.length; i++) {
143
+ const issue = items[i];
144
+ const sevColor = issue.severity === "critical" ? chalk.red.bold : issue.severity === "major" ? chalk.yellow.bold : chalk.gray;
145
+ console.log(` ${chalk.white.bold(`${i + 1}.`)} ${sevColor(issue.severity.toUpperCase())} ${chalk.cyan(issue.category)}`);
146
+ printWrapped(issue.description, " ", chalk.gray);
147
+ if (issue.fix) {
148
+ console.log(` ${chalk.green("\u2713")} ${chalk.green(highlightCode(issue.fix))}`);
149
+ }
150
+ console.log();
151
+ }
152
+ }
153
+ function displayRewrites(items) {
154
+ divider();
155
+ console.log();
156
+ console.log(chalk.magenta.bold(" COPY REWRITES"));
157
+ console.log();
158
+ for (let i = 0; i < items.length; i++) {
159
+ const rw = items[i];
160
+ console.log(` ${chalk.white.bold(`${i + 1}.`)}`);
161
+ console.log(chalk.red(` Before: "${rw.original}"`));
162
+ console.log(chalk.green(` After: "${rw.improved}"`));
163
+ printWrapped(rw.why, " ", chalk.gray);
164
+ console.log();
165
+ }
166
+ }
167
+ const dataDisplayers = {
168
+ refactors: (items) => displayRefactors(items),
169
+ issues: (items) => displayIssues(items),
170
+ rewrites: (items) => displayRewrites(items),
171
+ };
172
+ function displayToolResponse(response) {
173
+ const { voice, messages, data } = response;
174
+ // Header
175
+ const toolLabel = response.tool.replace("_", " ").toUpperCase();
176
+ console.log(chalk.magenta.bold(` SALLY'S ${toolLabel}`));
177
+ console.log(chalk.gray(` ${response.meta.tool} \u2022 ${response.meta.model}`));
178
+ console.log();
179
+ // Score (if present)
180
+ const score = data.scorecard;
181
+ if (typeof score === "number") {
182
+ const formatted = score.toFixed(1);
183
+ const colorFn = score < 4 ? chalk.red.bold : score < 7 ? chalk.yellow.bold : chalk.green.bold;
184
+ const filled = Math.round(score);
185
+ const bar = chalk.magenta("\u2588".repeat(filled)) + chalk.gray("\u2591".repeat(10 - filled));
186
+ console.log(` ${chalk.gray("Score:")} ${colorFn(formatted)}/10 [${bar}]`);
187
+ console.log();
188
+ divider();
189
+ console.log();
190
+ }
191
+ // Messages
192
+ if (messages.length > 0) {
193
+ const intro = messages.find((m) => m.type === "intro");
194
+ if (intro) {
195
+ printWrapped(intro.text, " ", chalk.white.italic);
196
+ console.log();
197
+ }
198
+ const body = messages.filter((m) => m.type !== "intro" && m.type !== "final");
199
+ if (body.length > 0) {
200
+ divider();
201
+ console.log();
202
+ for (let i = 0; i < body.length; i++) {
203
+ const label = body[i].type.toUpperCase();
204
+ const num = chalk.magenta.bold(` ${i + 1}.`);
205
+ const typeTag = chalk.gray(` [${label}]`);
206
+ console.log(`${num}${typeTag}`);
207
+ printWrapped(body[i].text, " ", chalk.white);
208
+ console.log();
209
+ }
210
+ }
211
+ const final = messages.find((m) => m.type === "final");
212
+ if (final) {
213
+ divider();
214
+ console.log();
215
+ console.log(chalk.gray(" VERDICT"));
216
+ console.log();
217
+ printWrapped(final.text, " ", chalk.white.bold);
218
+ console.log();
219
+ }
220
+ }
221
+ // Data sections via displayer map
222
+ for (const [key, displayer] of Object.entries(dataDisplayers)) {
223
+ const items = data[key];
224
+ if (items && items.length > 0)
225
+ displayer(items);
226
+ }
227
+ // Bright side & hardest sneer
228
+ divider();
229
+ console.log();
230
+ if (voice.bright_side) {
231
+ printWrapped(`\u2728 ${voice.bright_side}`, " ", chalk.green.italic);
232
+ }
233
+ if (voice.hardest_sneer) {
234
+ console.log();
235
+ printWrapped(`\uD83D\uDD25 ${voice.hardest_sneer}`, " ", chalk.red.bold);
236
+ }
237
+ console.log();
238
+ // Quota info
239
+ if (response.quota) {
240
+ const { remaining, limit } = response.quota;
241
+ if (remaining < Infinity && limit < Infinity) {
242
+ console.log(chalk.gray(` ${remaining}/${limit} uses remaining this month`));
243
+ console.log();
244
+ }
245
+ }
246
+ }
247
+ // ---------------------------------------------------------------------------
248
+ // Tool runner (#4: type-safe spinner key via keyof Flavor)
249
+ // ---------------------------------------------------------------------------
250
+ async function runTool(toolName, content, spinnerKey, options) {
251
+ const f = getFlavor();
252
+ const spinnerText = f[spinnerKey] || "Processing...";
253
+ printSally();
254
+ console.log();
255
+ const spinner = ora({ text: spinnerText, color: "magenta" }).start();
256
+ try {
257
+ const response = await submitTool({
258
+ tool: toolName,
259
+ content,
260
+ lang: options.lang || "en",
261
+ });
262
+ spinner.stop();
263
+ if (options.json) {
264
+ console.log(JSON.stringify(response, null, 2));
265
+ }
266
+ else {
267
+ displayToolResponse(response);
268
+ const savedPath = saveToolReport(response);
269
+ if (savedPath) {
270
+ console.log(chalk.gray(" \uD83D\uDCBE ") + chalk.gray("Saved to ") + chalk.cyan(savedPath));
271
+ console.log();
272
+ }
273
+ }
274
+ }
275
+ catch (err) {
276
+ spinner.stop();
277
+ handleApiError(err);
278
+ process.exit(1);
279
+ }
280
+ }
281
+ // ---------------------------------------------------------------------------
282
+ // Commands (#1: explain, refactor, frontend use resolveInput)
283
+ // ---------------------------------------------------------------------------
284
+ export const explainCommand = new Command("explain")
285
+ .description("Sally explains code in her cynical but accurate style")
286
+ .argument("[input]", "File path or code snippet to explain")
287
+ .option("--lang <lang>", "Response language", "en")
288
+ .option("--json", "Output raw JSON")
289
+ .action(async (input, options) => {
290
+ const content = await resolveInput(input, "Nothing to explain here.");
291
+ await runTool("explain", content, "tool_spinner_explain", options);
292
+ });
293
+ export const reviewPrCommand = new Command("review-pr")
294
+ .description("Sally reviews a PR diff with devastating precision")
295
+ .argument("[pr-number]", "PR number (uses git to get diff) or file with diff")
296
+ .option("--lang <lang>", "Response language", "en")
297
+ .option("--json", "Output raw JSON")
298
+ .action(async (prNumber, options) => {
299
+ let content = "";
300
+ const stdin = await readStdin();
301
+ if (stdin) {
302
+ content = stdin;
303
+ }
304
+ else if (prNumber) {
305
+ const resolved = resolve(prNumber);
306
+ try {
307
+ if (existsSync(resolved) && statSync(resolved).isFile()) {
308
+ content = readFileSync(resolved, "utf-8");
309
+ }
310
+ else {
311
+ const { execSync } = await import("node:child_process");
312
+ try {
313
+ const safePr = String(prNumber).replace(/[^0-9]/g, "");
314
+ content = execSync(`gh pr diff ${safePr}`, { encoding: "utf-8", maxBuffer: 5_000_000 });
315
+ }
316
+ catch {
317
+ try {
318
+ content = execSync(`git diff main...HEAD`, { encoding: "utf-8", maxBuffer: 5_000_000 });
319
+ }
320
+ catch {
321
+ console.log(chalk.yellow(`\nCouldn't get PR diff for #${prNumber}.`) + chalk.gray(" Install 'gh' CLI or pipe the diff directly.\n"));
322
+ console.log(chalk.gray(" gh pr diff 42 | sally review-pr"));
323
+ console.log(chalk.gray(" git diff main | sally review-pr\n"));
324
+ process.exit(1);
325
+ }
326
+ }
327
+ }
328
+ }
329
+ catch {
330
+ console.log(chalk.red(`\nCan't read ${prNumber}.`) + chalk.gray(" Is that a real path?\n"));
331
+ process.exit(1);
332
+ }
333
+ }
334
+ else {
335
+ const { execSync } = await import("node:child_process");
336
+ try {
337
+ content = execSync("git diff main...HEAD", { encoding: "utf-8", maxBuffer: 5_000_000 });
338
+ if (!content.trim()) {
339
+ content = execSync("git diff HEAD~1..HEAD", { encoding: "utf-8", maxBuffer: 5_000_000 });
340
+ }
341
+ }
342
+ catch {
343
+ console.log(chalk.yellow("\nNo diff found.") + chalk.gray(" Are you on a branch with changes?\n"));
344
+ console.log(chalk.gray(" sally review-pr 42") + chalk.gray(" # Review PR #42 (needs gh CLI)"));
345
+ console.log(chalk.gray(" git diff main | sally review-pr") + chalk.gray(" # Pipe a diff"));
346
+ console.log(chalk.gray(" sally review-pr diff.patch") + chalk.gray(" # Read from file\n"));
347
+ process.exit(1);
348
+ }
349
+ }
350
+ if (!content.trim()) {
351
+ console.log(chalk.yellow("\nEmpty diff.") + chalk.gray(" Nothing to review. That's... actually your best work.\n"));
352
+ process.exit(1);
353
+ }
354
+ await runTool("review_pr", content, "tool_spinner_review_pr", options);
355
+ });
356
+ export const refactorCommand = new Command("refactor")
357
+ .description("Sally suggests concrete refactoring with code examples")
358
+ .argument("[input]", "File path or code to refactor")
359
+ .option("--lang <lang>", "Response language", "en")
360
+ .option("--json", "Output raw JSON")
361
+ .action(async (input, options) => {
362
+ const content = await resolveInput(input, "Nothing to refactor here.");
363
+ await runTool("refactor", content, "tool_spinner_refactor", options);
364
+ });
365
+ export const brainstormCommand = new Command("brainstorm")
366
+ .description("Sally gives cynical but valuable feedback on your idea")
367
+ .argument("[description...]", "Description of your idea or approach")
368
+ .option("--lang <lang>", "Response language", "en")
369
+ .option("--json", "Output raw JSON")
370
+ .action(async (descParts, options) => {
371
+ let content = "";
372
+ const rawInput = descParts.join(" ").toLowerCase();
373
+ const needsProjectContext = descParts.length === 0 ||
374
+ rawInput.includes("this project") || rawInput.includes("this code") ||
375
+ rawInput.includes("this repo") || rawInput.includes("this app") ||
376
+ rawInput.includes("dit project") || rawInput.length < 20;
377
+ if (descParts.length > 0 && !needsProjectContext) {
378
+ content = resolveContent(descParts.length === 1 ? descParts[0] : descParts.join(" "));
379
+ }
380
+ else {
381
+ const { collectFiles } = await import("../utils/files.js");
382
+ const files = collectFiles(resolve("."));
383
+ const prompt = descParts.length > 0 ? descParts.join(" ") : "What do you think of this project?";
384
+ content = files.length > 0
385
+ ? `${prompt}\n\nHere's the project code:\n\n${filesToContent(files)}`
386
+ : prompt;
387
+ }
388
+ if (!content.trim()) {
389
+ console.log(chalk.yellow("\nNothing here to brainstorm about.") + chalk.gray(" No files found.\n"));
390
+ process.exit(1);
391
+ }
392
+ await runTool("brainstorm", content, "tool_spinner_brainstorm", options);
393
+ });
394
+ export const frontendCommand = new Command("frontend")
395
+ .description("Sally roasts your frontend code and design decisions")
396
+ .argument("[input]", "File path or frontend code to review")
397
+ .option("--lang <lang>", "Response language", "en")
398
+ .option("--json", "Output raw JSON")
399
+ .action(async (input, options) => {
400
+ const content = await resolveInput(input, "No frontend code found here.", { allowDirectory: true });
401
+ await runTool("frontend_review", content, "tool_spinner_frontend", options);
402
+ });
403
+ export const marketingCommand = new Command("marketing")
404
+ .description("Sally reviews your marketing copy and branding")
405
+ .argument("[input...]", "Marketing text, file, or description")
406
+ .option("--lang <lang>", "Response language", "en")
407
+ .option("--json", "Output raw JSON")
408
+ .action(async (inputParts, options) => {
409
+ let content = "";
410
+ if (inputParts.length > 0) {
411
+ content = resolveContent(inputParts.length === 1 ? inputParts[0] : inputParts.join(" "));
412
+ }
413
+ else {
414
+ const stdin = await readStdin();
415
+ if (stdin) {
416
+ content = stdin;
417
+ }
418
+ else {
419
+ // Scan for marketing-relevant files
420
+ const found = [];
421
+ const marketingExts = new Set([".html", ".htm", ".md", ".txt", ".css"]);
422
+ const marketingNames = new Set(["README.md", "readme.md", "package.json"]);
423
+ for (const f of marketingNames) {
424
+ const fp = resolve(".", f);
425
+ if (existsSync(fp)) {
426
+ try {
427
+ found.push(`### ${f}\n\`\`\`\n${readFileSync(fp, "utf-8").slice(0, 10_000)}\n\`\`\``);
428
+ }
429
+ catch { /* skip */ }
430
+ }
431
+ }
432
+ try {
433
+ for (const entry of readdirSync(".", { withFileTypes: true })) {
434
+ if (entry.isFile() && marketingExts.has(extname(entry.name).toLowerCase()) && !marketingNames.has(entry.name)) {
435
+ try {
436
+ found.push(`### ${entry.name}\n\`\`\`\n${readFileSync(resolve(".", entry.name), "utf-8").slice(0, 10_000)}\n\`\`\``);
437
+ }
438
+ catch { /* skip */ }
439
+ }
440
+ }
441
+ }
442
+ catch { /* skip */ }
443
+ if (found.length > 0) {
444
+ content = "Review the marketing copy and branding in this project:\n\n" + found.join("\n\n");
445
+ }
446
+ else {
447
+ printSally();
448
+ console.log();
449
+ console.log(chalk.red(" I don't know what I'm looking at."));
450
+ console.log(chalk.gray(" No README, no landing page, no package.json.\n"));
451
+ console.log(chalk.gray(" Give me something to work with:"));
452
+ console.log(chalk.cyan(' sally marketing "Your tagline here"'));
453
+ console.log(chalk.cyan(" sally marketing README.md\n"));
454
+ process.exit(1);
455
+ }
456
+ }
457
+ }
458
+ await runTool("marketing_review", content, "tool_spinner_marketing", options);
459
+ });
460
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const upgradeCommand: Command;
3
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,cAAc,SAqFvB,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { exec } from "node:child_process";
5
+ import { getDeviceId } from "../utils/config.js";
6
+ import { checkEntitlements } from "../utils/api.js";
7
+ const SUPERCLUB_BASE = "https://cynicalsally-web.onrender.com/en/fullsuite";
8
+ const POLL_INTERVAL_MS = 5000; // 5 seconds between checks
9
+ const POLL_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes max (Stripe webhooks can be slow)
10
+ export const upgradeCommand = new Command("upgrade")
11
+ .description("Upgrade to Sally's Full Suite")
12
+ .action(async () => {
13
+ const deviceId = getDeviceId();
14
+ const url = `${SUPERCLUB_BASE}?cli_device=${encodeURIComponent(deviceId)}`;
15
+ // Check if already SuperClub
16
+ try {
17
+ const current = await checkEntitlements();
18
+ if (current.isSuperClub || current.cliTier === "sc") {
19
+ console.log(chalk.green("\n You've already got the Full Suite.") +
20
+ chalk.gray(" Go roast something instead of wasting my time.\n"));
21
+ return;
22
+ }
23
+ }
24
+ catch {
25
+ // Can't check — continue with upgrade flow
26
+ }
27
+ console.log(chalk.magenta("\n Opening Full Suite in your browser...") +
28
+ chalk.gray(" Complete the checkout and I'll detect it automatically.\n"));
29
+ // Open browser
30
+ const openCmd = process.platform === "darwin"
31
+ ? "open"
32
+ : process.platform === "win32"
33
+ ? "start"
34
+ : "xdg-open";
35
+ exec(`${openCmd} "${url}"`);
36
+ // Poll for subscription activation
37
+ const spinner = ora({
38
+ text: "Waiting for your upgrade... complete checkout in the browser.",
39
+ color: "magenta",
40
+ }).start();
41
+ const startTime = Date.now();
42
+ const poll = async () => {
43
+ while (Date.now() - startTime < POLL_TIMEOUT_MS) {
44
+ await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
45
+ try {
46
+ const entitlements = await checkEntitlements();
47
+ if (entitlements.isSuperClub || entitlements.cliTier === "sc") {
48
+ return true;
49
+ }
50
+ }
51
+ catch {
52
+ // Network blip — keep polling
53
+ }
54
+ }
55
+ return false;
56
+ };
57
+ const upgraded = await poll();
58
+ spinner.stop();
59
+ if (upgraded) {
60
+ console.log();
61
+ console.log(chalk.green.bold(" ✓ Sally's Full Suite activated"));
62
+ console.log();
63
+ console.log(chalk.white(" Welcome. You actually paid for brutal honesty."));
64
+ console.log(chalk.white(" I respect that more than your code.\n"));
65
+ console.log(chalk.gray(" What you get:"));
66
+ console.log(chalk.white(" • 500 Quick Roasts + 100 Full Truth deep-dives/month"));
67
+ console.log(chalk.white(" • 8 premium tools — explain, refactor, brainstorm & more"));
68
+ console.log(chalk.white(" • MCP integration — Sally in your IDE"));
69
+ console.log(chalk.white(" • Unlimited web + Chrome extension included"));
70
+ console.log(chalk.white(" • Sally's coffee-powered priority processing"));
71
+ console.log();
72
+ console.log(chalk.gray(" Try it now:"));
73
+ console.log(chalk.cyan(" sally roast src/ -m full_truth") + chalk.gray(" — the deep dive\n"));
74
+ }
75
+ else {
76
+ console.log(chalk.yellow("\n Didn't detect an upgrade yet.") +
77
+ chalk.gray(" If you completed checkout, give it a moment and run:\n") +
78
+ chalk.cyan(" sally usage") +
79
+ chalk.gray(" — to check your status\n"));
80
+ }
81
+ });
82
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const usageCommand: Command;
3
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,YAAY,SAyFrB,CAAC"}