gsd-pi 2.37.1 → 2.38.0-dev.63ad7e5

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 (201) hide show
  1. package/README.md +1 -1
  2. package/dist/app-paths.js +1 -1
  3. package/dist/cli.js +9 -0
  4. package/dist/extension-discovery.d.ts +5 -3
  5. package/dist/extension-discovery.js +14 -9
  6. package/dist/extension-registry.js +2 -2
  7. package/dist/onboarding.js +1 -0
  8. package/dist/remote-questions-config.js +2 -2
  9. package/dist/resources/extensions/browser-tools/package.json +3 -1
  10. package/dist/resources/extensions/cmux/index.js +55 -1
  11. package/dist/resources/extensions/context7/package.json +1 -1
  12. package/dist/resources/extensions/env-utils.js +29 -0
  13. package/dist/resources/extensions/get-secrets-from-user.js +5 -24
  14. package/dist/resources/extensions/google-search/package.json +3 -1
  15. package/dist/resources/extensions/gsd/auto/session.js +6 -23
  16. package/dist/resources/extensions/gsd/auto-dispatch.js +74 -9
  17. package/dist/resources/extensions/gsd/auto-loop.js +68 -97
  18. package/dist/resources/extensions/gsd/auto-post-unit.js +87 -69
  19. package/dist/resources/extensions/gsd/auto-prompts.js +98 -33
  20. package/dist/resources/extensions/gsd/auto-recovery.js +37 -1
  21. package/dist/resources/extensions/gsd/auto-start.js +13 -2
  22. package/dist/resources/extensions/gsd/auto-worktree-sync.js +13 -5
  23. package/dist/resources/extensions/gsd/auto.js +143 -96
  24. package/dist/resources/extensions/gsd/captures.js +9 -1
  25. package/dist/resources/extensions/gsd/commands-extensions.js +3 -2
  26. package/dist/resources/extensions/gsd/commands-handlers.js +16 -3
  27. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
  28. package/dist/resources/extensions/gsd/commands.js +22 -2
  29. package/dist/resources/extensions/gsd/context-budget.js +2 -10
  30. package/dist/resources/extensions/gsd/detection.js +1 -2
  31. package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -2
  32. package/dist/resources/extensions/gsd/doctor-checks.js +82 -0
  33. package/dist/resources/extensions/gsd/doctor-environment.js +78 -0
  34. package/dist/resources/extensions/gsd/doctor-format.js +15 -0
  35. package/dist/resources/extensions/gsd/doctor-providers.js +62 -12
  36. package/dist/resources/extensions/gsd/doctor.js +184 -11
  37. package/dist/resources/extensions/gsd/export.js +1 -1
  38. package/dist/resources/extensions/gsd/files.js +43 -2
  39. package/dist/resources/extensions/gsd/forensics.js +1 -1
  40. package/dist/resources/extensions/gsd/index.js +2 -1
  41. package/dist/resources/extensions/gsd/migrate/parsers.js +1 -1
  42. package/dist/resources/extensions/gsd/observability-validator.js +24 -0
  43. package/dist/resources/extensions/gsd/package.json +1 -1
  44. package/dist/resources/extensions/gsd/preferences-models.js +0 -12
  45. package/dist/resources/extensions/gsd/preferences-types.js +2 -2
  46. package/dist/resources/extensions/gsd/preferences-validation.js +43 -11
  47. package/dist/resources/extensions/gsd/preferences.js +5 -5
  48. package/dist/resources/extensions/gsd/prompts/discuss.md +11 -14
  49. package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -2
  50. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +11 -12
  51. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -10
  52. package/dist/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  53. package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  54. package/dist/resources/extensions/gsd/prompts/queue.md +4 -8
  55. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +44 -0
  56. package/dist/resources/extensions/gsd/prompts/run-uat.md +25 -10
  57. package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -2
  58. package/dist/resources/extensions/gsd/reactive-graph.js +227 -0
  59. package/dist/resources/extensions/gsd/repo-identity.js +21 -4
  60. package/dist/resources/extensions/gsd/resource-version.js +2 -1
  61. package/dist/resources/extensions/gsd/state.js +1 -1
  62. package/dist/resources/extensions/gsd/templates/task-plan.md +11 -3
  63. package/dist/resources/extensions/gsd/visualizer-data.js +1 -1
  64. package/dist/resources/extensions/gsd/worktree.js +35 -16
  65. package/dist/resources/extensions/remote-questions/status.js +2 -1
  66. package/dist/resources/extensions/remote-questions/store.js +2 -1
  67. package/dist/resources/extensions/search-the-web/provider.js +2 -1
  68. package/dist/resources/extensions/subagent/index.js +12 -3
  69. package/dist/resources/extensions/subagent/isolation.js +2 -1
  70. package/dist/resources/extensions/ttsr/rule-loader.js +2 -1
  71. package/dist/resources/extensions/universal-config/package.json +1 -1
  72. package/dist/welcome-screen.d.ts +12 -0
  73. package/dist/welcome-screen.js +53 -0
  74. package/package.json +2 -1
  75. package/packages/pi-ai/dist/env-api-keys.js +13 -0
  76. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  77. package/packages/pi-ai/dist/models.generated.d.ts +172 -0
  78. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  79. package/packages/pi-ai/dist/models.generated.js +172 -0
  80. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  81. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +64 -0
  82. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -0
  83. package/packages/pi-ai/dist/providers/anthropic-shared.js +668 -0
  84. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -0
  85. package/packages/pi-ai/dist/providers/anthropic-vertex.d.ts +5 -0
  86. package/packages/pi-ai/dist/providers/anthropic-vertex.d.ts.map +1 -0
  87. package/packages/pi-ai/dist/providers/anthropic-vertex.js +85 -0
  88. package/packages/pi-ai/dist/providers/anthropic-vertex.js.map +1 -0
  89. package/packages/pi-ai/dist/providers/anthropic.d.ts +4 -30
  90. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  91. package/packages/pi-ai/dist/providers/anthropic.js +47 -764
  92. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  93. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  94. package/packages/pi-ai/dist/providers/register-builtins.js +6 -0
  95. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  96. package/packages/pi-ai/dist/types.d.ts +2 -2
  97. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  98. package/packages/pi-ai/dist/types.js.map +1 -1
  99. package/packages/pi-ai/package.json +1 -0
  100. package/packages/pi-ai/src/env-api-keys.ts +14 -0
  101. package/packages/pi-ai/src/models.generated.ts +172 -0
  102. package/packages/pi-ai/src/providers/anthropic-shared.ts +761 -0
  103. package/packages/pi-ai/src/providers/anthropic-vertex.ts +130 -0
  104. package/packages/pi-ai/src/providers/anthropic.ts +76 -868
  105. package/packages/pi-ai/src/providers/register-builtins.ts +7 -0
  106. package/packages/pi-ai/src/types.ts +2 -0
  107. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  108. package/packages/pi-coding-agent/dist/core/model-resolver.js +1 -0
  109. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  110. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  111. package/packages/pi-coding-agent/dist/core/package-manager.js +8 -4
  112. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  113. package/packages/pi-coding-agent/package.json +1 -1
  114. package/packages/pi-coding-agent/src/core/model-resolver.ts +1 -0
  115. package/packages/pi-coding-agent/src/core/package-manager.ts +8 -4
  116. package/pkg/package.json +1 -1
  117. package/src/resources/extensions/cmux/index.ts +57 -1
  118. package/src/resources/extensions/env-utils.ts +31 -0
  119. package/src/resources/extensions/get-secrets-from-user.ts +5 -24
  120. package/src/resources/extensions/gsd/auto/session.ts +7 -25
  121. package/src/resources/extensions/gsd/auto-dispatch.ts +99 -8
  122. package/src/resources/extensions/gsd/auto-loop.ts +88 -133
  123. package/src/resources/extensions/gsd/auto-post-unit.ts +64 -40
  124. package/src/resources/extensions/gsd/auto-prompts.ts +132 -36
  125. package/src/resources/extensions/gsd/auto-recovery.ts +42 -0
  126. package/src/resources/extensions/gsd/auto-start.ts +18 -2
  127. package/src/resources/extensions/gsd/auto-worktree-sync.ts +15 -4
  128. package/src/resources/extensions/gsd/auto.ts +139 -101
  129. package/src/resources/extensions/gsd/captures.ts +10 -1
  130. package/src/resources/extensions/gsd/commands-extensions.ts +4 -2
  131. package/src/resources/extensions/gsd/commands-handlers.ts +17 -2
  132. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
  133. package/src/resources/extensions/gsd/commands.ts +24 -2
  134. package/src/resources/extensions/gsd/context-budget.ts +2 -12
  135. package/src/resources/extensions/gsd/detection.ts +2 -2
  136. package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -2
  137. package/src/resources/extensions/gsd/doctor-checks.ts +75 -0
  138. package/src/resources/extensions/gsd/doctor-environment.ts +82 -1
  139. package/src/resources/extensions/gsd/doctor-format.ts +20 -0
  140. package/src/resources/extensions/gsd/doctor-providers.ts +64 -10
  141. package/src/resources/extensions/gsd/doctor-types.ts +16 -1
  142. package/src/resources/extensions/gsd/doctor.ts +177 -13
  143. package/src/resources/extensions/gsd/export.ts +1 -1
  144. package/src/resources/extensions/gsd/files.ts +47 -2
  145. package/src/resources/extensions/gsd/forensics.ts +1 -1
  146. package/src/resources/extensions/gsd/index.ts +3 -1
  147. package/src/resources/extensions/gsd/migrate/parsers.ts +1 -1
  148. package/src/resources/extensions/gsd/observability-validator.ts +27 -0
  149. package/src/resources/extensions/gsd/preferences-models.ts +0 -12
  150. package/src/resources/extensions/gsd/preferences-types.ts +5 -5
  151. package/src/resources/extensions/gsd/preferences-validation.ts +42 -11
  152. package/src/resources/extensions/gsd/preferences.ts +5 -5
  153. package/src/resources/extensions/gsd/prompts/discuss.md +11 -14
  154. package/src/resources/extensions/gsd/prompts/execute-task.md +2 -2
  155. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +11 -12
  156. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -10
  157. package/src/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  158. package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  159. package/src/resources/extensions/gsd/prompts/queue.md +4 -8
  160. package/src/resources/extensions/gsd/prompts/reactive-execute.md +44 -0
  161. package/src/resources/extensions/gsd/prompts/run-uat.md +25 -10
  162. package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -2
  163. package/src/resources/extensions/gsd/reactive-graph.ts +289 -0
  164. package/src/resources/extensions/gsd/repo-identity.ts +23 -4
  165. package/src/resources/extensions/gsd/resource-version.ts +3 -1
  166. package/src/resources/extensions/gsd/state.ts +1 -1
  167. package/src/resources/extensions/gsd/templates/task-plan.md +11 -3
  168. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +21 -18
  169. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +11 -31
  170. package/src/resources/extensions/gsd/tests/cmux.test.ts +93 -0
  171. package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +266 -0
  172. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +191 -3
  173. package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +111 -0
  174. package/src/resources/extensions/gsd/tests/preferences.test.ts +2 -7
  175. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +59 -0
  176. package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +511 -0
  177. package/src/resources/extensions/gsd/tests/reactive-graph.test.ts +299 -0
  178. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +21 -1
  179. package/src/resources/extensions/gsd/tests/run-uat.test.ts +11 -3
  180. package/src/resources/extensions/gsd/tests/worktree.test.ts +47 -0
  181. package/src/resources/extensions/gsd/types.ts +43 -1
  182. package/src/resources/extensions/gsd/visualizer-data.ts +1 -1
  183. package/src/resources/extensions/gsd/worktree.ts +35 -15
  184. package/src/resources/extensions/remote-questions/status.ts +3 -1
  185. package/src/resources/extensions/remote-questions/store.ts +3 -1
  186. package/src/resources/extensions/search-the-web/provider.ts +2 -1
  187. package/src/resources/extensions/subagent/index.ts +12 -3
  188. package/src/resources/extensions/subagent/isolation.ts +3 -1
  189. package/src/resources/extensions/ttsr/rule-loader.ts +3 -1
  190. package/dist/resources/extensions/gsd/prompt-compressor.js +0 -393
  191. package/dist/resources/extensions/gsd/semantic-chunker.js +0 -254
  192. package/dist/resources/extensions/gsd/summary-distiller.js +0 -212
  193. package/src/resources/extensions/gsd/prompt-compressor.ts +0 -508
  194. package/src/resources/extensions/gsd/semantic-chunker.ts +0 -336
  195. package/src/resources/extensions/gsd/summary-distiller.ts +0 -258
  196. package/src/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  197. package/src/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  198. package/src/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  199. package/src/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  200. package/src/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  201. package/src/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
