@kenkaiiii/ggcoder 4.15.0 → 5.0.0

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 (183) hide show
  1. package/dist/cli/command-routing.d.ts +1 -1
  2. package/dist/cli/command-routing.d.ts.map +1 -1
  3. package/dist/cli/command-routing.js +1 -3
  4. package/dist/cli/command-routing.js.map +1 -1
  5. package/dist/cli/command-routing.test.js +0 -1
  6. package/dist/cli/command-routing.test.js.map +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +1 -29
  9. package/dist/cli.js.map +1 -1
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +6 -3
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/ideal-review.d.ts +12 -1
  14. package/dist/core/ideal-review.d.ts.map +1 -1
  15. package/dist/core/ideal-review.js +52 -2
  16. package/dist/core/ideal-review.js.map +1 -1
  17. package/dist/core/ideal-review.test.js +41 -1
  18. package/dist/core/ideal-review.test.js.map +1 -1
  19. package/dist/ui/App.d.ts +3 -7
  20. package/dist/ui/App.d.ts.map +1 -1
  21. package/dist/ui/App.js +17 -105
  22. package/dist/ui/App.js.map +1 -1
  23. package/dist/ui/components/ActivityIndicator.d.ts +1 -1
  24. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
  25. package/dist/ui/components/AnimationContext.d.ts +1 -1
  26. package/dist/ui/components/AnimationContext.d.ts.map +1 -1
  27. package/dist/ui/components/AssistantMessage.d.ts +1 -1
  28. package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
  29. package/dist/ui/components/BackgroundTasksBar.d.ts +1 -2
  30. package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -1
  31. package/dist/ui/components/Banner.d.ts +1 -2
  32. package/dist/ui/components/Banner.d.ts.map +1 -1
  33. package/dist/ui/components/ChatFooterPane.d.ts +1 -2
  34. package/dist/ui/components/ChatFooterPane.d.ts.map +1 -1
  35. package/dist/ui/components/ChatInputStack.d.ts +1 -1
  36. package/dist/ui/components/ChatInputStack.d.ts.map +1 -1
  37. package/dist/ui/components/ChatLayout.d.ts +4 -4
  38. package/dist/ui/components/ChatLayout.d.ts.map +1 -1
  39. package/dist/ui/components/ChatLivePane.d.ts +1 -1
  40. package/dist/ui/components/ChatLivePane.d.ts.map +1 -1
  41. package/dist/ui/components/ChatScreen.d.ts +1 -2
  42. package/dist/ui/components/ChatScreen.d.ts.map +1 -1
  43. package/dist/ui/components/ChatScreen.js +1 -1
  44. package/dist/ui/components/ChatScreen.js.map +1 -1
  45. package/dist/ui/components/ChatStatusRow.d.ts +1 -1
  46. package/dist/ui/components/ChatStatusRow.d.ts.map +1 -1
  47. package/dist/ui/components/CompactionNotice.d.ts +2 -3
  48. package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
  49. package/dist/ui/components/DiffFrame.d.ts +1 -1
  50. package/dist/ui/components/DiffFrame.d.ts.map +1 -1
  51. package/dist/ui/components/DiffView.d.ts +1 -2
  52. package/dist/ui/components/DiffView.d.ts.map +1 -1
  53. package/dist/ui/components/Footer.d.ts +1 -2
  54. package/dist/ui/components/Footer.d.ts.map +1 -1
  55. package/dist/ui/components/FooterStatusRow.d.ts +1 -2
  56. package/dist/ui/components/FooterStatusRow.d.ts.map +1 -1
  57. package/dist/ui/components/FullScreenOverlayRouter.d.ts +2 -9
  58. package/dist/ui/components/FullScreenOverlayRouter.d.ts.map +1 -1
  59. package/dist/ui/components/FullScreenOverlayRouter.js +1 -5
  60. package/dist/ui/components/FullScreenOverlayRouter.js.map +1 -1
  61. package/dist/ui/components/IdealHookMessage.d.ts +1 -1
  62. package/dist/ui/components/IdealHookMessage.d.ts.map +1 -1
  63. package/dist/ui/components/InputArea.d.ts +1 -2
  64. package/dist/ui/components/InputArea.d.ts.map +1 -1
  65. package/dist/ui/components/InputArea.js +1 -6
  66. package/dist/ui/components/InputArea.js.map +1 -1
  67. package/dist/ui/components/LiveToolPanel.d.ts +1 -2
  68. package/dist/ui/components/LiveToolPanel.d.ts.map +1 -1
  69. package/dist/ui/components/Markdown.d.ts +2 -2
  70. package/dist/ui/components/Markdown.d.ts.map +1 -1
  71. package/dist/ui/components/ModelSelector.d.ts +1 -2
  72. package/dist/ui/components/ModelSelector.d.ts.map +1 -1
  73. package/dist/ui/components/Overlay.d.ts +1 -1
  74. package/dist/ui/components/Overlay.d.ts.map +1 -1
  75. package/dist/ui/components/PlanApproval.d.ts +1 -2
  76. package/dist/ui/components/PlanApproval.d.ts.map +1 -1
  77. package/dist/ui/components/PlanBanner.d.ts +1 -2
  78. package/dist/ui/components/PlanBanner.d.ts.map +1 -1
  79. package/dist/ui/components/PlanModeLogo.d.ts +1 -2
  80. package/dist/ui/components/PlanModeLogo.d.ts.map +1 -1
  81. package/dist/ui/components/PlanOverlay.d.ts +2 -3
  82. package/dist/ui/components/PlanOverlay.d.ts.map +1 -1
  83. package/dist/ui/components/PlanProgress.d.ts +1 -2
  84. package/dist/ui/components/PlanProgress.d.ts.map +1 -1
  85. package/dist/ui/components/QueueIndicator.d.ts +1 -2
  86. package/dist/ui/components/QueueIndicator.d.ts.map +1 -1
  87. package/dist/ui/components/RewindOverlay.d.ts +1 -2
  88. package/dist/ui/components/RewindOverlay.d.ts.map +1 -1
  89. package/dist/ui/components/SelectList.d.ts +1 -2
  90. package/dist/ui/components/SelectList.d.ts.map +1 -1
  91. package/dist/ui/components/ServerToolExecution.d.ts +1 -2
  92. package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
  93. package/dist/ui/components/SessionSelector.d.ts +1 -2
  94. package/dist/ui/components/SessionSelector.d.ts.map +1 -1
  95. package/dist/ui/components/SessionSummary.d.ts +1 -2
  96. package/dist/ui/components/SessionSummary.d.ts.map +1 -1
  97. package/dist/ui/components/SettingsSelector.d.ts +1 -2
  98. package/dist/ui/components/SettingsSelector.d.ts.map +1 -1
  99. package/dist/ui/components/SkillsOverlay.d.ts +1 -2
  100. package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
  101. package/dist/ui/components/SlashCommandMenu.d.ts +1 -2
  102. package/dist/ui/components/SlashCommandMenu.d.ts.map +1 -1
  103. package/dist/ui/components/SlashStyledSelectList.d.ts +1 -2
  104. package/dist/ui/components/SlashStyledSelectList.d.ts.map +1 -1
  105. package/dist/ui/components/Spinner.d.ts +1 -2
  106. package/dist/ui/components/Spinner.d.ts.map +1 -1
  107. package/dist/ui/components/StreamingArea.d.ts +1 -1
  108. package/dist/ui/components/StreamingArea.d.ts.map +1 -1
  109. package/dist/ui/components/SubAgentPanel.d.ts +1 -2
  110. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
  111. package/dist/ui/components/TaskPickerMenu.d.ts +1 -2
  112. package/dist/ui/components/TaskPickerMenu.d.ts.map +1 -1
  113. package/dist/ui/components/ThemeSelector.d.ts +1 -2
  114. package/dist/ui/components/ThemeSelector.d.ts.map +1 -1
  115. package/dist/ui/components/ThinkingBlock.d.ts +1 -1
  116. package/dist/ui/components/ThinkingBlock.d.ts.map +1 -1
  117. package/dist/ui/components/ToolExecution.d.ts +1 -2
  118. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  119. package/dist/ui/components/ToolGroupExecution.d.ts +1 -2
  120. package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
  121. package/dist/ui/components/TranscriptViewport.d.ts +1 -1
  122. package/dist/ui/components/TranscriptViewport.d.ts.map +1 -1
  123. package/dist/ui/components/UserMessage.d.ts +1 -2
  124. package/dist/ui/components/UserMessage.d.ts.map +1 -1
  125. package/dist/ui/hooks/useAgentLoop.d.ts +1 -1
  126. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  127. package/dist/ui/hooks/useAgentLoop.js +1 -3
  128. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  129. package/dist/ui/layout-decisions.d.ts +1 -1
  130. package/dist/ui/layout-decisions.d.ts.map +1 -1
  131. package/dist/ui/render.d.ts +4 -12
  132. package/dist/ui/render.d.ts.map +1 -1
  133. package/dist/ui/render.js +1 -3
  134. package/dist/ui/render.js.map +1 -1
  135. package/dist/ui/transcript/MiscRows.d.ts +7 -8
  136. package/dist/ui/transcript/MiscRows.d.ts.map +1 -1
  137. package/dist/ui/transcript/StatusRow.d.ts +1 -1
  138. package/dist/ui/transcript/StatusRow.d.ts.map +1 -1
  139. package/dist/ui/transcript/ToolRows.d.ts +6 -7
  140. package/dist/ui/transcript/ToolRows.d.ts.map +1 -1
  141. package/dist/ui/transcript/TranscriptItemFrame.d.ts +1 -1
  142. package/dist/ui/transcript/TranscriptItemFrame.d.ts.map +1 -1
  143. package/package.json +4 -5
  144. package/dist/cli/pixel.d.ts +0 -27
  145. package/dist/cli/pixel.d.ts.map +0 -1
  146. package/dist/cli/pixel.js +0 -103
  147. package/dist/cli/pixel.js.map +0 -1
  148. package/dist/core/pixel-fix-agent.d.ts +0 -24
  149. package/dist/core/pixel-fix-agent.d.ts.map +0 -1
  150. package/dist/core/pixel-fix-agent.js +0 -49
  151. package/dist/core/pixel-fix-agent.js.map +0 -1
  152. package/dist/core/pixel-fix.d.ts +0 -70
  153. package/dist/core/pixel-fix.d.ts.map +0 -1
  154. package/dist/core/pixel-fix.js +0 -338
  155. package/dist/core/pixel-fix.js.map +0 -1
  156. package/dist/core/pixel-fix.test.d.ts +0 -2
  157. package/dist/core/pixel-fix.test.d.ts.map +0 -1
  158. package/dist/core/pixel-fix.test.js +0 -310
  159. package/dist/core/pixel-fix.test.js.map +0 -1
  160. package/dist/core/pixel.d.ts +0 -37
  161. package/dist/core/pixel.d.ts.map +0 -1
  162. package/dist/core/pixel.js +0 -378
  163. package/dist/core/pixel.js.map +0 -1
  164. package/dist/core/pixel.test.d.ts +0 -2
  165. package/dist/core/pixel.test.d.ts.map +0 -1
  166. package/dist/core/pixel.test.js +0 -269
  167. package/dist/core/pixel.test.js.map +0 -1
  168. package/dist/ui/components/PixelOverlay.d.ts +0 -12
  169. package/dist/ui/components/PixelOverlay.d.ts.map +0 -1
  170. package/dist/ui/components/PixelOverlay.js +0 -117
  171. package/dist/ui/components/PixelOverlay.js.map +0 -1
  172. package/dist/ui/hooks/usePixelFixFlow.d.ts +0 -57
  173. package/dist/ui/hooks/usePixelFixFlow.d.ts.map +0 -1
  174. package/dist/ui/hooks/usePixelFixFlow.js +0 -102
  175. package/dist/ui/hooks/usePixelFixFlow.js.map +0 -1
  176. package/dist/ui/pixel.d.ts +0 -23
  177. package/dist/ui/pixel.d.ts.map +0 -1
  178. package/dist/ui/pixel.js +0 -393
  179. package/dist/ui/pixel.js.map +0 -1
  180. package/dist/ui/pixel.test.d.ts +0 -2
  181. package/dist/ui/pixel.test.d.ts.map +0 -1
  182. package/dist/ui/pixel.test.js +0 -138
  183. package/dist/ui/pixel.test.js.map +0 -1
