gsd-pi 2.80.0-dev.cf9433f56 → 2.80.0-dev.d4fc28e6b

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 (237) hide show
  1. package/dist/cli.js +0 -19
  2. package/dist/resources/.managed-resources-content-hash +1 -1
  3. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +29 -0
  4. package/dist/resources/extensions/gsd/auto/loop.js +71 -8
  5. package/dist/resources/extensions/gsd/auto/phases.js +150 -94
  6. package/dist/resources/extensions/gsd/auto/resolve.js +12 -0
  7. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -30
  8. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  9. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +33 -1
  10. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +9 -1
  11. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
  12. package/dist/resources/extensions/gsd/auto-dispatch.js +16 -0
  13. package/dist/resources/extensions/gsd/auto-post-unit.js +17 -4
  14. package/dist/resources/extensions/gsd/auto-prompts.js +90 -15
  15. package/dist/resources/extensions/gsd/auto-start.js +197 -6
  16. package/dist/resources/extensions/gsd/auto-worktree.js +111 -1
  17. package/dist/resources/extensions/gsd/auto.js +18 -22
  18. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +86 -19
  19. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +49 -36
  20. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +15 -5
  21. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +9 -3
  22. package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +7 -1
  23. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +9 -3
  24. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +8 -2
  25. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +298 -54
  26. package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
  27. package/dist/resources/extensions/gsd/clean-root-preflight.js +24 -6
  28. package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
  29. package/dist/resources/extensions/gsd/db/unit-dispatches.js +53 -0
  30. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
  31. package/dist/resources/extensions/gsd/guided-flow.js +47 -28
  32. package/dist/resources/extensions/gsd/native-git-bridge.js +32 -8
  33. package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
  34. package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
  35. package/dist/resources/extensions/gsd/pre-execution-checks.js +15 -0
  36. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +2 -0
  37. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  38. package/dist/resources/extensions/gsd/prompts/execute-task.md +4 -2
  39. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  40. package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  41. package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
  42. package/dist/resources/extensions/gsd/worktree-resolver.js +35 -4
  43. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  44. package/dist/web/standalone/.next/BUILD_ID +1 -1
  45. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  46. package/dist/web/standalone/.next/build-manifest.json +2 -2
  47. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  48. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  49. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  51. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  52. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  53. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  54. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  55. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  56. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  57. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  58. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  59. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  60. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  61. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  62. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  63. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  64. package/dist/web/standalone/.next/server/app/index.html +1 -1
  65. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  66. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  67. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  68. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  69. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  70. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  71. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  72. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  73. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  74. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  75. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  76. package/dist/welcome-screen.d.ts +2 -0
  77. package/dist/welcome-screen.js +9 -7
  78. package/package.json +1 -1
  79. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  80. package/packages/pi-agent-core/dist/agent-loop.js +4 -1
  81. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  82. package/packages/pi-agent-core/dist/agent.d.ts +5 -0
  83. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  84. package/packages/pi-agent-core/dist/agent.js +2 -0
  85. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  86. package/packages/pi-agent-core/dist/index.d.ts +1 -0
  87. package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
  88. package/packages/pi-agent-core/dist/index.js +2 -0
  89. package/packages/pi-agent-core/dist/index.js.map +1 -1
  90. package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
  91. package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
  92. package/packages/pi-agent-core/dist/token-audit.js +221 -0
  93. package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
  94. package/packages/pi-agent-core/dist/types.d.ts +9 -0
  95. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  96. package/packages/pi-agent-core/dist/types.js.map +1 -1
  97. package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
  98. package/packages/pi-agent-core/src/agent-loop.ts +4 -1
  99. package/packages/pi-agent-core/src/agent.ts +8 -0
  100. package/packages/pi-agent-core/src/index.ts +2 -0
  101. package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
  102. package/packages/pi-agent-core/src/token-audit.ts +287 -0
  103. package/packages/pi-agent-core/src/types.ts +14 -0
  104. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  105. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +18 -0
  106. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  107. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +12 -0
  108. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  109. package/packages/pi-coding-agent/dist/core/agent-session.js +36 -7
  110. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  111. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  112. package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
  113. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  114. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
  115. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  116. package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -6
  117. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  118. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +3 -3
  119. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  120. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +32 -1
  121. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  122. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  123. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
  124. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
  125. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
  126. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
  127. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
  128. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
  129. package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
  130. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  131. package/packages/pi-coding-agent/dist/core/sdk.js +74 -2
  132. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  133. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
  134. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  135. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
  136. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  137. package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
  138. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  139. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +25 -0
  140. package/packages/pi-coding-agent/src/core/agent-session.ts +40 -7
  141. package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
  142. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +3 -3
  143. package/packages/pi-coding-agent/src/core/extensions/runner.ts +5 -5
  144. package/packages/pi-coding-agent/src/core/extensions/types.ts +35 -1
  145. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
  146. package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
  147. package/packages/pi-coding-agent/src/core/sdk.ts +85 -3
  148. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
  149. package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
  150. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  151. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +30 -0
  152. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +26 -0
  153. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -2
  154. package/src/resources/extensions/gsd/auto/loop.ts +84 -8
  155. package/src/resources/extensions/gsd/auto/phases.ts +218 -154
  156. package/src/resources/extensions/gsd/auto/resolve.ts +19 -0
  157. package/src/resources/extensions/gsd/auto/run-unit.ts +10 -29
  158. package/src/resources/extensions/gsd/auto/session.ts +8 -0
  159. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +63 -1
  160. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +14 -1
  161. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
  162. package/src/resources/extensions/gsd/auto-dispatch.ts +16 -0
  163. package/src/resources/extensions/gsd/auto-post-unit.ts +18 -4
  164. package/src/resources/extensions/gsd/auto-prompts.ts +95 -14
  165. package/src/resources/extensions/gsd/auto-start.ts +230 -9
  166. package/src/resources/extensions/gsd/auto-worktree.ts +123 -0
  167. package/src/resources/extensions/gsd/auto.ts +18 -18
  168. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +100 -18
  169. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +50 -36
  170. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +16 -5
  171. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +10 -3
  172. package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +8 -1
  173. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +10 -3
  174. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +9 -2
  175. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +347 -54
  176. package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
  177. package/src/resources/extensions/gsd/clean-root-preflight.ts +32 -7
  178. package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
  179. package/src/resources/extensions/gsd/db/unit-dispatches.ts +66 -0
  180. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
  181. package/src/resources/extensions/gsd/guided-flow.ts +52 -35
  182. package/src/resources/extensions/gsd/native-git-bridge.ts +39 -6
  183. package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
  184. package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
  185. package/src/resources/extensions/gsd/pre-execution-checks.ts +16 -0
  186. package/src/resources/extensions/gsd/prompts/complete-milestone.md +2 -0
  187. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  188. package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
  189. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  190. package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
  191. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +2 -2
  192. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +361 -10
  193. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +168 -6
  194. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +15 -6
  195. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
  196. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
  197. package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
  198. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +5 -1
  199. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +5 -2
  200. package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
  201. package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +132 -0
  202. package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +6 -3
  203. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +5 -1
  204. package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
  205. package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
  206. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +1 -0
  207. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +242 -0
  208. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
  209. package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +3 -0
  210. package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +133 -0
  211. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
  212. package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
  213. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +7 -5
  214. package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
  215. package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +3 -3
  216. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +38 -17
  217. package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
  218. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
  219. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +166 -0
  220. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -0
  221. package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
  222. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
  223. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +291 -0
  224. package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +50 -1
  225. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -4
  226. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +142 -0
  227. package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
  228. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +32 -1
  229. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +1 -0
  230. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
  231. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
  232. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +104 -3
  233. package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
  234. package/src/resources/extensions/gsd/worktree-resolver.ts +49 -4
  235. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +0 -97
  236. /package/dist/web/standalone/.next/static/{-5nHJWzSdG-WkPMul_khA → cWaxzf-sdbSSbbwYu8q7a}/_buildManifest.js +0 -0
  237. /package/dist/web/standalone/.next/static/{-5nHJWzSdG-WkPMul_khA → cWaxzf-sdbSSbbwYu8q7a}/_ssgManifest.js +0 -0
