@1mcp/agent 0.35.0-beta.1 → 0.35.0-beta.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/README.md +1 -0
- package/build/admin/assets/{admin-console-CX5GzncA.css → admin-console-C5_zD_qW.css} +1 -1
- package/build/admin/assets/{admin-console-CkZ5lBKg.js → admin-console-CbHHoqLr.js} +6 -6
- package/build/admin/index.html +2 -2
- package/build/application/services/healthService.d.ts +32 -0
- package/build/application/services/healthService.d.ts.map +1 -1
- package/build/application/services/healthService.js +49 -0
- package/build/application/services/healthService.js.map +1 -1
- package/build/commands/mcp/index.d.ts.map +1 -1
- package/build/commands/mcp/index.js +10 -0
- package/build/commands/mcp/index.js.map +1 -1
- package/build/commands/mcp/restart.d.ts +69 -0
- package/build/commands/mcp/restart.d.ts.map +1 -0
- package/build/commands/mcp/restart.js +259 -0
- package/build/commands/mcp/restart.js.map +1 -0
- package/build/commands/mcp/status.d.ts +24 -1
- package/build/commands/mcp/status.d.ts.map +1 -1
- package/build/commands/mcp/status.js +158 -14
- package/build/commands/mcp/status.js.map +1 -1
- package/build/commands/serve/index.d.ts +8 -0
- package/build/commands/serve/index.d.ts.map +1 -1
- package/build/commands/serve/index.js +12 -0
- package/build/commands/serve/index.js.map +1 -1
- package/build/commands/serve/serve.d.ts +13 -0
- package/build/commands/serve/serve.d.ts.map +1 -1
- package/build/commands/serve/serve.js +111 -57
- package/build/commands/serve/serve.js.map +1 -1
- package/build/commands/serve/serveBackground.d.ts +48 -26
- package/build/commands/serve/serveBackground.d.ts.map +1 -1
- package/build/commands/serve/serveBackground.js +230 -61
- package/build/commands/serve/serveBackground.js.map +1 -1
- package/build/commands/serve/serveRestart.d.ts +1 -1
- package/build/commands/serve/serveRestart.js +1 -1
- package/build/commands/serve/serveStatus.d.ts +20 -10
- package/build/commands/serve/serveStatus.d.ts.map +1 -1
- package/build/commands/serve/serveStatus.js +174 -13
- package/build/commands/serve/serveStatus.js.map +1 -1
- package/build/commands/serve/serveStop.d.ts +13 -4
- package/build/commands/serve/serveStop.d.ts.map +1 -1
- package/build/commands/serve/serveStop.js +212 -23
- package/build/commands/serve/serveStop.js.map +1 -1
- package/build/config/configManager.d.ts +2 -0
- package/build/config/configManager.d.ts.map +1 -1
- package/build/config/configManager.js +19 -8
- package/build/config/configManager.js.map +1 -1
- package/build/config/mcpConfigMerge.d.ts.map +1 -1
- package/build/config/mcpConfigMerge.js +13 -2
- package/build/config/mcpConfigMerge.js.map +1 -1
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/core/client/clientManager.d.ts +24 -1
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +268 -2
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/client/connectionHandler.d.ts.map +1 -1
- package/build/core/client/connectionHandler.js +18 -1
- package/build/core/client/connectionHandler.js.map +1 -1
- package/build/core/configChangeHandler.d.ts +1 -0
- package/build/core/configChangeHandler.d.ts.map +1 -1
- package/build/core/configChangeHandler.js +14 -0
- package/build/core/configChangeHandler.js.map +1 -1
- package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
- package/build/core/loading/mcpLoadingManager.js +16 -4
- package/build/core/loading/mcpLoadingManager.js.map +1 -1
- package/build/core/server/backendStdioSupervisor.d.ts +73 -0
- package/build/core/server/backendStdioSupervisor.d.ts.map +1 -0
- package/build/core/server/backendStdioSupervisor.js +191 -0
- package/build/core/server/backendStdioSupervisor.js.map +1 -0
- package/build/core/server/backgroundLaunchConfig.d.ts +15 -0
- package/build/core/server/backgroundLaunchConfig.d.ts.map +1 -0
- package/build/core/server/backgroundLaunchConfig.js +46 -0
- package/build/core/server/backgroundLaunchConfig.js.map +1 -0
- package/build/core/server/backgroundRuntimeSupervisor.d.ts +44 -0
- package/build/core/server/backgroundRuntimeSupervisor.d.ts.map +1 -0
- package/build/core/server/backgroundRuntimeSupervisor.js +252 -0
- package/build/core/server/backgroundRuntimeSupervisor.js.map +1 -0
- package/build/core/server/backgroundRuntimeSupervisorState.d.ts +30 -0
- package/build/core/server/backgroundRuntimeSupervisorState.d.ts.map +1 -0
- package/build/core/server/backgroundRuntimeSupervisorState.js +81 -0
- package/build/core/server/backgroundRuntimeSupervisorState.js.map +1 -0
- package/build/core/server/clientInstanceFactory.d.ts.map +1 -1
- package/build/core/server/clientInstanceFactory.js +1 -0
- package/build/core/server/clientInstanceFactory.js.map +1 -1
- package/build/core/server/clientInstancePool.d.ts +17 -5
- package/build/core/server/clientInstancePool.d.ts.map +1 -1
- package/build/core/server/clientInstancePool.js +198 -33
- package/build/core/server/clientInstancePool.js.map +1 -1
- package/build/core/server/clientInstancePoolTypes.d.ts +7 -1
- package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
- package/build/core/server/clientInstancePoolTypes.js.map +1 -1
- package/build/core/server/runtimeScopeOwnership.d.ts +61 -0
- package/build/core/server/runtimeScopeOwnership.d.ts.map +1 -0
- package/build/core/server/runtimeScopeOwnership.js +544 -0
- package/build/core/server/runtimeScopeOwnership.js.map +1 -0
- package/build/core/server/serverManager.d.ts +2 -0
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +30 -0
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/server/templateIdentity.d.ts +10 -0
- package/build/core/server/templateIdentity.d.ts.map +1 -1
- package/build/core/server/templateIdentity.js +33 -0
- package/build/core/server/templateIdentity.js.map +1 -1
- package/build/core/server/templateServerCleanup.d.ts.map +1 -1
- package/build/core/server/templateServerCleanup.js +7 -1
- package/build/core/server/templateServerCleanup.js.map +1 -1
- package/build/core/server/templateServerManager.d.ts +13 -0
- package/build/core/server/templateServerManager.d.ts.map +1 -1
- package/build/core/server/templateServerManager.js +129 -4
- package/build/core/server/templateServerManager.js.map +1 -1
- package/build/core/tools/handlers/serverManagementHandler.d.ts +111 -5
- package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -1
- package/build/core/tools/handlers/serverManagementHandler.js +103 -45
- package/build/core/tools/handlers/serverManagementHandler.js.map +1 -1
- package/build/core/tools/internal/adapters/management/managementAdapter.d.ts +2 -2
- package/build/core/tools/internal/adapters/management/managementAdapter.d.ts.map +1 -1
- package/build/core/tools/internal/adapters/management/managementAdapter.js +45 -26
- package/build/core/tools/internal/adapters/management/managementAdapter.js.map +1 -1
- package/build/core/tools/internal/adapters/management/types.d.ts +21 -2
- package/build/core/tools/internal/adapters/management/types.d.ts.map +1 -1
- package/build/core/tools/internal/managementHandlers.d.ts.map +1 -1
- package/build/core/tools/internal/managementHandlers.js +73 -22
- package/build/core/tools/internal/managementHandlers.js.map +1 -1
- package/build/core/tools/internal/schemas/discovery.d.ts +2 -2
- package/build/core/tools/internal/schemas/edit.js +1 -1
- package/build/core/tools/internal/schemas/edit.js.map +1 -1
- package/build/core/tools/internal/schemas/index.d.ts +77 -6
- package/build/core/tools/internal/schemas/index.d.ts.map +1 -1
- package/build/core/tools/internal/schemas/management.d.ts +75 -4
- package/build/core/tools/internal/schemas/management.d.ts.map +1 -1
- package/build/core/tools/internal/schemas/management.js +69 -2
- package/build/core/tools/internal/schemas/management.js.map +1 -1
- package/build/core/types/client.d.ts +9 -2
- package/build/core/types/client.d.ts.map +1 -1
- package/build/core/types/client.js +4 -0
- package/build/core/types/client.js.map +1 -1
- package/build/core/types/transport.d.ts +25 -1
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +21 -3
- package/build/core/types/transport.js.map +1 -1
- package/build/domains/admin/adminBackendRestartService.d.ts +41 -0
- package/build/domains/admin/adminBackendRestartService.d.ts.map +1 -0
- package/build/domains/admin/adminBackendRestartService.js +22 -0
- package/build/domains/admin/adminBackendRestartService.js.map +1 -0
- package/build/domains/admin/adminDomain.d.ts +7 -0
- package/build/domains/admin/adminDomain.d.ts.map +1 -1
- package/build/domains/admin/adminDomain.js +13 -0
- package/build/domains/admin/adminDomain.js.map +1 -1
- package/build/domains/admin/adminOAuthService.d.ts +26 -0
- package/build/domains/admin/adminOAuthService.d.ts.map +1 -0
- package/build/domains/admin/adminOAuthService.js +71 -0
- package/build/domains/admin/adminOAuthService.js.map +1 -0
- package/build/domains/admin/adminOperationService.d.ts +1 -0
- package/build/domains/admin/adminOperationService.d.ts.map +1 -1
- package/build/domains/admin/adminOperationService.js +39 -14
- package/build/domains/admin/adminOperationService.js.map +1 -1
- package/build/domains/admin/runtimeServerManagerBackendRestartService.d.ts +20 -0
- package/build/domains/admin/runtimeServerManagerBackendRestartService.d.ts.map +1 -0
- package/build/domains/admin/runtimeServerManagerBackendRestartService.js +78 -0
- package/build/domains/admin/runtimeServerManagerBackendRestartService.js.map +1 -0
- package/build/server.d.ts.map +1 -1
- package/build/server.js +18 -2
- package/build/server.js.map +1 -1
- package/build/transport/http/routes/adminRoutes.d.ts +4 -0
- package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/adminRoutes.js +280 -22
- package/build/transport/http/routes/adminRoutes.js.map +1 -1
- package/build/transport/http/routes/healthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/healthRoutes.js +70 -2
- package/build/transport/http/routes/healthRoutes.js.map +1 -1
- package/build/transport/http/routes/oauthRoutes.d.ts +3 -2
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/oauthRoutes.js +10 -8
- package/build/transport/http/routes/oauthRoutes.js.map +1 -1
- package/build/transport/http/server.d.ts.map +1 -1
- package/build/transport/http/server.js +13 -4
- package/build/transport/http/server.js.map +1 -1
- package/build/transport/transportFactory.d.ts.map +1 -1
- package/build/transport/transportFactory.js +27 -15
- package/build/transport/transportFactory.js.map +1 -1
- package/build/transport/transportFactory.testSetup.js +2 -0
- package/build/transport/transportFactory.testSetup.js.map +1 -1
- package/build/utils/core/errorTypes.d.ts +3 -0
- package/build/utils/core/errorTypes.d.ts.map +1 -1
- package/build/utils/core/errorTypes.js +7 -0
- package/build/utils/core/errorTypes.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,26 +1,141 @@
|
|
|
1
1
|
import { getConfigDir } from '../../constants.js';
|
|
2
|
+
import { cleanupBackgroundSupervisorState, readBackgroundSupervisorState, } from '../../core/server/backgroundRuntimeSupervisor.js';
|
|
3
|
+
import { isProcessAlive } from '../../core/server/pidFileManager.js';
|
|
2
4
|
import { discoverScopedRuntime } from '../../core/server/runtimeLifecycle.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* - running (alive and ready) → 0
|
|
6
|
-
* - not-running (empty scope or stale dead PID) → 3
|
|
7
|
-
* - unreachable (alive but `/health/ready` failing) → 4
|
|
8
|
-
*/
|
|
5
|
+
import { readRuntimeScopeOwnership, reclaimStaleRuntimeScopeOwnership, } from '../../core/server/runtimeScopeOwnership.js';
|
|
6
|
+
/** Process exit codes per runtime state, allowing scripts to branch on status. */
|
|
9
7
|
export const STATUS_EXIT_CODES = {
|
|
10
8
|
running: 0,
|
|
11
9
|
'not-running': 3,
|
|
12
10
|
unreachable: 4,
|
|
13
11
|
error: 2,
|
|
12
|
+
restarting: 5,
|
|
13
|
+
'crash-loop': 6,
|
|
14
|
+
orphaned: 7,
|
|
14
15
|
};
|
|
15
16
|
/**
|
|
16
17
|
* Discover the scoped runtime and assemble a status report. The default
|
|
17
18
|
* readiness probe (`/health/ready`) distinguishes alive-but-not-ready from
|
|
18
19
|
* alive-and-ready.
|
|
19
20
|
*/
|
|
20
|
-
export async function getRuntimeStatusReport(configDirOption) {
|
|
21
|
+
export async function getRuntimeStatusReport(configDirOption, deps = {}) {
|
|
21
22
|
const configDir = getConfigDir(configDirOption);
|
|
22
|
-
const
|
|
23
|
-
|
|
23
|
+
const readSupervisorState = deps.readSupervisorState ?? readBackgroundSupervisorState;
|
|
24
|
+
const cleanupSupervisorState = deps.cleanupSupervisorState ?? cleanupBackgroundSupervisorState;
|
|
25
|
+
const isAlive = deps.isAlive ?? isProcessAlive;
|
|
26
|
+
const discoverRuntime = deps.discoverRuntime ?? discoverScopedRuntime;
|
|
27
|
+
const readOwnership = deps.readOwnership ?? readRuntimeScopeOwnership;
|
|
28
|
+
const reclaimOwnership = deps.reclaimOwnership ?? reclaimStaleRuntimeScopeOwnership;
|
|
29
|
+
let supervisorState;
|
|
30
|
+
try {
|
|
31
|
+
supervisorState = readSupervisorState(configDir);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return statusError(configDir, error);
|
|
35
|
+
}
|
|
36
|
+
if (supervisorState) {
|
|
37
|
+
const supervisorAlive = isAlive(supervisorState.supervisorPid);
|
|
38
|
+
const runtimeAlive = supervisorState.runtimePid !== null && isAlive(supervisorState.runtimePid);
|
|
39
|
+
if (!supervisorAlive && runtimeAlive) {
|
|
40
|
+
return { status: 'orphaned', configDir, info: null, supervisorState };
|
|
41
|
+
}
|
|
42
|
+
if (supervisorAlive && supervisorState.status === 'restarting') {
|
|
43
|
+
return { status: 'restarting', configDir, info: null, supervisorState };
|
|
44
|
+
}
|
|
45
|
+
if (supervisorAlive && supervisorState.status === 'crash-loop') {
|
|
46
|
+
return { status: 'crash-loop', configDir, info: null, supervisorState };
|
|
47
|
+
}
|
|
48
|
+
if (!supervisorAlive && !runtimeAlive) {
|
|
49
|
+
const discovered = await discoverRuntimeWithOwnership(configDir, {
|
|
50
|
+
discoverRuntime,
|
|
51
|
+
readOwnership,
|
|
52
|
+
reclaimOwnership,
|
|
53
|
+
isAlive,
|
|
54
|
+
});
|
|
55
|
+
if ((discovered.status === 'running' || discovered.status === 'unreachable') && discovered.info) {
|
|
56
|
+
let owner;
|
|
57
|
+
try {
|
|
58
|
+
owner = readOwnership(configDir);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return statusError(configDir, error);
|
|
62
|
+
}
|
|
63
|
+
if (owner?.kind === 'background-supervisor' && owner.pid === supervisorState.supervisorPid) {
|
|
64
|
+
return {
|
|
65
|
+
...discovered,
|
|
66
|
+
status: 'orphaned',
|
|
67
|
+
supervisorState: { ...supervisorState, runtimePid: discovered.info.pid },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (discovered.status === 'error' || discovered.ownership) {
|
|
72
|
+
return discovered;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
if (!cleanupSupervisorState(configDir, supervisorState.supervisorPid)) {
|
|
76
|
+
return {
|
|
77
|
+
status: 'error',
|
|
78
|
+
configDir,
|
|
79
|
+
info: null,
|
|
80
|
+
error: 'Background supervisor state changed while removing stale metadata',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return statusError(configDir, error);
|
|
86
|
+
}
|
|
87
|
+
return discovered;
|
|
88
|
+
}
|
|
89
|
+
const discovered = await discoverRuntime(configDir);
|
|
90
|
+
if (discovered.status === 'not-running') {
|
|
91
|
+
return { status: 'unreachable', configDir, info: null, supervisorState };
|
|
92
|
+
}
|
|
93
|
+
return { ...discovered, configDir, supervisorState };
|
|
94
|
+
}
|
|
95
|
+
return discoverRuntimeWithOwnership(configDir, { discoverRuntime, readOwnership, reclaimOwnership, isAlive });
|
|
96
|
+
}
|
|
97
|
+
async function discoverRuntimeWithOwnership(configDir, deps) {
|
|
98
|
+
const discovered = await deps.discoverRuntime(configDir);
|
|
99
|
+
if (discovered.status !== 'not-running') {
|
|
100
|
+
return { ...discovered, configDir };
|
|
101
|
+
}
|
|
102
|
+
let ownership;
|
|
103
|
+
try {
|
|
104
|
+
ownership = deps.readOwnership(configDir);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return statusError(configDir, error);
|
|
108
|
+
}
|
|
109
|
+
if (!ownership) {
|
|
110
|
+
return { ...discovered, configDir };
|
|
111
|
+
}
|
|
112
|
+
if (deps.isAlive(ownership.pid)) {
|
|
113
|
+
return { status: 'unreachable', configDir, info: null, ownership };
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
if (deps.reclaimOwnership(configDir, ownership, deps.isAlive)) {
|
|
117
|
+
return { ...discovered, configDir };
|
|
118
|
+
}
|
|
119
|
+
const replacement = deps.readOwnership(configDir);
|
|
120
|
+
if (!replacement) {
|
|
121
|
+
return { ...discovered, configDir };
|
|
122
|
+
}
|
|
123
|
+
if (deps.isAlive(replacement.pid)) {
|
|
124
|
+
return { status: 'unreachable', configDir, info: null, ownership: replacement };
|
|
125
|
+
}
|
|
126
|
+
return statusError(configDir, new Error('Runtime Scope ownership changed while removing stale metadata'));
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
return statusError(configDir, error);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function statusError(configDir, error) {
|
|
133
|
+
return {
|
|
134
|
+
status: 'error',
|
|
135
|
+
configDir,
|
|
136
|
+
info: null,
|
|
137
|
+
error: error instanceof Error ? error.message : String(error),
|
|
138
|
+
};
|
|
24
139
|
}
|
|
25
140
|
/**
|
|
26
141
|
* Render a status report as human-readable lines.
|
|
@@ -28,24 +143,70 @@ export async function getRuntimeStatusReport(configDirOption) {
|
|
|
28
143
|
export function formatRuntimeStatusReport(report) {
|
|
29
144
|
const { status, configDir, info } = report;
|
|
30
145
|
const lines = [`Runtime Scope: ${configDir}`];
|
|
31
|
-
if (
|
|
146
|
+
if (report.ownership) {
|
|
147
|
+
lines.push('Status: occupied (unreachable)');
|
|
148
|
+
lines.push(`Owner: ${formatOwnershipKind(report.ownership.kind)}`);
|
|
149
|
+
lines.push(`Owner PID: ${report.ownership.pid} (alive)`);
|
|
150
|
+
lines.push('Runtime metadata: unavailable');
|
|
151
|
+
return `${lines.join('\n')}\n`;
|
|
152
|
+
}
|
|
153
|
+
if (report.supervisorState) {
|
|
154
|
+
const state = report.supervisorState;
|
|
155
|
+
const supervisorSuffix = status === 'orphaned' ? ' (not alive)' : '';
|
|
156
|
+
const runtimeSuffix = status === 'orphaned' && state.runtimePid !== null ? ' (alive)' : '';
|
|
157
|
+
lines.push(`Status: ${status}`);
|
|
158
|
+
lines.push(`Supervisor PID: ${state.supervisorPid}${supervisorSuffix}`);
|
|
159
|
+
lines.push(`Runtime PID: ${state.runtimePid ?? 'none'}${runtimeSuffix}`);
|
|
160
|
+
lines.push(`Restart attempt: ${state.restartAttempt}`);
|
|
161
|
+
lines.push(`Last exit: ${formatLastExit(state.lastExit)}`);
|
|
162
|
+
lines.push(`Next retry: ${state.nextRetryAt ?? 'none'}`);
|
|
32
163
|
if (status === 'error') {
|
|
33
|
-
lines.push('Status: error');
|
|
34
164
|
lines.push(`Error: ${report.error ?? 'PID file could not be read'}`);
|
|
35
|
-
return `${lines.join('\n')}\n`;
|
|
36
165
|
}
|
|
166
|
+
if (info) {
|
|
167
|
+
appendRuntimeDetails(lines, info, status === 'running');
|
|
168
|
+
}
|
|
169
|
+
return `${lines.join('\n')}\n`;
|
|
170
|
+
}
|
|
171
|
+
if (status === 'error') {
|
|
172
|
+
lines.push('Status: error');
|
|
173
|
+
lines.push(`Error: ${report.error ?? 'PID file could not be read'}`);
|
|
174
|
+
return `${lines.join('\n')}\n`;
|
|
175
|
+
}
|
|
176
|
+
if (status === 'not-running' || !info) {
|
|
37
177
|
lines.push('Status: not running');
|
|
38
178
|
return `${lines.join('\n')}\n`;
|
|
39
179
|
}
|
|
40
180
|
const ready = status === 'running';
|
|
41
181
|
lines.push(`Status: ${ready ? 'running (ready)' : 'starting (not ready)'}`);
|
|
42
182
|
lines.push(`PID: ${info.pid}`);
|
|
183
|
+
appendRuntimeDetails(lines, info, ready);
|
|
184
|
+
return `${lines.join('\n')}\n`;
|
|
185
|
+
}
|
|
186
|
+
function appendRuntimeDetails(lines, info, ready) {
|
|
43
187
|
lines.push(`URL: ${info.url}`);
|
|
44
188
|
lines.push(`Started: ${info.startedAt}`);
|
|
45
189
|
lines.push(`Log file: ${info.logFile ?? '(console only)'}`);
|
|
46
190
|
lines.push('Process: alive');
|
|
47
191
|
lines.push(`Readiness (/health/ready): ${ready ? 'ready' : 'not ready'}`);
|
|
48
|
-
|
|
192
|
+
}
|
|
193
|
+
function formatOwnershipKind(kind) {
|
|
194
|
+
switch (kind) {
|
|
195
|
+
case 'foreground-http':
|
|
196
|
+
return 'foreground HTTP';
|
|
197
|
+
case 'foreground-stdio':
|
|
198
|
+
return 'foreground stdio';
|
|
199
|
+
case 'background-supervisor':
|
|
200
|
+
return 'background supervisor';
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function formatLastExit(lastExit) {
|
|
204
|
+
if (!lastExit) {
|
|
205
|
+
return 'none';
|
|
206
|
+
}
|
|
207
|
+
const reason = lastExit.code !== null ? `code ${lastExit.code}` : `signal ${lastExit.signal ?? 'unknown'}`;
|
|
208
|
+
const errorDetail = lastExit.error ? `; process error: ${lastExit.error}` : '';
|
|
209
|
+
return `${reason}${errorDetail} at ${lastExit.at}`;
|
|
49
210
|
}
|
|
50
211
|
/**
|
|
51
212
|
* Entry point for `serve --status`: discover, print, and set the exit code.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serveStatus.js","sourceRoot":"","sources":["../../../src/commands/serve/serveStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"serveStatus.js","sourceRoot":"","sources":["../../../src/commands/serve/serveStatus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { cleanupBackgroundSupervisorState, readBackgroundSupervisorState } from '../../core/server/backgroundRuntimeSupervisor.js';
|
|
1
2
|
import { readPidFile } from '../../core/server/pidFileManager.js';
|
|
3
|
+
import { acquireRuntimeScopeStopLock, readRuntimeScopeOwnership } from '../../core/server/runtimeScopeOwnership.js';
|
|
2
4
|
/**
|
|
3
5
|
* `serve --stop`: stop only the runtime in the selected Runtime Scope.
|
|
4
6
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* config directories are never affected.
|
|
7
|
+
* Supervised scopes stop the supervisor before its worker so no replacement can
|
|
8
|
+
* race with deliberate shutdown. Foreground scopes stop the PID recorded for
|
|
9
|
+
* this scope. Readiness is irrelevant to both paths.
|
|
9
10
|
*/
|
|
10
11
|
export interface WaitForExitOptions {
|
|
11
12
|
timeoutMs?: number;
|
|
@@ -19,6 +20,14 @@ export declare function waitForProcessExit(pid: number, options?: WaitForExitOpt
|
|
|
19
20
|
/** Signals this command sends to a runtime process. */
|
|
20
21
|
type StopSignal = 'SIGTERM' | 'SIGKILL';
|
|
21
22
|
export interface RunStopDeps {
|
|
23
|
+
readSupervisorState?: typeof readBackgroundSupervisorState;
|
|
24
|
+
readOwnership?: typeof readRuntimeScopeOwnership;
|
|
25
|
+
acquireStopLock?: typeof acquireRuntimeScopeStopLock;
|
|
26
|
+
cleanupSupervisorState?: typeof cleanupBackgroundSupervisorState;
|
|
27
|
+
/** Remove only the launch snapshot belonging to the observed supervisor. */
|
|
28
|
+
cleanupLaunchConfig?: (configDir: string, expectedSupervisorPid: number) => boolean;
|
|
29
|
+
/** Guarded release of the matching background-supervisor ownership record. */
|
|
30
|
+
cleanupOwnership?: (configDir: string, expectedSupervisorPid: number) => boolean;
|
|
22
31
|
readInfo?: typeof readPidFile;
|
|
23
32
|
isAlive?: (pid: number) => boolean;
|
|
24
33
|
kill?: (pid: number, signal: StopSignal) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serveStop.d.ts","sourceRoot":"","sources":["../../../src/commands/serve/serveStop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serveStop.d.ts","sourceRoot":"","sources":["../../../src/commands/serve/serveStop.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,gCAAgC,EAChC,6BAA6B,EAC9B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAIL,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EAI1B,MAAM,2CAA2C,CAAC;AAGnD;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wFAAwF;AACxF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAexG;AAED,uDAAuD;AACvD,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,mBAAmB,CAAC,EAAE,OAAO,6BAA6B,CAAC;IAC3D,aAAa,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACjD,eAAe,CAAC,EAAE,OAAO,2BAA2B,CAAC;IACrD,sBAAsB,CAAC,EAAE,OAAO,gCAAgC,CAAC;IACjE,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC;IACpF,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC;IACjF,QAAQ,CAAC,EAAE,OAAO,WAAW,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACjD,oEAAoE;IACpE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9D,WAAW,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACxC,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAoDD;;GAEG;AACH,wBAAsB,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2NlG"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { getConfigDir } from '../../constants.js';
|
|
2
|
+
import { backgroundLaunchConfigExists, cleanupBackgroundLaunchConfig, } from '../../core/server/backgroundLaunchConfig.js';
|
|
3
|
+
import { cleanupBackgroundSupervisorState, readBackgroundSupervisorState, } from '../../core/server/backgroundRuntimeSupervisor.js';
|
|
2
4
|
import { cleanupPidFileIfMatches, isProcessAlive, PidFileReadError, readPidFile, } from '../../core/server/pidFileManager.js';
|
|
5
|
+
import { acquireRuntimeScopeStopLock, readRuntimeScopeOwnership, releaseRuntimeScopeOwnership, } from '../../core/server/runtimeScopeOwnership.js';
|
|
3
6
|
import logger from '../../logger/logger.js';
|
|
4
7
|
/** Poll until the process is gone or the timeout elapses. Returns true if it exited. */
|
|
5
8
|
export async function waitForProcessExit(pid, options = {}) {
|
|
@@ -20,25 +23,201 @@ export async function waitForProcessExit(pid, options = {}) {
|
|
|
20
23
|
function defaultKill(pid, signal) {
|
|
21
24
|
process.kill(pid, signal);
|
|
22
25
|
}
|
|
26
|
+
function failStop(message) {
|
|
27
|
+
process.stderr.write(`Error: ${message}\n`);
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
}
|
|
30
|
+
function errorMessage(error) {
|
|
31
|
+
return error instanceof Error ? error.message : String(error);
|
|
32
|
+
}
|
|
33
|
+
function cleanupSupervisorOwnership(configDir, expectedSupervisorPid) {
|
|
34
|
+
const owner = readRuntimeScopeOwnership(configDir);
|
|
35
|
+
if (!owner) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
if (owner.kind !== 'background-supervisor' || owner.pid !== expectedSupervisorPid) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return releaseRuntimeScopeOwnership(configDir, owner);
|
|
42
|
+
}
|
|
43
|
+
function cleanupSupervisorLaunchConfig(configDir, expectedSupervisorPid) {
|
|
44
|
+
const owner = readRuntimeScopeOwnership(configDir);
|
|
45
|
+
if (!owner) {
|
|
46
|
+
return !backgroundLaunchConfigExists(configDir);
|
|
47
|
+
}
|
|
48
|
+
if (owner.kind !== 'background-supervisor' || owner.pid !== expectedSupervisorPid) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
return cleanupBackgroundLaunchConfig(configDir, owner.claimId, { removeStaleGeneration: true });
|
|
52
|
+
}
|
|
53
|
+
function bootstrapSupervisorState(supervisorPid) {
|
|
54
|
+
const now = new Date().toISOString();
|
|
55
|
+
return {
|
|
56
|
+
version: 1,
|
|
57
|
+
status: 'starting',
|
|
58
|
+
supervisorPid,
|
|
59
|
+
runtimePid: null,
|
|
60
|
+
restartAttempt: 0,
|
|
61
|
+
lastExit: null,
|
|
62
|
+
nextRetryAt: null,
|
|
63
|
+
readyAt: null,
|
|
64
|
+
updatedAt: now,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
23
67
|
/**
|
|
24
68
|
* Stop the scoped runtime. Sets `process.exitCode` and returns.
|
|
25
69
|
*/
|
|
26
70
|
export async function runServeStop(configDirOption, deps = {}) {
|
|
27
71
|
const configDir = getConfigDir(configDirOption);
|
|
72
|
+
const readSupervisorState = deps.readSupervisorState ?? readBackgroundSupervisorState;
|
|
73
|
+
const readOwnership = deps.readOwnership ?? readRuntimeScopeOwnership;
|
|
74
|
+
const acquireStopLock = deps.acquireStopLock ?? acquireRuntimeScopeStopLock;
|
|
75
|
+
const cleanupSupervisorState = deps.cleanupSupervisorState ?? cleanupBackgroundSupervisorState;
|
|
76
|
+
const cleanupLaunchConfig = deps.cleanupLaunchConfig ?? cleanupSupervisorLaunchConfig;
|
|
77
|
+
const cleanupOwnership = deps.cleanupOwnership ?? cleanupSupervisorOwnership;
|
|
28
78
|
const readInfo = deps.readInfo ?? readPidFile;
|
|
29
79
|
const isAlive = deps.isAlive ?? isProcessAlive;
|
|
30
80
|
const kill = deps.kill ?? defaultKill;
|
|
31
81
|
const cleanup = deps.cleanup ?? cleanupPidFileIfMatches;
|
|
32
82
|
const waitForExit = deps.waitForExit ?? waitForProcessExit;
|
|
33
83
|
const gracefulTimeoutMs = deps.gracefulTimeoutMs ?? 10000;
|
|
84
|
+
let supervisorState;
|
|
85
|
+
try {
|
|
86
|
+
supervisorState = readSupervisorState(configDir);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
failStop(`cannot inspect Background Runtime Supervisor in Runtime Scope ${configDir}: ${errorMessage(error)}`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
let owner;
|
|
93
|
+
try {
|
|
94
|
+
owner = readOwnership(configDir);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
failStop(`cannot verify lifecycle ownership in Runtime Scope ${configDir}: ${errorMessage(error)}`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (!supervisorState && owner?.kind === 'background-supervisor') {
|
|
101
|
+
supervisorState = bootstrapSupervisorState(owner.pid);
|
|
102
|
+
}
|
|
103
|
+
if (supervisorState) {
|
|
104
|
+
const stateMatchesOwner = owner?.kind === 'background-supervisor' && owner.pid === supervisorState.supervisorPid;
|
|
105
|
+
if (!stateMatchesOwner) {
|
|
106
|
+
const staleProcessStillAlive = isAlive(supervisorState.supervisorPid) ||
|
|
107
|
+
(supervisorState.runtimePid !== null && isAlive(supervisorState.runtimePid));
|
|
108
|
+
if (staleProcessStillAlive) {
|
|
109
|
+
failStop(`supervisor state does not match Runtime Scope ownership in ${configDir}; refusing ambiguous stop.`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
if (!cleanupSupervisorState(configDir, supervisorState.supervisorPid)) {
|
|
114
|
+
failStop(`stale supervisor state changed before cleanup in Runtime Scope ${configDir}.`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
failStop(`stale supervisor state could not be removed in Runtime Scope ${configDir}: ${errorMessage(error)}`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
supervisorState = owner?.kind === 'background-supervisor' ? bootstrapSupervisorState(owner.pid) : null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (supervisorState) {
|
|
126
|
+
if (owner?.kind !== 'background-supervisor' || owner.pid !== supervisorState.supervisorPid) {
|
|
127
|
+
failStop(`supervisor state does not match Runtime Scope ownership in ${configDir}; refusing ambiguous stop.`);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
let stopLock;
|
|
131
|
+
try {
|
|
132
|
+
stopLock = acquireStopLock(configDir, owner);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
failStop(`cannot lock lifecycle cleanup in Runtime Scope ${configDir}: ${errorMessage(error)}`);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
const supervisorWasAlive = isAlive(supervisorState.supervisorPid);
|
|
140
|
+
const runtimeWasAlive = supervisorState.runtimePid !== null && isAlive(supervisorState.runtimePid);
|
|
141
|
+
const terminateOptions = { kill, waitForExit, isAlive, gracefulTimeoutMs };
|
|
142
|
+
if (supervisorWasAlive &&
|
|
143
|
+
!(await terminateProcess(supervisorState.supervisorPid, 'supervisor', terminateOptions))) {
|
|
144
|
+
failStop(`failed to stop Background Runtime Supervisor (PID ${supervisorState.supervisorPid}) in Runtime Scope ${configDir}.`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
let runtimePid = supervisorState.runtimePid;
|
|
148
|
+
if (supervisorWasAlive) {
|
|
149
|
+
try {
|
|
150
|
+
const finalState = readSupervisorState(configDir);
|
|
151
|
+
if (finalState?.supervisorPid === supervisorState.supervisorPid) {
|
|
152
|
+
runtimePid = finalState.runtimePid ?? runtimePid;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
failStop(`supervisor stopped, but its final runtime state could not be read in Runtime Scope ${configDir}: ${errorMessage(error)}`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// The supervisor can exit immediately after signaling its worker. If its
|
|
161
|
+
// final state has already disappeared, the PID file is the recovery source.
|
|
162
|
+
if (runtimePid === null) {
|
|
163
|
+
try {
|
|
164
|
+
runtimePid = readInfo(configDir)?.pid ?? null;
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
failStop(`supervisor stopped, but its runtime PID could not be recovered in Runtime Scope ${configDir}: ${errorMessage(error)}`);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Only touch the worker after its supervisor has gone. This ordering is
|
|
172
|
+
// what prevents an in-flight retry policy from replacing a deliberately
|
|
173
|
+
// stopped worker.
|
|
174
|
+
if (runtimePid !== null &&
|
|
175
|
+
isAlive(runtimePid) &&
|
|
176
|
+
!(await terminateProcess(runtimePid, 'runtime', terminateOptions))) {
|
|
177
|
+
failStop(`failed to stop supervised runtime (PID ${runtimePid}) in Runtime Scope ${configDir}.`);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (runtimePid !== null) {
|
|
181
|
+
cleanup(configDir, runtimePid);
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
if (!cleanupLaunchConfig(configDir, supervisorState.supervisorPid)) {
|
|
185
|
+
failStop(`runtime stopped, but launch configuration changed before cleanup in Runtime Scope ${configDir}.`);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (!cleanupSupervisorState(configDir, supervisorState.supervisorPid) &&
|
|
189
|
+
readSupervisorState(configDir) !== null) {
|
|
190
|
+
failStop(`runtime stopped, but supervisor state changed before cleanup in Runtime Scope ${configDir}.`);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (!cleanupOwnership(configDir, supervisorState.supervisorPid)) {
|
|
194
|
+
failStop(`runtime stopped, but lifecycle ownership changed before cleanup in Runtime Scope ${configDir}.`);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
failStop(`runtime stopped, but lifecycle ownership could not be released in Runtime Scope ${configDir}: ${errorMessage(error)}`);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const orphaned = !supervisorWasAlive && runtimeWasAlive;
|
|
203
|
+
process.stdout.write(orphaned
|
|
204
|
+
? `Recovered orphaned runtime in Runtime Scope ${configDir} (runtime PID ${runtimePid}).\n`
|
|
205
|
+
: `Stopped supervised background runtime in Runtime Scope ${configDir} ` +
|
|
206
|
+
`(supervisor PID ${supervisorState.supervisorPid}).\n`);
|
|
207
|
+
process.exitCode = 0;
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
stopLock.release();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
34
214
|
let info;
|
|
35
215
|
try {
|
|
36
216
|
info = readInfo(configDir);
|
|
37
217
|
}
|
|
38
218
|
catch (error) {
|
|
39
219
|
if (error instanceof PidFileReadError) {
|
|
40
|
-
|
|
41
|
-
process.exitCode = 1;
|
|
220
|
+
failStop(`cannot inspect Runtime Scope ${configDir}: ${error.message}`);
|
|
42
221
|
return;
|
|
43
222
|
}
|
|
44
223
|
throw error;
|
|
@@ -55,29 +234,17 @@ export async function runServeStop(configDirOption, deps = {}) {
|
|
|
55
234
|
}
|
|
56
235
|
else {
|
|
57
236
|
process.stderr.write(`No running runtime in this Runtime Scope, but the stale PID file could not be removed ` +
|
|
58
|
-
`(${
|
|
237
|
+
`(${configDir}). Remove it manually.\n`);
|
|
59
238
|
}
|
|
60
239
|
process.exitCode = 0;
|
|
61
240
|
return;
|
|
62
241
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
let exited = await waitForExit(info.pid, { timeoutMs: gracefulTimeoutMs, isAlive });
|
|
71
|
-
if (!exited) {
|
|
72
|
-
logger.warn(`Runtime (PID ${info.pid}) did not exit after SIGTERM; escalating to SIGKILL`);
|
|
73
|
-
try {
|
|
74
|
-
kill(info.pid, 'SIGKILL');
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
logger.warn(`Failed to send SIGKILL to PID ${info.pid}: ${error}`);
|
|
78
|
-
}
|
|
79
|
-
exited = await waitForExit(info.pid, { timeoutMs: 2000, isAlive });
|
|
80
|
-
}
|
|
242
|
+
const exited = await terminateProcess(info.pid, 'Runtime', {
|
|
243
|
+
kill,
|
|
244
|
+
waitForExit,
|
|
245
|
+
isAlive,
|
|
246
|
+
gracefulTimeoutMs,
|
|
247
|
+
});
|
|
81
248
|
if (exited) {
|
|
82
249
|
// The runtime removes its own PID file on graceful shutdown; clean up in
|
|
83
250
|
// case it was force-killed before it could. Match on PID so a runtime that
|
|
@@ -87,7 +254,29 @@ export async function runServeStop(configDirOption, deps = {}) {
|
|
|
87
254
|
process.exitCode = 0;
|
|
88
255
|
return;
|
|
89
256
|
}
|
|
90
|
-
|
|
91
|
-
|
|
257
|
+
failStop(`failed to stop runtime (PID ${info.pid}) in Runtime Scope ${configDir}.`);
|
|
258
|
+
}
|
|
259
|
+
async function terminateProcess(pid, label, options) {
|
|
260
|
+
try {
|
|
261
|
+
options.kill(pid, 'SIGTERM');
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
logger.warn(`Failed to send SIGTERM to ${label} PID ${pid}: ${error}`);
|
|
265
|
+
}
|
|
266
|
+
let exited = await options.waitForExit(pid, {
|
|
267
|
+
timeoutMs: options.gracefulTimeoutMs,
|
|
268
|
+
isAlive: options.isAlive,
|
|
269
|
+
});
|
|
270
|
+
if (exited) {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
logger.warn(`${label} (PID ${pid}) did not exit after SIGTERM; escalating to SIGKILL`);
|
|
274
|
+
try {
|
|
275
|
+
options.kill(pid, 'SIGKILL');
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
logger.warn(`Failed to send SIGKILL to ${label} PID ${pid}: ${error}`);
|
|
279
|
+
}
|
|
280
|
+
return options.waitForExit(pid, { timeoutMs: 2000, isAlive: options.isAlive });
|
|
92
281
|
}
|
|
93
282
|
//# sourceMappingURL=serveStop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serveStop.js","sourceRoot":"","sources":["../../../src/commands/serve/serveStop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,WAAW,GACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,MAAM,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"serveStop.js","sourceRoot":"","sources":["../../../src/commands/serve/serveStop.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export declare class ConfigManager extends EventEmitter {
|
|
|
13
13
|
private processedTemplates;
|
|
14
14
|
private lastContextHash?;
|
|
15
15
|
private templateRenderer?;
|
|
16
|
+
private lastValidDeclaredServerConfigs;
|
|
16
17
|
/**
|
|
17
18
|
* Private constructor to enforce singleton pattern
|
|
18
19
|
* @param configFilePath - Optional path to the config file. If not provided, uses global config path
|
|
@@ -43,6 +44,7 @@ export declare class ConfigManager extends EventEmitter {
|
|
|
43
44
|
templateServers: Record<string, MCPServerParams>;
|
|
44
45
|
errors: string[];
|
|
45
46
|
};
|
|
47
|
+
private copyLastValidDeclaredServerConfigs;
|
|
46
48
|
/**
|
|
47
49
|
* Process template configurations with context data
|
|
48
50
|
* @param templates - Template configurations to process
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configManager.d.ts","sourceRoot":"","sources":["../../src/config/configManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,EACL,iBAAiB,EAGjB,eAAe,EAGhB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AASzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE3E,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,cAAc,CAAuB;IAG7C,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAA6B;
|
|
1
|
+
{"version":3,"file":"configManager.d.ts","sourceRoot":"","sources":["../../src/config/configManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,EACL,iBAAiB,EAGjB,eAAe,EAGhB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AASzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE3E,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,cAAc,CAAuB;IAG7C,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAA6B;IACtD,OAAO,CAAC,8BAA8B,CAGS;IAE/C;;;OAGG;IACH,OAAO;WAUO,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa;IAOjE,OAAO,CAAC,kBAAkB;IAQb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,OAAO,CAAC,UAAU;IAelB;;;;OAIG;IACU,uBAAuB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QACnE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC/C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACjD,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IAsGF;;;;OAIG;IACI,yBAAyB,IAAI;QAClC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC/C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACjD,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;IA0DD,OAAO,CAAC,kCAAkC;IAU1C;;;;;;OAMG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAInB;;;OAGG;IACI,2BAA2B,IAAI,MAAM,EAAE;IAI9C;;;OAGG;IACI,2BAA2B,IAAI,OAAO;IAI7C;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAMjC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACI,eAAe,IAAI,OAAO;YAInB,kBAAkB;IAsCnB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAIrD,gBAAgB,IAAI,MAAM,EAAE;IAI5B,YAAY,IAAI,iBAAiB;CAGzC;AAED,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;AAE3C,eAAe,aAAa,CAAC"}
|