gsd-pi 2.63.0-dev.351157b → 2.63.0-dev.d04bbc5

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 (100) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/headless-query.js +11 -1
  3. package/dist/resources/extensions/gsd/auto/detect-stuck.js +27 -0
  4. package/dist/resources/extensions/gsd/auto/phases.js +34 -0
  5. package/dist/resources/extensions/gsd/auto/session.js +4 -0
  6. package/dist/resources/extensions/gsd/auto-model-selection.js +32 -0
  7. package/dist/resources/extensions/gsd/auto-post-unit.js +79 -0
  8. package/dist/resources/extensions/gsd/auto-timers.js +2 -1
  9. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +87 -28
  10. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +23 -0
  11. package/dist/resources/extensions/gsd/bootstrap/system-context.js +30 -2
  12. package/dist/resources/extensions/gsd/preferences-types.js +1 -0
  13. package/dist/resources/extensions/gsd/prompt-loader.js +7 -0
  14. package/dist/resources/extensions/gsd/prompts/system.md +3 -7
  15. package/dist/resources/extensions/gsd/safety/content-validator.js +73 -0
  16. package/dist/resources/extensions/gsd/safety/destructive-guard.js +34 -0
  17. package/dist/resources/extensions/gsd/safety/evidence-collector.js +109 -0
  18. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +83 -0
  19. package/dist/resources/extensions/gsd/safety/file-change-validator.js +71 -0
  20. package/dist/resources/extensions/gsd/safety/git-checkpoint.js +91 -0
  21. package/dist/resources/extensions/gsd/safety/safety-harness.js +64 -0
  22. package/dist/resources/extensions/ollama/index.js +22 -10
  23. package/dist/resources/extensions/ollama/ollama-chat-provider.js +1 -1
  24. package/dist/update-cmd.js +4 -2
  25. package/dist/web/standalone/.next/BUILD_ID +1 -1
  26. package/dist/web/standalone/.next/app-path-routes-manifest.json +18 -18
  27. package/dist/web/standalone/.next/build-manifest.json +2 -2
  28. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  29. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  30. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  36. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  37. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  38. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  40. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  41. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  42. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  43. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  44. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  45. package/dist/web/standalone/.next/server/app/index.html +1 -1
  46. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  47. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  48. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  51. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  52. package/dist/web/standalone/.next/server/app-paths-manifest.json +18 -18
  53. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  54. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  55. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  56. package/dist/welcome-screen.js +1 -1
  57. package/package.json +1 -1
  58. package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.d.ts +2 -0
  59. package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.d.ts.map +1 -0
  60. package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.js +46 -0
  61. package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.js.map +1 -0
  62. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  63. package/packages/pi-coding-agent/dist/core/model-registry.js +11 -0
  64. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  65. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  66. package/packages/pi-coding-agent/dist/core/sdk.js +2 -3
  67. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  68. package/packages/pi-coding-agent/src/core/extensions/provider-registration.test.ts +81 -0
  69. package/packages/pi-coding-agent/src/core/model-registry.ts +12 -0
  70. package/packages/pi-coding-agent/src/core/sdk.ts +2 -3
  71. package/src/resources/extensions/gsd/auto/detect-stuck.ts +27 -0
  72. package/src/resources/extensions/gsd/auto/phases.ts +39 -0
  73. package/src/resources/extensions/gsd/auto/session.ts +5 -0
  74. package/src/resources/extensions/gsd/auto-model-selection.ts +36 -0
  75. package/src/resources/extensions/gsd/auto-post-unit.ts +88 -0
  76. package/src/resources/extensions/gsd/auto-timers.ts +2 -1
  77. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +86 -28
  78. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +27 -0
  79. package/src/resources/extensions/gsd/bootstrap/system-context.ts +31 -2
  80. package/src/resources/extensions/gsd/preferences-types.ts +13 -0
  81. package/src/resources/extensions/gsd/prompt-loader.ts +8 -0
  82. package/src/resources/extensions/gsd/prompts/system.md +3 -7
  83. package/src/resources/extensions/gsd/safety/content-validator.ts +98 -0
  84. package/src/resources/extensions/gsd/safety/destructive-guard.ts +49 -0
  85. package/src/resources/extensions/gsd/safety/evidence-collector.ts +151 -0
  86. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +120 -0
  87. package/src/resources/extensions/gsd/safety/file-change-validator.ts +108 -0
  88. package/src/resources/extensions/gsd/safety/git-checkpoint.ts +106 -0
  89. package/src/resources/extensions/gsd/safety/safety-harness.ts +105 -0
  90. package/src/resources/extensions/gsd/tests/complete-slice-string-coercion.test.ts +211 -0
  91. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +50 -0
  92. package/src/resources/extensions/gsd/tests/git-checkpoint.test.ts +94 -0
  93. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +42 -0
  94. package/src/resources/extensions/gsd/workflow-logger.ts +2 -1
  95. package/src/resources/extensions/ollama/index.ts +20 -11
  96. package/src/resources/extensions/ollama/ollama-auth-mode.test.ts +20 -0
  97. package/src/resources/extensions/ollama/ollama-chat-provider.ts +1 -1
  98. package/src/resources/extensions/ollama/tests/ollama-chat-provider-stream.test.ts +82 -0
  99. /package/dist/web/standalone/.next/static/{QmuF-eAbuU_2MQ03t38qr → vIq9fmvRUaFOpguoX5j4W}/_buildManifest.js +0 -0
  100. /package/dist/web/standalone/.next/static/{QmuF-eAbuU_2MQ03t38qr → vIq9fmvRUaFOpguoX5j4W}/_ssgManifest.js +0 -0
