- Fix Drawer, Modal, Popover, Tooltip, DropdownMenu imports and usage
- Use controlled component pattern with open/onClose props
- Fix Breadcrumbs to use BreadcrumbItem children instead of items prop
- Fix Slider onChange to handle ChangeEvent properly
- Fix Pagination prop name from currentPage to page
- Fix EmptyState icon from invalid "inbox" to valid "box"
- Fix StatCard props to use value (number), label, and subtext
- Add SWR package and global SWRProvider
- Create reusable hooks: useTools, useAgents, useCollections,
useStats, useLikeStatus, useBundleSize, useActivity
- Update tool-search page to use useTools hook
- Update agents page to use useAgents hook
- Update BundleSize component to use useBundleSize hook
- Update LikeButton with optimistic updates via useLikeStatus
- Add simple about page with creator info
- Add sticky left-hand navigation with scroll-spy for active section
- Add 20+ missing UI components to style guide showcase
- Include Accordion, Breadcrumbs, Drawer, Modal, Pagination, etc.
- Add state components: EmptyState, ErrorState, LoadingState
- Remove Playground link from header and mobile menu
- Comment out Architecture Diagram on homepage temporarily
- changelog: Replace puzzle and github SVGs with Icon, use Button for CTA
- sdk: Replace 4 github SVGs with Icon component
- Use design system tokens for version badge colors
- Replace raw <label> with Label component in auth pages, profile settings, tool-ideas
- Replace raw <button> with Button in CopyButton, CopyDropdown, ExecutorConfigPanel, PackageManagerSelector, ToolPlayground
- Replace raw <textarea> with Textarea in ToolPlayground
- Replace inline SVG with Icon component in error.tsx
The rollup-plugin-dts used by tsup runs out of memory with 54 entry points.
Split build into two steps:
1. tsup for ESM bundles
2. tsc --emitDeclarationOnly for .d.ts files
Add new reusable components:
- EmptyState: for empty list/search states with icon, title, description
- ErrorState: for error displays with optional retry button
- LoadingState: for loading states with Spinner and message
- PageHeader: for consistent page headers with title, description, actions
Apply components across pages:
- agents, collections, tool-search pages use new state components
- stats page uses LoadingState and ErrorState
- faq page uses Icon for chevrons
- health page uses Table components
- dashboard agent forms use Input, Select, Textarea, Label
- Replace custom div spinners with Spinner component
- Replace hardcoded color classes with design system tokens (error, success, warning, info)
- Replace raw HTML inputs with Input component from @tpmjs/ui
- Replace raw HTML buttons with Button component
- Add eye/eyeOff icons for password visibility toggle
- Add mail icon for verify-email page
- Fix text colors to use semantic tokens (text-error, text-success, text-warning)
- Fix background colors to use opacity tokens (bg-error/10, bg-success/10)
- All pages now properly support dark mode through CSS custom properties
New UI Components:
- Modal/Dialog with sizes, focus trap, backdrop
- Toast/Notification with variants, stacking, actions
- Drawer/Sheet with directions and widths
- Popover with triggers and positioning
- Tooltip with delays and placements
- DropdownMenu with items, dividers, keyboard nav
- Breadcrumbs with separators and collapsing
- Pagination with full/simple/minimal variants
- Accordion with single/multi expand modes
- Skeleton with text/avatar/card/table variants
- InstallSnippet with package manager toggle
- QualityScore with tier badges
- ToolCard for registry display
Design System Enhancements:
- Complete token specification (shadows, radius, z-index, opacity)
- Full dark mode palette in globals.css
- Updated component variants for dark mode support
Style Guide Expansion:
- Split into 21 modular section files
- Pattern library: navigation, forms, feedback, tables, search
- Governance: a11y checklists, content guidelines, icon system
- Interactive examples throughout
Claude Desktop enforces a 64 character limit on MCP tool names.
- Remove 'tpmjs-tools-' and 'tpmjs-' prefixes from package names
- Remove 'Tool' suffix from tool names
- Add fallback truncation if still too long
- Update parser to try all possible package/tool name combinations
The test was using ctx.auth.username from env vars, which may not match
the actual username of the API key owner. Now fetches the real username
via /api/user/profile endpoint before running MCP tests.
Add "Example Use Cases" section to collection pages that generates
practical workflow examples showing how tools can work together.
- Add useCases and useCasesGeneratedAt fields to Collection model
- Create use-cases-generator.ts using Vercel AI SDK with gpt-4.1-mini
- Add POST /api/collections/[id]/use-cases/generate endpoint
- Add AI_GENERATION_RATE_LIMIT (5 req/hour per IP)
- Create UseCasesSection component with generate/regenerate UI
- Generate 6 use cases: 3 simple (1-2 tools) + 3 complex (3-5 tools)
- Include useCases in public collection API response
Complete unsandbox API coverage with 7 total tools:
- executeCodeAsync: async code execution
- execute: sync code execution
- run: sync with shebang auto-detect
- runAsync: async with shebang auto-detect
- getJob: get job status/results
- listJobs: list all active jobs
- deleteJob: cancel a job
User messages now use plain text rendering instead of prose classes
to ensure proper contrast on the primary (blue) background. Assistant
messages continue using Streamdown with prose styling for markdown.
New tools for managing sprite URL access settings:
- sprites-url-get: Get the public URL and auth settings for a sprite
- sprites-url-set: Set URL auth to 'public' or 'sprite' (private)
Both published as @tpmjs/tools-sprites-url-get and @tpmjs/tools-sprites-url-set v0.1.0
Commands containing shell operators (&&, ||, |, ;, >, etc.) were being
parsed incorrectly, causing errors like "The update command takes no
arguments". Now detects shell operators and wraps the entire command
in `sh -c "..."` for proper execution.
The executor was using version: 'latest' which caused Deno to cache
old versions of packages. Now we pass the explicit version from the
database to ensure the correct version is always loaded.
Also fixed sprites-list to recognize 'cold' as a valid sprite status.
- Use query parameters instead of JSON body for cmd
- Parse command string into repeatable cmd params
- Handle binary response format (stdout=0x01, stderr=0x02, exit=0x03)
- Add shell command documentation to README
- Add README documentation for all 11 sprites packages
- Fix blocks.yml to be compatible with blocks CLI validator
- Add project wrapper and type fields to blocks.yml
- Bump sprites packages to v0.1.2
- Update TpmjsToolDefinitionSchema to only use 'name' field
- Add 'sandbox' as valid category for sprites tools
- Update all package.json files to use 'name' instead of 'exportName'
- Update documentation and source files accordingly
- Add 11 new sprites tools for sandbox/code-execution
- Move environment variables to dedicated tab on agent and collection pages
- Add URL query param support for deep linking to tabs (?tab=env-vars)
- Remove env vars from settings tab on both pages
- Rename "API Keys" card to "Platform API Keys" on dashboard overview
- Update description to be more specific about use case
- Add localhost:3002 to trusted origins for local development
- Reorganize sidebar into sections with headers (main items, Settings)
- Rename "API Keys" to "AI Provider Keys" with clear description
- Rename "TPMJS API Keys" to "Platform API Keys"
- Add info banners explaining the difference:
- AI Provider Keys: credentials for OpenAI, Anthropic, etc.
- Platform API Keys: authentication for TPMJS platform (tpmjs_sk_...)
- Update empty states with clearer messaging
- Use distinct icons (puzzle for AI providers, key for platform)
- Convert from table to card-based grid layout for better visual hierarchy
- Add search functionality for both agents and collections
- Add relative timestamps (e.g., "2h ago", "Yesterday")
- Display provider names with colored text for agents
- Add "Copy MCP URL" quick action for collections
- Improve empty states with more descriptive messaging
- Add loading skeletons that match new card design
- Show collection MCP readiness status
- Add help section explaining MCP integration
- Replace hardcoded bg-white with bg-surface across all dashboard pages
- Add welcome banner with quick actions on dashboard overview
- Improve quick action cards with better hover states and icons
- Enhance profile section with avatar initial and edit button
- Fix dark mode support in collections, executor config, and playground