@tpmjs/cli 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -0
  3. package/bin/run.js +0 -0
  4. package/dist/commands/agent/chat.js +7 -7
  5. package/dist/commands/agent/chat.js.map +1 -1
  6. package/dist/commands/agent/create.js +6 -6
  7. package/dist/commands/agent/create.js.map +1 -1
  8. package/dist/commands/agent/delete.js +9 -7
  9. package/dist/commands/agent/delete.js.map +1 -1
  10. package/dist/commands/agent/list.js +6 -6
  11. package/dist/commands/agent/list.js.map +1 -1
  12. package/dist/commands/agent/update.js +6 -6
  13. package/dist/commands/agent/update.js.map +1 -1
  14. package/dist/commands/auth/login.js +6 -6
  15. package/dist/commands/auth/login.js.map +1 -1
  16. package/dist/commands/auth/logout.js +4 -4
  17. package/dist/commands/auth/logout.js.map +1 -1
  18. package/dist/commands/auth/status.js +12 -9
  19. package/dist/commands/auth/status.js.map +1 -1
  20. package/dist/commands/auth/whoami.js +6 -6
  21. package/dist/commands/auth/whoami.js.map +1 -1
  22. package/dist/commands/collection/add.js +6 -6
  23. package/dist/commands/collection/add.js.map +1 -1
  24. package/dist/commands/collection/create.js +6 -6
  25. package/dist/commands/collection/create.js.map +1 -1
  26. package/dist/commands/collection/delete.js +7 -7
  27. package/dist/commands/collection/delete.js.map +1 -1
  28. package/dist/commands/collection/import.js +7 -7
  29. package/dist/commands/collection/import.js.map +1 -1
  30. package/dist/commands/collection/info.d.ts +17 -0
  31. package/dist/commands/collection/info.js +358 -0
  32. package/dist/commands/collection/info.js.map +1 -0
  33. package/dist/commands/collection/list.js +6 -6
  34. package/dist/commands/collection/list.js.map +1 -1
  35. package/dist/commands/collection/remove.js +7 -9
  36. package/dist/commands/collection/remove.js.map +1 -1
  37. package/dist/commands/collection/update.js +6 -6
  38. package/dist/commands/collection/update.js.map +1 -1
  39. package/dist/commands/doctor.js +7 -7
  40. package/dist/commands/doctor.js.map +1 -1
  41. package/dist/commands/mcp/config.js +4 -4
  42. package/dist/commands/mcp/config.js.map +1 -1
  43. package/dist/commands/mcp/serve.js +7 -7
  44. package/dist/commands/mcp/serve.js.map +1 -1
  45. package/dist/commands/playground.js +7 -7
  46. package/dist/commands/playground.js.map +1 -1
  47. package/dist/commands/publish/check.js +11 -11
  48. package/dist/commands/publish/check.js.map +1 -1
  49. package/dist/commands/publish/preview.js +4 -4
  50. package/dist/commands/publish/preview.js.map +1 -1
  51. package/dist/commands/run.d.ts +24 -0
  52. package/dist/commands/run.js +454 -0
  53. package/dist/commands/run.js.map +1 -0
  54. package/dist/commands/scenario/generate.js +6 -6
  55. package/dist/commands/scenario/generate.js.map +1 -1
  56. package/dist/commands/scenario/info.js +6 -6
  57. package/dist/commands/scenario/info.js.map +1 -1
  58. package/dist/commands/scenario/list.js +11 -11
  59. package/dist/commands/scenario/list.js.map +1 -1
  60. package/dist/commands/scenario/run.js +7 -7
  61. package/dist/commands/scenario/run.js.map +1 -1
  62. package/dist/commands/scenario/test.js +8 -8
  63. package/dist/commands/scenario/test.js.map +1 -1
  64. package/dist/commands/tool/execute.js +9 -7
  65. package/dist/commands/tool/execute.js.map +1 -1
  66. package/dist/commands/tool/info.js +16 -9
  67. package/dist/commands/tool/info.js.map +1 -1
  68. package/dist/commands/tool/init.js +7 -13
  69. package/dist/commands/tool/init.js.map +1 -1
  70. package/dist/commands/tool/search.js +7 -11
  71. package/dist/commands/tool/search.js.map +1 -1
  72. package/dist/commands/tool/trending.js +6 -6
  73. package/dist/commands/tool/trending.js.map +1 -1
  74. package/dist/commands/tool/validate.js +15 -9
  75. package/dist/commands/tool/validate.js.map +1 -1
  76. package/dist/commands/update.js +4 -4
  77. package/dist/commands/update.js.map +1 -1
  78. package/dist/hooks/init.js +1 -1
  79. package/dist/hooks/init.js.map +1 -1
  80. package/dist/index.js +6 -6
  81. package/dist/index.js.map +1 -1
  82. package/oclif.manifest.json +146 -1
  83. package/package.json +10 -12
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/config.ts","../../src/lib/api-client.ts","../../src/lib/output.ts","../../src/commands/playground.ts"],"names":[],"mappings":"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","file":"playground.js","sourcesContent":["import Conf from 'conf';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nexport interface TpmConfig {\n apiUrl?: string;\n defaultOutput?: 'human' | 'json';\n verbose?: boolean;\n analytics?: boolean;\n env?: Record<string, string>;\n}\n\nexport interface TpmCredentials {\n apiKey?: string;\n refreshToken?: string;\n expiresAt?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), '.tpmjs');\nconst CREDENTIALS_FILE = path.join(CONFIG_DIR, 'credentials.json');\nconst HISTORY_DIR = path.join(CONFIG_DIR, 'history');\n\n// Ensure config directory exists\nfunction ensureConfigDir(): void {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n// Config store using Conf\nconst configStore = new Conf<TpmConfig>({\n projectName: 'tpmjs',\n cwd: CONFIG_DIR,\n configName: 'config',\n defaults: {\n apiUrl: 'https://tpmjs.com/api',\n defaultOutput: 'human',\n verbose: false,\n analytics: false,\n },\n});\n\nexport function getConfig(): TpmConfig {\n return configStore.store;\n}\n\nexport function setConfig(config: Partial<TpmConfig>): void {\n for (const [key, value] of Object.entries(config)) {\n if (value !== undefined) {\n configStore.set(key, value);\n }\n }\n}\n\nexport function getConfigValue<K extends keyof TpmConfig>(key: K): TpmConfig[K] {\n return configStore.get(key);\n}\n\nexport function setConfigValue<K extends keyof TpmConfig>(\n key: K,\n value: TpmConfig[K]\n): void {\n configStore.set(key, value);\n}\n\nexport function resetConfig(): void {\n configStore.clear();\n}\n\n// Credentials management with secure file permissions\nexport function loadCredentials(): TpmCredentials | null {\n ensureConfigDir();\n\n if (!fs.existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(content) as TpmCredentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(credentials: TpmCredentials): void {\n ensureConfigDir();\n\n const content = JSON.stringify(credentials, null, 2);\n fs.writeFileSync(CREDENTIALS_FILE, content, { mode: 0o600 });\n}\n\nexport function deleteCredentials(): void {\n if (fs.existsSync(CREDENTIALS_FILE)) {\n fs.unlinkSync(CREDENTIALS_FILE);\n }\n}\n\nexport function hasCredentials(): boolean {\n const creds = loadCredentials();\n return creds !== null && !!creds.apiKey;\n}\n\n// Get API key from multiple sources (priority order)\nexport function getApiKey(): string | undefined {\n // 1. Environment variable\n if (process.env.TPMJS_API_KEY) {\n return process.env.TPMJS_API_KEY;\n }\n\n // 2. Credentials file\n const creds = loadCredentials();\n if (creds?.apiKey) {\n return creds.apiKey;\n }\n\n return undefined;\n}\n\n// Get API URL\nexport function getApiUrl(): string {\n return process.env.TPMJS_API_URL ?? getConfigValue('apiUrl') ?? 'https://tpmjs.com/api';\n}\n\n// History directory for conversation caching\nexport function getHistoryDir(): string {\n if (!fs.existsSync(HISTORY_DIR)) {\n fs.mkdirSync(HISTORY_DIR, { recursive: true, mode: 0o700 });\n }\n return HISTORY_DIR;\n}\n\n// Config directory path\nexport function getConfigDir(): string {\n ensureConfigDir();\n return CONFIG_DIR;\n}\n","import { getApiKey, getApiUrl } from './config.js';\n\nexport interface TpmClientOptions {\n baseUrl?: string;\n apiKey?: string;\n timeout?: number;\n}\n\nexport interface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n}\n\nexport interface PaginationOptions {\n limit?: number;\n offset?: number;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n}\n\n// Tool types\nexport interface Tool {\n id: string;\n name: string;\n slug: string;\n description: string;\n category: string;\n tier: string;\n qualityScore: number | null;\n importHealth: string;\n executionHealth: string;\n likeCount: number;\n npmPackageName: string;\n npmVersion: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n tools?: { name: string; description?: string }[];\n package?: {\n npmPackageName: string;\n category: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n };\n}\n\nexport interface ToolSearchOptions extends PaginationOptions {\n category?: string;\n query?: string;\n}\n\n// Agent types\nexport interface Agent {\n id: string;\n uid: string;\n name: string;\n description: string | null;\n provider: string;\n modelId: string;\n systemPrompt: string | null;\n temperature: number;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n collections: number;\n };\n}\n\nexport interface CreateAgentInput {\n name: string;\n uid?: string;\n description?: string;\n provider: string;\n modelId: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n collectionIds?: string[];\n toolIds?: string[];\n}\n\nexport interface UpdateAgentInput {\n name?: string;\n uid?: string;\n description?: string;\n provider?: string;\n modelId?: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n maxToolCallsPerTurn?: number;\n maxMessagesInContext?: number;\n}\n\n// Collection types\nexport interface Collection {\n id: string;\n name: string;\n slug: string | null;\n description: string | null;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n };\n}\n\nexport interface CreateCollectionInput {\n name: string;\n description?: string;\n isPublic: boolean;\n}\n\nexport interface UpdateCollectionInput {\n name?: string;\n description?: string;\n isPublic?: boolean;\n}\n\n// User types\nexport interface User {\n id: string;\n name: string | null;\n username: string | null;\n email: string;\n image: string | null;\n}\n\n// API Key types\nexport interface ApiKey {\n id: string;\n name: string;\n keyPrefix: string;\n scopes: string[];\n isActive: boolean;\n lastUsedAt: string | null;\n expiresAt: string | null;\n createdAt: string;\n}\n\n// Scenario types\nexport interface Scenario {\n id: string;\n collectionId: string | null;\n prompt: string;\n name: string | null;\n description: string | null;\n tags: string[];\n qualityScore: number;\n totalRuns: number;\n lastRunAt: string | null;\n lastRunStatus: string | null;\n consecutivePasses: number;\n consecutiveFails: number;\n createdAt: string;\n updatedAt: string;\n collection?: {\n id: string;\n name: string;\n slug: string | null;\n username: string | null;\n } | null;\n}\n\nexport interface ScenarioRun {\n id: string;\n status: string;\n success: boolean;\n evaluator: {\n model: string | null;\n verdict: string | null;\n reason: string | null;\n };\n assertions: unknown;\n usage: {\n inputTokens: number | null;\n outputTokens: number | null;\n totalTokens: number | null;\n executionTimeMs: number | null;\n };\n timestamps: {\n startedAt: string | null;\n completedAt: string | null;\n createdAt: string;\n };\n quotaRemaining?: number;\n}\n\nexport interface ScenarioListOptions extends PaginationOptions {\n collectionId?: string;\n tags?: string;\n sortBy?: 'qualityScore' | 'totalRuns' | 'createdAt' | 'lastRunAt';\n}\n\nexport interface CreateScenarioInput {\n collectionId: string;\n prompt: string;\n name?: string;\n description?: string;\n tags?: string[];\n}\n\nexport interface GenerateScenariosInput {\n count?: number;\n skipSimilarityCheck?: boolean;\n}\n\n// Stats types\nexport interface Stats {\n tools: {\n total: number;\n official: number;\n healthyImport: number;\n healthyExecution: number;\n };\n packages: {\n total: number;\n official: number;\n };\n categories: { name: string; count: number }[];\n}\n\nexport class TpmClient {\n private baseUrl: string;\n private apiKey: string | undefined;\n private timeout: number;\n\n constructor(options: TpmClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? getApiUrl();\n this.apiKey = options.apiKey ?? getApiKey();\n this.timeout = options.timeout ?? 30000;\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string>),\n };\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n const data = (await response.json()) as T & { message?: string; error?: string };\n\n if (!response.ok) {\n throw new ApiError(\n data.message || data.error || `HTTP ${response.status}`,\n response.status,\n data\n );\n }\n\n return data as T;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n // Health check\n async health(): Promise<{ status: string; timestamp: string }> {\n return this.request('/health');\n }\n\n // Stats\n async getStats(): Promise<ApiResponse<Stats>> {\n return this.request('/stats');\n }\n\n // Tools\n async searchTools(options: ToolSearchOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.query) params.set('q', options.query);\n if (options.category) params.set('category', options.category);\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools?${queryString}` : '/tools';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async getTool(packageName: string, toolName: string): Promise<ApiResponse<Tool>> {\n return this.request(\n `/tools/${encodeURIComponent(packageName)}/${encodeURIComponent(toolName)}`\n );\n }\n\n async getToolBySlug(slug: string): Promise<ApiResponse<Tool>> {\n // Search for the tool by slug\n const searchResult = await this.searchTools({ query: slug, limit: 1 });\n if (searchResult.data && searchResult.data.length > 0) {\n const tool = searchResult.data.find((t) => t.slug === slug) || searchResult.data[0];\n return { success: true, data: tool };\n }\n return { success: false, error: 'Tool not found' };\n }\n\n async getTrendingTools(options: PaginationOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools/trending?${queryString}` : '/tools/trending';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async validateTpmjsField(\n field: unknown\n ): Promise<ApiResponse<{ valid: boolean; tier: string | null; errors?: unknown[] }>> {\n return this.request('/tools/validate', {\n method: 'POST',\n body: JSON.stringify(field),\n });\n }\n\n async executeTool(slug: string, params: Record<string, unknown>): Promise<unknown> {\n return this.request(`/tools/${encodeURIComponent(slug)}/execute`, {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n async *executeToolStream(\n slug: string,\n params: Record<string, unknown>\n ): AsyncGenerator<{ type: string; data: string }> {\n const url = `${this.baseUrl}/tools/${encodeURIComponent(slug)}/execute`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n };\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ ...params, stream: true }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new ApiError(errorText || `HTTP ${response.status}`, response.status);\n }\n\n if (!response.body) {\n throw new ApiError('No response body', 0);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n yield { type: 'done', data: '' };\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') {\n yield { type: 'done', data: '' };\n return;\n }\n try {\n const parsed = JSON.parse(data);\n yield { type: parsed.type || 'text', data: parsed.content || parsed.data || data };\n } catch {\n yield { type: 'text', data };\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Agents\n async listAgents(options: PaginationOptions = {}): Promise<PaginatedResponse<Agent>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/agents?${queryString}` : '/agents';\n\n return this.request<PaginatedResponse<Agent>>(endpoint);\n }\n\n async getAgent(id: string): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`);\n }\n\n async createAgent(input: CreateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request('/agents', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateAgent(id: string, input: UpdateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteAgent(id: string): Promise<ApiResponse<void>> {\n return this.request(`/agents/${id}`, {\n method: 'DELETE',\n });\n }\n\n // Collections\n async listCollections(options: PaginationOptions = {}): Promise<PaginatedResponse<Collection>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/collections?${queryString}` : '/collections';\n\n return this.request<PaginatedResponse<Collection>>(endpoint);\n }\n\n async getCollection(id: string): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`);\n }\n\n async createCollection(input: CreateCollectionInput): Promise<ApiResponse<Collection>> {\n return this.request('/collections', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateCollection(\n id: string,\n input: UpdateCollectionInput\n ): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteCollection(id: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}`, {\n method: 'DELETE',\n });\n }\n\n async addToolsToCollection(id: string, toolIds: string[]): Promise<ApiResponse<void>> {\n // Add tools one by one (API doesn't support bulk)\n for (const toolId of toolIds) {\n await this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'POST',\n });\n }\n return { success: true };\n }\n\n async removeToolFromCollection(id: string, toolId: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'DELETE',\n });\n }\n\n // User\n async whoami(): Promise<ApiResponse<User>> {\n return this.request('/user/profile');\n }\n\n async listApiKeys(): Promise<ApiResponse<ApiKey[]>> {\n return this.request('/user/tpmjs-api-keys');\n }\n\n // Scenarios\n async listScenarios(options: ScenarioListOptions = {}): Promise<PaginatedResponse<Scenario>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n if (options.collectionId) params.set('collectionId', options.collectionId);\n if (options.tags) params.set('tags', options.tags);\n if (options.sortBy) params.set('sortBy', options.sortBy);\n\n const queryString = params.toString();\n const endpoint = queryString ? `/scenarios?${queryString}` : '/scenarios';\n\n return this.request<PaginatedResponse<Scenario>>(endpoint);\n }\n\n async listCollectionScenarios(\n collectionId: string,\n options: PaginationOptions = {}\n ): Promise<ApiResponse<{ scenarios: Scenario[] }>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/collections/${collectionId}/scenarios?${queryString}`\n : `/collections/${collectionId}/scenarios`;\n\n return this.request<ApiResponse<{ scenarios: Scenario[] }>>(endpoint);\n }\n\n async getScenario(id: string): Promise<ApiResponse<Scenario>> {\n return this.request(`/scenarios/${id}`);\n }\n\n async createScenario(input: CreateScenarioInput): Promise<ApiResponse<Scenario>> {\n return this.request('/scenarios', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async generateScenarios(\n collectionId: string,\n input: GenerateScenariosInput = {}\n ): Promise<ApiResponse<{ scenarios: { scenario: Scenario; similarity?: unknown }[] }>> {\n return this.request(`/collections/${collectionId}/scenarios/generate`, {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async runScenario(scenarioId: string): Promise<ApiResponse<ScenarioRun>> {\n return this.request(`/scenarios/${scenarioId}/run`, {\n method: 'POST',\n });\n }\n\n async getScenarioRuns(\n scenarioId: string,\n options: PaginationOptions = {}\n ): Promise<PaginatedResponse<ScenarioRun>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/scenarios/${scenarioId}/runs?${queryString}`\n : `/scenarios/${scenarioId}/runs`;\n\n return this.request<PaginatedResponse<ScenarioRun>>(endpoint);\n }\n\n // Check if authenticated\n isAuthenticated(): boolean {\n return !!this.apiKey;\n }\n}\n\n// Custom error class for API errors\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public data?: unknown\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\n// Singleton instance\nlet clientInstance: TpmClient | null = null;\n\nexport function getClient(options?: TpmClientOptions): TpmClient {\n if (!clientInstance || options) {\n clientInstance = new TpmClient(options);\n }\n return clientInstance;\n}\n","import Table from 'cli-table3';\nimport ora, { type Ora } from 'ora';\nimport pc from 'picocolors';\n\nexport interface OutputOptions {\n json?: boolean;\n verbose?: boolean;\n noColor?: boolean;\n}\n\nexport class OutputFormatter {\n private options: OutputOptions;\n\n constructor(options: OutputOptions = {}) {\n this.options = options;\n }\n\n // Output as JSON\n json(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n }\n\n // Output a table\n table<T extends Record<string, unknown>>(\n data: T[],\n columns: { key: keyof T; header: string; width?: number }[]\n ): void {\n if (this.options.json) {\n this.json(data);\n return;\n }\n\n const table = new Table({\n head: columns.map((col) => pc.bold(col.header)),\n colWidths: columns.map((col) => col.width ?? null),\n style: {\n head: [],\n border: [],\n },\n });\n\n for (const row of data) {\n table.push(columns.map((col) => String(row[col.key] ?? '')));\n }\n\n console.log(table.toString());\n }\n\n // Success message\n success(message: string): void {\n if (this.options.json) return;\n console.log(pc.green('✓'), message);\n }\n\n // Error message\n error(message: string, details?: string): void {\n if (this.options.json) {\n this.json({ error: message, details });\n return;\n }\n console.error(pc.red('✗'), message);\n if (details && this.options.verbose) {\n console.error(pc.dim(details));\n }\n }\n\n // Warning message\n warning(message: string): void {\n if (this.options.json) return;\n console.log(pc.yellow('⚠'), message);\n }\n\n // Info message\n info(message: string): void {\n if (this.options.json) return;\n console.log(pc.blue('ℹ'), message);\n }\n\n // Debug message (only in verbose mode)\n debug(message: string): void {\n if (this.options.json) return;\n if (this.options.verbose) {\n console.log(pc.dim(`[debug] ${message}`));\n }\n }\n\n // Plain text output\n text(message: string): void {\n if (this.options.json) return;\n console.log(message);\n }\n\n // Heading\n heading(text: string): void {\n if (this.options.json) return;\n console.log();\n console.log(pc.bold(pc.underline(text)));\n console.log();\n }\n\n // Subheading\n subheading(text: string): void {\n if (this.options.json) return;\n console.log(pc.bold(text));\n }\n\n // Key-value pair\n keyValue(key: string, value: string | number | boolean | undefined): void {\n if (this.options.json) return;\n console.log(`${pc.dim(key + ':')} ${value ?? pc.dim('(not set)')}`);\n }\n\n // List item\n listItem(text: string, indent = 0): void {\n if (this.options.json) return;\n const prefix = ' '.repeat(indent) + '•';\n console.log(`${prefix} ${text}`);\n }\n\n // Spinner\n spinner(message: string): Ora {\n return ora({\n text: message,\n isSilent: this.options.json,\n }).start();\n }\n\n // Blank line\n newLine(): void {\n if (this.options.json) return;\n console.log();\n }\n\n // Horizontal rule\n hr(): void {\n if (this.options.json) return;\n console.log(pc.dim('─'.repeat(50)));\n }\n\n // Alias for hr\n divider(): void {\n this.hr();\n }\n\n // Code block\n code(text: string, language?: string): void {\n if (this.options.json) {\n this.json({ code: text, language });\n return;\n }\n console.log(pc.dim('```' + (language ?? '')));\n console.log(text);\n console.log(pc.dim('```'));\n }\n\n // Highlight text\n highlight(text: string): string {\n return pc.cyan(text);\n }\n\n // Dim text\n dim(text: string): string {\n return pc.dim(text);\n }\n\n // Bold text\n bold(text: string): string {\n return pc.bold(text);\n }\n\n // Link (just returns text in terminal)\n link(text: string, url: string): string {\n // OSC 8 hyperlink support for modern terminals\n return `\\x1b]8;;${url}\\x07${pc.underline(pc.blue(text))}\\x1b]8;;\\x07`;\n }\n\n // Color helpers\n green(text: string): string {\n return pc.green(text);\n }\n\n red(text: string): string {\n return pc.red(text);\n }\n\n yellow(text: string): string {\n return pc.yellow(text);\n }\n\n blue(text: string): string {\n return pc.blue(text);\n }\n\n cyan(text: string): string {\n return pc.cyan(text);\n }\n}\n\n// Convenience function to create formatter from command flags\nexport function createOutput(flags: { json?: boolean; verbose?: boolean }): OutputFormatter {\n return new OutputFormatter({\n json: flags.json,\n verbose: flags.verbose,\n });\n}\n","import { Command, Flags } from '@oclif/core';\nimport * as readline from 'node:readline';\nimport { getClient } from '../lib/api-client.js';\nimport { createOutput } from '../lib/output.js';\n\nexport default class Playground extends Command {\n static description = 'Interactive playground for testing tools';\n\n static examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --tool firecrawl-scrape',\n '<%= config.bin %> <%= command.id %> --web',\n ];\n\n static flags = {\n tool: Flags.string({\n char: 't',\n description: 'Start with a specific tool selected',\n }),\n web: Flags.boolean({\n char: 'w',\n description: 'Open the web playground instead',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show verbose output',\n default: false,\n }),\n };\n\n private rl?: readline.Interface;\n private client = getClient();\n private selectedTool?: string;\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Playground);\n const output = createOutput(flags);\n\n if (flags.web) {\n output.info('Opening web playground...');\n const open = (await import('open')).default;\n await open('https://tpmjs.com/playground');\n return;\n }\n\n this.selectedTool = flags.tool;\n\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n output.heading('TPMJS Playground');\n output.text('');\n output.text('Commands:');\n output.listItem('.help - Show this help');\n output.listItem('.tools - List available tools');\n output.listItem('.select - Select a tool to use');\n output.listItem('.info - Show info about selected tool');\n output.listItem('.clear - Clear the screen');\n output.listItem('.exit - Exit the playground');\n output.text('');\n\n if (this.selectedTool) {\n output.info(`Selected tool: ${this.selectedTool}`);\n } else {\n output.text('No tool selected. Use .select to choose a tool.');\n }\n\n output.text('');\n output.text('Enter JSON input to execute the selected tool.');\n output.divider();\n\n await this.repl(output, flags.verbose);\n }\n\n private async repl(output: ReturnType<typeof createOutput>, verbose: boolean): Promise<void> {\n const prompt = () => {\n const prefix = this.selectedTool ? `[${this.selectedTool}]` : '[no tool]';\n this.rl?.question(`${prefix} > `, async (input) => {\n const trimmed = input.trim();\n\n if (!trimmed) {\n prompt();\n return;\n }\n\n if (trimmed.startsWith('.')) {\n await this.handleCommand(trimmed, output, verbose);\n if (trimmed !== '.exit') {\n prompt();\n }\n return;\n }\n\n // Try to execute as JSON input\n if (!this.selectedTool) {\n output.warning('No tool selected. Use .select to choose a tool first.');\n prompt();\n return;\n }\n\n try {\n const params = JSON.parse(trimmed);\n await this.executeTool(params, output, verbose);\n } catch {\n output.error('Invalid JSON input. Enter valid JSON or use a command (.help)');\n }\n\n prompt();\n });\n };\n\n prompt();\n\n // Keep running until exit\n await new Promise<void>((resolve) => {\n this.rl?.on('close', resolve);\n });\n }\n\n private async handleCommand(\n command: string,\n output: ReturnType<typeof createOutput>,\n verbose: boolean\n ): Promise<void> {\n const [cmd, ...args] = command.split(/\\s+/);\n\n switch (cmd) {\n case '.help':\n output.text('');\n output.text('Commands:');\n output.listItem('.help - Show this help');\n output.listItem('.tools - List available tools');\n output.listItem('.select <tool> - Select a tool to use');\n output.listItem('.info - Show info about selected tool');\n output.listItem('.clear - Clear the screen');\n output.listItem('.exit - Exit the playground');\n output.text('');\n output.text('To execute a tool, enter JSON input:');\n output.text(' {\"url\": \"https://example.com\"}');\n output.text('');\n break;\n\n case '.tools':\n await this.listTools(output);\n break;\n\n case '.select':\n if (args.length === 0) {\n output.warning('Usage: .select <tool-slug>');\n } else {\n this.selectedTool = args[0];\n output.success(`Selected: ${this.selectedTool}`);\n }\n break;\n\n case '.info':\n await this.showToolInfo(output, verbose);\n break;\n\n case '.clear':\n console.clear();\n break;\n\n case '.exit':\n output.info('Goodbye!');\n this.rl?.close();\n break;\n\n default:\n output.warning(`Unknown command: ${cmd}. Type .help for available commands.`);\n }\n }\n\n private async listTools(output: ReturnType<typeof createOutput>): Promise<void> {\n const spinner = output.spinner('Loading tools...');\n\n try {\n const response = await this.client.getTrendingTools({ limit: 20 });\n\n spinner.stop();\n\n if (!response.data || response.data.length === 0) {\n output.error('No tools found');\n return;\n }\n\n output.text('');\n output.text('Available tools:');\n\n for (const tool of response.data) {\n output.listItem(`${tool.slug} - ${tool.name}`);\n }\n\n output.text('');\n output.text('Use .select <slug> to select a tool');\n } catch {\n spinner.fail('Failed to load tools');\n }\n }\n\n private async showToolInfo(\n output: ReturnType<typeof createOutput>,\n verbose: boolean\n ): Promise<void> {\n if (!this.selectedTool) {\n output.warning('No tool selected');\n return;\n }\n\n const spinner = output.spinner('Loading tool info...');\n\n try {\n const response = await this.client.getToolBySlug(this.selectedTool);\n\n spinner.stop();\n\n if (!response.success || !response.data) {\n output.error('Tool not found');\n return;\n }\n\n const tool = response.data;\n\n output.text('');\n output.heading(tool.name);\n output.text(`Slug: ${tool.slug}`);\n output.text(`Category: ${tool.category}`);\n output.text(`Version: ${tool.npmVersion}`);\n output.text('');\n output.text('Description:');\n output.text(` ${tool.description || '(none)'}`);\n\n if (tool.inputSchema) {\n output.text('');\n output.text('Input Schema:');\n output.text(JSON.stringify(tool.inputSchema, null, 2));\n }\n\n if (verbose && tool.tools && tool.tools.length > 0) {\n output.text('');\n output.text('Available operations:');\n for (const t of tool.tools) {\n output.listItem(`${t.name}: ${t.description || ''}`);\n }\n }\n\n output.text('');\n } catch {\n spinner.fail('Failed to load tool info');\n }\n }\n\n private async executeTool(\n params: Record<string, unknown>,\n output: ReturnType<typeof createOutput>,\n verbose: boolean\n ): Promise<void> {\n if (!this.selectedTool) {\n output.warning('No tool selected');\n return;\n }\n\n const spinner = output.spinner('Executing...');\n\n try {\n const result = await this.client.executeTool(this.selectedTool, params);\n\n spinner.stop();\n\n output.success('Result:');\n output.text(JSON.stringify(result, null, 2));\n } catch (error) {\n spinner.fail('Execution failed');\n output.error(\n error instanceof Error ? error.message : 'Unknown error',\n verbose ? String(error) : undefined\n );\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/config.ts","../../src/lib/api-client.ts","../../src/lib/output.ts","../../src/commands/playground.ts"],"names":[],"mappings":"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","file":"playground.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport Conf from 'conf';\n\nexport interface TpmConfig {\n apiUrl?: string;\n defaultOutput?: 'human' | 'json';\n verbose?: boolean;\n analytics?: boolean;\n env?: Record<string, string>;\n}\n\nexport interface TpmCredentials {\n apiKey?: string;\n refreshToken?: string;\n expiresAt?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), '.tpmjs');\nconst CREDENTIALS_FILE = path.join(CONFIG_DIR, 'credentials.json');\nconst HISTORY_DIR = path.join(CONFIG_DIR, 'history');\n\n// Ensure config directory exists\nfunction ensureConfigDir(): void {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n// Config store using Conf\nconst configStore = new Conf<TpmConfig>({\n projectName: 'tpmjs',\n cwd: CONFIG_DIR,\n configName: 'config',\n defaults: {\n apiUrl: 'https://tpmjs.com/api',\n defaultOutput: 'human',\n verbose: false,\n analytics: false,\n },\n});\n\nexport function getConfig(): TpmConfig {\n return configStore.store;\n}\n\nexport function setConfig(config: Partial<TpmConfig>): void {\n for (const [key, value] of Object.entries(config)) {\n if (value !== undefined) {\n configStore.set(key, value);\n }\n }\n}\n\nexport function getConfigValue<K extends keyof TpmConfig>(key: K): TpmConfig[K] {\n return configStore.get(key);\n}\n\nexport function setConfigValue<K extends keyof TpmConfig>(key: K, value: TpmConfig[K]): void {\n configStore.set(key, value);\n}\n\nexport function resetConfig(): void {\n configStore.clear();\n}\n\n// Credentials management with secure file permissions\nexport function loadCredentials(): TpmCredentials | null {\n ensureConfigDir();\n\n if (!fs.existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(content) as TpmCredentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(credentials: TpmCredentials): void {\n ensureConfigDir();\n\n const content = JSON.stringify(credentials, null, 2);\n fs.writeFileSync(CREDENTIALS_FILE, content, { mode: 0o600 });\n}\n\nexport function deleteCredentials(): void {\n if (fs.existsSync(CREDENTIALS_FILE)) {\n fs.unlinkSync(CREDENTIALS_FILE);\n }\n}\n\nexport function hasCredentials(): boolean {\n const creds = loadCredentials();\n return creds !== null && !!creds.apiKey;\n}\n\n// Get API key from multiple sources (priority order)\nexport function getApiKey(): string | undefined {\n // 1. Environment variable\n if (process.env.TPMJS_API_KEY) {\n return process.env.TPMJS_API_KEY;\n }\n\n // 2. Credentials file\n const creds = loadCredentials();\n if (creds?.apiKey) {\n return creds.apiKey;\n }\n\n return undefined;\n}\n\n// Get API URL\nexport function getApiUrl(): string {\n return process.env.TPMJS_API_URL ?? getConfigValue('apiUrl') ?? 'https://tpmjs.com/api';\n}\n\n// History directory for conversation caching\nexport function getHistoryDir(): string {\n if (!fs.existsSync(HISTORY_DIR)) {\n fs.mkdirSync(HISTORY_DIR, { recursive: true, mode: 0o700 });\n }\n return HISTORY_DIR;\n}\n\n// Config directory path\nexport function getConfigDir(): string {\n ensureConfigDir();\n return CONFIG_DIR;\n}\n","import { getApiKey, getApiUrl } from './config.js';\n\nexport interface TpmClientOptions {\n baseUrl?: string;\n apiKey?: string;\n timeout?: number;\n}\n\nexport interface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n}\n\nexport interface PaginationOptions {\n limit?: number;\n offset?: number;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n}\n\n// Tool types\nexport interface Tool {\n id: string;\n name: string;\n slug: string;\n description: string;\n category: string;\n tier: string;\n qualityScore: number | null;\n importHealth: string;\n executionHealth: string;\n likeCount: number;\n npmPackageName: string;\n npmVersion: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n tools?: { name: string; description?: string }[];\n package?: {\n npmPackageName: string;\n category: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n };\n}\n\nexport interface ToolSearchOptions extends PaginationOptions {\n category?: string;\n query?: string;\n}\n\n// Agent types\nexport interface Agent {\n id: string;\n uid: string;\n name: string;\n description: string | null;\n provider: string;\n modelId: string;\n systemPrompt: string | null;\n temperature: number;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n collections: number;\n };\n}\n\nexport interface CreateAgentInput {\n name: string;\n uid?: string;\n description?: string;\n provider: string;\n modelId: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n collectionIds?: string[];\n toolIds?: string[];\n}\n\nexport interface UpdateAgentInput {\n name?: string;\n uid?: string;\n description?: string;\n provider?: string;\n modelId?: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n maxToolCallsPerTurn?: number;\n maxMessagesInContext?: number;\n}\n\n// Collection types\nexport interface Collection {\n id: string;\n name: string;\n slug: string | null;\n description: string | null;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n };\n}\n\nexport interface CreateCollectionInput {\n name: string;\n description?: string;\n isPublic: boolean;\n}\n\nexport interface UpdateCollectionInput {\n name?: string;\n description?: string;\n isPublic?: boolean;\n}\n\n// User types\nexport interface User {\n id: string;\n name: string | null;\n username: string | null;\n email: string;\n image: string | null;\n}\n\n// API Key types\nexport interface ApiKey {\n id: string;\n name: string;\n keyPrefix: string;\n scopes: string[];\n isActive: boolean;\n lastUsedAt: string | null;\n expiresAt: string | null;\n createdAt: string;\n}\n\n// Scenario types\nexport interface Scenario {\n id: string;\n collectionId: string | null;\n prompt: string;\n name: string | null;\n description: string | null;\n tags: string[];\n qualityScore: number;\n totalRuns: number;\n lastRunAt: string | null;\n lastRunStatus: string | null;\n consecutivePasses: number;\n consecutiveFails: number;\n createdAt: string;\n updatedAt: string;\n collection?: {\n id: string;\n name: string;\n slug: string | null;\n username: string | null;\n } | null;\n}\n\nexport interface ScenarioRun {\n id: string;\n status: string;\n success: boolean;\n evaluator: {\n model: string | null;\n verdict: string | null;\n reason: string | null;\n };\n assertions: unknown;\n usage: {\n inputTokens: number | null;\n outputTokens: number | null;\n totalTokens: number | null;\n executionTimeMs: number | null;\n };\n timestamps: {\n startedAt: string | null;\n completedAt: string | null;\n createdAt: string;\n };\n quotaRemaining?: number;\n}\n\nexport interface ScenarioListOptions extends PaginationOptions {\n collectionId?: string;\n tags?: string;\n sortBy?: 'qualityScore' | 'totalRuns' | 'createdAt' | 'lastRunAt';\n}\n\nexport interface CreateScenarioInput {\n collectionId: string;\n prompt: string;\n name?: string;\n description?: string;\n tags?: string[];\n}\n\nexport interface GenerateScenariosInput {\n count?: number;\n skipSimilarityCheck?: boolean;\n}\n\n// Stats types\nexport interface Stats {\n tools: {\n total: number;\n official: number;\n healthyImport: number;\n healthyExecution: number;\n };\n packages: {\n total: number;\n official: number;\n };\n categories: { name: string; count: number }[];\n}\n\nexport class TpmClient {\n private baseUrl: string;\n private apiKey: string | undefined;\n private timeout: number;\n\n constructor(options: TpmClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? getApiUrl();\n this.apiKey = options.apiKey ?? getApiKey();\n this.timeout = options.timeout ?? 30000;\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string>),\n };\n\n if (this.apiKey) {\n headers.Authorization = `Bearer ${this.apiKey}`;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n const data = (await response.json()) as T & { message?: string; error?: string };\n\n if (!response.ok) {\n throw new ApiError(\n data.message || data.error || `HTTP ${response.status}`,\n response.status,\n data\n );\n }\n\n return data as T;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n // Health check\n async health(): Promise<{ status: string; timestamp: string }> {\n return this.request('/health');\n }\n\n // Stats\n async getStats(): Promise<ApiResponse<Stats>> {\n return this.request('/stats');\n }\n\n // Tools\n async searchTools(options: ToolSearchOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.query) params.set('q', options.query);\n if (options.category) params.set('category', options.category);\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools?${queryString}` : '/tools';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async getTool(packageName: string, toolName: string): Promise<ApiResponse<Tool>> {\n return this.request(\n `/tools/${encodeURIComponent(packageName)}/${encodeURIComponent(toolName)}`\n );\n }\n\n async getToolBySlug(slug: string): Promise<ApiResponse<Tool>> {\n // Search for the tool by slug\n const searchResult = await this.searchTools({ query: slug, limit: 1 });\n if (searchResult.data && searchResult.data.length > 0) {\n const tool = searchResult.data.find((t) => t.slug === slug) || searchResult.data[0];\n return { success: true, data: tool };\n }\n return { success: false, error: 'Tool not found' };\n }\n\n async getTrendingTools(options: PaginationOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools/trending?${queryString}` : '/tools/trending';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async validateTpmjsField(\n field: unknown\n ): Promise<ApiResponse<{ valid: boolean; tier: string | null; errors?: unknown[] }>> {\n return this.request('/tools/validate', {\n method: 'POST',\n body: JSON.stringify(field),\n });\n }\n\n async executeTool(slug: string, params: Record<string, unknown>): Promise<unknown> {\n return this.request(`/tools/${encodeURIComponent(slug)}/execute`, {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n async *executeToolStream(\n slug: string,\n params: Record<string, unknown>\n ): AsyncGenerator<{ type: string; data: string }> {\n const url = `${this.baseUrl}/tools/${encodeURIComponent(slug)}/execute`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n };\n\n if (this.apiKey) {\n headers.Authorization = `Bearer ${this.apiKey}`;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ ...params, stream: true }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new ApiError(errorText || `HTTP ${response.status}`, response.status);\n }\n\n if (!response.body) {\n throw new ApiError('No response body', 0);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n yield { type: 'done', data: '' };\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') {\n yield { type: 'done', data: '' };\n return;\n }\n try {\n const parsed = JSON.parse(data);\n yield { type: parsed.type || 'text', data: parsed.content || parsed.data || data };\n } catch {\n yield { type: 'text', data };\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Agents\n async listAgents(options: PaginationOptions = {}): Promise<PaginatedResponse<Agent>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/agents?${queryString}` : '/agents';\n\n return this.request<PaginatedResponse<Agent>>(endpoint);\n }\n\n async getAgent(id: string): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`);\n }\n\n async createAgent(input: CreateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request('/agents', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateAgent(id: string, input: UpdateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteAgent(id: string): Promise<ApiResponse<void>> {\n return this.request(`/agents/${id}`, {\n method: 'DELETE',\n });\n }\n\n // Collections\n async listCollections(options: PaginationOptions = {}): Promise<PaginatedResponse<Collection>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/collections?${queryString}` : '/collections';\n\n return this.request<PaginatedResponse<Collection>>(endpoint);\n }\n\n async getCollection(id: string): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`);\n }\n\n async createCollection(input: CreateCollectionInput): Promise<ApiResponse<Collection>> {\n return this.request('/collections', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateCollection(\n id: string,\n input: UpdateCollectionInput\n ): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteCollection(id: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}`, {\n method: 'DELETE',\n });\n }\n\n async addToolsToCollection(id: string, toolIds: string[]): Promise<ApiResponse<void>> {\n // Add tools one by one (API doesn't support bulk)\n for (const toolId of toolIds) {\n await this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'POST',\n });\n }\n return { success: true };\n }\n\n async removeToolFromCollection(id: string, toolId: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'DELETE',\n });\n }\n\n // User\n async whoami(): Promise<ApiResponse<User>> {\n return this.request('/user/profile');\n }\n\n async listApiKeys(): Promise<ApiResponse<ApiKey[]>> {\n return this.request('/user/tpmjs-api-keys');\n }\n\n // Scenarios\n async listScenarios(options: ScenarioListOptions = {}): Promise<PaginatedResponse<Scenario>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n if (options.collectionId) params.set('collectionId', options.collectionId);\n if (options.tags) params.set('tags', options.tags);\n if (options.sortBy) params.set('sortBy', options.sortBy);\n\n const queryString = params.toString();\n const endpoint = queryString ? `/scenarios?${queryString}` : '/scenarios';\n\n return this.request<PaginatedResponse<Scenario>>(endpoint);\n }\n\n async listCollectionScenarios(\n collectionId: string,\n options: PaginationOptions = {}\n ): Promise<ApiResponse<{ scenarios: Scenario[] }>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/collections/${collectionId}/scenarios?${queryString}`\n : `/collections/${collectionId}/scenarios`;\n\n return this.request<ApiResponse<{ scenarios: Scenario[] }>>(endpoint);\n }\n\n async getScenario(id: string): Promise<ApiResponse<Scenario>> {\n return this.request(`/scenarios/${id}`);\n }\n\n async createScenario(input: CreateScenarioInput): Promise<ApiResponse<Scenario>> {\n return this.request('/scenarios', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async generateScenarios(\n collectionId: string,\n input: GenerateScenariosInput = {}\n ): Promise<ApiResponse<{ scenarios: { scenario: Scenario; similarity?: unknown }[] }>> {\n return this.request(`/collections/${collectionId}/scenarios/generate`, {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async runScenario(scenarioId: string): Promise<ApiResponse<ScenarioRun>> {\n return this.request(`/scenarios/${scenarioId}/run`, {\n method: 'POST',\n });\n }\n\n async getScenarioRuns(\n scenarioId: string,\n options: PaginationOptions = {}\n ): Promise<PaginatedResponse<ScenarioRun>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/scenarios/${scenarioId}/runs?${queryString}`\n : `/scenarios/${scenarioId}/runs`;\n\n return this.request<PaginatedResponse<ScenarioRun>>(endpoint);\n }\n\n // Check if authenticated\n isAuthenticated(): boolean {\n return !!this.apiKey;\n }\n}\n\n// Custom error class for API errors\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public data?: unknown\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\n// Singleton instance\nlet clientInstance: TpmClient | null = null;\n\nexport function getClient(options?: TpmClientOptions): TpmClient {\n if (!clientInstance || options) {\n clientInstance = new TpmClient(options);\n }\n return clientInstance;\n}\n","import Table from 'cli-table3';\nimport ora, { type Ora } from 'ora';\nimport pc from 'picocolors';\n\nexport interface OutputOptions {\n json?: boolean;\n verbose?: boolean;\n noColor?: boolean;\n}\n\nexport class OutputFormatter {\n private options: OutputOptions;\n\n constructor(options: OutputOptions = {}) {\n this.options = options;\n }\n\n // Output as JSON\n json(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n }\n\n // Output a table\n table<T extends Record<string, unknown>>(\n data: T[],\n columns: { key: keyof T; header: string; width?: number }[]\n ): void {\n if (this.options.json) {\n this.json(data);\n return;\n }\n\n const table = new Table({\n head: columns.map((col) => pc.bold(col.header)),\n colWidths: columns.map((col) => col.width ?? null),\n style: {\n head: [],\n border: [],\n },\n });\n\n for (const row of data) {\n table.push(columns.map((col) => String(row[col.key] ?? '')));\n }\n\n console.log(table.toString());\n }\n\n // Success message\n success(message: string): void {\n if (this.options.json) return;\n console.log(pc.green('✓'), message);\n }\n\n // Error message\n error(message: string, details?: string): void {\n if (this.options.json) {\n this.json({ error: message, details });\n return;\n }\n console.error(pc.red('✗'), message);\n if (details && this.options.verbose) {\n console.error(pc.dim(details));\n }\n }\n\n // Warning message\n warning(message: string): void {\n if (this.options.json) return;\n console.log(pc.yellow('⚠'), message);\n }\n\n // Info message\n info(message: string): void {\n if (this.options.json) return;\n console.log(pc.blue('ℹ'), message);\n }\n\n // Debug message (only in verbose mode)\n debug(message: string): void {\n if (this.options.json) return;\n if (this.options.verbose) {\n console.log(pc.dim(`[debug] ${message}`));\n }\n }\n\n // Plain text output\n text(message: string): void {\n if (this.options.json) return;\n console.log(message);\n }\n\n // Heading\n heading(text: string): void {\n if (this.options.json) return;\n console.log();\n console.log(pc.bold(pc.underline(text)));\n console.log();\n }\n\n // Subheading\n subheading(text: string): void {\n if (this.options.json) return;\n console.log(pc.bold(text));\n }\n\n // Key-value pair\n keyValue(key: string, value: string | number | boolean | undefined): void {\n if (this.options.json) return;\n console.log(`${pc.dim(`${key}:`)} ${value ?? pc.dim('(not set)')}`);\n }\n\n // List item\n listItem(text: string, indent = 0): void {\n if (this.options.json) return;\n const prefix = `${' '.repeat(indent)}•`;\n console.log(`${prefix} ${text}`);\n }\n\n // Spinner\n spinner(message: string): Ora {\n return ora({\n text: message,\n isSilent: this.options.json,\n }).start();\n }\n\n // Blank line\n newLine(): void {\n if (this.options.json) return;\n console.log();\n }\n\n // Horizontal rule\n hr(): void {\n if (this.options.json) return;\n console.log(pc.dim('─'.repeat(50)));\n }\n\n // Alias for hr\n divider(): void {\n this.hr();\n }\n\n // Code block\n code(text: string, language?: string): void {\n if (this.options.json) {\n this.json({ code: text, language });\n return;\n }\n console.log(pc.dim(`\\`\\`\\`${language ?? ''}`));\n console.log(text);\n console.log(pc.dim('```'));\n }\n\n // Highlight text\n highlight(text: string): string {\n return pc.cyan(text);\n }\n\n // Dim text\n dim(text: string): string {\n return pc.dim(text);\n }\n\n // Bold text\n bold(text: string): string {\n return pc.bold(text);\n }\n\n // Link (just returns text in terminal)\n link(text: string, url: string): string {\n // OSC 8 hyperlink support for modern terminals\n return `\\x1b]8;;${url}\\x07${pc.underline(pc.blue(text))}\\x1b]8;;\\x07`;\n }\n\n // Color helpers\n green(text: string): string {\n return pc.green(text);\n }\n\n red(text: string): string {\n return pc.red(text);\n }\n\n yellow(text: string): string {\n return pc.yellow(text);\n }\n\n blue(text: string): string {\n return pc.blue(text);\n }\n\n cyan(text: string): string {\n return pc.cyan(text);\n }\n}\n\n// Convenience function to create formatter from command flags\nexport function createOutput(flags: { json?: boolean; verbose?: boolean }): OutputFormatter {\n return new OutputFormatter({\n json: flags.json,\n verbose: flags.verbose,\n });\n}\n","import * as readline from 'node:readline';\nimport { Command, Flags } from '@oclif/core';\nimport { getClient } from '../lib/api-client.js';\nimport { createOutput } from '../lib/output.js';\n\nexport default class Playground extends Command {\n static description = 'Interactive playground for testing tools';\n\n static examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --tool firecrawl-scrape',\n '<%= config.bin %> <%= command.id %> --web',\n ];\n\n static flags = {\n tool: Flags.string({\n char: 't',\n description: 'Start with a specific tool selected',\n }),\n web: Flags.boolean({\n char: 'w',\n description: 'Open the web playground instead',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show verbose output',\n default: false,\n }),\n };\n\n private rl?: readline.Interface;\n private client = getClient();\n private selectedTool?: string;\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Playground);\n const output = createOutput(flags);\n\n if (flags.web) {\n output.info('Opening web playground...');\n const open = (await import('open')).default;\n await open('https://tpmjs.com/playground');\n return;\n }\n\n this.selectedTool = flags.tool;\n\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n output.heading('TPMJS Playground');\n output.text('');\n output.text('Commands:');\n output.listItem('.help - Show this help');\n output.listItem('.tools - List available tools');\n output.listItem('.select - Select a tool to use');\n output.listItem('.info - Show info about selected tool');\n output.listItem('.clear - Clear the screen');\n output.listItem('.exit - Exit the playground');\n output.text('');\n\n if (this.selectedTool) {\n output.info(`Selected tool: ${this.selectedTool}`);\n } else {\n output.text('No tool selected. Use .select to choose a tool.');\n }\n\n output.text('');\n output.text('Enter JSON input to execute the selected tool.');\n output.divider();\n\n await this.repl(output, flags.verbose);\n }\n\n private async repl(output: ReturnType<typeof createOutput>, verbose: boolean): Promise<void> {\n const prompt = () => {\n const prefix = this.selectedTool ? `[${this.selectedTool}]` : '[no tool]';\n this.rl?.question(`${prefix} > `, async (input) => {\n const trimmed = input.trim();\n\n if (!trimmed) {\n prompt();\n return;\n }\n\n if (trimmed.startsWith('.')) {\n await this.handleCommand(trimmed, output, verbose);\n if (trimmed !== '.exit') {\n prompt();\n }\n return;\n }\n\n // Try to execute as JSON input\n if (!this.selectedTool) {\n output.warning('No tool selected. Use .select to choose a tool first.');\n prompt();\n return;\n }\n\n try {\n const params = JSON.parse(trimmed);\n await this.executeTool(params, output, verbose);\n } catch {\n output.error('Invalid JSON input. Enter valid JSON or use a command (.help)');\n }\n\n prompt();\n });\n };\n\n prompt();\n\n // Keep running until exit\n await new Promise<void>((resolve) => {\n this.rl?.on('close', resolve);\n });\n }\n\n private async handleCommand(\n command: string,\n output: ReturnType<typeof createOutput>,\n verbose: boolean\n ): Promise<void> {\n const [cmd, ...args] = command.split(/\\s+/);\n\n switch (cmd) {\n case '.help':\n output.text('');\n output.text('Commands:');\n output.listItem('.help - Show this help');\n output.listItem('.tools - List available tools');\n output.listItem('.select <tool> - Select a tool to use');\n output.listItem('.info - Show info about selected tool');\n output.listItem('.clear - Clear the screen');\n output.listItem('.exit - Exit the playground');\n output.text('');\n output.text('To execute a tool, enter JSON input:');\n output.text(' {\"url\": \"https://example.com\"}');\n output.text('');\n break;\n\n case '.tools':\n await this.listTools(output);\n break;\n\n case '.select':\n if (args.length === 0) {\n output.warning('Usage: .select <tool-slug>');\n } else {\n this.selectedTool = args[0];\n output.success(`Selected: ${this.selectedTool}`);\n }\n break;\n\n case '.info':\n await this.showToolInfo(output, verbose);\n break;\n\n case '.clear':\n console.clear();\n break;\n\n case '.exit':\n output.info('Goodbye!');\n this.rl?.close();\n break;\n\n default:\n output.warning(`Unknown command: ${cmd}. Type .help for available commands.`);\n }\n }\n\n private async listTools(output: ReturnType<typeof createOutput>): Promise<void> {\n const spinner = output.spinner('Loading tools...');\n\n try {\n const response = await this.client.getTrendingTools({ limit: 20 });\n\n spinner.stop();\n\n if (!response.data || response.data.length === 0) {\n output.error('No tools found');\n return;\n }\n\n output.text('');\n output.text('Available tools:');\n\n for (const tool of response.data) {\n output.listItem(`${tool.slug} - ${tool.name}`);\n }\n\n output.text('');\n output.text('Use .select <slug> to select a tool');\n } catch {\n spinner.fail('Failed to load tools');\n }\n }\n\n private async showToolInfo(\n output: ReturnType<typeof createOutput>,\n verbose: boolean\n ): Promise<void> {\n if (!this.selectedTool) {\n output.warning('No tool selected');\n return;\n }\n\n const spinner = output.spinner('Loading tool info...');\n\n try {\n const response = await this.client.getToolBySlug(this.selectedTool);\n\n spinner.stop();\n\n if (!response.success || !response.data) {\n output.error('Tool not found');\n return;\n }\n\n const tool = response.data;\n\n output.text('');\n output.heading(tool.name);\n output.text(`Slug: ${tool.slug}`);\n output.text(`Category: ${tool.category}`);\n output.text(`Version: ${tool.npmVersion}`);\n output.text('');\n output.text('Description:');\n output.text(` ${tool.description || '(none)'}`);\n\n if (tool.inputSchema) {\n output.text('');\n output.text('Input Schema:');\n output.text(JSON.stringify(tool.inputSchema, null, 2));\n }\n\n if (verbose && tool.tools && tool.tools.length > 0) {\n output.text('');\n output.text('Available operations:');\n for (const t of tool.tools) {\n output.listItem(`${t.name}: ${t.description || ''}`);\n }\n }\n\n output.text('');\n } catch {\n spinner.fail('Failed to load tool info');\n }\n }\n\n private async executeTool(\n params: Record<string, unknown>,\n output: ReturnType<typeof createOutput>,\n verbose: boolean\n ): Promise<void> {\n if (!this.selectedTool) {\n output.warning('No tool selected');\n return;\n }\n\n const spinner = output.spinner('Executing...');\n\n try {\n const result = await this.client.executeTool(this.selectedTool, params);\n\n spinner.stop();\n\n output.success('Result:');\n output.text(JSON.stringify(result, null, 2));\n } catch (error) {\n spinner.fail('Execution failed');\n output.error(\n error instanceof Error ? error.message : 'Unknown error',\n verbose ? String(error) : undefined\n );\n }\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { Command, Flags, Args } from '@oclif/core';
2
1
  import * as fs from 'fs';
