@mindstudio-ai/local-model-tunnel 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +30 -115
  2. package/dist/chunk-PTK4SJQK.js +1768 -0
  3. package/dist/chunk-PTK4SJQK.js.map +1 -0
  4. package/dist/cli.d.ts +0 -2
  5. package/dist/cli.js +8 -517
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.d.ts +24 -5
  8. package/dist/index.js +6 -13
  9. package/dist/index.js.map +1 -1
  10. package/dist/tui-QOSKXZWU.js +1560 -0
  11. package/dist/tui-QOSKXZWU.js.map +1 -0
  12. package/package.json +11 -4
  13. package/dist/api.d.ts +0 -88
  14. package/dist/api.d.ts.map +0 -1
  15. package/dist/api.js +0 -168
  16. package/dist/api.js.map +0 -1
  17. package/dist/cli.d.ts.map +0 -1
  18. package/dist/config.d.ts +0 -27
  19. package/dist/config.d.ts.map +0 -1
  20. package/dist/config.js +0 -109
  21. package/dist/config.js.map +0 -1
  22. package/dist/helpers.d.ts +0 -4
  23. package/dist/helpers.d.ts.map +0 -1
  24. package/dist/helpers.js +0 -33
  25. package/dist/helpers.js.map +0 -1
  26. package/dist/index.d.ts.map +0 -1
  27. package/dist/ollama.d.ts +0 -11
  28. package/dist/ollama.d.ts.map +0 -1
  29. package/dist/ollama.js +0 -36
  30. package/dist/ollama.js.map +0 -1
  31. package/dist/providers/comfyui.d.ts +0 -29
  32. package/dist/providers/comfyui.d.ts.map +0 -1
  33. package/dist/providers/comfyui.js +0 -359
  34. package/dist/providers/comfyui.js.map +0 -1
  35. package/dist/providers/index.d.ts +0 -63
  36. package/dist/providers/index.d.ts.map +0 -1
  37. package/dist/providers/index.js +0 -126
  38. package/dist/providers/index.js.map +0 -1
  39. package/dist/providers/lmstudio.d.ts +0 -11
  40. package/dist/providers/lmstudio.d.ts.map +0 -1
  41. package/dist/providers/lmstudio.js +0 -106
  42. package/dist/providers/lmstudio.js.map +0 -1
  43. package/dist/providers/ollama.d.ts +0 -11
  44. package/dist/providers/ollama.d.ts.map +0 -1
  45. package/dist/providers/ollama.js +0 -59
  46. package/dist/providers/ollama.js.map +0 -1
  47. package/dist/providers/stable-diffusion.d.ts +0 -41
  48. package/dist/providers/stable-diffusion.d.ts.map +0 -1
  49. package/dist/providers/stable-diffusion.js +0 -283
  50. package/dist/providers/stable-diffusion.js.map +0 -1
  51. package/dist/providers/types.d.ts +0 -196
  52. package/dist/providers/types.d.ts.map +0 -1
  53. package/dist/providers/types.js +0 -19
  54. package/dist/providers/types.js.map +0 -1
  55. package/dist/quickstart/QuickstartScreen.d.ts +0 -5
  56. package/dist/quickstart/QuickstartScreen.d.ts.map +0 -1
  57. package/dist/quickstart/QuickstartScreen.js +0 -617
  58. package/dist/quickstart/QuickstartScreen.js.map +0 -1
  59. package/dist/quickstart/detect.d.ts +0 -22
  60. package/dist/quickstart/detect.d.ts.map +0 -1
  61. package/dist/quickstart/detect.js +0 -243
  62. package/dist/quickstart/detect.js.map +0 -1
  63. package/dist/quickstart/index.d.ts +0 -4
  64. package/dist/quickstart/index.d.ts.map +0 -1
  65. package/dist/quickstart/index.js +0 -274
  66. package/dist/quickstart/index.js.map +0 -1
  67. package/dist/quickstart/installers.d.ts +0 -109
  68. package/dist/quickstart/installers.d.ts.map +0 -1
  69. package/dist/quickstart/installers.js +0 -1296
  70. package/dist/quickstart/installers.js.map +0 -1
  71. package/dist/runner.d.ts +0 -19
  72. package/dist/runner.d.ts.map +0 -1
  73. package/dist/runner.js +0 -314
  74. package/dist/runner.js.map +0 -1
  75. package/dist/tui/App.d.ts +0 -7
  76. package/dist/tui/App.d.ts.map +0 -1
  77. package/dist/tui/App.js +0 -53
  78. package/dist/tui/App.js.map +0 -1
  79. package/dist/tui/TunnelRunner.d.ts +0 -19
  80. package/dist/tui/TunnelRunner.d.ts.map +0 -1
  81. package/dist/tui/TunnelRunner.js +0 -228
  82. package/dist/tui/TunnelRunner.js.map +0 -1
  83. package/dist/tui/components/Header.d.ts +0 -9
  84. package/dist/tui/components/Header.d.ts.map +0 -1
  85. package/dist/tui/components/Header.js +0 -21
  86. package/dist/tui/components/Header.js.map +0 -1
  87. package/dist/tui/components/ModelsPanel.d.ts +0 -7
  88. package/dist/tui/components/ModelsPanel.d.ts.map +0 -1
  89. package/dist/tui/components/ModelsPanel.js +0 -28
  90. package/dist/tui/components/ModelsPanel.js.map +0 -1
  91. package/dist/tui/components/ProvidersPanel.d.ts +0 -7
  92. package/dist/tui/components/ProvidersPanel.d.ts.map +0 -1
  93. package/dist/tui/components/ProvidersPanel.js +0 -6
  94. package/dist/tui/components/ProvidersPanel.js.map +0 -1
  95. package/dist/tui/components/RequestLog.d.ts +0 -8
  96. package/dist/tui/components/RequestLog.d.ts.map +0 -1
  97. package/dist/tui/components/RequestLog.js +0 -60
  98. package/dist/tui/components/RequestLog.js.map +0 -1
  99. package/dist/tui/components/StatusBar.d.ts +0 -10
  100. package/dist/tui/components/StatusBar.d.ts.map +0 -1
  101. package/dist/tui/components/StatusBar.js +0 -7
  102. package/dist/tui/components/StatusBar.js.map +0 -1
  103. package/dist/tui/components/index.d.ts +0 -6
  104. package/dist/tui/components/index.d.ts.map +0 -1
  105. package/dist/tui/components/index.js +0 -6
  106. package/dist/tui/components/index.js.map +0 -1
  107. package/dist/tui/events.d.ts +0 -35
  108. package/dist/tui/events.d.ts.map +0 -1
  109. package/dist/tui/events.js +0 -26
  110. package/dist/tui/events.js.map +0 -1
  111. package/dist/tui/hooks/index.d.ts +0 -5
  112. package/dist/tui/hooks/index.d.ts.map +0 -1
  113. package/dist/tui/hooks/index.js +0 -5
  114. package/dist/tui/hooks/index.js.map +0 -1
  115. package/dist/tui/hooks/useConnection.d.ts +0 -10
  116. package/dist/tui/hooks/useConnection.d.ts.map +0 -1
  117. package/dist/tui/hooks/useConnection.js +0 -42
  118. package/dist/tui/hooks/useConnection.js.map +0 -1
  119. package/dist/tui/hooks/useModels.d.ts +0 -9
  120. package/dist/tui/hooks/useModels.d.ts.map +0 -1
  121. package/dist/tui/hooks/useModels.js +0 -28
  122. package/dist/tui/hooks/useModels.js.map +0 -1
  123. package/dist/tui/hooks/useProviders.d.ts +0 -9
  124. package/dist/tui/hooks/useProviders.d.ts.map +0 -1
  125. package/dist/tui/hooks/useProviders.js +0 -30
  126. package/dist/tui/hooks/useProviders.js.map +0 -1
  127. package/dist/tui/hooks/useRequests.d.ts +0 -9
  128. package/dist/tui/hooks/useRequests.d.ts.map +0 -1
  129. package/dist/tui/hooks/useRequests.js +0 -60
  130. package/dist/tui/hooks/useRequests.js.map +0 -1
  131. package/dist/tui/index.d.ts +0 -2
  132. package/dist/tui/index.d.ts.map +0 -1
  133. package/dist/tui/index.js +0 -19
  134. package/dist/tui/index.js.map +0 -1
  135. package/dist/tui/screens/ConfigScreen.d.ts +0 -2
  136. package/dist/tui/screens/ConfigScreen.d.ts.map +0 -1
  137. package/dist/tui/screens/ConfigScreen.js +0 -18
  138. package/dist/tui/screens/ConfigScreen.js.map +0 -1
  139. package/dist/tui/screens/HomeScreen.d.ts +0 -2
  140. package/dist/tui/screens/HomeScreen.d.ts.map +0 -1
  141. package/dist/tui/screens/HomeScreen.js +0 -156
  142. package/dist/tui/screens/HomeScreen.js.map +0 -1
  143. package/dist/tui/screens/ModelsScreen.d.ts +0 -2
  144. package/dist/tui/screens/ModelsScreen.d.ts.map +0 -1
  145. package/dist/tui/screens/ModelsScreen.js +0 -59
  146. package/dist/tui/screens/ModelsScreen.js.map +0 -1
  147. package/dist/tui/screens/StatusScreen.d.ts +0 -2
  148. package/dist/tui/screens/StatusScreen.d.ts.map +0 -1
  149. package/dist/tui/screens/StatusScreen.js +0 -53
  150. package/dist/tui/screens/StatusScreen.js.map +0 -1
  151. package/dist/tui/screens/index.d.ts +0 -9
  152. package/dist/tui/screens/index.d.ts.map +0 -1
  153. package/dist/tui/screens/index.js +0 -38
  154. package/dist/tui/screens/index.js.map +0 -1
  155. package/dist/tui/types.d.ts +0 -30
  156. package/dist/tui/types.d.ts.map +0 -1
  157. package/dist/tui/types.js +0 -2
  158. package/dist/tui/types.js.map +0 -1
  159. package/dist/workflows/index.d.ts +0 -47
  160. package/dist/workflows/index.d.ts.map +0 -1
  161. package/dist/workflows/index.js +0 -95
  162. package/dist/workflows/index.js.map +0 -1
  163. package/dist/workflows/ltx-video.d.ts +0 -45
  164. package/dist/workflows/ltx-video.d.ts.map +0 -1
  165. package/dist/workflows/ltx-video.js +0 -114
  166. package/dist/workflows/ltx-video.js.map +0 -1
  167. package/dist/workflows/wan2.1.d.ts +0 -44
  168. package/dist/workflows/wan2.1.d.ts.map +0 -1
  169. package/dist/workflows/wan2.1.js +0 -119
  170. 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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"}
@@ -1,2 +0,0 @@
1
- export declare function startTUI(): Promise<void>;
2
- //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -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,2 +0,0 @@
1
- export declare function ConfigScreen(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=ConfigScreen.d.ts.map
@@ -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,2 +0,0 @@
1
- export declare function HomeScreen(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=HomeScreen.d.ts.map
@@ -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,2 +0,0 @@
1
- export declare function ModelsScreen(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=ModelsScreen.d.ts.map
@@ -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,2 +0,0 @@
1
- export declare function StatusScreen(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=StatusScreen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/StatusScreen.tsx"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,4CAiJ3B"}