gsd-pi 2.77.0-dev.eaa4973bc → 2.78.0-dev.aeeb2ca00

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 (545) hide show
  1. package/README.md +53 -17
  2. package/dist/claude-cli-check.js +46 -10
  3. package/dist/headless.js +49 -4
  4. package/dist/resource-loader.d.ts +40 -0
  5. package/dist/resource-loader.js +32 -13
  6. package/dist/resources/extensions/browser-tools/capture.js +9 -0
  7. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
  8. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
  9. package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
  10. package/dist/resources/extensions/browser-tools/tools/forms.js +5 -1
  11. package/dist/resources/extensions/browser-tools/tools/intent.js +5 -1
  12. package/dist/resources/extensions/claude-code-cli/readiness.js +72 -16
  13. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +481 -17
  14. package/dist/resources/extensions/github-sync/templates.js +103 -0
  15. package/dist/resources/extensions/google-search/index.js +3 -2
  16. package/dist/resources/extensions/gsd/auto/loop.js +124 -2
  17. package/dist/resources/extensions/gsd/auto/phases.js +57 -39
  18. package/dist/resources/extensions/gsd/auto/session.js +6 -2
  19. package/dist/resources/extensions/gsd/auto-dispatch.js +142 -29
  20. package/dist/resources/extensions/gsd/auto-model-selection.js +124 -4
  21. package/dist/resources/extensions/gsd/auto-post-unit.js +150 -64
  22. package/dist/resources/extensions/gsd/auto-prompts.js +372 -104
  23. package/dist/resources/extensions/gsd/auto-recovery.js +197 -48
  24. package/dist/resources/extensions/gsd/auto-start.js +107 -29
  25. package/dist/resources/extensions/gsd/auto-tool-tracking.js +47 -7
  26. package/dist/resources/extensions/gsd/auto-worktree.js +122 -26
  27. package/dist/resources/extensions/gsd/auto.js +76 -21
  28. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +19 -1
  29. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +209 -0
  30. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +3 -6
  31. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -3
  32. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +127 -9
  33. package/dist/resources/extensions/gsd/component-loader.js +447 -0
  34. package/dist/resources/extensions/gsd/component-types.js +69 -0
  35. package/dist/resources/extensions/gsd/context-store.js +23 -7
  36. package/dist/resources/extensions/gsd/detection.js +49 -1
  37. package/dist/resources/extensions/gsd/dispatch-guard.js +2 -17
  38. package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
  39. package/dist/resources/extensions/gsd/forensics.js +106 -0
  40. package/dist/resources/extensions/gsd/gate-registry.js +2 -2
  41. package/dist/resources/extensions/gsd/git-constants.js +28 -1
  42. package/dist/resources/extensions/gsd/git-self-heal.js +27 -0
  43. package/dist/resources/extensions/gsd/git-service.js +126 -2
  44. package/dist/resources/extensions/gsd/gsd-db.js +6 -3
  45. package/dist/resources/extensions/gsd/guided-flow.js +39 -13
  46. package/dist/resources/extensions/gsd/memory-extractor.js +7 -1
  47. package/dist/resources/extensions/gsd/milestone-scope-classifier.js +299 -0
  48. package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
  49. package/dist/resources/extensions/gsd/model-cost-table.js +3 -0
  50. package/dist/resources/extensions/gsd/model-router.js +6 -0
  51. package/dist/resources/extensions/gsd/native-git-bridge.js +34 -4
  52. package/dist/resources/extensions/gsd/preferences-validation.js +23 -0
  53. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +4 -0
  54. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
  55. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +23 -4
  56. package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  57. package/dist/resources/extensions/gsd/prompts/plan-slice.md +15 -2
  58. package/dist/resources/extensions/gsd/safety/git-checkpoint.js +11 -0
  59. package/dist/resources/extensions/gsd/service-tier.js +5 -2
  60. package/dist/resources/extensions/gsd/session-lock.js +19 -10
  61. package/dist/resources/extensions/gsd/skill-manifest.js +168 -0
  62. package/dist/resources/extensions/gsd/slice-cadence.js +238 -0
  63. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +278 -8
  64. package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
  65. package/dist/resources/extensions/gsd/state.js +69 -58
  66. package/dist/resources/extensions/gsd/sync-lock.js +98 -42
  67. package/dist/resources/extensions/gsd/tools/validate-milestone.js +7 -2
  68. package/dist/resources/extensions/gsd/unit-context-composer.js +147 -0
  69. package/dist/resources/extensions/gsd/unit-context-manifest.js +370 -0
  70. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
  71. package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
  72. package/dist/resources/extensions/gsd/uok/gate-runner.js +53 -5
  73. package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
  74. package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
  75. package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
  76. package/dist/resources/extensions/gsd/uok/plan-v2.js +10 -4
  77. package/dist/resources/extensions/gsd/uok/writer.js +82 -0
  78. package/dist/resources/extensions/gsd/workflow-mcp.js +6 -0
  79. package/dist/resources/extensions/gsd/worktree-manager.js +85 -8
  80. package/dist/resources/extensions/gsd/worktree-resolver.js +86 -7
  81. package/dist/resources/extensions/gsd/worktree-telemetry.js +198 -0
  82. package/dist/resources/extensions/mcp-client/index.js +3 -1
  83. package/dist/resources/extensions/ollama/index.js +5 -1
  84. package/dist/resources/extensions/remote-questions/manager.js +11 -5
  85. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  86. package/dist/web/standalone/.next/BUILD_ID +1 -1
  87. package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
  88. package/dist/web/standalone/.next/build-manifest.json +2 -2
  89. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  90. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  100. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  103. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  104. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  105. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  106. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/index.html +1 -1
  108. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  109. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  110. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  111. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  112. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
  115. package/dist/web/standalone/.next/server/chunks/1926.js +1 -1
  116. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  117. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  118. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  119. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  120. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  121. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  122. package/package.json +2 -3
  123. package/packages/daemon/package.json +2 -2
  124. package/packages/daemon/src/logger.ts +4 -3
  125. package/packages/mcp-server/dist/server.d.ts +24 -0
  126. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  127. package/packages/mcp-server/dist/server.js +88 -87
  128. package/packages/mcp-server/dist/server.js.map +1 -1
  129. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  130. package/packages/mcp-server/dist/workflow-tools.js +15 -6
  131. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  132. package/packages/mcp-server/package.json +2 -2
  133. package/packages/mcp-server/src/mcp-server.test.ts +25 -3
  134. package/packages/mcp-server/src/readers/graph.test.ts +87 -15
  135. package/packages/mcp-server/src/secure-env-collect.test.ts +232 -237
  136. package/packages/mcp-server/src/server.ts +131 -105
  137. package/packages/mcp-server/src/workflow-tools.test.ts +85 -0
  138. package/packages/mcp-server/src/workflow-tools.ts +19 -6
  139. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  140. package/packages/native/package.json +2 -2
  141. package/packages/native/src/__tests__/_test-coverage-guard.test.mjs +98 -0
  142. package/packages/native/src/__tests__/module-compat.test.mjs +59 -27
  143. package/packages/native/src/__tests__/ps.test.mjs +14 -8
  144. package/packages/native/src/__tests__/stream-process.test.mjs +23 -2
  145. package/packages/native/src/__tests__/truncate.test.mjs +17 -2
  146. package/packages/pi-agent-core/package.json +1 -1
  147. package/packages/pi-agent-core/src/agent-loop.test.ts +5 -15
  148. package/packages/pi-agent-core/src/agent.test.ts +96 -102
  149. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  150. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
  151. package/packages/pi-ai/dist/models/capability-patches.js +9 -2
  152. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
  153. package/packages/pi-ai/dist/models/generated/index.d.ts +34 -0
  154. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  155. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  156. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  157. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  158. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  159. package/packages/pi-ai/dist/models/generated/openai.d.ts +17 -0
  160. package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -1
  161. package/packages/pi-ai/dist/models/generated/openai.js +17 -0
  162. package/packages/pi-ai/dist/models/generated/openai.js.map +1 -1
  163. package/packages/pi-ai/dist/models.generated.test.js +43 -70
  164. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  165. package/packages/pi-ai/dist/models.test.js +36 -11
  166. package/packages/pi-ai/dist/models.test.js.map +1 -1
  167. package/packages/pi-ai/package.json +1 -1
  168. package/packages/pi-ai/scripts/generate-models.ts +44 -0
  169. package/packages/pi-ai/src/models/capability-patches.ts +10 -2
  170. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  171. package/packages/pi-ai/src/models/generated/openai.ts +17 -0
  172. package/packages/pi-ai/src/models.generated.test.ts +46 -73
  173. package/packages/pi-ai/src/models.test.ts +48 -11
  174. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  175. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +96 -32
  176. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  177. package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js +75 -12
  178. package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js.map +1 -1
  179. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +99 -31
  180. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  181. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +5 -0
  182. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  183. package/packages/pi-coding-agent/dist/core/extensions/loader.js +61 -0
  184. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  185. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +30 -4
  186. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  187. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +17 -0
  188. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  189. package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js +76 -18
  190. package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js.map +1 -1
  191. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  192. package/packages/pi-coding-agent/dist/core/retry-handler.js +2 -6
  193. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  194. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +5 -1
  195. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
  196. package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts +18 -0
  197. package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts.map +1 -0
  198. package/packages/pi-coding-agent/dist/core/retryable-error-regex.js +18 -0
  199. package/packages/pi-coding-agent/dist/core/retryable-error-regex.js.map +1 -0
  200. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +20 -0
  201. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  202. package/packages/pi-coding-agent/dist/core/system-prompt.js +16 -2
  203. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  204. package/packages/pi-coding-agent/dist/index.d.ts +1 -0
  205. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  206. package/packages/pi-coding-agent/dist/index.js +1 -0
  207. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  208. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +36 -5
  209. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  210. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js +20 -13
  211. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js.map +1 -1
  212. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  213. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +30 -12
  214. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  215. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  216. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +18 -3
  217. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  218. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +125 -0
  219. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  220. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +2 -0
  221. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  222. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  223. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -0
  224. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  225. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +105 -13
  226. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts +2 -0
  228. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts.map +1 -0
  229. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js +130 -0
  230. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js.map +1 -0
  231. package/packages/pi-coding-agent/package.json +1 -1
  232. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +113 -37
  233. package/packages/pi-coding-agent/src/core/agent-session-model-switch.test.ts +89 -17
  234. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +112 -43
  235. package/packages/pi-coding-agent/src/core/extensions/loader.ts +58 -0
  236. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +35 -4
  237. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +20 -0
  238. package/packages/pi-coding-agent/src/core/resource-loader-cache-reset.test.ts +93 -28
  239. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +5 -1
  240. package/packages/pi-coding-agent/src/core/retry-handler.ts +2 -8
  241. package/packages/pi-coding-agent/src/core/retryable-error-regex.ts +18 -0
  242. package/packages/pi-coding-agent/src/core/system-prompt.ts +35 -1
  243. package/packages/pi-coding-agent/src/index.ts +1 -0
  244. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +49 -3
  245. package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.test.ts +26 -20
  246. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +48 -9
  247. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +146 -1
  248. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +20 -3
  249. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +2 -0
  250. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +119 -13
  251. package/packages/pi-coding-agent/src/tests/system-prompt-skill-filter.test.ts +157 -0
  252. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  253. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +18 -8
  254. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  255. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +128 -17
  256. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
  257. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +37 -11
  258. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  259. package/packages/pi-tui/dist/__tests__/tui.test.js +18 -30
  260. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  261. package/packages/pi-tui/dist/components/__tests__/input.test.js +10 -3
  262. package/packages/pi-tui/dist/components/__tests__/input.test.js.map +1 -1
  263. package/packages/pi-tui/dist/components/__tests__/loader.test.js +53 -9
  264. package/packages/pi-tui/dist/components/__tests__/loader.test.js.map +1 -1
  265. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js +6 -2
  266. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js.map +1 -1
  267. package/packages/pi-tui/dist/components/editor.d.ts +14 -0
  268. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  269. package/packages/pi-tui/dist/components/editor.js +19 -0
  270. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  271. package/packages/pi-tui/dist/components/image.test.js +6 -5
  272. package/packages/pi-tui/dist/components/image.test.js.map +1 -1
  273. package/packages/pi-tui/dist/editor-component.d.ts +2 -0
  274. package/packages/pi-tui/dist/editor-component.d.ts.map +1 -1
  275. package/packages/pi-tui/dist/editor-component.js.map +1 -1
  276. package/packages/pi-tui/package.json +1 -1
  277. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +24 -8
  278. package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +140 -17
  279. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +42 -11
  280. package/packages/pi-tui/src/__tests__/tui.test.ts +18 -37
  281. package/packages/pi-tui/src/components/__tests__/input.test.ts +19 -3
  282. package/packages/pi-tui/src/components/__tests__/loader.test.ts +112 -35
  283. package/packages/pi-tui/src/components/__tests__/markdown-maxlines.test.ts +9 -2
  284. package/packages/pi-tui/src/components/editor.ts +22 -0
  285. package/packages/pi-tui/src/components/image.test.ts +10 -5
  286. package/packages/pi-tui/src/editor-component.ts +3 -0
  287. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  288. package/packages/rpc-client/dist/rpc-client.test.js +101 -51
  289. package/packages/rpc-client/dist/rpc-client.test.js.map +1 -1
  290. package/packages/rpc-client/package.json +1 -1
  291. package/packages/rpc-client/src/rpc-client.test.ts +109 -52
  292. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  293. package/pkg/package.json +1 -1
  294. package/scripts/install.js +15 -1
  295. package/src/resources/extensions/browser-tools/capture.ts +12 -0
  296. package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
  297. package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
  298. package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
  299. package/src/resources/extensions/browser-tools/tools/forms.ts +5 -1
  300. package/src/resources/extensions/browser-tools/tools/intent.ts +5 -1
  301. package/src/resources/extensions/claude-code-cli/readiness.ts +75 -16
  302. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +518 -19
  303. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +919 -75
  304. package/src/resources/extensions/github-sync/templates.ts +151 -0
  305. package/src/resources/extensions/github-sync/tests/cli.test.ts +76 -7
  306. package/src/resources/extensions/github-sync/tests/templates.test.ts +92 -1
  307. package/src/resources/extensions/google-search/index.ts +3 -2
  308. package/src/resources/extensions/gsd/auto/loop.ts +142 -2
  309. package/src/resources/extensions/gsd/auto/phases.ts +62 -38
  310. package/src/resources/extensions/gsd/auto/session.ts +7 -2
  311. package/src/resources/extensions/gsd/auto-dispatch.ts +156 -29
  312. package/src/resources/extensions/gsd/auto-model-selection.ts +131 -4
  313. package/src/resources/extensions/gsd/auto-post-unit.ts +163 -73
  314. package/src/resources/extensions/gsd/auto-prompts.ts +385 -93
  315. package/src/resources/extensions/gsd/auto-recovery.ts +230 -51
  316. package/src/resources/extensions/gsd/auto-start.ts +127 -9
  317. package/src/resources/extensions/gsd/auto-tool-tracking.ts +51 -7
  318. package/src/resources/extensions/gsd/auto-worktree.ts +130 -26
  319. package/src/resources/extensions/gsd/auto.ts +90 -23
  320. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +20 -1
  321. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +221 -0
  322. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +3 -7
  323. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +7 -3
  324. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +158 -9
  325. package/src/resources/extensions/gsd/component-loader.ts +598 -0
  326. package/src/resources/extensions/gsd/component-types.ts +362 -0
  327. package/src/resources/extensions/gsd/context-store.ts +25 -8
  328. package/src/resources/extensions/gsd/detection.ts +58 -1
  329. package/src/resources/extensions/gsd/dispatch-guard.ts +2 -20
  330. package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
  331. package/src/resources/extensions/gsd/forensics.ts +118 -1
  332. package/src/resources/extensions/gsd/gate-registry.ts +2 -2
  333. package/src/resources/extensions/gsd/git-constants.ts +30 -1
  334. package/src/resources/extensions/gsd/git-self-heal.ts +31 -0
  335. package/src/resources/extensions/gsd/git-service.ts +149 -2
  336. package/src/resources/extensions/gsd/gsd-db.ts +6 -3
  337. package/src/resources/extensions/gsd/guided-flow.ts +57 -14
  338. package/src/resources/extensions/gsd/journal.ts +11 -1
  339. package/src/resources/extensions/gsd/memory-extractor.ts +11 -3
  340. package/src/resources/extensions/gsd/milestone-scope-classifier.ts +366 -0
  341. package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
  342. package/src/resources/extensions/gsd/model-cost-table.ts +3 -0
  343. package/src/resources/extensions/gsd/model-router.ts +6 -0
  344. package/src/resources/extensions/gsd/native-git-bridge.ts +34 -4
  345. package/src/resources/extensions/gsd/preferences-validation.ts +21 -0
  346. package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +4 -0
  347. package/src/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
  348. package/src/resources/extensions/gsd/prompts/discuss-headless.md +23 -4
  349. package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  350. package/src/resources/extensions/gsd/prompts/plan-slice.md +15 -2
  351. package/src/resources/extensions/gsd/safety/git-checkpoint.ts +15 -0
  352. package/src/resources/extensions/gsd/service-tier.ts +5 -2
  353. package/src/resources/extensions/gsd/session-lock.ts +20 -10
  354. package/src/resources/extensions/gsd/skill-manifest.ts +175 -0
  355. package/src/resources/extensions/gsd/slice-cadence.ts +299 -0
  356. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +309 -8
  357. package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
  358. package/src/resources/extensions/gsd/state.ts +76 -66
  359. package/src/resources/extensions/gsd/sync-lock.ts +97 -39
  360. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +270 -0
  361. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +2 -1
  362. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +341 -0
  363. package/src/resources/extensions/gsd/tests/auto-discuss-milestone-deadlock-4973.test.ts +264 -0
  364. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +133 -292
  365. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +742 -0
  366. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +78 -0
  367. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +61 -0
  368. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +93 -0
  369. package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +4 -1
  370. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +8 -194
  371. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +3 -2
  372. package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +2 -2
  373. package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +15 -58
  374. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +2 -2
  375. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +3 -2
  376. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +3 -2
  377. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -1
  378. package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +17 -21
  379. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +108 -0
  380. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +263 -0
  381. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +25 -0
  382. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +192 -0
  383. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +2 -1
  384. package/src/resources/extensions/gsd/tests/complete-task.test.ts +16 -8
  385. package/src/resources/extensions/gsd/tests/component-loader.test.ts +589 -0
  386. package/src/resources/extensions/gsd/tests/component-types.test.ts +127 -0
  387. package/src/resources/extensions/gsd/tests/context-store.test.ts +79 -0
  388. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +2 -1
  389. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +50 -1
  390. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +159 -0
  391. package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
  392. package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +3 -3
  393. package/src/resources/extensions/gsd/tests/derive-state-db-disk-reconcile.test.ts +40 -0
  394. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +91 -3
  395. package/src/resources/extensions/gsd/tests/derive-state.test.ts +4 -4
  396. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +2 -1
  397. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +2 -1
  398. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +5 -0
  399. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
  400. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
  401. package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +3 -2
  402. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +4 -3
  403. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +4 -3
  404. package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
  405. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +139 -129
  406. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +8 -104
  407. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +102 -0
  408. package/src/resources/extensions/gsd/tests/gate-storage.test.ts +1 -1
  409. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +14 -4
  410. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
  411. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +4 -55
  412. package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +7 -56
  413. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +20 -0
  414. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +18 -2
  415. package/src/resources/extensions/gsd/tests/integration/queue-completed-milestone-perf.test.ts +10 -4
  416. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +144 -7
  417. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +4 -0
  418. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +2 -16
  419. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +9 -3
  420. package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +6 -9
  421. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +64 -0
  422. package/src/resources/extensions/gsd/tests/knowledge.test.ts +93 -1
  423. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +8 -37
  424. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +5 -15
  425. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +227 -55
  426. package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +187 -0
  427. package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
  428. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +9 -1
  429. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  430. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +6 -48
  431. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +6 -3
  432. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +59 -2
  433. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +273 -130
  434. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +301 -0
  435. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +32 -1
  436. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +2 -1
  437. package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +12 -0
  438. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +15 -4
  439. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +23 -24
  440. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +32 -0
  441. package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +3 -2
  442. package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +4 -5
  443. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +75 -2
  444. package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +132 -0
  445. package/src/resources/extensions/gsd/tests/recovery-attempts-reset.test.ts +8 -40
  446. package/src/resources/extensions/gsd/tests/regex-hardening.test.ts +136 -256
  447. package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +114 -0
  448. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +6 -3
  449. package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +148 -0
  450. package/src/resources/extensions/gsd/tests/service-tier.test.ts +4 -0
  451. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +29 -0
  452. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +3 -2
  453. package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +55 -95
  454. package/src/resources/extensions/gsd/tests/single-writer-v3-tool-surface.test.ts +158 -0
  455. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +120 -1
  456. package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +112 -0
  457. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +242 -0
  458. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +3 -2
  459. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +164 -1
  460. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +2 -1
  461. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
  462. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +29 -5
  463. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
  464. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +3 -3
  465. package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +11 -92
  466. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +7 -6
  467. package/src/resources/extensions/gsd/tests/survivor-branch-complete.test.ts +102 -101
  468. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +31 -0
  469. package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +4 -3
  470. package/src/resources/extensions/gsd/tests/test-helpers.test.ts +98 -0
  471. package/src/resources/extensions/gsd/tests/test-helpers.ts +153 -0
  472. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  473. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +61 -1
  474. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +8 -1
  475. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +355 -0
  476. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +258 -0
  477. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
  478. package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
  479. package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +75 -0
  480. package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +49 -26
  481. package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
  482. package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
  483. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +19 -2
  484. package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
  485. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +12 -0
  486. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +144 -80
  487. package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -54
  488. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +342 -277
  489. package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +37 -29
  490. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +226 -266
  491. package/src/resources/extensions/gsd/tests/worktree-health-monorepo.test.ts +103 -67
  492. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +92 -90
  493. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +238 -59
  494. package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +113 -161
  495. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +210 -0
  496. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +262 -0
  497. package/src/resources/extensions/gsd/tests/write-gate-predicates.test.ts +186 -0
  498. package/src/resources/extensions/gsd/tests/write-gate.test.ts +7 -5
  499. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +80 -96
  500. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -2
  501. package/src/resources/extensions/gsd/types.ts +3 -3
  502. package/src/resources/extensions/gsd/unit-context-composer.ts +218 -0
  503. package/src/resources/extensions/gsd/unit-context-manifest.ts +574 -0
  504. package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
  505. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
  506. package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
  507. package/src/resources/extensions/gsd/uok/gate-runner.ts +65 -5
  508. package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
  509. package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
  510. package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
  511. package/src/resources/extensions/gsd/uok/plan-v2.ts +13 -5
  512. package/src/resources/extensions/gsd/uok/writer.ts +113 -0
  513. package/src/resources/extensions/gsd/workflow-mcp.ts +6 -0
  514. package/src/resources/extensions/gsd/worktree-manager.ts +108 -7
  515. package/src/resources/extensions/gsd/worktree-resolver.ts +96 -9
  516. package/src/resources/extensions/gsd/worktree-telemetry.ts +322 -0
  517. package/src/resources/extensions/mcp-client/index.ts +3 -1
  518. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +70 -36
  519. package/src/resources/extensions/ollama/index.ts +5 -1
  520. package/src/resources/extensions/ollama/ollama-auth-mode.test.ts +123 -15
  521. package/src/resources/extensions/ollama/ollama-status-indicator.test.ts +206 -19
  522. package/src/resources/extensions/remote-questions/manager.ts +36 -4
  523. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +200 -190
  524. package/src/resources/extensions/shared/tests/interview-preview.test.ts +11 -3
  525. package/src/resources/extensions/voice/tests/linux-ready.test.ts +129 -113
  526. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts +0 -2
  527. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts.map +0 -1
  528. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js +0 -289
  529. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js.map +0 -1
  530. package/packages/pi-ai/src/utils/oauth/oauth-providers.test.ts +0 -363
  531. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +0 -143
  532. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -157
  533. package/src/resources/extensions/gsd/tests/dashboard-model-label-ordering.test.ts +0 -107
  534. package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +0 -48
  535. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -159
  536. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  537. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -79
  538. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +0 -74
  539. package/src/resources/extensions/gsd/tests/forensics-journal.test.ts +0 -162
  540. package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +0 -38
  541. package/src/resources/extensions/gsd/tests/gsd-no-project-error.test.ts +0 -73
  542. package/src/resources/extensions/gsd/tests/idle-watchdog-stall-override.test.ts +0 -125
  543. package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +0 -42
  544. /package/dist/web/standalone/.next/static/{5wbu35_C2_MQ3Jj1lEVDx → cAJH99yNS1UPbeSEiNRrV}/_buildManifest.js +0 -0
  545. /package/dist/web/standalone/.next/static/{5wbu35_C2_MQ3Jj1lEVDx → cAJH99yNS1UPbeSEiNRrV}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-tools.js","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Workflow MCP tools — exposes the core GSD mutation/read handlers over MCP.\n */\n\nimport { existsSync, realpathSync } from \"node:fs\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { z } from \"zod\";\n\ntype WorkflowToolExecutors = {\n SUPPORTED_SUMMARY_ARTIFACT_TYPES: readonly string[];\n executeMilestoneStatus: (params: { milestoneId: string }, basePath?: string) => Promise<unknown>;\n executePlanMilestone: (\n params: {\n milestoneId: string;\n title: string;\n vision: string;\n slices: Array<{\n sliceId: string;\n title: string;\n risk: string;\n depends: string[];\n demo: string;\n goal: string;\n successCriteria?: string;\n proofLevel?: string;\n integrationClosure?: string;\n observabilityImpact?: string;\n isSketch?: boolean;\n sketchScope?: string;\n }>;\n status?: string;\n dependsOn?: string[];\n successCriteria?: string[];\n keyRisks?: Array<{ risk: string; whyItMatters: string }>;\n proofStrategy?: Array<{ riskOrUnknown: string; retireIn: string; whatWillBeProven: string }>;\n verificationContract?: string;\n verificationIntegration?: string;\n verificationOperational?: string;\n verificationUat?: string;\n definitionOfDone?: string[];\n requirementCoverage?: string;\n boundaryMapMarkdown?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executePlanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n goal: string;\n tasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n observabilityImpact?: string;\n }>;\n successCriteria?: string;\n proofLevel?: string;\n integrationClosure?: string;\n observabilityImpact?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReplanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n blockerTaskId: string;\n blockerDescription: string;\n whatChanged: string;\n updatedTasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n fullPlanMd?: string;\n }>;\n removedTaskIds: string[];\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSliceComplete: (\n params: {\n sliceId: string;\n milestoneId: string;\n sliceTitle: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n uatContent: string;\n deviations?: string;\n knownLimitations?: string;\n followUps?: string;\n keyFiles?: string[] | string;\n keyDecisions?: string[] | string;\n patternsEstablished?: string[] | string;\n observabilitySurfaces?: string[] | string;\n provides?: string[] | string;\n requirementsSurfaced?: string[] | string;\n drillDownPaths?: string[] | string;\n affects?: string[] | string;\n requirementsAdvanced?: Array<{ id: string; how: string } | string>;\n requirementsValidated?: Array<{ id: string; proof: string } | string>;\n requirementsInvalidated?: Array<{ id: string; what: string } | string>;\n filesModified?: Array<{ path: string; description: string } | string>;\n requires?: Array<{ slice: string; provides: string } | string>;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeCompleteMilestone: (\n params: {\n milestoneId: string;\n title: string;\n oneLiner: string;\n narrative: string;\n verificationPassed: boolean;\n successCriteriaResults?: string;\n definitionOfDoneResults?: string;\n requirementOutcomes?: string;\n keyDecisions?: string[];\n keyFiles?: string[];\n lessonsLearned?: string[];\n followUps?: string;\n deviations?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeValidateMilestone: (\n params: {\n milestoneId: string;\n verdict: \"pass\" | \"needs-attention\" | \"needs-remediation\";\n remediationRound: number;\n successCriteriaChecklist: string;\n sliceDeliveryAudit: string;\n crossSliceIntegration: string;\n requirementCoverage: string;\n verificationClasses?: string;\n verdictRationale: string;\n remediationPlan?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReassessRoadmap: (\n params: {\n milestoneId: string;\n completedSliceId: string;\n verdict: string;\n assessment: string;\n sliceChanges: {\n modified: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n added: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n removed: string[];\n };\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSaveGateResult: (\n params: {\n milestoneId: string;\n sliceId: string;\n gateId: string;\n taskId?: string;\n verdict: \"pass\" | \"flag\" | \"omitted\";\n rationale: string;\n findings?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSummarySave: (\n params: {\n milestone_id: string;\n slice_id?: string;\n task_id?: string;\n artifact_type: string;\n content: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeTaskComplete: (\n params: {\n taskId: string;\n sliceId: string;\n milestoneId: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n deviations?: string;\n knownIssues?: string;\n keyFiles?: string[];\n keyDecisions?: string[];\n blockerDiscovered?: boolean;\n escalation?: {\n question: string;\n options: Array<{ id: string; label: string; tradeoffs: string }>;\n recommendation: string;\n recommendationRationale: string;\n continueWithDefault: boolean;\n };\n verificationEvidence?: Array<\n { command: string; exitCode: number; verdict: string; durationMs: number } | string\n >;\n },\n basePath?: string,\n ) => Promise<unknown>;\n};\n\ntype WorkflowWriteGateModule = {\n loadWriteGateSnapshot: (basePath?: string) => {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n };\n shouldBlockPendingGateInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n milestoneId: string | null,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n shouldBlockQueueExecutionInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n input: string,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n};\n\ntype WorkflowDbBootstrapModule = {\n ensureDbOpen: (basePath?: string) => Promise<boolean>;\n};\n\nlet workflowToolExecutorsPromise: Promise<WorkflowToolExecutors> | null = null;\nlet workflowExecutionQueue: Promise<void> = Promise.resolve();\nlet workflowWriteGatePromise: Promise<WorkflowWriteGateModule> | null = null;\n\nfunction getAllowedProjectRoot(env: NodeJS.ProcessEnv = process.env): string | null {\n const configuredRoot = env.GSD_WORKFLOW_PROJECT_ROOT?.trim();\n return configuredRoot ? resolve(configuredRoot) : null;\n}\n\nfunction isWithinRoot(candidatePath: string, rootPath: string): boolean {\n const rel = relative(rootPath, candidatePath);\n return rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\n/**\n * Resolve the symlink target of `<allowedRoot>/.gsd` when it points into the\n * external state layout (`~/.gsd/projects/<hash>/`). Returns the realpath of\n * that target so callers can accept worktree paths that live under\n * `<external-state>/worktrees/<MID>/`. Returns null when `.gsd` is absent or\n * resolution fails — the caller should fall back to the direct containment\n * check in that case.\n */\nfunction resolveExternalStateRoot(allowedRoot: string): string | null {\n try {\n return realpathSync(join(allowedRoot, \".gsd\"));\n } catch {\n return null;\n }\n}\n\nexport function validateProjectDir(projectDir: string, env: NodeJS.ProcessEnv = process.env): string {\n if (!isAbsolute(projectDir)) {\n throw new Error(`projectDir must be an absolute path. Received: ${projectDir}`);\n }\n\n const lexicallyResolved = resolve(projectDir);\n // Resolve symlinks on the candidate before the containment check so that a\n // symlink inside the allowed root pointing outside of it cannot bypass the\n // guard. Falls back to the lexical path if the candidate does not exist yet\n // (legitimate for a brand-new worktree dir about to be created).\n const resolvedProjectDir = safeRealpath(lexicallyResolved);\n\n const allowedRoot = getAllowedProjectRoot(env);\n if (!allowedRoot) return resolvedProjectDir;\n\n const resolvedAllowedRoot = safeRealpath(allowedRoot);\n if (isWithinRoot(resolvedProjectDir, resolvedAllowedRoot)) return resolvedProjectDir;\n\n // External state layout: `<allowedRoot>/.gsd` may be a symlink into\n // `~/.gsd/projects/<hash>/`, and auto-worktrees live under\n // `~/.gsd/projects/<hash>/worktrees/<MID>/`. Accept candidates that are\n // under the realpath of `<allowedRoot>/.gsd` — they belong to this project\n // even though their absolute path is outside allowedRoot (#issue-a44).\n const externalRoot = resolveExternalStateRoot(resolvedAllowedRoot);\n if (externalRoot && isWithinRoot(resolvedProjectDir, externalRoot)) {\n return resolvedProjectDir;\n }\n\n throw new Error(\n `projectDir must stay within the configured workflow project root. Received: ${resolvedProjectDir}; allowed root: ${resolvedAllowedRoot}`,\n );\n}\n\nfunction safeRealpath(path: string): string {\n try {\n return realpathSync(path);\n } catch (err) {\n // Only fall back for non-existent paths — a legitimate case when a worktree\n // directory hasn't been created yet. Permission errors (EACCES), not-a-\n // directory (ENOTDIR), etc. must propagate so we do not silently degrade\n // to a lexical-only containment check that a restricted symlink could\n // bypass.\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") return path;\n throw err;\n }\n}\n\nfunction parseToolArgs<T>(schema: z.ZodType<T>, args: Record<string, unknown>): T {\n return schema.parse(args);\n}\n\n/**\n * Extract a milestone ID from parsed tool args, trying common field names.\n * Returns null when no field is present or the value is not a string.\n */\nfunction extractMilestoneId(parsed: Record<string, unknown>): string | null {\n const candidates = [parsed.milestoneId, parsed.milestone_id, parsed.mid];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.trim() !== \"\") return c.trim();\n }\n return null;\n}\n\n/**\n * If an auto-worktree exists for the given milestone under\n * `<projectRoot>/.gsd/worktrees/<milestoneId>/`, return that path as the\n * basePath the tool should write against. Returns null when no worktree\n * exists for this milestone, leaving the caller to use the project root.\n *\n * This unbreaks the external-state layout where the MCP server's process.cwd()\n * is the project root (set at Claude Code launch) but auto-mode is actually\n * working inside a per-milestone worktree. Without this, tool writes go to\n * the shared project `.gsd/` and auto-mode's verifyExpectedArtifact (which\n * uses the worktree `.gsd/`) fails, triggering a guaranteed retry per unit.\n */\nfunction resolveActiveWorktreeBasePath(\n projectRoot: string,\n milestoneId: string | null,\n): string | null {\n if (!milestoneId) return null;\n const wtPath = join(projectRoot, \".gsd\", \"worktrees\", milestoneId);\n if (!existsSync(wtPath)) return null;\n // Sanity check: a real git worktree has a `.git` file with a gitdir pointer.\n // Bare directories without it shouldn't hijack the write path.\n if (!existsSync(join(wtPath, \".git\"))) return null;\n return wtPath;\n}\n\nfunction parseWorkflowArgs<T extends { projectDir?: string }>(\n schema: z.ZodType<T>,\n args: Record<string, unknown>,\n): T & { projectDir: string } {\n const parsed = parseToolArgs(schema, args);\n // Step 1: figure out the project root. The agent shouldn't need to pass\n // projectDir — default to process.cwd() which the MCP server inherited from\n // Claude Code (launched at the project root).\n const projectRootCandidate = parsed.projectDir ?? process.cwd();\n const projectRoot = validateProjectDir(projectRootCandidate);\n\n // Step 2: if this tool call is scoped to a milestone that has an active\n // auto-worktree, re-route writes to the worktree's .gsd rather than the\n // project's shared .gsd. auto-mode's verifyExpectedArtifact runs against\n // the worktree, and a mismatch here causes every unit to retry once.\n const milestoneId = extractMilestoneId(parsed as Record<string, unknown>);\n const worktreeBasePath = resolveActiveWorktreeBasePath(projectRoot, milestoneId);\n const effectiveBasePath = worktreeBasePath ?? projectRoot;\n\n return {\n ...parsed,\n projectDir: effectiveBasePath,\n };\n}\n\nfunction isWorkflowToolExecutors(value: unknown): value is WorkflowToolExecutors {\n if (!value || typeof value !== \"object\") return false;\n const record = value as Record<string, unknown>;\n const functionExports = [\n \"executeMilestoneStatus\",\n \"executePlanMilestone\",\n \"executePlanSlice\",\n \"executeReplanSlice\",\n \"executeSliceComplete\",\n \"executeCompleteMilestone\",\n \"executeValidateMilestone\",\n \"executeReassessRoadmap\",\n \"executeSaveGateResult\",\n \"executeSummarySave\",\n \"executeTaskComplete\",\n ];\n\n return Array.isArray(record.SUPPORTED_SUMMARY_ARTIFACT_TYPES) &&\n functionExports.every((key) => typeof record[key] === \"function\");\n}\n\nfunction getSupportedSummaryArtifactTypes(executors: WorkflowToolExecutors): readonly string[] {\n return executors.SUPPORTED_SUMMARY_ARTIFACT_TYPES;\n}\n\nfunction getWriteGateModuleCandidates(): string[] {\n const candidates: string[] = [];\n const explicitModule = process.env.GSD_WORKFLOW_WRITE_GATE_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_WRITE_GATE_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nfunction toFileUrl(modulePath: string): string {\n return pathToFileURL(resolve(modulePath)).href;\n}\n\n/** @internal — exported for testing only */\nexport function _buildImportCandidates(relativePath: string): string[] {\n // Build candidate paths: try the given path first, then swap src/<->dist/\n // and try .ts extension. This handles both dev (tsx from src/) and prod\n // (compiled from dist/) execution contexts.\n const candidates: string[] = [relativePath];\n const swapped = relativePath.includes(\"/src/\")\n ? relativePath.replace(\"/src/\", \"/dist/\")\n : relativePath.includes(\"/dist/\")\n ? relativePath.replace(\"/dist/\", \"/src/\")\n : null;\n if (swapped) candidates.push(swapped);\n // Also try .ts variants for dev-mode tsx execution\n if (relativePath.endsWith(\".js\")) {\n candidates.push(relativePath.replace(/\\.js$/, \".ts\"));\n if (swapped) candidates.push(swapped.replace(/\\.js$/, \".ts\"));\n }\n return candidates;\n}\n\nasync function importLocalModule<T>(relativePath: string): Promise<T> {\n const candidates = _buildImportCandidates(relativePath)\n .map((p) => new URL(p, import.meta.url).href);\n\n let lastErr: unknown;\n for (const candidate of candidates) {\n try {\n return await import(candidate) as T;\n } catch (err) {\n lastErr = err;\n }\n }\n throw lastErr;\n}\n\nfunction getWorkflowExecutorModuleCandidates(env: NodeJS.ProcessEnv = process.env): string[] {\n const candidates: string[] = [];\n const explicitModule = env.GSD_WORKFLOW_EXECUTORS_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_EXECUTORS_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nasync function getWorkflowToolExecutors(): Promise<WorkflowToolExecutors> {\n if (!workflowToolExecutorsPromise) {\n workflowToolExecutorsPromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWorkflowExecutorModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (isWorkflowToolExecutors(loaded)) {\n return loaded;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD workflow executor bridge for MCP mutation tools. \" +\n \"Set GSD_WORKFLOW_EXECUTORS_MODULE to an importable workflow-tool-executors module, \" +\n \"or run the MCP server from a GSD checkout that includes src/resources/extensions/gsd/tools/workflow-tool-executors.(js|ts). \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowToolExecutorsPromise;\n}\n\nasync function getWorkflowWriteGateModule(): Promise<WorkflowWriteGateModule> {\n if (!workflowWriteGatePromise) {\n workflowWriteGatePromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWriteGateModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (\n loaded &&\n typeof loaded.loadWriteGateSnapshot === \"function\" &&\n typeof loaded.shouldBlockPendingGateInSnapshot === \"function\" &&\n typeof loaded.shouldBlockQueueExecutionInSnapshot === \"function\"\n ) {\n return loaded as WorkflowWriteGateModule;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD write-gate bridge for workflow MCP tools. \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowWriteGatePromise;\n}\n\ninterface McpToolServer {\n tool(\n name: string,\n description: string,\n params: Record<string, unknown>,\n handler: (args: Record<string, unknown>) => Promise<unknown>,\n ): unknown;\n}\n\nexport const WORKFLOW_TOOL_NAMES = [\n \"gsd_decision_save\",\n \"gsd_save_decision\",\n \"gsd_requirement_update\",\n \"gsd_update_requirement\",\n \"gsd_requirement_save\",\n \"gsd_save_requirement\",\n \"gsd_milestone_generate_id\",\n \"gsd_generate_milestone_id\",\n \"gsd_plan_milestone\",\n \"gsd_plan_slice\",\n \"gsd_plan_task\",\n \"gsd_task_plan\",\n \"gsd_replan_slice\",\n \"gsd_slice_replan\",\n \"gsd_slice_complete\",\n \"gsd_complete_slice\",\n \"gsd_skip_slice\",\n \"gsd_complete_milestone\",\n \"gsd_milestone_complete\",\n \"gsd_validate_milestone\",\n \"gsd_milestone_validate\",\n \"gsd_reassess_roadmap\",\n \"gsd_roadmap_reassess\",\n \"gsd_save_gate_result\",\n \"gsd_summary_save\",\n \"gsd_task_complete\",\n \"gsd_complete_task\",\n \"gsd_milestone_status\",\n \"gsd_journal_query\",\n // ADR-013 step 3: memory-store tools exposed to external MCP clients.\n // gsd_memory_graph is namespaced to avoid collision with the existing\n // gsd_graph tool (project knowledge graph from .gsd/ artifacts).\n \"gsd_capture_thought\",\n \"gsd_memory_query\",\n \"gsd_memory_graph\",\n] as const;\n\nconst DEFAULT_WORKFLOW_OP_TIMEOUT_MS = 5 * 60 * 1000;\n\nfunction getWorkflowOpTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = env.GSD_MCP_WORKFLOW_TIMEOUT_MS?.trim();\n if (!raw) return DEFAULT_WORKFLOW_OP_TIMEOUT_MS;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed) || parsed < 0) return DEFAULT_WORKFLOW_OP_TIMEOUT_MS;\n return parsed; // 0 disables the timeout\n}\n\n/**\n * Adapt an executor `ToolExecutionResult` ({ content, details?, isError? }) to\n * the MCP `CallToolResult` shape ({ content, structuredContent?, isError? }).\n *\n * MCP transports (including stdio) only serialize fields declared in the\n * protocol, so a non-standard `details` field is silently dropped over the\n * wire. Mirroring it into `structuredContent` — the protocol's supported\n * channel for structured tool payloads — preserves the data for clients that\n * render from it (e.g. the save_gate_result renderer that reads gateId /\n * verdict). See #4472.\n *\n * Discard policy for non-plain-object `details`: the `isPlainObject` guard\n * accepts the canonical case (a record literal) and intentionally drops bare\n * primitives (string, number, boolean), bare arrays, and class instances /\n * Date objects. This is deliberate — MCP `structuredContent` is specified as\n * a JSON object; non-object payloads can't round-trip cleanly. No current\n * executor returns a non-object `details`, so this never fires in practice.\n * Future executors needing to return a primitive should wrap it\n * (`details: { value: 42 }`) rather than relying on the discard.\n */\nfunction adaptExecutorResult(result: unknown): unknown {\n if (!result || typeof result !== \"object\") return result;\n const r = result as Record<string, unknown>;\n if (!(\"details\" in r)) return result;\n const { details, ...rest } = r;\n return isPlainObject(details) ? { ...rest, structuredContent: details } : rest;\n}\n\n/**\n * Strict plain-object guard. True only for object literals and\n * `Object.create(null)` — not for `Date`, `URL`, `Map`, `Set`, class instances,\n * or arrays. Used to gate `structuredContent` forwarding so the MCP transport\n * receives only true JSON objects (the protocol contract).\n *\n * Mirrored in `src/mcp-server.ts` for the agent-tool registry path's\n * structured-content gate. Keep both copies in sync if the contract definition\n * needs to evolve. See #4477 review.\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\") return false;\n if (Array.isArray(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n\nasync function runSerializedWorkflowOperation<T>(fn: () => Promise<T>): Promise<T> {\n // The shared DB adapter and workflow log base path are process-global, so\n // workflow MCP mutations must not overlap within a single server process.\n // A per-operation deadline prevents a single stuck call from wedging every\n // subsequent write for the lifetime of the process.\n //\n // Known limitation: on timeout we surface an error and release the queue,\n // but Promise.race cannot cancel the underlying `fn()` — it may continue\n // running in the background and overlap with the next admitted operation.\n // Proper cancellation requires threading an AbortSignal through every\n // workflow executor (`workflow-tool-executors.ts` and friends), which is\n // a larger change. The current trade-off: risk a theoretical overlap after\n // a 5-minute wall-clock timeout vs permanently wedging the server. The\n // overlap window is bounded by how long the zombie `fn()` keeps running;\n // in practice DB writes complete quickly even when the caller gave up.\n const prior = workflowExecutionQueue;\n let release!: () => void;\n workflowExecutionQueue = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await prior;\n const timeoutMs = getWorkflowOpTimeoutMs();\n try {\n if (timeoutMs === 0) {\n return await fn();\n }\n let timer: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`Workflow operation exceeded ${timeoutMs}ms deadline (GSD_MCP_WORKFLOW_TIMEOUT_MS)`));\n }, timeoutMs);\n });\n try {\n return await Promise.race([fn(), timeoutPromise]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n } finally {\n release();\n }\n}\n\nasync function runSerializedWorkflowDbOperation<T>(\n projectDir: string,\n fn: () => Promise<T>,\n): Promise<T> {\n return runSerializedWorkflowOperation(async () => {\n const { ensureDbOpen } = await importLocalModule<WorkflowDbBootstrapModule>(\n \"../../../src/resources/extensions/gsd/bootstrap/dynamic-tools.js\",\n );\n const dbAvailable = await ensureDbOpen(projectDir);\n if (!dbAvailable) {\n throw new Error(\"GSD database is not available\");\n }\n return fn();\n });\n}\n\nasync function enforceWorkflowWriteGate(\n toolName: string,\n projectDir: string,\n milestoneId: string | null = null,\n): Promise<void> {\n const writeGate = await getWorkflowWriteGateModule();\n const snapshot = writeGate.loadWriteGateSnapshot(projectDir);\n const pendingGate = writeGate.shouldBlockPendingGateInSnapshot(\n snapshot,\n toolName,\n milestoneId,\n snapshot.activeQueuePhase,\n );\n if (pendingGate.block) {\n throw new Error(pendingGate.reason ?? \"workflow tool blocked by pending discussion gate\");\n }\n\n const queueGuard = writeGate.shouldBlockQueueExecutionInSnapshot(\n snapshot,\n toolName,\n \"\",\n snapshot.activeQueuePhase,\n );\n if (queueGuard.block) {\n throw new Error(queueGuard.reason ?? \"workflow tool blocked during queue mode\");\n }\n}\n\nasync function handleTaskComplete(\n projectDir: string,\n args: Omit<z.infer<typeof taskCompleteSchema>, \"projectDir\">,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_task_complete\", projectDir, args.milestoneId);\n const { executeTaskComplete } = await getWorkflowToolExecutors();\n // Pass `args` through directly rather than destructure-then-rebuild. The\n // previous implementation re-listed each field, which silently dropped\n // schema fields that weren't in the rebuild list (e.g., ADR-011's\n // `escalation` payload). The destructure-then-rebuild pattern is the bug\n // class; matching the spread shape used by sibling handlers (handleSliceComplete,\n // handleReplanSlice) eliminates the recurrence risk by construction.\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeTaskComplete(args, projectDir)),\n );\n}\n\nasync function handleSliceComplete(\n projectDir: string,\n args: z.infer<typeof sliceCompleteSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_slice_complete\", projectDir, args.milestoneId);\n const { executeSliceComplete } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir)),\n );\n}\n\nasync function handleReplanSlice(\n projectDir: string,\n args: z.infer<typeof replanSliceSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_replan_slice\", projectDir, args.milestoneId);\n const { executeReplanSlice } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir)),\n );\n}\n\nasync function handleCompleteMilestone(\n projectDir: string,\n args: z.infer<typeof completeMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_complete_milestone\", projectDir, args.milestoneId);\n const { executeCompleteMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir)),\n );\n}\n\nasync function handleValidateMilestone(\n projectDir: string,\n args: z.infer<typeof validateMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_validate_milestone\", projectDir, args.milestoneId);\n const { executeValidateMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir)),\n );\n}\n\nasync function handleReassessRoadmap(\n projectDir: string,\n args: z.infer<typeof reassessRoadmapSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_reassess_roadmap\", projectDir, args.milestoneId);\n const { executeReassessRoadmap } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir)),\n );\n}\n\nasync function handleSaveGateResult(\n projectDir: string,\n args: z.infer<typeof saveGateResultSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_save_gate_result\", projectDir, args.milestoneId);\n const { executeSaveGateResult } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir)),\n );\n}\n\nasync function ensureMilestoneDbRow(milestoneId: string): Promise<void> {\n try {\n const { insertMilestone } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n insertMilestone({ id: milestoneId, status: \"queued\" });\n } catch {\n // Ignore pre-existing rows or transient DB availability issues.\n }\n}\n\n// projectDir is optional. When omitted, the server uses process.cwd(). This\n// prevents the agent from burning tokens reasoning about which absolute path\n// to pass (git root vs worktree vs symlink-resolved external state layout) —\n// the server already knows where it is running.\nconst projectDirParam = z\n .string()\n .optional()\n .describe(\"Optional. Omit this field — the server defaults to its current working directory, which is already the correct project or worktree root.\");\n\nconst nonEmptyString = (field: string) =>\n z.string().trim().min(1, `${field} must be a non-empty string`);\n\n// Optional non-empty string: accepts omitted/undefined but rejects \"\" or\n// whitespace. Mirrors executor guards of the form\n// `value !== undefined && !isNonEmptyString(value)` — e.g. plan-task's\n// observabilityImpact. Do not preprocess \"\" to undefined; the executor\n// treats them differently.\nconst optionalNonEmptyString = (field: string) => nonEmptyString(field).optional();\n\n// Array of non-empty strings. Mirrors executor guards that call\n// `validateStringArray` or `arr.some((item) => !isNonEmptyString(item))`.\nconst nonEmptyStringArray = (field: string) =>\n z.array(nonEmptyString(`${field}[]`));\n\n// Matches the executor's `isNonEmptyString` (trim + length>0) so Zod rejects\n// empty/whitespace fields at parse time. Without this, MCP callers pass \"\" for\n// the heavy planning fields, Zod accepts it, and the executor rejects one\n// field per call — forcing the agent into a retry loop to discover every gap.\nconst planMilestoneSliceSchema = z.object({\n sliceId: nonEmptyString(\"sliceId\"),\n title: nonEmptyString(\"title\"),\n risk: nonEmptyString(\"risk\"),\n depends: z.array(z.string()),\n demo: nonEmptyString(\"demo\"),\n goal: nonEmptyString(\"goal\"),\n // ADR-011: heavy planning fields are optional for sketch slices; required for full slices.\n successCriteria: z.string().optional(),\n proofLevel: z.string().optional(),\n integrationClosure: z.string().optional(),\n observabilityImpact: z.string().optional(),\n // ADR-011 sketch-then-refine fields.\n isSketch: z.boolean().optional().describe(\"ADR-011: true marks this slice as a sketch awaiting refine-slice expansion\"),\n sketchScope: z.string().optional().describe(\"ADR-011: 2-3 sentence scope boundary, required when isSketch=true\"),\n}).superRefine((slice, ctx) => {\n if (slice.isSketch === true) {\n if (typeof slice.sketchScope !== \"string\" || slice.sketchScope.trim().length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"sketchScope\"],\n message: \"sketchScope must be a non-empty string when isSketch is true\",\n });\n }\n return;\n }\n const required = [\"successCriteria\", \"proofLevel\", \"integrationClosure\", \"observabilityImpact\"] as const;\n for (const field of required) {\n const value = slice[field];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [field],\n message: `${field} must be a non-empty string`,\n });\n }\n }\n});\n\nconst planMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n title: nonEmptyString(\"title\").describe(\"Milestone title\"),\n vision: nonEmptyString(\"vision\").describe(\"Milestone vision\"),\n slices: z.array(planMilestoneSliceSchema).describe(\"Planned slices for the milestone\"),\n status: z.string().optional().describe(\"Milestone status\"),\n dependsOn: z.array(z.string()).optional().describe(\"Milestone dependencies\"),\n successCriteria: z.array(z.string()).optional().describe(\"Top-level success criteria bullets\"),\n keyRisks: z.array(z.object({\n risk: nonEmptyString(\"risk\"),\n whyItMatters: nonEmptyString(\"whyItMatters\"),\n })).optional().describe(\"Structured risk entries\"),\n proofStrategy: z.array(z.object({\n riskOrUnknown: nonEmptyString(\"riskOrUnknown\"),\n retireIn: nonEmptyString(\"retireIn\"),\n whatWillBeProven: nonEmptyString(\"whatWillBeProven\"),\n })).optional().describe(\"Structured proof strategy entries\"),\n verificationContract: z.string().optional(),\n verificationIntegration: z.string().optional(),\n verificationOperational: z.string().optional(),\n verificationUat: z.string().optional(),\n definitionOfDone: z.array(z.string()).optional(),\n requirementCoverage: z.string().optional(),\n boundaryMapMarkdown: z.string().optional(),\n};\nconst planMilestoneSchema = z.object(planMilestoneParams);\n\nconst planSliceParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n goal: nonEmptyString(\"goal\").describe(\"Slice goal\"),\n tasks: z.array(z.object({\n taskId: nonEmptyString(\"taskId\"),\n title: nonEmptyString(\"title\"),\n description: nonEmptyString(\"description\"),\n estimate: nonEmptyString(\"estimate\"),\n files: nonEmptyStringArray(\"files\"),\n verify: nonEmptyString(\"verify\"),\n inputs: nonEmptyStringArray(\"inputs\"),\n expectedOutput: nonEmptyStringArray(\"expectedOutput\"),\n observabilityImpact: optionalNonEmptyString(\"observabilityImpact\"),\n })).describe(\"Planned tasks for the slice\"),\n successCriteria: z.string().optional(),\n proofLevel: z.string().optional(),\n integrationClosure: z.string().optional(),\n observabilityImpact: z.string().optional(),\n};\nconst planSliceSchema = z.object(planSliceParams);\n\nconst completeMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n title: nonEmptyString(\"title\").describe(\"Milestone title\"),\n oneLiner: z.string().describe(\"One-sentence summary of what the milestone achieved\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the milestone\"),\n verificationPassed: z.boolean().describe(\"Must be true after milestone verification succeeds\"),\n successCriteriaResults: z.string().optional(),\n definitionOfDoneResults: z.string().optional(),\n requirementOutcomes: z.string().optional(),\n keyDecisions: z.array(z.string()).optional(),\n keyFiles: z.array(z.string()).optional(),\n lessonsLearned: z.array(z.string()).optional(),\n followUps: z.string().optional(),\n deviations: z.string().optional(),\n};\nconst completeMilestoneSchema = z.object(completeMilestoneParams);\n\nconst validateMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n verdict: z.enum([\"pass\", \"needs-attention\", \"needs-remediation\"]).describe(\"Validation verdict\"),\n remediationRound: z.number().describe(\"Remediation round (0 for first validation)\"),\n successCriteriaChecklist: z.string().describe(\"Markdown checklist of success criteria with evidence\"),\n sliceDeliveryAudit: z.string().describe(\"Markdown auditing each slice's claimed vs delivered output\"),\n crossSliceIntegration: z.string().describe(\"Markdown describing cross-slice issues or closure\"),\n requirementCoverage: z.string().describe(\"Markdown describing requirement coverage and gaps\"),\n verificationClasses: z.string().optional(),\n verdictRationale: z.string().describe(\"Why this verdict was chosen\"),\n remediationPlan: z.string().optional(),\n};\nconst validateMilestoneSchema = z.object(validateMilestoneParams);\n\nconst roadmapSliceChangeSchema = z.object({\n sliceId: nonEmptyString(\"sliceId\"),\n title: nonEmptyString(\"title\"),\n risk: z.string().optional(),\n depends: z.array(z.string()).optional(),\n demo: z.string().optional(),\n});\n\nconst reassessRoadmapParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n completedSliceId: nonEmptyString(\"completedSliceId\").describe(\"Slice ID that just completed\"),\n verdict: nonEmptyString(\"verdict\").describe(\"Assessment verdict such as roadmap-confirmed or roadmap-adjusted\"),\n assessment: nonEmptyString(\"assessment\").describe(\"Assessment text explaining the roadmap decision\"),\n sliceChanges: z.object({\n modified: z.array(roadmapSliceChangeSchema),\n added: z.array(roadmapSliceChangeSchema),\n removed: z.array(z.string()),\n }).describe(\"Slice changes to apply\"),\n};\nconst reassessRoadmapSchema = z.object(reassessRoadmapParams);\n\nconst saveGateResultParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n gateId: z.string().describe(\"Gate ID (e.g. Q3, Q4, Q5, Q6, Q7, Q8, MV01, MV02, MV03, MV04). Accepts any string for forward-compatibility with new gates.\"),\n taskId: z.string().optional().describe(\"Task ID for task-scoped gates\"),\n verdict: z.enum([\"pass\", \"flag\", \"omitted\"]).describe(\"Gate verdict\"),\n rationale: z.string().describe(\"One-sentence justification\"),\n findings: z.string().optional().describe(\"Detailed markdown findings\"),\n};\nconst saveGateResultSchema = z.object(saveGateResultParams);\n\nconst replanSliceParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n blockerTaskId: nonEmptyString(\"blockerTaskId\").describe(\"Task ID that discovered the blocker\"),\n blockerDescription: nonEmptyString(\"blockerDescription\").describe(\"Description of the blocker\"),\n whatChanged: nonEmptyString(\"whatChanged\").describe(\"Summary of what changed in the plan\"),\n updatedTasks: z.array(z.object({\n taskId: nonEmptyString(\"taskId\"),\n title: nonEmptyString(\"title\"),\n description: z.string(),\n estimate: z.string(),\n files: z.array(z.string()),\n verify: z.string(),\n inputs: z.array(z.string()),\n expectedOutput: z.array(z.string()),\n fullPlanMd: z.string().optional(),\n })).describe(\"Tasks to upsert into the replanned slice\"),\n removedTaskIds: z.array(z.string()).describe(\"Task IDs to remove from the slice\"),\n};\nconst replanSliceSchema = z.object(replanSliceParams);\n\nconst sliceCompleteParams = {\n projectDir: projectDirParam,\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceTitle: z.string().describe(\"Title of the slice\"),\n oneLiner: z.string().describe(\"One-line summary of what the slice accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened across all tasks\"),\n verification: z.string().describe(\"What was verified across all tasks\"),\n uatContent: z.string().describe(\"UAT test content (markdown body)\"),\n deviations: z.string().optional(),\n knownLimitations: z.string().optional(),\n followUps: z.string().optional(),\n keyFiles: z.union([z.array(z.string()), z.string()]).optional(),\n keyDecisions: z.union([z.array(z.string()), z.string()]).optional(),\n patternsEstablished: z.union([z.array(z.string()), z.string()]).optional(),\n observabilitySurfaces: z.union([z.array(z.string()), z.string()]).optional(),\n provides: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsSurfaced: z.union([z.array(z.string()), z.string()]).optional(),\n drillDownPaths: z.union([z.array(z.string()), z.string()]).optional(),\n affects: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsAdvanced: z.array(z.union([\n z.object({ id: z.string(), how: z.string() }),\n z.string(),\n ])).optional(),\n requirementsValidated: z.array(z.union([\n z.object({ id: z.string(), proof: z.string() }),\n z.string(),\n ])).optional(),\n requirementsInvalidated: z.array(z.union([\n z.object({ id: z.string(), what: z.string() }),\n z.string(),\n ])).optional(),\n filesModified: z.array(z.union([\n z.object({ path: z.string(), description: z.string() }),\n z.string(),\n ])).optional(),\n requires: z.array(z.union([\n z.object({ slice: z.string(), provides: z.string() }),\n z.string(),\n ])).optional(),\n};\nconst sliceCompleteSchema = z.object(sliceCompleteParams);\n\nconst summarySaveParams = {\n projectDir: projectDirParam,\n milestone_id: z.string().describe(\"Milestone ID (e.g. M001)\"),\n slice_id: z.string().optional().describe(\"Slice ID (e.g. S01)\"),\n task_id: z.string().optional().describe(\"Task ID (e.g. T01)\"),\n artifact_type: z.string().describe(\"Artifact type to save (SUMMARY, RESEARCH, CONTEXT, ASSESSMENT, CONTEXT-DRAFT)\"),\n content: z.string().describe(\"The full markdown content of the artifact\"),\n};\nconst summarySaveSchema = z.object(summarySaveParams);\n\nconst decisionSaveParams = {\n projectDir: projectDirParam,\n scope: z.string().describe(\"Scope of the decision (e.g. architecture, library, observability)\"),\n decision: z.string().describe(\"What is being decided\"),\n choice: z.string().describe(\"The choice made\"),\n rationale: z.string().describe(\"Why this choice was made\"),\n revisable: z.string().optional().describe(\"Whether this can be revisited\"),\n when_context: z.string().optional().describe(\"When/context for the decision\"),\n made_by: z.enum([\"human\", \"agent\", \"collaborative\"]).optional().describe(\"Who made the decision\"),\n};\nconst decisionSaveSchema = z.object(decisionSaveParams);\n\nconst requirementUpdateParams = {\n projectDir: projectDirParam,\n id: z.string().describe(\"Requirement ID (e.g. R001)\"),\n status: z.string().optional().describe(\"New status\"),\n validation: z.string().optional().describe(\"Validation criteria or proof\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n description: z.string().optional().describe(\"Updated description\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n};\nconst requirementUpdateSchema = z.object(requirementUpdateParams);\n\nconst requirementSaveParams = {\n projectDir: projectDirParam,\n class: z.string().describe(\"Requirement class\"),\n description: z.string().describe(\"Short description of the requirement\"),\n why: z.string().describe(\"Why this requirement matters\"),\n source: z.string().describe(\"Origin of the requirement\"),\n status: z.string().optional().describe(\"Requirement status\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n validation: z.string().optional().describe(\"Validation criteria\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n};\nconst requirementSaveSchema = z.object(requirementSaveParams);\n\nconst milestoneGenerateIdParams = {\n projectDir: projectDirParam,\n};\nconst milestoneGenerateIdSchema = z.object(milestoneGenerateIdParams);\n\nconst planTaskParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n taskId: nonEmptyString(\"taskId\").describe(\"Task ID (e.g. T01)\"),\n title: nonEmptyString(\"title\").describe(\"Task title\"),\n description: nonEmptyString(\"description\").describe(\"Task description / steps block\"),\n estimate: nonEmptyString(\"estimate\").describe(\"Task estimate\"),\n files: z.array(z.string()).describe(\"Files likely touched\"),\n verify: nonEmptyString(\"verify\").describe(\"Verification command or block\"),\n inputs: z.array(z.string()).describe(\"Input files or references\"),\n expectedOutput: z.array(z.string()).describe(\"Expected output files or artifacts\"),\n observabilityImpact: optionalNonEmptyString(\"observabilityImpact\").describe(\"Task observability impact\"),\n};\nconst planTaskSchema = z.object(planTaskParams);\n\nconst skipSliceParams = {\n projectDir: projectDirParam,\n sliceId: z.string().describe(\"Slice ID (e.g. S02)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M003)\"),\n reason: z.string().optional().describe(\"Reason for skipping this slice\"),\n};\nconst skipSliceSchema = z.object(skipSliceParams);\n\nconst taskCompleteParams = {\n projectDir: projectDirParam,\n taskId: nonEmptyString(\"taskId\").describe(\"Task ID (e.g. T01)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n oneLiner: z.string().describe(\"One-line summary of what was accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the task\"),\n verification: z.string().describe(\"What was verified and how\"),\n deviations: z.string().optional().describe(\"Deviations from the task plan\"),\n knownIssues: z.string().optional().describe(\"Known issues discovered but not fixed\"),\n keyFiles: z.array(z.string()).optional().describe(\"List of key files created or modified\"),\n keyDecisions: z.array(z.string()).optional().describe(\"List of key decisions made during this task\"),\n blockerDiscovered: z.boolean().optional().describe(\"Whether a plan-invalidating blocker was discovered\"),\n // ADR-011 Phase 2: mid-execution escalation — agent asks the user to resolve an ambiguity.\n escalation: z.object({\n question: z.string().describe(\"The question the user needs to answer — one clear sentence.\"),\n options: z.array(z.object({\n id: z.string().describe(\"Short id (e.g. 'A', 'B') used by /gsd escalate resolve.\"),\n label: z.string().describe(\"One-line label.\"),\n tradeoffs: z.string().describe(\"1-2 sentences on the tradeoffs of this option.\"),\n })).min(2).max(4).describe(\"2-4 options the user can choose between.\"),\n recommendation: z.string().describe(\"Option id the executor recommends.\"),\n recommendationRationale: z.string().describe(\"Why the recommendation — 1-2 sentences.\"),\n continueWithDefault: z.boolean().describe(\n \"When true, loop continues (artifact logged for later review). When false, auto-mode pauses until the user resolves via /gsd escalate resolve.\",\n ),\n }).optional().describe(\"ADR-011 Phase 2: optional escalation payload. Only honored when phases.mid_execution_escalation is true.\"),\n verificationEvidence: z.array(z.union([\n z.object({\n command: z.string(),\n exitCode: z.number(),\n verdict: z.string(),\n durationMs: z.number(),\n }),\n z.string(),\n ])).optional().describe(\"Verification evidence entries\"),\n};\nconst taskCompleteSchema = z.object(taskCompleteParams);\n\nconst milestoneStatusParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID to query (e.g. M001)\"),\n};\nconst milestoneStatusSchema = z.object(milestoneStatusParams);\n\nconst journalQueryParams = {\n projectDir: projectDirParam,\n flowId: z.string().optional().describe(\"Filter by flow ID\"),\n unitId: z.string().optional().describe(\"Filter by unit ID\"),\n rule: z.string().optional().describe(\"Filter by rule name\"),\n eventType: z.string().optional().describe(\"Filter by event type\"),\n after: z.string().optional().describe(\"ISO-8601 lower bound (inclusive)\"),\n before: z.string().optional().describe(\"ISO-8601 upper bound (inclusive)\"),\n limit: z.number().optional().describe(\"Maximum entries to return\"),\n};\nconst journalQuerySchema = z.object(journalQueryParams);\n\nexport function registerWorkflowTools(server: McpToolServer): void {\n server.tool(\n \"gsd_decision_save\",\n \"Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_decision\",\n \"Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_update\",\n \"Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_update_requirement\",\n \"Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_save\",\n \"Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_requirement\",\n \"Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_milestone_generate_id\",\n \"Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const prefsMod = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/preferences.js\",\n ).catch(() => null);\n // Graceful degradation: a corrupt preferences file should not crash\n // milestone-id generation. Fall back to non-unique IDs if anything\n // throws here — matches the pre-fix behavior for missing prefs.\n let uniqueEnabled = false;\n try {\n uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;\n } catch {\n uniqueEnabled = false;\n }\n const nextId = nextMilestoneId(allIds, uniqueEnabled);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_generate_milestone_id\",\n \"Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const prefsMod = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/preferences.js\",\n ).catch(() => null);\n // Graceful degradation: a corrupt preferences file should not crash\n // milestone-id generation. Fall back to non-unique IDs if anything\n // throws here — matches the pre-fix behavior for missing prefs.\n let uniqueEnabled = false;\n try {\n uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;\n } catch {\n uniqueEnabled = false;\n }\n const nextId = nextMilestoneId(allIds, uniqueEnabled);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_plan_milestone\",\n \"Write milestone planning state to the GSD database and render ROADMAP.md from DB.\",\n planMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planMilestoneSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_milestone\", projectDir, params.milestoneId);\n const { executePlanMilestone } = await getWorkflowToolExecutors();\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir)),\n );\n },\n );\n\n server.tool(\n \"gsd_plan_slice\",\n \"Write slice/task planning state to the GSD database and render plan artifacts from DB.\",\n planSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planSliceSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_slice\", projectDir, params.milestoneId);\n const { executePlanSlice } = await getWorkflowToolExecutors();\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir)),\n );\n },\n );\n\n server.tool(\n \"gsd_plan_task\",\n \"Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_task_plan\",\n \"Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_replan_slice\",\n \"Replan a slice after a blocker is discovered, preserving completed tasks and re-rendering PLAN.md + REPLAN.md.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_replan\",\n \"Alias for gsd_replan_slice. Replan a slice after a blocker is discovered.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_complete\",\n \"Record a completed slice to the GSD database, render SUMMARY.md + UAT.md, and update roadmap projection.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_complete_slice\",\n \"Alias for gsd_slice_complete. Record a completed slice to the GSD database and render summary/UAT artifacts.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_skip_slice\",\n \"Mark a slice as skipped so auto-mode advances past it without executing.\",\n skipSliceParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, milestoneId, sliceId, reason } = parseWorkflowArgs(skipSliceSchema, args);\n await enforceWorkflowWriteGate(\"gsd_skip_slice\", projectDir, milestoneId);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { getSlice, updateSliceStatus } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n const { invalidateStateCache } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/state.js\");\n const { rebuildState } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/doctor.js\");\n const slice = getSlice(milestoneId, sliceId);\n if (!slice) {\n throw new Error(`Slice ${sliceId} not found in milestone ${milestoneId}`);\n }\n if (slice.status === \"complete\" || slice.status === \"done\") {\n throw new Error(`Slice ${sliceId} is already complete and cannot be skipped`);\n }\n if (slice.status !== \"skipped\") {\n updateSliceStatus(milestoneId, sliceId, \"skipped\");\n invalidateStateCache();\n await rebuildState(projectDir);\n }\n });\n return {\n content: [{ type: \"text\" as const, text: `Skipped slice ${sliceId} (${milestoneId}). Reason: ${reason ?? \"User-directed skip\"}.` }],\n };\n },\n );\n\n server.tool(\n \"gsd_complete_milestone\",\n \"Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_complete\",\n \"Alias for gsd_complete_milestone. Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_validate_milestone\",\n \"Validate a milestone, persist validation results to the GSD database, and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_validate\",\n \"Alias for gsd_validate_milestone. Validate a milestone and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_reassess_roadmap\",\n \"Reassess a milestone roadmap after a slice completes, writing ASSESSMENT.md and re-rendering ROADMAP.md.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_roadmap_reassess\",\n \"Alias for gsd_reassess_roadmap. Reassess a roadmap after slice completion.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_save_gate_result\",\n \"Save a quality gate result to the GSD database.\",\n saveGateResultParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(saveGateResultSchema, args);\n return handleSaveGateResult(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_summary_save\",\n \"Save a GSD summary/research/context/assessment artifact to the database and disk.\",\n summarySaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(summarySaveSchema, args);\n const { projectDir, milestone_id, slice_id, task_id, artifact_type, content } = parsed;\n await enforceWorkflowWriteGate(\"gsd_summary_save\", projectDir, milestone_id);\n const executors = await getWorkflowToolExecutors();\n const supportedArtifactTypes = getSupportedSummaryArtifactTypes(executors);\n if (!supportedArtifactTypes.includes(artifact_type)) {\n throw new Error(\n `artifact_type must be one of: ${supportedArtifactTypes.join(\", \")}`,\n );\n }\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() =>\n executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir),\n ),\n );\n },\n );\n\n server.tool(\n \"gsd_task_complete\",\n \"Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_complete_task\",\n \"Alias for gsd_task_complete. Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_milestone_status\",\n \"Read the current status of a milestone and all its slices from the GSD database.\",\n milestoneStatusParams,\n async (args: Record<string, unknown>) => {\n // gsd_milestone_status is a read-only query. In-process (query-tools.ts)\n // does not apply the write-gate; MCP must match to avoid blocking reads\n // during pending-gate or queue-mode states.\n const { projectDir, milestoneId } = parseWorkflowArgs(milestoneStatusSchema, args);\n const { executeMilestoneStatus } = await getWorkflowToolExecutors();\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir)),\n );\n },\n );\n\n server.tool(\n \"gsd_journal_query\",\n \"Query the structured event journal for auto-mode iterations.\",\n journalQueryParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);\n const { queryJournal } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/journal.js\");\n const entries = queryJournal(projectDir, filters).slice(0, limit ?? 100);\n if (entries.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"No matching journal entries found.\" }] };\n }\n return { content: [{ type: \"text\" as const, text: JSON.stringify(entries, null, 2) }] };\n },\n );\n\n // ─── ADR-013 step 3 — memory-store tools for external MCP clients ────────\n //\n // The same three tools the LLM sees in-process as `capture_thought`,\n // `memory_query`, and `gsd_graph` (the memory variant). MCP exposes them\n // under the gsd_* prefix and renames the memory graph to gsd_memory_graph\n // to avoid collision with the project knowledge graph tool registered as\n // `gsd_graph` in server.ts.\n\n const MEMORY_CATEGORY = z.enum([\n \"architecture\",\n \"convention\",\n \"gotcha\",\n \"preference\",\n \"environment\",\n \"pattern\",\n ]);\n\n const captureThoughtSchema = z.object({\n projectDir: z.string().optional(),\n category: MEMORY_CATEGORY,\n // Reject empty / whitespace-only content at the schema layer so the LLM\n // never produces a memory row with no searchable text.\n content: z.string().trim().min(1, \"content must be a non-empty trimmed string\"),\n confidence: z.number().min(0.1).max(0.99).optional(),\n tags: z.array(z.string()).optional(),\n scope: z.string().optional(),\n structuredFields: z.record(z.string(), z.unknown()).optional(),\n });\n const captureThoughtParams = {\n projectDir: z.string().optional().describe(\"Absolute path to the project directory (defaults to MCP server cwd)\"),\n category: MEMORY_CATEGORY.describe(\"Memory category\"),\n content: z.string().describe(\"Memory text (1-3 sentences, no secrets)\"),\n confidence: z.number().min(0.1).max(0.99).optional().describe(\"0.1-0.99, default 0.8\"),\n tags: z.array(z.string()).optional().describe(\"Free-form tags\"),\n scope: z.string().optional().describe(\"Scope name; defaults to 'project'\"),\n structuredFields: z.record(z.string(), z.unknown()).optional().describe(\"ADR-013 structured payload (e.g. decision fields)\"),\n };\n\n server.tool(\n \"gsd_capture_thought\",\n \"Record a durable project insight into the GSD memory store. Categories: architecture, convention, gotcha, preference, environment, pattern. Mirrors the in-process capture_thought tool for external MCP clients.\",\n captureThoughtParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, ...params } = parseWorkflowArgs(captureThoughtSchema, args);\n await enforceWorkflowWriteGate(\"gsd_capture_thought\", projectDir);\n return runSerializedWorkflowDbOperation(projectDir, async () => {\n const { executeMemoryCapture } = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/tools/memory-tools.js\",\n );\n return executeMemoryCapture(params);\n });\n },\n );\n\n const memoryQuerySchema = z.object({\n projectDir: z.string().optional(),\n // Match the documented \"2+ char terms\" contract in the in-process\n // memory_query tool — reject sub-2-char queries at the schema layer.\n query: z.string().trim().min(2, \"query must be at least 2 characters\"),\n k: z.number().int().min(1).max(50).optional(),\n category: MEMORY_CATEGORY.optional(),\n scope: z.string().optional(),\n tag: z.string().optional(),\n include_superseded: z.boolean().optional(),\n reinforce_hits: z.boolean().optional(),\n });\n const memoryQueryParams = {\n projectDir: z.string().optional().describe(\"Absolute path to the project directory (defaults to MCP server cwd)\"),\n query: z.string().describe(\"Keyword query (2+ char terms)\"),\n k: z.number().int().min(1).max(50).optional().describe(\"Max results (default 10, max 50)\"),\n category: MEMORY_CATEGORY.optional().describe(\"Restrict to a single category\"),\n scope: z.string().optional().describe(\"Only include memories with this scope\"),\n tag: z.string().optional().describe(\"Only include memories tagged with this value\"),\n include_superseded: z.boolean().optional().describe(\"Include superseded memories (default false)\"),\n reinforce_hits: z.boolean().optional().describe(\"Increment hit_count on returned memories (default false)\"),\n };\n\n server.tool(\n \"gsd_memory_query\",\n \"Search the GSD memory store by keyword. Returns ranked memories with id, category, content, confidence, scope, and tags. Mirrors the in-process memory_query tool for external MCP clients.\",\n memoryQueryParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, ...params } = parseWorkflowArgs(memoryQuerySchema, args);\n return runSerializedWorkflowDbOperation(projectDir, async () => {\n const { executeMemoryQuery } = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/tools/memory-tools.js\",\n );\n return executeMemoryQuery(params);\n });\n },\n );\n\n const memoryGraphSchema = z.object({\n projectDir: z.string().optional(),\n mode: z.enum([\"build\", \"query\"]),\n memoryId: z.string().optional(),\n depth: z.number().int().min(0).max(5).optional(),\n rel: z.enum([\"related_to\", \"depends_on\", \"contradicts\", \"elaborates\", \"supersedes\"]).optional(),\n }).refine(\n (val) => val.mode !== \"query\" || (typeof val.memoryId === \"string\" && val.memoryId.trim().length > 0),\n { message: \"memoryId is required and must be non-empty when mode=query\", path: [\"memoryId\"] },\n );\n const memoryGraphParams = {\n projectDir: z.string().optional().describe(\"Absolute path to the project directory (defaults to MCP server cwd)\"),\n mode: z.enum([\"build\", \"query\"]).describe(\"build = recompute graph (placeholder), query = inspect edges\"),\n memoryId: z.string().optional().describe(\"Memory ID (required when mode=query)\"),\n depth: z.number().int().min(0).max(5).optional().describe(\"Hops to traverse (0-5, default 1)\"),\n rel: z.enum([\"related_to\", \"depends_on\", \"contradicts\", \"elaborates\", \"supersedes\"]).optional().describe(\"Only include edges with this relation type\"),\n };\n\n server.tool(\n \"gsd_memory_graph\",\n \"Inspect the relationship graph between memories. mode=query walks edges from a given memoryId. mode=build is a placeholder reserved for future graph rebuilds. Distinct from gsd_graph (project knowledge graph) — see ADR-013.\",\n memoryGraphParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, ...params } = parseWorkflowArgs(memoryGraphSchema, args);\n return runSerializedWorkflowDbOperation(projectDir, async () => {\n const { executeGsdGraph } = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/tools/memory-tools.js\",\n );\n return executeGsdGraph(params);\n });\n },\n );\n}\n"]}
