- Clear idle_warning errorCode in onLog when output resumes, so the
orange Idle badge disappears without requiring an API call
- Restore idle_timeout entry in status-colors.ts for errorCode-based
badge styling
- Simplify LiveRunWidget time display to a single if/else chain,
eliminating the gap for non-active runs with lastOutputAt but no
finishedAt
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Clear the lastOutputAt debounce timer on run completion to avoid
stale writes after the run finishes
- Replace local formatRelativeTime with existing relativeTime util
- Fix completed-run display in LiveRunWidget to show finish time
instead of unconditionally showing lastOutputAt
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Fix: activeRun merge in LiveRunWidget was dropping errorCode and
lastOutputAt, preventing idle badge and last-output display from
rendering for active runs
- Add test: verify reportRunActivity clears idle_warning error code
and updates lastOutputAt
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The idle tests were failing because runs without runningProcesses
entries were being reaped by the orphan reaper before the idle
timeout pass could check them. Fix by spawning real child processes
and registering them in runningProcesses so the orphan reaper skips
them, allowing the idle timeout logic to evaluate them correctly.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Consolidate duplicate running-runs query in reapOrphanedRuns by
reusing activeRuns for idle timeout pass (skip already-reaped runs)
- Add three integration tests: idle warning at 11 min, idle kill at
16 min, and no-warning with recent output
- Remove unreachable idle_timeout entry from statusBadge (idle-killed
runs have status "failed", not "idle_timeout")
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Fix "keeps alive" test: set lastOutputAt to current time so idle
reaper doesn't kill the test run (seed used a stale date)
- Wire up lastOutputAt and startedAt params in test seed fixture
- Remove dead wasIdle variable in clearDetachedRunWarning
- Fix deferred lastOutputAt flush to use actual last output timestamp
instead of wall-clock time at flush
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Add lastOutputAt: null to the makeRun helper in inbox.test.ts to match
the updated HeartbeatRun type.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Add lastOutputAt tracking on heartbeat runs, updated from adapter stdout/stderr
with batched DB writes (30s debounce). The orphan reaper now checks running
processes for idle timeout: warns at 10 min, kills (SIGTERM/SIGKILL) at 15 min.
- DB: add last_output_at column to heartbeat_runs (migration 0046)
- Server: idle warning/kill logic in reapOrphanedRuns, lastOutputAt flush in onLog
- Server: clear idle_warning on activity report (clearDetachedRunWarning)
- API: expose errorCode and lastOutputAt on active/recent run endpoints
- UI: orange idle warning badge on ActiveAgentsPanel and LiveRunWidget
- UI: show last output relative time in LiveRunWidget
- UI: add idle_timeout status color
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Repositions the unread dot and archive X button to the leading
(left) side of approval, failed run, and join request rows,
matching the visual alignment of IssueRow where the unread slot
appears first due to CSS flex ordering.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Approvals, failed runs, and join requests now have the same
unread dot + archive X pattern as issues in the Mine tab:
- Click the blue dot to mark as read, then X appears on hover
- Desktop: animated dismiss with scale/slide transition
- Mobile: swipe-to-archive via SwipeToArchive wrapper
- Dismissed items are filtered out of Mine tab
- Badge count excludes dismissed approvals and join requests
- localStorage-backed read/dismiss state for non-issue items
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The unread dot and dismiss X now share the same rightmost column on
the Mine tab. When an issue is unread the blue dot shows first;
clicking it marks the issue as read and reveals the X on hover for
archiving. Read/unread state stays in sync across all inbox tabs.
Desktop dismiss animation polished with scale + slide.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- probe host support on every platform instead of special-casing darwin
- re-export the db package helper from server and cli tests
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Display workspace branch, path, and status in a card on the issue main pane
instead of in the properties sidebar. Only shown for non-default (isolated)
workspaces. Edit controls are hidden behind an Edit toggle button.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The MarkdownEditor in NewProjectDialog was not receiving mention options,
so typing @ in the description field did nothing. Added agents query and
mentionOptions prop to match how NewIssueDialog handles mentions.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The mention suggestion dropdown was getting clipped when typing at the
end of a long description inside modals/dialogs because parent containers
had overflow-y-auto. Render it via createPortal to document.body with
fixed positioning and z-index 9999 so it always appears above all UI.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Add @deprecated JSDoc and inline comments to bootstrapPromptTemplate
references in agent-instructions and company-portability services.
This field is superseded by the managed instructions bundle system.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- SPEC: reflect that Paperclip now manages task-linked documents and
attachments (issue documents, file attachments) instead of claiming
it does not manage work artifacts
- agents-runtime: remove bootstrapPromptTemplate from recommended config,
add deprecation notice, update minimal setup checklist
Co-Authored-By: Paperclip <noreply@paperclip.ing>
New CEO agents created during onboarding now include explicit delegation
rules: triage tasks, route to CTO/CMO/UXDesigner, never do IC work, and
follow up on delegated work.
- SPEC: reflect that Paperclip now manages task-linked documents and
attachments (issue documents, file attachments) instead of claiming
it does not manage work artifacts
- agents-runtime: remove bootstrapPromptTemplate from recommended config,
add deprecation notice, update minimal setup checklist
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The mention suggestion dropdown was getting clipped when typing at the
end of a long description inside modals/dialogs because parent containers
had overflow-y-auto. Render it via createPortal to document.body with
fixed positioning and z-index 9999 so it always appears above all UI.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
* ci: add Dockerfile deps stage validation to PR policy
Checks that all workspace package.json files and the patches/
directory are copied into the Dockerfile deps stage. Prevents the
Docker build from breaking when new packages or patches are added
without updating the Dockerfile.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* ci: scope Dockerfile check to deps stage and derive workspace roots
Address Greptile review feedback:
- Use awk to extract only the deps stage before grepping, preventing
false positives from COPY lines in other stages
- Derive workspace search roots from pnpm-workspace.yaml instead of
hardcoding them, so new top-level workspaces are automatically covered
* ci: guard against empty workspace roots in Dockerfile check
Fail early if pnpm-workspace.yaml parsing yields no search roots,
preventing a silent false-pass from find defaulting to cwd.
* ci: guard against empty deps stage extraction
Fail early with a clear error if awk cannot find the deps stage in the
Dockerfile, instead of producing misleading "missing COPY" errors.
* ci: deduplicate find results from overlapping workspace roots
Use sort -u instead of sort to prevent duplicate error messages when
nested workspace globs (e.g. packages/* and packages/adapters/*) cause
the same package.json to be found twice.
* ci: anchor grep to ^COPY to ignore commented-out Dockerfile lines
Prevents false negatives when a COPY directive is commented out
(e.g. # COPY packages/foo/package.json).
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>