Add Linear and Sentry integrations#661
Merged
Merged
Conversation
Contributor
📊 Coverage gateThresholds from
✅ Gate passedNo surface regressed past the allowed threshold and the aggregate stayed above the floor. |
Contributor
📐 Patch coverage gateThreshold: 80% on lines this PR touches vs
✅ Patch gate passedEvery surface whose lines were touched by this PR has patch coverage at or above the threshold. |
063550b to
5db0cc4
Compare
- GraphQL client detects `lin_oauth_` prefix and sends `Authorization: Bearer <token>` for OAuth access tokens. Personal API keys (`lin_api_` and other prefixes) continue sending the token raw per Linear's docs. - Webhook idempotency: when `Linear-Delivery` header is absent, fall back to sha256(webhookId || timestamp || type || action) instead of the body's `webhookId` alone — webhookId identifies the subscription, not the delivery, so the old fallback would collapse distinct events.
- Migrate GetIssue, UpdateIssue, ResolveIssue, AssignIssue from legacy
/api/0/issues/{id}/ to documented /api/0/organizations/{org}/issues/{id}/.
All four now require Config.Organization, matching the existing pattern
in ListIssueEvents and GetEvent.
- ListIssues: rename undocumented `limit` param to `per_page` so
pagination shape matches ListIssueEvents and Sentry's de-facto API.
Keep the deprecated project-scoped issues endpoint with a TODO to
migrate once we can resolve project slug → id.
- TODO comments added pointing to Link-header cursor pagination as a
follow-up.
Mirrors the Linear source's replay-protection pattern. Default tolerance is 300s (Sentry doesn't document a recommended window, so this matches Stripe's). Set `tolerance_seconds: 0` in the trigger config to disable. Parses Sentry-Hook-Timestamp as RFC3339, unix seconds, or unix milliseconds — Sentry's docs only show 'a timestamp', so accept the common formats. Missing or unparseable headers fail closed when tolerance > 0.
EU-region Sentry orgs MUST use https://de.sentry.io. US-region orgs should use https://us.sentry.io. The default https://sentry.io only works for legacy US-only orgs and returns 401/403 for everyone else with no clear hint about region. Surface this in: - docs/integrations/sentry.md: new 'Region / Base URL' section with the full table - integrations/sentry/README.md: same table for the package readme - integrations/sentry/agentfield-package.yaml: SENTRY_BASE_URL description spells out the three valid values Ref https://docs.sentry.io/organization/data-storage-location/.
The Linear and Sentry capability runtimes shipped byte-identical requiredString/stringInput/intInput/objectInput helpers plus a duplicated firstNonBlank in each node's config. Hoist them to a new sdk/go/inputs package with capitalized public names and migrate both nodes. Databricks and Snowflake nodes still have their own copies — they carry extra helpers (boolInput, compactJSON) that aren't shared yet. A follow-up can pull those in once the helper surface stabilizes.
PR #661 swapped the inline DatabricksGlyph for SiDatabricks from react-icons (consistent with how Stripe/GitHub/etc. now render). The Databricks UI test hard-coded an expectation of 3 `<path>` elements from the old hand-drawn glyph. Relax the assertion to 'at least one path' so the test pins icon presence without coupling to the exact SVG markup of whichever icon library renders it.
e53246a to
7d21fd3
Compare
Contributor
Performance
✓ No regressions detected |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft status
This PR intentionally stays draft. Do not merge until real-provider E2E is completed with Linear and Sentry credentials.
Summary
react-iconsprovider logos instead of hand-drawn SVG glyphs.UI / Docs Screenshots
Catalog with OSS sources:
Linear connect dialog:
Sentry connect dialog:
Verification Completed
go test ./internal/sources/... ./internal/handlersincontrol-planego test ./...inintegrations/linear/nodego test ./...inintegrations/sentry/nodego build ./cmd/linear-nodeinintegrations/linear/nodego build ./cmd/sentry-nodeinintegrations/sentry/nodenpx eslint src/components/triggers/SourceIcon.tsx src/pages/IntegrationsPage.tsx src/components/triggers/NewTriggerDialog.tsx src/test/pages/triggers-pages.test.tsxnpx vitest run src/test/pages/triggers-pages.test.tsxnpm run buildincontrol-plane/web/clientdocker build -f integrations/linear/node/Dockerfile -t agentfield-linear-node:test .docker build -f integrations/sentry/node/Dockerfile -t agentfield-sentry-node:test .POST /sources/:trigger_id, including event type, idempotency, and normalized payload behavior.Remaining Before Ready/Merge
LINEAR_API_KEYandLINEAR_WEBHOOK_SECRET:health, one read capability, and one safe write capability on a test issue.SENTRY_AUTH_TOKEN,SENTRY_ORG, andSENTRY_CLIENT_SECRET:health, one read capability, and one safe write capability on a test issue.Notes