@opengsd/gsd-pi 1.9.0 → 1.10.0-dev.a5e42e99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/README.md +10 -9
  2. package/dist/headless.js +2 -1
  3. package/dist/resources/.managed-resources-content-hash +1 -1
  4. package/dist/resources/GSD-WORKFLOW.md +2 -2
  5. package/dist/resources/extensions/gsd/artifact-verification.js +3 -4
  6. package/dist/resources/extensions/gsd/auto/loop.js +24 -4
  7. package/dist/resources/extensions/gsd/auto/run-unit.js +19 -1
  8. package/dist/resources/extensions/gsd/auto/unit-phase.js +37 -5
  9. package/dist/resources/extensions/gsd/auto-artifact-paths.js +14 -8
  10. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -0
  11. package/dist/resources/extensions/gsd/auto-model-selection.js +1 -0
  12. package/dist/resources/extensions/gsd/auto-prompts.js +102 -21
  13. package/dist/resources/extensions/gsd/auto-recovery.js +10 -5
  14. package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -5
  15. package/dist/resources/extensions/gsd/auto-start.js +30 -10
  16. package/dist/resources/extensions/gsd/auto-tool-tracking.js +40 -0
  17. package/dist/resources/extensions/gsd/auto-verification.js +25 -12
  18. package/dist/resources/extensions/gsd/auto-worktree-cleanup.js +4 -0
  19. package/dist/resources/extensions/gsd/auto-worktree-sync.js +7 -3
  20. package/dist/resources/extensions/gsd/auto-worktree-teardown.js +1 -1
  21. package/dist/resources/extensions/gsd/auto.js +15 -5
  22. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -0
  23. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +33 -7
  24. package/dist/resources/extensions/gsd/bootstrap/system-context.js +10 -3
  25. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +7 -26
  26. package/dist/resources/extensions/gsd/commands-verdict.js +10 -9
  27. package/dist/resources/extensions/gsd/compat/compat-marker.js +80 -5
  28. package/dist/resources/extensions/gsd/constants.js +12 -13
  29. package/dist/resources/extensions/gsd/context-masker.js +97 -21
  30. package/dist/resources/extensions/gsd/db/engine.js +5 -2
  31. package/dist/resources/extensions/gsd/docs/preferences-reference.md +33 -2
  32. package/dist/resources/extensions/gsd/doctor-engine-checks.js +40 -12
  33. package/dist/resources/extensions/gsd/error-classifier.js +12 -2
  34. package/dist/resources/extensions/gsd/exec-sandbox.js +1 -0
  35. package/dist/resources/extensions/gsd/flat-phase-migration.js +12 -0
  36. package/dist/resources/extensions/gsd/git-service.js +19 -7
  37. package/dist/resources/extensions/gsd/gsd-db.js +75 -31
  38. package/dist/resources/extensions/gsd/guided-flow.js +11 -5
  39. package/dist/resources/extensions/gsd/markdown-renderer.js +5 -21
  40. package/dist/resources/extensions/gsd/md-importer.js +5 -6
  41. package/dist/resources/extensions/gsd/model-cost-table.js +6 -1
  42. package/dist/resources/extensions/gsd/model-router.js +16 -0
  43. package/dist/resources/extensions/gsd/paths.js +66 -15
  44. package/dist/resources/extensions/gsd/planning-subagent-policy.js +37 -0
  45. package/dist/resources/extensions/gsd/planning-subagent-registry.js +33 -0
  46. package/dist/resources/extensions/gsd/preferences-models.js +50 -10
  47. package/dist/resources/extensions/gsd/preferences-types.js +6 -0
  48. package/dist/resources/extensions/gsd/preferences-validation.js +86 -4
  49. package/dist/resources/extensions/gsd/preferences.js +24 -0
  50. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +5 -5
  51. package/dist/resources/extensions/gsd/provider-payload-policy.js +16 -5
  52. package/dist/resources/extensions/gsd/safety/destructive-guard.js +1 -1
  53. package/dist/resources/extensions/gsd/skill-activation.js +17 -3
  54. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +98 -2
  55. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +4 -1
  56. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +5 -2
  57. package/dist/resources/extensions/gsd/stop-notice.js +9 -0
  58. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +8 -0
  59. package/dist/resources/extensions/gsd/tools/complete-task.js +12 -5
  60. package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -1
  61. package/dist/resources/extensions/gsd/tools/reopen-milestone.js +14 -5
  62. package/dist/resources/extensions/gsd/tools/reopen-slice.js +15 -5
  63. package/dist/resources/extensions/gsd/tools/reopen-task.js +16 -10
  64. package/dist/resources/extensions/gsd/unit-context-composer.js +28 -5
  65. package/dist/resources/extensions/gsd/verification-evidence.js +5 -3
  66. package/dist/resources/extensions/gsd/workflow-projections.js +2 -3
  67. package/dist/resources/extensions/gsd/workspace.js +2 -1
  68. package/dist/resources/extensions/gsd/worktree-state-projection.js +20 -18
  69. package/dist/resources/extensions/ollama/ollama-chat-provider.js +2 -2
  70. package/dist/resources/extensions/shared/interview-ui.js +43 -6
  71. package/dist/resources/extensions/subagent/index.js +1 -1
  72. package/dist/startup-model-validation.d.ts +1 -1
  73. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  74. package/dist/web/standalone/.next/BUILD_ID +1 -1
  75. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  76. package/dist/web/standalone/.next/build-manifest.json +3 -3
  77. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  78. package/dist/web/standalone/.next/required-server-files.json +3 -3
  79. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  80. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  81. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  82. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  85. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  90. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  91. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  92. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  93. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  94. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  96. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  101. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  106. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  118. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  140. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  150. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  156. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  172. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  176. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/index.html +1 -1
  186. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  187. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  188. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  189. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  190. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  191. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  192. package/dist/web/standalone/.next/server/app/page.js +2 -2
  193. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  195. package/dist/web/standalone/.next/server/chunks/1991.js +2 -2
  196. package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
  197. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  198. package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
  199. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  200. package/dist/web/standalone/.next/server/middleware.js +3 -3
  201. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  202. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  203. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  204. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
  205. package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
  206. package/dist/web/standalone/.next/static/chunks/app/page-72a856634ad14c10.js +1 -0
  207. package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
  208. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
  209. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  210. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  211. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  212. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  213. package/dist/web/standalone/server.js +1 -1
  214. package/integrations/hermes/open_gsd_hermes/gsd_client.py +1 -1
  215. package/integrations/hermes/pyproject.toml +1 -1
  216. package/package.json +8 -6
  217. package/packages/cloud-mcp-gateway/package.json +2 -2
  218. package/packages/contracts/dist/rpc.d.ts +1 -1
  219. package/packages/contracts/dist/rpc.d.ts.map +1 -1
  220. package/packages/contracts/dist/rpc.js +1 -1
  221. package/packages/contracts/dist/rpc.js.map +1 -1
  222. package/packages/contracts/dist/rpc.test.js +1 -1
  223. package/packages/contracts/dist/rpc.test.js.map +1 -1
  224. package/packages/contracts/package.json +1 -1
  225. package/packages/daemon/package.json +4 -4
  226. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +1 -1
  227. package/packages/gsd-agent-core/dist/compaction/compaction.js +36 -4
  228. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +1 -1
  229. package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
  230. package/packages/gsd-agent-core/dist/sdk.js +1 -0
  231. package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
  232. package/packages/gsd-agent-core/package.json +5 -5
  233. package/packages/gsd-agent-modes/dist/cli/args.js +2 -2
  234. package/packages/gsd-agent-modes/dist/cli/args.js.map +1 -1
  235. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  236. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +1 -0
  237. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
  238. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  239. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +1 -0
  240. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  241. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  242. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +1 -0
  243. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  244. package/packages/gsd-agent-modes/package.json +7 -7
  245. package/packages/gsd-cloud/README.md +21 -5
  246. package/packages/gsd-cloud/dist/background-cli.test.d.ts +2 -0
  247. package/packages/gsd-cloud/dist/background-cli.test.d.ts.map +1 -0
  248. package/packages/gsd-cloud/dist/background-cli.test.js +325 -0
  249. package/packages/gsd-cloud/dist/background-cli.test.js.map +1 -0
  250. package/packages/gsd-cloud/dist/cli.d.ts.map +1 -1
  251. package/packages/gsd-cloud/dist/cli.js +146 -16
  252. package/packages/gsd-cloud/dist/cli.js.map +1 -1
  253. package/packages/gsd-cloud/dist/cloud-config.d.ts +1 -1
  254. package/packages/gsd-cloud/dist/cloud-config.d.ts.map +1 -1
  255. package/packages/gsd-cloud/dist/cloud-config.js +7 -1
  256. package/packages/gsd-cloud/dist/cloud-config.js.map +1 -1
  257. package/packages/gsd-cloud/dist/cloud-runtime.d.ts +7 -4
  258. package/packages/gsd-cloud/dist/cloud-runtime.d.ts.map +1 -1
  259. package/packages/gsd-cloud/dist/cloud-runtime.js +115 -31
  260. package/packages/gsd-cloud/dist/cloud-runtime.js.map +1 -1
  261. package/packages/gsd-cloud/dist/cloud-runtime.test.js +224 -59
  262. package/packages/gsd-cloud/dist/cloud-runtime.test.js.map +1 -1
  263. package/packages/gsd-cloud/dist/runtime-artifacts.d.ts +3 -0
  264. package/packages/gsd-cloud/dist/runtime-artifacts.d.ts.map +1 -0
  265. package/packages/gsd-cloud/dist/runtime-artifacts.js +36 -0
  266. package/packages/gsd-cloud/dist/runtime-artifacts.js.map +1 -0
  267. package/packages/gsd-cloud/dist/runtime-process.d.ts +32 -0
  268. package/packages/gsd-cloud/dist/runtime-process.d.ts.map +1 -0
  269. package/packages/gsd-cloud/dist/runtime-process.js +640 -0
  270. package/packages/gsd-cloud/dist/runtime-process.js.map +1 -0
  271. package/packages/gsd-cloud/dist/runtime-process.test.d.ts +2 -0
  272. package/packages/gsd-cloud/dist/runtime-process.test.d.ts.map +1 -0
  273. package/packages/gsd-cloud/dist/runtime-process.test.js +543 -0
  274. package/packages/gsd-cloud/dist/runtime-process.test.js.map +1 -0
  275. package/packages/gsd-cloud/dist/runtime-telemetry.d.ts +117 -0
  276. package/packages/gsd-cloud/dist/runtime-telemetry.d.ts.map +1 -0
  277. package/packages/gsd-cloud/dist/runtime-telemetry.js +291 -0
  278. package/packages/gsd-cloud/dist/runtime-telemetry.js.map +1 -0
  279. package/packages/gsd-cloud/dist/runtime-telemetry.test.d.ts +2 -0
  280. package/packages/gsd-cloud/dist/runtime-telemetry.test.d.ts.map +1 -0
  281. package/packages/gsd-cloud/dist/runtime-telemetry.test.js +434 -0
  282. package/packages/gsd-cloud/dist/runtime-telemetry.test.js.map +1 -0
  283. package/packages/gsd-cloud/package.json +2 -2
  284. package/packages/mcp-server/README.md +7 -2
  285. package/packages/mcp-server/dist/cli-runner.d.ts +3 -0
  286. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
  287. package/packages/mcp-server/dist/cli-runner.js +119 -33
  288. package/packages/mcp-server/dist/cli-runner.js.map +1 -1
  289. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  290. package/packages/mcp-server/dist/server.js +5 -5
  291. package/packages/mcp-server/dist/server.js.map +1 -1
  292. package/packages/mcp-server/dist/workflow-tools.d.ts +4 -3
  293. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  294. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  295. package/packages/mcp-server/package.json +4 -4
  296. package/packages/native/package.json +1 -1
  297. package/packages/pi-agent-core/dist/agent.d.ts +5 -1
  298. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  299. package/packages/pi-agent-core/dist/agent.js +2 -0
  300. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  301. package/packages/pi-agent-core/dist/types.d.ts +2 -2
  302. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  303. package/packages/pi-agent-core/dist/types.js.map +1 -1
  304. package/packages/pi-agent-core/package.json +1 -1
  305. package/packages/pi-ai/dist/models.d.ts.map +1 -1
  306. package/packages/pi-ai/dist/models.generated.d.ts +187 -0
  307. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  308. package/packages/pi-ai/dist/models.generated.js +145 -0
  309. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  310. package/packages/pi-ai/dist/models.js +18 -6
  311. package/packages/pi-ai/dist/models.js.map +1 -1
  312. package/packages/pi-ai/dist/providers/amazon-bedrock.js +3 -2
  313. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  314. package/packages/pi-ai/dist/providers/anthropic.js +6 -1
  315. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  316. package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts +1 -1
  317. package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  318. package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  319. package/packages/pi-ai/dist/providers/google-vertex.js.map +1 -1
  320. package/packages/pi-ai/dist/providers/google.js.map +1 -1
  321. package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts +1 -1
  322. package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  323. package/packages/pi-ai/dist/providers/openai-codex-responses.js +1 -1
  324. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  325. package/packages/pi-ai/dist/providers/openai-completions.d.ts +1 -1
  326. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  327. package/packages/pi-ai/dist/providers/openai-completions.js +103 -0
  328. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  329. package/packages/pi-ai/dist/providers/openai-responses.d.ts +1 -1
  330. package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  331. package/packages/pi-ai/dist/providers/openai-responses.js +1 -1
  332. package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
  333. package/packages/pi-ai/dist/providers/simple-options.d.ts +1 -1
  334. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  335. package/packages/pi-ai/dist/providers/simple-options.js +1 -1
  336. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  337. package/packages/pi-ai/dist/types.d.ts +9 -1
  338. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  339. package/packages/pi-ai/dist/types.js.map +1 -1
  340. package/packages/pi-ai/package.json +1 -1
  341. package/packages/pi-coding-agent/dist/core/capability-patches.js +1 -1
  342. package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
  343. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  344. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -0
  345. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  346. package/packages/pi-coding-agent/dist/core/model-resolver.js +2 -2
  347. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  348. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +14 -4
  349. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  350. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  351. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  352. package/packages/pi-coding-agent/dist/core/skills.d.ts +5 -0
  353. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  354. package/packages/pi-coding-agent/dist/core/skills.js +54 -0
  355. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  356. package/packages/pi-coding-agent/dist/theme/theme.d.ts +1 -1
  357. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  358. package/packages/pi-coding-agent/dist/theme/theme.js +1 -0
  359. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  360. package/packages/pi-coding-agent/package.json +7 -7
  361. package/packages/pi-tui/package.json +2 -2
  362. package/packages/rpc-client/package.json +2 -2
  363. package/pkg/dist/theme/theme.d.ts +1 -1
  364. package/pkg/dist/theme/theme.d.ts.map +1 -1
  365. package/pkg/dist/theme/theme.js +1 -0
  366. package/pkg/dist/theme/theme.js.map +1 -1
  367. package/pkg/package.json +1 -1
  368. package/src/resources/GSD-WORKFLOW.md +2 -2
  369. package/src/resources/extensions/gsd/artifact-verification.ts +3 -8
  370. package/src/resources/extensions/gsd/auto/loop.ts +48 -4
  371. package/src/resources/extensions/gsd/auto/run-unit.ts +20 -1
  372. package/src/resources/extensions/gsd/auto/unit-phase.ts +41 -5
  373. package/src/resources/extensions/gsd/auto-artifact-paths.ts +14 -7
  374. package/src/resources/extensions/gsd/auto-dispatch.ts +1 -0
  375. package/src/resources/extensions/gsd/auto-model-selection.ts +1 -0
  376. package/src/resources/extensions/gsd/auto-prompts.ts +118 -19
  377. package/src/resources/extensions/gsd/auto-recovery.ts +10 -8
  378. package/src/resources/extensions/gsd/auto-runtime-state.ts +12 -7
  379. package/src/resources/extensions/gsd/auto-start.ts +32 -9
  380. package/src/resources/extensions/gsd/auto-tool-tracking.ts +56 -0
  381. package/src/resources/extensions/gsd/auto-verification.ts +46 -12
  382. package/src/resources/extensions/gsd/auto-worktree-cleanup.ts +4 -0
  383. package/src/resources/extensions/gsd/auto-worktree-sync.ts +10 -3
  384. package/src/resources/extensions/gsd/auto-worktree-teardown.ts +1 -1
  385. package/src/resources/extensions/gsd/auto.ts +20 -7
  386. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +1 -0
  387. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +41 -12
  388. package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -3
  389. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +10 -31
  390. package/src/resources/extensions/gsd/commands-verdict.ts +16 -9
  391. package/src/resources/extensions/gsd/compat/compat-marker.ts +99 -5
  392. package/src/resources/extensions/gsd/constants.ts +14 -13
  393. package/src/resources/extensions/gsd/context-masker.ts +98 -2
  394. package/src/resources/extensions/gsd/db/engine.ts +5 -2
  395. package/src/resources/extensions/gsd/docs/preferences-reference.md +33 -2
  396. package/src/resources/extensions/gsd/doctor-engine-checks.ts +45 -11
  397. package/src/resources/extensions/gsd/error-classifier.ts +13 -2
  398. package/src/resources/extensions/gsd/exec-sandbox.ts +1 -0
  399. package/src/resources/extensions/gsd/flat-phase-migration.ts +14 -0
  400. package/src/resources/extensions/gsd/git-service.ts +19 -6
  401. package/src/resources/extensions/gsd/gsd-db.ts +85 -33
  402. package/src/resources/extensions/gsd/guided-flow.ts +11 -4
  403. package/src/resources/extensions/gsd/markdown-renderer.ts +5 -23
  404. package/src/resources/extensions/gsd/md-importer.ts +5 -5
  405. package/src/resources/extensions/gsd/model-cost-table.ts +14 -1
  406. package/src/resources/extensions/gsd/model-router.ts +17 -0
  407. package/src/resources/extensions/gsd/paths.ts +73 -15
  408. package/src/resources/extensions/gsd/planning-subagent-policy.ts +58 -0
  409. package/src/resources/extensions/gsd/planning-subagent-registry.ts +45 -0
  410. package/src/resources/extensions/gsd/preferences-models.ts +54 -10
  411. package/src/resources/extensions/gsd/preferences-types.ts +26 -2
  412. package/src/resources/extensions/gsd/preferences-validation.ts +108 -3
  413. package/src/resources/extensions/gsd/preferences.ts +38 -0
  414. package/src/resources/extensions/gsd/prompts/validate-milestone.md +5 -5
  415. package/src/resources/extensions/gsd/provider-payload-policy.ts +18 -4
  416. package/src/resources/extensions/gsd/safety/destructive-guard.ts +1 -1
  417. package/src/resources/extensions/gsd/skill-activation.ts +17 -3
  418. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +132 -2
  419. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +4 -1
  420. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +4 -2
  421. package/src/resources/extensions/gsd/stop-notice.ts +11 -0
  422. package/src/resources/extensions/gsd/templates/PREFERENCES.md +8 -0
  423. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +7 -7
  424. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +264 -0
  425. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +39 -0
  426. package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +21 -1
  427. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +74 -1
  428. package/src/resources/extensions/gsd/tests/before-provider-context-management.test.ts +55 -0
  429. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +10 -0
  430. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +25 -0
  431. package/src/resources/extensions/gsd/tests/complete-task.test.ts +76 -1
  432. package/src/resources/extensions/gsd/tests/context-masker.test.ts +204 -8
  433. package/src/resources/extensions/gsd/tests/db-engine-cjs-compat.test.ts +12 -0
  434. package/src/resources/extensions/gsd/tests/db-tools-alias-suppression.test.ts +62 -0
  435. package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +33 -0
  436. package/src/resources/extensions/gsd/tests/destructive-guard.test.ts +14 -0
  437. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +147 -0
  438. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +33 -1
  439. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +38 -1
  440. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +8 -9
  441. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +20 -1
  442. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +32 -0
  443. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +22 -0
  444. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +13 -0
  445. package/src/resources/extensions/gsd/tests/integration/paths.test.ts +22 -4
  446. package/src/resources/extensions/gsd/tests/integration-branch-meta-location.test.ts +62 -0
  447. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +5 -5
  448. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +23 -0
  449. package/src/resources/extensions/gsd/tests/model-isolation.test.ts +55 -0
  450. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  451. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +7 -5
  452. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +24 -0
  453. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +38 -1
  454. package/src/resources/extensions/gsd/tests/preferences.test.ts +151 -0
  455. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +7 -0
  456. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +87 -0
  457. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +121 -1
  458. package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +39 -0
  459. package/src/resources/extensions/gsd/tests/register-hooks-loop-guard-auto.test.ts +105 -0
  460. package/src/resources/extensions/gsd/tests/service-tier.test.ts +4 -0
  461. package/src/resources/extensions/gsd/tests/single-writer-v3-tool-surface.test.ts +33 -7
  462. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -16
  463. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +52 -0
  464. package/src/resources/extensions/gsd/tests/stop-notice.test.ts +21 -1
  465. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +13 -7
  466. package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +14 -0
  467. package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
  468. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +19 -0
  469. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +8 -0
  470. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +39 -0
  471. package/src/resources/extensions/gsd/tests/validate-milestone-prompt-verification-classes.test.ts +7 -0
  472. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +12 -0
  473. package/src/resources/extensions/gsd/tests/workflow-authority-faults.test.ts +238 -0
  474. package/src/resources/extensions/gsd/tests/workflow-authority-fixture.test.ts +48 -0
  475. package/src/resources/extensions/gsd/tests/workflow-authority-fixture.ts +141 -0
  476. package/src/resources/extensions/gsd/tests/workflow-authority-projection-conflict.test.ts +177 -0
  477. package/src/resources/extensions/gsd/tests/workflow-fault-harness.test.ts +39 -0
  478. package/src/resources/extensions/gsd/tests/workflow-fault-harness.ts +72 -0
  479. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +4 -4
  480. package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +2 -2
  481. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +60 -0
  482. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +74 -0
  483. package/src/resources/extensions/gsd/tools/complete-task.ts +20 -5
  484. package/src/resources/extensions/gsd/tools/plan-slice.ts +5 -1
  485. package/src/resources/extensions/gsd/tools/reopen-milestone.ts +24 -5
  486. package/src/resources/extensions/gsd/tools/reopen-slice.ts +25 -5
  487. package/src/resources/extensions/gsd/tools/reopen-task.ts +23 -9
  488. package/src/resources/extensions/gsd/unit-context-composer.ts +34 -8
  489. package/src/resources/extensions/gsd/verification-evidence.ts +5 -2
  490. package/src/resources/extensions/gsd/workflow-projections.ts +2 -3
  491. package/src/resources/extensions/gsd/workspace.ts +2 -1
  492. package/src/resources/extensions/gsd/worktree-state-projection.ts +21 -24
  493. package/src/resources/extensions/ollama/ollama-chat-provider.ts +2 -2
  494. package/src/resources/extensions/ollama/tests/ollama-chat-provider-think.test.ts +4 -0
  495. package/src/resources/extensions/shared/interview-ui.ts +47 -8
  496. package/src/resources/extensions/shared/tests/interview-ui-border.test.ts +29 -0
  497. package/src/resources/extensions/subagent/index.ts +1 -1
  498. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
  499. package/dist/web/standalone/.next/static/chunks/app/page-bc4c723c6a19c6f0.js +0 -1
  500. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
  501. /package/dist/web/standalone/.next/static/{BE5XoklToI6lZjRzpXih8 → xwUaOqui04jIIFVsIBLiL}/_buildManifest.js +0 -0
  502. /package/dist/web/standalone/.next/static/{BE5XoklToI6lZjRzpXih8 → xwUaOqui04jIIFVsIBLiL}/_ssgManifest.js +0 -0
