Commit graph

208 commits

Author SHA1 Message Date
Ajax Davis
8230ab0eec feat: add transport parameter to MCP endpoint
- Move endpoint from /api/collections/[id]/mcp to /api/collections/[id]/mcp/[transport]
- Support both 'http' and 'sse' transports
- HTTP: standard JSON-RPC over HTTP
- SSE: Server-Sent Events for streaming responses
- Add test script for validating MCP endpoints
2026-01-02 10:50:34 +10:00
Ajax Davis
828801f463 feat: add MCP endpoint for collections
Add Model Context Protocol (MCP) server endpoint for collections,
allowing users to connect Claude Desktop, Cursor, and other MCP
clients to use tools from their collections.

- POST /api/collections/[id]/mcp - JSON-RPC endpoint for MCP
- GET /api/collections/[id]/mcp - Server info for discovery
- Tool name conversion (e.g., @tpmjs/hello → tpmjs-hello--helloWorldTool)
- Handlers for initialize, tools/list, tools/call methods
- Executes tools via existing sandbox executor

Only public collections are accessible (no auth required).
2026-01-02 04:25:33 +10:00
Ajax Davis
abd9682f5e fix: add AppHeader to dashboard pages for consistent navigation
- Add AppHeader component to dashboard main page
- Add AppHeader to collections list page (loading, error, and main states)
- Add AppHeader to collection detail page (loading, error, and main states)

Ensures top navigation menu is visible on all dashboard pages for
both authenticated and unauthenticated users.
2026-01-02 02:52:17 +10:00
Ajax Davis
137de1c353 feat: add collections feature for organizing tools
- Add Collection and CollectionTool models to Prisma schema
- Create Zod validation schemas for collections
- Implement full CRUD API routes for collections
- Add tool management endpoints (add/remove tools)
- Create UI components: CollectionCard, CollectionForm, CollectionList,
  AddToolSearch, CollectionToolList
- Add /dashboard/collections pages for list and detail views
- Add new icons to @tpmjs/ui: folder, plus, trash, edit, box, search,
  loader, arrowLeft, alertCircle, globe
- Add xs size variant to Icon component
- Add Collections link to dashboard page

Features:
- Full CRUD for named collections
- Public/private visibility toggle
- Tool search to add tools to collections
- Ownership-based access control
- Collection limit: 50 per user
- Tool limit: 100 per collection
2026-01-02 02:35:32 +10:00
Ajax Davis
f8740fb7ff fix: add biome-ignore comments and config overrides for lint issues
- Add ToolSearchResult interface with biome-ignore for dynamic tool types
- Add biome-ignore comments for UIMessage.parts type casting
- Add biome config overrides for complexity warnings in MessageBubble.tsx
- Add biome config override for MobileMenu.tsx a11y rule
- Add biome config override for railway-executor complexity
- Fix unused template literal in railway-executor
- All lint tasks now pass with 0 errors

