gencode-ai 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/.env.example +11 -0
- package/CLAUDE.md +70 -0
- package/LICENSE +21 -0
- package/README.md +117 -0
- package/dist/agent/agent.d.ts +84 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +233 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/index.d.ts +6 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +6 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/types.d.ts +47 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/components/App.d.ts +14 -0
- package/dist/cli/components/App.d.ts.map +1 -0
- package/dist/cli/components/App.js +395 -0
- package/dist/cli/components/App.js.map +1 -0
- package/dist/cli/components/CommandSuggestions.d.ts +13 -0
- package/dist/cli/components/CommandSuggestions.d.ts.map +1 -0
- package/dist/cli/components/CommandSuggestions.js +32 -0
- package/dist/cli/components/CommandSuggestions.js.map +1 -0
- package/dist/cli/components/Header.d.ts +9 -0
- package/dist/cli/components/Header.d.ts.map +1 -0
- package/dist/cli/components/Header.js +13 -0
- package/dist/cli/components/Header.js.map +1 -0
- package/dist/cli/components/Input.d.ts +13 -0
- package/dist/cli/components/Input.d.ts.map +1 -0
- package/dist/cli/components/Input.js +27 -0
- package/dist/cli/components/Input.js.map +1 -0
- package/dist/cli/components/Logo.d.ts +2 -0
- package/dist/cli/components/Logo.d.ts.map +1 -0
- package/dist/cli/components/Logo.js +8 -0
- package/dist/cli/components/Logo.js.map +1 -0
- package/dist/cli/components/Messages.d.ts +37 -0
- package/dist/cli/components/Messages.d.ts.map +1 -0
- package/dist/cli/components/Messages.js +106 -0
- package/dist/cli/components/Messages.js.map +1 -0
- package/dist/cli/components/ModelSelector.d.ts +13 -0
- package/dist/cli/components/ModelSelector.d.ts.map +1 -0
- package/dist/cli/components/ModelSelector.js +72 -0
- package/dist/cli/components/ModelSelector.js.map +1 -0
- package/dist/cli/components/Spinner.d.ts +12 -0
- package/dist/cli/components/Spinner.d.ts.map +1 -0
- package/dist/cli/components/Spinner.js +45 -0
- package/dist/cli/components/Spinner.js.map +1 -0
- package/dist/cli/components/index.d.ts +12 -0
- package/dist/cli/components/index.d.ts.map +1 -0
- package/dist/cli/components/index.js +12 -0
- package/dist/cli/components/index.js.map +1 -0
- package/dist/cli/components/theme.d.ts +31 -0
- package/dist/cli/components/theme.d.ts.map +1 -0
- package/dist/cli/components/theme.js +36 -0
- package/dist/cli/components/theme.js.map +1 -0
- package/dist/cli/index-legacy.d.ts +7 -0
- package/dist/cli/index-legacy.d.ts.map +1 -0
- package/dist/cli/index-legacy.js +431 -0
- package/dist/cli/index-legacy.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +116 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ink-cli.d.ts +7 -0
- package/dist/cli/ink-cli.d.ts.map +1 -0
- package/dist/cli/ink-cli.js +105 -0
- package/dist/cli/ink-cli.js.map +1 -0
- package/dist/cli/session-picker.d.ts +16 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +280 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli/ui.d.ts +61 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +364 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +31 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +65 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/types.d.ts +22 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +6 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +10 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +9 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/init.d.ts +20 -0
- package/dist/memory/init.d.ts.map +1 -0
- package/dist/memory/init.js +332 -0
- package/dist/memory/init.js.map +1 -0
- package/dist/memory/manager.d.ts +85 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +234 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/memory/types.d.ts +74 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +6 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/permissions/index.d.ts +7 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +6 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/manager.d.ts +32 -0
- package/dist/permissions/manager.d.ts.map +1 -0
- package/dist/permissions/manager.js +79 -0
- package/dist/permissions/manager.js.map +1 -0
- package/dist/permissions/types.d.ts +14 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +17 -0
- package/dist/permissions/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts +20 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +185 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +21 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +241 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +34 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +72 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +19 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +221 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +125 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +6 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +6 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +101 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +295 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/types.d.ts +39 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +10 -0
- package/dist/session/types.js.map +1 -0
- package/dist/tools/builtin/bash.d.ts +7 -0
- package/dist/tools/builtin/bash.d.ts.map +1 -0
- package/dist/tools/builtin/bash.js +80 -0
- package/dist/tools/builtin/bash.js.map +1 -0
- package/dist/tools/builtin/edit.d.ts +7 -0
- package/dist/tools/builtin/edit.d.ts.map +1 -0
- package/dist/tools/builtin/edit.js +32 -0
- package/dist/tools/builtin/edit.js.map +1 -0
- package/dist/tools/builtin/glob.d.ts +7 -0
- package/dist/tools/builtin/glob.d.ts.map +1 -0
- package/dist/tools/builtin/glob.js +36 -0
- package/dist/tools/builtin/glob.js.map +1 -0
- package/dist/tools/builtin/grep.d.ts +7 -0
- package/dist/tools/builtin/grep.d.ts.map +1 -0
- package/dist/tools/builtin/grep.js +59 -0
- package/dist/tools/builtin/grep.js.map +1 -0
- package/dist/tools/builtin/read.d.ts +7 -0
- package/dist/tools/builtin/read.d.ts.map +1 -0
- package/dist/tools/builtin/read.js +29 -0
- package/dist/tools/builtin/read.js.map +1 -0
- package/dist/tools/builtin/write.d.ts +7 -0
- package/dist/tools/builtin/write.d.ts.map +1 -0
- package/dist/tools/builtin/write.js +24 -0
- package/dist/tools/builtin/write.js.map +1 -0
- package/dist/tools/index.d.ts +38 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +32 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +22 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +71 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +62 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +126 -0
- package/dist/tools/types.js.map +1 -0
- package/docs/README.md +16 -0
- package/docs/proposals/0001-web-fetch-tool.md +293 -0
- package/docs/proposals/0002-web-search-tool.md +306 -0
- package/docs/proposals/0003-task-subagents.md +333 -0
- package/docs/proposals/0004-plan-mode.md +338 -0
- package/docs/proposals/0005-todo-system.md +299 -0
- package/docs/proposals/0006-memory-system.md +539 -0
- package/docs/proposals/0007-context-management.md +429 -0
- package/docs/proposals/0008-checkpointing.md +327 -0
- package/docs/proposals/0009-hooks-system.md +343 -0
- package/docs/proposals/0010-mcp-integration.md +382 -0
- package/docs/proposals/0011-custom-commands.md +374 -0
- package/docs/proposals/0012-ask-user-question.md +317 -0
- package/docs/proposals/0013-multi-edit-tool.md +345 -0
- package/docs/proposals/0014-lsp-tool.md +478 -0
- package/docs/proposals/0015-ls-tool.md +407 -0
- package/docs/proposals/0016-kill-shell-tool.md +455 -0
- package/docs/proposals/0017-background-tasks.md +489 -0
- package/docs/proposals/0018-parallel-tool-execution.md +415 -0
- package/docs/proposals/0019-session-enhancements.md +462 -0
- package/docs/proposals/0020-session-summarization.md +447 -0
- package/docs/proposals/0021-skills-system.md +409 -0
- package/docs/proposals/0022-plugin-system.md +467 -0
- package/docs/proposals/0023-permission-enhancements.md +470 -0
- package/docs/proposals/0024-keyboard-shortcuts.md +443 -0
- package/docs/proposals/0025-cost-tracking.md +447 -0
- package/docs/proposals/0026-git-integration.md +475 -0
- package/docs/proposals/0027-enhanced-read-tool.md +514 -0
- package/docs/proposals/0028-enhanced-bash-tool.md +511 -0
- package/docs/proposals/0029-notebook-edit-tool.md +413 -0
- package/docs/proposals/0030-plugin-marketplace.md +360 -0
- package/docs/proposals/0031-command-suggestions.md +295 -0
- package/docs/proposals/0032-ide-integrations.md +328 -0
- package/docs/proposals/0033-enterprise-deployment.md +221 -0
- package/docs/proposals/0034-sandboxing.md +273 -0
- package/docs/proposals/0035-auto-updater.md +311 -0
- package/docs/proposals/0036-enhanced-glob-tool.md +267 -0
- package/docs/proposals/0037-enhanced-grep-tool.md +360 -0
- package/docs/proposals/0038-interactive-cli-ui.md +373 -0
- package/docs/proposals/0039-streaming-enhancements.md +359 -0
- package/docs/proposals/0040-multi-provider-enhancements.md +369 -0
- package/docs/proposals/README.md +84 -0
- package/docs/proposals/TEMPLATE.md +57 -0
- package/docs/proposals/research/claude-code-research.md +307 -0
- package/examples/agent-demo.ts +115 -0
- package/examples/basic.ts +166 -0
- package/package.json +50 -0
- package/src/agent/agent.ts +276 -0
- package/src/agent/index.ts +6 -0
- package/src/agent/types.ts +62 -0
- package/src/cli/components/App.tsx +565 -0
- package/src/cli/components/CommandSuggestions.tsx +58 -0
- package/src/cli/components/Header.tsx +36 -0
- package/src/cli/components/Input.tsx +60 -0
- package/src/cli/components/Logo.tsx +16 -0
- package/src/cli/components/Messages.tsx +210 -0
- package/src/cli/components/ModelSelector.tsx +135 -0
- package/src/cli/components/Spinner.tsx +72 -0
- package/src/cli/components/index.ts +21 -0
- package/src/cli/components/theme.ts +36 -0
- package/src/cli/index.tsx +136 -0
- package/src/config/index.ts +7 -0
- package/src/config/manager.ts +77 -0
- package/src/config/types.ts +25 -0
- package/src/index.ts +86 -0
- package/src/permissions/index.ts +7 -0
- package/src/permissions/manager.ts +97 -0
- package/src/permissions/types.ts +29 -0
- package/src/providers/anthropic.ts +224 -0
- package/src/providers/gemini.ts +295 -0
- package/src/providers/index.ts +97 -0
- package/src/providers/openai.ts +261 -0
- package/src/providers/types.ts +181 -0
- package/src/session/index.ts +6 -0
- package/src/session/manager.ts +354 -0
- package/src/session/types.ts +49 -0
- package/src/tools/builtin/bash.ts +92 -0
- package/src/tools/builtin/edit.ts +37 -0
- package/src/tools/builtin/glob.ts +42 -0
- package/src/tools/builtin/grep.ts +67 -0
- package/src/tools/builtin/read.ts +34 -0
- package/src/tools/builtin/write.ts +27 -0
- package/src/tools/index.ts +36 -0
- package/src/tools/registry.ts +83 -0
- package/src/tools/types.ts +172 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { colors, icons } from './theme.js';
|
|
4
|
+
// Word wrap text to terminal width
|
|
5
|
+
function wrapText(text, width) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
for (const line of text.split('\n')) {
|
|
8
|
+
if (line.length <= width) {
|
|
9
|
+
lines.push(line);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
// Simple word wrap
|
|
13
|
+
let currentLine = '';
|
|
14
|
+
const words = line.split(' ');
|
|
15
|
+
for (const word of words) {
|
|
16
|
+
if (currentLine.length + word.length + 1 <= width) {
|
|
17
|
+
currentLine += (currentLine ? ' ' : '') + word;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
if (currentLine)
|
|
21
|
+
lines.push(currentLine);
|
|
22
|
+
currentLine = word;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (currentLine)
|
|
26
|
+
lines.push(currentLine);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return lines;
|
|
30
|
+
}
|
|
31
|
+
export function UserMessage({ text }) {
|
|
32
|
+
const lines = text.trimEnd().split('\n');
|
|
33
|
+
return (_jsx(Box, { flexDirection: "column", marginTop: 1, marginBottom: 0, children: lines.map((line, i) => (_jsxs(Box, { children: [_jsxs(Text, { color: colors.brand, children: [icons.userPrompt, " "] }), _jsxs(Text, { backgroundColor: "#1E293B", color: colors.text, children: [" ", line, " "] })] }, i))) }));
|
|
34
|
+
}
|
|
35
|
+
export function AssistantMessage({ text, streaming }) {
|
|
36
|
+
if (!text)
|
|
37
|
+
return null;
|
|
38
|
+
// Get terminal width for wrapping
|
|
39
|
+
const termWidth = process.stdout.columns || 80;
|
|
40
|
+
const contentWidth = termWidth - 4; // Account for prefix
|
|
41
|
+
// Wrap text to terminal width
|
|
42
|
+
const lines = wrapText(text.trimEnd(), contentWidth);
|
|
43
|
+
return (_jsx(Box, { flexDirection: "column", marginTop: 1, marginBottom: 0, children: lines.map((line, i) => (_jsxs(Box, { children: [i === 0 && _jsxs(Text, { color: colors.success, children: [icons.assistant, " "] }), i > 0 && _jsx(Text, { children: " " }), _jsxs(Text, { children: [line, streaming && i === lines.length - 1 ? (_jsx(Text, { color: colors.brandLight, children: icons.cursor })) : ('')] })] }, i))) }));
|
|
44
|
+
}
|
|
45
|
+
export function ToolCall({ name, input }) {
|
|
46
|
+
const inputStr = JSON.stringify(input);
|
|
47
|
+
const shortInput = inputStr.length > 50 ? inputStr.slice(0, 47) + '...' : inputStr;
|
|
48
|
+
return (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: [_jsx(Text, { color: colors.tool, children: icons.tool }), " ", name, ' ', _jsx(Text, { color: colors.textMuted, children: shortInput })] }) }));
|
|
49
|
+
}
|
|
50
|
+
export function ToolResult({ name, success, output }) {
|
|
51
|
+
const firstLine = output.split('\n')[0]?.trim() || '';
|
|
52
|
+
const displayOutput = firstLine.length > 50 ? firstLine.slice(0, 47) + '...' : firstLine;
|
|
53
|
+
const statusColor = success ? colors.success : colors.error;
|
|
54
|
+
const statusIcon = success ? icons.success : icons.error;
|
|
55
|
+
return (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: [_jsx(Text, { color: statusColor, children: statusIcon }), " ", name, ' ', _jsx(Text, { color: colors.textMuted, children: displayOutput })] }) }));
|
|
56
|
+
}
|
|
57
|
+
export function InfoMessage({ text, type = 'info' }) {
|
|
58
|
+
const config = {
|
|
59
|
+
info: { color: colors.info, icon: icons.info },
|
|
60
|
+
success: { color: colors.success, icon: icons.success },
|
|
61
|
+
warning: { color: colors.warning, icon: icons.warning },
|
|
62
|
+
error: { color: colors.error, icon: icons.error },
|
|
63
|
+
};
|
|
64
|
+
const { color, icon } = config[type];
|
|
65
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: color, children: [icon, " "] }), _jsx(Text, { color: colors.textSecondary, children: text })] }));
|
|
66
|
+
}
|
|
67
|
+
export function Separator() {
|
|
68
|
+
const width = process.stdout.columns || 80;
|
|
69
|
+
return _jsx(Text, { color: colors.separator, children: '─'.repeat(width) });
|
|
70
|
+
}
|
|
71
|
+
export function WelcomeMessage({ model }) {
|
|
72
|
+
return (_jsxs(Box, { marginTop: 1, marginBottom: 0, children: [_jsx(Text, { color: colors.textMuted, children: "Welcome to " }), _jsx(Text, { color: colors.brand, children: model })] }));
|
|
73
|
+
}
|
|
74
|
+
export function ShortcutsHint() {
|
|
75
|
+
return (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.textMuted, children: " ? for shortcuts" }) }));
|
|
76
|
+
}
|
|
77
|
+
// Random verbs for completion message (Claude Code style)
|
|
78
|
+
const COMPLETION_VERBS = [
|
|
79
|
+
'Baked',
|
|
80
|
+
'Crafted',
|
|
81
|
+
'Brewed',
|
|
82
|
+
'Cooked',
|
|
83
|
+
'Forged',
|
|
84
|
+
'Built',
|
|
85
|
+
'Woven',
|
|
86
|
+
'Assembled',
|
|
87
|
+
'Conjured',
|
|
88
|
+
'Rendered',
|
|
89
|
+
'Compiled',
|
|
90
|
+
'Distilled',
|
|
91
|
+
];
|
|
92
|
+
function formatDuration(ms) {
|
|
93
|
+
const totalSecs = Math.floor(ms / 1000);
|
|
94
|
+
const mins = Math.floor(totalSecs / 60);
|
|
95
|
+
const secs = totalSecs % 60;
|
|
96
|
+
if (mins > 0) {
|
|
97
|
+
return `${mins}m ${secs}s`;
|
|
98
|
+
}
|
|
99
|
+
return `${secs}s`;
|
|
100
|
+
}
|
|
101
|
+
export function CompletionMessage({ durationMs }) {
|
|
102
|
+
// Pick a random verb (stable per render via useMemo would be better, but keep simple)
|
|
103
|
+
const verb = COMPLETION_VERBS[Math.floor(Math.random() * COMPLETION_VERBS.length)];
|
|
104
|
+
return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: colors.textMuted, children: ["\u273B ", verb, " for ", formatDuration(durationMs)] }) }));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=Messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Messages.js","sourceRoot":"","sources":["../../../src/cli/components/Messages.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface Model {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
interface ModelSelectorProps {
|
|
6
|
+
currentModel: string;
|
|
7
|
+
onSelect: (modelId: string) => void;
|
|
8
|
+
onCancel: () => void;
|
|
9
|
+
listModels: () => Promise<Model[]>;
|
|
10
|
+
}
|
|
11
|
+
export declare function ModelSelector({ currentModel, onSelect, onCancel, listModels, }: ModelSelectorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ModelSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelSelector.d.ts","sourceRoot":"","sources":["../../../src/cli/components/ModelSelector.tsx"],"names":[],"mappings":"AASA,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,kBAAkB;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;CACpC;AAED,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,EAAE,kBAAkB,kDA4GpB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Model Selector Component - Interactive model selection with fuzzy filter
|
|
4
|
+
*/
|
|
5
|
+
import { useState, useEffect } from 'react';
|
|
6
|
+
import { Box, Text, useInput } from 'ink';
|
|
7
|
+
import TextInput from 'ink-text-input';
|
|
8
|
+
import { colors, icons } from './theme.js';
|
|
9
|
+
import { LoadingSpinner } from './Spinner.js';
|
|
10
|
+
export function ModelSelector({ currentModel, onSelect, onCancel, listModels, }) {
|
|
11
|
+
const [models, setModels] = useState([]);
|
|
12
|
+
const [loading, setLoading] = useState(true);
|
|
13
|
+
const [error, setError] = useState(null);
|
|
14
|
+
const [filter, setFilter] = useState('');
|
|
15
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const fetchModels = async () => {
|
|
18
|
+
try {
|
|
19
|
+
const result = await listModels();
|
|
20
|
+
setModels(result);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
setError(err instanceof Error ? err.message : 'Failed to fetch models');
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
setLoading(false);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
fetchModels();
|
|
30
|
+
}, [listModels]);
|
|
31
|
+
// Fuzzy filter models
|
|
32
|
+
const filtered = models.filter((m) => m.id.toLowerCase().includes(filter.toLowerCase()) ||
|
|
33
|
+
m.name.toLowerCase().includes(filter.toLowerCase()));
|
|
34
|
+
// Reset selection when filter changes
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
setSelectedIndex(0);
|
|
37
|
+
}, [filter]);
|
|
38
|
+
// Keyboard navigation
|
|
39
|
+
useInput((input, key) => {
|
|
40
|
+
if (key.upArrow) {
|
|
41
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
42
|
+
}
|
|
43
|
+
else if (key.downArrow) {
|
|
44
|
+
setSelectedIndex((i) => Math.min(filtered.length - 1, i + 1));
|
|
45
|
+
}
|
|
46
|
+
else if (key.return) {
|
|
47
|
+
if (filtered.length > 0) {
|
|
48
|
+
onSelect(filtered[selectedIndex].id);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (key.escape) {
|
|
52
|
+
onCancel();
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
if (loading) {
|
|
56
|
+
return (_jsxs(Box, { children: [_jsx(LoadingSpinner, {}), _jsx(Text, { color: colors.textMuted, children: " Loading models..." })] }));
|
|
57
|
+
}
|
|
58
|
+
if (error) {
|
|
59
|
+
onCancel();
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const maxVisible = 8;
|
|
63
|
+
const startIndex = Math.max(0, Math.min(selectedIndex - Math.floor(maxVisible / 2), filtered.length - maxVisible));
|
|
64
|
+
const visibleModels = filtered.slice(startIndex, startIndex + maxVisible);
|
|
65
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: colors.primary, children: [icons.prompt, " "] }), _jsx(TextInput, { value: filter, onChange: setFilter, placeholder: "Type to filter models..." })] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: visibleModels.length === 0 ? (_jsxs(Text, { color: colors.textMuted, children: ["No models match \"", filter, "\""] })) : (visibleModels.map((m, i) => {
|
|
66
|
+
const actualIndex = startIndex + i;
|
|
67
|
+
const isSelected = actualIndex === selectedIndex;
|
|
68
|
+
const isCurrent = m.id === currentModel;
|
|
69
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? colors.primary : colors.textMuted, children: isSelected ? icons.arrow : ' ' }), _jsx(Text, { color: isSelected ? colors.text : colors.textSecondary, bold: isSelected, children: m.name }), isCurrent && _jsx(Text, { color: colors.success, children: " (current)" })] }, m.id));
|
|
70
|
+
})) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: colors.textMuted, children: [filtered.length, " models \u00B7 \u2191\u2193 navigate \u00B7 Enter select \u00B7 Esc cancel"] }) })] }));
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ModelSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelSelector.js","sourceRoot":"","sources":["../../../src/cli/components/ModelSelector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface SpinnerProps {
|
|
2
|
+
text?: string;
|
|
3
|
+
}
|
|
4
|
+
export declare function ThinkingSpinner({ text }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare function LoadingSpinner({ text }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
/**
|
|
7
|
+
* Progress bar animation for processing state
|
|
8
|
+
* Bouncing ball with trail effect
|
|
9
|
+
*/
|
|
10
|
+
export declare function ProgressBar(): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=Spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../src/cli/components/Spinner.tsx"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAiB,EAAE,EAAE,YAAY,2CAUlE;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAmB,EAAE,EAAE,YAAY,2CASnE;AAED;;;GAGG;AACH,wBAAgB,WAAW,4CAgC1B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Spinner Component - Compact thinking animation (Claude Code style)
|
|
4
|
+
*/
|
|
5
|
+
import { useState, useEffect } from 'react';
|
|
6
|
+
import { Box, Text } from 'ink';
|
|
7
|
+
import InkSpinner from 'ink-spinner';
|
|
8
|
+
import { colors } from './theme.js';
|
|
9
|
+
export function ThinkingSpinner({ text = 'Thinking' }) {
|
|
10
|
+
return (_jsxs(Box, { marginTop: 1, marginBottom: 0, children: [_jsx(Text, { color: colors.brand, children: _jsx(InkSpinner, { type: "dots" }) }), _jsxs(Text, { color: colors.textSecondary, children: [" ", text] }), _jsx(Text, { color: colors.textMuted, children: " \u00B7 ctrl+c to stop" })] }));
|
|
11
|
+
}
|
|
12
|
+
export function LoadingSpinner({ text = 'Loading...' }) {
|
|
13
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: colors.textSecondary, children: _jsx(InkSpinner, { type: "dots" }) }), _jsxs(Text, { color: colors.textMuted, children: [" ", text] })] }));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Progress bar animation for processing state
|
|
17
|
+
* Bouncing ball with trail effect
|
|
18
|
+
*/
|
|
19
|
+
export function ProgressBar() {
|
|
20
|
+
const [frame, setFrame] = useState(0);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const timer = setInterval(() => {
|
|
23
|
+
setFrame((f) => (f + 1) % 14);
|
|
24
|
+
}, 100);
|
|
25
|
+
return () => clearInterval(timer);
|
|
26
|
+
}, []);
|
|
27
|
+
// Bouncing ball animation: ball moves left-right with trail
|
|
28
|
+
const width = 7;
|
|
29
|
+
// Frame 0-6: left to right, 7-13: right to left
|
|
30
|
+
const pos = frame < 7 ? frame : 13 - frame;
|
|
31
|
+
let bar = '';
|
|
32
|
+
for (let i = 0; i < width; i++) {
|
|
33
|
+
if (i === pos) {
|
|
34
|
+
bar += '●';
|
|
35
|
+
}
|
|
36
|
+
else if (i === pos - 1 || i === pos + 1) {
|
|
37
|
+
bar += '○';
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
bar += '·';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: colors.brand, children: bar }), _jsx(Text, { color: colors.textMuted, children: " esc to stop" })] }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=Spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../src/cli/components/Spinner.tsx"],"names":[],"mappings":";AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMpC,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,GAAG,UAAU,EAAgB;IACjE,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aAChC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YACvB,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,GAAG,GACrB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,aAAa,kBAAI,IAAI,IAAQ,EACjD,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,uCAA0B,IACnD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,GAAG,YAAY,EAAgB;IAClE,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,aAAa,YAC/B,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,GAAG,GACrB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,kBAAI,IAAI,IAAQ,IACzC,CACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,4DAA4D;IAC5D,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,gDAAgD;IAChD,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC;IAE3C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,GAAG,IAAI,GAAG,CAAC;QACb,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1C,GAAG,IAAI,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,GAAG,GAAQ,EACvC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,6BAAqB,IAC9C,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ink Components Index
|
|
3
|
+
*/
|
|
4
|
+
export { App } from './App.js';
|
|
5
|
+
export { Header, Welcome } from './Header.js';
|
|
6
|
+
export { UserMessage, AssistantMessage, ToolCall, ToolResult, InfoMessage, Separator, WelcomeMessage, ShortcutsHint, CompletionMessage, } from './Messages.js';
|
|
7
|
+
export { ThinkingSpinner, LoadingSpinner, ProgressBar } from './Spinner.js';
|
|
8
|
+
export { PromptInput, ConfirmPrompt } from './Input.js';
|
|
9
|
+
export { colors, icons } from './theme.js';
|
|
10
|
+
export { ModelSelector } from './ModelSelector.js';
|
|
11
|
+
export { CommandSuggestions, COMMANDS, getFilteredCommands } from './CommandSuggestions.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ink Components Index
|
|
3
|
+
*/
|
|
4
|
+
export { App } from './App.js';
|
|
5
|
+
export { Header, Welcome } from './Header.js';
|
|
6
|
+
export { UserMessage, AssistantMessage, ToolCall, ToolResult, InfoMessage, Separator, WelcomeMessage, ShortcutsHint, CompletionMessage, } from './Messages.js';
|
|
7
|
+
export { ThinkingSpinner, LoadingSpinner, ProgressBar } from './Spinner.js';
|
|
8
|
+
export { PromptInput, ConfirmPrompt } from './Input.js';
|
|
9
|
+
export { colors, icons } from './theme.js';
|
|
10
|
+
export { ModelSelector } from './ModelSelector.js';
|
|
11
|
+
export { CommandSuggestions, COMMANDS, getFilteredCommands } from './CommandSuggestions.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Configuration - Claude Code inspired
|
|
3
|
+
*/
|
|
4
|
+
export declare const colors: {
|
|
5
|
+
brand: string;
|
|
6
|
+
brandLight: string;
|
|
7
|
+
primary: string;
|
|
8
|
+
success: string;
|
|
9
|
+
warning: string;
|
|
10
|
+
error: string;
|
|
11
|
+
info: string;
|
|
12
|
+
text: string;
|
|
13
|
+
textSecondary: string;
|
|
14
|
+
textMuted: string;
|
|
15
|
+
tool: string;
|
|
16
|
+
separator: string;
|
|
17
|
+
};
|
|
18
|
+
export declare const icons: {
|
|
19
|
+
userPrompt: string;
|
|
20
|
+
assistant: string;
|
|
21
|
+
prompt: string;
|
|
22
|
+
success: string;
|
|
23
|
+
error: string;
|
|
24
|
+
warning: string;
|
|
25
|
+
info: string;
|
|
26
|
+
tool: string;
|
|
27
|
+
arrow: string;
|
|
28
|
+
thinking: string;
|
|
29
|
+
cursor: string;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/cli/components/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;CAalB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;CAiBjB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Configuration - Claude Code inspired
|
|
3
|
+
*/
|
|
4
|
+
export const colors = {
|
|
5
|
+
brand: '#818CF8', // Indigo 400
|
|
6
|
+
brandLight: '#A5B4FC', // Indigo 300
|
|
7
|
+
primary: '#818CF8',
|
|
8
|
+
success: '#34D399', // Emerald 400
|
|
9
|
+
warning: '#FBBF24', // Amber 400
|
|
10
|
+
error: '#F87171', // Red 400
|
|
11
|
+
info: '#60A5FA', // Blue 400
|
|
12
|
+
text: '#F1F5F9', // Slate 100
|
|
13
|
+
textSecondary: '#94A3B8', // Slate 400
|
|
14
|
+
textMuted: '#64748B', // Slate 500
|
|
15
|
+
tool: '#C084FC', // Purple 400
|
|
16
|
+
separator: '#1E293B', // Slate 800
|
|
17
|
+
};
|
|
18
|
+
export const icons = {
|
|
19
|
+
// Message prefixes (Claude Code style)
|
|
20
|
+
userPrompt: '❯', // Chevron for user input
|
|
21
|
+
assistant: '●', // Filled circle for assistant
|
|
22
|
+
// Prompt
|
|
23
|
+
prompt: '❯',
|
|
24
|
+
// Status
|
|
25
|
+
success: '✔',
|
|
26
|
+
error: '✖',
|
|
27
|
+
warning: '⚠',
|
|
28
|
+
info: 'ℹ',
|
|
29
|
+
// Tools
|
|
30
|
+
tool: '⚡', // Lightning for tools
|
|
31
|
+
arrow: '→',
|
|
32
|
+
// UI
|
|
33
|
+
thinking: '✱', // Star for thinking state
|
|
34
|
+
cursor: '▋',
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/cli/components/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,SAAS,EAAE,aAAa;IAC/B,UAAU,EAAE,SAAS,EAAE,aAAa;IACpC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS,EAAE,cAAc;IAClC,OAAO,EAAE,SAAS,EAAE,YAAY;IAChC,KAAK,EAAE,SAAS,EAAE,UAAU;IAC5B,IAAI,EAAE,SAAS,EAAE,WAAW;IAC5B,IAAI,EAAE,SAAS,EAAE,YAAY;IAC7B,aAAa,EAAE,SAAS,EAAE,YAAY;IACtC,SAAS,EAAE,SAAS,EAAE,YAAY;IAClC,IAAI,EAAE,SAAS,EAAE,aAAa;IAC9B,SAAS,EAAE,SAAS,EAAE,YAAY;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,uCAAuC;IACvC,UAAU,EAAE,GAAG,EAAE,yBAAyB;IAC1C,SAAS,EAAE,GAAG,EAAE,8BAA8B;IAC9C,SAAS;IACT,MAAM,EAAE,GAAG;IACX,SAAS;IACT,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,QAAQ;IACR,IAAI,EAAE,GAAG,EAAE,sBAAsB;IACjC,KAAK,EAAE,GAAG;IACV,KAAK;IACL,QAAQ,EAAE,GAAG,EAAE,0BAA0B;IACzC,MAAM,EAAE,GAAG;CACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy.d.ts","sourceRoot":"","sources":["../../src/cli/index-legacy.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC"}
|