@colbymchenry/codegraph-win32-arm64 0.9.9 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/dist/bin/codegraph.d.ts +1 -0
- package/lib/dist/bin/codegraph.d.ts.map +1 -1
- package/lib/dist/bin/codegraph.js +394 -10
- package/lib/dist/bin/codegraph.js.map +1 -1
- package/lib/dist/bin/fatal-handler.d.ts +20 -0
- package/lib/dist/bin/fatal-handler.d.ts.map +1 -0
- package/lib/dist/bin/fatal-handler.js +118 -0
- package/lib/dist/bin/fatal-handler.js.map +1 -0
- package/lib/dist/context/index.d.ts.map +1 -1
- package/lib/dist/context/index.js +7 -0
- package/lib/dist/context/index.js.map +1 -1
- package/lib/dist/db/index.d.ts.map +1 -1
- package/lib/dist/db/index.js +2 -1
- package/lib/dist/db/index.js.map +1 -1
- package/lib/dist/db/migrations.d.ts +1 -1
- package/lib/dist/db/migrations.d.ts.map +1 -1
- package/lib/dist/db/migrations.js +10 -1
- package/lib/dist/db/migrations.js.map +1 -1
- package/lib/dist/db/queries.d.ts +43 -0
- package/lib/dist/db/queries.d.ts.map +1 -1
- package/lib/dist/db/queries.js +103 -7
- package/lib/dist/db/queries.js.map +1 -1
- package/lib/dist/db/schema.sql +1 -0
- package/lib/dist/db/sqlite-adapter.d.ts +7 -0
- package/lib/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/lib/dist/db/sqlite-adapter.js +3 -0
- package/lib/dist/db/sqlite-adapter.js.map +1 -1
- package/lib/dist/directory.d.ts +49 -2
- package/lib/dist/directory.d.ts.map +1 -1
- package/lib/dist/directory.js +173 -35
- package/lib/dist/directory.js.map +1 -1
- package/lib/dist/extraction/astro-extractor.d.ts +79 -0
- package/lib/dist/extraction/astro-extractor.d.ts.map +1 -0
- package/lib/dist/extraction/astro-extractor.js +320 -0
- package/lib/dist/extraction/astro-extractor.js.map +1 -0
- package/lib/dist/extraction/extraction-version.d.ts +25 -0
- package/lib/dist/extraction/extraction-version.d.ts.map +1 -0
- package/lib/dist/extraction/extraction-version.js +28 -0
- package/lib/dist/extraction/extraction-version.js.map +1 -0
- package/lib/dist/extraction/function-ref.d.ts +118 -0
- package/lib/dist/extraction/function-ref.d.ts.map +1 -0
- package/lib/dist/extraction/function-ref.js +727 -0
- package/lib/dist/extraction/function-ref.js.map +1 -0
- package/lib/dist/extraction/generated-detection.d.ts.map +1 -1
- package/lib/dist/extraction/generated-detection.js +3 -0
- package/lib/dist/extraction/generated-detection.js.map +1 -1
- package/lib/dist/extraction/grammars.d.ts +7 -1
- package/lib/dist/extraction/grammars.d.ts.map +1 -1
- package/lib/dist/extraction/grammars.js +52 -4
- package/lib/dist/extraction/grammars.js.map +1 -1
- package/lib/dist/extraction/index.d.ts +34 -0
- package/lib/dist/extraction/index.d.ts.map +1 -1
- package/lib/dist/extraction/index.js +389 -62
- package/lib/dist/extraction/index.js.map +1 -1
- package/lib/dist/extraction/languages/c-cpp.d.ts +8 -0
- package/lib/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/lib/dist/extraction/languages/c-cpp.js +87 -28
- package/lib/dist/extraction/languages/c-cpp.js.map +1 -1
- package/lib/dist/extraction/languages/csharp.d.ts +22 -0
- package/lib/dist/extraction/languages/csharp.d.ts.map +1 -1
- package/lib/dist/extraction/languages/csharp.js +84 -2
- package/lib/dist/extraction/languages/csharp.js.map +1 -1
- package/lib/dist/extraction/languages/dart.d.ts.map +1 -1
- package/lib/dist/extraction/languages/dart.js +161 -1
- package/lib/dist/extraction/languages/dart.js.map +1 -1
- package/lib/dist/extraction/languages/go.d.ts.map +1 -1
- package/lib/dist/extraction/languages/go.js +43 -2
- package/lib/dist/extraction/languages/go.js.map +1 -1
- package/lib/dist/extraction/languages/index.d.ts.map +1 -1
- package/lib/dist/extraction/languages/index.js +2 -0
- package/lib/dist/extraction/languages/index.js.map +1 -1
- package/lib/dist/extraction/languages/java.d.ts.map +1 -1
- package/lib/dist/extraction/languages/java.js +42 -1
- package/lib/dist/extraction/languages/java.js.map +1 -1
- package/lib/dist/extraction/languages/javascript.d.ts.map +1 -1
- package/lib/dist/extraction/languages/javascript.js +16 -0
- package/lib/dist/extraction/languages/javascript.js.map +1 -1
- package/lib/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/lib/dist/extraction/languages/kotlin.js +69 -0
- package/lib/dist/extraction/languages/kotlin.js.map +1 -1
- package/lib/dist/extraction/languages/objc.d.ts.map +1 -1
- package/lib/dist/extraction/languages/objc.js +42 -0
- package/lib/dist/extraction/languages/objc.js.map +1 -1
- package/lib/dist/extraction/languages/pascal.d.ts.map +1 -1
- package/lib/dist/extraction/languages/pascal.js +11 -0
- package/lib/dist/extraction/languages/pascal.js.map +1 -1
- package/lib/dist/extraction/languages/php.d.ts.map +1 -1
- package/lib/dist/extraction/languages/php.js +90 -1
- package/lib/dist/extraction/languages/php.js.map +1 -1
- package/lib/dist/extraction/languages/r.d.ts +3 -0
- package/lib/dist/extraction/languages/r.d.ts.map +1 -0
- package/lib/dist/extraction/languages/r.js +314 -0
- package/lib/dist/extraction/languages/r.js.map +1 -0
- package/lib/dist/extraction/languages/ruby.d.ts.map +1 -1
- package/lib/dist/extraction/languages/ruby.js +35 -0
- package/lib/dist/extraction/languages/ruby.js.map +1 -1
- package/lib/dist/extraction/languages/rust.d.ts.map +1 -1
- package/lib/dist/extraction/languages/rust.js +35 -2
- package/lib/dist/extraction/languages/rust.js.map +1 -1
- package/lib/dist/extraction/languages/scala.d.ts.map +1 -1
- package/lib/dist/extraction/languages/scala.js +61 -1
- package/lib/dist/extraction/languages/scala.js.map +1 -1
- package/lib/dist/extraction/languages/swift.d.ts.map +1 -1
- package/lib/dist/extraction/languages/swift.js +61 -0
- package/lib/dist/extraction/languages/swift.js.map +1 -1
- package/lib/dist/extraction/languages/typescript.d.ts +13 -0
- package/lib/dist/extraction/languages/typescript.d.ts.map +1 -1
- package/lib/dist/extraction/languages/typescript.js +38 -0
- package/lib/dist/extraction/languages/typescript.js.map +1 -1
- package/lib/dist/extraction/liquid-extractor.d.ts +7 -0
- package/lib/dist/extraction/liquid-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/liquid-extractor.js +53 -9
- package/lib/dist/extraction/liquid-extractor.js.map +1 -1
- package/lib/dist/extraction/razor-extractor.d.ts +42 -0
- package/lib/dist/extraction/razor-extractor.d.ts.map +1 -0
- package/lib/dist/extraction/razor-extractor.js +285 -0
- package/lib/dist/extraction/razor-extractor.js.map +1 -0
- package/lib/dist/extraction/svelte-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/svelte-extractor.js +6 -3
- package/lib/dist/extraction/svelte-extractor.js.map +1 -1
- package/lib/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter-helpers.js +59 -10
- package/lib/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/lib/dist/extraction/tree-sitter-types.d.ts +33 -0
- package/lib/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.d.ts +211 -0
- package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.js +1681 -49
- package/lib/dist/extraction/tree-sitter.js.map +1 -1
- package/lib/dist/extraction/vue-extractor.d.ts +15 -0
- package/lib/dist/extraction/vue-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/vue-extractor.js +94 -3
- package/lib/dist/extraction/vue-extractor.js.map +1 -1
- package/lib/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/lib/dist/graph/queries.d.ts.map +1 -1
- package/lib/dist/graph/queries.js +13 -40
- package/lib/dist/graph/queries.js.map +1 -1
- package/lib/dist/graph/traversal.d.ts.map +1 -1
- package/lib/dist/graph/traversal.js +16 -4
- package/lib/dist/graph/traversal.js.map +1 -1
- package/lib/dist/index.d.ts +34 -2
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +90 -8
- package/lib/dist/index.js.map +1 -1
- package/lib/dist/installer/index.d.ts.map +1 -1
- package/lib/dist/installer/index.js +63 -2
- package/lib/dist/installer/index.js.map +1 -1
- package/lib/dist/installer/instructions-template.d.ts +34 -11
- package/lib/dist/installer/instructions-template.d.ts.map +1 -1
- package/lib/dist/installer/instructions-template.js +44 -12
- package/lib/dist/installer/instructions-template.js.map +1 -1
- package/lib/dist/installer/targets/claude.d.ts.map +1 -1
- package/lib/dist/installer/targets/claude.js +6 -10
- package/lib/dist/installer/targets/claude.js.map +1 -1
- package/lib/dist/installer/targets/codex.js +4 -6
- package/lib/dist/installer/targets/codex.js.map +1 -1
- package/lib/dist/installer/targets/gemini.js +4 -6
- package/lib/dist/installer/targets/gemini.js.map +1 -1
- package/lib/dist/installer/targets/opencode.d.ts +9 -1
- package/lib/dist/installer/targets/opencode.d.ts.map +1 -1
- package/lib/dist/installer/targets/opencode.js +91 -40
- package/lib/dist/installer/targets/opencode.js.map +1 -1
- package/lib/dist/installer/targets/shared.d.ts +14 -0
- package/lib/dist/installer/targets/shared.d.ts.map +1 -1
- package/lib/dist/installer/targets/shared.js +16 -0
- package/lib/dist/installer/targets/shared.js.map +1 -1
- package/lib/dist/mcp/daemon-manager.d.ts +42 -0
- package/lib/dist/mcp/daemon-manager.d.ts.map +1 -0
- package/lib/dist/mcp/daemon-manager.js +129 -0
- package/lib/dist/mcp/daemon-manager.js.map +1 -0
- package/lib/dist/mcp/daemon-registry.d.ts +47 -0
- package/lib/dist/mcp/daemon-registry.d.ts.map +1 -0
- package/lib/dist/mcp/daemon-registry.js +229 -0
- package/lib/dist/mcp/daemon-registry.js.map +1 -0
- package/lib/dist/mcp/daemon.d.ts +60 -1
- package/lib/dist/mcp/daemon.d.ts.map +1 -1
- package/lib/dist/mcp/daemon.js +226 -8
- package/lib/dist/mcp/daemon.js.map +1 -1
- package/lib/dist/mcp/dynamic-boundaries.d.ts +41 -0
- package/lib/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
- package/lib/dist/mcp/dynamic-boundaries.js +359 -0
- package/lib/dist/mcp/dynamic-boundaries.js.map +1 -0
- package/lib/dist/mcp/index.d.ts +1 -0
- package/lib/dist/mcp/index.d.ts.map +1 -1
- package/lib/dist/mcp/index.js +31 -9
- package/lib/dist/mcp/index.js.map +1 -1
- package/lib/dist/mcp/liveness-watchdog.d.ts +18 -0
- package/lib/dist/mcp/liveness-watchdog.d.ts.map +1 -0
- package/lib/dist/mcp/liveness-watchdog.js +207 -0
- package/lib/dist/mcp/liveness-watchdog.js.map +1 -0
- package/lib/dist/mcp/ppid-watchdog.d.ts +44 -0
- package/lib/dist/mcp/ppid-watchdog.d.ts.map +1 -0
- package/lib/dist/mcp/ppid-watchdog.js +27 -0
- package/lib/dist/mcp/ppid-watchdog.js.map +1 -0
- package/lib/dist/mcp/proxy.d.ts +6 -0
- package/lib/dist/mcp/proxy.d.ts.map +1 -1
- package/lib/dist/mcp/proxy.js +153 -24
- package/lib/dist/mcp/proxy.js.map +1 -1
- package/lib/dist/mcp/server-instructions.d.ts +12 -1
- package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
- package/lib/dist/mcp/server-instructions.js +43 -16
- package/lib/dist/mcp/server-instructions.js.map +1 -1
- package/lib/dist/mcp/session.d.ts +2 -0
- package/lib/dist/mcp/session.d.ts.map +1 -1
- package/lib/dist/mcp/session.js +49 -2
- package/lib/dist/mcp/session.js.map +1 -1
- package/lib/dist/mcp/stdin-teardown.d.ts +27 -0
- package/lib/dist/mcp/stdin-teardown.d.ts.map +1 -0
- package/lib/dist/mcp/stdin-teardown.js +49 -0
- package/lib/dist/mcp/stdin-teardown.js.map +1 -0
- package/lib/dist/mcp/tools.d.ts +71 -0
- package/lib/dist/mcp/tools.d.ts.map +1 -1
- package/lib/dist/mcp/tools.js +703 -85
- package/lib/dist/mcp/tools.js.map +1 -1
- package/lib/dist/mcp/transport.d.ts.map +1 -1
- package/lib/dist/mcp/transport.js +18 -2
- package/lib/dist/mcp/transport.js.map +1 -1
- package/lib/dist/resolution/callback-synthesizer.d.ts +3 -3
- package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/lib/dist/resolution/callback-synthesizer.js +549 -21
- package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
- package/lib/dist/resolution/frameworks/astro.d.ts +9 -0
- package/lib/dist/resolution/frameworks/astro.d.ts.map +1 -0
- package/lib/dist/resolution/frameworks/astro.js +169 -0
- package/lib/dist/resolution/frameworks/astro.js.map +1 -0
- package/lib/dist/resolution/frameworks/expo-modules.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/expo-modules.js +6 -1
- package/lib/dist/resolution/frameworks/expo-modules.js.map +1 -1
- package/lib/dist/resolution/frameworks/index.d.ts +1 -0
- package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/index.js +5 -1
- package/lib/dist/resolution/frameworks/index.js.map +1 -1
- package/lib/dist/resolution/frameworks/java.js +6 -1
- package/lib/dist/resolution/frameworks/java.js.map +1 -1
- package/lib/dist/resolution/frameworks/python.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/python.js +7 -3
- package/lib/dist/resolution/frameworks/python.js.map +1 -1
- package/lib/dist/resolution/frameworks/react-native.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/react-native.js +53 -3
- package/lib/dist/resolution/frameworks/react-native.js.map +1 -1
- package/lib/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/react.js +15 -3
- package/lib/dist/resolution/frameworks/react.js.map +1 -1
- package/lib/dist/resolution/frameworks/svelte.js +5 -1
- package/lib/dist/resolution/frameworks/svelte.js.map +1 -1
- package/lib/dist/resolution/frameworks/vue.js +24 -27
- package/lib/dist/resolution/frameworks/vue.js.map +1 -1
- package/lib/dist/resolution/import-resolver.d.ts +10 -0
- package/lib/dist/resolution/import-resolver.d.ts.map +1 -1
- package/lib/dist/resolution/import-resolver.js +620 -2
- package/lib/dist/resolution/import-resolver.js.map +1 -1
- package/lib/dist/resolution/index.d.ts +80 -0
- package/lib/dist/resolution/index.d.ts.map +1 -1
- package/lib/dist/resolution/index.js +457 -7
- package/lib/dist/resolution/index.js.map +1 -1
- package/lib/dist/resolution/name-matcher.d.ts +61 -0
- package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
- package/lib/dist/resolution/name-matcher.js +590 -14
- package/lib/dist/resolution/name-matcher.js.map +1 -1
- package/lib/dist/resolution/types.d.ts +27 -3
- package/lib/dist/resolution/types.d.ts.map +1 -1
- package/lib/dist/resolution/workspace-packages.d.ts +48 -0
- package/lib/dist/resolution/workspace-packages.d.ts.map +1 -0
- package/lib/dist/resolution/workspace-packages.js +208 -0
- package/lib/dist/resolution/workspace-packages.js.map +1 -0
- package/lib/dist/search/query-utils.d.ts +17 -1
- package/lib/dist/search/query-utils.d.ts.map +1 -1
- package/lib/dist/search/query-utils.js +79 -10
- package/lib/dist/search/query-utils.js.map +1 -1
- package/lib/dist/sync/watcher.d.ts +124 -32
- package/lib/dist/sync/watcher.d.ts.map +1 -1
- package/lib/dist/sync/watcher.js +326 -111
- package/lib/dist/sync/watcher.js.map +1 -1
- package/lib/dist/telemetry/index.d.ts +146 -0
- package/lib/dist/telemetry/index.d.ts.map +1 -0
- package/lib/dist/telemetry/index.js +544 -0
- package/lib/dist/telemetry/index.js.map +1 -0
- package/lib/dist/types.d.ts +17 -2
- package/lib/dist/types.d.ts.map +1 -1
- package/lib/dist/types.js +3 -0
- package/lib/dist/types.js.map +1 -1
- package/lib/dist/upgrade/index.d.ts +132 -0
- package/lib/dist/upgrade/index.d.ts.map +1 -0
- package/lib/dist/upgrade/index.js +462 -0
- package/lib/dist/upgrade/index.js.map +1 -0
- package/lib/dist/utils.d.ts +30 -24
- package/lib/dist/utils.d.ts.map +1 -1
- package/lib/dist/utils.js +64 -48
- package/lib/dist/utils.js.map +1 -1
- package/lib/node_modules/.package-lock.json +1 -29
- package/lib/package.json +1 -2
- package/package.json +1 -1
- package/lib/node_modules/chokidar/LICENSE +0 -21
- package/lib/node_modules/chokidar/README.md +0 -305
- package/lib/node_modules/chokidar/esm/handler.d.ts +0 -90
- package/lib/node_modules/chokidar/esm/handler.js +0 -629
- package/lib/node_modules/chokidar/esm/index.d.ts +0 -215
- package/lib/node_modules/chokidar/esm/index.js +0 -798
- package/lib/node_modules/chokidar/esm/package.json +0 -1
- package/lib/node_modules/chokidar/handler.d.ts +0 -90
- package/lib/node_modules/chokidar/handler.js +0 -635
- package/lib/node_modules/chokidar/index.d.ts +0 -215
- package/lib/node_modules/chokidar/index.js +0 -804
- package/lib/node_modules/chokidar/package.json +0 -69
- package/lib/node_modules/readdirp/LICENSE +0 -21
- package/lib/node_modules/readdirp/README.md +0 -120
- package/lib/node_modules/readdirp/esm/index.d.ts +0 -108
- package/lib/node_modules/readdirp/esm/index.js +0 -257
- package/lib/node_modules/readdirp/esm/package.json +0 -1
- package/lib/node_modules/readdirp/index.d.ts +0 -108
- package/lib/node_modules/readdirp/index.js +0 -263
- package/lib/node_modules/readdirp/package.json +0 -70
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CANCEL = exports.STOP_ALL = void 0;
|
|
37
|
+
exports.formatUptime = formatUptime;
|
|
38
|
+
exports.buildPickItems = buildPickItems;
|
|
39
|
+
exports.runDaemonPicker = runDaemonPicker;
|
|
40
|
+
/**
|
|
41
|
+
* Interactive daemon manager — the logic behind `codegraph daemon` / `daemons`.
|
|
42
|
+
*
|
|
43
|
+
* Kept separate from the CLI (which owns the @clack/prompts wiring) so the
|
|
44
|
+
* selection/stop loop is unit-testable with a fake `select`: no TTY, no clack,
|
|
45
|
+
* no real daemons. The CLI passes the real clack `select`/`isCancel` plus the
|
|
46
|
+
* registry's list/stop functions.
|
|
47
|
+
*/
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
/** Sentinel option values (not real roots, so they can't collide with a project path). */
|
|
50
|
+
exports.STOP_ALL = '__stop_all__';
|
|
51
|
+
exports.CANCEL = '__cancel__';
|
|
52
|
+
/** Compact uptime: `45s`, `12m`, `3h 5m`. */
|
|
53
|
+
function formatUptime(ms) {
|
|
54
|
+
const s = Math.max(0, Math.floor(ms / 1000));
|
|
55
|
+
if (s < 60)
|
|
56
|
+
return `${s}s`;
|
|
57
|
+
const m = Math.floor(s / 60);
|
|
58
|
+
if (m < 60)
|
|
59
|
+
return `${m}m`;
|
|
60
|
+
const h = Math.floor(m / 60);
|
|
61
|
+
return `${h}h ${m % 60}m`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Build the ordered, UI-ready option list: the current project's daemon first
|
|
65
|
+
* (so it's the auto-selected default), the rest newest-first, then "Stop all"
|
|
66
|
+
* (only when there's more than one) and "Cancel".
|
|
67
|
+
*/
|
|
68
|
+
function buildPickItems(daemons, cwdRoot, now) {
|
|
69
|
+
const cwd = cwdRoot != null ? path.resolve(cwdRoot) : null;
|
|
70
|
+
const ordered = [...daemons].sort((a, b) => {
|
|
71
|
+
if (cwd) {
|
|
72
|
+
const aCur = path.resolve(a.root) === cwd;
|
|
73
|
+
const bCur = path.resolve(b.root) === cwd;
|
|
74
|
+
if (aCur && !bCur)
|
|
75
|
+
return -1;
|
|
76
|
+
if (bCur && !aCur)
|
|
77
|
+
return 1;
|
|
78
|
+
}
|
|
79
|
+
return b.startedAt - a.startedAt; // newest first
|
|
80
|
+
});
|
|
81
|
+
const items = ordered.map((d) => {
|
|
82
|
+
const current = cwd != null && path.resolve(d.root) === cwd;
|
|
83
|
+
return {
|
|
84
|
+
value: d.root,
|
|
85
|
+
label: current ? `${d.root} (current project)` : d.root,
|
|
86
|
+
hint: `pid ${d.pid} · up ${formatUptime(now - d.startedAt)} · Running`,
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
if (items.length > 1)
|
|
90
|
+
items.push({ value: exports.STOP_ALL, label: 'Stop all', hint: '' });
|
|
91
|
+
items.push({ value: exports.CANCEL, label: 'Cancel', hint: '' });
|
|
92
|
+
return items;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Pick a daemon → stop it → re-prompt with what's left, until the user cancels
|
|
96
|
+
* (Esc / Ctrl-C / "Cancel"), picks "Stop all", or nothing remains.
|
|
97
|
+
*/
|
|
98
|
+
async function runDaemonPicker(deps) {
|
|
99
|
+
for (;;) {
|
|
100
|
+
const daemons = deps.list();
|
|
101
|
+
if (daemons.length === 0) {
|
|
102
|
+
deps.done('All daemons stopped.');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const items = buildPickItems(daemons, deps.cwdRoot, deps.now());
|
|
106
|
+
const choice = await deps.select({
|
|
107
|
+
message: 'Select a daemon to stop',
|
|
108
|
+
options: items,
|
|
109
|
+
initialValue: items[0]?.value ?? exports.CANCEL, // daemons.length > 0 here, so items[0] is a daemon
|
|
110
|
+
});
|
|
111
|
+
if (deps.isCancel(choice) || choice === exports.CANCEL) {
|
|
112
|
+
deps.done('Cancelled.');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (choice === exports.STOP_ALL) {
|
|
116
|
+
const results = await deps.stopAll();
|
|
117
|
+
const n = results.filter((r) => r.outcome === 'term' || r.outcome === 'kill').length;
|
|
118
|
+
deps.note(`Stopped ${n} daemon${n === 1 ? '' : 's'}.`);
|
|
119
|
+
deps.done('Done.');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const result = await deps.stop(String(choice));
|
|
123
|
+
const forced = result.outcome === 'kill' ? ', forced' : '';
|
|
124
|
+
deps.note(`Stopped daemon (pid ${result.pid}${forced}) — ${choice}`);
|
|
125
|
+
// Loop: the next iteration re-lists; if more remain it re-prompts, otherwise
|
|
126
|
+
// the top-of-loop empty check prints "All daemons stopped."
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=daemon-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-manager.js","sourceRoot":"","sources":["../../src/mcp/daemon-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,oCAOC;AAOD,wCAwBC;AAsBD,0CAkCC;AApHD;;;;;;;GAOG;AACH,2CAA6B;AAG7B,0FAA0F;AAC7E,QAAA,QAAQ,GAAG,cAAc,CAAC;AAC1B,QAAA,MAAM,GAAG,YAAY,CAAC;AAQnC,6CAA6C;AAC7C,SAAgB,YAAY,CAAC,EAAU;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,OAAuB,EAAE,OAAsB,EAAE,GAAW;IACzF,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;YAC1C,IAAI,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,eAAe;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAe,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;QAC5D,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YACxD,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY;SACvE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC;AACf,CAAC;AAkBD;;;GAGG;AACI,KAAK,UAAU,eAAe,CAAC,IAAgB;IACpD,SAAS,CAAC;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;YAC/B,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,cAAM,EAAE,mDAAmD;SAC7F,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,cAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,MAAM,KAAK,gBAAQ,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;YACrF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,GAAG,GAAG,MAAM,OAAO,MAAM,EAAE,CAAC,CAAC;QACrE,6EAA6E;QAC7E,4DAA4D;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface DaemonRecord {
|
|
2
|
+
/** Realpath'd project root the daemon serves. */
|
|
3
|
+
root: string;
|
|
4
|
+
pid: number;
|
|
5
|
+
version: string;
|
|
6
|
+
socketPath: string;
|
|
7
|
+
/** Epoch ms when the daemon bound its socket. */
|
|
8
|
+
startedAt: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* `~/.codegraph/daemons` — GLOBAL, keyed off the home install dir. (The
|
|
12
|
+
* `CODEGRAPH_DIR` env var only renames the per-project index dir, not this.)
|
|
13
|
+
*/
|
|
14
|
+
export declare function getRegistryDir(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Is `pid` a live process? `kill(pid, 0)` sends no signal — it just probes:
|
|
17
|
+
* ESRCH ⇒ dead, EPERM ⇒ alive but not ours (still alive). Same liveness check
|
|
18
|
+
* the PPID watchdog (#277) and daemon lock arbitration use.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isProcessAlive(pid: number): boolean;
|
|
21
|
+
/** Best-effort: record this daemon so `list`/`stop --all` can find it. */
|
|
22
|
+
export declare function registerDaemon(rec: DaemonRecord): void;
|
|
23
|
+
/** Best-effort: drop this daemon's record on graceful shutdown. */
|
|
24
|
+
export declare function deregisterDaemon(root: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* All registered daemons whose process is still alive, newest first. Dead/garbage
|
|
27
|
+
* records are deleted as a side effect (self-healing) unless `prune` is false.
|
|
28
|
+
*/
|
|
29
|
+
export declare function listDaemons(opts?: {
|
|
30
|
+
prune?: boolean;
|
|
31
|
+
}): DaemonRecord[];
|
|
32
|
+
export interface StopResult {
|
|
33
|
+
root: string;
|
|
34
|
+
pid: number | null;
|
|
35
|
+
/** 'term' graceful, 'kill' force, 'not-running' stale lock, 'no-daemon' none found. */
|
|
36
|
+
outcome: 'term' | 'kill' | 'not-running' | 'no-daemon';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Stop the daemon serving `root`: SIGTERM, wait, then SIGKILL if it won't go,
|
|
40
|
+
* then sweep its artifacts. `root` must be realpath'd (match how the daemon
|
|
41
|
+
* keys its socket/lockfile). Resolves the pid from the authoritative lockfile,
|
|
42
|
+
* falling back to the registry.
|
|
43
|
+
*/
|
|
44
|
+
export declare function stopDaemonAt(root: string): Promise<StopResult>;
|
|
45
|
+
/** Stop every registered, live daemon. */
|
|
46
|
+
export declare function stopAllDaemons(): Promise<StopResult[]>;
|
|
47
|
+
//# sourceMappingURL=daemon-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-registry.d.ts","sourceRoot":"","sources":["../../src/mcp/daemon-registry.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAOD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAOtD;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMnD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,YAAY,EAAE,CA2B1E;AAuBD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,uFAAuF;IACvF,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC;CACxD;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCpE;AAED,0CAA0C;AAC1C,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAM5D"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getRegistryDir = getRegistryDir;
|
|
37
|
+
exports.isProcessAlive = isProcessAlive;
|
|
38
|
+
exports.registerDaemon = registerDaemon;
|
|
39
|
+
exports.deregisterDaemon = deregisterDaemon;
|
|
40
|
+
exports.listDaemons = listDaemons;
|
|
41
|
+
exports.stopDaemonAt = stopDaemonAt;
|
|
42
|
+
exports.stopAllDaemons = stopAllDaemons;
|
|
43
|
+
/**
|
|
44
|
+
* Global daemon registry + stop/list control — the discovery layer behind
|
|
45
|
+
* `codegraph list` and `codegraph stop [--all]`.
|
|
46
|
+
*
|
|
47
|
+
* Every per-project daemon already writes an authoritative lockfile at
|
|
48
|
+
* `<root>/.codegraph/daemon.pid`. That's enough to stop ONE daemon you can name,
|
|
49
|
+
* but there's no central place to find them ALL — which `list` and `stop --all`
|
|
50
|
+
* need. So each daemon also drops a tiny record under `~/.codegraph/daemons/` on
|
|
51
|
+
* start and removes it on graceful shutdown.
|
|
52
|
+
*
|
|
53
|
+
* The registry is a DISCOVERY index, never a source of truth: the live pid is.
|
|
54
|
+
* A SIGKILL'd daemon can't remove its own record, so readers prune any record
|
|
55
|
+
* whose pid is dead (`isProcessAlive`). Every write/read is best-effort — a
|
|
56
|
+
* registry hiccup must never break the daemon or a command; worst case `list`
|
|
57
|
+
* momentarily misses or over-lists one, which the next liveness prune corrects.
|
|
58
|
+
*
|
|
59
|
+
* Cross-platform by construction: only files + `process.kill(pid, signal)`,
|
|
60
|
+
* which behave consistently on macOS/Linux (real signals) and Windows (mapped to
|
|
61
|
+
* TerminateProcess). Validated live on all three.
|
|
62
|
+
*/
|
|
63
|
+
const fs = __importStar(require("fs"));
|
|
64
|
+
const os = __importStar(require("os"));
|
|
65
|
+
const path = __importStar(require("path"));
|
|
66
|
+
const crypto = __importStar(require("crypto"));
|
|
67
|
+
const daemon_paths_1 = require("./daemon-paths");
|
|
68
|
+
/**
|
|
69
|
+
* `~/.codegraph/daemons` — GLOBAL, keyed off the home install dir. (The
|
|
70
|
+
* `CODEGRAPH_DIR` env var only renames the per-project index dir, not this.)
|
|
71
|
+
*/
|
|
72
|
+
function getRegistryDir() {
|
|
73
|
+
return path.join(os.homedir(), '.codegraph', 'daemons');
|
|
74
|
+
}
|
|
75
|
+
function recordPath(root) {
|
|
76
|
+
const hash = crypto.createHash('sha256').update(path.resolve(root)).digest('hex').slice(0, 16);
|
|
77
|
+
return path.join(getRegistryDir(), `${hash}.json`);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Is `pid` a live process? `kill(pid, 0)` sends no signal — it just probes:
|
|
81
|
+
* ESRCH ⇒ dead, EPERM ⇒ alive but not ours (still alive). Same liveness check
|
|
82
|
+
* the PPID watchdog (#277) and daemon lock arbitration use.
|
|
83
|
+
*/
|
|
84
|
+
function isProcessAlive(pid) {
|
|
85
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
86
|
+
return false;
|
|
87
|
+
try {
|
|
88
|
+
process.kill(pid, 0);
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
return err.code === 'EPERM';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Best-effort: record this daemon so `list`/`stop --all` can find it. */
|
|
96
|
+
function registerDaemon(rec) {
|
|
97
|
+
try {
|
|
98
|
+
fs.mkdirSync(getRegistryDir(), { recursive: true });
|
|
99
|
+
fs.writeFileSync(recordPath(rec.root), JSON.stringify(rec, null, 2) + '\n', { mode: 0o600 });
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
/* best-effort — list's liveness prune tolerates a missing record */
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Best-effort: drop this daemon's record on graceful shutdown. */
|
|
106
|
+
function deregisterDaemon(root) {
|
|
107
|
+
try {
|
|
108
|
+
fs.unlinkSync(recordPath(root));
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
/* already gone */
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* All registered daemons whose process is still alive, newest first. Dead/garbage
|
|
116
|
+
* records are deleted as a side effect (self-healing) unless `prune` is false.
|
|
117
|
+
*/
|
|
118
|
+
function listDaemons(opts = {}) {
|
|
119
|
+
const prune = opts.prune ?? true;
|
|
120
|
+
const dir = getRegistryDir();
|
|
121
|
+
let files;
|
|
122
|
+
try {
|
|
123
|
+
files = fs.readdirSync(dir).filter((f) => f.endsWith('.json'));
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return []; // no registry dir yet
|
|
127
|
+
}
|
|
128
|
+
const live = [];
|
|
129
|
+
for (const file of files) {
|
|
130
|
+
const full = path.join(dir, file);
|
|
131
|
+
let rec = null;
|
|
132
|
+
try {
|
|
133
|
+
rec = JSON.parse(fs.readFileSync(full, 'utf8'));
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
rec = null;
|
|
137
|
+
}
|
|
138
|
+
const valid = rec && typeof rec.pid === 'number' && typeof rec.root === 'string';
|
|
139
|
+
if (valid && isProcessAlive(rec.pid)) {
|
|
140
|
+
live.push(rec);
|
|
141
|
+
}
|
|
142
|
+
else if (prune) {
|
|
143
|
+
try {
|
|
144
|
+
fs.unlinkSync(full);
|
|
145
|
+
}
|
|
146
|
+
catch { /* ignore */ }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return live.sort((a, b) => b.startedAt - a.startedAt);
|
|
150
|
+
}
|
|
151
|
+
/** Remove a stopped daemon's leftover lockfile + socket + registry record. */
|
|
152
|
+
function cleanupDaemonArtifacts(root) {
|
|
153
|
+
try {
|
|
154
|
+
fs.unlinkSync((0, daemon_paths_1.getDaemonPidPath)(root));
|
|
155
|
+
}
|
|
156
|
+
catch { /* gone */ }
|
|
157
|
+
// POSIX sockets are real files; Windows named pipes vanish with the process.
|
|
158
|
+
if (process.platform !== 'win32') {
|
|
159
|
+
try {
|
|
160
|
+
fs.unlinkSync((0, daemon_paths_1.getDaemonSocketPath)(root));
|
|
161
|
+
}
|
|
162
|
+
catch { /* gone */ }
|
|
163
|
+
}
|
|
164
|
+
deregisterDaemon(root);
|
|
165
|
+
}
|
|
166
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
167
|
+
async function waitForDeath(pid, timeoutMs) {
|
|
168
|
+
const deadline = Date.now() + timeoutMs;
|
|
169
|
+
while (Date.now() < deadline) {
|
|
170
|
+
if (!isProcessAlive(pid))
|
|
171
|
+
return true;
|
|
172
|
+
await sleep(100);
|
|
173
|
+
}
|
|
174
|
+
return !isProcessAlive(pid);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Stop the daemon serving `root`: SIGTERM, wait, then SIGKILL if it won't go,
|
|
178
|
+
* then sweep its artifacts. `root` must be realpath'd (match how the daemon
|
|
179
|
+
* keys its socket/lockfile). Resolves the pid from the authoritative lockfile,
|
|
180
|
+
* falling back to the registry.
|
|
181
|
+
*/
|
|
182
|
+
async function stopDaemonAt(root) {
|
|
183
|
+
let pid = null;
|
|
184
|
+
try {
|
|
185
|
+
const info = (0, daemon_paths_1.decodeLockInfo)(fs.readFileSync((0, daemon_paths_1.getDaemonPidPath)(root), 'utf8'));
|
|
186
|
+
pid = info?.pid ?? null;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
/* no lockfile */
|
|
190
|
+
}
|
|
191
|
+
if (pid == null) {
|
|
192
|
+
const rec = listDaemons({ prune: false }).find((r) => path.resolve(r.root) === path.resolve(root));
|
|
193
|
+
pid = rec?.pid ?? null;
|
|
194
|
+
}
|
|
195
|
+
if (pid == null) {
|
|
196
|
+
cleanupDaemonArtifacts(root);
|
|
197
|
+
return { root, pid: null, outcome: 'no-daemon' };
|
|
198
|
+
}
|
|
199
|
+
if (!isProcessAlive(pid)) {
|
|
200
|
+
cleanupDaemonArtifacts(root);
|
|
201
|
+
return { root, pid, outcome: 'not-running' };
|
|
202
|
+
}
|
|
203
|
+
// POSIX: SIGTERM runs the daemon's graceful shutdown. Windows: TerminateProcess
|
|
204
|
+
// (no graceful path), so we always sweep artifacts ourselves below.
|
|
205
|
+
try {
|
|
206
|
+
process.kill(pid, 'SIGTERM');
|
|
207
|
+
}
|
|
208
|
+
catch { /* raced to exit */ }
|
|
209
|
+
let outcome = 'term';
|
|
210
|
+
if (!(await waitForDeath(pid, 3000))) {
|
|
211
|
+
try {
|
|
212
|
+
process.kill(pid, 'SIGKILL');
|
|
213
|
+
}
|
|
214
|
+
catch { /* raced to exit */ }
|
|
215
|
+
await waitForDeath(pid, 2000);
|
|
216
|
+
outcome = 'kill';
|
|
217
|
+
}
|
|
218
|
+
cleanupDaemonArtifacts(root);
|
|
219
|
+
return { root, pid, outcome };
|
|
220
|
+
}
|
|
221
|
+
/** Stop every registered, live daemon. */
|
|
222
|
+
async function stopAllDaemons() {
|
|
223
|
+
const results = [];
|
|
224
|
+
for (const rec of listDaemons()) {
|
|
225
|
+
results.push(await stopDaemonAt(rec.root));
|
|
226
|
+
}
|
|
227
|
+
return results;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=daemon-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-registry.js","sourceRoot":"","sources":["../../src/mcp/daemon-registry.ts"],"names":[],"mappings":"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"}
|
package/lib/dist/mcp/daemon.d.ts
CHANGED
|
@@ -54,6 +54,20 @@ export interface DaemonHello {
|
|
|
54
54
|
socketPath: string;
|
|
55
55
|
protocol: 1;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Optional reverse-handshake line a proxy sends right after it verifies the
|
|
59
|
+
* daemon hello, carrying its own pids so the daemon can reap the client if its
|
|
60
|
+
* process dies WITHOUT the socket ever signalling close (the Windows named-pipe
|
|
61
|
+
* hazard behind #692). Entirely optional and fail-safe: a connection that never
|
|
62
|
+
* sends it (a legacy/direct client) just falls back to the socket-close
|
|
63
|
+
* lifecycle. The `codegraph_client` marker is what tells it apart from the
|
|
64
|
+
* client's first JSON-RPC message.
|
|
65
|
+
*/
|
|
66
|
+
export interface DaemonClientHello {
|
|
67
|
+
codegraph_client: 1;
|
|
68
|
+
pid: number;
|
|
69
|
+
hostPid: number | null;
|
|
70
|
+
}
|
|
57
71
|
export interface DaemonStartResult {
|
|
58
72
|
/** Always-non-null for a successfully-started daemon. */
|
|
59
73
|
socketPath: string;
|
|
@@ -75,14 +89,21 @@ export declare class Daemon {
|
|
|
75
89
|
private projectRoot;
|
|
76
90
|
private server;
|
|
77
91
|
private clients;
|
|
92
|
+
/** Per-client peer pids from the optional client-hello, for the liveness sweep. */
|
|
93
|
+
private clientPeers;
|
|
78
94
|
private idleTimer;
|
|
79
95
|
private idleTimeoutMs;
|
|
96
|
+
private maxIdleMs;
|
|
97
|
+
private lastActivityAt;
|
|
98
|
+
private maxIdleTimer;
|
|
99
|
+
private clientSweepTimer;
|
|
80
100
|
private engine;
|
|
81
101
|
private stopping;
|
|
82
102
|
private socketPath;
|
|
83
103
|
private pidPath;
|
|
84
104
|
constructor(projectRoot: string, opts?: {
|
|
85
105
|
idleTimeoutMs?: number;
|
|
106
|
+
maxIdleMs?: number;
|
|
86
107
|
});
|
|
87
108
|
/**
|
|
88
109
|
* Bind the socket, kick off engine init, and register signal handlers. The
|
|
@@ -101,6 +122,26 @@ export declare class Daemon {
|
|
|
101
122
|
private dropClient;
|
|
102
123
|
private armIdleTimer;
|
|
103
124
|
private disarmIdleTimer;
|
|
125
|
+
/**
|
|
126
|
+
* Defense-in-depth against a daemon that outlives its clients (#692), for the
|
|
127
|
+
* cases the refcount + idle timer miss because a socket close never arrives:
|
|
128
|
+
* - **Inactivity backstop:** exit if no inbound traffic for `maxIdleMs` while
|
|
129
|
+
* clients are still (nominally) connected. A phantom client sends nothing,
|
|
130
|
+
* so it can't pin the daemon past this window.
|
|
131
|
+
* - **Liveness sweep:** drop any client whose peer process has died (per the
|
|
132
|
+
* client-hello pids), which re-arms the idle timer once the last real
|
|
133
|
+
* client is gone. Catches a dead peer within one sweep instead of waiting
|
|
134
|
+
* out the whole backstop.
|
|
135
|
+
* Both timers are unref'd — the listening server keeps the loop alive, and
|
|
136
|
+
* neither should hold it open on its own.
|
|
137
|
+
*/
|
|
138
|
+
private startLivenessTimers;
|
|
139
|
+
/**
|
|
140
|
+
* Drop every connected client whose peer process is gone. Returns the count
|
|
141
|
+
* reaped. `isAlive` is injected for testing. Clients with unknown pids (no
|
|
142
|
+
* client-hello) are skipped — they rely on the socket-close path.
|
|
143
|
+
*/
|
|
144
|
+
reapDeadClients(isAlive: (pid: number) => boolean): number;
|
|
104
145
|
private cleanupLockfile;
|
|
105
146
|
}
|
|
106
147
|
/**
|
|
@@ -128,7 +169,7 @@ export type AcquireResult = {
|
|
|
128
169
|
* the file existed but was empty; under concurrent daemon startup a third
|
|
129
170
|
* candidate could read that empty file, decode it as `null`, and `unlink` the
|
|
130
171
|
* winner's lock → two daemons (two watchers, two writers). The window was
|
|
131
|
-
* normally too small to hit, but the
|
|
172
|
+
* normally too small to hit, but the file watcher's extra startup time made
|
|
132
173
|
* concurrent daemons overlap enough to reproduce it reliably.
|
|
133
174
|
*
|
|
134
175
|
* The fix writes the complete record to a private temp file, then hard-links it
|
|
@@ -156,6 +197,24 @@ export declare function clearStaleDaemonLock(pidPath: string, expectedDeadPid?:
|
|
|
156
197
|
* mistake a live daemon for a dead one and clear its lock.
|
|
157
198
|
*/
|
|
158
199
|
export declare function isProcessAlive(pid: number): boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Parse one client-hello line. Returns the peer pids if `line` is a well-formed
|
|
202
|
+
* client-hello (carries the `codegraph_client` marker), or null otherwise — in
|
|
203
|
+
* which case the caller treats the bytes as ordinary JSON-RPC.
|
|
204
|
+
*/
|
|
205
|
+
export declare function parseClientHelloLine(line: string): {
|
|
206
|
+
pid: number;
|
|
207
|
+
hostPid: number | null;
|
|
208
|
+
} | null;
|
|
209
|
+
/**
|
|
210
|
+
* A client's peer is dead when its proxy process is gone, or when its known
|
|
211
|
+
* host process is gone. Unknown pid (no client-hello) is never "dead" on this
|
|
212
|
+
* basis — those clients rely on the socket-close path. Exported for testing.
|
|
213
|
+
*/
|
|
214
|
+
export declare function peerIsDead(peers: {
|
|
215
|
+
pid: number | null;
|
|
216
|
+
hostPid: number | null;
|
|
217
|
+
}, isAlive: (pid: number) => boolean): boolean;
|
|
159
218
|
/** Exported for test stubs that need to bound the hello-line read. */
|
|
160
219
|
export { MAX_HELLO_LINE_BYTES };
|
|
161
220
|
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/mcp/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAQH,OAAO,EACL,cAAc,EAKf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/mcp/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAQH,OAAO,EACL,cAAc,EAKf,MAAM,gBAAgB,CAAC;AAuBxB,yFAAyF;AACzF,QAAA,MAAM,oBAAoB,OAAO,CAAC;AAElC;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,CAAC,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,MAAM;IAiBf,OAAO,CAAC,WAAW;IAhBrB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAAyB;IACxC,mFAAmF;IACnF,OAAO,CAAC,WAAW,CAAyE;IAC5F,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAGd,WAAW,EAAE,MAAM,EAC3B,IAAI,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAU3D;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAsDzC,2EAA2E;IAC3E,cAAc,IAAI,MAAM;IAIxB,+DAA+D;IAC/D,aAAa,IAAI,MAAM;IAIvB,gFAAgF;IAC1E,IAAI,CAAC,MAAM,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiClD,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,eAAe;IAMvB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM;IAgB1D,OAAO,CAAC,eAAe;CAaxB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAsCvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAiBvF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASnD;AA0BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAOhD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACrD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAChC,OAAO,CAKT;AAiED,sEAAsE;AACtE,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|