gsd-pi 2.82.0-dev.725028083 → 2.82.0-dev.c22380fc3

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 (87) hide show
  1. package/dist/resources/.managed-resources-content-hash +1 -1
  2. package/dist/resources/extensions/gsd/auto/orchestrator.js +113 -6
  3. package/dist/resources/extensions/gsd/auto.js +128 -52
  4. package/dist/resources/extensions/gsd/md-importer.js +1 -1
  5. package/dist/resources/extensions/gsd/migrate/command.js +5 -0
  6. package/dist/resources/extensions/gsd/migrate/preview.js +9 -0
  7. package/dist/resources/extensions/gsd/migrate/transformer.js +51 -4
  8. package/dist/resources/extensions/gsd/migrate/writer.js +11 -1
  9. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
  10. package/dist/resources/extensions/gsd/worktree-lifecycle.js +21 -2
  11. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  12. package/dist/web/standalone/.next/BUILD_ID +1 -1
  13. package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
  14. package/dist/web/standalone/.next/build-manifest.json +2 -2
  15. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  16. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  17. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  21. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  25. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/index.html +1 -1
  33. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  36. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  37. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  38. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
  40. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  41. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  42. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  43. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  44. package/package.json +1 -1
  45. package/packages/contracts/dist/rpc.test.js +7 -0
  46. package/packages/contracts/dist/rpc.test.js.map +1 -1
  47. package/packages/contracts/dist/workflow.d.ts +21 -0
  48. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  49. package/packages/contracts/dist/workflow.js +24 -0
  50. package/packages/contracts/dist/workflow.js.map +1 -1
  51. package/packages/contracts/src/rpc.test.ts +8 -0
  52. package/packages/contracts/src/workflow.ts +24 -0
  53. package/packages/mcp-server/README.md +13 -4
  54. package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
  55. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  56. package/packages/mcp-server/dist/workflow-tools.js +80 -0
  57. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  58. package/packages/mcp-server/src/workflow-tools.test.ts +22 -0
  59. package/packages/mcp-server/src/workflow-tools.ts +168 -0
  60. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  61. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  62. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  63. package/packages/pi-tui/dist/tui.js +5 -0
  64. package/packages/pi-tui/dist/tui.js.map +1 -1
  65. package/packages/pi-tui/src/tui.ts +6 -0
  66. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  67. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  68. package/src/resources/extensions/gsd/auto/contracts.ts +46 -11
  69. package/src/resources/extensions/gsd/auto/orchestrator.ts +118 -6
  70. package/src/resources/extensions/gsd/auto.ts +136 -51
  71. package/src/resources/extensions/gsd/md-importer.ts +1 -1
  72. package/src/resources/extensions/gsd/migrate/command.ts +5 -0
  73. package/src/resources/extensions/gsd/migrate/preview.ts +10 -0
  74. package/src/resources/extensions/gsd/migrate/transformer.ts +58 -4
  75. package/src/resources/extensions/gsd/migrate/writer.ts +14 -1
  76. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +408 -4
  77. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +6 -5
  78. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +4 -4
  79. package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
  80. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
  81. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
  82. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -0
  83. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +25 -0
  84. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
  85. package/src/resources/extensions/gsd/worktree-lifecycle.ts +20 -2
  86. /package/dist/web/standalone/.next/static/{KDRTXR-22LPCsa80X9dey → Wop3A7KRGyR06H3rla_1-}/_buildManifest.js +0 -0
  87. /package/dist/web/standalone/.next/static/{KDRTXR-22LPCsa80X9dey → Wop3A7KRGyR06H3rla_1-}/_ssgManifest.js +0 -0
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Adapts shared GSD workflow handlers for MCP executor calls.
1
3
  import { ensureDbOpen } from "../bootstrap/dynamic-tools.js";
2
4
  import { sanitizeCompleteMilestoneParams } from "../bootstrap/sanitize-complete-milestone.js";
