Tags: radutopala/loop
Tags
fix(chat): auto-deny ExitPlanMode when user sends free-text from chat…
… input
Previously, when the channel was parked on an ExitPlanMode card and the user
typed a new message and hit Send instead of clicking Approve/Reject/Request
changes, `onDismissCards()` cleared `exitPlanRequest` locally but never
called `POST /api/channels/{id}/plan/resolve`. The backend stayed in
`plannedChannels`, the drain loop bailed at the `IsChannelPlanned` guard,
and all queued messages sat unprocessed — the chat looked frozen.
Route the send through `resolvePlan(channelId, "deny", content, mode)` when
the card is active, mirroring the existing `pendingGateReqId` pattern. The
deny path inserts the user's text as a priority-bumped continuation, clears
the park flag, and resumes the drain.
fix(orchestrator): guard prepareAgentRequest against deleted channel GetChannel returns (nil, nil) when the row is missing (sql.ErrNoRows). prepareAgentRequest only checked err, so a triggered message whose channel was deleted mid-flight panicked on `channel.ParentID`. Drop the redundant `channel != nil` check on the worktree branch now that nil is rejected at the top. Hit intermittently in CI: when the test-runner container fails to build the agent image (no docker in PATH), the resulting partial state left a triggered row whose channel had already been swept, and the next drain crashed the daemon before any BDD scenario could connect.
fix(chat): hide 'Compacted context' marker while compacting is in flight The agent.activity event fires once when compacting starts, but the FE was immediately appending a kind=compacting timeline item — rendering the past-tense "Compacted context" stamp above the still-active "Compacting context..." indicator. Suppress the trailing marker while agentActivity.activity === "compacting"; it reappears once the activity transitions away.
test: fix cross-platform paths in dockerproxy and githubapi suites (#27) On macOS sockaddr_un.sun_path caps unix socket paths at 104 bytes, so t.TempDir() under /var/folders/... routinely fails `bind: invalid argument`. Add a `shortSockPath` helper in server_test.go that allocates under /tmp via os.MkdirTemp and use it across server/app/hijack tests. The githubapi exec-runner tests hardcoded `/bin/true` and `/bin/false`, which don't exist on macOS (the binaries live under /usr/bin). Resolve them via exec.LookPath and skip if absent.
feat(scheduler): reset stale running tasks on daemon startup The defer-based release in executeAndLog doesn't fire if the daemon is killed (OOM, SIGKILL, crash), leaving rows flagged running=1 and orphaned task_run_logs in 'running' state — both permanently invisible to GetDueTasks until manually fixed. Run a one-shot sweep before the poll loop starts to finalize orphan logs and clear stuck running flags.
feat(header): show channel/thread ID with label next to dir path (#22) * feat(header): show channel/thread ID with label next to dir path Adds a labeled "Channel ID:" / "Thread ID:" segment between the dir path and session info in ChannelHeaderInfo, following the same separator and double-click-to-copy pattern as the surrounding fields. The label disambiguates threads (which have parent_id set) from channels. * fix(header): scope ID double-click selection to the ID only Move the onDoubleClick / title handlers off the label so the visual selection no longer covers "Channel ID:" / "Thread ID:" text. The highlighted region now matches the clipboard contents (just the id). * feat(header): replace ID label with #/thread-icon prefix Drop the verbose "Channel ID:" / "Thread ID:" prefix in favor of a `#` glyph for channels and a chat-bubble icon for threads, mirroring the Slack/Discord convention. Tooltip and double-click-to-copy behavior unchanged. * feat(header): add Claude icon before session, git-commit icon before commit
PreviousNext