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
|
@@ -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,18 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
3
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
|
-
setClosed(true);
|
|
11
|
-
onSend(model.name, apiKey);
|
|
12
|
-
}
|
|
13
|
-
if (closed) {
|
|
14
|
-
return null;
|
|
7
|
+
function handleSend() {
|
|
8
|
+
onSend();
|
|
15
9
|
}
|
|
16
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 })] }));
|
|
17
11
|
}
|
|
18
|
-
//# 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
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
import "./migrations/settings-1.1.0.js";
|
|
2
|
-
|
|
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=
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { configPath, dataDir, historyDir } from "../utils/paths.js";
|
|
6
|
+
import { configStore } from "../stores/config.js";
|
|
7
|
+
export async function run() {
|
|
8
|
+
if (!fs.existsSync(dataDir)) {
|
|
9
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
10
|
+
}
|
|
11
|
+
if (fs.existsSync(path.join(dataDir, 'chats'))) {
|
|
12
|
+
fs.renameSync(path.join(dataDir, 'chats'), path.join(dataDir, 'history'));
|
|
13
|
+
}
|
|
14
|
+
if (!fs.existsSync(historyDir)) {
|
|
15
|
+
fs.mkdirSync(historyDir, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
if (!fs.existsSync(configPath)) {
|
|
18
|
+
await configStore.save({
|
|
19
|
+
model: undefined,
|
|
20
|
+
providers: {
|
|
21
|
+
gemini: {
|
|
22
|
+
apiKey: undefined
|
|
23
|
+
},
|
|
24
|
+
openai: {
|
|
25
|
+
apiKey: undefined
|
|
26
|
+
},
|
|
27
|
+
anthropic: {
|
|
28
|
+
apiKey: undefined
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const config = await configStore.get();
|
|
34
|
+
if (config.version === undefined) {
|
|
35
|
+
config.version = 1;
|
|
36
|
+
if (config.settings === undefined) {
|
|
37
|
+
config.settings = {
|
|
38
|
+
metadata: {
|
|
39
|
+
type: 'boolean',
|
|
40
|
+
title: 'Metadata',
|
|
41
|
+
description: 'Show metadata at the end of each response',
|
|
42
|
+
value: true
|
|
43
|
+
},
|
|
44
|
+
maxOutputTokens: {
|
|
45
|
+
type: 'number',
|
|
46
|
+
title: 'Max Output Tokens',
|
|
47
|
+
description: 'Max number of output tokens. Min 1,000, Max 10,000', value: 8000,
|
|
48
|
+
min: 1000,
|
|
49
|
+
max: 10000
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
await configStore.save(config);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS1zZXR0aW5ncy0xLjEuMC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb25zLzEtc2V0dGluZ3MtMS4xLjAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMERBQTBEO0FBQzFELHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxNQUFNLENBQUMsS0FBSyxVQUFVLEdBQUc7SUFFdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM1QixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMvQixFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQztZQUNyQixLQUFLLEVBQUUsU0FBUztZQUNoQixTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRSxTQUFTO2lCQUNsQjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sTUFBTSxFQUFFLFNBQVM7aUJBQ2xCO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxNQUFNLEVBQUUsU0FBUztpQkFDbEI7YUFDRjtTQUNLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUV2QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFFakMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFFbkIsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxRQUFRLEdBQUc7Z0JBQ2hCLFFBQVEsRUFBRTtvQkFDUixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsVUFBVTtvQkFDakIsV0FBVyxFQUFFLDJDQUEyQztvQkFDeEQsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0QsZUFBZSxFQUFFO29CQUNmLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxtQkFBbUI7b0JBQzFCLFdBQVcsRUFBRSxvREFBb0QsRUFBRSxLQUFLLEVBQUUsSUFBSTtvQkFDOUUsR0FBRyxFQUFFLElBQUk7b0JBQ1QsR0FBRyxFQUFFLEtBQUs7aUJBQ1g7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
4
|
+
import { configStore } from "../stores/config.js";
|
|
5
|
+
export async function run() {
|
|
6
|
+
const VERSION = 2;
|
|
7
|
+
const config = await configStore.get();
|
|
8
|
+
if (config.version < VERSION) {
|
|
9
|
+
config.version = VERSION;
|
|
10
|
+
config.isFirstExecution = true;
|
|
11
|
+
if (config.model) {
|
|
12
|
+
config.model = {
|
|
13
|
+
id: config.model.model,
|
|
14
|
+
providerId: config.model.provider
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
config.providers = {
|
|
18
|
+
gemini: {
|
|
19
|
+
id: 'gemini',
|
|
20
|
+
key: config.providers.gemini?.apiKey,
|
|
21
|
+
type: 'gemini',
|
|
22
|
+
name: 'Gemini',
|
|
23
|
+
models: [
|
|
24
|
+
{ id: 'gemini-3-flash-preview', name: 'Gemini 3 Flash Preview', config: { thinkingConfig: { thinkingLevel: 'LOW' } } },
|
|
25
|
+
{ id: 'gemini-3-pro-preview', name: 'Gemini 3 Pro Preview', config: { thinkingConfig: { thinkingLevel: 'LOW' } } },
|
|
26
|
+
{ id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', config: { thinkingBudget: 500 } },
|
|
27
|
+
{ id: 'gemini-2.5-flash-lite', name: 'Gemini 2.5 Flash Lite', config: { thinkingBudget: 512 } },
|
|
28
|
+
{ id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', config: { thinkingBudget: 500 } }
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
openai: {
|
|
32
|
+
id: 'openai',
|
|
33
|
+
key: config.providers.openai?.apiKey,
|
|
34
|
+
type: 'openai',
|
|
35
|
+
name: 'OpenAI',
|
|
36
|
+
models: [
|
|
37
|
+
{ id: 'gpt-5-mini', name: 'GPT-5 Mini', config: { effort: 'low' } },
|
|
38
|
+
{ id: 'gpt-5-nano', name: 'GPT-5 Nano', config: { effort: 'low' } },
|
|
39
|
+
{ id: 'gpt-5', name: 'GPT-5', config: { effort: 'low' } },
|
|
40
|
+
{ id: 'gpt-5.2', name: 'GPT-5.2', config: { effort: 'low' } },
|
|
41
|
+
{ id: 'gpt-5.2-pro', name: 'GPT-5.2 Pro', config: { effort: 'low' } },
|
|
42
|
+
{ id: 'gpt-4.1', name: 'GPT-4.1' },
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
anthropic: {
|
|
46
|
+
id: 'anthropic',
|
|
47
|
+
key: config.providers.anthropic?.apiKey,
|
|
48
|
+
type: 'anthropic',
|
|
49
|
+
name: 'Anthropic',
|
|
50
|
+
models: [
|
|
51
|
+
{ id: 'claude-haiku-4-5', name: 'Claude Haiku 4.5' },
|
|
52
|
+
{ id: 'claude-sonnet-4-5', name: 'Claude Sonnet 4.5' },
|
|
53
|
+
{ id: 'claude-opus-4-5', name: 'Claude Opus 4.5' }
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
await configStore.save(config);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi1hZGQtcHJvdmlkZXJzLTEuMi4wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGlvbnMvMi1hZGQtcHJvdmlkZXJzLTEuMi4wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCx1REFBdUQ7QUFDdkQsNERBQTREO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxNQUFNLENBQUMsS0FBSyxVQUFVLEdBQUc7SUFFdkIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRXZDLElBQUksTUFBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUU3QixNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV6QixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRS9CLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxLQUFLLEdBQUc7Z0JBQ2IsRUFBRSxFQUFHLE1BQU0sQ0FBQyxLQUFhLENBQUMsS0FBSztnQkFDL0IsVUFBVSxFQUFHLE1BQU0sQ0FBQyxLQUFhLENBQUMsUUFBUTthQUMzQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sQ0FBQyxTQUFTLEdBQUc7WUFDakIsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxRQUFRO2dCQUNaLEdBQUcsRUFBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWMsRUFBRSxNQUFNO2dCQUM3QyxJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUU7b0JBQ04sRUFBRSxFQUFFLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVB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
|
package/dist/stores/config.js
CHANGED
|
@@ -13,20 +13,49 @@ class ConfigStore {
|
|
|
13
13
|
this.config = await this.store.get(defaultConfig);
|
|
14
14
|
return this.config;
|
|
15
15
|
}
|
|
16
|
-
async
|
|
16
|
+
async addProvider(name, url, key, models) {
|
|
17
17
|
const config = await this.get();
|
|
18
|
-
|
|
18
|
+
const time = Math.round(Date.now() / 1000);
|
|
19
|
+
const id = `${name.toLowerCase().replaceAll(' ', '-')}-${time}`;
|
|
20
|
+
config.providers[id] = {
|
|
21
|
+
id,
|
|
22
|
+
type: 'openai-compatible',
|
|
23
|
+
key,
|
|
24
|
+
name,
|
|
25
|
+
url,
|
|
26
|
+
models: models.map(model => ({
|
|
27
|
+
id: model,
|
|
28
|
+
name: model
|
|
29
|
+
}))
|
|
30
|
+
};
|
|
19
31
|
await this.save(config);
|
|
20
32
|
}
|
|
21
|
-
async
|
|
33
|
+
async updateProvider(id, provider) {
|
|
22
34
|
const config = await this.get();
|
|
23
|
-
config.providers[
|
|
35
|
+
config.providers[id] = { ...config.providers[id], ...provider };
|
|
36
|
+
await this.save(config);
|
|
37
|
+
}
|
|
38
|
+
async deleteProvider(id) {
|
|
39
|
+
const config = await this.get();
|
|
40
|
+
delete config.providers[id];
|
|
41
|
+
if (config.model?.providerId === id) {
|
|
42
|
+
config.model = undefined;
|
|
43
|
+
}
|
|
44
|
+
await this.save(config);
|
|
45
|
+
}
|
|
46
|
+
async setModel(providerId, modelId) {
|
|
47
|
+
const config = await this.get();
|
|
48
|
+
config.model = { providerId, id: modelId };
|
|
49
|
+
await this.save(config);
|
|
50
|
+
}
|
|
51
|
+
async setProviderApiKey(providerId, key) {
|
|
52
|
+
const config = await this.get();
|
|
53
|
+
config.providers[providerId].key = key;
|
|
24
54
|
await this.save(config);
|
|
25
55
|
}
|
|
26
56
|
async save(config) {
|
|
27
|
-
this.config = config;
|
|
28
57
|
await this.store.save(config);
|
|
29
58
|
}
|
|
30
59
|
}
|
|
31
60
|
export const configStore = new ConfigStore();
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3Jlcy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE1BQU0sV0FBVztJQUVQLEtBQUssQ0FBUTtJQUNiLE1BQU0sQ0FBVTtJQUV4QjtRQUNFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHO1FBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQVMsYUFBYSxDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLE1BQWdCO1FBRXhFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFFaEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRztZQUNyQixFQUFFO1lBQ0YsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixHQUFHO1lBQ0gsSUFBSTtZQUNKLEdBQUc7WUFDSCxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsRUFBRSxLQUFLO2dCQUNULElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUVGLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFVLEVBQUUsUUFBMkI7UUFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFVO1FBRTdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWhDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQzNCLENBQUM7UUFFRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBa0IsRUFBRSxPQUFlO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQWtCLEVBQUUsR0FBVztRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDdkMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQWM7UUFDdkIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const instructions = `
|
|
2
2
|
You are a CLI (command line tool).
|
|
3
|
-
- Your name is Ask
|
|
3
|
+
- Your name is Ask CLI
|
|
4
4
|
- Your main job is to answer the user question in the best way possible. Your responses must be clear, exact and precise.
|
|
5
5
|
- You must help the user with info about commands, programs, OS, coding, development, etc.
|
|
6
6
|
- If the user doesn't specify the OS, assume they are using ${process.platform}.
|
|
@@ -25,11 +25,11 @@ Current path: ${process.cwd()}
|
|
|
25
25
|
|
|
26
26
|
Current date: ${new Date().toString()}
|
|
27
27
|
|
|
28
|
-
Ask
|
|
28
|
+
Ask CLI help:
|
|
29
29
|
|
|
30
30
|
AI CLI to help you with commands, coding, apps and more.
|
|
31
31
|
|
|
32
|
-
Version: 1.1
|
|
32
|
+
Version: 1.2.1
|
|
33
33
|
|
|
34
34
|
Usage: ask <prompt..>
|
|
35
35
|
|
|
@@ -38,6 +38,7 @@ Ask Cli help:
|
|
|
38
38
|
ask /models Select a model
|
|
39
39
|
ask /providers Setup providers
|
|
40
40
|
ask /config Configuration
|
|
41
|
+
ask /connect Connect to an external provider using OpenAI-compatible API
|
|
41
42
|
ask /history List the chat history
|
|
42
43
|
ask /clear Clear the chat history
|
|
43
44
|
|
|
@@ -55,4 +56,4 @@ Ask Cli help:
|
|
|
55
56
|
what is the chmod command
|
|
56
57
|
ask what is using port 80 -c "netstat -ano"
|
|
57
58
|
`;
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlcy9pbnN0cnVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHOzs7OztnRUFLb0MsT0FBTyxDQUFDLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FnQmxFLE9BQU8sQ0FBQyxRQUFROztnQkFFZCxPQUFPLENBQUMsR0FBRyxFQUFFOztnQkFFYixJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FnQ3BDLENBQUMifQ==
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
export const defaultConfig = {
|
|
2
|
+
version: 2,
|
|
3
|
+
isFirstExecution: true,
|
|
2
4
|
model: undefined,
|
|
3
|
-
providers: {
|
|
4
|
-
gemini: {
|
|
5
|
-
apiKey: undefined
|
|
6
|
-
},
|
|
7
|
-
anthropic: {
|
|
8
|
-
apiKey: undefined
|
|
9
|
-
},
|
|
10
|
-
openai: {
|
|
11
|
-
apiKey: undefined
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
5
|
settings: {
|
|
15
6
|
metadata: {
|
|
16
7
|
type: 'boolean',
|
|
@@ -25,6 +16,43 @@ export const defaultConfig = {
|
|
|
25
16
|
min: 1000,
|
|
26
17
|
max: 10000
|
|
27
18
|
}
|
|
28
|
-
}
|
|
19
|
+
},
|
|
20
|
+
providers: {
|
|
21
|
+
gemini: {
|
|
22
|
+
id: 'gemini',
|
|
23
|
+
type: 'gemini',
|
|
24
|
+
name: 'Gemini',
|
|
25
|
+
models: [
|
|
26
|
+
{ id: 'gemini-3-flash-preview', name: 'Gemini 3 Flash Preview', config: { thinkingConfig: { thinkingLevel: 'LOW' } } },
|
|
27
|
+
{ id: 'gemini-3-pro-preview', name: 'Gemini 3 Pro Preview', config: { thinkingConfig: { thinkingLevel: 'LOW' } } },
|
|
28
|
+
{ id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', config: { thinkingBudget: 500 } },
|
|
29
|
+
{ id: 'gemini-2.5-flash-lite', name: 'Gemini 2.5 Flash Lite', config: { thinkingBudget: 512 } },
|
|
30
|
+
{ id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', config: { thinkingBudget: 500 } }
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
openai: {
|
|
34
|
+
id: 'openai',
|
|
35
|
+
type: 'openai',
|
|
36
|
+
name: 'OpenAI',
|
|
37
|
+
models: [
|
|
38
|
+
{ id: 'gpt-5-mini', name: 'GPT-5 Mini', config: { effort: 'low' } },
|
|
39
|
+
{ id: 'gpt-5-nano', name: 'GPT-5 Nano', config: { effort: 'low' } },
|
|
40
|
+
{ id: 'gpt-5', name: 'GPT-5', config: { effort: 'low' } },
|
|
41
|
+
{ id: 'gpt-5.2', name: 'GPT-5.2', config: { effort: 'low' } },
|
|
42
|
+
{ id: 'gpt-5.2-pro', name: 'GPT-5.2 Pro', config: { effort: 'low' } },
|
|
43
|
+
{ id: 'gpt-4.1', name: 'GPT-4.1' },
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
anthropic: {
|
|
47
|
+
id: 'anthropic',
|
|
48
|
+
type: 'anthropic',
|
|
49
|
+
name: 'Anthropic',
|
|
50
|
+
models: [
|
|
51
|
+
{ id: 'claude-haiku-4-5', name: 'Claude Haiku 4.5' },
|
|
52
|
+
{ id: 'claude-sonnet-4-5', name: 'Claude Sonnet 4.5' },
|
|
53
|
+
{ id: 'claude-opus-4-5', name: 'Claude Opus 4.5' }
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
},
|
|
29
57
|
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdENvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWZhdWx0Q29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBVztJQUNuQyxPQUFPLEVBQUUsQ0FBQztJQUNWLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsVUFBVTtZQUNqQixXQUFXLEVBQUUsMkNBQTJDO1lBQ3hELEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRCxlQUFlLEVBQUU7WUFDZixJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsV0FBVyxFQUFFLG9EQUFvRCxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzlFLEdBQUcsRUFBRSxJQUFJO1lBQ1QsR0FBRyxFQUFFLEtBQUs7U0FDWDtLQUNGO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsTUFBTSxFQUFFO1lBQ04sRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDdEgsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNsSCxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNyRixFQUFFLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUMvRixFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxFQUFFO2FBQ2xGO1NBQ0Y7UUFDRCxNQUFNLEVBQUU7WUFDTixFQUFFLEVBQUUsUUFBUTtZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUU7Z0JBQ04sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNuRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ25FLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDekQsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3RCxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2FBQ25DO1NBQ0Y7UUFDRCxTQUFTLEVBQUU7WUFDVCxFQUFFLEVBQUUsV0FBVztZQUNmLElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxXQUFXO1lBQ2pCLE1BQU0sRUFBRTtnQkFDTixFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQ3BELEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRTtnQkFDdEQsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO2FBQ25EO1NBQ0Y7S0FDRjtDQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function validateUrl(url) {
|
|
2
|
+
try {
|
|
3
|
+
new URL(url);
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVVcmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdmFsaWRhdGVVcmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFXO0lBQ3JDLElBQUksQ0FBQztRQUNILElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyJ9
|