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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9jb21tYW5kcy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQU8sSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBS3hFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQXlCLFNBQVMsQ0FBQyxDQUFDO0FBTS9FLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBWTtJQUVuQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsRUFBYyxDQUFDO0lBRTNELFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN0QixhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlELE9BQU8sQ0FDTCxLQUFDLGNBQWMsQ0FBQyxRQUFRLElBQUMsS0FBSyxFQUFFLFVBQVUsWUFDeEMsTUFBQyxHQUFHLElBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQzFFLE1BQUMsR0FBRyxlQUNELEtBQUssRUFDTCxLQUFLLEtBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUM1QixLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBUyxLQUhyQixLQUFLLENBS1QsQ0FDUCxFQUNBLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDMUQsS0FBSyxDQUNOLElBQ0csR0FDa0IsQ0FDM0IsQ0FBQztBQUNKLENBQUMifQ==
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
- const config = await configStore.get();
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
- void (async () => {
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(ApiKeyField, { title: provider.name, value: apiKey, onChange: setApiKey }), _jsxs(Box, { flexDirection: 'row', gap: 1, children: [_jsxs(Commands, { children: [_jsx(Command, { title: 'Esc (Exit)', esc: true, onPress: handleExit }), _jsx(Command, { title: 'Ctrl+B (Go Back)', ctrl: true, inputKey: 'b', onPress: handleGoBack }), _jsx(Command, { title: 'Ctrl+V (Paste)', ctrl: true, inputKey: 'v' }), _jsx(Command, { title: 'Enter (Save)', enter: true, onPress: handleSave })] }), saved &&
39
- _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: 'cyan', bold: true, children: "\u00A1Saved!" }) })] })] }));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9wcm92aWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWUsQ0FBQztBQU94QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUV2QyxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVk7SUFFbkMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFcEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFWCxLQUFLLFVBQVUsVUFBVTtRQUN2QixNQUFNLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFNBQVMsVUFBVTtRQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQVMsWUFBWTtRQUNuQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV0QixPQUFPLENBQ0wsTUFBQyxHQUFHLElBQUMsYUFBYSxFQUFDLFFBQVEsYUFDekIsS0FBQyxXQUFXLElBQ1YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssRUFBRSxNQUFNLEVBQ2IsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUN4QixNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBRSxDQUFDLGFBQzdCLE1BQUMsUUFBUSxlQUNQLEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsR0FBRyxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsRUFDdEQsS0FBQyxPQUFPLElBQUMsS0FBSyxFQUFDLGtCQUFrQixFQUFDLElBQUksUUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsRUFDNUUsS0FBQyxPQUFPLElBQUMsS0FBSyxFQUFDLGdCQUFnQixFQUFDLElBQUksUUFBQyxRQUFRLEVBQUMsR0FBRyxHQUFFLEVBQ25ELEtBQUMsT0FBTyxJQUFDLEtBQUssRUFBQyxjQUFjLEVBQUMsS0FBSyxRQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsSUFDakQsRUFDVixLQUFLO3dCQUNKLEtBQUMsR0FBRyxJQUFDLFNBQVMsRUFBRSxDQUFDLFlBQ2YsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxJQUFJLG1DQUFlLEdBQ2xDLElBRUosSUFDRixDQUNQLENBQUM7QUFDSixDQUFDIn0=
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 [event, setEvent] = useState();
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(providerList.length > scrollListHeight ? scrollListHeight : undefined);
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
- setVisible(false);
28
- setEvent('exit');
30
+ setExit(true);
29
31
  }
30
32
  function handleUp() {
31
- setCurrentIndex((index) => index - 1 >= 0 ? index - 1 : providerList.length - 1);
33
+ setCurrentIndex((index) => Math.max(0, index - 1));
32
34
  }
33
35
  function handleDown() {
34
- setCurrentIndex((index) => index + 1 < providerList.length ? index + 1 : 0);
36
+ setCurrentIndex((index) => Math.min(providers.length - 1, index + 1));
35
37
  }
36
38
  function handleSelect() {
37
- onSelect(providerList[currentIndex]);
39
+ onSelect(providers[currentIndex]);
38
40
  }
39
- if (!visible)
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, { height: scrollListHeight, borderStyle: 'single', borderColor: 'cyan', borderTop: false, borderRight: false, borderBottom: false, paddingLeft: 1, marginTop: 1, children: _jsx(ScrollList, { selectedIndex: currentIndex, children: providerList.map((provider, index) => (_jsx(Text, { color: index === currentIndex ? 'cyanBright' : undefined, inverse: index === currentIndex, children: provider.name }, provider.name))) }) }), _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 })] })] }) }));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvcHJvdmlkZXJzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFjLE1BQU0sS0FBSyxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLElBQUksWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWUsQ0FBQztBQU14QyxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVk7SUFFcEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUUzQixNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxRQUFRLEVBQVUsQ0FBQztJQUNuRSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsRUFBVSxDQUFDO0lBRTdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBYSxJQUFJLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFD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
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 selectedModel = providers.flatMap(provider => provider.models).find(m => m.name === config.model?.model);
27
- if (selectedModel) {
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.name, provider: provider.name });
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.name, model: model });
45
+ items.push({ type: 'model', key: `${provider.id}-${model.id}`, provider, model: model });
36
46
  }
