@kya-os/cli 0.1.0-beta.5 → 0.1.0-beta.7
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.
- package/README.md +210 -34
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +28 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/cli-experience-demo-simple.d.ts +14 -0
- package/dist/commands/cli-experience-demo-simple.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo-simple.js +119 -0
- package/dist/commands/cli-experience-demo-simple.js.map +1 -0
- package/dist/commands/cli-experience-demo.d.ts +14 -0
- package/dist/commands/cli-experience-demo.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo.js +172 -0
- package/dist/commands/cli-experience-demo.js.map +1 -0
- package/dist/commands/effects-demo.d.ts +10 -0
- package/dist/commands/effects-demo.d.ts.map +1 -0
- package/dist/commands/effects-demo.js +292 -0
- package/dist/commands/effects-demo.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +12 -2
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +407 -73
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +19 -3
- package/dist/commands/rotate.js.map +1 -1
- package/dist/dev.d.ts +7 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +9 -0
- package/dist/dev.js.map +1 -0
- package/dist/effects/__tests__/effects.test.d.ts +5 -0
- package/dist/effects/__tests__/effects.test.d.ts.map +1 -0
- package/dist/effects/__tests__/effects.test.js +206 -0
- package/dist/effects/__tests__/effects.test.js.map +1 -0
- package/dist/effects/animation-engine.d.ts +173 -0
- package/dist/effects/animation-engine.d.ts.map +1 -0
- package/dist/effects/animation-engine.js +254 -0
- package/dist/effects/animation-engine.js.map +1 -0
- package/dist/effects/cli-integration.d.ts +86 -0
- package/dist/effects/cli-integration.d.ts.map +1 -0
- package/dist/effects/cli-integration.js +309 -0
- package/dist/effects/cli-integration.js.map +1 -0
- package/dist/effects/config.d.ts +95 -0
- package/dist/effects/config.d.ts.map +1 -0
- package/dist/effects/config.js +216 -0
- package/dist/effects/config.js.map +1 -0
- package/dist/effects/effect-runner.d.ts +69 -0
- package/dist/effects/effect-runner.d.ts.map +1 -0
- package/dist/effects/effect-runner.js +255 -0
- package/dist/effects/effect-runner.js.map +1 -0
- package/dist/effects/gradient.d.ts +131 -0
- package/dist/effects/gradient.d.ts.map +1 -0
- package/dist/effects/gradient.js +236 -0
- package/dist/effects/gradient.js.map +1 -0
- package/dist/effects/implementations/beams.d.ts +80 -0
- package/dist/effects/implementations/beams.d.ts.map +1 -0
- package/dist/effects/implementations/beams.js +221 -0
- package/dist/effects/implementations/beams.js.map +1 -0
- package/dist/effects/implementations/binary-path.d.ts +88 -0
- package/dist/effects/implementations/binary-path.d.ts.map +1 -0
- package/dist/effects/implementations/binary-path.js +296 -0
- package/dist/effects/implementations/binary-path.js.map +1 -0
- package/dist/effects/implementations/blackhole.d.ts +98 -0
- package/dist/effects/implementations/blackhole.d.ts.map +1 -0
- package/dist/effects/implementations/blackhole.js +394 -0
- package/dist/effects/implementations/blackhole.js.map +1 -0
- package/dist/effects/implementations/burn.d.ts +74 -0
- package/dist/effects/implementations/burn.d.ts.map +1 -0
- package/dist/effects/implementations/burn.js +234 -0
- package/dist/effects/implementations/burn.js.map +1 -0
- package/dist/effects/implementations/decrypt.d.ts +115 -0
- package/dist/effects/implementations/decrypt.d.ts.map +1 -0
- package/dist/effects/implementations/decrypt.js +394 -0
- package/dist/effects/implementations/decrypt.js.map +1 -0
- package/dist/effects/implementations/test.d.ts +113 -0
- package/dist/effects/implementations/test.d.ts.map +1 -0
- package/dist/effects/implementations/test.js +552 -0
- package/dist/effects/implementations/test.js.map +1 -0
- package/dist/effects/implementations/waves.d.ts +78 -0
- package/dist/effects/implementations/waves.d.ts.map +1 -0
- package/dist/effects/implementations/waves.js +278 -0
- package/dist/effects/implementations/waves.js.map +1 -0
- package/dist/effects/index.d.ts +37 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +79 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/motion-engine.d.ts +168 -0
- package/dist/effects/motion-engine.d.ts.map +1 -0
- package/dist/effects/motion-engine.js +353 -0
- package/dist/effects/motion-engine.js.map +1 -0
- package/dist/effects/safe-executor.d.ts +55 -0
- package/dist/effects/safe-executor.d.ts.map +1 -0
- package/dist/effects/safe-executor.js +210 -0
- package/dist/effects/safe-executor.js.map +1 -0
- package/dist/effects/template/effect-template.d.ts +97 -0
- package/dist/effects/template/effect-template.d.ts.map +1 -0
- package/dist/effects/template/effect-template.js +208 -0
- package/dist/effects/template/effect-template.js.map +1 -0
- package/dist/effects/types.d.ts +199 -0
- package/dist/effects/types.d.ts.map +1 -0
- package/dist/effects/types.js +80 -0
- package/dist/effects/types.js.map +1 -0
- package/dist/effects/utils.d.ts +104 -0
- package/dist/effects/utils.d.ts.map +1 -0
- package/dist/effects/utils.js +280 -0
- package/dist/effects/utils.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -42
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
package/dist/commands/rotate.js
CHANGED
|
@@ -5,6 +5,7 @@ import { EnvManager } from '../utils/env-manager.js';
|
|
|
5
5
|
import { confirmRotation, showSuccess, showError, showWarning } from '../utils/prompts.js';
|
|
6
6
|
import { existsSync } from 'fs';
|
|
7
7
|
import { join } from 'path';
|
|
8
|
+
import { cliEffects, EffectTrigger } from '../effects/cli-integration.js';
|
|
8
9
|
export async function rotate(options) {
|
|
9
10
|
console.log(chalk.cyan('\n🔄 Key Rotation\n'));
|
|
10
11
|
// Check for existing identity
|
|
@@ -41,14 +42,29 @@ export async function rotate(options) {
|
|
|
41
42
|
console.log(` Age: ${Math.floor(keyHealth.age / (24 * 60 * 60 * 1000))} days`);
|
|
42
43
|
console.log(` Signatures: ${keyHealth.signatureCount.toLocaleString()}`);
|
|
43
44
|
console.log(` Should rotate: ${keyHealth.shouldRotate ? chalk.yellow('Yes') : chalk.green('No')}`);
|
|
45
|
+
// Show burn effect for old keys
|
|
46
|
+
spinner.stop();
|
|
47
|
+
await cliEffects.showEffect(EffectTrigger.KEY_ROTATION, `🔥 Rotating cryptographic keys...\n\n` +
|
|
48
|
+
`Old Key: ${processVars.MCP_IDENTITY_PUBLIC_KEY?.substring(0, 16)}...\n` +
|
|
49
|
+
`Status: BURNING`);
|
|
44
50
|
// Perform rotation
|
|
45
51
|
spinner.start('Contacting registry...');
|
|
46
52
|
const result = await identity.rotateKeys(options.reason);
|
|
47
53
|
if (result.success) {
|
|
48
54
|
spinner.succeed('Keys rotated successfully!');
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
// Show beams effect for new keys
|
|
56
|
+
const newKeysText = `🔐 ${chalk.bold('New Keys Generated:')}\n` +
|
|
57
|
+
` Public Key: ${identity.publicKey.substring(0, 32)}...\n` +
|
|
58
|
+
` Grace period ends: ${new Date(result.gracePeriodEnd).toLocaleDateString()}\n` +
|
|
59
|
+
` Old keys remain valid until then`;
|
|
60
|
+
await cliEffects.showCustomEffect('beams', newKeysText, {
|
|
61
|
+
config: {
|
|
62
|
+
duration: 3000,
|
|
63
|
+
beamColors: ['00ff00', '00ffff', 'ffffff'],
|
|
64
|
+
beamCount: 5,
|
|
65
|
+
baseColor: '404040'
|
|
66
|
+
}
|
|
67
|
+
});
|
|
52
68
|
// Get new identity info
|
|
53
69
|
const newVars = {
|
|
54
70
|
MCP_IDENTITY_DID: identity.did,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../src/commands/rotate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../src/commands/rotate.ts"],"names":[],"mappings":"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"}
|
package/dist/dev.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
package/dist/dev.js
ADDED
package/dist/dev.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.test.d.ts","sourceRoot":"","sources":["../../../src/effects/__tests__/effects.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Terminal Effects System
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
5
|
+
import { BurnEffect, BeamsEffect, SafeEffectExecutor, getEffect, getAllEffects, cliEffects, EffectTrigger, } from "../index.js";
|
|
6
|
+
// Mock terminal capabilities
|
|
7
|
+
vi.mock("../utils.js", async () => {
|
|
8
|
+
const actual = await vi.importActual("../utils.js");
|
|
9
|
+
return {
|
|
10
|
+
...actual,
|
|
11
|
+
detectTerminalCapabilities: vi.fn(() => ({
|
|
12
|
+
supportsColor: true,
|
|
13
|
+
supports256Color: true,
|
|
14
|
+
supportsTrueColor: true,
|
|
15
|
+
dimensions: { width: 80, height: 24 },
|
|
16
|
+
isInteractive: true,
|
|
17
|
+
})),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
// Mock process.stdout
|
|
21
|
+
const mockWrite = vi.fn();
|
|
22
|
+
const mockClearLine = vi.fn();
|
|
23
|
+
const mockCursorTo = vi.fn();
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
vi.clearAllMocks();
|
|
26
|
+
process.stdout.write = mockWrite;
|
|
27
|
+
process.stdout.clearLine = mockClearLine;
|
|
28
|
+
process.stdout.cursorTo = mockCursorTo;
|
|
29
|
+
});
|
|
30
|
+
afterEach(() => {
|
|
31
|
+
vi.restoreAllMocks();
|
|
32
|
+
});
|
|
33
|
+
describe("Effect Registry", () => {
|
|
34
|
+
it("should register and retrieve effects", () => {
|
|
35
|
+
const burnEffect = getEffect("burn");
|
|
36
|
+
expect(burnEffect).toBeInstanceOf(BurnEffect);
|
|
37
|
+
const beamsEffect = getEffect("beams");
|
|
38
|
+
expect(beamsEffect).toBeInstanceOf(BeamsEffect);
|
|
39
|
+
});
|
|
40
|
+
it("should return null for non-existent effects", () => {
|
|
41
|
+
const effect = getEffect("nonexistent");
|
|
42
|
+
expect(effect).toBeNull();
|
|
43
|
+
});
|
|
44
|
+
it("should list all available effects", () => {
|
|
45
|
+
const effects = getAllEffects();
|
|
46
|
+
expect(effects).toHaveLength(3);
|
|
47
|
+
expect(effects.map((e) => e.name)).toContain("burn");
|
|
48
|
+
expect(effects.map((e) => e.name)).toContain("beams");
|
|
49
|
+
expect(effects.map((e) => e.name)).toContain("binarypath");
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe("BurnEffect", () => {
|
|
53
|
+
let effect;
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
effect = new BurnEffect();
|
|
56
|
+
});
|
|
57
|
+
it("should initialize properly", () => {
|
|
58
|
+
const text = "Test Text";
|
|
59
|
+
effect.initialize(text, { frameRate: 30 });
|
|
60
|
+
expect(effect.name).toBe("Burn");
|
|
61
|
+
expect(effect.description).toBe("Characters are ignited and burn up the screen");
|
|
62
|
+
});
|
|
63
|
+
it("should render frames", async () => {
|
|
64
|
+
const text = "Hello";
|
|
65
|
+
effect.initialize(text, { frameRate: 30 });
|
|
66
|
+
const frame = await effect.render();
|
|
67
|
+
expect(frame).toBeInstanceOf(Array);
|
|
68
|
+
expect(frame.length).toBeGreaterThan(0);
|
|
69
|
+
});
|
|
70
|
+
it("should provide fallback rendering", () => {
|
|
71
|
+
const text = "Hello\nWorld";
|
|
72
|
+
effect.initialize(text, {});
|
|
73
|
+
const fallback = effect.renderFallback();
|
|
74
|
+
expect(fallback).toEqual(["Hello", "World"]);
|
|
75
|
+
});
|
|
76
|
+
it("should complete after animation", async () => {
|
|
77
|
+
const text = "Test";
|
|
78
|
+
effect.initialize(text, { frameRate: 120 }); // High framerate for faster test
|
|
79
|
+
expect(effect.isComplete()).toBe(false);
|
|
80
|
+
// Render multiple frames
|
|
81
|
+
for (let i = 0; i < 100 && !effect.isComplete(); i++) {
|
|
82
|
+
await effect.render();
|
|
83
|
+
}
|
|
84
|
+
// Should eventually complete
|
|
85
|
+
expect(effect.isComplete()).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe("SafeEffectExecutor", () => {
|
|
89
|
+
let executor;
|
|
90
|
+
beforeEach(() => {
|
|
91
|
+
executor = new SafeEffectExecutor({
|
|
92
|
+
maxExecutionTime: 1000,
|
|
93
|
+
maxMemoryUsage: 50,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
it("should execute effects successfully", async () => {
|
|
97
|
+
const effect = new BurnEffect();
|
|
98
|
+
const result = await executor.execute(effect, "Test", {});
|
|
99
|
+
expect(result.success).toBe(true);
|
|
100
|
+
expect(result.frames).toBeInstanceOf(Array);
|
|
101
|
+
});
|
|
102
|
+
it("should timeout long-running effects", async () => {
|
|
103
|
+
const effect = new BurnEffect();
|
|
104
|
+
executor = new SafeEffectExecutor({ maxExecutionTime: 10 }); // Very short timeout
|
|
105
|
+
const result = await executor.execute(effect, "A".repeat(1000), {});
|
|
106
|
+
// Should fallback on timeout
|
|
107
|
+
expect(result.success).toBe(true);
|
|
108
|
+
expect(result.error).toBeDefined();
|
|
109
|
+
});
|
|
110
|
+
it("should use fallback in non-interactive environments", async () => {
|
|
111
|
+
const utils = await import("../utils.js");
|
|
112
|
+
vi.mocked(utils.detectTerminalCapabilities).mockReturnValueOnce({
|
|
113
|
+
supportsColor: false,
|
|
114
|
+
supports256Color: false,
|
|
115
|
+
supportsTrueColor: false,
|
|
116
|
+
dimensions: { width: 80, height: 24 },
|
|
117
|
+
isInteractive: false,
|
|
118
|
+
});
|
|
119
|
+
executor = new SafeEffectExecutor();
|
|
120
|
+
const effect = new BurnEffect();
|
|
121
|
+
const result = await executor.execute(effect, "Test", {});
|
|
122
|
+
expect(result.success).toBe(true);
|
|
123
|
+
expect(result.frames).toEqual(["Test"]);
|
|
124
|
+
});
|
|
125
|
+
it("should handle effect errors gracefully", async () => {
|
|
126
|
+
const effect = new BurnEffect();
|
|
127
|
+
// Force an error by not initializing
|
|
128
|
+
const result = await executor.execute(effect, "", {});
|
|
129
|
+
expect(result.frames).toBeInstanceOf(Array);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe("CLI Effects Integration", () => {
|
|
133
|
+
beforeEach(() => {
|
|
134
|
+
// Mock console.log
|
|
135
|
+
vi.spyOn(console, "log").mockImplementation(() => { });
|
|
136
|
+
});
|
|
137
|
+
afterEach(() => {
|
|
138
|
+
vi.restoreAllMocks();
|
|
139
|
+
});
|
|
140
|
+
it("should show effects for triggers", async () => {
|
|
141
|
+
await cliEffects.showEffect(EffectTrigger.PRIVATE_KEY_DELETE, "Deleting key...");
|
|
142
|
+
// Should have attempted to show effect
|
|
143
|
+
expect(mockWrite).toHaveBeenCalled();
|
|
144
|
+
});
|
|
145
|
+
it("should fallback to console.log when effects disabled", async () => {
|
|
146
|
+
process.env.KYA_EFFECTS_ENABLED = "false";
|
|
147
|
+
await cliEffects.showEffect(EffectTrigger.AGENT_IDENTITY_CREATE, "Creating identity...");
|
|
148
|
+
expect(console.log).toHaveBeenCalledWith("Creating identity...");
|
|
149
|
+
delete process.env.KYA_EFFECTS_ENABLED;
|
|
150
|
+
});
|
|
151
|
+
it("should handle custom effects", async () => {
|
|
152
|
+
await cliEffects.showCustomEffect("burn", "Custom text");
|
|
153
|
+
expect(mockWrite).toHaveBeenCalled();
|
|
154
|
+
});
|
|
155
|
+
it("should handle loading effects with promises", async () => {
|
|
156
|
+
const promise = new Promise((resolve) => {
|
|
157
|
+
setTimeout(() => resolve("Done"), 100);
|
|
158
|
+
});
|
|
159
|
+
const result = await cliEffects.showLoadingEffect("Loading...", promise);
|
|
160
|
+
expect(result).toBe("Done");
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe("Effect Performance", () => {
|
|
164
|
+
it("should maintain reasonable frame rates", async () => {
|
|
165
|
+
const effect = new BeamsEffect();
|
|
166
|
+
const text = "Performance Test";
|
|
167
|
+
effect.initialize(text, { frameRate: 30 });
|
|
168
|
+
const startTime = Date.now();
|
|
169
|
+
let frameCount = 0;
|
|
170
|
+
// Render for 100ms
|
|
171
|
+
while (Date.now() - startTime < 100 && !effect.isComplete()) {
|
|
172
|
+
await effect.render();
|
|
173
|
+
frameCount++;
|
|
174
|
+
}
|
|
175
|
+
// Should render at least a few frames in 100ms
|
|
176
|
+
expect(frameCount).toBeGreaterThan(2);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
describe("Memory Safety", () => {
|
|
180
|
+
it("should clean up resources properly", async () => {
|
|
181
|
+
const effect = new BurnEffect();
|
|
182
|
+
effect.initialize("Test", {});
|
|
183
|
+
// Render some frames
|
|
184
|
+
for (let i = 0; i < 10; i++) {
|
|
185
|
+
await effect.render();
|
|
186
|
+
}
|
|
187
|
+
// Cleanup
|
|
188
|
+
effect.cleanup();
|
|
189
|
+
// Should be able to reinitialize
|
|
190
|
+
effect.initialize("Test Again", {});
|
|
191
|
+
const frame = await effect.render();
|
|
192
|
+
expect(frame).toBeInstanceOf(Array);
|
|
193
|
+
});
|
|
194
|
+
it("should reset state correctly", () => {
|
|
195
|
+
const effect = new BeamsEffect();
|
|
196
|
+
effect.initialize("Test", {});
|
|
197
|
+
// Render some frames
|
|
198
|
+
effect.render();
|
|
199
|
+
effect.render();
|
|
200
|
+
// Reset
|
|
201
|
+
effect.reset();
|
|
202
|
+
// Should be back to initial state
|
|
203
|
+
expect(effect.isComplete()).toBe(false);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=effects.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.test.js","sourceRoot":"","sources":["../../../src/effects/__tests__/effects.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scene-Based Animation Engine for Terminal Effects
|
|
3
|
+
* Provides sophisticated animation capabilities with scenes, frames, and events
|
|
4
|
+
*/
|
|
5
|
+
import { CharacterVisual, ColorPair, Color, EasingFunction } from "./types.js";
|
|
6
|
+
import { Gradient, GradientDirection } from "./gradient.js";
|
|
7
|
+
/**
|
|
8
|
+
* Single frame in an animation scene
|
|
9
|
+
*/
|
|
10
|
+
export interface AnimationFrame {
|
|
11
|
+
/** Symbol to display */
|
|
12
|
+
symbol: string;
|
|
13
|
+
/** Frame duration in milliseconds */
|
|
14
|
+
duration: number;
|
|
15
|
+
/** Colors for this frame */
|
|
16
|
+
colors?: ColorPair;
|
|
17
|
+
/** Text effects (bold, italic, etc.) */
|
|
18
|
+
textEffects?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Sync metric for scene timing
|
|
22
|
+
*/
|
|
23
|
+
export declare enum SyncMetric {
|
|
24
|
+
/** Sync to time */
|
|
25
|
+
TIME = "time",
|
|
26
|
+
/** Sync to motion distance */
|
|
27
|
+
DISTANCE = "distance",
|
|
28
|
+
/** Sync to motion steps */
|
|
29
|
+
STEP = "step"
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Animation scene - a sequence of frames
|
|
33
|
+
*/
|
|
34
|
+
export declare class Scene {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
private frames;
|
|
37
|
+
private currentFrameIndex;
|
|
38
|
+
private frameStartTime;
|
|
39
|
+
private _isLooping;
|
|
40
|
+
private _isComplete;
|
|
41
|
+
/** Sync metric for timing */
|
|
42
|
+
syncMetric: SyncMetric;
|
|
43
|
+
/** Easing function for frame transitions */
|
|
44
|
+
easingFn?: EasingFunction;
|
|
45
|
+
constructor(id: string);
|
|
46
|
+
/**
|
|
47
|
+
* Add a frame to the scene
|
|
48
|
+
*/
|
|
49
|
+
addFrame(symbol: string, duration: number, colors?: ColorPair): void;
|
|
50
|
+
/**
|
|
51
|
+
* Apply gradient to symbols across multiple frames
|
|
52
|
+
*/
|
|
53
|
+
applyGradientToSymbols(symbol: string, duration: number, gradient: Gradient, _direction?: GradientDirection): void;
|
|
54
|
+
/**
|
|
55
|
+
* Set looping behavior
|
|
56
|
+
*/
|
|
57
|
+
setLooping(isLooping: boolean): void;
|
|
58
|
+
/**
|
|
59
|
+
* Get current frame based on elapsed time
|
|
60
|
+
*/
|
|
61
|
+
getCurrentFrame(elapsedTime: number): AnimationFrame | null;
|
|
62
|
+
/**
|
|
63
|
+
* Reset the scene
|
|
64
|
+
*/
|
|
65
|
+
reset(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if scene is complete
|
|
68
|
+
*/
|
|
69
|
+
isComplete(): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Get total duration of the scene
|
|
72
|
+
*/
|
|
73
|
+
getTotalDuration(): number;
|
|
74
|
+
/**
|
|
75
|
+
* Get frame count
|
|
76
|
+
*/
|
|
77
|
+
getFrameCount(): number;
|
|
78
|
+
/**
|
|
79
|
+
* Get current frame index
|
|
80
|
+
*/
|
|
81
|
+
getCurrentFrameIndex(): number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Event types for character animation
|
|
85
|
+
*/
|
|
86
|
+
export declare enum AnimationEvent {
|
|
87
|
+
SCENE_COMPLETE = "scene_complete",
|
|
88
|
+
SCENE_ACTIVATED = "scene_activated",
|
|
89
|
+
FRAME_CHANGE = "frame_change"
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Event handler for animation events
|
|
93
|
+
*/
|
|
94
|
+
export interface AnimationEventHandler {
|
|
95
|
+
event: AnimationEvent;
|
|
96
|
+
sceneId?: string;
|
|
97
|
+
callback: () => void;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Character animation manager
|
|
101
|
+
*/
|
|
102
|
+
export declare class CharacterAnimation {
|
|
103
|
+
private scenes;
|
|
104
|
+
private activeScene;
|
|
105
|
+
private sceneStartTime;
|
|
106
|
+
private eventHandlers;
|
|
107
|
+
/** Original character colors */
|
|
108
|
+
inputFgColor?: Color;
|
|
109
|
+
inputBgColor?: Color;
|
|
110
|
+
constructor(inputColors?: {
|
|
111
|
+
fg?: Color;
|
|
112
|
+
bg?: Color;
|
|
113
|
+
});
|
|
114
|
+
/**
|
|
115
|
+
* Create a new scene
|
|
116
|
+
*/
|
|
117
|
+
newScene(sceneId: string): Scene;
|
|
118
|
+
/**
|
|
119
|
+
* Get a scene by ID
|
|
120
|
+
*/
|
|
121
|
+
queryScene(sceneId: string): Scene | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* Activate a scene
|
|
124
|
+
*/
|
|
125
|
+
activateScene(scene: Scene): void;
|
|
126
|
+
/**
|
|
127
|
+
* Update animation and get current visual
|
|
128
|
+
*/
|
|
129
|
+
update(): CharacterVisual | null;
|
|
130
|
+
/**
|
|
131
|
+
* Register an event handler
|
|
132
|
+
*/
|
|
133
|
+
registerEvent(event: AnimationEvent, sceneId: string, callback: () => void): void;
|
|
134
|
+
/**
|
|
135
|
+
* Trigger an event
|
|
136
|
+
*/
|
|
137
|
+
private triggerEvent;
|
|
138
|
+
/**
|
|
139
|
+
* Reset all scenes
|
|
140
|
+
*/
|
|
141
|
+
reset(): void;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Enhanced character with animation capabilities
|
|
145
|
+
*/
|
|
146
|
+
export declare class AnimatedCharacter {
|
|
147
|
+
readonly id: string;
|
|
148
|
+
readonly originalSymbol: string;
|
|
149
|
+
readonly animation: CharacterAnimation;
|
|
150
|
+
/** Current visual state */
|
|
151
|
+
visual: CharacterVisual;
|
|
152
|
+
/** Layer for z-ordering (higher = on top) */
|
|
153
|
+
layer: number;
|
|
154
|
+
/** Visibility flag */
|
|
155
|
+
isVisible: boolean;
|
|
156
|
+
constructor(id: string, symbol: string, inputColors?: {
|
|
157
|
+
fg?: Color;
|
|
158
|
+
bg?: Color;
|
|
159
|
+
});
|
|
160
|
+
/**
|
|
161
|
+
* Update character animation
|
|
162
|
+
*/
|
|
163
|
+
update(): void;
|
|
164
|
+
/**
|
|
165
|
+
* Set character layer
|
|
166
|
+
*/
|
|
167
|
+
setLayer(layer: number): void;
|
|
168
|
+
/**
|
|
169
|
+
* Set visibility
|
|
170
|
+
*/
|
|
171
|
+
setVisibility(isVisible: boolean): void;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=animation-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-engine.d.ts","sourceRoot":"","sources":["../../src/effects/animation-engine.ts"],"names":[],"mappings":"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"}
|