@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.
- package/LICENSE +15 -0
- package/README.md +659 -0
- package/bin/devcc.mjs +66 -0
- package/dist/devcc/app/App.d.ts +178 -0
- package/dist/devcc/app/App.d.ts.map +1 -0
- package/dist/devcc/app/App.js +1255 -0
- package/dist/devcc/app/App.js.map +1 -0
- package/dist/devcc/app/builtinCommands.d.ts +17 -0
- package/dist/devcc/app/builtinCommands.d.ts.map +1 -0
- package/dist/devcc/app/builtinCommands.js +389 -0
- package/dist/devcc/app/builtinCommands.js.map +1 -0
- package/dist/devcc/app/keymap.d.ts +21 -0
- package/dist/devcc/app/keymap.d.ts.map +1 -0
- package/dist/devcc/app/keymap.js +162 -0
- package/dist/devcc/app/keymap.js.map +1 -0
- package/dist/devcc/app/theme.d.ts +49 -0
- package/dist/devcc/app/theme.d.ts.map +1 -0
- package/dist/devcc/app/theme.js +68 -0
- package/dist/devcc/app/theme.js.map +1 -0
- package/dist/devcc/cli.d.ts +3 -0
- package/dist/devcc/cli.d.ts.map +1 -0
- package/dist/devcc/cli.js +113 -0
- package/dist/devcc/cli.js.map +1 -0
- package/dist/devcc/components/CommandPalette.d.ts +26 -0
- package/dist/devcc/components/CommandPalette.d.ts.map +1 -0
- package/dist/devcc/components/CommandPalette.js +113 -0
- package/dist/devcc/components/CommandPalette.js.map +1 -0
- package/dist/devcc/components/ConfirmDialog.d.ts +31 -0
- package/dist/devcc/components/ConfirmDialog.d.ts.map +1 -0
- package/dist/devcc/components/ConfirmDialog.js +147 -0
- package/dist/devcc/components/ConfirmDialog.js.map +1 -0
- package/dist/devcc/components/Footer.d.ts +22 -0
- package/dist/devcc/components/Footer.d.ts.map +1 -0
- package/dist/devcc/components/Footer.js +72 -0
- package/dist/devcc/components/Footer.js.map +1 -0
- package/dist/devcc/components/Header.d.ts +12 -0
- package/dist/devcc/components/Header.d.ts.map +1 -0
- package/dist/devcc/components/Header.js +84 -0
- package/dist/devcc/components/Header.js.map +1 -0
- package/dist/devcc/components/HelpOverlay.d.ts +18 -0
- package/dist/devcc/components/HelpOverlay.d.ts.map +1 -0
- package/dist/devcc/components/HelpOverlay.js +48 -0
- package/dist/devcc/components/HelpOverlay.js.map +1 -0
- package/dist/devcc/components/Overlay.d.ts +31 -0
- package/dist/devcc/components/Overlay.d.ts.map +1 -0
- package/dist/devcc/components/Overlay.js +60 -0
- package/dist/devcc/components/Overlay.js.map +1 -0
- package/dist/devcc/components/ProjectPicker.d.ts +26 -0
- package/dist/devcc/components/ProjectPicker.d.ts.map +1 -0
- package/dist/devcc/components/ProjectPicker.js +114 -0
- package/dist/devcc/components/ProjectPicker.js.map +1 -0
- package/dist/devcc/components/Sidebar.d.ts +42 -0
- package/dist/devcc/components/Sidebar.d.ts.map +1 -0
- package/dist/devcc/components/Sidebar.js +127 -0
- package/dist/devcc/components/Sidebar.js.map +1 -0
- package/dist/devcc/components/StatusBadge.d.ts +16 -0
- package/dist/devcc/components/StatusBadge.d.ts.map +1 -0
- package/dist/devcc/components/StatusBadge.js +30 -0
- package/dist/devcc/components/StatusBadge.js.map +1 -0
- package/dist/devcc/components/primitives.d.ts +62 -0
- package/dist/devcc/components/primitives.d.ts.map +1 -0
- package/dist/devcc/components/primitives.js +169 -0
- package/dist/devcc/components/primitives.js.map +1 -0
- package/dist/devcc/components/styled.d.ts +16 -0
- package/dist/devcc/components/styled.d.ts.map +1 -0
- package/dist/devcc/components/styled.js +35 -0
- package/dist/devcc/components/styled.js.map +1 -0
- package/dist/devcc/core/commands.d.ts +89 -0
- package/dist/devcc/core/commands.d.ts.map +1 -0
- package/dist/devcc/core/commands.js +68 -0
- package/dist/devcc/core/commands.js.map +1 -0
- package/dist/devcc/core/config.d.ts +81 -0
- package/dist/devcc/core/config.d.ts.map +1 -0
- package/dist/devcc/core/config.js +313 -0
- package/dist/devcc/core/config.js.map +1 -0
- package/dist/devcc/core/events.d.ts +21 -0
- package/dist/devcc/core/events.d.ts.map +1 -0
- package/dist/devcc/core/events.js +27 -0
- package/dist/devcc/core/events.js.map +1 -0
- package/dist/devcc/core/state.d.ts +104 -0
- package/dist/devcc/core/state.d.ts.map +1 -0
- package/dist/devcc/core/state.js +139 -0
- package/dist/devcc/core/state.js.map +1 -0
- package/dist/devcc/deps/DependencyService.d.ts +50 -0
- package/dist/devcc/deps/DependencyService.d.ts.map +1 -0
- package/dist/devcc/deps/DependencyService.js +109 -0
- package/dist/devcc/deps/DependencyService.js.map +1 -0
- package/dist/devcc/deps/parse.d.ts +49 -0
- package/dist/devcc/deps/parse.d.ts.map +1 -0
- package/dist/devcc/deps/parse.js +158 -0
- package/dist/devcc/deps/parse.js.map +1 -0
- package/dist/devcc/git/GitService.d.ts +60 -0
- package/dist/devcc/git/GitService.d.ts.map +1 -0
- package/dist/devcc/git/GitService.js +160 -0
- package/dist/devcc/git/GitService.js.map +1 -0
- package/dist/devcc/git/parse.d.ts +57 -0
- package/dist/devcc/git/parse.d.ts.map +1 -0
- package/dist/devcc/git/parse.js +174 -0
- package/dist/devcc/git/parse.js.map +1 -0
- package/dist/devcc/index.d.ts +37 -0
- package/dist/devcc/index.d.ts.map +1 -0
- package/dist/devcc/index.js +36 -0
- package/dist/devcc/index.js.map +1 -0
- package/dist/devcc/logs/LogBuffer.d.ts +86 -0
- package/dist/devcc/logs/LogBuffer.d.ts.map +1 -0
- package/dist/devcc/logs/LogBuffer.js +200 -0
- package/dist/devcc/logs/LogBuffer.js.map +1 -0
- package/dist/devcc/logs/merge.d.ts +36 -0
- package/dist/devcc/logs/merge.d.ts.map +1 -0
- package/dist/devcc/logs/merge.js +71 -0
- package/dist/devcc/logs/merge.js.map +1 -0
- package/dist/devcc/processes/ManagedProcess.d.ts +129 -0
- package/dist/devcc/processes/ManagedProcess.d.ts.map +1 -0
- package/dist/devcc/processes/ManagedProcess.js +80 -0
- package/dist/devcc/processes/ManagedProcess.js.map +1 -0
- package/dist/devcc/processes/ProcessManager.d.ts +112 -0
- package/dist/devcc/processes/ProcessManager.d.ts.map +1 -0
- package/dist/devcc/processes/ProcessManager.js +525 -0
- package/dist/devcc/processes/ProcessManager.js.map +1 -0
- package/dist/devcc/processes/graph.d.ts +35 -0
- package/dist/devcc/processes/graph.d.ts.map +1 -0
- package/dist/devcc/processes/graph.js +68 -0
- package/dist/devcc/processes/graph.js.map +1 -0
- package/dist/devcc/projects/ProjectRegistry.d.ts +52 -0
- package/dist/devcc/projects/ProjectRegistry.d.ts.map +1 -0
- package/dist/devcc/projects/ProjectRegistry.js +177 -0
- package/dist/devcc/projects/ProjectRegistry.js.map +1 -0
- package/dist/devcc/services/ServiceManager.d.ts +48 -0
- package/dist/devcc/services/ServiceManager.d.ts.map +1 -0
- package/dist/devcc/services/ServiceManager.js +146 -0
- package/dist/devcc/services/ServiceManager.js.map +1 -0
- package/dist/devcc/services/docker.d.ts +37 -0
- package/dist/devcc/services/docker.d.ts.map +1 -0
- package/dist/devcc/services/docker.js +179 -0
- package/dist/devcc/services/docker.js.map +1 -0
- package/dist/devcc/services/node.d.ts +40 -0
- package/dist/devcc/services/node.d.ts.map +1 -0
- package/dist/devcc/services/node.js +107 -0
- package/dist/devcc/services/node.js.map +1 -0
- package/dist/devcc/services/ollama.d.ts +27 -0
- package/dist/devcc/services/ollama.d.ts.map +1 -0
- package/dist/devcc/services/ollama.js +66 -0
- package/dist/devcc/services/ollama.js.map +1 -0
- package/dist/devcc/services/postgres.d.ts +30 -0
- package/dist/devcc/services/postgres.d.ts.map +1 -0
- package/dist/devcc/services/postgres.js +47 -0
- package/dist/devcc/services/postgres.js.map +1 -0
- package/dist/devcc/services/redis.d.ts +20 -0
- package/dist/devcc/services/redis.d.ts.map +1 -0
- package/dist/devcc/services/redis.js +39 -0
- package/dist/devcc/services/redis.js.map +1 -0
- package/dist/devcc/services/types.d.ts +51 -0
- package/dist/devcc/services/types.d.ts.map +1 -0
- package/dist/devcc/services/types.js +10 -0
- package/dist/devcc/services/types.js.map +1 -0
- package/dist/devcc/system/SystemMonitor.d.ts +87 -0
- package/dist/devcc/system/SystemMonitor.d.ts.map +1 -0
- package/dist/devcc/system/SystemMonitor.js +142 -0
- package/dist/devcc/system/SystemMonitor.js.map +1 -0
- package/dist/devcc/utils/errors.d.ts +31 -0
- package/dist/devcc/utils/errors.d.ts.map +1 -0
- package/dist/devcc/utils/errors.js +52 -0
- package/dist/devcc/utils/errors.js.map +1 -0
- package/dist/devcc/utils/exec.d.ts +41 -0
- package/dist/devcc/utils/exec.d.ts.map +1 -0
- package/dist/devcc/utils/exec.js +112 -0
- package/dist/devcc/utils/exec.js.map +1 -0
- package/dist/devcc/utils/format.d.ts +18 -0
- package/dist/devcc/utils/format.d.ts.map +1 -0
- package/dist/devcc/utils/format.js +85 -0
- package/dist/devcc/utils/format.js.map +1 -0
- package/dist/devcc/utils/fuzzy.d.ts +12 -0
- package/dist/devcc/utils/fuzzy.d.ts.map +1 -0
- package/dist/devcc/utils/fuzzy.js +20 -0
- package/dist/devcc/utils/fuzzy.js.map +1 -0
- package/dist/devcc/utils/logger.d.ts +41 -0
- package/dist/devcc/utils/logger.d.ts.map +1 -0
- package/dist/devcc/utils/logger.js +117 -0
- package/dist/devcc/utils/logger.js.map +1 -0
- package/dist/devcc/utils/packageManager.d.ts +39 -0
- package/dist/devcc/utils/packageManager.d.ts.map +1 -0
- package/dist/devcc/utils/packageManager.js +85 -0
- package/dist/devcc/utils/packageManager.js.map +1 -0
- package/dist/devcc/utils/paths.d.ts +12 -0
- package/dist/devcc/utils/paths.d.ts.map +1 -0
- package/dist/devcc/utils/paths.js +39 -0
- package/dist/devcc/utils/paths.js.map +1 -0
- package/dist/devcc/views/DependenciesView.d.ts +34 -0
- package/dist/devcc/views/DependenciesView.d.ts.map +1 -0
- package/dist/devcc/views/DependenciesView.js +170 -0
- package/dist/devcc/views/DependenciesView.js.map +1 -0
- package/dist/devcc/views/GitView.d.ts +29 -0
- package/dist/devcc/views/GitView.d.ts.map +1 -0
- package/dist/devcc/views/GitView.js +226 -0
- package/dist/devcc/views/GitView.js.map +1 -0
- package/dist/devcc/views/LogsView.d.ts +39 -0
- package/dist/devcc/views/LogsView.d.ts.map +1 -0
- package/dist/devcc/views/LogsView.js +249 -0
- package/dist/devcc/views/LogsView.js.map +1 -0
- package/dist/devcc/views/OverviewView.d.ts +16 -0
- package/dist/devcc/views/OverviewView.d.ts.map +1 -0
- package/dist/devcc/views/OverviewView.js +135 -0
- package/dist/devcc/views/OverviewView.js.map +1 -0
- package/dist/devcc/views/ProcessesView.d.ts +26 -0
- package/dist/devcc/views/ProcessesView.d.ts.map +1 -0
- package/dist/devcc/views/ProcessesView.js +161 -0
- package/dist/devcc/views/ProcessesView.js.map +1 -0
- package/dist/devcc/views/ScriptsView.d.ts +30 -0
- package/dist/devcc/views/ScriptsView.d.ts.map +1 -0
- package/dist/devcc/views/ScriptsView.js +168 -0
- package/dist/devcc/views/ScriptsView.js.map +1 -0
- package/dist/devcc/views/ServicesView.d.ts +28 -0
- package/dist/devcc/views/ServicesView.d.ts.map +1 -0
- package/dist/devcc/views/ServicesView.js +153 -0
- package/dist/devcc/views/ServicesView.js.map +1 -0
- package/dist/devcc/views/SettingsView.d.ts +20 -0
- package/dist/devcc/views/SettingsView.d.ts.map +1 -0
- package/dist/devcc/views/SettingsView.js +114 -0
- package/dist/devcc/views/SettingsView.js.map +1 -0
- package/dist/devcc/views/SystemView.d.ts +13 -0
- package/dist/devcc/views/SystemView.d.ts.map +1 -0
- package/dist/devcc/views/SystemView.js +82 -0
- package/dist/devcc/views/SystemView.js.map +1 -0
- package/dist/devcc/views/View.d.ts +35 -0
- package/dist/devcc/views/View.d.ts.map +1 -0
- package/dist/devcc/views/View.js +42 -0
- package/dist/devcc/views/View.js.map +1 -0
- package/package.json +79 -0
- package/src/devcc/app/App.ts +1463 -0
- package/src/devcc/app/builtinCommands.ts +429 -0
- package/src/devcc/app/keymap.ts +167 -0
- package/src/devcc/app/theme.ts +83 -0
- package/src/devcc/cli.ts +122 -0
- package/src/devcc/components/CommandPalette.ts +136 -0
- package/src/devcc/components/ConfirmDialog.ts +174 -0
- package/src/devcc/components/Footer.ts +85 -0
- package/src/devcc/components/Header.ts +93 -0
- package/src/devcc/components/HelpOverlay.ts +62 -0
- package/src/devcc/components/Overlay.ts +91 -0
- package/src/devcc/components/ProjectPicker.ts +138 -0
- package/src/devcc/components/Sidebar.ts +163 -0
- package/src/devcc/components/StatusBadge.ts +36 -0
- package/src/devcc/components/primitives.ts +213 -0
- package/src/devcc/components/styled.ts +44 -0
- package/src/devcc/core/commands.ts +140 -0
- package/src/devcc/core/config.ts +405 -0
- package/src/devcc/core/events.ts +41 -0
- package/src/devcc/core/state.ts +236 -0
- package/src/devcc/deps/DependencyService.ts +152 -0
- package/src/devcc/deps/parse.ts +210 -0
- package/src/devcc/git/GitService.ts +205 -0
- package/src/devcc/git/parse.ts +203 -0
- package/src/devcc/index.ts +115 -0
- package/src/devcc/logs/LogBuffer.ts +237 -0
- package/src/devcc/logs/merge.ts +87 -0
- package/src/devcc/processes/ManagedProcess.ts +195 -0
- package/src/devcc/processes/ProcessManager.ts +625 -0
- package/src/devcc/processes/graph.ts +98 -0
- package/src/devcc/projects/ProjectRegistry.ts +219 -0
- package/src/devcc/services/ServiceManager.ts +180 -0
- package/src/devcc/services/docker.ts +220 -0
- package/src/devcc/services/node.ts +137 -0
- package/src/devcc/services/ollama.ts +80 -0
- package/src/devcc/services/postgres.ts +57 -0
- package/src/devcc/services/redis.ts +47 -0
- package/src/devcc/services/types.ts +59 -0
- package/src/devcc/system/SystemMonitor.ts +207 -0
- package/src/devcc/utils/errors.ts +64 -0
- package/src/devcc/utils/exec.ts +165 -0
- package/src/devcc/utils/format.ts +83 -0
- package/src/devcc/utils/fuzzy.ts +44 -0
- package/src/devcc/utils/logger.ts +140 -0
- package/src/devcc/utils/packageManager.ts +112 -0
- package/src/devcc/utils/paths.ts +39 -0
- package/src/devcc/views/DependenciesView.ts +206 -0
- package/src/devcc/views/GitView.ts +259 -0
- package/src/devcc/views/LogsView.ts +300 -0
- package/src/devcc/views/OverviewView.ts +187 -0
- package/src/devcc/views/ProcessesView.ts +177 -0
- package/src/devcc/views/ScriptsView.ts +187 -0
- package/src/devcc/views/ServicesView.ts +188 -0
- package/src/devcc/views/SettingsView.ts +146 -0
- package/src/devcc/views/SystemView.ts +110 -0
- package/src/devcc/views/View.ts +63 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types and pure helpers describing a process Dev Command Center knows about.
|
|
3
|
+
*
|
|
4
|
+
* `ownership` is the safety boundary: `"managed"` processes were launched by us
|
|
5
|
+
* and may be signalled; `"detected"` processes were merely observed on the host
|
|
6
|
+
* and must never be killed by devcc.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_READINESS = {
|
|
9
|
+
timeoutMs: 30_000,
|
|
10
|
+
intervalMs: 250,
|
|
11
|
+
};
|
|
12
|
+
export const DEFAULT_CRASH_POLICY = {
|
|
13
|
+
maxCrashRestarts: 5,
|
|
14
|
+
crashBackoffMs: 1_000,
|
|
15
|
+
maxCrashBackoffMs: 30_000,
|
|
16
|
+
healthyAfterMs: 30_000,
|
|
17
|
+
};
|
|
18
|
+
export const ACTIVE_STATUSES = ["starting", "running", "stopping"];
|
|
19
|
+
export function isActive(status) {
|
|
20
|
+
return ACTIVE_STATUSES.includes(status);
|
|
21
|
+
}
|
|
22
|
+
const TRANSITIONS = {
|
|
23
|
+
stopped: ["starting"],
|
|
24
|
+
starting: ["running", "failed", "stopping", "stopped"],
|
|
25
|
+
running: ["stopping", "stopped", "failed"],
|
|
26
|
+
stopping: ["stopped", "failed"],
|
|
27
|
+
failed: ["starting"],
|
|
28
|
+
};
|
|
29
|
+
/** Whether a status change is legal. Keeps the manager's bookkeeping honest. */
|
|
30
|
+
export function canTransition(from, to) {
|
|
31
|
+
if (from === to)
|
|
32
|
+
return false;
|
|
33
|
+
return TRANSITIONS[from].includes(to);
|
|
34
|
+
}
|
|
35
|
+
/** Build the initial snapshot for a definition. */
|
|
36
|
+
export function createManagedProcess(definition, ownership = "managed") {
|
|
37
|
+
return {
|
|
38
|
+
id: definition.id,
|
|
39
|
+
name: definition.name,
|
|
40
|
+
command: definition.command,
|
|
41
|
+
args: definition.args ? [...definition.args] : undefined,
|
|
42
|
+
cwd: definition.cwd,
|
|
43
|
+
status: "stopped",
|
|
44
|
+
kind: definition.kind ?? "service",
|
|
45
|
+
ownership,
|
|
46
|
+
url: definition.url,
|
|
47
|
+
port: definition.port,
|
|
48
|
+
restarts: 0,
|
|
49
|
+
crashRestarts: 0,
|
|
50
|
+
dependsOn: definition.dependsOn ? [...definition.dependsOn] : [],
|
|
51
|
+
ready: false,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Exponential backoff for automatic restarts.
|
|
56
|
+
*
|
|
57
|
+
* `attempt` is 1-based: the first restart waits `base`, the second `2 * base`,
|
|
58
|
+
* and so on, capped at `max`. Keeping this a pure function makes the policy
|
|
59
|
+
* testable without spawning anything.
|
|
60
|
+
*/
|
|
61
|
+
export function crashBackoffDelay(attempt, base = DEFAULT_CRASH_POLICY.crashBackoffMs, max = DEFAULT_CRASH_POLICY.maxCrashBackoffMs) {
|
|
62
|
+
if (attempt <= 0)
|
|
63
|
+
return 0;
|
|
64
|
+
const safeBase = Math.max(0, base);
|
|
65
|
+
const exponent = Math.min(attempt - 1, 30);
|
|
66
|
+
return Math.min(Math.max(0, max), safeBase * 2 ** exponent);
|
|
67
|
+
}
|
|
68
|
+
/** Whether a crashed process should be brought back up automatically. */
|
|
69
|
+
export function shouldAutoRestart(definition, snapshot) {
|
|
70
|
+
if (!definition.restartOnCrash)
|
|
71
|
+
return false;
|
|
72
|
+
const limit = definition.maxCrashRestarts ?? DEFAULT_CRASH_POLICY.maxCrashRestarts;
|
|
73
|
+
return snapshot.crashRestarts < limit;
|
|
74
|
+
}
|
|
75
|
+
/** Human-readable one-liner of what will actually be executed. */
|
|
76
|
+
export function describeCommand(process) {
|
|
77
|
+
const args = process.args ?? [];
|
|
78
|
+
return args.length > 0 ? `${process.command} ${args.join(" ")}` : process.command;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ManagedProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManagedProcess.js","sourceRoot":"","sources":["../../../src/devcc/processes/ManagedProcess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { TypedEmitter } from "../core/events.js";
|
|
2
|
+
import type { LogStore } from "../logs/LogBuffer.js";
|
|
3
|
+
import { DevccError } from "../utils/errors.js";
|
|
4
|
+
import type { ScopedLogger } from "../utils/logger.js";
|
|
5
|
+
import { type StartPlan } from "./graph.js";
|
|
6
|
+
import { type ManagedProcess, type ProcessDefinition } from "./ManagedProcess.js";
|
|
7
|
+
export declare const DEFAULT_KILL_GRACE_MS = 5000;
|
|
8
|
+
export type ProcessManagerEvents = {
|
|
9
|
+
/** Any change to a process snapshot (status, pid, exit code, ...). */
|
|
10
|
+
"process:changed": [ManagedProcess];
|
|
11
|
+
/** The set of known processes changed (added or removed). */
|
|
12
|
+
"process:list": [ManagedProcess[]];
|
|
13
|
+
"process:started": [ManagedProcess];
|
|
14
|
+
"process:exit": [ManagedProcess];
|
|
15
|
+
/** An automatic restart was scheduled after a crash. */
|
|
16
|
+
"process:retry": [ManagedProcess, number];
|
|
17
|
+
/** The readiness check passed (or timed out and was reported anyway). */
|
|
18
|
+
"process:ready": [ManagedProcess];
|
|
19
|
+
"process:error": [DevccError];
|
|
20
|
+
};
|
|
21
|
+
export interface ProcessManagerOptions {
|
|
22
|
+
logs: LogStore;
|
|
23
|
+
logger: ScopedLogger;
|
|
24
|
+
/** Default cwd for definitions that don't specify one. */
|
|
25
|
+
rootDir: string;
|
|
26
|
+
env?: NodeJS.ProcessEnv;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Owns every child process devcc launches.
|
|
30
|
+
*
|
|
31
|
+
* Design notes:
|
|
32
|
+
* - Commands are always `spawn(executable, args[])`; nothing is ever passed to a
|
|
33
|
+
* shell, so arguments containing spaces or quotes are safe by construction.
|
|
34
|
+
* - Children are spawned `detached`, which makes each one a process-group leader.
|
|
35
|
+
* Stopping signals the whole group (`kill(-pgid)`) so dev servers that fork
|
|
36
|
+
* workers do not leave orphans behind.
|
|
37
|
+
* - Stopping escalates SIGTERM -> SIGKILL after a grace period.
|
|
38
|
+
*/
|
|
39
|
+
export declare class ProcessManager extends TypedEmitter<ProcessManagerEvents> {
|
|
40
|
+
private readonly definitions;
|
|
41
|
+
private readonly snapshots;
|
|
42
|
+
private readonly runtimes;
|
|
43
|
+
/** Pending automatic-restart timers, keyed by process id. */
|
|
44
|
+
private readonly retryTimers;
|
|
45
|
+
/** In-flight readiness checks, so a stop can cancel the probe loop. */
|
|
46
|
+
private readonly readiness;
|
|
47
|
+
private readonly logs;
|
|
48
|
+
private readonly logger;
|
|
49
|
+
private readonly rootDir;
|
|
50
|
+
private readonly baseEnv;
|
|
51
|
+
private disposed;
|
|
52
|
+
constructor(options: ProcessManagerOptions);
|
|
53
|
+
/** Register (or replace, while stopped) a process definition. */
|
|
54
|
+
register(definition: ProcessDefinition): ManagedProcess;
|
|
55
|
+
registerAll(definitions: readonly ProcessDefinition[]): void;
|
|
56
|
+
/** Remove a stopped process. Refuses while it is still running. */
|
|
57
|
+
unregister(id: string): void;
|
|
58
|
+
list(): ManagedProcess[];
|
|
59
|
+
get(id: string): ManagedProcess | undefined;
|
|
60
|
+
getDefinition(id: string): ProcessDefinition | undefined;
|
|
61
|
+
isRunning(id: string): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Start a process.
|
|
64
|
+
*
|
|
65
|
+
* A start the user asked for clears the crash budget; the automatic restart
|
|
66
|
+
* path passes `auto` so a crash loop cannot refill its own budget.
|
|
67
|
+
*/
|
|
68
|
+
start(id: string, options?: {
|
|
69
|
+
auto?: boolean;
|
|
70
|
+
}): Promise<ManagedProcess>;
|
|
71
|
+
/**
|
|
72
|
+
* Resolve once the process is ready (readiness passed or timed out), or
|
|
73
|
+
* immediately if it is not starting. Used to sequence dependent starts.
|
|
74
|
+
*/
|
|
75
|
+
waitForReady(id: string): Promise<ManagedProcess | undefined>;
|
|
76
|
+
/**
|
|
77
|
+
* Start several processes honouring `dependsOn`: each wave waits for the
|
|
78
|
+
* previous one to become ready. Failures in one wave are reported and the
|
|
79
|
+
* next wave still starts, since an unrelated process should not be blocked.
|
|
80
|
+
*/
|
|
81
|
+
startAll(ids?: readonly string[]): Promise<StartPlan>;
|
|
82
|
+
private beginReadinessCheck;
|
|
83
|
+
private cancelReadiness;
|
|
84
|
+
private isActiveRuntime;
|
|
85
|
+
private markReady;
|
|
86
|
+
/**
|
|
87
|
+
* Stop a managed process and everything it spawned.
|
|
88
|
+
* Resolves once the child has actually exited (or the grace period elapsed).
|
|
89
|
+
*/
|
|
90
|
+
stop(id: string, graceMs?: number): Promise<void>;
|
|
91
|
+
restart(id: string): Promise<ManagedProcess>;
|
|
92
|
+
/** Start every definition marked `autoStart`. Failures are reported, not thrown. */
|
|
93
|
+
startAutoStart(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Stop everything devcc launched. Called on shutdown; never touches processes
|
|
96
|
+
* that were only detected.
|
|
97
|
+
*/
|
|
98
|
+
stopAll(graceMs?: number): Promise<void>;
|
|
99
|
+
private handleExit;
|
|
100
|
+
/**
|
|
101
|
+
* Schedule an automatic restart for a crashed process, if its definition opted
|
|
102
|
+
* in and it still has budget left. Backoff doubles per consecutive crash, so a
|
|
103
|
+
* process that is broken rather than flaky stops thrashing quickly.
|
|
104
|
+
*/
|
|
105
|
+
private considerAutoRestart;
|
|
106
|
+
private cancelRetry;
|
|
107
|
+
private finishRuntime;
|
|
108
|
+
/** Signal the child's process group when we have one, else the child alone. */
|
|
109
|
+
private signal;
|
|
110
|
+
private update;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=ProcessManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessManager.d.ts","sourceRoot":"","sources":["../../../src/devcc/processes/ProcessManager.ts"],"names":[],"mappings":"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"}
|