3
2
  import * as path from 'path';
4
- import Conf from 'conf';
3
+ import { Command, Flags, Args } from '@oclif/core';
5
4
  import * as os from 'os';
5
+ import Conf from 'conf';
6
6
  import Table from 'cli-table3';
7
7
  import ora from 'ora';
8
8
  import pc from 'picocolors';
@@ -73,7 +73,7 @@ var TpmClient = class {
73
73
  ...options.headers
74
74
  };
75
75
  if (this.apiKey) {
76
- headers["Authorization"] = `Bearer ${this.apiKey}`;
76
+ headers.Authorization = `Bearer ${this.apiKey}`;
77
77
  }
78
78
  const controller = new AbortController();
79
79
  const timeoutId = setTimeout(() => controller.abort(), this.timeout);
@@ -155,7 +155,7 @@ var TpmClient = class {
155
155
  Accept: "text/event-stream"
156
156
  };
157
157
  if (this.apiKey) {
158
- headers["Authorization"] = `Bearer ${this.apiKey}`;
158
+ headers.Authorization = `Bearer ${this.apiKey}`;
159
159
  }
160
160
  const response = await fetch(url, {
161
161
  method: "POST",
@@ -429,12 +429,12 @@ var OutputFormatter = class {
429
429
  // Key-value pair
430
430
  keyValue(key, value) {
431
431
  if (this.options.json) return;
432
- console.log(`${pc.dim(key + ":")} ${value ?? pc.dim("(not set)")}`);
432
+ console.log(`${pc.dim(`${key}:`)} ${value ?? pc.dim("(not set)")}`);
433
433
  }
434
434
  // List item
435
435
  listItem(text, indent = 0) {
436
436
  if (this.options.json) return;
437
- const prefix = " ".repeat(indent) + "\u2022";
437
+ const prefix = `${" ".repeat(indent)}\u2022`;
438
438
  console.log(`${prefix} ${text}`);
439
439
  }
440
440
  // Spinner
@@ -464,7 +464,7 @@ var OutputFormatter = class {
464
464
  this.json({ code: text, language });
465
465
  return;
466
466
  }
467
- console.log(pc.dim("```" + (language ?? "")));
467
+ console.log(pc.dim(`\`\`\`${language ?? ""}`));
468
468
  console.log(text);
469
469
  console.log(pc.dim("```"));
470
470
  }
@@ -555,9 +555,7 @@ var PublishCheck = class _PublishCheck extends Command {
555
555
  spinner.stop();
556
556
  if (!searchResponse.data || searchResponse.data.length === 0) {
557
557
  }
558
- const exactMatch = searchResponse.data?.find(
559
- (tool) => tool.npmPackageName === packageName
560
- );
558
+ const exactMatch = searchResponse.data?.find((tool) => tool.npmPackageName === packageName);
561
559
  if (flags.json) {
562
560
  output.json({
563
561
  packageName,
@@ -574,7 +572,9 @@ var PublishCheck = class _PublishCheck extends Command {
574
572
  output.text(`Category: ${exactMatch.category}`);
575
573
  output.text(`Tier: ${exactMatch.tier}`);
576
574
  output.text(`Version: ${exactMatch.npmVersion}`);
577
- output.text(`Downloads (last month): ${exactMatch.npmDownloadsLastMonth?.toLocaleString() || "N/A"}`);
575
+ output.text(
576
+ `Downloads (last month): ${exactMatch.npmDownloadsLastMonth?.toLocaleString() || "N/A"}`
577
+ );
578
578
  output.text(`Quality Score: ${exactMatch.qualityScore?.toFixed(2) || "N/A"}`);
579
579
  output.text("");
580
580
  output.text(`View on tpmjs.com:`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/config.ts","../../../src/lib/api-client.ts","../../../src/lib/output.ts","../../../src/commands/publish/check.ts"],"names":["path2","fs2"],"mappings":"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","file":"check.js","sourcesContent":["import Conf from 'conf';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nexport interface TpmConfig {\n apiUrl?: string;\n defaultOutput?: 'human' | 'json';\n verbose?: boolean;\n analytics?: boolean;\n env?: Record<string, string>;\n}\n\nexport interface TpmCredentials {\n apiKey?: string;\n refreshToken?: string;\n expiresAt?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), '.tpmjs');\nconst CREDENTIALS_FILE = path.join(CONFIG_DIR, 'credentials.json');\nconst HISTORY_DIR = path.join(CONFIG_DIR, 'history');\n\n// Ensure config directory exists\nfunction ensureConfigDir(): void {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n// Config store using Conf\nconst configStore = new Conf<TpmConfig>({\n projectName: 'tpmjs',\n cwd: CONFIG_DIR,\n configName: 'config',\n defaults: {\n apiUrl: 'https://tpmjs.com/api',\n defaultOutput: 'human',\n verbose: false,\n analytics: false,\n },\n});\n\nexport function getConfig(): TpmConfig {\n return configStore.store;\n}\n\nexport function setConfig(config: Partial<TpmConfig>): void {\n for (const [key, value] of Object.entries(config)) {\n if (value !== undefined) {\n configStore.set(key, value);\n }\n }\n}\n\nexport function getConfigValue<K extends keyof TpmConfig>(key: K): TpmConfig[K] {\n return configStore.get(key);\n}\n\nexport function setConfigValue<K extends keyof TpmConfig>(\n key: K,\n value: TpmConfig[K]\n): void {\n configStore.set(key, value);\n}\n\nexport function resetConfig(): void {\n configStore.clear();\n}\n\n// Credentials management with secure file permissions\nexport function loadCredentials(): TpmCredentials | null {\n ensureConfigDir();\n\n if (!fs.existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(content) as TpmCredentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(credentials: TpmCredentials): void {\n ensureConfigDir();\n\n const content = JSON.stringify(credentials, null, 2);\n fs.writeFileSync(CREDENTIALS_FILE, content, { mode: 0o600 });\n}\n\nexport function deleteCredentials(): void {\n if (fs.existsSync(CREDENTIALS_FILE)) {\n fs.unlinkSync(CREDENTIALS_FILE);\n }\n}\n\nexport function hasCredentials(): boolean {\n const creds = loadCredentials();\n return creds !== null && !!creds.apiKey;\n}\n\n// Get API key from multiple sources (priority order)\nexport function getApiKey(): string | undefined {\n // 1. Environment variable\n if (process.env.TPMJS_API_KEY) {\n return process.env.TPMJS_API_KEY;\n }\n\n // 2. Credentials file\n const creds = loadCredentials();\n if (creds?.apiKey) {\n return creds.apiKey;\n }\n\n return undefined;\n}\n\n// Get API URL\nexport function getApiUrl(): string {\n return process.env.TPMJS_API_URL ?? getConfigValue('apiUrl') ?? 'https://tpmjs.com/api';\n}\n\n// History directory for conversation caching\nexport function getHistoryDir(): string {\n if (!fs.existsSync(HISTORY_DIR)) {\n fs.mkdirSync(HISTORY_DIR, { recursive: true, mode: 0o700 });\n }\n return HISTORY_DIR;\n}\n\n// Config directory path\nexport function getConfigDir(): string {\n ensureConfigDir();\n return CONFIG_DIR;\n}\n","import { getApiKey, getApiUrl } from './config.js';\n\nexport interface TpmClientOptions {\n baseUrl?: string;\n apiKey?: string;\n timeout?: number;\n}\n\nexport interface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n}\n\nexport interface PaginationOptions {\n limit?: number;\n offset?: number;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n}\n\n// Tool types\nexport interface Tool {\n id: string;\n name: string;\n slug: string;\n description: string;\n category: string;\n tier: string;\n qualityScore: number | null;\n importHealth: string;\n executionHealth: string;\n likeCount: number;\n npmPackageName: string;\n npmVersion: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n tools?: { name: string; description?: string }[];\n package?: {\n npmPackageName: string;\n category: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n };\n}\n\nexport interface ToolSearchOptions extends PaginationOptions {\n category?: string;\n query?: string;\n}\n\n// Agent types\nexport interface Agent {\n id: string;\n uid: string;\n name: string;\n description: string | null;\n provider: string;\n modelId: string;\n systemPrompt: string | null;\n temperature: number;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n collections: number;\n };\n}\n\nexport interface CreateAgentInput {\n name: string;\n uid?: string;\n description?: string;\n provider: string;\n modelId: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n collectionIds?: string[];\n toolIds?: string[];\n}\n\nexport interface UpdateAgentInput {\n name?: string;\n uid?: string;\n description?: string;\n provider?: string;\n modelId?: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n maxToolCallsPerTurn?: number;\n maxMessagesInContext?: number;\n}\n\n// Collection types\nexport interface Collection {\n id: string;\n name: string;\n slug: string | null;\n description: string | null;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n };\n}\n\nexport interface CreateCollectionInput {\n name: string;\n description?: string;\n isPublic: boolean;\n}\n\nexport interface UpdateCollectionInput {\n name?: string;\n description?: string;\n isPublic?: boolean;\n}\n\n// User types\nexport interface User {\n id: string;\n name: string | null;\n username: string | null;\n email: string;\n image: string | null;\n}\n\n// API Key types\nexport interface ApiKey {\n id: string;\n name: string;\n keyPrefix: string;\n scopes: string[];\n isActive: boolean;\n lastUsedAt: string | null;\n expiresAt: string | null;\n createdAt: string;\n}\n\n// Scenario types\nexport interface Scenario {\n id: string;\n collectionId: string | null;\n prompt: string;\n name: string | null;\n description: string | null;\n tags: string[];\n qualityScore: number;\n totalRuns: number;\n lastRunAt: string | null;\n lastRunStatus: string | null;\n consecutivePasses: number;\n consecutiveFails: number;\n createdAt: string;\n updatedAt: string;\n collection?: {\n id: string;\n name: string;\n slug: string | null;\n username: string | null;\n } | null;\n}\n\nexport interface ScenarioRun {\n id: string;\n status: string;\n success: boolean;\n evaluator: {\n model: string | null;\n verdict: string | null;\n reason: string | null;\n };\n assertions: unknown;\n usage: {\n inputTokens: number | null;\n outputTokens: number | null;\n totalTokens: number | null;\n executionTimeMs: number | null;\n };\n timestamps: {\n startedAt: string | null;\n completedAt: string | null;\n createdAt: string;\n };\n quotaRemaining?: number;\n}\n\nexport interface ScenarioListOptions extends PaginationOptions {\n collectionId?: string;\n tags?: string;\n sortBy?: 'qualityScore' | 'totalRuns' | 'createdAt' | 'lastRunAt';\n}\n\nexport interface CreateScenarioInput {\n collectionId: string;\n prompt: string;\n name?: string;\n description?: string;\n tags?: string[];\n}\n\nexport interface GenerateScenariosInput {\n count?: number;\n skipSimilarityCheck?: boolean;\n}\n\n// Stats types\nexport interface Stats {\n tools: {\n total: number;\n official: number;\n healthyImport: number;\n healthyExecution: number;\n };\n packages: {\n total: number;\n official: number;\n };\n categories: { name: string; count: number }[];\n}\n\nexport class TpmClient {\n private baseUrl: string;\n private apiKey: string | undefined;\n private timeout: number;\n\n constructor(options: TpmClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? getApiUrl();\n this.apiKey = options.apiKey ?? getApiKey();\n this.timeout = options.timeout ?? 30000;\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string>),\n };\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n const data = (await response.json()) as T & { message?: string; error?: string };\n\n if (!response.ok) {\n throw new ApiError(\n data.message || data.error || `HTTP ${response.status}`,\n response.status,\n data\n );\n }\n\n return data as T;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n // Health check\n async health(): Promise<{ status: string; timestamp: string }> {\n return this.request('/health');\n }\n\n // Stats\n async getStats(): Promise<ApiResponse<Stats>> {\n return this.request('/stats');\n }\n\n // Tools\n async searchTools(options: ToolSearchOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.query) params.set('q', options.query);\n if (options.category) params.set('category', options.category);\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools?${queryString}` : '/tools';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async getTool(packageName: string, toolName: string): Promise<ApiResponse<Tool>> {\n return this.request(\n `/tools/${encodeURIComponent(packageName)}/${encodeURIComponent(toolName)}`\n );\n }\n\n async getToolBySlug(slug: string): Promise<ApiResponse<Tool>> {\n // Search for the tool by slug\n const searchResult = await this.searchTools({ query: slug, limit: 1 });\n if (searchResult.data && searchResult.data.length > 0) {\n const tool = searchResult.data.find((t) => t.slug === slug) || searchResult.data[0];\n return { success: true, data: tool };\n }\n return { success: false, error: 'Tool not found' };\n }\n\n async getTrendingTools(options: PaginationOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools/trending?${queryString}` : '/tools/trending';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async validateTpmjsField(\n field: unknown\n ): Promise<ApiResponse<{ valid: boolean; tier: string | null; errors?: unknown[] }>> {\n return this.request('/tools/validate', {\n method: 'POST',\n body: JSON.stringify(field),\n });\n }\n\n async executeTool(slug: string, params: Record<string, unknown>): Promise<unknown> {\n return this.request(`/tools/${encodeURIComponent(slug)}/execute`, {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n async *executeToolStream(\n slug: string,\n params: Record<string, unknown>\n ): AsyncGenerator<{ type: string; data: string }> {\n const url = `${this.baseUrl}/tools/${encodeURIComponent(slug)}/execute`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n };\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ ...params, stream: true }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new ApiError(errorText || `HTTP ${response.status}`, response.status);\n }\n\n if (!response.body) {\n throw new ApiError('No response body', 0);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n yield { type: 'done', data: '' };\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') {\n yield { type: 'done', data: '' };\n return;\n }\n try {\n const parsed = JSON.parse(data);\n yield { type: parsed.type || 'text', data: parsed.content || parsed.data || data };\n } catch {\n yield { type: 'text', data };\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Agents\n async listAgents(options: PaginationOptions = {}): Promise<PaginatedResponse<Agent>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/agents?${queryString}` : '/agents';\n\n return this.request<PaginatedResponse<Agent>>(endpoint);\n }\n\n async getAgent(id: string): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`);\n }\n\n async createAgent(input: CreateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request('/agents', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateAgent(id: string, input: UpdateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteAgent(id: string): Promise<ApiResponse<void>> {\n return this.request(`/agents/${id}`, {\n method: 'DELETE',\n });\n }\n\n // Collections\n async listCollections(options: PaginationOptions = {}): Promise<PaginatedResponse<Collection>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/collections?${queryString}` : '/collections';\n\n return this.request<PaginatedResponse<Collection>>(endpoint);\n }\n\n async getCollection(id: string): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`);\n }\n\n async createCollection(input: CreateCollectionInput): Promise<ApiResponse<Collection>> {\n return this.request('/collections', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateCollection(\n id: string,\n input: UpdateCollectionInput\n ): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteCollection(id: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}`, {\n method: 'DELETE',\n });\n }\n\n async addToolsToCollection(id: string, toolIds: string[]): Promise<ApiResponse<void>> {\n // Add tools one by one (API doesn't support bulk)\n for (const toolId of toolIds) {\n await this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'POST',\n });\n }\n return { success: true };\n }\n\n async removeToolFromCollection(id: string, toolId: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'DELETE',\n });\n }\n\n // User\n async whoami(): Promise<ApiResponse<User>> {\n return this.request('/user/profile');\n }\n\n async listApiKeys(): Promise<ApiResponse<ApiKey[]>> {\n return this.request('/user/tpmjs-api-keys');\n }\n\n // Scenarios\n async listScenarios(options: ScenarioListOptions = {}): Promise<PaginatedResponse<Scenario>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n if (options.collectionId) params.set('collectionId', options.collectionId);\n if (options.tags) params.set('tags', options.tags);\n if (options.sortBy) params.set('sortBy', options.sortBy);\n\n const queryString = params.toString();\n const endpoint = queryString ? `/scenarios?${queryString}` : '/scenarios';\n\n return this.request<PaginatedResponse<Scenario>>(endpoint);\n }\n\n async listCollectionScenarios(\n collectionId: string,\n options: PaginationOptions = {}\n ): Promise<ApiResponse<{ scenarios: Scenario[] }>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/collections/${collectionId}/scenarios?${queryString}`\n : `/collections/${collectionId}/scenarios`;\n\n return this.request<ApiResponse<{ scenarios: Scenario[] }>>(endpoint);\n }\n\n async getScenario(id: string): Promise<ApiResponse<Scenario>> {\n return this.request(`/scenarios/${id}`);\n }\n\n async createScenario(input: CreateScenarioInput): Promise<ApiResponse<Scenario>> {\n return this.request('/scenarios', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async generateScenarios(\n collectionId: string,\n input: GenerateScenariosInput = {}\n ): Promise<ApiResponse<{ scenarios: { scenario: Scenario; similarity?: unknown }[] }>> {\n return this.request(`/collections/${collectionId}/scenarios/generate`, {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async runScenario(scenarioId: string): Promise<ApiResponse<ScenarioRun>> {\n return this.request(`/scenarios/${scenarioId}/run`, {\n method: 'POST',\n });\n }\n\n async getScenarioRuns(\n scenarioId: string,\n options: PaginationOptions = {}\n ): Promise<PaginatedResponse<ScenarioRun>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/scenarios/${scenarioId}/runs?${queryString}`\n : `/scenarios/${scenarioId}/runs`;\n\n return this.request<PaginatedResponse<ScenarioRun>>(endpoint);\n }\n\n // Check if authenticated\n isAuthenticated(): boolean {\n return !!this.apiKey;\n }\n}\n\n// Custom error class for API errors\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public data?: unknown\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\n// Singleton instance\nlet clientInstance: TpmClient | null = null;\n\nexport function getClient(options?: TpmClientOptions): TpmClient {\n if (!clientInstance || options) {\n clientInstance = new TpmClient(options);\n }\n return clientInstance;\n}\n","import Table from 'cli-table3';\nimport ora, { type Ora } from 'ora';\nimport pc from 'picocolors';\n\nexport interface OutputOptions {\n json?: boolean;\n verbose?: boolean;\n noColor?: boolean;\n}\n\nexport class OutputFormatter {\n private options: OutputOptions;\n\n constructor(options: OutputOptions = {}) {\n this.options = options;\n }\n\n // Output as JSON\n json(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n }\n\n // Output a table\n table<T extends Record<string, unknown>>(\n data: T[],\n columns: { key: keyof T; header: string; width?: number }[]\n ): void {\n if (this.options.json) {\n this.json(data);\n return;\n }\n\n const table = new Table({\n head: columns.map((col) => pc.bold(col.header)),\n colWidths: columns.map((col) => col.width ?? null),\n style: {\n head: [],\n border: [],\n },\n });\n\n for (const row of data) {\n table.push(columns.map((col) => String(row[col.key] ?? '')));\n }\n\n console.log(table.toString());\n }\n\n // Success message\n success(message: string): void {\n if (this.options.json) return;\n console.log(pc.green('✓'), message);\n }\n\n // Error message\n error(message: string, details?: string): void {\n if (this.options.json) {\n this.json({ error: message, details });\n return;\n }\n console.error(pc.red('✗'), message);\n if (details && this.options.verbose) {\n console.error(pc.dim(details));\n }\n }\n\n // Warning message\n warning(message: string): void {\n if (this.options.json) return;\n console.log(pc.yellow('⚠'), message);\n }\n\n // Info message\n info(message: string): void {\n if (this.options.json) return;\n console.log(pc.blue('ℹ'), message);\n }\n\n // Debug message (only in verbose mode)\n debug(message: string): void {\n if (this.options.json) return;\n if (this.options.verbose) {\n console.log(pc.dim(`[debug] ${message}`));\n }\n }\n\n // Plain text output\n text(message: string): void {\n if (this.options.json) return;\n console.log(message);\n }\n\n // Heading\n heading(text: string): void {\n if (this.options.json) return;\n console.log();\n console.log(pc.bold(pc.underline(text)));\n console.log();\n }\n\n // Subheading\n subheading(text: string): void {\n if (this.options.json) return;\n console.log(pc.bold(text));\n }\n\n // Key-value pair\n keyValue(key: string, value: string | number | boolean | undefined): void {\n if (this.options.json) return;\n console.log(`${pc.dim(key + ':')} ${value ?? pc.dim('(not set)')}`);\n }\n\n // List item\n listItem(text: string, indent = 0): void {\n if (this.options.json) return;\n const prefix = ' '.repeat(indent) + '•';\n console.log(`${prefix} ${text}`);\n }\n\n // Spinner\n spinner(message: string): Ora {\n return ora({\n text: message,\n isSilent: this.options.json,\n }).start();\n }\n\n // Blank line\n newLine(): void {\n if (this.options.json) return;\n console.log();\n }\n\n // Horizontal rule\n hr(): void {\n if (this.options.json) return;\n console.log(pc.dim('─'.repeat(50)));\n }\n\n // Alias for hr\n divider(): void {\n this.hr();\n }\n\n // Code block\n code(text: string, language?: string): void {\n if (this.options.json) {\n this.json({ code: text, language });\n return;\n }\n console.log(pc.dim('```' + (language ?? '')));\n console.log(text);\n console.log(pc.dim('```'));\n }\n\n // Highlight text\n highlight(text: string): string {\n return pc.cyan(text);\n }\n\n // Dim text\n dim(text: string): string {\n return pc.dim(text);\n }\n\n // Bold text\n bold(text: string): string {\n return pc.bold(text);\n }\n\n // Link (just returns text in terminal)\n link(text: string, url: string): string {\n // OSC 8 hyperlink support for modern terminals\n return `\\x1b]8;;${url}\\x07${pc.underline(pc.blue(text))}\\x1b]8;;\\x07`;\n }\n\n // Color helpers\n green(text: string): string {\n return pc.green(text);\n }\n\n red(text: string): string {\n return pc.red(text);\n }\n\n yellow(text: string): string {\n return pc.yellow(text);\n }\n\n blue(text: string): string {\n return pc.blue(text);\n }\n\n cyan(text: string): string {\n return pc.cyan(text);\n }\n}\n\n// Convenience function to create formatter from command flags\nexport function createOutput(flags: { json?: boolean; verbose?: boolean }): OutputFormatter {\n return new OutputFormatter({\n json: flags.json,\n verbose: flags.verbose,\n });\n}\n","import { Args, Command, Flags } from '@oclif/core';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { getClient } from '../../lib/api-client.js';\nimport { createOutput } from '../../lib/output.js';\n\nexport default class PublishCheck extends Command {\n static description = 'Check if your package has been discovered by tpmjs.com';\n\n static examples = [\n '<%= config.bin %> <%= command.id %> @myorg/my-tool',\n '<%= config.bin %> <%= command.id %>',\n ];\n\n static flags = {\n json: Flags.boolean({\n description: 'Output in JSON format',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show verbose output',\n default: false,\n }),\n };\n\n static args = {\n package: Args.string({\n description: 'npm package name (defaults to current directory)',\n required: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(PublishCheck);\n const output = createOutput(flags);\n const client = getClient();\n\n // Determine package name\n let packageName = args.package as string | undefined;\n\n if (!packageName) {\n const packagePath = path.resolve('.', 'package.json');\n if (fs.existsSync(packagePath)) {\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));\n packageName = packageJson.name;\n }\n }\n\n if (!packageName) {\n output.error('No package name provided and no package.json found');\n return;\n }\n\n output.info(`Checking discovery status for: ${packageName}`);\n\n const spinner = output.spinner('Checking tpmjs.com...');\n\n try {\n // Search for the package by npm name\n const searchResponse = await client.searchTools({ query: packageName, limit: 10 });\n\n spinner.stop();\n\n if (!searchResponse.data || searchResponse.data.length === 0) {\n // No results found\n }\n\n // Find exact match\n const exactMatch = searchResponse.data?.find(\n (tool) => tool.npmPackageName === packageName\n );\n\n if (flags.json) {\n output.json({\n packageName,\n discovered: Boolean(exactMatch),\n tool: exactMatch || null,\n });\n return;\n }\n\n if (exactMatch) {\n output.success('Package has been discovered!');\n output.divider();\n output.text(`Name: ${exactMatch.name}`);\n output.text(`Slug: ${exactMatch.slug}`);\n output.text(`Category: ${exactMatch.category}`);\n output.text(`Tier: ${exactMatch.tier}`);\n output.text(`Version: ${exactMatch.npmVersion}`);\n output.text(`Downloads (last month): ${exactMatch.npmDownloadsLastMonth?.toLocaleString() || 'N/A'}`);\n output.text(`Quality Score: ${exactMatch.qualityScore?.toFixed(2) || 'N/A'}`);\n output.text('');\n output.text(`View on tpmjs.com:`);\n output.text(` https://tpmjs.com/tools/${exactMatch.slug}`);\n } else {\n output.warning('Package not yet discovered');\n output.text('');\n output.text('Possible reasons:');\n output.listItem('Package was recently published (sync runs every 2-15 minutes)');\n output.listItem('Missing \"tpmjs\" keyword in package.json keywords array');\n output.listItem('Missing or invalid \"tpmjs\" field in package.json');\n output.text('');\n output.text('To publish a TPMJS tool:');\n output.listItem('Add \"tpmjs\" to your package.json keywords');\n output.listItem('Add a valid \"tpmjs\" field with category and tools');\n output.listItem('Run `tpm tool validate` to check your configuration');\n output.listItem('Publish to npm with `npm publish`');\n output.text('');\n output.text('After publishing, your tool should appear within 15 minutes.');\n }\n } catch (error) {\n spinner.fail('Failed to check status');\n output.error(\n error instanceof Error ? error.message : 'Unknown error',\n flags.verbose ? String(error) : undefined\n );\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/config.ts","../../../src/lib/api-client.ts","../../../src/lib/output.ts","../../../src/commands/publish/check.ts"],"names":["path2","fs2"],"mappings":"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","file":"check.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport Conf from 'conf';\n\nexport interface TpmConfig {\n apiUrl?: string;\n defaultOutput?: 'human' | 'json';\n verbose?: boolean;\n analytics?: boolean;\n env?: Record<string, string>;\n}\n\nexport interface TpmCredentials {\n apiKey?: string;\n refreshToken?: string;\n expiresAt?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), '.tpmjs');\nconst CREDENTIALS_FILE = path.join(CONFIG_DIR, 'credentials.json');\nconst HISTORY_DIR = path.join(CONFIG_DIR, 'history');\n\n// Ensure config directory exists\nfunction ensureConfigDir(): void {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n// Config store using Conf\nconst configStore = new Conf<TpmConfig>({\n projectName: 'tpmjs',\n cwd: CONFIG_DIR,\n configName: 'config',\n defaults: {\n apiUrl: 'https://tpmjs.com/api',\n defaultOutput: 'human',\n verbose: false,\n analytics: false,\n },\n});\n\nexport function getConfig(): TpmConfig {\n return configStore.store;\n}\n\nexport function setConfig(config: Partial<TpmConfig>): void {\n for (const [key, value] of Object.entries(config)) {\n if (value !== undefined) {\n configStore.set(key, value);\n }\n }\n}\n\nexport function getConfigValue<K extends keyof TpmConfig>(key: K): TpmConfig[K] {\n return configStore.get(key);\n}\n\nexport function setConfigValue<K extends keyof TpmConfig>(key: K, value: TpmConfig[K]): void {\n configStore.set(key, value);\n}\n\nexport function resetConfig(): void {\n configStore.clear();\n}\n\n// Credentials management with secure file permissions\nexport function loadCredentials(): TpmCredentials | null {\n ensureConfigDir();\n\n if (!fs.existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(content) as TpmCredentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(credentials: TpmCredentials): void {\n ensureConfigDir();\n\n const content = JSON.stringify(credentials, null, 2);\n fs.writeFileSync(CREDENTIALS_FILE, content, { mode: 0o600 });\n}\n\nexport function deleteCredentials(): void {\n if (fs.existsSync(CREDENTIALS_FILE)) {\n fs.unlinkSync(CREDENTIALS_FILE);\n }\n}\n\nexport function hasCredentials(): boolean {\n const creds = loadCredentials();\n return creds !== null && !!creds.apiKey;\n}\n\n// Get API key from multiple sources (priority order)\nexport function getApiKey(): string | undefined {\n // 1. Environment variable\n if (process.env.TPMJS_API_KEY) {\n return process.env.TPMJS_API_KEY;\n }\n\n // 2. Credentials file\n const creds = loadCredentials();\n if (creds?.apiKey) {\n return creds.apiKey;\n }\n\n return undefined;\n}\n\n// Get API URL\nexport function getApiUrl(): string {\n return process.env.TPMJS_API_URL ?? getConfigValue('apiUrl') ?? 'https://tpmjs.com/api';\n}\n\n// History directory for conversation caching\nexport function getHistoryDir(): string {\n if (!fs.existsSync(HISTORY_DIR)) {\n fs.mkdirSync(HISTORY_DIR, { recursive: true, mode: 0o700 });\n }\n return HISTORY_DIR;\n}\n\n// Config directory path\nexport function getConfigDir(): string {\n ensureConfigDir();\n return CONFIG_DIR;\n}\n","import { getApiKey, getApiUrl } from './config.js';\n\nexport interface TpmClientOptions {\n baseUrl?: string;\n apiKey?: string;\n timeout?: number;\n}\n\nexport interface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n}\n\nexport interface PaginationOptions {\n limit?: number;\n offset?: number;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n}\n\n// Tool types\nexport interface Tool {\n id: string;\n name: string;\n slug: string;\n description: string;\n category: string;\n tier: string;\n qualityScore: number | null;\n importHealth: string;\n executionHealth: string;\n likeCount: number;\n npmPackageName: string;\n npmVersion: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n inputSchema?: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n tools?: { name: string; description?: string }[];\n package?: {\n npmPackageName: string;\n category: string;\n npmDownloadsLastMonth: number;\n isOfficial: boolean;\n };\n}\n\nexport interface ToolSearchOptions extends PaginationOptions {\n category?: string;\n query?: string;\n}\n\n// Agent types\nexport interface Agent {\n id: string;\n uid: string;\n name: string;\n description: string | null;\n provider: string;\n modelId: string;\n systemPrompt: string | null;\n temperature: number;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n collections: number;\n };\n}\n\nexport interface CreateAgentInput {\n name: string;\n uid?: string;\n description?: string;\n provider: string;\n modelId: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n collectionIds?: string[];\n toolIds?: string[];\n}\n\nexport interface UpdateAgentInput {\n name?: string;\n uid?: string;\n description?: string;\n provider?: string;\n modelId?: string;\n systemPrompt?: string;\n temperature?: number;\n isPublic?: boolean;\n maxToolCallsPerTurn?: number;\n maxMessagesInContext?: number;\n}\n\n// Collection types\nexport interface Collection {\n id: string;\n name: string;\n slug: string | null;\n description: string | null;\n isPublic: boolean;\n likeCount: number;\n _count?: {\n tools: number;\n };\n}\n\nexport interface CreateCollectionInput {\n name: string;\n description?: string;\n isPublic: boolean;\n}\n\nexport interface UpdateCollectionInput {\n name?: string;\n description?: string;\n isPublic?: boolean;\n}\n\n// User types\nexport interface User {\n id: string;\n name: string | null;\n username: string | null;\n email: string;\n image: string | null;\n}\n\n// API Key types\nexport interface ApiKey {\n id: string;\n name: string;\n keyPrefix: string;\n scopes: string[];\n isActive: boolean;\n lastUsedAt: string | null;\n expiresAt: string | null;\n createdAt: string;\n}\n\n// Scenario types\nexport interface Scenario {\n id: string;\n collectionId: string | null;\n prompt: string;\n name: string | null;\n description: string | null;\n tags: string[];\n qualityScore: number;\n totalRuns: number;\n lastRunAt: string | null;\n lastRunStatus: string | null;\n consecutivePasses: number;\n consecutiveFails: number;\n createdAt: string;\n updatedAt: string;\n collection?: {\n id: string;\n name: string;\n slug: string | null;\n username: string | null;\n } | null;\n}\n\nexport interface ScenarioRun {\n id: string;\n status: string;\n success: boolean;\n evaluator: {\n model: string | null;\n verdict: string | null;\n reason: string | null;\n };\n assertions: unknown;\n usage: {\n inputTokens: number | null;\n outputTokens: number | null;\n totalTokens: number | null;\n executionTimeMs: number | null;\n };\n timestamps: {\n startedAt: string | null;\n completedAt: string | null;\n createdAt: string;\n };\n quotaRemaining?: number;\n}\n\nexport interface ScenarioListOptions extends PaginationOptions {\n collectionId?: string;\n tags?: string;\n sortBy?: 'qualityScore' | 'totalRuns' | 'createdAt' | 'lastRunAt';\n}\n\nexport interface CreateScenarioInput {\n collectionId: string;\n prompt: string;\n name?: string;\n description?: string;\n tags?: string[];\n}\n\nexport interface GenerateScenariosInput {\n count?: number;\n skipSimilarityCheck?: boolean;\n}\n\n// Stats types\nexport interface Stats {\n tools: {\n total: number;\n official: number;\n healthyImport: number;\n healthyExecution: number;\n };\n packages: {\n total: number;\n official: number;\n };\n categories: { name: string; count: number }[];\n}\n\nexport class TpmClient {\n private baseUrl: string;\n private apiKey: string | undefined;\n private timeout: number;\n\n constructor(options: TpmClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? getApiUrl();\n this.apiKey = options.apiKey ?? getApiKey();\n this.timeout = options.timeout ?? 30000;\n }\n\n private async request<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string>),\n };\n\n if (this.apiKey) {\n headers.Authorization = `Bearer ${this.apiKey}`;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n const data = (await response.json()) as T & { message?: string; error?: string };\n\n if (!response.ok) {\n throw new ApiError(\n data.message || data.error || `HTTP ${response.status}`,\n response.status,\n data\n );\n }\n\n return data as T;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n // Health check\n async health(): Promise<{ status: string; timestamp: string }> {\n return this.request('/health');\n }\n\n // Stats\n async getStats(): Promise<ApiResponse<Stats>> {\n return this.request('/stats');\n }\n\n // Tools\n async searchTools(options: ToolSearchOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.query) params.set('q', options.query);\n if (options.category) params.set('category', options.category);\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools?${queryString}` : '/tools';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async getTool(packageName: string, toolName: string): Promise<ApiResponse<Tool>> {\n return this.request(\n `/tools/${encodeURIComponent(packageName)}/${encodeURIComponent(toolName)}`\n );\n }\n\n async getToolBySlug(slug: string): Promise<ApiResponse<Tool>> {\n // Search for the tool by slug\n const searchResult = await this.searchTools({ query: slug, limit: 1 });\n if (searchResult.data && searchResult.data.length > 0) {\n const tool = searchResult.data.find((t) => t.slug === slug) || searchResult.data[0];\n return { success: true, data: tool };\n }\n return { success: false, error: 'Tool not found' };\n }\n\n async getTrendingTools(options: PaginationOptions = {}): Promise<PaginatedResponse<Tool>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/tools/trending?${queryString}` : '/tools/trending';\n\n return this.request<PaginatedResponse<Tool>>(endpoint);\n }\n\n async validateTpmjsField(\n field: unknown\n ): Promise<ApiResponse<{ valid: boolean; tier: string | null; errors?: unknown[] }>> {\n return this.request('/tools/validate', {\n method: 'POST',\n body: JSON.stringify(field),\n });\n }\n\n async executeTool(slug: string, params: Record<string, unknown>): Promise<unknown> {\n return this.request(`/tools/${encodeURIComponent(slug)}/execute`, {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n async *executeToolStream(\n slug: string,\n params: Record<string, unknown>\n ): AsyncGenerator<{ type: string; data: string }> {\n const url = `${this.baseUrl}/tools/${encodeURIComponent(slug)}/execute`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n };\n\n if (this.apiKey) {\n headers.Authorization = `Bearer ${this.apiKey}`;\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ ...params, stream: true }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new ApiError(errorText || `HTTP ${response.status}`, response.status);\n }\n\n if (!response.body) {\n throw new ApiError('No response body', 0);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n yield { type: 'done', data: '' };\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') {\n yield { type: 'done', data: '' };\n return;\n }\n try {\n const parsed = JSON.parse(data);\n yield { type: parsed.type || 'text', data: parsed.content || parsed.data || data };\n } catch {\n yield { type: 'text', data };\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Agents\n async listAgents(options: PaginationOptions = {}): Promise<PaginatedResponse<Agent>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/agents?${queryString}` : '/agents';\n\n return this.request<PaginatedResponse<Agent>>(endpoint);\n }\n\n async getAgent(id: string): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`);\n }\n\n async createAgent(input: CreateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request('/agents', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateAgent(id: string, input: UpdateAgentInput): Promise<ApiResponse<Agent>> {\n return this.request(`/agents/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteAgent(id: string): Promise<ApiResponse<void>> {\n return this.request(`/agents/${id}`, {\n method: 'DELETE',\n });\n }\n\n // Collections\n async listCollections(options: PaginationOptions = {}): Promise<PaginatedResponse<Collection>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString ? `/collections?${queryString}` : '/collections';\n\n return this.request<PaginatedResponse<Collection>>(endpoint);\n }\n\n async getCollection(id: string): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`);\n }\n\n async createCollection(input: CreateCollectionInput): Promise<ApiResponse<Collection>> {\n return this.request('/collections', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async updateCollection(\n id: string,\n input: UpdateCollectionInput\n ): Promise<ApiResponse<Collection>> {\n return this.request(`/collections/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n async deleteCollection(id: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}`, {\n method: 'DELETE',\n });\n }\n\n async addToolsToCollection(id: string, toolIds: string[]): Promise<ApiResponse<void>> {\n // Add tools one by one (API doesn't support bulk)\n for (const toolId of toolIds) {\n await this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'POST',\n });\n }\n return { success: true };\n }\n\n async removeToolFromCollection(id: string, toolId: string): Promise<ApiResponse<void>> {\n return this.request(`/collections/${id}/tools/${toolId}`, {\n method: 'DELETE',\n });\n }\n\n // User\n async whoami(): Promise<ApiResponse<User>> {\n return this.request('/user/profile');\n }\n\n async listApiKeys(): Promise<ApiResponse<ApiKey[]>> {\n return this.request('/user/tpmjs-api-keys');\n }\n\n // Scenarios\n async listScenarios(options: ScenarioListOptions = {}): Promise<PaginatedResponse<Scenario>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n if (options.collectionId) params.set('collectionId', options.collectionId);\n if (options.tags) params.set('tags', options.tags);\n if (options.sortBy) params.set('sortBy', options.sortBy);\n\n const queryString = params.toString();\n const endpoint = queryString ? `/scenarios?${queryString}` : '/scenarios';\n\n return this.request<PaginatedResponse<Scenario>>(endpoint);\n }\n\n async listCollectionScenarios(\n collectionId: string,\n options: PaginationOptions = {}\n ): Promise<ApiResponse<{ scenarios: Scenario[] }>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/collections/${collectionId}/scenarios?${queryString}`\n : `/collections/${collectionId}/scenarios`;\n\n return this.request<ApiResponse<{ scenarios: Scenario[] }>>(endpoint);\n }\n\n async getScenario(id: string): Promise<ApiResponse<Scenario>> {\n return this.request(`/scenarios/${id}`);\n }\n\n async createScenario(input: CreateScenarioInput): Promise<ApiResponse<Scenario>> {\n return this.request('/scenarios', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async generateScenarios(\n collectionId: string,\n input: GenerateScenariosInput = {}\n ): Promise<ApiResponse<{ scenarios: { scenario: Scenario; similarity?: unknown }[] }>> {\n return this.request(`/collections/${collectionId}/scenarios/generate`, {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n async runScenario(scenarioId: string): Promise<ApiResponse<ScenarioRun>> {\n return this.request(`/scenarios/${scenarioId}/run`, {\n method: 'POST',\n });\n }\n\n async getScenarioRuns(\n scenarioId: string,\n options: PaginationOptions = {}\n ): Promise<PaginatedResponse<ScenarioRun>> {\n const params = new URLSearchParams();\n if (options.limit) params.set('limit', String(options.limit));\n if (options.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const endpoint = queryString\n ? `/scenarios/${scenarioId}/runs?${queryString}`\n : `/scenarios/${scenarioId}/runs`;\n\n return this.request<PaginatedResponse<ScenarioRun>>(endpoint);\n }\n\n // Check if authenticated\n isAuthenticated(): boolean {\n return !!this.apiKey;\n }\n}\n\n// Custom error class for API errors\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public data?: unknown\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\n// Singleton instance\nlet clientInstance: TpmClient | null = null;\n\nexport function getClient(options?: TpmClientOptions): TpmClient {\n if (!clientInstance || options) {\n clientInstance = new TpmClient(options);\n }\n return clientInstance;\n}\n","import Table from 'cli-table3';\nimport ora, { type Ora } from 'ora';\nimport pc from 'picocolors';\n\nexport interface OutputOptions {\n json?: boolean;\n verbose?: boolean;\n noColor?: boolean;\n}\n\nexport class OutputFormatter {\n private options: OutputOptions;\n\n constructor(options: OutputOptions = {}) {\n this.options = options;\n }\n\n // Output as JSON\n json(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n }\n\n // Output a table\n table<T extends Record<string, unknown>>(\n data: T[],\n columns: { key: keyof T; header: string; width?: number }[]\n ): void {\n if (this.options.json) {\n this.json(data);\n return;\n }\n\n const table = new Table({\n head: columns.map((col) => pc.bold(col.header)),\n colWidths: columns.map((col) => col.width ?? null),\n style: {\n head: [],\n border: [],\n },\n });\n\n for (const row of data) {\n table.push(columns.map((col) => String(row[col.key] ?? '')));\n }\n\n console.log(table.toString());\n }\n\n // Success message\n success(message: string): void {\n if (this.options.json) return;\n console.log(pc.green('✓'), message);\n }\n\n // Error message\n error(message: string, details?: string): void {\n if (this.options.json) {\n this.json({ error: message, details });\n return;\n }\n console.error(pc.red('✗'), message);\n if (details && this.options.verbose) {\n console.error(pc.dim(details));\n }\n }\n\n // Warning message\n warning(message: string): void {\n if (this.options.json) return;\n console.log(pc.yellow('⚠'), message);\n }\n\n // Info message\n info(message: string): void {\n if (this.options.json) return;\n console.log(pc.blue('ℹ'), message);\n }\n\n // Debug message (only in verbose mode)\n debug(message: string): void {\n if (this.options.json) return;\n if (this.options.verbose) {\n console.log(pc.dim(`[debug] ${message}`));\n }\n }\n\n // Plain text output\n text(message: string): void {\n if (this.options.json) return;\n console.log(message);\n }\n\n // Heading\n heading(text: string): void {\n if (this.options.json) return;\n console.log();\n console.log(pc.bold(pc.underline(text)));\n console.log();\n }\n\n // Subheading\n subheading(text: string): void {\n if (this.options.json) return;\n console.log(pc.bold(text));\n }\n\n // Key-value pair\n keyValue(key: string, value: string | number | boolean | undefined): void {\n if (this.options.json) return;\n console.log(`${pc.dim(`${key}:`)} ${value ?? pc.dim('(not set)')}`);\n }\n\n // List item\n listItem(text: string, indent = 0): void {\n if (this.options.json) return;\n const prefix = `${' '.repeat(indent)}•`;\n console.log(`${prefix} ${text}`);\n }\n\n // Spinner\n spinner(message: string): Ora {\n return ora({\n text: message,\n isSilent: this.options.json,\n }).start();\n }\n\n // Blank line\n newLine(): void {\n if (this.options.json) return;\n console.log();\n }\n\n // Horizontal rule\n hr(): void {\n if (this.options.json) return;\n console.log(pc.dim('─'.repeat(50)));\n }\n\n // Alias for hr\n divider(): void {\n this.hr();\n }\n\n // Code block\n code(text: string, language?: string): void {\n if (this.options.json) {\n this.json({ code: text, language });\n return;\n }\n console.log(pc.dim(`\\`\\`\\`${language ?? ''}`));\n console.log(text);\n console.log(pc.dim('```'));\n }\n\n // Highlight text\n highlight(text: string): string {\n return pc.cyan(text);\n }\n\n // Dim text\n dim(text: string): string {\n return pc.dim(text);\n }\n\n // Bold text\n bold(text: string): string {\n return pc.bold(text);\n }\n\n // Link (just returns text in terminal)\n link(text: string, url: string): string {\n // OSC 8 hyperlink support for modern terminals\n return `\\x1b]8;;${url}\\x07${pc.underline(pc.blue(text))}\\x1b]8;;\\x07`;\n }\n\n // Color helpers\n green(text: string): string {\n return pc.green(text);\n }\n\n red(text: string): string {\n return pc.red(text);\n }\n\n yellow(text: string): string {\n return pc.yellow(text);\n }\n\n blue(text: string): string {\n return pc.blue(text);\n }\n\n cyan(text: string): string {\n return pc.cyan(text);\n }\n}\n\n// Convenience function to create formatter from command flags\nexport function createOutput(flags: { json?: boolean; verbose?: boolean }): OutputFormatter {\n return new OutputFormatter({\n json: flags.json,\n verbose: flags.verbose,\n });\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { Args, Command, Flags } from '@oclif/core';\nimport { getClient } from '../../lib/api-client.js';\nimport { createOutput } from '../../lib/output.js';\n\nexport default class PublishCheck extends Command {\n static description = 'Check if your package has been discovered by tpmjs.com';\n\n static examples = [\n '<%= config.bin %> <%= command.id %> @myorg/my-tool',\n '<%= config.bin %> <%= command.id %>',\n ];\n\n static flags = {\n json: Flags.boolean({\n description: 'Output in JSON format',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show verbose output',\n default: false,\n }),\n };\n\n static args = {\n package: Args.string({\n description: 'npm package name (defaults to current directory)',\n required: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(PublishCheck);\n const output = createOutput(flags);\n const client = getClient();\n\n // Determine package name\n let packageName = args.package as string | undefined;\n\n if (!packageName) {\n const packagePath = path.resolve('.', 'package.json');\n if (fs.existsSync(packagePath)) {\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));\n packageName = packageJson.name;\n }\n }\n\n if (!packageName) {\n output.error('No package name provided and no package.json found');\n return;\n }\n\n output.info(`Checking discovery status for: ${packageName}`);\n\n const spinner = output.spinner('Checking tpmjs.com...');\n\n try {\n // Search for the package by npm name\n const searchResponse = await client.searchTools({ query: packageName, limit: 10 });\n\n spinner.stop();\n\n if (!searchResponse.data || searchResponse.data.length === 0) {\n // No results found\n }\n\n // Find exact match\n const exactMatch = searchResponse.data?.find((tool) => tool.npmPackageName === packageName);\n\n if (flags.json) {\n output.json({\n packageName,\n discovered: Boolean(exactMatch),\n tool: exactMatch || null,\n });\n return;\n }\n\n if (exactMatch) {\n output.success('Package has been discovered!');\n output.divider();\n output.text(`Name: ${exactMatch.name}`);\n output.text(`Slug: ${exactMatch.slug}`);\n output.text(`Category: ${exactMatch.category}`);\n output.text(`Tier: ${exactMatch.tier}`);\n output.text(`Version: ${exactMatch.npmVersion}`);\n output.text(\n `Downloads (last month): ${exactMatch.npmDownloadsLastMonth?.toLocaleString() || 'N/A'}`\n );\n output.text(`Quality Score: ${exactMatch.qualityScore?.toFixed(2) || 'N/A'}`);\n output.text('');\n output.text(`View on tpmjs.com:`);\n output.text(` https://tpmjs.com/tools/${exactMatch.slug}`);\n } else {\n output.warning('Package not yet discovered');\n output.text('');\n output.text('Possible reasons:');\n output.listItem('Package was recently published (sync runs every 2-15 minutes)');\n output.listItem('Missing \"tpmjs\" keyword in package.json keywords array');\n output.listItem('Missing or invalid \"tpmjs\" field in package.json');\n output.text('');\n output.text('To publish a TPMJS tool:');\n output.listItem('Add \"tpmjs\" to your package.json keywords');\n output.listItem('Add a valid \"tpmjs\" field with category and tools');\n output.listItem('Run `tpm tool validate` to check your configuration');\n output.listItem('Publish to npm with `npm publish`');\n output.text('');\n output.text('After publishing, your tool should appear within 15 minutes.');\n }\n } catch (error) {\n spinner.fail('Failed to check status');\n output.error(\n error instanceof Error ? error.message : 'Unknown error',\n flags.verbose ? String(error) : undefined\n );\n }\n }\n}\n"]}