Files
ralpi/tasks/ralph-loop-fixes/03-replace-sendmessage-with-ctx-ui.md
2026-05-30 19:37:17 -04:00

2.4 KiB

03. Replace sendMessage with ctx.ui progress API

meta: id: ralph-loop-fixes-03 feature: ralph-loop-fixes priority: P1 depends_on: [ralph-loop-fixes-04] tags: [implementation, executor]

objective:

  • Replace all piApi.sendMessage({ customType: "ralph-progress", display: true }) calls with ctx.ui.notify() and ctx.ui.setStatus() to avoid TUI crash from unregistered custom message renderer

deliverables:

  • Modified src/executor.ts — remove sendProgressMessage(), replace with ctx.ui calls
  • Modified src/executor.ts — remove formatToolUsage() if no longer needed, or keep for status text

steps:

  • Open src/executor.ts
  • Remove sendProgressMessage() function entirely
  • In runTask(), replace sendProgressMessage(piApi, task, project, "starting") with ctx.ui.setStatus("ralph", "Running ${task.id}: ${task.title}")
  • In runTask() success path, replace sendProgressMessage(..., "completed") with ctx.ui.notify() for completion summary
  • In runTask() failure path, replace sendProgressMessage(..., "failed") with ctx.ui.notify() for error
  • In executeBatch(), replace batch start piApi.sendMessage() with ctx.ui.setStatus()
  • In executeTask(), replace retry piApi.sendMessage() with ctx.ui.notify()
  • Remove piApi: ExtensionAPI parameter from all executor functions (replaced by ctx: ExtensionCommandContext)
  • Remove unused ExtensionAPI import from executor.ts

tests:

  • Manual: Run a task and verify progress appears in the Pi UI without crash
  • Manual: Verify no child.render is not a function error

acceptance_criteria:

  • No TUI crash during task execution
  • Progress messages visible to user via ctx.ui
  • sendProgressMessage() function removed from codebase
  • piApi.sendMessage() no longer called anywhere in executor

validation:

  • Grep for sendMessage in executor.ts — should only appear in comments or not at all
  • Grep for customType.*ralph-progress — should be removed
  • Verify ctx.ui.notify and ctx.ui.setStatus are used instead

notes:

  • ctx.ui.notify(message, type) shows a notification — use "info" for progress, "error" for failures
  • ctx.ui.setStatus(key, text) sets footer status text — good for "Running task X" updates
  • ctx.ui.setStatus(key, undefined) clears the status
  • The TUI crash (child.render is not a function) happens because customType: "ralph-progress" has no registered renderer via pi.registerMessageRenderer()