@browserflow-ai/cli 0.0.6

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 (90) hide show
  1. package/bin/bf.js +3 -0
  2. package/dist/commands/baseline.d.ts +77 -0
  3. package/dist/commands/baseline.d.ts.map +1 -0
  4. package/dist/commands/baseline.js +429 -0
  5. package/dist/commands/baseline.js.map +1 -0
  6. package/dist/commands/doctor.d.ts +39 -0
  7. package/dist/commands/doctor.d.ts.map +1 -0
  8. package/dist/commands/doctor.js +230 -0
  9. package/dist/commands/doctor.js.map +1 -0
  10. package/dist/commands/explore.d.ts +12 -0
  11. package/dist/commands/explore.d.ts.map +1 -0
  12. package/dist/commands/explore.js +114 -0
  13. package/dist/commands/explore.js.map +1 -0
  14. package/dist/commands/init.d.ts +15 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +160 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/lint.d.ts +37 -0
  19. package/dist/commands/lint.d.ts.map +1 -0
  20. package/dist/commands/lint.js +248 -0
  21. package/dist/commands/lint.js.map +1 -0
  22. package/dist/commands/repair.d.ts +72 -0
  23. package/dist/commands/repair.d.ts.map +1 -0
  24. package/dist/commands/repair.js +271 -0
  25. package/dist/commands/repair.js.map +1 -0
  26. package/dist/commands/review.d.ts +26 -0
  27. package/dist/commands/review.d.ts.map +1 -0
  28. package/dist/commands/review.js +371 -0
  29. package/dist/commands/review.js.map +1 -0
  30. package/dist/commands/run.d.ts +5 -0
  31. package/dist/commands/run.d.ts.map +1 -0
  32. package/dist/commands/run.js +66 -0
  33. package/dist/commands/run.js.map +1 -0
  34. package/dist/index.d.ts +4 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +35 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/run/executor.d.ts +10 -0
  39. package/dist/run/executor.d.ts.map +1 -0
  40. package/dist/run/executor.js +95 -0
  41. package/dist/run/executor.js.map +1 -0
  42. package/dist/run/failure-bundle.d.ts +65 -0
  43. package/dist/run/failure-bundle.d.ts.map +1 -0
  44. package/dist/run/failure-bundle.js +253 -0
  45. package/dist/run/failure-bundle.js.map +1 -0
  46. package/dist/run/index.d.ts +6 -0
  47. package/dist/run/index.d.ts.map +1 -0
  48. package/dist/run/index.js +6 -0
  49. package/dist/run/index.js.map +1 -0
  50. package/dist/run/output.d.ts +5 -0
  51. package/dist/run/output.d.ts.map +1 -0
  52. package/dist/run/output.js +62 -0
  53. package/dist/run/output.js.map +1 -0
  54. package/dist/run/results.d.ts +5 -0
  55. package/dist/run/results.d.ts.map +1 -0
  56. package/dist/run/results.js +124 -0
  57. package/dist/run/results.js.map +1 -0
  58. package/dist/run/types.d.ts +44 -0
  59. package/dist/run/types.d.ts.map +1 -0
  60. package/dist/run/types.js +2 -0
  61. package/dist/run/types.js.map +1 -0
  62. package/dist/ui/box.d.ts +13 -0
  63. package/dist/ui/box.d.ts.map +1 -0
  64. package/dist/ui/box.js +32 -0
  65. package/dist/ui/box.js.map +1 -0
  66. package/dist/ui/colors.d.ts +28 -0
  67. package/dist/ui/colors.d.ts.map +1 -0
  68. package/dist/ui/colors.js +34 -0
  69. package/dist/ui/colors.js.map +1 -0
  70. package/dist/ui/env.d.ts +31 -0
  71. package/dist/ui/env.d.ts.map +1 -0
  72. package/dist/ui/env.js +77 -0
  73. package/dist/ui/env.js.map +1 -0
  74. package/dist/ui/index.d.ts +7 -0
  75. package/dist/ui/index.d.ts.map +1 -0
  76. package/dist/ui/index.js +7 -0
  77. package/dist/ui/index.js.map +1 -0
  78. package/dist/ui/output.d.ts +18 -0
  79. package/dist/ui/output.d.ts.map +1 -0
  80. package/dist/ui/output.js +33 -0
  81. package/dist/ui/output.js.map +1 -0
  82. package/dist/ui/prompts.d.ts +12 -0
  83. package/dist/ui/prompts.d.ts.map +1 -0
  84. package/dist/ui/prompts.js +37 -0
  85. package/dist/ui/prompts.js.map +1 -0
  86. package/dist/ui/spinner.d.ts +9 -0
  87. package/dist/ui/spinner.d.ts.map +1 -0
  88. package/dist/ui/spinner.js +27 -0
  89. package/dist/ui/spinner.js.map +1 -0
  90. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAwB5F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,IAAI,CAEzF"}