1
+ {"version":3,"file":"workflow-tools.js","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6PxB,IAAI,4BAA4B,GAA0C,IAAI,CAAC;AAC/E,IAAI,sBAAsB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAC9D,IAAI,wBAAwB,GAA4C,IAAI,CAAC;AAE7E,SAAS,qBAAqB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACjE,MAAM,cAAc,GAAG,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC;IAC7D,OAAO,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,YAAY,CAAC,aAAqB,EAAE,QAAgB;IAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9C,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,wBAAwB,CAAC,WAAmB;IACnD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,MAAyB,OAAO,CAAC,GAAG;IACzF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,UAAU,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,iEAAiE;IACjE,MAAM,kBAAkB,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,WAAW;QAAE,OAAO,kBAAkB,CAAC;IAE5C,MAAM,mBAAmB,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,YAAY,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAErF,oEAAoE;IACpE,2DAA2D;IAC3D,wEAAwE;IACxE,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,YAAY,GAAG,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;IACnE,IAAI,YAAY,IAAI,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,CAAC;QACnE,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,+EAA+E,kBAAkB,mBAAmB,mBAAmB,EAAE,CAC1I,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4EAA4E;QAC5E,wEAAwE;QACxE,yEAAyE;QACzE,sEAAsE;QACtE,UAAU;QACV,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAI,MAAoB,EAAE,IAA6B;IAC3E,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,MAA+B;IACzD,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,6BAA6B,CACpC,WAAmB,EACnB,WAA0B;IAE1B,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,6EAA6E;IAC7E,+DAA+D;IAC/D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAoB,EACpB,IAA6B;IAE7B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,wEAAwE;IACxE,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAChE,MAAM,WAAW,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAE7D,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAiC,CAAC,CAAC;IAC1E,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,gBAAgB,IAAI,WAAW,CAAC;IAE1D,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,iBAAiB;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,eAAe,GAAG;QACtB,wBAAwB;QACxB,sBAAsB;QACtB,kBAAkB;QAClB,oBAAoB;QACpB,sBAAsB;QACtB,0BAA0B;QAC1B,0BAA0B;QAC1B,wBAAwB;QACxB,uBAAuB;QACvB,oBAAoB;QACpB,qBAAqB;KACtB,CAAC;IAEF,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,gCAAgC,CAAC;QAC3D,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,gCAAgC,CAAC,SAAgC;IACxE,OAAO,SAAS,CAAC,gCAAgC,CAAC;AACpD,CAAC;AAED,SAAS,4BAA4B;IACnC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,EAAE,CAAC;IAC1E,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAClG,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,UAAU,CAAC,IAAI,CACb,IAAI,GAAG,CAAC,+DAA+D,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAC9F,IAAI,GAAG,CAAC,gEAAgE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAC/F,IAAI,GAAG,CAAC,+DAA+D,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAC/F,CAAC;IAEF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,UAAkB;IACnC,OAAO,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,0EAA0E;IAC1E,wEAAwE;IACxE,4CAA4C;IAC5C,MAAM,UAAU,GAAa,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC5C,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,OAAO;QAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,mDAAmD;IACnD,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACtD,IAAI,OAAO;YAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAI,YAAoB;IACtD,MAAM,UAAU,GAAG,sBAAsB,CAAC,YAAY,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,OAAgB,CAAC;IACrB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,SAAS,CAAM,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,mCAAmC,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC/E,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,cAAc,GAAG,GAAG,CAAC,6BAA6B,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACjG,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,UAAU,CAAC,IAAI,CACb,IAAI,GAAG,CAAC,wEAAwE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EACvG,IAAI,GAAG,CAAC,yEAAyE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EACxG,IAAI,GAAG,CAAC,wEAAwE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACxG,CAAC;IAEF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,wBAAwB;IACrC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAClC,4BAA4B,GAAG,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,SAAS,IAAI,mCAAmC,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACpC,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,0BAA0B,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;YAED,MAAM,IAAI,KAAK,CACb,sEAAsE;gBACtE,qFAAqF;gBACrF,8HAA8H;gBAC9H,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,OAAO,4BAA4B,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,0BAA0B;IACvC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9B,wBAAwB,GAAG,CAAC,KAAK,IAAI,EAAE;YACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,SAAS,IAAI,4BAA4B,EAAE,EAAE,CAAC;gBACvD,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,IACE,MAAM;wBACN,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;wBAClD,OAAO,MAAM,CAAC,gCAAgC,KAAK,UAAU;wBAC7D,OAAO,MAAM,CAAC,mCAAmC,KAAK,UAAU,EAChE,CAAC;wBACD,OAAO,MAAiC,CAAC;oBAC3C,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,0BAA0B,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;YAED,MAAM,IAAI,KAAK,CACb,+DAA+D;gBAC/D,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAWD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,mBAAmB;IACnB,mBAAmB;IACnB,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,sBAAsB;IACtB,2BAA2B;IAC3B,2BAA2B;IAC3B,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,gBAAgB;IAChB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,mBAAmB;IACnB,sEAAsE;IACtE,sEAAsE;IACtE,iEAAiE;IACjE,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;CACV,CAAC;AAEX,MAAM,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAErD,SAAS,sBAAsB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,MAAM,GAAG,GAAG,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,8BAA8B,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAClF,OAAO,MAAM,CAAC,CAAC,yBAAyB;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,mBAAmB,CAAC,MAAe;IAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IACzD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,8BAA8B,CAAI,EAAoB;IACnE,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,oDAAoD;IACpD,EAAE;IACF,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,sEAAsE;IACtE,yEAAyE;IACzE,2EAA2E;IAC3E,uEAAuE;IACvE,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,KAAK,GAAG,sBAAsB,CAAC;IACrC,IAAI,OAAoB,CAAC;IACzB,sBAAsB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACrD,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC;IACZ,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QACD,IAAI,KAAiC,CAAC;QACtC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,SAAS,2CAA2C,CAAC,CAAC,CAAC;YACzG,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,UAAkB,EAClB,EAAoB;IAEpB,OAAO,8BAA8B,CAAC,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,iBAAiB,CAC9C,kEAAkE,CACnE,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,QAAgB,EAChB,UAAkB,EAClB,cAA6B,IAAI;IAEjC,MAAM,SAAS,GAAG,MAAM,0BAA0B,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,SAAS,CAAC,gCAAgC,CAC5D,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;IACF,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,IAAI,kDAAkD,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,mCAAmC,CAC9D,QAAQ,EACR,QAAQ,EACR,EAAE,EACF,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;IACF,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,yCAAyC,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,UAAkB,EAClB,IAA4D;IAE5D,MAAM,wBAAwB,CAAC,mBAAmB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClF,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;IACjE,yEAAyE;IACzE,uEAAuE;IACvE,kEAAkE;IAClE,yEAAyE;IACzE,kFAAkF;IAClF,qEAAqE;IACrE,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAClF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,UAAkB,EAClB,IAAyC;IAEzC,MAAM,wBAAwB,CAAC,oBAAoB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAClE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACrF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,UAAkB,EAClB,IAAuC;IAEvC,MAAM,wBAAwB,CAAC,kBAAkB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjF,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAChE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACnF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,UAAkB,EAClB,IAA6C;IAE7C,MAAM,wBAAwB,CAAC,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACvF,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;IACtE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,UAAkB,EAClB,IAA6C;IAE7C,MAAM,wBAAwB,CAAC,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACvF,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;IACtE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,UAAkB,EAClB,IAA2C;IAE3C,MAAM,wBAAwB,CAAC,sBAAsB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACrF,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;IACpE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACvF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,UAAkB,EAClB,IAA0C;IAE1C,MAAM,wBAAwB,CAAC,sBAAsB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACrF,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;IACnE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACtF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IACrD,IAAI,CAAC;QACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,iBAAiB,CAAM,iDAAiD,CAAC,CAAC;QAC5G,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,gDAAgD;AAChD,MAAM,eAAe,GAAG,CAAC;KACtB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CAAC,0IAA0I,CAAC,CAAC;AAExJ,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE,CACvC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,6BAA6B,CAAC,CAAC;AAElE,yEAAyE;AACzE,kDAAkD;AAClD,uEAAuE;AACvE,uEAAuE;AACvE,2BAA2B;AAC3B,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEnF,gEAAgE;AAChE,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,EAAE,CAC5C,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC;AAExC,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,oEAAoE;AACpE,8EAA8E;AAC9E,yEAAyE;AACzE,qDAAqD;AACrD,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,EAAE,CAC7C,GAAG,KAAK,4FAA4F,CAAC;AAEvG,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;IAClC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;IAC9B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IACxF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC9E,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;IAC9F,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;IAChG,qCAAqC;IACrC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2MAA2M,CAAC;IACtP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;CACjH,CAAC,CAAC,QAAQ,CACT,0PAA0P,CAC3P,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC3B,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnF,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,IAAI,EAAE,CAAC,aAAa,CAAC;gBACrB,OAAO,EAAE,8DAA8D;aACxE,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,CAAU,CAAC;IACzG,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,IAAI,EAAE,CAAC,KAAK,CAAC;gBACb,OAAO,EAAE,GAAG,KAAK,6BAA6B;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG;IAC1B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC1D,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC7D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACtF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC1D,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC5E,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC9F,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;QAC5B,YAAY,EAAE,cAAc,CAAC,cAAc,CAAC;KAC7C,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAClD,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9B,aAAa,EAAE,cAAc,CAAC,eAAe,CAAC;QAC9C,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC;QACpC,gBAAgB,EAAE,cAAc,CAAC,kBAAkB,CAAC;KACrD,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC5D,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9C,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC;AACF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE1D,MAAM,eAAe,GAAG;IACtB,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAClE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;QAChC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;QAC9B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC;QAC1C,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC;QACpC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACnC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;QAChC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC;QACrC,cAAc,EAAE,mBAAmB,CAAC,gBAAgB,CAAC;QACrD,mBAAmB,EAAE,sBAAsB,CAAC,qBAAqB,CAAC;KACnE,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC3C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAElD,MAAM,uBAAuB,GAAG;IAC9B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC1D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IACpF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC1F,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC9F,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC;AACF,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAElE,MAAM,uBAAuB,GAAG;IAC9B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAChG,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACnF,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACrG,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IACrG,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAC/F,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAC7F,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACpE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC;AACF,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAElE,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC;IAClC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG;IAC5B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,gBAAgB,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC7F,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAC/G,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACpG,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;QAC3C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;QACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7B,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACtC,CAAC;AACF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9D,MAAM,oBAAoB,GAAG;IAC3B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC5D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6HAA6H,CAAC;IAC1J,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACvE,CAAC;AACF,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAE5D,MAAM,iBAAiB,GAAG;IACxB,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAClE,aAAa,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC9F,kBAAkB,EAAE,cAAc,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC/F,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC1F,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;QAChC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAClC,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACxD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAClF,CAAC;AACF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEtD,MAAM,mBAAmB,GAAG;IAC1B,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAClE,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACtF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/D,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnE,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1E,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/D,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3E,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9D,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC7C,CAAC,CAAC,MAAM,EAAE;KACX,CAAC,CAAC,CAAC,QAAQ,EAAE;IACd,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,CAAC,CAAC,MAAM,EAAE;KACX,CAAC,CAAC,CAAC,QAAQ,EAAE;IACd,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9C,CAAC,CAAC,MAAM,EAAE;KACX,CAAC,CAAC,CAAC,QAAQ,EAAE;IACd,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACvD,CAAC,CAAC,MAAM,EAAE;KACX,CAAC,CAAC,CAAC,QAAQ,EAAE;IACd,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACxB,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACrD,CAAC,CAAC,MAAM,EAAE;KACX,CAAC,CAAC,CAAC,QAAQ,EAAE;CACf,CAAC;AACF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE1D,MAAM,iBAAiB,GAAG;IACxB,UAAU,EAAE,eAAe;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC7D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;IACnH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC1E,CAAC;AACF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEtD,MAAM,kBAAkB,GAAG;IACzB,UAAU,EAAE,eAAe;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;IAC/F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC1E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC7E,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAClG,CAAC;AACF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAExD,MAAM,uBAAuB,GAAG;IAC9B,UAAU,EAAE,eAAe;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACpD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAClE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACrE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACvE,CAAC;AACF,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAElE,MAAM,qBAAqB,GAAG;IAC5B,UAAU,EAAE,eAAe;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC5D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACrE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;CAC1D,CAAC;AACF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9D,MAAM,yBAAyB,GAAG;IAChC,UAAU,EAAE,eAAe;CAC5B,CAAC;AACF,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAEtE,MAAM,cAAc,GAAG;IACrB,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAClE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/D,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IACrD,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrF,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC3D,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACjE,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAClF,mBAAmB,EAAE,sBAAsB,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACzG,CAAC;AACF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAEhD,MAAM,eAAe,GAAG;IACtB,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACnD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACzE,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAElD,MAAM,kBAAkB,GAAG;IACzB,UAAU,EAAE,eAAe;IAC3B,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/D,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAClE,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC/E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IACrF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACpF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC1F,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACpG,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACxG,2FAA2F;IAC3F,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;QAC5F,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACxB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YAClF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;SACjF,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACtE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACzE,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACvF,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CACvC,+IAA+I,CAChJ;KACF,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0GAA0G,CAAC;IAClI,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;SACvB,CAAC;QACF,CAAC,CAAC,MAAM,EAAE;KACX,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACzD,CAAC;AACF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAExD,MAAM,qBAAqB,GAAG;IAC5B,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACtE,CAAC;AACF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9D,MAAM,kBAAkB,GAAG;IACzB,UAAU,EAAE,eAAe;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACnE,CAAC;AACF,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAExD,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IACzD,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,4EAA4E,EAC5E,kBAAkB,EAClB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAM,oDAAoD,CAAC,CAAC;YAChH,OAAO,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACvF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,yGAAyG,EACzG,kBAAkB,EAClB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAM,oDAAoD,CAAC,CAAC;YAChH,OAAO,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACvF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,oFAAoF,EACpF,uBAAuB,EACvB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAChE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;QAC9C,MAAM,wBAAwB,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;QACrE,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,iBAAiB,CAAM,oDAAoD,CAAC,CAAC;YACrH,OAAO,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,sHAAsH,EACtH,uBAAuB,EACvB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAChE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;QAC9C,MAAM,wBAAwB,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;QACrE,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,iBAAiB,CAAM,oDAAoD,CAAC,CAAC;YACrH,OAAO,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,8EAA8E,EAC9E,qBAAqB,EACrB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAC9D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,iBAAiB,CAAM,oDAAoD,CAAC,CAAC;YACnH,OAAO,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,8GAA8G,EAC9G,qBAAqB,EACrB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAC9D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,iBAAiB,CAAM,oDAAoD,CAAC,CAAC;YACnH,OAAO,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,yDAAyD,EACzD,yBAAyB,EACzB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QAC1E,MAAM,wBAAwB,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,EAAE,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,EACJ,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,GAChB,GAAG,MAAM,iBAAiB,CAAM,wDAAwD,CAAC,CAAC;YAC3F,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACrC,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,EAAE,GAAG,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,sDAAsD,CACvD,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACpB,oEAAoE;YACpE,mEAAmE;YACnE,gEAAgE;YAChE,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC;gBACH,aAAa,GAAG,CAAC,CAAC,QAAQ,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,EAAE,oBAAoB,CAAC;YACjG,CAAC;YAAC,MAAM,CAAC;gBACP,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC;YACD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACtD,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,8FAA8F,EAC9F,yBAAyB,EACzB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QAC1E,MAAM,wBAAwB,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,EAAE,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,EACJ,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,GAChB,GAAG,MAAM,iBAAiB,CAAM,wDAAwD,CAAC,CAAC;YAC3F,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACrC,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,EAAE,GAAG,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,sDAAsD,CACvD,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACpB,oEAAoE;YACpE,mEAAmE;YACnE,gEAAgE;YAChE,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC;gBACH,aAAa,GAAG,CAAC,CAAC,QAAQ,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,EAAE,oBAAoB,CAAC;YACjG,CAAC;YAAC,MAAM,CAAC;gBACP,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC;YACD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACtD,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,mFAAmF,EACnF,mBAAmB,EACnB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,oBAAoB,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACrF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAClE,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACrF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wFAAwF,EACxF,eAAe,EACf,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,gBAAgB,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACjF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAC9D,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CACjF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,qFAAqF,EACrF,cAAc,EACd,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,iBAAiB,CAAM,0DAA0D,CAAC,CAAC;YACpH,OAAO,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gBAAgB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;SACtH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8GAA8G,EAC9G,cAAc,EACd,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;QACzC,MAAM,wBAAwB,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,iBAAiB,CAAM,0DAA0D,CAAC,CAAC;YACpH,OAAO,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,gBAAgB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;SACtH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,gHAAgH,EAChH,iBAAiB,EACjB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2EAA2E,EAC3E,iBAAiB,EACjB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,0GAA0G,EAC1G,mBAAmB,EACnB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,8GAA8G,EAC9G,mBAAmB,EACnB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,0EAA0E,EAC1E,eAAe,EACf,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC9F,MAAM,wBAAwB,CAAC,gBAAgB,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1E,MAAM,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAM,iDAAiD,CAAC,CAAC;YACxH,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,iBAAiB,CAAM,gDAAgD,CAAC,CAAC;YAChH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,iBAAiB,CAAM,iDAAiD,CAAC,CAAC;YACzG,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,2BAA2B,WAAW,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,4CAA4C,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACnD,oBAAoB,EAAE,CAAC;gBACvB,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,OAAO,KAAK,WAAW,cAAc,MAAM,IAAI,oBAAoB,GAAG,EAAE,CAAC;SACpI,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,6EAA6E,EAC7E,uBAAuB,EACvB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,uBAAuB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,+GAA+G,EAC/G,uBAAuB,EACvB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,uBAAuB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,iGAAiG,EACjG,uBAAuB,EACvB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,uBAAuB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,kFAAkF,EAClF,uBAAuB,EACvB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,uBAAuB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,0GAA0G,EAC1G,qBAAqB,EACrB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,4EAA4E,EAC5E,qBAAqB,EACrB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,iDAAiD,EACjD,oBAAoB,EACpB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAC7D,OAAO,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,mFAAmF,EACnF,iBAAiB,EACjB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC1D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QACvF,MAAM,wBAAwB,CAAC,kBAAkB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,MAAM,wBAAwB,EAAE,CAAC;QACnD,MAAM,sBAAsB,GAAG,gCAAgC,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,iCAAiC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CACxC,SAAS,CAAC,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,CACtG,CACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,wEAAwE,EACxE,kBAAkB,EAClB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC3C,OAAO,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,qGAAqG,EACrG,kBAAkB,EAClB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC3C,OAAO,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,kFAAkF,EAClF,qBAAqB,EACrB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,yEAAyE;QACzE,wEAAwE;QACxE,4CAA4C;QAC5C,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACnF,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC;QACpE,OAAO,mBAAmB,CACxB,MAAM,8BAA8B,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC,CAChG,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,8DAA8D,EAC9D,kBAAkB,EAClB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QACtF,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,iBAAiB,CAAM,kDAAkD,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;QACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,EAAE,CAAC;QAC9F,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,EAAE;IACF,qEAAqE;IACrE,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,4BAA4B;IAE5B,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;QAC7B,cAAc;QACd,YAAY;QACZ,QAAQ;QACR,YAAY;QACZ,aAAa;QACb,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;QACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,eAAe;QACzB,wEAAwE;QACxE,uDAAuD;QACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4CAA4C,CAAC;QAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QACpD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC/D,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG;QAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;QACjH,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACtF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC1E,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAC7H,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mNAAmN,EACnN,oBAAoB,EACpB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAChF,MAAM,wBAAwB,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;QAClE,OAAO,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,iBAAiB,CACtD,6DAA6D,CAC9D,CAAC;YACF,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;QACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,kEAAkE;QAClE,qEAAqE;QACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qCAAqC,CAAC;QACtE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC7C,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE;QACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1B,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC1C,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG;QACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;QACjH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC3D,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC1F,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC9E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACnF,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAClG,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;KAC5G,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,6LAA6L,EAC7L,iBAAiB,EACjB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC7E,OAAO,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,iBAAiB,CACpD,6DAA6D,CAC9D,CAAC;YACF,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;QACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAChD,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;KAChG,CAAC,CAAC,MAAM,CACP,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EACrG,EAAE,OAAO,EAAE,4DAA4D,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAC9F,CAAC;IACF,MAAM,iBAAiB,GAAG;QACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;QACjH,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;QACzG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC9F,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACvJ,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,iOAAiO,EACjO,iBAAiB,EACjB,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC7E,OAAO,gCAAgC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,iBAAiB,CACjD,6DAA6D,CAC9D,CAAC;YACF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Workflow MCP tools — exposes the core GSD mutation/read handlers over MCP.\n */\n\nimport { existsSync, realpathSync } from \"node:fs\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { z } from \"zod\";\n\ntype WorkflowToolExecutors = {\n SUPPORTED_SUMMARY_ARTIFACT_TYPES: readonly string[];\n executeMilestoneStatus: (params: { milestoneId: string }, basePath?: string) => Promise<unknown>;\n executePlanMilestone: (\n params: {\n milestoneId: string;\n title: string;\n vision: string;\n slices: Array<{\n sliceId: string;\n title: string;\n risk: string;\n depends: string[];\n demo: string;\n goal: string;\n successCriteria?: string;\n proofLevel?: string;\n integrationClosure?: string;\n observabilityImpact?: string;\n isSketch?: boolean;\n sketchScope?: string;\n }>;\n status?: string;\n dependsOn?: string[];\n successCriteria?: string[];\n keyRisks?: Array<{ risk: string; whyItMatters: string }>;\n proofStrategy?: Array<{ riskOrUnknown: string; retireIn: string; whatWillBeProven: string }>;\n verificationContract?: string;\n verificationIntegration?: string;\n verificationOperational?: string;\n verificationUat?: string;\n definitionOfDone?: string[];\n requirementCoverage?: string;\n boundaryMapMarkdown?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executePlanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n goal: string;\n tasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n observabilityImpact?: string;\n }>;\n successCriteria?: string;\n proofLevel?: string;\n integrationClosure?: string;\n observabilityImpact?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReplanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n blockerTaskId: string;\n blockerDescription: string;\n whatChanged: string;\n updatedTasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n fullPlanMd?: string;\n }>;\n removedTaskIds: string[];\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSliceComplete: (\n params: {\n sliceId: string;\n milestoneId: string;\n sliceTitle: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n uatContent: string;\n deviations?: string;\n knownLimitations?: string;\n followUps?: string;\n keyFiles?: string[] | string;\n keyDecisions?: string[] | string;\n patternsEstablished?: string[] | string;\n observabilitySurfaces?: string[] | string;\n provides?: string[] | string;\n requirementsSurfaced?: string[] | string;\n drillDownPaths?: string[] | string;\n affects?: string[] | string;\n requirementsAdvanced?: Array<{ id: string; how: string } | string>;\n requirementsValidated?: Array<{ id: string; proof: string } | string>;\n requirementsInvalidated?: Array<{ id: string; what: string } | string>;\n filesModified?: Array<{ path: string; description: string } | string>;\n requires?: Array<{ slice: string; provides: string } | string>;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeCompleteMilestone: (\n params: {\n milestoneId: string;\n title: string;\n oneLiner: string;\n narrative: string;\n verificationPassed: boolean;\n successCriteriaResults?: string;\n definitionOfDoneResults?: string;\n requirementOutcomes?: string;\n keyDecisions?: string[];\n keyFiles?: string[];\n lessonsLearned?: string[];\n followUps?: string;\n deviations?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeValidateMilestone: (\n params: {\n milestoneId: string;\n verdict: \"pass\" | \"needs-attention\" | \"needs-remediation\";\n remediationRound: number;\n successCriteriaChecklist: string;\n sliceDeliveryAudit: string;\n crossSliceIntegration: string;\n requirementCoverage: string;\n verificationClasses?: string;\n verdictRationale: string;\n remediationPlan?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReassessRoadmap: (\n params: {\n milestoneId: string;\n completedSliceId: string;\n verdict: string;\n assessment: string;\n sliceChanges: {\n modified: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n added: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n removed: string[];\n };\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSaveGateResult: (\n params: {\n milestoneId: string;\n sliceId: string;\n gateId: string;\n taskId?: string;\n verdict: \"pass\" | \"flag\" | \"omitted\";\n rationale: string;\n findings?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSummarySave: (\n params: {\n milestone_id: string;\n slice_id?: string;\n task_id?: string;\n artifact_type: string;\n content: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeTaskComplete: (\n params: {\n taskId: string;\n sliceId: string;\n milestoneId: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n deviations?: string;\n knownIssues?: string;\n keyFiles?: string[];\n keyDecisions?: string[];\n blockerDiscovered?: boolean;\n escalation?: {\n question: string;\n options: Array<{ id: string; label: string; tradeoffs: string }>;\n recommendation: string;\n recommendationRationale: string;\n continueWithDefault: boolean;\n };\n verificationEvidence?: Array<\n { command: string; exitCode: number; verdict: string; durationMs: number } | string\n >;\n },\n basePath?: string,\n ) => Promise<unknown>;\n};\n\ntype WorkflowWriteGateModule = {\n loadWriteGateSnapshot: (basePath?: string) => {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n };\n shouldBlockPendingGateInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n milestoneId: string | null,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n shouldBlockQueueExecutionInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n input: string,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n};\n\ntype WorkflowDbBootstrapModule = {\n ensureDbOpen: (basePath?: string) => Promise<boolean>;\n};\n\nlet workflowToolExecutorsPromise: Promise<WorkflowToolExecutors> | null = null;\nlet workflowExecutionQueue: Promise<void> = Promise.resolve();\nlet workflowWriteGatePromise: Promise<WorkflowWriteGateModule> | null = null;\n\nfunction getAllowedProjectRoot(env: NodeJS.ProcessEnv = process.env): string | null {\n const configuredRoot = env.GSD_WORKFLOW_PROJECT_ROOT?.trim();\n return configuredRoot ? resolve(configuredRoot) : null;\n}\n\nfunction isWithinRoot(candidatePath: string, rootPath: string): boolean {\n const rel = relative(rootPath, candidatePath);\n return rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\n/**\n * Resolve the symlink target of `<allowedRoot>/.gsd` when it points into the\n * external state layout (`~/.gsd/projects/<hash>/`). Returns the realpath of\n * that target so callers can accept worktree paths that live under\n * `<external-state>/worktrees/<MID>/`. Returns null when `.gsd` is absent or\n * resolution fails — the caller should fall back to the direct containment\n * check in that case.\n */\nfunction resolveExternalStateRoot(allowedRoot: string): string | null {\n try {\n return realpathSync(join(allowedRoot, \".gsd\"));\n } catch {\n return null;\n }\n}\n\nexport function validateProjectDir(projectDir: string, env: NodeJS.ProcessEnv = process.env): string {\n if (!isAbsolute(projectDir)) {\n throw new Error(`projectDir must be an absolute path. Received: ${projectDir}`);\n }\n\n const lexicallyResolved = resolve(projectDir);\n // Resolve symlinks on the candidate before the containment check so that a\n // symlink inside the allowed root pointing outside of it cannot bypass the\n // guard. Falls back to the lexical path if the candidate does not exist yet\n // (legitimate for a brand-new worktree dir about to be created).\n const resolvedProjectDir = safeRealpath(lexicallyResolved);\n\n const allowedRoot = getAllowedProjectRoot(env);\n if (!allowedRoot) return resolvedProjectDir;\n\n const resolvedAllowedRoot = safeRealpath(allowedRoot);\n if (isWithinRoot(resolvedProjectDir, resolvedAllowedRoot)) return resolvedProjectDir;\n\n // External state layout: `<allowedRoot>/.gsd` may be a symlink into\n // `~/.gsd/projects/<hash>/`, and auto-worktrees live under\n // `~/.gsd/projects/<hash>/worktrees/<MID>/`. Accept candidates that are\n // under the realpath of `<allowedRoot>/.gsd` — they belong to this project\n // even though their absolute path is outside allowedRoot (#issue-a44).\n const externalRoot = resolveExternalStateRoot(resolvedAllowedRoot);\n if (externalRoot && isWithinRoot(resolvedProjectDir, externalRoot)) {\n return resolvedProjectDir;\n }\n\n throw new Error(\n `projectDir must stay within the configured workflow project root. Received: ${resolvedProjectDir}; allowed root: ${resolvedAllowedRoot}`,\n );\n}\n\nfunction safeRealpath(path: string): string {\n try {\n return realpathSync(path);\n } catch (err) {\n // Only fall back for non-existent paths — a legitimate case when a worktree\n // directory hasn't been created yet. Permission errors (EACCES), not-a-\n // directory (ENOTDIR), etc. must propagate so we do not silently degrade\n // to a lexical-only containment check that a restricted symlink could\n // bypass.\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") return path;\n throw err;\n }\n}\n\nfunction parseToolArgs<T>(schema: z.ZodType<T>, args: Record<string, unknown>): T {\n return schema.parse(args);\n}\n\n/**\n * Extract a milestone ID from parsed tool args, trying common field names.\n * Returns null when no field is present or the value is not a string.\n */\nfunction extractMilestoneId(parsed: Record<string, unknown>): string | null {\n const candidates = [parsed.milestoneId, parsed.milestone_id, parsed.mid];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.trim() !== \"\") return c.trim();\n }\n return null;\n}\n\n/**\n * If an auto-worktree exists for the given milestone under\n * `<projectRoot>/.gsd/worktrees/<milestoneId>/`, return that path as the\n * basePath the tool should write against. Returns null when no worktree\n * exists for this milestone, leaving the caller to use the project root.\n *\n * This unbreaks the external-state layout where the MCP server's process.cwd()\n * is the project root (set at Claude Code launch) but auto-mode is actually\n * working inside a per-milestone worktree. Without this, tool writes go to\n * the shared project `.gsd/` and auto-mode's verifyExpectedArtifact (which\n * uses the worktree `.gsd/`) fails, triggering a guaranteed retry per unit.\n */\nfunction resolveActiveWorktreeBasePath(\n projectRoot: string,\n milestoneId: string | null,\n): string | null {\n if (!milestoneId) return null;\n const wtPath = join(projectRoot, \".gsd\", \"worktrees\", milestoneId);\n if (!existsSync(wtPath)) return null;\n // Sanity check: a real git worktree has a `.git` file with a gitdir pointer.\n // Bare directories without it shouldn't hijack the write path.\n if (!existsSync(join(wtPath, \".git\"))) return null;\n return wtPath;\n}\n\nfunction parseWorkflowArgs<T extends { projectDir?: string }>(\n schema: z.ZodType<T>,\n args: Record<string, unknown>,\n): T & { projectDir: string } {\n const parsed = parseToolArgs(schema, args);\n // Step 1: figure out the project root. The agent shouldn't need to pass\n // projectDir — default to process.cwd() which the MCP server inherited from\n // Claude Code (launched at the project root).\n const projectRootCandidate = parsed.projectDir ?? process.cwd();\n const projectRoot = validateProjectDir(projectRootCandidate);\n\n // Step 2: if this tool call is scoped to a milestone that has an active\n // auto-worktree, re-route writes to the worktree's .gsd rather than the\n // project's shared .gsd. auto-mode's verifyExpectedArtifact runs against\n // the worktree, and a mismatch here causes every unit to retry once.\n const milestoneId = extractMilestoneId(parsed as Record<string, unknown>);\n const worktreeBasePath = resolveActiveWorktreeBasePath(projectRoot, milestoneId);\n const effectiveBasePath = worktreeBasePath ?? projectRoot;\n\n return {\n ...parsed,\n projectDir: effectiveBasePath,\n };\n}\n\nfunction isWorkflowToolExecutors(value: unknown): value is WorkflowToolExecutors {\n if (!value || typeof value !== \"object\") return false;\n const record = value as Record<string, unknown>;\n const functionExports = [\n \"executeMilestoneStatus\",\n \"executePlanMilestone\",\n \"executePlanSlice\",\n \"executeReplanSlice\",\n \"executeSliceComplete\",\n \"executeCompleteMilestone\",\n \"executeValidateMilestone\",\n \"executeReassessRoadmap\",\n \"executeSaveGateResult\",\n \"executeSummarySave\",\n \"executeTaskComplete\",\n ];\n\n return Array.isArray(record.SUPPORTED_SUMMARY_ARTIFACT_TYPES) &&\n functionExports.every((key) => typeof record[key] === \"function\");\n}\n\nfunction getSupportedSummaryArtifactTypes(executors: WorkflowToolExecutors): readonly string[] {\n return executors.SUPPORTED_SUMMARY_ARTIFACT_TYPES;\n}\n\nfunction getWriteGateModuleCandidates(): string[] {\n const candidates: string[] = [];\n const explicitModule = process.env.GSD_WORKFLOW_WRITE_GATE_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_WRITE_GATE_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nfunction toFileUrl(modulePath: string): string {\n return pathToFileURL(resolve(modulePath)).href;\n}\n\n/** @internal — exported for testing only */\nexport function _buildImportCandidates(relativePath: string): string[] {\n // Build candidate paths: try the given path first, then swap src/<->dist/\n // and try .ts extension. This handles both dev (tsx from src/) and prod\n // (compiled from dist/) execution contexts.\n const candidates: string[] = [relativePath];\n const swapped = relativePath.includes(\"/src/\")\n ? relativePath.replace(\"/src/\", \"/dist/\")\n : relativePath.includes(\"/dist/\")\n ? relativePath.replace(\"/dist/\", \"/src/\")\n : null;\n if (swapped) candidates.push(swapped);\n // Also try .ts variants for dev-mode tsx execution\n if (relativePath.endsWith(\".js\")) {\n candidates.push(relativePath.replace(/\\.js$/, \".ts\"));\n if (swapped) candidates.push(swapped.replace(/\\.js$/, \".ts\"));\n }\n return candidates;\n}\n\nasync function importLocalModule<T>(relativePath: string): Promise<T> {\n const candidates = _buildImportCandidates(relativePath)\n .map((p) => new URL(p, import.meta.url).href);\n\n let lastErr: unknown;\n for (const candidate of candidates) {\n try {\n return await import(candidate) as T;\n } catch (err) {\n lastErr = err;\n }\n }\n throw lastErr;\n}\n\nfunction getWorkflowExecutorModuleCandidates(env: NodeJS.ProcessEnv = process.env): string[] {\n const candidates: string[] = [];\n const explicitModule = env.GSD_WORKFLOW_EXECUTORS_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_EXECUTORS_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nasync function getWorkflowToolExecutors(): Promise<WorkflowToolExecutors> {\n if (!workflowToolExecutorsPromise) {\n workflowToolExecutorsPromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWorkflowExecutorModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (isWorkflowToolExecutors(loaded)) {\n return loaded;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD workflow executor bridge for MCP mutation tools. \" +\n \"Set GSD_WORKFLOW_EXECUTORS_MODULE to an importable workflow-tool-executors module, \" +\n \"or run the MCP server from a GSD checkout that includes src/resources/extensions/gsd/tools/workflow-tool-executors.(js|ts). \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowToolExecutorsPromise;\n}\n\nasync function getWorkflowWriteGateModule(): Promise<WorkflowWriteGateModule> {\n if (!workflowWriteGatePromise) {\n workflowWriteGatePromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWriteGateModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (\n loaded &&\n typeof loaded.loadWriteGateSnapshot === \"function\" &&\n typeof loaded.shouldBlockPendingGateInSnapshot === \"function\" &&\n typeof loaded.shouldBlockQueueExecutionInSnapshot === \"function\"\n ) {\n return loaded as WorkflowWriteGateModule;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD write-gate bridge for workflow MCP tools. \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowWriteGatePromise;\n}\n\ninterface McpToolServer {\n tool(\n name: string,\n description: string,\n params: Record<string, unknown>,\n handler: (args: Record<string, unknown>) => Promise<unknown>,\n ): unknown;\n}\n\nexport const WORKFLOW_TOOL_NAMES = [\n \"gsd_decision_save\",\n \"gsd_save_decision\",\n \"gsd_requirement_update\",\n \"gsd_update_requirement\",\n \"gsd_requirement_save\",\n \"gsd_save_requirement\",\n \"gsd_milestone_generate_id\",\n \"gsd_generate_milestone_id\",\n \"gsd_plan_milestone\",\n \"gsd_plan_slice\",\n \"gsd_plan_task\",\n \"gsd_task_plan\",\n \"gsd_replan_slice\",\n \"gsd_slice_replan\",\n \"gsd_slice_complete\",\n \"gsd_complete_slice\",\n \"gsd_skip_slice\",\n \"gsd_complete_milestone\",\n \"gsd_milestone_complete\",\n \"gsd_validate_milestone\",\n \"gsd_milestone_validate\",\n \"gsd_reassess_roadmap\",\n \"gsd_roadmap_reassess\",\n \"gsd_save_gate_result\",\n \"gsd_summary_save\",\n \"gsd_task_complete\",\n \"gsd_complete_task\",\n \"gsd_milestone_status\",\n \"gsd_journal_query\",\n // ADR-013 step 3: memory-store tools exposed to external MCP clients.\n // gsd_memory_graph is namespaced to avoid collision with the existing\n // gsd_graph tool (project knowledge graph from .gsd/ artifacts).\n \"gsd_capture_thought\",\n \"gsd_memory_query\",\n \"gsd_memory_graph\",\n] as const;\n\nconst DEFAULT_WORKFLOW_OP_TIMEOUT_MS = 5 * 60 * 1000;\n\nfunction getWorkflowOpTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = env.GSD_MCP_WORKFLOW_TIMEOUT_MS?.trim();\n if (!raw) return DEFAULT_WORKFLOW_OP_TIMEOUT_MS;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed) || parsed < 0) return DEFAULT_WORKFLOW_OP_TIMEOUT_MS;\n return parsed; // 0 disables the timeout\n}\n\n/**\n * Adapt an executor `ToolExecutionResult` ({ content, details?, isError? }) to\n * the MCP `CallToolResult` shape ({ content, structuredContent?, isError? }).\n *\n * MCP transports (including stdio) only serialize fields declared in the\n * protocol, so a non-standard `details` field is silently dropped over the\n * wire. Mirroring it into `structuredContent` — the protocol's supported\n * channel for structured tool payloads — preserves the data for clients that\n * render from it (e.g. the save_gate_result renderer that reads gateId /\n * verdict). See #4472.\n *\n * Discard policy for non-plain-object `details`: the `isPlainObject` guard\n * accepts the canonical case (a record literal) and intentionally drops bare\n * primitives (string, number, boolean), bare arrays, and class instances /\n * Date objects. This is deliberate — MCP `structuredContent` is specified as\n * a JSON object; non-object payloads can't round-trip cleanly. No current\n * executor returns a non-object `details`, so this never fires in practice.\n * Future executors needing to return a primitive should wrap it\n * (`details: { value: 42 }`) rather than relying on the discard.\n */\nfunction adaptExecutorResult(result: unknown): unknown {\n if (!result || typeof result !== \"object\") return result;\n const r = result as Record<string, unknown>;\n if (!(\"details\" in r)) return result;\n const { details, ...rest } = r;\n return isPlainObject(details) ? { ...rest, structuredContent: details } : rest;\n}\n\n/**\n * Strict plain-object guard. True only for object literals and\n * `Object.create(null)` — not for `Date`, `URL`, `Map`, `Set`, class instances,\n * or arrays. Used to gate `structuredContent` forwarding so the MCP transport\n * receives only true JSON objects (the protocol contract).\n *\n * Mirrored in `src/mcp-server.ts` for the agent-tool registry path's\n * structured-content gate. Keep both copies in sync if the contract definition\n * needs to evolve. See #4477 review.\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\") return false;\n if (Array.isArray(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n\nasync function runSerializedWorkflowOperation<T>(fn: () => Promise<T>): Promise<T> {\n // The shared DB adapter and workflow log base path are process-global, so\n // workflow MCP mutations must not overlap within a single server process.\n // A per-operation deadline prevents a single stuck call from wedging every\n // subsequent write for the lifetime of the process.\n //\n // Known limitation: on timeout we surface an error and release the queue,\n // but Promise.race cannot cancel the underlying `fn()` — it may continue\n // running in the background and overlap with the next admitted operation.\n // Proper cancellation requires threading an AbortSignal through every\n // workflow executor (`workflow-tool-executors.ts` and friends), which is\n // a larger change. The current trade-off: risk a theoretical overlap after\n // a 5-minute wall-clock timeout vs permanently wedging the server. The\n // overlap window is bounded by how long the zombie `fn()` keeps running;\n // in practice DB writes complete quickly even when the caller gave up.\n const prior = workflowExecutionQueue;\n let release!: () => void;\n workflowExecutionQueue = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await prior;\n const timeoutMs = getWorkflowOpTimeoutMs();\n try {\n if (timeoutMs === 0) {\n return await fn();\n }\n let timer: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`Workflow operation exceeded ${timeoutMs}ms deadline (GSD_MCP_WORKFLOW_TIMEOUT_MS)`));\n }, timeoutMs);\n });\n try {\n return await Promise.race([fn(), timeoutPromise]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n } finally {\n release();\n }\n}\n\nasync function runSerializedWorkflowDbOperation<T>(\n projectDir: string,\n fn: () => Promise<T>,\n): Promise<T> {\n return runSerializedWorkflowOperation(async () => {\n const { ensureDbOpen } = await importLocalModule<WorkflowDbBootstrapModule>(\n \"../../../src/resources/extensions/gsd/bootstrap/dynamic-tools.js\",\n );\n const dbAvailable = await ensureDbOpen(projectDir);\n if (!dbAvailable) {\n throw new Error(\"GSD database is not available\");\n }\n return fn();\n });\n}\n\nasync function enforceWorkflowWriteGate(\n toolName: string,\n projectDir: string,\n milestoneId: string | null = null,\n): Promise<void> {\n const writeGate = await getWorkflowWriteGateModule();\n const snapshot = writeGate.loadWriteGateSnapshot(projectDir);\n const pendingGate = writeGate.shouldBlockPendingGateInSnapshot(\n snapshot,\n toolName,\n milestoneId,\n snapshot.activeQueuePhase,\n );\n if (pendingGate.block) {\n throw new Error(pendingGate.reason ?? \"workflow tool blocked by pending discussion gate\");\n }\n\n const queueGuard = writeGate.shouldBlockQueueExecutionInSnapshot(\n snapshot,\n toolName,\n \"\",\n snapshot.activeQueuePhase,\n );\n if (queueGuard.block) {\n throw new Error(queueGuard.reason ?? \"workflow tool blocked during queue mode\");\n }\n}\n\nasync function handleTaskComplete(\n projectDir: string,\n args: Omit<z.infer<typeof taskCompleteSchema>, \"projectDir\">,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_task_complete\", projectDir, args.milestoneId);\n const { executeTaskComplete } = await getWorkflowToolExecutors();\n // Pass `args` through directly rather than destructure-then-rebuild. The\n // previous implementation re-listed each field, which silently dropped\n // schema fields that weren't in the rebuild list (e.g., ADR-011's\n // `escalation` payload). The destructure-then-rebuild pattern is the bug\n // class; matching the spread shape used by sibling handlers (handleSliceComplete,\n // handleReplanSlice) eliminates the recurrence risk by construction.\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeTaskComplete(args, projectDir)),\n );\n}\n\nasync function handleSliceComplete(\n projectDir: string,\n args: z.infer<typeof sliceCompleteSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_slice_complete\", projectDir, args.milestoneId);\n const { executeSliceComplete } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir)),\n );\n}\n\nasync function handleReplanSlice(\n projectDir: string,\n args: z.infer<typeof replanSliceSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_replan_slice\", projectDir, args.milestoneId);\n const { executeReplanSlice } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir)),\n );\n}\n\nasync function handleCompleteMilestone(\n projectDir: string,\n args: z.infer<typeof completeMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_complete_milestone\", projectDir, args.milestoneId);\n const { executeCompleteMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir)),\n );\n}\n\nasync function handleValidateMilestone(\n projectDir: string,\n args: z.infer<typeof validateMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_validate_milestone\", projectDir, args.milestoneId);\n const { executeValidateMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir)),\n );\n}\n\nasync function handleReassessRoadmap(\n projectDir: string,\n args: z.infer<typeof reassessRoadmapSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_reassess_roadmap\", projectDir, args.milestoneId);\n const { executeReassessRoadmap } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir)),\n );\n}\n\nasync function handleSaveGateResult(\n projectDir: string,\n args: z.infer<typeof saveGateResultSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_save_gate_result\", projectDir, args.milestoneId);\n const { executeSaveGateResult } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir)),\n );\n}\n\nasync function ensureMilestoneDbRow(milestoneId: string): Promise<void> {\n try {\n const { insertMilestone } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n insertMilestone({ id: milestoneId, status: \"queued\" });\n } catch {\n // Ignore pre-existing rows or transient DB availability issues.\n }\n}\n\n// projectDir is optional. When omitted, the server uses process.cwd(). This\n// prevents the agent from burning tokens reasoning about which absolute path\n// to pass (git root vs worktree vs symlink-resolved external state layout) —\n// the server already knows where it is running.\nconst projectDirParam = z\n .string()\n .optional()\n .describe(\"Optional. Omit this field — the server defaults to its current working directory, which is already the correct project or worktree root.\");\n\nconst nonEmptyString = (field: string) =>\n z.string().trim().min(1, `${field} must be a non-empty string`);\n\n// Optional non-empty string: accepts omitted/undefined but rejects \"\" or\n// whitespace. Mirrors executor guards of the form\n// `value !== undefined && !isNonEmptyString(value)` — e.g. plan-task's\n// observabilityImpact. Do not preprocess \"\" to undefined; the executor\n// treats them differently.\nconst optionalNonEmptyString = (field: string) => nonEmptyString(field).optional();\n\n// Array of non-empty strings. Mirrors executor guards that call\n// `validateStringArray` or `arr.some((item) => !isNonEmptyString(item))`.\nconst nonEmptyStringArray = (field: string) =>\n z.array(nonEmptyString(`${field}[]`));\n\n// Matches the executor's `isNonEmptyString` (trim + length>0) so Zod rejects\n// empty/whitespace fields at parse time. Without this, MCP callers pass \"\" for\n// the heavy planning fields, Zod accepts it, and the executor rejects one\n// field per call — forcing the agent into a retry loop to discover every gap.\n//\n// #4759 follow-up: the four heavy fields are Zod-optional because sketch\n// slices (isSketch=true) legitimately omit them, but they are REQUIRED for\n// every other slice. The conditional requirement is invisible in the JSON\n// Schema `required` array, so callers can only discover it from the\n// descriptions or by hitting the runtime superRefine below. The `.describe()`\n// calls below make that contract unmistakable in the tool schema sent to\n// agents; the superRefine enforces it at parse time.\nconst HEAVY_FIELD_DESCRIBE = (field: string) =>\n `${field} for this slice. REQUIRED unless isSketch=true (sketch slices defer this to refine-slice).`;\n\nconst planMilestoneSliceSchema = z.object({\n sliceId: nonEmptyString(\"sliceId\"),\n title: nonEmptyString(\"title\"),\n risk: nonEmptyString(\"risk\"),\n depends: z.array(z.string()),\n demo: nonEmptyString(\"demo\"),\n goal: nonEmptyString(\"goal\"),\n // ADR-011: heavy planning fields are optional for sketch slices; required for full slices.\n successCriteria: z.string().optional().describe(HEAVY_FIELD_DESCRIBE(\"successCriteria\")),\n proofLevel: z.string().optional().describe(HEAVY_FIELD_DESCRIBE(\"proofLevel\")),\n integrationClosure: z.string().optional().describe(HEAVY_FIELD_DESCRIBE(\"integrationClosure\")),\n observabilityImpact: z.string().optional().describe(HEAVY_FIELD_DESCRIBE(\"observabilityImpact\")),\n // ADR-011 sketch-then-refine fields.\n isSketch: z.boolean().optional().describe(\"ADR-011: true marks this slice as a sketch awaiting refine-slice expansion. When true, successCriteria/proofLevel/integrationClosure/observabilityImpact may be omitted and sketchScope becomes required.\"),\n sketchScope: z.string().optional().describe(\"ADR-011: 2-3 sentence scope boundary, required when isSketch=true\"),\n}).describe(\n \"Planned slice. For full slices (isSketch omitted or false): successCriteria, proofLevel, integrationClosure, and observabilityImpact are all required. For sketch slices (isSketch=true): those four fields may be omitted, but sketchScope is required.\",\n).superRefine((slice, ctx) => {\n if (slice.isSketch === true) {\n if (typeof slice.sketchScope !== \"string\" || slice.sketchScope.trim().length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"sketchScope\"],\n message: \"sketchScope must be a non-empty string when isSketch is true\",\n });\n }\n return;\n }\n const required = [\"successCriteria\", \"proofLevel\", \"integrationClosure\", \"observabilityImpact\"] as const;\n for (const field of required) {\n const value = slice[field];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [field],\n message: `${field} must be a non-empty string`,\n });\n }\n }\n});\n\nconst planMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n title: nonEmptyString(\"title\").describe(\"Milestone title\"),\n vision: nonEmptyString(\"vision\").describe(\"Milestone vision\"),\n slices: z.array(planMilestoneSliceSchema).describe(\"Planned slices for the milestone\"),\n status: z.string().optional().describe(\"Milestone status\"),\n dependsOn: z.array(z.string()).optional().describe(\"Milestone dependencies\"),\n successCriteria: z.array(z.string()).optional().describe(\"Top-level success criteria bullets\"),\n keyRisks: z.array(z.object({\n risk: nonEmptyString(\"risk\"),\n whyItMatters: nonEmptyString(\"whyItMatters\"),\n })).optional().describe(\"Structured risk entries\"),\n proofStrategy: z.array(z.object({\n riskOrUnknown: nonEmptyString(\"riskOrUnknown\"),\n retireIn: nonEmptyString(\"retireIn\"),\n whatWillBeProven: nonEmptyString(\"whatWillBeProven\"),\n })).optional().describe(\"Structured proof strategy entries\"),\n verificationContract: z.string().optional(),\n verificationIntegration: z.string().optional(),\n verificationOperational: z.string().optional(),\n verificationUat: z.string().optional(),\n definitionOfDone: z.array(z.string()).optional(),\n requirementCoverage: z.string().optional(),\n boundaryMapMarkdown: z.string().optional(),\n};\nconst planMilestoneSchema = z.object(planMilestoneParams);\n\nconst planSliceParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n goal: nonEmptyString(\"goal\").describe(\"Slice goal\"),\n tasks: z.array(z.object({\n taskId: nonEmptyString(\"taskId\"),\n title: nonEmptyString(\"title\"),\n description: nonEmptyString(\"description\"),\n estimate: nonEmptyString(\"estimate\"),\n files: nonEmptyStringArray(\"files\"),\n verify: nonEmptyString(\"verify\"),\n inputs: nonEmptyStringArray(\"inputs\"),\n expectedOutput: nonEmptyStringArray(\"expectedOutput\"),\n observabilityImpact: optionalNonEmptyString(\"observabilityImpact\"),\n })).describe(\"Planned tasks for the slice\"),\n successCriteria: z.string().optional(),\n proofLevel: z.string().optional(),\n integrationClosure: z.string().optional(),\n observabilityImpact: z.string().optional(),\n};\nconst planSliceSchema = z.object(planSliceParams);\n\nconst completeMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n title: nonEmptyString(\"title\").describe(\"Milestone title\"),\n oneLiner: z.string().describe(\"One-sentence summary of what the milestone achieved\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the milestone\"),\n verificationPassed: z.boolean().describe(\"Must be true after milestone verification succeeds\"),\n successCriteriaResults: z.string().optional(),\n definitionOfDoneResults: z.string().optional(),\n requirementOutcomes: z.string().optional(),\n keyDecisions: z.array(z.string()).optional(),\n keyFiles: z.array(z.string()).optional(),\n lessonsLearned: z.array(z.string()).optional(),\n followUps: z.string().optional(),\n deviations: z.string().optional(),\n};\nconst completeMilestoneSchema = z.object(completeMilestoneParams);\n\nconst validateMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n verdict: z.enum([\"pass\", \"needs-attention\", \"needs-remediation\"]).describe(\"Validation verdict\"),\n remediationRound: z.number().describe(\"Remediation round (0 for first validation)\"),\n successCriteriaChecklist: z.string().describe(\"Markdown checklist of success criteria with evidence\"),\n sliceDeliveryAudit: z.string().describe(\"Markdown auditing each slice's claimed vs delivered output\"),\n crossSliceIntegration: z.string().describe(\"Markdown describing cross-slice issues or closure\"),\n requirementCoverage: z.string().describe(\"Markdown describing requirement coverage and gaps\"),\n verificationClasses: z.string().optional(),\n verdictRationale: z.string().describe(\"Why this verdict was chosen\"),\n remediationPlan: z.string().optional(),\n};\nconst validateMilestoneSchema = z.object(validateMilestoneParams);\n\nconst roadmapSliceChangeSchema = z.object({\n sliceId: nonEmptyString(\"sliceId\"),\n title: nonEmptyString(\"title\"),\n risk: z.string().optional(),\n depends: z.array(z.string()).optional(),\n demo: z.string().optional(),\n});\n\nconst reassessRoadmapParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n completedSliceId: nonEmptyString(\"completedSliceId\").describe(\"Slice ID that just completed\"),\n verdict: nonEmptyString(\"verdict\").describe(\"Assessment verdict such as roadmap-confirmed or roadmap-adjusted\"),\n assessment: nonEmptyString(\"assessment\").describe(\"Assessment text explaining the roadmap decision\"),\n sliceChanges: z.object({\n modified: z.array(roadmapSliceChangeSchema),\n added: z.array(roadmapSliceChangeSchema),\n removed: z.array(z.string()),\n }).describe(\"Slice changes to apply\"),\n};\nconst reassessRoadmapSchema = z.object(reassessRoadmapParams);\n\nconst saveGateResultParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n gateId: z.string().describe(\"Gate ID (e.g. Q3, Q4, Q5, Q6, Q7, Q8, MV01, MV02, MV03, MV04). Accepts any string for forward-compatibility with new gates.\"),\n taskId: z.string().optional().describe(\"Task ID for task-scoped gates\"),\n verdict: z.enum([\"pass\", \"flag\", \"omitted\"]).describe(\"Gate verdict\"),\n rationale: z.string().describe(\"One-sentence justification\"),\n findings: z.string().optional().describe(\"Detailed markdown findings\"),\n};\nconst saveGateResultSchema = z.object(saveGateResultParams);\n\nconst replanSliceParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n blockerTaskId: nonEmptyString(\"blockerTaskId\").describe(\"Task ID that discovered the blocker\"),\n blockerDescription: nonEmptyString(\"blockerDescription\").describe(\"Description of the blocker\"),\n whatChanged: nonEmptyString(\"whatChanged\").describe(\"Summary of what changed in the plan\"),\n updatedTasks: z.array(z.object({\n taskId: nonEmptyString(\"taskId\"),\n title: nonEmptyString(\"title\"),\n description: z.string(),\n estimate: z.string(),\n files: z.array(z.string()),\n verify: z.string(),\n inputs: z.array(z.string()),\n expectedOutput: z.array(z.string()),\n fullPlanMd: z.string().optional(),\n })).describe(\"Tasks to upsert into the replanned slice\"),\n removedTaskIds: z.array(z.string()).describe(\"Task IDs to remove from the slice\"),\n};\nconst replanSliceSchema = z.object(replanSliceParams);\n\nconst sliceCompleteParams = {\n projectDir: projectDirParam,\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceTitle: z.string().describe(\"Title of the slice\"),\n oneLiner: z.string().describe(\"One-line summary of what the slice accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened across all tasks\"),\n verification: z.string().describe(\"What was verified across all tasks\"),\n uatContent: z.string().describe(\"UAT test content (markdown body)\"),\n deviations: z.string().optional(),\n knownLimitations: z.string().optional(),\n followUps: z.string().optional(),\n keyFiles: z.union([z.array(z.string()), z.string()]).optional(),\n keyDecisions: z.union([z.array(z.string()), z.string()]).optional(),\n patternsEstablished: z.union([z.array(z.string()), z.string()]).optional(),\n observabilitySurfaces: z.union([z.array(z.string()), z.string()]).optional(),\n provides: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsSurfaced: z.union([z.array(z.string()), z.string()]).optional(),\n drillDownPaths: z.union([z.array(z.string()), z.string()]).optional(),\n affects: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsAdvanced: z.array(z.union([\n z.object({ id: z.string(), how: z.string() }),\n z.string(),\n ])).optional(),\n requirementsValidated: z.array(z.union([\n z.object({ id: z.string(), proof: z.string() }),\n z.string(),\n ])).optional(),\n requirementsInvalidated: z.array(z.union([\n z.object({ id: z.string(), what: z.string() }),\n z.string(),\n ])).optional(),\n filesModified: z.array(z.union([\n z.object({ path: z.string(), description: z.string() }),\n z.string(),\n ])).optional(),\n requires: z.array(z.union([\n z.object({ slice: z.string(), provides: z.string() }),\n z.string(),\n ])).optional(),\n};\nconst sliceCompleteSchema = z.object(sliceCompleteParams);\n\nconst summarySaveParams = {\n projectDir: projectDirParam,\n milestone_id: z.string().describe(\"Milestone ID (e.g. M001)\"),\n slice_id: z.string().optional().describe(\"Slice ID (e.g. S01)\"),\n task_id: z.string().optional().describe(\"Task ID (e.g. T01)\"),\n artifact_type: z.string().describe(\"Artifact type to save (SUMMARY, RESEARCH, CONTEXT, ASSESSMENT, CONTEXT-DRAFT)\"),\n content: z.string().describe(\"The full markdown content of the artifact\"),\n};\nconst summarySaveSchema = z.object(summarySaveParams);\n\nconst decisionSaveParams = {\n projectDir: projectDirParam,\n scope: z.string().describe(\"Scope of the decision (e.g. architecture, library, observability)\"),\n decision: z.string().describe(\"What is being decided\"),\n choice: z.string().describe(\"The choice made\"),\n rationale: z.string().describe(\"Why this choice was made\"),\n revisable: z.string().optional().describe(\"Whether this can be revisited\"),\n when_context: z.string().optional().describe(\"When/context for the decision\"),\n made_by: z.enum([\"human\", \"agent\", \"collaborative\"]).optional().describe(\"Who made the decision\"),\n};\nconst decisionSaveSchema = z.object(decisionSaveParams);\n\nconst requirementUpdateParams = {\n projectDir: projectDirParam,\n id: z.string().describe(\"Requirement ID (e.g. R001)\"),\n status: z.string().optional().describe(\"New status\"),\n validation: z.string().optional().describe(\"Validation criteria or proof\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n description: z.string().optional().describe(\"Updated description\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n};\nconst requirementUpdateSchema = z.object(requirementUpdateParams);\n\nconst requirementSaveParams = {\n projectDir: projectDirParam,\n class: z.string().describe(\"Requirement class\"),\n description: z.string().describe(\"Short description of the requirement\"),\n why: z.string().describe(\"Why this requirement matters\"),\n source: z.string().describe(\"Origin of the requirement\"),\n status: z.string().optional().describe(\"Requirement status\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n validation: z.string().optional().describe(\"Validation criteria\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n};\nconst requirementSaveSchema = z.object(requirementSaveParams);\n\nconst milestoneGenerateIdParams = {\n projectDir: projectDirParam,\n};\nconst milestoneGenerateIdSchema = z.object(milestoneGenerateIdParams);\n\nconst planTaskParams = {\n projectDir: projectDirParam,\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n taskId: nonEmptyString(\"taskId\").describe(\"Task ID (e.g. T01)\"),\n title: nonEmptyString(\"title\").describe(\"Task title\"),\n description: nonEmptyString(\"description\").describe(\"Task description / steps block\"),\n estimate: nonEmptyString(\"estimate\").describe(\"Task estimate\"),\n files: z.array(z.string()).describe(\"Files likely touched\"),\n verify: nonEmptyString(\"verify\").describe(\"Verification command or block\"),\n inputs: z.array(z.string()).describe(\"Input files or references\"),\n expectedOutput: z.array(z.string()).describe(\"Expected output files or artifacts\"),\n observabilityImpact: optionalNonEmptyString(\"observabilityImpact\").describe(\"Task observability impact\"),\n};\nconst planTaskSchema = z.object(planTaskParams);\n\nconst skipSliceParams = {\n projectDir: projectDirParam,\n sliceId: z.string().describe(\"Slice ID (e.g. S02)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M003)\"),\n reason: z.string().optional().describe(\"Reason for skipping this slice\"),\n};\nconst skipSliceSchema = z.object(skipSliceParams);\n\nconst taskCompleteParams = {\n projectDir: projectDirParam,\n taskId: nonEmptyString(\"taskId\").describe(\"Task ID (e.g. T01)\"),\n sliceId: nonEmptyString(\"sliceId\").describe(\"Slice ID (e.g. S01)\"),\n milestoneId: nonEmptyString(\"milestoneId\").describe(\"Milestone ID (e.g. M001)\"),\n oneLiner: z.string().describe(\"One-line summary of what was accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the task\"),\n verification: z.string().describe(\"What was verified and how\"),\n deviations: z.string().optional().describe(\"Deviations from the task plan\"),\n knownIssues: z.string().optional().describe(\"Known issues discovered but not fixed\"),\n keyFiles: z.array(z.string()).optional().describe(\"List of key files created or modified\"),\n keyDecisions: z.array(z.string()).optional().describe(\"List of key decisions made during this task\"),\n blockerDiscovered: z.boolean().optional().describe(\"Whether a plan-invalidating blocker was discovered\"),\n // ADR-011 Phase 2: mid-execution escalation — agent asks the user to resolve an ambiguity.\n escalation: z.object({\n question: z.string().describe(\"The question the user needs to answer — one clear sentence.\"),\n options: z.array(z.object({\n id: z.string().describe(\"Short id (e.g. 'A', 'B') used by /gsd escalate resolve.\"),\n label: z.string().describe(\"One-line label.\"),\n tradeoffs: z.string().describe(\"1-2 sentences on the tradeoffs of this option.\"),\n })).min(2).max(4).describe(\"2-4 options the user can choose between.\"),\n recommendation: z.string().describe(\"Option id the executor recommends.\"),\n recommendationRationale: z.string().describe(\"Why the recommendation — 1-2 sentences.\"),\n continueWithDefault: z.boolean().describe(\n \"When true, loop continues (artifact logged for later review). When false, auto-mode pauses until the user resolves via /gsd escalate resolve.\",\n ),\n }).optional().describe(\"ADR-011 Phase 2: optional escalation payload. Only honored when phases.mid_execution_escalation is true.\"),\n verificationEvidence: z.array(z.union([\n z.object({\n command: z.string(),\n exitCode: z.number(),\n verdict: z.string(),\n durationMs: z.number(),\n }),\n z.string(),\n ])).optional().describe(\"Verification evidence entries\"),\n};\nconst taskCompleteSchema = z.object(taskCompleteParams);\n\nconst milestoneStatusParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID to query (e.g. M001)\"),\n};\nconst milestoneStatusSchema = z.object(milestoneStatusParams);\n\nconst journalQueryParams = {\n projectDir: projectDirParam,\n flowId: z.string().optional().describe(\"Filter by flow ID\"),\n unitId: z.string().optional().describe(\"Filter by unit ID\"),\n rule: z.string().optional().describe(\"Filter by rule name\"),\n eventType: z.string().optional().describe(\"Filter by event type\"),\n after: z.string().optional().describe(\"ISO-8601 lower bound (inclusive)\"),\n before: z.string().optional().describe(\"ISO-8601 upper bound (inclusive)\"),\n limit: z.number().optional().describe(\"Maximum entries to return\"),\n};\nconst journalQuerySchema = z.object(journalQueryParams);\n\nexport function registerWorkflowTools(server: McpToolServer): void {\n server.tool(\n \"gsd_decision_save\",\n \"Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_decision\",\n \"Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_update\",\n \"Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_update_requirement\",\n \"Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_save\",\n \"Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_requirement\",\n \"Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_milestone_generate_id\",\n \"Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const prefsMod = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/preferences.js\",\n ).catch(() => null);\n // Graceful degradation: a corrupt preferences file should not crash\n // milestone-id generation. Fall back to non-unique IDs if anything\n // throws here — matches the pre-fix behavior for missing prefs.\n let uniqueEnabled = false;\n try {\n uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;\n } catch {\n uniqueEnabled = false;\n }\n const nextId = nextMilestoneId(allIds, uniqueEnabled);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_generate_milestone_id\",\n \"Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const prefsMod = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/preferences.js\",\n ).catch(() => null);\n // Graceful degradation: a corrupt preferences file should not crash\n // milestone-id generation. Fall back to non-unique IDs if anything\n // throws here — matches the pre-fix behavior for missing prefs.\n let uniqueEnabled = false;\n try {\n uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;\n } catch {\n uniqueEnabled = false;\n }\n const nextId = nextMilestoneId(allIds, uniqueEnabled);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_plan_milestone\",\n \"Write milestone planning state to the GSD database and render ROADMAP.md from DB.\",\n planMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planMilestoneSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_milestone\", projectDir, params.milestoneId);\n const { executePlanMilestone } = await getWorkflowToolExecutors();\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir)),\n );\n },\n );\n\n server.tool(\n \"gsd_plan_slice\",\n \"Write slice/task planning state to the GSD database and render plan artifacts from DB.\",\n planSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planSliceSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_slice\", projectDir, params.milestoneId);\n const { executePlanSlice } = await getWorkflowToolExecutors();\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir)),\n );\n },\n );\n\n server.tool(\n \"gsd_plan_task\",\n \"Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_task_plan\",\n \"Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_replan_slice\",\n \"Replan a slice after a blocker is discovered, preserving completed tasks and re-rendering PLAN.md + REPLAN.md.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_replan\",\n \"Alias for gsd_replan_slice. Replan a slice after a blocker is discovered.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_complete\",\n \"Record a completed slice to the GSD database, render SUMMARY.md + UAT.md, and update roadmap projection.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_complete_slice\",\n \"Alias for gsd_slice_complete. Record a completed slice to the GSD database and render summary/UAT artifacts.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_skip_slice\",\n \"Mark a slice as skipped so auto-mode advances past it without executing.\",\n skipSliceParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, milestoneId, sliceId, reason } = parseWorkflowArgs(skipSliceSchema, args);\n await enforceWorkflowWriteGate(\"gsd_skip_slice\", projectDir, milestoneId);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { getSlice, updateSliceStatus } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n const { invalidateStateCache } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/state.js\");\n const { rebuildState } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/doctor.js\");\n const slice = getSlice(milestoneId, sliceId);\n if (!slice) {\n throw new Error(`Slice ${sliceId} not found in milestone ${milestoneId}`);\n }\n if (slice.status === \"complete\" || slice.status === \"done\") {\n throw new Error(`Slice ${sliceId} is already complete and cannot be skipped`);\n }\n if (slice.status !== \"skipped\") {\n updateSliceStatus(milestoneId, sliceId, \"skipped\");\n invalidateStateCache();\n await rebuildState(projectDir);\n }\n });\n return {\n content: [{ type: \"text\" as const, text: `Skipped slice ${sliceId} (${milestoneId}). Reason: ${reason ?? \"User-directed skip\"}.` }],\n };\n },\n );\n\n server.tool(\n \"gsd_complete_milestone\",\n \"Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_complete\",\n \"Alias for gsd_complete_milestone. Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_validate_milestone\",\n \"Validate a milestone, persist validation results to the GSD database, and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_validate\",\n \"Alias for gsd_validate_milestone. Validate a milestone and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_reassess_roadmap\",\n \"Reassess a milestone roadmap after a slice completes, writing ASSESSMENT.md and re-rendering ROADMAP.md.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_roadmap_reassess\",\n \"Alias for gsd_reassess_roadmap. Reassess a roadmap after slice completion.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_save_gate_result\",\n \"Save a quality gate result to the GSD database.\",\n saveGateResultParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(saveGateResultSchema, args);\n return handleSaveGateResult(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_summary_save\",\n \"Save a GSD summary/research/context/assessment artifact to the database and disk.\",\n summarySaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(summarySaveSchema, args);\n const { projectDir, milestone_id, slice_id, task_id, artifact_type, content } = parsed;\n await enforceWorkflowWriteGate(\"gsd_summary_save\", projectDir, milestone_id);\n const executors = await getWorkflowToolExecutors();\n const supportedArtifactTypes = getSupportedSummaryArtifactTypes(executors);\n if (!supportedArtifactTypes.includes(artifact_type)) {\n throw new Error(\n `artifact_type must be one of: ${supportedArtifactTypes.join(\", \")}`,\n );\n }\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() =>\n executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir),\n ),\n );\n },\n );\n\n server.tool(\n \"gsd_task_complete\",\n \"Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_complete_task\",\n \"Alias for gsd_task_complete. Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_milestone_status\",\n \"Read the current status of a milestone and all its slices from the GSD database.\",\n milestoneStatusParams,\n async (args: Record<string, unknown>) => {\n // gsd_milestone_status is a read-only query. In-process (query-tools.ts)\n // does not apply the write-gate; MCP must match to avoid blocking reads\n // during pending-gate or queue-mode states.\n const { projectDir, milestoneId } = parseWorkflowArgs(milestoneStatusSchema, args);\n const { executeMilestoneStatus } = await getWorkflowToolExecutors();\n return adaptExecutorResult(\n await runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir)),\n );\n },\n );\n\n server.tool(\n \"gsd_journal_query\",\n \"Query the structured event journal for auto-mode iterations.\",\n journalQueryParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);\n const { queryJournal } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/journal.js\");\n const entries = queryJournal(projectDir, filters).slice(0, limit ?? 100);\n if (entries.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"No matching journal entries found.\" }] };\n }\n return { content: [{ type: \"text\" as const, text: JSON.stringify(entries, null, 2) }] };\n },\n );\n\n // ─── ADR-013 step 3 — memory-store tools for external MCP clients ────────\n //\n // The same three tools the LLM sees in-process as `capture_thought`,\n // `memory_query`, and `gsd_graph` (the memory variant). MCP exposes them\n // under the gsd_* prefix and renames the memory graph to gsd_memory_graph\n // to avoid collision with the project knowledge graph tool registered as\n // `gsd_graph` in server.ts.\n\n const MEMORY_CATEGORY = z.enum([\n \"architecture\",\n \"convention\",\n \"gotcha\",\n \"preference\",\n \"environment\",\n \"pattern\",\n ]);\n\n const captureThoughtSchema = z.object({\n projectDir: z.string().optional(),\n category: MEMORY_CATEGORY,\n // Reject empty / whitespace-only content at the schema layer so the LLM\n // never produces a memory row with no searchable text.\n content: z.string().trim().min(1, \"content must be a non-empty trimmed string\"),\n confidence: z.number().min(0.1).max(0.99).optional(),\n tags: z.array(z.string()).optional(),\n scope: z.string().optional(),\n structuredFields: z.record(z.string(), z.unknown()).optional(),\n });\n const captureThoughtParams = {\n projectDir: z.string().optional().describe(\"Absolute path to the project directory (defaults to MCP server cwd)\"),\n category: MEMORY_CATEGORY.describe(\"Memory category\"),\n content: z.string().describe(\"Memory text (1-3 sentences, no secrets)\"),\n confidence: z.number().min(0.1).max(0.99).optional().describe(\"0.1-0.99, default 0.8\"),\n tags: z.array(z.string()).optional().describe(\"Free-form tags\"),\n scope: z.string().optional().describe(\"Scope name; defaults to 'project'\"),\n structuredFields: z.record(z.string(), z.unknown()).optional().describe(\"ADR-013 structured payload (e.g. decision fields)\"),\n };\n\n server.tool(\n \"gsd_capture_thought\",\n \"Record a durable project insight into the GSD memory store. Categories: architecture, convention, gotcha, preference, environment, pattern. Mirrors the in-process capture_thought tool for external MCP clients.\",\n captureThoughtParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, ...params } = parseWorkflowArgs(captureThoughtSchema, args);\n await enforceWorkflowWriteGate(\"gsd_capture_thought\", projectDir);\n return runSerializedWorkflowDbOperation(projectDir, async () => {\n const { executeMemoryCapture } = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/tools/memory-tools.js\",\n );\n return executeMemoryCapture(params);\n });\n },\n );\n\n const memoryQuerySchema = z.object({\n projectDir: z.string().optional(),\n // Match the documented \"2+ char terms\" contract in the in-process\n // memory_query tool — reject sub-2-char queries at the schema layer.\n query: z.string().trim().min(2, \"query must be at least 2 characters\"),\n k: z.number().int().min(1).max(50).optional(),\n category: MEMORY_CATEGORY.optional(),\n scope: z.string().optional(),\n tag: z.string().optional(),\n include_superseded: z.boolean().optional(),\n reinforce_hits: z.boolean().optional(),\n });\n const memoryQueryParams = {\n projectDir: z.string().optional().describe(\"Absolute path to the project directory (defaults to MCP server cwd)\"),\n query: z.string().describe(\"Keyword query (2+ char terms)\"),\n k: z.number().int().min(1).max(50).optional().describe(\"Max results (default 10, max 50)\"),\n category: MEMORY_CATEGORY.optional().describe(\"Restrict to a single category\"),\n scope: z.string().optional().describe(\"Only include memories with this scope\"),\n tag: z.string().optional().describe(\"Only include memories tagged with this value\"),\n include_superseded: z.boolean().optional().describe(\"Include superseded memories (default false)\"),\n reinforce_hits: z.boolean().optional().describe(\"Increment hit_count on returned memories (default false)\"),\n };\n\n server.tool(\n \"gsd_memory_query\",\n \"Search the GSD memory store by keyword. Returns ranked memories with id, category, content, confidence, scope, and tags. Mirrors the in-process memory_query tool for external MCP clients.\",\n memoryQueryParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, ...params } = parseWorkflowArgs(memoryQuerySchema, args);\n return runSerializedWorkflowDbOperation(projectDir, async () => {\n const { executeMemoryQuery } = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/tools/memory-tools.js\",\n );\n return executeMemoryQuery(params);\n });\n },\n );\n\n const memoryGraphSchema = z.object({\n projectDir: z.string().optional(),\n mode: z.enum([\"build\", \"query\"]),\n memoryId: z.string().optional(),\n depth: z.number().int().min(0).max(5).optional(),\n rel: z.enum([\"related_to\", \"depends_on\", \"contradicts\", \"elaborates\", \"supersedes\"]).optional(),\n }).refine(\n (val) => val.mode !== \"query\" || (typeof val.memoryId === \"string\" && val.memoryId.trim().length > 0),\n { message: \"memoryId is required and must be non-empty when mode=query\", path: [\"memoryId\"] },\n );\n const memoryGraphParams = {\n projectDir: z.string().optional().describe(\"Absolute path to the project directory (defaults to MCP server cwd)\"),\n mode: z.enum([\"build\", \"query\"]).describe(\"build = recompute graph (placeholder), query = inspect edges\"),\n memoryId: z.string().optional().describe(\"Memory ID (required when mode=query)\"),\n depth: z.number().int().min(0).max(5).optional().describe(\"Hops to traverse (0-5, default 1)\"),\n rel: z.enum([\"related_to\", \"depends_on\", \"contradicts\", \"elaborates\", \"supersedes\"]).optional().describe(\"Only include edges with this relation type\"),\n };\n\n server.tool(\n \"gsd_memory_graph\",\n \"Inspect the relationship graph between memories. mode=query walks edges from a given memoryId. mode=build is a placeholder reserved for future graph rebuilds. Distinct from gsd_graph (project knowledge graph) — see ADR-013.\",\n memoryGraphParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, ...params } = parseWorkflowArgs(memoryGraphSchema, args);\n return runSerializedWorkflowDbOperation(projectDir, async () => {\n const { executeGsdGraph } = await importLocalModule<any>(\n \"../../../src/resources/extensions/gsd/tools/memory-tools.js\",\n );\n return executeGsdGraph(params);\n });\n },\n );\n}\n"]}