@@ -4,6 +4,12 @@ import { createBashTool, createEditTool, createReadTool, createWriteTool } from
4
4
  import { DEFAULT_BASH_TIMEOUT_SECS } from "../constants.js";
5
5
  import { setLogBasePath, logWarning } from "../workflow-logger.js";
6
6
  import { resolveGsdPathContract } from "../paths.js";
7
+ function resolveToolWorkspaceRoot(ctx) {
8
+ if (ctx && typeof ctx === "object" && typeof ctx.cwd === "string") {
9
+ return ctx.cwd;
10
+ }
11
+ return process.cwd();
12
+ }
7
13
  /**
8
14
  * Resolve the correct DB path for the current working directory.
9
15
  * If `basePath` is inside a `.gsd/worktrees/<MID>/` directory, returns
@@ -45,16 +51,20 @@ export async function ensureDbOpen(basePath = process.cwd()) {
45
51
  }
46
52
  export function registerDynamicTools(pi) {
47
53
  const baseBash = createBashTool(process.cwd(), {
48
- spawnHook: (ctx) => ({ ...ctx, cwd: process.cwd() }),
54
+ spawnHook: (ctx) => ctx,
49
55
  });
50
56
  const dynamicBash = {
51
57
  ...baseBash,
52
58
  execute: async (toolCallId, params, signal, onUpdate, ctx) => {
59
+ const basePath = resolveToolWorkspaceRoot(ctx);
60
+ const fresh = createBashTool(basePath, {
61
+ spawnHook: (spawnCtx) => ({ ...spawnCtx, cwd: basePath }),
62
+ });
53
63
  const paramsWithTimeout = {
54
64
  ...params,
55
65
  timeout: params.timeout ?? DEFAULT_BASH_TIMEOUT_SECS,
56
66
  };
57
- return baseBash.execute(toolCallId, paramsWithTimeout, signal, onUpdate, ctx);
67
+ return fresh.execute(toolCallId, paramsWithTimeout, signal, onUpdate, ctx);
58
68
  },
59
69
  };
60
70
  pi.registerTool(dynamicBash);
@@ -62,7 +72,7 @@ export function registerDynamicTools(pi) {
62
72
  pi.registerTool({
63
73
  ...baseWrite,
64
74
  execute: async (toolCallId, params, signal, onUpdate, ctx) => {
65
- const fresh = createWriteTool(process.cwd());
75
+ const fresh = createWriteTool(resolveToolWorkspaceRoot(ctx));
66
76
  return fresh.execute(toolCallId, params, signal, onUpdate, ctx);
67
77
  },
68
78
  });
@@ -70,7 +80,7 @@ export function registerDynamicTools(pi) {
70
80
  pi.registerTool({
71
81
  ...baseRead,
72
82
  execute: async (toolCallId, params, signal, onUpdate, ctx) => {
73
- const fresh = createReadTool(process.cwd());
83
+ const fresh = createReadTool(resolveToolWorkspaceRoot(ctx));
74
84
  return fresh.execute(toolCallId, params, signal, onUpdate, ctx);
75
85
  },
76
86
  });
@@ -78,7 +88,7 @@ export function registerDynamicTools(pi) {
78
88
  pi.registerTool({
79
89
  ...baseEdit,
80
90
  execute: async (toolCallId, params, signal, onUpdate, ctx) => {
81
- const fresh = createEditTool(process.cwd());
91
+ const fresh = createEditTool(resolveToolWorkspaceRoot(ctx));
82
92
  return fresh.execute(toolCallId, params, signal, onUpdate, ctx);
83
93
  },
84
94
  });
@@ -3,6 +3,12 @@
3
3
  // Exposes the Context Mode runtime tools in-process. Default-on; opt out with
4
4
  // `context_mode.enabled: false` in preferences.
5
5
  import { Type } from "@sinclair/typebox";
6
+ function toolWorkspaceRoot(ctx) {
7
+ if (ctx && typeof ctx === "object" && typeof ctx.cwd === "string") {
8
+ return ctx.cwd;
9
+ }
10
+ return process.cwd();
11
+ }
6
12
  async function loadContextModePreferences(baseDir) {
7
13
  const [{ loadEffectiveGSDPreferences }, { logWarning }] = await Promise.all([
8
14
  import("../preferences.js"),
@@ -44,7 +50,7 @@ export function registerExecTools(pi) {
44
50
  }),
45
51
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
46
52
  const { executeGsdExec } = await import("../tools/exec-tool.js");
47
- const baseDir = process.cwd();
53
+ const baseDir = toolWorkspaceRoot(_ctx);
48
54
  return executeGsdExec(params, {
49
55
  baseDir,
50
56
  preferences: await loadContextModePreferences(baseDir),
@@ -71,7 +77,7 @@ export function registerExecTools(pi) {
71
77
  }),
72
78
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
73
79
  const { executeExecSearch } = await import("../tools/exec-search-tool.js");
74
- const baseDir = process.cwd();
80
+ const baseDir = toolWorkspaceRoot(_ctx);
75
81
  return executeExecSearch(params, {
76
82
  baseDir,
77
83
  preferences: await loadContextModePreferences(baseDir),
@@ -92,7 +98,7 @@ export function registerExecTools(pi) {
92
98
  parameters: Type.Object({}),
93
99
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
94
100
  const { executeResume } = await import("../tools/resume-tool.js");
95
- const baseDir = process.cwd();
101
+ const baseDir = toolWorkspaceRoot(_ctx);
96
102
  return executeResume(params, {
97
103
  baseDir,
98
104
  preferences: await loadContextModePreferences(baseDir),
@@ -1,6 +1,12 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import { queryJournal } from "../journal.js";
3
3
  import { logWarning } from "../workflow-logger.js";
4
+ function toolWorkspaceRoot(ctx) {
5
+ if (ctx && typeof ctx === "object" && typeof ctx.cwd === "string") {
6
+ return ctx.cwd;
7
+ }
8
+ return process.cwd();
9
+ }
4
10
  export function registerJournalTools(pi) {
5
11
  pi.registerTool({
6
12
  name: "gsd_journal_query",
@@ -37,7 +43,7 @@ export function registerJournalTools(pi) {
37
43
  filters.after = params.after;
38
44
  if (params.before !== undefined)
39
45
  filters.before = params.before;
40
- const entries = queryJournal(process.cwd(), filters);
46
+ const entries = queryJournal(toolWorkspaceRoot(_ctx), filters);
41
47
  const limited = entries.slice(0, params.limit ?? 100);
42
48
  if (limited.length === 0) {
43
49
  return {
@@ -6,6 +6,12 @@
6
6
  import { Type } from "@sinclair/typebox";
7
7
  import { ensureDbOpen } from "./dynamic-tools.js";
8
8
  import { executeGsdGraph, executeMemoryCapture, executeMemoryQuery, } from "../tools/memory-tools.js";
9
+ function toolWorkspaceRoot(ctx) {
10
+ if (ctx && typeof ctx === "object" && typeof ctx.cwd === "string") {
11
+ return ctx.cwd;
12
+ }
13
+ return process.cwd();
14
+ }
9
15
  export function registerMemoryTools(pi) {
10
16
  // ─── capture_thought ────────────────────────────────────────────────────
11
17
  pi.registerTool({
@@ -39,7 +45,7 @@ export function registerMemoryTools(pi) {
39
45
  })),
40
46
  }),
41
47
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
42
- const ok = await ensureDbOpen();
48
+ const ok = await ensureDbOpen(toolWorkspaceRoot(_ctx));
43
49
  if (!ok) {
44
50
  return {
45
51
  content: [{ type: "text", text: "Error: GSD database is not available. Cannot capture memory." }],
@@ -79,7 +85,7 @@ export function registerMemoryTools(pi) {
79
85
  reinforce_hits: Type.Optional(Type.Boolean({ description: "Increment hit_count on returned memories (default false)" })),
80
86
  }),
81
87
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
82
- const ok = await ensureDbOpen();
88
+ const ok = await ensureDbOpen(toolWorkspaceRoot(_ctx));
83
89
  if (!ok) {
84
90
  return {
85
91
  content: [{ type: "text", text: "Error: GSD database is not available. Cannot query memory." }],
@@ -117,7 +123,7 @@ export function registerMemoryTools(pi) {
117
123
  ], { description: "Only include edges with this relation type" })),
118
124
  }),
119
125
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
120
- const ok = await ensureDbOpen();
126
+ const ok = await ensureDbOpen(toolWorkspaceRoot(_ctx));
121
127
  if (!ok) {
122
128
  return {
123
129
  content: [{ type: "text", text: "Error: GSD database is not available." }],
@@ -1,6 +1,12 @@
1
1
  // GSD2 — Read-only query tools exposing DB state to the LLM via the WAL connection
2
2
  import { Type } from "@sinclair/typebox";
3
3
  import { ensureDbOpen } from "./dynamic-tools.js";
4
+ function toolWorkspaceRoot(ctx) {
5
+ if (ctx && typeof ctx === "object" && typeof ctx.cwd === "string") {
6
+ return ctx.cwd;
7
+ }
8
+ return process.cwd();
9
+ }
4
10
  export function registerQueryTools(pi) {
5
11
  pi.registerTool({
6
12
  name: "gsd_milestone_status",
@@ -16,7 +22,7 @@ export function registerQueryTools(pi) {
16
22
  milestoneId: Type.String({ description: "Milestone ID to query (e.g. M001)" }),
17
23
  }),
18
24
  async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
19
- const dbAvailable = await ensureDbOpen();
25
+ const dbAvailable = await ensureDbOpen(toolWorkspaceRoot(_ctx));
20
26
  if (!dbAvailable) {
21
27
  return {
22
28
  content: [{ type: "text", text: "Error: GSD database is not available. Cannot read milestone status." }],
@@ -41,7 +47,7 @@ export function registerQueryTools(pi) {
41
47
  ],
42
48
  parameters: Type.Object({}),
43
49
  async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
44
- const dbAvailable = await ensureDbOpen();
50
+ const dbAvailable = await ensureDbOpen(toolWorkspaceRoot(_ctx));
45
51
  if (!dbAvailable) {
46
52
  return {
47
53
  content: [{ type: "text", text: "Error: GSD database is not available. Cannot checkpoint." }],