Commit Graph

100 Commits

Author SHA1 Message Date
Forgotten
5cd12dec89 feat(ui): light/dark theme toggle and light mode color support
Add ThemeContext with localStorage persistence and FOUC-preventing
inline script. Add theme toggle button in sidebar. Update status
badges, toast notifications, live indicators, and approval cards
with dark: prefixed classes for proper light mode rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:33:29 -06:00
Forgotten
e2c5b6698c feat: join request claim secrets, onboarding API, and company branding
Add secure claim secret flow for agent join requests with timing-safe
comparison, expiry, and one-time use. Expose machine-readable onboarding
manifests and skill index API endpoints. Add company brand color with
hex validation, pattern icon generation, and settings page integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:33:20 -06:00
Forgotten
9e89ca4a9e feat(adapter): claude local chrome flag and max-turns session handling
Add --chrome flag support for Claude adapter. Detect max-turns
exhaustion (via subtype, stop_reason, or result text) and clear
the session to prevent stale session re-use. Add unit tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:33:10 -06:00
Forgotten
b0f3f04ac6 feat: add OpenClaw adapter type
Introduce openclaw adapter package with server execution, CLI stream
formatting, and UI config fields. Register the adapter across CLI,
server, and UI registries. Add adapter label in all relevant pages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:32:59 -06:00
Forgotten
39d7f5d196 style(ui): add small radius to toast notifications
Change toast container from rounded-lg (0px) to rounded-sm (6px) to
match the small rounding used on comment containers per feedback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:32:02 -06:00
Forgotten
a7402a5500 style(ui): restore rounding for buttons, comments, and company/project icons
Per feedback on PAP-186: containers should have hard edges but buttons,
comment containers, project icons, and company icons should keep rounding.

- Restore --radius-sm (6px) and --radius-md (8px) for buttons/inputs
- Keep --radius-lg and --radius-xl at 0 for cards/containers/dialogs
- Add rounded-sm to comment container divs in CommentThread
- Replace rounded-xl with rounded-[14px] on company icons (CompanyRail,
  CompanySettings) since --radius-xl is 0
