gsd-pi 2.76.0-dev.4100bd590 → 2.76.0-dev.82e249f7b

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 (94) hide show
  1. package/dist/resources/extensions/gsd/auto/phases.js +4 -1
  2. package/dist/resources/extensions/gsd/auto/session.js +4 -0
  3. package/dist/resources/extensions/gsd/auto-model-selection.js +13 -2
  4. package/dist/resources/extensions/gsd/auto-start.js +12 -7
  5. package/dist/resources/extensions/gsd/auto.js +4 -1
  6. package/dist/resources/extensions/gsd/complexity-classifier.js +5 -3
  7. package/dist/resources/extensions/gsd/prompt-loader.js +22 -7
  8. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  9. package/dist/web/standalone/.next/BUILD_ID +1 -1
  10. package/dist/web/standalone/.next/app-path-routes-manifest.json +19 -19
  11. package/dist/web/standalone/.next/build-manifest.json +2 -2
  12. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  13. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  14. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  17. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  21. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/index.html +1 -1
  30. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/dist/web/standalone/.next/server/app-paths-manifest.json +19 -19
  37. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  38. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  39. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  40. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  41. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  42. package/package.json +1 -1
  43. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  44. package/packages/pi-ai/dist/providers/openai-completions.js +60 -15
  45. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  46. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts +17 -0
  47. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts.map +1 -0
  48. package/packages/pi-ai/dist/providers/think-tag-parser.js +75 -0
  49. package/packages/pi-ai/dist/providers/think-tag-parser.js.map +1 -0
  50. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts +2 -0
  51. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts.map +1 -0
  52. package/packages/pi-ai/dist/providers/think-tag-parser.test.js +41 -0
  53. package/packages/pi-ai/dist/providers/think-tag-parser.test.js.map +1 -0
  54. package/packages/pi-ai/src/providers/openai-completions.ts +57 -16
  55. package/packages/pi-ai/src/providers/think-tag-parser.test.ts +44 -0
  56. package/packages/pi-ai/src/providers/think-tag-parser.ts +94 -0
  57. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  58. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts +3 -1
  59. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -1
  60. package/packages/pi-coding-agent/dist/core/model-discovery.js +92 -12
  61. package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
  62. package/packages/pi-coding-agent/dist/core/model-discovery.test.js +16 -1
  63. package/packages/pi-coding-agent/dist/core/model-discovery.test.js.map +1 -1
  64. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js +61 -1
  65. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js.map +1 -1
  66. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +5 -0
  67. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  68. package/packages/pi-coding-agent/dist/core/model-registry.js +76 -10
  69. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  70. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
  71. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +13 -7
  72. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  73. package/packages/pi-coding-agent/src/core/model-discovery.test.ts +19 -0
  74. package/packages/pi-coding-agent/src/core/model-discovery.ts +99 -12
  75. package/packages/pi-coding-agent/src/core/model-registry-discovery.test.ts +75 -0
  76. package/packages/pi-coding-agent/src/core/model-registry.ts +86 -10
  77. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +16 -7
  78. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  79. package/scripts/link-workspace-packages.cjs +1 -0
  80. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  81. package/src/resources/extensions/gsd/auto/phases.ts +4 -0
  82. package/src/resources/extensions/gsd/auto/session.ts +7 -1
  83. package/src/resources/extensions/gsd/auto-model-selection.ts +16 -1
  84. package/src/resources/extensions/gsd/auto-start.ts +12 -7
  85. package/src/resources/extensions/gsd/auto.ts +4 -1
  86. package/src/resources/extensions/gsd/complexity-classifier.ts +5 -3
  87. package/src/resources/extensions/gsd/prompt-loader.ts +30 -7
  88. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +12 -0
  89. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +33 -3
  90. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +38 -0
  91. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +3 -3
  92. package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +49 -0
  93. /package/dist/web/standalone/.next/static/{YnUwu2WWaT0_hyTLUF4nq → ecSsu49rxxcpbNmVP4mLD}/_buildManifest.js +0 -0
  94. /package/dist/web/standalone/.next/static/{YnUwu2WWaT0_hyTLUF4nq → ecSsu49rxxcpbNmVP4mLD}/_ssgManifest.js +0 -0
