Skip to content
1 change: 1 addition & 0 deletions payload.XXXXXX.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"repo":"RunMaestro/Maestro","number":491,"title":"feat: wire feedback modal and IPC wiring","htmlUrl":"https://github.com/RunMaestro/Maestro/pull/491","head":"48055471d0970d23c4b933e7854ca712b0cbfc8f","failures":[{"source":"check-run","id":65324814076,"name":"test","status":"completed","conclusion":"failure","htmlUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814076","detailsUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814076","summary":"","notes":"src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n","completedAt":"2026-03-01T21:11:46Z"},{"source":"check-run","id":65324814066,"name":"lint-and-format","status":"completed","conclusion":"failure","htmlUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814066","detailsUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814066","summary":"","notes":".github:11:failure Process completed with exit code 1.","completedAt":"2026-03-01T21:06:16Z"}]}
17 changes: 17 additions & 0 deletions prompt.XXXXXX.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
You are an autonomous coding agent fixing a GitHub pull request for Maestro.

Goal:
- Fix only what is necessary to make the failing checks pass for PR #491.
- Use the failure payload below to focus changes.
- Keep changes minimal and scoped.
- Do not add broad refactors or formatting churn.
- If no safe fix exists, do not force risky behavior and return without edits.

Context:
- PR repo: RunMaestro/Maestro
- PR number: 491
- Head branch: symphony/issue-457-mm82lf08
- Head SHA: 48055471d0970d23c4b933e7854ca712b0cbfc8f

Failing check payload:
{"repo":"RunMaestro/Maestro","number":491,"title":"feat: wire feedback modal and IPC wiring","htmlUrl":"https://github.com/RunMaestro/Maestro/pull/491","head":"48055471d0970d23c4b933e7854ca712b0cbfc8f","failures":[{"source":"check-run","id":65324814076,"name":"test","status":"completed","conclusion":"failure","htmlUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814076","detailsUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814076","summary":"","notes":"src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n","completedAt":"2026-03-01T21:11:46Z"},{"source":"check-run","id":65324814066,"name":"lint-and-format","status":"completed","conclusion":"failure","htmlUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814066","detailsUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814066","summary":"","notes":".github:11:failure Process completed with exit code 1.","completedAt":"2026-03-01T21:06:16Z"}]}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Remove accidental agent-prompt artifact from the PR.

This file appears unrelated to the feature implementation and contains workflow/debug payload content (CI job metadata, stack traces, and PR ops instructions). It should not be committed as part of the product change set.

🧹 Proposed fix
--- a/prompt.XXXXXX.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-You are an autonomous coding agent fixing a GitHub pull request for Maestro.
-...
-{"repo":"RunMaestro/Maestro","number":491,...}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
You are an autonomous coding agent fixing a GitHub pull request for Maestro.
Goal:
- Fix only what is necessary to make the failing checks pass for PR #491.
- Use the failure payload below to focus changes.
- Keep changes minimal and scoped.
- Do not add broad refactors or formatting churn.
- If no safe fix exists, do not force risky behavior and return without edits.
Context:
- PR repo: RunMaestro/Maestro
- PR number: 491
- Head branch: symphony/issue-457-mm82lf08
- Head SHA: 48055471d0970d23c4b933e7854ca712b0cbfc8f
Failing check payload:
{"repo":"RunMaestro/Maestro","number":491,"title":"feat: wire feedback modal and IPC wiring","htmlUrl":"https://github.com/RunMaestro/Maestro/pull/491","head":"48055471d0970d23c4b933e7854ca712b0cbfc8f","failures":[{"source":"check-run","id":65324814076,"name":"test","status":"completed","conclusion":"failure","htmlUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814076","detailsUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814076","summary":"","notes":"src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n | src/renderer/components/AboutModal.tsx:211:failure Error: [vitest] No \"MessageSquarePlus\" export is defined on the \"lucide-react\" mock. Did you forget to return it from \"vi.mock\"?\nIf you need to partially mock a module, you can use \"importOriginal\" helper inside:\n\nvi.mock(import(\"lucide-react\"), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n // your mocked methods\n }\n})\n\n ❯ AboutModal src/renderer/components/AboutModal.tsx:211:8\n ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18\n ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13\n ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16\n ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14\n ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12\n ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5\n ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7\n\n","completedAt":"2026-03-01T21:11:46Z"},{"source":"check-run","id":65324814066,"name":"lint-and-format","status":"completed","conclusion":"failure","htmlUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814066","detailsUrl":"https://github.com/RunMaestro/Maestro/actions/runs/22552610299/job/65324814066","summary":"","notes":".github:11:failure Process completed with exit code 1.","completedAt":"2026-03-01T21:06:16Z"}]}
🧰 Tools
🪛 LanguageTool