- Fix brand color dot in Sidebar (rounded → rounded-sm)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:30:12 -06:00
Forgotten
f3d153c77e fix(ui): move live badge to left of assignee in issues list
The live badge was positioned after the assignee column, pushing the
date column out of alignment on rows with live agents. Move it before
the assignee so it doesn't displace the layout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:15:23 -06:00
Forgotten
7a5b0894ba fix(ui): show "Me" for self-assigned issues, truncated ID for other users
When a task is assigned to the current user, the assignee field now shows
"Me" instead of "User 1gQsX9Jb". For other board users, shows just the
truncated ID (5 chars). The dropdown also says "Assign to me" when the
issue creator is the current user.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:08:39 -06:00
Forgotten
2327cfb861 feat(ui): make company rail items proper links for right-click support
Company rail icons are now <a> tags with href instead of <button>, enabling
right-click "Open in new tab". CompanyContext reads a ?company= URL param on
init so the correct company is selected when opened in a new tab.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 15:41:59 -06:00
Forgotten
25a528a636 feat(ui): persist collapsed group state on issues page
Adds `collapsedGroups` to the view state (persisted in localStorage),
so folding a status/priority/assignee group header is remembered across
page navigations and reloads.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 12:28:59 -06:00
Forgotten
20176d9d60 fix(ui): resume lost runs, activity feed fixes, and selector focus
Add resume button for process_lost runs on agent detail page. Fix
activity row text overflow with truncation. Pass entityTitleMap to
Dashboard activity feed. Fix InlineEntitySelector stealing focus on
close when advancing to next field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:32:51 -06:00
Forgotten
e4e5609132 feat: per-issue assignee adapter overrides (model, effort, workspace)
Add assigneeAdapterOverrides JSONB column to issues, allowing per-issue
model, thinking effort, and workspace overrides when assigning to agents.
Heartbeat service merges overrides into adapter config at runtime. New
Issue dialog exposes these options for Claude and Codex adapters.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:32:44 -06:00
Forgotten
3709901db3 commit 2026-02-26 08:53:03 -06:00
Forgotten
75e54bb82e feat(ui): add swipe gesture to open/close sidebar on mobile
Swipe right from the left edge (30px zone) opens the sidebar,
swipe left when open closes it. Ignores vertical scrolling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:43:49 -06:00
Forgotten
33d549db13 feat(ui): mobile UX improvements, comment attachments, and cost breakdown
Add PWA meta tags for iOS home screen. Fix mobile properties drawer with safe
area insets. Add image attachment button to comment thread. Improve sidebar
with collapsible sections, project grouping, and mobile bottom nav. Show
token and billing type breakdown on costs page. Fix inbox loading state to
show content progressively. Various mobile overflow and layout fixes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:36:06 -06:00
Forgotten
30522f3f11 fix(ui): wrap long monospaced strings in markdown comments on mobile
Adds word-breaking for inline code and pre-wrap for code blocks to
prevent horizontal page overflow on mobile devices.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:42:54 -06:00
Forgotten
3717bab673 fix(ui): prevent top bar and header rows from overflowing on mobile
- BreadcrumbBar: add min-w-0/overflow-hidden to container, truncate last breadcrumb item
- IssueDetail: add flex-wrap and min-w-0 to header row, shrink-0 on buttons, truncate project name
- Companies: add flex-wrap and tighter gap on stats row for mobile

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:40:13 -06:00
Forgotten
a701f12059 fix(ui): ensure dashboard metric cards have equal height
Add h-full to MetricCard wrapper elements (Link, div, Card, CardContent)
so CSS grid row stretching propagates through all layers, preventing
cards with longer descriptions from being taller than siblings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 15:06:03 -06:00
Forgotten
82251b7b27 feat(ui): org chart page, issue detail tabs, and UX improvements
- Add org chart page with tree visualization and sidebar nav link
- Restructure issue detail into tabbed layout (comments/activity/sub-issues)
- Persist comment drafts to localStorage with debounce
- Add inline assignee picker to issues list with search
- Fix assignee clear to reset both agent and user assignee
- Fix InlineEditor nesting when rendering markdown content

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:39:31 -06:00
Forgotten
1c2873d22a feat: enforce agent icon enum and expose via LLM endpoint
Move icon name list to shared constants with strict enum validation.
Add /llms/agent-icons.txt endpoint, pass icon through hire flow,
and update skills to reference icon discovery step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:39:11 -06:00
Forgotten
9f049aa4f3 feat: resolve agent workspace from session/project/fallback
Heartbeat service resolves cwd from task session, project primary
workspace, or agent home directory (~/.paperclip/instances/.../workspaces/).
Adapters receive workspace context and forward it as env vars and
session params. cwd is now optional in adapter config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:38:58 -06:00
Forgotten
29af525167 feat: add project workspaces (DB, API, service, and UI)
New project_workspaces table with primary workspace designation.
Full CRUD routes, service with auto-primary promotion on delete,
workspace management UI in project properties panel, and workspace
data included in project/issue ancestor responses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:38:46 -06:00
Forgotten
e7ac4d0b04 fix(ui): prevent status badge pills from wrapping text
Add whitespace-nowrap and shrink-0 to StatusBadge component so
multi-word statuses like "in progress" stay on a single line.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:16:17 -06:00
Forgotten
f4698b73de feat(ui): show issue title alongside identifier in activity feed
Activity rows now display the issue title after the identifier
(e.g. "CodexCoder commented on PAP-111 — fix login bug") for
better context at a glance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:06:16 -06:00
Forgotten
5af5e4f302 fix(ui): remove borders from label color picker and name input
Removes the border styling from the color picker and text input in the
label creation form within the IssueProperties popover.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:04:47 -06:00
Forgotten
ab9828ae95 refactor(ui): standardize status/priority colors and improve text legibility
Create shared status-colors.ts module as single source of truth for all
status and priority color definitions. Replace hardcoded color classes in
StatusIcon, StatusBadge, PriorityIcon, NewIssueDialog, Agents, AgentDetail,
and DesignGuide. Fix inconsistent hues (in_progress was yellow in StatusIcon
but indigo in StatusBadge, blocked was red vs amber). Bump identifier text
from text-xs to text-sm and improve MetricCard label legibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:52:43 -06:00
Forgotten
94f4e43161 feat(ui): add kanban board view toggle to Issues page
Adds a new board/kanban view alongside the existing list view on the
Issues page. Users can toggle between views via a segmented control
in the toolbar. The preference persists in localStorage.