@@ -0,0 +1,94 @@
1
+ export type ThinkSegmentType = "text" | "thinking";
2
+
3
+ export interface ThinkSegment {
4
+ type: ThinkSegmentType;
5
+ text: string;
6
+ }
7
+
8
+ interface ThinkTagParserState {
9
+ mode: ThinkSegmentType;
10
+ pending: string;
11
+ }
12
+
13
+ const OPEN_TAG = "<think>";
14
+ const CLOSE_TAG = "</think>";
15
+
16
+ function trailingPartialLength(text: string, token: string): number {
17
+ const max = Math.min(text.length, token.length - 1);
18
+ for (let len = max; len > 0; len--) {
19
+ if (token.startsWith(text.slice(-len))) return len;
20
+ }
21
+ return 0;
22
+ }
23
+
24
+ /**
25
+ * Stateful parser for streaming `<think>...</think>` wrappers emitted by some
26
+ * OpenAI-compatible providers. Converts tagged sections into logical
27
+ * text/thinking segments while handling chunk boundaries safely.
28
+ */
29
+ export class ThinkTagParser {
30
+ private state: ThinkTagParserState = { mode: "text", pending: "" };
31
+
32
+ consume(delta: string): ThinkSegment[] {
33
+ this.state.pending += delta;
34
+ return this.drain(false);
35
+ }
36
+
37
+ flush(): ThinkSegment[] {
38
+ return this.drain(true);
39
+ }
40
+
41
+ private drain(flushAll: boolean): ThinkSegment[] {
42
+ const out: ThinkSegment[] = [];
43
+ const push = (type: ThinkSegmentType, text: string) => {
44
+ if (!text) return;
45
+ out.push({ type, text });
46
+ };
47
+
48
+ while (this.state.pending.length > 0) {
49
+ if (this.state.mode === "text") {
50
+ const openIdx = this.state.pending.indexOf(OPEN_TAG);
51
+ if (openIdx >= 0) {
52
+ push("text", this.state.pending.slice(0, openIdx));
53
+ this.state.pending = this.state.pending.slice(openIdx + OPEN_TAG.length);
54
+ this.state.mode = "thinking";
55
+ continue;
56
+ }
57
+
58
+ if (flushAll) {
59
+ push("text", this.state.pending);
60
+ this.state.pending = "";
61
+ break;
62
+ }
63
+
64
+ const keep = trailingPartialLength(this.state.pending, OPEN_TAG);
65
+ const safeEnd = Math.max(0, this.state.pending.length - keep);
66
+ push("text", this.state.pending.slice(0, safeEnd));
67
+ this.state.pending = this.state.pending.slice(safeEnd);
68
+ break;
69
+ }
70
+
71
+ const closeIdx = this.state.pending.indexOf(CLOSE_TAG);
72
+ if (closeIdx >= 0) {
73
+ push("thinking", this.state.pending.slice(0, closeIdx));
74
+ this.state.pending = this.state.pending.slice(closeIdx + CLOSE_TAG.length);
75
+ this.state.mode = "text";
76
+ continue;
77
+ }
78
+
79
+ if (flushAll) {
80
+ push("thinking", this.state.pending);
81
+ this.state.pending = "";
82
+ break;
83
+ }
84
+
85
+ const keep = trailingPartialLength(this.state.pending, CLOSE_TAG);
86
+ const safeEnd = Math.max(0, this.state.pending.length - keep);
87
+ push("thinking", this.state.pending.slice(0, safeEnd));
88
+ this.state.pending = this.state.pending.slice(safeEnd);
89
+ break;
90
+ }
91
+
92
+ return out;
93
+ }
94
+ }