@@ -360,4 +360,115 @@ console.log('\n=== Clean slice plan: no plan-quality issues ===');
360
360
  assertEq(planQualityIssues.length, 0, 'clean slice plan produces no empty_task_entry issues');
361
361
  }
362
362
 
363
+ // ═══════════════════════════════════════════════════════════════════════════
364
+ // validateTaskPlanContent — missing output file paths
365
+ // ═══════════════════════════════════════════════════════════════════════════
366
+
367
+ console.log('\n=== validateTaskPlanContent: missing output file paths ===');
368
+ {
369
+ const content = `# T01: Some Task
370
+
371
+ ## Description
372
+
373
+ Do something.
374
+
375
+ ## Steps
376
+
377
+ 1. Do the thing
378
+
379
+ ## Verification
380
+
381
+ - Check it works
382
+
383
+ ## Expected Output
384
+
385
+ This task produces the main output.
386
+ `;
387
+
388
+ const issues = validateTaskPlanContent('T01-PLAN.md', content);
389
+ const outputIssues = issues.filter(i => i.ruleId === 'missing_output_file_paths');
390
+ assertTrue(outputIssues.length >= 1, 'Expected Output without file paths triggers missing_output_file_paths');
391
+ }
392
+
393
+ console.log('\n=== validateTaskPlanContent: valid output file paths ===');
394
+ {
395
+ const content = `# T01: Some Task
396
+
397
+ ## Description
398
+
399
+ Do something.
400
+
401
+ ## Steps
402
+
403
+ 1. Do the thing
404
+
405
+ ## Verification
406
+
407
+ - Check it works
408
+
409
+ ## Expected Output
410
+
411
+ - \`src/types.ts\` — New type definitions
412
+ `;
413
+
414
+ const issues = validateTaskPlanContent('T01-PLAN.md', content);
415
+ const outputIssues = issues.filter(i => i.ruleId === 'missing_output_file_paths');
416
+ assertEq(outputIssues.length, 0, 'Expected Output with file paths does not trigger warning');
417
+ }
418
+
419
+ console.log('\n=== validateTaskPlanContent: missing input file paths (info severity) ===');
420
+ {
421
+ const content = `# T01: Some Task
422
+
423
+ ## Description
424
+
425
+ Do something.
426
+
427
+ ## Steps
428
+
429
+ 1. Do the thing
430
+
431
+ ## Verification
432
+
433
+ - Check it works
434
+
435
+ ## Inputs
436
+
437
+ Prior task summary insights about the architecture.
438
+
439
+ ## Expected Output
440
+
441
+ - \`src/output.ts\` — Output file
442
+ `;
443
+
444
+ const issues = validateTaskPlanContent('T01-PLAN.md', content);
445
+ const inputIssues = issues.filter(i => i.ruleId === 'missing_input_file_paths');
446
+ assertTrue(inputIssues.length >= 1, 'Inputs without file paths triggers missing_input_file_paths');
447
+ if (inputIssues.length > 0) {
448
+ assertEq(inputIssues[0].severity, 'info', 'missing_input_file_paths is info severity (not warning)');
449
+ }
450
+ }
451
+
452
+ console.log('\n=== validateTaskPlanContent: no Expected Output section at all ===');
453
+ {
454
+ const content = `# T01: Some Task
455
+
456
+ ## Description
457
+
458
+ Do something.
459
+
460
+ ## Steps
461
+
462
+ 1. Do the thing
463
+
464
+ ## Verification
465
+
466
+ - Check it works
467
+ `;
468
+
469
+ const issues = validateTaskPlanContent('T01-PLAN.md', content);
470
+ const outputIssues = issues.filter(i => i.ruleId === 'missing_output_file_paths');
471
+ assertTrue(outputIssues.length >= 1, 'Missing Expected Output section triggers missing_output_file_paths');
472
+ }
473
+
363
474
  report();