Board view features:
- Columns for all 7 status types (backlog through cancelled)
- Drag-and-drop cards between columns to update issue status
- Cards display identifier, title, priority, assignee, and live indicator
- Uses existing @dnd-kit library already in the project

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:47:34 -06:00
Forgotten
d2f9ade30c fix(ui): mobile viewport, scrollable popovers, and actor labels
- Set viewport-fit=cover and disable user scaling for mobile PWA feel
- Wrap assignee/project popover lists in scrollable containers
- Remove rounded-t-sm from stacked chart bars for cleaner rendering
- Prevent filter bar icons from shrinking on narrow screens
- Show "Board" instead of raw user IDs in activity feeds and toasts
- Surface server error message in health API failures

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:44:02 -06:00
Forgotten
dd0057baad fix(ui): add safe-area-inset-top for iPhone notch/dynamic island
Content was rendering behind the iPhone notch/dynamic island because
no top safe area inset was applied. Added pt-[env(safe-area-inset-top)]
to both the root Layout container and the mobile sidebar overlay.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 17:17:31 -06:00
Forgotten
25ad04eb10 fix(ui): improve issues page toolbar and rows for mobile
- Make Filter/Sort/Group buttons icon-only on small screens (< 640px)
- Make "New Issue" button icon-only on small screens
- Show filter count badge on mobile instead of full text
- Reduce gaps between toolbar items on mobile
- Hide date column and "Live" text on small screens for issue rows
- Add touch-action: manipulation to prevent double-tap zoom on mobile

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:51:17 -06:00
Forgotten
6c69247064 feat(ui): add mobile bottom navigation bar with scroll-hide
Five-tab bottom nav (Home, Issues, Create, Agents, Inbox) that hides
on scroll-down and reappears on scroll-up for more screen real estate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:08:24 -06:00
Forgotten
09e64b5b03 feat(ui): add 'All' quick filter to Issues list
Adds an 'All' option to the quick filter presets that shows issues
of all statuses without any status filtering applied.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:05:45 -06:00
Forgotten
31f8c0599d fix: prevent project name wrapping in properties pane
Add truncate with ellipsis to the project name in the properties pane
so long names stay on one line instead of wrapping.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:51:52 -06:00
Forgotten
4b7fdaea01 fix: resolve image upload ERR_ACCESS_DENIED and dialog a11y warning
Eagerly read file data into memory via arrayBuffer() before constructing
FormData for the upload fetch. Clipboard-paste File objects from the MDX
editor reference transient browser data that may be discarded after the
paste event handler returns; streaming that stale reference in the fetch
body causes net::ERR_ACCESS_DENIED. Reading into an ArrayBuffer first
makes the FormData self-contained.

Also suppress the Radix UI "Missing Description" console warning on the
NewIssueDialog by setting aria-describedby={undefined}.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:21:04 -06:00
Forgotten
f800374f3a feat(ui): add "See All" link to agent detail Recent Issues section
Remove the issue count from the Recent Issues heading and add a
"See All →" link that navigates to /issues?assignee={agentId}.
The Issues page now reads the assignee query param and pre-filters
the list to show that agent's issues.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:13:59 -06:00
Forgotten
0db2795d1d fix: convert navigate() calls to Link components for cmd-click support
Replaced button/div onClick + navigate() patterns with React Router
<Link> components so that cmd-click (or ctrl-click) opens pages in a
new browser tab. Changes across:

- AgentDetail: RunListItem, "Issues Touched" items, "Manage" config
  link, "Back to runs" mobile button
