@nodeskai/genehub 2026.3.2-9 → 2026.3.3-2

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/config.ts","../src/config.ts","../src/output.ts","../src/commands/init.ts","../src/commands/install.ts","../src/commands/learn.ts","../src/commands/list.ts","../src/commands/publish.ts","../src/commands/search.ts","../src/commands/uninstall.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { configCommand } from './commands/config.js';\nimport { initCommand } from './commands/init.js';\nimport { installCommand } from './commands/install.js';\nimport { learnCommand } from './commands/learn.js';\nimport { listCommand } from './commands/list.js';\nimport { publishCommand } from './commands/publish.js';\nimport { searchCommand } from './commands/search.js';\nimport { uninstallCommand } from './commands/uninstall.js';\n\nconst program = new Command();\n\nprogram.name('genehub').description('GeneHub CLI - AI 员工基因管理工具').version('0.1.0');\n\nprogram.addCommand(installCommand);\nprogram.addCommand(uninstallCommand);\nprogram.addCommand(searchCommand);\nprogram.addCommand(listCommand);\nprogram.addCommand(publishCommand);\nprogram.addCommand(initCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(learnCommand);\n\nprogram.parse();\n","import { Command } from 'commander';\nimport { loadConfig, saveConfig } from '../config.js';\nimport * as output from '../output.js';\n\nexport const configCommand = new Command('config').description('管理 GeneHub CLI 配置');\n\nconfigCommand\n .command('set <key> <value>')\n .description('设置配置项(registry / token)')\n .action(async (key: string, value: string) => {\n const validKeys = ['registry', 'token'] as const;\n if (!validKeys.includes(key as (typeof validKeys)[number])) {\n output.fail(`无效的配置项: ${key},可选: ${validKeys.join(', ')}`);\n return;\n }\n\n if (key === 'registry') {\n await saveConfig({ registryUrl: value });\n } else if (key === 'token') {\n await saveConfig({ token: value });\n }\n\n output.ok(`${key} = ${key === 'token' ? `${value.slice(0, 8)}***` : value}`);\n });\n\nconfigCommand\n .command('get [key]')\n .description('查看配置')\n .action(async (key?: string) => {\n const config = await loadConfig();\n\n if (key) {\n const map: Record<string, string | undefined> = {\n registry: config.registryUrl,\n token: config.token ? `${config.token.slice(0, 8)}***` : undefined,\n };\n output.info(`${key} = ${map[key] ?? '(未设置)'}`);\n } else {\n output.info(`registry = ${config.registryUrl}`);\n output.info(`token = ${config.token ? `${config.token.slice(0, 8)}***` : '(未设置)'}`);\n }\n });\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nconst CONFIG_DIR = join(homedir(), '.genehub');\nconst CONFIG_PATH = join(CONFIG_DIR, 'config.json');\n\nexport type CliConfig = {\n registryUrl: string;\n token?: string;\n};\n\nconst DEFAULT_CONFIG: CliConfig = {\n registryUrl: 'https://genehub.nodeskai.com',\n};\n\nexport async function loadConfig(): Promise<CliConfig> {\n try {\n const raw = await readFile(CONFIG_PATH, 'utf-8');\n return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };\n } catch {\n return DEFAULT_CONFIG;\n }\n}\n\nexport async function saveConfig(config: Partial<CliConfig>): Promise<void> {\n const current = await loadConfig();\n const merged = { ...current, ...config };\n await mkdir(CONFIG_DIR, { recursive: true });\n await writeFile(CONFIG_PATH, JSON.stringify(merged, null, 2), 'utf-8');\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\n\nexport function info(msg: string) {\n console.log(chalk.blue('i'), msg);\n}\n\nexport function ok(msg: string) {\n console.log(chalk.green('+'), msg);\n}\n\nexport function warn(msg: string) {\n console.log(chalk.yellow('!'), msg);\n}\n\nexport function fail(msg: string) {\n console.error(chalk.red('x'), msg);\n}\n\nexport function table(headers: string[], rows: string[][]) {\n const t = new Table({\n head: headers.map((h) => chalk.cyan(h)),\n style: { head: [], border: [] },\n });\n for (const row of rows) {\n t.push(row);\n }\n console.log(t.toString());\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { stringify } from 'yaml';\nimport * as output from '../output.js';\n\nconst TEMPLATE = {\n slug: 'my-gene',\n name: '我的基因',\n version: '1.0.0',\n description: '基因功能描述',\n short_description: '一句话描述',\n category: 'development',\n tags: ['ability'],\n author: { type: 'human', name: '' },\n compatibility: [\n { product: 'openclaw', min_version: '0.5.0' },\n { product: 'nanobot', min_version: '0.1.0' },\n ],\n dependencies: [],\n synergies: [],\n skill: {\n name: 'my-gene',\n always: false,\n file: 'SKILL.md',\n },\n rules: [],\n config: {},\n mcp_servers: [],\n learning: {\n force_deep_learn: false,\n objectives: [],\n scenarios: [],\n },\n};\n\nconst SKILL_TEMPLATE = `---\nname: my-gene\ndescription: 一句话描述\nmetadata:\n openclaw:\n always: false\n nanobot:\n always: false\n---\n\n在此编写基因的技能描述...\n`;\n\nexport const initCommand = new Command('init')\n .description('初始化基因模板')\n .argument('[path]', '目标目录', '.')\n .action(async (dirPath: string) => {\n const absPath = resolve(dirPath);\n\n try {\n await mkdir(absPath, { recursive: true });\n\n const yamlPath = join(absPath, 'gene.yaml');\n await writeFile(yamlPath, stringify(TEMPLATE), 'utf-8');\n\n const skillPath = join(absPath, 'SKILL.md');\n await writeFile(skillPath, SKILL_TEMPLATE, 'utf-8');\n\n output.ok(`基因模板已创建:`);\n output.info(` ${yamlPath}`);\n output.info(` ${skillPath}`);\n output.info('编辑这两个文件后,使用 genehub publish 发布');\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { detectAdapter, GeneHubClient, getAdapter, LearningEngine } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nfunction parseSlugVersion(input: string): { slug: string; version?: string } {\n const atIdx = input.lastIndexOf('@');\n if (atIdx > 0) {\n return { slug: input.slice(0, atIdx), version: input.slice(atIdx + 1) };\n }\n return { slug: input };\n}\n\nexport const installCommand = new Command('install')\n .description('安装基因到当前 Agent 环境')\n .argument('<slug>', '基因标识符(支持 slug@version 格式)')\n .option('-p, --product <product>', '指定目标产品(openclaw / nanobot / generic)')\n .option('-f, --force', '强制覆盖已安装版本', false)\n .option('--target <path>', '指定安装目标路径')\n .option('--learn', '安装后自动触发深度学习', false)\n .action(async (rawSlug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n const { slug, version } = parseSlugVersion(rawSlug);\n const spinner = ora(`获取基因 ${slug}${version ? `@${version}` : ''} 的 manifest...`).start();\n\n try {\n const manifest = await client.getManifest(slug, version);\n spinner.succeed(`获取 ${manifest.name} v${manifest.version}`);\n\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n output.info(`目标产品: ${adapter.product}`);\n\n if (!opts.force && (await adapter.isInstalled(slug))) {\n const installedVer = await adapter.getInstalledVersion(slug);\n output.warn(`${slug}${installedVer ? ` v${installedVer}` : ''} 已安装,使用 --force 覆盖`);\n return;\n }\n\n const installSpinner = ora('安装中...').start();\n const result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n installSpinner.succeed('安装完成');\n\n output.ok(`${result.slug}@${result.version} 安装成功`);\n output.info(`文件: ${result.files.join(', ')}`);\n\n if (result.needsRestart) {\n output.warn('需要重启 Agent Host 使基因生效');\n }\n\n if (result.dependencies.length > 0) {\n output.info(`依赖基因: ${result.dependencies.join(', ')}`);\n }\n\n try {\n await client.reportInstall(slug);\n } catch {\n // non-critical\n }\n\n if (opts.learn) {\n const workspaceDir =\n adapter.product === 'openclaw'\n ? join(homedir(), '.openclaw', 'workspace')\n : adapter.product === 'nanobot'\n ? join(homedir(), '.nanobot', 'workspace')\n : join(process.cwd(), '.genehub');\n\n const engine = new LearningEngine({ workspaceDir, adapter });\n const learnSpinner = ora('生成学习任务...').start();\n await engine.createLearningTask(manifest);\n learnSpinner.succeed('学习任务已创建,Agent 将在下次对话中处理');\n }\n } catch (err) {\n spinner.fail('安装失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { detectAdapter, GeneHubClient, getAdapter, LearningEngine } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nfunction getWorkspaceDir(product: string): string {\n switch (product) {\n case 'openclaw':\n return join(homedir(), '.openclaw', 'workspace');\n case 'nanobot':\n return join(homedir(), '.nanobot', 'workspace');\n default:\n return join(process.cwd(), '.genehub');\n }\n}\n\nexport const learnCommand = new Command('learn')\n .description('触发基因深度学习(L2)')\n .argument('<slug>', '基因标识符')\n .option('-p, --product <product>', '指定目标产品')\n .option('--check', '检查学习结果并应用')\n .action(async (slug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n const workspaceDir = getWorkspaceDir(adapter.product);\n const engine = new LearningEngine({ workspaceDir, adapter });\n\n if (opts.check) {\n const spinner = ora('检查学习结果...').start();\n const result = await engine.checkResult(slug);\n\n if (!result) {\n spinner.fail('未找到学习结果');\n output.info('Agent 还未完成该基因的学习任务');\n\n const pending = await engine.listPendingTasks();\n if (pending.length > 0) {\n output.info(`待完成的学习任务: ${pending.join(', ')}`);\n }\n return;\n }\n\n spinner.succeed(`学习结果: ${result.decision}`);\n\n if (result.self_eval !== undefined) {\n output.info(`自评分: ${result.self_eval}`);\n }\n if (result.reason) {\n output.info(`理由: ${result.reason}`);\n }\n\n if (result.decision === 'learned' && result.content) {\n const skillsDir = join(workspaceDir, 'skills');\n const applied = await engine.applyResult(slug, skillsDir);\n if (applied) {\n output.ok('已将个性化版本应用到技能目录');\n }\n }\n\n return;\n }\n\n const spinner = ora(`获取 ${slug} 的 manifest...`).start();\n\n try {\n const manifest = await client.getManifest(slug);\n spinner.succeed(`获取 ${manifest.name} v${manifest.version}`);\n\n if (!manifest.learning?.objectives?.length && !manifest.learning?.scenarios?.length) {\n output.warn('该基因没有定义学习目标或练习场景,将创建基础学习任务');\n }\n\n const learnSpinner = ora('生成学习任务...').start();\n const task = await engine.createLearningTask(manifest);\n learnSpinner.succeed('学习任务已创建');\n\n output.ok(`任务文件: ${join(workspaceDir, 'learning-tasks', `${slug}.md`)}`);\n output.info(`结果路径: ${task.callback_path}`);\n output.info('');\n output.info('下一步:');\n output.info(' 1. Agent 在下次对话中会自动发现并处理学习任务');\n output.info(` 2. 学习完成后运行: genehub learn --check ${slug}`);\n } catch (err) {\n spinner.fail('学习任务创建失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { detectAdapter, getAdapter } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport * as output from '../output.js';\n\nexport const listCommand = new Command('list')\n .description('列出当前环境已安装的基因')\n .option('-p, --product <product>', '指定目标产品')\n .option('--json', 'JSON 格式输出', false)\n .action(async (opts) => {\n try {\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n const genes = await adapter.list();\n\n if (opts.json) {\n console.log(JSON.stringify(genes, null, 2));\n return;\n }\n\n if (genes.length === 0) {\n output.info(`[${adapter.product}] 没有已安装的基因`);\n return;\n }\n\n output.info(`[${adapter.product}] 已安装 ${genes.length} 个基因:\\n`);\n\n for (const gene of genes) {\n const date = new Date(gene.installedAt).toLocaleDateString('zh-CN');\n console.log(` ${gene.slug.padEnd(24)} v${gene.version.padEnd(10)} ${date}`);\n }\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { readFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { GeneHubClient } from '@nodeskai/genehub-sdk';\nimport { GeneManifestSchema } from '@nodeskai/genehub-types';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { parse } from 'yaml';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nexport const publishCommand = new Command('publish')\n .description('发布基因到 GeneHub Registry')\n .argument('<path>', '基因目录路径(包含 gene.yaml)')\n .action(async (dirPath: string) => {\n const config = await loadConfig();\n\n if (!config.token) {\n output.fail('未配置认证 token,请先运行 genehub config --token <token>');\n process.exit(1);\n }\n\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n const absPath = resolve(dirPath);\n\n try {\n const yamlPath = join(absPath, 'gene.yaml');\n const raw = await readFile(yamlPath, 'utf-8');\n const parsed = parse(raw);\n\n const skillMdPath = join(absPath, 'SKILL.md');\n if (parsed.skill?.file && !parsed.skill.content) {\n try {\n parsed.skill.content = await readFile(join(absPath, parsed.skill.file), 'utf-8');\n } catch {\n parsed.skill.content = await readFile(skillMdPath, 'utf-8');\n }\n }\n\n const validation = GeneManifestSchema.safeParse(parsed);\n if (!validation.success) {\n output.fail('Manifest 校验失败:');\n for (const issue of validation.error.issues) {\n output.fail(` ${issue.path.join('.')}: ${issue.message}`);\n }\n process.exit(1);\n }\n\n const spinner = ora(`发布 ${validation.data.slug}@${validation.data.version}...`).start();\n const gene = await client.publishGene(validation.data);\n spinner.succeed('发布成功');\n\n output.ok(`${gene.slug}@${gene.version} 已发布到 GeneHub Registry`);\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { GeneHubClient } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nexport const searchCommand = new Command('search')\n .description('搜索基因库')\n .argument('[keyword]', '搜索关键词')\n .option('-c, --category <category>', '按分类过滤')\n .option('-t, --tags <tags>', '按标签过滤(逗号分隔)')\n .option('--compat <product>', '按兼容产品过滤')\n .option('-s, --sort <sort>', '排序方式(newest / popular / rating)', 'newest')\n .option('--page <page>', '页码', '1')\n .option('--json', 'JSON 格式输出', false)\n .action(async (keyword: string | undefined, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n try {\n const result = await client.searchGenes({\n q: keyword,\n category: opts.category,\n tags: opts.tags?.split(','),\n compatibility: opts.compat,\n sort: opts.sort,\n page: Number(opts.page),\n });\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.items.length === 0) {\n output.info('未找到匹配的基因');\n return;\n }\n\n output.table(\n ['slug', '名称', '版本', '分类', '兼容', '安装数'],\n result.items.map((g) => [\n g.slug,\n g.name,\n g.version,\n g.category,\n (g.compatibility as string[]).join(', '),\n String(g.install_count),\n ]),\n );\n\n output.info(`共 ${result.total} 条结果,第 ${result.page}/${result.total_pages} 页`);\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { detectAdapter, getAdapter } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport * as output from '../output.js';\n\nexport const uninstallCommand = new Command('uninstall')\n .description('从当前 Agent 环境卸载基因')\n .argument('<slug>', '基因标识符')\n .option('-p, --product <product>', '指定目标产品(openclaw / nanobot / generic)')\n .action(async (slug: string, opts) => {\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n output.info(`目标产品: ${adapter.product}`);\n\n if (!(await adapter.isInstalled(slug))) {\n output.warn(`${slug} 未安装`);\n return;\n }\n\n const spinner = ora('卸载中...').start();\n\n try {\n const result = await adapter.uninstall(slug);\n spinner.succeed('卸载完成');\n\n output.ok(`${result.slug} 已卸载`);\n output.info(`清理文件: ${result.files.join(', ')}`);\n\n if (result.needsRestart) {\n output.warn('需要重启 Agent Host 使变更生效');\n }\n } catch (err) {\n spinner.fail('卸载失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n"],"mappings":"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","names":["Command","mkdir","writeFile","join","Command","Command","mkdir","join","writeFile","homedir","join","Command","Command","join","homedir","homedir","join","detectAdapter","GeneHubClient","getAdapter","LearningEngine","Command","ora","join","homedir","Command","GeneHubClient","getAdapter","detectAdapter","LearningEngine","spinner","ora","detectAdapter","getAdapter","Command","Command","getAdapter","detectAdapter","readFile","join","resolve","GeneHubClient","Command","ora","Command","GeneHubClient","resolve","join","readFile","ora","GeneHubClient","Command","Command","GeneHubClient","detectAdapter","getAdapter","Command","ora","Command","getAdapter","detectAdapter","ora","Command"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/auth.ts","../src/config.ts","../src/output.ts","../src/commands/config.ts","../src/commands/genome.ts","../src/commands/init.ts","../src/commands/install.ts","../src/commands/learn.ts","../src/commands/list.ts","../src/commands/publish.ts","../src/commands/search.ts","../src/commands/template.ts","../src/commands/uninstall.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { authCommand } from './commands/auth.js';\nimport { configCommand } from './commands/config.js';\nimport { genomeCommand } from './commands/genome.js';\nimport { initCommand } from './commands/init.js';\nimport { installCommand } from './commands/install.js';\nimport { learnCommand } from './commands/learn.js';\nimport { listCommand } from './commands/list.js';\nimport { publishCommand } from './commands/publish.js';\nimport { searchCommand } from './commands/search.js';\nimport { templateCommand } from './commands/template.js';\nimport { uninstallCommand } from './commands/uninstall.js';\n\nconst program = new Command();\n\nprogram.name('genehub').description('GeneHub CLI - AI 员工基因管理工具').version('0.1.0');\n\nprogram.addCommand(authCommand);\nprogram.addCommand(installCommand);\nprogram.addCommand(uninstallCommand);\nprogram.addCommand(searchCommand);\nprogram.addCommand(listCommand);\nprogram.addCommand(publishCommand);\nprogram.addCommand(initCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(learnCommand);\nprogram.addCommand(genomeCommand);\nprogram.addCommand(templateCommand);\n\nprogram.parse();\n","import { createServer } from 'node:http';\nimport { Command } from 'commander';\nimport { loadConfig, saveConfig } from '../config.js';\nimport * as output from '../output.js';\n\nexport const authCommand = new Command('auth').description('认证管理');\n\nauthCommand\n .command('login')\n .description('通过 GitHub OAuth 登录并自动创建 API Key')\n .action(async () => {\n const config = await loadConfig();\n const registryUrl = config.registryUrl.replace(/\\/$/, '');\n\n const port = await findAvailablePort(9876);\n const callbackUrl = `http://localhost:${port}/callback`;\n\n const tokenPromise = waitForCallback(port);\n\n const authUrl = `${registryUrl}/auth/github?cli_callback=${encodeURIComponent(callbackUrl)}`;\n output.info(`Opening browser for GitHub login...`);\n output.info(` ${authUrl}`);\n\n const open = await import('open').catch(() => null);\n if (open) {\n await open.default(authUrl);\n } else {\n output.warn('Cannot open browser automatically. Please open the URL above manually.');\n }\n\n try {\n const { token, login } = await tokenPromise;\n await saveConfig({ token });\n output.ok(`Logged in as @${login}`);\n output.ok(`Token saved to config (${token.slice(0, 12)}****)`);\n } catch (err) {\n output.fail(err instanceof Error ? err.message : 'Login failed');\n process.exit(1);\n }\n });\n\nauthCommand\n .command('status')\n .description('查看当前登录状态')\n .action(async () => {\n const config = await loadConfig();\n\n if (!config.token) {\n output.info('Not logged in');\n output.info(' Run: genehub auth login');\n return;\n }\n\n output.ok(`Token: ${config.token.slice(0, 12)}****`);\n output.info(`Registry: ${config.registryUrl}`);\n });\n\nauthCommand\n .command('logout')\n .description('退出登录(清除本地 token)')\n .action(async () => {\n await saveConfig({ token: undefined });\n output.ok('Logged out. Token removed.');\n });\n\nfunction findAvailablePort(preferred: number): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.listen(preferred, () => {\n server.close(() => resolve(preferred));\n });\n server.on('error', () => {\n const fallback = createServer();\n fallback.listen(0, () => {\n const addr = fallback.address();\n const port = typeof addr === 'object' && addr ? addr.port : 0;\n fallback.close(() => resolve(port));\n });\n fallback.on('error', reject);\n });\n });\n}\n\nfunction waitForCallback(port: number): Promise<{ token: string; login: string }> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n server.close();\n reject(new Error('Login timeout (60s)'));\n }, 60_000);\n\n const server = createServer((req, res) => {\n if (!req.url?.startsWith('/callback')) {\n res.writeHead(404);\n res.end();\n return;\n }\n\n const url = new URL(req.url, `http://localhost:${port}`);\n const token = url.searchParams.get('token');\n const login = url.searchParams.get('login');\n\n if (!token) {\n res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end('<h2>Login failed</h2><p>No token received.</p>');\n return;\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(`<h2>Login successful</h2><p>@${login ?? 'unknown'} - you can close this tab.</p>`);\n\n clearTimeout(timeout);\n server.close();\n resolve({ token, login: login ?? '' });\n });\n\n server.listen(port);\n });\n}\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nconst CONFIG_DIR = join(homedir(), '.genehub');\nconst CONFIG_PATH = join(CONFIG_DIR, 'config.json');\n\nexport type CliConfig = {\n registryUrl: string;\n token?: string;\n};\n\nconst DEFAULT_CONFIG: CliConfig = {\n registryUrl: 'https://genehub.nodeskai.com',\n};\n\n/**\n * Priority: env vars > config file > defaults\n *\n * - GENEHUB_REGISTRY_URL / GENEHUB_REGISTRY\n * - GENEHUB_TOKEN\n */\nexport async function loadConfig(): Promise<CliConfig> {\n let fileConfig: Partial<CliConfig> = {};\n try {\n const raw = await readFile(CONFIG_PATH, 'utf-8');\n fileConfig = JSON.parse(raw);\n } catch {\n // no config file, use defaults\n }\n\n const merged = { ...DEFAULT_CONFIG, ...fileConfig };\n\n const envUrl = process.env.GENEHUB_REGISTRY_URL ?? process.env.GENEHUB_REGISTRY;\n if (envUrl) {\n merged.registryUrl = envUrl;\n }\n\n const envToken = process.env.GENEHUB_TOKEN;\n if (envToken) {\n merged.token = envToken;\n }\n\n return merged;\n}\n\nexport function getConfigSource(key: 'registry' | 'token'): 'env' | 'file' | 'default' {\n if (key === 'registry') {\n if (process.env.GENEHUB_REGISTRY_URL || process.env.GENEHUB_REGISTRY) return 'env';\n }\n if (key === 'token') {\n if (process.env.GENEHUB_TOKEN) return 'env';\n }\n return 'file';\n}\n\nexport async function saveConfig(config: Partial<CliConfig>): Promise<void> {\n const current = await loadConfig();\n const merged = { ...current, ...config };\n await mkdir(CONFIG_DIR, { recursive: true });\n await writeFile(CONFIG_PATH, JSON.stringify(merged, null, 2), 'utf-8');\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\n\nexport function info(msg: string) {\n console.log(chalk.blue('i'), msg);\n}\n\nexport function ok(msg: string) {\n console.log(chalk.green('+'), msg);\n}\n\nexport function warn(msg: string) {\n console.log(chalk.yellow('!'), msg);\n}\n\nexport function fail(msg: string) {\n console.error(chalk.red('x'), msg);\n}\n\nexport function table(headers: string[], rows: string[][]) {\n const t = new Table({\n head: headers.map((h) => chalk.cyan(h)),\n style: { head: [], border: [] },\n });\n for (const row of rows) {\n t.push(row);\n }\n console.log(t.toString());\n}\n","import { Command } from 'commander';\nimport { getConfigSource, loadConfig, saveConfig } from '../config.js';\nimport * as output from '../output.js';\n\nexport const configCommand = new Command('config').description('管理 GeneHub CLI 配置');\n\nfunction sourceLabel(source: 'env' | 'file' | 'default'): string {\n if (source === 'env') return ' [env]';\n if (source === 'default') return ' [default]';\n return '';\n}\n\nconfigCommand\n .command('set <key> <value>')\n .description('设置配置项(registry / token)')\n .action(async (key: string, value: string) => {\n const validKeys = ['registry', 'token'] as const;\n if (!validKeys.includes(key as (typeof validKeys)[number])) {\n output.fail(`无效的配置项: ${key},可选: ${validKeys.join(', ')}`);\n return;\n }\n\n if (key === 'registry') {\n await saveConfig({ registryUrl: value });\n } else if (key === 'token') {\n await saveConfig({ token: value });\n }\n\n output.ok(`${key} = ${key === 'token' ? `${value.slice(0, 8)}***` : value}`);\n });\n\nconfigCommand\n .command('get [key]')\n .description('查看配置(支持 GENEHUB_REGISTRY_URL / GENEHUB_TOKEN 环境变量覆盖)')\n .action(async (key?: string) => {\n const config = await loadConfig();\n\n if (key) {\n const map: Record<string, string | undefined> = {\n registry: config.registryUrl,\n token: config.token ? `${config.token.slice(0, 8)}***` : undefined,\n };\n const src = sourceLabel(getConfigSource(key as 'registry' | 'token'));\n output.info(`${key} = ${map[key] ?? '(未设置)'}${src}`);\n } else {\n const regSrc = sourceLabel(getConfigSource('registry'));\n const tokSrc = sourceLabel(getConfigSource('token'));\n output.info(`registry = ${config.registryUrl}${regSrc}`);\n output.info(\n `token = ${config.token ? `${config.token.slice(0, 8)}***` : '(未设置)'}${tokSrc}`,\n );\n }\n });\n","import { readdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join, relative, resolve } from 'node:path';\nimport { detectAdapter, GeneHubClient, getAdapter } from '@nodeskai/genehub-sdk';\nimport type { InstallResult } from '@nodeskai/genehub-types';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { parse } from 'yaml';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nconst IGNORED_PATTERNS = ['.git', 'node_modules', '.DS_Store', '__pycache__', '.venv'];\n\nasync function scanDirectory(dirPath: string): Promise<Record<string, string>> {\n const files: Record<string, string> = {};\n\n async function walk(currentPath: string) {\n const entries = await readdir(currentPath, { withFileTypes: true });\n for (const entry of entries) {\n if (IGNORED_PATTERNS.includes(entry.name)) continue;\n const fullPath = join(currentPath, entry.name);\n if (entry.isDirectory()) {\n await walk(fullPath);\n } else if (entry.isFile()) {\n const relPath = relative(dirPath, fullPath);\n const content = await readFile(fullPath, 'utf-8');\n files[relPath] = content;\n }\n }\n }\n\n await walk(dirPath);\n return files;\n}\n\nasync function extractTarGz(buffer: ArrayBuffer, destDir: string): Promise<void> {\n const { mkdir } = await import('node:fs/promises');\n await mkdir(destDir, { recursive: true });\n const { extract } = await import('tar');\n const tarPath = join(tmpdir(), `genehub-genome-${Date.now()}.tar.gz`);\n await writeFile(tarPath, Buffer.from(buffer));\n try {\n await extract({ file: tarPath, cwd: destDir, strip: 1 });\n } finally {\n await rm(tarPath, { force: true });\n }\n}\n\ntype GenomeYaml = {\n name: string;\n slug: string;\n version: string;\n description?: string;\n short_description?: string;\n category?: string;\n tags?: string[];\n icon?: string;\n genes: { slug: string; version: string; config_override?: Record<string, unknown> }[];\n compatibility?: string[];\n author?: { type: string; id?: string; name: string };\n};\n\nconst publishGenomeCommand = new Command('publish')\n .description('发布基因组到 GeneHub Registry')\n .argument('<path>', '基因组目录路径(包含 genome.yaml)')\n .action(async (dirPath: string) => {\n const config = await loadConfig();\n\n if (!config.token) {\n output.fail('未配置认证 token');\n process.exit(1);\n }\n\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n const absPath = resolve(dirPath);\n\n try {\n const yamlPath = join(absPath, 'genome.yaml');\n const raw = await readFile(yamlPath, 'utf-8');\n const parsed = parse(raw) as GenomeYaml;\n\n if (!parsed.name || !parsed.slug || !parsed.version || !parsed.genes?.length) {\n output.fail('genome.yaml 缺少必填字段: name, slug, version, genes');\n process.exit(1);\n }\n\n const scanSpinner = ora('扫描基因组目录...').start();\n const files = await scanDirectory(absPath);\n const fileCount = Object.keys(files).length;\n scanSpinner.succeed(`扫描完成: ${fileCount} 个文件`);\n\n const spinner = ora(`发布基因组 ${parsed.slug}@${parsed.version}...`).start();\n\n try {\n const genome = await client.publishGenome(parsed, files);\n spinner.succeed('发布成功');\n output.ok(\n `${genome.slug}@${genome.version} 已发布到 GeneHub Registry (${fileCount} 个文件)`,\n );\n } catch (err) {\n const isSlugExists = err instanceof Error && err.message.includes('genome_slug_exists');\n if (!isSlugExists) throw err;\n\n spinner.text = `基因组 ${parsed.slug} 已存在,发布新版本 ${parsed.version}...`;\n const genome = await client.publishGenomeVersion(\n parsed.slug,\n { version: parsed.version, genes: parsed.genes, files },\n files,\n );\n spinner.succeed('发布成功');\n output.ok(`${genome.slug}@${genome.version} 新版本已发布 (${fileCount} 个文件)`);\n }\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst installGenomeCommand = new Command('install')\n .description('安装基因组(递归安装所有引用的基因)')\n .argument('<slug>', '基因组标识符(支持 slug@version 格式)')\n .option('-p, --product <product>', '指定目标产品')\n .option('-f, --force', '强制覆盖已安装基因', false)\n .option('--target <path>', '指定安装目标路径')\n .action(async (rawSlug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n const atIdx = rawSlug.lastIndexOf('@');\n const slug = atIdx > 0 ? rawSlug.slice(0, atIdx) : rawSlug;\n const version = atIdx > 0 ? rawSlug.slice(atIdx + 1) : undefined;\n\n const spinner = ora(`获取基因组 ${slug}...`).start();\n\n try {\n const genome = await client.getGenome(slug);\n spinner.succeed(`基因组: ${genome.name} v${genome.version} (${genome.genes.length} 个基因)`);\n\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n output.info(`目标产品: ${adapter.product}`);\n\n const resolveSpinner = ora('解析基因依赖...').start();\n const resolved = await client.resolveGenome(slug, version);\n resolveSpinner.succeed(`解析完成: ${resolved.genes.length} 个基因(含依赖)`);\n\n if (resolved.warnings.length > 0) {\n for (const w of resolved.warnings) output.warn(w);\n }\n if (resolved.conflicts.length > 0) {\n for (const c of resolved.conflicts) output.warn(`冲突: ${c}`);\n }\n\n let installed = 0;\n let skipped = 0;\n\n for (const gene of resolved.genes) {\n if (!opts.force && (await adapter.isInstalled(gene.slug))) {\n skipped++;\n continue;\n }\n\n const geneSpinner = ora(` 安装 ${gene.slug}@${gene.version}...`).start();\n\n try {\n const manifest = await client.getManifest(gene.slug, gene.version);\n let result: InstallResult | undefined;\n\n try {\n const archive = await client.downloadArchive(gene.slug, gene.version);\n const tempDir = join(tmpdir(), `genehub-install-${gene.slug}-${Date.now()}`);\n await extractTarGz(archive, tempDir);\n\n if (adapter.installFromDirectory) {\n result = await adapter.installFromDirectory(tempDir, manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n } else {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n await rm(tempDir, { recursive: true, force: true });\n } catch {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n geneSpinner.succeed(` ${result.slug}@${result.version}`);\n installed++;\n\n try {\n await client.reportInstall(gene.slug);\n } catch {\n // non-critical\n }\n } catch (err) {\n geneSpinner.fail(\n ` ${gene.slug} 安装失败: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n output.ok(`基因组安装完成: ${installed} 安装, ${skipped} 跳过`);\n\n try {\n await client.reportGenomeInstall(slug);\n } catch {\n // non-critical\n }\n } catch (err) {\n spinner.fail('安装失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst infoGenomeCommand = new Command('info')\n .description('查看基因组详情')\n .argument('<slug>', '基因组标识符')\n .option('--json', 'JSON 格式输出', false)\n .action(async (slug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n try {\n const genome = await client.getGenome(slug);\n\n if (opts.json) {\n console.log(JSON.stringify(genome, null, 2));\n return;\n }\n\n output.info(`名称: ${genome.name}`);\n output.info(`Slug: ${genome.slug}`);\n output.info(`版本: ${genome.version}`);\n output.info(`分类: ${genome.category}`);\n output.info(`描述: ${genome.description || genome.short_description || '(无)'}`);\n output.info(`安装数: ${genome.install_count}`);\n\n if (genome.genes.length > 0) {\n output.info(`\\n基因列表 (${genome.genes.length}个):`);\n output.table(\n ['slug', '版本'],\n genome.genes.map((g) => [g.slug, g.version]),\n );\n }\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst listGenomeCommand = new Command('list')\n .description('搜索基因组')\n .option('-q, --query <keyword>', '搜索关键词')\n .option('-c, --category <category>', '按分类过滤')\n .option('--json', 'JSON 格式输出', false)\n .action(async (opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n try {\n const result = await client.searchGenomes({\n q: opts.query,\n category: opts.category,\n });\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.items.length === 0) {\n output.info('未找到基因组');\n return;\n }\n\n output.table(\n ['slug', '名称', '版本', '分类', '基因数', '安装数'],\n result.items.map((g) => [\n g.slug,\n g.name,\n g.version,\n g.category,\n String(g.genes.length),\n String(g.install_count),\n ]),\n );\n\n output.info(`共 ${result.total} 条结果`);\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nexport const genomeCommand = new Command('genome').description('基因组管理');\n\ngenomeCommand.addCommand(publishGenomeCommand);\ngenomeCommand.addCommand(installGenomeCommand);\ngenomeCommand.addCommand(infoGenomeCommand);\ngenomeCommand.addCommand(listGenomeCommand);\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { stringify } from 'yaml';\nimport * as output from '../output.js';\n\nconst TEMPLATE = {\n slug: 'my-gene',\n name: '我的基因',\n version: '1.0.0',\n description: '基因功能描述',\n short_description: '一句话描述',\n category: 'development',\n tags: ['ability'],\n author: { type: 'human', name: '' },\n compatibility: [\n { product: 'openclaw', min_version: '0.5.0' },\n { product: 'nanobot', min_version: '0.1.0' },\n ],\n dependencies: [],\n synergies: [],\n skill: {\n name: 'my-gene',\n always: false,\n file: 'SKILL.md',\n },\n rules: [],\n config: {},\n mcp_servers: [],\n learning: {\n force_deep_learn: false,\n objectives: [],\n scenarios: [],\n },\n};\n\nconst SKILL_TEMPLATE = `---\nname: my-gene\ndescription: 一句话描述\nmetadata:\n openclaw:\n always: false\n nanobot:\n always: false\n---\n\n在此编写基因的技能描述...\n`;\n\nexport const initCommand = new Command('init')\n .description('初始化基因模板')\n .argument('[path]', '目标目录', '.')\n .action(async (dirPath: string) => {\n const absPath = resolve(dirPath);\n\n try {\n await mkdir(absPath, { recursive: true });\n\n const yamlPath = join(absPath, 'gene.yaml');\n await writeFile(yamlPath, stringify(TEMPLATE), 'utf-8');\n\n const skillPath = join(absPath, 'SKILL.md');\n await writeFile(skillPath, SKILL_TEMPLATE, 'utf-8');\n\n output.ok(`基因模板已创建:`);\n output.info(` ${yamlPath}`);\n output.info(` ${skillPath}`);\n output.info('编辑这两个文件后,使用 genehub publish 发布');\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { mkdir, rm, writeFile } from 'node:fs/promises';\nimport { homedir, tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { detectAdapter, GeneHubClient, getAdapter, LearningEngine } from '@nodeskai/genehub-sdk';\nimport type { InstallResult } from '@nodeskai/genehub-types';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nfunction parseSlugVersion(input: string): { slug: string; version?: string } {\n const atIdx = input.lastIndexOf('@');\n if (atIdx > 0) {\n return { slug: input.slice(0, atIdx), version: input.slice(atIdx + 1) };\n }\n return { slug: input };\n}\n\nasync function extractTarGz(buffer: ArrayBuffer, destDir: string): Promise<void> {\n await mkdir(destDir, { recursive: true });\n const { extract } = await import('tar');\n const tarPath = join(tmpdir(), `genehub-${Date.now()}.tar.gz`);\n await writeFile(tarPath, Buffer.from(buffer));\n try {\n await extract({ file: tarPath, cwd: destDir, strip: 1 });\n } finally {\n await rm(tarPath, { force: true });\n }\n}\n\nexport const installCommand = new Command('install')\n .description('安装基因到当前 Agent 环境')\n .argument('<slug>', '基因标识符(支持 slug@version 格式)')\n .option('-p, --product <product>', '指定目标产品(openclaw / nanobot / generic)')\n .option('-f, --force', '强制覆盖已安装版本', false)\n .option('--target <path>', '指定安装目标路径')\n .option('--learn', '安装后自动触发深度学习', false)\n .action(async (rawSlug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n const { slug, version } = parseSlugVersion(rawSlug);\n const spinner = ora(`获取基因 ${slug}${version ? `@${version}` : ''} 的 manifest...`).start();\n\n try {\n const manifest = await client.getManifest(slug, version);\n spinner.succeed(`获取 ${manifest.name} v${manifest.version}`);\n\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n output.info(`目标产品: ${adapter.product}`);\n\n if (!opts.force && (await adapter.isInstalled(slug))) {\n const installedVer = await adapter.getInstalledVersion(slug);\n output.warn(`${slug}${installedVer ? ` v${installedVer}` : ''} 已安装,使用 --force 覆盖`);\n return;\n }\n\n const installSpinner = ora('安装中...').start();\n\n let result: InstallResult | undefined;\n let isMultiFile = false;\n\n try {\n const archive = await client.downloadArchive(slug, version);\n const tempDir = join(tmpdir(), `genehub-install-${slug}-${Date.now()}`);\n await extractTarGz(archive, tempDir);\n isMultiFile = true;\n\n if (adapter.installFromDirectory) {\n result = await adapter.installFromDirectory(tempDir, manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n } else {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n await rm(tempDir, { recursive: true, force: true });\n } catch {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n installSpinner.succeed(isMultiFile ? '安装完成(多文件基因)' : '安装完成');\n\n output.ok(`${result.slug}@${result.version} 安装成功`);\n output.info(`文件: ${result.files.join(', ')}`);\n\n if (result.needsRestart) {\n output.warn('需要重启 Agent Host 使基因生效');\n }\n\n if (result.dependencies.length > 0) {\n output.info(`依赖基因: ${result.dependencies.join(', ')}`);\n }\n\n try {\n await client.reportInstall(slug);\n } catch {\n // non-critical\n }\n\n if (opts.learn) {\n const workspaceDir =\n adapter.product === 'openclaw'\n ? join(homedir(), '.openclaw', 'workspace')\n : adapter.product === 'nanobot'\n ? join(homedir(), '.nanobot', 'workspace')\n : join(process.cwd(), '.genehub');\n\n const engine = new LearningEngine({ workspaceDir, adapter });\n const learnSpinner = ora('生成学习任务...').start();\n await engine.createLearningTask(manifest);\n learnSpinner.succeed('学习任务已创建');\n\n if (adapter.triggerLearning) {\n const triggerSpinner = ora('触发 bot 学习...').start();\n try {\n await adapter.triggerLearning('检查 learning-tasks/ 目录并处理学习任务');\n triggerSpinner.succeed('已触发 bot 学习(后台处理中)');\n } catch {\n triggerSpinner.warn('自动触发失败,Agent 将在下次对话中处理');\n }\n } else {\n output.info('Agent 将在下次对话中处理学习任务');\n }\n }\n } catch (err) {\n spinner.fail('安装失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { detectAdapter, GeneHubClient, getAdapter, LearningEngine } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nfunction getWorkspaceDir(product: string): string {\n switch (product) {\n case 'openclaw':\n return join(homedir(), '.openclaw', 'workspace');\n case 'nanobot':\n return join(homedir(), '.nanobot', 'workspace');\n default:\n return join(process.cwd(), '.genehub');\n }\n}\n\nexport const learnCommand = new Command('learn')\n .description('触发基因深度学习(L2)')\n .argument('<slug>', '基因标识符')\n .option('-p, --product <product>', '指定目标产品')\n .option('--check', '检查学习结果并应用')\n .action(async (slug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n const workspaceDir = getWorkspaceDir(adapter.product);\n const engine = new LearningEngine({ workspaceDir, adapter });\n\n if (opts.check) {\n const spinner = ora('检查学习结果...').start();\n const result = await engine.checkResult(slug);\n\n if (!result) {\n spinner.fail('未找到学习结果');\n output.info('Agent 还未完成该基因的学习任务');\n\n const pending = await engine.listPendingTasks();\n if (pending.length > 0) {\n output.info(`待完成的学习任务: ${pending.join(', ')}`);\n }\n return;\n }\n\n spinner.succeed(`学习结果: ${result.decision}`);\n\n if (result.self_eval !== undefined) {\n output.info(`自评分: ${result.self_eval}`);\n }\n if (result.reason) {\n output.info(`理由: ${result.reason}`);\n }\n\n if (result.decision === 'learned' && result.content) {\n const skillsDir = join(workspaceDir, 'skills');\n const applied = await engine.applyResult(slug, skillsDir);\n if (applied) {\n output.ok('已将个性化版本应用到技能目录');\n }\n }\n\n return;\n }\n\n const spinner = ora(`获取 ${slug} 的 manifest...`).start();\n\n try {\n const manifest = await client.getManifest(slug);\n spinner.succeed(`获取 ${manifest.name} v${manifest.version}`);\n\n if (!manifest.learning?.objectives?.length && !manifest.learning?.scenarios?.length) {\n output.warn('该基因没有定义学习目标或练习场景,将创建基础学习任务');\n }\n\n const learnSpinner = ora('生成学习任务...').start();\n const task = await engine.createLearningTask(manifest);\n learnSpinner.succeed('学习任务已创建');\n\n output.ok(`任务文件: ${join(workspaceDir, 'learning-tasks', `${slug}.md`)}`);\n output.info(`结果路径: ${task.callback_path}`);\n output.info('');\n output.info('下一步:');\n output.info(' 1. Agent 在下次对话中会自动发现并处理学习任务');\n output.info(` 2. 学习完成后运行: genehub learn --check ${slug}`);\n } catch (err) {\n spinner.fail('学习任务创建失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { detectAdapter, getAdapter } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport * as output from '../output.js';\n\nexport const listCommand = new Command('list')\n .description('列出当前环境已安装的基因')\n .option('-p, --product <product>', '指定目标产品')\n .option('--json', 'JSON 格式输出', false)\n .action(async (opts) => {\n try {\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n const genes = await adapter.list();\n\n if (opts.json) {\n console.log(JSON.stringify(genes, null, 2));\n return;\n }\n\n if (genes.length === 0) {\n output.info(`[${adapter.product}] 没有已安装的基因`);\n return;\n }\n\n output.info(`[${adapter.product}] 已安装 ${genes.length} 个基因:\\n`);\n\n for (const gene of genes) {\n const date = new Date(gene.installedAt).toLocaleDateString('zh-CN');\n console.log(` ${gene.slug.padEnd(24)} v${gene.version.padEnd(10)} ${date}`);\n }\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { readdir, readFile } from 'node:fs/promises';\nimport { join, relative, resolve } from 'node:path';\nimport { GeneHubClient } from '@nodeskai/genehub-sdk';\nimport type { Gene } from '@nodeskai/genehub-types';\nimport { GeneManifestSchema } from '@nodeskai/genehub-types';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { parse } from 'yaml';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nconst IGNORED_PATTERNS = ['.git', 'node_modules', '.DS_Store', '__pycache__', '.venv'];\n\nasync function scanDirectory(dirPath: string): Promise<Record<string, string>> {\n const files: Record<string, string> = {};\n\n async function walk(currentPath: string) {\n const entries = await readdir(currentPath, { withFileTypes: true });\n for (const entry of entries) {\n if (IGNORED_PATTERNS.includes(entry.name)) continue;\n const fullPath = join(currentPath, entry.name);\n if (entry.isDirectory()) {\n await walk(fullPath);\n } else if (entry.isFile()) {\n const relPath = relative(dirPath, fullPath);\n const content = await readFile(fullPath, 'utf-8');\n files[relPath] = content;\n }\n }\n }\n\n await walk(dirPath);\n return files;\n}\n\nexport const publishCommand = new Command('publish')\n .description('发布基因到 GeneHub Registry')\n .argument('<path>', '基因目录路径(包含 gene.yaml)')\n .action(async (dirPath: string) => {\n const config = await loadConfig();\n\n if (!config.token) {\n output.fail('未配置认证 token');\n output.info(' 方式 1: genehub config set token <token>');\n output.info(' 方式 2: export GENEHUB_TOKEN=<token>');\n process.exit(1);\n }\n\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n const absPath = resolve(dirPath);\n\n try {\n const yamlPath = join(absPath, 'gene.yaml');\n const raw = await readFile(yamlPath, 'utf-8');\n const parsed = parse(raw);\n\n if (parsed.skill?.file && !parsed.skill.content) {\n try {\n parsed.skill.content = await readFile(join(absPath, parsed.skill.file), 'utf-8');\n } catch {\n try {\n parsed.skill.content = await readFile(join(absPath, 'SKILL.md'), 'utf-8');\n } catch {\n // no skill content file found\n }\n }\n }\n\n const validation = GeneManifestSchema.safeParse(parsed);\n if (!validation.success) {\n output.fail('Manifest 校验失败:');\n for (const issue of validation.error.issues) {\n output.fail(` ${issue.path.join('.')}: ${issue.message}`);\n }\n process.exit(1);\n }\n\n const { slug, version } = validation.data;\n\n const scanSpinner = ora('扫描基因目录...').start();\n const files = await scanDirectory(absPath);\n const fileCount = Object.keys(files).length;\n scanSpinner.succeed(`扫描完成: ${fileCount} 个文件`);\n\n const spinner = ora(`发布 ${slug}@${version} (${fileCount} 个文件)...`).start();\n\n let gene: Gene;\n try {\n gene = await client.publishGene(validation.data, files);\n } catch (err) {\n const isSlugExists = err instanceof Error && err.message.includes('gene_slug_exists');\n if (!isSlugExists) throw err;\n\n spinner.text = `基因 ${slug} 已存在,发布新版本 ${version}...`;\n gene = await client.publishVersion(slug, validation.data, undefined, files);\n }\n\n spinner.succeed('发布成功');\n output.ok(`${gene.slug}@${gene.version} 已发布到 GeneHub Registry (${fileCount} 个文件)`);\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { GeneHubClient } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nexport const searchCommand = new Command('search')\n .description('搜索基因库')\n .argument('[keyword]', '搜索关键词')\n .option('-c, --category <category>', '按分类过滤')\n .option('-t, --tags <tags>', '按标签过滤(逗号分隔)')\n .option('--compat <product>', '按兼容产品过滤')\n .option('-s, --sort <sort>', '排序方式(newest / popular / rating)', 'newest')\n .option('--page <page>', '页码', '1')\n .option('--json', 'JSON 格式输出', false)\n .action(async (keyword: string | undefined, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n try {\n const result = await client.searchGenes({\n q: keyword,\n category: opts.category,\n tags: opts.tags?.split(','),\n compatibility: opts.compat,\n sort: opts.sort,\n page: Number(opts.page),\n });\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.items.length === 0) {\n output.info('未找到匹配的基因');\n return;\n }\n\n output.table(\n ['slug', '名称', '版本', '分类', '兼容', '安装数'],\n result.items.map((g) => [\n g.slug,\n g.name,\n g.version,\n g.category,\n (g.compatibility as string[]).join(', '),\n String(g.install_count),\n ]),\n );\n\n output.info(`共 ${result.total} 条结果,第 ${result.page}/${result.total_pages} 页`);\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import { readdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join, relative, resolve } from 'node:path';\nimport { detectAdapter, GeneHubClient, getAdapter } from '@nodeskai/genehub-sdk';\nimport type { InstallResult } from '@nodeskai/genehub-types';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport { parse } from 'yaml';\nimport { loadConfig } from '../config.js';\nimport * as output from '../output.js';\n\nconst IGNORED_PATTERNS = ['.git', 'node_modules', '.DS_Store', '__pycache__', '.venv'];\n\nasync function scanDirectory(dirPath: string): Promise<Record<string, string>> {\n const files: Record<string, string> = {};\n\n async function walk(currentPath: string) {\n const entries = await readdir(currentPath, { withFileTypes: true });\n for (const entry of entries) {\n if (IGNORED_PATTERNS.includes(entry.name)) continue;\n const fullPath = join(currentPath, entry.name);\n if (entry.isDirectory()) {\n await walk(fullPath);\n } else if (entry.isFile()) {\n const relPath = relative(dirPath, fullPath);\n const content = await readFile(fullPath, 'utf-8');\n files[relPath] = content;\n }\n }\n }\n\n await walk(dirPath);\n return files;\n}\n\nasync function extractTarGz(buffer: ArrayBuffer, destDir: string): Promise<void> {\n const { mkdir } = await import('node:fs/promises');\n await mkdir(destDir, { recursive: true });\n const { extract } = await import('tar');\n const tarPath = join(tmpdir(), `genehub-template-${Date.now()}.tar.gz`);\n await writeFile(tarPath, Buffer.from(buffer));\n try {\n await extract({ file: tarPath, cwd: destDir, strip: 1 });\n } finally {\n await rm(tarPath, { force: true });\n }\n}\n\ntype TemplateYaml = {\n name: string;\n slug: string;\n version: string;\n description?: string;\n short_description?: string;\n role?: string;\n category?: string;\n tags?: string[];\n icon?: string;\n avatar_url?: string;\n genomes: { slug: string; version: string }[];\n genes?: { slug: string; version: string }[];\n compatibility?: string[];\n author?: { type: string; id?: string; name: string };\n};\n\nconst publishTemplateCommand = new Command('publish')\n .description('发布 AI 员工模板到 GeneHub Registry')\n .argument('<path>', '模板目录路径(包含 template.yaml)')\n .action(async (dirPath: string) => {\n const config = await loadConfig();\n\n if (!config.token) {\n output.fail('未配置认证 token');\n process.exit(1);\n }\n\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n const absPath = resolve(dirPath);\n\n try {\n const yamlPath = join(absPath, 'template.yaml');\n const raw = await readFile(yamlPath, 'utf-8');\n const parsed = parse(raw) as TemplateYaml;\n\n if (!parsed.name || !parsed.slug || !parsed.version) {\n output.fail('template.yaml 缺少必填字段: name, slug, version');\n process.exit(1);\n }\n if (!parsed.genomes?.length && !parsed.genes?.length) {\n output.fail('template.yaml 至少需要引用一个 genome 或 gene');\n process.exit(1);\n }\n\n const scanSpinner = ora('扫描模板目录...').start();\n const files = await scanDirectory(absPath);\n const fileCount = Object.keys(files).length;\n scanSpinner.succeed(`扫描完成: ${fileCount} 个文件`);\n\n const spinner = ora(`发布模板 ${parsed.slug}@${parsed.version}...`).start();\n\n try {\n const template = await client.publishTemplate(parsed, files);\n spinner.succeed('发布成功');\n output.ok(\n `${template.slug}@${template.version} 已发布到 GeneHub Registry (${fileCount} 个文件)`,\n );\n } catch (err) {\n const isSlugExists = err instanceof Error && err.message.includes('template_slug_exists');\n if (!isSlugExists) throw err;\n\n spinner.text = `模板 ${parsed.slug} 已存在,发布新版本 ${parsed.version}...`;\n const template = await client.publishTemplateVersion(\n parsed.slug,\n {\n version: parsed.version,\n genomes: parsed.genomes ?? [],\n genes: parsed.genes,\n files,\n },\n files,\n );\n spinner.succeed('发布成功');\n output.ok(`${template.slug}@${template.version} 新版本已发布 (${fileCount} 个文件)`);\n }\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst installTemplateCommand = new Command('install')\n .description('安装 AI 员工模板(递归安装所有基因组和基因)')\n .argument('<slug>', '模板标识符(支持 slug@version 格式)')\n .option('-p, --product <product>', '指定目标产品')\n .option('-f, --force', '强制覆盖已安装基因', false)\n .option('--target <path>', '指定安装目标路径')\n .action(async (rawSlug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n const atIdx = rawSlug.lastIndexOf('@');\n const slug = atIdx > 0 ? rawSlug.slice(0, atIdx) : rawSlug;\n\n const spinner = ora(`获取模板 ${slug}...`).start();\n\n try {\n const template = await client.getTemplate(slug);\n spinner.succeed(\n `模板: ${template.name} v${template.version} (${template.genomes.length} 基因组, ${template.genes.length} 额外基因)`,\n );\n\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n output.info(`目标产品: ${adapter.product}`);\n\n const allGeneSlugs = new Set<string>();\n let installed = 0;\n let skipped = 0;\n\n for (const genomeRef of template.genomes) {\n output.info(`\\n解析基因组: ${genomeRef.slug}@${genomeRef.version}`);\n try {\n const resolved = await client.resolveGenome(genomeRef.slug, genomeRef.version);\n\n if (resolved.warnings.length > 0) {\n for (const w of resolved.warnings) output.warn(w);\n }\n\n for (const gene of resolved.genes) {\n if (allGeneSlugs.has(gene.slug)) continue;\n allGeneSlugs.add(gene.slug);\n\n if (!opts.force && (await adapter.isInstalled(gene.slug))) {\n skipped++;\n continue;\n }\n\n const geneSpinner = ora(` 安装 ${gene.slug}@${gene.version}...`).start();\n try {\n const manifest = await client.getManifest(gene.slug, gene.version);\n let result: InstallResult | undefined;\n\n try {\n const archive = await client.downloadArchive(gene.slug, gene.version);\n const tempDir = join(tmpdir(), `genehub-install-${gene.slug}-${Date.now()}`);\n await extractTarGz(archive, tempDir);\n\n if (adapter.installFromDirectory) {\n result = await adapter.installFromDirectory(tempDir, manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n } else {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n await rm(tempDir, { recursive: true, force: true });\n } catch {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n geneSpinner.succeed(` ${result.slug}@${result.version}`);\n installed++;\n\n try {\n await client.reportInstall(gene.slug);\n } catch {\n // non-critical\n }\n } catch (err) {\n geneSpinner.fail(\n ` ${gene.slug} 安装失败: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n } catch (err) {\n output.warn(\n `基因组 ${genomeRef.slug} 解析失败: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n if (template.genes.length > 0) {\n output.info(`\\n安装额外基因 (${template.genes.length}个):`);\n for (const geneRef of template.genes) {\n if (allGeneSlugs.has(geneRef.slug)) continue;\n allGeneSlugs.add(geneRef.slug);\n\n if (!opts.force && (await adapter.isInstalled(geneRef.slug))) {\n skipped++;\n continue;\n }\n\n const geneSpinner = ora(` 安装 ${geneRef.slug}@${geneRef.version}...`).start();\n try {\n const manifest = await client.getManifest(geneRef.slug, geneRef.version);\n let result: InstallResult | undefined;\n\n try {\n const archive = await client.downloadArchive(geneRef.slug, geneRef.version);\n const tempDir = join(tmpdir(), `genehub-install-${geneRef.slug}-${Date.now()}`);\n await extractTarGz(archive, tempDir);\n\n if (adapter.installFromDirectory) {\n result = await adapter.installFromDirectory(tempDir, manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n } else {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n await rm(tempDir, { recursive: true, force: true });\n } catch {\n result = await adapter.install(manifest, {\n force: opts.force,\n targetPath: opts.target,\n });\n }\n\n geneSpinner.succeed(` ${result.slug}@${result.version}`);\n installed++;\n\n try {\n await client.reportInstall(geneRef.slug);\n } catch {\n // non-critical\n }\n } catch (err) {\n geneSpinner.fail(\n ` ${geneRef.slug} 安装失败: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n }\n\n output.ok(`模板安装完成: ${installed} 安装, ${skipped} 跳过`);\n\n try {\n await client.reportTemplateInstall(slug);\n } catch {\n // non-critical\n }\n } catch (err) {\n spinner.fail('安装失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst infoTemplateCommand = new Command('info')\n .description('查看 AI 员工模板详情')\n .argument('<slug>', '模板标识符')\n .option('--json', 'JSON 格式输出', false)\n .action(async (slug: string, opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n try {\n const template = await client.getTemplate(slug);\n\n if (opts.json) {\n console.log(JSON.stringify(template, null, 2));\n return;\n }\n\n output.info(`名称: ${template.name}`);\n output.info(`Slug: ${template.slug}`);\n output.info(`版本: ${template.version}`);\n output.info(`角色: ${template.role ?? '(无)'}`);\n output.info(`分类: ${template.category}`);\n output.info(`描述: ${template.description || template.short_description || '(无)'}`);\n output.info(`安装数: ${template.install_count}`);\n\n if (template.genomes.length > 0) {\n output.info(`\\n基因组 (${template.genomes.length}个):`);\n output.table(\n ['slug', '版本'],\n template.genomes.map((g) => [g.slug, g.version]),\n );\n }\n\n if (template.genes.length > 0) {\n output.info(`\\n额外基因 (${template.genes.length}个):`);\n output.table(\n ['slug', '版本'],\n template.genes.map((g) => [g.slug, g.version]),\n );\n }\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst listTemplateCommand = new Command('list')\n .description('搜索 AI 员工模板')\n .option('-q, --query <keyword>', '搜索关键词')\n .option('-c, --category <category>', '按分类过滤')\n .option('-r, --role <role>', '按角色过滤')\n .option('--json', 'JSON 格式输出', false)\n .action(async (opts) => {\n const config = await loadConfig();\n const client = new GeneHubClient({ registryUrl: config.registryUrl, token: config.token });\n\n try {\n const result = await client.searchTemplates({\n q: opts.query,\n category: opts.category,\n role: opts.role,\n });\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.items.length === 0) {\n output.info('未找到模板');\n return;\n }\n\n output.table(\n ['slug', '名称', '版本', '角色', '基因组', '安装数'],\n result.items.map((t) => [\n t.slug,\n t.name,\n t.version,\n t.role ?? '-',\n String(t.genomes.length),\n String(t.install_count),\n ]),\n );\n\n output.info(`共 ${result.total} 条结果`);\n } catch (err) {\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nexport const templateCommand = new Command('template').description('AI 员工模板管理');\n\ntemplateCommand.addCommand(publishTemplateCommand);\ntemplateCommand.addCommand(installTemplateCommand);\ntemplateCommand.addCommand(infoTemplateCommand);\ntemplateCommand.addCommand(listTemplateCommand);\n","import { detectAdapter, getAdapter } from '@nodeskai/genehub-sdk';\nimport { Command } from 'commander';\nimport ora from 'ora';\nimport * as output from '../output.js';\n\nexport const uninstallCommand = new Command('uninstall')\n .description('从当前 Agent 环境卸载基因')\n .argument('<slug>', '基因标识符')\n .option('-p, --product <product>', '指定目标产品(openclaw / nanobot / generic)')\n .action(async (slug: string, opts) => {\n const adapter = opts.product ? getAdapter(opts.product) : await detectAdapter();\n\n output.info(`目标产品: ${adapter.product}`);\n\n if (!(await adapter.isInstalled(slug))) {\n output.warn(`${slug} 未安装`);\n return;\n }\n\n const spinner = ora('卸载中...').start();\n\n try {\n const result = await adapter.uninstall(slug);\n spinner.succeed('卸载完成');\n\n output.ok(`${result.slug} 已卸载`);\n output.info(`清理文件: ${result.files.join(', ')}`);\n\n if (result.needsRestart) {\n output.warn('需要重启 Agent Host 使变更生效');\n }\n } catch (err) {\n spinner.fail('卸载失败');\n output.fail(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n"],"mappings":"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","names":["Command","resolve","Command","Command","readFile","writeFile","join","Command","join","readFile","mkdir","writeFile","Command","mkdir","writeFile","join","resolve","Command","Command","resolve","mkdir","join","writeFile","mkdir","rm","writeFile","homedir","tmpdir","join","detectAdapter","GeneHubClient","getAdapter","Command","ora","extractTarGz","mkdir","join","tmpdir","writeFile","rm","Command","GeneHubClient","ora","getAdapter","detectAdapter","homedir","homedir","join","detectAdapter","GeneHubClient","getAdapter","LearningEngine","Command","ora","join","homedir","Command","GeneHubClient","getAdapter","detectAdapter","LearningEngine","spinner","ora","detectAdapter","getAdapter","Command","Command","getAdapter","detectAdapter","readdir","readFile","join","relative","resolve","GeneHubClient","Command","ora","parse","IGNORED_PATTERNS","scanDirectory","readdir","join","relative","readFile","Command","GeneHubClient","resolve","parse","ora","GeneHubClient","Command","Command","GeneHubClient","readdir","readFile","rm","writeFile","tmpdir","join","relative","resolve","detectAdapter","GeneHubClient","getAdapter","Command","ora","parse","IGNORED_PATTERNS","scanDirectory","readdir","join","relative","readFile","extractTarGz","mkdir","tmpdir","writeFile","rm","Command","GeneHubClient","resolve","parse","ora","getAdapter","detectAdapter","detectAdapter","getAdapter","Command","ora","Command","getAdapter","detectAdapter","ora","Command"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodeskai/genehub",
3
- "version": "2026.3.2-9",
3
+ "version": "2026.3.3-2",
4
4
  "description": "GeneHub CLI - AI 员工基因管理命令行工具",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,28 +9,22 @@
9
9
  "files": [
10
10
  "dist"
11
11
  ],
12
- "scripts": {
13
- "dev": "tsx src/index.ts",
14
- "build": "tsup",
15
- "prepublishOnly": "pnpm build",
16
- "test": "vitest run",
17
- "test:watch": "vitest"
18
- },
19
12
  "dependencies": {
20
- "@nodeskai/genehub-types": "workspace:*",
21
- "@nodeskai/genehub-sdk": "workspace:*",
22
- "commander": "^13.1",
23
13
  "chalk": "^5.4",
24
14
  "cli-table3": "^0.6",
15
+ "commander": "^13.1",
25
16
  "ora": "^8.1",
26
- "yaml": "^2.7"
17
+ "tar": "^7.5.9",
18
+ "yaml": "^2.7",
19
+ "@nodeskai/genehub-sdk": "2026.3.3-2",
20
+ "@nodeskai/genehub-types": "2026.3.3-2"
27
21
  },
28
22
  "devDependencies": {
23
+ "@types/node": "^22.0",
29
24
  "tsup": "^8.3",
30
25
  "tsx": "^4.19",
31
26
  "typescript": "^5.7",
32
- "vitest": "^3.0",
33
- "@types/node": "^22.0"
27
+ "vitest": "^3.0"
34
28
  },
35
29
  "repository": {
36
30
  "type": "git",
@@ -46,5 +40,11 @@
46
40
  "skill",
47
41
  "cli"
48
42
  ],
49
- "license": "MIT"
50
- }
43
+ "license": "MIT",
44
+ "scripts": {
45
+ "dev": "tsx src/index.ts",
46
+ "build": "tsup",
47
+ "test": "vitest run",
48
+ "test:watch": "vitest"
49
+ }
50
+ }