@@ -0,0 +1,82 @@
1
+ // GSD2 — Regression test: Ollama streaming must not drop content on done:true chunks (#3576)
2
+ // Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
3
+
4
+ import { describe, it } from "node:test";
5
+ import assert from "node:assert/strict";
6
+
7
+ /**
8
+ * This test validates the streaming logic pattern used in ollama-chat-provider.ts.
9
+ * The bug: content on the terminal done:true chunk was silently dropped because
10
+ * the stream loop only emitted content when `!chunk.done`.
11
+ *
12
+ * The fix: process chunk.message.content regardless of chunk.done, then handle
13
+ * done metadata. This test exercises that logic path with a simulated chunk stream.
14
+ */
15
+
16
+ interface OllamaChunk {
17
+ done: boolean;
18
+ done_reason?: string;
19
+ message?: { content?: string; tool_calls?: unknown[] };
20
+ prompt_eval_count?: number;
21
+ eval_count?: number;
22
+ }
23
+
24
+ function simulateStreamLoop(chunks: OllamaChunk[]): string {
25
+ let output = "";
26
+
27
+ for (const chunk of chunks) {
28
+ // This mirrors the fixed logic in ollama-chat-provider.ts
29
+ const content = chunk.message?.content ?? "";
30
+ if (content) {
31
+ output += content;
32
+ }
33
+
34
+ if (chunk.done) {
35
+ break;
36
+ }
37
+ }
38
+
39
+ return output;
40
+ }
41
+
42
+ describe("Ollama stream terminal chunk handling", () => {
43
+ it("captures content from done:true chunk", () => {
44
+ const chunks: OllamaChunk[] = [
45
+ { done: false, message: { content: "Hello " } },
46
+ { done: false, message: { content: "world" } },
47
+ { done: true, done_reason: "stop", message: { content: "!" } },
48
+ ];
49
+
50
+ const result = simulateStreamLoop(chunks);
51
+ assert.equal(result, "Hello world!", "trailing content on done chunk must not be dropped");
52
+ });
53
+
54
+ it("works when done chunk has no content", () => {
55
+ const chunks: OllamaChunk[] = [
56
+ { done: false, message: { content: "Hello" } },
57
+ { done: true, done_reason: "stop", message: {} },
58
+ ];
59
+
60
+ const result = simulateStreamLoop(chunks);
61
+ assert.equal(result, "Hello");
62
+ });
63
+
64
+ it("works when done chunk has empty string content", () => {
65
+ const chunks: OllamaChunk[] = [
66
+ { done: false, message: { content: "data" } },
67
+ { done: true, done_reason: "stop", message: { content: "" } },
68
+ ];
69
+
70
+ const result = simulateStreamLoop(chunks);
71
+ assert.equal(result, "data");
72
+ });
73
+
74
+ it("handles single done chunk with content", () => {
75
+ const chunks: OllamaChunk[] = [
76
+ { done: true, done_reason: "stop", message: { content: "one-shot" } },
77
+ ];
78
+
79
+ const result = simulateStreamLoop(chunks);
80
+ assert.equal(result, "one-shot", "single done chunk with content should work");
81
+ });
82
+ });