adscriptly 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 (46) hide show
  1. package/README.md +100 -0
  2. package/dist/cli-client/charts.d.ts +7 -0
  3. package/dist/cli-client/charts.d.ts.map +1 -0
  4. package/dist/cli-client/charts.js +417 -0
  5. package/dist/cli-client/charts.js.map +1 -0
  6. package/dist/cli-client/commands/chat.d.ts +3 -0
  7. package/dist/cli-client/commands/chat.d.ts.map +1 -0
  8. package/dist/cli-client/commands/chat.js +523 -0
  9. package/dist/cli-client/commands/chat.js.map +1 -0
  10. package/dist/cli-client/commands/config.d.ts +3 -0
  11. package/dist/cli-client/commands/config.d.ts.map +1 -0
  12. package/dist/cli-client/commands/config.js +23 -0
  13. package/dist/cli-client/commands/config.js.map +1 -0
  14. package/dist/cli-client/commands/login.d.ts +3 -0
  15. package/dist/cli-client/commands/login.d.ts.map +1 -0
  16. package/dist/cli-client/commands/login.js +115 -0
  17. package/dist/cli-client/commands/login.js.map +1 -0
  18. package/dist/cli-client/commands/logout.d.ts +3 -0
  19. package/dist/cli-client/commands/logout.d.ts.map +1 -0
  20. package/dist/cli-client/commands/logout.js +24 -0
  21. package/dist/cli-client/commands/logout.js.map +1 -0
  22. package/dist/cli-client/display.d.ts +26 -0
  23. package/dist/cli-client/display.d.ts.map +1 -0
  24. package/dist/cli-client/display.js +151 -0
  25. package/dist/cli-client/display.js.map +1 -0
  26. package/dist/cli-client/index.d.ts +3 -0
  27. package/dist/cli-client/index.d.ts.map +1 -0
  28. package/dist/cli-client/index.js +17 -0
  29. package/dist/cli-client/index.js.map +1 -0
  30. package/dist/cli-client/report-prompt.d.ts +5 -0
  31. package/dist/cli-client/report-prompt.d.ts.map +1 -0
  32. package/dist/cli-client/report-prompt.js +200 -0
  33. package/dist/cli-client/report-prompt.js.map +1 -0
  34. package/dist/cli-client/sse.d.ts +6 -0
  35. package/dist/cli-client/sse.d.ts.map +1 -0
  36. package/dist/cli-client/sse.js +39 -0
  37. package/dist/cli-client/sse.js.map +1 -0
  38. package/dist/mcp-server/index.d.ts +3 -0
  39. package/dist/mcp-server/index.d.ts.map +1 -0
  40. package/dist/mcp-server/index.js +266 -0
  41. package/dist/mcp-server/index.js.map +1 -0
  42. package/dist/shared/config.d.ts +21 -0
  43. package/dist/shared/config.d.ts.map +1 -0
  44. package/dist/shared/config.js +41 -0
  45. package/dist/shared/config.js.map +1 -0
  46. package/package.json +59 -0
