@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
@@ -0,0 +1,162 @@
1
+ /** Global single-key bindings that jump straight to a view. */
2
+ export const VIEW_SHORTCUTS = {
3
+ "1": "overview",
4
+ "2": "processes",
5
+ "3": "services",
6
+ "4": "scripts",
7
+ "5": "git",
8
+ "6": "logs",
9
+ "7": "dependencies",
10
+ "8": "system",
11
+ "9": "settings",
12
+ p: "processes",
13
+ g: "git",
14
+ l: "logs",
15
+ d: "dependencies",
16
+ };
17
+ /**
18
+ * The hint shown next to a section in the sidebar: its number, plus the
19
+ * mnemonic letter when it has one (`"7 d"`).
20
+ *
21
+ * Derived from the bindings above so the rail can never advertise a key that
22
+ * is not actually bound, or omit one that is.
23
+ */
24
+ export function shortcutHintFor(view) {
25
+ const keys = Object.entries(VIEW_SHORTCUTS)
26
+ .filter(([, target]) => target === view)
27
+ .map(([key]) => key);
28
+ const digits = keys.filter((key) => /^\d$/u.test(key)).sort();
29
+ const letters = keys.filter((key) => !/^\d$/u.test(key)).sort();
30
+ return [...digits, ...letters].join(" ");
31
+ }
32
+ /**
33
+ * The in-app manual (`?`, `F1`, or "Open the manual" in the palette).
34
+ *
35
+ * Starts with what each section is for, then the keys, then the config fields
36
+ * you are most likely to want. Kept next to the bindings it documents so the
37
+ * two cannot drift apart.
38
+ */
39
+ export const HELP_SECTIONS = [
40
+ {
41
+ title: "What each section does",
42
+ entries: [
43
+ { keys: "Overview", description: "git, running processes, services and load at a glance" },
44
+ { keys: "Processes", description: "dev servers devcc launched: start, stop, restart, inspect" },
45
+ { keys: "Services", description: "things detected on this machine: Docker, databases, Ollama" },
46
+ { keys: "Scripts", description: "package.json scripts, run through your package manager" },
47
+ { keys: "Git", description: "branch, changes, commits; stage, commit, pull, push" },
48
+ { keys: "Logs", description: "output of everything devcc started, per source or merged" },
49
+ { keys: "Dependencies", description: "outdated packages, checked only when you ask" },
50
+ { keys: "System", description: "host, toolchain versions, CPU, memory, disk" },
51
+ { keys: "Settings", description: "detection results, config issues, diagnostics history" },
52
+ ],
53
+ },
54
+ {
55
+ title: "Getting started",
56
+ entries: [
57
+ { keys: ".devcc.ts", description: "declare processes devcc can control (see Config below)" },
58
+ { keys: "ctrl+p", description: "open another project; the current one keeps running" },
59
+ { keys: "/", description: "the palette lists everything the app can do" },
60
+ { keys: ".devcc/devcc.log", description: "internal diagnostics, if something looks wrong" },
61
+ ],
62
+ },
63
+ {
64
+ title: "Navigation",
65
+ entries: [
66
+ { keys: "↑ / k", description: "previous item" },
67
+ { keys: "↓ / j", description: "next item" },
68
+ { keys: "← / h", description: "previous section" },
69
+ { keys: "→", description: "next section" },
70
+ { keys: "tab / S-tab", description: "cycle sections" },
71
+ { keys: "1…9", description: "jump to a section" },
72
+ { keys: "p / g / l / d", description: "processes / git / logs / dependencies" },
73
+ { keys: "enter", description: "open or activate" },
74
+ { keys: "esc", description: "close overlay / back" },
75
+ ],
76
+ },
77
+ {
78
+ title: "Processes & services",
79
+ entries: [
80
+ { keys: "s", description: "start or stop the selection" },
81
+ { keys: "r", description: "restart the selection" },
82
+ { keys: "i", description: "inspect the selection" },
83
+ { keys: "d", description: "docker compose down (confirmed)" },
84
+ ],
85
+ },
86
+ {
87
+ title: "Scripts",
88
+ entries: [
89
+ { keys: "enter", description: "run the selected script" },
90
+ { keys: "x", description: "stop a running script" },
91
+ { keys: "f", description: "filter the list" },
92
+ { keys: "c", description: "clear the filter" },
93
+ ],
94
+ },
95
+ {
96
+ title: "Git",
97
+ entries: [
98
+ { keys: "s / u", description: "stage / unstage the selected file" },
99
+ { keys: "d", description: "discard file changes (confirmed)" },
100
+ { keys: "c", description: "commit staged changes" },
101
+ { keys: "p / P", description: "pull / push (push is confirmed)" },
102
+ { keys: "f", description: "fetch" },
103
+ { keys: "r", description: "refresh status" },
104
+ ],
105
+ },
106
+ {
107
+ title: "Logs",
108
+ entries: [
109
+ { keys: "j / k", description: "scroll" },
110
+ { keys: "PgUp / PgDn", description: "page" },
111
+ { keys: "home / end", description: "jump to start / end" },
112
+ { keys: "f", description: "toggle follow" },
113
+ { keys: "s", description: "search (text or regex)" },
114
+ { keys: "x", description: "clear the search" },
115
+ { keys: "e", description: "toggle errors only" },
116
+ { keys: "a", description: "merged stream of all sources" },
117
+ { keys: "tab / ← →", description: "change log source" },
118
+ { keys: "c", description: "clear the current buffer" },
119
+ ],
120
+ },
121
+ {
122
+ title: "Dependencies",
123
+ entries: [
124
+ { keys: "r", description: "check the registry for updates" },
125
+ { keys: "u", description: "update the selected package (confirmed)" },
126
+ ],
127
+ },
128
+ {
129
+ title: "Projects",
130
+ entries: [
131
+ { keys: "ctrl+p", description: "open another project (others stay running)" },
132
+ { keys: "ctrl+o", description: "cycle through open projects" },
133
+ { keys: "enter", description: "open the highlighted project" },
134
+ { keys: "/ close", description: "close the current project (palette)" },
135
+ ],
136
+ },
137
+ {
138
+ title: "Global",
139
+ entries: [
140
+ { keys: "? / F1 / ctrl+k", description: "this manual" },
141
+ { keys: "/", description: "command palette" },
142
+ { keys: "ctrl+p / ctrl+o", description: "open / cycle projects" },
143
+ { keys: "?", description: "this help" },
144
+ { keys: "R", description: "refresh everything" },
145
+ { keys: "q / ctrl+c", description: "quit" },
146
+ ],
147
+ },
148
+ {
149
+ title: "Config quick reference (.devcc.ts)",
150
+ entries: [
151
+ { keys: "processes[]", description: "id, name, command, args, cwd, autoStart, url, port" },
152
+ { keys: " restartOnCrash", description: "auto-restart with backoff; maxCrashRestarts caps it" },
153
+ { keys: " dependsOn", description: "ids that must be ready first (start all / autostart)" },
154
+ { keys: " readiness", description: "{ port } or { logPattern }: running means usable" },
155
+ { keys: "commands[]", description: "id, title, command, args, confirm - shown in the palette" },
156
+ { keys: "services[]", description: "extra ports to watch: id, name, port, healthPath" },
157
+ { keys: "projects[]", description: "extra paths offered by the project switcher" },
158
+ { keys: "refresh", description: "{ system, services, git, clock } intervals in ms" },
159
+ ],
160
+ },
161
+ ];
162
+ //# sourceMappingURL=keymap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../../src/devcc/app/keymap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ProcessStatus } from "../processes/ManagedProcess.js";
2
+ import type { ServiceState } from "../services/types.js";
3
+ /**
4
+ * One restrained palette for the whole app.
5
+ *
6
+ * Colour carries meaning only: state (running/stopped/failed), selection, and a
7
+ * single accent for headings. Everything else is one of three greys.
8
+ */
9
+ export declare const theme: {
10
+ readonly background: "#0b0f14";
11
+ readonly panel: "#0f141b";
12
+ readonly panelAlt: "#131a23";
13
+ readonly border: "#243040";
14
+ readonly borderFocus: "#3b6ea5";
15
+ readonly text: "#c6d0da";
16
+ readonly textDim: "#6b7885";
17
+ readonly textBright: "#eaf0f6";
18
+ readonly accent: "#6aa9ff";
19
+ readonly success: "#4cc38a";
20
+ readonly warning: "#d9a441";
21
+ readonly danger: "#f2685e";
22
+ readonly info: "#6aa9ff";
23
+ readonly selectionBackground: "#1d3b63";
24
+ readonly selectionText: "#ffffff";
25
+ readonly headerBackground: "#131a23";
26
+ readonly footerBackground: "#131a23";
27
+ };
28
+ export declare const glyphs: {
29
+ readonly running: "●";
30
+ readonly stopped: "○";
31
+ readonly starting: "◐";
32
+ readonly stopping: "◑";
33
+ readonly failed: "✖";
34
+ readonly degraded: "◍";
35
+ readonly unknown: "·";
36
+ readonly bullet: "•";
37
+ readonly arrowRight: "›";
38
+ readonly check: "✓";
39
+ readonly cross: "✗";
40
+ readonly warning: "⚠";
41
+ };
42
+ export interface StatusStyle {
43
+ glyph: string;
44
+ color: string;
45
+ label: string;
46
+ }
47
+ export declare function processStatusStyle(status: ProcessStatus): StatusStyle;
48
+ export declare function serviceStateStyle(state: ServiceState): StatusStyle;
49
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/devcc/app/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;CAsBR,CAAA;AAEV,eAAO,MAAM,MAAM;;;;;;;;;;;;;CAaT,CAAA;AAEV,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAarE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAalE"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * One restrained palette for the whole app.
3
+ *
4
+ * Colour carries meaning only: state (running/stopped/failed), selection, and a
5
+ * single accent for headings. Everything else is one of three greys.
6
+ */
7
+ export const theme = {
8
+ background: "#0b0f14",
9
+ panel: "#0f141b",
10
+ panelAlt: "#131a23",
11
+ border: "#243040",
12
+ borderFocus: "#3b6ea5",
13
+ text: "#c6d0da",
14
+ textDim: "#6b7885",
15
+ textBright: "#eaf0f6",
16
+ accent: "#6aa9ff",
17
+ success: "#4cc38a",
18
+ warning: "#d9a441",
19
+ danger: "#f2685e",
20
+ info: "#6aa9ff",
21
+ selectionBackground: "#1d3b63",
22
+ selectionText: "#ffffff",
23
+ headerBackground: "#131a23",
24
+ footerBackground: "#131a23",
25
+ };
26
+ export const glyphs = {
27
+ running: "●",
28
+ stopped: "○",
29
+ starting: "◐",
30
+ stopping: "◑",
31
+ failed: "✖",
32
+ degraded: "◍",
33
+ unknown: "·",
34
+ bullet: "•",
35
+ arrowRight: "›",
36
+ check: "✓",
37
+ cross: "✗",
38
+ warning: "⚠",
39
+ };
40
+ export function processStatusStyle(status) {
41
+ switch (status) {
42
+ case "running":
43
+ return { glyph: glyphs.running, color: theme.success, label: "running" };
44
+ case "starting":
45
+ return { glyph: glyphs.starting, color: theme.warning, label: "starting" };
46
+ case "stopping":
47
+ return { glyph: glyphs.stopping, color: theme.warning, label: "stopping" };
48
+ case "failed":
49
+ return { glyph: glyphs.failed, color: theme.danger, label: "failed" };
50
+ case "stopped":
51
+ return { glyph: glyphs.stopped, color: theme.textDim, label: "stopped" };
52
+ }
53
+ }
54
+ export function serviceStateStyle(state) {
55
+ switch (state) {
56
+ case "running":
57
+ return { glyph: glyphs.running, color: theme.success, label: "running" };
58
+ case "degraded":
59
+ return { glyph: glyphs.degraded, color: theme.warning, label: "degraded" };
60
+ case "stopped":
61
+ return { glyph: glyphs.stopped, color: theme.textDim, label: "stopped" };
62
+ case "unavailable":
63
+ return { glyph: glyphs.cross, color: theme.danger, label: "unavailable" };
64
+ case "unknown":
65
+ return { glyph: glyphs.unknown, color: theme.textDim, label: "unknown" };
66
+ }
67
+ }
68
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/devcc/app/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export declare function main(argv?: readonly string[]): Promise<number>;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/devcc/cli.ts"],"names":[],"mappings":";AA0EA,wBAAsB,IAAI,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC3F"}
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Entry point for `devcc` / `pnpm dev:center`.
4
+ *
5
+ * OpenTUI talks to a native Zig core over FFI, which currently means Bun 1.3+
6
+ * or Node 26.4+ with `--experimental-ffi`. The launcher in `bin/devcc.mjs`
7
+ * re-execs under a supported runtime; this file fails loudly if something
8
+ * bypassed it.
9
+ */
10
+ import { createRequire } from "node:module";
11
+ import { pathToFileURL } from "node:url";
12
+ import { App } from "./app/App.js";
13
+ import { errorMessage } from "./utils/errors.js";
14
+ import { findProjectRoot } from "./utils/paths.js";
15
+ /**
16
+ * Read the version from package.json rather than duplicating it here, so the
17
+ * CLI can never disagree with what was published. `src/devcc/cli.ts` and
18
+ * `dist/devcc/cli.js` sit at the same depth, so one relative path serves both.
19
+ */
20
+ function readVersion() {
21
+ try {
22
+ const require = createRequire(import.meta.url);
23
+ const pkg = require("../../package.json");
24
+ return typeof pkg.version === "string" ? pkg.version : "0.0.0";
25
+ }
26
+ catch {
27
+ return "0.0.0";
28
+ }
29
+ }
30
+ const VERSION = readVersion();
31
+ function parseArgs(argv) {
32
+ const args = { help: false, version: false };
33
+ for (let index = 0; index < argv.length; index += 1) {
34
+ const arg = argv[index];
35
+ if (arg === "--help" || arg === "-h")
36
+ args.help = true;
37
+ else if (arg === "--version" || arg === "-v")
38
+ args.version = true;
39
+ else if (arg === "--cwd" || arg === "-C") {
40
+ const value = argv[index + 1];
41
+ if (value) {
42
+ args.cwd = value;
43
+ index += 1;
44
+ }
45
+ }
46
+ else if (arg?.startsWith("--cwd=")) {
47
+ args.cwd = arg.slice("--cwd=".length);
48
+ }
49
+ }
50
+ return args;
51
+ }
52
+ const USAGE = `dev command center ${VERSION}
53
+
54
+ Usage:
55
+ devcc [options]
56
+
57
+ Options:
58
+ -C, --cwd <dir> Project directory (default: nearest project root)
59
+ -h, --help Show this help
60
+ -v, --version Show the version
61
+
62
+ Environment:
63
+ DEVCC_LOG_LEVEL debug | info | warn | error | silent (default: info)
64
+
65
+ Configuration:
66
+ Optional .devcc.ts or devcc.config.ts in the project root.
67
+ `;
68
+ export async function main(argv = process.argv.slice(2)) {
69
+ const args = parseArgs(argv);
70
+ if (args.help) {
71
+ process.stdout.write(USAGE);
72
+ return 0;
73
+ }
74
+ if (args.version) {
75
+ process.stdout.write(`${VERSION}\n`);
76
+ return 0;
77
+ }
78
+ if (!process.stdout.isTTY) {
79
+ process.stderr.write("devcc needs an interactive terminal (stdout is not a TTY).\n");
80
+ return 1;
81
+ }
82
+ const app = new App({ cwd: args.cwd ? args.cwd : findProjectRoot() });
83
+ try {
84
+ await app.run();
85
+ return 0;
86
+ }
87
+ catch (error) {
88
+ // The renderer may still own the terminal; tear it down before printing.
89
+ try {
90
+ await app.quit();
91
+ }
92
+ catch {
93
+ // Nothing more we can do here.
94
+ }
95
+ process.stderr.write(`devcc failed to start: ${errorMessage(error)}\n`);
96
+ if (error instanceof Error && error.stack)
97
+ process.stderr.write(`${error.stack}\n`);
98
+ return 1;
99
+ }
100
+ }
101
+ const entry = process.argv[1];
102
+ const isDirectRun = entry !== undefined && import.meta.url === pathToFileURL(entry).href;
103
+ if (isDirectRun) {
104
+ main()
105
+ .then((code) => {
106
+ process.exitCode = code;
107
+ })
108
+ .catch((error) => {
109
+ process.stderr.write(`${errorMessage(error)}\n`);
110
+ process.exitCode = 1;
111
+ });
112
+ }
113
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/devcc/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { InputRenderable, type RenderContext } from "@opentui/core";
2
+ import type { CommandDefinition } from "../core/commands.js";
3
+ import { Overlay } from "./Overlay.js";
4
+ /**
5
+ * Fuzzy command palette (`/`).
6
+ *
7
+ * The palette is the discoverable surface for every registered command,
8
+ * including ones contributed by project config, so nothing is reachable only
9
+ * through a hidden key binding.
10
+ */
11
+ export declare class CommandPalette extends Overlay {
12
+ readonly input: InputRenderable;
13
+ private readonly list;
14
+ private readonly counter;
15
+ private results;
16
+ private selectedIndex;
17
+ constructor(ctx: RenderContext);
18
+ open(): void;
19
+ close(): void;
20
+ get query(): string;
21
+ setResults(results: CommandDefinition[]): void;
22
+ move(delta: number): void;
23
+ get selected(): CommandDefinition | undefined;
24
+ private paint;
25
+ }
26
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../../src/devcc/components/CommandPalette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAkB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAElG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,OAAO;IACzC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,aAAa,CAAI;gBAEb,GAAG,EAAE,aAAa;IAoD9B,IAAI,IAAI,IAAI;IAOZ,KAAK,IAAI,IAAI;IAKb,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAM9C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOzB,IAAI,QAAQ,IAAI,iBAAiB,GAAG,SAAS,CAE5C;IAED,OAAO,CAAC,KAAK;CAwBd"}
@@ -0,0 +1,113 @@
1
+ import { BoxRenderable, InputRenderable, TextRenderable } from "@opentui/core";
2
+ import { theme } from "../app/theme.js";
3
+ import { fit } from "../utils/format.js";
4
+ import { Overlay } from "./Overlay.js";
5
+ import { RowList } from "./primitives.js";
6
+ import { chunk, dim, styled } from "./styled.js";
7
+ /**
8
+ * Fuzzy command palette (`/`).
9
+ *
10
+ * The palette is the discoverable surface for every registered command,
11
+ * including ones contributed by project config, so nothing is reachable only
12
+ * through a hidden key binding.
13
+ */
14
+ export class CommandPalette extends Overlay {
15
+ input;
16
+ list;
17
+ counter;
18
+ results = [];
19
+ selectedIndex = 0;
20
+ constructor(ctx) {
21
+ super(ctx, {
22
+ title: " Command palette ",
23
+ widthRatio: 0.7,
24
+ minWidth: 42,
25
+ maxWidth: 96,
26
+ heightRatio: 0.6,
27
+ minHeight: 9,
28
+ maxHeight: 24,
29
+ });
30
+ const inputWrapper = new BoxRenderable(ctx, {
31
+ height: 1,
32
+ flexShrink: 0,
33
+ flexDirection: "row",
34
+ marginTop: 1,
35
+ backgroundColor: theme.panelAlt,
36
+ paddingLeft: 1,
37
+ paddingRight: 1,
38
+ });
39
+ const marker = new TextRenderable(ctx, {
40
+ content: "› ",
41
+ fg: theme.accent,
42
+ width: 2,
43
+ selectable: false,
44
+ });
45
+ this.input = new InputRenderable(ctx, {
46
+ flexGrow: 1,
47
+ backgroundColor: theme.panelAlt,
48
+ textColor: theme.textBright,
49
+ placeholder: "Type a command…",
50
+ placeholderColor: theme.textDim,
51
+ });
52
+ inputWrapper.add(marker);
53
+ inputWrapper.add(this.input);
54
+ this.list = new RowList(ctx, { marginTop: 1, flexGrow: 1, onViewportChange: () => this.paint() });
55
+ this.counter = new TextRenderable(ctx, {
56
+ content: "",
57
+ fg: theme.textDim,
58
+ height: 1,
59
+ flexShrink: 0,
60
+ selectable: false,
61
+ truncate: true,
62
+ });
63
+ this.box.add(inputWrapper);
64
+ this.box.add(this.list.box);
65
+ this.box.add(this.counter);
66
+ }
67
+ open() {
68
+ this.input.value = "";
69
+ this.selectedIndex = 0;
70
+ this.show();
71
+ this.input.focus();
72
+ }
73
+ close() {
74
+ this.input.blur();
75
+ this.hide();
76
+ }
77
+ get query() {
78
+ return this.input.value;
79
+ }
80
+ setResults(results) {
81
+ this.results = results;
82
+ this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, results.length - 1));
83
+ this.paint();
84
+ }
85
+ move(delta) {
86
+ if (this.results.length === 0)
87
+ return;
88
+ const next = this.selectedIndex + delta;
89
+ this.selectedIndex = ((next % this.results.length) + this.results.length) % this.results.length;
90
+ this.paint();
91
+ }
92
+ get selected() {
93
+ return this.results[this.selectedIndex];
94
+ }
95
+ paint() {
96
+ const width = Math.max(20, this.box.width - 4);
97
+ const categoryWidth = 12;
98
+ const shortcutWidth = 8;
99
+ const rows = this.results.map((command) => ({
100
+ key: command.id,
101
+ content: styled(dim(fit(command.category ?? "", categoryWidth)), chunk(fit(command.title, Math.max(8, width - categoryWidth - shortcutWidth)), theme.text), dim(command.shortcut ? fit(command.shortcut, shortcutWidth) : "")),
102
+ }));
103
+ if (rows.length === 0) {
104
+ rows.push({ key: "__empty", content: dimRow("No matching commands"), disabled: true });
105
+ }
106
+ this.list.setRows(rows, this.selectedIndex);
107
+ this.counter.content = styled(dim(`${this.results.length} command${this.results.length === 1 ? "" : "s"}`), dim(" ↑↓ move enter run esc close"));
108
+ }
109
+ }
110
+ function dimRow(text) {
111
+ return styled(dim(text));
112
+ }
113
+ //# sourceMappingURL=CommandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../src/devcc/components/CommandPalette.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { InputRenderable, type RenderContext } from "@opentui/core";
2
+ import { Overlay } from "./Overlay.js";
3
+ /**
4
+ * Yes/no modal for anything destructive or irreversible.
5
+ *
6
+ * Nothing in devcc runs a destructive command without one of these: `git
7
+ * restore`, `git push`, `docker compose down`, and any config-declared command
8
+ * marked `confirm` all route through here.
9
+ */
10
+ export declare class ConfirmDialog extends Overlay {
11
+ private readonly message;
12
+ private readonly detail;
13
+ private resolver;
14
+ constructor(ctx: RenderContext);
15
+ /** Show the dialog; resolves once the user answers or dismisses it. */
16
+ ask(title: string, message: string): Promise<boolean>;
17
+ resolve(value: boolean): void;
18
+ get pending(): boolean;
19
+ }
20
+ /** Single-line text prompt, used for commit messages and similar input. */
21
+ export declare class PromptDialog extends Overlay {
22
+ readonly input: InputRenderable;
23
+ private readonly label;
24
+ private resolver;
25
+ constructor(ctx: RenderContext);
26
+ ask(title: string, placeholder?: string): Promise<string | null>;
27
+ resolve(value: string | null): void;
28
+ submit(): void;
29
+ get pending(): boolean;
30
+ }
31
+ //# sourceMappingURL=ConfirmDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../src/devcc/components/ConfirmDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAkB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAElG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,OAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAA0C;gBAE9C,GAAG,EAAE,aAAa;IA6C9B,uEAAuE;IACvE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrD,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAO7B,IAAI,OAAO,IAAI,OAAO,CAErB;CACF;AAED,2EAA2E;AAC3E,qBAAa,YAAa,SAAQ,OAAO;IACvC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAgD;gBAEpD,GAAG,EAAE,aAAa;IAqD9B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY5D,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAUnC,MAAM,IAAI,IAAI;IAId,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}