ask-cli-ai 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/dist/app.js +9 -3
- package/dist/commands/ask.js +70 -41
- package/dist/commands/config.js +6 -10
- package/dist/commands/connect.js +112 -0
- package/dist/commands/selectModel.js +11 -17
- package/dist/components/command.js +9 -6
- package/dist/components/commands.js +3 -3
- package/dist/components/provider.js +81 -22
- package/dist/components/providers.js +21 -19
- package/dist/components/selectModel.js +62 -26
- package/dist/components/testProvider.js +14 -0
- package/dist/components/textField.js +7 -29
- package/dist/components/textInput.js +136 -0
- package/dist/components/welcome.js +3 -9
- package/dist/hooks/useExit.js +17 -0
- package/dist/hooks/useField.js +20 -0
- package/dist/hooks/useTestProvider.js +63 -0
- package/dist/install.js +5 -2
- package/dist/migrations/1-settings-1.1.0.js +56 -0
- package/dist/migrations/2-add-providers-1.2.0.js +60 -0
- package/dist/stores/config.js +35 -6
- package/dist/templates/instructions.js +5 -4
- package/dist/utils/defaultConfig.js +41 -13
- package/dist/utils/validateUrl.js +10 -0
- package/package.json +74 -72
- package/dist/components/apiKeyField.js +0 -8
- package/dist/migrations/settings-1.1.0.js +0 -23
- package/dist/providers.js +0 -35
|
@@ -8,7 +8,7 @@ export function Commands(props) {
|
|
|
8
8
|
setInputEvent({ input, key });
|
|
9
9
|
});
|
|
10
10
|
const children = Children.map(props.children, child => child);
|
|
11
|
-
return (_jsx(CommandContext.Provider, { value: inputEvent, children: _jsxs(Box, { marginTop: 1, gap: 1, children: [children.filter(child => child.props.title).map((child, index, children) => _jsxs(Box, { children: [child, index !== children.length - 1 &&
|
|
12
|
-
_jsx(Text, { color: 'gray', children: "," })] }, index)), children.filter(child => !child.props.title).map((child) => child)] }) }));
|
|
11
|
+
return (_jsx(CommandContext.Provider, { value: inputEvent, children: _jsxs(Box, { marginTop: 1, gap: 1, children: [children.filter(child => child.props.title && !child.props.hidden).map((child, index, children) => _jsxs(Box, { children: [child, index !== children.length - 1 &&
|
|
12
|
+
_jsx(Text, { color: 'gray', children: "," })] }, index)), children.filter(child => !child.props.title || child.props.hidden).map((child) => child)] }) }));
|
|
13
13
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9jb21tYW5kcy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQU8sSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBS3hFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQXlCLFNBQVMsQ0FBQyxDQUFDO0FBTS9FLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBWTtJQUVuQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsRUFBYyxDQUFDO0lBRTNELFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN0QixhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlELE9BQU8sQ0FDTCxLQUFDLGNBQWMsQ0FBQyxRQUFRLElBQUMsS0FBSyxFQUFFLFVBQVUsWUFDeEMsTUFBQyxHQUFHLElBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDakcsTUFBQyxHQUFHLGVBQ0QsS0FBSyxFQUNMLEtBQUssS0FBSyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7NEJBQzVCLEtBQUMsSUFBSSxJQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFTLEtBSHJCLEtBQUssQ0FLVCxDQUNQLEVBQ0EsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNoRixLQUFLLENBQ04sSUFDRyxHQUNrQixDQUMzQixDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -1,41 +1,100 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from 'ink';
|
|
3
|
-
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Fragment, useEffect, useState } from 'react';
|
|
4
4
|
import { configStore } from "../stores/config.js";
|
|
5
|
-
import { ApiKeyField } from "./apiKeyField.js";
|
|
6
5
|
import { Commands } from "./commands.js";
|
|
7
6
|
import { Command } from "./command.js";
|
|
8
|
-
|
|
7
|
+
import { TextField } from "./textField.js";
|
|
8
|
+
import { validateUrl } from "../utils/validateUrl.js";
|
|
9
|
+
import { useField } from "../hooks/useField.js";
|
|
10
|
+
import { useExit } from "../hooks/useExit.js";
|
|
11
|
+
import { useTestProvider } from "../hooks/useTestProvider.js";
|
|
12
|
+
import { TestProvider } from "./testProvider.js";
|
|
9
13
|
export function Provider(props) {
|
|
10
14
|
const { provider, onClose } = props;
|
|
11
|
-
const [apiKey, setApiKey] = useState(config?.providers[provider.id]?.apiKey ?? '');
|
|
12
|
-
const [exit, setExit] = useState(false);
|
|
13
15
|
const [saved, setSaved] = useState(false);
|
|
16
|
+
const [focusIndex, setFocusIndex] = useState(0);
|
|
17
|
+
const [name, setName] = useState(provider.name);
|
|
18
|
+
const [exit, setExit] = useExit();
|
|
19
|
+
const nameField = useField({ value: provider.name });
|
|
20
|
+
const urlField = useField({ value: provider.url ?? '' });
|
|
21
|
+
const apiKeyField = useField({ value: provider.key ?? '' });
|
|
22
|
+
const testProvider = useTestProvider();
|
|
14
23
|
useEffect(() => {
|
|
15
|
-
|
|
16
|
-
const config = await configStore.get();
|
|
17
|
-
setApiKey(config?.providers[provider.id]?.apiKey ?? '');
|
|
18
|
-
})();
|
|
24
|
+
updateFocus(0);
|
|
19
25
|
}, []);
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
if (exit) {
|
|
22
|
-
setTimeout(() => process.exit(), 0);
|
|
23
|
-
}
|
|
24
|
-
}, [exit]);
|
|
25
|
-
async function handleSave() {
|
|
26
|
-
await configStore.setProviderApiKey(provider.id, apiKey);
|
|
27
|
-
setSaved(true);
|
|
28
|
-
setTimeout(() => setSaved(false), 800);
|
|
29
|
-
}
|
|
30
26
|
function handleExit() {
|
|
31
27
|
setExit(true);
|
|
32
28
|
}
|
|
33
29
|
function handleGoBack() {
|
|
34
30
|
onClose();
|
|
35
31
|
}
|
|
32
|
+
function handleUp() {
|
|
33
|
+
updateFocus(focusIndex - 1);
|
|
34
|
+
}
|
|
35
|
+
function handleDown() {
|
|
36
|
+
updateFocus(focusIndex + 1);
|
|
37
|
+
}
|
|
38
|
+
async function handleDelete() {
|
|
39
|
+
await configStore.deleteProvider(provider.id);
|
|
40
|
+
handleGoBack();
|
|
41
|
+
}
|
|
42
|
+
async function handleSave() {
|
|
43
|
+
setSaved(false);
|
|
44
|
+
if (!validate() || !await test())
|
|
45
|
+
return;
|
|
46
|
+
if (provider.type === 'openai-compatible') {
|
|
47
|
+
await configStore.updateProvider(provider.id, {
|
|
48
|
+
key: apiKeyField.value,
|
|
49
|
+
name: nameField.value,
|
|
50
|
+
url: urlField.value
|
|
51
|
+
});
|
|
52
|
+
setName(nameField.value);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
await configStore.updateProvider(provider.id, {
|
|
56
|
+
key: apiKeyField.value
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
setSaved(true);
|
|
60
|
+
}
|
|
61
|
+
function validate() {
|
|
62
|
+
let valid = true;
|
|
63
|
+
nameField.error = undefined;
|
|
64
|
+
urlField.error = undefined;
|
|
65
|
+
if (provider.type === 'openai-compatible') {
|
|
66
|
+
if (!nameField.value.trim()) {
|
|
67
|
+
nameField.error = 'Required';
|
|
68
|
+
valid = false;
|
|
69
|
+
}
|
|
70
|
+
if (!urlField.value.trim()) {
|
|
71
|
+
urlField.error = 'Required';
|
|
72
|
+
valid = false;
|
|
73
|
+
}
|
|
74
|
+
if (urlField.value.trim() && !validateUrl(urlField.value)) {
|
|
75
|
+
urlField.error = 'Invalid';
|
|
76
|
+
valid = false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return valid;
|
|
80
|
+
}
|
|
81
|
+
async function test() {
|
|
82
|
+
return testProvider.test({ type: provider.type, key: apiKeyField.value, url: urlField.value });
|
|
83
|
+
}
|
|
84
|
+
function updateFocus(index) {
|
|
85
|
+
const fields = provider.type === 'openai-compatible'
|
|
86
|
+
? [nameField, urlField, apiKeyField]
|
|
87
|
+
: [apiKeyField];
|
|
88
|
+
const focusIndex = Math.min(Math.max(index, 0), fields.length - 1);
|
|
89
|
+
for (let i = 0; i < fields.length; i++) {
|
|
90
|
+
fields[i].focus = i === focusIndex;
|
|
91
|
+
}
|
|
92
|
+
setFocusIndex(focusIndex);
|
|
93
|
+
}
|
|
36
94
|
if (exit)
|
|
37
95
|
return null;
|
|
38
|
-
return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(
|
|
39
|
-
_jsx(
|
|
96
|
+
return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(Text, { color: 'whiteBright', bold: true, children: name }), _jsxs(Box, { flexDirection: 'column', gap: 1, marginTop: 1, children: [provider.type === 'openai-compatible' &&
|
|
97
|
+
_jsxs(Fragment, { children: [_jsx(TextField, { label: 'Name', placeholder: 'Provider name', focus: nameField.focus, value: nameField.value, onChange: value => nameField.change(value) }), _jsx(TextField, { label: 'API url', placeholder: 'OpenAI-compatible API URL', focus: urlField.focus, value: urlField.value, onChange: value => urlField.change(value) })] }), _jsx(TextField, { label: 'API key', placeholder: 'API key (optional)', focus: apiKeyField.focus, value: apiKeyField.value, onChange: value => apiKeyField.change(value) })] }), _jsx(TestProvider, { type: provider.type, testing: testProvider.testing, error: testProvider.error }), !testProvider.testing && saved &&
|
|
98
|
+
_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: 'blueBright', children: "\u00A1Provider updated!" }) }), _jsx(Box, { flexDirection: 'row', gap: 1, children: _jsxs(Commands, { children: [_jsx(Command, { title: 'Esc (Exit)', esc: true, onPress: handleExit }), _jsx(Command, { title: 'Up/Down (Navigation)', up: true, down: true, anyKey: true, hidden: provider.type !== 'openai-compatible' }), _jsx(Command, { title: 'Ctrl+B (Go Back)', ctrl: true, inputKey: 'b', onPress: handleGoBack }), _jsx(Command, { title: 'Ctrl+D (Delete)', ctrl: true, inputKey: 'd', hidden: provider.type !== 'openai-compatible', onPress: handleDelete }), _jsx(Command, { title: 'Ctrl+S (Save)', ctrl: true, inputKey: 's', onPress: handleSave }), _jsx(Command, { tab: true, onPress: handleDown }), _jsx(Command, { up: true, onPress: handleUp }), _jsx(Command, { down: true, onPress: handleDown })] }) })] }));
|
|
40
99
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9wcm92aWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBb0IsQ0FBQztBQU9sRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVk7SUFFbkMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFcEMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FB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
|
|
@@ -2,42 +2,44 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { measureElement, Box, Text } from 'ink';
|
|
3
3
|
import { ScrollList } from 'ink-scroll-list';
|
|
4
4
|
import { useState, useRef, useMemo, useEffect } from 'react';
|
|
5
|
-
import { providers as providerList } from "../providers.js";
|
|
6
5
|
import { Commands } from "./commands.js";
|
|
7
6
|
import { Command } from "./command.js";
|
|
7
|
+
import { configStore } from "../stores/config.js";
|
|
8
|
+
import { useExit } from "../hooks/useExit.js";
|
|
9
|
+
const config = await configStore.get();
|
|
8
10
|
export function Providers(props) {
|
|
9
11
|
const { onSelect } = props;
|
|
10
|
-
const [visible, setVisible] = useState(true);
|
|
11
12
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
12
|
-
const [scrollListHeight, setScrollListHeight] = useState();
|
|
13
|
-
const [
|
|
13
|
+
const [scrollListHeight, setScrollListHeight] = useState(0);
|
|
14
|
+
const [providers, setProviders] = useState(Object.values(config.providers));
|
|
15
|
+
const [exit, setExit] = useExit();
|
|
14
16
|
const contentRef = useRef(null);
|
|
15
17
|
const height = useMemo(() => process.stdout.rows - 2, []);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
void (async () => {
|
|
20
|
+
const config = await configStore.get();
|
|
21
|
+
setProviders(Object.values(config.providers));
|
|
22
|
+
})();
|
|
23
|
+
}, []);
|
|
16
24
|
useEffect(() => {
|
|
17
25
|
const contentSize = measureElement(contentRef.current);
|
|
18
|
-
const scrollListHeight = height - contentSize.height;
|
|
19
|
-
setScrollListHeight(
|
|
26
|
+
const scrollListHeight = Math.min(height - contentSize.height, 20);
|
|
27
|
+
setScrollListHeight(providers.length > scrollListHeight ? scrollListHeight : undefined);
|
|
20
28
|
}, [height]);
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (event === 'exit') {
|
|
23
|
-
process.exit();
|
|
24
|
-
}
|
|
25
|
-
}, [event]);
|
|
26
29
|
function handleExit() {
|
|
27
|
-
|
|
28
|
-
setEvent('exit');
|
|
30
|
+
setExit(true);
|
|
29
31
|
}
|
|
30
32
|
function handleUp() {
|
|
31
|
-
setCurrentIndex((index) =>
|
|
33
|
+
setCurrentIndex((index) => Math.max(0, index - 1));
|
|
32
34
|
}
|
|
33
35
|
function handleDown() {
|
|
34
|
-
setCurrentIndex((index) =>
|
|
36
|
+
setCurrentIndex((index) => Math.min(providers.length - 1, index + 1));
|
|
35
37
|
}
|
|
36
38
|
function handleSelect() {
|
|
37
|
-
onSelect(
|
|
39
|
+
onSelect(providers[currentIndex]);
|
|
38
40
|
}
|
|
39
|
-
if (
|
|
41
|
+
if (exit)
|
|
40
42
|
return null;
|
|
41
|
-
return (_jsx(Box, { flexDirection: 'column', children: _jsxs(Box, { flexDirection: 'column', ref: contentRef, children: [_jsx(Text, { bold: true, children: "Providers" }), _jsx(Box, {
|
|
43
|
+
return (_jsx(Box, { flexDirection: 'column', children: _jsxs(Box, { flexDirection: 'column', ref: contentRef, children: [_jsx(Text, { color: 'whiteBright', bold: true, children: "Providers" }), _jsx(Box, { borderStyle: 'single', borderColor: 'cyan', borderTop: false, borderRight: false, borderBottom: false, paddingLeft: 1, marginTop: 1, children: _jsx(ScrollList, { height: scrollListHeight, selectedIndex: currentIndex, children: providers.map((provider, index) => (_jsx(Text, { color: index === currentIndex ? 'cyanBright' : undefined, inverse: index === currentIndex, children: provider.name }, provider.id))) }) }), _jsxs(Commands, { children: [_jsx(Command, { title: 'Esc (Exit)', esc: true, onPress: handleExit }), _jsx(Command, { title: 'Enter (Select)', enter: true, onPress: handleSelect }), _jsx(Command, { up: true, onPress: handleUp }), _jsx(Command, { down: true, onPress: handleDown })] })] }) }));
|
|
42
44
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvcHJvdmlkZXJzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFjLE1BQU0sS0FBSyxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQU12QyxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVk7SUFFcEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUUzQixNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxRQUFRLENBQXFCLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFhLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUVsQyxNQUFNLFVBQVUs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
|
|
@@ -3,14 +3,18 @@ import { measureElement, Box, Text } from 'ink';
|
|
|
3
3
|
import { useState, useRef, useMemo, useEffect } from 'react';
|
|
4
4
|
import { ScrollView } from 'ink-scroll-view';
|
|
5
5
|
import { Fragment } from 'react/jsx-runtime';
|
|
6
|
-
import { providers } from "../providers.js";
|
|
7
6
|
import { configStore } from "../stores/config.js";
|
|
8
|
-
import { ApiKeyField } from "./apiKeyField.js";
|
|
9
7
|
import { Commands } from "./commands.js";
|
|
10
8
|
import { Command } from "./command.js";
|
|
9
|
+
import { OpenAIClient } from '@langchain/openai';
|
|
10
|
+
import { TextField } from "./textField.js";
|
|
11
|
+
import { useExit } from "../hooks/useExit.js";
|
|
12
|
+
import { useTestProvider } from "../hooks/useTestProvider.js";
|
|
13
|
+
import { TestProvider } from "./testProvider.js";
|
|
11
14
|
const config = await configStore.get();
|
|
12
15
|
export function SelectModel(props) {
|
|
13
16
|
const { onSelect } = props;
|
|
17
|
+
const [providers, setProviders] = useState(Object.values(config.providers));
|
|
14
18
|
const [view, setView] = useState('select-model');
|
|
15
19
|
const [currentPosition, setCurrentPosition] = useState(0);
|
|
16
20
|
const [scrollViewHeight, setScrollViewHeight] = useState(0);
|
|
@@ -19,37 +23,65 @@ export function SelectModel(props) {
|
|
|
19
23
|
const [apiKey, setApiKey] = useState('');
|
|
20
24
|
const [startPosition, setStartPosition] = useState(0);
|
|
21
25
|
const [endPosition, setEndPosition] = useState(0);
|
|
26
|
+
const [exit, setExit] = useExit();
|
|
27
|
+
const testProvider = useTestProvider();
|
|
22
28
|
const scrollRef = useRef(null);
|
|
23
29
|
const contentRef = useRef(null);
|
|
24
30
|
const items = useMemo(() => {
|
|
25
31
|
const items = [];
|
|
26
|
-
const
|
|
27
|
-
|
|
32
|
+
const provider = providers.find(provider => config.model?.providerId === provider.id);
|
|
33
|
+
const selectedModel = provider?.models.find(m => m.id === config.model?.id);
|
|
34
|
+
if (provider && selectedModel) {
|
|
28
35
|
items.push({ type: 'provider', key: 'selected-model-title', provider: 'Selected model' });
|
|
29
|
-
items.push({ type: 'model', key: 'selected-model', model: selectedModel });
|
|
36
|
+
items.push({ type: 'model', key: 'selected-model', provider, model: selectedModel });
|
|
30
37
|
items.push({ type: 'new-line', key: 'selected-model-newline' });
|
|
31
38
|
}
|
|
32
39
|
for (const provider of providers) {
|
|
33
|
-
items.push({ type: 'provider', key: provider.
|
|
40
|
+
items.push({ type: 'provider', key: provider.id, provider: provider.name });
|
|
41
|
+
if (provider.models.length === 0) {
|
|
42
|
+
items.push({ type: 'models-not-found', key: `${provider.id}-no-models`, title: 'No models available' });
|
|
43
|
+
}
|
|
34
44
|
for (const model of provider.models) {
|
|
35
|
-
items.push({ type: 'model', key: model.
|
|
45
|
+
items.push({ type: 'model', key: `${provider.id}-${model.id}`, provider, model: model });
|
|
36
46
|
}
|
|
37
|
-
items.push({ type: 'new-line', key: `${provider.
|
|
47
|
+
items.push({ type: 'new-line', key: `${provider.id}-newline` });
|
|
38
48
|
}
|
|
39
49
|
return items;
|
|
40
|
-
}, []);
|
|
50
|
+
}, [providers]);
|
|
41
51
|
useEffect(() => {
|
|
42
52
|
const height = process.stdout.rows - 2;
|
|
43
53
|
const contentSize = measureElement(contentRef.current);
|
|
44
|
-
const scrollViewHeight = height - contentSize.height;
|
|
54
|
+
const scrollViewHeight = Math.min(height - contentSize.height, 20);
|
|
45
55
|
setScrollViewHeight(scrollViewHeight);
|
|
46
56
|
setEndPosition(scrollViewHeight - 1);
|
|
47
57
|
}, []);
|
|
48
58
|
useEffect(() => {
|
|
49
59
|
setCurrentPosition(items.findIndex(item => item.type === 'model'));
|
|
50
60
|
}, [items]);
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
void (async () => {
|
|
63
|
+
const providers = Object
|
|
64
|
+
.values(config.providers)
|
|
65
|
+
.filter(provider => provider.type === 'openai-compatible');
|
|
66
|
+
await Promise.allSettled(providers.map(async (provider) => {
|
|
67
|
+
const client = new OpenAIClient({
|
|
68
|
+
baseURL: provider.url,
|
|
69
|
+
apiKey: provider.key,
|
|
70
|
+
});
|
|
71
|
+
const models = await client.models.list();
|
|
72
|
+
await configStore.updateProvider(provider.id, {
|
|
73
|
+
models: models.data.map(model => ({
|
|
74
|
+
id: model.id,
|
|
75
|
+
name: model.id
|
|
76
|
+
}))
|
|
77
|
+
});
|
|
78
|
+
}));
|
|
79
|
+
const configUpdated = await configStore.get();
|
|
80
|
+
setProviders(Object.values(configUpdated.providers));
|
|
81
|
+
})();
|
|
82
|
+
}, []);
|
|
51
83
|
function handleExit() {
|
|
52
|
-
|
|
84
|
+
setExit(true);
|
|
53
85
|
}
|
|
54
86
|
function handleUp() {
|
|
55
87
|
const previousModelItemIndex = items.findLastIndex((item, index) => item.type === 'model' && index < currentPosition);
|
|
@@ -77,32 +109,36 @@ export function SelectModel(props) {
|
|
|
77
109
|
setEndPosition(position);
|
|
78
110
|
}
|
|
79
111
|
}
|
|
80
|
-
|
|
81
|
-
const model = items[currentPosition]
|
|
82
|
-
const provider = providers.find(provider => provider.models.some(item => item.name === model.name));
|
|
83
|
-
const config = await configStore.get();
|
|
84
|
-
const apikey = config.providers[provider.id].apiKey;
|
|
112
|
+
function handleSelectModel() {
|
|
113
|
+
const { provider, model } = items[currentPosition];
|
|
85
114
|
setProvider(provider);
|
|
86
115
|
setModel(model);
|
|
87
|
-
if (!
|
|
116
|
+
if (provider.type !== 'openai-compatible' && !provider.key) {
|
|
88
117
|
setView('set-api-key');
|
|
89
118
|
return;
|
|
90
119
|
}
|
|
91
|
-
void save(provider, model,
|
|
120
|
+
void save(provider, model, provider.key ?? '');
|
|
92
121
|
}
|
|
93
|
-
function handleSaveApiKey() {
|
|
94
|
-
|
|
122
|
+
async function handleSaveApiKey() {
|
|
123
|
+
const isValid = await testProvider.test({ ...provider, key: apiKey });
|
|
124
|
+
if (isValid) {
|
|
125
|
+
void save(provider, model, apiKey);
|
|
126
|
+
}
|
|
95
127
|
}
|
|
96
128
|
async function save(provider, model, apikey) {
|
|
97
129
|
await configStore.setProviderApiKey(provider.id, apikey);
|
|
98
|
-
await configStore.setModel(provider.id, model.
|
|
99
|
-
onSelect(
|
|
130
|
+
await configStore.setModel(provider.id, model.id);
|
|
131
|
+
onSelect(provider, model);
|
|
100
132
|
}
|
|
133
|
+
if (exit)
|
|
134
|
+
return null;
|
|
101
135
|
return (_jsxs(Box, { children: [view === 'select-model' &&
|
|
102
|
-
_jsxs(Box, { ref: contentRef, flexDirection: 'column', children: [_jsx(Text, { bold: true, children: "Select
|
|
136
|
+
_jsxs(Box, { ref: contentRef, flexDirection: 'column', children: [_jsx(Text, { color: 'whiteBright', bold: true, children: "Select Model" }), _jsx(Box, { flexDirection: 'column', height: scrollViewHeight < items.length ? scrollViewHeight : undefined, borderStyle: 'single', borderLeftColor: 'cyan', borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, marginTop: 1, paddingLeft: 1, children: _jsx(ScrollView, { ref: scrollRef, children: items.map((item, index) => _jsxs(Fragment, { children: [item.type === 'provider' &&
|
|
103
137
|
_jsx(Text, { bold: true, color: 'blue', children: item.provider }, item.provider), item.type === 'model' &&
|
|
104
|
-
|
|
138
|
+
_jsxs(Text, { color: index === currentPosition ? 'cyanBright' : undefined, inverse: index === currentPosition, children: [item.key === 'selected-model' && `(${item.provider.name}) `, item.model.name] }, item.model.id), item.type === 'models-not-found' &&
|
|
139
|
+
_jsx(Text, { dimColor: true, color: 'gray', children: item.title }), item.type === 'new-line' &&
|
|
105
140
|
_jsx(Text, { children: " " })] }, item.key)) }) }), _jsxs(Commands, { children: [_jsx(Command, { title: 'Esc (Exit)', esc: true, onPress: handleExit }), _jsx(Command, { title: 'Enter (Select)', enter: true, onPress: handleSelectModel }), _jsx(Command, { up: true, onPress: handleUp }), _jsx(Command, { down: true, onPress: handleDown })] })] }), view === 'set-api-key' &&
|
|
106
|
-
_jsxs(Box, { flexDirection: 'column', children: [
|
|
141
|
+
_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'whiteBright', bold: true, children: ["Enter ", provider?.name, " api key"] }), _jsx(Box, { marginTop: 1, children: _jsx(TextField, { label: 'Api key', focus: true, value: apiKey, placeholder: 'Enter api key', onChange: setApiKey }) }), provider &&
|
|
142
|
+
_jsx(TestProvider, { type: provider.type, testing: testProvider.testing, error: testProvider.error }), _jsxs(Commands, { children: [_jsx(Command, { title: 'Esc (Exit)', esc: true, onPress: handleExit }), _jsx(Command, { title: 'Ctrl+V (Paste)', ctrl: true, inputKey: 'v' }), _jsx(Command, { title: 'Enter (Save)', enter: true, onPress: handleSaveApiKey }), _jsx(Command, { ctrl: true, inputKey: 's', onPress: handleSaveApiKey })] })] })] }));
|
|
107
143
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0TW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9zZWxlY3RNb2RlbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBYyxNQUFNLEtBQUssQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFPLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLE9BQU8sRUFBaUIsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFlLENBQUM7QUFPeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7QUFNdkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFZO0lBRXRDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFM0IsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQWlDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxFQUFTLENBQUM7SUFDNUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxRQUFRLEVBQVksQ0FBQztJQUNyRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFFOUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFhLElBQUksQ0FBQyxDQUFDO0lBRTVDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFFekIsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBRXpCLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9HLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDMUYsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNwQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBUSxDQUFDLENBQUM7UUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNyRCxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RDLGNBQWMsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRVosU0FBUyxVQUFVO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQVMsUUFBUTtRQUVmLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQztRQUN0SCxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztRQUUxRixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3QixJQUFJLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztZQUM3QixTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDdEQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsY0FBYyxDQUFDLFFBQVEsR0FBRyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDakMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsY0FBYyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxVQUFVO1FBRWpCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQztRQUM3RyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUVsRixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3QixJQUFJLFFBQVEsR0FBRyxXQUFXLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUQsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3BELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxVQUFVLGlCQUFpQjtRQUU5QixNQUFNLEtBQUssR0FBSSxLQUFLLENBQUMsZUFBZSxDQUFlLENBQUMsS0FBSyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXJELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsS0FBSyxJQUFJLENBQUMsUUFBUyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsU0FBUyxnQkFBZ0I7UUFDdkIsS0FBSyxJQUFJLENBQUMsUUFBUyxFQUFFLEtBQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxVQUFVLElBQUksQ0FBQyxRQUFrQixFQUFFLEtBQVksRUFBRSxNQUFjO1FBQ2xFLE1BQU0sV0FBVyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELE9BQU8sQ0FDTCxNQUFDLEdBQUcsZUFDRCxJQUFJLEtBQUssY0FBYztnQkFDdEIsTUFBQyxHQUFHLElBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUMsUUFBUSxhQUMxQyxLQUFDLElBQUksSUFBQyxJQUFJLHFDQUFzQixFQUNoQyxLQUFDLEdBQUcsSUFDRixhQUFhLEVBQUMsUUFBUSxFQUN0QixNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDdEUsV0FBVyxFQUFDLFFBQVEsRUFDcEIsZUFBZSxFQUFDLE1BQU0sRUFDdEIsVUFBVSxFQUFFLElBQUksRUFDaEIsV0FBVyxFQUFFLEtBQUssRUFDbEIsU0FBUyxFQUFFLEtBQUssRUFDaEIsWUFBWSxFQUFFLEtBQUssRUFDbkIsU0FBUyxFQUFFLENBQUMsRUFDWixXQUFXLEVBQUUsQ0FBQyxZQUNkLEtBQUMsVUFBVSxJQUFDLEdBQUcsRUFBRSxTQUFTLFlBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDekIsTUFBQyxRQUFRLGVBQ04sSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVOzRDQUN2QixLQUFDLElBQUksSUFBcUIsSUFBSSxRQUFDLEtBQUssRUFBQyxNQUFNLFlBQUUsSUFBSSxDQUFDLFFBQVEsSUFBL0MsSUFBSSxDQUFDLFFBQVEsQ0FBMEMsRUFFbkUsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPOzRDQUNwQixLQUFDLElBQUksSUFFSCxLQUFLLEVBQUUsS0FBSyxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQzNELE9BQU8sRUFBRSxLQUFLLEtBQUssZUFBZSxZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFIWixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FJZixFQUVSLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVTs0Q0FDdkIsS0FBQyxJQUFJLG9CQUFTLEtBYkgsSUFBSSxDQUFDLEdBQUcsQ0FlWixDQUNaLEdBQ1UsR0FDVCxFQUNOLE1BQUMsUUFBUSxlQUNQLEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsR0FBRyxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsRUFDdEQsS0FBQyxPQUFPLElBQUMsS0FBSyxFQUFDLGdCQUFnQixFQUFDLEtBQUssUUFBQyxPQUFPLEVBQUUsaUJBQWlCLEdBQUcsRUFDbkUsS0FBQyxPQUFPLElBQUMsRUFBRSxRQUFDLE9BQU8sRUFBRSxRQUFRLEdBQUksRUFDakMsS0FBQyxPQUFPLElBQUMsSUFBSSxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUksSUFDNUIsSUFDUCxFQUVQLElBQUksS0FBSyxhQUFhO2dCQUNyQixNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsUUFBUSxhQUN6QixLQUFDLFdBQVcsSUFDVixLQUFLLEVBQUUsR0FBRyxRQUFRLEVBQUUsSUFBSSxVQUFVLEVBQ2xDLEtBQUssRUFBRSxNQUFNLEVBQ2IsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUN4QixNQUFDLFFBQVEsZUFDUCxLQUFDLE9BQU8sSUFBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEdBQUcsUUFBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLEVBQ3RELEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxnQkFBZ0IsRUFBQyxJQUFJLFFBQUMsUUFBUSxFQUFDLEdBQUcsR0FBRSxFQUNuRCxLQUFDLE9BQU8sSUFBQyxLQUFLLEVBQUMsY0FBYyxFQUFDLEtBQUssUUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEdBQUcsSUFDdkQsSUFDUCxJQUVKLENBQ1AsQ0FBQztBQUNKLENBQUMifQ==
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0TW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9zZWxlY3RNb2RlbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBYyxNQUFNLEtBQUssQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFPLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLE9BQU8sRUFBaUIsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW9CLENBQUM7QUFRbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7QUFNdkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFZO0lBRXRDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFM0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4RixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBaUMsY0FBYyxDQUFDLENBQUM7SUFDakYsTUFBTSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQVMsQ0FBQztJQUM1QyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLFFBQVEsRUFBWSxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsTUFBTSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUVsQyxNQUFNLFlBQVksR0FBRyxlQUFlLEVBQUUsQ0FBQztJQUV2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBYSxJQUFJLENBQUMsQ0FBQztJQUU1QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBRXpCLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUV6QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sYUFBYSxHQUFHLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLElBQUksUUFBUSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckYsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUVqQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFNUUsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztZQUMxRyxDQUFDO1lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMzRixDQUFDO1lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBRWhCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFRLENBQUMsQ0FBQztRQUN4RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkUsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0QyxjQUFjLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUVaLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFFZixNQUFNLFNBQVMsR0FBRyxNQUFNO2lCQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztpQkFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO1lBRTdELE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUM7b0JBQzlCLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRztvQkFDckIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxHQUFHO2lCQUNyQixDQUFDLENBQUM7Z0JBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUUxQyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtvQkFDNUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDaEMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO3dCQUNaLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtxQkFDZixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVKLE1BQU0sYUFBYSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTlDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLFVBQVU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTLFFBQVE7UUFFZixNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDdEgsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUM7UUFFMUYsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0IsSUFBSSxRQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7WUFDN0IsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1lBQ3RELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLGNBQWMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoRSxTQUFTLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLGNBQWMsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsVUFBVTtRQUVqQixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDN0csTUFBTSxRQUFRLEdBQUcsa0JBQWtCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFFbEYsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0IsSUFBSSxRQUFRLEdBQUcsV0FBVyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFELFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUNwRCxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsaUJBQWlCO1FBRXhCLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUksS0FBSyxDQUFDLGVBQWUsQ0FBZSxDQUFDO1FBRWxFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEIsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNELE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsS0FBSyxVQUFVLGdCQUFnQjtRQUU3QixNQUFNLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV2RSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osS0FBSyxJQUFJLENBQUMsUUFBUyxFQUFFLEtBQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssVUFBVSxJQUFJLENBQUMsUUFBa0IsRUFBRSxLQUFZLEVBQUUsTUFBYztRQUNsRSxNQUFNLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV0QixPQUFPLENBQ0wsTUFBQyxHQUFHLGVBQ0QsSUFBSSxLQUFLLGNBQWM7Z0JBQ3RCLE1BQUMsR0FBRyxJQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFDLFFBQVEsYUFDMUMsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxJQUFJLG1DQUFvQixFQUNsRCxLQUFDLEdBQUcsSUFDRixhQUFhLEVBQUMsUUFBUSxFQUN0QixNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDdEUsV0FBVyxFQUFDLFFBQVEsRUFDcEIsZUFBZSxFQUFDLE1BQU0sRUFDdEIsVUFBVSxFQUFFLElBQUksRUFDaEIsV0FBVyxFQUFFLEtBQUssRUFDbEIsU0FBUyxFQUFFLEtBQUssRUFDaEIsWUFBWSxFQUFFLEtBQUssRUFDbkIsU0FBUyxFQUFFLENBQUMsRUFDWixXQUFXLEVBQUUsQ0FBQyxZQUNkLEtBQUMsVUFBVSxJQUFDLEdBQUcsRUFBRSxTQUFTLFlBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDekIsTUFBQyxRQUFRLGVBQ04sSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVOzRDQUN2QixLQUFDLElBQUksSUFBcUIsSUFBSSxRQUFDLEtBQUssRUFBQyxNQUFNLFlBQUUsSUFBSSxDQUFDLFFBQVEsSUFBL0MsSUFBSSxDQUFDLFFBQVEsQ0FBMEMsRUFFbkUsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPOzRDQUNwQixNQUFDLElBQUksSUFFSCxLQUFLLEVBQUUsS0FBSyxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQzNELE9BQU8sRUFBRSxLQUFLLEtBQUssZUFBZSxhQUNqQyxJQUFJLENBQUMsR0FBRyxLQUFLLGdCQUFnQixJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBSlgsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBS2IsRUFFUixJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQjs0Q0FDL0IsS0FBQyxJQUFJLElBQUMsUUFBUSxRQUFDLEtBQUssRUFBQyxNQUFNLFlBQUUsSUFBSSxDQUFDLEtBQUssR0FBUSxFQUVoRCxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVU7NENBQ3ZCLEtBQUMsSUFBSSxvQkFBUyxLQWpCSCxJQUFJLENBQUMsR0FBRyxDQW1CWixDQUNaLEdBQ1UsR0FDVCxFQUNOLE1BQUMsUUFBUSxlQUNQLEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsR0FBRyxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsRUFDdEQsS0FBQyxPQUFPLElBQUMsS0FBSyxFQUFDLGdCQUFnQixFQUFDLEtBQUssUUFBQyxPQUFPLEVBQUUsaUJBQWlCLEdBQUcsRUFDbkUsS0FBQyxPQUFPLElBQUMsRUFBRSxRQUFDLE9BQU8sRUFBRSxRQUFRLEdBQUksRUFDakMsS0FBQyxPQUFPLElBQUMsSUFBSSxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUksSUFDNUIsSUFDUCxFQUVQLElBQUksS0FBSyxhQUFhO2dCQUNyQixNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsUUFBUSxhQUN6QixNQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLElBQUksNkJBQVEsUUFBUSxFQUFFLElBQUksZ0JBQWdCLEVBQ3BFLEtBQUMsR0FBRyxJQUFDLFNBQVMsRUFBRSxDQUFDLFlBQ2YsS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFDLFNBQVMsRUFDZixLQUFLLEVBQUUsSUFBSSxFQUNYLEtBQUssRUFBRSxNQUFNLEVBQ2IsV0FBVyxFQUFDLGVBQWUsRUFDM0IsUUFBUSxFQUFFLFNBQVMsR0FBRyxHQUNwQixFQUNMLFFBQVE7NEJBQ1AsS0FBQyxZQUFZLElBQ1gsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQ25CLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUM3QixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxFQUVoQyxNQUFDLFFBQVEsZUFDUCxLQUFDLE9BQU8sSUFBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEdBQUcsUUFBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLEVBQ3RELEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxnQkFBZ0IsRUFBQyxJQUFJLFFBQUMsUUFBUSxFQUFDLEdBQUcsR0FBRSxFQUNuRCxLQUFDLE9BQU8sSUFBQyxLQUFLLEVBQUMsY0FBYyxFQUFDLEtBQUssUUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEdBQUcsRUFDaEUsS0FBQyxPQUFPLElBQUMsSUFBSSxRQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixHQUFHLElBQzlDLElBQ1AsSUFFSixDQUNQLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
export function TestProvider(props) {
|
|
5
|
+
const { type, testing, error } = props;
|
|
6
|
+
return (_jsxs(Box, { children: [testing &&
|
|
7
|
+
_jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: [_jsx(Text, { children: type === 'openai-compatible'
|
|
8
|
+
? 'Connecting'
|
|
9
|
+
: 'Validating API key' }), _jsx(Spinner, { type: 'simpleDots' })] }) }), error &&
|
|
10
|
+
_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: 'red', children: [_jsx(Text, { children: type === 'openai-compatible'
|
|
11
|
+
? 'Incorrect url or API key: '
|
|
12
|
+
: 'Invalid API key: ' }), _jsxs(Text, { color: 'redBright', children: [_jsx(Text, { children: error.slice(0, 500) }), error.length > 500 && _jsx(Text, { children: "..." })] })] }) })] }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdGVzdFByb3ZpZGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDaEMsT0FBTyxPQUFPLE1BQU0sYUFBYSxDQUFDO0FBU2xDLE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBWTtJQUV2QyxNQUFNLEVBQ0osSUFBSSxFQUNKLE9BQU8sRUFDUCxLQUFLLEVBQ04sR0FBRyxLQUFLLENBQUM7SUFFVixPQUFPLENBQ0wsTUFBQyxHQUFHLGVBQ0QsT0FBTztnQkFDTixLQUFDLEdBQUcsSUFBQyxTQUFTLEVBQUUsQ0FBQyxZQUNmLE1BQUMsSUFBSSxlQUNILEtBQUMsSUFBSSxjQUNGLElBQUksS0FBSyxtQkFBbUI7b0NBQzNCLENBQUMsQ0FBQyxZQUFZO29DQUNkLENBQUMsQ0FBQyxvQkFBb0IsR0FFbkIsRUFDUCxLQUFDLE9BQU8sSUFBQyxJQUFJLEVBQUMsWUFBWSxHQUFFLElBQ3ZCLEdBQ0gsRUFFUCxLQUFLO2dCQUNKLEtBQUMsR0FBRyxJQUFDLFNBQVMsRUFBRSxDQUFDLFlBQ2YsTUFBQyxJQUFJLElBQUMsS0FBSyxFQUFDLEtBQUssYUFDZixLQUFDLElBQUksY0FDRixJQUFJLEtBQUssbUJBQW1CO29DQUMzQixDQUFDLENBQUMsNEJBQTRCO29DQUM5QixDQUFDLENBQUMsbUJBQW1CLEdBRWxCLEVBQ1AsTUFBQyxJQUFJLElBQUMsS0FBSyxFQUFDLFdBQVcsYUFDckIsS0FBQyxJQUFJLGNBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQVEsRUFDakMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBQyxJQUFJLHNCQUFXLElBQ2xDLElBQU8sR0FDWixJQUVKLENBQ1AsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -1,31 +1,9 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Text } from 'ink';
|
|
3
|
-
import TextInput from
|
|
4
|
-
import { useEffect, useState } from 'react';
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { TextInput } from "./textInput.js";
|
|
5
4
|
export function TextField(props) {
|
|
6
|
-
const {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
setValue(initialValue);
|
|
10
|
-
}, [initialValue]);
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
onChange(value);
|
|
13
|
-
}, [value]);
|
|
14
|
-
function handleChange(input) {
|
|
15
|
-
// Workaround for paste detection in Linux terminals.
|
|
16
|
-
// When the user pastes a long text, it is split into multiple input events,
|
|
17
|
-
// which causes only a part of the text to be saved in the state.
|
|
18
|
-
// To fix this, we check if the user is pasting text and then append the value
|
|
19
|
-
// to the existing one. To detect when the user is pasting, we check the length
|
|
20
|
-
// of the input value. If the difference between the new value and the current
|
|
21
|
-
// state is greater than 1, we assume the user is pasting.
|
|
22
|
-
if (input.length - value.length > 1 && value.trim() === '') {
|
|
23
|
-
setValue(value => value + input);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
setValue(input);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return (_jsx(Text, { color: color, inverse: inverse, children: _jsx(TextInput, { value: value, onChange: handleChange, onSubmit: () => onSubmit?.(value), placeholder: placeholder }) }));
|
|
5
|
+
const { label, focus = true, value, placeholder, color, inverse, error, onChange, onSubmit } = props;
|
|
6
|
+
return (_jsxs(Box, { gap: 1, borderStyle: 'single', borderColor: focus ? 'cyan' : 'white', borderTop: false, borderRight: false, borderBottom: false, paddingLeft: 1, children: [_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { color: focus ? 'cyan' : 'whiteBright', children: label }), error &&
|
|
7
|
+
_jsxs(Text, { color: 'gray', children: [" (", error, ")"] }), _jsx(Text, { children: ":" })] }), _jsx(Text, { color: color, inverse: inverse, children: _jsx(TextInput, { placeholder: placeholder, focus: focus, value: value, onChange: onChange, onSubmit: () => onSubmit?.(value) }) })] }));
|
|
30
8
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dEZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdGV4dEZpZWxkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWEsTUFBTSxLQUFLLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFpQixDQUFDO0FBYzVDLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBWTtJQUVwQyxNQUFNLEVBQ0osS0FBSyxFQUNMLEtBQUssR0FBRyxJQUFJLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNULEdBQUcsS0FBSyxDQUFDO0lBRVYsT0FBTyxDQUNMLE1BQUMsR0FBRyxJQUNGLEdBQUcsRUFBRSxDQUFDLEVBQ04sV0FBVyxFQUFDLFFBQVEsRUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQ3JDLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLFlBQVksRUFBRSxLQUFLLEVBQ25CLFdBQVcsRUFBRSxDQUFDLGFBQ2QsTUFBQyxHQUFHLElBQUMsVUFBVSxFQUFFLENBQUMsYUFDaEIsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLFlBQ3hDLEtBQUssR0FDRCxFQUNOLEtBQUs7d0JBQ0osTUFBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0sbUJBQUksS0FBSyxTQUFTLEVBRXRDLEtBQUMsSUFBSSxvQkFBUyxJQUNWLEVBQ04sS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxZQUNsQyxLQUFDLFNBQVMsSUFDUixXQUFXLEVBQUUsV0FBVyxFQUN4QixLQUFLLEVBQUUsS0FBSyxFQUNaLEtBQUssRUFBRSxLQUFLLEVBQ1osUUFBUSxFQUFFLFFBQVEsRUFDbEIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQ2pDLElBQ0gsQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
|