@@ -0,0 +1,523 @@
1
+ import { Command } from "commander";
2
+ import { createInterface } from "node:readline/promises";
3
+ import chalk from "chalk";
4
+ import gradient from "gradient-string";
5
+ import { readConfig, getApiBaseUrl } from "../../shared/config.js";
6
+ import { StepList, startSpinner, toolCallLabel } from "../display.js";
7
+ import { renderChart } from "../charts.js";
8
+ import { parseSSE } from "../sse.js";
9
+ import { buildReportPrompt } from "../report-prompt.js";
10
+ const BANNER = `
11
+ _ _ _ _ _
12
+ / \\ __| |___ ___ _ __(_)_ __ | |_| |_ _
13
+ / _ \\ / _\` / __|/ __| '__| | '_ \\| __| | | | |
14
+ / ___ \\ (_| \\__ \\ (__| | | | |_) | |_| | |_| |
15
+ /_/ \\_\\__,_|___/\\___|_| |_| .__/ \\__|_|\\__, |
16
+ |_| |___/ `;
17
+ function displayBanner() {
18
+ const rainbow = gradient("cyan", "magenta", "yellow");
19
+ process.stdout.write(rainbow(BANNER) + "\n\n");
20
+ }
21
+ function displayHelp() {
22
+ process.stdout.write(chalk.dim(" Workflows: ") + chalk.cyan("/audit /diagnose /scale\n"));
23
+ process.stdout.write(chalk.dim(" Modes: ") + chalk.cyan("/plan /execute /yolo") + chalk.dim(" (shift+tab)\n"));
24
+ process.stdout.write(chalk.dim(" Commands: ") + chalk.cyan("/choose-account /account-list /report /new /quit\n"));
25
+ process.stdout.write("\n");
26
+ }
27
+ function visibleLength(str) {
28
+ return str.replace(/\x1b\[[0-9;]*m/g, "").length;
29
+ }
30
+ function modeLabel(mode) {
31
+ switch (mode) {
32
+ case "plan":
33
+ return chalk.blue("[plan]");
34
+ case "execute":
35
+ return chalk.yellow("[execute]");
36
+ case "yolo":
37
+ return chalk.red("[yolo!]");
38
+ }
39
+ }
40
+ function promptString(mode, accountName) {
41
+ const acct = accountName ? ` ${chalk.dim(accountName)}` : "";
42
+ return `${chalk.bold("adscriptly")} ${modeLabel(mode)}${acct}${chalk.dim(">")} `;
43
+ }
44
+ function renderConfirmationBox(pending) {
45
+ const label = toolCallLabel(pending.tool);
46
+ const isGoogleAds = pending.bucket === "google_ads";
47
+ const hasGoogleAdsImpact = !!pending.googleAdsImpact;
48
+ process.stderr.write("\n");
49
+ if (isGoogleAds) {
50
+ // Direct Google Ads mutation
51
+ process.stderr.write(chalk.yellow("┌─ Confirm Google Ads Mutation ─────────────────┐\n"));
52
+ process.stderr.write(chalk.yellow("│") + ` Tool: ${chalk.bold(pending.tool)}\n`);
53
+ process.stderr.write(chalk.yellow("│") + ` Action: ${label}\n`);
54
+ process.stderr.write(chalk.yellow("│") + "\n");
55
+ process.stderr.write(chalk.yellow("│") + chalk.yellow(" ⚠ Direct Google Ads modification\n"));
56
+ process.stderr.write(chalk.yellow("└───────────────────────────────────────────────┘\n"));
57
+ }
58
+ else if (hasGoogleAdsImpact) {
59
+ // Adscriptly tool with Google Ads downstream impact
60
+ process.stderr.write(chalk.yellow("┌─ Confirm Action ──────────────────────────────┐\n"));
61
+ process.stderr.write(chalk.yellow("│") + ` Tool: ${chalk.bold(pending.tool)}\n`);
62
+ process.stderr.write(chalk.yellow("│") + ` Action: ${label}\n`);
63
+ process.stderr.write(chalk.yellow("│") + "\n");
64
+ process.stderr.write(chalk.yellow("│") +
65
+ chalk.yellow(` ⚠ Google Ads Impact:\n`));
66
+ process.stderr.write(chalk.yellow("│") +
67
+ chalk.yellow(` ${pending.googleAdsImpact}\n`));
68
+ process.stderr.write(chalk.yellow("└───────────────────────────────────────────────┘\n"));
69
+ }
70
+ else {
71
+ // Adscriptly-only tool
72
+ process.stderr.write(chalk.blue("┌─ Confirm Action ──────────────────────────────┐\n"));
73
+ process.stderr.write(chalk.blue("│") + ` Tool: ${chalk.bold(pending.tool)}\n`);
74
+ process.stderr.write(chalk.blue("│") + ` Action: ${label}\n`);
75
+ process.stderr.write(chalk.blue("└───────────────────────────────────────────────┘\n"));
76
+ }
77
+ }
78
+ async function promptConfirmation(rl) {
79
+ const answer = await rl.question(chalk.yellow(" Approve? (y/n) "));
80
+ const trimmed = answer.trim().toLowerCase();
81
+ return trimmed === "y" || trimmed === "yes";
82
+ }
83
+ async function sendConfirmation(apiBaseUrl, token, conversationId, toolCallId, approved) {
84
+ try {
85
+ await fetch(`${apiBaseUrl}/api/cli/confirm`, {
86
+ method: "POST",
87
+ headers: {
88
+ "Content-Type": "application/json",
89
+ Authorization: `Bearer ${token}`,
90
+ },
91
+ body: JSON.stringify({ conversationId, toolCallId, approved }),
92
+ });
93
+ }
94
+ catch (err) {
95
+ const msg = err instanceof Error ? err.message : String(err);
96
+ process.stderr.write(chalk.red(`\nConfirmation error: ${msg}\n`));
97
+ }
98
+ }
99
+ // --- Send message and render SSE stream ---
100
+ async function sendMessage(apiBaseUrl, token, message, mode, conversationId, stepList, rl, customerId) {
101
+ const payload = { message, mode };
102
+ if (conversationId)
103
+ payload.conversationId = conversationId;
104
+ if (customerId)
105
+ payload.customerId = customerId;
106
+ let response;
107
+ try {
108
+ response = await fetch(`${apiBaseUrl}/api/cli/chat`, {
109
+ method: "POST",
110
+ headers: {
111
+ "Content-Type": "application/json",
112
+ Authorization: `Bearer ${token}`,
113
+ },
114
+ body: JSON.stringify(payload),
115
+ });
116
+ }
117
+ catch (err) {
118
+ const msg = err instanceof Error ? err.message : String(err);
119
+ process.stderr.write(chalk.red(`\nConnection error: ${msg}\n`));
120
+ process.stderr.write(chalk.dim(` (tried: ${apiBaseUrl}/api/cli/chat)\n`));
121
+ process.stderr.write(chalk.dim(` Run "adscriptly config --show" to check your API URL.\n`));
122
+ return conversationId;
123
+ }
124
+ if (!response.ok) {
125
+ let errorMsg;
126
+ try {
127
+ const errorBody = (await response.json());
128
+ errorMsg = errorBody.error || `HTTP ${response.status}`;
129
+ }
130
+ catch {
131
+ errorMsg = `HTTP ${response.status}`;
132
+ }
133
+ process.stderr.write(chalk.red(`\nError: ${errorMsg}\n`));
134
+ return conversationId;
135
+ }
136
+ let newConversationId = conversationId;
137
+ let thinkingSpinner = startSpinner("Thinking...");
138
+ let hasUnfinishedLine = false;
139
+ function stopThinking() {
140
+ if (thinkingSpinner) {
141
+ thinkingSpinner.stop();
142
+ thinkingSpinner = null;
143
+ }
144
+ }
145
+ for await (const { event, data } of parseSSE(response)) {
146
+ let parsed;
147
+ try {
148
+ parsed = JSON.parse(data);
149
+ }
150
+ catch {
151
+ continue;
152
+ }
153
+ switch (event) {
154
+ case "text": {
155
+ stopThinking();
156
+ const textContent = parsed.text;
157
+ process.stdout.write(textContent);
158
+ hasUnfinishedLine =
159
+ textContent.length > 0 && !textContent.endsWith("\n");
160
+ break;
161
+ }
162
+ case "tool_call_start":
163
+ stopThinking();
164
+ if (hasUnfinishedLine) {
165
+ process.stdout.write("\n");
166
+ hasUnfinishedLine = false;
167
+ }
168
+ stepList.startStep(parsed.toolName);
169
+ break;
170
+ case "tool_call_complete":
171
+ if (parsed.blocked) {
172
+ stepList.errorStep(parsed.toolName, "blocked in /plan");
173
+ }
174
+ else if (parsed.denied) {
175
+ stepList.errorStep(parsed.toolName, "denied by user");
176
+ }
177
+ else {
178
+ stepList.completeStep(parsed.toolName);
179
+ }
180
+ // Claude is processing tool results — show thinking spinner
181
+ thinkingSpinner = startSpinner("Thinking...");
182
+ break;
183
+ case "chart": {
184
+ stopThinking();
185
+ try {
186
+ renderChart({
187
+ toolName: parsed.toolName,
188
+ data: parsed.data,
189
+ });
190
+ }
191
+ catch (err) {
192
+ const msg = err instanceof Error ? err.message : String(err);
193
+ process.stderr.write(chalk.dim(` (chart error: ${msg})\n`));
194
+ }
195
+ thinkingSpinner = startSpinner("Thinking...");
196
+ break;
197
+ }
198
+ case "tool_call_pending": {
199
+ stopThinking();
200
+ const pending = {
201
+ conversationId: parsed.conversationId,
202
+ toolCallId: parsed.toolCallId,
203
+ bucket: parsed.bucket,
204
+ tool: parsed.tool,
205
+ action: parsed.action,
206
+ googleAdsImpact: parsed.googleAdsImpact || null,
207
+ };
208
+ renderConfirmationBox(pending);
209
+ const approved = await promptConfirmation(rl);
210
+ await sendConfirmation(apiBaseUrl, token, pending.conversationId, pending.toolCallId, approved);
211
+ if (!approved) {
212
+ process.stderr.write(chalk.dim(" Action denied.\n\n"));
213
+ }
214
+ // Server will continue sending events (tool_call_start/complete or denial)
215
+ thinkingSpinner = startSpinner("Thinking...");
216
+ break;
217
+ }
218
+ case "error":
219
+ stopThinking();
220
+ stepList.clear();
221
+ process.stderr.write(chalk.red(`\nError: ${parsed.message}\n`));
222
+ break;
223
+ case "done":
224
+ stopThinking();
225
+ stepList.clear();
226
+ newConversationId = parsed.conversationId;
227
+ process.stdout.write("\n\n");
228
+ break;
229
+ }
230
+ }
231
+ // Clean up if stream ended without done event
232
+ stopThinking();
233
+ return newConversationId;
234
+ }
235
+ // --- Main chat loop ---
236
+ async function startChat(initialMode) {
237
+ const config = readConfig();
238
+ if (!config.token) {
239
+ process.stderr.write(chalk.red("Not authenticated. Run 'adscriptly login' first.\n"));
240
+ process.exit(1);
241
+ }
242
+ const apiBaseUrl = getApiBaseUrl(config);
243
+ let mode = initialMode;
244
+ let conversationId = null;
245
+ let selectedAccountId = null;
246
+ let selectedAccountName = null;
247
+ const stepList = new StepList();
248
+ const MODES = ["plan", "execute", "yolo"];
249
+ let awaitingInput = false;
250
+ displayBanner();
251
+ displayHelp();
252
+ const rl = createInterface({
253
+ input: process.stdin,
254
+ output: process.stdout,
255
+ });
256
+ // Shift+Tab cycles through modes (plan → execute → yolo → plan)
257
+ process.stdin.on("keypress", (_ch, key) => {
258
+ if (key?.name === "tab" && key?.shift && awaitingInput) {
259
+ const idx = MODES.indexOf(mode);
260
+ mode = MODES[(idx + 1) % MODES.length];
261
+ const prompt = promptString(mode, selectedAccountName);
262
+ const line = rl.line ?? "";
263
+ const cursor = rl.cursor ?? line.length;
264
+ process.stdout.write("\r\x1b[2K" + prompt + line);
265
+ rl.setPrompt(prompt);
266
+ process.stdout.cursorTo(visibleLength(prompt) + cursor);
267
+ }
268
+ });
269
+ rl.on("close", () => {
270
+ process.stdout.write(chalk.dim("\nGoodbye.\n"));
271
+ process.exit(0);
272
+ });
273
+ for (;;) {
274
+ let input;
275
+ try {
276
+ awaitingInput = true;
277
+ input = await rl.question(promptString(mode, selectedAccountName));
278
+ awaitingInput = false;
279
+ }
280
+ catch {
281
+ awaitingInput = false;
282
+ break;
283
+ }
284
+ const trimmed = input.trim();
285
+ if (!trimmed)
286
+ continue;
287
+ // Mode switch commands
288
+ if (trimmed === "/plan") {
289
+ mode = "plan";
290
+ process.stdout.write(chalk.blue("Switched to /plan mode — writes blocked, read freely.\n"));
291
+ continue;
292
+ }
293
+ if (trimmed === "/execute") {
294
+ mode = "execute";
295
+ process.stdout.write(chalk.yellow("Switched to /execute mode — writes require confirmation.\n"));
296
+ continue;
297
+ }
298
+ if (trimmed === "/yolo") {
299
+ mode = "yolo";
300
+ process.stdout.write(chalk.red("Switched to /yolo mode — all actions execute immediately.\n"));
301
+ continue;
302
+ }
303
+ // Quit
304
+ if (trimmed === "/quit" || trimmed === "/exit" || trimmed === "/q") {
305
+ process.stdout.write(chalk.dim("Goodbye.\n"));
306
+ rl.close();
307
+ process.exit(0);
308
+ }
309
+ // New conversation
310
+ if (trimmed === "/new") {
311
+ conversationId = null;
312
+ process.stdout.write(chalk.dim("Started new conversation.\n"));
313
+ continue;
314
+ }
315
+ // Select active account
316
+ if (trimmed === "/choose-account" || trimmed === "/choose-account clear") {
317
+ if (trimmed === "/choose-account clear") {
318
+ selectedAccountId = null;
319
+ selectedAccountName = null;
320
+ process.stdout.write(chalk.dim("Cleared account selection.\n"));
321
+ continue;
322
+ }
323
+ try {
324
+ const spinner = startSpinner("Fetching accounts...");
325
+ const res = await fetch(`${apiBaseUrl}/api/cli/tools/execute`, {
326
+ method: "POST",
327
+ headers: {
328
+ "Content-Type": "application/json",
329
+ Authorization: `Bearer ${config.token}`,
330
+ },
331
+ body: JSON.stringify({ tool: "list_accounts", input: {} }),
332
+ });
333
+ spinner.stop();
334
+ if (!res.ok) {
335
+ process.stderr.write(chalk.red("Failed to fetch accounts.\n"));
336
+ continue;
337
+ }
338
+ const data = (await res.json());
339
+ const accounts = data.accounts || [];
340
+ if (accounts.length === 0) {
341
+ process.stdout.write(chalk.dim("No Google Ads accounts connected.\n"));
342
+ continue;
343
+ }
344
+ // Numbered list
345
+ process.stdout.write(chalk.bold("\n Select Account\n\n"));
346
+ for (let i = 0; i < accounts.length; i++) {
347
+ const acct = accounts[i];
348
+ const tag = acct.isManager ? chalk.blue(" (MCC)") : "";
349
+ const num = chalk.dim(`${String(i + 1).padStart(2)}.`);
350
+ const id = chalk.dim(acct.customerId);
351
+ const current = acct.customerId === selectedAccountId ? chalk.green(" ✓") : "";
352
+ process.stdout.write(` ${num} ${id} ${chalk.cyan(acct.name)}${tag}${current}\n`);
353
+ }
354
+ process.stdout.write("\n");
355
+ const answer = await rl.question(chalk.dim(` Enter number (1-${accounts.length}) or 'q' to cancel: `));
356
+ const trimmedAnswer = answer.trim().toLowerCase();
357
+ let selected = null;
358
+ if (trimmedAnswer !== "q" && trimmedAnswer !== "") {
359
+ const idx = parseInt(trimmedAnswer, 10);
360
+ if (idx >= 1 && idx <= accounts.length) {
361
+ selected = accounts[idx - 1];
362
+ }
363
+ else {
364
+ process.stdout.write(chalk.red(" Invalid selection.\n"));
365
+ }
366
+ }
367
+ if (selected) {
368
+ selectedAccountId = selected.customerId;
369
+ selectedAccountName = selected.name;
370
+ process.stdout.write(chalk.green(`Active account: ${chalk.bold(selected.name)}`) +
371
+ chalk.dim(` (${selected.customerId})`) + "\n");
372
+ }
373
+ else {
374
+ process.stdout.write(chalk.dim("Selection cancelled.\n"));
375
+ }
376
+ }
377
+ catch (err) {
378
+ const msg = err instanceof Error ? err.message : String(err);
379
+ process.stderr.write(chalk.red(`Error: ${msg}\n`));
380
+ }
381
+ continue;
382
+ }
383
+ // List connected accounts
384
+ if (trimmed === "/account-list") {
385
+ try {
386
+ const res = await fetch(`${apiBaseUrl}/api/cli/tools/execute`, {
387
+ method: "POST",
388
+ headers: {
389
+ "Content-Type": "application/json",
390
+ Authorization: `Bearer ${config.token}`,
391
+ },
392
+ body: JSON.stringify({ tool: "list_accounts", input: {} }),
393
+ });
394
+ if (!res.ok) {
395
+ process.stderr.write(chalk.red("Failed to fetch accounts.\n"));
396
+ continue;
397
+ }
398
+ const data = (await res.json());
399
+ const accounts = data.accounts || [];
400
+ if (accounts.length === 0) {
401
+ process.stdout.write(chalk.dim("No Google Ads accounts connected.\n"));
402
+ }
403
+ else {
404
+ process.stdout.write(chalk.bold("\n Connected Accounts\n\n"));
405
+ for (const acct of accounts) {
406
+ const tag = acct.isManager ? chalk.blue(" (MCC)") : "";
407
+ const id = chalk.dim(acct.customerId);
408
+ process.stdout.write(` ${id} ${chalk.cyan(acct.name)}${tag}\n`);
409
+ }
410
+ process.stdout.write("\n");
411
+ }
412
+ }
413
+ catch (err) {
414
+ const msg = err instanceof Error ? err.message : String(err);
415
+ process.stderr.write(chalk.red(`Error fetching accounts: ${msg}\n`));
416
+ }
417
+ continue;
418
+ }
419
+ // Report generation — interactive multi-step flow
420
+ if (trimmed === "/report") {
421
+ try {
422
+ // Step 1: Choose account
423
+ const reportSpinner = startSpinner("Fetching accounts...");
424
+ const reportRes = await fetch(`${apiBaseUrl}/api/cli/tools/execute`, {
425
+ method: "POST",
426
+ headers: {
427
+ "Content-Type": "application/json",
428
+ Authorization: `Bearer ${config.token}`,
429
+ },
430
+ body: JSON.stringify({ tool: "list_accounts", input: {} }),
431
+ });
432
+ reportSpinner.stop();
433
+ if (!reportRes.ok) {
434
+ process.stderr.write(chalk.red("Failed to fetch accounts.\n"));
435
+ continue;
436
+ }
437
+ const reportData = (await reportRes.json());
438
+ const reportAccounts = reportData.accounts || [];
439
+ if (reportAccounts.length === 0) {
440
+ process.stdout.write(chalk.dim("No Google Ads accounts connected.\n"));
441
+ continue;
442
+ }
443
+ process.stdout.write(chalk.bold("\n Select Account\n\n"));
444
+ for (let i = 0; i < reportAccounts.length; i++) {
445
+ const acct = reportAccounts[i];
446
+ const tag = acct.isManager ? chalk.blue(" (MCC)") : "";
447
+ const num = chalk.dim(`${String(i + 1).padStart(2)}.`);
448
+ const id = chalk.dim(acct.customerId);
449
+ process.stdout.write(` ${num} ${id} ${chalk.cyan(acct.name)}${tag}\n`);
450
+ }
451
+ process.stdout.write("\n");
452
+ const acctAnswer = await rl.question(chalk.dim(` Account (1-${reportAccounts.length}): `));
453
+ const acctIdx = parseInt(acctAnswer.trim(), 10);
454
+ if (isNaN(acctIdx) || acctIdx < 1 || acctIdx > reportAccounts.length) {
455
+ process.stdout.write(chalk.red(" Invalid selection.\n"));
456
+ continue;
457
+ }
458
+ const reportAccount = reportAccounts[acctIdx - 1];
459
+ // Step 2: Choose time frame
460
+ process.stdout.write(chalk.bold("\n Time Frame\n\n"));
461
+ process.stdout.write(` ${chalk.dim("1.")} Weekly\n`);
462
+ process.stdout.write(` ${chalk.dim("2.")} Monthly\n`);
463
+ process.stdout.write(` ${chalk.dim("3.")} Quarterly\n\n`);
464
+ const periodAnswer = await rl.question(chalk.dim(" Time frame (1-3 or name): "));
465
+ const periodTrimmed = periodAnswer.trim().toLowerCase();
466
+ let period;
467
+ if (periodTrimmed === "1" || periodTrimmed === "weekly")
468
+ period = "weekly";
469
+ else if (periodTrimmed === "2" || periodTrimmed === "monthly")
470
+ period = "monthly";
471
+ else if (periodTrimmed === "3" || periodTrimmed === "quarterly")
472
+ period = "quarterly";
473
+ else {
474
+ process.stdout.write(chalk.red(" Invalid selection.\n"));
475
+ continue;
476
+ }
477
+ // Step 3: Choose format
478
+ process.stdout.write(chalk.bold("\n Format\n\n"));
479
+ process.stdout.write(` ${chalk.dim("1.")} Markdown ${chalk.dim("(terminal output)")}\n`);
480
+ process.stdout.write(` ${chalk.dim("2.")} PDF ${chalk.dim("(.pdf)")}\n`);
481
+ process.stdout.write(` ${chalk.dim("3.")} Word ${chalk.dim("(.docx)")}\n\n`);
482
+ const formatAnswer = await rl.question(chalk.dim(" Format (1-3 or name): "));
483
+ const formatTrimmed = formatAnswer.trim().toLowerCase();
484
+ let format;
485
+ if (formatTrimmed === "1" || formatTrimmed === "markdown" || formatTrimmed === "md")
486
+ format = "md";
487
+ else if (formatTrimmed === "2" || formatTrimmed === "pdf")
488
+ format = "pdf";
489
+ else if (formatTrimmed === "3" || formatTrimmed === "word" || formatTrimmed === "docx")
490
+ format = "docx";
491
+ else {
492
+ process.stdout.write(chalk.red(" Invalid selection.\n"));
493
+ continue;
494
+ }
495
+ // Generate report
496
+ process.stdout.write(chalk.dim(`\n Generating ${period} report for ${reportAccount.name}`) +
497
+ (format !== "md" ? chalk.dim(` (${format})`) : "") +
498
+ chalk.dim("...\n\n"));
499
+ const reportPrompt = buildReportPrompt(period, format, reportAccount.name);
500
+ conversationId = await sendMessage(apiBaseUrl, config.token, reportPrompt, mode, conversationId, stepList, rl, reportAccount.customerId);
501
+ }
502
+ catch (err) {
503
+ const msg = err instanceof Error ? err.message : String(err);
504
+ process.stderr.write(chalk.red(`Error: ${msg}\n`));
505
+ }
506
+ continue;
507
+ }
508
+ // Everything else (including /audit, /diagnose, /scale) sent to chat API
509
+ conversationId = await sendMessage(apiBaseUrl, config.token, trimmed, mode, conversationId, stepList, rl, selectedAccountId);
510
+ }
511
+ }
512
+ export const chatCommand = new Command("chat")
513
+ .description("Start interactive AI chat for Google Ads management")
514
+ .option("-m, --mode <mode>", "permission mode: plan, execute, or yolo", "plan")
515
+ .action(async (options) => {
516
+ const mode = options.mode;
517
+ if (!["plan", "execute", "yolo"].includes(mode)) {
518
+ process.stderr.write(chalk.red(`Invalid mode: ${mode}. Use plan, execute, or yolo.\n`));
519
+ process.exit(1);
520
+ }
521
+ await startChat(mode);
522
+ });
523
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/cli-client/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const configCommand: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli-client/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAsBtB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { readConfig, getApiBaseUrl } from "../../shared/config.js";
4
+ export const configCommand = new Command("config")
5
+ .description("View or modify CLI configuration")
6
+ .option("--show", "display current configuration")
7
+ .action(async (options) => {
8
+ const config = readConfig();
9
+ const apiBaseUrl = getApiBaseUrl(config);
10
+ console.log(chalk.bold("Adscriptly CLI Configuration\n"));
11
+ console.log(chalk.dim(" Config file: ") + "~/.adscriptly/config.json");
12
+ console.log(chalk.dim(" API URL: ") + apiBaseUrl);
13
+ console.log(chalk.dim(" Token: ") +
14
+ (config.token ? chalk.green(config.token.slice(0, 8) + "...") : chalk.dim("(not set)")));
15
+ if (config.email) {
16
+ console.log(chalk.dim(" Email: ") + config.email);
17
+ }
18
+ console.log("");
19
+ if (!config.token) {
20
+ console.log(chalk.dim("Run ") + chalk.cyan('"adscriptly login"') + chalk.dim(" to authenticate."));
21
+ }
22
+ });
23
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli-client/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;IAC5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,2BAA2B,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC7B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CACxF,CAAC;IACF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACrG,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const loginCommand: Command;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli-client/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,YAAY,SAuCrB,CAAC"}