@posthog/wizard 2.9.0 → 2.9.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.
- package/dist/bin.js +2 -5
- package/dist/bin.js.map +1 -1
- package/dist/src/lib/agent/agent-runner.js +2 -0
- package/dist/src/lib/agent/agent-runner.js.map +1 -1
- package/dist/src/lib/constants.d.ts +1 -1
- package/dist/src/lib/version.d.ts +1 -1
- package/dist/src/lib/version.js +1 -1
- package/dist/src/lib/version.js.map +1 -1
- package/dist/src/lib/workflows/__tests__/agent-skill.test.js +9 -2
- package/dist/src/lib/workflows/__tests__/agent-skill.test.js.map +1 -1
- package/dist/src/lib/workflows/agent-skill/steps.d.ts +2 -2
- package/dist/src/lib/workflows/agent-skill/steps.js +13 -2
- package/dist/src/lib/workflows/agent-skill/steps.js.map +1 -1
- package/dist/src/lib/workflows/posthog-integration/steps.js +3 -3
- package/dist/src/lib/workflows/posthog-integration/steps.js.map +1 -1
- package/dist/src/lib/workflows/revenue-analytics/steps.js +5 -0
- package/dist/src/lib/workflows/revenue-analytics/steps.js.map +1 -1
- package/dist/src/ui/tui/__tests__/store.test.js +49 -3
- package/dist/src/ui/tui/__tests__/store.test.js.map +1 -1
- package/dist/src/ui/tui/flows.d.ts +2 -1
- package/dist/src/ui/tui/flows.js +2 -1
- package/dist/src/ui/tui/flows.js.map +1 -1
- package/dist/src/ui/tui/playground/PlaygroundApp.js +6 -0
- package/dist/src/ui/tui/playground/PlaygroundApp.js.map +1 -1
- package/dist/src/ui/tui/playground/demos/McpDemo.d.ts +12 -0
- package/dist/src/ui/tui/playground/demos/McpDemo.js +27 -0
- package/dist/src/ui/tui/playground/demos/McpDemo.js.map +1 -0
- package/dist/src/ui/tui/primitives/ProgressList.d.ts +1 -3
- package/dist/src/ui/tui/primitives/ProgressList.js +2 -2
- package/dist/src/ui/tui/primitives/ProgressList.js.map +1 -1
- package/dist/src/ui/tui/screen-registry.js +6 -4
- package/dist/src/ui/tui/screen-registry.js.map +1 -1
- package/dist/src/ui/tui/screens/AgentSkillIntroScreen.d.ts +12 -0
- package/dist/src/ui/tui/screens/AgentSkillIntroScreen.js +75 -0
- package/dist/src/ui/tui/screens/AgentSkillIntroScreen.js.map +1 -0
- package/dist/src/ui/tui/screens/IntroScreenLayout.d.ts +46 -0
- package/dist/src/ui/tui/screens/IntroScreenLayout.js +33 -0
- package/dist/src/ui/tui/screens/IntroScreenLayout.js.map +1 -0
- package/dist/src/ui/tui/screens/{SkillsScreen.d.ts → KeepSkillsScreen.d.ts} +3 -3
- package/dist/src/ui/tui/screens/{SkillsScreen.js → KeepSkillsScreen.js} +8 -5
- package/dist/src/ui/tui/screens/KeepSkillsScreen.js.map +1 -0
- package/dist/src/ui/tui/screens/McpScreen.js +4 -1
- package/dist/src/ui/tui/screens/McpScreen.js.map +1 -1
- package/dist/src/ui/tui/screens/PostHogIntegrationIntroScreen.d.ts +15 -0
- package/dist/src/ui/tui/screens/PostHogIntegrationIntroScreen.js +135 -0
- package/dist/src/ui/tui/screens/PostHogIntegrationIntroScreen.js.map +1 -0
- package/dist/src/ui/tui/screens/RevenueIntroScreen.d.ts +3 -3
- package/dist/src/ui/tui/screens/RevenueIntroScreen.js +57 -32
- package/dist/src/ui/tui/screens/RevenueIntroScreen.js.map +1 -1
- package/dist/src/ui/tui/screens/RunScreen.js +1 -1
- package/dist/src/ui/tui/screens/RunScreen.js.map +1 -1
- package/dist/src/ui/tui/store.js +2 -0
- package/dist/src/ui/tui/store.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/dist/src/ui/tui/screens/IntroScreen.d.ts +0 -16
- package/dist/src/ui/tui/screens/IntroScreen.js +0 -79
- package/dist/src/ui/tui/screens/IntroScreen.js.map +0 -1
- package/dist/src/ui/tui/screens/SkillsScreen.js.map +0 -1
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@posthog/wizard",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@posthog/wizard",
|
|
9
|
-
"version": "2.9.
|
|
9
|
+
"version": "2.9.1",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/claude-agent-sdk": "0.2.73",
|
|
12
12
|
"@inkjs/ui": "^2.0.0",
|
package/package.json
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IntroScreen — Welcome, framework detection, and continue/cancel prompt.
|
|
3
|
-
*
|
|
4
|
-
* Three states:
|
|
5
|
-
* 1. Detecting: spinner while bin.ts runs detection
|
|
6
|
-
* 2. Detection failed: framework picker, then continue/cancel
|
|
7
|
-
* 3. Detection succeeded: show result, then continue/cancel
|
|
8
|
-
*
|
|
9
|
-
* Calls store.completeSetup() which unblocks bin.ts to start runWizard.
|
|
10
|
-
*/
|
|
11
|
-
import type { WizardStore } from '../store.js';
|
|
12
|
-
interface IntroScreenProps {
|
|
13
|
-
store: WizardStore;
|
|
14
|
-
}
|
|
15
|
-
export declare const IntroScreen: ({ store }: IntroScreenProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export {};
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* IntroScreen — Welcome, framework detection, and continue/cancel prompt.
|
|
4
|
-
*
|
|
5
|
-
* Three states:
|
|
6
|
-
* 1. Detecting: spinner while bin.ts runs detection
|
|
7
|
-
* 2. Detection failed: framework picker, then continue/cancel
|
|
8
|
-
* 3. Detection succeeded: show result, then continue/cancel
|
|
9
|
-
*
|
|
10
|
-
* Calls store.completeSetup() which unblocks bin.ts to start runWizard.
|
|
11
|
-
*/
|
|
12
|
-
import path from 'path';
|
|
13
|
-
import { Box, Text } from 'ink';
|
|
14
|
-
import { useState, useSyncExternalStore } from 'react';
|
|
15
|
-
import { Integration } from '../../../lib/constants.js';
|
|
16
|
-
import { PickerMenu, LoadingBox } from '../primitives/index.js';
|
|
17
|
-
export const IntroScreen = ({ store }) => {
|
|
18
|
-
useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
|
|
19
|
-
const [pickingFramework, setPickingFramework] = useState(false);
|
|
20
|
-
const [manuallySelected, setManuallySelected] = useState(false);
|
|
21
|
-
const { session } = store;
|
|
22
|
-
const config = session.frameworkConfig;
|
|
23
|
-
const frameworkLabel = session.detectedFrameworkLabel ?? config?.metadata.name;
|
|
24
|
-
const detecting = !session.detectionComplete;
|
|
25
|
-
const needsFrameworkPick = session.detectionComplete && !session.frameworkConfig;
|
|
26
|
-
const unsupported = session.unsupportedVersion;
|
|
27
|
-
const showContinue = session.frameworkConfig !== null &&
|
|
28
|
-
!detecting &&
|
|
29
|
-
!pickingFramework &&
|
|
30
|
-
!unsupported;
|
|
31
|
-
const showDescription = showContinue;
|
|
32
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: [_jsxs(Box, { flexDirection: "column", alignItems: "center", marginBottom: 1, children: [_jsxs(Text, { bold: true, children: [_jsx(Text, { color: "#1D4AFF", children: '\u2588' }), _jsx(Text, { color: "#F54E00", children: '\u2588' }), _jsx(Text, { color: "#F9BD2B", children: '\u2588' }), detecting ? ' PostHog Wizard starting up' : ' PostHog Wizard 🦔'] }), showDescription && (_jsxs(Box, { flexDirection: "column", alignItems: "center", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "We'll use AI to analyze your project and integrate PostHog." }), _jsx(Text, { dimColor: true, children: ".env* file contents will not leave your machine." }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Let's do two hours of work in eight minutes." }) })] }))] }), detecting && (_jsx(Box, { marginY: 1, children: _jsx(LoadingBox, { message: "Detecting project framework..." }) })), needsFrameworkPick && (_jsx(Box, { marginY: 1, children: _jsx(Text, { dimColor: true, children: "Could not auto-detect your framework." }) })), config?.metadata.preRunNotice && (_jsx(Text, { color: "yellow", children: config.metadata.preRunNotice })), (needsFrameworkPick || pickingFramework) && (_jsx(FrameworkPicker, { store: store, onComplete: () => setPickingFramework(false) })), !detecting && !pickingFramework && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsxs(Text, { children: ["Directory ", _jsx(Text, { color: "green", children: '\u2714' }), ' '] }), _jsxs(Text, { children: ['/', path.basename(session.installDir), ' '] })] }), frameworkLabel && (_jsxs(Text, { children: [_jsxs(Text, { children: ["Framework ", _jsx(Text, { color: "green", children: '\u2714' }), ' '] }), _jsxs(Text, { children: [frameworkLabel, !manuallySelected && ' (detected)', ' ', config?.metadata.beta && '[BETA]'] })] })), unsupported && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { color: "#DC9300", children: ["Version ", unsupported.current, " is not supported by the wizard. Please upgrade to ", unsupported.minimum, " or later."] }), _jsxs(Text, { dimColor: true, children: ["Manual setup guide: ", unsupported.docsUrl] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Did we get this wrong? You can also select another framework." }) }), _jsx(PickerMenu, { options: [
|
|
33
|
-
{ label: 'Select another framework', value: 'framework' },
|
|
34
|
-
{ label: 'Exit', value: 'exit' },
|
|
35
|
-
], onSelect: (value) => {
|
|
36
|
-
const choice = Array.isArray(value) ? value[0] : value;
|
|
37
|
-
if (choice === 'framework') {
|
|
38
|
-
setPickingFramework(true);
|
|
39
|
-
setManuallySelected(true);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
process.exit(0);
|
|
43
|
-
}
|
|
44
|
-
} })] })), showContinue && (_jsx(PickerMenu, { options: [
|
|
45
|
-
{ label: 'Continue', value: 'continue' },
|
|
46
|
-
{ label: 'Change framework', value: 'framework' },
|
|
47
|
-
{ label: 'Cancel', value: 'cancel' },
|
|
48
|
-
], onSelect: (value) => {
|
|
49
|
-
const choice = Array.isArray(value) ? value[0] : value;
|
|
50
|
-
if (choice === 'cancel') {
|
|
51
|
-
process.exit(0);
|
|
52
|
-
}
|
|
53
|
-
else if (choice === 'framework') {
|
|
54
|
-
setPickingFramework(true);
|
|
55
|
-
setManuallySelected(true);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
store.completeSetup();
|
|
59
|
-
}
|
|
60
|
-
} }))] }))] }));
|
|
61
|
-
};
|
|
62
|
-
/** Framework picker shown when auto-detection fails. */
|
|
63
|
-
const FrameworkPicker = ({ store, onComplete, }) => {
|
|
64
|
-
// Build options from the framework registry (loaded dynamically to avoid circular deps)
|
|
65
|
-
const options = Object.values(Integration).map((value) => ({
|
|
66
|
-
label: value,
|
|
67
|
-
value,
|
|
68
|
-
}));
|
|
69
|
-
return (_jsx(PickerMenu, { centered: true, columns: 2, message: "Select your framework", options: options, onSelect: (value) => {
|
|
70
|
-
const integration = Array.isArray(value) ? value[0] : value;
|
|
71
|
-
void import('../../../lib/registry.js').then(({ FRAMEWORK_REGISTRY }) => {
|
|
72
|
-
const config = FRAMEWORK_REGISTRY[integration];
|
|
73
|
-
store.setFrameworkConfig(integration, config);
|
|
74
|
-
store.setDetectedFramework(config.metadata.name);
|
|
75
|
-
onComplete?.();
|
|
76
|
-
});
|
|
77
|
-
} }));
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=IntroScreen.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IntroScreen.js","sourceRoot":"","sources":["../../../../../src/ui/tui/screens/IntroScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * IntroScreen — Welcome, framework detection, and continue/cancel prompt.\n *\n * Three states:\n * 1. Detecting: spinner while bin.ts runs detection\n * 2. Detection failed: framework picker, then continue/cancel\n * 3. Detection succeeded: show result, then continue/cancel\n *\n * Calls store.completeSetup() which unblocks bin.ts to start runWizard.\n */\n\nimport path from 'path';\nimport { Box, Text } from 'ink';\nimport { useState, useSyncExternalStore } from 'react';\nimport type { WizardStore } from '../store.js';\nimport { Integration } from '../../../lib/constants.js';\nimport { PickerMenu, LoadingBox } from '../primitives/index.js';\n\ninterface IntroScreenProps {\n store: WizardStore;\n}\n\nexport const IntroScreen = ({ store }: IntroScreenProps) => {\n useSyncExternalStore(\n (cb) => store.subscribe(cb),\n () => store.getSnapshot(),\n );\n\n const [pickingFramework, setPickingFramework] = useState(false);\n const [manuallySelected, setManuallySelected] = useState(false);\n\n const { session } = store;\n const config = session.frameworkConfig;\n const frameworkLabel =\n session.detectedFrameworkLabel ?? config?.metadata.name;\n const detecting = !session.detectionComplete;\n const needsFrameworkPick =\n session.detectionComplete && !session.frameworkConfig;\n const unsupported = session.unsupportedVersion;\n const showContinue =\n session.frameworkConfig !== null &&\n !detecting &&\n !pickingFramework &&\n !unsupported;\n const showDescription = showContinue;\n\n return (\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Box flexDirection=\"column\" alignItems=\"center\" marginBottom={1}>\n <Text bold>\n <Text color=\"#1D4AFF\">{'\\u2588'}</Text>\n <Text color=\"#F54E00\">{'\\u2588'}</Text>\n <Text color=\"#F9BD2B\">{'\\u2588'}</Text>\n {detecting ? ' PostHog Wizard starting up' : ' PostHog Wizard 🦔'}\n </Text>\n\n {showDescription && (\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Text dimColor>\n We'll use AI to analyze your project and integrate PostHog.\n </Text>\n <Text dimColor>\n .env* file contents will not leave your machine.\n </Text>\n <Box marginTop={1}>\n <Text>Let's do two hours of work in eight minutes.</Text>\n </Box>\n </Box>\n )}\n </Box>\n\n {detecting && (\n <Box marginY={1}>\n <LoadingBox message=\"Detecting project framework...\" />\n </Box>\n )}\n\n {needsFrameworkPick && (\n <Box marginY={1}>\n <Text dimColor>Could not auto-detect your framework.</Text>\n </Box>\n )}\n\n {config?.metadata.preRunNotice && (\n <Text color=\"yellow\">{config.metadata.preRunNotice}</Text>\n )}\n\n {(needsFrameworkPick || pickingFramework) && (\n <FrameworkPicker\n store={store}\n onComplete={() => setPickingFramework(false)}\n />\n )}\n\n {!detecting && !pickingFramework && (\n <Box flexDirection=\"column\">\n <Text>\n <Text>\n Directory <Text color=\"green\">{'\\u2714'}</Text>{' '}\n </Text>\n <Text>\n {'/'}\n {path.basename(session.installDir)}{' '}\n </Text>\n </Text>\n {frameworkLabel && (\n <Text>\n <Text>\n Framework <Text color=\"green\">{'\\u2714'}</Text>{' '}\n </Text>\n <Text>\n {frameworkLabel}\n {!manuallySelected && ' (detected)'}{' '}\n {config?.metadata.beta && '[BETA]'}\n </Text>\n </Text>\n )}\n {unsupported && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"#DC9300\">\n Version {unsupported.current} is not supported by the wizard.\n Please upgrade to {unsupported.minimum} or later.\n </Text>\n <Text dimColor>Manual setup guide: {unsupported.docsUrl}</Text>\n <Box marginTop={1}>\n <Text dimColor>\n Did we get this wrong? You can also select another framework.\n </Text>\n </Box>\n <PickerMenu\n options={[\n { label: 'Select another framework', value: 'framework' },\n { label: 'Exit', value: 'exit' },\n ]}\n onSelect={(value) => {\n const choice = Array.isArray(value) ? value[0] : value;\n if (choice === 'framework') {\n setPickingFramework(true);\n setManuallySelected(true);\n } else {\n process.exit(0);\n }\n }}\n />\n </Box>\n )}\n {showContinue && (\n <PickerMenu\n options={[\n { label: 'Continue', value: 'continue' },\n { label: 'Change framework', value: 'framework' },\n { label: 'Cancel', value: 'cancel' },\n ]}\n onSelect={(value) => {\n const choice = Array.isArray(value) ? value[0] : value;\n if (choice === 'cancel') {\n process.exit(0);\n } else if (choice === 'framework') {\n setPickingFramework(true);\n setManuallySelected(true);\n } else {\n store.completeSetup();\n }\n }}\n />\n )}\n </Box>\n )}\n </Box>\n );\n};\n\n/** Framework picker shown when auto-detection fails. */\nconst FrameworkPicker = ({\n store,\n onComplete,\n}: {\n store: WizardStore;\n onComplete?: () => void;\n}) => {\n // Build options from the framework registry (loaded dynamically to avoid circular deps)\n const options = Object.values(Integration).map((value) => ({\n label: value,\n value,\n }));\n\n return (\n <PickerMenu<Integration>\n centered\n columns={2}\n message=\"Select your framework\"\n options={options}\n onSelect={(value) => {\n const integration = Array.isArray(value) ? value[0] : value;\n void import('../../../lib/registry.js').then(\n ({ FRAMEWORK_REGISTRY }) => {\n const config = FRAMEWORK_REGISTRY[integration];\n store.setFrameworkConfig(integration, config);\n store.setDetectedFramework(config.metadata.name);\n onComplete?.();\n },\n );\n }}\n />\n );\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SkillsScreen.js","sourceRoot":"","sources":["../../../../../src/ui/tui/screens/SkillsScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * SkillsScreen — Ask whether to keep installed skills in .claude/skills/.\n *\n * Shown after the outro summary so users see the agent's output first,\n * then decide whether to keep the skills that powered it.\n *\n * When done, calls store.setSkillsComplete() and exits the process.\n */\n\nimport { Box, Text } from 'ink';\nimport { useState, useEffect } from 'react';\nimport { useSyncExternalStore } from 'react';\nimport { readdir, rm } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { WizardStore } from '../store.js';\nimport { ConfirmationInput } from '../primitives/index.js';\nimport { Colors } from '../styles.js';\nimport { CONTEXT_MILL_URL } from '../../../lib/constants.js';\n\ninterface SkillsScreenProps {\n store: WizardStore;\n}\n\ninterface SkillEntry {\n name: string;\n children: string[];\n}\n\nenum Phase {\n Loading = 'loading',\n Ask = 'ask',\n Removing = 'removing',\n Done = 'done',\n}\n\nexport const SkillsScreen = ({ store }: SkillsScreenProps) => {\n useSyncExternalStore(\n (cb) => store.subscribe(cb),\n () => store.getSnapshot(),\n );\n\n const [phase, setPhase] = useState<Phase>(Phase.Loading);\n const [skills, setSkills] = useState<SkillEntry[]>([]);\n\n const skillsDir = join(store.session.installDir, '.claude', 'skills');\n\n useEffect(() => {\n void (async () => {\n try {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n const dirs = entries.filter((e) => e.isDirectory());\n const result: SkillEntry[] = [];\n for (const dir of dirs) {\n const children = await readdir(join(skillsDir, dir.name));\n result.push({ name: dir.name, children });\n }\n if (result.length === 0) {\n store.setSkillsComplete(true);\n process.exit(0);\n }\n setSkills(result);\n setPhase(Phase.Ask);\n } catch {\n store.setSkillsComplete(true);\n process.exit(0);\n }\n })();\n }, []); // eslint-disable-line\n\n const handleKeep = () => {\n store.setSkillsComplete(true);\n process.exit(0);\n };\n\n const handleRemove = async () => {\n setPhase(Phase.Removing);\n try {\n await rm(skillsDir, { recursive: true, force: true });\n } catch {\n // Best-effort removal\n }\n setPhase(Phase.Done);\n store.setSkillsComplete(false);\n process.exit(0);\n };\n\n return (\n <Box flexDirection=\"column\" flexGrow={1}>\n <Text bold color={Colors.accent}>\n Keep the skills?\n </Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {phase === Phase.Loading && (\n <Text dimColor>Checking installed skills...</Text>\n )}\n\n {phase === Phase.Ask && (\n <>\n <Text dimColor>\n The wizard installed open-source skills that help AI coding agents\n integrate PostHog into your project:\n </Text>\n <Box marginTop={1} flexDirection=\"column\" marginLeft={2}>\n <Text dimColor>.claude/</Text>\n <Text dimColor> skills/</Text>\n {skills.map((skill) => (\n <Box key={skill.name} flexDirection=\"column\">\n <Text dimColor> {skill.name}/</Text>\n {skill.children.map((child) => (\n <Text key={child} dimColor>\n {' '}\n {child}\n </Text>\n ))}\n </Box>\n ))}\n </Box>\n <Box marginTop={1}>\n <Text dimColor>\n Source: <Text color=\"cyan\">{CONTEXT_MILL_URL}</Text>\n </Text>\n </Box>\n <Box marginTop={1}>\n <ConfirmationInput\n message=\"Keep the installed skills?\"\n confirmLabel=\"Keep [Enter]\"\n cancelLabel=\"Remove [Esc]\"\n onConfirm={handleKeep}\n onCancel={() => void handleRemove()}\n />\n </Box>\n </>\n )}\n\n {phase === Phase.Removing && <Text dimColor>Removing skills...</Text>}\n\n {phase === Phase.Done && <Text dimColor>Skills removed.</Text>}\n </Box>\n </Box>\n );\n};\n"]}
|