@doriandev/devcc 0.1.2

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 (284) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +659 -0
  3. package/bin/devcc.mjs +66 -0
  4. package/dist/devcc/app/App.d.ts +178 -0
  5. package/dist/devcc/app/App.d.ts.map +1 -0
  6. package/dist/devcc/app/App.js +1255 -0
  7. package/dist/devcc/app/App.js.map +1 -0
  8. package/dist/devcc/app/builtinCommands.d.ts +17 -0
  9. package/dist/devcc/app/builtinCommands.d.ts.map +1 -0
  10. package/dist/devcc/app/builtinCommands.js +389 -0
  11. package/dist/devcc/app/builtinCommands.js.map +1 -0
  12. package/dist/devcc/app/keymap.d.ts +21 -0
  13. package/dist/devcc/app/keymap.d.ts.map +1 -0
  14. package/dist/devcc/app/keymap.js +162 -0
  15. package/dist/devcc/app/keymap.js.map +1 -0
  16. package/dist/devcc/app/theme.d.ts +49 -0
  17. package/dist/devcc/app/theme.d.ts.map +1 -0
  18. package/dist/devcc/app/theme.js +68 -0
  19. package/dist/devcc/app/theme.js.map +1 -0
  20. package/dist/devcc/cli.d.ts +3 -0
  21. package/dist/devcc/cli.d.ts.map +1 -0
  22. package/dist/devcc/cli.js +113 -0
  23. package/dist/devcc/cli.js.map +1 -0
  24. package/dist/devcc/components/CommandPalette.d.ts +26 -0
  25. package/dist/devcc/components/CommandPalette.d.ts.map +1 -0
  26. package/dist/devcc/components/CommandPalette.js +113 -0
  27. package/dist/devcc/components/CommandPalette.js.map +1 -0
  28. package/dist/devcc/components/ConfirmDialog.d.ts +31 -0
  29. package/dist/devcc/components/ConfirmDialog.d.ts.map +1 -0
  30. package/dist/devcc/components/ConfirmDialog.js +147 -0
  31. package/dist/devcc/components/ConfirmDialog.js.map +1 -0
  32. package/dist/devcc/components/Footer.d.ts +22 -0
  33. package/dist/devcc/components/Footer.d.ts.map +1 -0
  34. package/dist/devcc/components/Footer.js +72 -0
  35. package/dist/devcc/components/Footer.js.map +1 -0
  36. package/dist/devcc/components/Header.d.ts +12 -0
  37. package/dist/devcc/components/Header.d.ts.map +1 -0
  38. package/dist/devcc/components/Header.js +84 -0
  39. package/dist/devcc/components/Header.js.map +1 -0
  40. package/dist/devcc/components/HelpOverlay.d.ts +18 -0
  41. package/dist/devcc/components/HelpOverlay.d.ts.map +1 -0
  42. package/dist/devcc/components/HelpOverlay.js +48 -0
  43. package/dist/devcc/components/HelpOverlay.js.map +1 -0
  44. package/dist/devcc/components/Overlay.d.ts +31 -0
  45. package/dist/devcc/components/Overlay.d.ts.map +1 -0
  46. package/dist/devcc/components/Overlay.js +60 -0
  47. package/dist/devcc/components/Overlay.js.map +1 -0
  48. package/dist/devcc/components/ProjectPicker.d.ts +26 -0
  49. package/dist/devcc/components/ProjectPicker.d.ts.map +1 -0
  50. package/dist/devcc/components/ProjectPicker.js +114 -0
  51. package/dist/devcc/components/ProjectPicker.js.map +1 -0
  52. package/dist/devcc/components/Sidebar.d.ts +42 -0
  53. package/dist/devcc/components/Sidebar.d.ts.map +1 -0
  54. package/dist/devcc/components/Sidebar.js +127 -0
  55. package/dist/devcc/components/Sidebar.js.map +1 -0
  56. package/dist/devcc/components/StatusBadge.d.ts +16 -0
  57. package/dist/devcc/components/StatusBadge.d.ts.map +1 -0
  58. package/dist/devcc/components/StatusBadge.js +30 -0
  59. package/dist/devcc/components/StatusBadge.js.map +1 -0
  60. package/dist/devcc/components/primitives.d.ts +62 -0
  61. package/dist/devcc/components/primitives.d.ts.map +1 -0
  62. package/dist/devcc/components/primitives.js +169 -0
  63. package/dist/devcc/components/primitives.js.map +1 -0
  64. package/dist/devcc/components/styled.d.ts +16 -0
  65. package/dist/devcc/components/styled.d.ts.map +1 -0
  66. package/dist/devcc/components/styled.js +35 -0
  67. package/dist/devcc/components/styled.js.map +1 -0
  68. package/dist/devcc/core/commands.d.ts +89 -0
  69. package/dist/devcc/core/commands.d.ts.map +1 -0
  70. package/dist/devcc/core/commands.js +68 -0
  71. package/dist/devcc/core/commands.js.map +1 -0
  72. package/dist/devcc/core/config.d.ts +81 -0
  73. package/dist/devcc/core/config.d.ts.map +1 -0
  74. package/dist/devcc/core/config.js +313 -0
  75. package/dist/devcc/core/config.js.map +1 -0
  76. package/dist/devcc/core/events.d.ts +21 -0
  77. package/dist/devcc/core/events.d.ts.map +1 -0
  78. package/dist/devcc/core/events.js +27 -0
  79. package/dist/devcc/core/events.js.map +1 -0
  80. package/dist/devcc/core/state.d.ts +104 -0
  81. package/dist/devcc/core/state.d.ts.map +1 -0
  82. package/dist/devcc/core/state.js +139 -0
  83. package/dist/devcc/core/state.js.map +1 -0
  84. package/dist/devcc/deps/DependencyService.d.ts +50 -0
  85. package/dist/devcc/deps/DependencyService.d.ts.map +1 -0
  86. package/dist/devcc/deps/DependencyService.js +109 -0
  87. package/dist/devcc/deps/DependencyService.js.map +1 -0
  88. package/dist/devcc/deps/parse.d.ts +49 -0
  89. package/dist/devcc/deps/parse.d.ts.map +1 -0
  90. package/dist/devcc/deps/parse.js +158 -0
  91. package/dist/devcc/deps/parse.js.map +1 -0
  92. package/dist/devcc/git/GitService.d.ts +60 -0
  93. package/dist/devcc/git/GitService.d.ts.map +1 -0
  94. package/dist/devcc/git/GitService.js +160 -0
  95. package/dist/devcc/git/GitService.js.map +1 -0
  96. package/dist/devcc/git/parse.d.ts +57 -0
  97. package/dist/devcc/git/parse.d.ts.map +1 -0
  98. package/dist/devcc/git/parse.js +174 -0
  99. package/dist/devcc/git/parse.js.map +1 -0
  100. package/dist/devcc/index.d.ts +37 -0
  101. package/dist/devcc/index.d.ts.map +1 -0
  102. package/dist/devcc/index.js +36 -0
  103. package/dist/devcc/index.js.map +1 -0
  104. package/dist/devcc/logs/LogBuffer.d.ts +86 -0
  105. package/dist/devcc/logs/LogBuffer.d.ts.map +1 -0
  106. package/dist/devcc/logs/LogBuffer.js +200 -0
  107. package/dist/devcc/logs/LogBuffer.js.map +1 -0
  108. package/dist/devcc/logs/merge.d.ts +36 -0
  109. package/dist/devcc/logs/merge.d.ts.map +1 -0
  110. package/dist/devcc/logs/merge.js +71 -0
  111. package/dist/devcc/logs/merge.js.map +1 -0
  112. package/dist/devcc/processes/ManagedProcess.d.ts +129 -0
  113. package/dist/devcc/processes/ManagedProcess.d.ts.map +1 -0
  114. package/dist/devcc/processes/ManagedProcess.js +80 -0
  115. package/dist/devcc/processes/ManagedProcess.js.map +1 -0
  116. package/dist/devcc/processes/ProcessManager.d.ts +112 -0
  117. package/dist/devcc/processes/ProcessManager.d.ts.map +1 -0
  118. package/dist/devcc/processes/ProcessManager.js +525 -0
  119. package/dist/devcc/processes/ProcessManager.js.map +1 -0
  120. package/dist/devcc/processes/graph.d.ts +35 -0
  121. package/dist/devcc/processes/graph.d.ts.map +1 -0
  122. package/dist/devcc/processes/graph.js +68 -0
  123. package/dist/devcc/processes/graph.js.map +1 -0
  124. package/dist/devcc/projects/ProjectRegistry.d.ts +52 -0
  125. package/dist/devcc/projects/ProjectRegistry.d.ts.map +1 -0
  126. package/dist/devcc/projects/ProjectRegistry.js +177 -0
  127. package/dist/devcc/projects/ProjectRegistry.js.map +1 -0
  128. package/dist/devcc/services/ServiceManager.d.ts +48 -0
  129. package/dist/devcc/services/ServiceManager.d.ts.map +1 -0
  130. package/dist/devcc/services/ServiceManager.js +146 -0
  131. package/dist/devcc/services/ServiceManager.js.map +1 -0
  132. package/dist/devcc/services/docker.d.ts +37 -0
  133. package/dist/devcc/services/docker.d.ts.map +1 -0
  134. package/dist/devcc/services/docker.js +179 -0
  135. package/dist/devcc/services/docker.js.map +1 -0
  136. package/dist/devcc/services/node.d.ts +40 -0
  137. package/dist/devcc/services/node.d.ts.map +1 -0
  138. package/dist/devcc/services/node.js +107 -0
  139. package/dist/devcc/services/node.js.map +1 -0
  140. package/dist/devcc/services/ollama.d.ts +27 -0
  141. package/dist/devcc/services/ollama.d.ts.map +1 -0
  142. package/dist/devcc/services/ollama.js +66 -0
  143. package/dist/devcc/services/ollama.js.map +1 -0
  144. package/dist/devcc/services/postgres.d.ts +30 -0
  145. package/dist/devcc/services/postgres.d.ts.map +1 -0
  146. package/dist/devcc/services/postgres.js +47 -0
  147. package/dist/devcc/services/postgres.js.map +1 -0
  148. package/dist/devcc/services/redis.d.ts +20 -0
  149. package/dist/devcc/services/redis.d.ts.map +1 -0
  150. package/dist/devcc/services/redis.js +39 -0
  151. package/dist/devcc/services/redis.js.map +1 -0
  152. package/dist/devcc/services/types.d.ts +51 -0
  153. package/dist/devcc/services/types.d.ts.map +1 -0
  154. package/dist/devcc/services/types.js +10 -0
  155. package/dist/devcc/services/types.js.map +1 -0
  156. package/dist/devcc/system/SystemMonitor.d.ts +87 -0
  157. package/dist/devcc/system/SystemMonitor.d.ts.map +1 -0
  158. package/dist/devcc/system/SystemMonitor.js +142 -0
  159. package/dist/devcc/system/SystemMonitor.js.map +1 -0
  160. package/dist/devcc/utils/errors.d.ts +31 -0
  161. package/dist/devcc/utils/errors.d.ts.map +1 -0
  162. package/dist/devcc/utils/errors.js +52 -0
  163. package/dist/devcc/utils/errors.js.map +1 -0
  164. package/dist/devcc/utils/exec.d.ts +41 -0
  165. package/dist/devcc/utils/exec.d.ts.map +1 -0
  166. package/dist/devcc/utils/exec.js +112 -0
  167. package/dist/devcc/utils/exec.js.map +1 -0
  168. package/dist/devcc/utils/format.d.ts +18 -0
  169. package/dist/devcc/utils/format.d.ts.map +1 -0
  170. package/dist/devcc/utils/format.js +85 -0
  171. package/dist/devcc/utils/format.js.map +1 -0
  172. package/dist/devcc/utils/fuzzy.d.ts +12 -0
  173. package/dist/devcc/utils/fuzzy.d.ts.map +1 -0
  174. package/dist/devcc/utils/fuzzy.js +20 -0
  175. package/dist/devcc/utils/fuzzy.js.map +1 -0
  176. package/dist/devcc/utils/logger.d.ts +41 -0
  177. package/dist/devcc/utils/logger.d.ts.map +1 -0
  178. package/dist/devcc/utils/logger.js +117 -0
  179. package/dist/devcc/utils/logger.js.map +1 -0
  180. package/dist/devcc/utils/packageManager.d.ts +39 -0
  181. package/dist/devcc/utils/packageManager.d.ts.map +1 -0
  182. package/dist/devcc/utils/packageManager.js +85 -0
  183. package/dist/devcc/utils/packageManager.js.map +1 -0
  184. package/dist/devcc/utils/paths.d.ts +12 -0
  185. package/dist/devcc/utils/paths.d.ts.map +1 -0
  186. package/dist/devcc/utils/paths.js +39 -0
  187. package/dist/devcc/utils/paths.js.map +1 -0
  188. package/dist/devcc/views/DependenciesView.d.ts +34 -0
  189. package/dist/devcc/views/DependenciesView.d.ts.map +1 -0
  190. package/dist/devcc/views/DependenciesView.js +170 -0
  191. package/dist/devcc/views/DependenciesView.js.map +1 -0
  192. package/dist/devcc/views/GitView.d.ts +29 -0
  193. package/dist/devcc/views/GitView.d.ts.map +1 -0
  194. package/dist/devcc/views/GitView.js +226 -0
  195. package/dist/devcc/views/GitView.js.map +1 -0
  196. package/dist/devcc/views/LogsView.d.ts +39 -0
  197. package/dist/devcc/views/LogsView.d.ts.map +1 -0
  198. package/dist/devcc/views/LogsView.js +249 -0
  199. package/dist/devcc/views/LogsView.js.map +1 -0
  200. package/dist/devcc/views/OverviewView.d.ts +16 -0
  201. package/dist/devcc/views/OverviewView.d.ts.map +1 -0
  202. package/dist/devcc/views/OverviewView.js +135 -0
  203. package/dist/devcc/views/OverviewView.js.map +1 -0
  204. package/dist/devcc/views/ProcessesView.d.ts +26 -0
  205. package/dist/devcc/views/ProcessesView.d.ts.map +1 -0
  206. package/dist/devcc/views/ProcessesView.js +161 -0
  207. package/dist/devcc/views/ProcessesView.js.map +1 -0
  208. package/dist/devcc/views/ScriptsView.d.ts +30 -0
  209. package/dist/devcc/views/ScriptsView.d.ts.map +1 -0
  210. package/dist/devcc/views/ScriptsView.js +168 -0
  211. package/dist/devcc/views/ScriptsView.js.map +1 -0
  212. package/dist/devcc/views/ServicesView.d.ts +28 -0
  213. package/dist/devcc/views/ServicesView.d.ts.map +1 -0
  214. package/dist/devcc/views/ServicesView.js +153 -0
  215. package/dist/devcc/views/ServicesView.js.map +1 -0
  216. package/dist/devcc/views/SettingsView.d.ts +20 -0
  217. package/dist/devcc/views/SettingsView.d.ts.map +1 -0
  218. package/dist/devcc/views/SettingsView.js +114 -0
  219. package/dist/devcc/views/SettingsView.js.map +1 -0
  220. package/dist/devcc/views/SystemView.d.ts +13 -0
  221. package/dist/devcc/views/SystemView.d.ts.map +1 -0
  222. package/dist/devcc/views/SystemView.js +82 -0
  223. package/dist/devcc/views/SystemView.js.map +1 -0
  224. package/dist/devcc/views/View.d.ts +35 -0
  225. package/dist/devcc/views/View.d.ts.map +1 -0
  226. package/dist/devcc/views/View.js +42 -0
  227. package/dist/devcc/views/View.js.map +1 -0
  228. package/package.json +79 -0
  229. package/src/devcc/app/App.ts +1463 -0
  230. package/src/devcc/app/builtinCommands.ts +429 -0
  231. package/src/devcc/app/keymap.ts +167 -0
  232. package/src/devcc/app/theme.ts +83 -0
  233. package/src/devcc/cli.ts +122 -0
  234. package/src/devcc/components/CommandPalette.ts +136 -0
  235. package/src/devcc/components/ConfirmDialog.ts +174 -0
  236. package/src/devcc/components/Footer.ts +85 -0
  237. package/src/devcc/components/Header.ts +93 -0
  238. package/src/devcc/components/HelpOverlay.ts +62 -0
  239. package/src/devcc/components/Overlay.ts +91 -0
  240. package/src/devcc/components/ProjectPicker.ts +138 -0
  241. package/src/devcc/components/Sidebar.ts +163 -0
  242. package/src/devcc/components/StatusBadge.ts +36 -0
  243. package/src/devcc/components/primitives.ts +213 -0
  244. package/src/devcc/components/styled.ts +44 -0
  245. package/src/devcc/core/commands.ts +140 -0
  246. package/src/devcc/core/config.ts +405 -0
  247. package/src/devcc/core/events.ts +41 -0
  248. package/src/devcc/core/state.ts +236 -0
  249. package/src/devcc/deps/DependencyService.ts +152 -0
  250. package/src/devcc/deps/parse.ts +210 -0
  251. package/src/devcc/git/GitService.ts +205 -0
  252. package/src/devcc/git/parse.ts +203 -0
  253. package/src/devcc/index.ts +115 -0
  254. package/src/devcc/logs/LogBuffer.ts +237 -0
  255. package/src/devcc/logs/merge.ts +87 -0
  256. package/src/devcc/processes/ManagedProcess.ts +195 -0
  257. package/src/devcc/processes/ProcessManager.ts +625 -0
  258. package/src/devcc/processes/graph.ts +98 -0
  259. package/src/devcc/projects/ProjectRegistry.ts +219 -0
  260. package/src/devcc/services/ServiceManager.ts +180 -0
  261. package/src/devcc/services/docker.ts +220 -0
  262. package/src/devcc/services/node.ts +137 -0
  263. package/src/devcc/services/ollama.ts +80 -0
  264. package/src/devcc/services/postgres.ts +57 -0
  265. package/src/devcc/services/redis.ts +47 -0
  266. package/src/devcc/services/types.ts +59 -0
  267. package/src/devcc/system/SystemMonitor.ts +207 -0
  268. package/src/devcc/utils/errors.ts +64 -0
  269. package/src/devcc/utils/exec.ts +165 -0
  270. package/src/devcc/utils/format.ts +83 -0
  271. package/src/devcc/utils/fuzzy.ts +44 -0
  272. package/src/devcc/utils/logger.ts +140 -0
  273. package/src/devcc/utils/packageManager.ts +112 -0
  274. package/src/devcc/utils/paths.ts +39 -0
  275. package/src/devcc/views/DependenciesView.ts +206 -0
  276. package/src/devcc/views/GitView.ts +259 -0
  277. package/src/devcc/views/LogsView.ts +300 -0
  278. package/src/devcc/views/OverviewView.ts +187 -0
  279. package/src/devcc/views/ProcessesView.ts +177 -0
  280. package/src/devcc/views/ScriptsView.ts +187 -0
  281. package/src/devcc/views/ServicesView.ts +188 -0
  282. package/src/devcc/views/SettingsView.ts +146 -0
  283. package/src/devcc/views/SystemView.ts +110 -0
  284. package/src/devcc/views/View.ts +63 -0
