paperclip/server/src/routes
Nicky Leach 8f1e3cfe24
feat(observability): add opt-in Sentry error monitoring for the server and the browser (#12190)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - The server and the browser need clear error reports when an operator
enables external monitoring.
> - Paperclip already uses an opt-in OpenTelemetry pattern for server
traces.
> - Sentry can provide error reports for both runtime paths when the
operator sets one data source name.
> - This pull request adds one opt-in Sentry gate for the server and the
browser.
> - The benefit is faster diagnosis while the default setup sends no
Sentry data.

## Linked Issues or Issue Description

**What is improved?**

Paperclip gains optional error monitoring for server and browser
failures.

**Subsystem affected**

Cross-cutting (server, UI, and shared authentication data).

**Current behavior**

Paperclip has no built-in Sentry error capture for server failures or
browser boundary failures. Operators must inspect local logs and browser
tools.

**Proposed behavior**

When the operator sets `SENTRY_DSN`, the server and authenticated
browser use the same Sentry project. When the variable is absent, both
paths stay inactive. The server loads Sentry dynamically and fails open
when the optional package is absent.

**Reason and benefit**

Operators can inspect runtime errors in one Sentry project. The default
setup remains local and sends no monitoring data.

**Breaking changes**

None when `SENTRY_DSN` remains unset. Authenticated session responses
add the optional `sentryDsn` field.

**Additional context**

The implementation uses built-in Sentry privacy options. It disables
default HTTP context and breadcrumb integrations and keeps
`sendDefaultPii` false.

## What Changed

- Add an opt-in server Sentry gate with dynamic package loading and
fail-open behavior.
- Add the Sentry data source name to the authenticated session response.
- Add an authenticated browser Sentry gate and React error boundary
capture.
- Add tests for server, browser, route, and application error paths.
- Document activation, installation, privacy settings, capture behavior,
and operator controls.

## Verification

- Run `npx vitest run server/src/__tests__/sentry.test.ts`.
- Run `npx vitest run ui/src/lib/sentry.test.ts`.
- Run `npx vitest run server/src/__tests__/auth-routes.test.ts
server/src/__tests__/shutdown.test.ts`.
- Confirm that the full continuous integration suite passes on this pull
request.
- Leave `SENTRY_DSN` unset and confirm that the server and browser gates
stay inactive.
- Set `SENTRY_DSN` and install the optional Sentry packages before a
manual capture check.

## Risks

The operator controls the Sentry project and accepts the data risk when
the operator enables the feature. Error objects can contain messages,
stacks, or cause chains with private values. The default configuration
sends no data because the feature stays off without `SENTRY_DSN`. A
missing optional server package does not stop server boot.

## Model Used

OpenAI Codex, GPT-5, with tool use, repository inspection, GitHub CLI
operations, and code review support.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

---------

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-08-26 11:15:45 -07:00
..
access.ts feat: operator-configurable settings visibility via PAPERCLIP_HIDDEN_SETTINGS (#11823) 2026-08-20 17:54:44 -07:00
activity.ts build(deps): bump zod from 3.25.76 to 4.4.3 (#11719) 2026-08-21 00:04:14 -07:00
adapter-login-route-spine.ts feat(auth): normalize agent login in the sandbox onto one session table and a capability contract (#11730) 2026-08-19 11:51:31 -07:00
adapters.test.ts feat(login): use the login pseudo-terminal for Codex device login and de-Claude the shared channel (#12020) 2026-08-23 09:44:59 -07:00
adapters.ts feat(runner): add flagged Codex execution adapter (#12188) 2026-08-25 16:03:41 -05:00
agents.ts fix(adapters): restore Paperclip skill for legacy runners (#12225) 2026-08-26 09:45:24 -05:00
approvals.ts feat: maintained in_review review-path contract + stalled-review actions (#10675) 2026-08-04 13:54:40 -05:00
assets.ts feat: stamp responsible users on activity logs (#9731) 2026-07-16 20:54:55 -05:00
attention.ts feat(decisions): improve desk triage and queue parity (#10785) 2026-08-03 21:31:45 -05:00
auth.ts feat(observability): add opt-in Sentry error monitoring for the server and the browser (#12190) 2026-08-26 11:15:45 -07:00
authz.ts feat(secrets): thread the acting user into user-scoped secret resolution (#10115) 2026-07-23 13:30:26 -07:00
board-chat.ts feat(secrets): add user-specific runtime secrets (#8825) 2026-07-05 05:58:20 -05:00
built-in-agents.ts [codex] Add built-in agents and Reflection Coach bundle (#9206) 2026-07-09 16:29:30 -05:00
cases.ts build(deps): bump zod from 3.25.76 to 4.4.3 (#11719) 2026-08-21 00:04:14 -07:00
cloud.ts feat: make in-app features cloud-aware (#10850) 2026-08-04 23:00:14 -05:00
companies.ts feat: hideable company settings pages, with import floored on cloud-managed instances (#12199) 2026-08-25 16:06:35 -07:00
company-import-paths.ts [codex] Runtime control-plane fixes (#6380) 2026-05-20 10:37:11 -05:00
company-skill-policy.ts feat(skills): open-by-default company skill policy and core UX (#9564) 2026-07-15 11:42:40 -05:00
company-skills.ts Add project folder browsing to skill imports (#9930) 2026-08-02 10:55:36 -05:00
costs.ts security(server): close cross-tenant existence oracle (404 instead of 403) (#3967) 2026-07-14 15:53:09 -07:00
dashboard.ts feat(server): recovery observability report and rate alert (#9644) 2026-07-16 02:34:00 -05:00
decision-queues.ts feat(decisions): add desk workflow and retention (#10672) 2026-08-02 10:47:03 -05:00
decision-training.ts build(deps): bump zod from 3.25.76 to 4.4.3 (#11719) 2026-08-21 00:04:14 -07:00
decisions.ts build(deps): bump zod from 3.25.76 to 4.4.3 (#11719) 2026-08-21 00:04:14 -07:00
environment-selection.ts refactor(environments): make execution environments instance-scoped (#8375) 2026-06-20 09:42:53 -07:00
environments.ts feat: environment delete with agent reassignment and consented sandbox destroy (#12053) 2026-08-23 16:53:17 -07:00
execution-workspaces.ts fix(workspaces): seed managed worktrees when the base checkout has no config (#11752) 2026-08-20 08:42:16 -07:00
file-resources.ts build(deps): bump zod from 3.25.76 to 4.4.3 (#11719) 2026-08-21 00:04:14 -07:00
folders.ts feat: stamp responsible users on activity logs (#9731) 2026-07-16 20:54:55 -05:00
goals.ts security(server): close cross-tenant existence oracle (404 instead of 403) (#3967) 2026-07-14 15:53:09 -07:00
health.ts feat: operator-configurable settings visibility via PAPERCLIP_HIDDEN_SETTINGS (#11823) 2026-08-20 17:54:44 -07:00
inbox-agent-policy.ts feat: stamp responsible users on activity logs (#9731) 2026-07-16 20:54:55 -05:00
inbox-dismissals.ts feat: stamp responsible users on activity logs (#9731) 2026-07-16 20:54:55 -05:00
index.ts feat(server): receive and apply the Paperclip Cloud onboarding seed (#11098) 2026-08-12 22:54:07 -07:00
instance-database-backups.ts feat: make in-app features cloud-aware (#10850) 2026-08-04 23:00:14 -05:00
instance-settings.ts feat: operator-configurable settings visibility via PAPERCLIP_HIDDEN_SETTINGS (#11823) 2026-08-20 17:54:44 -07:00
issue-tree-control.ts feat: stamp responsible users on activity logs (#9731) 2026-07-16 20:54:55 -05:00
issues-checkout-wakeup.ts Cut over OpenClaw adapter to strict SSE streaming 2026-03-05 15:54:55 -06:00
issues.ts fix(issues): cycle-aware issue_blockers_resolved after terminal reset (#11979) 2026-08-23 08:50:38 -07:00
llms.ts [codex] Add built-in Hermes adapters (#8543) 2026-06-26 16:04:58 -05:00
onboarding-seed.ts feat(server): receive and apply the Paperclip Cloud onboarding seed (#11098) 2026-08-12 22:54:07 -07:00
openapi.ts fix(setup-token): pin the start guard to the served adapter (#12179) 2026-08-25 19:48:44 -07:00
org-chart-svg.ts Improve generated company org chart assets 2026-03-23 16:58:07 -05:00
pipelines.ts build(deps): bump zod from 3.25.76 to 4.4.3 (#11719) 2026-08-21 00:04:14 -07:00
plugin-ui-static.ts feat(mcp) [split 2/8]: add governed access contracts (#9557) 2026-07-14 12:57:20 -05:00
plugins.ts feat: operator-configurable settings visibility via PAPERCLIP_HIDDEN_SETTINGS (#11823) 2026-08-20 17:54:44 -07:00
projects.ts fix(workspaces): attach PR preparation to existing branches (#11703) 2026-08-21 17:23:18 -05:00
resource-memberships.ts feat(server): add per-user document stars (#9952) 2026-07-27 19:13:35 -05:00
routines.ts fix(workspaces): attach PR preparation to existing branches (#11703) 2026-08-21 17:23:18 -05:00
secrets.ts Add governed secret alias confirmation cards (#11486) 2026-08-18 09:44:24 -05:00
setup-token-route.test.ts fix(setup-token): pin the start guard to the served adapter (#12179) 2026-08-25 19:48:44 -07:00
sidebar-badges.ts feat: add attention queue and Decisions surface (#9380) 2026-07-10 17:09:57 -05:00
sidebar-preferences.ts feat: stamp responsible users on activity logs (#9731) 2026-07-16 20:54:55 -05:00
smoke-lab.ts feat: stamp responsible users on activity logs (#9731) 2026-07-16 20:54:55 -05:00
status-cards.ts feat(status-cards): join summary-mentioned issues to watched set (#10205) 2026-07-24 16:44:56 -05:00
summary-slots.ts feat: add built-in summarizer and summary slots (#9713) 2026-07-17 11:03:07 -05:00
teams-catalog.ts [codex] Add teams catalog extraction (#7550) 2026-06-05 12:55:49 -05:00
tool-access.ts fix(server): close tool-access cross-tenant ID oracles (#9589) 2026-08-12 16:09:18 -07:00
tool-gateway.ts feat(mcp) [split 4/8]: wire gateway runtime and Smoke Lab (#9559) 2026-07-14 15:07:30 -05:00
user-profiles.ts Skill Studio: three-pane skill IDE with sandboxed test runs (#9241) 2026-07-09 13:08:56 -05:00
workspace-command-authz.ts feat(workspaces): defer isolated setup until runtime start (#10653) 2026-08-02 10:37:10 -05:00
workspace-runtime-service-authz.ts feat(runtime): managed Tailscale HTTPS lifecycle, durable runtime leases, and bounded control recovery (#11525) 2026-08-17 06:23:33 -04:00