nexus/ui
Devin Foley 26069682ee
fix: copy button fallback for non-secure contexts (#2472)
## Thinking Path

> - Paperclip orchestrates AI agents for zero-human companies
> - The UI serves agent management pages including an instructions editor with copy-to-clipboard buttons
> - The Clipboard API (`navigator.clipboard.writeText`) requires a secure context (HTTPS or localhost)
> - Users accessing the UI over HTTP on a LAN IP get "Copy failed" when clicking the copy icon
> - This pull request adds an `execCommand("copy")` fallback in `CopyText` for non-secure contexts
> - The benefit is that copy buttons work reliably regardless of whether the page is served over HTTPS or plain HTTP

## What Changed

- `ui/src/components/CopyText.tsx`: Added `window.isSecureContext` check before using `navigator.clipboard`. When unavailable, falls back to creating a temporary `<textarea>`, selecting its content, and using `document.execCommand("copy")`. The return value is checked and the DOM element is cleaned up via `try/finally`.

## Verification

- Access the UI over HTTP on a non-localhost IP (e.g. `http://[local-ip]:3100`)
- Navigate to any agent's instructions page → Advanced → click the copy icon next to Root path
- Should show "Copied!" tooltip and the path should be on the clipboard

## Risks

- Low risk. `execCommand("copy")` is deprecated in the spec but universally supported by all major browsers. The fallback only activates in non-secure contexts where the modern API is unavailable. If/when HTTPS is enabled, the modern `navigator.clipboard` path is used automatically.

## Checklist

- [x] I have included a thinking path that traces from project context to this change
- [ ] I have run tests locally and they pass
- [ ] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after screenshots
- [ ] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before requesting merge
2026-04-01 20:16:52 -07:00
..
public Add worktree-specific favicon branding 2026-03-10 16:15:11 -05:00
src fix: copy button fallback for non-secure contexts (#2472) 2026-04-01 20:16:52 -07:00
components.json Overhaul UI with shadcn components and new pages 2026-02-17 09:07:32 -06:00
index.html Merge public-gh/master into fix/hmr-websocket-reverse-proxy 2026-03-30 07:17:23 -05:00
package.json feat(hermes): upgrade hermes-paperclip-adapter + UI adapter + skills + detectModel 2026-03-28 01:34:48 +01:00
README.md Publish @paperclipai/ui from release automation 2026-03-26 11:13:11 -05:00
tsconfig.json Fix atomic markdown mention deletion 2026-03-23 16:57:27 -05:00
vite.config.ts Fix atomic markdown mention deletion 2026-03-23 16:57:27 -05:00
vitest.config.ts Fix atomic markdown mention deletion 2026-03-23 16:57:27 -05:00

@paperclipai/ui

Published static assets for the Paperclip board UI.

What gets published

The npm package contains the production build under dist/. It does not ship the UI source tree or workspace-only dependencies.

Typical use

Install the package, then serve or copy the built files from node_modules/@paperclipai/ui/dist.