@@ -1,3 +1,4 @@
1
+ import { Worker } from 'node:worker_threads';
1
2
  import { SessionManager } from './session-manager.js';
2
3
  import { createMcpServer } from './server.js';
3
4
  import { loadStoredCredentialEnvKeys } from './tool-credentials.js';
@@ -10,17 +11,56 @@ const STDIN_IDLE_TIMEOUT_MS = 5 * 60 * 1000;
10
11
  const STDIN_IDLE_CHECK_INTERVAL_MS = 60 * 1000;
11
12
  const CLEANUP_STEP_TIMEOUT_MS = 2 * 1000;
12
13
  /**
13
- * Cadence for the ref-held parent-liveness monitor.
14
+ * Cadence for the worker-thread parent-liveness monitor.
14
15
  *
15
- * Separate from the `.unref()`'d idle watchdog: a process already pegged at
16
- * ~100% CPU starves its event loop, so the watchdog timer may never fire and a
17
- * spinning orphan lingers until the next spawn sweeps it. This monitor is
18
- * ref-held (NOT `.unref()`'d) so the libuv loop keeps scheduling it under load,
19
- * and it exits the process itself the moment the parent is gone — independent
20
- * of the external PID-registry sweep that only runs on the next launch. See
21
- * #783.
16
+ * Separate from the main-thread idle watchdog: a process pegged at ~100% CPU
17
+ * can starve the JS event loop, preventing timers and signal handlers from
18
+ * dispatching. The worker has its own event loop and hard-kills this process
19
+ * when the parent is gone and stdin has been idle long enough. See #1384.
22
20
  */