37
- items.push({ type: 'new-line', key: `${provider.name}-newline` });
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
- process.exit(0);
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
- async function handleSelectModel() {
81
- const model = items[currentPosition].model;
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 (!apikey) {
116
+ if (provider.type !== 'openai-compatible' && !provider.key) {
88
117
  setView('set-api-key');
89
118
  return;
90
119
  }
91
- void save(provider, model, apikey);
120
+ void save(provider, model, provider.key ?? '');
92
121
  }
93
- function handleSaveApiKey() {
94
- void save(provider, model, apiKey);
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.name);
99
- onSelect(model, apikey);
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 a 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' &&
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
- _jsx(Text, { color: index === currentPosition ? 'cyanBright' : undefined, inverse: index === currentPosition, children: item.model.title }, item.model.name), item.type === 'new-line' &&
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: [_jsx(ApiKeyField, { title: `${provider?.name} Api Key`, value: apiKey, onChange: setApiKey }), _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 })] })] })] }));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0TW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9zZWxlY3RNb2RlbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBYyxNQUFNLEtBQUssQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFPLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLE9BQU8sRUFBaUIsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFlLENBQUM7QUFPeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7QUFNdkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFZO0lBRXRDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFM0IsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQWlDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sQ0FB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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0TW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9zZWxlY3RNb2RlbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBYyxNQUFNLEtBQUssQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFPLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLE9BQU8sRUFBaUIsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW9CLENBQUM7QUFRbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7QUFNdkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFZO0lBRXRDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFM0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFD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
@@ -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 'ink-text-input';
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 { value: initialValue, placeholder, color, inverse, onChange, onSubmit } = props;
7
- const [value, setValue] = useState(initialValue);
8
- useEffect(() => {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dEZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdGV4dEZpZWxkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBYSxNQUFNLEtBQUssQ0FBQztBQUN0QyxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQVc1QyxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVk7SUFFcEMsTUFBTSxFQUNKLEtBQUssRUFBRSxZQUFZLEVBQ25CLFdBQVcsRUFDWCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFFBQVEsRUFDUixRQUFRLEVBQ1QsR0FBRyxLQUFLLENBQUM7SUFFVixNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVsRCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFbkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRVosU0FBUyxZQUFZLENBQUMsS0FBYTtRQUNqQyxxREFBcUQ7UUFDckQsNEVBQTRFO1FBQzVFLGlFQUFpRTtRQUNqRSw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLDhFQUE4RTtRQUM5RSwwREFBMEQ7UUFDMUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMzRCxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQ0wsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxZQUNsQyxLQUFDLFNBQVMsSUFDUixLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxZQUFZLEVBQ3RCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFDakMsV0FBVyxFQUFFLFdBQVcsR0FDeEIsR0FDRyxDQUNSLENBQUM7QUFDSixDQUFDIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dEZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdGV4dEZpZWxkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWEsTUFBTSxLQUFLLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFpQixDQUFDO0FBYzVDLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBWTtJQUVwQyxNQUFNLEVBQ0osS0FBSyxFQUNMLEtBQUssR0FBRyxJQUFJLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNULEdBQUcsS0FBSyxDQUFDO0lBRVYsT0FBTyxDQUNMLE1BQUMsR0FBRyxJQUNGLEdBQUcsRUFBRSxDQUFDLEVBQ04sV0FBVyxFQUFDLFFBQVEsRUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQ3JDLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLFlBQVksRUFBRSxLQUFLLEVBQ25CLFdBQVcsRUFBRSxDQUFDLGFBQ2QsTUFBQyxHQUFHLElBQUMsVUFBVSxFQUFFLENBQUMsYUFDaEIsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLFlBQ3hDLEtBQUssR0FDRCxFQUNOLEtBQUs7d0JBQ0osTUFBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0sbUJBQUksS0FBSyxTQUFTLEVBRXRDLEtBQUMsSUFBSSxvQkFBUyxJQUNWLEVBQ04sS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxZQUNsQyxLQUFDLFNBQVMsSUFDUixXQUFXLEVBQUUsV0FBVyxFQUN4QixLQUFLLEVBQUUsS0FBSyxFQUNaLEtBQUssRUFBRSxLQUFLLEVBQ1osUUFBUSxFQUFFLFFBQVEsRUFDbEIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQ2pDLElBQ0gsQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9