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.
@@ -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.5";
10
- export declare const DASHBOARD_URL = "https://3.35.4.127.nip.io";
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
@@ -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,8BAA8B,CAAC"}
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.5';
12
- export const DASHBOARD_URL = 'https://3.35.4.127.nip.io';
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
@@ -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,2BAA2B,CAAC"}
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.5",
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.35.4.127.nip.io",
90
+ "dashboardUrl": "https://3.39.170.84.nip.io",
91
91
  "author": "Hanseol Team",
92
92
  "license": "MIT",
93
93
  "repository": {
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- interface LLMSetupWizardProps {
3
- onComplete: () => void;
4
- onSkip: () => void;
5
- }
6
- export declare const LLMSetupWizard: React.FC<LLMSetupWizardProps>;
7
- export {};
8
- //# sourceMappingURL=LLMSetupWizard.d.ts.map
@@ -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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"}