23
21
  const ORPHAN_PARENT_LOSS_CHECK_INTERVAL_MS = 10 * 1000;
22
+ const ORPHAN_MONITOR_WORKER_SOURCE = `
23
+ import { writeSync } from 'node:fs';
24
+ import { parentPort, workerData } from 'node:worker_threads';
25
+
26
+ const lastActivityMs = new BigInt64Array(workerData.lastActivityMsBuffer);
27
+ let stopped = false;
28
+
29
+ function parentGone() {
30
+ if (process.ppid !== workerData.initialParentPid) return true;
31
+ try {
32
+ process.kill(workerData.initialParentPid, 0);
33
+ return false;
34
+ } catch (err) {
35
+ return err && err.code === 'ESRCH';
36
+ }
37
+ }
38
+
39
+ function check() {
40
+ if (stopped) return;
41
+ const last = Number(Atomics.load(lastActivityMs, 0));
42
+ if (Date.now() - last <= workerData.idleTimeoutMs) return;
43
+ if (!parentGone()) return;
44
+ try {
45
+ writeSync(2, '[gsd-mcp-server] Parent process is gone and stdin is idle; hard-killing orphaned server\\n');
46
+ } catch {}
47
+ try {
48
+ process.kill(workerData.targetPid, 'SIGKILL');
49
+ } catch {
50
+ process.exit(0);
51
+ }
52
+ }
53
+
54
+ const timer = setInterval(check, workerData.checkIntervalMs);
55
+ parentPort?.on('message', (message) => {
56
+ if (message && message.type === 'stop') {
57
+ stopped = true;
58
+ clearInterval(timer);
59
+ process.exit(0);
60
+ }
61
+ });
62
+ check();
63
+ `;
24
64
  function createDefaultIsOrphaned(initialParentPid) {
25
65
  return () => {
26
66
  if (process.ppid !== initialParentPid)
@@ -34,6 +74,43 @@ function createDefaultIsOrphaned(initialParentPid) {
34
74
  }
35
75
  };
36
76
  }