[style] ~17-~17: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...s defined on the "lucide-react" mock. Did you forget to return it from "vi.mock...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~17-~17: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...s defined on the "lucide-react" mock. Did you forget to return it from "vi.mock...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~17-~17: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...s defined on the "lucide-react" mock. Did you forget to return it from "vi.mock...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~17-~17: The official name of this software platform is spelled with a capital “H”.
Context: ...job/65324814066","summary":"","notes":".github:11:failure Process completed with exit ...

(GITHUB)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@prompt.XXXXXX.txt` around lines 1 - 17, Remove the accidental agent
prompt/debug artifact file (prompt.XXXXXX.txt) from the PR: delete the file or
revert its addition so only product code changes remain, ensuring no references
to the file remain in the branch or imports; commit the deletion under the same
PR branch to clear the unrelated CI/debug payload content that caused the
failing checks.

11 changes: 11 additions & 0 deletions src/__tests__/renderer/components/AboutModal.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@ vi.mock('lucide-react', () => ({
×
</span>
),
MessageSquarePlus: ({
className,
style,
}: {
className?: string;
style?: React.CSSProperties;
}) => (
<span data-testid="message-square-plus-icon" className={className} style={style}>
</span>
),
Wand2: ({ className, style }: { className?: string; style?: React.CSSProperties }) => (
<span data-testid="wand-icon" className={className} style={style}>
🪄
Expand Down
150 changes: 150 additions & 0 deletions src/main/ipc/handlers/feedback.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
/**
* Feedback IPC Handlers
*
* This module handles:
* - Checking GitHub CLI availability and authentication
* - Submitting feedback text to the selected agent as a structured prompt
*/

import { ipcMain, app } from 'electron';
import fs from 'fs/promises';
import path from 'path';
import { logger } from '../../utils/logger';
import { withIpcErrorLogging, CreateHandlerOptions } from '../../utils/ipcHandler';
import {
isGhInstalled,
setCachedGhStatus,
getCachedGhStatus,
getExpandedEnv,
} from '../../utils/cliDetection';
import { execFileNoThrow } from '../../utils/execFile';
import { ProcessManager } from '../../process-manager';

const LOG_CONTEXT = '[Feedback]';

const GH_NOT_INSTALLED_MESSAGE =
'GitHub CLI (gh) is not installed. Install it from https://cli.github.com';
const GH_NOT_AUTHENTICATED_MESSAGE =
'GitHub CLI is not authenticated. Run "gh auth login" in your terminal.';

function getPromptPath(): string {
if (app.isPackaged) {
return path.join(process.resourcesPath, 'prompts', 'feedback.md');
}

return path.join(app.getAppPath(), 'src', 'prompts', 'feedback.md');
}

/**
* Helper to create handler options with consistent context
*/
const handlerOpts = (
operation: string,
extra?: Partial<CreateHandlerOptions>
): Pick<CreateHandlerOptions, 'context' | 'operation'> => ({
context: LOG_CONTEXT,
operation,
...extra,
});

/**
* Dependencies required for feedback handler registration
*/
export interface FeedbackHandlerDependencies {
getProcessManager: () => ProcessManager | null;
}

/**
* Register feedback IPC handlers.
*/
export function registerFeedbackHandlers(deps: FeedbackHandlerDependencies): void {
const { getProcessManager } = deps;

logger.info('Registering feedback IPC handlers', LOG_CONTEXT);

// Check if GitHub CLI is installed and authenticated
ipcMain.handle(
'feedback:check-gh-auth',
withIpcErrorLogging(
handlerOpts('check-gh-auth'),
async (): Promise<{ authenticated: boolean; message?: string }> => {
// Prefer cache when available
const cached = getCachedGhStatus();
if (cached) {
if (!cached.installed) {
return { authenticated: false, message: GH_NOT_INSTALLED_MESSAGE };
}
if (!cached.authenticated) {
return { authenticated: false, message: GH_NOT_AUTHENTICATED_MESSAGE };
}
return { authenticated: true };
}

// Check if gh is installed
const installed = await isGhInstalled();
if (!installed) {
setCachedGhStatus(false, false);
return { authenticated: false, message: GH_NOT_INSTALLED_MESSAGE };
}

// Check auth status (command output ignored; exit code is the signal)
const authResult = await execFileNoThrow(
'gh',
['auth', 'status'],
undefined,
getExpandedEnv()
);
const authenticated = authResult.exitCode === 0;
setCachedGhStatus(true, authenticated);

if (!authenticated) {
return { authenticated: false, message: GH_NOT_AUTHENTICATED_MESSAGE };
}

return { authenticated: true };
}
)
);

// Submit feedback by writing to an active process
ipcMain.handle(
'feedback:submit',
withIpcErrorLogging(
handlerOpts('submit'),
async ({
sessionId,
feedbackText,
}: {
sessionId: string;
feedbackText: string;
}): Promise<{ success: boolean; error?: string }> => {
if (!sessionId || typeof sessionId !== 'string') {
return { success: false, error: 'No target agent was selected.' };
}

const trimmedFeedback = typeof feedbackText === 'string' ? feedbackText.trim() : '';
if (!trimmedFeedback) {
return { success: false, error: 'Feedback cannot be empty.' };
}
if (trimmedFeedback.length > 5000) {
return { success: false, error: 'Feedback exceeds the maximum length (5000).' };
}

const processManager = getProcessManager();
if (!processManager) {
return { success: false, error: 'Agent process not available' };
}

const promptTemplate = await fs.readFile(getPromptPath(), 'utf-8');
const finalPrompt = promptTemplate.replace('{{FEEDBACK}}', trimmedFeedback);
const writeSuccess = processManager.write(sessionId, `${finalPrompt}\n`);

if (!writeSuccess) {
return { success: false, error: 'Agent process not available' };
}

return { success: true };
}
)
);
}
6 changes: 6 additions & 0 deletions src/main/ipc/handlers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import { registerAgentErrorHandlers } from './agent-error';
import { registerTabNamingHandlers, TabNamingHandlerDependencies } from './tabNaming';
import { registerDirectorNotesHandlers, DirectorNotesHandlerDependencies } from './director-notes';
import { registerWakatimeHandlers } from './wakatime';
import { registerFeedbackHandlers } from './feedback';
import { AgentDetector } from '../../agents';
import { ProcessManager } from '../../process-manager';
import { WebServer } from '../../web-server';
Expand Down Expand Up @@ -97,6 +98,7 @@ export type { TabNamingHandlerDependencies };
export { registerDirectorNotesHandlers };
export type { DirectorNotesHandlerDependencies };
export { registerWakatimeHandlers };
export { registerFeedbackHandlers };
export type { AgentsHandlerDependencies };
export type { ProcessHandlerDependencies };
export type { PersistenceHandlerDependencies };
Expand Down Expand Up @@ -280,6 +282,10 @@ export function registerAllHandlers(deps: HandlerDependencies): void {
getProcessManager: deps.getProcessManager,
getAgentDetector: deps.getAgentDetector,
});
// Register Feedback handlers (gh auth + feedback submission)
registerFeedbackHandlers({
getProcessManager: deps.getProcessManager,
});
// Setup logger event forwarding to renderer
setupLoggerEventForwarding(deps.getMainWindow);
}
Loading
Loading