feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: add public connections API and repository filtering - #1550

Merged
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections
Aug 13, 2026
Merged

feat: add public connections API and repository filtering#1550
brendan-kellam merged 4 commits into
mainfrom
sou-1870-list-connections

Conversation

@brendan-kellam

@brendan-kellambrendan-kellam commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes SOU-1870

Summary

  • add GET /api/connections with connection metadata scoped through repositories visible to the caller
  • add an optional connectionId filter to GET /api/repos, including pagination and count handling
  • publish both behaviors in the public OpenAPI specification
  • add focused service tests for connection listing and repository filtering

Test plan

  • yarn workspace @sourcebot/web test src/app/api/(server)/connections/listConnectionsApi.test.ts src/app/api/(server)/repos/listReposApi.test.ts --run
  • yarn workspace @sourcebot/web exec eslint on the changed TypeScript files
  • yarn workspace @sourcebot/web openapi:generate

Stack created with GitHub Stacks CLI


Note

Low Risk
Additive public read APIs that reuse existing optional-auth and repo-scoping patterns; no new credential exposure beyond id/name/type metadata.

Overview
Adds GET /api/connections, which returns deduplicated code-host connection metadata (id, name, connectionType) for connections tied to at least one repository the caller can see. Listing goes through visible repos so the scoped Prisma client applies the same visibility rules as repository APIs; credentials and connection config are not returned.

GET /api/repos gains an optional connectionId query parameter (positive integer, IDs from the connections endpoint). Repository queries and X-Total-Count use a shared where clause, and pagination Link headers preserve connectionId when present.

Public OpenAPI, docs navigation, and changelog are updated; service tests cover connection deduplication and connection-based repo filtering.

Reviewed by Cursor Bugbot for commit 5d019f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a public API endpoint to list visible repository connections.
    • Added optional connectionId filtering to the repository listing API.
    • Added API reference documentation for connection listings and repository filtering.
  • Bug Fixes
    • Ensured connection-filtered repository results, counts, and pagination links remain consistent.
    • Ensured connection listings return unique, consistently ordered results.

@coderabbitai

coderabbitaiBot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7835cd3e-51d2-42a8-bddc-5ed108da296c

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb8c3 and c717571.

📒 Files selected for processing (1)
  • CHANGELOG.md

Walkthrough

The PR adds GET /api/connections for visible repository connections. It also adds an optional connectionId filter to GET /api/repos, with validation, pagination support, tests, and OpenAPI documentation.

Changes

Public connection APIs

Layer / File(s)Summary
Connection listing flow
packages/web/src/app/api/(server)/connections/*, packages/web/src/openapi/*, docs/api-reference/sourcebot-public.openapi.json, docs/docs.json, CHANGELOG.md
Adds connection schemas, visible-connection querying, deduplication, deterministic sorting, route handling, tests, API documentation, navigation, and a changelog entry.
Repository connection filtering
packages/web/src/app/api/(server)/repos/*, packages/web/src/lib/schemas.ts, packages/web/src/lib/types.ts, docs/api-reference/sourcebot-public.openapi.json
Adds positive-integer connectionId validation and applies the filter to repository results, counts, and pagination links. Tests cover filtered and unfiltered queries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant Client
participant ConnectionsRoute
participant listConnections
participant RepositoryQuery
Client->>ConnectionsRoute: GET /api/connections
ConnectionsRoute->>listConnections: Request visible connections
listConnections->>RepositoryQuery: Query visible repositories
RepositoryQuery-->>listConnections: Return repository connections
listConnections-->>ConnectionsRoute: Return unique sorted connections
ConnectionsRoute-->>Client: Return JSON response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the two main changes: the public connections API and repository filtering.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sou-1870-list-connections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@brendan-kellambrendan-kellam changed the title sou 1870 list connectionsfeat: add public connections API and repository filteringAug 6, 2026
@brendan-kellam
brendan-kellamforce-pushed the sou-1870-list-connections branch 2 times, most recently from d892993 to 5d019f3CompareAugust 6, 2026 19:17

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5d6da1b. Configure here.

jsourcebot
jsourcebot previously approved these changes Aug 13, 2026
Base automatically changed from sou-1870-scoped-access-tokens to mainAugust 13, 2026 03:50
@mintlify

mintlifyBot commented Aug 13, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

ProjectStatusPreviewUpdated (UTC)
sourcebot🟢 ReadyView PreviewAug 13, 2026, 3:51 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 27: Move the PR `#1550` changelog entry from the released 5.1.6 section to
the bottom of the applicable [Unreleased] section, preserving its wording and
link.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 167f928b-27ba-467f-9cea-db589fbea7e1

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4447b and ffeb8c3.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • docs/api-reference/sourcebot-public.openapi.json
  • docs/docs.json
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.test.ts
  • packages/web/src/app/api/(server)/connections/listConnectionsApi.ts
  • packages/web/src/app/api/(server)/connections/route.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.test.ts
  • packages/web/src/app/api/(server)/repos/listReposApi.ts
  • packages/web/src/app/api/(server)/repos/route.ts
  • packages/web/src/lib/schemas.ts
  • packages/web/src/lib/types.ts
  • packages/web/src/openapi/publicApiDocument.ts
  • packages/web/src/openapi/publicApiSchemas.ts

Comment threadCHANGELOG.md Outdated
@brendan-kellam
brendan-kellam merged commit 9ae8901 into mainAug 13, 2026
12 of 13 checks passed
@brendan-kellam
brendan-kellam deleted the sou-1870-list-connections branch August 13, 2026 04:11
@github-actionsgithub-actionsBot mentioned this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@brendan-kellam@jsourcebot