3
5
  import { loadWriteGateSnapshot, shouldBlockContextArtifactSaveInSnapshot, shouldBlockRootArtifactSaveInSnapshot } from "../bootstrap/write-gate.js";
@@ -12,6 +14,9 @@ import { handleCompleteSlice } from "./complete-slice.js";
12
14
  import { handlePlanMilestone } from "./plan-milestone.js";
13
15
  import { handlePlanSlice } from "./plan-slice.js";
14
16
  import { handleReplanSlice } from "./replan-slice.js";
17
+ import { handleReopenMilestone } from "./reopen-milestone.js";
18
+ import { handleReopenSlice } from "./reopen-slice.js";
19
+ import { handleReopenTask } from "./reopen-task.js";
15
20
  import { handleReassessRoadmap } from "./reassess-roadmap.js";
16
21
  import { handleValidateMilestone } from "./validate-milestone.js";
17
22
  import { logError, logWarning } from "../workflow-logger.js";
@@ -274,6 +279,120 @@ export async function executeTaskComplete(params, basePath = process.cwd()) {
274
279
  };
275
280
  }
276
281
  }
282
+ export async function executeTaskReopen(params, basePath = process.cwd()) {
283
+ const dbAvailable = await ensureDbOpen(basePath);
284
+ if (!dbAvailable) {
285
+ return {
286
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot reopen task." }],
287
+ details: { operation: "reopen_task", error: "db_unavailable" },
288
+ isError: true,
289
+ };
290
+ }
291
+ try {
292
+ const result = await handleReopenTask(params, basePath);
293
+ if ("error" in result) {
294
+ return {
295
+ content: [{ type: "text", text: `Error reopening task: ${result.error}` }],
296
+ details: { operation: "reopen_task", error: result.error },
297
+ isError: true,
298
+ };
299
+ }
300
+ return {
301
+ content: [{ type: "text", text: `Reopened task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],
302
+ details: {
303
+ operation: "reopen_task",
304
+ taskId: result.taskId,
305
+ sliceId: result.sliceId,
306
+ milestoneId: result.milestoneId,
307
+ },
308
+ };
309
+ }
310
+ catch (err) {
311
+ const msg = err instanceof Error ? err.message : String(err);
312
+ logError("tool", `reopen_task tool failed: ${msg}`, { tool: "gsd_task_reopen", error: String(err) });
313
+ return {
314
+ content: [{ type: "text", text: `Error reopening task: ${msg}` }],
315
+ details: { operation: "reopen_task", error: msg },
316
+ isError: true,
317
+ };
318
+ }
319
+ }
320
+ export async function executeSliceReopen(params, basePath = process.cwd()) {
321
+ const dbAvailable = await ensureDbOpen(basePath);
322
+ if (!dbAvailable) {
323
+ return {
324
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot reopen slice." }],
325
+ details: { operation: "reopen_slice", error: "db_unavailable" },
326
+ isError: true,
327
+ };
328
+ }
329
+ try {
330
+ const result = await handleReopenSlice(params, basePath);
331
+ if ("error" in result) {
332
+ return {
333
+ content: [{ type: "text", text: `Error reopening slice: ${result.error}` }],
334
+ details: { operation: "reopen_slice", error: result.error },
335
+ isError: true,
336
+ };
337
+ }
338
+ return {
339
+ content: [{ type: "text", text: `Reopened slice ${result.sliceId} (${result.milestoneId})` }],
340
+ details: {
341
+ operation: "reopen_slice",
342
+ sliceId: result.sliceId,
343
+ milestoneId: result.milestoneId,
344
+ tasksReset: result.tasksReset,
345
+ },
346
+ };
347
+ }
348
+ catch (err) {
349
+ const msg = err instanceof Error ? err.message : String(err);
350
+ logError("tool", `reopen_slice tool failed: ${msg}`, { tool: "gsd_slice_reopen", error: String(err) });
351
+ return {
352
+ content: [{ type: "text", text: `Error reopening slice: ${msg}` }],
353
+ details: { operation: "reopen_slice", error: msg },
354
+ isError: true,
355
+ };
356
+ }
357
+ }
358
+ export async function executeMilestoneReopen(params, basePath = process.cwd()) {
359
+ const dbAvailable = await ensureDbOpen(basePath);
360
+ if (!dbAvailable) {
361
+ return {
362
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot reopen milestone." }],
363
+ details: { operation: "reopen_milestone", error: "db_unavailable" },
364
+ isError: true,
365
+ };
366
+ }
367
+ try {
368
+ const result = await handleReopenMilestone(params, basePath);
369
+ if ("error" in result) {
370
+ return {
371
+ content: [{ type: "text", text: `Error reopening milestone: ${result.error}` }],
372
+ details: { operation: "reopen_milestone", error: result.error },
373
+ isError: true,
374
+ };
375
+ }
376
+ return {
377
+ content: [{ type: "text", text: `Reopened milestone ${result.milestoneId}` }],
378
+ details: {
379
+ operation: "reopen_milestone",
380
+ milestoneId: result.milestoneId,
381
+ slicesReset: result.slicesReset,
382
+ tasksReset: result.tasksReset,
383
+ },
384
+ };
385
+ }
386
+ catch (err) {
387
+ const msg = err instanceof Error ? err.message : String(err);
388
+ logError("tool", `reopen_milestone tool failed: ${msg}`, { tool: "gsd_milestone_reopen", error: String(err) });
389
+ return {
390
+ content: [{ type: "text", text: `Error reopening milestone: ${msg}` }],
391
+ details: { operation: "reopen_milestone", error: msg },
392
+ isError: true,
393
+ };
394
+ }
395
+ }
277
396
  export async function executeSliceComplete(params, basePath = process.cwd()) {
278
397
  const dbAvailable = await ensureDbOpen(basePath);
279
398
  if (!dbAvailable) {
@@ -1198,17 +1198,36 @@ export class WorktreeLifecycle {
1198
1198
  }
1199
1199
  }
1200
1200
  /**
1201
- * Restore `s.basePath` to `s.originalBasePath` and rebuild `s.gitService`.
1202
- * No-op when `originalBasePath` is empty (fresh sessions).
1201
+ * Restore `s.basePath` to `s.originalBasePath`, chdir process cwd, and
1202
+ * rebuild `s.gitService`. No-op when `originalBasePath` is empty (fresh
1203
+ * sessions).
1203
1204
  *
1204
1205
  * Used by error/cleanup paths that need the session to behave as if the
1205
1206
  * worktree was never entered. Does NOT teardown the worktree directory —
1206
1207
  * callers that need teardown go through `exitMilestone({ merge: false })`.
1208
+ *
1209
+ * ADR-016 phase 3 (#5693): chdir lives inside the verb so callers do not
1210
+ * pair `restoreToProjectRoot()` with a redundant `process.chdir`. The
1211
+ * chdir runs BEFORE the throwable work (`rebuildGitService`, cache
1212
+ * invalidation) so that cleanup-path cwd is restored even if the
1213
+ * downstream rebuild throws. The chdir itself is best-effort; failure is
1214
+ * logged via debugLog and swallowed.
1207
1215
  */
1208
1216
  restoreToProjectRoot() {
1209
1217
  if (!this.s.originalBasePath)
1210
1218
  return;
1211
1219
  this.s.basePath = this.s.originalBasePath;
1220
+ try {
1221
+ process.chdir(this.s.basePath);
1222
+ }
1223
+ catch (err) {
1224
+ debugLog("WorktreeLifecycle", {
1225
+ action: "restoreToProjectRoot",
1226
+ result: "chdir-failed",
1227
+ basePath: this.s.basePath,
1228
+ error: err instanceof Error ? err.message : String(err),
1229
+ });
1230
+ }
1212
1231
  rebuildGitService(this.s, this.deps);
1213
1232
  invalidateAllCaches();
1214
1233
  }