package/bin/devcc.mjs ADDED
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Runtime-selecting launcher for `devcc`.
4
+ *
5
+ * OpenTUI renders through a native Zig library over FFI, which needs either
6
+ * Bun 1.3+ or Node 26.4+ started with `--experimental-ffi`. This shim runs the
7
+ * dashboard directly when the current runtime already qualifies, and otherwise
8
+ * re-execs into one that does rather than failing with an FFI error.
9
+ */
10
+ import { spawnSync } from "node:child_process"
11
+ import { existsSync } from "node:fs"
12
+ import { dirname, join, resolve } from "node:path"
13
+ import { fileURLToPath } from "node:url"
14
+
15
+ const here = dirname(fileURLToPath(import.meta.url))
16
+ const packageRoot = resolve(here, "..")
17
+ const distEntry = join(packageRoot, "dist", "devcc", "cli.js")
18
+ const sourceEntry = join(packageRoot, "src", "devcc", "cli.ts")
19
+
20
+ const isBun = typeof globalThis.Bun !== "undefined"
21
+ const nodeSupportsFfi =
22
+ supportsNodeFfi(process.versions.node) && process.execArgv.includes("--experimental-ffi")
23
+
24
+ if (isBun || nodeSupportsFfi) {
25
+ const entry = existsSync(distEntry) ? distEntry : sourceEntry
26
+ const { main } = await import(entry)
27
+ const code = await main(process.argv.slice(2))
28
+ process.exit(code ?? 0)
29
+ }
30
+
31
+ // Prefer a built bundle; fall back to the TypeScript entry (Bun runs it directly).
32
+ const entry = existsSync(distEntry) ? distEntry : sourceEntry
33
+ const args = process.argv.slice(2)
34
+
35
+ if (hasCommand("bun")) {
36
+ exec("bun", ["run", entry, ...args])
37
+ } else if (supportsNodeFfi(process.versions.node)) {
38
+ exec(process.execPath, ["--experimental-ffi", entry, ...args])
39
+ } else {
40
+ process.stderr.write(
41
+ [
42
+ "devcc needs a runtime with FFI support.",
43
+ "",
44
+ ` current: node ${process.versions.node}`,
45
+ " required: bun >= 1.3.0, or node >= 26.4.0 (run with --experimental-ffi)",
46
+ "",
47
+ "Install Bun from https://bun.sh, or upgrade Node.",
48
+ "",
49
+ ].join("\n"),
50
+ )
51
+ process.exit(1)
52
+ }
53
+
54
+ function exec(command, argv) {
55
+ const result = spawnSync(command, argv, { stdio: "inherit" })
56
+ process.exit(result.status ?? 1)
57
+ }
58
+
59
+ function hasCommand(command) {
60
+ return spawnSync(command, ["--version"], { stdio: "ignore" }).status === 0
61
+ }
62
+
63
+ function supportsNodeFfi(version) {
64
+ const [major = 0, minor = 0] = version.split(".").map((part) => Number.parseInt(part, 10) || 0)
65
+ return major > 26 || (major === 26 && minor >= 4)
66
+ }
@@ -0,0 +1,178 @@
1
+ import { type CliRenderer } from "@opentui/core";
2
+ import { Store, type AppState } from "../core/state.js";
3
+ import { LogStore } from "../logs/LogBuffer.js";
4
+ export interface AppOptions {
5
+ /** Directory to treat as the project. Defaults to the detected project root. */
6
+ cwd?: string;
7
+ /** Injected by tests; production creates its own renderer. */
8
+ renderer?: CliRenderer;
9
+ }
10
+ export declare class App {
11
+ private readonly options;
12
+ private renderer;
13
+ /** Torn down only when the app exits. */
14
+ private readonly subscriptions;
15
+ /** App-level timers (clock, uptime tick). */
16
+ private timers;
17
+ private readonly views;
18
+ private store;
19
+ /** Every open project, keyed by root directory. All keep their processes alive. */
20
+ private readonly sessions;
21
+ /** The project the views are showing. */
22
+ private session;
23
+ /** Stable across project switches; repopulated per session. */
24
+ private readonly commands;
25
+ private context;
26
+ private get logger();
27
+ private get logs();
28
+ private get processes();
29
+ private get services();
30
+ private get git();
31
+ private get system();
32
+ private get deps();
33
+ private get config();
34
+ private header;
35
+ private footer;
36
+ private sidebar;
37
+ private contentBox;
38
+ private bodyBox;
39
+ private palette;
40
+ private projectPicker;
41
+ private confirmDialog;
42
+ private promptDialog;
43
+ private helpOverlay;
44
+ private activeView;
45
+ private viewDirty;
46
+ private logUpdateTimer;
47
+ private notificationSeq;
48
+ private switching;
49
+ private shuttingDown;
50
+ private exitResolver;
51
+ constructor(options?: AppOptions);
52
+ /**
53
+ * Bootstrap services, build the UI and start background polling.
54
+ * Returns as soon as the first frame is ready; slower work continues behind it.
55
+ */
56
+ start(): Promise<void>;
57
+ /** Boot the dashboard and resolve when the user quits. */
58
+ run(): Promise<void>;
59
+ private bootstrap;
60
+ /**
61
+ * Build every project-scoped service for `rootDir`.
62
+ *
63
+ * Nothing here touches the renderer or the store, which is what makes it
64
+ * reusable for switching projects at runtime.
65
+ */
66
+ private createSession;
67
+ /** Rebuild the command registry for the current session. */
68
+ private registerSessionCommands;
69
+ private reportConfigIssues;
70
+ private mount;
71
+ private wireEvents;
72
+ /**
73
+ * Subscribe to one session's backends.
74
+ *
75
+ * Every open project is wired, so background projects keep tracking their
76
+ * processes and capturing logs. Only the *active* project mirrors its state
77
+ * into the store; the others surface nothing but notifications, prefixed
78
+ * with the project name so you know where a crash happened.
79
+ */
80
+ private wireSession;
81
+ /** Store -> UI watchers. App-level: they outlive any single project. */
82
+ private wireStoreToUi;
83
+ /**
84
+ * Kick off background work after the first frame.
85
+ * Nothing here blocks the UI: the dashboard is usable while it runs.
86
+ */
87
+ private startAppTimers;
88
+ /**
89
+ * Pollers for one project. Only the active project polls git, services and
90
+ * system metrics - background projects merely keep their processes alive.
91
+ */
92
+ private startSessionBackground;
93
+ private stopSessionBackground;
94
+ private renderAll;
95
+ private markViewDirty;
96
+ /** Log output can arrive in bursts; coalesce redraws. */
97
+ private scheduleLogUpdate;
98
+ private setView;
99
+ private updateFooterHints;
100
+ private overlays;
101
+ /** Stop every app-level timer and every session's pollers. */
102
+ private stopBackground;
103
+ private handleResize;
104
+ private handleKey;
105
+ private handleConfirmKey;
106
+ private handlePromptKey;
107
+ private handlePaletteKey;
108
+ private handleProjectPickerKey;
109
+ private cycleView;
110
+ private moveSelection;
111
+ private openPalette;
112
+ /** Scanning the filesystem is quick but not free, so do it on open. */
113
+ private openProjectPicker;
114
+ private refreshProjectPicker;
115
+ private openHelp;
116
+ private refreshPalette;
117
+ private closeOverlays;
118
+ private runCommand;
119
+ private pushNotification;
120
+ private showNotification;
121
+ /**
122
+ * The context handed to commands and views.
123
+ *
124
+ * Built once and kept stable: session services are read through getters, so a
125
+ * project switch swaps the backends underneath every existing view without
126
+ * rebuilding the UI.
127
+ */
128
+ private createCommandContext;
129
+ private askConfirm;
130
+ private askPrompt;
131
+ /** Run a package.json script as a managed one-shot process. */
132
+ private runScript;
133
+ private finishScriptRun;
134
+ private runConfigCommand;
135
+ /** Current project first, then recents, config entries and sibling directories. */
136
+ private listProjects;
137
+ /** Open projects in the order they were opened. */
138
+ private openProjects;
139
+ /**
140
+ * Open a project, or bring an already-open one to the front.
141
+ *
142
+ * Opening never stops anything: the previous project keeps running in the
143
+ * background with its processes and log capture intact. The renderer, views
144
+ * and store are shared; only the session behind them changes.
145
+ */
146
+ private openProject;
147
+ /** Point the views at `session` and mirror its current state into the store. */
148
+ private activateSession;
149
+ /**
150
+ * Close a project, stopping anything devcc started there (confirmed).
151
+ * The last open project cannot be closed - quit instead.
152
+ */
153
+ private closeProject;
154
+ /** `ctrl+o`: bring the next open project to the front. */
155
+ private cycleProject;
156
+ /** Feed the rail the per-project running counts. */
157
+ private refreshSidebarProjects;
158
+ /** Update a single package, gated by a confirmation (it rewrites the lockfile). */
159
+ private updateDependency;
160
+ /**
161
+ * Graceful shutdown: stop timers and listeners, stop the processes devcc
162
+ * launched (never anything merely detected), then hand the terminal back.
163
+ */
164
+ quit(): Promise<void>;
165
+ /** Test hook: the store the UI is bound to. */
166
+ getStore(): Store<AppState>;
167
+ /** Test hook: open/activate a project without driving the picker overlay. */
168
+ switchProjectForTest(path: string): Promise<void>;
169
+ /** Test hook: close a project without the confirmation dialog when nothing runs. */
170
+ closeProjectForTest(path: string): Promise<void>;
171
+ /** Test hook: dependency-ordered start of the active project's processes. */
172
+ startAllForTest(ids?: string[]): Promise<void>;
173
+ /** Test hook: root directories of every open project. */
174
+ openProjectPaths(): string[];
175
+ /** Test hook: the log store backing the Logs view. */
176
+ getLogs(): LogStore;
177
+ }
178
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/devcc/app/App.ts"],"names":[],"mappings":"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"}