When creating a new issue with a pre-filled assignee or project (e.g. from
a project page), Tab from the title field now skips over fields that already
have values, going directly to the next empty field or description.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
When creating a new issue with a pre-filled assignee or project (e.g. from
a project page), Tab from the title field now skips over fields that already
have values, going directly to the next empty field or description.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The sidebar Documentation links were pointing to an internal /docs route.
Updated both mobile and desktop sidebar instances to link to
https://docs.paperclip.ing/ in a new tab instead.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When creating a new issue with a pre-filled assignee or project (e.g. from
a project page), Tab from the title field now skips over fields that already
have values, going directly to the next empty field or description.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The sidebar Documentation links were pointing to an internal /docs route.
Updated both mobile and desktop sidebar instances to link to
https://docs.paperclip.ing/ in a new tab instead.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- When the adapter probe passes, show a clean animated "Passed" badge with
a checkmark icon instead of verbose check details
- Only show the "Manual debug" section when the test fails, reducing noise
for successful flows
Co-Authored-By: Paperclip <noreply@paperclip.ing>
In the onboarding wizard step 2 ("Create your first agent"), Claude Code and
Codex are now shown prominently as recommended options. Other adapter types
(OpenCode, Pi, Cursor, OpenClaw Gateway) are hidden behind a collapsible
"More Agent Adapter Types" toggle to reduce visual noise for new users.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
When on the Company step (step 1), the form takes up the left half with
ASCII art on the right. Switching to Agent or any other step smoothly
animates the form to full width while fading out the ASCII art panel.
Switching back reverses the animation.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the progress bar dots with labeled tab buttons (Company, Agent,
Task, Launch) that allow clicking directly to any step. This makes it
easy to debug/preview individual onboarding screens without stepping
through the full flow.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Set animation panel (right half) background to #1d1d1d
- Add more margin above Company name form label
- Make form labels white when input is focused or has value
using Tailwind group/focus-within pattern
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move useMemo and derived state above early returns so hooks are always
called in the same order. Simplify the description to plain English
and change toggle button labels to "Enable Timer Heartbeat" /
"Disable Timer Heartbeat" for clarity.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Group agents by company with a single card per company and dense
inline rows instead of one card per agent. Replaces the three stat
cards with a slim inline summary. Each row shows status badge, linked
agent name, role, interval, last heartbeat time, a config link icon,
and an enable/disable button.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
* public-gh/master:
Default Gemini adapter to yolo mode and add API access prompt note
fix: remove Cmd+1..9 company-switch shortcut
fix(ui): prevent IME composition Enter from moving focus in new issue title
fix(cli): add restart hint after allowed-hostname change
docs: remove obsolete TODO for CONTRIBUTING.md
fix: default dangerouslySkipPermissions to true for unattended agents
fix: route heartbeat cost recording through costService
Show issue creator in properties sidebar
Gemini CLI only registers run_shell_command in --approval-mode yolo.
Non-yolo modes don't expose it at all, making Paperclip API calls
impossible. Always pass --approval-mode yolo and remove the now-unused
policy engine code, approval mode config, and UI toggles.
Add a "Paperclip API access note" to the prompt with curl examples
via run_shell_command, since the universal SKILL.md is tool-agnostic.
Also extract structured question events from Gemini assistant messages
to support interactive approval flows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* 'master' of github.com-dotta:paperclipai/paperclip:
Tighten transcript label styling
Fix env-sensitive worktree and runtime config tests
Refine executed command row centering
Tighten live run transcript streaming and stdout
Center collapsed command group rows
Refine collapsed command failure styling
Tighten command transcript rows and dashboard card
Polish transcript event widgets
Refine transcript chrome and labels
fix: remove paperclip property from OpenClaw Gateway agent params
Add a run transcript UX fixture lab
Humanize run transcripts across run detail and live surfaces
fix(adapters/gemini-local): address PR review feedback
fix(adapters/gemini-local): inject skills into ~/.gemini/ instead of tmpdir
fix(adapters/gemini-local): downgrade missing API key to info level
feat(adapters/gemini-local): add auth detection, turn-limit handling, sandbox, and approval modes
fix(adapters/gemini-local): address PR review feedback for skills and formatting
feat(adapters): add Gemini CLI local adapter support
# Conflicts:
# cli/src/__tests__/worktree.test.ts
Long unbroken text (stack traces, file paths, URLs) in issue descriptions
could overflow the container. Add break-words to MarkdownBody and
overflow-hidden to InlineEditor display wrapper.
Fixes PAP-476
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This shortcut interfered with browser tab-switching (Cmd+1..9) and
produced a black screen when used. Removes the handler, the Layout
callback, and the design-guide documentation entry.
Closes RUS-56
- Add global font smoothing (antialiased) to body
- Add tabular-nums to all numeric displays: MetricCard values, Costs page,
AgentDetail token/cost grids and tables, IssueDetail cost summary,
Companies page budget display
- Replace markdown image hard border with subtle inset box-shadow overlay
- Replace all animate-ping status dots with calmer animate-pulse across
AgentDetail, IssueDetail, Agents, sidebar, kanban, issues list, and
active agents panel
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
After onboarding, the wizard navigated to the newly created issue
(e.g. /JAR/issues/JAR-1). useCompanyPageMemory then saved this path,
causing every subsequent company switch to land on that stale issue
instead of the dashboard.
Remove the issue-specific navigation branch so handleLaunch always
falls through to the dashboard route.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* public-gh/master:
fix: disable secure cookies for HTTP deployments
feat(adapters): add claude-sonnet-4-6 and claude-haiku-4-6 models
Add opencode-ai to global npm install in Dockerfile
fix: correct env var priority for authDisableSignUp
Add pi-local package.json to Dockerfile
feat: add auth.disableSignUp config option
refactor: extract roleLabels to shared constants
fix(secrets): add secretKeys tracking to resolveEnvBindings for consistent redaction
fix(db): reuse MIGRATIONS_FOLDER constant instead of recomputing
fix(server): wake agent when issue status changes from backlog
fix(server): use home-based path for run logs instead of cwd
fix(db): use fileURLToPath for Windows-safe migration paths
fix(server): auto-deduplicate agent names on creation instead of rejecting
feat(ui): show human-readable role labels in agent list and properties
fix(ui): prevent blank screen when prompt template is emptied
fix(server): redact secret-sourced env vars in run logs by provenance
fix(cli): split path and query in buildUrl to prevent %3F encoding
fix(scripts): use shell on Windows to fix spawn EINVAL in dev-runner
Agents run unattended and cannot respond to interactive permission
prompts from Claude Code. When dangerouslySkipPermissions is false
(the previous default), Claude Code blocks file operations with
"Claude requested permissions to write to /path, but you haven't
granted it yet" — making agents unable to edit files.
The OnboardingWizard already sets this to true for claude_local
agents (OnboardingWizard.tsx:277), but agents created or edited
outside the wizard inherit the default of false, breaking them.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move status icon to left column on mobile across issues list, inbox, and dashboard
- Hide priority icon on mobile (only show on desktop)
- Move unread indicator dot to right side vertically centered on mobile inbox
- Stale work section: show status icon instead of clock on mobile
- Desktop layout unchanged
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The description text was being covered by the property chips bar when
typing long content on iOS with the virtual keyboard open.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace <button> with <span role="button"> for the unread dot to
eliminate browser UA button styles (min-height, padding) that caused
unread rows to be taller despite explicit h-4 constraint. Also
reduce dot from h-2.5/w-2.5 to h-2/w-2 for a more subtle indicator.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Removed the scroll-to-bottom button from IssuesList (wrong location)
and created a shared ScrollToBottom component. Added it to IssueDetail
and RunDetail pages. On mobile, the button sits above the bottom nav
to avoid overlap.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Moves the unread dot from a separate left column into the metadata
line (alongside status/identifier), with an empty placeholder for
read items to keep spacing consistent. Reduces left padding on
mobile inbox rows to reclaim space.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add PriorityIcon and timeAgo to IssuesList mobile rows to match the
pattern used in Inbox and Dashboard. Align Dashboard row padding to
match Inbox. All mobile issue rows now show: title (2-line clamp),
then priority + status + identifier + relative time.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On mobile, all issue rows now show title first (up to 2 lines),
with metadata (icons, identifier, timestamp) on a second line below.
Desktop layout is preserved as single-line rows.
Affected locations: Inbox recent issues, Inbox stale work,
Dashboard recent tasks, and IssuesList.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Give unread dot container fixed h-5 so rows are consistent height
regardless of badge presence
- Use flex-wrap on mobile so title gets its own line with line-clamp-2
- On sm+ screens, keep single-line truncated layout
- Move timestamp to ml-auto with sm:order-last for clean wrapping
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add min-w-0 and overflow-hidden to the stale work row flex containers
so the title truncates properly on narrow screens. Add shrink-0 to
identifier and assignee spans to prevent them from being compressed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move duplicated roleLabels map from AgentProperties.tsx, Agents.tsx,
OrgChart.tsx, and agent-config-primitives.tsx into AGENT_ROLE_LABELS
in packages/shared/src/constants.ts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use roleLabels lookup in list view subtitle and AgentProperties
panel instead of raw role strings.
Fixes#180
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change onChange handler from v || undefined to v ?? "" so empty
strings don't become undefined and crash downstream .trim() calls.
Fixes#191
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a "+" button next to "AGENTS" in the sidebar, matching the existing
pattern used by Projects. Clicking it opens the agent creation choice
modal.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Short titles now always occupy two lines of vertical space, ensuring
consistent horizontal alignment across agent cards.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a small copy icon to the right of each comment's date that copies
the comment body as raw markdown to the clipboard. Shows a checkmark
briefly after copying.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Lazy-load mermaid.js and render fenced mermaid code blocks as inline
SVG diagrams with dark/light mode support. Falls back to showing the
source code on parse errors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New adapter type for invoking OpenClaw agents via the gateway protocol.
Registers in server, CLI, and UI adapter registries. Adds onboarding
wizard support with gateway URL field and e2e smoke test script.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the direct agent config dialog with a choice modal offering two
paths: "Ask the CEO to create a new agent" (opens pre-filled issue) or
"I want advanced configuration myself" (navigates to /agents/new).
- Extend NewIssueDefaults with title/description for pre-fill support
- Add /agents/new route with full-page agent configuration form
- NewAgentDialog now shows CEO recommendation modal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change the issue title in agent run cards from single-line truncate
to line-clamp-2 so titles always occupy two lines for consistent card height.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Introduced SVG sanitization using `dompurify` to prevent malicious content.
- Updated tests to validate SVG sanitization with various scenarios.
- Enhanced response headers for assets, adding CSP and nosniff for SVGs.
- Adjusted UI to better clarify supported file types for logo uploads.
- Updated dependencies to include `jsdom` and `dompurify`.
Webhook auth header and gateway auth token fields now render as password
inputs by default, with an eye/eye-off toggle icon on the left to reveal
the value.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a join request arrives via WebSocket live event, display a toast
prompting the user to review it in the inbox.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
In the My Recent Issues section, the blue unread dot is now a button that
marks the issue as read on click with a smooth opacity fade-out. Already-read
issues show empty space instead of a hollow circle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add skill URL note to onboarding text document and strengthen callback
reachability test language in company settings invite snippet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Merge consecutive assistant/thinking deltas into a single feed entry
instead of creating one per chunk. Add dedupeKey to FeedItem, increase
streaming text cap to 4000 chars, and bump seen-keys limit to 6000.
Applied consistently to both ActiveAgentsPanel and LiveRunWidget.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The dark-mode --destructive color was too dim (lightness 0.396) to read
against dark backgrounds. Bumped to 0.637 lightness with higher chroma
so error text is clearly visible. Set --destructive-foreground to white
for contrast on destructive button backgrounds.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The sidebar badge count was missing join requests from its inbox total,
and the live updates provider had no handler for join_request entity
type, so new join requests wouldn't appear until manual page refresh.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove duplicate opencode_local adapter entry in OnboardingWizard
(old Code-icon version), keeping only the OpenCodeLogoIcon entry
- Extract resolveOpenCodeCommand() helper to deduplicate the
PAPERCLIP_OPENCODE_COMMAND env-var fallback logic in models.ts
- Bump @types/node from ^22.12.0 to ^24.6.0 to match the monorepo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* public-gh/master:
fix(ui): wrap failed run card actions on mobile
feat(codex): add gpt-5.4 to codex_local model list
persist paperclip data in a named volume
add support to `cursor` and `opencode` in containerized instances
force `@types/node@24` in the server
Add artifact-check to fail fast on broken builds
remove an insecure default auth secret
expose `PAPERCLIP_ALLOWED_HOSTNAMES` in compose files
wait for a health db
update lock file
update typing to node v24 from v20
add missing `openclaw` adapter from deps stage
fix incorrect pkg scope
update docker base image
move docker into `authenticated` deployment mode
When "Generate agent snippet" is clicked, the snippet is now
automatically copied to the clipboard and the "Copied" delight
animation is shown, matching the existing manual copy behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PR #62 uses strict model selection with no default — the merge
conflict resolution incorrectly kept HEAD's references to this
removed constant. Also remove dead opencode_local branch in
OnboardingWizard (already handled by prior condition).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Merges paperclipai/paperclip#62 onto latest master (494448d).
Adds complete OpenCode provider with strict model selection,
dynamic model discovery, CLI/server/UI adapter registration.
Resolved conflicts with master's cursor adapter additions,
node v24 typing, and containerized opencode support (201d91b).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The cache-first strategy for static assets was causing pages to serve
stale content on refresh. Switched to network-first for all requests
with cache as offline-only fallback. Bumped cache version to clear
existing caches on activate.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
setSearchParams from React Router triggers router state updates that cause
the Issues component tree to re-render on each debounced URL update. Switch
to window.history.replaceState which updates the URL silently without
triggering React Router re-renders.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Radix Dialog wraps content in react-remove-scroll, which blocks wheel
events on portaled Popover content (rendered outside the Dialog DOM
tree). Add a disablePortal option to PopoverContent and use it for all
InlineEntitySelector instances inside NewIssueDialog so the Popover
stays in the Dialog's DOM tree and scrolling works.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add renderTriggerValue/renderOption to the comment thread's assignee
selector so it shows agent icons, matching the new issue dialog. Fix
the InlineEntitySelector flash on click by only auto-opening on
keyboard focus (not pointer-triggered focus).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Debounces search input (300ms) and syncs it to a ?q= URL parameter so
searches persist across navigation and can be shared via URL.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace scrollbar-none with a scrollbar-auto-hide utility that keeps the
scrollbar thumb transparent by default and reveals it on container hover.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Failed runs, alerts, and stale work items can now be dismissed via an
X button that appears on hover. Dismissed items are stored in
localStorage and filtered from the inbox view and item count.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shows a floating arrow button in the bottom-right corner when the user
is more than 300px from the bottom of the issues list. Hides
automatically when near the bottom. Smooth-scrolls on click.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a ProjectStatusPicker component that renders the status badge as a
clickable button opening a popover with all project statuses. Falls back
to the read-only StatusBadge when no onUpdate handler is provided.
Works in both desktop side panel and mobile sheet layout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On mobile, the sidebar panel toggle was hidden (md:flex only). Add a
mobile-visible SlidersHorizontal button that opens a bottom Sheet drawer
with ProjectProperties, matching the existing pattern from IssueDetail.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When searching via the command palette on mobile, the left sidebar
now automatically closes so search results are visible.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Force popover to always open downward (side="bottom") to prevent it from
flipping upward and going off-screen on mobile. Skip auto-focusing the
search input on touch devices so the virtual keyboard doesn't open and
reshape the viewport. Add touch-manipulation on option buttons to remove
tap delays and improve scroll gesture recognition.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The X close button in the command palette dialog used the generic dialog
positioning (absolute top-4 right-4), which was visually offset from the
search input on mobile. Replace with a custom close button that matches
the input wrapper height (h-12) and uses flex centering for proper
vertical alignment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow the "For [Assignee] in [Project]" row to wrap on mobile instead of
requiring horizontal scroll that pushes selectors off-screen. On desktop
(sm+), the row stays inline with min-w-max. Added overscroll-x-contain
for better touch scroll containment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On small screens, the assignee Identity badge takes up valuable space
in the command palette search results, truncating issue titles. Hide
it below the `sm` breakpoint so more of the title is visible.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Radix Dialog's modal DismissableLayer calls preventDefault() on pointerdown
events originating outside the Dialog DOM tree. Popover portals render at the
body level (outside the Dialog), so touch events on popover content were
treated as 'outside' — killing scroll gesture recognition on mobile.
Fix: add onPointerDownOutside to NewIssueDialog's DialogContent that detects
events from Radix popper wrappers and calls event.preventDefault() on the
Radix event (not the native event), which skips the Dialog's native
preventDefault and restores touch scrolling.
Also cleans up previous CSS-only workarounds (-webkit-overflow-scrolling,
touch-pan-y on individual buttons) that couldn't override JS preventDefault.
Adds service worker with network-first navigation (SPA fallback) and
cache-first static assets. Enhances web manifest with start_url, scope,
id, description, orientation, and maskable icon entry.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add OpenResponses gateway enablement instructions to the end of the
agent snippet in CompanySettings. Refactor buildAgentSnippet to use
a template literal for easier future editing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When the properties pane was closed on a project page, there was no way
to reopen it. Add the same SlidersHorizontal toggle button used on issue
detail pages.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Invite link is now automatically copied to clipboard when created
- "Copied" badge appears next to the share link header for 2s
- Standalone "Copy link" button replaced with a small copy icon next to the link
- Icon toggles to a green checkmark while "copied" feedback is shown
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tracks most recently selected assignees in localStorage and sorts both
the issue properties and new issue dialog assignee lists accordingly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* 'master' of github.com-dotta:paperclipai/paperclip:
fix(ui): render sub-goals in goal detail tree
fix: exclude terminated agents from list and org chart endpoints
- Comment dates are now clickable anchor links (#comment-{id})
- Pages scroll to and highlight the target comment when URL has a hash
- Added GET /api/issues/:id/comments/:commentId endpoint
- Updated skill docs with new endpoint and comment URL format
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The retry button was only on the Inbox page but missing from the individual
run detail view. This adds it next to the status badge, matching the same
wakeup pattern used in the Inbox (retry_failed_run with context snapshot).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Previously, sorting was skipped when a search query was active, so
search results were only ordered by backend relevance ranking.
Now client-side sorting applies to search results too.
Also changed default sort from "created" to "updated" desc so most
recently updated issues appear first.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shows a green pill badge on the Claude Code and Codex adapter cards
during CEO agent configuration in the onboarding flow.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Companies with status "archived" are now hidden from the company
dropdown in the NewIssueDialog, matching the expected behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move toggle icon next to three-dots menu in a shared flex container
- Toggle icon fades in/out with opacity transition instead of hard mount/unmount
- Properties panel slides in/out with width + opacity transition (200ms ease-in-out)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When the properties panel is hidden, a SlidersHorizontal icon button
now appears in the issue header bar (desktop only) to re-show it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Radix's DialogOverlay wraps content in RemoveScroll, which blocks wheel
events on elements not registered as DialogPrimitive.Content. Since the
onboarding wizard uses a custom layout (not DialogContent), scroll events
on the form container were being swallowed. Replacing with a plain div
preserves the background appearance without the scroll-locking behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The inner content wrapper in the onboarding form used flex-shrink default (1),
causing it to compress instead of overflowing the scroll container. Adding
shrink-0 prevents flex compression and lets overflow-y-auto work correctly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The description textarea in onboarding step 3 couldn't scroll and was too
short for the default content. Added auto-grow behavior that resizes from
120px up to 300px based on content, with overflow scrolling beyond the cap.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When an issue has an active running run, the same run was appearing both
as a live widget and as a run entry in the comments timeline. Filter out
runs shown by the live widget from the timeline linkedRuns to prevent
this duplication.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Store the open/closed state of the properties panel in localStorage
so it persists across navigations, issues, and companies.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a company has no agents (e.g. user exited onboarding early), the
dashboard now shows an amber banner: "You have no agents. Create one
here" that opens the onboarding wizard directly at step 2 (agent
creation), skipping the company creation step.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a question mark hint icon next to the "Working directory" label
explaining that users should create a dedicated folder for their agents.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Only Claude Code and Codex are selectable. OpenClaw, Cursor, Shell Command,
and HTTP Webhook are shown as disabled with "Coming soon" across all adapter
selection UIs: onboarding wizard, agent config form, and invite landing page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The parent query for agent detail uses routeAgentRef (URL key like
"claudecoder") in its cache key, but ConfigurationTab and rollbackConfig
only invalidated by agent.id (UUID). This meant the refetch never fired
when navigating by URL key, so the dirty overlay was never cleared and the
save button stayed visible indefinitely.
Add urlKey-based invalidation to match the pattern already used by other
mutations in the parent component.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MarkdownEditor's plugins useMemo depended on imageUploadHandler, which
was a new arrow function on every parent render. This caused MDXEditor
to reinitialize plugins on each render, firing onChange, which updated
the overlay state in AgentConfigForm, triggering a parent re-render —
creating an infinite "Maximum update depth exceeded" loop.
Fix: use a stable ref for imageUploadHandler so plugins are only created
once (keyed on whether a handler exists, not its identity). Also use a
module-level empty object for env config fallback to avoid unnecessary
EnvVarEditor re-renders.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Override Tailwind Typography's hardcoded code block colors with app theme
variables so fenced code blocks (```) render consistently between the
MDXEditor and MarkdownBody views. Also styles inline code, removes the
default backtick pseudo-elements, and adds mention chip styles for the
rendered prose context.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rename all workspace packages from @paperclip/* to @paperclipai/* and
the CLI binary from `paperclip` to `paperclipai` in preparation for
npm publishing. Bump CLI version to 0.1.0 and add package metadata
(description, keywords, license, repository, files). Update all
imports, documentation, user-facing messages, and tests accordingly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Increase paragraph margins, add line-height: 1.4 to paragraphs/lists/blockquotes,
and bump inter-paragraph spacing in the MDXEditor for more readable markdown blocks.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Every page already sets breadcrumbs via BreadcrumbContext. This adds a
useEffect in the provider that updates document.title to reflect the
current page, e.g. "Issue Title · Issues · Paperclip".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change relative Navigate paths to absolute (e.g. "agents/all" to
"/agents/all") to prevent broken redirects when routes are nested.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the checkbox + native <select> reassign pattern in CommentThread
with an always-visible InlineEntitySelector (matching the new issue dialog).
The selector defaults to the current assignee and only triggers reassignment
on comment submit if the user changed the selection.
- Remove ReassignOption interface, use InlineEntityOption from InlineEntitySelector
- Add currentAssigneeValue prop to track issue's current assignee
- Remove canReassignFromComment gate so selector is always visible
- Position selector to the left of the Comment button
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update addComment to touch issue updatedAt so comment activity is
reflected in recency sorting. Sort assigned issues on agent detail
page by updatedAt desc so the most recently active issues appear first.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>