@stupidloud/codegraph 0.9.5 → 0.9.9
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 +252 -116
- package/dist/bin/codegraph.js +52 -82
- package/dist/bin/codegraph.js.map +1 -1
- package/dist/context/formatter.d.ts.map +1 -1
- package/dist/context/formatter.js +25 -6
- package/dist/context/formatter.js.map +1 -1
- package/dist/context/index.d.ts +22 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +257 -6
- package/dist/context/index.js.map +1 -1
- package/dist/context/markers.d.ts +19 -0
- package/dist/context/markers.d.ts.map +1 -0
- package/dist/context/markers.js +22 -0
- package/dist/context/markers.js.map +1 -0
- package/dist/db/queries.d.ts +88 -0
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +251 -7
- package/dist/db/queries.js.map +1 -1
- package/dist/db/sqlite-adapter.d.ts +7 -0
- package/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/dist/db/sqlite-adapter.js +3 -0
- package/dist/db/sqlite-adapter.js.map +1 -1
- package/dist/directory.d.ts.map +1 -1
- package/dist/directory.js +6 -20
- package/dist/directory.js.map +1 -1
- package/dist/extraction/generated-detection.d.ts +30 -0
- package/dist/extraction/generated-detection.d.ts.map +1 -0
- package/dist/extraction/generated-detection.js +80 -0
- package/dist/extraction/generated-detection.js.map +1 -0
- package/dist/extraction/grammars.d.ts +17 -1
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +65 -1
- package/dist/extraction/grammars.js.map +1 -1
- package/dist/extraction/index.d.ts +15 -2
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +206 -98
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/dist/extraction/languages/c-cpp.js +45 -0
- package/dist/extraction/languages/c-cpp.js.map +1 -1
- package/dist/extraction/languages/csharp.d.ts.map +1 -1
- package/dist/extraction/languages/csharp.js +2 -1
- package/dist/extraction/languages/csharp.js.map +1 -1
- package/dist/extraction/languages/go.d.ts.map +1 -1
- package/dist/extraction/languages/go.js +18 -2
- package/dist/extraction/languages/go.js.map +1 -1
- package/dist/extraction/languages/index.d.ts.map +1 -1
- package/dist/extraction/languages/index.js +2 -0
- package/dist/extraction/languages/index.js.map +1 -1
- package/dist/extraction/languages/java.d.ts.map +1 -1
- package/dist/extraction/languages/java.js +6 -0
- package/dist/extraction/languages/java.js.map +1 -1
- package/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/dist/extraction/languages/kotlin.js +6 -0
- package/dist/extraction/languages/kotlin.js.map +1 -1
- package/dist/extraction/languages/objc.d.ts +3 -0
- package/dist/extraction/languages/objc.d.ts.map +1 -0
- package/dist/extraction/languages/objc.js +133 -0
- package/dist/extraction/languages/objc.js.map +1 -0
- package/dist/extraction/mybatis-extractor.d.ts +48 -0
- package/dist/extraction/mybatis-extractor.d.ts.map +1 -0
- package/dist/extraction/mybatis-extractor.js +198 -0
- package/dist/extraction/mybatis-extractor.js.map +1 -0
- package/dist/extraction/tree-sitter-types.d.ts +14 -0
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.d.ts +84 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +681 -20
- package/dist/extraction/tree-sitter.js.map +1 -1
- package/dist/extraction/vue-extractor.d.ts +15 -0
- package/dist/extraction/vue-extractor.d.ts.map +1 -1
- package/dist/extraction/vue-extractor.js +88 -0
- package/dist/extraction/vue-extractor.js.map +1 -1
- package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
- package/dist/extraction/wasm-runtime-flags.js +1 -0
- package/dist/extraction/wasm-runtime-flags.js.map +1 -1
- package/dist/graph/traversal.d.ts.map +1 -1
- package/dist/graph/traversal.js +5 -2
- package/dist/graph/traversal.js.map +1 -1
- package/dist/index.d.ts +66 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +105 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/config-writer.d.ts +7 -8
- package/dist/installer/config-writer.d.ts.map +1 -1
- package/dist/installer/config-writer.js +7 -27
- package/dist/installer/config-writer.js.map +1 -1
- package/dist/installer/index.d.ts +3 -20
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +8 -39
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/instructions-template.d.ts +11 -21
- package/dist/installer/instructions-template.d.ts.map +1 -1
- package/dist/installer/instructions-template.js +12 -56
- package/dist/installer/instructions-template.js.map +1 -1
- package/dist/installer/targets/antigravity.d.ts +57 -0
- package/dist/installer/targets/antigravity.d.ts.map +1 -0
- package/dist/installer/targets/antigravity.js +308 -0
- package/dist/installer/targets/antigravity.js.map +1 -0
- package/dist/installer/targets/claude.d.ts +10 -1
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +25 -40
- package/dist/installer/targets/claude.js.map +1 -1
- package/dist/installer/targets/codex.d.ts.map +1 -1
- package/dist/installer/targets/codex.js +15 -13
- package/dist/installer/targets/codex.js.map +1 -1
- package/dist/installer/targets/cursor.d.ts.map +1 -1
- package/dist/installer/targets/cursor.js +9 -38
- package/dist/installer/targets/cursor.js.map +1 -1
- package/dist/installer/targets/gemini.d.ts +26 -0
- package/dist/installer/targets/gemini.d.ts.map +1 -0
- package/dist/installer/targets/gemini.js +167 -0
- package/dist/installer/targets/gemini.js.map +1 -0
- package/dist/installer/targets/hermes.d.ts.map +1 -1
- package/dist/installer/targets/hermes.js +57 -3
- package/dist/installer/targets/hermes.js.map +1 -1
- package/dist/installer/targets/kiro.d.ts +27 -0
- package/dist/installer/targets/kiro.d.ts.map +1 -0
- package/dist/installer/targets/kiro.js +178 -0
- package/dist/installer/targets/kiro.js.map +1 -0
- package/dist/installer/targets/opencode.d.ts.map +1 -1
- package/dist/installer/targets/opencode.js +15 -13
- package/dist/installer/targets/opencode.js.map +1 -1
- package/dist/installer/targets/registry.d.ts.map +1 -1
- package/dist/installer/targets/registry.js +6 -0
- package/dist/installer/targets/registry.js.map +1 -1
- package/dist/installer/targets/shared.d.ts.map +1 -1
- package/dist/installer/targets/shared.js +3 -2
- package/dist/installer/targets/shared.js.map +1 -1
- package/dist/installer/targets/types.d.ts +1 -16
- package/dist/installer/targets/types.d.ts.map +1 -1
- package/dist/mcp/daemon-paths.d.ts +46 -0
- package/dist/mcp/daemon-paths.d.ts.map +1 -0
- package/dist/mcp/daemon-paths.js +125 -0
- package/dist/mcp/daemon-paths.js.map +1 -0
- package/dist/mcp/daemon.d.ts +161 -0
- package/dist/mcp/daemon.d.ts.map +1 -0
- package/dist/mcp/daemon.js +403 -0
- package/dist/mcp/daemon.js.map +1 -0
- package/dist/mcp/engine.d.ts +105 -0
- package/dist/mcp/engine.d.ts.map +1 -0
- package/dist/mcp/engine.js +270 -0
- package/dist/mcp/engine.js.map +1 -0
- package/dist/mcp/index.d.ts +67 -53
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +315 -388
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/proxy.d.ts +81 -0
- package/dist/mcp/proxy.d.ts.map +1 -0
- package/dist/mcp/proxy.js +510 -0
- package/dist/mcp/proxy.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +21 -21
- package/dist/mcp/session.d.ts +77 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +294 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +160 -14
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1622 -322
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/transport.d.ts +111 -29
- package/dist/mcp/transport.d.ts.map +1 -1
- package/dist/mcp/transport.js +181 -71
- package/dist/mcp/transport.js.map +1 -1
- package/dist/mcp/version.d.ts +19 -0
- package/dist/mcp/version.d.ts.map +1 -0
- package/dist/mcp/version.js +71 -0
- package/dist/mcp/version.js.map +1 -0
- package/dist/resolution/callback-synthesizer.d.ts +10 -0
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
- package/dist/resolution/callback-synthesizer.js +1300 -0
- package/dist/resolution/callback-synthesizer.js.map +1 -0
- package/dist/resolution/frameworks/csharp.d.ts.map +1 -1
- package/dist/resolution/frameworks/csharp.js +36 -8
- package/dist/resolution/frameworks/csharp.js.map +1 -1
- package/dist/resolution/frameworks/drupal.d.ts.map +1 -1
- package/dist/resolution/frameworks/drupal.js +44 -12
- package/dist/resolution/frameworks/drupal.js.map +1 -1
- package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
- package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
- package/dist/resolution/frameworks/expo-modules.js +143 -0
- package/dist/resolution/frameworks/expo-modules.js.map +1 -0
- package/dist/resolution/frameworks/express.d.ts.map +1 -1
- package/dist/resolution/frameworks/express.js +102 -19
- package/dist/resolution/frameworks/express.js.map +1 -1
- package/dist/resolution/frameworks/fabric.d.ts +3 -0
- package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
- package/dist/resolution/frameworks/fabric.js +354 -0
- package/dist/resolution/frameworks/fabric.js.map +1 -0
- package/dist/resolution/frameworks/go.d.ts.map +1 -1
- package/dist/resolution/frameworks/go.js +6 -3
- package/dist/resolution/frameworks/go.js.map +1 -1
- package/dist/resolution/frameworks/index.d.ts +5 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/dist/resolution/frameworks/index.js +25 -1
- package/dist/resolution/frameworks/index.js.map +1 -1
- package/dist/resolution/frameworks/java.d.ts.map +1 -1
- package/dist/resolution/frameworks/java.js +339 -12
- package/dist/resolution/frameworks/java.js.map +1 -1
- package/dist/resolution/frameworks/laravel.d.ts.map +1 -1
- package/dist/resolution/frameworks/laravel.js +17 -8
- package/dist/resolution/frameworks/laravel.js.map +1 -1
- package/dist/resolution/frameworks/nestjs.d.ts.map +1 -1
- package/dist/resolution/frameworks/nestjs.js +324 -0
- package/dist/resolution/frameworks/nestjs.js.map +1 -1
- package/dist/resolution/frameworks/play.d.ts +19 -0
- package/dist/resolution/frameworks/play.d.ts.map +1 -0
- package/dist/resolution/frameworks/play.js +111 -0
- package/dist/resolution/frameworks/play.js.map +1 -0
- package/dist/resolution/frameworks/python.d.ts.map +1 -1
- package/dist/resolution/frameworks/python.js +134 -16
- package/dist/resolution/frameworks/python.js.map +1 -1
- package/dist/resolution/frameworks/react-native.d.ts +3 -0
- package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
- package/dist/resolution/frameworks/react-native.js +360 -0
- package/dist/resolution/frameworks/react-native.js.map +1 -0
- package/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/dist/resolution/frameworks/react.js +96 -3
- package/dist/resolution/frameworks/react.js.map +1 -1
- package/dist/resolution/frameworks/ruby.d.ts.map +1 -1
- package/dist/resolution/frameworks/ruby.js +106 -2
- package/dist/resolution/frameworks/ruby.js.map +1 -1
- package/dist/resolution/frameworks/rust.d.ts.map +1 -1
- package/dist/resolution/frameworks/rust.js +102 -5
- package/dist/resolution/frameworks/rust.js.map +1 -1
- package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
- package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift-objc.js +252 -0
- package/dist/resolution/frameworks/swift-objc.js.map +1 -0
- package/dist/resolution/frameworks/swift.d.ts.map +1 -1
- package/dist/resolution/frameworks/swift.js +30 -6
- package/dist/resolution/frameworks/swift.js.map +1 -1
- package/dist/resolution/go-module.d.ts +26 -0
- package/dist/resolution/go-module.d.ts.map +1 -0
- package/dist/resolution/go-module.js +78 -0
- package/dist/resolution/go-module.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +28 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -1
- package/dist/resolution/import-resolver.js +617 -5
- package/dist/resolution/import-resolver.js.map +1 -1
- package/dist/resolution/index.d.ts +11 -0
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +156 -3
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +212 -0
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/resolution/swift-objc-bridge.d.ts +134 -0
- package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
- package/dist/resolution/swift-objc-bridge.js +256 -0
- package/dist/resolution/swift-objc-bridge.js.map +1 -0
- package/dist/resolution/types.d.ts +44 -0
- package/dist/resolution/types.d.ts.map +1 -1
- package/dist/resolution/workspace-packages.d.ts +48 -0
- package/dist/resolution/workspace-packages.d.ts.map +1 -0
- package/dist/resolution/workspace-packages.js +208 -0
- package/dist/resolution/workspace-packages.js.map +1 -0
- package/dist/search/query-utils.d.ts +18 -0
- package/dist/search/query-utils.d.ts.map +1 -1
- package/dist/search/query-utils.js +30 -0
- package/dist/search/query-utils.js.map +1 -1
- package/dist/sync/git-hooks.d.ts.map +1 -1
- package/dist/sync/git-hooks.js +2 -0
- package/dist/sync/git-hooks.js.map +1 -1
- package/dist/sync/index.d.ts +3 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +8 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/watcher.d.ts +212 -8
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +465 -51
- package/dist/sync/watcher.js.map +1 -1
- package/dist/sync/worktree.d.ts +54 -0
- package/dist/sync/worktree.d.ts.map +1 -0
- package/dist/sync/worktree.js +137 -0
- package/dist/sync/worktree.js.map +1 -0
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/scripts/agent-eval/arms-F.sh +21 -0
- package/scripts/agent-eval/arms-matrix.sh +37 -0
- package/scripts/agent-eval/bench-readme.sh +28 -0
- package/scripts/agent-eval/bench-why-repo.sh +22 -0
- package/scripts/agent-eval/block-read-hook.sh +19 -0
- package/scripts/agent-eval/hook-settings.json +15 -0
- package/scripts/agent-eval/itrun.sh +24 -11
- package/scripts/agent-eval/parse-arms.mjs +116 -0
- package/scripts/agent-eval/parse-bench-readme.mjs +84 -0
- package/scripts/agent-eval/probe-context.mjs +21 -0
- package/scripts/agent-eval/probe-explore.mjs +40 -0
- package/scripts/agent-eval/probe-node.mjs +20 -0
- package/scripts/agent-eval/probe-sweep.mjs +119 -0
- package/scripts/agent-eval/probe-trace.mjs +20 -0
- package/scripts/agent-eval/run-arms.sh +56 -0
- package/scripts/agent-eval/seq-matrix.mjs +137 -0
- package/scripts/npm-sdk.js +75 -0
- package/scripts/pack-npm.sh +25 -1
- package/scripts/prepare-release.mjs +270 -0
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAoD;AACpD,4CAAyE;AACzE,2CAA6C;AAC7C,qCAAqC;AACrC,uCAAuC;AACvC,qCAKkB;AAClB,mCAAmE;AACnE,iDAAqD;AACrD,yEAAiE;AAEjE;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAExD;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC;;;;;;GAMG;AACH,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,+DAA+D;AAC/D,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEzC;;;;;GAKG;AACH,SAAS,eAAe,CAAC,GAAuB;IAC9C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,oBAAoB,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,oBAAoB,CAAC;IAC1D,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,oBAAoB,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,GAAuB;IAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;AACtD,CAAC;AAED,kEAAkE;AAClE,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC7C,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,iBAAiB,CAAC,YAA2B;IACpD,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,IAAA,oCAAwB,EAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,2EAA2E;QAC3E,kDAAkD;QAClD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,KAAK,GAAiB,QAAQ,CAAC;IACnC,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAA,2BAAe,EAAC,IAAI,CAAC,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC;QACzE,KAAK,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,QAAQ,CAAC,CAAC,uDAAuD;IAC3E,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAA,qBAAK,EACjB,OAAO,CAAC,QAAQ,EAChB,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EACnE;YACE,QAAQ,EAAE,IAAI;YACd,KAAK;YACL,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE;SACpD,CACF,CAAC;QACF,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,+EAA+E;QAC/E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC;gBAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAa,SAAS;IACZ,WAAW,CAAgB;IACnC,0EAA0E;IAC1E,qEAAqE;IAC7D,OAAO,GAAsB,IAAI,CAAC;IAClC,MAAM,GAAqB,IAAI,CAAC;IAChC,MAAM,GAAkB,IAAI,CAAC;IAC7B,YAAY,GAA0C,IAAI,CAAC;IACnE,wEAAwE;IACxE,8DAA8D;IACtD,YAAY,GAAW,OAAO,CAAC,IAAI,CAAC;IACpC,QAAQ,GAAkB,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAa,CAAC,CAAC,CAAC;IAC5E,gCAAgC;IACxB,OAAO,GAAG,KAAK,CAAC;IAChB,IAAI,GAAgD,WAAW,CAAC;IAExE,YAAY,WAAoB;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,KAAK;QACT,wEAAwE;QACxE,4EAA4E;QAC5E,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACnC,CAAC;QAED,0EAA0E;QAC1E,4CAA4C;QAC5C,IAAI,eAAe,EAAE,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,oEAAoE;YACpE,uEAAuE;YACvE,OAAO,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC;YACH,2EAA2E;YAC3E,2EAA2E;YAC3E,4EAA4E;YAC5E,2EAA2E;YAC3E,mEAAmE;YACnE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACpB,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,6EAA6E;YAC7E,4DAA4D;YAC5D,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,GAAG,mCAAmC,CAAC,CAAC;YACnG,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,sDAAsD;YACtD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uEAAuE;IAC/D,KAAK,CAAC,WAAW,CAAC,MAAc;QACtC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,MAAM,KAAK,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAS,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,0BAAc,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAU,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;YACpD,mBAAmB,EAAE,IAAI,CAAC,WAAW;SACtC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,gEAAgE;YAChE,KAAK,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAErB,uEAAuE;QACvE,uEAAuE;QACvE,sEAAsE;QACtE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,kBAAkB;QAC9B,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACtF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,oBAAoB,EAAE,OAAO,EAAE,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;YAExC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrB,OAAO,CAAC,yCAAyC;YACnD,CAAC;YAED,sEAAsE;YACtE,0EAA0E;YAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,IAAA,uBAAc,EAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0CAA0C,QAAQ,CAAC,GAAG,sCAAsC,CAC7F,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,yEAAyE;YACzE,kEAAkE;YAClE,IAAA,6BAAoB,EAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,0BAA0B,CAAC,IAAY;QACnD,MAAM,UAAU,GAAG,IAAA,kCAAmB,EAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;YACjC,gDAAgD;YAChD,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,EAAC,UAAU,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,kBAAkB;gBAAE,OAAO,IAAI,CAAC,CAAC,mDAAmD;YAClG,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxB,+DAA+D;YAC/D,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,0BAA0B,EAAE,OAAO,EAAE,EAAE,CAAC;gBACtE,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,MAAM,IAAA,wBAAgB,EAAC,UAAU,CAAC,CAAC;gBAC7C,IAAI,CAAC,KAAK,kBAAkB;oBAAE,OAAO,IAAI,CAAC;gBAC1C,IAAI,CAAC;oBAAE,OAAO,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,yDAAyD;QACxE,CAAC,CAAC;QACF,MAAM,IAAA,8BAAsB,EAAC,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,iFAAiF;IACzE,qBAAqB;QAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACK,mBAAmB;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QACnC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACnE,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,MAAM,WAAW,GAAG,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,IAAA,uBAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1E,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,WAAW;oBACxB,CAAC,CAAC,QAAQ,IAAI,CAAC,YAAY,OAAO,OAAO,EAAE;oBAC3C,CAAC,CAAC,YAAY,IAAI,CAAC,QAAQ,SAAS,CAAC;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0CAA0C,MAAM,qBAAqB,CACtE,CAAC;gBACF,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF;AArOD,8BAqOC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,qDAAqD;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,wBAAwB;AACxB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AACvB,iCAA6C;AAApC,8FAAA,KAAK,OAAA;AAAE,oGAAA,WAAW,OAAA;AAC3B,0DAA0D;AAC1D,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,qCAAoD;AAA3C,kHAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP proxy mode — issue #411.
|
|
3
|
+
*
|
|
4
|
+
* The proxy is a near-transparent stdio↔socket pipe. Once it has verified
|
|
5
|
+
* the daemon's hello line (same major.minor.patch as ours), it does no
|
|
6
|
+
* protocol parsing of its own: every byte the MCP host writes to the proxy's
|
|
7
|
+
* stdin goes straight to the daemon socket, and every byte the daemon emits
|
|
8
|
+
* goes straight to the host's stdout. Server-initiated JSON-RPC requests
|
|
9
|
+
* (e.g. `roots/list`) flow through the same pipe transparently.
|
|
10
|
+
*
|
|
11
|
+
* Lifecycle expectations:
|
|
12
|
+
* - The proxy exits when *either* stream closes (host stdin closed →
|
|
13
|
+
* daemon socket end, or daemon-side socket close → host stdout end).
|
|
14
|
+
* - Closing the socket on the proxy side is what tells the daemon to
|
|
15
|
+
* decrement its connected-clients refcount.
|
|
16
|
+
* - On a parent-process death we can't detect via stdin close (e.g. SIGKILL
|
|
17
|
+
* of the MCP host), the proxy's PPID watchdog catches it — same logic
|
|
18
|
+
* the direct-mode server uses; see issue #277.
|
|
19
|
+
*/
|
|
20
|
+
import * as net from 'net';
|
|
21
|
+
import type { MCPEngine } from './engine';
|
|
22
|
+
export interface ProxyResult {
|
|
23
|
+
/**
|
|
24
|
+
* `proxied` — successfully attached to a same-version daemon and piped
|
|
25
|
+
* stdio. The proxy stays alive until either end closes.
|
|
26
|
+
* `fallback-needed` — the daemon rejected us (version mismatch / unreachable
|
|
27
|
+
* socket) and the caller should run the server in direct mode.
|
|
28
|
+
*/
|
|
29
|
+
outcome: 'proxied' | 'fallback-needed';
|
|
30
|
+
reason?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Attempt to connect to the daemon at `socketPath` and pipe stdio through it.
|
|
34
|
+
*
|
|
35
|
+
* Returns a promise that resolves when either:
|
|
36
|
+
* - the connection succeeded and one of stdin/socket has now closed
|
|
37
|
+
* (after which the process should exit), or
|
|
38
|
+
* - the connection failed early enough that the caller can still fall
|
|
39
|
+
* back to direct mode.
|
|
40
|
+
*
|
|
41
|
+
* The `expectedVersion` param defaults to the package's own version — daemon
|
|
42
|
+
* and proxy MUST match exactly. Mismatch resolves with
|
|
43
|
+
* `outcome: 'fallback-needed'` so the caller can transparently start its own
|
|
44
|
+
* server. (We accept the cost of two concurrent servers in this case as the
|
|
45
|
+
* price of never silently running a stale daemon against newer client code.)
|
|
46
|
+
*/
|
|
47
|
+
export declare function runProxy(socketPath: string, expectedVersion?: string): Promise<ProxyResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Connect to a daemon at `socketPath` and verify its hello (exact version match).
|
|
50
|
+
* Returns the live socket (hello already consumed) or null if unreachable / stale
|
|
51
|
+
* / version-mismatched. Unlike {@link runProxy} it does NOT pipe — the caller
|
|
52
|
+
* owns the socket. Used by the local-handshake proxy's background connect.
|
|
53
|
+
*/
|
|
54
|
+
export declare function connectWithHello(socketPath: string, expectedVersion?: string): Promise<net.Socket | 'version-mismatch' | null>;
|
|
55
|
+
/** Dependencies the local-handshake proxy needs, injected by MCPServer (which
|
|
56
|
+
* owns the daemon-spawn machinery and the engine factory). */
|
|
57
|
+
export interface LocalHandshakeDeps {
|
|
58
|
+
/** Probe → spawn → retry → hello-verify; resolves a connected daemon socket,
|
|
59
|
+
* or null when the daemon path is genuinely unavailable (→ in-process fallback). */
|
|
60
|
+
getDaemonSocket(): Promise<net.Socket | null>;
|
|
61
|
+
/** Lazily create an in-process engine — used ONLY if the daemon never comes up,
|
|
62
|
+
* preserving the "a broken daemon never wedges a session" guarantee. */
|
|
63
|
+
makeEngine(): MCPEngine;
|
|
64
|
+
/** Project root for the fallback engine's lazy init. */
|
|
65
|
+
root: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Local-handshake proxy (the cold-start fix).
|
|
69
|
+
*
|
|
70
|
+
* Answers `initialize` + `tools/list` from STATIC constants the instant the
|
|
71
|
+
* client asks — tools register in ~process-startup time instead of waiting
|
|
72
|
+
* ~600ms for the daemon to spawn+bind, which is what produced the "No such tool
|
|
73
|
+
* available" race that made headless agents flail into grep/Read. Tool CALLS are
|
|
74
|
+
* forwarded to the shared daemon (connected in the background); the daemon's
|
|
75
|
+
* response to the forwarded `initialize` is suppressed (the client already got
|
|
76
|
+
* the local one). If the daemon never comes up (version mismatch / spawn fail),
|
|
77
|
+
* a lazily-created in-process engine serves the calls — so the handshake speedup
|
|
78
|
+
* never costs the old fall-back-to-direct robustness.
|
|
79
|
+
*/
|
|
80
|
+
export declare function runLocalHandshakeProxy(deps: LocalHandshakeDeps): Promise<void>;
|
|
81
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/mcp/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAO3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAK1C,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,OAAO,EAAE,SAAS,GAAG,iBAAiB,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,eAAe,GAAE,MAAgC,GAChD,OAAO,CAAC,WAAW,CAAC,CAsCtB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,eAAe,GAAE,MAAgC,GAChD,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAAC,CAuBjD;AAID;+DAC+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC;yFACqF;IACrF,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C;6EACyE;IACzE,UAAU,IAAI,SAAS,CAAC;IACxB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuHpF"}
|
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP proxy mode — issue #411.
|
|
4
|
+
*
|
|
5
|
+
* The proxy is a near-transparent stdio↔socket pipe. Once it has verified
|
|
6
|
+
* the daemon's hello line (same major.minor.patch as ours), it does no
|
|
7
|
+
* protocol parsing of its own: every byte the MCP host writes to the proxy's
|
|
8
|
+
* stdin goes straight to the daemon socket, and every byte the daemon emits
|
|
9
|
+
* goes straight to the host's stdout. Server-initiated JSON-RPC requests
|
|
10
|
+
* (e.g. `roots/list`) flow through the same pipe transparently.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle expectations:
|
|
13
|
+
* - The proxy exits when *either* stream closes (host stdin closed →
|
|
14
|
+
* daemon socket end, or daemon-side socket close → host stdout end).
|
|
15
|
+
* - Closing the socket on the proxy side is what tells the daemon to
|
|
16
|
+
* decrement its connected-clients refcount.
|
|
17
|
+
* - On a parent-process death we can't detect via stdin close (e.g. SIGKILL
|
|
18
|
+
* of the MCP host), the proxy's PPID watchdog catches it — same logic
|
|
19
|
+
* the direct-mode server uses; see issue #277.
|
|
20
|
+
*/
|
|
21
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(o, k2, desc);
|
|
28
|
+
}) : (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
o[k2] = m[k];
|
|
31
|
+
}));
|
|
32
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
33
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
34
|
+
}) : function(o, v) {
|
|
35
|
+
o["default"] = v;
|
|
36
|
+
});
|
|
37
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
38
|
+
var ownKeys = function(o) {
|
|
39
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
40
|
+
var ar = [];
|
|
41
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
42
|
+
return ar;
|
|
43
|
+
};
|
|
44
|
+
return ownKeys(o);
|
|
45
|
+
};
|
|
46
|
+
return function (mod) {
|
|
47
|
+
if (mod && mod.__esModule) return mod;
|
|
48
|
+
var result = {};
|
|
49
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
50
|
+
__setModuleDefault(result, mod);
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
})();
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.runProxy = runProxy;
|
|
56
|
+
exports.connectWithHello = connectWithHello;
|
|
57
|
+
exports.runLocalHandshakeProxy = runLocalHandshakeProxy;
|
|
58
|
+
const fs = __importStar(require("fs"));
|
|
59
|
+
const net = __importStar(require("net"));
|
|
60
|
+
const wasm_runtime_flags_1 = require("../extraction/wasm-runtime-flags");
|
|
61
|
+
const daemon_1 = require("./daemon");
|
|
62
|
+
const version_1 = require("./version");
|
|
63
|
+
const session_1 = require("./session");
|
|
64
|
+
const server_instructions_1 = require("./server-instructions");
|
|
65
|
+
const tools_1 = require("./tools");
|
|
66
|
+
/** Default poll cadence for the PPID watchdog (same as the direct server). */
|
|
67
|
+
const DEFAULT_PPID_POLL_MS = 5000;
|
|
68
|
+
/**
|
|
69
|
+
* Attempt to connect to the daemon at `socketPath` and pipe stdio through it.
|
|
70
|
+
*
|
|
71
|
+
* Returns a promise that resolves when either:
|
|
72
|
+
* - the connection succeeded and one of stdin/socket has now closed
|
|
73
|
+
* (after which the process should exit), or
|
|
74
|
+
* - the connection failed early enough that the caller can still fall
|
|
75
|
+
* back to direct mode.
|
|
76
|
+
*
|
|
77
|
+
* The `expectedVersion` param defaults to the package's own version — daemon
|
|
78
|
+
* and proxy MUST match exactly. Mismatch resolves with
|
|
79
|
+
* `outcome: 'fallback-needed'` so the caller can transparently start its own
|
|
80
|
+
* server. (We accept the cost of two concurrent servers in this case as the
|
|
81
|
+
* price of never silently running a stale daemon against newer client code.)
|
|
82
|
+
*/
|
|
83
|
+
async function runProxy(socketPath, expectedVersion = version_1.CodeGraphPackageVersion) {
|
|
84
|
+
// POSIX: refuse to connect to a stale socket file that points at no
|
|
85
|
+
// listening process. `fs.existsSync` is a cheap pre-check; a real
|
|
86
|
+
// ECONNREFUSED below catches the rare "exists but unbound" race.
|
|
87
|
+
if (process.platform !== 'win32' && !fs.existsSync(socketPath)) {
|
|
88
|
+
return { outcome: 'fallback-needed', reason: 'socket file missing' };
|
|
89
|
+
}
|
|
90
|
+
const socket = net.createConnection(socketPath);
|
|
91
|
+
socket.setEncoding('utf8');
|
|
92
|
+
const hello = await readHelloLine(socket).catch((err) => {
|
|
93
|
+
socket.destroy();
|
|
94
|
+
return new Error(String(err));
|
|
95
|
+
});
|
|
96
|
+
if (hello instanceof Error) {
|
|
97
|
+
return { outcome: 'fallback-needed', reason: hello.message };
|
|
98
|
+
}
|
|
99
|
+
if (hello.codegraph !== expectedVersion) {
|
|
100
|
+
process.stderr.write(`[CodeGraph MCP] Found a daemon on ${socketPath} but version (${hello.codegraph}) ` +
|
|
101
|
+
`differs from ours (${expectedVersion}); falling back to direct mode.\n`);
|
|
102
|
+
socket.destroy();
|
|
103
|
+
return { outcome: 'fallback-needed', reason: 'version mismatch' };
|
|
104
|
+
}
|
|
105
|
+
process.stderr.write(`[CodeGraph MCP] Attached to shared daemon on ${socketPath} (pid ${hello.pid}, v${hello.codegraph}).\n`);
|
|
106
|
+
startPpidWatchdog(socket);
|
|
107
|
+
await pipeUntilClose(socket);
|
|
108
|
+
// Host disconnected (or the daemon went away). The proxy's only job is the
|
|
109
|
+
// pipe; exit now so we don't linger — process.stdin's 'data' listener would
|
|
110
|
+
// otherwise keep the event loop alive and leave a zombie launcher behind.
|
|
111
|
+
process.exit(0);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Connect to a daemon at `socketPath` and verify its hello (exact version match).
|
|
115
|
+
* Returns the live socket (hello already consumed) or null if unreachable / stale
|
|
116
|
+
* / version-mismatched. Unlike {@link runProxy} it does NOT pipe — the caller
|
|
117
|
+
* owns the socket. Used by the local-handshake proxy's background connect.
|
|
118
|
+
*/
|
|
119
|
+
async function connectWithHello(socketPath, expectedVersion = version_1.CodeGraphPackageVersion) {
|
|
120
|
+
if (process.platform !== 'win32' && !fs.existsSync(socketPath))
|
|
121
|
+
return null;
|
|
122
|
+
const socket = net.createConnection(socketPath);
|
|
123
|
+
socket.setEncoding('utf8');
|
|
124
|
+
const hello = await readHelloLine(socket).catch(() => null);
|
|
125
|
+
if (!hello) {
|
|
126
|
+
socket.destroy();
|
|
127
|
+
return null; // no daemon yet — caller should keep polling
|
|
128
|
+
}
|
|
129
|
+
if (hello.codegraph !== expectedVersion) {
|
|
130
|
+
// A daemon IS up but it's the wrong version — definitive, not a "not yet".
|
|
131
|
+
// Don't poll; the caller serves in-process so we never run stale-vs-new.
|
|
132
|
+
process.stderr.write(`[CodeGraph MCP] Found a daemon on ${socketPath} but version (${hello.codegraph}) ` +
|
|
133
|
+
`differs from ours (${expectedVersion}); serving this session in-process.\n`);
|
|
134
|
+
socket.destroy();
|
|
135
|
+
return 'version-mismatch';
|
|
136
|
+
}
|
|
137
|
+
process.stderr.write(`[CodeGraph MCP] Attached to shared daemon on ${socketPath} (pid ${hello.pid}, v${hello.codegraph}).\n`);
|
|
138
|
+
return socket;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Local-handshake proxy (the cold-start fix).
|
|
142
|
+
*
|
|
143
|
+
* Answers `initialize` + `tools/list` from STATIC constants the instant the
|
|
144
|
+
* client asks — tools register in ~process-startup time instead of waiting
|
|
145
|
+
* ~600ms for the daemon to spawn+bind, which is what produced the "No such tool
|
|
146
|
+
* available" race that made headless agents flail into grep/Read. Tool CALLS are
|
|
147
|
+
* forwarded to the shared daemon (connected in the background); the daemon's
|
|
148
|
+
* response to the forwarded `initialize` is suppressed (the client already got
|
|
149
|
+
* the local one). If the daemon never comes up (version mismatch / spawn fail),
|
|
150
|
+
* a lazily-created in-process engine serves the calls — so the handshake speedup
|
|
151
|
+
* never costs the old fall-back-to-direct robustness.
|
|
152
|
+
*/
|
|
153
|
+
async function runLocalHandshakeProxy(deps) {
|
|
154
|
+
let daemonStatus = 'connecting';
|
|
155
|
+
let daemonSocket = null;
|
|
156
|
+
let clientInitId = undefined; // suppress the daemon's reply to the forwarded initialize
|
|
157
|
+
const pending = []; // client lines buffered until the daemon resolves
|
|
158
|
+
let engine = null;
|
|
159
|
+
let engineReady = null;
|
|
160
|
+
let shuttingDown = false;
|
|
161
|
+
const writeClient = (obj) => {
|
|
162
|
+
try {
|
|
163
|
+
process.stdout.write((typeof obj === 'string' ? obj : JSON.stringify(obj)) + '\n');
|
|
164
|
+
}
|
|
165
|
+
catch { /* host gone */ }
|
|
166
|
+
};
|
|
167
|
+
const shutdown = () => {
|
|
168
|
+
if (shuttingDown)
|
|
169
|
+
return;
|
|
170
|
+
shuttingDown = true;
|
|
171
|
+
try {
|
|
172
|
+
daemonSocket?.destroy();
|
|
173
|
+
}
|
|
174
|
+
catch { /* ignore */ }
|
|
175
|
+
try {
|
|
176
|
+
engine?.stop();
|
|
177
|
+
}
|
|
178
|
+
catch { /* ignore */ }
|
|
179
|
+
process.exit(0);
|
|
180
|
+
};
|
|
181
|
+
const ensureEngine = () => {
|
|
182
|
+
if (!engine)
|
|
183
|
+
engine = deps.makeEngine();
|
|
184
|
+
if (!engineReady)
|
|
185
|
+
engineReady = engine.ensureInitialized(deps.root).catch(() => { });
|
|
186
|
+
return engineReady;
|
|
187
|
+
};
|
|
188
|
+
// Daemon-unavailable fallback: serve a client message in-process.
|
|
189
|
+
const handleLocally = async (line) => {
|
|
190
|
+
let msg;
|
|
191
|
+
try {
|
|
192
|
+
msg = JSON.parse(line);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const id = msg.id;
|
|
198
|
+
if (msg.method === 'tools/call' && id !== undefined) {
|
|
199
|
+
try {
|
|
200
|
+
await ensureEngine();
|
|
201
|
+
const params = (msg.params || {});
|
|
202
|
+
const result = await engine.getToolHandler().execute(params.name, params.arguments || {});
|
|
203
|
+
writeClient({ jsonrpc: '2.0', id, result });
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
writeClient({ jsonrpc: '2.0', id, error: { code: -32603, message: err instanceof Error ? err.message : String(err) } });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else if (msg.method === 'ping' && id !== undefined) {
|
|
210
|
+
writeClient({ jsonrpc: '2.0', id, result: {} });
|
|
211
|
+
}
|
|
212
|
+
// initialize already answered locally; notifications (initialized) need no reply.
|
|
213
|
+
};
|
|
214
|
+
const routeToDaemon = (line) => {
|
|
215
|
+
if (daemonStatus === 'ready' && daemonSocket) {
|
|
216
|
+
try {
|
|
217
|
+
daemonSocket.write(line.endsWith('\n') ? line : line + '\n');
|
|
218
|
+
}
|
|
219
|
+
catch { /* close path */ }
|
|
220
|
+
}
|
|
221
|
+
else if (daemonStatus === 'failed') {
|
|
222
|
+
void handleLocally(line);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
pending.push(line);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
// ---- client (stdin) ----
|
|
229
|
+
let stdinBuf = '';
|
|
230
|
+
process.stdin.setEncoding('utf8');
|
|
231
|
+
process.stdin.on('data', (chunk) => {
|
|
232
|
+
stdinBuf += chunk;
|
|
233
|
+
let idx;
|
|
234
|
+
while ((idx = stdinBuf.indexOf('\n')) !== -1) {
|
|
235
|
+
const line = stdinBuf.slice(0, idx).trim();
|
|
236
|
+
stdinBuf = stdinBuf.slice(idx + 1);
|
|
237
|
+
if (!line)
|
|
238
|
+
continue;
|
|
239
|
+
let msg;
|
|
240
|
+
try {
|
|
241
|
+
msg = JSON.parse(line);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
routeToDaemon(line);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (msg.method === 'initialize') {
|
|
248
|
+
clientInitId = msg.id;
|
|
249
|
+
writeClient({ jsonrpc: '2.0', id: msg.id, result: { protocolVersion: session_1.PROTOCOL_VERSION, capabilities: { tools: {} }, serverInfo: session_1.SERVER_INFO, instructions: server_instructions_1.SERVER_INSTRUCTIONS } });
|
|
250
|
+
routeToDaemon(line); // prime the daemon so it resolves the project (its reply is suppressed below)
|
|
251
|
+
}
|
|
252
|
+
else if (msg.method === 'tools/list') {
|
|
253
|
+
writeClient({ jsonrpc: '2.0', id: msg.id, result: { tools: (0, tools_1.getStaticTools)() } });
|
|
254
|
+
}
|
|
255
|
+
else if (msg.method === 'resources/list') {
|
|
256
|
+
// No resources exposed — answer the probe locally so it never reaches
|
|
257
|
+
// the daemon as an unhandled method and logs `-32601`. (#621)
|
|
258
|
+
writeClient({ jsonrpc: '2.0', id: msg.id, result: { resources: [] } });
|
|
259
|
+
}
|
|
260
|
+
else if (msg.method === 'resources/templates/list') {
|
|
261
|
+
writeClient({ jsonrpc: '2.0', id: msg.id, result: { resourceTemplates: [] } });
|
|
262
|
+
}
|
|
263
|
+
else if (msg.method === 'prompts/list') {
|
|
264
|
+
writeClient({ jsonrpc: '2.0', id: msg.id, result: { prompts: [] } });
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
routeToDaemon(line);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
process.stdin.on('end', shutdown);
|
|
272
|
+
process.stdin.on('close', shutdown);
|
|
273
|
+
startPpidWatchdogNoSocket(shutdown);
|
|
274
|
+
// ---- daemon connection (background) ----
|
|
275
|
+
let socket = null;
|
|
276
|
+
try {
|
|
277
|
+
socket = await deps.getDaemonSocket();
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
socket = null;
|
|
281
|
+
}
|
|
282
|
+
if (socket && !shuttingDown) {
|
|
283
|
+
daemonSocket = socket;
|
|
284
|
+
daemonStatus = 'ready';
|
|
285
|
+
let sockBuf = '';
|
|
286
|
+
socket.setEncoding('utf8');
|
|
287
|
+
socket.on('data', (chunk) => {
|
|
288
|
+
sockBuf += chunk;
|
|
289
|
+
let idx;
|
|
290
|
+
while ((idx = sockBuf.indexOf('\n')) !== -1) {
|
|
291
|
+
const line = sockBuf.slice(0, idx);
|
|
292
|
+
sockBuf = sockBuf.slice(idx + 1);
|
|
293
|
+
if (!line.trim())
|
|
294
|
+
continue;
|
|
295
|
+
if (clientInitId !== undefined) {
|
|
296
|
+
try {
|
|
297
|
+
const m = JSON.parse(line);
|
|
298
|
+
if (m.id === clientInitId && ('result' in m || 'error' in m))
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
catch { /* relay */ }
|
|
302
|
+
}
|
|
303
|
+
writeClient(line);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
socket.on('close', shutdown);
|
|
307
|
+
socket.on('error', shutdown);
|
|
308
|
+
for (const line of pending) {
|
|
309
|
+
try {
|
|
310
|
+
socket.write(line + '\n');
|
|
311
|
+
}
|
|
312
|
+
catch { /* ignore */ }
|
|
313
|
+
}
|
|
314
|
+
pending.length = 0;
|
|
315
|
+
}
|
|
316
|
+
else if (!shuttingDown) {
|
|
317
|
+
daemonStatus = 'failed';
|
|
318
|
+
process.stderr.write('[CodeGraph MCP] Shared daemon unavailable; serving this session in-process (degraded).\n');
|
|
319
|
+
const buffered = pending.splice(0);
|
|
320
|
+
for (const line of buffered)
|
|
321
|
+
await handleLocally(line);
|
|
322
|
+
}
|
|
323
|
+
await new Promise(() => { });
|
|
324
|
+
}
|
|
325
|
+
/** PPID watchdog for the local-handshake proxy — same #277 logic as
|
|
326
|
+
* {@link startPpidWatchdog} but with no socket to close (the caller's shutdown
|
|
327
|
+
* handles teardown). */
|
|
328
|
+
function startPpidWatchdogNoSocket(onDeath) {
|
|
329
|
+
const pollMs = parsePollMs(process.env.CODEGRAPH_PPID_POLL_MS);
|
|
330
|
+
if (pollMs <= 0)
|
|
331
|
+
return;
|
|
332
|
+
const originalPpid = process.ppid;
|
|
333
|
+
const hostPpid = parseHostPpid(process.env[wasm_runtime_flags_1.HOST_PPID_ENV]);
|
|
334
|
+
const timer = setInterval(() => {
|
|
335
|
+
if (process.ppid !== originalPpid || (hostPpid !== null && !isProcessAliveLocal(hostPpid))) {
|
|
336
|
+
process.stderr.write('[CodeGraph MCP] Parent process exited; shutting down.\n');
|
|
337
|
+
onDeath();
|
|
338
|
+
}
|
|
339
|
+
}, pollMs);
|
|
340
|
+
timer.unref?.();
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Read one CRLF/LF-terminated JSON line from the socket, parse it as the
|
|
344
|
+
* daemon hello, and return it. Bounded to {@link MAX_HELLO_LINE_BYTES} so a
|
|
345
|
+
* malicious or broken peer can't OOM us. Times out at 3s — a healthy daemon
|
|
346
|
+
* sends hello immediately on accept.
|
|
347
|
+
*/
|
|
348
|
+
function readHelloLine(socket) {
|
|
349
|
+
return new Promise((resolve, reject) => {
|
|
350
|
+
let buffer = '';
|
|
351
|
+
const cleanup = () => {
|
|
352
|
+
socket.removeListener('data', onData);
|
|
353
|
+
socket.removeListener('error', onError);
|
|
354
|
+
socket.removeListener('close', onClose);
|
|
355
|
+
clearTimeout(timer);
|
|
356
|
+
};
|
|
357
|
+
const onData = (chunk) => {
|
|
358
|
+
buffer += typeof chunk === 'string' ? chunk : chunk.toString('utf8');
|
|
359
|
+
const idx = buffer.indexOf('\n');
|
|
360
|
+
if (idx === -1) {
|
|
361
|
+
if (buffer.length > daemon_1.MAX_HELLO_LINE_BYTES) {
|
|
362
|
+
cleanup();
|
|
363
|
+
reject(new Error('daemon hello line exceeded size limit'));
|
|
364
|
+
}
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
const line = buffer.slice(0, idx);
|
|
368
|
+
// Re-emit anything past the newline so the pipe-stage sees it.
|
|
369
|
+
const tail = buffer.slice(idx + 1);
|
|
370
|
+
cleanup();
|
|
371
|
+
if (tail.length > 0) {
|
|
372
|
+
// Push back via unshift — Node's net.Socket supports it on readable streams.
|
|
373
|
+
socket.unshift(tail);
|
|
374
|
+
}
|
|
375
|
+
try {
|
|
376
|
+
const parsed = JSON.parse(line);
|
|
377
|
+
if (typeof parsed.codegraph !== 'string' || typeof parsed.pid !== 'number') {
|
|
378
|
+
reject(new Error('daemon hello missing required fields'));
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
resolve(parsed);
|
|
382
|
+
}
|
|
383
|
+
catch (err) {
|
|
384
|
+
reject(new Error(`daemon hello not JSON: ${err instanceof Error ? err.message : String(err)}`));
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
const onError = (err) => { cleanup(); reject(err); };
|
|
388
|
+
const onClose = () => { cleanup(); reject(new Error('daemon closed connection before hello')); };
|
|
389
|
+
const timer = setTimeout(() => {
|
|
390
|
+
cleanup();
|
|
391
|
+
reject(new Error('timed out waiting for daemon hello'));
|
|
392
|
+
}, 3000);
|
|
393
|
+
timer.unref?.();
|
|
394
|
+
socket.on('data', onData);
|
|
395
|
+
socket.on('error', onError);
|
|
396
|
+
socket.on('close', onClose);
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Pipe stdin → socket and socket → stdout. Resolves once either end closes
|
|
401
|
+
* so the process can exit. Note: we deliberately do NOT use
|
|
402
|
+
* `process.stdin.pipe(socket)` because pipe propagates 'end' onto the
|
|
403
|
+
* downstream, which would close the socket prematurely if stdin happens to
|
|
404
|
+
* end early — the MCP spec allows it to stay open across reconnects.
|
|
405
|
+
*/
|
|
406
|
+
function pipeUntilClose(socket) {
|
|
407
|
+
return new Promise((resolve) => {
|
|
408
|
+
let resolved = false;
|
|
409
|
+
const done = () => { if (!resolved) {
|
|
410
|
+
resolved = true;
|
|
411
|
+
resolve();
|
|
412
|
+
} };
|
|
413
|
+
process.stdin.on('data', (chunk) => {
|
|
414
|
+
try {
|
|
415
|
+
socket.write(chunk);
|
|
416
|
+
}
|
|
417
|
+
catch { /* socket may have errored — close path catches it */ }
|
|
418
|
+
});
|
|
419
|
+
process.stdin.on('end', () => {
|
|
420
|
+
try {
|
|
421
|
+
socket.end();
|
|
422
|
+
}
|
|
423
|
+
catch { /* ignore */ }
|
|
424
|
+
done();
|
|
425
|
+
});
|
|
426
|
+
process.stdin.on('close', () => {
|
|
427
|
+
try {
|
|
428
|
+
socket.destroy();
|
|
429
|
+
}
|
|
430
|
+
catch { /* ignore */ }
|
|
431
|
+
done();
|
|
432
|
+
});
|
|
433
|
+
socket.on('data', (chunk) => {
|
|
434
|
+
try {
|
|
435
|
+
process.stdout.write(chunk);
|
|
436
|
+
}
|
|
437
|
+
catch { /* ignore */ }
|
|
438
|
+
});
|
|
439
|
+
socket.on('end', () => done());
|
|
440
|
+
socket.on('close', () => done());
|
|
441
|
+
socket.on('error', (err) => {
|
|
442
|
+
process.stderr.write(`[CodeGraph MCP] daemon socket error: ${err.message}\n`);
|
|
443
|
+
done();
|
|
444
|
+
});
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* PPID watchdog mirroring the one in `MCPServer.start` — kills the proxy if
|
|
449
|
+
* the MCP host (or its proxy of a host, see HOST_PPID_ENV) goes away without
|
|
450
|
+
* closing stdin. Issue #277 documents why we can't rely on stdin EOF on
|
|
451
|
+
* Linux: the parent may be SIGKILL'd and reparenting doesn't close pipes.
|
|
452
|
+
*
|
|
453
|
+
* The proxy's "kill" is just a socket close + process.exit — no SQLite or
|
|
454
|
+
* watchers to clean up, so this is cheap.
|
|
455
|
+
*/
|
|
456
|
+
function startPpidWatchdog(socket) {
|
|
457
|
+
const pollMs = parsePollMs(process.env.CODEGRAPH_PPID_POLL_MS);
|
|
458
|
+
if (pollMs <= 0)
|
|
459
|
+
return;
|
|
460
|
+
const originalPpid = process.ppid;
|
|
461
|
+
const hostPpid = parseHostPpid(process.env[wasm_runtime_flags_1.HOST_PPID_ENV]);
|
|
462
|
+
const timer = setInterval(() => {
|
|
463
|
+
const current = process.ppid;
|
|
464
|
+
const ppidChanged = current !== originalPpid;
|
|
465
|
+
const hostGone = hostPpid !== null && !isProcessAliveLocal(hostPpid);
|
|
466
|
+
if (ppidChanged || hostGone) {
|
|
467
|
+
const reason = ppidChanged
|
|
468
|
+
? `ppid ${originalPpid} -> ${current}`
|
|
469
|
+
: `host pid ${hostPpid} exited`;
|
|
470
|
+
process.stderr.write(`[CodeGraph MCP] Parent process exited (${reason}); shutting down.\n`);
|
|
471
|
+
try {
|
|
472
|
+
socket.destroy();
|
|
473
|
+
}
|
|
474
|
+
catch { /* ignore */ }
|
|
475
|
+
process.exit(0);
|
|
476
|
+
}
|
|
477
|
+
}, pollMs);
|
|
478
|
+
timer.unref?.();
|
|
479
|
+
}
|
|
480
|
+
function parsePollMs(raw) {
|
|
481
|
+
if (raw === undefined || raw === '')
|
|
482
|
+
return DEFAULT_PPID_POLL_MS;
|
|
483
|
+
const parsed = Number(raw);
|
|
484
|
+
if (!Number.isFinite(parsed))
|
|
485
|
+
return DEFAULT_PPID_POLL_MS;
|
|
486
|
+
if (parsed < 0)
|
|
487
|
+
return DEFAULT_PPID_POLL_MS;
|
|
488
|
+
return Math.floor(parsed);
|
|
489
|
+
}
|
|
490
|
+
function parseHostPpid(raw) {
|
|
491
|
+
if (raw === undefined || raw === '')
|
|
492
|
+
return null;
|
|
493
|
+
const parsed = Number(raw);
|
|
494
|
+
if (!Number.isInteger(parsed) || parsed <= 1)
|
|
495
|
+
return null;
|
|
496
|
+
return parsed;
|
|
497
|
+
}
|
|
498
|
+
function isProcessAliveLocal(pid) {
|
|
499
|
+
try {
|
|
500
|
+
process.kill(pid, 0);
|
|
501
|
+
return true;
|
|
502
|
+
}
|
|
503
|
+
catch (err) {
|
|
504
|
+
const e = err;
|
|
505
|
+
if (e.code === 'EPERM')
|
|
506
|
+
return true;
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
//# sourceMappingURL=proxy.js.map
|