- CompanySwitcher: "Company Settings" and "Manage Companies" items
- Approvals: pass detailLink prop instead of onOpen callback
- Org: OrgTree nodes now render as Links

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:50:20 -06:00
Forgotten
cf4b338cd4 feat(ui): remember last visited page per company on company switch
When switching companies via the sidebar rail, dropdown, or keyboard
shortcuts, the app now navigates to the last page visited for that
company instead of staying on the current (now irrelevant) page.
Falls back to /dashboard if no previous page exists.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:47:54 -06:00
Forgotten
b05ac91aa7 fix: re-sync company sidebar order from localStorage on data load
The orderedIds state was initialized at mount time when companies was
still an empty array (React Query hadn't resolved yet). When companies
data arrived, orderedIds remained empty so the sidebar fell back to
API-returned order, ignoring the user's saved drag order.

Add a useEffect that re-derives orderedIds from localStorage whenever
the companies array changes, ensuring the user's custom sort order
persists across data refetches and live update invalidations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:43:35 -06:00
Forgotten
2ec45c49af feat(ui): add auth pages, company rail, inbox redesign, and page improvements
Add Auth sign-in/sign-up page and InviteLanding page for invite acceptance.
Add CloudAccessGate that checks deployment mode and redirects to /auth when
session is required. Add CompanyRail with drag-and-drop company switching.
Add MarkdownBody prose renderer. Redesign Inbox with category filters and
inline join-request approval. Refactor AgentDetail to overview/configure/runs
views with claude-login support. Replace navigate() anti-patterns with <Link>
components in Dashboard and MetricCard. Add live-run indicators in sidebar
agents. Fix LiveUpdatesProvider cache key resolution for issue identifiers.
Add auth, health, and access API clients.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:41:21 -06:00
Forgotten
08faeb53b5 fix: cap new issue dialog height so long descriptions don't hide controls
The description area in the non-expanded NewIssueDialog could grow
unboundedly, pushing the property chips and footer off-screen. Now
the dialog has max-h-[calc(100vh-6rem)] in both modes, and the
description wrapper scrolls when content overflows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 13:37:45 -06:00
Forgotten
cf237d2e7f feat: add agent icons with picker and collapsible sidebar section
- Add `icon` text column to agents DB schema with migration
- Add icon field to shared Agent type and validators
- Create AgentIconPicker component with 40+ curated lucide icons and search
- Show clickable icon next to agent name on detail page header
- Replace static Agents nav item with collapsible AGENTS section in sidebar
- Each agent shows its icon (defaulting to Bot) with truncated name

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 12:25:13 -06:00
Forgotten
5b8708eae9 feat: make filters dropdown multi-column layout
Converts the single-column stacked filters popover into a 2-column grid
layout. Status filters appear in the left column, Priority + Assignee in
the right column. On mobile (<640px), falls back to single column.
Popover width increased from 320px to 480px with viewport-aware max to
prevent overflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 10:58:22 -06:00
Forgotten
2a4c0c312d style: make issue filters bar smaller and tighter
- Reduce filter/sort/group button text to text-xs
- Shrink icons from h-3.5/w-3.5 to h-3/w-3
- Tighten icon-to-text spacing from mr-1.5 to mr-1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 09:55:28 -06:00
Forgotten
a57d3427f7 feat: foldable PROJECTS section in sidebar with color support
- Add `color` (text) and `archivedAt` (timestamp) columns to projects table
- Add PROJECT_COLORS palette constant (10 colors) in shared package
- Add color/archivedAt to Project type interface and Zod validators
- Auto-assign next available color from palette on project creation
- New SidebarProjects component with:
  - Collapsible PROJECTS header above WORK section
  - Caret toggle visible on hover (left of header)
  - Always-visible plus button (right of header) opens NewProjectDialog
  - Lists non-archived projects with colored rounded squares
  - Active project highlighted based on URL match
- Remove Projects nav item from WORK section in sidebar

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 09:14:08 -06:00
Forgotten
3392f4dbfa fix: use issue shortname (identifier) in activity feed instead of title
Activity feed and dashboard now display issue identifiers like PAP-32
instead of issue titles for entity names. Also uses identifier-based
URLs for issue links in the activity feed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 08:25:08 -06:00
Forgotten
57f88f6f6a feat: make comment identity headers clickable links to agent pages
Wraps the Identity component in comment headers with a Link to
/agents/{agentId} so users can click through to view agent details.
Applied to both CommentThread and ApprovalDetail comment sections.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 08:19:38 -06:00
Forgotten
40512ad533 Add hour and minute to comment timestamps on issue pages
Comments now show localized date+time (e.g. "Feb 20, 2026, 2:15 PM")
instead of just the date. Added formatDateTime utility to keep the
existing date-only formatDate unchanged for other contexts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 16:19:54 -06:00
Forgotten
95f0d36adc Fix @-mention tab completion cursor positioning
After tab-completing a mention, the cursor was placed before the
completion instead of after it. The root cause: Lexical's DOM
reconciliation after document.execCommand("insertText") would lose
the browser-set cursor position. Added requestAnimationFrame-based
cursor repositioning that first tries the original text node, then
falls back to searching for the mention text in the DOM.

Also normalizes editor content padding for consistent mention dropdown
positioning.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 16:07:37 -06:00
Forgotten
9906a5ba06 Support issue identifiers (PAP-39) in URLs and prefer them throughout
Backend:
- Add router.param middleware in issues, activity, and agents routes to
  resolve identifiers (e.g. PAP-39) to UUIDs before handlers run
- Simplify GET /issues/:id now that param middleware handles resolution
- Include identifier in getAncestors response and issuesForRun query
- Add identifier field to IssueAncestor shared type

Frontend:
- Update all issue navigation links across 15+ files to use
  issue.identifier ?? issue.id instead of bare UUIDs
- Add URL redirect in IssueDetail: navigating via UUID automatically
  replaces the URL with the human-readable identifier
- Fix childIssues filter to use issue.id (UUID) instead of URL param
  so it works correctly with identifier-based URLs
- Add issueUrl() utility in lib/utils.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 16:04:05 -06:00
Forgotten
cae0f416f2 Fix issue short-id vertical alignment in EntityRow
Add position: relative with top: 1px to the identifier span
so "PAP-38" style labels align properly in issue tables.

PAP-39

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:49:16 -06:00