ask-cli-ai 1.0.12 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -18
- package/dist/app.js +15 -3
- package/dist/commands/ask.js +84 -55
- package/dist/commands/clearHistory.js +1 -1
- package/dist/commands/config.js +87 -0
- package/dist/commands/connect.js +112 -0
- package/dist/commands/selectModel.js +11 -17
- package/dist/components/command.js +58 -0
- package/dist/components/commands.js +14 -0
- package/dist/components/provider.js +88 -22
- package/dist/components/providers.js +32 -30
- package/dist/components/selectModel.js +92 -54
- package/dist/components/testProvider.js +14 -0
- package/dist/components/textField.js +6 -26
- package/dist/components/textInput.js +136 -0
- package/dist/components/welcome.js +4 -15
- 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 -0
- 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 +59 -40
- package/dist/stores/history.js +43 -28
- package/dist/stores/store.js +16 -22
- package/dist/templates/instructions.js +6 -4
- package/dist/types/setting.js +3 -0
- package/dist/utils/defaultConfig.js +58 -0
- package/dist/utils/getDataDir.js +17 -0
- package/dist/utils/paths.js +7 -0
- package/dist/utils/validateUrl.js +10 -0
- package/package.json +74 -70
- package/dist/components/apiKeyField.js +0 -13
- package/dist/providers.js +0 -35
- package/dist/utils/dataDir.js +0 -19
- package/dist/utils/root.js +0 -3
|
@@ -1,106 +1,144 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { measureElement,
|
|
2
|
+
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 {
|
|
7
|
+
import { Commands } from "./commands.js";
|
|
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";
|
|
9
14
|
const config = await configStore.get();
|
|
10
15
|
export function SelectModel(props) {
|
|
11
16
|
const { onSelect } = props;
|
|
17
|
+
const [providers, setProviders] = useState(Object.values(config.providers));
|
|
12
18
|
const [view, setView] = useState('select-model');
|
|
13
19
|
const [currentPosition, setCurrentPosition] = useState(0);
|
|
14
20
|
const [scrollViewHeight, setScrollViewHeight] = useState(0);
|
|
15
21
|
const [model, setModel] = useState();
|
|
16
22
|
const [provider, setProvider] = useState();
|
|
23
|
+
const [apiKey, setApiKey] = useState('');
|
|
17
24
|
const [startPosition, setStartPosition] = useState(0);
|
|
18
25
|
const [endPosition, setEndPosition] = useState(0);
|
|
26
|
+
const [exit, setExit] = useExit();
|
|
27
|
+
const testProvider = useTestProvider();
|
|
19
28
|
const scrollRef = useRef(null);
|
|
20
29
|
const contentRef = useRef(null);
|
|
21
30
|
const items = useMemo(() => {
|
|
22
31
|
const items = [];
|
|
23
|
-
const
|
|
24
|
-
|
|
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) {
|
|
25
35
|
items.push({ type: 'provider', key: 'selected-model-title', provider: 'Selected model' });
|
|
26
|
-
items.push({ type: 'model', key: 'selected-model', model: selectedModel });
|
|
36
|
+
items.push({ type: 'model', key: 'selected-model', provider, model: selectedModel });
|
|
27
37
|
items.push({ type: 'new-line', key: 'selected-model-newline' });
|
|
28
38
|
}
|
|
29
39
|
for (const provider of providers) {
|
|
30
|
-
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
|
+
}
|
|
31
44
|
for (const model of provider.models) {
|
|
32
|
-
items.push({ type: 'model', key: model.
|
|
45
|
+
items.push({ type: 'model', key: `${provider.id}-${model.id}`, provider, model: model });
|
|
33
46
|
}
|
|
34
|
-
items.push({ type: 'new-line', key: `${provider.
|
|
47
|
+
items.push({ type: 'new-line', key: `${provider.id}-newline` });
|
|
35
48
|
}
|
|
36
49
|
return items;
|
|
37
|
-
}, []);
|
|
50
|
+
}, [providers]);
|
|
38
51
|
useEffect(() => {
|
|
39
52
|
const height = process.stdout.rows - 2;
|
|
40
53
|
const contentSize = measureElement(contentRef.current);
|
|
41
|
-
const scrollViewHeight = height - contentSize.height;
|
|
54
|
+
const scrollViewHeight = Math.min(height - contentSize.height, 20);
|
|
42
55
|
setScrollViewHeight(scrollViewHeight);
|
|
43
56
|
setEndPosition(scrollViewHeight - 1);
|
|
44
57
|
}, []);
|
|
45
58
|
useEffect(() => {
|
|
46
59
|
setCurrentPosition(items.findIndex(item => item.type === 'model'));
|
|
47
60
|
}, [items]);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
+
}, []);
|
|
83
|
+
function handleExit() {
|
|
84
|
+
setExit(true);
|
|
85
|
+
}
|
|
86
|
+
function handleUp() {
|
|
87
|
+
const previousModelItemIndex = items.findLastIndex((item, index) => item.type === 'model' && index < currentPosition);
|
|
88
|
+
const position = previousModelItemIndex === -1 ? currentPosition : previousModelItemIndex;
|
|
89
|
+
setCurrentPosition(position);
|
|
90
|
+
if (position < startPosition) {
|
|
91
|
+
scrollRef.current?.scrollBy(position - startPosition);
|
|
92
|
+
setStartPosition(position);
|
|
93
|
+
setEndPosition(position + (scrollViewHeight - 1));
|
|
94
|
+
return;
|
|
64
95
|
}
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (position > endPosition && position < items.length - 1) {
|
|
70
|
-
scrollRef.current?.scrollBy(position - endPosition);
|
|
71
|
-
setStartPosition(position - (scrollViewHeight - 1));
|
|
72
|
-
setEndPosition(position);
|
|
73
|
-
}
|
|
96
|
+
if (items.findIndex(item => item.type === 'model') === position) {
|
|
97
|
+
scrollRef.current?.scrollToTop();
|
|
98
|
+
setStartPosition(0);
|
|
99
|
+
setEndPosition(scrollViewHeight - 1);
|
|
74
100
|
}
|
|
75
|
-
|
|
76
|
-
|
|
101
|
+
}
|
|
102
|
+
function handleDown() {
|
|
103
|
+
const nextModelItemIndex = items.findIndex((item, index) => item.type === 'model' && index > currentPosition);
|
|
104
|
+
const position = nextModelItemIndex === -1 ? currentPosition : nextModelItemIndex;
|
|
105
|
+
setCurrentPosition(position);
|
|
106
|
+
if (position > endPosition && position < items.length - 1) {
|
|
107
|
+
scrollRef.current?.scrollBy(position - endPosition);
|
|
108
|
+
setStartPosition(position - (scrollViewHeight - 1));
|
|
109
|
+
setEndPosition(position);
|
|
77
110
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
const config = await configStore.get();
|
|
82
|
-
const apikey = config.providers[provider.id].apiKey;
|
|
111
|
+
}
|
|
112
|
+
function handleSelectModel() {
|
|
113
|
+
const { provider, model } = items[currentPosition];
|
|
83
114
|
setProvider(provider);
|
|
84
115
|
setModel(model);
|
|
85
|
-
if (!
|
|
116
|
+
if (provider.type !== 'openai-compatible' && !provider.key) {
|
|
86
117
|
setView('set-api-key');
|
|
87
118
|
return;
|
|
88
119
|
}
|
|
89
|
-
void save(provider, model,
|
|
120
|
+
void save(provider, model, provider.key ?? '');
|
|
90
121
|
}
|
|
91
|
-
function
|
|
92
|
-
|
|
122
|
+
async function handleSaveApiKey() {
|
|
123
|
+
const isValid = await testProvider.test({ ...provider, key: apiKey });
|
|
124
|
+
if (isValid) {
|
|
125
|
+
void save(provider, model, apiKey);
|
|
126
|
+
}
|
|
93
127
|
}
|
|
94
128
|
async function save(provider, model, apikey) {
|
|
95
129
|
await configStore.setProviderApiKey(provider.id, apikey);
|
|
96
|
-
await configStore.setModel(provider.id, model.
|
|
97
|
-
onSelect(
|
|
130
|
+
await configStore.setModel(provider.id, model.id);
|
|
131
|
+
onSelect(provider, model);
|
|
98
132
|
}
|
|
133
|
+
if (exit)
|
|
134
|
+
return null;
|
|
99
135
|
return (_jsxs(Box, { children: [view === 'select-model' &&
|
|
100
|
-
_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' &&
|
|
101
137
|
_jsx(Text, { bold: true, color: 'blue', children: item.provider }, item.provider), item.type === 'model' &&
|
|
102
|
-
|
|
103
|
-
_jsx(Text, {
|
|
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' &&
|
|
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' &&
|
|
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 })] })] })] }));
|
|
105
143
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0TW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9zZWxlY3RNb2RlbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWMsTUFBTSxLQUFLLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBTyxNQUFNLE9BQU8sQ0FBQztBQUNsRSxPQUFPLEVBQWlCLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBbUIsQ0FBQztBQU9oRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQU12QyxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVk7SUFFdEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUUzQixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBaUMsY0FBYyxDQUFDLENBQUM7SUFDakYsTUFBTSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQVMsQ0FBQztJQUM1QyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcs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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,29 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from 'ink';
|
|
3
|
-
import TextInput from
|
|
4
|
-
import { useEffect, useState } from 'react';
|
|
3
|
+
import { TextInput } from "./textInput.js";
|
|
5
4
|
export function TextField(props) {
|
|
6
|
-
const { label,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
onChange(value);
|
|
10
|
-
}, [value]);
|
|
11
|
-
function handleChange(input) {
|
|
12
|
-
// Workaround for paste detection in Linux terminals.
|
|
13
|
-
// When the user pastes a long text, it is split into multiple input events,
|
|
14
|
-
// which causes only a part of the text to be saved in the state.
|
|
15
|
-
// To fix this, we check if the user is pasting text and then append the value
|
|
16
|
-
// to the existing one. To detect when the user is pasting, we check the length
|
|
17
|
-
// of the input value. If the difference between the new value and the current
|
|
18
|
-
// state is greater than 1, we assume the user is pasting.
|
|
19
|
-
if (input.length - value.length > 1) {
|
|
20
|
-
setValue(value => value + input);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
setValue(input);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return (_jsxs(Box, { flexDirection: 'row', marginTop: marginTop, borderStyle: 'single', borderLeftColor: 'cyan', borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, paddingLeft: 1, children: [label &&
|
|
27
|
-
_jsx(Box, { flexShrink: 0, children: _jsxs(Text, { children: [label, " "] }) }), _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) }) })] }));
|
|
28
8
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dEZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdGV4dEZpZWxkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWEsTUFBTSxLQUFLLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFpQixDQUFDO0FBYzVDLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBWTtJQUVwQyxNQUFNLEVBQ0osS0FBSyxFQUNMLEtBQUssR0FBRyxJQUFJLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNULEdBQUcsS0FBSyxDQUFDO0lBRVYsT0FBTyxDQUNMLE1BQUMsR0FBRyxJQUNGLEdBQUcsRUFBRSxDQUFDLEVBQ04sV0FBVyxFQUFDLFFBQVEsRUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQ3JDLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLFlBQVksRUFBRSxLQUFLLEVBQ25CLFdBQVcsRUFBRSxDQUFDLGFBQ2QsTUFBQyxHQUFHLElBQUMsVUFBVSxFQUFFLENBQUMsYUFDaEIsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLFlBQ3hDLEtBQUssR0FDRCxFQUNOLEtBQUs7d0JBQ0osTUFBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0sbUJBQUksS0FBSyxTQUFTLEVBRXRDLEtBQUMsSUFBSSxvQkFBUyxJQUNWLEVBQ04sS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxZQUNsQyxLQUFDLFNBQVMsSUFDUixXQUFXLEVBQUUsV0FBVyxFQUN4QixLQUFLLEVBQUUsS0FBSyxFQUNaLEtBQUssRUFBRSxLQUFLLEVBQ1osUUFBUSxFQUFFLFFBQVEsRUFDbEIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQ2pDLElBQ0gsQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { Text, useInput } from 'ink';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
export function TextInput({ value: originalValue, placeholder = '', focus = true, mask, highlightPastedText = false, showCursor = true, onChange, onSubmit, }) {
|
|
6
|
+
const [state, setState] = useState({
|
|
7
|
+
cursorOffset: (originalValue || '').length,
|
|
8
|
+
cursorWidth: 0,
|
|
9
|
+
});
|
|
10
|
+
const [internalValue] = useState({ value: originalValue });
|
|
11
|
+
const { cursorOffset, cursorWidth } = state;
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
setState(previousState => {
|
|
14
|
+
if (!focus || !showCursor) {
|
|
15
|
+
return previousState;
|
|
16
|
+
}
|
|
17
|
+
const newValue = originalValue || '';
|
|
18
|
+
if (previousState.cursorOffset > newValue.length - 1) {
|
|
19
|
+
return {
|
|
20
|
+
cursorOffset: newValue.length,
|
|
21
|
+
cursorWidth: 0,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return previousState;
|
|
25
|
+
});
|
|
26
|
+
}, [originalValue, focus, showCursor]);
|
|
27
|
+
const cursorActualWidth = highlightPastedText ? cursorWidth : 0;
|
|
28
|
+
const value = mask ? mask.repeat(originalValue.length) : originalValue;
|
|
29
|
+
let renderedValue = value;
|
|
30
|
+
let renderedPlaceholder = placeholder ? chalk.dim(chalk.gray(placeholder)) : undefined;
|
|
31
|
+
// Fake mouse cursor, because it's too inconvenient to deal with actual cursor and ansi escapes
|
|
32
|
+
if (showCursor && focus) {
|
|
33
|
+
renderedPlaceholder =
|
|
34
|
+
placeholder.length > 0
|
|
35
|
+
? chalk.inverse(placeholder[0]) + chalk.dim(chalk.grey(placeholder.slice(1)))
|
|
36
|
+
: chalk.inverse(' ');
|
|
37
|
+
renderedValue = value.length > 0 ? '' : chalk.inverse(' ');
|
|
38
|
+
let i = 0;
|
|
39
|
+
for (const char of value) {
|
|
40
|
+
renderedValue +=
|
|
41
|
+
i >= cursorOffset - cursorActualWidth && i <= cursorOffset
|
|
42
|
+
? chalk.inverse(char)
|
|
43
|
+
: char;
|
|
44
|
+
i++;
|
|
45
|
+
}
|
|
46
|
+
if (value.length > 0 && cursorOffset === value.length) {
|
|
47
|
+
renderedValue += chalk.inverse(' ');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
useInput((input, key) => {
|
|
51
|
+
if (key.upArrow ||
|
|
52
|
+
key.downArrow ||
|
|
53
|
+
key.ctrl ||
|
|
54
|
+
(key.ctrl && input === 'c') ||
|
|
55
|
+
key.tab ||
|
|
56
|
+
(key.shift && key.tab)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (key.return) {
|
|
60
|
+
if (onSubmit) {
|
|
61
|
+
onSubmit(originalValue);
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
let nextCursorOffset = cursorOffset;
|
|
66
|
+
let nextValue = originalValue;
|
|
67
|
+
let nextCursorWidth = 0;
|
|
68
|
+
if (key.leftArrow) {
|
|
69
|
+
if (showCursor) {
|
|
70
|
+
nextCursorOffset--;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (key.rightArrow) {
|
|
74
|
+
if (showCursor) {
|
|
75
|
+
nextCursorOffset++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (key.backspace || key.delete) {
|
|
79
|
+
if (cursorOffset > 0) {
|
|
80
|
+
nextValue =
|
|
81
|
+
originalValue.slice(0, cursorOffset - 1) +
|
|
82
|
+
originalValue.slice(cursorOffset, originalValue.length);
|
|
83
|
+
nextCursorOffset--;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
nextValue =
|
|
88
|
+
originalValue.slice(0, cursorOffset) +
|
|
89
|
+
input +
|
|
90
|
+
originalValue.slice(cursorOffset, originalValue.length);
|
|
91
|
+
nextCursorOffset += input.length;
|
|
92
|
+
if (input.length > 1) {
|
|
93
|
+
nextCursorWidth = input.length;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (cursorOffset < 0) {
|
|
97
|
+
nextCursorOffset = 0;
|
|
98
|
+
}
|
|
99
|
+
if (cursorOffset > originalValue.length) {
|
|
100
|
+
nextCursorOffset = originalValue.length;
|
|
101
|
+
}
|
|
102
|
+
setState({
|
|
103
|
+
cursorOffset: nextCursorOffset,
|
|
104
|
+
cursorWidth: nextCursorWidth,
|
|
105
|
+
});
|
|
106
|
+
if (nextValue !== originalValue) {
|
|
107
|
+
handleChange(nextValue);
|
|
108
|
+
}
|
|
109
|
+
}, { isActive: focus });
|
|
110
|
+
function handleChange(input) {
|
|
111
|
+
// Workaround for paste detection in Linux terminals.
|
|
112
|
+
// When the user pastes a long text, it is split into multiple input events,
|
|
113
|
+
// which causes only a part of the text to be saved in the state.
|
|
114
|
+
// To fix this, we check if the user is pasting text and then append the value
|
|
115
|
+
// to the existing one. To detect when the user is pasting, we check the length
|
|
116
|
+
// of the input value. If the difference between the new value and the current
|
|
117
|
+
// state is greater than 1, we assume the user is pasting.
|
|
118
|
+
if (input.length - originalValue.length > 1 && originalValue.trim() === '') {
|
|
119
|
+
internalValue.value += input;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
internalValue.value = input;
|
|
123
|
+
}
|
|
124
|
+
onChange(internalValue.value);
|
|
125
|
+
}
|
|
126
|
+
return (_jsx(Text, { children: placeholder
|
|
127
|
+
? value.length > 0
|
|
128
|
+
? renderedValue
|
|
129
|
+
: renderedPlaceholder
|
|
130
|
+
: renderedValue }));
|
|
131
|
+
}
|
|
132
|
+
export function UncontrolledTextInput({ initialValue = '', ...props }) {
|
|
133
|
+
const [value, setValue] = useState(initialValue);
|
|
134
|
+
return _jsx(TextInput, { ...props, value: value, onChange: setValue });
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dElucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdGV4dElucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDckMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBOEMxQixNQUFNLFVBQVUsU0FBUyxDQUFDLEVBQ3hCLEtBQUssRUFBRSxhQUFhLEVBQ3BCLFdBQVcsR0FBRyxFQUFFLEVBQ2hCLEtBQUssR0FBRyxJQUFJLEVBQ1osSUFBSSxFQUNKLG1CQUFtQixHQUFHLEtBQUssRUFDM0IsVUFBVSxHQUFHLElBQUksRUFDakIsUUFBUSxFQUNSLFFBQVEsR0FDRjtJQUNOLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ2pDLFlBQVksRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQzFDLFdBQVcsRUFBRSxDQUFDO0tBQ2YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBRTNELE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTVDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMxQixPQUFPLGFBQWEsQ0FBQztZQUN2QixDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsYUFBYSxJQUFJLEVBQUUsQ0FBQztZQUVyQyxJQUFJLGFBQWEsQ0FBQyxZQUFZLEdBQUcsUUFBUSxD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
|
|
@@ -1,23 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import { Box, Static, Text, useInput } from 'ink';
|
|
2
|
+
import { Box, Static, Text } from 'ink';
|
|
4
3
|
import { SelectModel } from "./selectModel.js";
|
|
5
4
|
import { logo } from "../utils/logo.js";
|
|
6
5
|
export function Welcome(props) {
|
|
7
6
|
const { onSend } = props;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (key.escape) {
|
|
11
|
-
process.exit(0);
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
function handleSend(model, apiKey) {
|
|
15
|
-
setClosed(true);
|
|
16
|
-
onSend(model.name, apiKey);
|
|
17
|
-
}
|
|
18
|
-
if (closed) {
|
|
19
|
-
return null;
|
|
7
|
+
function handleSend() {
|
|
8
|
+
onSend();
|
|
20
9
|
}
|
|
21
10
|
return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(Static, { items: [''], children: item => _jsxs(Box, { flexDirection: 'column', marginBottom: 1, children: [_jsx(Text, { children: logo }), _jsxs(Box, { flexDirection: 'column', marginTop: 1, children: [_jsx(Text, { children: "Welcome to ASK CLI, your handy assistant to help you from the terminal!" }), _jsxs(Box, { flexDirection: 'column', marginTop: 1, paddingLeft: 1, children: [_jsx(Text, { children: "\uD83E\uDD16 Get help about commands, coding, apps, etc." }), _jsx(Text, { children: "\uD83D\uDCDD Short and precise answers, just the info you need, straight to the point." }), _jsx(Text, { children: "\uD83D\uDE80 Blazing fast speed, almost instant responses." }), _jsx(Text, { children: "\uD83D\uDEE1\uFE0F Safe by design, it cannot run commands or access your files without your explicit authorization." })] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "To get started, select a model." }) })] }, item) }), _jsx(SelectModel, { onSelect: handleSend })] }));
|
|
22
11
|
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VsY29tZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3dlbGNvbWUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU14QyxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQVk7SUFFbEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztJQUV6QixTQUFTLFVBQVU7UUFDakIsTUFBTSxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTyxDQUNMLE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBQyxRQUFRLGFBQ3pCLEtBQUMsTUFBTSxJQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUNoQixJQUFJLENBQUMsRUFBRSxDQUNOLE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBQyxRQUFRLEVBQVksWUFBWSxFQUFFLENBQUMsYUFDcEQsS0FBQyxJQUFJLGNBQUUsSUFBSSxHQUFRLEVBQ25CLE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFFLENBQUMsYUFDdEMsS0FBQyxJQUFJLDBGQUErRSxFQUNwRixNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsYUFDdEQsS0FBQyxJQUFJLDRFQUF1RCxFQUM1RCxLQUFDLElBQUksMEdBQXFGLEVBQzFGLEtBQUMsSUFBSSw4RUFBeUQsRUFDOUQsS0FBQyxJQUFJLHVJQUE2RyxJQUM5RyxJQUNGLEVBQ04sS0FBQyxHQUFHLElBQUMsU0FBUyxFQUFFLENBQUMsWUFDZixLQUFDLElBQUksa0RBQXVDLEdBQ3hDLEtBYnlCLElBQUksQ0FjL0IsR0FFRCxFQUNULEtBQUMsV0FBVyxJQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsSUFDaEMsQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
export function useExit() {
|
|
3
|
+
const state = useState(false);
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
process.on('SIGINT', () => {
|
|
6
|
+
const set = state[1];
|
|
7
|
+
set(true);
|
|
8
|
+
});
|
|
9
|
+
}, []);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if (state[0]) {
|
|
12
|
+
setTimeout(() => process.exit(0), 0);
|
|
13
|
+
}
|
|
14
|
+
}, [state[0]]);
|
|
15
|
+
return state;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlRXhpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VFeGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVDLE1BQU0sVUFBVSxPQUFPO0lBRXJCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ3hCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFZixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useState, useCallback, useMemo } from 'react';
|
|
2
|
+
export function useField(field = {}) {
|
|
3
|
+
const [state, setState] = useState(field);
|
|
4
|
+
const set = useCallback((field) => {
|
|
5
|
+
setState(state => ({ ...state, ...field }));
|
|
6
|
+
}, []);
|
|
7
|
+
return useMemo(() => ({
|
|
8
|
+
get label() { return state.label; },
|
|
9
|
+
get placeholder() { return state.placeholder; },
|
|
10
|
+
get value() { return state.value ?? ''; },
|
|
11
|
+
get error() { return state.error; },
|
|
12
|
+
get focus() { return state.focus; },
|
|
13
|
+
set value(value) { set({ value }); },
|
|
14
|
+
set focus(focus) { set({ focus }); },
|
|
15
|
+
set error(error) { set({ error }); },
|
|
16
|
+
change(value) { set({ value }); },
|
|
17
|
+
set
|
|
18
|
+
}), [state, set]);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlRmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBVXZELE1BQU0sVUFBVSxRQUFRLENBQUMsUUFBZSxFQUFFO0lBRXhDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtRQUNoRCxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwQixJQUFJLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksV0FBVyxLQUFLLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxDQUFDLEtBQWEsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssQ0FBQyxLQUEwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELElBQUksS0FBSyxDQUFDLEtBQXlCLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLEtBQWEsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxHQUFHO0tBQ0osQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyJ9
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
2
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
3
|
+
import { GoogleGenAI } from '@google/genai';
|
|
4
|
+
import OpenAI from 'openai';
|
|
5
|
+
export function useTestProvider() {
|
|
6
|
+
const [testing, setTesting] = useState(false);
|
|
7
|
+
const [error, setError] = useState();
|
|
8
|
+
const test = useCallback(async (provider) => {
|
|
9
|
+
const timeoutId = setTimeout(() => {
|
|
10
|
+
setTesting(true);
|
|
11
|
+
}, 400);
|
|
12
|
+
try {
|
|
13
|
+
setError(undefined);
|
|
14
|
+
switch (provider.type) {
|
|
15
|
+
case 'gemini':
|
|
16
|
+
await testGemini(provider.key);
|
|
17
|
+
break;
|
|
18
|
+
case 'openai':
|
|
19
|
+
await testOpenAI(provider.key);
|
|
20
|
+
break;
|
|
21
|
+
case 'anthropic':
|
|
22
|
+
await testAnthropic(provider.key);
|
|
23
|
+
break;
|
|
24
|
+
case 'openai-compatible':
|
|
25
|
+
await testOpenAICompatibleAPI(provider.url, provider.key);
|
|
26
|
+
break;
|
|
27
|
+
default: throw new Error('Unknown provider');
|
|
28
|
+
}
|
|
29
|
+
clearTimeout(timeoutId);
|
|
30
|
+
setTesting(false);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
clearTimeout(timeoutId);
|
|
35
|
+
setTesting(false);
|
|
36
|
+
setError(error.message.replaceAll(/(\n|\r|\r\n)/g, ' '));
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}, []);
|
|
40
|
+
async function testGemini(apiKey) {
|
|
41
|
+
const client = new GoogleGenAI({ apiKey });
|
|
42
|
+
await client.models.list();
|
|
43
|
+
}
|
|
44
|
+
async function testOpenAI(apiKey) {
|
|
45
|
+
const client = new OpenAI({ apiKey });
|
|
46
|
+
await client.models.list();
|
|
47
|
+
}
|
|
48
|
+
async function testAnthropic(apiKey) {
|
|
49
|
+
const client = new Anthropic({ apiKey });
|
|
50
|
+
await client.models.list();
|
|
51
|
+
}
|
|
52
|
+
async function testOpenAICompatibleAPI(baseURL, apiKey) {
|
|
53
|
+
const client = new OpenAI({ baseURL, apiKey });
|
|
54
|
+
await client.models.list();
|
|
55
|
+
}
|
|
56
|
+
return useMemo(() => ({
|
|
57
|
+
testing,
|
|
58
|
+
error,
|
|
59
|
+
test
|
|
60
|
+
}), [testing, error, test]);
|
|
61
|
+
}
|
|
62
|
+
;
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVGVzdFByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZVRlc3RQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFdkQsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsTUFBTSxVQUFVLGVBQWU7SUFFN0IsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQVUsQ0FBQztJQUU3QyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQWdELEVBQUUsRUFBRTtRQUVsRixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixJQUFJLENBQUM7WUFFSCxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFcEIsUUFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssUUFBUTtvQkFBRSxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUMsTUFBTTtnQkFDckQsS0FBSyxRQUFRO29CQUFFLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFBQyxNQUFNO2dCQUNyRCxLQUFLLFdBQVc7b0JBQUUsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUFDLE1BQU07Z0JBQzNELEtBQUssbUJBQW1CO29CQUFFLE1BQU0sdUJBQXVCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUMsTUFBTTtnQkFDM0YsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFFRCxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWxCLE9BQU8sSUFBSSxDQUFDO1FBRWQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFFZixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLFFBQVEsQ0FBRSxLQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVwRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxLQUFLLFVBQVUsVUFBVSxDQUFDLE1BQWU7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxVQUFVLFVBQVUsQ0FBQyxNQUFlO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssVUFBVSxhQUFhLENBQUMsTUFBZTtRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDekMsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsT0FBZ0IsRUFBRSxNQUFlO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLE9BQU87UUFDUCxLQUFLO1FBQ0wsSUFBSTtLQUNMLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBQUEsQ0FBQyJ9
|
package/dist/install.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as v1 from "./migrations/1-settings-1.1.0.js";
|
|
2
|
+
import * as v2 from "./migrations/2-add-providers-1.2.0.js";
|
|
3
|
+
await v1.run();
|
|
4
|
+
await v2.run();
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnN0YWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU1RCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDIn0=
|