77
+ function startWorkerOrphanMonitor(options) {
78
+ const worker = new Worker(ORPHAN_MONITOR_WORKER_SOURCE, {
79
+ eval: true,
80
+ workerData: {
81
+ initialParentPid: options.initialParentPid,
82
+ targetPid: options.targetPid,
83
+ lastActivityMsBuffer: options.lastActivityMsBuffer,
84
+ idleTimeoutMs: options.idleTimeoutMs,
85
+ checkIntervalMs: options.checkIntervalMs,
86
+ },
87
+ });
88
+ worker.unref();
89
+ worker.on('error', (err) => {
90
+ options.stderr.write(`[gsd-mcp-server] Orphan monitor failed: ${err instanceof Error ? err.message : String(err)}\n`);
91
+ });
92
+ return {
93
+ stop() {
94
+ worker.postMessage({ type: 'stop' });
95
+ void worker.terminate();
96
+ },
97
+ };
98
+ }
99
+ function startMainThreadOrphanMonitor(options) {
100
+ const interval = options.startInterval(() => {
101
+ if (!options.isOrphaned())
102
+ return;
103
+ if (options.idleMs() <= options.idleTimeoutMs)
104
+ return;
105
+ options.stderr.write(`[gsd-mcp-server] Parent process is gone; shutting down to avoid orphan spin\n`);
106
+ options.cleanup();
107
+ }, options.checkIntervalMs);
108
+ return {
109
+ stop() {
110
+ options.stopInterval(interval);
111
+ },
112
+ };
113
+ }
37
114
  async function importDefaultStdioServerTransport() {
38
115
  return import(`${MCP_PKG}/server/stdio.js`);
39
116
  }