@@ -208,30 +208,25 @@ test("git fields comprehensive validation", () => {
208
208
  assert.equal(preferences.git?.isolation, "branch");
209
209
  });
210
210
 
211
- test("auto_visualize, auto_report, compression_strategy, context_selection validate correctly", () => {
211
+ test("auto_visualize, auto_report, context_selection validate correctly", () => {
212
212
  const { preferences, errors } = validatePreferences({
213
213
  auto_visualize: true,
214
214
  auto_report: false,
215
- compression_strategy: "compress",
216
215
  context_selection: "smart",
217
216
  });
218
217
  assert.equal(errors.length, 0);
219
218
  assert.equal(preferences.auto_visualize, true);
220
219
  assert.equal(preferences.auto_report, false);
221
- assert.equal(preferences.compression_strategy, "compress");
222
220
  assert.equal(preferences.context_selection, "smart");
223
221
  });
224
222
 
225
- test("auto_visualize, auto_report, compression_strategy, context_selection reject invalid values", () => {
223
+ test("auto_visualize, auto_report, context_selection reject invalid values", () => {
226
224
  const { errors: e1 } = validatePreferences({ auto_visualize: "yes" as never });
227
225
  assert.ok(e1.some(e => e.includes("auto_visualize")));
228
226
 
229
227
  const { errors: e2 } = validatePreferences({ auto_report: 1 as never });
230
228
  assert.ok(e2.some(e => e.includes("auto_report")));
231
229
 
232
- const { errors: e3 } = validatePreferences({ compression_strategy: "shrink" as never });
233
- assert.ok(e3.some(e => e.includes("compression_strategy")));
234
-
235
230
  const { errors: e4 } = validatePreferences({ context_selection: "partial" as never });
236
231
  assert.ok(e4.some(e => e.includes("context_selection")));
237
232
  });
@@ -0,0 +1,59 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { readFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+
6
+ const promptsDir = join(process.cwd(), "src/resources/extensions/gsd/prompts");
7
+
8
+ function readPrompt(name: string): string {
9
+ return readFileSync(join(promptsDir, `${name}.md`), "utf-8");
10
+ }
11
+
12
+ test("reactive-execute prompt keeps task summaries with subagents and avoids batch commits", () => {
13
+ const prompt = readPrompt("reactive-execute");
14
+ assert.match(prompt, /subagent-written summary as authoritative/i);
15
+ assert.match(prompt, /Do NOT create a batch commit/i);
16
+ assert.doesNotMatch(prompt, /\*\*Write task summaries\*\*/i);
17
+ assert.doesNotMatch(prompt, /\*\*Commit\*\* all changes/i);
18
+ });
19
+
20
+ test("run-uat prompt branches on dynamic UAT mode and supports runtime evidence", () => {
21
+ const prompt = readPrompt("run-uat");
22
+ assert.match(prompt, /\*\*Detected UAT mode:\*\*\s*`\{\{uatType\}\}`/);
23
+ assert.match(prompt, /uatType:\s*\{\{uatType\}\}/);
24
+ assert.match(prompt, /live-runtime/);
25
+ assert.match(prompt, /browser\/runtime\/network/i);
26
+ assert.match(prompt, /NEEDS-HUMAN/);
27
+ assert.doesNotMatch(prompt, /uatType:\s*artifact-driven/);
28
+ });
29
+
30
+ test("workflow-start prompt defaults to autonomy instead of per-phase confirmation", () => {
31
+ const prompt = readPrompt("workflow-start");
32
+ assert.match(prompt, /Keep moving by default/i);
33
+ assert.match(prompt, /Decision gates, not ceremony/i);
34
+ assert.doesNotMatch(prompt, /confirm with the user before proceeding/i);
35
+ assert.doesNotMatch(prompt, /Gate between phases/i);
36
+ });
37
+
38
+ test("discuss prompt allows implementation questions when they materially matter", () => {
39
+ const prompt = readPrompt("discuss");
40
+ assert.match(prompt, /Lead with experience, but ask implementation when it materially matters/i);
41
+ assert.match(prompt, /one gate, not two/i);
42
+ assert.doesNotMatch(prompt, /Questions must be about the experience, not the implementation/i);
43
+ });
44
+
45
+ test("guided discussion prompts avoid wrap-up prompts after every round", () => {
46
+ const milestonePrompt = readPrompt("guided-discuss-milestone");
47
+ const slicePrompt = readPrompt("guided-discuss-slice");
48
+ assert.match(milestonePrompt, /Do \*\*not\*\* ask a meta "ready to wrap up\?" question after every round/i);
49
+ assert.match(slicePrompt, /Do \*\*not\*\* ask a meta "ready to wrap up\?" question after every round/i);
50
+ assert.doesNotMatch(milestonePrompt, /I think I have a solid picture of this milestone\. Ready to wrap up/i);
51
+ assert.doesNotMatch(slicePrompt, /I think I have a solid picture of this slice\. Ready to wrap up/i);
52
+ });
53
+
54
+ test("guided-resume-task prompt preserves recovery state until work is superseded", () => {
55
+ const prompt = readPrompt("guided-resume-task");
56
+ assert.match(prompt, /Do \*\*not\*\* delete the continue file immediately/i);
57
+ assert.match(prompt, /successfully completed or you have written a newer summary\/continue artifact/i);
58
+ assert.doesNotMatch(prompt, /Delete the continue file after reading it/i);
59
+ });