@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
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from "react";
|
|
2
|
-
import { verifyApiKey } from "../../api.js";
|
|
3
|
-
import { getApiKey, getEnvironment } from "../../config.js";
|
|
4
|
-
export function useConnection() {
|
|
5
|
-
const [status, setStatus] = useState("connecting");
|
|
6
|
-
const [error, setError] = useState(null);
|
|
7
|
-
const environment = getEnvironment();
|
|
8
|
-
const connect = useCallback(async () => {
|
|
9
|
-
setStatus("connecting");
|
|
10
|
-
setError(null);
|
|
11
|
-
const apiKey = getApiKey();
|
|
12
|
-
if (!apiKey) {
|
|
13
|
-
setStatus("error");
|
|
14
|
-
setError("Not authenticated. Run: mindstudio-local auth");
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
const isValid = await verifyApiKey();
|
|
19
|
-
if (isValid) {
|
|
20
|
-
setStatus("connected");
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
setStatus("error");
|
|
24
|
-
setError("Invalid API key. Run: mindstudio-local auth");
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
setStatus("error");
|
|
29
|
-
setError(err instanceof Error ? err.message : "Connection failed");
|
|
30
|
-
}
|
|
31
|
-
}, []);
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
connect();
|
|
34
|
-
}, [connect]);
|
|
35
|
-
return {
|
|
36
|
-
status,
|
|
37
|
-
environment,
|
|
38
|
-
error,
|
|
39
|
-
retry: connect,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=useConnection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useConnection.js","sourceRoot":"","sources":["../../../src/tui/hooks/useConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAU5D,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAmB,YAAY,CAAC,CAAC;IACrE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,SAAS,CAAC,YAAY,CAAC,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CAAC,OAAO,CAAC,CAAC;YACnB,QAAQ,CAAC,+CAA+C,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;YACrC,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,WAAW,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnB,QAAQ,CAAC,6CAA6C,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,OAAO,CAAC,CAAC;YACnB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO;QACL,MAAM;QACN,WAAW;QACX,KAAK;QACL,KAAK,EAAE,OAAO;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { LocalModel } from "../../providers/types.js";
|
|
2
|
-
interface UseModelsResult {
|
|
3
|
-
models: LocalModel[];
|
|
4
|
-
loading: boolean;
|
|
5
|
-
refresh: () => Promise<void>;
|
|
6
|
-
}
|
|
7
|
-
export declare function useModels(): UseModelsResult;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=useModels.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useModels.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useModels.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,UAAU,eAAe;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,SAAS,IAAI,eAAe,CAyB3C"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from "react";
|
|
2
|
-
import { discoverAllModels } from "../../providers/index.js";
|
|
3
|
-
export function useModels() {
|
|
4
|
-
const [models, setModels] = useState([]);
|
|
5
|
-
const [loading, setLoading] = useState(true);
|
|
6
|
-
const refresh = useCallback(async () => {
|
|
7
|
-
setLoading(true);
|
|
8
|
-
try {
|
|
9
|
-
const discoveredModels = await discoverAllModels();
|
|
10
|
-
setModels(discoveredModels);
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
// Keep existing state on error
|
|
14
|
-
}
|
|
15
|
-
finally {
|
|
16
|
-
setLoading(false);
|
|
17
|
-
}
|
|
18
|
-
}, []);
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
refresh();
|
|
21
|
-
}, [refresh]);
|
|
22
|
-
return {
|
|
23
|
-
models,
|
|
24
|
-
loading,
|
|
25
|
-
refresh,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=useModels.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useModels.js","sourceRoot":"","sources":["../../../src/tui/hooks/useModels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAS7D,MAAM,UAAU,SAAS;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACnD,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO;QACL,MAAM;QACN,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { ProviderStatus } from "../types.js";
|
|
2
|
-
interface UseProvidersResult {
|
|
3
|
-
providers: ProviderStatus[];
|
|
4
|
-
loading: boolean;
|
|
5
|
-
refresh: () => Promise<void>;
|
|
6
|
-
}
|
|
7
|
-
export declare function useProviders(pollInterval?: number): UseProvidersResult;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=useProviders.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useProviders.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useProviders.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,YAAY,GAAE,MAAc,GAAG,kBAAkB,CA4B7E"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from "react";
|
|
2
|
-
import { getProviderStatuses } from "../../providers/index.js";
|
|
3
|
-
export function useProviders(pollInterval = 10000) {
|
|
4
|
-
const [providers, setProviders] = useState([]);
|
|
5
|
-
const [loading, setLoading] = useState(true);
|
|
6
|
-
const refresh = useCallback(async () => {
|
|
7
|
-
try {
|
|
8
|
-
const statuses = await getProviderStatuses();
|
|
9
|
-
setProviders(statuses);
|
|
10
|
-
}
|
|
11
|
-
catch {
|
|
12
|
-
// Keep existing state on error
|
|
13
|
-
}
|
|
14
|
-
finally {
|
|
15
|
-
setLoading(false);
|
|
16
|
-
}
|
|
17
|
-
}, []);
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
refresh();
|
|
20
|
-
// Poll for provider status changes
|
|
21
|
-
const interval = setInterval(refresh, pollInterval);
|
|
22
|
-
return () => clearInterval(interval);
|
|
23
|
-
}, [refresh, pollInterval]);
|
|
24
|
-
return {
|
|
25
|
-
providers,
|
|
26
|
-
loading,
|
|
27
|
-
refresh,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=useProviders.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useProviders.js","sourceRoot":"","sources":["../../../src/tui/hooks/useProviders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAS/D,MAAM,UAAU,YAAY,CAAC,eAAuB,KAAK;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAC7C,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAC;QAEV,mCAAmC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,OAAO;QACL,SAAS;QACT,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { RequestLogEntry } from "../types.js";
|
|
2
|
-
interface UseRequestsResult {
|
|
3
|
-
requests: RequestLogEntry[];
|
|
4
|
-
activeCount: number;
|
|
5
|
-
clear: () => void;
|
|
6
|
-
}
|
|
7
|
-
export declare function useRequests(maxHistory?: number): UseRequestsResult;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=useRequests.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRequests.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useRequests.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,UAAU,GAAE,MAAW,GAAG,iBAAiB,CAoEtE"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback, useRef } from "react";
|
|
2
|
-
import { requestEvents } from "../events.js";
|
|
3
|
-
export function useRequests(maxHistory = 50) {
|
|
4
|
-
const [requests, setRequests] = useState([]);
|
|
5
|
-
const requestsRef = useRef(new Map());
|
|
6
|
-
// Update timer for active request durations
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
const interval = setInterval(() => {
|
|
9
|
-
// Force re-render for active requests to update elapsed time
|
|
10
|
-
setRequests((prev) => {
|
|
11
|
-
const hasActive = prev.some((r) => r.status === "processing");
|
|
12
|
-
return hasActive ? [...prev] : prev;
|
|
13
|
-
});
|
|
14
|
-
}, 1000);
|
|
15
|
-
return () => clearInterval(interval);
|
|
16
|
-
}, []);
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
const unsubStart = requestEvents.onStart((event) => {
|
|
19
|
-
const entry = {
|
|
20
|
-
id: event.id,
|
|
21
|
-
modelId: event.modelId,
|
|
22
|
-
requestType: event.requestType,
|
|
23
|
-
status: "processing",
|
|
24
|
-
startTime: event.timestamp,
|
|
25
|
-
};
|
|
26
|
-
requestsRef.current.set(event.id, entry);
|
|
27
|
-
setRequests((prev) => [...prev, entry].slice(-maxHistory));
|
|
28
|
-
});
|
|
29
|
-
const unsubComplete = requestEvents.onComplete((event) => {
|
|
30
|
-
const existing = requestsRef.current.get(event.id);
|
|
31
|
-
if (existing) {
|
|
32
|
-
const updated = {
|
|
33
|
-
...existing,
|
|
34
|
-
status: event.success ? "completed" : "failed",
|
|
35
|
-
endTime: Date.now(),
|
|
36
|
-
duration: event.duration,
|
|
37
|
-
result: event.result,
|
|
38
|
-
error: event.error,
|
|
39
|
-
};
|
|
40
|
-
requestsRef.current.set(event.id, updated);
|
|
41
|
-
setRequests((prev) => prev.map((r) => (r.id === event.id ? updated : r)));
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
return () => {
|
|
45
|
-
unsubStart();
|
|
46
|
-
unsubComplete();
|
|
47
|
-
};
|
|
48
|
-
}, [maxHistory]);
|
|
49
|
-
const activeCount = requests.filter((r) => r.status === "processing").length;
|
|
50
|
-
const clear = useCallback(() => {
|
|
51
|
-
requestsRef.current.clear();
|
|
52
|
-
setRequests([]);
|
|
53
|
-
}, []);
|
|
54
|
-
return {
|
|
55
|
-
requests,
|
|
56
|
-
activeCount,
|
|
57
|
-
clear,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=useRequests.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRequests.js","sourceRoot":"","sources":["../../../src/tui/hooks/useRequests.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/index.d.ts
DELETED
package/dist/tui/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAKA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB9C"}
|
package/dist/tui/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { render } from "ink";
|
|
3
|
-
import { App } from "./App.js";
|
|
4
|
-
import { TunnelRunner } from "./TunnelRunner.js";
|
|
5
|
-
export async function startTUI() {
|
|
6
|
-
// Clear the screen
|
|
7
|
-
console.clear();
|
|
8
|
-
// Create the runner instance
|
|
9
|
-
const runner = new TunnelRunner();
|
|
10
|
-
// Render the TUI with stdin configured for keyboard input
|
|
11
|
-
const { waitUntilExit } = render(_jsx(App, { runner: runner }), {
|
|
12
|
-
exitOnCtrlC: true,
|
|
13
|
-
});
|
|
14
|
-
// Wait for the app to exit
|
|
15
|
-
await waitUntilExit();
|
|
16
|
-
// Ensure clean shutdown
|
|
17
|
-
runner.stop();
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=index.js.map
|
package/dist/tui/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,mBAAmB;IACnB,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAElC,0DAA0D;IAC1D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAC,GAAG,IAAC,MAAM,EAAE,MAAM,GAAI,EAAE;QACxD,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,aAAa,EAAE,CAAC;IAEtB,wBAAwB;IACxB,MAAM,CAAC,IAAI,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/ConfigScreen.tsx"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,4CAoG3B"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect } from "react";
|
|
3
|
-
import { Box, Text, useApp } from "ink";
|
|
4
|
-
import { getConfigPath, getEnvironment, getEnvironmentInfo, getOllamaBaseUrl, getLMStudioBaseUrl, getStableDiffusionBaseUrl, } from "../../config.js";
|
|
5
|
-
export function ConfigScreen() {
|
|
6
|
-
const { exit } = useApp();
|
|
7
|
-
const environment = getEnvironment();
|
|
8
|
-
const info = getEnvironmentInfo();
|
|
9
|
-
const envColor = environment === "prod" ? "green" : "yellow";
|
|
10
|
-
const envBadge = environment === "prod" ? "PROD" : "LOCAL";
|
|
11
|
-
// Auto-exit after render
|
|
12
|
-
useEffect(() => {
|
|
13
|
-
const timer = setTimeout(() => exit(), 50);
|
|
14
|
-
return () => clearTimeout(timer);
|
|
15
|
-
}, [exit]);
|
|
16
|
-
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { marginTop: 1, marginBottom: 1, children: [_jsx(Text, { bold: true, children: "MindStudio Local Tunnel " }), _jsxs(Text, { color: envColor, bold: true, children: ["[", envBadge, "]"] })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "blue", paddingX: 2, paddingY: 1, children: [_jsx(Text, { bold: true, color: "blue", children: "Configuration" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { color: "gray", children: "Config file:" }) }), _jsx(Text, { children: getConfigPath() })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { color: "gray", children: "Environment:" }) }), _jsx(Text, { color: envColor, children: info.current })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { color: "gray", children: "API URL:" }) }), _jsx(Text, { children: info.apiBaseUrl })] }), _jsxs(Box, { children: [_jsx(Box, { width: 16, children: _jsx(Text, { color: "gray", children: "API key:" }) }), _jsx(Text, { color: info.hasApiKey ? "green" : "yellow", children: info.hasApiKey ? "Set" : "Not set" })] })] })] }), _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 2, paddingY: 1, marginTop: 1, children: [_jsx(Text, { bold: true, color: "white", children: "Provider URLs" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { color: "gray", children: "Ollama:" }) }), _jsx(Text, { children: getOllamaBaseUrl() })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { color: "gray", children: "LM Studio:" }) }), _jsx(Text, { children: getLMStudioBaseUrl() })] }), _jsxs(Box, { children: [_jsx(Box, { width: 18, children: _jsx(Text, { color: "gray", children: "Stable Diffusion:" }) }), _jsx(Text, { children: getStableDiffusionBaseUrl() })] })] })] })] }));
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=ConfigScreen.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/ConfigScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HomeScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/HomeScreen.tsx"],"names":[],"mappings":"AA0BA,wBAAgB,UAAU,4CAiPzB"}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from "react";
|
|
3
|
-
import { Box, Text, useApp, useInput } from "ink";
|
|
4
|
-
import Spinner from "ink-spinner";
|
|
5
|
-
import { getApiKey } from "../../config.js";
|
|
6
|
-
import { getProviderStatuses, } from "../../providers/index.js";
|
|
7
|
-
import { LogoString } from "../../helpers.js";
|
|
8
|
-
export function HomeScreen() {
|
|
9
|
-
const { exit } = useApp();
|
|
10
|
-
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
11
|
-
const [status, setStatus] = useState(null);
|
|
12
|
-
const [navigateTo, setNavigateTo] = useState(null);
|
|
13
|
-
const [runningProviders, setRunningProviders] = useState([]);
|
|
14
|
-
// Check system status on mount
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
async function checkStatus() {
|
|
17
|
-
const apiKey = getApiKey();
|
|
18
|
-
const providerStatuses = await getProviderStatuses();
|
|
19
|
-
const runningProviders = providerStatuses.filter((p) => p.running);
|
|
20
|
-
setStatus({
|
|
21
|
-
authenticated: !!apiKey,
|
|
22
|
-
providersRunning: runningProviders.length > 0,
|
|
23
|
-
providerCount: runningProviders.length,
|
|
24
|
-
});
|
|
25
|
-
setRunningProviders(runningProviders);
|
|
26
|
-
}
|
|
27
|
-
checkStatus();
|
|
28
|
-
}, []);
|
|
29
|
-
// Build menu items based on status
|
|
30
|
-
const menuItems = [];
|
|
31
|
-
// Start tunnel - main action
|
|
32
|
-
menuItems.push({
|
|
33
|
-
id: "start",
|
|
34
|
-
label: "Start Tunnel",
|
|
35
|
-
description: "Launch the MindStudio local model tunnel",
|
|
36
|
-
action: () => setNavigateTo("start"),
|
|
37
|
-
disabled: !status?.authenticated || !status?.providersRunning,
|
|
38
|
-
disabledReason: !status?.authenticated
|
|
39
|
-
? "Authenticate first"
|
|
40
|
-
: !status?.providersRunning
|
|
41
|
-
? "No providers running"
|
|
42
|
-
: undefined,
|
|
43
|
-
});
|
|
44
|
-
// Setup wizard
|
|
45
|
-
menuItems.push({
|
|
46
|
-
id: "setup",
|
|
47
|
-
label: "Setup Providers",
|
|
48
|
-
description: "Install and configure local AI providers",
|
|
49
|
-
action: () => setNavigateTo("setup"),
|
|
50
|
-
});
|
|
51
|
-
// Auth
|
|
52
|
-
menuItems.push({
|
|
53
|
-
id: "auth",
|
|
54
|
-
label: status?.authenticated ? "Re-authenticate" : "Authenticate",
|
|
55
|
-
description: status?.authenticated
|
|
56
|
-
? "Already authenticated - re-authenticate if needed"
|
|
57
|
-
: "Log in to MindStudio",
|
|
58
|
-
action: () => setNavigateTo("auth"),
|
|
59
|
-
});
|
|
60
|
-
// Register models
|
|
61
|
-
menuItems.push({
|
|
62
|
-
id: "register",
|
|
63
|
-
label: "Register Models",
|
|
64
|
-
description: "Register your local models with MindStudio",
|
|
65
|
-
action: () => setNavigateTo("register"),
|
|
66
|
-
disabled: !status?.authenticated,
|
|
67
|
-
disabledReason: "Authenticate first",
|
|
68
|
-
});
|
|
69
|
-
// Models
|
|
70
|
-
menuItems.push({
|
|
71
|
-
id: "models",
|
|
72
|
-
label: "View Models",
|
|
73
|
-
description: "View available local models",
|
|
74
|
-
action: () => setNavigateTo("models"),
|
|
75
|
-
});
|
|
76
|
-
// Config
|
|
77
|
-
menuItems.push({
|
|
78
|
-
id: "config",
|
|
79
|
-
label: "Configuration",
|
|
80
|
-
description: "View current configuration",
|
|
81
|
-
action: () => setNavigateTo("config"),
|
|
82
|
-
});
|
|
83
|
-
// Logout (only show if authenticated)
|
|
84
|
-
if (status?.authenticated) {
|
|
85
|
-
menuItems.push({
|
|
86
|
-
id: "logout",
|
|
87
|
-
label: "Logout",
|
|
88
|
-
description: "Clear all stored credentials and data",
|
|
89
|
-
action: () => setNavigateTo("logout"),
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
// Exit
|
|
93
|
-
menuItems.push({
|
|
94
|
-
id: "exit",
|
|
95
|
-
label: "Exit",
|
|
96
|
-
description: "",
|
|
97
|
-
action: () => exit(),
|
|
98
|
-
});
|
|
99
|
-
// Filter to only enabled items for navigation
|
|
100
|
-
const enabledItems = menuItems.filter((item) => !item.disabled);
|
|
101
|
-
useInput((input, key) => {
|
|
102
|
-
if (navigateTo)
|
|
103
|
-
return; // Don't handle input while navigating
|
|
104
|
-
if (key.upArrow) {
|
|
105
|
-
setSelectedIndex((prev) => {
|
|
106
|
-
let newIndex = prev - 1;
|
|
107
|
-
while (newIndex >= 0 && menuItems[newIndex]?.disabled) {
|
|
108
|
-
newIndex--;
|
|
109
|
-
}
|
|
110
|
-
return newIndex >= 0 ? newIndex : prev;
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
if (key.downArrow) {
|
|
114
|
-
setSelectedIndex((prev) => {
|
|
115
|
-
let newIndex = prev + 1;
|
|
116
|
-
while (newIndex < menuItems.length && menuItems[newIndex]?.disabled) {
|
|
117
|
-
newIndex++;
|
|
118
|
-
}
|
|
119
|
-
return newIndex < menuItems.length ? newIndex : prev;
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
if (key.return) {
|
|
123
|
-
const item = menuItems[selectedIndex];
|
|
124
|
-
if (item && !item.disabled) {
|
|
125
|
-
item.action();
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
if (input === "q" || key.escape) {
|
|
129
|
-
exit();
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
// Handle navigation by exiting with a code that cli.ts will interpret
|
|
133
|
-
useEffect(() => {
|
|
134
|
-
if (navigateTo) {
|
|
135
|
-
// We'll use process.env to communicate the next command
|
|
136
|
-
process.env.MINDSTUDIO_NEXT_COMMAND = navigateTo;
|
|
137
|
-
exit();
|
|
138
|
-
}
|
|
139
|
-
}, [navigateTo, exit]);
|
|
140
|
-
// Loading state
|
|
141
|
-
if (!status) {
|
|
142
|
-
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { color: "cyan", children: LogoString }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "cyan", children: _jsx(Spinner, { type: "dots" }) }), _jsx(Text, { children: " Checking system status..." })] })] }));
|
|
143
|
-
}
|
|
144
|
-
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { color: "cyan", children: LogoString }), _jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(Text, { bold: true, color: "white", children: "MindStudio Local Model Tunnel" }) }), _jsxs(Box, { marginBottom: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: status.authenticated ? "green" : "yellow", children: status.authenticated ? "●" : "○" }), _jsxs(Text, { color: "gray", children: [" ", "Authentication:", " ", status.authenticated ? "Connected" : "Not authenticated"] })] }), _jsxs(Box, { children: [_jsx(Text, { color: status.providersRunning ? "green" : "yellow", children: status.providersRunning ? "●" : "○" }), _jsxs(Text, { color: "gray", children: [" ", "Providers:", " ", status.providersRunning
|
|
145
|
-
? `${runningProviders
|
|
146
|
-
.map((p) => p.provider.displayName)
|
|
147
|
-
.join(", ")} running`
|
|
148
|
-
: "None running"] })] })] }), _jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: menuItems.map((item, index) => {
|
|
149
|
-
const isSelected = index === selectedIndex;
|
|
150
|
-
const isDisabled = item.disabled;
|
|
151
|
-
return (_jsx(Box, { children: _jsxs(Text, { color: isDisabled ? "gray" : isSelected ? "cyan" : "white", dimColor: isDisabled, children: [isSelected ? "❯ " : " ", item.label, isDisabled && item.disabledReason
|
|
152
|
-
? ` (${item.disabledReason})`
|
|
153
|
-
: ""] }) }, item.id));
|
|
154
|
-
}) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: menuItems[selectedIndex]?.description }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "\u2191\u2193 Navigate \u2022 Enter Select \u2022 q Quit" }) })] }));
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=HomeScreen.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HomeScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/HomeScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/ModelsScreen.tsx"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,4CAwL3B"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from "react";
|
|
3
|
-
import { Box, Text, useApp, useInput } from "ink";
|
|
4
|
-
import Spinner from "ink-spinner";
|
|
5
|
-
import { discoverAllModels, getProviderStatuses, } from "../../providers/index.js";
|
|
6
|
-
import { getRegisteredModels } from "../../api.js";
|
|
7
|
-
import { getApiKey } from "../../config.js";
|
|
8
|
-
import { LogoString } from "../../helpers.js";
|
|
9
|
-
export function ModelsScreen() {
|
|
10
|
-
const { exit } = useApp();
|
|
11
|
-
const [models, setModels] = useState([]);
|
|
12
|
-
const [registeredModels, setRegisteredModels] = useState(new Set());
|
|
13
|
-
const [loading, setLoading] = useState(true);
|
|
14
|
-
const [providersRunning, setProvidersRunning] = useState(0);
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
async function loadModels() {
|
|
17
|
-
// Check provider status
|
|
18
|
-
const statuses = await getProviderStatuses();
|
|
19
|
-
const running = statuses.filter((s) => s.running).length;
|
|
20
|
-
setProvidersRunning(running);
|
|
21
|
-
// Discover models
|
|
22
|
-
const discoveredModels = await discoverAllModels();
|
|
23
|
-
setModels(discoveredModels);
|
|
24
|
-
// Get registered models if authenticated
|
|
25
|
-
const apiKey = getApiKey();
|
|
26
|
-
if (apiKey) {
|
|
27
|
-
try {
|
|
28
|
-
const registered = await getRegisteredModels();
|
|
29
|
-
setRegisteredModels(new Set(registered));
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
// Ignore errors
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
setLoading(false);
|
|
36
|
-
}
|
|
37
|
-
loadModels();
|
|
38
|
-
}, []);
|
|
39
|
-
// Handle keyboard input
|
|
40
|
-
useInput((input, key) => {
|
|
41
|
-
if (input === "q" || key.escape || key.return) {
|
|
42
|
-
exit();
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
const textModels = models.filter((m) => m.capability === "text");
|
|
46
|
-
const imageModels = models.filter((m) => m.capability === "image");
|
|
47
|
-
const videoModels = models.filter((m) => m.capability === "video");
|
|
48
|
-
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { color: "cyan", children: LogoString }), _jsxs(Box, { marginTop: 1, marginBottom: 1, children: [_jsx(Text, { bold: true, color: "white", children: "Local Models" }), loading && (_jsxs(Text, { color: "cyan", children: [" ", _jsx(Spinner, { type: "dots" })] }))] }), !loading && providersRunning === 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "yellow", children: "No providers are running." }), _jsx(Text, { color: "gray", children: "Start a provider to see available models." })] })), !loading && providersRunning > 0 && models.length === 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "yellow", children: "No models found." }), _jsx(Text, { color: "gray", children: "Download models using your provider (e.g., ollama pull llama3.2)" })] })), textModels.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: "green", bold: true, children: ["Text Models (", textModels.length, ")"] }), _jsx(Box, { flexDirection: "column", marginLeft: 1, children: textModels.map((model) => {
|
|
49
|
-
const isRegistered = registeredModels.has(model.name);
|
|
50
|
-
return (_jsxs(Box, { children: [_jsxs(Text, { color: isRegistered ? "green" : "yellow", children: [isRegistered ? "●" : "○", " "] }), _jsx(Text, { children: model.name }), _jsxs(Text, { color: "gray", children: [" [", model.provider, "]"] }), !isRegistered && (_jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(not registered)"] }))] }, model.name));
|
|
51
|
-
}) })] })), imageModels.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: "magenta", bold: true, children: ["Image Models (", imageModels.length, ")"] }), _jsx(Box, { flexDirection: "column", marginLeft: 1, children: imageModels.map((model) => {
|
|
52
|
-
const isRegistered = registeredModels.has(model.name);
|
|
53
|
-
return (_jsxs(Box, { children: [_jsxs(Text, { color: isRegistered ? "magenta" : "yellow", children: [isRegistered ? "●" : "○", " "] }), _jsx(Text, { children: model.name }), _jsxs(Text, { color: "gray", children: [" [", model.provider, "]"] }), !isRegistered && (_jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(not registered)"] }))] }, model.name));
|
|
54
|
-
}) })] })), videoModels.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: "blue", bold: true, children: ["Video Models (", videoModels.length, ")"] }), _jsx(Box, { flexDirection: "column", marginLeft: 1, children: videoModels.map((model) => {
|
|
55
|
-
const isRegistered = registeredModels.has(model.name);
|
|
56
|
-
return (_jsxs(Box, { children: [_jsxs(Text, { color: isRegistered ? "blue" : "yellow", children: [isRegistered ? "●" : "○", " "] }), _jsx(Text, { children: model.name }), _jsxs(Text, { color: "gray", children: [" [", model.provider, "]"] }), !isRegistered && (_jsxs(Text, { color: "gray", dimColor: true, children: [" ", "(not registered)"] }))] }, model.name));
|
|
57
|
-
}) })] })), !loading && models.length > 0 && (_jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(Text, { color: "gray", children: "\u25CF = registered with MindStudio, \u25CB = not registered" }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Press Enter to return to main menu" }) })] }));
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=ModelsScreen.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/ModelsScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/StatusScreen.tsx"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,4CAiJ3B"}
|