@@ -48,8 +125,12 @@ export async function runMcpServerCli(options = {}) {
48
125
  const now = options.now ?? (() => Date.now());
49
126
  const startInterval = options.setInterval ?? setInterval;
50
127
  const stopInterval = options.clearInterval ?? clearInterval;
51
- const isOrphaned = options.isOrphaned ?? createDefaultIsOrphaned(process.ppid);
128
+ const initialParentPid = process.ppid;
129
+ const isOrphaned = options.isOrphaned ?? createDefaultIsOrphaned(initialParentPid);
52
130
  const cleanupStepTimeoutMs = options.cleanupStepTimeoutMs ?? CLEANUP_STEP_TIMEOUT_MS;
131
+ const stdinIdleTimeoutMs = options.stdinIdleTimeoutMs ?? STDIN_IDLE_TIMEOUT_MS;
132
+ const stdinIdleCheckIntervalMs = options.stdinIdleCheckIntervalMs ?? STDIN_IDLE_CHECK_INTERVAL_MS;
133
+ const orphanParentLossCheckIntervalMs = options.orphanParentLossCheckIntervalMs ?? ORPHAN_PARENT_LOSS_CHECK_INTERVAL_MS;
53
134
  const loadEnv = options.loadStoredCredentialEnvKeys ?? loadStoredCredentialEnvKeys;
54
135
  const registerInstance = options.registerMcpInstance ?? registerMcpInstance;
55
136
  const sweepOrphans = options.sweepProjectOrphanMcpServers ?? sweepProjectOrphanMcpServers;
@@ -65,6 +146,7 @@ export async function runMcpServerCli(options = {}) {
65
146
  let cleaningUp = false;
66
147
  let idleWatchdog;
67
148
  let orphanMonitor;
149
+ const lastActivityMs = new BigInt64Array(new SharedArrayBuffer(8));
68
150
  let trackedStdin;
69
151
  let sessionManager;
70
152
  let server;
@@ -92,8 +174,7 @@ export async function runMcpServerCli(options = {}) {
92
174
  async function stopRuntime() {
93
175
  if (idleWatchdog)
94
176
  stopInterval(idleWatchdog);
95
- if (orphanMonitor)
96
- stopInterval(orphanMonitor);
177
+ orphanMonitor?.stop();
97
178
  trackedStdin?.close();
98
179
  if (registered)
99
180
  unregisterInstance(projectDir);
@@ -124,33 +205,38 @@ export async function runMcpServerCli(options = {}) {
124
205
  sessionManager = createSessionManager();
125
206
  ({ server } = await createServer(sessionManager));
126
207
  const { StdioServerTransport } = await importTransport();
127
- trackedStdin = createActivityTrackingInput(stdin, now);
208
+ trackedStdin = createActivityTrackingInput(stdin, () => {
209
+ const current = now();
210
+ Atomics.store(lastActivityMs, 0, BigInt(Math.trunc(current)));
211
+ return current;
212
+ });
128
213
  const transport = new StdioServerTransport(trackedStdin.input, stdout);
129
214
  idleWatchdog = startInterval(() => {
130
- if (trackedStdin && now() - trackedStdin.lastActivityAt() > STDIN_IDLE_TIMEOUT_MS && isOrphaned()) {
131
- stderr.write(`[gsd-mcp-server] Idle stdin watchdog: no activity for ${STDIN_IDLE_TIMEOUT_MS / 1000}s and parent process is gone, shutting down\n`);
215
+ if (trackedStdin && now() - trackedStdin.lastActivityAt() > stdinIdleTimeoutMs && isOrphaned()) {
216
+ stderr.write(`[gsd-mcp-server] Idle stdin watchdog: no activity for ${stdinIdleTimeoutMs / 1000}s and parent process is gone, shutting down\n`);
132
217
  void cleanup();
133
218
  }
134
- }, STDIN_IDLE_CHECK_INTERVAL_MS);
219
+ }, stdinIdleCheckIntervalMs);
135
220
  idleWatchdog.unref();
136
- // Ref-held parent-liveness monitor (#783). The idle watchdog above is
137
- // `.unref()`'d, so a process pegged at ~100% CPU (e.g. a repeating throw
138
- // against a dead stdio pipe) starves its event loop and the watchdog never
139
- // fires — the orphan spins until the next launch sweeps it. This monitor is
140
- // NOT unref'd: the loop keeps scheduling it under load, so parent loss is
141
- // detected in seconds regardless of CPU state. It still requires the same
142
- // idle gate as the watchdog so an active session whose parent briefly
143
- // appears gone is not killed (#783 "stays alive when parent is gone but
144
- // stdin is still active").
145
- orphanMonitor = startInterval(() => {
146
- if (!isOrphaned())
147
- return;
148
- const idleMs = trackedStdin ? now() - trackedStdin.lastActivityAt() : 0;
149
- if (idleMs <= STDIN_IDLE_TIMEOUT_MS)
150
- return;
151
- stderr.write(`[gsd-mcp-server] Parent process is gone; shutting down to avoid orphan spin\n`);
152
- void cleanup();
153
- }, ORPHAN_PARENT_LOSS_CHECK_INTERVAL_MS);
221
+ orphanMonitor = options.isOrphaned === undefined
222
+ ? startWorkerOrphanMonitor({
223
+ initialParentPid,
224
+ targetPid: process.pid,
225
+ lastActivityMsBuffer: lastActivityMs.buffer,
226
+ idleTimeoutMs: stdinIdleTimeoutMs,
227
+ checkIntervalMs: orphanParentLossCheckIntervalMs,
228
+ stderr,
229
+ })
230
+ : startMainThreadOrphanMonitor({
231
+ startInterval,
232
+ stopInterval,
233
+ isOrphaned,
234
+ idleMs: () => trackedStdin ? now() - trackedStdin.lastActivityAt() : 0,
235
+ idleTimeoutMs: stdinIdleTimeoutMs,
236
+ checkIntervalMs: orphanParentLossCheckIntervalMs,
237
+ stderr,
238
+ cleanup: () => void cleanup(),
239
+ });
154
240
  // Fail closed (ADR-036): warm the executor / write-gate bridges BEFORE
155
241
  // connecting the transport. If a bridge is broken we must not advertise the
156
242
  // workflow tool surface — a rejection here propagates to the catch below so
@@ -1 +1 @@
1
- {"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../src/cli-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Readable, Writable } from 'node:stream';\n\nimport { SessionManager } from './session-manager.js';\nimport { createMcpServer } from './server.js';\nimport { loadStoredCredentialEnvKeys } from './tool-credentials.js';\nimport { warmWorkflowToolBridges } from './workflow-tools.js';\nimport { isMcpProbeSession } from './probe-mode.js';\nimport {\n registerMcpInstance,\n sweepProjectOrphanMcpServers,\n unregisterMcpInstance,\n} from './pid-registry.js';\nimport { createActivityTrackingInput, type ActivityTrackingInput } from './stdio-watchdog.js';\n\nconst MCP_PKG = '@modelcontextprotocol/sdk';\n\nconst STDIN_IDLE_TIMEOUT_MS = 5 * 60 * 1000;\nconst STDIN_IDLE_CHECK_INTERVAL_MS = 60 * 1000;\nconst CLEANUP_STEP_TIMEOUT_MS = 2 * 1000;\n\n/**\n * Cadence for the ref-held parent-liveness monitor.\n *\n * Separate from the `.unref()`'d idle watchdog: a process already pegged at\n * ~100% CPU starves its event loop, so the watchdog timer may never fire and a\n * spinning orphan lingers until the next spawn sweeps it. This monitor is\n * ref-held (NOT `.unref()`'d) so the libuv loop keeps scheduling it under load,\n * and it exits the process itself the moment the parent is gone — independent\n * of the external PID-registry sweep that only runs on the next launch. See\n * #783.\n */\nconst ORPHAN_PARENT_LOSS_CHECK_INTERVAL_MS = 10 * 1000;\n\ninterface SessionManagerLike {\n cleanup(): Promise<void>;\n}\n\ninterface McpServerLike {\n connect(transport: unknown): Promise<void>;\n close(): Promise<void>;\n}\n\ninterface StdioTransportConstructor {\n new(input?: Readable, output?: Writable): unknown;\n}\n\nexport interface RunMcpServerCliOptions {\n cwd?: () => string;\n env?: NodeJS.ProcessEnv;\n exit?: (code: number) => never;\n loadStoredCredentialEnvKeys?: () => void;\n registerMcpInstance?: (projectDir: string) => boolean | void;\n sweepProjectOrphanMcpServers?: (projectDir: string) => void;\n unregisterMcpInstance?: (projectDir: string) => void;\n createSessionManager?: () => SessionManagerLike;\n createMcpServer?: (sessionManager: SessionManagerLike) => Promise<{ server: McpServerLike }>;\n importStdioServerTransport?: () => Promise<{ StdioServerTransport: StdioTransportConstructor }>;\n warmWorkflowToolBridges?: () => Promise<unknown> | unknown;\n stdin?: Readable;\n stdout?: Writable;\n stderr?: Writable;\n onSignal?: (signal: NodeJS.Signals, listener: () => void) => void;\n now?: () => number;\n setInterval?: typeof setInterval;\n clearInterval?: typeof clearInterval;\n isOrphaned?: () => boolean;\n cleanupStepTimeoutMs?: number;\n}\n\nfunction createDefaultIsOrphaned(initialParentPid: number): () => boolean {\n return () => {\n if (process.ppid !== initialParentPid) return true;\n try {\n process.kill(initialParentPid, 0);\n return false;\n } catch (err) {\n return (err as NodeJS.ErrnoException).code === 'ESRCH';\n }\n };\n}\n\nasync function importDefaultStdioServerTransport(): Promise<{ StdioServerTransport: StdioTransportConstructor }> {\n return import(`${MCP_PKG}/server/stdio.js`) as Promise<{ StdioServerTransport: StdioTransportConstructor }>;\n}\n\nexport async function runMcpServerCli(options: RunMcpServerCliOptions = {}): Promise<void> {\n const cwd = options.cwd ?? (() => process.cwd());\n const env = options.env ?? process.env;\n const exit = options.exit ?? ((code: number): never => process.exit(code));\n const stdin = options.stdin ?? process.stdin;\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n const onSignal = options.onSignal ?? ((signal, listener) => process.on(signal, listener));\n const now = options.now ?? (() => Date.now());\n const startInterval = options.setInterval ?? setInterval;\n const stopInterval = options.clearInterval ?? clearInterval;\n const isOrphaned = options.isOrphaned ?? createDefaultIsOrphaned(process.ppid);\n const cleanupStepTimeoutMs = options.cleanupStepTimeoutMs ?? CLEANUP_STEP_TIMEOUT_MS;\n const loadEnv = options.loadStoredCredentialEnvKeys ?? loadStoredCredentialEnvKeys;\n const registerInstance = options.registerMcpInstance ?? registerMcpInstance;\n const sweepOrphans = options.sweepProjectOrphanMcpServers ?? sweepProjectOrphanMcpServers;\n const unregisterInstance = options.unregisterMcpInstance ?? unregisterMcpInstance;\n const createSessionManager = options.createSessionManager ?? (() => new SessionManager());\n const createServer = options.createMcpServer ?? (\n async (manager: SessionManagerLike) => createMcpServer(manager as SessionManager)\n );\n const importTransport = options.importStdioServerTransport ?? importDefaultStdioServerTransport;\n const warmBridges = options.warmWorkflowToolBridges ?? warmWorkflowToolBridges;\n\n loadEnv();\n\n const projectDir = env.GSD_WORKFLOW_PROJECT_ROOT || cwd();\n const probeSession = isMcpProbeSession(env);\n let registered = false;\n let cleaningUp = false;\n let idleWatchdog: ReturnType<typeof setInterval> | undefined;\n let orphanMonitor: ReturnType<typeof setInterval> | undefined;\n let trackedStdin: ActivityTrackingInput | undefined;\n let sessionManager: SessionManagerLike | undefined;\n let server: McpServerLike | undefined;\n\n async function runCleanupStep(label: string, step: () => Promise<void> | void): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n Promise.resolve().then(step),\n new Promise<void>((resolve) => {\n timeout = setTimeout(() => {\n stderr.write(`[gsd-mcp-server] Cleanup step timed out: ${label}\\n`);\n resolve();\n }, cleanupStepTimeoutMs);\n timeout.unref();\n }),\n ]);\n } catch {\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n }\n\n async function stopRuntime(): Promise<void> {\n if (idleWatchdog) stopInterval(idleWatchdog);\n if (orphanMonitor) stopInterval(orphanMonitor);\n trackedStdin?.close();\n if (registered) unregisterInstance(projectDir);\n await runCleanupStep('session manager cleanup', () => sessionManager?.cleanup());\n await runCleanupStep('server close', () => server?.close());\n }\n\n async function cleanup(code = 0): Promise<void> {\n if (cleaningUp) return;\n cleaningUp = true;\n stderr.write('[gsd-mcp-server] Shutting down...\\n');\n await stopRuntime();\n exit(code);\n }\n\n onSignal('SIGTERM', () => void cleanup());\n onSignal('SIGINT', () => void cleanup());\n stdin.once('end', () => void cleanup());\n stdin.once('close', () => void cleanup());\n stdin.once('error', () => void cleanup(1));\n\n try {\n if (!probeSession) {\n sweepOrphans(projectDir);\n if (registerInstance(projectDir) === false) {\n throw new Error('refusing to start: existing MCP server PID could not be verified');\n }\n registered = true;\n }\n\n sessionManager = createSessionManager();\n ({ server } = await createServer(sessionManager));\n\n const { StdioServerTransport } = await importTransport();\n trackedStdin = createActivityTrackingInput(stdin, now);\n const transport = new StdioServerTransport(trackedStdin.input, stdout);\n\n idleWatchdog = startInterval(() => {\n if (trackedStdin && now() - trackedStdin.lastActivityAt() > STDIN_IDLE_TIMEOUT_MS && isOrphaned()) {\n stderr.write(\n `[gsd-mcp-server] Idle stdin watchdog: no activity for ${STDIN_IDLE_TIMEOUT_MS / 1000}s and parent process is gone, shutting down\\n`,\n );\n void cleanup();\n }\n }, STDIN_IDLE_CHECK_INTERVAL_MS);\n idleWatchdog.unref();\n\n // Ref-held parent-liveness monitor (#783). The idle watchdog above is\n // `.unref()`'d, so a process pegged at ~100% CPU (e.g. a repeating throw\n // against a dead stdio pipe) starves its event loop and the watchdog never\n // fires — the orphan spins until the next launch sweeps it. This monitor is\n // NOT unref'd: the loop keeps scheduling it under load, so parent loss is\n // detected in seconds regardless of CPU state. It still requires the same\n // idle gate as the watchdog so an active session whose parent briefly\n // appears gone is not killed (#783 \"stays alive when parent is gone but\n // stdin is still active\").\n orphanMonitor = startInterval(() => {\n if (!isOrphaned()) return;\n const idleMs = trackedStdin ? now() - trackedStdin.lastActivityAt() : 0;\n if (idleMs <= STDIN_IDLE_TIMEOUT_MS) return;\n stderr.write(\n `[gsd-mcp-server] Parent process is gone; shutting down to avoid orphan spin\\n`,\n );\n void cleanup();\n }, ORPHAN_PARENT_LOSS_CHECK_INTERVAL_MS);\n\n // Fail closed (ADR-036): warm the executor / write-gate bridges BEFORE\n // connecting the transport. If a bridge is broken we must not advertise the\n // workflow tool surface — a rejection here propagates to the catch below so\n // startup aborts and the client never sees tools that would error on first\n // call. A healthy warm-up pre-pays the bridge import so the first real tool\n // call stays fast.\n await warmBridges();\n stderr.write('[gsd-mcp-server] workflow bridges ready\\n');\n\n await server.connect(transport);\n stderr.write('[gsd-mcp-server] MCP server started on stdio\\n');\n } catch (err) {\n stderr.write(\n `[gsd-mcp-server] Fatal: failed to start — ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n await cleanup(1);\n }\n}\n"]}
1
+ {"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../src/cli-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAA8B,MAAM,qBAAqB,CAAC;AAE9F,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAE5C,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5C,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/C,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,oCAAoC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCpC,CAAC;AA6CF,SAAS,uBAAuB,CAAC,gBAAwB;IACvD,OAAO,GAAG,EAAE;QACV,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACnD,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAQ,GAA6B,CAAC,IAAI,KAAK,OAAO,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAOjC;IACC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,4BAA4B,EAAE;QACtD,IAAI,EAAE,IAAI;QACV,UAAU,EAAE;YACV,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;YAClD,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC;KACF,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAChG,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI;YACF,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACrC,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,OASrC;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE;QAC1C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAAE,OAAO;QAClC,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,aAAa;YAAE,OAAO;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+EAA+E,CAChF,CAAC;QACF,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5B,OAAO;QACL,IAAI;YACF,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iCAAiC;IAC9C,OAAO,MAAM,CAAC,GAAG,OAAO,kBAAkB,CAAiE,CAAC;AAC9G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkC,EAAE;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,IAAY,EAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1F,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC;IAC5D,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,uBAAuB,CAAC;IACrF,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,qBAAqB,CAAC;IAC/E,MAAM,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,IAAI,4BAA4B,CAAC;IAClG,MAAM,+BAA+B,GAAG,OAAO,CAAC,+BAA+B,IAAI,oCAAoC,CAAC;IACxH,MAAM,OAAO,GAAG,OAAO,CAAC,2BAA2B,IAAI,2BAA2B,CAAC;IACnF,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,IAAI,mBAAmB,CAAC;IAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,4BAA4B,IAAI,4BAA4B,CAAC;IAC1F,MAAM,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,IAAI,qBAAqB,CAAC;IAClF,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IAC1F,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,IAAI,CAC9C,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,eAAe,CAAC,OAAyB,CAAC,CAClF,CAAC;IACF,MAAM,eAAe,GAAG,OAAO,CAAC,0BAA0B,IAAI,iCAAiC,CAAC;IAChG,MAAM,WAAW,GAAG,OAAO,CAAC,uBAAuB,IAAI,uBAAuB,CAAC;IAE/E,OAAO,EAAE,CAAC;IAEV,MAAM,UAAU,GAAG,GAAG,CAAC,yBAAyB,IAAI,GAAG,EAAE,CAAC;IAC1D,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,YAAwD,CAAC;IAC7D,IAAI,aAA8C,CAAC;IACnD,MAAM,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,YAA+C,CAAC;IACpD,IAAI,cAA8C,CAAC;IACnD,IAAI,MAAiC,CAAC;IAEtC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,IAAgC;QAC3E,IAAI,OAAkD,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC5B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;wBACxB,MAAM,CAAC,KAAK,CAAC,4CAA4C,KAAK,IAAI,CAAC,CAAC;wBACpE,OAAO,EAAE,CAAC;oBACZ,CAAC,EAAE,oBAAoB,CAAC,CAAC;oBACzB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;QACT,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO;gBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK,UAAU,WAAW;QACxB,IAAI,YAAY;YAAE,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7C,aAAa,EAAE,IAAI,EAAE,CAAC;QACtB,YAAY,EAAE,KAAK,EAAE,CAAC;QACtB,IAAI,UAAU;YAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,cAAc,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;QACjF,MAAM,cAAc,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,IAAI,GAAG,CAAC;QAC7B,IAAI,UAAU;YAAE,OAAO;QACvB,UAAU,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACpD,MAAM,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,CAAC;IAED,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,CAAC,UAAU,CAAC,CAAC;YACzB,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACtF,CAAC;YACD,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,cAAc,GAAG,oBAAoB,EAAE,CAAC;QACxC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;QAElD,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QACzD,YAAY,GAAG,2BAA2B,CAAC,KAAK,EAAE,GAAG,EAAE;YACrD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9D,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvE,YAAY,GAAG,aAAa,CAAC,GAAG,EAAE;YAChC,IAAI,YAAY,IAAI,GAAG,EAAE,GAAG,YAAY,CAAC,cAAc,EAAE,GAAG,kBAAkB,IAAI,UAAU,EAAE,EAAE,CAAC;gBAC/F,MAAM,CAAC,KAAK,CACV,yDAAyD,kBAAkB,GAAG,IAAI,+CAA+C,CAClI,CAAC;gBACF,KAAK,OAAO,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC7B,YAAY,CAAC,KAAK,EAAE,CAAC;QAErB,aAAa,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS;YAC9C,CAAC,CAAC,wBAAwB,CAAC;gBACzB,gBAAgB;gBAChB,SAAS,EAAE,OAAO,CAAC,GAAG;gBACtB,oBAAoB,EAAE,cAAc,CAAC,MAA2B;gBAChE,aAAa,EAAE,kBAAkB;gBACjC,eAAe,EAAE,+BAA+B;gBAChD,MAAM;aACP,CAAC;YACF,CAAC,CAAC,4BAA4B,CAAC;gBAC7B,aAAa;gBACb,YAAY;gBACZ,UAAU;gBACV,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtE,aAAa,EAAE,kBAAkB;gBACjC,eAAe,EAAE,+BAA+B;gBAChD,MAAM;gBACN,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE;aAC9B,CAAC,CAAC;QAEL,uEAAuE;QACvE,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,4EAA4E;QAC5E,mBAAmB;QACnB,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAE1D,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,6CAA6C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAClG,CAAC;QACF,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import type { Readable, Writable } from 'node:stream';\nimport { Worker } from 'node:worker_threads';\n\nimport { SessionManager } from './session-manager.js';\nimport { createMcpServer } from './server.js';\nimport { loadStoredCredentialEnvKeys } from './tool-credentials.js';\nimport { warmWorkflowToolBridges } from './workflow-tools.js';\nimport { isMcpProbeSession } from './probe-mode.js';\nimport {\n registerMcpInstance,\n sweepProjectOrphanMcpServers,\n unregisterMcpInstance,\n} from './pid-registry.js';\nimport { createActivityTrackingInput, type ActivityTrackingInput } from './stdio-watchdog.js';\n\nconst MCP_PKG = '@modelcontextprotocol/sdk';\n\nconst STDIN_IDLE_TIMEOUT_MS = 5 * 60 * 1000;\nconst STDIN_IDLE_CHECK_INTERVAL_MS = 60 * 1000;\nconst CLEANUP_STEP_TIMEOUT_MS = 2 * 1000;\n\n/**\n * Cadence for the worker-thread parent-liveness monitor.\n *\n * Separate from the main-thread idle watchdog: a process pegged at ~100% CPU\n * can starve the JS event loop, preventing timers and signal handlers from\n * dispatching. The worker has its own event loop and hard-kills this process\n * when the parent is gone and stdin has been idle long enough. See #1384.\n */\nconst ORPHAN_PARENT_LOSS_CHECK_INTERVAL_MS = 10 * 1000;\n\nconst ORPHAN_MONITOR_WORKER_SOURCE = `\nimport { writeSync } from 'node:fs';\nimport { parentPort, workerData } from 'node:worker_threads';\n\nconst lastActivityMs = new BigInt64Array(workerData.lastActivityMsBuffer);\nlet stopped = false;\n\nfunction parentGone() {\n if (process.ppid !== workerData.initialParentPid) return true;\n try {\n process.kill(workerData.initialParentPid, 0);\n return false;\n } catch (err) {\n return err && err.code === 'ESRCH';\n }\n}\n\nfunction check() {\n if (stopped) return;\n const last = Number(Atomics.load(lastActivityMs, 0));\n if (Date.now() - last <= workerData.idleTimeoutMs) return;\n if (!parentGone()) return;\n try {\n writeSync(2, '[gsd-mcp-server] Parent process is gone and stdin is idle; hard-killing orphaned server\\\\n');\n } catch {}\n try {\n process.kill(workerData.targetPid, 'SIGKILL');\n } catch {\n process.exit(0);\n }\n}\n\nconst timer = setInterval(check, workerData.checkIntervalMs);\nparentPort?.on('message', (message) => {\n if (message && message.type === 'stop') {\n stopped = true;\n clearInterval(timer);\n process.exit(0);\n }\n});\ncheck();\n`;\n\ninterface SessionManagerLike {\n cleanup(): Promise<void>;\n}\n\ninterface McpServerLike {\n connect(transport: unknown): Promise<void>;\n close(): Promise<void>;\n}\n\ninterface StdioTransportConstructor {\n new(input?: Readable, output?: Writable): unknown;\n}\n\ninterface OrphanMonitorHandle {\n stop(): void;\n}\n\nexport interface RunMcpServerCliOptions {\n cwd?: () => string;\n env?: NodeJS.ProcessEnv;\n exit?: (code: number) => never;\n loadStoredCredentialEnvKeys?: () => void;\n registerMcpInstance?: (projectDir: string) => boolean | void;\n sweepProjectOrphanMcpServers?: (projectDir: string) => void;\n unregisterMcpInstance?: (projectDir: string) => void;\n createSessionManager?: () => SessionManagerLike;\n createMcpServer?: (sessionManager: SessionManagerLike) => Promise<{ server: McpServerLike }>;\n importStdioServerTransport?: () => Promise<{ StdioServerTransport: StdioTransportConstructor }>;\n warmWorkflowToolBridges?: () => Promise<unknown> | unknown;\n stdin?: Readable;\n stdout?: Writable;\n stderr?: Writable;\n onSignal?: (signal: NodeJS.Signals, listener: () => void) => void;\n now?: () => number;\n setInterval?: typeof setInterval;\n clearInterval?: typeof clearInterval;\n isOrphaned?: () => boolean;\n cleanupStepTimeoutMs?: number;\n stdinIdleTimeoutMs?: number;\n stdinIdleCheckIntervalMs?: number;\n orphanParentLossCheckIntervalMs?: number;\n}\n\nfunction createDefaultIsOrphaned(initialParentPid: number): () => boolean {\n return () => {\n if (process.ppid !== initialParentPid) return true;\n try {\n process.kill(initialParentPid, 0);\n return false;\n } catch (err) {\n return (err as NodeJS.ErrnoException).code === 'ESRCH';\n }\n };\n}\n\nfunction startWorkerOrphanMonitor(options: {\n initialParentPid: number;\n targetPid: number;\n lastActivityMsBuffer: SharedArrayBuffer;\n idleTimeoutMs: number;\n checkIntervalMs: number;\n stderr: Writable;\n}): OrphanMonitorHandle {\n const worker = new Worker(ORPHAN_MONITOR_WORKER_SOURCE, {\n eval: true,\n workerData: {\n initialParentPid: options.initialParentPid,\n targetPid: options.targetPid,\n lastActivityMsBuffer: options.lastActivityMsBuffer,\n idleTimeoutMs: options.idleTimeoutMs,\n checkIntervalMs: options.checkIntervalMs,\n },\n });\n worker.unref();\n worker.on('error', (err) => {\n options.stderr.write(\n `[gsd-mcp-server] Orphan monitor failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n });\n return {\n stop() {\n worker.postMessage({ type: 'stop' });\n void worker.terminate();\n },\n };\n}\n\nfunction startMainThreadOrphanMonitor(options: {\n startInterval: typeof setInterval;\n stopInterval: typeof clearInterval;\n isOrphaned: () => boolean;\n idleMs: () => number;\n idleTimeoutMs: number;\n checkIntervalMs: number;\n stderr: Writable;\n cleanup: () => void;\n}): OrphanMonitorHandle {\n const interval = options.startInterval(() => {\n if (!options.isOrphaned()) return;\n if (options.idleMs() <= options.idleTimeoutMs) return;\n options.stderr.write(\n `[gsd-mcp-server] Parent process is gone; shutting down to avoid orphan spin\\n`,\n );\n options.cleanup();\n }, options.checkIntervalMs);\n\n return {\n stop() {\n options.stopInterval(interval);\n },\n };\n}\n\nasync function importDefaultStdioServerTransport(): Promise<{ StdioServerTransport: StdioTransportConstructor }> {\n return import(`${MCP_PKG}/server/stdio.js`) as Promise<{ StdioServerTransport: StdioTransportConstructor }>;\n}\n\nexport async function runMcpServerCli(options: RunMcpServerCliOptions = {}): Promise<void> {\n const cwd = options.cwd ?? (() => process.cwd());\n const env = options.env ?? process.env;\n const exit = options.exit ?? ((code: number): never => process.exit(code));\n const stdin = options.stdin ?? process.stdin;\n const stdout = options.stdout ?? process.stdout;\n const stderr = options.stderr ?? process.stderr;\n const onSignal = options.onSignal ?? ((signal, listener) => process.on(signal, listener));\n const now = options.now ?? (() => Date.now());\n const startInterval = options.setInterval ?? setInterval;\n const stopInterval = options.clearInterval ?? clearInterval;\n const initialParentPid = process.ppid;\n const isOrphaned = options.isOrphaned ?? createDefaultIsOrphaned(initialParentPid);\n const cleanupStepTimeoutMs = options.cleanupStepTimeoutMs ?? CLEANUP_STEP_TIMEOUT_MS;\n const stdinIdleTimeoutMs = options.stdinIdleTimeoutMs ?? STDIN_IDLE_TIMEOUT_MS;\n const stdinIdleCheckIntervalMs = options.stdinIdleCheckIntervalMs ?? STDIN_IDLE_CHECK_INTERVAL_MS;\n const orphanParentLossCheckIntervalMs = options.orphanParentLossCheckIntervalMs ?? ORPHAN_PARENT_LOSS_CHECK_INTERVAL_MS;\n const loadEnv = options.loadStoredCredentialEnvKeys ?? loadStoredCredentialEnvKeys;\n const registerInstance = options.registerMcpInstance ?? registerMcpInstance;\n const sweepOrphans = options.sweepProjectOrphanMcpServers ?? sweepProjectOrphanMcpServers;\n const unregisterInstance = options.unregisterMcpInstance ?? unregisterMcpInstance;\n const createSessionManager = options.createSessionManager ?? (() => new SessionManager());\n const createServer = options.createMcpServer ?? (\n async (manager: SessionManagerLike) => createMcpServer(manager as SessionManager)\n );\n const importTransport = options.importStdioServerTransport ?? importDefaultStdioServerTransport;\n const warmBridges = options.warmWorkflowToolBridges ?? warmWorkflowToolBridges;\n\n loadEnv();\n\n const projectDir = env.GSD_WORKFLOW_PROJECT_ROOT || cwd();\n const probeSession = isMcpProbeSession(env);\n let registered = false;\n let cleaningUp = false;\n let idleWatchdog: ReturnType<typeof setInterval> | undefined;\n let orphanMonitor: OrphanMonitorHandle | undefined;\n const lastActivityMs = new BigInt64Array(new SharedArrayBuffer(8));\n let trackedStdin: ActivityTrackingInput | undefined;\n let sessionManager: SessionManagerLike | undefined;\n let server: McpServerLike | undefined;\n\n async function runCleanupStep(label: string, step: () => Promise<void> | void): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n Promise.resolve().then(step),\n new Promise<void>((resolve) => {\n timeout = setTimeout(() => {\n stderr.write(`[gsd-mcp-server] Cleanup step timed out: ${label}\\n`);\n resolve();\n }, cleanupStepTimeoutMs);\n timeout.unref();\n }),\n ]);\n } catch {\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n }\n\n async function stopRuntime(): Promise<void> {\n if (idleWatchdog) stopInterval(idleWatchdog);\n orphanMonitor?.stop();\n trackedStdin?.close();\n if (registered) unregisterInstance(projectDir);\n await runCleanupStep('session manager cleanup', () => sessionManager?.cleanup());\n await runCleanupStep('server close', () => server?.close());\n }\n\n async function cleanup(code = 0): Promise<void> {\n if (cleaningUp) return;\n cleaningUp = true;\n stderr.write('[gsd-mcp-server] Shutting down...\\n');\n await stopRuntime();\n exit(code);\n }\n\n onSignal('SIGTERM', () => void cleanup());\n onSignal('SIGINT', () => void cleanup());\n stdin.once('end', () => void cleanup());\n stdin.once('close', () => void cleanup());\n stdin.once('error', () => void cleanup(1));\n\n try {\n if (!probeSession) {\n sweepOrphans(projectDir);\n if (registerInstance(projectDir) === false) {\n throw new Error('refusing to start: existing MCP server PID could not be verified');\n }\n registered = true;\n }\n\n sessionManager = createSessionManager();\n ({ server } = await createServer(sessionManager));\n\n const { StdioServerTransport } = await importTransport();\n trackedStdin = createActivityTrackingInput(stdin, () => {\n const current = now();\n Atomics.store(lastActivityMs, 0, BigInt(Math.trunc(current)));\n return current;\n });\n const transport = new StdioServerTransport(trackedStdin.input, stdout);\n\n idleWatchdog = startInterval(() => {\n if (trackedStdin && now() - trackedStdin.lastActivityAt() > stdinIdleTimeoutMs && isOrphaned()) {\n stderr.write(\n `[gsd-mcp-server] Idle stdin watchdog: no activity for ${stdinIdleTimeoutMs / 1000}s and parent process is gone, shutting down\\n`,\n );\n void cleanup();\n }\n }, stdinIdleCheckIntervalMs);\n idleWatchdog.unref();\n\n orphanMonitor = options.isOrphaned === undefined\n ? startWorkerOrphanMonitor({\n initialParentPid,\n targetPid: process.pid,\n lastActivityMsBuffer: lastActivityMs.buffer as SharedArrayBuffer,\n idleTimeoutMs: stdinIdleTimeoutMs,\n checkIntervalMs: orphanParentLossCheckIntervalMs,\n stderr,\n })\n : startMainThreadOrphanMonitor({\n startInterval,\n stopInterval,\n isOrphaned,\n idleMs: () => trackedStdin ? now() - trackedStdin.lastActivityAt() : 0,\n idleTimeoutMs: stdinIdleTimeoutMs,\n checkIntervalMs: orphanParentLossCheckIntervalMs,\n stderr,\n cleanup: () => void cleanup(),\n });\n\n // Fail closed (ADR-036): warm the executor / write-gate bridges BEFORE\n // connecting the transport. If a bridge is broken we must not advertise the\n // workflow tool surface — a rejection here propagates to the catch below so\n // startup aborts and the client never sees tools that would error on first\n // call. A healthy warm-up pre-pays the bridge import so the first real tool\n // call stays fast.\n await warmBridges();\n stderr.write('[gsd-mcp-server] workflow bridges ready\\n');\n\n await server.connect(transport);\n stderr.write('[gsd-mcp-server] MCP server started on stdio\\n');\n } catch (err) {\n stderr.write(\n `[gsd-mcp-server] Fatal: failed to start — ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n await cleanup(1);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1146,12 +1146,12 @@ export async function createMcpServer(sessionManager) {
1146
1146
  return errorContent(err instanceof Error ? err.message : String(err));
1147
1147
  }
1148
1148
  });
1149
- // Advertise backwards-compatibility aliases by default so external clients
1150
- // (especially Claude Code CLI) can call every gsd_* tool name the native LLM
1151
- // path recognizes. Set GSD_MCP_HIDE_ALIASES=1 to trim duplicate schemas when
1152
- // a client is known to use only canonical names.
1149
+ // Canonical-only model-facing surface: the 17 alias tools would add ~6.8K
1150
+ // tokens/turn of duplicate schemas. Set GSD_MCP_ADVERTISE_ALIASES=1 to
1151
+ // restore alias advertising for clients that still call legacy names.
1152
+ // GSD_MCP_HIDE_ALIASES=1 (legacy var) is honored as a no-op force-hide.
1153
1153
  registerWorkflowTools(server, {
1154
- advertiseAliases: process.env.GSD_MCP_HIDE_ALIASES !== '1',
1154
+ advertiseAliases: process.env.GSD_MCP_ADVERTISE_ALIASES === '1' && process.env.GSD_MCP_HIDE_ALIASES !== '1',
1155
1155
  });
1156
1156
  installMoonshotCompatibleToolSchemas(server);
1157
1157
  return { server };