@kya-os/cli 1.1.0 → 1.2.1

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 (139) hide show
  1. package/dist/commands/build.d.ts +5 -0
  2. package/dist/commands/build.d.ts.map +1 -0
  3. package/dist/commands/build.js +173 -0
  4. package/dist/commands/build.js.map +1 -0
  5. package/dist/commands/check.d.ts.map +1 -1
  6. package/dist/commands/check.js +9 -31
  7. package/dist/commands/check.js.map +1 -1
  8. package/dist/commands/claim.d.ts +7 -1
  9. package/dist/commands/claim.d.ts.map +1 -1
  10. package/dist/commands/claim.js +196 -44
  11. package/dist/commands/claim.js.map +1 -1
  12. package/dist/commands/demo.d.ts +10 -0
  13. package/dist/commands/demo.d.ts.map +1 -0
  14. package/dist/commands/demo.js +584 -0
  15. package/dist/commands/demo.js.map +1 -0
  16. package/dist/commands/dev.d.ts +5 -0
  17. package/dist/commands/dev.d.ts.map +1 -0
  18. package/dist/commands/dev.js +111 -0
  19. package/dist/commands/dev.js.map +1 -0
  20. package/dist/commands/doctor.d.ts +11 -0
  21. package/dist/commands/doctor.d.ts.map +1 -0
  22. package/dist/commands/doctor.js +530 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/env.d.ts +1 -1
  25. package/dist/commands/env.d.ts.map +1 -1
  26. package/dist/commands/env.js +113 -15
  27. package/dist/commands/env.js.map +1 -1
  28. package/dist/commands/identity.d.ts +14 -0
  29. package/dist/commands/identity.d.ts.map +1 -0
  30. package/dist/commands/identity.js +204 -0
  31. package/dist/commands/identity.js.map +1 -0
  32. package/dist/commands/init.d.ts +6 -2
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +86 -670
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/receipts.d.ts +11 -0
  37. package/dist/commands/receipts.d.ts.map +1 -0
  38. package/dist/commands/receipts.js +179 -0
  39. package/dist/commands/receipts.js.map +1 -0
  40. package/dist/commands/register.d.ts +15 -0
  41. package/dist/commands/register.d.ts.map +1 -0
  42. package/dist/commands/register.js +220 -0
  43. package/dist/commands/register.js.map +1 -0
  44. package/dist/commands/rotate.d.ts +7 -1
  45. package/dist/commands/rotate.d.ts.map +1 -1
  46. package/dist/commands/rotate.js +149 -109
  47. package/dist/commands/rotate.js.map +1 -1
  48. package/dist/commands/start.d.ts +5 -0
  49. package/dist/commands/start.d.ts.map +1 -0
  50. package/dist/commands/start.js +129 -0
  51. package/dist/commands/start.js.map +1 -0
  52. package/dist/commands/status.d.ts +9 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +177 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/verify.d.ts +22 -0
  57. package/dist/commands/verify.d.ts.map +1 -0
  58. package/dist/commands/verify.js +491 -0
  59. package/dist/commands/verify.js.map +1 -0
  60. package/dist/components/claim-experience.d.ts +21 -0
  61. package/dist/components/claim-experience.d.ts.map +1 -0
  62. package/dist/components/claim-experience.js +138 -0
  63. package/dist/components/claim-experience.js.map +1 -0
  64. package/dist/effects/animation-engine.d.ts +173 -0
  65. package/dist/effects/animation-engine.d.ts.map +1 -0
  66. package/dist/effects/animation-engine.js +254 -0
  67. package/dist/effects/animation-engine.js.map +1 -0
  68. package/dist/effects/cli-integration.js +8 -8
  69. package/dist/effects/cli-integration.js.map +1 -1
  70. package/dist/effects/config.d.ts +86 -10
  71. package/dist/effects/config.d.ts.map +1 -1
  72. package/dist/effects/config.js +201 -18
  73. package/dist/effects/config.js.map +1 -1
  74. package/dist/effects/effect-runner.d.ts +69 -0
  75. package/dist/effects/effect-runner.d.ts.map +1 -0
  76. package/dist/effects/effect-runner.js +255 -0
  77. package/dist/effects/effect-runner.js.map +1 -0
  78. package/dist/effects/gradient.d.ts +131 -0
  79. package/dist/effects/gradient.d.ts.map +1 -0
  80. package/dist/effects/gradient.js +236 -0
  81. package/dist/effects/gradient.js.map +1 -0
  82. package/dist/effects/implementations/beams.d.ts +80 -0
  83. package/dist/effects/implementations/beams.d.ts.map +1 -0
  84. package/dist/effects/implementations/beams.js +221 -0
  85. package/dist/effects/implementations/beams.js.map +1 -0
  86. package/dist/effects/implementations/blackhole.d.ts +98 -0
  87. package/dist/effects/implementations/blackhole.d.ts.map +1 -0
  88. package/dist/effects/implementations/blackhole.js +421 -0
  89. package/dist/effects/implementations/blackhole.js.map +1 -0
  90. package/dist/effects/implementations/burn.d.ts +74 -0
  91. package/dist/effects/implementations/burn.d.ts.map +1 -0
  92. package/dist/effects/implementations/burn.js +234 -0
  93. package/dist/effects/implementations/burn.js.map +1 -0
  94. package/dist/effects/implementations/decrypt.d.ts +115 -0
  95. package/dist/effects/implementations/decrypt.d.ts.map +1 -0
  96. package/dist/effects/implementations/decrypt.js +394 -0
  97. package/dist/effects/implementations/decrypt.js.map +1 -0
  98. package/dist/effects/implementations/waves.d.ts +78 -0
  99. package/dist/effects/implementations/waves.d.ts.map +1 -0
  100. package/dist/effects/implementations/waves.js +278 -0
  101. package/dist/effects/implementations/waves.js.map +1 -0
  102. package/dist/effects/index.d.ts +34 -0
  103. package/dist/effects/index.d.ts.map +1 -0
  104. package/dist/effects/index.js +114 -0
  105. package/dist/effects/index.js.map +1 -0
  106. package/dist/effects/motion-engine.d.ts +168 -0
  107. package/dist/effects/motion-engine.d.ts.map +1 -0
  108. package/dist/effects/motion-engine.js +353 -0
  109. package/dist/effects/motion-engine.js.map +1 -0
  110. package/dist/effects/safe-executor.d.ts +55 -0
  111. package/dist/effects/safe-executor.d.ts.map +1 -0
  112. package/dist/effects/safe-executor.js +210 -0
  113. package/dist/effects/safe-executor.js.map +1 -0
  114. package/dist/effects/types.d.ts +199 -0
  115. package/dist/effects/types.d.ts.map +1 -0
  116. package/dist/effects/types.js +80 -0
  117. package/dist/effects/types.js.map +1 -0
  118. package/dist/effects/utils.d.ts +104 -0
  119. package/dist/effects/utils.d.ts.map +1 -0
  120. package/dist/effects/utils.js +280 -0
  121. package/dist/effects/utils.js.map +1 -0
  122. package/dist/index.js +154 -19
  123. package/dist/utils/env-manager.d.ts +6 -7
  124. package/dist/utils/env-manager.d.ts.map +1 -1
  125. package/dist/utils/env-manager.js +52 -40
  126. package/dist/utils/env-manager.js.map +1 -1
  127. package/dist/utils/identity-manager.d.ts +41 -0
  128. package/dist/utils/identity-manager.d.ts.map +1 -0
  129. package/dist/utils/identity-manager.js +159 -0
  130. package/dist/utils/identity-manager.js.map +1 -0
  131. package/dist/utils/kta-api.d.ts +67 -0
  132. package/dist/utils/kta-api.d.ts.map +1 -0
  133. package/dist/utils/kta-api.js +137 -0
  134. package/dist/utils/kta-api.js.map +1 -0
  135. package/package.json +8 -7
  136. package/dist/utils/validation.d.ts +0 -101
  137. package/dist/utils/validation.d.ts.map +0 -1
  138. package/dist/utils/validation.js +0 -109
  139. package/dist/utils/validation.js.map +0 -1
