Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
0da55e6
feat: improve Composio tool description with service categories and u…
sidneyswift Jan 12, 2026
29c7fb3
refactor: address PR review feedback
sidneyswift Jan 15, 2026
43a470c
Merge origin/test into composio-tool-router: resolve conflict in lib/…
sidneyswift Jan 19, 2026
50f75a6
refactor: use Zod schema validation for /api/connectors/authorize end…
sidneyswift Jan 19, 2026
b3a8f31
security: verify connector ownership before disconnect
sidneyswift Jan 19, 2026
376aab8
fix: add runtime validation for Composio session.tools() return value
sidneyswift Jan 19, 2026
1cc260a
refactor: use proper Vercel AI SDK types for Tool Router
sidneyswift Jan 19, 2026
90796fb
fix: support OAuth callbacks on Vercel preview deployments
sidneyswift Jan 19, 2026
9808865
fix: add test branch support for frontend URL
sidneyswift Jan 19, 2026
47cf4bf
fix: use correct test frontend URL pattern
sidneyswift Jan 19, 2026
d351e3c
refactor: simplify registerComposioTools per KISS principle
sidneyswift Jan 19, 2026
b74b074
refactor: use getCallToolResult directly per KISS principle
sidneyswift Jan 19, 2026
1cc3ec5
fix: use correct frontend port 3000 for local development
sidneyswift Jan 19, 2026
453f1bd
refactor: remove verbose comments from getFrontendBaseUrl
sidneyswift Jan 19, 2026
5a9d55e
refactor: simplify registerComposioTools to pass raw results
sidneyswift Jan 19, 2026
7bc18e0
docs: update composio tool description to mention Google Sheets
sidneyswift Jan 19, 2026
bdd98b7
feat: limit Composio Tool Router to Google Sheets only
sidneyswift Jan 19, 2026
b0cedbc
fix: get accountId from auth context instead of tool schema
sidneyswift Jan 19, 2026
9b9db79
docs: clarify accountId should come from auth, not input schemas
sidneyswift Jan 19, 2026
0643556
Merge remote-tracking branch 'origin/main' into composio-tool-router
sidneyswift Jan 20, 2026
ec38af2
refactor: remove old Google Sheets implementation, use Composio Tool …
sidneyswift Jan 20, 2026
aaed379
merge: pull latest from test branch
sweetmantech Jan 20, 2026
7590c3a
fix: revert frontend localhost port to 3000
sweetmantech Jan 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 0 additions & 61 deletions app/api/connectedAccounts/refresh/route.ts

This file was deleted.

14 changes: 7 additions & 7 deletions app/api/connectors/authorize/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";
import { getCorsHeaders } from "@/lib/networking/getCorsHeaders";
import { authorizeConnector } from "@/lib/composio/connectors";
import { getApiKeyAccountId } from "@/lib/auth/getApiKeyAccountId";
import { validateAccountIdHeaders } from "@/lib/accounts/validateAccountIdHeaders";
import { validateAuthorizeConnectorBody } from "@/lib/composio/connectors/validateAuthorizeConnectorBody";

/**
Expand All @@ -20,8 +20,8 @@ export async function OPTIONS() {
*
* Generate an OAuth authorization URL for a specific connector.
*
* Authentication: x-api-key header required.
* The account ID is inferred from the API key.
* Authentication: x-api-key OR Authorization Bearer token required.
* The account ID is inferred from the auth header.
*
* Request body:
* - connector: The connector slug, e.g., "googlesheets" (required)
Expand All @@ -33,12 +33,12 @@ export async function POST(request: NextRequest): Promise<NextResponse> {
const headers = getCorsHeaders();

try {
const accountIdOrError = await getApiKeyAccountId(request);
if (accountIdOrError instanceof NextResponse) {
return accountIdOrError;
const authResult = await validateAccountIdHeaders(request);
if (authResult instanceof NextResponse) {
return authResult;
}

const accountId = accountIdOrError;
const { accountId } = authResult;
const body = await request.json();

const validated = validateAuthorizeConnectorBody(body);
Expand Down
22 changes: 11 additions & 11 deletions app/api/connectors/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { getConnectors } from "@/lib/composio/connectors";
import { disconnectConnector } from "@/lib/composio/connectors/disconnectConnector";
import { validateDisconnectConnectorBody } from "@/lib/composio/connectors/validateDisconnectConnectorBody";
import { verifyConnectorOwnership } from "@/lib/composio/connectors/verifyConnectorOwnership";
import { getApiKeyAccountId } from "@/lib/auth/getApiKeyAccountId";
import { validateAccountIdHeaders } from "@/lib/accounts/validateAccountIdHeaders";

/**
* OPTIONS handler for CORS preflight requests.
Expand All @@ -22,20 +22,20 @@ export async function OPTIONS() {
*
* List all available connectors and their connection status for a user.
*
* Authentication: x-api-key header required.
* Authentication: x-api-key OR Authorization Bearer token required.
*
* @returns List of connectors with connection status
*/
export async function GET(request: NextRequest): Promise<NextResponse> {
const headers = getCorsHeaders();

try {
const accountIdOrError = await getApiKeyAccountId(request);
if (accountIdOrError instanceof NextResponse) {
return accountIdOrError;
const authResult = await validateAccountIdHeaders(request);
if (authResult instanceof NextResponse) {
return authResult;
}

const accountId = accountIdOrError;
const { accountId } = authResult;

const connectors = await getConnectors(accountId);

Expand All @@ -60,20 +60,20 @@ export async function GET(request: NextRequest): Promise<NextResponse> {
*
* Disconnect a connected account from Composio.
*
* Authentication: x-api-key header required.
* Authentication: x-api-key OR Authorization Bearer token required.
*
* Body: { connected_account_id: string }
*/
export async function DELETE(request: NextRequest): Promise<NextResponse> {
const headers = getCorsHeaders();

try {
const accountIdOrError = await getApiKeyAccountId(request);
if (accountIdOrError instanceof NextResponse) {
return accountIdOrError;
const authResult = await validateAccountIdHeaders(request);
if (authResult instanceof NextResponse) {
return authResult;
}

const accountId = accountIdOrError;
const { accountId } = authResult;
const body = await request.json();

const validated = validateDisconnectConnectorBody(body);
Expand Down
238 changes: 0 additions & 238 deletions lib/agents/googleSheetsAgent/__tests__/getGoogleSheetsTools.test.ts

This file was deleted.

Loading