gsd-pi 2.80.0-dev.710c06e97 → 2.80.0-dev.8b3a59f5c

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 (67) hide show
  1. package/dist/resources/.managed-resources-content-hash +1 -1
  2. package/dist/resources/extensions/gsd/auto-recovery.js +131 -9
  3. package/dist/resources/extensions/gsd/commands-extract-learnings.js +17 -12
  4. package/dist/resources/extensions/gsd/db-base-schema.js +14 -0
  5. package/dist/resources/extensions/gsd/db-migration-steps.js +16 -0
  6. package/dist/resources/extensions/gsd/gsd-db.js +102 -2
  7. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  8. package/dist/web/standalone/.next/BUILD_ID +1 -1
  9. package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
  10. package/dist/web/standalone/.next/build-manifest.json +2 -2
  11. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  12. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  13. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  21. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  25. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/index.html +1 -1
  29. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
  36. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  37. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  38. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  39. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  40. package/package.json +1 -1
  41. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +44 -0
  42. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  43. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +27 -1
  44. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  45. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +12 -0
  46. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  47. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +51 -0
  48. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  49. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  50. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +57 -1
  51. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  52. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +51 -0
  53. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +45 -1
  54. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +55 -0
  55. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +72 -1
  56. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  57. package/src/resources/extensions/gsd/auto-recovery.ts +131 -7
  58. package/src/resources/extensions/gsd/commands-extract-learnings.ts +17 -12
  59. package/src/resources/extensions/gsd/db-base-schema.ts +15 -0
  60. package/src/resources/extensions/gsd/db-migration-steps.ts +17 -0
  61. package/src/resources/extensions/gsd/gsd-db.ts +119 -1
  62. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +125 -1
  63. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
  64. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +2 -2
  65. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -0
  66. /package/dist/web/standalone/.next/static/{CaMwumvGbBPZrJicfsCzV → k-MDjzPMF62Rg1-FR437h}/_buildManifest.js +0 -0
  67. /package/dist/web/standalone/.next/static/{CaMwumvGbBPZrJicfsCzV → k-MDjzPMF62Rg1-FR437h}/_ssgManifest.js +0 -0
@@ -1,9 +1,14 @@
1
+ // GSD-2 Interactive Chat Controller
1
2
  import { Loader, Markdown, Spacer, Text } from "@gsd/pi-tui";
2
3
 
3
4
  import type { InteractiveModeEvent, InteractiveModeStateHost } from "../interactive-mode-state.js";
4
5
  import { theme } from "../theme/theme.js";
5
6
  import { AssistantMessageComponent } from "../components/assistant-message.js";
6
- import { ToolExecutionComponent } from "../components/tool-execution.js";
7
+ import {
8
+ ToolExecutionComponent,
9
+ ToolPhaseSummaryComponent,
10
+ type ToolExecutionPhase,
11
+ } from "../components/tool-execution.js";
7
12
  import { DynamicBorder } from "../components/dynamic-border.js";
8
13
  import { appKey } from "../components/keybinding-hints.js";
9
14
 
@@ -100,6 +105,71 @@ let pinnedBorder: DynamicBorder | undefined;
100
105
  // Reference to the pinned markdown component below the border
101
106
  let pinnedTextComponent: Markdown | undefined;
102
107
 
108
+ function mergeToolPhases(phases: ToolExecutionPhase[]): ToolExecutionPhase[] {
109
+ const merged: ToolExecutionPhase[] = [];
110
+ for (const phase of phases) {
111
+ const previous = merged[merged.length - 1];
112
+ if (previous?.label === phase.label) {
113
+ previous.count += phase.count;
114
+ previous.durationMs += phase.durationMs;
115
+ } else {
116
+ merged.push({ ...phase });
117
+ }
118
+ }
119
+ return merged;
120
+ }
121
+
122
+ function replaceCompactToolRowsWithPhaseSummary(
123
+ host: InteractiveModeStateHost & { ui: { requestRender: () => void } },
124
+ ): void {
125
+ let changed = false;
126
+ const nextRenderedSegments: RenderedSegment[] = [];
127
+ let rollupRun: Array<{ seg: Extract<RenderedSegment, { kind: "tool" }>; phase: ToolExecutionPhase }> = [];
128
+
129
+ const flushRollupRun = () => {
130
+ if (rollupRun.length < 2) {
131
+ nextRenderedSegments.push(...rollupRun.map((item) => item.seg));
132
+ rollupRun = [];
133
+ return;
134
+ }
135
+
136
+ const firstIndex = Math.max(0, host.chatContainer.children.indexOf(rollupRun[0].seg.component));
137
+ const summary = new ToolPhaseSummaryComponent(mergeToolPhases(rollupRun.map((item) => item.phase)));
138
+
139
+ for (const { seg } of rollupRun) {
140
+ host.chatContainer.removeChild(seg.component);
141
+ }
142
+
143
+ host.chatContainer.addChild(summary);
144
+ const summaryIndex = host.chatContainer.children.indexOf(summary);
145
+ if (summaryIndex !== -1 && summaryIndex !== firstIndex) {
146
+ host.chatContainer.children.splice(summaryIndex, 1);
147
+ host.chatContainer.children.splice(firstIndex, 0, summary);
148
+ (host.chatContainer as unknown as { _prevRender: string[] | null })._prevRender = null;
149
+ }
150
+
151
+ changed = true;
152
+ rollupRun = [];
153
+ };
154
+
155
+ for (const seg of renderedSegments) {
156
+ const phase = seg.kind === "tool" ? seg.component.getRollupPhase() : null;
157
+ if (seg.kind === "tool" && phase) {
158
+ rollupRun.push({ seg, phase });
159
+ continue;
160
+ }
161
+
162
+ flushRollupRun();
163
+ nextRenderedSegments.push(seg);
164
+ }
165
+ flushRollupRun();
166
+
167
+ if (changed) {
168
+ renderedSegments = nextRenderedSegments;
169
+ host.ui.requestRender();
170
+ }
171
+ }
172
+
103
173
  export async function handleAgentEvent(host: InteractiveModeStateHost & {
104
174
  init: () => Promise<void>;
105
175
  getMarkdownThemeWithSettings: () => any;
@@ -773,6 +843,7 @@ export async function handleAgentEvent(host: InteractiveModeStateHost & {
773
843
  host.streamingComponent.setShowMetadata(true);
774
844
  host.streamingComponent.updateContent(host.streamingMessage);
775
845
  }
846
+ replaceCompactToolRowsWithPhaseSummary(host);
776
847
 
777
848
  if (host.streamingMessage.stopReason === "aborted" || host.streamingMessage.stopReason === "error") {
778
849
  if (!errorMessage) {