@@ -1,9 +1,14 @@
1
1
  /**
2
- * Configuration management for terminal effects - CLI specific configuration
3
- * Local implementation since config functions aren't exported from @kya-os/cli-effects
2
+ * Configuration management for terminal effects
4
3
  */
5
- // Simple local config implementation
6
- const defaultConfig = {
4
+ import { detectTerminalCapabilities } from "./utils.js";
5
+ import * as fs from "fs/promises";
6
+ import * as path from "path";
7
+ import { homedir } from "os";
8
+ /**
9
+ * Default configuration
10
+ */
11
+ const DEFAULT_CONFIG = {
7
12
  enabled: true,
8
13
  speedMultiplier: 1.0,
9
14
  performanceProfile: "medium",
@@ -13,21 +18,199 @@ const defaultConfig = {
13
18
  showMetrics: false,
14
19
  effectSettings: {},
15
20
  };
16
- let currentConfig = { ...defaultConfig };
17
- export const getConfig = async () => {
18
- // Check environment variables
19
- if (process.env.KYA_EFFECTS_ENABLED === 'false') {
20
- currentConfig.enabled = false;
21
+ /**
22
+ * Performance profiles
23
+ */
24
+ const PERFORMANCE_PROFILES = {
25
+ low: {
26
+ maxExecutionTime: 1000,
27
+ maxMemoryUsage: 25,
28
+ },
29
+ medium: {
30
+ maxExecutionTime: 3000,
31
+ maxMemoryUsage: 50,
32
+ },
33
+ high: {
34
+ maxExecutionTime: 5000,
35
+ maxMemoryUsage: 100,
36
+ },
37
+ };
38
+ /**
39
+ * Configuration manager for effects
40
+ */
41
+ export class EffectsConfigManager {
42
+ constructor(configPath) {
43
+ this.config = { ...DEFAULT_CONFIG };
44
+ this.configPath =
45
+ configPath || path.join(homedir(), ".kya-os", "effects.config.json");
21
46
  }
22
- if (process.env.CI || process.env.GITHUB_ACTIONS) {
23
- currentConfig.enabled = false;
47
+ /**
48
+ * Load configuration from file
49
+ */
50
+ async load() {
51
+ try {
52
+ const configData = await fs.readFile(this.configPath, "utf-8");
53
+ const loadedConfig = JSON.parse(configData);
54
+ this.config = { ...DEFAULT_CONFIG, ...loadedConfig };
55
+ }
56
+ catch (error) {
57
+ // Config file doesn't exist or is invalid, use defaults
58
+ if (process.env.DEBUG) {
59
+ console.log("No effects config found, using defaults");
60
+ }
61
+ }
24
62
  }
25
- return currentConfig;
26
- };
27
- export const initializeConfig = async (config) => {
28
- if (config) {
29
- currentConfig = { ...currentConfig, ...config };
63
+ /**
64
+ * Save configuration to file
65
+ */
66
+ async save() {
67
+ const configDir = path.dirname(this.configPath);
68
+ await fs.mkdir(configDir, { recursive: true });
69
+ await fs.writeFile(this.configPath, JSON.stringify(this.config, null, 2));
30
70
  }
31
- };
32
- // CLI-specific configuration extensions can be added here if needed
71
+ /**
72
+ * Get current configuration
73
+ */
74
+ getConfig() {
75
+ return { ...this.config };
76
+ }
77
+ /**
78
+ * Update configuration
79
+ */
80
+ async updateConfig(updates) {
81
+ this.config = { ...this.config, ...updates };
82
+ await this.save();
83
+ }
84
+ /**
85
+ * Get safety configuration based on performance profile
86
+ */
87
+ getSafetyConfig() {
88
+ const profile = PERFORMANCE_PROFILES[this.config.performanceProfile] ||
89
+ PERFORMANCE_PROFILES.medium;
90
+ return {
91
+ ...profile,
92
+ enableMonitoring: this.config.showMetrics,
93
+ forceFallback: this.config.forceFallback || !this.shouldEnableEffects(),
94
+ };
95
+ }
96
+ /**
97
+ * Determine if effects should be enabled
98
+ */
99
+ shouldEnableEffects() {
100
+ // Check explicit disable
101
+ if (!this.config.enabled || process.env.KYA_EFFECTS_ENABLED === "false") {
102
+ return false;
103
+ }
104
+ // Check CI/testing environments
105
+ if (this.isCI() || this.isTesting()) {
106
+ return false;
107
+ }
108
+ // Check terminal capabilities
109
+ const capabilities = this.getTerminalCapabilities();
110
+ if (!capabilities.isInteractive) {
111
+ return false;
112
+ }
113
+ // Check color support based on color mode
114
+ if (this.config.colorMode === "none") {
115
+ return true; // Effects without color
116
+ }
117
+ if (this.config.colorMode === "auto") {
118
+ return capabilities.supportsColor;
119
+ }
120
+ // Check specific color mode support
121
+ switch (this.config.colorMode) {
122
+ case "16":
123
+ return capabilities.supportsColor;
124
+ case "256":
125
+ return capabilities.supports256Color;
126
+ case "truecolor":
127
+ return capabilities.supportsTrueColor;
128
+ default:
129
+ return false;
130
+ }
131
+ }
132
+ /**
133
+ * Get terminal capabilities
134
+ */
135
+ getTerminalCapabilities() {
136
+ if (!this.terminalCapabilities) {
137
+ this.terminalCapabilities = detectTerminalCapabilities();
138
+ }
139
+ return this.terminalCapabilities;
140
+ }
141
+ /**
142
+ * Check if running in CI environment
143
+ */
144
+ isCI() {
145
+ return !!(process.env.CI ||
146
+ process.env.CONTINUOUS_INTEGRATION ||
147
+ process.env.GITHUB_ACTIONS ||
148
+ process.env.GITLAB_CI ||
149
+ process.env.CIRCLECI ||
150
+ process.env.TRAVIS ||
151
+ process.env.JENKINS_URL);
152
+ }
153
+ /**
154
+ * Check if running in testing environment
155
+ */
156
+ isTesting() {
157
+ return process.env.NODE_ENV === "test" || !!process.env.JEST_WORKER_ID;
158
+ }
159
+ /**
160
+ * Apply environment variable overrides
161
+ */
162
+ applyEnvironmentOverrides() {
163
+ if (process.env.KYA_EFFECTS_ENABLED !== undefined) {
164
+ this.config.enabled = process.env.KYA_EFFECTS_ENABLED !== "false";
165
+ }
166
+ if (process.env.KYA_EFFECTS_SPEED) {
167
+ const speed = parseFloat(process.env.KYA_EFFECTS_SPEED);
168
+ if (!isNaN(speed) && speed > 0 && speed <= 10) {
169
+ this.config.speedMultiplier = speed;
170
+ }
171
+ }
172
+ if (process.env.KYA_EFFECTS_PROFILE) {
173
+ const profile = process.env.KYA_EFFECTS_PROFILE;
174
+ if (["low", "medium", "high"].includes(profile)) {
175
+ this.config.performanceProfile = profile;
176
+ }
177
+ }
178
+ if (process.env.KYA_EFFECTS_FALLBACK === "true") {
179
+ this.config.forceFallback = true;
180
+ }
181
+ }
182
+ /**
183
+ * Get effect-specific configuration
184
+ */
185
+ getEffectConfig(effectName) {
186
+ return this.config.effectSettings[effectName] || {};
187
+ }
188
+ /**
189
+ * Set effect-specific configuration
190
+ */
191
+ async setEffectConfig(effectName, config) {
192
+ this.config.effectSettings[effectName] = config;
193
+ await this.save();
194
+ }
195
+ }
196
+ /**
197
+ * Global configuration instance
198
+ */
199
+ export const effectsConfig = new EffectsConfigManager();
200
+ /**
201
+ * Initialize configuration
202
+ */
203
+ export async function initializeConfig() {
204
+ await effectsConfig.load();
205
+ effectsConfig.applyEnvironmentOverrides();
206
+ }
207
+ /**
208
+ * Get current configuration
209
+ */
210
+ export async function getConfig() {
211
+ if (!effectsConfig.getConfig().enabled) {
212
+ await initializeConfig();
213
+ }
214
+ return effectsConfig.getConfig();
215
+ }
33
216
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/effects/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,qCAAqC;AACrC,MAAM,aAAa,GAAkB;IACnC,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,GAAG;IACpB,kBAAkB,EAAE,QAAQ;IAC5B,aAAa,EAAE,KAAK;IACpB,SAAS,EAAE,MAAM;IACjB,iBAAiB,EAAE,KAAK;IACxB,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,EAAE;CACnB,CAAC;AAEF,IAAI,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;AAEzC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,IAA4B,EAAE;IAC1D,8BAA8B;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,OAAO,EAAE,CAAC;QAChD,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACjD,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAA+B,EAAiB,EAAE;IACvF,IAAI,MAAM,EAAE,CAAC;QACX,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;IAClD,CAAC;AACH,CAAC,CAAC;AAEF,oEAAoE"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/effects/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Effect Runner
3
+ * Orchestrates terminal effects with proper management
4
+ */
5
+ import { Effect, EffectConfig } from "./types.js";
6
+ /**
7
+ * Options for running an effect
8
+ */
9
+ export interface RunEffectOptions {
10
+ /** Effect instance to run */
11
+ effect: Effect;
12
+ /** Text to animate */
13
+ text: string;
14
+ /** Effect-specific configuration */
15
+ config?: Partial<EffectConfig>;
16
+ /** Callback when effect completes */
17
+ onComplete?: () => void;
18
+ /** Callback on error */
19
+ onError?: (error: Error) => void;
20
+ /** Custom output stream */
21
+ outputStream?: NodeJS.WriteStream;
22
+ /** Skip the "Press any key to exit" prompt */
23
+ skipExitPrompt?: boolean;
24
+ /** Keep text visible after effect (no alternate screen buffer) */
25
+ persistent?: boolean;
26
+ }
27
+ /**
28
+ * Effect runner for executing terminal effects
29
+ */
30
+ export declare class EffectRunner {
31
+ private terminalState;
32
+ private isRunning;
33
+ private currentEffect;
34
+ private animationHandle;
35
+ constructor();
36
+ /**
37
+ * Run an effect
38
+ */
39
+ run(options: RunEffectOptions): Promise<void>;
40
+ /**
41
+ * Stop the currently running effect
42
+ */
43
+ stop(): Promise<void>;
44
+ /**
45
+ * Check if terminal supports effects
46
+ */
47
+ private supportsEffects;
48
+ /**
49
+ * Setup terminal for effect rendering
50
+ */
51
+ private setupTerminal;
52
+ /**
53
+ * Run the animation loop
54
+ */
55
+ private runAnimation;
56
+ /**
57
+ * Clean up terminal state
58
+ */
59
+ private cleanup;
60
+ /**
61
+ * Check if an effect is currently running
62
+ */
63
+ isEffectRunning(): boolean;
64
+ /**
65
+ * Get current effect info
66
+ */
67
+ getCurrentEffect(): Effect | null;
68
+ }
69
+ //# sourceMappingURL=effect-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-runner.d.ts","sourceRoot":"","sources":["../../src/effects/effect-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAsB,MAAM,YAAY,CAAC;AAMtE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAClC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAWD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,eAAe,CAA+B;;IAUtD;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEnD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;YACW,aAAa;IA2D3B;;OAEG;YACW,YAAY;IA+D1B;;OAEG;YACW,OAAO;IAmCrB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;CAGlC"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Effect Runner
3
+ * Orchestrates terminal effects with proper management
4
+ */
5
+ import { ANSI, getTerminalDimensions, calculateFrameDelay } from "./utils.js";
6
+ import { getConfig } from "./config.js";
7
+ import * as readline from "readline";
8
+ import { stdout } from "process";
9
+ /**
10
+ * Effect runner for executing terminal effects
11
+ */
12
+ export class EffectRunner {
13
+ constructor() {
14
+ this.isRunning = false;
15
+ this.currentEffect = null;
16
+ this.animationHandle = null;
17
+ this.terminalState = {
18
+ cursorHidden: false,
19
+ originalDimensions: getTerminalDimensions(),
20
+ cleanupHandlers: [],
21
+ };
22
+ }
23
+ /**
24
+ * Run an effect
25
+ */
26
+ async run(options) {
27
+ if (this.isRunning) {
28
+ throw new Error("Another effect is already running");
29
+ }
30
+ const config = await getConfig();
31
+ const outputStream = options.outputStream || stdout;
32
+ // Check if effects are enabled or if terminal doesn't support effects
33
+ if (!config.enabled || !this.supportsEffects(outputStream)) {
34
+ // Use fallback
35
+ const fallbackLines = options.effect.renderFallback();
36
+ outputStream.write(fallbackLines.join("\n") + "\n");
37
+ options.onComplete?.();
38
+ return;
39
+ }
40
+ try {
41
+ this.isRunning = true;
42
+ this.currentEffect = options.effect;
43
+ // Setup terminal
44
+ await this.setupTerminal(outputStream, options.persistent);
45
+ // Initialize effect
46
+ const effectConfig = {
47
+ frameRate: 30 * config.speedMultiplier,
48
+ useXTermColors: false,
49
+ noColor: false,
50
+ canvas: this.terminalState.originalDimensions,
51
+ ...options.config,
52
+ };
53
+ options.effect.initialize(options.text, effectConfig);
54
+ // Execute with safety wrapper
55
+ // Since we're handling the animation loop ourselves, we bypass the executor's execute method
56
+ // and use the animation loop directly with try-catch for safety
57
+ try {
58
+ await this.runAnimation(options.effect, outputStream, effectConfig.frameRate, options.skipExitPrompt, options.persistent);
59
+ }
60
+ catch (animationError) {
61
+ // If animation fails, try fallback
62
+ const fallbackLines = options.effect.renderFallback();
63
+ outputStream.write(fallbackLines.join("\n") + "\n");
64
+ throw animationError;
65
+ }
66
+ // Clean up
67
+ await this.cleanup(outputStream, options.persistent);
68
+ options.onComplete?.();
69
+ }
70
+ catch (error) {
71
+ await this.cleanup(outputStream, options.persistent);
72
+ const err = error instanceof Error ? error : new Error(String(error));
73
+ options.onError?.(err);
74
+ throw err;
75
+ }
76
+ finally {
77
+ this.isRunning = false;
78
+ this.currentEffect = null;
79
+ }
80
+ }
81
+ /**
82
+ * Stop the currently running effect
83
+ */
84
+ async stop() {
85
+ if (!this.isRunning || !this.currentEffect) {
86
+ return;
87
+ }
88
+ // Cancel animation
89
+ if (this.animationHandle) {
90
+ clearTimeout(this.animationHandle);
91
+ this.animationHandle = null;
92
+ }
93
+ // Clean up effect
94
+ this.currentEffect.cleanup();
95
+ await this.cleanup(stdout, false);
96
+ this.isRunning = false;
97
+ this.currentEffect = null;
98
+ }
99
+ /**
100
+ * Check if terminal supports effects
101
+ */
102
+ supportsEffects(stream) {
103
+ // Check if we have a TTY and basic terminal capabilities
104
+ if (!stream.isTTY)
105
+ return false;
106
+ if (!process.env.TERM || process.env.TERM === 'dumb')
107
+ return false;
108
+ // Check for common CI environments that might not support effects well
109
+ if (process.env.CI || process.env.GITHUB_ACTIONS)
110
+ return false;
111
+ return true;
112
+ }
113
+ /**
114
+ * Setup terminal for effect rendering
115
+ */
116
+ async setupTerminal(stream, persistent) {
117
+ // Only use alternate screen buffer if not in persistent mode
118
+ if (!persistent) {
119
+ // Enter alternate screen buffer (prevents scrolling)
120
+ stream.write("\x1b[?1049h");
121
+ }
122
+ // Hide cursor
123
+ stream.write(ANSI.cursor.hide);
124
+ this.terminalState.cursorHidden = true;
125
+ // Clear screen
126
+ stream.write(ANSI.clear.screen);
127
+ stream.write(ANSI.cursor.home);
128
+ // Setup cleanup handlers
129
+ const handleExit = () => {
130
+ this.cleanup(stream, persistent).catch(() => { });
131
+ };
132
+ const handleResize = () => {
133
+ this.terminalState.originalDimensions = getTerminalDimensions();
134
+ };
135
+ process.on("exit", handleExit);
136
+ process.on("SIGINT", handleExit);
137
+ process.on("SIGTERM", handleExit);
138
+ process.stdout.on("resize", handleResize);
139
+ this.terminalState.cleanupHandlers.push(() => process.off("exit", handleExit), () => process.off("SIGINT", handleExit), () => process.off("SIGTERM", handleExit), () => process.stdout.off("resize", handleResize));
140
+ // Setup keyboard handling for cancellation
141
+ if (stream === stdout) {
142
+ readline.emitKeypressEvents(process.stdin);
143
+ if (process.stdin.isTTY) {
144
+ process.stdin.setRawMode(true);
145
+ }
146
+ const handleKeypress = async (_str, key) => {
147
+ if (key && (key.name === "escape" || (key.ctrl && key.name === "c") || key.name === "x" || key.name === "q")) {
148
+ await this.stop();
149
+ // Ensure we exit alternate screen
150
+ stream.write("\x1b[?1049l");
151
+ process.exit(0);
152
+ }
153
+ };
154
+ process.stdin.on("keypress", handleKeypress);
155
+ this.terminalState.cleanupHandlers.push(() => process.stdin.off("keypress", handleKeypress));
156
+ }
157
+ }
158
+ /**
159
+ * Run the animation loop
160
+ */
161
+ async runAnimation(effect, stream, frameRate, skipExitPrompt, persistent) {
162
+ const frameDelay = calculateFrameDelay(frameRate);
163
+ while (!effect.isComplete()) {
164
+ const startTime = Date.now();
165
+ // Render frame
166
+ const lines = await effect.render();
167
+ // Clear screen and render
168
+ stream.write(ANSI.cursor.home);
169
+ stream.write(lines.join("\n"));
170
+ stream.write(ANSI.clear.toEnd);
171
+ // Calculate actual delay needed
172
+ const renderTime = Date.now() - startTime;
173
+ const delay = Math.max(0, frameDelay - renderTime);
174
+ // Wait for next frame
175
+ if (delay > 0) {
176
+ await new Promise((resolve) => {
177
+ this.animationHandle = setTimeout(resolve, delay);
178
+ });
179
+ }
180
+ }
181
+ // Only show exit prompt if not skipped and not in persistent mode
182
+ if (!skipExitPrompt && !persistent) {
183
+ // After animation completes, show exit message
184
+ stream.write("\n\n");
185
+ stream.write("\x1b[2m"); // Dim text
186
+ stream.write("Press any key to exit...");
187
+ stream.write("\x1b[0m"); // Reset
188
+ stream.write("\n");
189
+ // Wait for keypress - ensure we're in raw mode
190
+ if (process.stdin.isTTY && !process.stdin.isRaw) {
191
+ process.stdin.setRawMode(true);
192
+ }
193
+ await new Promise((resolve) => {
194
+ const handleKeypress = (_str, _key) => {
195
+ process.stdin.off("keypress", handleKeypress);
196
+ resolve();
197
+ };
198
+ process.stdin.on("keypress", handleKeypress);
199
+ });
200
+ }
201
+ else if (persistent) {
202
+ // In persistent mode, render the final frame one more time to ensure it's visible
203
+ const finalLines = await effect.render();
204
+ stream.write(ANSI.cursor.home);
205
+ stream.write(finalLines.join("\n"));
206
+ stream.write(ANSI.clear.toEnd);
207
+ stream.write("\n");
208
+ }
209
+ }
210
+ /**
211
+ * Clean up terminal state
212
+ */
213
+ async cleanup(stream, persistent) {
214
+ // Clear animation handle
215
+ if (this.animationHandle) {
216
+ clearTimeout(this.animationHandle);
217
+ this.animationHandle = null;
218
+ }
219
+ // Restore cursor
220
+ if (this.terminalState.cursorHidden) {
221
+ stream.write(ANSI.cursor.show);
222
+ this.terminalState.cursorHidden = false;
223
+ }
224
+ // Reset terminal
225
+ stream.write(ANSI.reset);
226
+ // Only exit alternate screen buffer if not in persistent mode
227
+ if (!persistent) {
228
+ // Exit alternate screen buffer
229
+ stream.write("\x1b[?1049l");
230
+ }
231
+ stream.write("\n");
232
+ // Remove event handlers
233
+ for (const handler of this.terminalState.cleanupHandlers) {
234
+ handler();
235
+ }
236
+ this.terminalState.cleanupHandlers = [];
237
+ // Restore stdin mode
238
+ if (process.stdin.isTTY && stream === stdout) {
239
+ process.stdin.setRawMode(false);
240
+ }
241
+ }
242
+ /**
243
+ * Check if an effect is currently running
244
+ */
245
+ isEffectRunning() {
246
+ return this.isRunning;
247
+ }
248
+ /**
249
+ * Get current effect info
250
+ */
251
+ getCurrentEffect() {
252
+ return this.currentEffect;
253
+ }
254
+ }
255
+ //# sourceMappingURL=effect-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-runner.js","sourceRoot":"","sources":["../../src/effects/effect-runner.ts"],"names":[],"mappings":"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"}