@mindstudio-ai/local-model-tunnel 0.2.0 → 0.3.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 +30 -115
- package/dist/chunk-PTK4SJQK.js +1768 -0
- package/dist/chunk-PTK4SJQK.js.map +1 -0
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +8 -517
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +24 -5
- package/dist/index.js +6 -13
- package/dist/index.js.map +1 -1
- package/dist/tui-56JFPKBP.js +1561 -0
- package/dist/tui-56JFPKBP.js.map +1 -0
- package/package.json +11 -4
- package/dist/api.d.ts +0 -88
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js +0 -168
- package/dist/api.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/config.d.ts +0 -27
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -109
- package/dist/config.js.map +0 -1
- package/dist/helpers.d.ts +0 -4
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js +0 -33
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/ollama.d.ts +0 -11
- package/dist/ollama.d.ts.map +0 -1
- package/dist/ollama.js +0 -36
- package/dist/ollama.js.map +0 -1
- package/dist/providers/comfyui.d.ts +0 -29
- package/dist/providers/comfyui.d.ts.map +0 -1
- package/dist/providers/comfyui.js +0 -359
- package/dist/providers/comfyui.js.map +0 -1
- package/dist/providers/index.d.ts +0 -63
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -126
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/lmstudio.d.ts +0 -11
- package/dist/providers/lmstudio.d.ts.map +0 -1
- package/dist/providers/lmstudio.js +0 -106
- package/dist/providers/lmstudio.js.map +0 -1
- package/dist/providers/ollama.d.ts +0 -11
- package/dist/providers/ollama.d.ts.map +0 -1
- package/dist/providers/ollama.js +0 -59
- package/dist/providers/ollama.js.map +0 -1
- package/dist/providers/stable-diffusion.d.ts +0 -41
- package/dist/providers/stable-diffusion.d.ts.map +0 -1
- package/dist/providers/stable-diffusion.js +0 -283
- package/dist/providers/stable-diffusion.js.map +0 -1
- package/dist/providers/types.d.ts +0 -196
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -19
- package/dist/providers/types.js.map +0 -1
- package/dist/quickstart/QuickstartScreen.d.ts +0 -5
- package/dist/quickstart/QuickstartScreen.d.ts.map +0 -1
- package/dist/quickstart/QuickstartScreen.js +0 -617
- package/dist/quickstart/QuickstartScreen.js.map +0 -1
- package/dist/quickstart/detect.d.ts +0 -22
- package/dist/quickstart/detect.d.ts.map +0 -1
- package/dist/quickstart/detect.js +0 -243
- package/dist/quickstart/detect.js.map +0 -1
- package/dist/quickstart/index.d.ts +0 -4
- package/dist/quickstart/index.d.ts.map +0 -1
- package/dist/quickstart/index.js +0 -274
- package/dist/quickstart/index.js.map +0 -1
- package/dist/quickstart/installers.d.ts +0 -109
- package/dist/quickstart/installers.d.ts.map +0 -1
- package/dist/quickstart/installers.js +0 -1296
- package/dist/quickstart/installers.js.map +0 -1
- package/dist/runner.d.ts +0 -19
- package/dist/runner.d.ts.map +0 -1
- package/dist/runner.js +0 -314
- package/dist/runner.js.map +0 -1
- package/dist/tui/App.d.ts +0 -7
- package/dist/tui/App.d.ts.map +0 -1
- package/dist/tui/App.js +0 -53
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/TunnelRunner.d.ts +0 -19
- package/dist/tui/TunnelRunner.d.ts.map +0 -1
- package/dist/tui/TunnelRunner.js +0 -228
- package/dist/tui/TunnelRunner.js.map +0 -1
- package/dist/tui/components/Header.d.ts +0 -9
- package/dist/tui/components/Header.d.ts.map +0 -1
- package/dist/tui/components/Header.js +0 -21
- package/dist/tui/components/Header.js.map +0 -1
- package/dist/tui/components/ModelsPanel.d.ts +0 -7
- package/dist/tui/components/ModelsPanel.d.ts.map +0 -1
- package/dist/tui/components/ModelsPanel.js +0 -28
- package/dist/tui/components/ModelsPanel.js.map +0 -1
- package/dist/tui/components/ProvidersPanel.d.ts +0 -7
- package/dist/tui/components/ProvidersPanel.d.ts.map +0 -1
- package/dist/tui/components/ProvidersPanel.js +0 -6
- package/dist/tui/components/ProvidersPanel.js.map +0 -1
- package/dist/tui/components/RequestLog.d.ts +0 -8
- package/dist/tui/components/RequestLog.d.ts.map +0 -1
- package/dist/tui/components/RequestLog.js +0 -60
- package/dist/tui/components/RequestLog.js.map +0 -1
- package/dist/tui/components/StatusBar.d.ts +0 -10
- package/dist/tui/components/StatusBar.d.ts.map +0 -1
- package/dist/tui/components/StatusBar.js +0 -7
- package/dist/tui/components/StatusBar.js.map +0 -1
- package/dist/tui/components/index.d.ts +0 -6
- package/dist/tui/components/index.d.ts.map +0 -1
- package/dist/tui/components/index.js +0 -6
- package/dist/tui/components/index.js.map +0 -1
- package/dist/tui/events.d.ts +0 -35
- package/dist/tui/events.d.ts.map +0 -1
- package/dist/tui/events.js +0 -26
- package/dist/tui/events.js.map +0 -1
- package/dist/tui/hooks/index.d.ts +0 -5
- package/dist/tui/hooks/index.d.ts.map +0 -1
- package/dist/tui/hooks/index.js +0 -5
- package/dist/tui/hooks/index.js.map +0 -1
- package/dist/tui/hooks/useConnection.d.ts +0 -10
- package/dist/tui/hooks/useConnection.d.ts.map +0 -1
- package/dist/tui/hooks/useConnection.js +0 -42
- package/dist/tui/hooks/useConnection.js.map +0 -1
- package/dist/tui/hooks/useModels.d.ts +0 -9
- package/dist/tui/hooks/useModels.d.ts.map +0 -1
- package/dist/tui/hooks/useModels.js +0 -28
- package/dist/tui/hooks/useModels.js.map +0 -1
- package/dist/tui/hooks/useProviders.d.ts +0 -9
- package/dist/tui/hooks/useProviders.d.ts.map +0 -1
- package/dist/tui/hooks/useProviders.js +0 -30
- package/dist/tui/hooks/useProviders.js.map +0 -1
- package/dist/tui/hooks/useRequests.d.ts +0 -9
- package/dist/tui/hooks/useRequests.d.ts.map +0 -1
- package/dist/tui/hooks/useRequests.js +0 -60
- package/dist/tui/hooks/useRequests.js.map +0 -1
- package/dist/tui/index.d.ts +0 -2
- package/dist/tui/index.d.ts.map +0 -1
- package/dist/tui/index.js +0 -19
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/screens/ConfigScreen.d.ts +0 -2
- package/dist/tui/screens/ConfigScreen.d.ts.map +0 -1
- package/dist/tui/screens/ConfigScreen.js +0 -18
- package/dist/tui/screens/ConfigScreen.js.map +0 -1
- package/dist/tui/screens/HomeScreen.d.ts +0 -2
- package/dist/tui/screens/HomeScreen.d.ts.map +0 -1
- package/dist/tui/screens/HomeScreen.js +0 -156
- package/dist/tui/screens/HomeScreen.js.map +0 -1
- package/dist/tui/screens/ModelsScreen.d.ts +0 -2
- package/dist/tui/screens/ModelsScreen.d.ts.map +0 -1
- package/dist/tui/screens/ModelsScreen.js +0 -59
- package/dist/tui/screens/ModelsScreen.js.map +0 -1
- package/dist/tui/screens/StatusScreen.d.ts +0 -2
- package/dist/tui/screens/StatusScreen.d.ts.map +0 -1
- package/dist/tui/screens/StatusScreen.js +0 -53
- package/dist/tui/screens/StatusScreen.js.map +0 -1
- package/dist/tui/screens/index.d.ts +0 -9
- package/dist/tui/screens/index.d.ts.map +0 -1
- package/dist/tui/screens/index.js +0 -38
- package/dist/tui/screens/index.js.map +0 -1
- package/dist/tui/types.d.ts +0 -30
- package/dist/tui/types.d.ts.map +0 -1
- package/dist/tui/types.js +0 -2
- package/dist/tui/types.js.map +0 -1
- package/dist/workflows/index.d.ts +0 -47
- package/dist/workflows/index.d.ts.map +0 -1
- package/dist/workflows/index.js +0 -95
- package/dist/workflows/index.js.map +0 -1
- package/dist/workflows/ltx-video.d.ts +0 -45
- package/dist/workflows/ltx-video.d.ts.map +0 -1
- package/dist/workflows/ltx-video.js +0 -114
- package/dist/workflows/ltx-video.js.map +0 -1
- package/dist/workflows/wan2.1.d.ts +0 -44
- package/dist/workflows/wan2.1.d.ts.map +0 -1
- package/dist/workflows/wan2.1.js +0 -119
- package/dist/workflows/wan2.1.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -1,519 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import { displayModels } from "./helpers.js";
|
|
11
|
-
const program = new Command();
|
|
12
|
-
program
|
|
13
|
-
.name("mindstudio-local")
|
|
14
|
-
.description("Run local AI models with MindStudio")
|
|
15
|
-
.version("0.1.0");
|
|
16
|
-
// Global option for environment
|
|
17
|
-
program.option("-e, --env <environment>", "Environment to use (prod, local)", undefined);
|
|
18
|
-
// Pre-action hook to set environment from global option
|
|
19
|
-
program.hook("preAction", (thisCommand) => {
|
|
20
|
-
const opts = thisCommand.opts();
|
|
21
|
-
if (opts.env) {
|
|
22
|
-
if (opts.env !== "prod" && opts.env !== "local") {
|
|
23
|
-
console.log(chalk.red(`Invalid environment: ${opts.env}. Use 'prod' or 'local'.`));
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
setEnvironment(opts.env);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
// Helper to show environment badge
|
|
30
|
-
function envBadge() {
|
|
31
|
-
const env = getEnvironment();
|
|
32
|
-
if (env === "local") {
|
|
33
|
-
return chalk.bgYellow.black(" LOCAL ");
|
|
34
|
-
}
|
|
35
|
-
return chalk.bgGreen.black(" PROD ");
|
|
36
|
-
}
|
|
37
|
-
// Auth command
|
|
38
|
-
program
|
|
39
|
-
.command("auth")
|
|
40
|
-
.description("Authenticate with MindStudio via browser")
|
|
41
|
-
.action(async () => {
|
|
42
|
-
const info = getEnvironmentInfo();
|
|
43
|
-
console.log(chalk.blue(`\nMindStudio Authentication ${envBadge()}\n`));
|
|
44
|
-
console.log(chalk.white(`API: ${info.apiBaseUrl}\n`));
|
|
45
|
-
const spinner = ora("Requesting authorization...").start();
|
|
46
|
-
const { url: authUrl, token } = await requestDeviceAuth();
|
|
47
|
-
spinner.stop();
|
|
48
|
-
console.log(chalk.white("Opening browser for authentication...\n"));
|
|
49
|
-
console.log(chalk.white(` If browser doesn't open, visit:`));
|
|
50
|
-
console.log(chalk.cyan(` ${authUrl}\n`));
|
|
51
|
-
await open(authUrl);
|
|
52
|
-
const pollSpinner = ora("Waiting for browser authorization...").start();
|
|
53
|
-
const pollInterval = 2000;
|
|
54
|
-
const maxAttempts = 30;
|
|
55
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
56
|
-
await sleep(pollInterval);
|
|
57
|
-
const result = await pollDeviceAuth(token);
|
|
58
|
-
if (result.status === "completed" && result.apiKey) {
|
|
59
|
-
setApiKey(result.apiKey);
|
|
60
|
-
pollSpinner.succeed(chalk.green("Authenticated successfully!"));
|
|
61
|
-
console.log(chalk.white(`Config saved to: ${getConfigPath()}\n`));
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (result.status === "expired") {
|
|
65
|
-
pollSpinner.fail(chalk.red("Authorization expired. Please try again."));
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
const remaining = Math.floor(((maxAttempts - i) * pollInterval) / 1000);
|
|
69
|
-
pollSpinner.text = `Waiting for browser authorization... (${remaining}s remaining)`;
|
|
70
|
-
}
|
|
71
|
-
pollSpinner.fail(chalk.red("Authorization timed out. Please try again."));
|
|
72
|
-
process.exit(1);
|
|
73
|
-
});
|
|
74
|
-
function sleep(ms) {
|
|
75
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
76
|
-
}
|
|
77
|
-
async function waitForEnter() {
|
|
78
|
-
const { spawn } = await import("child_process");
|
|
79
|
-
console.log(chalk.gray("\nPress Enter to continue..."));
|
|
80
|
-
return new Promise((resolve) => {
|
|
81
|
-
const isWindows = process.platform === "win32";
|
|
82
|
-
const child = isWindows
|
|
83
|
-
? spawn("cmd", ["/c", "pause >nul"], { stdio: "inherit" })
|
|
84
|
-
: spawn("bash", ["-c", "read -n 1 -s"], { stdio: "inherit" });
|
|
85
|
-
child.on("close", () => resolve());
|
|
86
|
-
child.on("error", () => resolve());
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
// Logout command
|
|
90
|
-
program
|
|
91
|
-
.command("logout")
|
|
92
|
-
.description("Remove stored credentials for current environment")
|
|
93
|
-
.action(() => {
|
|
94
|
-
clearApiKey();
|
|
95
|
-
console.log(chalk.green(`Logged out from ${getEnvironment()} environment.\n`));
|
|
96
|
-
});
|
|
97
|
-
// Setup command
|
|
98
|
-
program
|
|
99
|
-
.command("setup")
|
|
100
|
-
.alias("quickstart")
|
|
101
|
-
.description("Interactive setup wizard for installing providers")
|
|
102
|
-
.action(async () => {
|
|
103
|
-
const { startQuickstart } = await import("./quickstart/index.js");
|
|
104
|
-
await startQuickstart();
|
|
105
|
-
});
|
|
106
|
-
// Status command
|
|
107
|
-
program
|
|
108
|
-
.command("status")
|
|
109
|
-
.description("Check connection status")
|
|
110
|
-
.option("--simple", "Use simple text output (no TUI)")
|
|
111
|
-
.action(async (options) => {
|
|
112
|
-
if (!options.simple) {
|
|
113
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
114
|
-
const { showStatusScreen } = await import("./tui/screens/index.js");
|
|
115
|
-
await showStatusScreen();
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
// Simple mode (original behavior)
|
|
119
|
-
const info = getEnvironmentInfo();
|
|
120
|
-
console.log(chalk.blue(`\nStatus ${envBadge()}\n`));
|
|
121
|
-
console.log(chalk.white(`API: ${info.apiBaseUrl}\n`));
|
|
122
|
-
// Check API key
|
|
123
|
-
const apiKey = getApiKey();
|
|
124
|
-
if (apiKey) {
|
|
125
|
-
const isValid = await verifyApiKey();
|
|
126
|
-
if (isValid) {
|
|
127
|
-
console.log(chalk.green("✓ MindStudio: Connected"));
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
console.log(chalk.red("✗ MindStudio: Invalid API key"));
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
console.log(chalk.yellow("○ MindStudio: Not authenticated"));
|
|
135
|
-
}
|
|
136
|
-
// Check all providers
|
|
137
|
-
const providerStatuses = await getProviderStatuses();
|
|
138
|
-
for (const { provider, running } of providerStatuses) {
|
|
139
|
-
if (running) {
|
|
140
|
-
console.log(chalk.green(`✓ ${provider.displayName}: Running`));
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
console.log(chalk.gray(`○ ${provider.displayName}: Not running`));
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
// Show models if any provider is running
|
|
147
|
-
const models = await discoverAllModels();
|
|
148
|
-
if (models.length > 0) {
|
|
149
|
-
displayModels(models);
|
|
150
|
-
}
|
|
151
|
-
console.log("");
|
|
152
|
-
});
|
|
153
|
-
program
|
|
154
|
-
.command("set-config")
|
|
155
|
-
.description("Set configuration")
|
|
156
|
-
.option("--ollama-url <url>", "Override Ollama base URL")
|
|
157
|
-
.option("--lmstudio-url <url>", "Override LM Studio base URL")
|
|
158
|
-
.option("--sd-url <url>", "Override Stable Diffusion base URL")
|
|
159
|
-
.action(async (options) => {
|
|
160
|
-
if (options.ollamaUrl) {
|
|
161
|
-
setOllamaBaseUrl(options.ollamaUrl);
|
|
162
|
-
console.log(chalk.green(`Ollama base URL set to ${options.ollamaUrl}`));
|
|
163
|
-
}
|
|
164
|
-
if (options.lmstudioUrl) {
|
|
165
|
-
setLMStudioBaseUrl(options.lmstudioUrl);
|
|
166
|
-
console.log(chalk.green(`LM Studio base URL set to ${options.lmstudioUrl}`));
|
|
167
|
-
}
|
|
168
|
-
if (options.sdUrl) {
|
|
169
|
-
setStableDiffusionBaseUrl(options.sdUrl);
|
|
170
|
-
console.log(chalk.green(`Stable Diffusion base URL set to ${options.sdUrl}`));
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
// Start command
|
|
174
|
-
program
|
|
175
|
-
.command("start")
|
|
176
|
-
.description("Start the local model tunnel")
|
|
177
|
-
.option("--ollama-url <url>", "Override Ollama base URL")
|
|
178
|
-
.option("--lmstudio-url <url>", "Override LM Studio base URL")
|
|
179
|
-
.option("--sd-url <url>", "Override Stable Diffusion base URL")
|
|
180
|
-
.option("--simple", "Use simple non-interactive mode (no TUI)")
|
|
181
|
-
.action(async (options) => {
|
|
182
|
-
if (options.ollamaUrl) {
|
|
183
|
-
setOllamaBaseUrl(options.ollamaUrl);
|
|
184
|
-
}
|
|
185
|
-
if (options.lmstudioUrl) {
|
|
186
|
-
setLMStudioBaseUrl(options.lmstudioUrl);
|
|
187
|
-
}
|
|
188
|
-
if (options.sdUrl) {
|
|
189
|
-
setStableDiffusionBaseUrl(options.sdUrl);
|
|
190
|
-
}
|
|
191
|
-
// Use TUI by default, fall back to simple mode with --simple flag
|
|
192
|
-
if (!options.simple) {
|
|
193
|
-
const { startTUI } = await import("./tui/index.js");
|
|
194
|
-
await startTUI();
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
// Simple mode (original behavior)
|
|
198
|
-
const info = getEnvironmentInfo();
|
|
199
|
-
console.log(chalk.white(`Environment: ${info.current} (${info.apiBaseUrl})`));
|
|
200
|
-
const apiKey = getApiKey();
|
|
201
|
-
if (!apiKey) {
|
|
202
|
-
console.log(chalk.red(`Not authenticated for ${info.current} environment. Run: mindstudio-local auth\n`));
|
|
203
|
-
process.exit(1);
|
|
204
|
-
}
|
|
205
|
-
// Verify API key
|
|
206
|
-
const spinner = ora("Connecting to MindStudio...").start();
|
|
207
|
-
const isValid = await verifyApiKey();
|
|
208
|
-
if (!isValid) {
|
|
209
|
-
spinner.fail(chalk.red("Invalid API key. Run: mindstudio-local auth"));
|
|
210
|
-
process.exit(1);
|
|
211
|
-
}
|
|
212
|
-
spinner.succeed(`Connected to MindStudio ${envBadge()}`);
|
|
213
|
-
// Check if any provider is running
|
|
214
|
-
const anyProviderRunning = await isAnyProviderRunning();
|
|
215
|
-
if (!anyProviderRunning) {
|
|
216
|
-
console.log(chalk.red("\nNo local model provider is running."));
|
|
217
|
-
console.log(chalk.white("Start one of the following:"));
|
|
218
|
-
console.log(chalk.white(" Ollama: ollama serve"));
|
|
219
|
-
console.log(chalk.white(" LM Studio: Start the local server"));
|
|
220
|
-
console.log(chalk.white(" Stable Diffusion: Start AUTOMATIC1111\n"));
|
|
221
|
-
process.exit(1);
|
|
222
|
-
}
|
|
223
|
-
// Start the runner
|
|
224
|
-
const runner = new LocalModelRunner();
|
|
225
|
-
await runner.start();
|
|
226
|
-
});
|
|
227
|
-
// Models command
|
|
228
|
-
program
|
|
229
|
-
.command("models")
|
|
230
|
-
.description("List available local models")
|
|
231
|
-
.action(async () => {
|
|
232
|
-
const anyProviderRunning = await isAnyProviderRunning();
|
|
233
|
-
if (!anyProviderRunning) {
|
|
234
|
-
console.log(chalk.red("\nNo local model provider is running."));
|
|
235
|
-
console.log(chalk.white(" Start Ollama: ollama serve"));
|
|
236
|
-
console.log(chalk.white(" Start LM Studio: Enable local server"));
|
|
237
|
-
console.log(chalk.white(" Start Stable Diffusion: Launch AUTOMATIC1111\n"));
|
|
238
|
-
process.exit(1);
|
|
239
|
-
}
|
|
240
|
-
const models = await discoverAllModels();
|
|
241
|
-
if (models.length === 0) {
|
|
242
|
-
console.log(chalk.yellow("\nNo models found."));
|
|
243
|
-
console.log(chalk.white(" Ollama: ollama pull llama3.2"));
|
|
244
|
-
console.log(chalk.white(" LM Studio: Load a model in the app"));
|
|
245
|
-
console.log(chalk.white(" Stable Diffusion: Models in models/Stable-diffusion/\n"));
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
displayModels(models);
|
|
249
|
-
console.log("");
|
|
250
|
-
});
|
|
251
|
-
// Config command
|
|
252
|
-
program
|
|
253
|
-
.command("config")
|
|
254
|
-
.description("Show configuration")
|
|
255
|
-
.option("--simple", "Use simple text output (no TUI)")
|
|
256
|
-
.action(async (options) => {
|
|
257
|
-
if (!options.simple) {
|
|
258
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
259
|
-
const { showConfigScreen } = await import("./tui/screens/index.js");
|
|
260
|
-
await showConfigScreen();
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
// Simple mode (original behavior)
|
|
264
|
-
const info = getEnvironmentInfo();
|
|
265
|
-
console.log(chalk.blue(`\nConfiguration ${envBadge()}\n`));
|
|
266
|
-
console.log(` Config file: ${chalk.white(getConfigPath())}`);
|
|
267
|
-
console.log(` Environment: ${chalk.cyan(info.current)}`);
|
|
268
|
-
console.log(` API URL: ${chalk.white(info.apiBaseUrl)}`);
|
|
269
|
-
console.log(` API key: ${info.hasApiKey ? chalk.green("Set") : chalk.yellow("Not set")}`);
|
|
270
|
-
console.log(chalk.blue("\nProvider URLs\n"));
|
|
271
|
-
console.log(` Ollama: ${chalk.white(getOllamaBaseUrl())}`);
|
|
272
|
-
console.log(` LM Studio: ${chalk.white(getLMStudioBaseUrl())}`);
|
|
273
|
-
console.log(` Stable Diffusion: ${chalk.white(getStableDiffusionBaseUrl())}`);
|
|
274
|
-
console.log("");
|
|
275
|
-
});
|
|
276
|
-
// Env command - switch or show environment
|
|
277
|
-
program
|
|
278
|
-
.command("env [environment]")
|
|
279
|
-
.description("[DEVELOPER ONLY] Show or switch environment (prod, local)")
|
|
280
|
-
.action((environment) => {
|
|
281
|
-
if (environment) {
|
|
282
|
-
if (environment !== "prod" && environment !== "local") {
|
|
283
|
-
console.log(chalk.red(`Invalid environment: ${environment}. Use 'prod' or 'local'.`));
|
|
284
|
-
process.exit(1);
|
|
285
|
-
}
|
|
286
|
-
setEnvironment(environment);
|
|
287
|
-
console.log(chalk.green(`\nSwitched to ${environment} environment.\n`));
|
|
288
|
-
}
|
|
289
|
-
const info = getEnvironmentInfo();
|
|
290
|
-
console.log(chalk.blue("\nEnvironment\n"));
|
|
291
|
-
console.log(` Current: ${envBadge()}`);
|
|
292
|
-
console.log(` API URL: ${chalk.white(info.apiBaseUrl)}`);
|
|
293
|
-
console.log(` API Key: ${info.hasApiKey ? chalk.green("Set") : chalk.yellow("Not set")}`);
|
|
294
|
-
console.log("");
|
|
295
|
-
console.log(chalk.white(" Switch with: mindstudio-local env prod"));
|
|
296
|
-
console.log(chalk.white(" or: mindstudio-local env local"));
|
|
297
|
-
console.log("");
|
|
298
|
-
});
|
|
299
|
-
// Register command
|
|
300
|
-
program
|
|
301
|
-
.command("register")
|
|
302
|
-
.description("Register all local models")
|
|
303
|
-
.action(async () => {
|
|
304
|
-
// Check if authenticated
|
|
305
|
-
const apiKey = getApiKey();
|
|
306
|
-
if (!apiKey) {
|
|
307
|
-
console.log(chalk.red("\nNot authenticated. Run 'mindstudio-local auth' first.\n"));
|
|
308
|
-
process.exit(1);
|
|
309
|
-
}
|
|
310
|
-
// Check if any provider is running
|
|
311
|
-
const anyProviderRunning = await isAnyProviderRunning();
|
|
312
|
-
if (!anyProviderRunning) {
|
|
313
|
-
console.log(chalk.red("\nNo local model provider is running."));
|
|
314
|
-
console.log(chalk.white(" Start Ollama: ollama serve"));
|
|
315
|
-
console.log(chalk.white(" Start LM Studio: Enable local server"));
|
|
316
|
-
console.log(chalk.white(" Start Stable Diffusion: Launch AUTOMATIC1111\n"));
|
|
317
|
-
process.exit(1);
|
|
318
|
-
}
|
|
319
|
-
// Get all local models from all providers (with parameter schemas)
|
|
320
|
-
const spinner = ora("Loading local models...").start();
|
|
321
|
-
const localModels = await discoverAllModelsWithParameters();
|
|
322
|
-
spinner.succeed();
|
|
323
|
-
if (localModels.length === 0) {
|
|
324
|
-
spinner.fail(chalk.yellow("No local models found."));
|
|
325
|
-
console.log(chalk.white(" Ollama: ollama pull llama3.2"));
|
|
326
|
-
console.log(chalk.white(" LM Studio: Load a model in the app"));
|
|
327
|
-
console.log(chalk.white(" Stable Diffusion: Models in models/Stable-diffusion/\n"));
|
|
328
|
-
process.exit(1);
|
|
329
|
-
}
|
|
330
|
-
const registeredModels = await getRegisteredModels();
|
|
331
|
-
const registeredNames = new Set(registeredModels);
|
|
332
|
-
const unregisteredModels = localModels.filter((m) => !registeredNames.has(m.name));
|
|
333
|
-
if (localModels.length > 0 && unregisteredModels.length === 0) {
|
|
334
|
-
console.log(chalk.green("\n✓ All local models are already registered.\n"));
|
|
335
|
-
process.exit(0);
|
|
336
|
-
}
|
|
337
|
-
const registerSpinner = ora(`Registering models...`).start();
|
|
338
|
-
try {
|
|
339
|
-
console.log("\n");
|
|
340
|
-
for (const model of unregisteredModels) {
|
|
341
|
-
const modelTypeMap = {
|
|
342
|
-
text: "llm_chat",
|
|
343
|
-
image: "image_generation",
|
|
344
|
-
video: "video_generation",
|
|
345
|
-
};
|
|
346
|
-
const modelType = modelTypeMap[model.capability];
|
|
347
|
-
await registerLocalModel({
|
|
348
|
-
modelName: model.name,
|
|
349
|
-
provider: model.provider,
|
|
350
|
-
modelType,
|
|
351
|
-
parameters: model.parameters,
|
|
352
|
-
});
|
|
353
|
-
const providerTag = chalk.gray(`[${model.provider}]`);
|
|
354
|
-
const paramsInfo = model.parameters
|
|
355
|
-
? chalk.cyan(` (${model.parameters.length} params)`)
|
|
356
|
-
: "";
|
|
357
|
-
console.log(chalk.green(`✓ ${model.name} ${providerTag}${paramsInfo}\n`));
|
|
358
|
-
}
|
|
359
|
-
registerSpinner.succeed(chalk.green("All local models registered successfully.\n"));
|
|
360
|
-
console.log(chalk.white("Manage models at: https://app.mindstudio.ai/services/self-hosted-models\n"));
|
|
361
|
-
process.exit(0);
|
|
362
|
-
}
|
|
363
|
-
catch (error) {
|
|
364
|
-
registerSpinner.fail(chalk.red(`Failed to register models`));
|
|
365
|
-
console.log(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}\n`));
|
|
366
|
-
process.exit(1);
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
// Default action when no command is provided - show home screen
|
|
370
|
-
async function runDefaultAction() {
|
|
371
|
-
const args = process.argv.slice(2);
|
|
372
|
-
// Check if a command was provided (excluding global options like --env)
|
|
373
|
-
const hasCommand = args.some((arg) => !arg.startsWith("-") && arg !== "prod" && arg !== "local");
|
|
374
|
-
if (!hasCommand) {
|
|
375
|
-
const { showHomeScreen } = await import("./tui/screens/index.js");
|
|
376
|
-
// Loop to handle navigation
|
|
377
|
-
while (true) {
|
|
378
|
-
const nextCommand = await showHomeScreen();
|
|
379
|
-
if (!nextCommand) {
|
|
380
|
-
// User exited without selecting a command
|
|
381
|
-
process.exit(0);
|
|
382
|
-
}
|
|
383
|
-
// Handle the selected command
|
|
384
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
385
|
-
switch (nextCommand) {
|
|
386
|
-
case "start": {
|
|
387
|
-
const { startTUI } = await import("./tui/index.js");
|
|
388
|
-
await startTUI();
|
|
389
|
-
break;
|
|
390
|
-
}
|
|
391
|
-
case "setup": {
|
|
392
|
-
const { startQuickstart } = await import("./quickstart/index.js");
|
|
393
|
-
await startQuickstart();
|
|
394
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
395
|
-
continue; // Return to home screen after setup
|
|
396
|
-
}
|
|
397
|
-
case "auth": {
|
|
398
|
-
// Run auth flow (same logic as auth command)
|
|
399
|
-
const { url: authUrl, token } = await requestDeviceAuth();
|
|
400
|
-
console.log(chalk.white("\nOpening browser for authentication...\n"));
|
|
401
|
-
console.log(chalk.white(" If browser doesn't open, visit:"));
|
|
402
|
-
console.log(chalk.cyan(` ${authUrl}\n`));
|
|
403
|
-
await open(authUrl);
|
|
404
|
-
const pollSpinner = ora("Waiting for browser authorization...").start();
|
|
405
|
-
const pollInterval = 2000;
|
|
406
|
-
const maxAttempts = 30;
|
|
407
|
-
let authSuccess = false;
|
|
408
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
409
|
-
await sleep(pollInterval);
|
|
410
|
-
const result = await pollDeviceAuth(token);
|
|
411
|
-
if (result.status === "completed" && result.apiKey) {
|
|
412
|
-
setApiKey(result.apiKey);
|
|
413
|
-
pollSpinner.succeed(chalk.green("Authenticated successfully!"));
|
|
414
|
-
authSuccess = true;
|
|
415
|
-
break;
|
|
416
|
-
}
|
|
417
|
-
if (result.status === "expired") {
|
|
418
|
-
pollSpinner.fail(chalk.red("Authorization expired. Please try again."));
|
|
419
|
-
break;
|
|
420
|
-
}
|
|
421
|
-
const remaining = Math.floor(((maxAttempts - i) * pollInterval) / 1000);
|
|
422
|
-
pollSpinner.text = `Waiting for browser authorization... (${remaining}s remaining)`;
|
|
423
|
-
}
|
|
424
|
-
await waitForEnter();
|
|
425
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
426
|
-
continue; // Return to home screen after auth
|
|
427
|
-
}
|
|
428
|
-
case "register": {
|
|
429
|
-
const registerSpinner = ora("Discovering local models...").start();
|
|
430
|
-
try {
|
|
431
|
-
const apiKey = getApiKey();
|
|
432
|
-
if (!apiKey) {
|
|
433
|
-
registerSpinner.fail(chalk.red("Not authenticated. Please authenticate first."));
|
|
434
|
-
await waitForEnter();
|
|
435
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
436
|
-
continue;
|
|
437
|
-
}
|
|
438
|
-
const localModels = await discoverAllModelsWithParameters();
|
|
439
|
-
if (localModels.length === 0) {
|
|
440
|
-
registerSpinner.fail(chalk.yellow("No local models found."));
|
|
441
|
-
await waitForEnter();
|
|
442
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
443
|
-
continue;
|
|
444
|
-
}
|
|
445
|
-
const registeredModels = await getRegisteredModels();
|
|
446
|
-
const registeredNames = new Set(registeredModels);
|
|
447
|
-
const unregisteredModels = localModels.filter((m) => !registeredNames.has(m.name));
|
|
448
|
-
if (unregisteredModels.length === 0) {
|
|
449
|
-
registerSpinner.succeed(chalk.green("All models already registered."));
|
|
450
|
-
await waitForEnter();
|
|
451
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
452
|
-
continue;
|
|
453
|
-
}
|
|
454
|
-
registerSpinner.text = `Registering ${unregisteredModels.length} models...`;
|
|
455
|
-
console.log("\n");
|
|
456
|
-
for (const model of unregisteredModels) {
|
|
457
|
-
const modelTypeMap = {
|
|
458
|
-
text: "llm_chat",
|
|
459
|
-
image: "image_generation",
|
|
460
|
-
video: "video_generation",
|
|
461
|
-
};
|
|
462
|
-
const modelType = modelTypeMap[model.capability];
|
|
463
|
-
await registerLocalModel({
|
|
464
|
-
modelName: model.name,
|
|
465
|
-
provider: model.provider,
|
|
466
|
-
modelType,
|
|
467
|
-
parameters: model.parameters,
|
|
468
|
-
});
|
|
469
|
-
console.log(chalk.green(`✓ ${model.name} [${model.provider}]`));
|
|
470
|
-
}
|
|
471
|
-
registerSpinner.succeed(chalk.green(`Registered ${unregisteredModels.length} models.`));
|
|
472
|
-
await waitForEnter();
|
|
473
|
-
}
|
|
474
|
-
catch (error) {
|
|
475
|
-
registerSpinner.fail(chalk.red(`Failed: ${error instanceof Error ? error.message : String(error)}`));
|
|
476
|
-
}
|
|
477
|
-
await waitForEnter();
|
|
478
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
479
|
-
continue; // Return to home screen
|
|
480
|
-
}
|
|
481
|
-
case "models": {
|
|
482
|
-
const { showModelsScreen } = await import("./tui/screens/index.js");
|
|
483
|
-
await showModelsScreen();
|
|
484
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
485
|
-
continue; // Return to home screen after models
|
|
486
|
-
}
|
|
487
|
-
case "config": {
|
|
488
|
-
const { showConfigScreen } = await import("./tui/screens/index.js");
|
|
489
|
-
await showConfigScreen();
|
|
490
|
-
await waitForEnter();
|
|
491
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
492
|
-
continue; // Return to home screen after config
|
|
493
|
-
}
|
|
494
|
-
case "logout": {
|
|
495
|
-
clearApiKey();
|
|
496
|
-
console.log(chalk.green("\nLogged out successfully. All credentials cleared.\n"));
|
|
497
|
-
await waitForEnter();
|
|
498
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H");
|
|
499
|
-
continue; // Return to home screen after logout
|
|
500
|
-
}
|
|
501
|
-
default:
|
|
502
|
-
process.exit(0);
|
|
503
|
-
}
|
|
504
|
-
// If we reach here (from start), exit the loop
|
|
505
|
-
break;
|
|
506
|
-
}
|
|
507
|
-
process.exit(0);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
// Run default action check, then parse commands
|
|
511
|
-
runDefaultAction().then(() => {
|
|
512
|
-
// Only parse if we haven't handled via default action
|
|
513
|
-
if (process.argv
|
|
514
|
-
.slice(2)
|
|
515
|
-
.some((arg) => !arg.startsWith("-") && arg !== "prod" && arg !== "local")) {
|
|
516
|
-
program.parse();
|
|
517
|
-
}
|
|
518
|
-
});
|
|
2
|
+
|
|
3
|
+
// src/cli.ts
|
|
4
|
+
async function main() {
|
|
5
|
+
const { startTUI } = await import("./tui-56JFPKBP.js");
|
|
6
|
+
await startTUI();
|
|
7
|
+
process.exit(0);
|
|
8
|
+
}
|
|
9
|
+
main();
|
|
519
10
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nasync function main() {\n const { startTUI } = await import('./tui/index.js');\n await startTUI();\n process.exit(0);\n}\n\nmain();\n"],"mappings":";;;AACA,eAAe,OAAO;AACpB,QAAM,EAAE,SAAS,IAAI,MAAM,OAAO,mBAAgB;AAClD,QAAM,SAAS;AACf,UAAQ,KAAK,CAAC;AAChB;AAEA,KAAK;","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* TunnelRunner handles the polling and request processing loop.
|
|
3
|
+
* It emits events that listeners (TUI or simple chalk output) can subscribe to.
|
|
4
|
+
*/
|
|
5
|
+
declare class TunnelRunner {
|
|
6
|
+
private isRunning;
|
|
7
|
+
private modelProviderMap;
|
|
8
|
+
private models;
|
|
9
|
+
/**
|
|
10
|
+
* Start with a pre-discovered list of model names.
|
|
11
|
+
* Used by the TUI, which discovers models itself.
|
|
12
|
+
*/
|
|
13
|
+
start(models: string[]): Promise<void>;
|
|
14
|
+
stop(): void;
|
|
15
|
+
private buildModelProviderMap;
|
|
16
|
+
private pollLoop;
|
|
17
|
+
private processRequest;
|
|
18
|
+
private handleTextRequest;
|
|
19
|
+
private handleImageRequest;
|
|
20
|
+
private handleVideoRequest;
|
|
21
|
+
private sleep;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { TunnelRunner };
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
getTextProvider, getTextProviders, getImageProvider, getImageProviders,
|
|
8
|
-
// Type guards
|
|
9
|
-
isTextProvider, isImageProvider,
|
|
10
|
-
// Provider classes
|
|
11
|
-
OllamaProvider, LMStudioProvider, StableDiffusionProvider, } from "./providers/index.js";
|
|
12
|
-
export { getApiKey, setApiKey, clearApiKey, getApiBaseUrl, setApiBaseUrl, getOllamaBaseUrl, setOllamaBaseUrl, getLMStudioBaseUrl, setLMStudioBaseUrl, getStableDiffusionBaseUrl, setStableDiffusionBaseUrl, getEnvironment, setEnvironment, } from "./config.js";
|
|
13
|
-
export { verifyApiKey, pollForRequest, submitProgress, submitGenerationProgress, submitResult, registerLocalModel, } from "./api.js";
|
|
1
|
+
import {
|
|
2
|
+
TunnelRunner
|
|
3
|
+
} from "./chunk-PTK4SJQK.js";
|
|
4
|
+
export {
|
|
5
|
+
TunnelRunner
|
|
6
|
+
};
|
|
14
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|