workos 0.0.24 → 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.
- package/.claude-plugin/plugin.json +13 -0
- package/LICENSE +47 -0
- package/README.md +154 -1
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +163 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.config.d.ts +52 -0
- package/dist/cli.config.js +70 -0
- package/dist/cli.config.js.map +1 -0
- package/dist/package.json +87 -0
- package/dist/src/commands/install-skill.d.ts +20 -0
- package/dist/src/commands/install-skill.js +130 -0
- package/dist/src/commands/install-skill.js.map +1 -0
- package/dist/src/commands/install.d.ts +22 -0
- package/dist/src/commands/install.js +57 -0
- package/dist/src/commands/install.js.map +1 -0
- package/dist/src/commands/login.d.ts +1 -0
- package/dist/src/commands/login.js +141 -0
- package/dist/src/commands/login.js.map +1 -0
- package/dist/src/commands/logout.d.ts +1 -0
- package/dist/src/commands/logout.js +17 -0
- package/dist/src/commands/logout.js.map +1 -0
- package/dist/src/dashboard/components/AnimatedLogo.d.ts +8 -0
- package/dist/src/dashboard/components/AnimatedLogo.js +16 -0
- package/dist/src/dashboard/components/AnimatedLogo.js.map +1 -0
- package/dist/src/dashboard/components/CompletionView.d.ts +13 -0
- package/dist/src/dashboard/components/CompletionView.js +21 -0
- package/dist/src/dashboard/components/CompletionView.js.map +1 -0
- package/dist/src/dashboard/components/ConfirmPrompt.d.ts +9 -0
- package/dist/src/dashboard/components/ConfirmPrompt.js +25 -0
- package/dist/src/dashboard/components/ConfirmPrompt.js.map +1 -0
- package/dist/src/dashboard/components/CredentialsForm.d.ts +10 -0
- package/dist/src/dashboard/components/CredentialsForm.js +47 -0
- package/dist/src/dashboard/components/CredentialsForm.js.map +1 -0
- package/dist/src/dashboard/components/Dashboard.d.ts +3 -0
- package/dist/src/dashboard/components/Dashboard.js +100 -0
- package/dist/src/dashboard/components/Dashboard.js.map +1 -0
- package/dist/src/dashboard/components/DashboardLayout.d.ts +24 -0
- package/dist/src/dashboard/components/DashboardLayout.js +25 -0
- package/dist/src/dashboard/components/DashboardLayout.js.map +1 -0
- package/dist/src/dashboard/components/DiffPanel.d.ts +9 -0
- package/dist/src/dashboard/components/DiffPanel.js +136 -0
- package/dist/src/dashboard/components/DiffPanel.js.map +1 -0
- package/dist/src/dashboard/components/InlinePrompt.d.ts +8 -0
- package/dist/src/dashboard/components/InlinePrompt.js +19 -0
- package/dist/src/dashboard/components/InlinePrompt.js.map +1 -0
- package/dist/src/dashboard/components/OutputPanel.d.ts +10 -0
- package/dist/src/dashboard/components/OutputPanel.js +100 -0
- package/dist/src/dashboard/components/OutputPanel.js.map +1 -0
- package/dist/src/dashboard/components/Panel.d.ts +12 -0
- package/dist/src/dashboard/components/Panel.js +6 -0
- package/dist/src/dashboard/components/Panel.js.map +1 -0
- package/dist/src/dashboard/components/TextInput.d.ts +13 -0
- package/dist/src/dashboard/components/TextInput.js +57 -0
- package/dist/src/dashboard/components/TextInput.js.map +1 -0
- package/dist/src/dashboard/components/WelcomeArt.d.ts +2 -0
- package/dist/src/dashboard/components/WelcomeArt.js +9 -0
- package/dist/src/dashboard/components/WelcomeArt.js.map +1 -0
- package/dist/src/dashboard/hooks/useAnimation.d.ts +7 -0
- package/dist/src/dashboard/hooks/useAnimation.js +24 -0
- package/dist/src/dashboard/hooks/useAnimation.js.map +1 -0
- package/dist/src/dashboard/hooks/useKeyboard.d.ts +8 -0
- package/dist/src/dashboard/hooks/useKeyboard.js +18 -0
- package/dist/src/dashboard/hooks/useKeyboard.js.map +1 -0
- package/dist/src/dashboard/hooks/useTerminalSize.d.ts +8 -0
- package/dist/src/dashboard/hooks/useTerminalSize.js +23 -0
- package/dist/src/dashboard/hooks/useTerminalSize.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +6 -0
- package/dist/src/dashboard/index.js +36 -0
- package/dist/src/dashboard/index.js.map +1 -0
- package/dist/src/dashboard/lib/diff-utils.d.ts +21 -0
- package/dist/src/dashboard/lib/diff-utils.js +271 -0
- package/dist/src/dashboard/lib/diff-utils.js.map +1 -0
- package/dist/src/dashboard/lib/logo-frames.d.ts +20 -0
- package/dist/src/dashboard/lib/logo-frames.js +109 -0
- package/dist/src/dashboard/lib/logo-frames.js.map +1 -0
- package/dist/src/dashboard/lib/welcome-art.d.ts +1 -0
- package/dist/src/dashboard/lib/welcome-art.js +5 -0
- package/dist/src/dashboard/lib/welcome-art.js.map +1 -0
- package/dist/src/dashboard/types.d.ts +5 -0
- package/dist/src/dashboard/types.js +2 -0
- package/dist/src/dashboard/types.js.map +1 -0
- package/dist/src/lib/__tests__/test-utils.d.ts +40 -0
- package/dist/src/lib/__tests__/test-utils.js +108 -0
- package/dist/src/lib/__tests__/test-utils.js.map +1 -0
- package/dist/src/lib/adapters/cli-adapter.d.ts +56 -0
- package/dist/src/lib/adapters/cli-adapter.js +318 -0
- package/dist/src/lib/adapters/cli-adapter.js.map +1 -0
- package/dist/src/lib/adapters/dashboard-adapter.d.ts +30 -0
- package/dist/src/lib/adapters/dashboard-adapter.js +97 -0
- package/dist/src/lib/adapters/dashboard-adapter.js.map +1 -0
- package/dist/src/lib/adapters/index.d.ts +3 -0
- package/dist/src/lib/adapters/index.js +3 -0
- package/dist/src/lib/adapters/index.js.map +1 -0
- package/dist/src/lib/adapters/types.d.ts +41 -0
- package/dist/src/lib/adapters/types.js +2 -0
- package/dist/src/lib/adapters/types.js.map +1 -0
- package/dist/src/lib/agent-interface.d.ts +75 -0
- package/dist/src/lib/agent-interface.js +563 -0
- package/dist/src/lib/agent-interface.js.map +1 -0
- package/dist/src/lib/agent-runner.d.ts +9 -0
- package/dist/src/lib/agent-runner.js +213 -0
- package/dist/src/lib/agent-runner.js.map +1 -0
- package/dist/src/lib/api.d.ts +25 -0
- package/dist/src/lib/api.js +120 -0
- package/dist/src/lib/api.js.map +1 -0
- package/dist/src/lib/config.d.ts +60 -0
- package/dist/src/lib/config.js +88 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/constants.d.ts +32 -0
- package/dist/src/lib/constants.js +53 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/credentials.d.ts +19 -0
- package/dist/src/lib/credentials.js +55 -0
- package/dist/src/lib/credentials.js.map +1 -0
- package/dist/src/lib/env-writer.d.ts +14 -0
- package/dist/src/lib/env-writer.js +39 -0
- package/dist/src/lib/env-writer.js.map +1 -0
- package/dist/src/lib/events.d.ts +114 -0
- package/dist/src/lib/events.js +19 -0
- package/dist/src/lib/events.js.map +1 -0
- package/dist/src/lib/framework-config.d.ts +108 -0
- package/dist/src/lib/framework-config.js +11 -0
- package/dist/src/lib/framework-config.js.map +1 -0
- package/dist/src/lib/helper-functions.d.ts +1 -0
- package/dist/src/lib/helper-functions.js +2 -0
- package/dist/src/lib/helper-functions.js.map +1 -0
- package/dist/src/lib/port-detection.d.ts +7 -0
- package/dist/src/lib/port-detection.js +112 -0
- package/dist/src/lib/port-detection.js.map +1 -0
- package/dist/src/lib/progress-tracker.d.ts +22 -0
- package/dist/src/lib/progress-tracker.js +47 -0
- package/dist/src/lib/progress-tracker.js.map +1 -0
- package/dist/src/lib/run-with-core.d.ts +2 -0
- package/dist/src/lib/run-with-core.js +266 -0
- package/dist/src/lib/run-with-core.js.map +1 -0
- package/dist/src/lib/safe-tools.d.ts +2 -0
- package/dist/src/lib/safe-tools.js +212 -0
- package/dist/src/lib/safe-tools.js.map +1 -0
- package/dist/src/lib/settings.d.ts +59 -0
- package/dist/src/lib/settings.js +36 -0
- package/dist/src/lib/settings.js.map +1 -0
- package/dist/src/lib/token-refresh.d.ts +12 -0
- package/dist/src/lib/token-refresh.js +26 -0
- package/dist/src/lib/token-refresh.js.map +1 -0
- package/dist/src/lib/validation/build-validator.d.ts +9 -0
- package/dist/src/lib/validation/build-validator.js +118 -0
- package/dist/src/lib/validation/build-validator.js.map +1 -0
- package/dist/src/lib/validation/index.d.ts +3 -0
- package/dist/src/lib/validation/index.js +3 -0
- package/dist/src/lib/validation/index.js.map +1 -0
- package/dist/src/lib/validation/types.d.ts +41 -0
- package/dist/src/lib/validation/types.js +2 -0
- package/dist/src/lib/validation/types.js.map +1 -0
- package/dist/src/lib/validation/validator.d.ts +6 -0
- package/dist/src/lib/validation/validator.js +647 -0
- package/dist/src/lib/validation/validator.js.map +1 -0
- package/dist/src/lib/wizard-core.d.ts +200 -0
- package/dist/src/lib/wizard-core.js +392 -0
- package/dist/src/lib/wizard-core.js.map +1 -0
- package/dist/src/lib/wizard-core.types.d.ts +73 -0
- package/dist/src/lib/wizard-core.types.js +2 -0
- package/dist/src/lib/wizard-core.types.js.map +1 -0
- package/dist/src/lib/workos-management.d.ts +32 -0
- package/dist/src/lib/workos-management.js +142 -0
- package/dist/src/lib/workos-management.js.map +1 -0
- package/dist/src/nextjs/nextjs-wizard-agent.d.ts +6 -0
- package/dist/src/nextjs/nextjs-wizard-agent.js +97 -0
- package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -0
- package/dist/src/nextjs/utils.d.ts +8 -0
- package/dist/src/nextjs/utils.js +53 -0
- package/dist/src/nextjs/utils.js.map +1 -0
- package/dist/src/react/react-wizard-agent.d.ts +2 -0
- package/dist/src/react/react-wizard-agent.js +47 -0
- package/dist/src/react/react-wizard-agent.js.map +1 -0
- package/dist/src/react-router/react-router-wizard-agent.d.ts +6 -0
- package/dist/src/react-router/react-router-wizard-agent.js +103 -0
- package/dist/src/react-router/react-router-wizard-agent.js.map +1 -0
- package/dist/src/react-router/utils.d.ts +19 -0
- package/dist/src/react-router/utils.js +210 -0
- package/dist/src/react-router/utils.js.map +1 -0
- package/dist/src/run.d.ts +24 -0
- package/dist/src/run.js +48 -0
- package/dist/src/run.js.map +1 -0
- package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
- package/dist/src/steps/add-or-update-environment-variables.js +155 -0
- package/dist/src/steps/add-or-update-environment-variables.js.map +1 -0
- package/dist/src/steps/index.d.ts +3 -0
- package/dist/src/steps/index.js +4 -0
- package/dist/src/steps/index.js.map +1 -0
- package/dist/src/steps/run-prettier.d.ts +5 -0
- package/dist/src/steps/run-prettier.js +54 -0
- package/dist/src/steps/run-prettier.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +8 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +7 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
- package/dist/src/steps/upload-environment-variables/index.js +57 -0
- package/dist/src/steps/upload-environment-variables/index.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +14 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js +104 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +2 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js +49 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
- package/dist/src/telemetry.d.ts +2 -0
- package/dist/src/telemetry.js +29 -0
- package/dist/src/telemetry.js.map +1 -0
- package/dist/src/utils/analytics.d.ts +24 -0
- package/dist/src/utils/analytics.js +139 -0
- package/dist/src/utils/analytics.js.map +1 -0
- package/dist/src/utils/bash.d.ts +2 -0
- package/dist/src/utils/bash.js +17 -0
- package/dist/src/utils/bash.js.map +1 -0
- package/dist/src/utils/clack-utils.d.ts +93 -0
- package/dist/src/utils/clack-utils.js +397 -0
- package/dist/src/utils/clack-utils.js.map +1 -0
- package/dist/src/utils/clack.d.ts +5 -0
- package/dist/src/utils/clack.js +34 -0
- package/dist/src/utils/clack.js.map +1 -0
- package/dist/src/utils/cli-symbols.d.ts +32 -0
- package/dist/src/utils/cli-symbols.js +46 -0
- package/dist/src/utils/cli-symbols.js.map +1 -0
- package/dist/src/utils/debug.d.ts +7 -0
- package/dist/src/utils/debug.js +88 -0
- package/dist/src/utils/debug.js.map +1 -0
- package/dist/src/utils/env-parser.d.ts +5 -0
- package/dist/src/utils/env-parser.js +18 -0
- package/dist/src/utils/env-parser.js.map +1 -0
- package/dist/src/utils/environment.d.ts +4 -0
- package/dist/src/utils/environment.js +69 -0
- package/dist/src/utils/environment.js.map +1 -0
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +7 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/logging.d.ts +9 -0
- package/dist/src/utils/logging.js +36 -0
- package/dist/src/utils/logging.js.map +1 -0
- package/dist/src/utils/package-json.d.ts +25 -0
- package/dist/src/utils/package-json.js +21 -0
- package/dist/src/utils/package-json.js.map +1 -0
- package/dist/src/utils/package-manager.d.ts +21 -0
- package/dist/src/utils/package-manager.js +167 -0
- package/dist/src/utils/package-manager.js.map +1 -0
- package/dist/src/utils/redact.d.ts +5 -0
- package/dist/src/utils/redact.js +29 -0
- package/dist/src/utils/redact.js.map +1 -0
- package/dist/src/utils/semver.d.ts +10 -0
- package/dist/src/utils/semver.js +43 -0
- package/dist/src/utils/semver.js.map +1 -0
- package/dist/src/utils/string.d.ts +1 -0
- package/dist/src/utils/string.js +6 -0
- package/dist/src/utils/string.js.map +1 -0
- package/dist/src/utils/telemetry-client.d.ts +15 -0
- package/dist/src/utils/telemetry-client.js +57 -0
- package/dist/src/utils/telemetry-client.js.map +1 -0
- package/dist/src/utils/telemetry-types.d.ts +51 -0
- package/dist/src/utils/telemetry-types.js +6 -0
- package/dist/src/utils/telemetry-types.js.map +1 -0
- package/dist/src/utils/types.d.ts +80 -0
- package/dist/src/utils/types.js +2 -0
- package/dist/src/utils/types.js.map +1 -0
- package/dist/src/utils/urls.d.ts +7 -0
- package/dist/src/utils/urls.js +8 -0
- package/dist/src/utils/urls.js.map +1 -0
- package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
- package/dist/src/utils/vendor/is-unicorn-supported.js +21 -0
- package/dist/src/utils/vendor/is-unicorn-supported.js.map +1 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +2 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.js +47 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +1 -0
- package/package.json +76 -84
- package/skills/workos-authkit-base/SKILL.md +113 -0
- package/skills/workos-authkit-nextjs/SKILL.md +115 -0
- package/skills/workos-authkit-react/SKILL.md +91 -0
- package/skills/workos-authkit-react-router/SKILL.md +106 -0
- package/skills/workos-authkit-tanstack-start/SKILL.md +104 -0
- package/skills/workos-authkit-vanilla-js/SKILL.md +81 -0
- package/build/apps/index.js +0 -50
- package/build/apps/slack.js +0 -151
- package/build/cli.js +0 -42
- package/build/config.js +0 -34
- package/build/dev.js +0 -5
- package/build/enable-api-access.png +0 -0
- package/build/groups.js +0 -480
- package/build/index.js +0 -3
- package/build/info.js +0 -69
- package/build/login.js +0 -161
- package/build/main.js +0 -214
- package/build/users.js +0 -402
- package/build/util.js +0 -157
- package/coverage/clover.xml +0 -66
- package/coverage/coverage-final.json +0 -4
- package/coverage/lcov-report/base.css +0 -212
- package/coverage/lcov-report/cli.ts.html +0 -329
- package/coverage/lcov-report/config.ts.html +0 -152
- package/coverage/lcov-report/index.html +0 -119
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -1
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -158
- package/coverage/lcov-report/util.ts.html +0 -350
- package/coverage/lcov.info +0 -121
- package/package-lock.json +0 -7617
- package/tests/util.test.ts +0 -35
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Scaled-down WorkOS logo frames for animation
|
|
2
|
+
// Original is 20 lines tall; this is ~10 lines for panel fit
|
|
3
|
+
const LOGO_SMALL = [
|
|
4
|
+
' *+++++++*++++* ',
|
|
5
|
+
' *++++++++*++++++ ',
|
|
6
|
+
' *+++++* *+++++* ',
|
|
7
|
+
' *+++++* *+++++* ',
|
|
8
|
+
' *++++* *++++* ',
|
|
9
|
+
' *+++++* *+++++* ',
|
|
10
|
+
' *+++++* *+++++* ',
|
|
11
|
+
' *++++++**++++++* ',
|
|
12
|
+
' *++++*++*++++* ',
|
|
13
|
+
];
|
|
14
|
+
// Purple gradient colors (256 color mode)
|
|
15
|
+
export const COLORS = {
|
|
16
|
+
brightest: '38;5;225', // light lavender
|
|
17
|
+
bright: '38;5;183', // lavender
|
|
18
|
+
medium: '38;5;141', // medium purple
|
|
19
|
+
dark: '38;5;135', // purple
|
|
20
|
+
darker: '38;5;93', // deep purple
|
|
21
|
+
darkest: '38;5;54', // dark purple
|
|
22
|
+
};
|
|
23
|
+
// Pre-generate frames for spin animation
|
|
24
|
+
export function generateSpinFrames() {
|
|
25
|
+
const NUM_FRAMES = 32;
|
|
26
|
+
const frames = [];
|
|
27
|
+
for (let f = 0; f < NUM_FRAMES; f++) {
|
|
28
|
+
const angle = (f / NUM_FRAMES) * 2 * Math.PI;
|
|
29
|
+
const cosA = Math.cos(angle);
|
|
30
|
+
const absCos = Math.abs(cosA);
|
|
31
|
+
// Color based on facing angle
|
|
32
|
+
let color;
|
|
33
|
+
if (absCos > 0.9)
|
|
34
|
+
color = COLORS.brightest;
|
|
35
|
+
else if (absCos > 0.7)
|
|
36
|
+
color = COLORS.bright;
|
|
37
|
+
else if (absCos > 0.5)
|
|
38
|
+
color = COLORS.medium;
|
|
39
|
+
else if (absCos > 0.3)
|
|
40
|
+
color = COLORS.dark;
|
|
41
|
+
else if (absCos > 0.15)
|
|
42
|
+
color = COLORS.darker;
|
|
43
|
+
else
|
|
44
|
+
color = COLORS.darkest;
|
|
45
|
+
// Project characters
|
|
46
|
+
const projectedLines = LOGO_SMALL.map((line) => {
|
|
47
|
+
const centerX = line.length / 2;
|
|
48
|
+
const outChars = new Array(line.length).fill(' ');
|
|
49
|
+
for (let col = 0; col < line.length; col++) {
|
|
50
|
+
const ch = line[col];
|
|
51
|
+
if (ch === ' ')
|
|
52
|
+
continue;
|
|
53
|
+
const x = col - centerX;
|
|
54
|
+
const newX = x * cosA;
|
|
55
|
+
const screenX = Math.round(centerX + newX);
|
|
56
|
+
if (screenX >= 0 && screenX < line.length) {
|
|
57
|
+
outChars[screenX] = ch;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return outChars.join('');
|
|
61
|
+
});
|
|
62
|
+
frames.push({ lines: projectedLines, color });
|
|
63
|
+
}
|
|
64
|
+
return frames;
|
|
65
|
+
}
|
|
66
|
+
// Pre-generate frames for pulse animation
|
|
67
|
+
export function generatePulseFrames() {
|
|
68
|
+
const NUM_FRAMES = 24;
|
|
69
|
+
const frames = [];
|
|
70
|
+
for (let f = 0; f < NUM_FRAMES; f++) {
|
|
71
|
+
const angle = (f / NUM_FRAMES) * 2 * Math.PI;
|
|
72
|
+
const brightness = (Math.cos(angle) + 1) / 2; // 0 to 1
|
|
73
|
+
let color;
|
|
74
|
+
if (brightness > 0.85)
|
|
75
|
+
color = COLORS.brightest;
|
|
76
|
+
else if (brightness > 0.7)
|
|
77
|
+
color = COLORS.bright;
|
|
78
|
+
else if (brightness > 0.5)
|
|
79
|
+
color = COLORS.medium;
|
|
80
|
+
else if (brightness > 0.35)
|
|
81
|
+
color = COLORS.dark;
|
|
82
|
+
else if (brightness > 0.2)
|
|
83
|
+
color = COLORS.darker;
|
|
84
|
+
else
|
|
85
|
+
color = COLORS.darkest;
|
|
86
|
+
frames.push({ lines: [...LOGO_SMALL], color });
|
|
87
|
+
}
|
|
88
|
+
return frames;
|
|
89
|
+
}
|
|
90
|
+
// Cache frames on first use
|
|
91
|
+
let spinFramesCache = null;
|
|
92
|
+
let pulseFramesCache = null;
|
|
93
|
+
export function getFrames(mode) {
|
|
94
|
+
if (mode === 'spin') {
|
|
95
|
+
if (!spinFramesCache)
|
|
96
|
+
spinFramesCache = generateSpinFrames();
|
|
97
|
+
return spinFramesCache;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
if (!pulseFramesCache)
|
|
101
|
+
pulseFramesCache = generatePulseFrames();
|
|
102
|
+
return pulseFramesCache;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export const FRAME_DELAYS = {
|
|
106
|
+
spin: 55,
|
|
107
|
+
pulse: 80,
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=logo-frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo-frames.js","sourceRoot":"","sources":["../../../../src/dashboard/lib/logo-frames.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,6DAA6D;AAE7D,MAAM,UAAU,GAAG;IACjB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;CACzB,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,SAAS,EAAE,UAAU,EAAE,iBAAiB;IACxC,MAAM,EAAE,UAAU,EAAE,WAAW;IAC/B,MAAM,EAAE,UAAU,EAAE,gBAAgB;IACpC,IAAI,EAAE,UAAU,EAAE,SAAS;IAC3B,MAAM,EAAE,SAAS,EAAE,cAAc;IACjC,OAAO,EAAE,SAAS,EAAE,cAAc;CACnC,CAAC;AASF,yCAAyC;AACzC,MAAM,UAAU,kBAAkB;IAChC,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,8BAA8B;QAC9B,IAAI,KAAa,CAAC;QAClB,IAAI,MAAM,GAAG,GAAG;YAAE,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;aACtC,IAAI,MAAM,GAAG,GAAG;YAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;aACxC,IAAI,MAAM,GAAG,GAAG;YAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;aACxC,IAAI,MAAM,GAAG,GAAG;YAAE,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;aACtC,IAAI,MAAM,GAAG,IAAI;YAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;YACzC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QAE5B,qBAAqB;QACrB,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAElD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,EAAE,KAAK,GAAG;oBAAE,SAAS;gBAEzB,MAAM,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;gBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBAE3C,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC1C,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,mBAAmB;IACjC,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAEvD,IAAI,KAAa,CAAC;QAClB,IAAI,UAAU,GAAG,IAAI;YAAE,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;aAC3C,IAAI,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;aAC5C,IAAI,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;aAC5C,IAAI,UAAU,GAAG,IAAI;YAAE,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;aAC3C,IAAI,UAAU,GAAG,GAAG;YAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;;YAC5C,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QAE5B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4BAA4B;AAC5B,IAAI,eAAe,GAAuB,IAAI,CAAC;AAC/C,IAAI,gBAAgB,GAAuB,IAAI,CAAC;AAEhD,MAAM,UAAU,SAAS,CAAC,IAAmB;IAC3C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe;YAAE,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAC7D,OAAO,eAAe,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,gBAAgB;YAAE,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;QAChE,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACD,CAAC","sourcesContent":["// Scaled-down WorkOS logo frames for animation\n// Original is 20 lines tall; this is ~10 lines for panel fit\n\nconst LOGO_SMALL = [\n ' *+++++++*++++* ',\n ' *++++++++*++++++ ',\n ' *+++++* *+++++* ',\n ' *+++++* *+++++* ',\n ' *++++* *++++* ',\n ' *+++++* *+++++* ',\n ' *+++++* *+++++* ',\n ' *++++++**++++++* ',\n ' *++++*++*++++* ',\n];\n\n// Purple gradient colors (256 color mode)\nexport const COLORS = {\n brightest: '38;5;225', // light lavender\n bright: '38;5;183', // lavender\n medium: '38;5;141', // medium purple\n dark: '38;5;135', // purple\n darker: '38;5;93', // deep purple\n darkest: '38;5;54', // dark purple\n};\n\nexport type AnimationMode = 'spin' | 'pulse';\n\nexport interface LogoFrame {\n lines: string[];\n color: string;\n}\n\n// Pre-generate frames for spin animation\nexport function generateSpinFrames(): LogoFrame[] {\n const NUM_FRAMES = 32;\n const frames: LogoFrame[] = [];\n\n for (let f = 0; f < NUM_FRAMES; f++) {\n const angle = (f / NUM_FRAMES) * 2 * Math.PI;\n const cosA = Math.cos(angle);\n const absCos = Math.abs(cosA);\n\n // Color based on facing angle\n let color: string;\n if (absCos > 0.9) color = COLORS.brightest;\n else if (absCos > 0.7) color = COLORS.bright;\n else if (absCos > 0.5) color = COLORS.medium;\n else if (absCos > 0.3) color = COLORS.dark;\n else if (absCos > 0.15) color = COLORS.darker;\n else color = COLORS.darkest;\n\n // Project characters\n const projectedLines = LOGO_SMALL.map((line) => {\n const centerX = line.length / 2;\n const outChars = new Array(line.length).fill(' ');\n\n for (let col = 0; col < line.length; col++) {\n const ch = line[col];\n if (ch === ' ') continue;\n\n const x = col - centerX;\n const newX = x * cosA;\n const screenX = Math.round(centerX + newX);\n\n if (screenX >= 0 && screenX < line.length) {\n outChars[screenX] = ch;\n }\n }\n\n return outChars.join('');\n });\n\n frames.push({ lines: projectedLines, color });\n }\n\n return frames;\n}\n\n// Pre-generate frames for pulse animation\nexport function generatePulseFrames(): LogoFrame[] {\n const NUM_FRAMES = 24;\n const frames: LogoFrame[] = [];\n\n for (let f = 0; f < NUM_FRAMES; f++) {\n const angle = (f / NUM_FRAMES) * 2 * Math.PI;\n const brightness = (Math.cos(angle) + 1) / 2; // 0 to 1\n\n let color: string;\n if (brightness > 0.85) color = COLORS.brightest;\n else if (brightness > 0.7) color = COLORS.bright;\n else if (brightness > 0.5) color = COLORS.medium;\n else if (brightness > 0.35) color = COLORS.dark;\n else if (brightness > 0.2) color = COLORS.darker;\n else color = COLORS.darkest;\n\n frames.push({ lines: [...LOGO_SMALL], color });\n }\n\n return frames;\n}\n\n// Cache frames on first use\nlet spinFramesCache: LogoFrame[] | null = null;\nlet pulseFramesCache: LogoFrame[] | null = null;\n\nexport function getFrames(mode: AnimationMode): LogoFrame[] {\n if (mode === 'spin') {\n if (!spinFramesCache) spinFramesCache = generateSpinFrames();\n return spinFramesCache;\n } else {\n if (!pulseFramesCache) pulseFramesCache = generatePulseFrames();\n return pulseFramesCache;\n }\n}\n\nexport const FRAME_DELAYS = {\n spin: 55,\n pulse: 80,\n} as const;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getWelcomeArt(): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome-art.js","sourceRoot":"","sources":["../../../../src/dashboard/lib/welcome-art.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,CAAC","sourcesContent":["import { getConfig } from '../../lib/settings.js';\n\nexport function getWelcomeArt(): string {\n return getConfig().branding.asciiArt;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dashboard/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { WizardEventEmitter, WizardEvents } from '../lib/events.js';\n\nexport interface DashboardProps {\n emitter: WizardEventEmitter;\n}\n\n// Re-export for convenience\nexport type { WizardEvents, WizardEventEmitter };\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type WizardEventName, type WizardEvents } from '../events.js';
|
|
2
|
+
/**
|
|
3
|
+
* Captured event with type and payload.
|
|
4
|
+
*/
|
|
5
|
+
export interface CapturedEvent<K extends WizardEventName = WizardEventName> {
|
|
6
|
+
type: K;
|
|
7
|
+
payload: WizardEvents[K];
|
|
8
|
+
timestamp: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates an event capture utility for testing.
|
|
12
|
+
* Records all events emitted through the emitter.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createEventCapture(): {
|
|
15
|
+
/** The emitter to pass to machine/adapters */
|
|
16
|
+
emitter: import("../events.js").WizardEventEmitter;
|
|
17
|
+
/** Get all captured events */
|
|
18
|
+
getEvents: () => CapturedEvent<keyof WizardEvents>[];
|
|
19
|
+
/** Get just the event types in order */
|
|
20
|
+
getEventTypes: () => (keyof WizardEvents)[];
|
|
21
|
+
/** Get events of a specific type */
|
|
22
|
+
getEventsOfType: <K extends WizardEventName>(type: K) => CapturedEvent<K>[];
|
|
23
|
+
/** Clear captured events */
|
|
24
|
+
clear: () => void;
|
|
25
|
+
/** Get count of events */
|
|
26
|
+
count: () => number;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Compare two event type sequences for equality.
|
|
30
|
+
* Returns match result with diff info if different.
|
|
31
|
+
*/
|
|
32
|
+
export declare function compareEventSequences(seq1: WizardEventName[], seq2: WizardEventName[]): {
|
|
33
|
+
match: boolean;
|
|
34
|
+
diff?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Filter out non-deterministic events for comparison.
|
|
38
|
+
* Some events (like timestamps) shouldn't affect sequence equality.
|
|
39
|
+
*/
|
|
40
|
+
export declare function filterDeterministicEvents(events: WizardEventName[]): WizardEventName[];
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { createWizardEventEmitter } from '../events.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an event capture utility for testing.
|
|
4
|
+
* Records all events emitted through the emitter.
|
|
5
|
+
*/
|
|
6
|
+
export function createEventCapture() {
|
|
7
|
+
const emitter = createWizardEventEmitter();
|
|
8
|
+
const events = [];
|
|
9
|
+
// All event types to capture
|
|
10
|
+
const eventTypes = [
|
|
11
|
+
'status',
|
|
12
|
+
'output',
|
|
13
|
+
'complete',
|
|
14
|
+
'error',
|
|
15
|
+
'state:enter',
|
|
16
|
+
'state:exit',
|
|
17
|
+
'auth:checking',
|
|
18
|
+
'auth:required',
|
|
19
|
+
'auth:success',
|
|
20
|
+
'auth:failure',
|
|
21
|
+
'detection:start',
|
|
22
|
+
'detection:complete',
|
|
23
|
+
'detection:none',
|
|
24
|
+
'git:checking',
|
|
25
|
+
'git:clean',
|
|
26
|
+
'git:dirty',
|
|
27
|
+
'git:dirty:confirmed',
|
|
28
|
+
'git:dirty:cancelled',
|
|
29
|
+
'credentials:gathering',
|
|
30
|
+
'credentials:found',
|
|
31
|
+
'credentials:request',
|
|
32
|
+
'credentials:response',
|
|
33
|
+
'config:start',
|
|
34
|
+
'config:complete',
|
|
35
|
+
'agent:start',
|
|
36
|
+
'agent:progress',
|
|
37
|
+
'agent:success',
|
|
38
|
+
'agent:failure',
|
|
39
|
+
'file:write',
|
|
40
|
+
'file:edit',
|
|
41
|
+
'prompt:request',
|
|
42
|
+
'prompt:response',
|
|
43
|
+
'confirm:request',
|
|
44
|
+
'confirm:response',
|
|
45
|
+
];
|
|
46
|
+
// Subscribe to all event types
|
|
47
|
+
for (const type of eventTypes) {
|
|
48
|
+
emitter.on(type, (payload) => {
|
|
49
|
+
events.push({
|
|
50
|
+
type,
|
|
51
|
+
payload,
|
|
52
|
+
timestamp: Date.now(),
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
/** The emitter to pass to machine/adapters */
|
|
58
|
+
emitter,
|
|
59
|
+
/** Get all captured events */
|
|
60
|
+
getEvents: () => [...events],
|
|
61
|
+
/** Get just the event types in order */
|
|
62
|
+
getEventTypes: () => events.map((e) => e.type),
|
|
63
|
+
/** Get events of a specific type */
|
|
64
|
+
getEventsOfType: (type) => events.filter((e) => e.type === type),
|
|
65
|
+
/** Clear captured events */
|
|
66
|
+
clear: () => {
|
|
67
|
+
events.length = 0;
|
|
68
|
+
},
|
|
69
|
+
/** Get count of events */
|
|
70
|
+
count: () => events.length,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Compare two event type sequences for equality.
|
|
75
|
+
* Returns match result with diff info if different.
|
|
76
|
+
*/
|
|
77
|
+
export function compareEventSequences(seq1, seq2) {
|
|
78
|
+
// Check lengths
|
|
79
|
+
if (seq1.length !== seq2.length) {
|
|
80
|
+
return {
|
|
81
|
+
match: false,
|
|
82
|
+
diff: `Length mismatch: ${seq1.length} vs ${seq2.length}\n` +
|
|
83
|
+
`Seq1: ${seq1.join(' → ')}\n` +
|
|
84
|
+
`Seq2: ${seq2.join(' → ')}`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Check each position
|
|
88
|
+
for (let i = 0; i < seq1.length; i++) {
|
|
89
|
+
if (seq1[i] !== seq2[i]) {
|
|
90
|
+
return {
|
|
91
|
+
match: false,
|
|
92
|
+
diff: `Event ${i} differs: "${seq1[i]}" vs "${seq2[i]}"\n` +
|
|
93
|
+
`Context: ...${seq1.slice(Math.max(0, i - 2), i + 3).join(' → ')}...`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { match: true };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Filter out non-deterministic events for comparison.
|
|
101
|
+
* Some events (like timestamps) shouldn't affect sequence equality.
|
|
102
|
+
*/
|
|
103
|
+
export function filterDeterministicEvents(events) {
|
|
104
|
+
// Currently all events are deterministic, but this could filter
|
|
105
|
+
// things like progress events with variable timing
|
|
106
|
+
return events;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=test-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../../src/lib/__tests__/test-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { createWizardEventEmitter, type WizardEventName, type WizardEvents } from '../events.js';\n\n/**\n * Captured event with type and payload.\n */\nexport interface CapturedEvent<K extends WizardEventName = WizardEventName> {\n type: K;\n payload: WizardEvents[K];\n timestamp: number;\n}\n\n/**\n * Creates an event capture utility for testing.\n * Records all events emitted through the emitter.\n */\nexport function createEventCapture() {\n const emitter = createWizardEventEmitter();\n const events: CapturedEvent[] = [];\n\n // All event types to capture\n const eventTypes: WizardEventName[] = [\n 'status',\n 'output',\n 'complete',\n 'error',\n 'state:enter',\n 'state:exit',\n 'auth:checking',\n 'auth:required',\n 'auth:success',\n 'auth:failure',\n 'detection:start',\n 'detection:complete',\n 'detection:none',\n 'git:checking',\n 'git:clean',\n 'git:dirty',\n 'git:dirty:confirmed',\n 'git:dirty:cancelled',\n 'credentials:gathering',\n 'credentials:found',\n 'credentials:request',\n 'credentials:response',\n 'config:start',\n 'config:complete',\n 'agent:start',\n 'agent:progress',\n 'agent:success',\n 'agent:failure',\n 'file:write',\n 'file:edit',\n 'prompt:request',\n 'prompt:response',\n 'confirm:request',\n 'confirm:response',\n ];\n\n // Subscribe to all event types\n for (const type of eventTypes) {\n emitter.on(type, (payload: WizardEvents[typeof type]) => {\n events.push({\n type,\n payload,\n timestamp: Date.now(),\n });\n });\n }\n\n return {\n /** The emitter to pass to machine/adapters */\n emitter,\n\n /** Get all captured events */\n getEvents: () => [...events],\n\n /** Get just the event types in order */\n getEventTypes: () => events.map((e) => e.type),\n\n /** Get events of a specific type */\n getEventsOfType: <K extends WizardEventName>(type: K): CapturedEvent<K>[] =>\n events.filter((e): e is CapturedEvent<K> => e.type === type),\n\n /** Clear captured events */\n clear: () => {\n events.length = 0;\n },\n\n /** Get count of events */\n count: () => events.length,\n };\n}\n\n/**\n * Compare two event type sequences for equality.\n * Returns match result with diff info if different.\n */\nexport function compareEventSequences(\n seq1: WizardEventName[],\n seq2: WizardEventName[],\n): { match: boolean; diff?: string } {\n // Check lengths\n if (seq1.length !== seq2.length) {\n return {\n match: false,\n diff:\n `Length mismatch: ${seq1.length} vs ${seq2.length}\\n` +\n `Seq1: ${seq1.join(' → ')}\\n` +\n `Seq2: ${seq2.join(' → ')}`,\n };\n }\n\n // Check each position\n for (let i = 0; i < seq1.length; i++) {\n if (seq1[i] !== seq2[i]) {\n return {\n match: false,\n diff:\n `Event ${i} differs: \"${seq1[i]}\" vs \"${seq2[i]}\"\\n` +\n `Context: ...${seq1.slice(Math.max(0, i - 2), i + 3).join(' → ')}...`,\n };\n }\n }\n\n return { match: true };\n}\n\n/**\n * Filter out non-deterministic events for comparison.\n * Some events (like timestamps) shouldn't affect sequence equality.\n */\nexport function filterDeterministicEvents(events: WizardEventName[]): WizardEventName[] {\n // Currently all events are deterministic, but this could filter\n // things like progress events with variable timing\n return events;\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { WizardAdapter, AdapterConfig } from './types.js';
|
|
2
|
+
import type { WizardEventEmitter } from '../events.js';
|
|
3
|
+
/**
|
|
4
|
+
* CLI adapter that renders wizard events via clack.
|
|
5
|
+
*
|
|
6
|
+
* Subscribes to WizardEventEmitter and translates events into
|
|
7
|
+
* clack UI operations (logs, spinners, prompts).
|
|
8
|
+
*/
|
|
9
|
+
export declare class CLIAdapter implements WizardAdapter {
|
|
10
|
+
readonly emitter: WizardEventEmitter;
|
|
11
|
+
private sendEvent;
|
|
12
|
+
private debug;
|
|
13
|
+
private spinner;
|
|
14
|
+
private isStarted;
|
|
15
|
+
private progress;
|
|
16
|
+
private handlers;
|
|
17
|
+
private isPromptActive;
|
|
18
|
+
private pendingLogs;
|
|
19
|
+
private sigIntHandler;
|
|
20
|
+
private agentUpdateInterval;
|
|
21
|
+
constructor(config: AdapterConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Queue a log call if a prompt is active, otherwise execute immediately.
|
|
24
|
+
*/
|
|
25
|
+
private queueableLog;
|
|
26
|
+
/**
|
|
27
|
+
* Flush any queued logs after prompt completes.
|
|
28
|
+
*/
|
|
29
|
+
private flushPendingLogs;
|
|
30
|
+
start(): Promise<void>;
|
|
31
|
+
stop(): Promise<void>;
|
|
32
|
+
private stopAgentUpdates;
|
|
33
|
+
/** Debug logging - only outputs when debug mode is enabled */
|
|
34
|
+
private debugLog;
|
|
35
|
+
/**
|
|
36
|
+
* Helper to subscribe and track handlers for cleanup.
|
|
37
|
+
*/
|
|
38
|
+
private subscribe;
|
|
39
|
+
private handleStateEnter;
|
|
40
|
+
private handleStateExit;
|
|
41
|
+
private handleAuthSuccess;
|
|
42
|
+
private handleAuthFailure;
|
|
43
|
+
private handleDetectionComplete;
|
|
44
|
+
private handleDetectionNone;
|
|
45
|
+
private handleCredentialsFound;
|
|
46
|
+
private handleGitDirty;
|
|
47
|
+
private handleCredentialsRequest;
|
|
48
|
+
private handleConfigComplete;
|
|
49
|
+
private handleAgentStart;
|
|
50
|
+
private handleAgentProgress;
|
|
51
|
+
private handleValidationStart;
|
|
52
|
+
private handleValidationIssues;
|
|
53
|
+
private handleValidationComplete;
|
|
54
|
+
private handleComplete;
|
|
55
|
+
private handleError;
|
|
56
|
+
}
|