seacloud-sdk 0.3.0 → 0.3.1

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.
package/dist/cli.js CHANGED
@@ -15,7 +15,7 @@ var SeacloudError = class extends Error {
15
15
  // src/core/config.ts
16
16
  function createConfig(options = {}) {
17
17
  const apiKey = options.apiKey || (typeof process !== "undefined" ? process.env?.API_SERVICE_TOKEN : void 0) || "";
18
- const baseUrl = options.baseUrl || (typeof process !== "undefined" ? process.env?.SEACLOUD_BASE_URL : void 0) || "https://api.seacloud.ai";
18
+ const baseUrl = options.baseUrl || (typeof process !== "undefined" ? process.env?.SEACLOUD_BASE_URL : void 0) || "http://proxy.sg.seaverse.dev";
19
19
  const fetchImpl = options.fetch || globalThis.fetch;
20
20
  if (!fetchImpl) {
21
21
  throw new Error("fetch is not available. Please provide a fetch implementation in config or upgrade to Node.js 18+");
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/types.ts","../src/core/config.ts","../src/core/client.ts","../src/cli.ts"],"names":["__filename"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * SeaCloud SDK 核心类型定义\n */\n\n/**\n * SDK 配置选项\n */\nexport interface SeacloudConfig {\n /** API Service Token - 从环境变量 API_SERVICE_TOKEN 读取或直接传入 */\n apiKey?: string;\n /** 代理服务器基础 URL,默认为 http://localhost:8080 */\n baseUrl?: string;\n /** 自定义 fetch 实现(可选,用于 Node.js < 18 或测试) */\n fetch?: typeof fetch;\n /** 请求超时时间(毫秒),默认 30000 */\n timeout?: number;\n}\n\n/**\n * 任务状态\n */\nexport type TaskStatus = 'pending' | 'processing' | 'in_progress' | 'completed' | 'failed';\n\n/**\n * 任务错误信息\n */\nexport interface TaskError {\n code: string;\n message: string;\n details?: any;\n}\n\n/**\n * 任务结果\n */\nexport interface TaskResult {\n /** 任务 ID */\n id: string;\n /** 创建时间戳 */\n created_at: number;\n /** 任务状态 */\n status: TaskStatus;\n /** 错误信息(如果失败) */\n error?: TaskError | null;\n /** 模型名称 */\n model: string;\n /** 输出结果 */\n output?: Array<{\n content?: Array<{\n type?: string;\n url?: string;\n size?: number;\n jobId?: string;\n [key: string]: any;\n }>;\n [key: string]: any;\n }>;\n /** 其他字段 */\n [key: string]: any;\n}\n\n/**\n * 任务轮询选项\n */\nexport interface PollingOptions {\n /** 轮询间隔(毫秒),默认 3000 */\n intervalMs?: number;\n /** 最大尝试次数,默认 120 */\n maxAttempts?: number;\n /** 进度回调函数 */\n onProgress?: (attempt: number, status: TaskStatus) => void;\n}\n\n/**\n * HTTP 响应错误\n */\nexport class SeacloudError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public response?: any,\n ) {\n super(message);\n this.name = 'SeacloudError';\n }\n}\n","import type { SeacloudConfig } from './types.js';\n\n/**\n * 创建 SDK 配置\n * @param options 配置选项\n * @returns 完整的配置对象\n */\nexport function createConfig(options: SeacloudConfig = {}): Required<SeacloudConfig> {\n // 优先级:传入的 apiKey > 环境变量 API_SERVICE_TOKEN\n const apiKey = options.apiKey ||\n (typeof process !== 'undefined' ? process.env?.API_SERVICE_TOKEN : undefined) ||\n '';\n\n // 使用环境变量或传入的 baseUrl\n const baseUrl = options.baseUrl ||\n (typeof process !== 'undefined' ? process.env?.SEACLOUD_BASE_URL : undefined) ||\n 'https://api.seacloud.ai';\n\n // 使用全局 fetch 或自定义实现\n const fetchImpl = options.fetch || globalThis.fetch;\n\n if (!fetchImpl) {\n throw new Error('fetch is not available. Please provide a fetch implementation in config or upgrade to Node.js 18+');\n }\n\n return {\n apiKey,\n baseUrl,\n fetch: fetchImpl,\n timeout: options.timeout || 30000,\n };\n}\n\n/**\n * 验证配置\n * @param config 配置对象\n * @throws 如果配置无效\n */\nexport function validateConfig(config: Required<SeacloudConfig>): void {\n if (!config.apiKey) {\n throw new Error(\n 'API key is required. Set API_SERVICE_TOKEN environment variable or pass apiKey in config.'\n );\n }\n\n if (!config.baseUrl) {\n throw new Error('baseUrl is required');\n }\n\n if (typeof config.fetch !== 'function') {\n throw new Error('fetch must be a function');\n }\n}\n","import type { SeacloudConfig, TaskResult } from './types.js';\nimport { SeacloudError } from './types.js';\nimport { createConfig, validateConfig } from './config.js';\n\n/**\n * SeaCloud HTTP 客户端\n * 用于创建任务和查询任务状态\n */\nexport class SeacloudClient {\n private config: Required<SeacloudConfig>;\n\n constructor(config: SeacloudConfig = {}) {\n this.config = createConfig(config);\n validateConfig(this.config);\n }\n\n /**\n * 创建一个新任务\n * @param endpoint API 端点路径(例如:/model/tasks)\n * @param body 请求体\n * @returns 任务结果\n */\n async createTask(endpoint: string, body: Record<string, any>): Promise<TaskResult> {\n const url = `${this.config.baseUrl}${endpoint}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config.apiKey}`,\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new SeacloudError(\n `HTTP ${response.status}: ${errorBody}`,\n response.status,\n errorBody,\n );\n }\n\n const result = await response.json();\n return result as TaskResult;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof SeacloudError) {\n throw error;\n }\n\n if ((error as Error).name === 'AbortError') {\n throw new SeacloudError(`Request timeout after ${this.config.timeout}ms`);\n }\n\n throw new SeacloudError(\n `Request failed: ${(error as Error).message}`,\n undefined,\n error,\n );\n }\n }\n\n /**\n * 查询任务状态\n * @param endpoint API 端点路径(例如:/model/v1/generation)\n * @param taskId 任务 ID\n * @returns 任务结果\n */\n async getTaskStatus(endpoint: string, taskId: string): Promise<TaskResult> {\n const url = `${this.config.baseUrl}${endpoint}/task/${taskId}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new SeacloudError(\n `HTTP ${response.status}: ${errorBody}`,\n response.status,\n errorBody,\n );\n }\n\n const result = await response.json();\n return result as TaskResult;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof SeacloudError) {\n throw error;\n }\n\n if ((error as Error).name === 'AbortError') {\n throw new SeacloudError(`Request timeout after ${this.config.timeout}ms`);\n }\n\n throw new SeacloudError(\n `Request failed: ${(error as Error).message}`,\n undefined,\n error,\n );\n }\n }\n\n /**\n * 获取当前配置\n */\n getConfig(): Readonly<Required<SeacloudConfig>> {\n return { ...this.config };\n }\n}\n","#!/usr/bin/env node\n\nimport { SeacloudClient } from './core/index.js';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\ninterface CliOptions {\n apiKey?: string;\n baseUrl?: string;\n model?: string;\n params?: Record<string, any>;\n}\n\nfunction showHelp() {\n console.log(`\nSeaCloud CLI - Test AI models from command line\n\nUsage:\n seacloud <model> [options]\n\nOptions:\n --api-key <key> API key (or set API_SERVICE_TOKEN env var)\n --base-url <url> Base URL (or set API_BASE_URL env var)\n --params <json> JSON parameters for the model\n\nExamples:\n # Test mureka song generator\n seacloud mureka_song_generator --params '{\"lyrics\":\"Happy birthday\",\"style\":\"pop\"}'\n\n # Test minimax TTS\n seacloud minimax_tts --params '{\"text\":\"Hello world\",\"voice_id\":\"male-qn-qingse\"}'\n\n # Test flux image generation\n seacloud flux_1_1_pro --params '{\"prompt\":\"a beautiful sunset\"}'\n\n # Use custom API key and base URL\n seacloud flux_1_1_pro --api-key sa-xxx --base-url http://localhost:8080 --params '{\"prompt\":\"test\"}'\n\nEnvironment Variables:\n API_SERVICE_TOKEN API authentication token\n API_BASE_URL Base URL for API endpoints\n`);\n}\n\nfunction parseArgs(args: string[]): CliOptions {\n const options: CliOptions = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case '--api-key':\n options.apiKey = args[++i];\n break;\n case '--base-url':\n options.baseUrl = args[++i];\n break;\n case '--model':\n options.model = args[++i];\n break;\n case '--params':\n try {\n options.params = JSON.parse(args[++i]);\n } catch (e) {\n console.error('Error: Invalid JSON for --params');\n process.exit(1);\n }\n break;\n }\n }\n\n return options;\n}\n\nasync function testModel(model: string, options: CliOptions) {\n const apiKey = options.apiKey || process.env.API_SERVICE_TOKEN;\n const baseUrl = options.baseUrl || process.env.API_BASE_URL || 'http://localhost:8080';\n\n if (!apiKey) {\n console.error('Error: API key not provided. Use --api-key or set API_SERVICE_TOKEN env var');\n process.exit(1);\n }\n\n if (!options.params) {\n console.error('Error: --params required. Provide JSON parameters for the model');\n process.exit(1);\n }\n\n console.log(`Testing model: ${model}`);\n console.log(`Base URL: ${baseUrl}`);\n console.log(`Parameters:`, JSON.stringify(options.params, null, 2));\n console.log('');\n\n const client = new SeacloudClient({ apiKey, baseUrl });\n\n try {\n console.log('Creating task...');\n const task = await client.createTask('/model/v1/generation', {\n model,\n input: [{ params: options.params }],\n });\n\n console.log(`Task created: ${task.id}`);\n console.log(`Initial status: ${task.status}`);\n console.log('');\n\n if (task.status === 'failed') {\n console.error('Task failed immediately:', task.error);\n process.exit(1);\n }\n\n console.log('Polling for results...');\n let attempt = 0;\n const maxAttempts = 120;\n const intervalMs = 3000;\n\n while (attempt < maxAttempts) {\n attempt++;\n\n const result = await client.getTaskStatus('/model/v1/generation', task.id);\n process.stdout.write(`\\rAttempt ${attempt}/${maxAttempts} - Status: ${result.status} `);\n\n if (result.status === 'completed') {\n console.log('\\n\\nTask completed!');\n console.log('\\nResults:');\n console.log(JSON.stringify(result.output, null, 2));\n\n // Extract URLs if available\n if (result.output) {\n const urls: string[] = [];\n for (const item of result.output) {\n if (item.content) {\n for (const resource of item.content) {\n if (resource.url) {\n urls.push(resource.url);\n }\n }\n }\n }\n\n if (urls.length > 0) {\n console.log('\\nGenerated URLs:');\n urls.forEach((url, i) => {\n console.log(` ${i + 1}. ${url}`);\n });\n }\n }\n\n process.exit(0);\n }\n\n if (result.status === 'failed') {\n console.log('\\n\\nTask failed!');\n console.error('Error:', result.error);\n process.exit(1);\n }\n\n await new Promise(resolve => setTimeout(resolve, intervalMs));\n }\n\n console.log('\\n\\nTimeout: Task did not complete within the time limit');\n process.exit(1);\n\n } catch (error: any) {\n console.error('\\nError:', error.message);\n process.exit(1);\n }\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n showHelp();\n process.exit(0);\n }\n\n const model = args[0];\n\n // Check if first arg looks like an option instead of a model name\n if (model.startsWith('--')) {\n console.error('Error: model name required');\n console.log('Usage: seacloud <model> --params <json>');\n process.exit(1);\n }\n\n const options = parseArgs(args.slice(1));\n await testModel(model, options);\n}\n\nmain().catch(console.error);\n"]}
1
+ {"version":3,"sources":["../src/core/types.ts","../src/core/config.ts","../src/core/client.ts","../src/cli.ts"],"names":["__filename"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * SeaCloud SDK 核心类型定义\n */\n\n/**\n * SDK 配置选项\n */\nexport interface SeacloudConfig {\n /** API Service Token - 从环境变量 API_SERVICE_TOKEN 读取或直接传入 */\n apiKey?: string;\n /** 代理服务器基础 URL,默认为 http://localhost:8080 */\n baseUrl?: string;\n /** 自定义 fetch 实现(可选,用于 Node.js < 18 或测试) */\n fetch?: typeof fetch;\n /** 请求超时时间(毫秒),默认 30000 */\n timeout?: number;\n}\n\n/**\n * 任务状态\n */\nexport type TaskStatus = 'pending' | 'processing' | 'in_progress' | 'completed' | 'failed';\n\n/**\n * 任务错误信息\n */\nexport interface TaskError {\n code: string;\n message: string;\n details?: any;\n}\n\n/**\n * 任务结果\n */\nexport interface TaskResult {\n /** 任务 ID */\n id: string;\n /** 创建时间戳 */\n created_at: number;\n /** 任务状态 */\n status: TaskStatus;\n /** 错误信息(如果失败) */\n error?: TaskError | null;\n /** 模型名称 */\n model: string;\n /** 输出结果 */\n output?: Array<{\n content?: Array<{\n type?: string;\n url?: string;\n size?: number;\n jobId?: string;\n [key: string]: any;\n }>;\n [key: string]: any;\n }>;\n /** 其他字段 */\n [key: string]: any;\n}\n\n/**\n * 任务轮询选项\n */\nexport interface PollingOptions {\n /** 轮询间隔(毫秒),默认 3000 */\n intervalMs?: number;\n /** 最大尝试次数,默认 120 */\n maxAttempts?: number;\n /** 进度回调函数 */\n onProgress?: (attempt: number, status: TaskStatus) => void;\n}\n\n/**\n * HTTP 响应错误\n */\nexport class SeacloudError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public response?: any,\n ) {\n super(message);\n this.name = 'SeacloudError';\n }\n}\n","import type { SeacloudConfig } from './types.js';\n\n/**\n * 创建 SDK 配置\n * @param options 配置选项\n * @returns 完整的配置对象\n */\nexport function createConfig(options: SeacloudConfig = {}): Required<SeacloudConfig> {\n // 优先级:传入的 apiKey > 环境变量 API_SERVICE_TOKEN\n const apiKey = options.apiKey ||\n (typeof process !== 'undefined' ? process.env?.API_SERVICE_TOKEN : undefined) ||\n '';\n\n // 使用环境变量或传入的 baseUrl\n const baseUrl = options.baseUrl ||\n (typeof process !== 'undefined' ? process.env?.SEACLOUD_BASE_URL : undefined) ||\n 'http://proxy.sg.seaverse.dev';\n\n // 使用全局 fetch 或自定义实现\n const fetchImpl = options.fetch || globalThis.fetch;\n\n if (!fetchImpl) {\n throw new Error('fetch is not available. Please provide a fetch implementation in config or upgrade to Node.js 18+');\n }\n\n return {\n apiKey,\n baseUrl,\n fetch: fetchImpl,\n timeout: options.timeout || 30000,\n };\n}\n\n/**\n * 验证配置\n * @param config 配置对象\n * @throws 如果配置无效\n */\nexport function validateConfig(config: Required<SeacloudConfig>): void {\n if (!config.apiKey) {\n throw new Error(\n 'API key is required. Set API_SERVICE_TOKEN environment variable or pass apiKey in config.'\n );\n }\n\n if (!config.baseUrl) {\n throw new Error('baseUrl is required');\n }\n\n if (typeof config.fetch !== 'function') {\n throw new Error('fetch must be a function');\n }\n}\n","import type { SeacloudConfig, TaskResult } from './types.js';\nimport { SeacloudError } from './types.js';\nimport { createConfig, validateConfig } from './config.js';\n\n/**\n * SeaCloud HTTP 客户端\n * 用于创建任务和查询任务状态\n */\nexport class SeacloudClient {\n private config: Required<SeacloudConfig>;\n\n constructor(config: SeacloudConfig = {}) {\n this.config = createConfig(config);\n validateConfig(this.config);\n }\n\n /**\n * 创建一个新任务\n * @param endpoint API 端点路径(例如:/model/tasks)\n * @param body 请求体\n * @returns 任务结果\n */\n async createTask(endpoint: string, body: Record<string, any>): Promise<TaskResult> {\n const url = `${this.config.baseUrl}${endpoint}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config.apiKey}`,\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new SeacloudError(\n `HTTP ${response.status}: ${errorBody}`,\n response.status,\n errorBody,\n );\n }\n\n const result = await response.json();\n return result as TaskResult;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof SeacloudError) {\n throw error;\n }\n\n if ((error as Error).name === 'AbortError') {\n throw new SeacloudError(`Request timeout after ${this.config.timeout}ms`);\n }\n\n throw new SeacloudError(\n `Request failed: ${(error as Error).message}`,\n undefined,\n error,\n );\n }\n }\n\n /**\n * 查询任务状态\n * @param endpoint API 端点路径(例如:/model/v1/generation)\n * @param taskId 任务 ID\n * @returns 任务结果\n */\n async getTaskStatus(endpoint: string, taskId: string): Promise<TaskResult> {\n const url = `${this.config.baseUrl}${endpoint}/task/${taskId}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new SeacloudError(\n `HTTP ${response.status}: ${errorBody}`,\n response.status,\n errorBody,\n );\n }\n\n const result = await response.json();\n return result as TaskResult;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof SeacloudError) {\n throw error;\n }\n\n if ((error as Error).name === 'AbortError') {\n throw new SeacloudError(`Request timeout after ${this.config.timeout}ms`);\n }\n\n throw new SeacloudError(\n `Request failed: ${(error as Error).message}`,\n undefined,\n error,\n );\n }\n }\n\n /**\n * 获取当前配置\n */\n getConfig(): Readonly<Required<SeacloudConfig>> {\n return { ...this.config };\n }\n}\n","#!/usr/bin/env node\n\nimport { SeacloudClient } from './core/index.js';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\ninterface CliOptions {\n apiKey?: string;\n baseUrl?: string;\n model?: string;\n params?: Record<string, any>;\n}\n\nfunction showHelp() {\n console.log(`\nSeaCloud CLI - Test AI models from command line\n\nUsage:\n seacloud <model> [options]\n\nOptions:\n --api-key <key> API key (or set API_SERVICE_TOKEN env var)\n --base-url <url> Base URL (or set API_BASE_URL env var)\n --params <json> JSON parameters for the model\n\nExamples:\n # Test mureka song generator\n seacloud mureka_song_generator --params '{\"lyrics\":\"Happy birthday\",\"style\":\"pop\"}'\n\n # Test minimax TTS\n seacloud minimax_tts --params '{\"text\":\"Hello world\",\"voice_id\":\"male-qn-qingse\"}'\n\n # Test flux image generation\n seacloud flux_1_1_pro --params '{\"prompt\":\"a beautiful sunset\"}'\n\n # Use custom API key and base URL\n seacloud flux_1_1_pro --api-key sa-xxx --base-url http://localhost:8080 --params '{\"prompt\":\"test\"}'\n\nEnvironment Variables:\n API_SERVICE_TOKEN API authentication token\n API_BASE_URL Base URL for API endpoints\n`);\n}\n\nfunction parseArgs(args: string[]): CliOptions {\n const options: CliOptions = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case '--api-key':\n options.apiKey = args[++i];\n break;\n case '--base-url':\n options.baseUrl = args[++i];\n break;\n case '--model':\n options.model = args[++i];\n break;\n case '--params':\n try {\n options.params = JSON.parse(args[++i]);\n } catch (e) {\n console.error('Error: Invalid JSON for --params');\n process.exit(1);\n }\n break;\n }\n }\n\n return options;\n}\n\nasync function testModel(model: string, options: CliOptions) {\n const apiKey = options.apiKey || process.env.API_SERVICE_TOKEN;\n const baseUrl = options.baseUrl || process.env.API_BASE_URL || 'http://localhost:8080';\n\n if (!apiKey) {\n console.error('Error: API key not provided. Use --api-key or set API_SERVICE_TOKEN env var');\n process.exit(1);\n }\n\n if (!options.params) {\n console.error('Error: --params required. Provide JSON parameters for the model');\n process.exit(1);\n }\n\n console.log(`Testing model: ${model}`);\n console.log(`Base URL: ${baseUrl}`);\n console.log(`Parameters:`, JSON.stringify(options.params, null, 2));\n console.log('');\n\n const client = new SeacloudClient({ apiKey, baseUrl });\n\n try {\n console.log('Creating task...');\n const task = await client.createTask('/model/v1/generation', {\n model,\n input: [{ params: options.params }],\n });\n\n console.log(`Task created: ${task.id}`);\n console.log(`Initial status: ${task.status}`);\n console.log('');\n\n if (task.status === 'failed') {\n console.error('Task failed immediately:', task.error);\n process.exit(1);\n }\n\n console.log('Polling for results...');\n let attempt = 0;\n const maxAttempts = 120;\n const intervalMs = 3000;\n\n while (attempt < maxAttempts) {\n attempt++;\n\n const result = await client.getTaskStatus('/model/v1/generation', task.id);\n process.stdout.write(`\\rAttempt ${attempt}/${maxAttempts} - Status: ${result.status} `);\n\n if (result.status === 'completed') {\n console.log('\\n\\nTask completed!');\n console.log('\\nResults:');\n console.log(JSON.stringify(result.output, null, 2));\n\n // Extract URLs if available\n if (result.output) {\n const urls: string[] = [];\n for (const item of result.output) {\n if (item.content) {\n for (const resource of item.content) {\n if (resource.url) {\n urls.push(resource.url);\n }\n }\n }\n }\n\n if (urls.length > 0) {\n console.log('\\nGenerated URLs:');\n urls.forEach((url, i) => {\n console.log(` ${i + 1}. ${url}`);\n });\n }\n }\n\n process.exit(0);\n }\n\n if (result.status === 'failed') {\n console.log('\\n\\nTask failed!');\n console.error('Error:', result.error);\n process.exit(1);\n }\n\n await new Promise(resolve => setTimeout(resolve, intervalMs));\n }\n\n console.log('\\n\\nTimeout: Task did not complete within the time limit');\n process.exit(1);\n\n } catch (error: any) {\n console.error('\\nError:', error.message);\n process.exit(1);\n }\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n showHelp();\n process.exit(0);\n }\n\n const model = args[0];\n\n // Check if first arg looks like an option instead of a model name\n if (model.startsWith('--')) {\n console.error('Error: model name required');\n console.log('Usage: seacloud <model> --params <json>');\n process.exit(1);\n }\n\n const options = parseArgs(args.slice(1));\n await testModel(model, options);\n}\n\nmain().catch(console.error);\n"]}
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ var SeacloudError = class extends Error {
11
11
  // src/core/config.ts
12
12
  function createConfig(options = {}) {
13
13
  const apiKey = options.apiKey || (typeof process !== "undefined" ? process.env?.API_SERVICE_TOKEN : void 0) || "";
14
- const baseUrl = options.baseUrl || (typeof process !== "undefined" ? process.env?.SEACLOUD_BASE_URL : void 0) || "https://api.seacloud.ai";
14
+ const baseUrl = options.baseUrl || (typeof process !== "undefined" ? process.env?.SEACLOUD_BASE_URL : void 0) || "http://proxy.sg.seaverse.dev";
15
15
  const fetchImpl = options.fetch || globalThis.fetch;
16
16
  if (!fetchImpl) {
17
17
  throw new Error("fetch is not available. Please provide a fetch implementation in config or upgrade to Node.js 18+");