🤖 Generated with [Claude Code](https://claude.ai/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-02 01:51:46 +10:00
Ajax Davis
e4b84fb1cd feat: add minimal header to auth pages
- Create AuthHeader component with logo and contextual auth link
- Show "Sign Up" on sign-in page and vice versa
- Keep centered form layout with header at top

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-02 01:28:04 +10:00
Ajax Davis
87a9517ec3 fix: check for __Secure- prefixed session cookie in middleware
better-auth uses __Secure- prefix for session cookies on HTTPS,
but middleware was only checking for the unprefixed cookie name

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-02 01:11:09 +10:00
Ajax Davis
499f163c31 fix: improve auth sign-in handling and cookie configuration
- Add onSuccess/onError callbacks to signIn.email() for better response handling
- Add trustedOrigins configuration for production domain
- Configure explicit cookie attributes (sameSite, secure, httpOnly)
- Enable session cookie caching for better performance
- Handle edge case where signIn returns neither data nor error

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-02 01:04:29 +10:00
Ajax Davis
522c198041 fix: add Prisma client to web app for Vercel monorepo compatibility
- Add @prisma/client and prisma as direct dependencies
- Add postinstall and build scripts to generate Prisma client
- Points to schema in packages/db
2026-01-02 00:37:00 +10:00
Ajax Davis
4451eddc91 fix: use custom domain for auth baseURL in production
VERCEL_URL returns deployment URL (tpmjs-xxx.vercel.app) not custom domain.
This was causing session cookies to be set for wrong domain.
Now prioritizes BETTER_AUTH_URL, then checks VERCEL_ENV=production to use tpmjs.com.
2026-01-02 00:12:55 +10:00
Ajax Davis
1c9a328929 fix: change label to span for display-only text in dashboard 2026-01-01 23:52:36 +10:00
Ajax Davis
b57d21ca65 fix: remove unused router import from auth pages 2026-01-01 23:43:18 +10:00
Ajax Davis
4f417af2ab fix: simplify auth client and use window.location for redirects 2026-01-01 23:33:44 +10:00
Ajax Davis
de41d42349 fix: use callbackURL and onSuccess/onError for Better Auth sign-in/sign-up 2026-01-01 23:07:59 +10:00
Ajax Davis
1d417d9a22 fix: auto-detect baseURL for Better Auth in production 2026-01-01 22:59:56 +10:00
Ajax Davis
25d74e5c2e fix: improve auth error logging and display 2026-01-01 22:46:47 +10:00
Ajax Davis
59ff53c5ba fix: lazy init Resend to avoid build-time errors 2026-01-01 22:43:39 +10:00
Ajax Davis
763650e976 fix: auto sign-in user after email verification 2026-01-01 22:33:09 +10:00
Ajax Davis
ed3a215ee8 feat: add sign in/dashboard links to header navigation
- Add Sign In button to desktop header (shows Dashboard when logged in)
- Add Sign In/Sign Up links to mobile menu
- Fix auth config to use BETTER_AUTH_SECRET and BETTER_AUTH_URL env vars

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-01 20:55:55 +10:00
Ajax Davis
6060492169 feat: add Better Auth with email/password authentication
- Add User, Session, Account, Verification models to Prisma schema
- Create auth configuration with Prisma adapter
- Add Resend email integration for verification emails
- Create sign-in, sign-up, and verify-email pages
- Create user dashboard with profile display
- Add middleware for /dashboard route protection
- Add better-auth and resend dependencies

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-01 20:45:10 +10:00
Ajax Davis
09fd0a5833 feat: add 55 new business tools and improve existing implementations
New tools added across multiple domains:
- Sales: lead-score, proposal-outline, objection-response
- Marketing: competitor-brief, campaign-brief, social-post-draft, email-subject-score, audience-persona, content-calendar-plan, pricing-page-copy
- HR: job-description-draft, interview-questions, performance-review-draft, onboarding-checklist, compensation-band, survey-analyze, org-chart-format, offer-letter-draft, exit-interview-summarize, policy-doc-format
- Legal: contract-clause-scan, nda-template-draft, tos-readability, risk-clause-highlight, invoice-terms-extract, gdpr-data-map, copyright-notice, trademark-check
- Finance: expense-categorize, invoice-data-extract, budget-variance, cash-flow-project, revenue-breakdown, ratio-analysis, tax-deduction-scan, reconciliation-match
- Customer Experience: feedback-themes, churn-risk-score, nps-analysis, ticket-categorize, response-template-suggest, health-score-calculate, renewal-forecast
- Education: lesson-plan-outline, quiz-generate, rubric-create, syllabus-format, progress-report-draft, learning-objective-write, curriculum-map

Also includes improvements to 68 existing tool implementations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-01 19:23:32 +10:00
Ajax Davis
d1aad1b3ea fix: move tools-export.json to public/ for Vercel compatibility 2026-01-01 17:46:36 +10:00
Ajax Davis
d00ab8afbb feat: add /tool-ideas page with 10K AI-generated tools
- Add virtualized list using react-virtuoso for smooth scrolling
- Filter by category, verb, quality score, and search
- Expandable cards with parameters, returns, AI guidance
- Add redirect from /tools-ideas to /tool-ideas

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-01 17:13:46 +10:00
Ajax Davis
1560f38f85 fix(slo-draft): add min/max constraints to target schema
Helps AI SDK validate that target percentages are between 0-100 before calling the tool
2026-01-01 10:59:36 +10:00
Ajax Davis
03405ad754 fix: improve tool search with camelCase tokenization and exact name matching
- Split camelCase/PascalCase into words (sitemapReadTool → sitemap read tool)
- Add +100 score boost for exact tool name matches
- Fixes issue where searching exact tool name returned 0 results
2026-01-01 10:51:51 +10:00
Ajax Davis
de97175d6c feat: rewrite integrations page with case study and simplified diagram
- List HLLM as primary integration with tpmjs.com
- Add BlocksAI case study showing how 106 tools were built
- Display 9 philosophy principles and 11 tool categories
- Simplify ecosystem diagram to show flow: BlocksAI → Tools → HLLM
- Fix lint issues with variable declarations
2026-01-01 10:00:21 +10:00
Ajax Davis
a42ec19b0b feat: rewrite integrations page to capture the novel AI infrastructure paradigm
- Frames HLLM, TPMJS, BlocksAI as three layers of an AI infrastructure stack
- HLLM = Orchestration layer (Kubernetes of AI)
- TPMJS = Distribution layer (npm of AI)
- BlocksAI = Semantic layer (TypeScript of AI)
- Articulates the paradigm shift from monolithic agents to composable systems
- Adds web stack analogy to explain separation of concerns
- Focuses on the 5 novel ideas that make this different
- Removes implementation details in favor of big picture vision
2026-01-01 02:42:43 +10:00
Ajax Davis
21f1818070 feat: add integrations page with ecosystem diagram
- Add /integrations page documenting HLLM, TPMJS, and BlocksAI relationships
- Create EcosystemDiagram D3.js component showing project connections
- Document HLLM multi-agent integration with TPMJS tools
- Document BlocksAI 3-layer validation pipeline
- Add shared technologies section (AI SDK, D3, Prisma)
- Include integration APIs table and data flow documentation
- Add Integrations link to desktop and mobile navigation
- Fix accessibility issue in MobileMenu backdrop

🤖 Generated with [Claude Code](https://claude.ai/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-01 02:17:05 +10:00
Ajax Davis
5d2096fb5d feat: add 100+ official TPMJS tools
Implements a comprehensive suite of AI SDK v6 tools across multiple categories:

- Research (5): page-brief, compare-pages, source-credibility, claim-checklist, timeline-from-text
- Web (10): fetch-text, links-catalog, extract-meta, extract-json-ld, redirect-trace, sitemap-read, rss-read, table-extract, robots-policy, url-normalize
- Data (15): csv-parse, csv-stringify, json-repair, json-schema-validate, yaml-parse, yaml-stringify, text-chunk, normalize-whitespace, dedupe-by-key, pivot, rows-filter, rows-sort, rows-group-aggregate, rows-join, schema-infer
- Doc (12): toc-generate, glossary-build, faq-from-text, executive-brief, decision-record-adr, prd-outline, acceptance-criteria, style-rewrite
- Eng (12): diff-text-unified, env-var-docs-generate, dependency-audit-lite, conventional-commit-suggest, markdown-lint-basic, test-case-generate, stacktrace-parse, release-notes, changelog-entry, release-checklist
- Security (7): redact-secrets, secret-scan-text, url-risk-heuristic, csp-compose, hardening-checklist-web, access-control-matrix, data-classification-heuristic
- Stats (9): effect-size-suite, bootstrap-ci, permutation-test, multiple-testing-adjust, linear-regression-ols, logistic-regression, time-series-decompose-lite, anomaly-detect-mad
- Ops (7): slo-draft, runbook-draft, postmortem-draft, postmortem-action-extractor, error-log-triage, coverage-tracker, monitoring-gap-analysis
- Agent (15): prompt-to-workflow-skeleton, workflow-validate-io, workflow-explain, workflow-cost-estimate, tool-call-accuracy-score, eval-fixture-build, guardrail-policy-draft, workflow-auto-repair, tool-selection-plan, novelty-score-workflow, workflow-variant-generate, config-normalize, recipe-*
- Utility (8): base64-encode, base64-decode, hash-text, regex-extract, template-render, date-parse, json-path-query, url-parse
- HTML (3): html-sanitize, html-to-markdown, markdown-to-html

All tools follow AI SDK v6 pattern with tool() and jsonSchema<T>().

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-31 22:55:56 +10:00
Ajax Davis
409d1232a6 refactor: redesign spec page with clean toggle between specification and example views
- Convert to client component with useState for view toggling
- Add "Specification" view with clean schema reference and sidebar
- Add "Full Example" view with complete package.json and tool code examples
- Remove explanatory content (moved elsewhere)
- Create layout.tsx for metadata since page is client component
- Reduce page complexity from 839 to 406 lines
2025-12-31 13:15:49 +10:00
Ajax Davis
fd4520dbf6 perf: reduce Neon compute usage with cron + caching optimizations
- Reduce cron frequency: changes 2min→4hr, keyword 15min→6hr, metrics hourly→daily
- Add Prisma directUrl for connection pooling support
- Add Vercel KV caching to /api/tools endpoint (graceful degradation if not configured)
- Add X-Cache header to indicate cache hit/miss
- Add NEON_COMPUTE_OPTIMIZATION.md with full strategy guide

These changes should reduce Neon CU usage from 100+ to ~20-30 CU-hrs/month.
2025-12-31 12:14:00 +10:00
Ajax Davis
26421be4e6 fix: URL-decode slug to handle scoped packages with encoded @ symbol
The @ in scoped package names was being URL-encoded to %40, causing
parseSlug to treat them as unscoped packages. Now we decode the slug
components first.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-29 22:16:15 +10:00
Ajax Davis
7b575a87cc fix: remove unused error variable in cache.ts
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-29 21:56:48 +10:00
Ajax Davis
2fb63ad506 fix: use two-step query to fix scoped package 404s on tool detail page
The relation filter `package: { npmPackageName }` was not working correctly.
Now first find the package, then find the tool by packageId.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-29 21:50:48 +10:00
Ajax Davis
5f7a9881ea fix: add force-dynamic to tool detail page to fix scoped package 404s
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-29 21:42:26 +10:00
Ajax Davis
fada29ecbe feat: add npm-like features to tool detail page and update keyword to tpmjs
- Add download trend sparkline chart showing 30-day download history
- Add bundle size component with minified/gzipped sizes via bundlephobia proxy
- Add more install commands: yarn, bun, deno (in addition to npm, pnpm)
- Change discovery keyword from "tpmjs-tool" to "tpmjs" across entire codebase
- Update sync endpoints to use new keyword
- Update all documentation and package.json files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-29 21:30:42 +10:00
Ajax Davis
f86794e463 feat: add OG images for all 78 tool pages
- Generate unique AI images for each tool using gpt-image-1-mini
- Update script to fetch tools from production API
- Images served from public/og/tool/{package-name}-{tool-name}.png

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-28 21:35:27 +10:00
Ajax Davis
1efb2623b3 feat: add build-time OG image generation with OpenAI
- Create generate-og-images.ts script for build-time image generation
- Generate 13 static page OG images using gpt-image-1-mini
- Update API route to serve pre-generated images from public/og/
- Add 30-day cache headers and fallback to default image
- Images regenerate if older than 30 days

Run with: pnpm --filter=@tpmjs/web generate-og

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-28 20:45:02 +10:00
Ajax Davis
289544f101 feat: upgrade to gpt-image-1 with comprehensive premium prompts
- Switch from gpt-image-1-mini to gpt-image-1 for higher quality
- Upgrade quality setting to 'high'
- Completely rewrite prompts with detailed visual concepts
- Add glassmorphism, neon accents, and premium SaaS aesthetic
- Include specific typography and composition instructions
- Add page-specific visual elements and iconography
2025-12-28 19:55:01 +10:00
Ajax Davis
c8806c49aa feat: improve OG images with landscape dimensions and text content
- Use 1536x1024 landscape format for proper OG aspect ratio
- Include page titles, taglines, and descriptions in generated images
- Add typography guidelines for consistent text rendering
- Upgrade quality from low to medium for better visuals
2025-12-28 19:34:08 +10:00
Ajax Davis
fb8cce3b38 fix: use base64 response format for gpt-image-1-mini 2025-12-28 19:16:18 +10:00
Ajax Davis
afc97c89a3 fix: use gpt-image-1-mini model for OG image generation 2025-12-28 19:13:23 +10:00
Ajax Davis
effd242b07 feat: add AI-generated OG images with OpenAI and Vercel Blob caching
- Add /api/og/[...path] endpoint for dynamic OG image generation
- Use OpenAI gpt-image-1 for image generation with page-specific prompts
- Cache images in Vercel Blob storage with 30-day TTL
- Extract page content for contextual prompts (static pages, tool details)
- Update all page metadata to use dynamic OG image URLs
- Refactor tool detail page to server component for generateMetadata support
- Fall back to static /public/og-image.png on generation errors
2025-12-28 18:21:11 +10:00
Ajax Davis
597fc2abf1 fix: wrap ORDER BY CASE with MIN() for PostgreSQL GROUP BY compatibility 2025-12-28 17:26:55 +10:00
Ajax Davis
61c89824f9 feat: add historical stats tracking with daily snapshots
- Add StatsSnapshot model to store daily registry metrics
- Create /api/sync/stats-snapshot endpoint for daily cron captures
- Add GET endpoint to retrieve historical snapshots (up to 365 days)
- Update stats page with Historical Trends section showing:
  - Tools & packages growth over time
  - Health status trends
  - Daily executions history
  - NPM downloads trends
- Add cron job running at midnight UTC daily
- Fix PostgreSQL GROUP BY issue in quality distribution query
2025-12-28 17:19:46 +10:00
Ajax Davis
606cf1714c fix: use explicit CASE in GROUP BY for PostgreSQL compatibility 2025-12-28 17:14:03 +10:00
Ajax Davis
c189bd366a feat: add comprehensive stats dashboard with D3 charts
- Add /stats page with animated D3 visualizations
- Create reusable chart components: AnimatedCounter, DonutChart, BarChart, AreaChart
- Expand stats API endpoints: /api/stats, /api/stats/health, /api/stats/executions, /api/stats/sync, /api/stats/tools
- Add Stats link to desktop and mobile navigation
- Add AI SDK v6 integration tests with vitest

Dashboard displays:
- Registry overview metrics with count-up animations
- Health distribution donut charts (import/execution)
- Quality score distribution
- Package tier breakdown
- Execution trends area chart with success/error series
- Token usage statistics
- Top categories bar chart
- Recent sync operations status
2025-12-28 17:08:19 +10:00
Ajax Davis
9855425be4 chore: upgrade AI SDK from beta to stable v6
- ai: 6.0.0-beta.124 → 6.0.3
- @ai-sdk/openai: 3.0.0-beta.74 → 3.0.1
- @ai-sdk/react: 3.0.0-beta.131 → 3.0.3

Breaking changes addressed:
- CoreMessage renamed to ModelMessage
- convertToModelMessages is now async (added await)
2025-12-28 16:17:41 +10:00
Ajax Davis
421405eee0 fix: properly resolve CSS variables for SVG colors and move tooltip outside diagram 2025-12-28 13:07:39 +10:00
Ajax Davis
62ec33f092 fix: improve diagram node contrast and move tooltip to top 2025-12-28 13:02:01 +10:00