The maxDuration=60 change was causing all API routes to hang/timeout
on Vercel deployments. While the Hobby plan limit is 60s, setting
maxDuration=60 in certain route files appears to cause a deployment
issue where no API routes respond.
Reverting to maxDuration=300 to restore functionality. The actual
runtime timeout will be enforced by Vercel's plan limits anyway.
- Update getCollectionCopyOptions to require username and slug params
- Update getAgentCopyOptions to require username param
- Add slug and username to public collections/agents API responses
- Remove deprecated /mcp/collections/{id} and /mcp/agents/{uid} URL formats
Routes with maxDuration=300 were silently failing on Vercel's edge
routing layer - requests never reached the serverless function (no
logs appeared). Vercel Hobby plan has a 60s max function duration.
Affected routes:
- /api/agents/[id]/conversation/[conversationId]
- /api/agents/[username]/[uid]/conversation/[conversationId]
- /api/mcp/[username]/[slug]/[transport]
The issue caused these routes to hang indefinitely until client timeout.
The distributed rate limiter (checkRateLimitDistributed) was causing
timeouts in production, likely due to @vercel/kv connection issues.
Switch to sync in-memory rate limiter (checkRateLimit) which works
reliably across all other endpoints.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The rate limiter was calling @vercel/kv without a timeout, which could
hang indefinitely if KV is not configured or responding. This adds a
2-second timeout to prevent requests from timing out.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The dashboard chat page was calling /api/agents/{uid}/conversation/...
but the only conversation route expected /api/agents/{username}/{uid}/...
This adds a new route at /api/agents/[id]/conversation/[conversationId]
that accepts agent ID directly, and updates the chat page to use it.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
TPMJS verification expects endpoints at /health and /execute-tool,
not at /api/health and /api/execute-tool. This adds the correct routes
while keeping the /api versions for backwards compatibility.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Key fixes:
- Use await result.stdout() / stderr() instead of result.stdout property
- Use sandbox.writeFiles([{ path, content: Buffer }]) correctly
- Use object form of runCommand with cmd, args, cwd, env
- Proper error handling and result parsing
- Replace community Deno runtime with @vercel/sandbox SDK
- Next.js API routes create ephemeral sandbox VMs per execution
- Each tool execution: create VM → npm install → run → cleanup
- node22 runtime in sandbox handles npm packages natively
- Region pinned to iad1 (only region with Sandbox support)
- Proper authentication support via EXECUTOR_API_KEY
This provides true isolation - each tool runs in its own VM that's
destroyed after execution. More secure than shared serverless.
- Replace Next.js app router with pure Deno API functions
- Use vercel-deno@3.0.0 community runtime for native HTTP imports
- Deno natively supports importing from esm.sh URLs
- Simplified template: just api/health.ts and api/execute-tool.ts
- Remove unnecessary React/Next.js dependencies
- Update README with new architecture documentation
This matches the Railway executor's Deno-based approach but runs on
the user's own Vercel account. The Deno runtime enables dynamic
imports from esm.sh without any special setup.
- Create comprehensive tutorial at /docs/tutorials/custom-executor
- Walk through from zero to running custom executor in 6 steps
- Cover prerequisites, Vercel deployment, environment config
- Include verification, testing, and connection to collections
- Add troubleshooting section for common issues
- Link tutorial from tutorials index and executors reference page
- Add executor configuration to Collection and Agent models in Prisma schema
- Create ExecutorConfigPanel component for selecting default or custom executors
- Add executor resolution logic with cascade (Agent → Collection → System Default)
- Create /api/executors/verify endpoint to test custom executor connectivity
- Add executor documentation page at /docs/executors with API specification
- Create deployable Vercel executor template in templates/vercel-executor/
- Update MCP handlers and agent tool execution to use configurable executors
- Add executor types and schemas to @tpmjs/types package
Users can now deploy their own executor instances and configure collections
or agents to use custom executors instead of the TPMJS default executor.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove old endpoints that have been replaced by pretty URL versions:
- /api/collections/[id]/mcp/[transport] → /api/mcp/[username]/[slug]/[transport]
- /api/agents/[id]/conversation/[conversationId] → /api/agents/[username]/[uid]/conversation/[conversationId]
Co-Authored-By: Claude <noreply@anthropic.com>
- Add /api/mcp/[username]/[slug]/[transport] endpoint for MCP servers
- Supports HTTP and SSE transports
- Uses username/slug format instead of collection UUID
- Maintains full JSON-RPC protocol support
- Add /api/agents/[username]/[uid]/conversation/[conversationId] endpoint
- Uses username/uid format instead of agent UUID
- Full SSE streaming support for AI responses
- Update collection detail page with new MCP URL section
- Shows HTTP and SSE transport URLs
- Includes Claude Desktop config snippet
- Copy-to-clipboard functionality
- Add fetchAgentByUsernameAndUidWithTools() to build-tools.ts
- Update sharing docs with new API endpoint URLs
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace bg-white with bg-surface for proper light/dark mode support
- bg-surface maps to white in light mode, dark gray in dark mode
- Fixes broken dark mode appearance from previous commit
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace bg-background with bg-white for form inputs and panel containers
- Fixes gray-on-gray contrast issues in light mode
- Updated pages: agent detail, agent chat, new agent, API keys settings
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace bg-background with bg-white for cards and panels across dashboard
- Add hover:shadow-sm for better visual feedback on interactive elements
- Apply fixes to: collections, agents, likes pages, and dashboard overview
- Cards now properly stand out against the light gray page background
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix chronological ordering by saving ASSISTANT message before TOOL messages
- Collect tool results during streaming, save after assistant message
- Add "Debug JSON" tab to view raw messages array
- Shows all message fields including toolCalls, toolResult, tokens
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Capture tool call inputs from onChunk and onStepFinish callbacks
- Store toolCalls array in ASSISTANT messages with proper format
- Update chat page to combine ASSISTANT toolCalls (input) with TOOL messages (output)
- Show complete tool call cards with both input args and output results
- Display token usage in assistant messages for debugging
- Handle pending tool calls from ASSISTANT messages without results
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- LikeButton now shows 'Sign in to like' tooltip instead of redirecting
- Added interactive LikeButton to tools table (was static display)
- All three public list pages (tools, collections, agents) now have like functionality
- /agents/[id]/chat/[chatId] instead of /agents/[id]/chat?c=...
- /dashboard/agents/[id]/chat/[chatId] instead of ?c=...
- Base chat routes redirect to new chat with generated ID
- Cleaner URL structure for bookmarking and sharing
- Public chat page: redirect to include ?c= parameter on mount
- Dashboard chat page: sync URL with active conversation ID
- New conversations get ID in URL immediately, not after first message
- Add Chat button to public agent detail page
- Redesign chat page with collapsible sidebar:
- Left sidebar shows agent config, tools, and collections
- Right side shows chat interface
- Toggle button to show/hide sidebar
- Sidebar displays provider, model, temperature, system prompt
- Links to individual tools and collections
- Update conversation API to support cursor-based pagination (before/after params)
- Default behavior now returns most recent messages first
- Add react-virtuoso for efficient virtualized message rendering
- Implement scroll-up loading of older messages
- Show loading indicator when fetching history
- Create public chat page at /agents/[id]/chat with unique conversation ID per page load
- Add Chat column to public agents table with link to start new conversations
- Full chat UI with streaming responses, tool call visualization, and error handling
- Uses agent owner's API keys so no authentication required for users
- Add isPublic field to form state and save handler
- Add Switch toggle in edit mode to control visibility
- Display public/private status in view mode with icon
- Add sonner for toast notifications
- Create CopyButton component for simple copy actions
- Create CopyDropdown component with entity-specific copy options
- Create PackageManagerSelector with localStorage persistence
- Redesign tools page with TableVirtuoso, sort by downloads/likes/recent/name
- Redesign collections page with TableVirtuoso and infinite scroll
- Redesign agents page with TableVirtuoso and infinite scroll
- All tables have fast client-side filtering and copy functionality
- docs: add clarifying comment for AI SDK provider imports on /docs and /sdk pages
- fix: remove duplicate footer on /docs page (was rendered in both page and root layout)
- fix: prevent "Official" badge from overflowing on mobile tool cards (/home)
- fix: center Specification/Full Example toggle buttons on mobile (/spec)
- fix: ecosystem diagram layout on mobile - increase height and reposition legend (/integrations)