hanseol 4.1.5 → 4.1.7
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/dist/constants.d.ts +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -2
- package/dist/constants.js.map +1 -1
- package/package.json +2 -2
- package/dist/ui/components/LLMSetupWizard.d.ts +0 -8
- package/dist/ui/components/LLMSetupWizard.d.ts.map +0 -1
- package/dist/ui/components/LLMSetupWizard.js +0 -183
- package/dist/ui/components/LLMSetupWizard.js.map +0 -1
package/dist/constants.d.ts
CHANGED
|
@@ -6,6 +6,6 @@ export declare const BACKUPS_DIR: string;
|
|
|
6
6
|
export declare const PROJECTS_DIR: string;
|
|
7
7
|
export declare const CREDENTIALS_FILE_PATH: string;
|
|
8
8
|
export declare const APP_NAME = "hanseol";
|
|
9
|
-
export declare const APP_VERSION = "4.1.
|
|
10
|
-
export declare const DASHBOARD_URL = "https://3.
|
|
9
|
+
export declare const APP_VERSION = "4.1.7";
|
|
10
|
+
export declare const DASHBOARD_URL = "https://3.39.170.84.nip.io";
|
|
11
11
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,cAAc,QAAsC,CAAC;AAGlE,eAAO,MAAM,aAAa,QAAiB,CAAC;AAM5C,eAAO,MAAM,gBAAgB,QAA2C,CAAC;AAMzE,eAAO,MAAM,QAAQ,QAAoC,CAAC;AAM1D,eAAO,MAAM,WAAW,QAAuC,CAAC;AAMhE,eAAO,MAAM,YAAY,QAAwC,CAAC;AAOlE,eAAO,MAAM,qBAAqB,QAAgD,CAAC;AAMnF,eAAO,MAAM,QAAQ,YAAY,CAAC;AAKlC,eAAO,MAAM,WAAW,UAAU,CAAC;AAMnC,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,cAAc,QAAsC,CAAC;AAGlE,eAAO,MAAM,aAAa,QAAiB,CAAC;AAM5C,eAAO,MAAM,gBAAgB,QAA2C,CAAC;AAMzE,eAAO,MAAM,QAAQ,QAAoC,CAAC;AAM1D,eAAO,MAAM,WAAW,QAAuC,CAAC;AAMhE,eAAO,MAAM,YAAY,QAAwC,CAAC;AAOlE,eAAO,MAAM,qBAAqB,QAAgD,CAAC;AAMnF,eAAO,MAAM,QAAQ,YAAY,CAAC;AAKlC,eAAO,MAAM,WAAW,UAAU,CAAC;AAMnC,eAAO,MAAM,aAAa,+BAA+B,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -8,6 +8,6 @@ export const BACKUPS_DIR = path.join(LOCAL_HOME_DIR, 'backups');
|
|
|
8
8
|
export const PROJECTS_DIR = path.join(LOCAL_HOME_DIR, 'projects');
|
|
9
9
|
export const CREDENTIALS_FILE_PATH = path.join(LOCAL_HOME_DIR, 'credentials.json');
|
|
10
10
|
export const APP_NAME = 'hanseol';
|
|
11
|
-
export const APP_VERSION = '4.1.
|
|
12
|
-
export const DASHBOARD_URL = 'https://3.
|
|
11
|
+
export const APP_VERSION = '4.1.7';
|
|
12
|
+
export const DASHBOARD_URL = 'https://3.39.170.84.nip.io';
|
|
13
13
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAMzB,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAGlE,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAM5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAMzE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAM1D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;AAMhE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAOlE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAMnF,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC;AAKlC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAMnC,MAAM,CAAC,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAMzB,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAGlE,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAM5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAMzE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAM1D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;AAMhE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAOlE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAMnF,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC;AAKlC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAMnC,MAAM,CAAC,MAAM,aAAa,GAAG,4BAA4B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hanseol",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.7",
|
|
4
4
|
"description": "Hanseol - OpenAI-Compatible Coding Agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"ollama",
|
|
88
88
|
"offline"
|
|
89
89
|
],
|
|
90
|
-
"dashboardUrl": "https://3.
|
|
90
|
+
"dashboardUrl": "https://3.39.170.84.nip.io",
|
|
91
91
|
"author": "Hanseol Team",
|
|
92
92
|
"license": "MIT",
|
|
93
93
|
"repository": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LLMSetupWizard.d.ts","sourceRoot":"","sources":["../../../src/ui/components/LLMSetupWizard.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAOrD,UAAU,mBAAmB;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAaD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAmSxD,CAAC"}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import React, { useState, useCallback } from 'react';
|
|
2
|
-
import { Box, Text, useInput } from 'ink';
|
|
3
|
-
import TextInput from 'ink-text-input';
|
|
4
|
-
import { configManager } from '../../core/config/config-manager.js';
|
|
5
|
-
import { LLMClient } from '../../core/llm/llm-client.js';
|
|
6
|
-
export const LLMSetupWizard = ({ onComplete, onSkip }) => {
|
|
7
|
-
const [formData, setFormData] = useState({
|
|
8
|
-
name: '',
|
|
9
|
-
baseUrl: '',
|
|
10
|
-
apiKey: '',
|
|
11
|
-
modelId: '',
|
|
12
|
-
modelName: '',
|
|
13
|
-
maxContextLength: '128000',
|
|
14
|
-
});
|
|
15
|
-
const [formField, setFormField] = useState('name');
|
|
16
|
-
const [formButtonIndex, setFormButtonIndex] = useState(0);
|
|
17
|
-
const [error, setError] = useState(null);
|
|
18
|
-
const [isTesting, setIsTesting] = useState(false);
|
|
19
|
-
const handleFormNavigation = useCallback((key) => {
|
|
20
|
-
const fields = ['name', 'baseUrl', 'apiKey', 'modelId', 'modelName', 'maxContextLength', 'buttons'];
|
|
21
|
-
const currentIndex = fields.indexOf(formField);
|
|
22
|
-
if (key.tab) {
|
|
23
|
-
if (key.shift) {
|
|
24
|
-
const prevIndex = currentIndex > 0 ? currentIndex - 1 : fields.length - 1;
|
|
25
|
-
setFormField(fields[prevIndex]);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const nextIndex = currentIndex < fields.length - 1 ? currentIndex + 1 : 0;
|
|
29
|
-
setFormField(fields[nextIndex]);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (key.upArrow) {
|
|
33
|
-
if (formField === 'buttons') {
|
|
34
|
-
setFormButtonIndex((prev) => (prev === 0 ? 1 : 0));
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
const prevIndex = currentIndex > 0 ? currentIndex - 1 : fields.length - 1;
|
|
38
|
-
setFormField(fields[prevIndex]);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (key.downArrow) {
|
|
42
|
-
if (formField === 'buttons') {
|
|
43
|
-
setFormButtonIndex((prev) => (prev === 0 ? 1 : 0));
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
const nextIndex = currentIndex < fields.length - 1 ? currentIndex + 1 : 0;
|
|
47
|
-
setFormField(fields[nextIndex]);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}, [formField]);
|
|
51
|
-
const handleFormSubmit = useCallback(async () => {
|
|
52
|
-
if (formButtonIndex === 1) {
|
|
53
|
-
onSkip();
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (!formData.name.trim()) {
|
|
57
|
-
setError('Name is required');
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (!formData.baseUrl.trim()) {
|
|
61
|
-
setError('Base URL is required');
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (!formData.modelId.trim()) {
|
|
65
|
-
setError('Model ID is required');
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
setIsTesting(true);
|
|
69
|
-
setError(null);
|
|
70
|
-
try {
|
|
71
|
-
const result = await LLMClient.testConnection(formData.baseUrl, formData.apiKey, formData.modelId);
|
|
72
|
-
if (!result.success) {
|
|
73
|
-
setError(result.error || 'Connection failed');
|
|
74
|
-
setIsTesting(false);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const maxTokens = parseInt(formData.maxContextLength, 10) || 128000;
|
|
78
|
-
const newEndpoint = {
|
|
79
|
-
id: `ep-${Date.now()}`,
|
|
80
|
-
name: formData.name,
|
|
81
|
-
baseUrl: formData.baseUrl,
|
|
82
|
-
apiKey: formData.apiKey || undefined,
|
|
83
|
-
models: [
|
|
84
|
-
{
|
|
85
|
-
id: formData.modelId,
|
|
86
|
-
name: formData.modelName || formData.modelId,
|
|
87
|
-
maxTokens: maxTokens,
|
|
88
|
-
enabled: true,
|
|
89
|
-
healthStatus: 'healthy',
|
|
90
|
-
lastHealthCheck: new Date(),
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
createdAt: new Date(),
|
|
94
|
-
updatedAt: new Date(),
|
|
95
|
-
};
|
|
96
|
-
await configManager.createInitialEndpoint(newEndpoint);
|
|
97
|
-
setIsTesting(false);
|
|
98
|
-
onComplete();
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
101
|
-
setError(err instanceof Error ? err.message : 'Unknown error');
|
|
102
|
-
setIsTesting(false);
|
|
103
|
-
}
|
|
104
|
-
}, [formData, formButtonIndex, onComplete, onSkip]);
|
|
105
|
-
useInput((_inputChar, key) => {
|
|
106
|
-
if (key.tab) {
|
|
107
|
-
handleFormNavigation({ tab: true, shift: key.shift });
|
|
108
|
-
}
|
|
109
|
-
else if (key.upArrow || key.downArrow) {
|
|
110
|
-
handleFormNavigation({ upArrow: key.upArrow, downArrow: key.downArrow });
|
|
111
|
-
}
|
|
112
|
-
else if (key.return && formField === 'buttons') {
|
|
113
|
-
handleFormSubmit();
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
return (React.createElement(Box, { flexDirection: "column" },
|
|
117
|
-
React.createElement(Text, null, ' '),
|
|
118
|
-
React.createElement(Text, null, ' '),
|
|
119
|
-
React.createElement(Box, { borderStyle: "double", borderColor: "cyan", paddingX: 2, marginBottom: 1 },
|
|
120
|
-
React.createElement(Text, { color: "cyan", bold: true }, "Welcome to Hanseol!")),
|
|
121
|
-
React.createElement(Box, { paddingX: 1, marginBottom: 1, flexDirection: "column" },
|
|
122
|
-
React.createElement(Text, { color: "yellow" }, "No LLM endpoint configured."),
|
|
123
|
-
React.createElement(Text, { color: "gray" }, "Let's set up your first LLM endpoint.")),
|
|
124
|
-
React.createElement(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, flexDirection: "column" },
|
|
125
|
-
React.createElement(Box, null,
|
|
126
|
-
React.createElement(Text, { color: formField === 'name' ? 'cyan' : 'yellow' },
|
|
127
|
-
formField === 'name' ? '> ' : ' ',
|
|
128
|
-
"Endpoint Name:"),
|
|
129
|
-
formField === 'name' ? (React.createElement(TextInput, { value: formData.name, onChange: (value) => setFormData({ ...formData, name: value }), placeholder: "My Local LLM" })) : (React.createElement(Text, null,
|
|
130
|
-
" ",
|
|
131
|
-
formData.name || '(empty)'))),
|
|
132
|
-
React.createElement(Box, null,
|
|
133
|
-
React.createElement(Text, { color: formField === 'baseUrl' ? 'cyan' : 'yellow' },
|
|
134
|
-
formField === 'baseUrl' ? '> ' : ' ',
|
|
135
|
-
"Base URL:"),
|
|
136
|
-
formField === 'baseUrl' ? (React.createElement(TextInput, { value: formData.baseUrl, onChange: (value) => setFormData({ ...formData, baseUrl: value }), placeholder: "http://localhost:11434/v1" })) : (React.createElement(Text, null,
|
|
137
|
-
" ",
|
|
138
|
-
formData.baseUrl || '(empty)'))),
|
|
139
|
-
React.createElement(Box, null,
|
|
140
|
-
React.createElement(Text, { color: formField === 'apiKey' ? 'cyan' : 'yellow' },
|
|
141
|
-
formField === 'apiKey' ? '> ' : ' ',
|
|
142
|
-
"API Key:"),
|
|
143
|
-
formField === 'apiKey' ? (React.createElement(TextInput, { value: formData.apiKey, onChange: (value) => setFormData({ ...formData, apiKey: value }), placeholder: "(optional)" })) : (React.createElement(Text, null,
|
|
144
|
-
" ",
|
|
145
|
-
formData.apiKey ? '••••••••' : '(optional)'))),
|
|
146
|
-
React.createElement(Box, null,
|
|
147
|
-
React.createElement(Text, { color: formField === 'modelId' ? 'cyan' : 'yellow' },
|
|
148
|
-
formField === 'modelId' ? '> ' : ' ',
|
|
149
|
-
"Model ID:"),
|
|
150
|
-
formField === 'modelId' ? (React.createElement(TextInput, { value: formData.modelId, onChange: (value) => setFormData({ ...formData, modelId: value }), placeholder: "qwen2.5-coder:32b" })) : (React.createElement(Text, null,
|
|
151
|
-
" ",
|
|
152
|
-
formData.modelId || '(empty)'))),
|
|
153
|
-
React.createElement(Box, null,
|
|
154
|
-
React.createElement(Text, { color: formField === 'modelName' ? 'cyan' : 'yellow' },
|
|
155
|
-
formField === 'modelName' ? '> ' : ' ',
|
|
156
|
-
"Model Name:"),
|
|
157
|
-
formField === 'modelName' ? (React.createElement(TextInput, { value: formData.modelName, onChange: (value) => setFormData({ ...formData, modelName: value }), placeholder: "Qwen 2.5 Coder 32B (optional)" })) : (React.createElement(Text, null,
|
|
158
|
-
" ",
|
|
159
|
-
formData.modelName || '(optional)'))),
|
|
160
|
-
React.createElement(Box, null,
|
|
161
|
-
React.createElement(Text, { color: formField === 'maxContextLength' ? 'cyan' : 'yellow' },
|
|
162
|
-
formField === 'maxContextLength' ? '> ' : ' ',
|
|
163
|
-
"Max Context:"),
|
|
164
|
-
formField === 'maxContextLength' ? (React.createElement(TextInput, { value: formData.maxContextLength, onChange: (value) => setFormData({ ...formData, maxContextLength: value.replace(/[^0-9]/g, '') }), placeholder: "128000" })) : (React.createElement(Text, null,
|
|
165
|
-
" ",
|
|
166
|
-
formData.maxContextLength || '128000')))),
|
|
167
|
-
error && (React.createElement(Box, { marginTop: 1, paddingX: 1 },
|
|
168
|
-
React.createElement(Text, { color: "red" },
|
|
169
|
-
"Error: ",
|
|
170
|
-
error))),
|
|
171
|
-
React.createElement(Box, { marginTop: 1, flexDirection: "column", paddingX: 1 },
|
|
172
|
-
React.createElement(Box, null,
|
|
173
|
-
React.createElement(Text, { color: formField === 'buttons' && formButtonIndex === 0 ? 'cyan' : undefined, bold: formField === 'buttons' && formButtonIndex === 0 },
|
|
174
|
-
formField === 'buttons' && formButtonIndex === 0 ? '> ' : ' ',
|
|
175
|
-
isTesting ? 'Testing...' : 'Test & Save')),
|
|
176
|
-
React.createElement(Box, null,
|
|
177
|
-
React.createElement(Text, { color: formField === 'buttons' && formButtonIndex === 1 ? 'cyan' : undefined, bold: formField === 'buttons' && formButtonIndex === 1 },
|
|
178
|
-
formField === 'buttons' && formButtonIndex === 1 ? '> ' : ' ',
|
|
179
|
-
"Skip (configure later via /settings)"))),
|
|
180
|
-
React.createElement(Box, { marginTop: 1 },
|
|
181
|
-
React.createElement(Text, { dimColor: true }, "\u2191\u2193/Tab: navigate fields | Shift+Tab: prev | Enter: select button"))));
|
|
182
|
-
};
|
|
183
|
-
//# sourceMappingURL=LLMSetupWizard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LLMSetupWizard.js","sourceRoot":"","sources":["../../../src/ui/components/LLMSetupWizard.tsx"],"names":[],"mappings":"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"}
|