package/dist/ui/box.js ADDED
@@ -0,0 +1,32 @@
1
+ import { colors } from './colors.js';
2
+ /**
3
+ * Format content into a box with title and return as string
4
+ */
5
+ export function formatBox(title, content, options = {}) {
6
+ const width = options.width ?? 58;
7
+ const lines = [];
8
+ // Top border with title
9
+ // Account for ANSI escape codes in padEnd calculation
10
+ const styledTitle = colors.bold(title);
11
+ const ansiOverhead = styledTitle.length - title.length;
12
+ lines.push('┌' + '─'.repeat(width) + '┐');
13
+ lines.push('│ ' + styledTitle.padEnd(width - 1 + ansiOverhead) + '│');
14
+ if (content.length > 0) {
15
+ lines.push('├' + '─'.repeat(width) + '┤');
16
+ for (const line of content) {
17
+ // Handle lines that might be longer than width
18
+ const truncated = line.length > width - 2 ? line.slice(0, width - 5) + '...' : line;
19
+ lines.push('│ ' + truncated.padEnd(width - 1) + '│');
20
+ }
21
+ }
22
+ // Bottom border
23
+ lines.push('└' + '─'.repeat(width) + '┘');
24
+ return lines.join('\n');
25
+ }
26
+ /**
27
+ * Print a formatted box to the console
28
+ */
29
+ export function printBox(title, content, options = {}) {
30
+ console.log(formatBox(title, content, options));
31
+ }
32
+ //# sourceMappingURL=box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,OAAiB,EAAE,UAAsB,EAAE;IAClF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,wBAAwB;IACxB,sDAAsD;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;IAEtE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,+CAA+C;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACpF,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAE1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,OAAiB,EAAE,UAAsB,EAAE;IACjF,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,28 @@
1
+ import chalk from 'chalk';
2
+ export declare const colors: {
3
+ success: import("chalk").ChalkInstance;
4
+ error: import("chalk").ChalkInstance;
5
+ warning: import("chalk").ChalkInstance;
6
+ info: import("chalk").ChalkInstance;
7
+ dim: import("chalk").ChalkInstance;
8
+ bold: import("chalk").ChalkInstance;
9
+ underline: import("chalk").ChalkInstance;
10
+ primary: import("chalk").ChalkInstance;
11
+ secondary: import("chalk").ChalkInstance;
12
+ code: import("chalk").ChalkInstance;
13
+ path: import("chalk").ChalkInstance;
14
+ pass: import("chalk").ChalkInstance;
15
+ fail: import("chalk").ChalkInstance;
16
+ skip: import("chalk").ChalkInstance;
17
+ };
18
+ export declare const symbols: {
19
+ pass: string;
20
+ fail: string;
21
+ pending: string;
22
+ arrow: string;
23
+ bullet: string;
24
+ info: string;
25
+ warn: string;
26
+ };
27
+ export { chalk };
28
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;CAwBlB,CAAC;AAGF,eAAO,MAAM,OAAO;;;;;;;;CAQnB,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import chalk from 'chalk';
2
+ export const colors = {
3
+ // Status colors
4
+ success: chalk.green,
5
+ error: chalk.red,
6
+ warning: chalk.yellow,
7
+ info: chalk.blue,
8
+ // UI elements
9
+ dim: chalk.dim,
10
+ bold: chalk.bold,
11
+ underline: chalk.underline,
12
+ // BrowserFlow brand
13
+ primary: chalk.cyan,
14
+ secondary: chalk.magenta,
15
+ // Code and paths
16
+ code: chalk.cyan,
17
+ path: chalk.underline,
18
+ // Semantic
19
+ pass: chalk.green,
20
+ fail: chalk.red,
21
+ skip: chalk.yellow,
22
+ };
23
+ // Pre-rendered symbols for consistent output
24
+ export const symbols = {
25
+ pass: chalk.green('✓'),
26
+ fail: chalk.red('✗'),
27
+ pending: chalk.yellow('○'),
28
+ arrow: chalk.cyan('→'),
29
+ bullet: chalk.dim('•'),
30
+ info: chalk.blue('ℹ'),
31
+ warn: chalk.yellow('⚠'),
32
+ };
33
+ export { chalk };
34
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,gBAAgB;IAChB,OAAO,EAAE,KAAK,CAAC,KAAK;IACpB,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,OAAO,EAAE,KAAK,CAAC,MAAM;IACrB,IAAI,EAAE,KAAK,CAAC,IAAI;IAEhB,cAAc;IACd,GAAG,EAAE,KAAK,CAAC,GAAG;IACd,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,SAAS,EAAE,KAAK,CAAC,SAAS;IAE1B,oBAAoB;IACpB,OAAO,EAAE,KAAK,CAAC,IAAI;IACnB,SAAS,EAAE,KAAK,CAAC,OAAO;IAExB,iBAAiB;IACjB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,IAAI,EAAE,KAAK,CAAC,SAAS;IAErB,WAAW;IACX,IAAI,EAAE,KAAK,CAAC,KAAK;IACjB,IAAI,EAAE,KAAK,CAAC,GAAG;IACf,IAAI,EAAE,KAAK,CAAC,MAAM;CACnB,CAAC;AAEF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;CACxB,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Environment detection utilities for CLI output
3
+ * Handles CI detection, TTY checks, and color support
4
+ */
5
+ /**
6
+ * Detect if running in a CI environment
7
+ */
8
+ export declare function isCI(): boolean;
9
+ /**
10
+ * Check if stdout is a TTY (interactive terminal)
11
+ */
12
+ export declare function isTTY(): boolean;
13
+ /**
14
+ * Check if the terminal supports colors
15
+ * Respects NO_COLOR and FORCE_COLOR environment variables
16
+ */
17
+ export declare function supportsColor(): boolean;
18
+ /**
19
+ * Reset cached values (for testing)
20
+ */
21
+ export declare function resetEnvCache(): void;
22
+ /**
23
+ * Check if spinners should be used
24
+ * Spinners don't work well in CI or non-TTY environments
25
+ */
26
+ export declare function shouldUseSpinners(): boolean;
27
+ /**
28
+ * Check if interactive prompts can be used
29
+ */
30
+ export declare function isInteractive(): boolean;
31
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/ui/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAe9B;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAI/B;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAkBvC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
package/dist/ui/env.js ADDED
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Environment detection utilities for CLI output
3
+ * Handles CI detection, TTY checks, and color support
4
+ */
5
+ // Cache values since they don't change during execution
6
+ let cachedIsCI;
7
+ let cachedIsTTY;
8
+ let cachedSupportsColor;
9
+ /**
10
+ * Detect if running in a CI environment
11
+ */
12
+ export function isCI() {
13
+ if (cachedIsCI !== undefined)
14
+ return cachedIsCI;
15
+ cachedIsCI = Boolean(process.env.CI ||
16
+ process.env.GITHUB_ACTIONS ||
17
+ process.env.GITLAB_CI ||
18
+ process.env.JENKINS_URL ||
19
+ process.env.CIRCLECI ||
20
+ process.env.TRAVIS ||
21
+ process.env.BUILDKITE ||
22
+ process.env.TF_BUILD // Azure Pipelines
23
+ );
24
+ return cachedIsCI;
25
+ }
26
+ /**
27
+ * Check if stdout is a TTY (interactive terminal)
28
+ */
29
+ export function isTTY() {
30
+ if (cachedIsTTY !== undefined)
31
+ return cachedIsTTY;
32
+ cachedIsTTY = Boolean(process.stdout.isTTY);
33
+ return cachedIsTTY;
34
+ }
35
+ /**
36
+ * Check if the terminal supports colors
37
+ * Respects NO_COLOR and FORCE_COLOR environment variables
38
+ */
39
+ export function supportsColor() {
40
+ if (cachedSupportsColor !== undefined)
41
+ return cachedSupportsColor;
42
+ // NO_COLOR takes precedence (https://no-color.org/)
43
+ if (process.env.NO_COLOR) {
44
+ cachedSupportsColor = false;
45
+ return false;
46
+ }
47
+ // FORCE_COLOR overrides TTY check
48
+ if (process.env.FORCE_COLOR) {
49
+ cachedSupportsColor = true;
50
+ return true;
51
+ }
52
+ // Default to TTY status
53
+ cachedSupportsColor = isTTY();
54
+ return cachedSupportsColor;
55
+ }
56
+ /**
57
+ * Reset cached values (for testing)
58
+ */
59
+ export function resetEnvCache() {
60
+ cachedIsCI = undefined;
61
+ cachedIsTTY = undefined;
62
+ cachedSupportsColor = undefined;
63
+ }
64
+ /**
65
+ * Check if spinners should be used
66
+ * Spinners don't work well in CI or non-TTY environments
67
+ */
68
+ export function shouldUseSpinners() {
69
+ return isTTY() && !isCI();
70
+ }
71
+ /**
72
+ * Check if interactive prompts can be used
73
+ */
74
+ export function isInteractive() {
75
+ return isTTY() && !isCI() && Boolean(process.stdin.isTTY);
76
+ }
77
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/ui/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wDAAwD;AACxD,IAAI,UAA+B,CAAC;AACpC,IAAI,WAAgC,CAAC;AACrC,IAAI,mBAAwC,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,IAAI;IAClB,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAEhD,UAAU,GAAG,OAAO,CAClB,OAAO,CAAC,GAAG,CAAC,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,cAAc;QAC1B,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,QAAQ;QACpB,OAAO,CAAC,GAAG,CAAC,MAAM;QAClB,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB;KACxC,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK;IACnB,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAClD,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,mBAAmB,KAAK,SAAS;QAAE,OAAO,mBAAmB,CAAC;IAElE,oDAAoD;IACpD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzB,mBAAmB,GAAG,KAAK,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kCAAkC;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5B,mBAAmB,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAwB;IACxB,mBAAmB,GAAG,KAAK,EAAE,CAAC;IAC9B,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,UAAU,GAAG,SAAS,CAAC;IACvB,WAAW,GAAG,SAAS,CAAC;IACxB,mBAAmB,GAAG,SAAS,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './colors.js';
2
+ export * from './spinner.js';
3
+ export * from './prompts.js';
4
+ export * from './box.js';
5
+ export * from './output.js';
6
+ export * from './env.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './colors.js';
2
+ export * from './spinner.js';
3
+ export * from './prompts.js';
4
+ export * from './box.js';
5
+ export * from './output.js';
6
+ export * from './env.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Enable or disable JSON output mode
3
+ */
4
+ export declare function setJsonMode(enabled: boolean): void;
5
+ /**
6
+ * Check if JSON mode is currently enabled
7
+ */
8
+ export declare function isJsonMode(): boolean;
9
+ /**
10
+ * Output data - in JSON mode outputs as formatted JSON,
11
+ * in normal mode does nothing (caller should handle human output)
12
+ */
13
+ export declare function output(data: unknown): void;
14
+ /**
15
+ * Reset output state (for testing)
16
+ */
17
+ export declare function resetOutputState(): void;
18
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/ui/output.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAK1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Global JSON mode state
3
+ */
4
+ let jsonMode = false;
5
+ /**
6
+ * Enable or disable JSON output mode
7
+ */
8
+ export function setJsonMode(enabled) {
9
+ jsonMode = enabled;
10
+ }
11
+ /**
12
+ * Check if JSON mode is currently enabled
13
+ */
14
+ export function isJsonMode() {
15
+ return jsonMode;
16
+ }
17
+ /**
18
+ * Output data - in JSON mode outputs as formatted JSON,
19
+ * in normal mode does nothing (caller should handle human output)
20
+ */
21
+ export function output(data) {
22
+ if (jsonMode) {
23
+ console.log(JSON.stringify(data, null, 2));
24
+ }
25
+ // In non-JSON mode, caller handles human-friendly output
26
+ }
27
+ /**
28
+ * Reset output state (for testing)
29
+ */
30
+ export function resetOutputState() {
31
+ jsonMode = false;
32
+ }
33
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/ui/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,IAAa;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,yDAAyD;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare function logSuccess(message: string): void;
2
+ export declare function logError(message: string): void;
3
+ export declare function logWarning(message: string): void;
4
+ export declare function logInfo(message: string): void;
5
+ export declare function logStep(step: number, total: number, message: string): void;
6
+ export declare function logHeader(title: string): void;
7
+ export declare function logNewline(): void;
8
+ /**
9
+ * Print "Next steps" guidance for the user
10
+ */
11
+ export declare function printNextSteps(steps: string[]): void;
12
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAQpD"}
@@ -0,0 +1,37 @@
1
+ import { colors, symbols } from './colors.js';
2
+ export function logSuccess(message) {
3
+ console.log(colors.success('✓'), message);
4
+ }
5
+ export function logError(message) {
6
+ console.error(colors.error('✗'), message);
7
+ }
8
+ export function logWarning(message) {
9
+ console.warn(colors.warning('⚠'), message);
10
+ }
11
+ export function logInfo(message) {
12
+ console.log(colors.info('ℹ'), message);
13
+ }
14
+ export function logStep(step, total, message) {
15
+ console.log(colors.dim(`[${step}/${total}]`), message);
16
+ }
17
+ export function logHeader(title) {
18
+ console.log();
19
+ console.log(colors.bold(colors.primary(title)));
20
+ console.log(colors.dim('─'.repeat(title.length)));
21
+ }
22
+ export function logNewline() {
23
+ console.log();
24
+ }
25
+ /**
26
+ * Print "Next steps" guidance for the user
27
+ */
28
+ export function printNextSteps(steps) {
29
+ if (steps.length === 0)
30
+ return;
31
+ console.log();
32
+ console.log(colors.bold('Next steps:'));
33
+ for (const step of steps) {
34
+ console.log(` ${symbols.arrow} ${step}`);
35
+ }
36
+ }
37
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe;IAClE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type Ora } from 'ora';
2
+ export interface SpinnerOptions {
3
+ text: string;
4
+ color?: 'cyan' | 'green' | 'yellow' | 'red' | 'blue' | 'magenta';
5
+ }
6
+ export declare function createSpinner(options: SpinnerOptions | string): Ora;
7
+ export declare function withSpinner<T>(text: string, fn: () => Promise<T>): Promise<T>;
8
+ export declare function stepSpinner(step: string, total?: number): Ora;
9
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;CAClE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,GAAG,CAMnE;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAG7D"}
@@ -0,0 +1,27 @@
1
+ import ora, {} from 'ora';
2
+ import { colors } from './colors.js';
3
+ export function createSpinner(options) {
4
+ const opts = typeof options === 'string' ? { text: options } : options;
5
+ return ora({
6
+ text: opts.text,
7
+ color: opts.color ?? 'cyan',
8
+ });
9
+ }
10
+ export async function withSpinner(text, fn) {
11
+ const spinner = createSpinner(text);
12
+ spinner.start();
13
+ try {
14
+ const result = await fn();
15
+ spinner.succeed();
16
+ return result;
17
+ }
18
+ catch (error) {
19
+ spinner.fail();
20
+ throw error;
21
+ }
22
+ }
23
+ export function stepSpinner(step, total) {
24
+ const prefix = total ? colors.dim(`[${step}/${total}]`) : colors.dim(`[${step}]`);
25
+ return createSpinner(`${prefix} `);
26
+ }
27
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAY,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,MAAM,UAAU,aAAa,CAAC,OAAgC;IAC5D,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,OAAO,GAAG,CAAC;QACT,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,EAAoB;IAEpB,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAc;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAClF,OAAO,aAAa,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AACrC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@browserflow-ai/cli",
3
+ "version": "0.0.6",
4
+ "description": "bf command-line tool for BrowserFlow - Human-in-the-Loop E2E Test Generation",
5
+ "type": "module",
6
+ "bin": {
7
+ "bf": "./bin/bf.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ },
16
+ "./dist/*": {
17
+ "import": "./dist/*.js",
18
+ "types": "./dist/*.d.ts"
19
+ },
20
+ "./dist/commands/explore.js": {
21
+ "import": "./dist/commands/explore.js",
22
+ "types": "./dist/commands/explore.d.ts"
23
+ },
24
+ "./dist/commands/review.js": {
25
+ "import": "./dist/commands/review.js",
26
+ "types": "./dist/commands/review.d.ts"
27
+ }
28
+ },
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "test": "bun test",
32
+ "typecheck": "tsc --noEmit",
33
+ "dev": "bun run src/index.ts"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "bin"
38
+ ],
39
+ "keywords": [
40
+ "browserflow",
41
+ "e2e",
42
+ "testing",
43
+ "playwright",
44
+ "ai",
45
+ "automation"
46
+ ],
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/akatz-ai/browserflow.git",
50
+ "directory": "packages/cli"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/akatz-ai/browserflow/issues"
54
+ },
55
+ "homepage": "https://github.com/akatz-ai/browserflow#readme",
56
+ "license": "MIT",
57
+ "engines": {
58
+ "node": ">=18.0.0"
59
+ },
60
+ "dependencies": {
61
+ "@browserflow-ai/core": "0.0.6",
62
+ "@browserflow-ai/exploration": "0.0.6",
63
+ "@browserflow-ai/generator": "0.0.6",
64
+ "@browserflow-ai/review-ui": "0.0.6",
65
+ "chalk": "^5.3.0",
66
+ "commander": "^12.0.0",
67
+ "ora": "^8.0.0",
68
+ "pixelmatch": "^6.0.0",
69
+ "pngjs": "^7.0.0",
70
+ "yaml": "^2.8.2"
71
+ },
72
+ "devDependencies": {
73
+ "@types/node": "^20.10.0",
74
+ "@types/pixelmatch": "^5.2.6",
75
+ "@types/pngjs": "^6.0.5",
76
+ "bun-types": "^1.1.0"
77
+ }
78
+ }