@@ -1,269 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdtempSync, rmSync, writeFileSync, mkdirSync } from "node:fs";
3
- import { tmpdir } from "node:os";
4
- import { join } from "node:path";
5
- import { listAllErrors, fetchPixelEntries } from "./pixel.js";
6
- let home;
7
- const logSpy = vi.spyOn(console, "log").mockImplementation(() => { });
8
- const errorSpy = vi.spyOn(console, "error").mockImplementation(() => { });
9
- beforeEach(() => {
10
- home = mkdtempSync(join(tmpdir(), "ggcoder-pixel-"));
11
- logSpy.mockClear();
12
- errorSpy.mockClear();
13
- });
14
- afterEach(() => rmSync(home, { recursive: true, force: true }));
15
- function output() {
16
- return logSpy.mock.calls.map((c) => c.join(" ")).join("\n");
17
- }
18
- function fakeFetch(perProject) {
19
- return (async (input, init) => {
20
- const url = String(input);
21
- const match = /\/api\/projects\/([^/]+)\/errors/.exec(url);
22
- const id = match?.[1] ?? "";
23
- // The new server requires Authorization. The fake mirrors that contract
24
- // so tests verify the client actually sends it.
25
- const headers = new Headers(init?.headers ?? {});
26
- if (!headers.get("authorization")?.startsWith("Bearer ")) {
27
- return new Response("missing auth", { status: 401 });
28
- }
29
- const errors = perProject[id] ?? [];
30
- return new Response(JSON.stringify({ errors }), {
31
- status: 200,
32
- headers: { "content-type": "application/json" },
33
- });
34
- });
35
- }
36
- // Builds a projects.json mapping with `secret` populated — what `pixel install`
37
- // produces in the new world. Tests that want to exercise the legacy
38
- // no-secret path can construct mappings without it explicitly.
39
- function project(name, path) {
40
- return { name, path, secret: `sk_live_${name}_test` };
41
- }
42
- describe("listAllErrors", () => {
43
- it("prints a friendly message when there are no projects", async () => {
44
- await listAllErrors({ homeDir: home, fetchFn: fakeFetch({}) });
45
- expect(output()).toContain("No projects registered");
46
- });
47
- it("prints a friendly message when projects.json is empty", async () => {
48
- mkdirSync(join(home, ".gg"), { recursive: true });
49
- writeFileSync(join(home, ".gg", "projects.json"), "{}");
50
- await listAllErrors({ homeDir: home, fetchFn: fakeFetch({}) });
51
- expect(output()).toContain("No projects registered");
52
- });
53
- it("renders a clean state when a project has zero errors", async () => {
54
- mkdirSync(join(home, ".gg"), { recursive: true });
55
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({ proj_a: project("alpha", "/p/alpha") }));
56
- await listAllErrors({ homeDir: home, fetchFn: fakeFetch({ proj_a: [] }) });
57
- const out = output();
58
- expect(out).toContain("alpha");
59
- expect(out).toContain("no open errors");
60
- expect(out).toContain("All clean");
61
- });
62
- it("groups errors per project and aggregates a summary", async () => {
63
- mkdirSync(join(home, ".gg"), { recursive: true });
64
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({
65
- proj_a: project("alpha", "/p/alpha"),
66
- proj_b: project("beta", "/p/beta"),
67
- }));
68
- const aErrors = [
69
- {
70
- id: "err_1",
71
- fingerprint: "fp1",
72
- status: "open",
73
- type: "TypeError",
74
- message: "Cannot read foo",
75
- stack: JSON.stringify([{ file: "/p/alpha/src/x.ts", line: 12, in_app: true }]),
76
- occurrences: 5,
77
- recurrence_count: 0,
78
- last_seen_at: Date.now(),
79
- branch: null,
80
- },
81
- {
82
- id: "err_2",
83
- fingerprint: "fp2",
84
- status: "awaiting_review",
85
- type: "RangeError",
86
- message: "Bad index",
87
- stack: JSON.stringify([{ file: "/p/alpha/src/y.ts", line: 7, in_app: true }]),
88
- occurrences: 1,
89
- recurrence_count: 0,
90
- last_seen_at: Date.now(),
91
- branch: "fix/pixel-err_2",
92
- },
93
- ];
94
- const bErrors = [
95
- {
96
- id: "err_3",
97
- fingerprint: "fp3",
98
- status: "merged",
99
- type: "Error",
100
- message: "old, should be hidden",
101
- stack: null,
102
- occurrences: 1,
103
- recurrence_count: 0,
104
- last_seen_at: Date.now(),
105
- branch: null,
106
- },
107
- ];
108
- await listAllErrors({
109
- homeDir: home,
110
- fetchFn: fakeFetch({ proj_a: aErrors, proj_b: bErrors }),
111
- });
112
- const out = output();
113
- expect(out).toContain("alpha");
114
- expect(out).toContain("TypeError");
115
- expect(out).toContain("Cannot read foo");
116
- expect(out).toContain("/p/alpha/src/x.ts:12");
117
- expect(out).toContain("RangeError");
118
- expect(out).toContain("fix/pixel-err_2");
119
- expect(out).toContain("beta");
120
- expect(out).toContain("no open errors");
121
- expect(out).not.toContain("old, should be hidden");
122
- expect(out).toContain("1 open");
123
- expect(out).toContain("1 awaiting review");
124
- });
125
- it("prints a per-project error when fetch fails for that project", async () => {
126
- mkdirSync(join(home, ".gg"), { recursive: true });
127
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({ proj_a: project("alpha", "/p/alpha") }));
128
- const failingFetch = (async () => new Response("oops", { status: 500 }));
129
- await listAllErrors({ homeDir: home, fetchFn: failingFetch });
130
- expect(output()).toContain("alpha: failed to fetch (500)");
131
- });
132
- it("fetchPixelEntries returns structured data with hasProjects=false when no map exists", async () => {
133
- const result = await fetchPixelEntries({ homeDir: home, fetchFn: fakeFetch({}) });
134
- expect(result).toEqual({ entries: [], unreachable: [], unmanaged: [], hasProjects: false });
135
- });
136
- it("fetchPixelEntries flattens errors from all projects, grouped and sorted", async () => {
137
- mkdirSync(join(home, ".gg"), { recursive: true });
138
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({
139
- proj_a: project("alpha", "/p/a"),
140
- proj_b: project("beta", "/p/b"),
141
- }));
142
- const aErrors = [
143
- {
144
- id: "err_1",
145
- fingerprint: "fp1",
146
- status: "open",
147
- type: "TypeError",
148
- message: "x",
149
- stack: JSON.stringify([{ file: "/p/a/x.ts", line: 1, in_app: true }]),
150
- occurrences: 5,
151
- recurrence_count: 0,
152
- last_seen_at: 0,
153
- branch: null,
154
- },
155
- {
156
- id: "err_merged",
157
- fingerprint: "fp_merged",
158
- status: "merged",
159
- type: "Error",
160
- message: "old",
161
- stack: null,
162
- occurrences: 1,
163
- recurrence_count: 0,
164
- last_seen_at: 0,
165
- branch: null,
166
- },
167
- ];
168
- const bErrors = [
169
- {
170
- id: "err_2",
171
- fingerprint: "fp2",
172
- status: "failed",
173
- type: "RangeError",
174
- message: "y",
175
- stack: JSON.stringify([{ file: "/p/b/y.ts", line: 2, in_app: true }]),
176
- occurrences: 1,
177
- recurrence_count: 0,
178
- last_seen_at: 0,
179
- branch: null,
180
- },
181
- ];
182
- const result = await fetchPixelEntries({
183
- homeDir: home,
184
- fetchFn: fakeFetch({ proj_a: aErrors, proj_b: bErrors }),
185
- });
186
- expect(result.hasProjects).toBe(true);
187
- expect(result.entries).toHaveLength(2); // merged is filtered out
188
- expect(result.entries.map((e) => e.projectName)).toEqual(["alpha", "beta"]);
189
- expect(result.entries[0]?.location).toBe("x.ts:1");
190
- });
191
- it("fetchPixelEntries records unreachable projects on fetch failure", async () => {
192
- mkdirSync(join(home, ".gg"), { recursive: true });
193
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({ proj_a: project("alpha", "/p/a") }));
194
- const failingFetch = (async () => new Response("oops", { status: 500 }));
195
- const result = await fetchPixelEntries({ homeDir: home, fetchFn: failingFetch });
196
- expect(result.entries).toHaveLength(0);
197
- expect(result.unreachable).toEqual(["alpha"]);
198
- expect(result.hasProjects).toBe(true);
199
- });
200
- it("prefers the topmost in_app frame for the location line", async () => {
201
- mkdirSync(join(home, ".gg"), { recursive: true });
202
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({ proj_a: project("alpha", "/p") }));
203
- const errors = [
204
- {
205
- id: "err_1",
206
- fingerprint: "fp",
207
- status: "open",
208
- type: "Error",
209
- message: "x",
210
- stack: JSON.stringify([
211
- { file: "/p/node_modules/lib/index.js", line: 999, in_app: false },
212
- { file: "/p/src/me.ts", line: 11, in_app: true },
213
- ]),
214
- occurrences: 1,
215
- recurrence_count: 0,
216
- last_seen_at: Date.now(),
217
- branch: null,
218
- },
219
- ];
220
- await listAllErrors({ homeDir: home, fetchFn: fakeFetch({ proj_a: errors }) });
221
- const out = output();
222
- expect(out).toContain("/p/src/me.ts:11");
223
- expect(out).not.toContain(":999");
224
- });
225
- it("sends Authorization: Bearer <secret> on every list request", async () => {
226
- mkdirSync(join(home, ".gg"), { recursive: true });
227
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({
228
- proj_a: { name: "alpha", path: "/p/a", secret: "sk_live_secret_a" },
229
- }));
230
- const seen = [];
231
- const recorder = (async (input, init) => {
232
- seen.push({
233
- url: String(input),
234
- auth: new Headers(init?.headers ?? {}).get("authorization"),
235
- });
236
- return new Response(JSON.stringify({ errors: [] }), { status: 200 });
237
- });
238
- const result = await fetchPixelEntries({ homeDir: home, fetchFn: recorder });
239
- expect(result.unreachable).toEqual([]);
240
- expect(seen).toHaveLength(1);
241
- expect(seen[0]?.auth).toBe("Bearer sk_live_secret_a");
242
- });
243
- it("flags projects without a stored secret as unmanaged and skips them", async () => {
244
- mkdirSync(join(home, ".gg"), { recursive: true });
245
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({
246
- proj_legacy: { name: "legacy-app", path: "/p/legacy" }, // no secret
247
- proj_new: project("new-app", "/p/new"),
248
- }));
249
- const result = await fetchPixelEntries({
250
- homeDir: home,
251
- fetchFn: fakeFetch({ proj_new: [] }),
252
- });
253
- expect(result.unmanaged).toEqual(["legacy-app"]);
254
- expect(result.hasProjects).toBe(true);
255
- expect(result.entries).toEqual([]);
256
- });
257
- it("listAllErrors prints a re-install hint for projects with no secret", async () => {
258
- mkdirSync(join(home, ".gg"), { recursive: true });
259
- writeFileSync(join(home, ".gg", "projects.json"), JSON.stringify({
260
- proj_legacy: { name: "legacy-app", path: "/p/legacy" },
261
- }));
262
- await listAllErrors({ homeDir: home, fetchFn: fakeFetch({}) });
263
- const out = output();
264
- expect(out).toContain("legacy-app");
265
- expect(out).toContain("missing bearer secret");
266
- expect(out).toContain("ggcoder pixel install");
267
- });
268
- });
269
- //# sourceMappingURL=pixel.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pixel.test.js","sourceRoot":"","sources":["../../src/core/pixel.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import React from "react";
2
- import { type PixelEntry } from "../../core/pixel.js";
3
- interface Props {
4
- onClose: () => void;
5
- onFixOne: (entry: PixelEntry) => void;
6
- onFixAll: (entries: PixelEntry[]) => void;
7
- agentRunning?: boolean;
8
- version?: string;
9
- }
10
- export declare function PixelOverlay({ onClose, onFixOne, onFixAll, agentRunning, version }: Props): React.JSX.Element;
11
- export {};
12
- //# sourceMappingURL=PixelOverlay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PixelOverlay.d.ts","sourceRoot":"","sources":["../../../src/ui/components/PixelOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAqB,KAAK,UAAU,EAAyB,MAAM,qBAAqB,CAAC;AAGhG,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,KAAK,qBAmHzF"}
@@ -1,117 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useState, useEffect, useRef } from "react";
3
- import { Box, Text, useInput, useStdout } from "ink";
4
- import { DEFAULT_INGEST_URL } from "@kenkaiiii/gg-pixel";
5
- import { fetchPixelEntries } from "../../core/pixel.js";
6
- import { renderScreen } from "../pixel.js";
7
- export function PixelOverlay({ onClose, onFixOne, onFixAll, agentRunning, version }) {
8
- const { stdout } = useStdout();
9
- const [data, setData] = useState({
10
- entries: [],
11
- unreachable: [],
12
- unmanaged: [],
13
- hasProjects: false,
14
- });
15
- const [selectedIndex, setSelectedIndex] = useState(0);
16
- const [status, setStatus] = useState("");
17
- const statusTimer = useRef(null);
18
- const showStatus = (msg) => {
19
- setStatus(msg);
20
- if (statusTimer.current)
21
- clearTimeout(statusTimer.current);
22
- statusTimer.current = setTimeout(() => setStatus(""), 2500);
23
- };
24
- // Fetch on mount + every 2s so the pane reflects new errors / fix results.
25
- useEffect(() => {
26
- let cancelled = false;
27
- const load = () => {
28
- void fetchPixelEntries().then((d) => {
29
- if (cancelled)
30
- return;
31
- setData((prev) => {
32
- // Avoid clobbering pending optimistic deletes
33
- const prevJson = JSON.stringify(prev);
34
- const nextJson = JSON.stringify(d);
35
- return prevJson === nextJson ? prev : d;
36
- });
37
- });
38
- };
39
- load();
40
- const t = setInterval(load, 2000);
41
- return () => {
42
- cancelled = true;
43
- clearInterval(t);
44
- };
45
- }, []);
46
- // Clamp the selected index when entries change.
47
- useEffect(() => {
48
- if (data.entries.length === 0) {
49
- setSelectedIndex(0);
50
- }
51
- else if (selectedIndex >= data.entries.length) {
52
- setSelectedIndex(data.entries.length - 1);
53
- }
54
- }, [data.entries.length, selectedIndex]);
55
- useInput((input, key) => {
56
- if (key.escape) {
57
- onClose();
58
- return;
59
- }
60
- if (key.upArrow) {
61
- setSelectedIndex((i) => Math.max(0, i - 1));
62
- return;
63
- }
64
- if (key.downArrow) {
65
- setSelectedIndex((i) => Math.min(data.entries.length - 1, i + 1));
66
- return;
67
- }
68
- if (key.return) {
69
- if (data.entries.length === 0)
70
- return;
71
- if (agentRunning) {
72
- showStatus("Agent is busy — wait for it to finish");
73
- return;
74
- }
75
- const e = data.entries[selectedIndex];
76
- if (e)
77
- onFixOne(e);
78
- return;
79
- }
80
- if (input === "f" || input === "r") {
81
- if (data.entries.length === 0)
82
- return;
83
- if (agentRunning) {
84
- showStatus("Agent is busy — wait for it to finish");
85
- return;
86
- }
87
- onFixAll(data.entries);
88
- return;
89
- }
90
- if (input === "d" || (key.backspace ?? false) || (key.delete ?? false)) {
91
- if (data.entries.length === 0)
92
- return;
93
- const e = data.entries[selectedIndex];
94
- if (!e)
95
- return;
96
- // Optimistic local removal; fire-and-forget DELETE.
97
- setData((prev) => ({
98
- ...prev,
99
- entries: prev.entries.filter((x) => x.errorId !== e.errorId),
100
- }));
101
- void fetch(`${DEFAULT_INGEST_URL.replace(/\/+$/, "")}/api/errors/${e.errorId}`, {
102
- method: "DELETE",
103
- }).catch(() => {
104
- // Backend may be unreachable; the entry will reappear on next fetch.
105
- });
106
- return;
107
- }
108
- });
109
- // Clear screen each render so the frame stays anchored at the top.
110
- useEffect(() => {
111
- stdout?.write("\x1b[2J\x1b[3J\x1b[H");
112
- }, [stdout]);
113
- const screen = renderScreen(data, selectedIndex, { version });
114
- const lines = screen.split("\n");
115
- return (_jsxs(Box, { flexDirection: "column", children: [lines.map((l, i) => (_jsx(Text, { children: l === "" ? " " : l }, i))), status && _jsxs(Text, { color: "#fbbf24", children: [" ", status] })] }));
116
- }
117
- //# sourceMappingURL=PixelOverlay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PixelOverlay.js","sourceRoot":"","sources":["../../../src/ui/components/PixelOverlay.tsx"],"names":[],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- import { type Dispatch, type MutableRefObject, type SetStateAction } from "react";
2
- import type { Message, Provider } from "@kenkaiiii/gg-ai";
3
- import type { AgentTool } from "@kenkaiiii/gg-agent";
4
- import { type LanguageId } from "../../core/language-detector.js";
5
- import type { PreparedPixelFix } from "../../core/pixel-fix.js";
6
- import type { SessionManager } from "../../core/session-manager.js";
7
- import type { UseAgentLoopReturn } from "./useAgentLoop.js";
8
- import type { RebuildSystemPromptOptions } from "./useModeState.js";
9
- import type { CompletedItem } from "../app-items.js";
10
- import type { DoneStatus } from "../layout-decisions.js";
11
- /** Minimal session-store surface the pixel run-all flag mirrors into. */
12
- interface PixelSessionStore {
13
- runAllPixel?: boolean;
14
- }
15
- interface UsePixelFixFlowOptions {
16
- agentLoop: UseAgentLoopReturn;
17
- cwd: string;
18
- currentProvider: Provider;
19
- currentModel: string;
20
- rebuildToolsForCwd?: (cwd: string) => Promise<AgentTool[]>;
21
- sessionStore?: PixelSessionStore;
22
- currentPixelFixRef: MutableRefObject<PreparedPixelFix | null>;
23
- runAllPixelRef: MutableRefObject<boolean>;
24
- startPixelFixRef: MutableRefObject<(errorId: string) => void>;
25
- cwdRef: MutableRefObject<string>;
26
- currentToolsRef: MutableRefObject<AgentTool[]>;
27
- injectedLanguagesRef: MutableRefObject<Set<LanguageId>>;
28
- setupHintShownRef: MutableRefObject<boolean>;
29
- messagesRef: MutableRefObject<Message[]>;
30
- persistedIndexRef: MutableRefObject<number>;
31
- sessionManagerRef: MutableRefObject<SessionManager | null>;
32
- sessionPathRef: MutableRefObject<string | undefined>;
33
- setDisplayedCwd: Dispatch<SetStateAction<string>>;
34
- setCurrentTools: Dispatch<SetStateAction<AgentTool[]>>;
35
- setHistory: Dispatch<SetStateAction<CompletedItem[]>>;
36
- setLiveItems: Dispatch<SetStateAction<CompletedItem[]>>;
37
- setLastUserMessage: Dispatch<SetStateAction<string>>;
38
- setDoneStatus: Dispatch<SetStateAction<DoneStatus | null>>;
39
- rebuildSystemPrompt: (options?: RebuildSystemPromptOptions) => Promise<string>;
40
- clearPendingHistory: () => void;
41
- getId: () => string;
42
- initialRunAllPixel: boolean;
43
- }
44
- export interface PixelFixFlow {
45
- startPixelFix: (errorId: string) => void;
46
- runAllPixel: boolean;
47
- setRunAllPixel: Dispatch<SetStateAction<boolean>>;
48
- }
49
- /**
50
- * Owns the in-Ink pixel-fix flow: swapping cwd/tools/system-prompt/banner in
51
- * lockstep, resetting chat state, kicking off the agent run, and the "fix all"
52
- * run-all flag. Extracted verbatim from `App.tsx`; see CLAUDE.md for the
53
- * four-things-in-lockstep contract.
54
- */
55
- export declare function usePixelFixFlow({ agentLoop, cwd, currentProvider, currentModel, rebuildToolsForCwd, sessionStore, currentPixelFixRef, runAllPixelRef, startPixelFixRef, cwdRef, currentToolsRef, injectedLanguagesRef, setupHintShownRef, messagesRef, persistedIndexRef, sessionManagerRef, sessionPathRef, setDisplayedCwd, setCurrentTools, setHistory, setLiveItems, setLastUserMessage, setDoneStatus, rebuildSystemPrompt, clearPendingHistory, getId, initialRunAllPixel, }: UsePixelFixFlowOptions): PixelFixFlow;
56
- export {};
57
- //# sourceMappingURL=usePixelFixFlow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePixelFixFlow.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/usePixelFixFlow.ts"],"names":[],"mappings":"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"}
@@ -1,102 +0,0 @@
1
- import { useCallback, useEffect, useState, } from "react";
2
- import { log } from "../../core/logger.js";
3
- import { detectLanguages } from "../../core/language-detector.js";
4
- import { toErrorItem } from "../error-item.js";
5
- /**
6
- * Owns the in-Ink pixel-fix flow: swapping cwd/tools/system-prompt/banner in
7
- * lockstep, resetting chat state, kicking off the agent run, and the "fix all"
8
- * run-all flag. Extracted verbatim from `App.tsx`; see CLAUDE.md for the
9
- * four-things-in-lockstep contract.
10
- */
11
- export function usePixelFixFlow({ agentLoop, cwd, currentProvider, currentModel, rebuildToolsForCwd, sessionStore, currentPixelFixRef, runAllPixelRef, startPixelFixRef, cwdRef, currentToolsRef, injectedLanguagesRef, setupHintShownRef, messagesRef, persistedIndexRef, sessionManagerRef, sessionPathRef, setDisplayedCwd, setCurrentTools, setHistory, setLiveItems, setLastUserMessage, setDoneStatus, rebuildSystemPrompt, clearPendingHistory, getId, initialRunAllPixel, }) {
12
- const [runAllPixel, setRunAllPixel] = useState(initialRunAllPixel);
13
- const startPixelFix = useCallback((errorId) => {
14
- void (async () => {
15
- try {
16
- const { preparePixelFix } = await import("../../core/pixel-fix.js");
17
- const prep = await preparePixelFix(errorId);
18
- currentPixelFixRef.current = prep;
19
- // Move the agent into the error's project root. Four things must
20
- // change in lockstep, otherwise the agent (or the chrome around
21
- // it) shows the wrong project:
22
- // 1. process.cwd — for any code reading it directly
23
- // 2. cwd-bound tools (read/write/bash/grep/…) — baked at creation
24
- // 3. the system prompt's "Working directory: …" line — the only
25
- // place the model itself learns where it is
26
- // 4. displayedCwd state — Banner + Footer read this for display
27
- try {
28
- process.chdir(prep.projectPath);
29
- }
30
- catch (err) {
31
- log("WARN", "pixel", `chdir failed: ${err.message}`);
32
- }
33
- cwdRef.current = prep.projectPath;
34
- setDisplayedCwd(prep.projectPath);
35
- let toolsForPixelFix = currentToolsRef.current;
36
- if (rebuildToolsForCwd) {
37
- toolsForPixelFix = await rebuildToolsForCwd(prep.projectPath);
38
- currentToolsRef.current = toolsForPixelFix;
39
- setCurrentTools(toolsForPixelFix);
40
- }
41
- // Pixel-fix swaps the project root — reset injected packs so the
42
- // new project re-detects from scratch on the next tool call. Also
43
- // reset the setup-hint flag so the new project's first badge re-
44
- // surfaces the tip (different project, may need the reminder).
45
- injectedLanguagesRef.current = new Set();
46
- setupHintShownRef.current = false;
47
- const detectedForPixelFix = detectLanguages(prep.projectPath);
48
- injectedLanguagesRef.current = detectedForPixelFix;
49
- const newSystemPrompt = await rebuildSystemPrompt({
50
- cwd: prep.projectPath,
51
- clearApprovedPlan: true,
52
- activeLanguages: detectedForPixelFix,
53
- tools: toolsForPixelFix,
54
- });
55
- // Now that the cwd swap is committed, reset chat. Do not clear the
56
- // terminal here; terminal clear sequences can erase saved scrollback.
57
- clearPendingHistory();
58
- setHistory([{ kind: "banner", id: "banner" }]);
59
- setLiveItems([]);
60
- messagesRef.current = messagesRef.current.slice(0, 1);
61
- agentLoop.reset();
62
- persistedIndexRef.current = messagesRef.current.length;
63
- const sm = sessionManagerRef.current;
64
- if (sm) {
65
- void sm.create(prep.projectPath, currentProvider, currentModel).then((s) => {
66
- sessionPathRef.current = s.path;
67
- log("INFO", "pixel", "New session for pixel fix", { path: s.path });
68
- });
69
- }
70
- if (messagesRef.current[0]?.role === "system") {
71
- messagesRef.current[0] = { role: "system", content: newSystemPrompt };
72
- }
73
- else {
74
- messagesRef.current.unshift({ role: "system", content: newSystemPrompt });
75
- }
76
- const title = `Fix ${errorId.slice(0, 12)}… in ${prep.projectName}`;
77
- const taskItem = { kind: "task", title, id: getId() };
78
- setLastUserMessage(title);
79
- setDoneStatus(null);
80
- setLiveItems([taskItem]);
81
- await agentLoop.run(prep.prompt);
82
- }
83
- catch (err) {
84
- const msg = err instanceof Error ? err.message : String(err);
85
- log("ERROR", "pixel", msg);
86
- currentPixelFixRef.current = null;
87
- setRunAllPixel(false);
88
- setLiveItems((prev) => [...prev, toErrorItem(err, getId())]);
89
- }
90
- })();
91
- }, [cwd, agentLoop, currentProvider, currentModel]);
92
- startPixelFixRef.current = startPixelFix;
93
- // Seed from sessionStore so "Fix All" chaining survives a deferred
94
- // resetUI() if it fires between pixel fixes (e.g. user toggled a pane).
95
- useEffect(() => {
96
- runAllPixelRef.current = runAllPixel;
97
- if (sessionStore)
98
- sessionStore.runAllPixel = runAllPixel;
99
- }, [runAllPixel, sessionStore, runAllPixelRef]);
100
- return { startPixelFix, runAllPixel, setRunAllPixel };
101
- }
102
- //# sourceMappingURL=usePixelFixFlow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePixelFixFlow.js","sourceRoot":"","sources":["../../../src/ui/hooks/usePixelFixFlow.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { type PixelFetchResult } from "../core/pixel.js";
2
- export type PixelSelection = {
3
- kind: "one";
4
- errorId: string;
5
- projectId: string;
6
- projectName: string;
7
- projectPath: string;
8
- } | {
9
- kind: "all";
10
- };
11
- interface RenderOptions {
12
- /** Override the home directory used to look up `~/.gg/projects.json`. */
13
- homeDir?: string;
14
- ingestUrl?: string;
15
- fetchFn?: typeof fetch;
16
- version?: string;
17
- }
18
- export declare function renderPixelSelector(opts?: RenderOptions): Promise<PixelSelection | null>;
19
- export declare function renderScreen(data: PixelFetchResult, selectedIndex: number, opts?: {
20
- version?: string;
21
- }): string;
22
- export {};
23
- //# sourceMappingURL=pixel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pixel.d.ts","sourceRoot":"","sources":["../../src/ui/pixel.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAU7F,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpB,UAAU,aAAa;IACrB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA6GhC;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,gBAAgB,EACtB,aAAa,EAAE,MAAM,EACrB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,MAAM,CAyER"}