{"id":"511e75f9-295a-4b81-88bb-f6cd0bdcfee2","entityType":"agent","slug":"clawhub-zhaobod1-huo15-juxingyi-configure","name":"Huo15 Juxingyi Configure","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zhaobod1-huo15-juxingyi-configure","canonicalPath":"/agent/clawhub-zhaobod1-huo15-juxingyi-configure","generatedAt":"2026-10-11T10:54:00.582Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:20:14.570Z","emptyReason":null},"description":"用聚星逸 fsk- 密钥调 /v1/models 接口,把最新模型列表写入 openclaw.json。模型列表完全来自接口实时返回,不依赖本地硬编码数据。支持日常更新(--update 保留主模型)、切换、查看。一个 Key 调 50+ 顶级大模型。","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17f6q72skfgyjycm2frgdc8dn83v5mk:huo15-juxingyi-configure","sourceUrl":"https://clawhub.ai/zhaobod1/huo15-juxingyi-configure","homepage":"https://clawhub.ai/zhaobod1/skills/huo15-juxingyi-configure","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zhaobod1/huo15-juxingyi-configure","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/zhaobod1/skills/huo15-juxingyi-configure","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Huo15 Juxingyi Configure technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:20:14.570Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:20:14.570Z","emptyReason":null},"stars":null,"forks":null,"downloads":1125,"packageName":null,"latestVersion":"1.3.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:20:14.439Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T07:20:14.570Z","lastCrawledAt":"2026-10-11T07:20:14.439Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T07:20:14.439Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.0","createdAt":"2026-07-19T10:44:25.463Z","changelog":"新增 --update 子命令:日常更新模型列表(保留当前主模型,只刷新 providers 段),报告新增/移除,旧主模型下架时自动切换。与首次配置(重置主模型)区分。","fileCount":11,"zipByteSize":36545},{"version":"1.2.0","createdAt":"2026-07-19T09:20:39.643Z","changelog":"架构简化:删除 data/model-heuristics.json 及所有本地硬编码分类逻辑,模型列表完全来自 /v1/models 接口实时返回;主模型改为取接口返回列表第一个;生图/视频过滤改为脚本内通用正则;删除 --json/--selftest 子命令;模型参数填保守默认值。","fileCount":11,"zipByteSize":33956},{"version":"1.1.1","createdAt":"2026-07-19T08:12:12.467Z","changelog":"健壮性增强: 新增 --help/--version/--selftest 子命令; fetchModels 加 15s 超时与错误分类(401/403/5xx); --switch 支持前缀匹配; 根治 MiniMax 误判(Mini→\\bMini\\b); 删除死代码 deepMerge; 加 Node 版本检查与密钥格式校验","fileCount":12,"zipByteSize":34674},{"version":"1.1.0","createdAt":"2026-07-11T14:03:12.748Z","changelog":"更新供应商接入指南、定价体系、部署运维、MiniMax路由配置等内容","fileCount":3,"zipByteSize":5301},{"version":"1.0.0","createdAt":"2026-07-11T13:47:21.409Z","changelog":"v1.0.0 首版 - 动态拉取聚星逸最新模型列表，自动配置 openclaw.json，默认 DeepSeek-V4-Flash，支持切换","fileCount":8,"zipByteSize":16258}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17f6q72skfgyjycm2frgdc8dn83v5mk:huo15-juxingyi-configure","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17f6q72skfgyjycm2frgdc8dn83v5mk:huo15-juxingyi-configure` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/zhaobod1/huo15-juxingyi-configure before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T10:54:00.578Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaobod1-huo15-juxingyi-configure/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:20:14.570Z","emptyReason":null},"readme":"Skill: Huo15 Juxingyi Configure\n\nOwner: zhaobod1\n\nSummary: 用聚星逸 fsk- 密钥调 /v1/models 接口,把最新模型列表写入 openclaw.json。模型列表完全来自接口实时返回,不依赖本地硬编码数据。支持日常更新(--update 保留主模型)、切换、查看。一个 Key 调 50+ 顶级大模型。\n\nTags: latest:1.3.0\n\nVersion history:\n\nv1.3.0 | 2026-07-19T10:44:25.463Z | user\n\n新增 --update 子命令:日常更新模型列表(保留当前主模型,只刷新 providers 段),报告新增/移除,旧主模型下架时自动切换。与首次配置(重置主模型)区分。\n\nv1.2.0 | 2026-07-19T09:20:39.643Z | user\n\n架构简化:删除 data/model-heuristics.json 及所有本地硬编码分类逻辑,模型列表完全来自 /v1/models 接口实时返回;主模型改为取接口返回列表第一个;生图/视频过滤改为脚本内通用正则;删除 --json/--selftest 子命令;模型参数填保守默认值。\n\nv1.1.1 | 2026-07-19T08:12:12.467Z | user\n\n健壮性增强: 新增 --help/--version/--selftest 子命令; fetchModels 加 15s 超时与错误分类(401/403/5xx); --switch 支持前缀匹配; 根治 MiniMax 误判(Mini→\\bMini\\b); 删除死代码 deepMerge; 加 Node 版本检查与密钥格式校验\n\nv1.1.0 | 2026-07-11T14:03:12.748Z | user\n\n更新供应商接入指南、定价体系、部署运维、MiniMax路由配置等内容\n\nv1.0.0 | 2026-07-11T13:47:21.409Z | user\n\nv1.0.0 首版 - 动态拉取聚星逸最新模型列表，自动配置 openclaw.json，默认 DeepSeek-V4-Flash，支持切换\n\nArchive index:\n\nArchive v1.3.0: 11 files, 36545 bytes\n\nFiles: _meta.json (143b), CLAUDE.md (9311b), docs/changelog.md (5255b), docs/dev-guide.md (11126b), docs/prd.md (7549b), docs/user-guide.md (8905b), LICENSE (1095b), README.md (6338b), scripts/configure.mjs (20155b), skill-card.md (2422b), SKILL.md (10829b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: huo15-juxingyi-configure\ndisplayName: 聚星逸配置\nversion: 1.3.0\ndescription: \"用聚星逸 fsk- 密钥调 /v1/models 接口,把最新模型列表写入 openclaw.json。模型列表完全来自接口实时返回,不依赖本地硬编码数据。支持日常更新(--update 保留主模型)、切换、查看。一个 Key 调 50+ 顶级大模型。\"\nhomepage: https://github.com/zhaobod1/huo15-skills\nmetadata: { \"openclaw\": { \"emoji\": \"🛰️\", \"requires\": { \"bins\": [\"node\"] } } }\naliases:\n  - 聚星逸配置\n  - 聚星逸\n  - juxingyi\n  - 配置聚星逸\n  - 聚星逸接入\n  - 聚星逸模型\n  - fireworks-hub\n  - 烟花智汇配置\n  - fsk配置\n---\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n> 用 fsk- 密钥调聚星逸 /v1/models 接口 → 把模型列表写入 ~/.openclaw/openclaw.json。\n> 模型列表完全来自接口实时返回,不依赖本地硬编码数据。\n> 青岛火一五信息科技有限公司 · OpenClaw 生态\n\n---\n\n## 一、什么时候用\n\n✅ **触发**:\n- 用户说\"配置聚星逸\"/\"接入聚星逸\"/\"juxingyi\"/\"fireworks-hub\"\n- 用户提供了 `fsk-` 开头的聚星逸 API Key,想接入 OpenClaw\n- 用户说\"把聚星逸的模型配到 openclaw\"\n- 用户想查看或切换聚星逸已配的模型\n\n❌ **不触发**:\n- 用户只是问聚星逸是什么(直接回答即可)\n- 用户想查用量账单(走 `huo15-yh-usage` skill)\n\n---\n\n## 二、前置知识\n\n**聚星逸**(Juxingyi)是青岛火一五的大模型聚合平台(接入文档:https://fireworks-simulator.huo15.com/docs.html):\n- **Base URL**: `https://fireworks-simulator-api.huo15.com/v1`\n- **API 协议**: OpenAI 兼容(`openai-completions`)\n- **密钥格式**: `fsk-` 开头\n- **模型列表端点**: `GET /v1/models`(动态返回最新可用模型)\n- **一个 Key** 可调 50+ 主流大模型(DeepSeek / GPT / Claude / Qwen / GLM / Gemini / Kimi / MiniMax / 豆包等)\n\n在 OpenClaw 中,聚星逸作为一个 **provider**(`fireworks-hub`)配置在 `~/.openclaw/openclaw.json` 的 `models.providers` 段。\n\n---\n\n## 三、配置流程(3 步)\n\n### Step 1 · 获取用户的 API Key\n\n向用户索要聚星逸 API Key(`fsk-` 开头)。如果用户没有,引导去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页创建。\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key>\n```\n\n脚本会:\n1. **调用** `GET /v1/models` 接口拉取最新模型列表(完全来自接口,无本地硬编码清单)\n2. 跳过生图/视频模型(ID 含 `image`/`t2v`/`i2v`/`video` 等关键词的不能用于文本对话)\n3. 写入 `~/.openclaw/openclaw.json`:\n   - `models.providers.fireworks-hub`(provider + 全部文本模型)\n   - `agents.defaults.model.primary` = 接口返回列表的第一个模型\n   - `agents.defaults.model.fallbacks` = 其余文本模型\n   - `agents.defaults.models` = 每个模型的 alias\n4. 自动备份原配置到 `openclaw.json.bak.<timestamp>`\n\n脚本输出示例:\n```\n✅ 聚星逸配置完成!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   模型数: 18 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 17 个模型\n```\n\n> **关于模型参数**:接口 `/v1/models` 只返回模型 `id`/`owned_by`,不返回上下文窗口等参数。脚本除 `id`/`name` 外填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证 OpenClaw 可用,用户可按需在 `openclaw.json` 手动调整。\n\n### Step 3 · 询问用户是否切换主模型\n\n**配置完成后,必须主动问用户**:\n\n```\n🛰️ 聚星逸配置完成!主模型是 <接口返回的第一个模型>。\n\n需要切换到其他模型吗?回复模型名即可切换,如 \"DeepSeek-V4-Pro\"。\n或回复 \"列出全部\" 看完整列表。不切换就回 \"不用了\"。\n```\n\n**如果用户要切换**:\n```bash\nnode <skill_dir>/scripts/configure.mjs --switch <model-id>\n```\n\n**如果用户想看完整列表**:\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key> --list\n```\n\n**如果用户想看当前配置**:\n```bash\nnode <skill_dir>/scripts/configure.mjs --show\n```\n\n---\n\n## 四、日常更新模型列表(平台新增了模型)\n\n**当用户说\"更新一下聚星逸模型\"/\"拉取最新模型列表\"/\"平台加了新模型\"时,用 `--update`**:\n\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key> --update\n```\n\n与首次配置(`<fsk-key>`)的区别:\n- **首次配置**(无 `--update`):主模型取接口返回列表的第一个,重置 fallbacks\n- **日常更新**(`--update`):**保留用户当前选定的主模型**(若仍在平台列表中),只刷新 providers 段的模型列表\n\n`--update` 做什么:\n1. 调 `/v1/models` 接口拿最新模型列表\n2. 对比旧列表,报告新增 / 移除的模型\n3. **保留当前主模型**(若仍在列表中);若旧主模型已下架(不在新列表),自动切到列表第一个并提示\n4. 重新生成 fallbacks(新列表中除主模型外的全部)\n5. 保留原密钥存储方式(明文 / env 引用都不动)\n6. 自动备份\n\n输出示例:\n```\n✅ 聚星逸模型列表已更新!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   模型数: 18 → 20 个文本对话模型\n   ✨ 新增 2 个:\n     + NewModel-X1\n     + NewModel-X2\n   主模型保留: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 19 个模型\n\n重启 OpenClaw 后生效。\n```\n\n> **何时用 `--update` vs 重新配置**:已配置过且想保留主模型选择 → 用 `--update`;想从头重新配置 → 不加 `--update`。\n\n## 五、脚本命令速查\n\n| 命令 | 用途 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 首次配置:拉取模型列表并写入(主模型取列表第一个) |\n| `node configure.mjs <fsk-key> --list` | 只列出接口返回的模型(不写文件) |\n| `node configure.mjs <fsk-key> --update` | **日常更新模型列表(保留当前主模型)** |\n| `node configure.mjs <fsk-key> --env` | 首次配置时用环境变量引用存储密钥(更安全) |\n| `node configure.mjs --switch <model-id>` | 切换主模型(支持前缀匹配) |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n\n> `<skill_dir>` = 本 skill 安装目录,通常为 `~/.openclaw/workspace/skills/huo15-juxingyi-configure`\n\n---\n\n## 六、模型列表来源\n\n**模型列表完全来自聚星逸 `/v1/models` 接口实时返回,本 skill 不维护任何本地模型清单。**\n\n脚本处理逻辑:\n1. 调 `GET /v1/models` 拿到平台当前所有可用模型\n2. 跳过生图/视频模型(ID 含 `image`/`seedream`/`t2v`/`i2v`/`video`/`dall-e`/`happyhorse`)——它们不能用于文本对话\n3. 剩余文本模型全部写入配置\n4. 主模型取接口返回列表的第一个,其余作 fallbacks\n\n> 这意味着**平台新增模型后,无需更新本 skill**——脚本每次运行都从接口拿最新列表。\n\n---\n\n## 七、openclaw.json 配置结构\n\n配置完成后,`~/.openclaw/openclaw.json` 中新增/更新的段:\n\n```json\n{\n  \"models\": {\n    \"mode\": \"replace\",\n    \"providers\": {\n      \"fireworks-hub\": {\n        \"baseUrl\": \"https://fireworks-simulator-api.huo15.com/v1\",\n        \"apiKey\": \"fsk-你的密钥\",\n        \"api\": \"openai-completions\",\n        \"models\": [\n          {\n            \"id\": \"DeepSeek-V4-Flash\",\n            \"name\": \"Deepseek V4 Flash (聚星逸)\",\n            \"reasoning\": false,\n            \"contextWindow\": 131072,\n            \"maxTokens\": 8192,\n            \"input\": [\"text\"],\n            \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n          }\n        ]\n      }\n    }\n  },\n  \"agents\": {\n    \"defaults\": {\n      \"model\": {\n        \"primary\": \"fireworks-hub/DeepSeek-V4-Flash\",\n        \"fallbacks\": [\"fireworks-hub/DeepSeek-V4-Pro\", \"...\"]\n      },\n      \"models\": {\n        \"fireworks-hub/DeepSeek-V4-Flash\": { \"alias\": \"Deepseek V4 Flash (聚星逸)\" }\n      }\n    }\n  }\n}\n```\n\n> 模型项的 `reasoning` / `contextWindow` / `maxTokens` 为保守默认值(接口不返回精确参数),可手动调整。\n\n---\n\n## 八、安全注意\n\n- API Key 默认**明文写入** openclaw.json。如需更安全,加 `--env` 用环境变量引用:\n  ```bash\n  node configure.mjs <fsk-key> --env\n  # 然后设置: export FIREWORKS_API_KEY=fsk-你的密钥\n  ```\n- 脚本每次写入前自动备份 `openclaw.json.bak.<timestamp>`\n- **密钥禁止出现在 commit / log / PR / 任何 LLM 上下文**\n\n---\n\n## 九、硬红线\n\n1. ❌ **不在任何文件中硬编码 API Key** — 用户每次提供\n2. ❌ **不跳过接口获取** — 必须调 `/v1/models`,不用本地清单\n3. ❌ **配置完不问就结束** — 必须主动问用户是否切换模型\n4. ❌ **不破坏其他 provider** — 只改 `fireworks-hub` 段\n5. ❌ **不忘记备份** — 写入前必须备份 openclaw.json\n\n---\n\n## 十、文件清单\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # 你正在看的这个(≤ 25KB)\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 详细文档\n├── CLAUDE.md                      # 开发规范(内部)\n├── LICENSE                        # MIT\n├── .gitignore\n├── scripts/\n│   └── configure.mjs              # 零依赖配置脚本(Node 18+)\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP\n    └── changelog.md               # 版本变更历史\n```\n\n---\n\n## 十一、版本\n\n- **v1.3.0**(2026-07-19): 新增 `--update` 子命令 — 日常更新模型列表(保留当前主模型,只刷新 providers 段);对比旧列表报告新增/移除;旧主模型下架时自动切换并提示;保留原密钥存储方式。与首次配置(重置主模型)区分,适合平台新增模型后日常刷新。\n- **v1.2.0**(2026-07-19): 架构简化 — 删除 `data/model-heuristics.json` 及所有本地硬编码分类逻辑(knownModels/tierPatterns/skipPatterns);模型列表完全来自 `/v1/models` 接口实时返回;主模型改为取接口返回列表的第一个(不再硬编码 DeepSeek-V4-Flash);生图/视频过滤改为脚本内通用正则;删除 `--json`/`--selftest` 子命令;模型参数填保守默认值(接口不返回精确参数)。\n- **v1.1.1**(2026-07-19): 健壮性增强 — Node 版本检查、密钥校验、fetchModels 超时与错误分类、`--help`/`--version`/`--selftest` 子命令、`--switch` 前缀匹配、MiniMax 误判根治。\n- **v1.0.0**(2026-07-11): 首版 — 动态获取模型列表,自动配置 openclaw.json,默认 DeepSeek-V4-Flash,支持切换。\n\n---\n\n**公司:** 青岛火一五信息科技有限公司 · postmaster@huo15.com · QQ群 1093992108\n\nFile v1.3.0:README.md\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>一个 Key 调 50+ 顶级大模型</h3>\n<h3>接口实时拉取 · 自动写入 · 零本地硬编码</h3>\n\n</div>\n\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n<div align=\"center\">\n\n![Version](https://img.shields.io/badge/version-1.3.0-brightgreen)\n![License](https://img.shields.io/badge/license-MIT-green)\n![Node](https://img.shields.io/badge/node-%3E%3D18.0-blue)\n![ClawHub](https://img.shields.io/badge/ClawHub-published-ff6b6b)\n\n</div>\n\n---\n\n## 这是什么\n\n`huo15-juxingyi-configure` 是 OpenClaw 专用 skill,帮你快速接入聚星逸(Juxingyi)大模型聚合平台:\n\n1. **接口实时拉取**:每次运行都从聚星逸 `/v1/models` 接口获取最新可用模型列表\n2. **自动写入**:`~/.openclaw/openclaw.json` 的 `fireworks-hub` provider 段\n3. **主模型取列表第一个**:配完后主动询问是否切换\n4. **日常更新**:`--update` 保留当前主模型,只刷新模型列表(平台新增模型后日常刷新)\n5. **灵活切换**:随时用 `--switch` 换主模型\n6. **安全可靠**:写入前自动备份,支持环境变量引用存储密钥\n\n> **模型列表完全来自接口,不维护任何本地硬编码清单**——平台新增模型无需更新本 skill。\n> 接入文档:https://fireworks-simulator.huo15.com/docs.html\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\n# 从 ClawHub 安装(推荐)\nclawhub install huo15-juxingyi-configure --dir ~/.openclaw/workspace/skills\n\n# 或从源码安装\ngit clone https://cnb.cool/huo15/ai/huo15-skills.git\ncp -r huo15-skills/huo15-juxingyi-configure/ ~/.openclaw/workspace/skills/\n```\n\n### 使用\n\n**1. 获取聚星逸 API Key**\n\n打开 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页,创建一个 `fsk-` 开头的密钥。\n\n**2. 运行配置脚本**\n\n```bash\ncd ~/.openclaw/workspace/skills/huo15-juxingyi-configure\nnode scripts/configure.mjs <fsk-key>\n```\n\n脚本调 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,主模型取接口返回列表的第一个。\n\n**3. 重启 OpenClaw**\n\n```bash\nopenclaw restart\n```\n\n> 完整操作流程见 [用户手册 SOP](docs/user-guide.md)\n\n---\n\n## 脚本命令\n\n| 命令 | 说明 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 首次配置:拉取模型列表并写入(主模型取列表第一个) |\n| `node configure.mjs <fsk-key> --list` | 只列出接口返回的模型(不写文件) |\n| `node configure.mjs <fsk-key> --update` | **日常更新模型列表(保留当前主模型)** |\n| `node configure.mjs <fsk-key> --env` | 首次配置时用环境变量引用存储密钥(更安全) |\n| `node configure.mjs --switch <model-id>` | 切换主模型(支持前缀匹配) |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n\n---\n\n## 模型列表来源\n\n**模型列表完全来自聚星逸 `/v1/models` 接口实时返回,本 skill 不维护任何本地模型清单。**\n\n脚本处理逻辑:\n1. 调 `GET /v1/models` 拿到平台当前所有可用模型\n2. 跳过生图/视频模型(ID 含 `image`/`seedream`/`t2v`/`i2v`/`video`/`dall-e`/`happyhorse`)——不能用于文本对话\n3. 剩余文本模型全部写入配置\n4. 主模型取接口返回列表的第一个,其余作 fallbacks\n\n> **关于模型参数**:接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等参数。脚本除 `id`/`name` 外填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证 OpenClaw 可用,可手动调整。\n\n---\n\n## 安全建议\n\n- **默认**:API Key 明文写入 `openclaw.json`,最简单\n- **更安全**:加 `--env` 用环境变量引用:\n  ```bash\n  node configure.mjs <fsk-key> --env\n  export FIREWORKS_API_KEY=fsk-你的密钥\n  ```\n\n---\n\n## 文件结构\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # ClawHub 嵌入源(≤ 25KB)\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 本文件\n├── CLAUDE.md                      # 开发规范\n├── LICENSE                        # MIT\n├── .gitignore                     # skill 级忽略\n├── scripts/\n│   └── configure.mjs              # 零依赖配置脚本(Node 18+)\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP\n    └── changelog.md               # 版本变更历史\n```\n\n---\n\n## 与其他 skill 协作\n\n| 场景 | 配套 skill |\n|------|-----------|\n| 查询 token 用量/费用 | [`huo15-yh-usage`](../huo15-yh-usage/)(凭 fsk- 查账单)|\n\n---\n\n## 文档\n\n| 文档 | 说明 |\n|------|------|\n| [用户手册 SOP](docs/user-guide.md) | 面向终端用户的标准操作流程 |\n| [开发者 SOP](docs/dev-guide.md) | 面向接手开发的架构内幕、运维流程、踩坑经验 |\n| [PRD](docs/prd.md) | 产品需求文档 |\n| [变更历史](docs/changelog.md) | 版本变更记录 |\n\n---\n\n## License\n\n[MIT](LICENSE) — 自由商用 / 修改 / 再发布。需保留版权声明 `Copyright (c) 2026 青岛火一五信息科技有限公司`。\n\n---\n\n<div align=\"center\">\n\n**公司名称:** 青岛火一五信息科技有限公司\n\n**联系邮箱:** postmaster@huo15.com | **QQ群:** 1093992108\n\n---\n\n**关注逸寻智库公众号,获取更多资讯**\n\n<img src=\"https://tools.huo15.com/uploads/images/system/qrcode_yxzk.jpg\" alt=\"逸寻智库公众号二维码\" style=\"width: 200px; height: auto; margin: 10px 0;\" />\n\n</div>\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-juxingyi-configure\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1784457865463\n}\n\nFile v1.3.0:CLAUDE.md\n\n# CLAUDE.md · huo15-juxingyi-configure\n\n> 聚星逸配置 skill —— 用 fsk- 密钥调 /v1/models 接口,把模型列表写入 openclaw.json\n> 面向接手开发的 AI / 工程师,涵盖架构、规范、踩坑、运维。\n\n---\n\n## 一、项目定位\n\n将聚星逸(Juxingyi)大模型聚合平台接入 OpenClaw。用户提供一个 `fsk-` 密钥,skill 调 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,主模型取接口返回列表的第一个,配好后询问用户是否切换。\n\n**核心价值**:模型列表完全来自接口实时返回,不维护任何本地硬编码清单——平台新增模型无需更新本 skill。\n\n---\n\n## 二、技术栈\n\n| 项 | 值 |\n|----|----|\n| 脚本语言 | Node.js ES Modules(零依赖,需 Node 18+) |\n| API 协议 | OpenAI 兼容(`openai-completions`) |\n| API 端点 | `GET https://fireworks-simulator-api.huo15.com/v1/models` |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n| 配置文件 | `~/.openclaw/openclaw.json` |\n\n---\n\n## 三、核心设计决策\n\n| 决策 | 原因 |\n|------|------|\n| **接口实时获取**(非硬编码) | 平台模型变化频繁,硬编码会过期;每次运行调 `/v1/models` 确保最新 |\n| **不维护本地模型清单** | v1.2.0 起删除 `data/model-heuristics.json`,模型列表完全信任接口 |\n| **模型参数填保守默认** | 接口只返回 `id`/`owned_by`,不返回上下文窗口等;填默认值保证 OpenClaw 可用,用户可手动调 |\n| **主模型取列表第一个** | 不硬编码特定模型;配完后主动询问切换 |\n| **生图/视频过滤用脚本内正则** | 通用关键词(`image`/`t2v`/`i2v`/`video` 等),保证配置可用;非外部数据文件 |\n| **零依赖 Node 脚本** | 不需 npm install,用户直接运行 |\n| **只操作 fireworks-hub provider** | 不碰其他 provider,幂等安全 |\n| **写入前自动备份** | 可回滚 |\n| **SKILL.md 嵌入完整流程** | LLM 加载后 0 次 API 探索,省 token |\n\n---\n\n## 四、文件结构\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # LLM 嵌入源(≤25KB)\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 公开文档(面向用户)\n├── CLAUDE.md                      # 开发规范(本文档)\n├── LICENSE                        # MIT\n├── .gitignore                     # skill 级忽略\n├── scripts/\n│   └── configure.mjs              # 核心脚本(540 行),所有逻辑在此\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP(更详细的架构内幕)\n    └── changelog.md               # 版本变更历史\n```\n\n> v1.2.0 起**不再有** `data/` 目录——模型分类启发式数据已删除,模型列表完全来自接口。\n\n---\n\n## 五、configure.mjs 架构\n\n```\n参数解析 → Node 版本检查\n    │\n    ├── --help/-h      → cmdHelp()       显示帮助\n    ├── --version/-v   → cmdVersion()    读 _meta.json,显示版本\n    ├── --show         → cmdShow()       读 openclaw.json,展示当前配置\n    ├── --switch X     → cmdSwitch()     读/写 openclaw.json,切换主模型(支持前缀匹配)\n    ├── <key> --list   → fetchModels() + cmdList()       调接口,展示\n    ├── <key> --update → fetchModels() + cmdUpdate()     调接口,保留主模型刷新模型列表\n    └── <key>          → fetchModels() + cmdConfigure()  调接口,写入 openclaw.json(首次配置)\n```\n\n### 关键函数\n\n| 函数 | 职责 |\n|------|------|\n| `fetchModels(apiKey)` | 调 `GET /v1/models`,带 15s 超时 + 错误分类(401/403/5xx)+ 空列表防护 |\n| `toModelEntry(id)` | 单个模型配置项:`id` + `name` + 保守默认参数 |\n| `buildConfig(apiKey, rawModels)` | 生成 provider + agents.defaults(primary 取第一个 + fallbacks + aliases) |\n| `cmdUpdate(newProvider, textModels, skipped)` | **日常更新**:保留当前主模型,只刷新模型列表,报告新增/移除 |\n| `resolveModelId(input, ids)` | 模型 ID 解析:精确 → 大小写不敏感 → 前缀唯一 |\n| `readOpenclawJson()` | 读取 `~/.openclaw/openclaw.json` |\n| `writeOpenclawJson(config)` | 备份 + 写入 |\n\n### 模型处理逻辑\n\n1. `fetchModels` 调接口拿 `data.data`(OpenAI 兼容标准格式)\n2. `buildConfig` 遍历模型,用 `NON_TEXT_RE` 正则跳过生图/视频模型\n3. 每个文本模型经 `toModelEntry` 生成配置项(保守默认参数)\n4. 主模型 = 列表第一个,其余作 fallbacks\n\n> **`NON_TEXT_RE = /image|seedream|t2v|i2v|video|dall-?e|happyhorse/i`** —— 脚本内常量,非外部数据文件。\n\n---\n\n## 六、修改指引\n\n### 修改接口常量\n\n编辑 `scripts/configure.mjs` 顶部的常量段:\n\n```js\nconst BASE_URL = 'https://fireworks-simulator-api.huo15.com/v1'\nconst PROVIDER = 'fireworks-hub'\nconst ENV_VAR = 'FIREWORKS_API_KEY'\nconst NON_TEXT_RE = /image|seedream|t2v|i2v|video|dall-?e|happyhorse/i\n```\n\n### 修改模型默认参数\n\n编辑 `toModelEntry(id)` 函数中的默认值:\n\n```js\nfunction toModelEntry(id) {\n  return {\n    id,\n    name: `${fmtName(id)} (聚星逸)`,\n    reasoning: false,        // ← 推理能力默认\n    contextWindow: 131072,   // ← 上下文窗口默认\n    maxTokens: 8192,         // ← 最大输出 token 默认\n    input: ['text'],\n    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n  }\n}\n```\n\n> 这些是保守默认值(接口不返回精确参数)。如平台后续在 `/v1/models` 返回了精确参数,可改为读取接口字段。\n\n---\n\n## 七、铁律\n\n1. ❌ **不在任何文件中硬编码 API Key** — 用户每次运行时提供\n2. ❌ **不跳过接口获取** — 必须调 `/v1/models`,不用本地清单\n3. ❌ **配置完不问就结束** — 必须主动问用户是否切换模型(见 SKILL.md §三 Step 3)\n4. ❌ **不破坏其他 provider** — 只改 `fireworks-hub` 段\n5. ❌ **不忘记备份** — 写入前必须备份 openclaw.json\n6. ❌ **密钥禁止出现在 commit / log / PR / 任何 LLM 上下文**\n7. ✅ **SKILL.md ≤ 25KB** — 检查:`wc -c SKILL.md`\n\n---\n\n## 八、踩坑经验\n\n### 坑 1:接口 /v1/models 不返回模型参数\n\n**现象**:OpenAI 兼容的 `/v1/models` 端点标准只返回 `{id, object, created, owned_by}`,不返回 `contextWindow`/`reasoning`/`maxTokens`。\n\n**解决(v1.2.0)**:`toModelEntry` 填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证 OpenClaw 可用。用户可按需手动调整。如平台后续扩展了返回字段,可改为读取。\n\n### 坑 2:主模型不稳定(取列表第一个)\n\n**现象**:接口返回顺序不保证稳定,主模型可能变化。\n\n**解决**:配完后主动询问用户是否切换(SKILL.md §三 Step 3 强制要求),用户可立即选定稳定主模型。`--switch` 支持前缀匹配。\n\n### 坑 3:`deepMerge` 函数定义了但未使用(已清理,v1.1.1)\n\n开发初期设计了深度合并,后来改为直接覆盖 `fireworks-hub` 段(更安全可预测)。**v1.1.1 已删除该死代码**。\n\n### 坑 4:MiniMax 误判(已随 v1.2.0 架构简化彻底消除)\n\nv1.0/v1.1 时代 `tierPatterns` 中 `Mini` 关键词太宽泛,`MiniMax-M2.7` 被误判为 flash。v1.2.0 删除了整个 tier 分类体系,此问题不再存在。\n\n### 坑 5:GitHub 推送可能失败\n\n`git push origin main` 可能报 `could not read Username`。CNB 是主库,GitHub 是镜像,CNB 成功即可。\n\n### 坑 6:品牌词检查\n\n对外文档不能出现 `odoo` / `uniapp` / `uni-app` / `欧度`。已发布目录名 `huo15-odoo19-module-dev` 本身是例外(slug 不可改名),但描述文字不能含违禁词。\n\n---\n\n## 九、发布前自查\n\n```bash\n# 品牌词检查(必须无命中)\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\n\n# SKILL.md 大小(应 < 25600 字节)\nwc -c SKILL.md\n\n# 脚本语法检查\nnode --check scripts/configure.mjs\n\n# _meta.json 格式检查\npython3 -c \"import json; json.load(open('_meta.json'))\"\n\n# 功能测试\nnode scripts/configure.mjs --show\nnode scripts/configure.mjs --help\nnode scripts/configure.mjs --version\n```\n\n---\n\n## 十、发布流程\n\n```bash\n# 1. 提交\ncd ~/workspace/projects/openclaw/huo15-skills\ngit add huo15-juxingyi-configure/\ngit commit -m \"feat(huo15-juxingyi-configure): vX.Y.Z 说明\"\n\n# 2. 推送\ngit push cnb main     # CNB(主)\ngit push origin main  # GitHub(镜像,失败不阻塞)\n\n# 3. 发布 ClawHub\nclawhub publish \"$(pwd)/huo15-juxingyi-configure\" \\\n  --slug huo15-juxingyi-configure \\\n  --version X.Y.Z \\\n  --changelog \"说明\"\n\n# 4. chore commit\ngit commit --allow-empty -m \"chore(huo15-juxingyi-configure): bump _meta to vX.Y.Z\"\ngit push cnb main\n```\n\n**版本号规则**:架构重构/新功能 → 次版本+1;Bug修复/文案 → 补丁+1。\n\n---\n\n## 十一、与其他 skill 协作\n\n| Skill | 关系 |\n|-------|------|\n| `huo15-yh-usage` | 互补:本 skill 配置接入,yh-usage 查用量账单 |\n| `huo15-openclaw-bootstrap` | 上游:bootstrap 初始化 workspace 后配置模型供应商 |\n\n---\n\n## 十二、联系方式\n\n- **公司**: 青岛火一五信息科技有限公司\n- **邮箱**: postmaster@huo15.com\n- **QQ群**: 1093992108\n\nFile v1.3.0:docs/changelog.md\n\n# 变更历史 · huo15-juxingyi-configure\n\n---\n\n## v1.3.0(2026-07-19)\n\n**新增 `--update` 子命令:日常更新模型列表,保留主模型。**\n\n### 新增\n\n- **`--update` 子命令**:已配置用户日常刷新模型列表(平台新增模型后),与首次配置区分\n- **`cmdUpdate` 函数**:保留当前主模型(若仍在平台列表中),只刷新 providers 段模型列表\n- **变更报告**:对比旧/新列表,报告新增 / 移除的模型\n- **旧主模型下架处理**:若旧主模型不在新列表(被下架),自动切到列表第一个并提示\n- **保留密钥存储方式**:更新模型列表不改密钥配置(明文 / env 引用都保留原状)\n\n### 与首次配置的区别\n\n| 场景 | 命令 | 主模型处理 |\n|------|------|-----------|\n| 首次配置 | `<fsk-key>` | 取接口返回列表第一个,重置 fallbacks |\n| 日常更新 | `<fsk-key> --update` | 保留当前主模型(若仍在列表),只刷新模型列表 |\n\n### 文档\n\n- SKILL.md:新增第四节\"日常更新模型列表\";命令速查表加 `--update`;章节顺延;版本历史加 v1.3.0\n- README.md:命令表加 `--update`;特性列表加日常更新\n- CLAUDE.md:架构图加 `--update` 分支;关键函数表加 `cmdUpdate`;脚本行数 445→540\n- docs/dev-guide.md、docs/prd.md、docs/user-guide.md 同步\n\n---\n\n## v1.2.0(2026-07-19)\n\n**架构简化:模型列表完全来自接口,删除本地硬编码分类数据。**\n\n### 变更\n\n- **删除 `data/model-heuristics.json`**:移除 30 个已知模型元数据(knownModels)、tier 模式匹配规则(tierPatterns)、skipPatterns 等全部本地硬编码分类数据\n- **删除 `data/` 目录**:不再需要\n- **模型列表完全来自接口**:脚本只调 `GET /v1/models`,信任接口返回,不维护本地清单\n- **主模型改为取接口返回列表的第一个**:不再硬编码 `DeepSeek-V4-Flash`\n- **生图/视频过滤改为脚本内通用正则**:`NON_TEXT_RE = /image|seedream|t2v|i2v|video|dall-e|happyhorse/i`(常量,非外部数据文件)\n- **模型参数填保守默认值**:接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等;`toModelEntry` 填 `contextWindow`: 131072 / `maxTokens`: 8192 / `reasoning`: false 保证 OpenClaw 可用,可手动调整\n\n### 删除\n\n- **`--json` 子命令**:偏离核心(输出 JSON 片段),移除\n- **`--selftest` 子命令**:依赖已删除的分类逻辑(classifyModel/guessTier),移除\n- **`classifyModel` / `guessTier` / `tierWeight` 函数**:分类体系整体移除\n- **`cmdJson` / `cmdSelftest` 函数**:对应子命令已删\n\n### 文档\n\n- SKILL.md:第五节\"模型分类规则\"改为\"模型列表来源\";命令速查去掉 `--json`/`--selftest`;配置结构说明参数为保守默认;文件清单去掉 `data/`\n- README.md:\"模型分类规则\"章节改为\"模型列表来源\";文件结构去掉 `data/`;命令表同步\n- CLAUDE.md:核心设计决策、架构图、关键函数表、修改指引、踩坑全部重写以反映接口直取设计\n- docs/dev-guide.md、docs/prd.md、docs/user-guide.md 同步\n\n### 背景\n\n用户要求技能\"只通过聚星逸的接口文档和 Key 更新大模型列表配置到配置文件上\"。据此去掉所有本地启发式分类数据,模型列表完全依赖接口实时返回。\n\n---\n\n## v1.1.1(2026-07-19)\n\n**健壮性增强与代码质量提升。**(远程 1.1.0 已被 7-11 旧内容占用,跳 +1 patch 发布)\n\n### 新增\n\n- **`--help` / `-h` 子命令**:显示完整用法说明\n- **`--version` / `-v` 子命令**:从 `_meta.json` 读取并显示版本号\n- **`--selftest` 子命令**:不联网、不读写配置的内置自检(19 项断言)\n- **`--switch` 前缀匹配**:`resolveModelId` 按 精确 → 大小写不敏感 → 前缀唯一 三级解析\n- **Node 版本检查**:Node < 18 时给出友好提示\n- **API Key 格式校验**:`fsk-` 后必须有内容\n- **`fetchModels` 增强**:15s 超时 + 错误分类(401/403/5xx/超时)+ 空模型列表防护\n\n### 变更\n\n- **根治 MiniMax 误判**:`tierPatterns.flash` 里 `Mini` 改为 `\\bMini\\b`(词边界匹配)\n- **删除死代码**:移除从未调用的 `deepMerge` 函数\n\n### 文档\n\n- 同步 `CLAUDE.md` / `docs/dev-guide.md` 的脚本行数(385 → 561)、架构图、关键函数表、踩坑记录\n\n> 注:v1.2.0 删除了整个 tier 分类体系,上述 MiniMax 相关修复已成为历史。\n\n---\n\n## v1.0.0(2026-07-11)\n\n**首版发布。**\n\n### 新增\n\n- **动态模型获取**:每次运行脚本调 `GET /v1/models`,确保模型列表最新\n- **启发式分类**:`data/model-heuristics.json` 提供已知模型元数据 + 未知模型模式匹配\n- **自动配置**:写入 `~/.openclaw/openclaw.json` 的 `models.providers.fireworks-hub` 段\n- **默认主模型**:`DeepSeek-V4-Flash`(快速、支持推理)\n- **备选链**:其余文本模型自动加入 fallbacks\n- **模型别名**:每个模型自动生成 alias\n- **子命令**:`<fsk-key>` / `--list` / `--json` / `--env` / `--switch` / `--show`\n- **安全**:写入前自动备份 `openclaw.json.bak.<timestamp>`\n- **分类**:自动跳过生图/视频模型,按 tier(flash/pro/reasoner)排序\n- **SKILL.md**:嵌入完整配置流程\n- **文档**:PRD、用户手册 SOP、开发者 SOP\n\n> 注:v1.2.0 删除了启发式分类体系,模型列表改为完全来自接口。\n\nFile v1.3.0:docs/dev-guide.md\n\n# 开发者 SOP · 聚星逸配置\n\n> 面向接手开发的工程师。涵盖架构内幕、运维流程、注意事项、踩坑经验。\n\n---\n\n## 一、项目概览\n\n| 项 | 值 |\n|----|-----|\n| Slug | `huo15-juxingyi-configure` |\n| 版本 | 1.2.0 |\n| 仓库 | https://cnb.cool/huo15/ai/huo15-skills(主)/ https://github.com/zhaobod1/huo15-skills(镜像) |\n| 目录 | `huo15-skills/huo15-juxingyi-configure/` |\n| 技术栈 | Node.js 18+ ES Modules(零依赖) |\n| 发布平台 | ClawHub |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n\n---\n\n## 二、架构设计\n\n### 2.1 核心设计决策\n\n| 决策 | 原因 |\n|------|------|\n| **接口实时获取模型列表** | 聚星逸平台模型变化频繁,硬编码会过期。每次运行调 `/v1/models` 确保最新 |\n| **不维护本地模型清单** | v1.2.0 起删除 `data/model-heuristics.json`,模型列表完全信任接口返回 |\n| **模型参数填保守默认** | 接口只返回 `id`/`owned_by`,不返回上下文窗口等;填默认值保证 OpenClaw 可用 |\n| **主模型取列表第一个** | 不硬编码特定模型;配完后主动询问切换 |\n| **生图/视频过滤用脚本内正则** | 通用关键词(`image`/`t2v`/`i2v`/`video` 等),保证配置可用 |\n| **零依赖 Node 脚本** | 不需要 npm install,Node 18+ 自带 fetch,用户直接运行 |\n| **只操作 fireworks-hub provider** | 不碰其他 provider,保证幂等安全 |\n| **写入前自动备份** | 可回滚,用户放心 |\n| **SKILL.md 嵌入完整流程** | LLM 加载 SKILL.md 后 0 次 API 探索即可配置,省 token |\n\n### 2.2 文件职责\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # LLM 嵌入源(≤25KB),指导 AI 执行配置流程\n├── _meta.json                     # ClawHub 元数据(ownerId/slug/version)\n├── README.md                      # 公开文档(面向用户)\n├── CLAUDE.md                      # 开发规范(面向接手开发者)\n├── LICENSE                        # MIT\n├── scripts/\n│   └── configure.mjs              # 核心脚本(445行),所有逻辑在此\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP(本文档)\n    └── changelog.md               # 版本变更历史\n```\n\n> v1.2.0 起**不再有** `data/` 目录——模型分类启发式数据已删除,模型列表完全来自接口。\n\n### 2.3 configure.mjs 架构\n\n```\n参数解析 → Node 版本检查\n    │\n    ├── --help/-h      → cmdHelp()       显示帮助\n    ├── --version/-v   → cmdVersion()    读 _meta.json,显示版本\n    ├── --show         → cmdShow()       读 openclaw.json,展示当前配置\n    ├── --switch X     → cmdSwitch()     读/写 openclaw.json,切换主模型(支持前缀匹配)\n    ├── <key> --list   → fetchModels() + cmdList()       调接口,展示\n    └── <key>          → fetchModels() + cmdConfigure()  调接口,写入 openclaw.json\n```\n\n**关键函数**:\n- `fetchModels(apiKey)` — 调 `GET /v1/models`,带 15s 超时 + 错误分类(401/403/5xx)+ 空列表防护\n- `toModelEntry(id)` — 单个模型配置项:`id` + `name` + 保守默认参数\n- `buildConfig(apiKey, rawModels)` — 生成 provider + agents.defaults(primary 取第一个 + fallbacks + aliases)\n- `resolveModelId(input, ids)` — 模型 ID 解析(精确→大小写不敏感→前缀唯一)\n- `writeOpenclawJson(config)` — 备份 + 写入\n\n**关键常量**:\n- `BASE_URL` = `https://fireworks-simulator-api.huo15.com/v1`\n- `PROVIDER` = `fireworks-hub`\n- `ENV_VAR` = `FIREWORKS_API_KEY`\n- `NON_TEXT_RE` = `/image|seedream|t2v|i2v|video|dall-?e|happyhorse/i`(生图/视频过滤)\n\n---\n\n## 三、开发环境\n\n### 3.1 准备\n\n```bash\n# 仓库\ncd ~/workspace/projects/openclaw/huo15-skills\ncd huo15-juxingyi-configure\n\n# Node 版本(需 18+)\nnode -v\n\n# 无需 npm install(零依赖)\n```\n\n### 3.2 测试\n\n```bash\n# 语法检查\nnode --check scripts/configure.mjs\n\n# 帮助 / 版本(不联网)\nnode scripts/configure.mjs --help\nnode scripts/configure.mjs --version\n\n# 查看当前配置(不需 key)\nnode scripts/configure.mjs --show\n\n# 列出模型(用真实 key 测试接口连通)\nnode scripts/configure.mjs fsk-测试key --list\n```\n\n### 3.3 修改模型默认参数\n\n接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等参数。如需调整保守默认值,编辑 `toModelEntry(id)` 函数:\n\n```js\nfunction toModelEntry(id) {\n  return {\n    id,\n    name: `${fmtName(id)} (聚星逸)`,\n    reasoning: false,        // ← 推理能力默认\n    contextWindow: 131072,   // ← 上下文窗口默认\n    maxTokens: 8192,         // ← 最大输出 token 默认\n    input: ['text'],\n    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n  }\n}\n```\n\n> 如平台后续在 `/v1/models` 返回了精确参数,可改为读取接口字段(如 `m.context_window`)。\n\n---\n\n## 四、发布流程\n\n### 4.1 标准发布(6 步)\n\n```bash\n# 1. 开发 & 测试\ncd ~/workspace/projects/openclaw/huo15-skills/huo15-juxingyi-configure\nnode --check scripts/configure.mjs\nnode scripts/configure.mjs fsk-测试key --list\n\n# 2. 自查\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\nwc -c SKILL.md  # 应 < 25600\n\n# 3. 提交\ncd ~/workspace/projects/openclaw/huo15-skills\ngit add huo15-juxingyi-configure/\ngit commit -m \"feat(huo15-juxingyi-configure): vX.Y.Z 说明\"\n\n# 4. 推送双 remote\ngit push cnb main     # CNB(主)\ngit push origin main  # GitHub(镜像)\n\n# 5. 发布 ClawHub\nclawhub publish \"$(pwd)/huo15-juxingyi-configure\" \\\n  --slug huo15-juxingyi-configure \\\n  --version X.Y.Z \\\n  --changelog \"说明\"\n\n# 6. chore commit(_meta.json 已是正确版本则跳过)\ngit commit --allow-empty -m \"chore(huo15-juxingyi-configure): bump _meta to vX.Y.Z\"\ngit push cnb main\n```\n\n### 4.2 版本号规则\n\n| 变更类型 | 版本号 |\n|---------|--------|\n| 架构/哲学/触发器重构 | 次版本 +1(1.1 → 1.2) |\n| 常规功能新增、新触发词 | 次版本 +1 |\n| Bug 修复、文案调整、文档更新 | 补丁号 +1(1.0.0 → 1.0.1) |\n\n### 4.3 ClawHub 发布六坑\n\n| # | 坑 | 应对 |\n|---|---|------|\n| 1 | 必须绝对路径 | `clawhub publish \"$(pwd)/huo15-juxingyi-configure\"` |\n| 2 | `--version` 必填 | CLI 不读 frontmatter / _meta.json |\n| 3 | 新 slug 每小时 5 个配额 | 存量 slug 升版本不占额度 |\n| 4 | `_meta.json` 不自动刷新 | 手动 bump + chore commit |\n| 5 | 幽灵占用(inspect=2.5 但报 exists on 2.6) | 立刻跳 +1 patch,不重试 |\n| 6 | Remote push 可能失败 | CNB 是主库,GitHub 镜像失败不阻塞 |\n\n---\n\n## 五、运维注意事项\n\n### 5.1 密钥安全\n\n- ❌ **密钥禁止出现在**:commit / log / PR / SKILL.md / README.md / 任何 LLM 上下文\n- ✅ **用户每次运行时提供密钥**,skill 代码中不存储\n- ✅ **推荐用 `--env` 模式**,配置文件中不存明文\n\n### 5.2 openclaw.json 操作安全\n\n- ✅ 每次写入前自动备份 `.bak.<timestamp>`\n- ✅ 只操作 `fireworks-hub` provider 段\n- ✅ 合并 `agents.defaults.models` 时保留非 `fireworks-hub/` 的已有条目\n- ⚠️ 如果用户手动改了 openclaw.json 中 fireworks-hub 段,重新运行脚本会覆盖(但有备份)\n\n### 5.3 模型列表维护\n\n- **完全不需要手动维护**——脚本每次运行都从 `/v1/models` 接口实时获取\n- 平台新增模型后,重新运行脚本即可自动包含\n- 只有以下情况需要改脚本:\n  1. 接口 Base URL 变了 → 改 `BASE_URL` 常量\n  2. 新的生图/视频模型命名模式 → 改 `NON_TEXT_RE` 正则\n  3. 想调整模型默认参数 → 改 `toModelEntry`\n\n---\n\n## 六、踩坑经验\n\n### 坑 1:接口 /v1/models 不返回模型参数\n\n**现象**:OpenAI 兼容的 `/v1/models` 端点标准只返回 `{id, object, created, owned_by}`,不返回 `contextWindow`/`reasoning`/`maxTokens`。\n\n**解决(v1.2.0)**:`toModelEntry` 填保守默认值保证 OpenClaw 可用。如平台后续扩展返回字段,可改为读取。\n\n### 坑 2:主模型不稳定(取列表第一个)\n\n**现象**:接口返回顺序不保证稳定,主模型可能变化。\n\n**解决**:配完后主动询问用户是否切换(SKILL.md §三 Step 3 强制要求),用户可立即选定稳定主模型。`--switch` 支持前缀匹配。\n\n### 坑 3:`deepMerge` 函数未使用(已清理,v1.1.1)\n\n开发初期设计了深度合并,后来改为直接覆盖 `fireworks-hub` 段。**v1.1.1 已删除该死代码**。\n\n### 坑 4:MiniMax 误判(已随 v1.2.0 架构简化彻底消除)\n\nv1.0/v1.1 时代 `tierPatterns` 中 `Mini` 关键词太宽泛,`MiniMax-M2.7` 被误判为 flash。v1.2.0 删除了整个 tier 分类体系,此问题不再存在。\n\n### 坑 5:GitHub 推送失败\n\n**现象**:`git push origin main` 报 `could not read Username` 或 HTTP2 framing error。\n\n**解决**:CNB 是主库,GitHub 是镜像。CNB 推成功即可,GitHub 失败不阻塞发布。\n\n### 坑 6:SKILL.md 中不能出现品牌违禁词\n\n`grep -riE \"odoo|uniapp|uni-app|欧度\"` 不能命中(已发布 slug `huo15-odoo19-module-dev` 本身是例外,但描述文字不能含违禁词)。\n\n---\n\n## 七、与其他 skill 的关系\n\n| Skill | 关系 |\n|-------|------|\n| `huo15-yh-usage` | **互补**:本 skill 配置聚星逸接入,yh-usage 查该 key 的用量账单 |\n| `huo15-openclaw-bootstrap` | **上游**:bootstrap 初始化 workspace 后,用户可能需要配置模型供应商(本 skill) |\n| `huo15-token-optimizer` | **参考**:token-optimizer 的 references 中有 openclaw.json 配置格式参考 |\n\n---\n\n## 八、调试技巧\n\n### 8.1 查看当前 openclaw.json 中的聚星逸段\n\n```bash\ncat ~/.openclaw/openclaw.json | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\nprint(json.dumps(d.get('models',{}).get('providers',{}).get('fireworks-hub',{}), indent=2, ensure_ascii=False))\n\"\n```\n\n### 8.2 测试 API 连通性\n\n```bash\ncurl -s \"https://fireworks-simulator-api.huo15.com/v1/models\" \\\n  -H \"Authorization: Bearer fsk-测试key\" | python3 -m json.tool | head -20\n```\n\n### 8.3 查看备份文件\n\n```bash\nls -lt ~/.openclaw/openclaw.json.bak.* | head -5\n```\n\n---\n\n## 九、发布前自查 Checklist\n\n```bash\n# 1. 品牌词检查(必须无命中)\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\n\n# 2. SKILL.md 大小(应 < 25600 字节)\nwc -c SKILL.md\n\n# 3. 脚本语法检查\nnode --check scripts/configure.mjs\n\n# 4. _meta.json 格式检查\npython3 -c \"import json; json.load(open('_meta.json'))\"\n\n# 5. 脚本功能测试\nnode scripts/configure.mjs --show\nnode scripts/configure.mjs --help\nnode scripts/configure.mjs --version\n\n# 6. git 状态\ngit status\n```\n\n---\n\n## 十、后续规划\n\n| 版本 | 计划 |\n|------|------|\n| v1.3 | 如平台 `/v1/models` 返回精确参数(contextWindow/reasoning 等),改为读取接口字段 |\n| v1.4 | 支持配置指定 agent 的模型(非 defaults) |\n| v1.5 | 模型健康检查(测试每个模型是否可调用) |\n\n---\n\n**青岛火一五信息科技有限公司** · postmaster@huo15.com · QQ群 1093992108\n\nFile v1.3.0:docs/prd.md\n\n# PRD · 聚星逸配置 Skill(huo15-juxingyi-configure)\n\n> 产品需求文档 · v1.2.0 · 2026-07-19\n\n---\n\n## 一、产品定位\n\n**聚星逸配置**是 OpenClaw 生态专用 skill,帮助用户将聚星逸(Juxingyi)大模型聚合平台接入 OpenClaw 运行时。\n\n**核心价值**:用户只需提供一个 `fsk-` 密钥,skill 调聚星逸 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,无需手动查文档、记模型 ID、写 JSON。**模型列表完全来自接口,不维护任何本地硬编码清单。**\n\n---\n\n## 二、背景与问题\n\n### 痛点\n\n1. **模型列表变化频繁**:聚星逸平台不断新增模型,硬编码列表很快过期\n2. **手动配置易出错**:openclaw.json 结构复杂(providers / models / agents.defaults / fallbacks / aliases),手写容易漏字段或拼错模型 ID\n3. **每次探索浪费 token**:不沉淀配置知识,每次都要消耗 LLM token 去搜索文档、探索配置格式\n4. **不知道有哪些模型可用**:用户不清楚平台有哪些模型,也不知道哪些适合文本对话、哪些是生图/视频\n\n### 解决方案\n\n| 痛点 | 解决方式 |\n|------|---------|\n| 模型列表过期 | 每次运行脚本调 `GET /v1/models`,完全信任接口返回 |\n| 手动配置易错 | 脚本自动生成完整 JSON 片段并写入 |\n| token 浪费 | SKILL.md 嵌入完整配置知识,0 次 API 探索 |\n| 不知有哪些模型 | `--list` 模式列出接口返回的全部模型 |\n\n---\n\n## 三、用户故事\n\n### US-1:首次配置\n\n> 作为 OpenClaw 用户,我想用聚星逸的密钥接入平台,这样就能调用 50+ 大模型。\n\n**验收**:\n- ✅ 用户提供 `fsk-` 密钥后,脚本调 `/v1/models` 接口拉取模型列表\n- ✅ 自动写入 `~/.openclaw/openclaw.json` 的 `models.providers.fireworks-hub` 段\n- ✅ 主模型取接口返回列表的第一个\n- ✅ 写入前自动备份原配置\n- ✅ 配置完成后主动询问用户是否切换模型\n\n### US-2:切换主模型\n\n> 作为已配置用户,我想切换默认主模型。\n\n**验收**:\n- ✅ `--switch <model-id>` 一键切换(支持前缀匹配)\n- ✅ 旧主模型自动加入 fallbacks 链\n- ✅ 切换前自动备份\n\n### US-3:查看可用模型\n\n> 作为潜在用户,我想看看聚星逸有哪些模型可用,再决定是否配置。\n\n**验收**:\n- ✅ `--list` 模式调接口并展示,标注默认主模型(列表第一个)\n- ✅ 生图/视频模型单独列出(标注\"跳过\")\n\n### US-4:查看当前配置\n\n> 作为已配置用户,我想看看当前聚星逸配了什么。\n\n**验收**:\n- ✅ `--show` 模式展示 provider 信息、主模型、备选链、全部已配模型\n- ✅ 密钥脱敏显示\n\n### US-5:安全存储密钥\n\n> 作为安全敏感用户,我不想把 API Key 明文写在配置文件里。\n\n**验收**:\n- ✅ `--env` 模式用环境变量引用(`FIREWORKS_API_KEY`)\n- ✅ 配置文件中只存 `{ source: \"env\", provider: \"default\", id: \"FIREWORKS_API_KEY\" }`,不存明文\n\n### US-6:日常更新模型列表(保留主模型)\n\n> 作为已配置用户,平台新增了模型,我想拉取最新列表但保留自己选的主模型。\n\n**验收**:\n- ✅ `--update` 子命令调接口拿最新列表\n- ✅ **保留当前主模型**(若仍在平台列表中)\n- ✅ 报告新增 / 移除的模型\n- ✅ 旧主模型下架时自动切到列表第一个并提示\n- ✅ 保留原密钥存储方式(明文 / env 不动)\n- ✅ 更新前自动备份\n\n---\n\n## 四、功能需求\n\n### F1:接口模型获取\n\n- **输入**:`fsk-` 密钥\n- **API**:`GET https://fireworks-simulator-api.huo15.com/v1/models`\n- **鉴权**:`Authorization: Bearer <fsk-key>`\n- **输出**:模型列表 JSON(OpenAI 兼容标准 `{ object: \"list\", data: [{ id, owned_by, ... }] }`)\n- **容错**:15s 超时、401/403/5xx 错误分类、空列表防护\n\n### F2:模型处理\n\n| 类别 | 判定规则 | 处理方式 |\n|------|---------|---------|\n| 生图/视频模型 | ID 匹配 `NON_TEXT_RE`(`image`/`seedream`/`t2v`/`i2v`/`video`/`dall-e`/`happyhorse`) | 跳过,不配置文本对话 |\n| 文本对话模型 | 其余全部 | 写入配置 |\n\n> **不维护本地模型清单**:v1.2.0 起删除了 `data/model-heuristics.json`,模型列表完全来自接口。\n\n### F3:模型参数\n\n接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等参数。脚本填保守默认值:\n\n| 字段 | 默认值 |\n|------|--------|\n| `reasoning` | `false` |\n| `contextWindow` | `131072` |\n| `maxTokens` | `8192` |\n| `input` | `[\"text\"]` |\n| `cost` | 全 0 |\n\n> 用户可按需在 `openclaw.json` 手动调整。如平台后续扩展接口返回字段,可改为读取。\n\n### F4:openclaw.json 写入\n\n写入以下段:\n\n```\nmodels.providers.fireworks-hub     ← provider 配置 + 全部文本模型\nagents.defaults.model.primary      ← 列表第一个模型\nagents.defaults.model.fallbacks    ← 其余文本模型列表\nagents.defaults.models             ← 每个模型的 alias\n```\n\n**安全规则**:\n- 只操作 `fireworks-hub` provider,不碰其他 provider\n- 合并 `agents.defaults.models` 时,保留非 `fireworks-hub/` 前条的已有条目\n- 写入前自动备份 `openclaw.json.bak.<timestamp>`\n\n### F5:子命令\n\n| 命令 | 功能 |\n|------|------|\n| `<fsk-key>` | 首次配置:拉取模型列表并写入(主模型取列表第一个) |\n| `<fsk-key> --list` | 列出接口返回的模型(不写文件) |\n| `<fsk-key> --update` | **日常更新**:保留当前主模型,只刷新模型列表 |\n| `<fsk-key> --env` | 首次配置时用环境变量引用存储密钥 |\n| `--switch <model-id>` | 切换主模型 |\n| `--show` | 查看当前配置 |\n| `--help` / `--version` | 帮助 / 版本 |\n\n---\n\n## 五、非功能需求\n\n| 项 | 要求 |\n|----|------|\n| 运行时 | Node.js 18+(自带 fetch),零依赖 |\n| 安全 | 密钥不硬编码,不出现在 commit/log/PR |\n| 可逆 | 每次写入前备份 |\n| 品牌合规 | 对外文档无 `odoo` / `uniapp` / `uni-app` / `欧度` |\n| 体积 | SKILL.md ≤ 25KB(8192 tokens 限制) |\n| 可维护 | 平台新增模型后无需更新 skill(接口实时获取) |\n\n---\n\n## 六、技术约束\n\n- **API 协议**:OpenAI 兼容(`openai-completions`)\n- **Provider 名称**:`fireworks-hub`(openclaw.json 中的 key)\n- **密钥格式**:`fsk-` 开头\n- **Base URL**:`https://fireworks-simulator-api.huo15.com/v1`\n- **接入文档**:https://fireworks-simulator.huo15.com/docs.html\n\n---\n\n## 七、不做什么\n\n- ❌ 不查用量账单(走 `huo15-yh-usage` skill)\n- ❌ 不配置生图/视频模型为文本对话(跳过)\n- ❌ 不修改 openclaw.json 中其他 provider 配置\n- ❌ 不自动重启 OpenClaw(只提示用户手动重启)\n- ❌ 不缓存模型列表(每次都调接口,确保最新)\n- ❌ 不维护本地模型分类数据(v1.2.0 起完全依赖接口)\n\n---\n\n## 八、里程碑\n\n| 版本 | 日期 | 内容 |\n|------|------|------|\n| v1.0.0 | 2026-07-11 | 首版:动态获取、启发式分类、配置写入、切换、show、list、json、env |\n| v1.1.1 | 2026-07-19 | 健壮性增强:Node 检查、密钥校验、超时错误分类、help/version/selftest、前缀匹配 |\n| v1.3.0 | 2026-07-19 | 新增 `--update` 子命令(日常更新模型列表,保留主模型) |\n| v1.2.0 | 2026-07-19 | 架构简化:删除本地硬编码分类数据,模型列表完全来自接口;主模型取列表第一个;删 --json/--selftest |\n\n---\n\n## 九、后续规划\n\n- v1.3:如平台 `/v1/models` 返回精确参数,改为读取接口字段\n- v1.4:支持配置指定 agent 的模型(非 defaults)\n- v1.5:模型健康检查(测试每个模型是否可调用)\n\nFile v1.3.0:docs/user-guide.md\n\n# 用户手册(SOP)· 聚星逸配置\n\n> 面向终端用户的标准操作流程。跟着走,3 分钟完成聚星逸接入 OpenClaw。\n\n---\n\n## 一、前置条件\n\n| 项 | 要求 |\n|----|------|\n| OpenClaw | 已安装并初始化(`~/.openclaw/openclaw.json` 存在) |\n| Node.js | 18.0 或更高(终端运行 `node -v` 确认) |\n| 聚星逸账号 | 已注册,有 `fsk-` 开头的 API Key |\n| Skill | 已安装 `huo15-juxingyi-configure` |\n\n### 没有聚星逸账号?\n\n1. 打开 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/)\n2. 用手机号 + 验证码注册\n3. 新用户注册即赠体验额度\n4. 进入「API 密钥」页,点击新建,生成 `fsk-` 开头的密钥(**明文仅展示一次,请妥善保存**)\n\n---\n\n## 二、安装 Skill\n\n### 方式 A:从 ClawHub 安装(推荐)\n\n```bash\nclawhub install huo15-juxingyi-configure --dir ~/.openclaw/workspace/skills\n```\n\n### 方式 B:从源码安装\n\n```bash\ngit clone https://cnb.cool/huo15/ai/huo15-skills.git\ncp -r huo15-skills/huo15-juxingyi-configure/ ~/.openclaw/workspace/skills/\n```\n\n---\n\n## 三、标准配置流程\n\n### Step 1 · 进入 skill 目录\n\n```bash\ncd ~/.openclaw/workspace/skills/huo15-juxingyi-configure\n```\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n**脚本做了什么**:\n1. 调用聚星逸 `/v1/models` 接口获取最新模型列表(完全来自接口,无本地清单)\n2. 跳过生图/视频模型\n3. 写入 `~/.openclaw/openclaw.json`\n4. 主模型取接口返回列表的第一个\n5. 自动备份原配置\n\n**成功输出示例**:\n```\n✅ 聚星逸配置完成!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T00-00-00-000Z\n   模型数: 30 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 29 个模型\n   密钥存储: 直接写入(明文)\n\n   主模型 & 备选链:\n   ★ fireworks-hub/DeepSeek-V4-Flash\n     fireworks-hub/DeepSeek-V4-Pro\n     ...\n\n重启 OpenClaw 后生效。\n```\n\n> **关于模型参数**:接口只返回模型 `id`,不返回上下文窗口等。脚本填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证可用,可手动调整。\n\n### Step 3 · 询问是否切换主模型\n\n配置完成后,**AI 会主动问你**是否切换到其他模型(因为主模型是自动取的列表第一个)。\n\n**如果你想切换**:\n```\n回复模型名即可,如 \"DeepSeek-V4-Pro\" 或 \"claude-opus-4-8\"\n```\n\n或直接运行:\n```bash\nnode scripts/configure.mjs --switch DeepSeek-V4-Pro\n```\n\n**如果你想知道有哪些模型可选**:\n```bash\nnode scripts/configure.mjs fsk-你的密钥 --list\n```\n\n输出示例:\n```\n🛰️  聚星逸 · 可用模型(来自 /v1/models 接口)\n   共 40 个,其中 30 个文本对话模型\n\n文本对话模型(将写入配置):\n  DeepSeek-V4-Flash                 Deepseek V4 Flash (聚星逸) ★ 默认主模型\n  DeepSeek-V4-Pro                   Deepseek V4 Pro (聚星逸)\n  GPT-5.5                           Gpt 5.5 (聚星逸)\n  ...\n\n生图/视频模型(跳过,不配文本对话): 10 个\n  Seedream-Image\n  ...\n```\n\n### Step 4 · 重启 OpenClaw\n\n```bash\nopenclaw restart\n```\n\n重启后,OpenClaw 会使用聚星逸的模型进行对话。\n\n---\n\n## 四、日常操作\n\n### 查看当前配置\n\n```bash\nnode scripts/configure.mjs --show\n```\n\n输出示例:\n```\n🛰️  聚星逸当前配置\n   Provider: fireworks-hub\n   Base URL: https://fireworks-simulator-api.huo15.com/v1\n   API 类型: openai-completions\n   密钥方式: 直接密钥 (fsk-Gho…)\n   文本模型: 30 个\n   主模型:   fireworks-hub/DeepSeek-V4-Flash\n   备选链:\n     fireworks-hub/DeepSeek-V4-Pro\n     ...\n\n   已配模型:\n   ★  DeepSeek-V4-Flash                 Deepseek V4 Flash (聚星逸)\n      DeepSeek-V4-Pro                   Deepseek V4 Pro (聚星逸)\n      ...\n```\n\n### 切换主模型\n\n```bash\nnode scripts/configure.mjs --switch claude-opus-4-8\n```\n\n输出示例:\n```\n✅ 主模型已切换\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   旧主: fireworks-hub/DeepSeek-V4-Flash\n   新主: fireworks-hub/claude-opus-4-8\n   备选: 29 个模型\n\n重启 OpenClaw 后生效。\n```\n\n### 重新配置(平台新增了模型)\n\n**日常更新推荐用 `--update`(保留当前主模型)**:\n\n```bash\nnode scripts/configure.mjs fsk-你的密钥 --update\n```\n\n`--update` 与重新配置(不加 `--update`)的区别:\n- `--update`:**保留当前主模型**(若仍在平台列表),只刷新模型列表,报告新增/移除\n- 不加 `--update`:主模型重置为列表第一个(适合从头重新配置)\n\n`--update` 输出示例:\n```\n✅ 聚星逸模型列表已更新!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   模型数: 18 → 20 个文本对话模型\n   ✨ 新增 2 个:\n     + NewModel-X1\n     + NewModel-X2\n   主模型保留: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 19 个模型\n\n重启 OpenClaw 后生效。\n```\n\n**想从头重新配置**(不保留主模型):\n\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n> 重新配置不会丢失其他 provider 的设置,只更新 `fireworks-hub` 段。\n\n---\n\n## 五、安全选项\n\n### 默认:密钥明文存储\n\n最简单的方式,密钥直接写在 `openclaw.json` 中。\n\n### 推荐:环境变量引用\n\n```bash\n# 配置时加 --env\nnode scripts/configure.mjs fsk-你的密钥 --env\n\n# 然后设置环境变量(加到 ~/.zshrc 或 ~/.bashrc)\nexport FIREWORKS_API_KEY=fsk-你的密钥\n\n# 重启 OpenClaw 前确保环境变量已加载\nsource ~/.zshrc\n```\n\n配置文件中只存:\n```json\n\"apiKey\": {\n  \"source\": \"env\",\n  \"provider\": \"default\",\n  \"id\": \"FIREWORKS_API_KEY\"\n}\n```\n\n---\n\n## 六、模型选择建议\n\n配置完成后,可根据用途切换主模型(用 `--switch`):\n\n| 场景 | 推荐方向 |\n|------|---------|\n| 日常编程、快速问答 | DeepSeek 系列、Qwen 系列 |\n| 复杂代码生成、架构设计 | GPT 系列、Claude Opus 系列 |\n| 深度分析、数学推理 | DeepSeek-R1 等推理模型 |\n| 长文档处理 | Gemini 系列(长上下文) |\n| Claude 系列偏好 | claude-opus / claude-sonnet |\n| 国产模型偏好 | Qwen / GLM / DeepSeek |\n\n> 完整可用模型以 `--list` 调接口实时返回为准,平台会不断新增。\n\n---\n\n## 七、常见问题\n\n### Q1:配置后 OpenClaw 报错 \"model not found\"\n\n**原因**:未重启 OpenClaw。\n\n**解决**:\n```bash\nopenclaw restart\n```\n\n### Q2:API 返回 401\n\n**原因**:密钥无效或已过期。\n\n**解决**:\n1. 去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」确认密钥状态\n2. 重新运行配置脚本\n\n### Q3:用了 `--env` 但 OpenClaw 报 \"API key not found\"\n\n**原因**:环境变量未设置或未加载。\n\n**解决**:\n```bash\n# 检查环境变量\necho $FIREWORKS_API_KEY\n\n# 如果为空,设置它\nexport FIREWORKS_API_KEY=fsk-你的密钥\nsource ~/.zshrc  # 或 ~/.bashrc\n\n# 然后重启 OpenClaw\nopenclaw restart\n```\n\n### Q4:想恢复配置前的状态\n\n**解决**:找到备份文件,恢复即可:\n```bash\nls ~/.openclaw/openclaw.json.bak.*\n# 选最近的\ncp ~/.openclaw/openclaw.json.bak.2026-07-19T00-00-00-000Z ~/.openclaw/openclaw.json\nopenclaw restart\n```\n\n### Q5:平台新增了模型,怎么更新配置?\n\n**解决**:用 `--update` 日常更新(保留当前主模型):\n```bash\nnode scripts/configure.mjs fsk-你的密钥 --update\n```\n\n脚本会调接口拿最新列表,报告新增/移除的模型,保留你当前选的主模型。无需更新 skill 本身。\n\n如果想从头重新配置(不保留主模型),直接运行:\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n### Q6:主模型不是我想要的\n\n**原因**:主模型自动取接口返回列表的第一个,可能不是你偏好的。\n\n**解决**:配置完成后 AI 会主动询问是否切换,回复模型名即可。或随时运行:\n```bash\nnode scripts/configure.mjs --switch 你想要的模型名\n```\n\n---\n\n## 八、命令速查卡\n\n```bash\n# ── 配置 ──\nnode scripts/configure.mjs <fsk-key>           # 首次配置(主模型取列表第一个)\nnode scripts/configure.mjs <fsk-key> --env     # 配置(密钥用环境变量)\n\n# ── 日常更新 ──\nnode scripts/configure.mjs <fsk-key> --update  # 更新模型列表(保留当前主模型)\n\n# ── 查看 ──\nnode scripts/configure.mjs --show              # 查看当前配置\nnode scripts/configure.mjs <fsk-key> --list    # 列出接口返回的模型\n\n# ── 切换 ──\nnode scripts/configure.mjs --switch <model-id> # 切换主模型\n```\n\n---\n\n## 九、获取帮助\n\n| 渠道 | 信息 |\n|------|------|\n| 聚星逸控制台 | https://fireworks-simulator.huo15.com/app/ |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n| 辉火管家 AI | 网站右下角悬浮按钮,7×24 在线答疑 |\n| QQ 群 | 1093992108 |\n| 邮箱 | postmaster@huo15.com |\n| 电话 | 185 5489 8815 |\n| 公众号 | 逸寻智库(扫码关注) |\n\n---\n\n**青岛火一五信息科技有限公司**\n\nFile v1.3.0:skill-card.md\n\n## Description:\n\nConfigures OpenClaw to use the Juxingyi provider by fetching the live /v1/models list with a user-supplied fsk key and writing the resulting provider, primary model, fallbacks, and aliases to openclaw.json.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhaobod1](https://clawhub.ai/user/zhaobod1)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and OpenClaw users use this skill to configure, update, inspect, and switch Juxingyi text-model entries in their local OpenClaw configuration. It is intended for users who already have a Juxingyi account and fsk-format API key.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The default flow can expose the Juxingyi API key through command-line history, plaintext openclaw.json, and backup files.\n\nMitigation: Prefer the documented --env workflow or another secret-store workflow, avoid putting real keys in shared logs or prompts, restrict permissions on configuration and backup files, and rotate exposed keys.\n\nRisk: The script changes OpenClaw model defaults and the fireworks-hub provider configuration.\n\nMitigation: Review the generated configuration before use, keep the automatic backups, and restore from backup if the provider, primary model, or fallbacks are not suitable.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zhaobod1/skills/huo15-juxingyi-configure)\n- [Juxingyi API documentation](https://fireworks-simulator.huo15.com/docs.html)\n- [Juxingyi console](https://fireworks-simulator.huo15.com/app/)\n- [User guide](docs/user-guide.md)\n- [Developer guide](docs/dev-guide.md)\n- [Changelog](docs/changelog.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and configuration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces local OpenClaw configuration changes through a Node.js script and reports model, backup, update, or switch status to the user.]\n\n## Skill Version(s):\n\n1.3.0 (source: frontmatter, changelog, and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.3.0:LICENSE\n\nMIT License\n\nCopyright (c) 2026 青岛火一五信息科技有限公司\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v1.2.0: 11 files, 33956 bytes\n\nFiles: _meta.json (143b), CLAUDE.md (9055b), docs/changelog.md (3996b), docs/dev-guide.md (11126b), docs/prd.md (6851b), docs/user-guide.md (7905b), LICENSE (1095b), README.md (5994b), scripts/configure.mjs (16270b), skill-card.md (2437b), SKILL.md (8936b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: huo15-juxingyi-configure\ndisplayName: 聚星逸配置\nversion: 1.2.0\ndescription: \"用聚星逸 fsk- 密钥调 /v1/models 接口,把最新模型列表写入 openclaw.json。模型列表完全来自接口实时返回,不依赖本地硬编码数据。一个 Key 调 50+ 顶级大模型。\"\nhomepage: https://github.com/zhaobod1/huo15-skills\nmetadata: { \"openclaw\": { \"emoji\": \"🛰️\", \"requires\": { \"bins\": [\"node\"] } } }\naliases:\n  - 聚星逸配置\n  - 聚星逸\n  - juxingyi\n  - 配置聚星逸\n  - 聚星逸接入\n  - 聚星逸模型\n  - fireworks-hub\n  - 烟花智汇配置\n  - fsk配置\n---\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n> 用 fsk- 密钥调聚星逸 /v1/models 接口 → 把模型列表写入 ~/.openclaw/openclaw.json。\n> 模型列表完全来自接口实时返回,不依赖本地硬编码数据。\n> 青岛火一五信息科技有限公司 · OpenClaw 生态\n\n---\n\n## 一、什么时候用\n\n✅ **触发**:\n- 用户说\"配置聚星逸\"/\"接入聚星逸\"/\"juxingyi\"/\"fireworks-hub\"\n- 用户提供了 `fsk-` 开头的聚星逸 API Key,想接入 OpenClaw\n- 用户说\"把聚星逸的模型配到 openclaw\"\n- 用户想查看或切换聚星逸已配的模型\n\n❌ **不触发**:\n- 用户只是问聚星逸是什么(直接回答即可)\n- 用户想查用量账单(走 `huo15-yh-usage` skill)\n\n---\n\n## 二、前置知识\n\n**聚星逸**(Juxingyi)是青岛火一五的大模型聚合平台(接入文档:https://fireworks-simulator.huo15.com/docs.html):\n- **Base URL**: `https://fireworks-simulator-api.huo15.com/v1`\n- **API 协议**: OpenAI 兼容(`openai-completions`)\n- **密钥格式**: `fsk-` 开头\n- **模型列表端点**: `GET /v1/models`(动态返回最新可用模型)\n- **一个 Key** 可调 50+ 主流大模型(DeepSeek / GPT / Claude / Qwen / GLM / Gemini / Kimi / MiniMax / 豆包等)\n\n在 OpenClaw 中,聚星逸作为一个 **provider**(`fireworks-hub`)配置在 `~/.openclaw/openclaw.json` 的 `models.providers` 段。\n\n---\n\n## 三、配置流程(3 步)\n\n### Step 1 · 获取用户的 API Key\n\n向用户索要聚星逸 API Key(`fsk-` 开头)。如果用户没有,引导去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页创建。\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key>\n```\n\n脚本会:\n1. **调用** `GET /v1/models` 接口拉取最新模型列表(完全来自接口,无本地硬编码清单)\n2. 跳过生图/视频模型(ID 含 `image`/`t2v`/`i2v`/`video` 等关键词的不能用于文本对话)\n3. 写入 `~/.openclaw/openclaw.json`:\n   - `models.providers.fireworks-hub`(provider + 全部文本模型)\n   - `agents.defaults.model.primary` = 接口返回列表的第一个模型\n   - `agents.defaults.model.fallbacks` = 其余文本模型\n   - `agents.defaults.models` = 每个模型的 alias\n4. 自动备份原配置到 `openclaw.json.bak.<timestamp>`\n\n脚本输出示例:\n```\n✅ 聚星逸配置完成!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   模型数: 18 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 17 个模型\n```\n\n> **关于模型参数**:接口 `/v1/models` 只返回模型 `id`/`owned_by`,不返回上下文窗口等参数。脚本除 `id`/`name` 外填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证 OpenClaw 可用,用户可按需在 `openclaw.json` 手动调整。\n\n### Step 3 · 询问用户是否切换主模型\n\n**配置完成后,必须主动问用户**:\n\n```\n🛰️ 聚星逸配置完成!主模型是 <接口返回的第一个模型>。\n\n需要切换到其他模型吗?回复模型名即可切换,如 \"DeepSeek-V4-Pro\"。\n或回复 \"列出全部\" 看完整列表。不切换就回 \"不用了\"。\n```\n\n**如果用户要切换**:\n```bash\nnode <skill_dir>/scripts/configure.mjs --switch <model-id>\n```\n\n**如果用户想看完整列表**:\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key> --list\n```\n\n**如果用户想看当前配置**:\n```bash\nnode <skill_dir>/scripts/configure.mjs --show\n```\n\n---\n\n## 四、脚本命令速查\n\n| 命令 | 用途 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 拉取模型列表并写入配置(主模型取列表第一个) |\n| `node configure.mjs <fsk-key> --list` | 只列出接口返回的模型(不写文件) |\n| `node configure.mjs <fsk-key> --env` | 用环境变量引用存储密钥(更安全) |\n| `node configure.mjs --switch <model-id>` | 切换主模型(支持前缀匹配) |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n\n> `<skill_dir>` = 本 skill 安装目录,通常为 `~/.openclaw/workspace/skills/huo15-juxingyi-configure`\n\n---\n\n## 五、模型列表来源\n\n**模型列表完全来自聚星逸 `/v1/models` 接口实时返回,本 skill 不维护任何本地模型清单。**\n\n脚本处理逻辑:\n1. 调 `GET /v1/models` 拿到平台当前所有可用模型\n2. 跳过生图/视频模型(ID 含 `image`/`seedream`/`t2v`/`i2v`/`video`/`dall-e`/`happyhorse`)——它们不能用于文本对话\n3. 剩余文本模型全部写入配置\n4. 主模型取接口返回列表的第一个,其余作 fallbacks\n\n> 这意味着**平台新增模型后,无需更新本 skill**——脚本每次运行都从接口拿最新列表。\n\n---\n\n## 六、openclaw.json 配置结构\n\n配置完成后,`~/.openclaw/openclaw.json` 中新增/更新的段:\n\n```json\n{\n  \"models\": {\n    \"mode\": \"replace\",\n    \"providers\": {\n      \"fireworks-hub\": {\n        \"baseUrl\": \"https://fireworks-simulator-api.huo15.com/v1\",\n        \"apiKey\": \"fsk-你的密钥\",\n        \"api\": \"openai-completions\",\n        \"models\": [\n          {\n            \"id\": \"DeepSeek-V4-Flash\",\n            \"name\": \"Deepseek V4 Flash (聚星逸)\",\n            \"reasoning\": false,\n            \"contextWindow\": 131072,\n            \"maxTokens\": 8192,\n            \"input\": [\"text\"],\n            \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n          }\n        ]\n      }\n    }\n  },\n  \"agents\": {\n    \"defaults\": {\n      \"model\": {\n        \"primary\": \"fireworks-hub/DeepSeek-V4-Flash\",\n        \"fallbacks\": [\"fireworks-hub/DeepSeek-V4-Pro\", \"...\"]\n      },\n      \"models\": {\n        \"fireworks-hub/DeepSeek-V4-Flash\": { \"alias\": \"Deepseek V4 Flash (聚星逸)\" }\n      }\n    }\n  }\n}\n```\n\n> 模型项的 `reasoning` / `contextWindow` / `maxTokens` 为保守默认值(接口不返回精确参数),可手动调整。\n\n---\n\n## 七、安全注意\n\n- API Key 默认**明文写入** openclaw.json。如需更安全,加 `--env` 用环境变量引用:\n  ```bash\n  node configure.mjs <fsk-key> --env\n  # 然后设置: export FIREWORKS_API_KEY=fsk-你的密钥\n  ```\n- 脚本每次写入前自动备份 `openclaw.json.bak.<timestamp>`\n- **密钥禁止出现在 commit / log / PR / 任何 LLM 上下文**\n\n---\n\n## 八、硬红线\n\n1. ❌ **不在任何文件中硬编码 API Key** — 用户每次提供\n2. ❌ **不跳过接口获取** — 必须调 `/v1/models`,不用本地清单\n3. ❌ **配置完不问就结束** — 必须主动问用户是否切换模型\n4. ❌ **不破坏其他 provider** — 只改 `fireworks-hub` 段\n5. ❌ **不忘记备份** — 写入前必须备份 openclaw.json\n\n---\n\n## 九、文件清单\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # 你正在看的这个(≤ 25KB)\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 详细文档\n├── CLAUDE.md                      # 开发规范(内部)\n├── LICENSE                        # MIT\n├── .gitignore\n├── scripts/\n│   └── configure.mjs              # 零依赖配置脚本(Node 18+)\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP\n    └── changelog.md               # 版本变更历史\n```\n\n---\n\n## 十、版本\n\n- **v1.2.0**(2026-07-19): 架构简化 — 删除 `data/model-heuristics.json` 及所有本地硬编码分类逻辑(knownModels/tierPatterns/skipPatterns);模型列表完全来自 `/v1/models` 接口实时返回;主模型改为取接口返回列表的第一个(不再硬编码 DeepSeek-V4-Flash);生图/视频过滤改为脚本内通用正则;删除 `--json` / `--selftest` 子命令;模型参数填保守默认值(接口不返回精确参数)。\n- **v1.1.1**(2026-07-19): 健壮性增强 — Node 版本检查、密钥校验、fetchModels 超时与错误分类、`--help`/`--version`/`--selftest` 子命令、`--switch` 前缀匹配、MiniMax 误判根治。\n- **v1.0.0**(2026-07-11): 首版 — 动态获取模型列表,自动配置 openclaw.json,默认 DeepSeek-V4-Flash,支持切换。\n\n---\n\n**公司:** 青岛火一五信息科技有限公司 · postmaster@huo15.com · QQ群 1093992108\n\nFile v1.2.0:README.md\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>一个 Key 调 50+ 顶级大模型</h3>\n<h3>接口实时拉取 · 自动写入 · 零本地硬编码</h3>\n\n</div>\n\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n<div align=\"center\">\n\n![Version](https://img.shields.io/badge/version-1.2.0-brightgreen)\n![License](https://img.shields.io/badge/license-MIT-green)\n![Node](https://img.shields.io/badge/node-%3E%3D18.0-blue)\n![ClawHub](https://img.shields.io/badge/ClawHub-published-ff6b6b)\n\n</div>\n\n---\n\n## 这是什么\n\n`huo15-juxingyi-configure` 是 OpenClaw 专用 skill,帮你快速接入聚星逸(Juxingyi)大模型聚合平台:\n\n1. **接口实时拉取**:每次运行都从聚星逸 `/v1/models` 接口获取最新可用模型列表\n2. **自动写入**:`~/.openclaw/openclaw.json` 的 `fireworks-hub` provider 段\n3. **主模型取列表第一个**:配完后主动询问是否切换\n4. **灵活切换**:随时用 `--switch` 换主模型\n5. **安全可靠**:写入前自动备份,支持环境变量引用存储密钥\n\n> **模型列表完全来自接口,不维护任何本地硬编码清单**——平台新增模型无需更新本 skill。\n> 接入文档:https://fireworks-simulator.huo15.com/docs.html\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\n# 从 ClawHub 安装(推荐)\nclawhub install huo15-juxingyi-configure --dir ~/.openclaw/workspace/skills\n\n# 或从源码安装\ngit clone https://cnb.cool/huo15/ai/huo15-skills.git\ncp -r huo15-skills/huo15-juxingyi-configure/ ~/.openclaw/workspace/skills/\n```\n\n### 使用\n\n**1. 获取聚星逸 API Key**\n\n打开 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页,创建一个 `fsk-` 开头的密钥。\n\n**2. 运行配置脚本**\n\n```bash\ncd ~/.openclaw/workspace/skills/huo15-juxingyi-configure\nnode scripts/configure.mjs <fsk-key>\n```\n\n脚本调 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,主模型取接口返回列表的第一个。\n\n**3. 重启 OpenClaw**\n\n```bash\nopenclaw restart\n```\n\n> 完整操作流程见 [用户手册 SOP](docs/user-guide.md)\n\n---\n\n## 脚本命令\n\n| 命令 | 说明 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 拉取模型列表并写入配置(主模型取列表第一个) |\n| `node configure.mjs <fsk-key> --list` | 只列出接口返回的模型(不写文件) |\n| `node configure.mjs <fsk-key> --env` | 用环境变量引用存储密钥(更安全) |\n| `node configure.mjs --switch <model-id>` | 切换主模型(支持前缀匹配) |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n\n---\n\n## 模型列表来源\n\n**模型列表完全来自聚星逸 `/v1/models` 接口实时返回,本 skill 不维护任何本地模型清单。**\n\n脚本处理逻辑:\n1. 调 `GET /v1/models` 拿到平台当前所有可用模型\n2. 跳过生图/视频模型(ID 含 `image`/`seedream`/`t2v`/`i2v`/`video`/`dall-e`/`happyhorse`)——不能用于文本对话\n3. 剩余文本模型全部写入配置\n4. 主模型取接口返回列表的第一个,其余作 fallbacks\n\n> **关于模型参数**:接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等参数。脚本除 `id`/`name` 外填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证 OpenClaw 可用,可手动调整。\n\n---\n\n## 安全建议\n\n- **默认**:API Key 明文写入 `openclaw.json`,最简单\n- **更安全**:加 `--env` 用环境变量引用:\n  ```bash\n  node configure.mjs <fsk-key> --env\n  export FIREWORKS_API_KEY=fsk-你的密钥\n  ```\n\n---\n\n## 文件结构\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # ClawHub 嵌入源(≤ 25KB)\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 本文件\n├── CLAUDE.md                      # 开发规范\n├── LICENSE                        # MIT\n├── .gitignore                     # skill 级忽略\n├── scripts/\n│   └── configure.mjs              # 零依赖配置脚本(Node 18+)\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP\n    └── changelog.md               # 版本变更历史\n```\n\n---\n\n## 与其他 skill 协作\n\n| 场景 | 配套 skill |\n|------|-----------|\n| 查询 token 用量/费用 | [`huo15-yh-usage`](../huo15-yh-usage/)(凭 fsk- 查账单)|\n\n---\n\n## 文档\n\n| 文档 | 说明 |\n|------|------|\n| [用户手册 SOP](docs/user-guide.md) | 面向终端用户的标准操作流程 |\n| [开发者 SOP](docs/dev-guide.md) | 面向接手开发的架构内幕、运维流程、踩坑经验 |\n| [PRD](docs/prd.md) | 产品需求文档 |\n| [变更历史](docs/changelog.md) | 版本变更记录 |\n\n---\n\n## License\n\n[MIT](LICENSE) — 自由商用 / 修改 / 再发布。需保留版权声明 `Copyright (c) 2026 青岛火一五信息科技有限公司`。\n\n---\n\n<div align=\"center\">\n\n**公司名称:** 青岛火一五信息科技有限公司\n\n**联系邮箱:** postmaster@huo15.com | **QQ群:** 1093992108\n\n---\n\n**关注逸寻智库公众号,获取更多资讯**\n\n<img src=\"https://tools.huo15.com/uploads/images/system/qrcode_yxzk.jpg\" alt=\"逸寻智库公众号二维码\" style=\"width: 200px; height: auto; margin: 10px 0;\" />\n\n</div>\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-juxingyi-configure\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1784452839643\n}\n\nFile v1.2.0:CLAUDE.md\n\n# CLAUDE.md · huo15-juxingyi-configure\n\n> 聚星逸配置 skill —— 用 fsk- 密钥调 /v1/models 接口,把模型列表写入 openclaw.json\n> 面向接手开发的 AI / 工程师,涵盖架构、规范、踩坑、运维。\n\n---\n\n## 一、项目定位\n\n将聚星逸(Juxingyi)大模型聚合平台接入 OpenClaw。用户提供一个 `fsk-` 密钥,skill 调 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,主模型取接口返回列表的第一个,配好后询问用户是否切换。\n\n**核心价值**:模型列表完全来自接口实时返回,不维护任何本地硬编码清单——平台新增模型无需更新本 skill。\n\n---\n\n## 二、技术栈\n\n| 项 | 值 |\n|----|----|\n| 脚本语言 | Node.js ES Modules(零依赖,需 Node 18+) |\n| API 协议 | OpenAI 兼容(`openai-completions`) |\n| API 端点 | `GET https://fireworks-simulator-api.huo15.com/v1/models` |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n| 配置文件 | `~/.openclaw/openclaw.json` |\n\n---\n\n## 三、核心设计决策\n\n| 决策 | 原因 |\n|------|------|\n| **接口实时获取**(非硬编码) | 平台模型变化频繁,硬编码会过期;每次运行调 `/v1/models` 确保最新 |\n| **不维护本地模型清单** | v1.2.0 起删除 `data/model-heuristics.json`,模型列表完全信任接口 |\n| **模型参数填保守默认** | 接口只返回 `id`/`owned_by`,不返回上下文窗口等;填默认值保证 OpenClaw 可用,用户可手动调 |\n| **主模型取列表第一个** | 不硬编码特定模型;配完后主动询问切换 |\n| **生图/视频过滤用脚本内正则** | 通用关键词(`image`/`t2v`/`i2v`/`video` 等),保证配置可用;非外部数据文件 |\n| **零依赖 Node 脚本** | 不需 npm install,用户直接运行 |\n| **只操作 fireworks-hub provider** | 不碰其他 provider,幂等安全 |\n| **写入前自动备份** | 可回滚 |\n| **SKILL.md 嵌入完整流程** | LLM 加载后 0 次 API 探索,省 token |\n\n---\n\n## 四、文件结构\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # LLM 嵌入源(≤25KB)\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 公开文档(面向用户)\n├── CLAUDE.md                      # 开发规范(本文档)\n├── LICENSE                        # MIT\n├── .gitignore                     # skill 级忽略\n├── scripts/\n│   └── configure.mjs              # 核心脚本(445 行),所有逻辑在此\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP(更详细的架构内幕)\n    └── changelog.md               # 版本变更历史\n```\n\n> v1.2.0 起**不再有** `data/` 目录——模型分类启发式数据已删除,模型列表完全来自接口。\n\n---\n\n## 五、configure.mjs 架构\n\n```\n参数解析 → Node 版本检查\n    │\n    ├── --help/-h      → cmdHelp()       显示帮助\n    ├── --version/-v   → cmdVersion()    读 _meta.json,显示版本\n    ├── --show         → cmdShow()       读 openclaw.json,展示当前配置\n    ├── --switch X     → cmdSwitch()     读/写 openclaw.json,切换主模型(支持前缀匹配)\n    ├── <key> --list   → fetchModels() + cmdList()       调接口,展示\n    └── <key>          → fetchModels() + cmdConfigure()  调接口,写入 openclaw.json\n```\n\n### 关键函数\n\n| 函数 | 职责 |\n|------|------|\n| `fetchModels(apiKey)` | 调 `GET /v1/models`,带 15s 超时 + 错误分类(401/403/5xx)+ 空列表防护 |\n| `toModelEntry(id)` | 单个模型配置项:`id` + `name` + 保守默认参数 |\n| `buildConfig(apiKey, rawModels)` | 生成 provider + agents.defaults(primary 取第一个 + fallbacks + aliases) |\n| `resolveModelId(input, ids)` | 模型 ID 解析:精确 → 大小写不敏感 → 前缀唯一 |\n| `readOpenclawJson()` | 读取 `~/.openclaw/openclaw.json` |\n| `writeOpenclawJson(config)` | 备份 + 写入 |\n\n### 模型处理逻辑\n\n1. `fetchModels` 调接口拿 `data.data`(OpenAI 兼容标准格式)\n2. `buildConfig` 遍历模型,用 `NON_TEXT_RE` 正则跳过生图/视频模型\n3. 每个文本模型经 `toModelEntry` 生成配置项(保守默认参数)\n4. 主模型 = 列表第一个,其余作 fallbacks\n\n> **`NON_TEXT_RE = /image|seedream|t2v|i2v|video|dall-?e|happyhorse/i`** —— 脚本内常量,非外部数据文件。\n\n---\n\n## 六、修改指引\n\n### 修改接口常量\n\n编辑 `scripts/configure.mjs` 顶部的常量段:\n\n```js\nconst BASE_URL = 'https://fireworks-simulator-api.huo15.com/v1'\nconst PROVIDER = 'fireworks-hub'\nconst ENV_VAR = 'FIREWORKS_API_KEY'\nconst NON_TEXT_RE = /image|seedream|t2v|i2v|video|dall-?e|happyhorse/i\n```\n\n### 修改模型默认参数\n\n编辑 `toModelEntry(id)` 函数中的默认值:\n\n```js\nfunction toModelEntry(id) {\n  return {\n    id,\n    name: `${fmtName(id)} (聚星逸)`,\n    reasoning: false,        // ← 推理能力默认\n    contextWindow: 131072,   // ← 上下文窗口默认\n    maxTokens: 8192,         // ← 最大输出 token 默认\n    input: ['text'],\n    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n  }\n}\n```\n\n> 这些是保守默认值(接口不返回精确参数)。如平台后续在 `/v1/models` 返回了精确参数,可改为读取接口字段。\n\n---\n\n## 七、铁律\n\n1. ❌ **不在任何文件中硬编码 API Key** — 用户每次运行时提供\n2. ❌ **不跳过接口获取** — 必须调 `/v1/models`,不用本地清单\n3. ❌ **配置完不问就结束** — 必须主动问用户是否切换模型(见 SKILL.md §三 Step 3)\n4. ❌ **不破坏其他 provider** — 只改 `fireworks-hub` 段\n5. ❌ **不忘记备份** — 写入前必须备份 openclaw.json\n6. ❌ **密钥禁止出现在 commit / log / PR / 任何 LLM 上下文**\n7. ✅ **SKILL.md ≤ 25KB** — 检查:`wc -c SKILL.md`\n\n---\n\n## 八、踩坑经验\n\n### 坑 1:接口 /v1/models 不返回模型参数\n\n**现象**:OpenAI 兼容的 `/v1/models` 端点标准只返回 `{id, object, created, owned_by}`,不返回 `contextWindow`/`reasoning`/`maxTokens`。\n\n**解决(v1.2.0)**:`toModelEntry` 填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证 OpenClaw 可用。用户可按需手动调整。如平台后续扩展了返回字段,可改为读取。\n\n### 坑 2:主模型不稳定(取列表第一个)\n\n**现象**:接口返回顺序不保证稳定,主模型可能变化。\n\n**解决**:配完后主动询问用户是否切换(SKILL.md §三 Step 3 强制要求),用户可立即选定稳定主模型。`--switch` 支持前缀匹配。\n\n### 坑 3:`deepMerge` 函数定义了但未使用(已清理,v1.1.1)\n\n开发初期设计了深度合并,后来改为直接覆盖 `fireworks-hub` 段(更安全可预测)。**v1.1.1 已删除该死代码**。\n\n### 坑 4:MiniMax 误判(已随 v1.2.0 架构简化彻底消除)\n\nv1.0/v1.1 时代 `tierPatterns` 中 `Mini` 关键词太宽泛,`MiniMax-M2.7` 被误判为 flash。v1.2.0 删除了整个 tier 分类体系,此问题不再存在。\n\n### 坑 5:GitHub 推送可能失败\n\n`git push origin main` 可能报 `could not read Username`。CNB 是主库,GitHub 是镜像,CNB 成功即可。\n\n### 坑 6:品牌词检查\n\n对外文档不能出现 `odoo` / `uniapp` / `uni-app` / `欧度`。已发布目录名 `huo15-odoo19-module-dev` 本身是例外(slug 不可改名),但描述文字不能含违禁词。\n\n---\n\n## 九、发布前自查\n\n```bash\n# 品牌词检查(必须无命中)\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\n\n# SKILL.md 大小(应 < 25600 字节)\nwc -c SKILL.md\n\n# 脚本语法检查\nnode --check scripts/configure.mjs\n\n# _meta.json 格式检查\npython3 -c \"import json; json.load(open('_meta.json'))\"\n\n# 功能测试\nnode scripts/configure.mjs --show\nnode scripts/configure.mjs --help\nnode scripts/configure.mjs --version\n```\n\n---\n\n## 十、发布流程\n\n```bash\n# 1. 提交\ncd ~/workspace/projects/openclaw/huo15-skills\ngit add huo15-juxingyi-configure/\ngit commit -m \"feat(huo15-juxingyi-configure): vX.Y.Z 说明\"\n\n# 2. 推送\ngit push cnb main     # CNB(主)\ngit push origin main  # GitHub(镜像,失败不阻塞)\n\n# 3. 发布 ClawHub\nclawhub publish \"$(pwd)/huo15-juxingyi-configure\" \\\n  --slug huo15-juxingyi-configure \\\n  --version X.Y.Z \\\n  --changelog \"说明\"\n\n# 4. chore commit\ngit commit --allow-empty -m \"chore(huo15-juxingyi-configure): bump _meta to vX.Y.Z\"\ngit push cnb main\n```\n\n**版本号规则**:架构重构/新功能 → 次版本+1;Bug修复/文案 → 补丁+1。\n\n---\n\n## 十一、与其他 skill 协作\n\n| Skill | 关系 |\n|-------|------|\n| `huo15-yh-usage` | 互补:本 skill 配置接入,yh-usage 查用量账单 |\n| `huo15-openclaw-bootstrap` | 上游:bootstrap 初始化 workspace 后配置模型供应商 |\n\n---\n\n## 十二、联系方式\n\n- **公司**: 青岛火一五信息科技有限公司\n- **邮箱**: postmaster@huo15.com\n- **QQ群**: 1093992108\n\nFile v1.2.0:docs/changelog.md\n\n# 变更历史 · huo15-juxingyi-configure\n\n---\n\n## v1.2.0(2026-07-19)\n\n**架构简化:模型列表完全来自接口,删除本地硬编码分类数据。**\n\n### 变更\n\n- **删除 `data/model-heuristics.json`**:移除 30 个已知模型元数据(knownModels)、tier 模式匹配规则(tierPatterns)、skipPatterns 等全部本地硬编码分类数据\n- **删除 `data/` 目录**:不再需要\n- **模型列表完全来自接口**:脚本只调 `GET /v1/models`,信任接口返回,不维护本地清单\n- **主模型改为取接口返回列表的第一个**:不再硬编码 `DeepSeek-V4-Flash`\n- **生图/视频过滤改为脚本内通用正则**:`NON_TEXT_RE = /image|seedream|t2v|i2v|video|dall-e|happyhorse/i`(常量,非外部数据文件)\n- **模型参数填保守默认值**:接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等;`toModelEntry` 填 `contextWindow`: 131072 / `maxTokens`: 8192 / `reasoning`: false 保证 OpenClaw 可用,可手动调整\n\n### 删除\n\n- **`--json` 子命令**:偏离核心(输出 JSON 片段),移除\n- **`--selftest` 子命令**:依赖已删除的分类逻辑(classifyModel/guessTier),移除\n- **`classifyModel` / `guessTier` / `tierWeight` 函数**:分类体系整体移除\n- **`cmdJson` / `cmdSelftest` 函数**:对应子命令已删\n\n### 文档\n\n- SKILL.md:第五节\"模型分类规则\"改为\"模型列表来源\";命令速查去掉 `--json`/`--selftest`;配置结构说明参数为保守默认;文件清单去掉 `data/`\n- README.md:\"模型分类规则\"章节改为\"模型列表来源\";文件结构去掉 `data/`;命令表同步\n- CLAUDE.md:核心设计决策、架构图、关键函数表、修改指引、踩坑全部重写以反映接口直取设计\n- docs/dev-guide.md、docs/prd.md、docs/user-guide.md 同步\n\n### 背景\n\n用户要求技能\"只通过聚星逸的接口文档和 Key 更新大模型列表配置到配置文件上\"。据此去掉所有本地启发式分类数据,模型列表完全依赖接口实时返回。\n\n---\n\n## v1.1.1(2026-07-19)\n\n**健壮性增强与代码质量提升。**(远程 1.1.0 已被 7-11 旧内容占用,跳 +1 patch 发布)\n\n### 新增\n\n- **`--help` / `-h` 子命令**:显示完整用法说明\n- **`--version` / `-v` 子命令**:从 `_meta.json` 读取并显示版本号\n- **`--selftest` 子命令**:不联网、不读写配置的内置自检(19 项断言)\n- **`--switch` 前缀匹配**:`resolveModelId` 按 精确 → 大小写不敏感 → 前缀唯一 三级解析\n- **Node 版本检查**:Node < 18 时给出友好提示\n- **API Key 格式校验**:`fsk-` 后必须有内容\n- **`fetchModels` 增强**:15s 超时 + 错误分类(401/403/5xx/超时)+ 空模型列表防护\n\n### 变更\n\n- **根治 MiniMax 误判**:`tierPatterns.flash` 里 `Mini` 改为 `\\bMini\\b`(词边界匹配)\n- **删除死代码**:移除从未调用的 `deepMerge` 函数\n\n### 文档\n\n- 同步 `CLAUDE.md` / `docs/dev-guide.md` 的脚本行数(385 → 561)、架构图、关键函数表、踩坑记录\n\n> 注:v1.2.0 删除了整个 tier 分类体系,上述 MiniMax 相关修复已成为历史。\n\n---\n\n## v1.0.0(2026-07-11)\n\n**首版发布。**\n\n### 新增\n\n- **动态模型获取**:每次运行脚本调 `GET /v1/models`,确保模型列表最新\n- **启发式分类**:`data/model-heuristics.json` 提供已知模型元数据 + 未知模型模式匹配\n- **自动配置**:写入 `~/.openclaw/openclaw.json` 的 `models.providers.fireworks-hub` 段\n- **默认主模型**:`DeepSeek-V4-Flash`(快速、支持推理)\n- **备选链**:其余文本模型自动加入 fallbacks\n- **模型别名**:每个模型自动生成 alias\n- **子命令**:`<fsk-key>` / `--list` / `--json` / `--env` / `--switch` / `--show`\n- **安全**:写入前自动备份 `openclaw.json.bak.<timestamp>`\n- **分类**:自动跳过生图/视频模型,按 tier(flash/pro/reasoner)排序\n- **SKILL.md**:嵌入完整配置流程\n- **文档**:PRD、用户手册 SOP、开发者 SOP\n\n> 注:v1.2.0 删除了启发式分类体系,模型列表改为完全来自接口。\n\nFile v1.2.0:docs/dev-guide.md\n\n# 开发者 SOP · 聚星逸配置\n\n> 面向接手开发的工程师。涵盖架构内幕、运维流程、注意事项、踩坑经验。\n\n---\n\n## 一、项目概览\n\n| 项 | 值 |\n|----|-----|\n| Slug | `huo15-juxingyi-configure` |\n| 版本 | 1.2.0 |\n| 仓库 | https://cnb.cool/huo15/ai/huo15-skills(主)/ https://github.com/zhaobod1/huo15-skills(镜像) |\n| 目录 | `huo15-skills/huo15-juxingyi-configure/` |\n| 技术栈 | Node.js 18+ ES Modules(零依赖) |\n| 发布平台 | ClawHub |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n\n---\n\n## 二、架构设计\n\n### 2.1 核心设计决策\n\n| 决策 | 原因 |\n|------|------|\n| **接口实时获取模型列表** | 聚星逸平台模型变化频繁,硬编码会过期。每次运行调 `/v1/models` 确保最新 |\n| **不维护本地模型清单** | v1.2.0 起删除 `data/model-heuristics.json`,模型列表完全信任接口返回 |\n| **模型参数填保守默认** | 接口只返回 `id`/`owned_by`,不返回上下文窗口等;填默认值保证 OpenClaw 可用 |\n| **主模型取列表第一个** | 不硬编码特定模型;配完后主动询问切换 |\n| **生图/视频过滤用脚本内正则** | 通用关键词(`image`/`t2v`/`i2v`/`video` 等),保证配置可用 |\n| **零依赖 Node 脚本** | 不需要 npm install,Node 18+ 自带 fetch,用户直接运行 |\n| **只操作 fireworks-hub provider** | 不碰其他 provider,保证幂等安全 |\n| **写入前自动备份** | 可回滚,用户放心 |\n| **SKILL.md 嵌入完整流程** | LLM 加载 SKILL.md 后 0 次 API 探索即可配置,省 token |\n\n### 2.2 文件职责\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # LLM 嵌入源(≤25KB),指导 AI 执行配置流程\n├── _meta.json                     # ClawHub 元数据(ownerId/slug/version)\n├── README.md                      # 公开文档(面向用户)\n├── CLAUDE.md                      # 开发规范(面向接手开发者)\n├── LICENSE                        # MIT\n├── scripts/\n│   └── configure.mjs              # 核心脚本(445行),所有逻辑在此\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP(本文档)\n    └── changelog.md               # 版本变更历史\n```\n\n> v1.2.0 起**不再有** `data/` 目录——模型分类启发式数据已删除,模型列表完全来自接口。\n\n### 2.3 configure.mjs 架构\n\n```\n参数解析 → Node 版本检查\n    │\n    ├── --help/-h      → cmdHelp()       显示帮助\n    ├── --version/-v   → cmdVersion()    读 _meta.json,显示版本\n    ├── --show         → cmdShow()       读 openclaw.json,展示当前配置\n    ├── --switch X     → cmdSwitch()     读/写 openclaw.json,切换主模型(支持前缀匹配)\n    ├── <key> --list   → fetchModels() + cmdList()       调接口,展示\n    └── <key>          → fetchModels() + cmdConfigure()  调接口,写入 openclaw.json\n```\n\n**关键函数**:\n- `fetchModels(apiKey)` — 调 `GET /v1/models`,带 15s 超时 + 错误分类(401/403/5xx)+ 空列表防护\n- `toModelEntry(id)` — 单个模型配置项:`id` + `name` + 保守默认参数\n- `buildConfig(apiKey, rawModels)` — 生成 provider + agents.defaults(primary 取第一个 + fallbacks + aliases)\n- `resolveModelId(input, ids)` — 模型 ID 解析(精确→大小写不敏感→前缀唯一)\n- `writeOpenclawJson(config)` — 备份 + 写入\n\n**关键常量**:\n- `BASE_URL` = `https://fireworks-simulator-api.huo15.com/v1`\n- `PROVIDER` = `fireworks-hub`\n- `ENV_VAR` = `FIREWORKS_API_KEY`\n- `NON_TEXT_RE` = `/image|seedream|t2v|i2v|video|dall-?e|happyhorse/i`(生图/视频过滤)\n\n---\n\n## 三、开发环境\n\n### 3.1 准备\n\n```bash\n# 仓库\ncd ~/workspace/projects/openclaw/huo15-skills\ncd huo15-juxingyi-configure\n\n# Node 版本(需 18+)\nnode -v\n\n# 无需 npm install(零依赖)\n```\n\n### 3.2 测试\n\n```bash\n# 语法检查\nnode --check scripts/configure.mjs\n\n# 帮助 / 版本(不联网)\nnode scripts/configure.mjs --help\nnode scripts/configure.mjs --version\n\n# 查看当前配置(不需 key)\nnode scripts/configure.mjs --show\n\n# 列出模型(用真实 key 测试接口连通)\nnode scripts/configure.mjs fsk-测试key --list\n```\n\n### 3.3 修改模型默认参数\n\n接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等参数。如需调整保守默认值,编辑 `toModelEntry(id)` 函数:\n\n```js\nfunction toModelEntry(id) {\n  return {\n    id,\n    name: `${fmtName(id)} (聚星逸)`,\n    reasoning: false,        // ← 推理能力默认\n    contextWindow: 131072,   // ← 上下文窗口默认\n    maxTokens: 8192,         // ← 最大输出 token 默认\n    input: ['text'],\n    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n  }\n}\n```\n\n> 如平台后续在 `/v1/models` 返回了精确参数,可改为读取接口字段(如 `m.context_window`)。\n\n---\n\n## 四、发布流程\n\n### 4.1 标准发布(6 步)\n\n```bash\n# 1. 开发 & 测试\ncd ~/workspace/projects/openclaw/huo15-skills/huo15-juxingyi-configure\nnode --check scripts/configure.mjs\nnode scripts/configure.mjs fsk-测试key --list\n\n# 2. 自查\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\nwc -c SKILL.md  # 应 < 25600\n\n# 3. 提交\ncd ~/workspace/projects/openclaw/huo15-skills\ngit add huo15-juxingyi-configure/\ngit commit -m \"feat(huo15-juxingyi-configure): vX.Y.Z 说明\"\n\n# 4. 推送双 remote\ngit push cnb main     # CNB(主)\ngit push origin main  # GitHub(镜像)\n\n# 5. 发布 ClawHub\nclawhub publish \"$(pwd)/huo15-juxingyi-configure\" \\\n  --slug huo15-juxingyi-configure \\\n  --version X.Y.Z \\\n  --changelog \"说明\"\n\n# 6. chore commit(_meta.json 已是正确版本则跳过)\ngit commit --allow-empty -m \"chore(huo15-juxingyi-configure): bump _meta to vX.Y.Z\"\ngit push cnb main\n```\n\n### 4.2 版本号规则\n\n| 变更类型 | 版本号 |\n|---------|--------|\n| 架构/哲学/触发器重构 | 次版本 +1(1.1 → 1.2) |\n| 常规功能新增、新触发词 | 次版本 +1 |\n| Bug 修复、文案调整、文档更新 | 补丁号 +1(1.0.0 → 1.0.1) |\n\n### 4.3 ClawHub 发布六坑\n\n| # | 坑 | 应对 |\n|---|---|------|\n| 1 | 必须绝对路径 | `clawhub publish \"$(pwd)/huo15-juxingyi-configure\"` |\n| 2 | `--version` 必填 | CLI 不读 frontmatter / _meta.json |\n| 3 | 新 slug 每小时 5 个配额 | 存量 slug 升版本不占额度 |\n| 4 | `_meta.json` 不自动刷新 | 手动 bump + chore commit |\n| 5 | 幽灵占用(inspect=2.5 但报 exists on 2.6) | 立刻跳 +1 patch,不重试 |\n| 6 | Remote push 可能失败 | CNB 是主库,GitHub 镜像失败不阻塞 |\n\n---\n\n## 五、运维注意事项\n\n### 5.1 密钥安全\n\n- ❌ **密钥禁止出现在**:commit / log / PR / SKILL.md / README.md / 任何 LLM 上下文\n- ✅ **用户每次运行时提供密钥**,skill 代码中不存储\n- ✅ **推荐用 `--env` 模式**,配置文件中不存明文\n\n### 5.2 openclaw.json 操作安全\n\n- ✅ 每次写入前自动备份 `.bak.<timestamp>`\n- ✅ 只操作 `fireworks-hub` provider 段\n- ✅ 合并 `agents.defaults.models` 时保留非 `fireworks-hub/` 的已有条目\n- ⚠️ 如果用户手动改了 openclaw.json 中 fireworks-hub 段,重新运行脚本会覆盖(但有备份)\n\n### 5.3 模型列表维护\n\n- **完全不需要手动维护**——脚本每次运行都从 `/v1/models` 接口实时获取\n- 平台新增模型后,重新运行脚本即可自动包含\n- 只有以下情况需要改脚本:\n  1. 接口 Base URL 变了 → 改 `BASE_URL` 常量\n  2. 新的生图/视频模型命名模式 → 改 `NON_TEXT_RE` 正则\n  3. 想调整模型默认参数 → 改 `toModelEntry`\n\n---\n\n## 六、踩坑经验\n\n### 坑 1:接口 /v1/models 不返回模型参数\n\n**现象**:OpenAI 兼容的 `/v1/models` 端点标准只返回 `{id, object, created, owned_by}`,不返回 `contextWindow`/`reasoning`/`maxTokens`。\n\n**解决(v1.2.0)**:`toModelEntry` 填保守默认值保证 OpenClaw 可用。如平台后续扩展返回字段,可改为读取。\n\n### 坑 2:主模型不稳定(取列表第一个)\n\n**现象**:接口返回顺序不保证稳定,主模型可能变化。\n\n**解决**:配完后主动询问用户是否切换(SKILL.md §三 Step 3 强制要求),用户可立即选定稳定主模型。`--switch` 支持前缀匹配。\n\n### 坑 3:`deepMerge` 函数未使用(已清理,v1.1.1)\n\n开发初期设计了深度合并,后来改为直接覆盖 `fireworks-hub` 段。**v1.1.1 已删除该死代码**。\n\n### 坑 4:MiniMax 误判(已随 v1.2.0 架构简化彻底消除)\n\nv1.0/v1.1 时代 `tierPatterns` 中 `Mini` 关键词太宽泛,`MiniMax-M2.7` 被误判为 flash。v1.2.0 删除了整个 tier 分类体系,此问题不再存在。\n\n### 坑 5:GitHub 推送失败\n\n**现象**:`git push origin main` 报 `could not read Username` 或 HTTP2 framing error。\n\n**解决**:CNB 是主库,GitHub 是镜像。CNB 推成功即可,GitHub 失败不阻塞发布。\n\n### 坑 6:SKILL.md 中不能出现品牌违禁词\n\n`grep -riE \"odoo|uniapp|uni-app|欧度\"` 不能命中(已发布 slug `huo15-odoo19-module-dev` 本身是例外,但描述文字不能含违禁词)。\n\n---\n\n## 七、与其他 skill 的关系\n\n| Skill | 关系 |\n|-------|------|\n| `huo15-yh-usage` | **互补**:本 skill 配置聚星逸接入,yh-usage 查该 key 的用量账单 |\n| `huo15-openclaw-bootstrap` | **上游**:bootstrap 初始化 workspace 后,用户可能需要配置模型供应商(本 skill) |\n| `huo15-token-optimizer` | **参考**:token-optimizer 的 references 中有 openclaw.json 配置格式参考 |\n\n---\n\n## 八、调试技巧\n\n### 8.1 查看当前 openclaw.json 中的聚星逸段\n\n```bash\ncat ~/.openclaw/openclaw.json | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\nprint(json.dumps(d.get('models',{}).get('providers',{}).get('fireworks-hub',{}), indent=2, ensure_ascii=False))\n\"\n```\n\n### 8.2 测试 API 连通性\n\n```bash\ncurl -s \"https://fireworks-simulator-api.huo15.com/v1/models\" \\\n  -H \"Authorization: Bearer fsk-测试key\" | python3 -m json.tool | head -20\n```\n\n### 8.3 查看备份文件\n\n```bash\nls -lt ~/.openclaw/openclaw.json.bak.* | head -5\n```\n\n---\n\n## 九、发布前自查 Checklist\n\n```bash\n# 1. 品牌词检查(必须无命中)\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\n\n# 2. SKILL.md 大小(应 < 25600 字节)\nwc -c SKILL.md\n\n# 3. 脚本语法检查\nnode --check scripts/configure.mjs\n\n# 4. _meta.json 格式检查\npython3 -c \"import json; json.load(open('_meta.json'))\"\n\n# 5. 脚本功能测试\nnode scripts/configure.mjs --show\nnode scripts/configure.mjs --help\nnode scripts/configure.mjs --version\n\n# 6. git 状态\ngit status\n```\n\n---\n\n## 十、后续规划\n\n| 版本 | 计划 |\n|------|------|\n| v1.3 | 如平台 `/v1/models` 返回精确参数(contextWindow/reasoning 等),改为读取接口字段 |\n| v1.4 | 支持配置指定 agent 的模型(非 defaults) |\n| v1.5 | 模型健康检查(测试每个模型是否可调用) |\n\n---\n\n**青岛火一五信息科技有限公司** · postmaster@huo15.com · QQ群 1093992108\n\nFile v1.2.0:docs/prd.md\n\n# PRD · 聚星逸配置 Skill(huo15-juxingyi-configure)\n\n> 产品需求文档 · v1.2.0 · 2026-07-19\n\n---\n\n## 一、产品定位\n\n**聚星逸配置**是 OpenClaw 生态专用 skill,帮助用户将聚星逸(Juxingyi)大模型聚合平台接入 OpenClaw 运行时。\n\n**核心价值**:用户只需提供一个 `fsk-` 密钥,skill 调聚星逸 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,无需手动查文档、记模型 ID、写 JSON。**模型列表完全来自接口,不维护任何本地硬编码清单。**\n\n---\n\n## 二、背景与问题\n\n### 痛点\n\n1. **模型列表变化频繁**:聚星逸平台不断新增模型,硬编码列表很快过期\n2. **手动配置易出错**:openclaw.json 结构复杂(providers / models / agents.defaults / fallbacks / aliases),手写容易漏字段或拼错模型 ID\n3. **每次探索浪费 token**:不沉淀配置知识,每次都要消耗 LLM token 去搜索文档、探索配置格式\n4. **不知道有哪些模型可用**:用户不清楚平台有哪些模型,也不知道哪些适合文本对话、哪些是生图/视频\n\n### 解决方案\n\n| 痛点 | 解决方式 |\n|------|---------|\n| 模型列表过期 | 每次运行脚本调 `GET /v1/models`,完全信任接口返回 |\n| 手动配置易错 | 脚本自动生成完整 JSON 片段并写入 |\n| token 浪费 | SKILL.md 嵌入完整配置知识,0 次 API 探索 |\n| 不知有哪些模型 | `--list` 模式列出接口返回的全部模型 |\n\n---\n\n## 三、用户故事\n\n### US-1:首次配置\n\n> 作为 OpenClaw 用户,我想用聚星逸的密钥接入平台,这样就能调用 50+ 大模型。\n\n**验收**:\n- ✅ 用户提供 `fsk-` 密钥后,脚本调 `/v1/models` 接口拉取模型列表\n- ✅ 自动写入 `~/.openclaw/openclaw.json` 的 `models.providers.fireworks-hub` 段\n- ✅ 主模型取接口返回列表的第一个\n- ✅ 写入前自动备份原配置\n- ✅ 配置完成后主动询问用户是否切换模型\n\n### US-2:切换主模型\n\n> 作为已配置用户,我想切换默认主模型。\n\n**验收**:\n- ✅ `--switch <model-id>` 一键切换(支持前缀匹配)\n- ✅ 旧主模型自动加入 fallbacks 链\n- ✅ 切换前自动备份\n\n### US-3:查看可用模型\n\n> 作为潜在用户,我想看看聚星逸有哪些模型可用,再决定是否配置。\n\n**验收**:\n- ✅ `--list` 模式调接口并展示,标注默认主模型(列表第一个)\n- ✅ 生图/视频模型单独列出(标注\"跳过\")\n\n### US-4:查看当前配置\n\n> 作为已配置用户,我想看看当前聚星逸配了什么。\n\n**验收**:\n- ✅ `--show` 模式展示 provider 信息、主模型、备选链、全部已配模型\n- ✅ 密钥脱敏显示\n\n### US-5:安全存储密钥\n\n> 作为安全敏感用户,我不想把 API Key 明文写在配置文件里。\n\n**验收**:\n- ✅ `--env` 模式用环境变量引用(`FIREWORKS_API_KEY`)\n- ✅ 配置文件中只存 `{ source: \"env\", provider: \"default\", id: \"FIREWORKS_API_KEY\" }`,不存明文\n\n---\n\n## 四、功能需求\n\n### F1:接口模型获取\n\n- **输入**:`fsk-` 密钥\n- **API**:`GET https://fireworks-simulator-api.huo15.com/v1/models`\n- **鉴权**:`Authorization: Bearer <fsk-key>`\n- **输出**:模型列表 JSON(OpenAI 兼容标准 `{ object: \"list\", data: [{ id, owned_by, ... }] }`)\n- **容错**:15s 超时、401/403/5xx 错误分类、空列表防护\n\n### F2:模型处理\n\n| 类别 | 判定规则 | 处理方式 |\n|------|---------|---------|\n| 生图/视频模型 | ID 匹配 `NON_TEXT_RE`(`image`/`seedream`/`t2v`/`i2v`/`video`/`dall-e`/`happyhorse`) | 跳过,不配置文本对话 |\n| 文本对话模型 | 其余全部 | 写入配置 |\n\n> **不维护本地模型清单**:v1.2.0 起删除了 `data/model-heuristics.json`,模型列表完全来自接口。\n\n### F3:模型参数\n\n接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等参数。脚本填保守默认值:\n\n| 字段 | 默认值 |\n|------|--------|\n| `reasoning` | `false` |\n| `contextWindow` | `131072` |\n| `maxTokens` | `8192` |\n| `input` | `[\"text\"]` |\n| `cost` | 全 0 |\n\n> 用户可按需在 `openclaw.json` 手动调整。如平台后续扩展接口返回字段,可改为读取。\n\n### F4:openclaw.json 写入\n\n写入以下段:\n\n```\nmodels.providers.fireworks-hub     ← provider 配置 + 全部文本模型\nagents.defaults.model.primary      ← 列表第一个模型\nagents.defaults.model.fallbacks    ← 其余文本模型列表\nagents.defaults.models             ← 每个模型的 alias\n```\n\n**安全规则**:\n- 只操作 `fireworks-hub` provider,不碰其他 provider\n- 合并 `agents.defaults.models` 时,保留非 `fireworks-hub/` 前条的已有条目\n- 写入前自动备份 `openclaw.json.bak.<timestamp>`\n\n### F5:子命令\n\n| 命令 | 功能 |\n|------|------|\n| `<fsk-key>` | 拉取模型列表并写入配置 |\n| `<fsk-key> --list` | 列出接口返回的模型(不写文件) |\n| `<fsk-key> --env` | 用环境变量引用存储密钥 |\n| `--switch <model-id>` | 切换主模型 |\n| `--show` | 查看当前配置 |\n| `--help` / `--version` | 帮助 / 版本 |\n\n---\n\n## 五、非功能需求\n\n| 项 | 要求 |\n|----|------|\n| 运行时 | Node.js 18+(自带 fetch),零依赖 |\n| 安全 | 密钥不硬编码,不出现在 commit/log/PR |\n| 可逆 | 每次写入前备份 |\n| 品牌合规 | 对外文档无 `odoo` / `uniapp` / `uni-app` / `欧度` |\n| 体积 | SKILL.md ≤ 25KB(8192 tokens 限制) |\n| 可维护 | 平台新增模型后无需更新 skill(接口实时获取) |\n\n---\n\n## 六、技术约束\n\n- **API 协议**:OpenAI 兼容(`openai-completions`)\n- **Provider 名称**:`fireworks-hub`(openclaw.json 中的 key)\n- **密钥格式**:`fsk-` 开头\n- **Base URL**:`https://fireworks-simulator-api.huo15.com/v1`\n- **接入文档**:https://fireworks-simulator.huo15.com/docs.html\n\n---\n\n## 七、不做什么\n\n- ❌ 不查用量账单(走 `huo15-yh-usage` skill)\n- ❌ 不配置生图/视频模型为文本对话(跳过)\n- ❌ 不修改 openclaw.json 中其他 provider 配置\n- ❌ 不自动重启 OpenClaw(只提示用户手动重启)\n- ❌ 不缓存模型列表(每次都调接口,确保最新)\n- ❌ 不维护本地模型分类数据(v1.2.0 起完全依赖接口)\n\n---\n\n## 八、里程碑\n\n| 版本 | 日期 | 内容 |\n|------|------|------|\n| v1.0.0 | 2026-07-11 | 首版:动态获取、启发式分类、配置写入、切换、show、list、json、env |\n| v1.1.1 | 2026-07-19 | 健壮性增强:Node 检查、密钥校验、超时错误分类、help/version/selftest、前缀匹配 |\n| v1.2.0 | 2026-07-19 | 架构简化:删除本地硬编码分类数据,模型列表完全来自接口;主模型取列表第一个;删 --json/--selftest |\n\n---\n\n## 九、后续规划\n\n- v1.3:如平台 `/v1/models` 返回精确参数,改为读取接口字段\n- v1.4:支持配置指定 agent 的模型(非 defaults)\n- v1.5:模型健康检查(测试每个模型是否可调用)\n\nFile v1.2.0:docs/user-guide.md\n\n# 用户手册(SOP)· 聚星逸配置\n\n> 面向终端用户的标准操作流程。跟着走,3 分钟完成聚星逸接入 OpenClaw。\n\n---\n\n## 一、前置条件\n\n| 项 | 要求 |\n|----|------|\n| OpenClaw | 已安装并初始化(`~/.openclaw/openclaw.json` 存在) |\n| Node.js | 18.0 或更高(终端运行 `node -v` 确认) |\n| 聚星逸账号 | 已注册,有 `fsk-` 开头的 API Key |\n| Skill | 已安装 `huo15-juxingyi-configure` |\n\n### 没有聚星逸账号?\n\n1. 打开 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/)\n2. 用手机号 + 验证码注册\n3. 新用户注册即赠体验额度\n4. 进入「API 密钥」页,点击新建,生成 `fsk-` 开头的密钥(**明文仅展示一次,请妥善保存**)\n\n---\n\n## 二、安装 Skill\n\n### 方式 A:从 ClawHub 安装(推荐)\n\n```bash\nclawhub install huo15-juxingyi-configure --dir ~/.openclaw/workspace/skills\n```\n\n### 方式 B:从源码安装\n\n```bash\ngit clone https://cnb.cool/huo15/ai/huo15-skills.git\ncp -r huo15-skills/huo15-juxingyi-configure/ ~/.openclaw/workspace/skills/\n```\n\n---\n\n## 三、标准配置流程\n\n### Step 1 · 进入 skill 目录\n\n```bash\ncd ~/.openclaw/workspace/skills/huo15-juxingyi-configure\n```\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n**脚本做了什么**:\n1. 调用聚星逸 `/v1/models` 接口获取最新模型列表(完全来自接口,无本地清单)\n2. 跳过生图/视频模型\n3. 写入 `~/.openclaw/openclaw.json`\n4. 主模型取接口返回列表的第一个\n5. 自动备份原配置\n\n**成功输出示例**:\n```\n✅ 聚星逸配置完成!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T00-00-00-000Z\n   模型数: 30 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 29 个模型\n   密钥存储: 直接写入(明文)\n\n   主模型 & 备选链:\n   ★ fireworks-hub/DeepSeek-V4-Flash\n     fireworks-hub/DeepSeek-V4-Pro\n     ...\n\n重启 OpenClaw 后生效。\n```\n\n> **关于模型参数**:接口只返回模型 `id`,不返回上下文窗口等。脚本填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证可用,可手动调整。\n\n### Step 3 · 询问是否切换主模型\n\n配置完成后,**AI 会主动问你**是否切换到其他模型(因为主模型是自动取的列表第一个)。\n\n**如果你想切换**:\n```\n回复模型名即可,如 \"DeepSeek-V4-Pro\" 或 \"claude-opus-4-8\"\n```\n\n或直接运行:\n```bash\nnode scripts/configure.mjs --switch DeepSeek-V4-Pro\n```\n\n**如果你想知道有哪些模型可选**:\n```bash\nnode scripts/configure.mjs fsk-你的密钥 --list\n```\n\n输出示例:\n```\n🛰️  聚星逸 · 可用模型(来自 /v1/models 接口)\n   共 40 个,其中 30 个文本对话模型\n\n文本对话模型(将写入配置):\n  DeepSeek-V4-Flash                 Deepseek V4 Flash (聚星逸) ★ 默认主模型\n  DeepSeek-V4-Pro                   Deepseek V4 Pro (聚星逸)\n  GPT-5.5                           Gpt 5.5 (聚星逸)\n  ...\n\n生图/视频模型(跳过,不配文本对话): 10 个\n  Seedream-Image\n  ...\n```\n\n### Step 4 · 重启 OpenClaw\n\n```bash\nopenclaw restart\n```\n\n重启后,OpenClaw 会使用聚星逸的模型进行对话。\n\n---\n\n## 四、日常操作\n\n### 查看当前配置\n\n```bash\nnode scripts/configure.mjs --show\n```\n\n输出示例:\n```\n🛰️  聚星逸当前配置\n   Provider: fireworks-hub\n   Base URL: https://fireworks-simulator-api.huo15.com/v1\n   API 类型: openai-completions\n   密钥方式: 直接密钥 (fsk-Gho…)\n   文本模型: 30 个\n   主模型:   fireworks-hub/DeepSeek-V4-Flash\n   备选链:\n     fireworks-hub/DeepSeek-V4-Pro\n     ...\n\n   已配模型:\n   ★  DeepSeek-V4-Flash                 Deepseek V4 Flash (聚星逸)\n      DeepSeek-V4-Pro                   Deepseek V4 Pro (聚星逸)\n      ...\n```\n\n### 切换主模型\n\n```bash\nnode scripts/configure.mjs --switch claude-opus-4-8\n```\n\n输出示例:\n```\n✅ 主模型已切换\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   旧主: fireworks-hub/DeepSeek-V4-Flash\n   新主: fireworks-hub/claude-opus-4-8\n   备选: 29 个模型\n\n重启 OpenClaw 后生效。\n```\n\n### 重新配置(平台新增了模型)\n\n直接重新运行配置脚本即可,它会调接口拿最新列表:\n\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n> 重新配置不会丢失其他 provider 的设置,只更新 `fireworks-hub` 段。\n\n---\n\n## 五、安全选项\n\n### 默认:密钥明文存储\n\n最简单的方式,密钥直接写在 `openclaw.json` 中。\n\n### 推荐:环境变量引用\n\n```bash\n# 配置时加 --env\nnode scripts/configure.mjs fsk-你的密钥 --env\n\n# 然后设置环境变量(加到 ~/.zshrc 或 ~/.bashrc)\nexport FIREWORKS_API_KEY=fsk-你的密钥\n\n# 重启 OpenClaw 前确保环境变量已加载\nsource ~/.zshrc\n```\n\n配置文件中只存:\n```json\n\"apiKey\": {\n  \"source\": \"env\",\n  \"provider\": \"default\",\n  \"id\": \"FIREWORKS_API_KEY\"\n}\n```\n\n---\n\n## 六、模型选择建议\n\n配置完成后,可根据用途切换主模型(用 `--switch`):\n\n| 场景 | 推荐方向 |\n|------|---------|\n| 日常编程、快速问答 | DeepSeek 系列、Qwen 系列 |\n| 复杂代码生成、架构设计 | GPT 系列、Claude Opus 系列 |\n| 深度分析、数学推理 | DeepSeek-R1 等推理模型 |\n| 长文档处理 | Gemini 系列(长上下文) |\n| Claude 系列偏好 | claude-opus / claude-sonnet |\n| 国产模型偏好 | Qwen / GLM / DeepSeek |\n\n> 完整可用模型以 `--list` 调接口实时返回为准,平台会不断新增。\n\n---\n\n## 七、常见问题\n\n### Q1:配置后 OpenClaw 报错 \"model not found\"\n\n**原因**:未重启 OpenClaw。\n\n**解决**:\n```bash\nopenclaw restart\n```\n\n### Q2:API 返回 401\n\n**原因**:密钥无效或已过期。\n\n**解决**:\n1. 去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」确认密钥状态\n2. 重新运行配置脚本\n\n### Q3:用了 `--env` 但 OpenClaw 报 \"API key not found\"\n\n**原因**:环境变量未设置或未加载。\n\n**解决**:\n```bash\n# 检查环境变量\necho $FIREWORKS_API_KEY\n\n# 如果为空,设置它\nexport FIREWORKS_API_KEY=fsk-你的密钥\nsource ~/.zshrc  # 或 ~/.bashrc\n\n# 然后重启 OpenClaw\nopenclaw restart\n```\n\n### Q4:想恢复配置前的状态\n\n**解决**:找到备份文件,恢复即可:\n```bash\nls ~/.openclaw/openclaw.json.bak.*\n# 选最近的\ncp ~/.openclaw/openclaw.json.bak.2026-07-19T00-00-00-000Z ~/.openclaw/openclaw.json\nopenclaw restart\n```\n\n### Q5:平台新增了模型,怎么更新配置?\n\n**解决**:直接重新运行配置脚本:\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n脚本会调接口拿最新列表,自动包含新模型。无需更新 skill 本身。\n\n### Q6:主模型不是我想要的\n\n**原因**:主模型自动取接口返回列表的第一个,可能不是你偏好的。\n\n**解决**:配置完成后 AI 会主动询问是否切换,回复模型名即可。或随时运行:\n```bash\nnode scripts/configure.mjs --switch 你想要的模型名\n```\n\n---\n\n## 八、命令速查卡\n\n```bash\n# ── 配置 ──\nnode scripts/configure.mjs <fsk-key>           # 配置(主模型取列表第一个)\nnode scripts/configure.mjs <fsk-key> --env     # 配置(密钥用环境变量)\n\n# ── 查看 ──\nnode scripts/configure.mjs --show              # 查看当前配置\nnode scripts/configure.mjs <fsk-key> --list    # 列出接口返回的模型\n\n# ── 切换 ──\nnode scripts/configure.mjs --switch <model-id> # 切换主模型\n```\n\n---\n\n## 九、获取帮助\n\n| 渠道 | 信息 |\n|------|------|\n| 聚星逸控制台 | https://fireworks-simulator.huo15.com/app/ |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n| 辉火管家 AI | 网站右下角悬浮按钮,7×24 在线答疑 |\n| QQ 群 | 1093992108 |\n| 邮箱 | postmaster@huo15.com |\n| 电话 | 185 5489 8815 |\n| 公众号 | 逸寻智库(扫码关注) |\n\n---\n\n**青岛火一五信息科技有限公司**\n\nFile v1.2.0:skill-card.md\n\n## Description: <br>\nConfigures the Juxingyi model provider for OpenClaw by fetching the live model list from the Juxingyi /v1/models API and writing the provider settings to openclaw.json. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zhaobod1](https://clawhub.ai/user/zhaobod1) <br>\n\n### License/Terms of Use: <br>\nMIT <br>\n\n\n## Use Case: <br>\nDevelopers and OpenClaw users use this skill to connect a Juxingyi API key, populate the fireworks-hub provider, and manage the primary and fallback text models in OpenClaw. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill sends the user-provided API key to the Juxingyi service and writes provider configuration locally. <br>\nMitigation: Install only if you trust the Juxingyi service with the key and review the configuration changes before relying on them. <br>\nRisk: openclaw.json and automatic backup files may contain credentials when the key is stored directly. <br>\nMitigation: Prefer the --env mode when possible and keep generated OpenClaw configuration and backup files private. <br>\nRisk: Pasting a real API key into a shell command can leave the key in shell history or logs. <br>\nMitigation: Avoid exposing production keys in shell history and rotate any key that may have been disclosed. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zhaobod1/skills/huo15-juxingyi-configure) <br>\n- [Juxingyi API documentation](https://fireworks-simulator.huo15.com/docs.html) <br>\n- [User guide](docs/user-guide.md) <br>\n- [Developer guide](docs/dev-guide.md) <br>\n- [Changelog](docs/changelog.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown with inline shell commands and configuration file updates] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires Node.js and a user-provided Juxingyi API key; generated configuration and backups may contain credentials.] <br>\n\n## Skill Version(s): <br>\n1.2.0 (source: frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.2.0:LICENSE\n\nMIT License\n\nCopyright (c) 2026 青岛火一五信息科技有限公司\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v1.1.1: 12 files, 34674 bytes\n\nFiles: _meta.json (143b), CLAUDE.md (7785b), data/model-heuristics.json (4185b), docs/changelog.md (2676b), docs/dev-guide.md (11386b), docs/prd.md (6441b), docs/user-guide.md (7538b), LICENSE (1095b), README.md (6016b), scripts/configure.mjs (20686b), skill-card.md (2480b), SKILL.md (8990b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: huo15-juxingyi-configure\ndisplayName: 聚星逸配置\nversion: 1.1.1\ndescription: \"将聚星逸大模型聚合平台接入 OpenClaw——动态拉取最新可用模型列表，自动写入 openclaw.json 的 providers 段，默认设 DeepSeek-V4-Flash 为主模型，配好后询问用户是否切换。一个 fsk- 密钥调 50+ 顶级大模型。\"\nhomepage: https://github.com/zhaobod1/huo15-skills\nmetadata: { \"openclaw\": { \"emoji\": \"🛰️\", \"requires\": { \"bins\": [\"node\"] } } }\naliases:\n  - 聚星逸配置\n  - 聚星逸\n  - juxingyi\n  - 配置聚星逸\n  - 聚星逸接入\n  - 聚星逸模型\n  - fireworks-hub\n  - 烟花智汇配置\n  - fsk配置\n---\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n> 动态拉取聚星逸最新模型列表 → 自动写入 `~/.openclaw/openclaw.json` → 默认 DeepSeek-V4-Flash → 询问是否切换。\n> 青岛火一五信息科技有限公司 · OpenClaw 生态\n\n---\n\n## 一、什么时候用\n\n✅ **触发**:\n- 用户说\"配置聚星逸\"/\"接入聚星逸\"/\"juxingyi\"/\"fireworks-hub\"\n- 用户提供了 `fsk-` 开头的聚星逸 API Key，想接入 OpenClaw\n- 用户说\"把聚星逸的模型配到 openclaw\"\n- 用户想查看或切换聚星逸已配的模型\n\n❌ **不触发**:\n- 用户只是问聚星逸是什么（直接回答即可）\n- 用户想查用量账单（走 `huo15-yh-usage` skill）\n\n---\n\n## 二、前置知识\n\n**聚星逸**（Juxingyi）是青岛火一五的大模型聚合平台：\n- **Base URL**: `https://fireworks-simulator-api.huo15.com/v1`\n- **API 协议**: OpenAI 兼容（`openai-completions`）\n- **密钥格式**: `fsk-` 开头\n- **模型列表端点**: `GET /v1/models`（动态返回最新可用模型）\n- **一个 Key** 可调 50+ 主流大模型（DeepSeek / GPT / Claude / Qwen / GLM / Gemini / Kimi / MiniMax / 豆包等）\n\n在 OpenClaw 中，聚星逸作为一个 **provider**（`fireworks-hub`）配置在 `~/.openclaw/openclaw.json` 的 `models.providers` 段。\n\n---\n\n## 三、配置流程（3 步）\n\n### Step 1 · 获取用户的 API Key\n\n向用户索要聚星逸 API Key（`fsk-` 开头）。如果用户没有，引导去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页创建。\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key>\n```\n\n脚本会：\n1. **动态调用** `GET /v1/models` 拉取最新模型列表\n2. 自动分类：文本对话模型 vs 生图/视频模型（跳过后者）\n3. 按 tier 排序（flash → pro → reasoner）\n4. 写入 `~/.openclaw/openclaw.json`：\n   - `models.providers.fireworks-hub`（provider + 全部文本模型）\n   - `agents.defaults.model.primary` = `fireworks-hub/DeepSeek-V4-Flash`（默认）\n   - `agents.defaults.model.fallbacks` = 其余文本模型\n   - `agents.defaults.models` = 每个模型的 alias\n5. 自动备份原配置到 `openclaw.json.bak.<timestamp>`\n\n脚本输出示例：\n```\n✅ 聚星逸配置完成！\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-11T...\n   模型数: 18 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 17 个模型\n```\n\n### Step 3 · 询问用户是否切换主模型\n\n**配置完成后，必须主动问用户**：\n\n```\n🛰️ 聚星逸配置完成！默认主模型是 DeepSeek-V4-Flash（快速、支持推理）。\n\n需要切换到其他模型吗？可选：\n  ⚡ Flash（快速）: DeepSeek-V4-Flash, Gemini-3.5-Flash, GLM-5-Turbo, Qwen3.7-Plus\n  🚀 Pro（主力）: DeepSeek-V4-Pro, DeepSeek-V3.2, GPT-5.5, claude-opus-4-8, Qwen3.7-Max ...\n  🧠 Reasoner（深度推理）: DeepSeek-R1-0528, GPT-5.4, claude-opus-4-7 ...\n\n回复模型名即可切换，如 \"DeepSeek-V4-Pro\"。\n或回复 \"列出全部\" 看完整列表。不切换就回 \"不用了\"。\n```\n\n**如果用户要切换**：\n```bash\nnode <skill_dir>/scripts/configure.mjs --switch <model-id>\n```\n\n**如果用户想看完整列表**：\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key> --list\n```\n\n**如果用户想看当前配置**：\n```bash\nnode <skill_dir>/scripts/configure.mjs --show\n```\n\n---\n\n## 四、脚本命令速查\n\n| 命令 | 用途 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 配置 provider + 全部模型，默认 DeepSeek-V4-Flash |\n| `node configure.mjs <fsk-key> --list` | 动态获取并列出所有可用模型 |\n| `node configure.mjs <fsk-key> --json` | 输出 JSON 配置片段（不写文件） |\n| `node configure.mjs <fsk-key> --env` | 用环境变量引用存储密钥（更安全） |\n| `node configure.mjs --switch <model-id>` | 切换主模型（支持前缀匹配） |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n| `node configure.mjs --selftest` | 内置自检（不联网，不读写配置） |\n\n> `<skill_dir>` = 本 skill 安装目录，通常为 `~/.openclaw/workspace/skills/huo15-juxingyi-configure`\n\n---\n\n## 五、模型分类规则\n\n脚本从 `/v1/models` 动态获取后，用 `data/model-heuristics.json` 分类：\n\n1. **跳过模型**（生图/视频）：含 `Image` / `Seedream` / `T2V` / `I2V` / `happyhorse` 的模型 ID 不配置文本对话\n2. **已知模型**：`knownModels` 中有精确元数据（reasoning / contextWindow / maxTokens / tier）\n3. **未知模型**（平台新加的）：按名称模式匹配推断 tier（`Flash/Turbo` → flash，`R1/reasoner` → reasoner，`Pro/Max/Opus` → pro），用默认参数\n4. **排序**：flash → pro → reasoner，同 tier 按字母序\n\n> 这意味着**平台新增模型后，无需更新本 skill**——脚本会自动发现并分类。\n\n---\n\n## 六、openclaw.json 配置结构\n\n配置完成后，`~/.openclaw/openclaw.json` 中新增/更新的段：\n\n```json\n{\n  \"models\": {\n    \"mode\": \"replace\",\n    \"providers\": {\n      \"fireworks-hub\": {\n        \"baseUrl\": \"https://fireworks-simulator-api.huo15.com/v1\",\n        \"apiKey\": \"fsk-你的密钥\",\n        \"api\": \"openai-completions\",\n        \"models\": [\n          {\n            \"id\": \"DeepSeek-V4-Flash\",\n            \"name\": \"DeepSeek V4 Flash (聚星逸)\",\n            \"reasoning\": true,\n            \"contextWindow\": 131072,\n            \"maxTokens\": 8192,\n            \"input\": [\"text\"],\n            \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n          }\n        ]\n      }\n    }\n  },\n  \"agents\": {\n    \"defaults\": {\n      \"model\": {\n        \"primary\": \"fireworks-hub/DeepSeek-V4-Flash\",\n        \"fallbacks\": [\"fireworks-hub/DeepSeek-V4-Pro\", \"...\"]\n      },\n      \"models\": {\n        \"fireworks-hub/DeepSeek-V4-Flash\": { \"alias\": \"DeepSeek V4 Flash (聚星逸)\" }\n      }\n    }\n  }\n}\n```\n\n---\n\n## 七、安全注意\n\n- API Key 默认**明文写入** openclaw.json。如需更安全，加 `--env` 用环境变量引用：\n  ```bash\n  node configure.mjs <fsk-key> --env\n  # 然后设置: export FIREWORKS_API_KEY=fsk-你的密钥\n  ```\n- 脚本每次写入前自动备份 `openclaw.json.bak.<timestamp>`\n- **密钥禁止出现在 commit / log / PR / 任何 LLM 上下文**\n\n---\n\n## 八、硬红线\n\n1. ❌ **不在任何文件中硬编码 API Key** — 用户每次提供\n2. ❌ **不跳过动态获取** — 必须调 `/v1/models`，不用过期列表\n3. ❌ **配置完不问就结束** — 必须主动问用户是否切换模型\n4. ❌ **不破坏其他 provider** — 只改 `fireworks-hub` 段\n5. ❌ **不忘记备份** — 写入前必须备份 openclaw.json\n\n---\n\n## 九、文件清单\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # 你正在看的这个（≤ 25KB）\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 详细文档\n├── CLAUDE.md                      # 开发规范（内部）\n├── LICENSE                        # MIT\n├── .gitignore\n├── data/\n│   └── model-heuristics.json      # 模型分类启发式数据\n├── scripts/\n│   └── configure.mjs              # 零依赖配置脚本（Node 18+）\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP\n    └── changelog.md               # 版本变更历史\n```\n\n---\n\n## 十、版本\n\n- **v1.1.1**（2026-07-19）: 健壮性增强 — 删除死代码 `deepMerge`；加 Node 版本检查与密钥格式校验；`fetchModels` 加 15s 超时 + 错误分类（401/403/5xx）+ 空列表防护；新增 `--help`/`--version`/`--selftest` 子命令；`--switch` 支持前缀匹配；根治 MiniMax 误判（`Mini` → `\\bMini\\b`）。（注：远程 1.1.0 已被 7-11 旧内容占用，跳 +1 patch 发布）\n- **v1.0.0**（2026-07-11）: 首版 — 动态获取模型列表，自动配置 openclaw.json，默认 DeepSeek-V4-Flash，支持切换\n\n---\n\n**公司:** 青岛火一五信息科技有限公司 · postmaster@huo15.com · QQ群 1093992108\n\nFile v1.1.1:README.md\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>一个 Key 调 50+ 顶级大模型</h3>\n<h3>动态拉取 · 自动配置 · 零 token 探索</h3>\n\n</div>\n\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n<div align=\"center\">\n\n![Version](https://img.shields.io/badge/version-1.1.1-brightgreen)\n![License](https://img.shields.io/badge/license-MIT-green)\n![Node](https://img.shields.io/badge/node-%3E%3D18.0-blue)\n![ClawHub](https://img.shields.io/badge/ClawHub-published-ff6b6b)\n\n</div>\n\n---\n\n## 这是什么\n\n`huo15-juxingyi-configure` 是 OpenClaw 专用 skill，帮你快速接入聚星逸（Juxingyi）大模型聚合平台：\n\n1. **动态拉取**：每次运行都从 `/v1/models` 端点获取最新可用模型列表\n2. **自动分类**：文本对话模型 vs 生图/视频模型（自动跳过后者），按 tier 分组\n3. **一键配置**：自动写入 `~/.openclaw/openclaw.json`，设 `DeepSeek-V4-Flash` 为主模型\n4. **灵活切换**：配置后询问是否切换，随时用 `--switch` 换主模型\n5. **安全可靠**：写入前自动备份，支持环境变量引用存储密钥\n\n> **不用每次消耗 token 去探索配置格式和模型列表**——SKILL.md 嵌入完整知识，脚本动态获取最新数据。\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\n# 从 ClawHub 安装（推荐）\nclawhub install huo15-juxingyi-configure --dir ~/.openclaw/workspace/skills\n\n# 或从源码安装\ngit clone https://cnb.cool/huo15/ai/huo15-skills.git\ncp -r huo15-skills/huo15-juxingyi-configure/ ~/.openclaw/workspace/skills/\n```\n\n### 使用\n\n**1. 获取聚星逸 API Key**\n\n打开 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页，创建一个 `fsk-` 开头的密钥。\n\n**2. 运行配置脚本**\n\n```bash\ncd ~/.openclaw/workspace/skills/huo15-juxingyi-configure\nnode scripts/configure.mjs <fsk-key>\n```\n\n脚本动态拉取最新模型列表，自动分类并写入 `~/.openclaw/openclaw.json`，默认设 `DeepSeek-V4-Flash` 为主模型。\n\n**3. 重启 OpenClaw**\n\n```bash\nopenclaw restart\n```\n\n> 完整操作流程见 [用户手册 SOP](docs/user-guide.md)\n\n---\n\n## 脚本命令\n\n| 命令 | 说明 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 配置 provider + 全部模型，默认 DeepSeek-V4-Flash |\n| `node configure.mjs <fsk-key> --list` | 动态获取并列出所有可用模型 |\n| `node configure.mjs <fsk-key> --json` | 输出 JSON 配置片段（不写文件） |\n| `node configure.mjs <fsk-key> --env` | 用环境变量引用存储密钥（更安全） |\n| `node configure.mjs --switch <model-id>` | 切换主模型 |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n\n---\n\n## 模型分类规则\n\n脚本从 `/v1/models` 动态获取后，用 `data/model-heuristics.json` 分类：\n\n1. **跳过模型**：含 `Image` / `Seedream` / `T2V` / `I2V` / `happyhorse` 的模型 ID 不配置文本对话\n2. **已知模型**：`knownModels` 中有精确元数据（reasoning / contextWindow / maxTokens / tier）\n3. **未知模型**：按名称模式匹配推断 tier（`Flash/Turbo` → flash，`R1` → reasoner，`Pro/Max` → pro）\n4. **排序**：flash → pro → reasoner，同 tier 按字母序\n\n> **平台新增模型后，无需更新本 skill**——脚本会自动发现并分类。\n\n---\n\n## 安全建议\n\n- **默认**：API Key 明文写入 `openclaw.json`，最简单\n- **更安全**：加 `--env` 用环境变量引用：\n  ```bash\n  node configure.mjs <fsk-key> --env\n  export FIREWORKS_API_KEY=fsk-你的密钥\n  ```\n\n---\n\n## 文件结构\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # ClawHub 嵌入源（≤ 25KB）\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 本文件\n├── CLAUDE.md                      # 开发规范\n├── LICENSE                        # MIT\n├── .gitignore                     # skill 级忽略\n├── data/\n│   └── model-heuristics.json      # 模型分类启发式数据（30 个已知模型）\n├── scripts/\n│   └── configure.mjs              # 零依赖配置脚本（Node 18+）\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP\n    └── changelog.md               # 版本变更历史\n```\n\n---\n\n## 与其他 skill 协作\n\n| 场景 | 配套 skill |\n|------|-----------|\n| 查询 token 用量/费用 | [`huo15-yh-usage`](../huo15-yh-usage/)（凭 fsk- 查账单）|\n\n---\n\n## 文档\n\n| 文档 | 说明 |\n|------|------|\n| [用户手册 SOP](docs/user-guide.md) | 面向终端用户的标准操作流程 |\n| [开发者 SOP](docs/dev-guide.md) | 面向接手开发的架构内幕、运维流程、踩坑经验 |\n| [PRD](docs/prd.md) | 产品需求文档 |\n| [变更历史](docs/changelog.md) | 版本变更记录 |\n\n---\n\n## License\n\n[MIT](LICENSE) — 自由商用 / 修改 / 再发布。需保留版权声明 `Copyright (c) 2026 青岛火一五信息科技有限公司`。\n\n---\n\n<div align=\"center\">\n\n**公司名称：** 青岛火一五信息科技有限公司\n\n**联系邮箱：** postmaster@huo15.com | **QQ群：** 1093992108\n\n---\n\n**关注逸寻智库公众号，获取更多资讯**\n\n<img src=\"https://tools.huo15.com/uploads/images/system/qrcode_yxzk.jpg\" alt=\"逸寻智库公众号二维码\" style=\"width: 200px; height: auto; margin: 10px 0;\" />\n\n</div>\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-juxingyi-configure\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1784448732467\n}\n\nFile v1.1.1:CLAUDE.md\n\n# CLAUDE.md · huo15-juxingyi-configure\n\n> 聚星逸配置 skill —— 动态拉取模型列表并写入 openclaw.json\n> 面向接手开发的 AI / 工程师，涵盖架构、规范、踩坑、运维。\n\n---\n\n## 一、项目定位\n\n将聚星逸（Juxingyi）大模型聚合平台接入 OpenClaw。用户提供一个 `fsk-` 密钥，skill 动态拉取最新模型列表，自动写入 `~/.openclaw/openclaw.json`，默认设 `DeepSeek-V4-Flash` 为主模型，配好后询问用户是否切换。\n\n**核心价值**：不消耗 token 去探索配置格式和模型列表——SKILL.md 嵌入完整知识，脚本动态获取最新数据。\n\n---\n\n## 二、技术栈\n\n| 项 | 值 |\n|----|----|\n| 脚本语言 | Node.js ES Modules（零依赖，需 Node 18+） |\n| 数据格式 | JSON（`data/model-heuristics.json`） |\n| API 协议 | OpenAI 兼容（`openai-completions`） |\n| API 端点 | `GET https://fireworks-simulator-api.huo15.com/v1/models` |\n| 配置文件 | `~/.openclaw/openclaw.json` |\n\n---\n\n## 三、核心设计决策\n\n| 决策 | 原因 |\n|------|------|\n| **动态获取**（非硬编码） | 平台模型变化频繁（30→40→50+），硬编码会过期 |\n| **启发式分类** | 已知模型精确参数 + 未知模型模式匹配推断，平台新增无需更新 |\n| **零依赖 Node 脚本** | 不需 npm install，用户直接运行 |\n| **只操作 fireworks-hub provider** | 不碰其他 provider，幂等安全 |\n| **写入前自动备份** | 可回滚 |\n| **SKILL.md 嵌入完整流程** | LLM 加载后 0 次 API 探索，省 token |\n\n---\n\n## 四、文件结构\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # LLM 嵌入源（≤25KB）\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 公开文档（面向用户）\n├── CLAUDE.md                      # 开发规范（本文档）\n├── LICENSE                        # MIT\n├── .gitignore                     # skill 级忽略\n├── data/\n│   └── model-heuristics.json      # 模型分类启发式数据（30 个已知模型 + tier 规则）\n├── scripts/\n│   └── configure.mjs              # 核心脚本（561 行），所有逻辑在此\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP（更详细的架构内幕）\n    └── changelog.md               # 版本变更历史\n```\n\n---\n\n## 五、configure.mjs 架构\n\n```\n参数解析 → 加载 model-heuristics.json\n    │\n    ├── --show       → cmdShow()       读 openclaw.json，展示当前配置\n    ├── --switch X   → cmdSwitch()     读/写 openclaw.json，切换主模型\n    ├── <key> --list → fetchModels() + cmdList()    动态获取 + 展示\n    ├── <key> --json  → fetchModels() + cmdJson()    动态获取 + 输出 JSON\n    └── <key>         → fetchModels() + cmdConfigure()  动态获取 + 写入\n```\n\n### 关键函数\n\n| 函数 | 职责 |\n|------|------|\n| `fetchModels(apiKey)` | 调 `GET /v1/models`，返回模型数组 |\n| `classifyModel(id)` | 三级分类：skipPatterns → knownModels → tierPatterns 推断 |\n| `guessTier(id)` | 按名称模式匹配推断 tier |\n| `buildProviderConfig()` | 生成 provider JSON 片段（含模型列表排序） |\n| `buildAgentsDefaults()` | 生成 primary + fallbacks + aliases |\n| `readOpenclawJson()` | 读取 `~/.openclaw/openclaw.json` |\n| `writeOpenclawJson(config)` | 备份 + 写入 |\n\n### 模型分类三级逻辑\n\n1. **skipPatterns**：ID 含 `Image` / `Seedream` / `T2V` / `I2V` / `happyhorse` → 跳过（生图/视频）\n2. **knownModels**：精确参数（reasoning / contextWindow / maxTokens / tier）\n3. **tierPatterns**：未知模型按关键词推断（`Flash/Turbo` → flash，`R1` → reasoner，`Pro/Max/Opus` → pro）\n\n---\n\n## 六、修改指引\n\n### 新增已知模型\n\n编辑 `data/model-heuristics.json` 的 `knownModels`：\n\n```json\n{\n  \"NewModel-X\": {\n    \"reasoning\": true,\n    \"contextWindow\": 131072,\n    \"maxTokens\": 8192,\n    \"tier\": \"pro\"\n  }\n}\n```\n\n> 不加入也能工作——脚本会用 `tierPatterns` 推断，用 `defaults` 参数。加入只为精确。\n\n### 调整 tier 判定逻辑\n\n编辑 `tierPatterns` 段，添加关键词。\n\n### 修改默认主模型\n\n编辑 `data/model-heuristics.json` 的 `defaultModel` 字段。\n\n### 修改 skipPatterns（新增生图/视频模型命名模式）\n\n编辑 `data/model-heuristics.json` 的 `skipPatterns` 数组。\n\n---\n\n## 七、铁律\n\n1. ❌ **不在任何文件中硬编码 API Key** — 用户每次运行时提供\n2. ❌ **不跳过动态获取** — 必须调 `/v1/models`，不用过期列表\n3. ❌ **配置完不问就结束** — 必须主动问用户是否切换模型（见 SKILL.md §三 Step 3）\n4. ❌ **不破坏其他 provider** — 只改 `fireworks-hub` 段\n5. ❌ **不忘记备份** — 写入前必须备份 openclaw.json\n6. ❌ **密钥禁止出现在 commit / log / PR / 任何 LLM 上下文**\n7. ✅ **SKILL.md ≤ 25KB** — 检查：`wc -c SKILL.md`\n\n---\n\n## 八、踩坑经验\n\n### 坑 1：MiniMax 模型被误判为 flash\n\n`tierPatterns` 中 `Mini` 关键词太宽泛，`MiniMax-M2.7` 被匹配。\n\n**解决（v1.0）**：在 `knownModels` 中为每个 MiniMax 模型指定精确 tier。`tierPatterns` 只是未知模型的 fallback。\n\n**根治（v1.1）**：`tierPatterns.flash` 里的 `Mini` 改为 `\\bMini\\b`（词边界匹配），从根上避免 `MiniMax` 被误匹配。`--selftest` 内置断言 `guessTier('MiniMax-M99') !== 'flash'` 持续守护。\n\n### 坑 2：`deepMerge` 函数定义了但未使用（已清理）\n\n开发初期设计了深度合并，后来改为直接覆盖 `fireworks-hub` 段（更安全可预测）。**v1.1.1 已删除该死代码**。\n\n### 坑 3：GitHub 推送可能失败\n\n`git push origin main` 可能报 `could not read Username`。CNB 是主库，GitHub 是镜像，CNB 成功即可。\n\n### 坑 4：品牌词检查\n\n对外文档不能出现 `odoo` / `uniapp` / `uni-app` / `欧度`。已发布 slug `huo15-odoo19-module-dev` 本身是例外，但描述文字不能含违禁词。\n\n---\n\n## 九、发布前自查\n\n```bash\n# 品牌词检查（必须无命中）\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\n\n# SKILL.md 大小（应 < 25600 字节）\nwc -c SKILL.md\n\n# 脚本语法检查\nnode --check scripts/configure.mjs\n\n# JSON 格式检查\npython3 -c \"import json; json.load(open('data/model-heuristics.json'))\"\n\n# 功能测试\nnode scripts/configure.mjs --show\nnode scripts/configure.mjs fsk-测试key --list\n```\n\n---\n\n## 十、发布流程\n\n```bash\n# 1. 提交\ncd ~/workspace/projects/openclaw/huo15-skills\ngit add huo15-juxingyi-configure/\ngit commit -m \"feat(huo15-juxingyi-configure): vX.Y.Z 说明\"\n\n# 2. 推送\ngit push cnb main     # CNB（主）\ngit push origin main  # GitHub（镜像，失败不阻塞）\n\n# 3. 发布 ClawHub\nclawhub publish \"$(pwd)/huo15-juxingyi-configure\" \\\n  --slug huo15-juxingyi-configure \\\n  --version X.Y.Z \\\n  --changelog \"说明\"\n\n# 4. chore commit\ngit commit --allow-empty -m \"chore(huo15-juxingyi-configure): bump _meta to vX.Y.Z\"\ngit push cnb main\n```\n\n**版本号规则**：架构重构/新功能 → 次版本+1；Bug修复/文案 → 补丁+1。\n\n---\n\n## 十一、与其他 skill 协作\n\n| Skill | 关系 |\n|-------|------|\n| `huo15-yh-usage` | 互补：本 skill 配置接入，yh-usage 查用量账单 |\n| `huo15-openclaw-bootstrap` | 上游：bootstrap 初始化 workspace 后配置模型供应商 |\n\n---\n\n## 十二、联系方式\n\n- **公司**: 青岛火一五信息科技有限公司\n- **邮箱**: postmaster@huo15.com\n- **QQ群**: 1093992108\n\nFile v1.1.1:docs/changelog.md\n\n# 变更历史 · huo15-juxingyi-configure\n\n---\n\n## v1.1.1（2026-07-19）\n\n**健壮性增强与代码质量提升。**（远程 1.1.0 已被 7-11 旧内容占用，跳 +1 patch 发布）\n\n### 新增\n\n- **`--help` / `-h` 子命令**：显示完整用法说明\n- **`--version` / `-v` 子命令**：从 `_meta.json` 读取并显示版本号\n- **`--selftest` 子命令**：不联网、不读写配置的内置自检（19 项断言），验证 `classifyModel` / `guessTier` / `resolveModelId` / `fmtModelName` / `tierWeight` 等纯函数逻辑\n- **`--switch` 前缀匹配**：`resolveModelId` 按 精确 → 大小写不敏感 → 前缀唯一 三级解析，歧义时列出候选并退出\n- **Node 版本检查**：Node < 18 时给出友好提示（而非 `fetch is not defined`）\n- **API Key 格式校验**：`fsk-` 后必须有内容\n- **`fetchModels` 增强**：15s 超时（AbortController）+ 错误分类（401 密钥无效 / 403 权限不足 / 5xx 服务异常 / 超时）+ 空模型列表防护\n\n### 变更\n\n- **根治 MiniMax 误判**：`data/model-heuristics.json` 的 `tierPatterns.flash` 里 `Mini` 改为 `\\bMini\\b`（词边界匹配），`MiniMax-*` 不再被误判为 flash\n- **删除死代码**：移除从未调用的 `deepMerge` 函数\n\n### 文档\n\n- 同步 `CLAUDE.md` / `docs/dev-guide.md` 的脚本行数（385 → 561）、架构图、关键函数表、踩坑记录\n- `dev-guide.md` 自查 checklist 与测试段补充 `--selftest`\n- `SKILL.md` §四命令速查表补充 `--help` / `--version` / `--selftest`\n\n---\n\n## v1.0.0（2026-07-11）\n\n**首版发布。**\n\n### 新增\n\n- **动态模型获取**：每次运行脚本调 `GET /v1/models`，确保模型列表最新\n- **启发式分类**：`data/model-heuristics.json` 提供已知模型元数据 + 未知模型模式匹配\n- **自动配置**：写入 `~/.openclaw/openclaw.json` 的 `models.providers.fireworks-hub` 段\n- **默认主模型**：`DeepSeek-V4-Flash`（快速、支持推理）\n- **备选链**：其余文本模型自动加入 fallbacks\n- **模型别名**：每个模型自动生成 alias\n- **子命令**：\n  - `<fsk-key>` — 配置 provider + 全部模型\n  - `<fsk-key> --list` — 列出可用模型\n  - `<fsk-key> --json` — 输出 JSON 片段\n  - `<fsk-key> --env` — 环境变量引用存储密钥\n  - `--switch <model-id>` — 切换主模型\n  - `--show` — 查看当前配置\n- **安全**：写入前自动备份 `openclaw.json.bak.<timestamp>`\n- **分类**：自动跳过生图/视频模型，按 tier（flash/pro/reasoner）排序\n- **SKILL.md**：嵌入完整配置流程，指导 AI 配置后询问用户是否切换\n- **文档**：PRD、用户手册 SOP、开发者 SOP\n\nFile v1.1.1:docs/dev-guide.md\n\n# 开发者 SOP · 聚星逸配置\n\n> 面向接手开发的工程师。涵盖架构内幕、运维流程、注意事项、踩坑经验。\n\n---\n\n## 一、项目概览\n\n| 项 | 值 |\n|----|-----|\n| Slug | `huo15-juxingyi-configure` |\n| 版本 | 1.0.0 |\n| 仓库 | https://cnb.cool/huo15/ai/huo15-skills（主）/ https://github.com/zhaobod1/huo15-skills（镜像） |\n| 目录 | `huo15-skills/huo15-juxingyi-configure/` |\n| 技术栈 | Node.js 18+ ES Modules（零依赖） |\n| 发布平台 | ClawHub |\n\n---\n\n## 二、架构设计\n\n### 2.1 核心设计决策\n\n| 决策 | 原因 |\n|------|------|\n| **动态获取模型列表**（而非硬编码） | 聚星逸平台模型变化频繁（30→40→50+），硬编码会过期。每次运行调 `/v1/models` 确保最新 |\n| **启发式分类**（knownModels + tierPatterns） | 已知模型用精确参数，未知模型用模式匹配推断，平台新增模型无需更新 skill |\n| **零依赖 Node 脚本** | 不需要 npm install，Node 18+ 自带 fetch，用户直接运行 |\n| **只操作 fireworks-hub provider** | 不碰其他 provider，保证幂等安全 |\n| **写入前自动备份** | 可回滚，用户放心 |\n| **SKILL.md 嵌入完整流程** | LLM 加载 SKILL.md 后 0 次 API 探索即可配置，省 token |\n\n### 2.2 文件职责\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # LLM 嵌入源（≤25KB），指导 AI 执行配置流程\n├── _meta.json                     # ClawHub 元数据（ownerId/slug/version）\n├── README.md                      # 公开文档（面向用户）\n├── CLAUDE.md                      # 开发规范（面向接手开发者）\n├── LICENSE                        # MIT\n├── data/\n│   └── model-heuristics.json      # 模型分类数据（已知模型元数据 + tier 模式匹配规则）\n├── scripts/\n│   └── configure.mjs              # 核心脚本（561行），所有逻辑在此\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP（本文档）\n    └── changelog.md               # 版本变更历史\n```\n\n### 2.3 configure.mjs 架构\n\n```\n参数解析 → Node 版本检查 → 加载 model-heuristics.json\n    │\n    ├── --help/-h      → cmdHelp()       显示帮助\n    ├── --version/-v   → cmdVersion()    读 _meta.json，显示版本\n    ├── --selftest     → cmdSelftest()   不联网，跑内置断言（19 项）\n    ├── --show         → cmdShow()       读 openclaw.json，展示当前配置\n    ├── --switch X     → cmdSwitch()     读/写 openclaw.json，切换主模型（支持前缀匹配）\n    ├── <key> --list   → fetchModels() + cmdList()       动态获取，展示\n    ├── <key> --json   → fetchModels() + cmdJson()       动态获取，输出 JSON\n    └── <key>          → fetchModels() + cmdConfigure()  动态获取，写入 openclaw.json\n```\n\n**关键函数**：\n- `fetchModels(apiKey)` — 调 `GET /v1/models`，带 15s 超时 + 错误分类（401/403/5xx）+ 空列表防护\n- `classifyModel(id)` — 三级分类：skipPatterns → knownModels → tierPatterns 推断\n- `guessTier(id)` / `resolveModelId(input, ids)` — tier 推断 / 模型 ID 解析（精确→大小写不敏感→前缀唯一）\n- `buildProviderConfig(apiKey, rawModels)` — 生成 provider JSON 片段\n- `buildAgentsDefaults(textModels, primaryId)` — 生成 primary + fallbacks + aliases\n- `writeOpenclawJson(config)` — 备份 + 写入\n- `cmdSelftest()` — 不联网的内置自检（19 项断言，验证分类/解析逻辑）\n\n---\n\n## 三、开发环境\n\n### 3.1 准备\n\n```bash\n# 仓库\ncd ~/workspace/projects/openclaw/huo15-skills\ncd huo15-juxingyi-configure\n\n# Node 版本（需 18+）\nnode -v\n\n# 无需 npm install（零依赖）\n```\n\n### 3.2 测试\n\n```bash\n# 语法检查\nnode --check scripts/configure.mjs\n\n# 内置自检（不联网，验证分类/解析逻辑）\nnode scripts/configure.mjs --selftest\n\n# 列出模型（用真实 key 测试动态获取）\nnode scripts/configure.mjs fsk-测试key --list\n\n# 查看当前配置（不需 key）\nnode scripts/configure.mjs --show\n\n# 输出 JSON 片段（不写文件，安全）\nnode scripts/configure.mjs fsk-测试key --json\n```\n\n### 3.3 修改 model-heuristics.json\n\n当聚星逸新增重要模型时，可以把它加入 `knownModels` 获得精确参数：\n\n```json\n{\n  \"knownModels\": {\n    \"NewModel-X\": {\n      \"reasoning\": true,\n      \"contextWindow\": 131072,\n      \"maxTokens\": 8192,\n      \"tier\": \"pro\"\n    }\n  }\n}\n```\n\n> **注意**：不加入也能工作——脚本会用 `tierPatterns` 模式匹配推断 tier，用 `defaults` 参数。加入只是为了精确。\n\n---\n\n## 四、发布流程\n\n### 4.1 标准发布（6 步）\n\n```bash\n# 1. 开发 & 测试\ncd ~/workspace/projects/openclaw/huo15-skills/huo15-juxingyi-configure\nnode --check scripts/configure.mjs\nnode scripts/configure.mjs fsk-测试key --list\n\n# 2. 自查\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\nwc -c SKILL.md  # 应 < 25600\n\n# 3. 提交\ncd ~/workspace/projects/openclaw/huo15-skills\ngit add huo15-juxingyi-configure/\ngit commit -m \"feat(huo15-juxingyi-configure): vX.Y.Z 说明\"\n\n# 4. 推送双 remote\ngit push cnb main     # CNB（主）\ngit push origin main  # GitHub（镜像）\n\n# 5. 发布 ClawHub\nclawhub publish \"$(pwd)/huo15-juxingyi-configure\" \\\n  --slug huo15-juxingyi-configure \\\n  --version X.Y.Z \\\n  --changelog \"说明\"\n\n# 6. chore commit（_meta.json 已是正确版本则跳过）\ngit commit --allow-empty -m \"chore(huo15-juxingyi-configure): bump _meta to vX.Y.Z\"\ngit push cnb main\n```\n\n### 4.2 版本号规则\n\n| 变更类型 | 版本号 |\n|---------|--------|\n| 架构/哲学/触发器重构 | 次版本 +1（1.0 → 1.1） |\n| 常规功能新增、新触发词 | 次版本 +1 |\n| Bug 修复、文案调整、文档更新 | 补丁号 +1（1.0.0 → 1.0.1） |\n\n### 4.3 ClawHub 发布六坑\n\n| # | 坑 | 应对 |\n|---|---|------|\n| 1 | 必须绝对路径 | `clawhub publish \"$(pwd)/huo15-juxingyi-configure\"` |\n| 2 | `--version` 必填 | CLI 不读 frontmatter / _meta.json |\n| 3 | 新 slug 每小时 5 个配额 | 存量 slug 升版本不占额度 |\n| 4 | `_meta.json` 不自动刷新 | 手动 bump + chore commit |\n| 5 | 幽灵占用（inspect=2.5 但报 exists on 2.6） | 立刻跳 +1 patch，不重试 |\n| 6 | Remote push 可能失败 | CNB 是主库，GitHub 镜像失败不阻塞 |\n\n---\n\n## 五、运维注意事项\n\n### 5.1 密钥安全\n\n- ❌ **密钥禁止出现在**：commit / log / PR / SKILL.md / README.md / 任何 LLM 上下文\n- ✅ **用户每次运行时提供密钥**，skill 代码中不存储\n- ✅ **推荐用 `--env` 模式**，配置文件中不存明文\n\n### 5.2 openclaw.json 操作安全\n\n- ✅ 每次写入前自动备份 `.bak.<timestamp>`\n- ✅ 只操作 `fireworks-hub` provider 段\n- ✅ 合并 `agents.defaults.models` 时保留非 `fireworks-hub/` 的已有条目\n- ⚠️ 如果用户手动改了 openclaw.json 中 fireworks-hub 段，重新运行脚本会覆盖（但有备份）\n\n### 5.3 模型列表维护\n\n- **不需要定期更新** `model-heuristics.json`——脚本是动态获取的\n- 只有以下情况需要更新：\n  1. 平台新增了重要模型，想给它精确参数（而非用默认推断）\n  2. tier 分类规则需要调整（比如新的关键词）\n  3. skipPatterns 需要新增（比如新的生图/视频模型命名模式）\n\n---\n\n## 六、踩坑经验\n\n### 坑 1：GitHub 推送失败\n\n**现象**：`git push origin main` 报 `could not read Username` 或 HTTP2 framing error。\n\n**原因**：GitHub remote 未配置凭据，或网络问题。\n\n**解决**：CNB 是主库，GitHub 是镜像。CNB 推成功即可，GitHub 失败不阻塞发布。\n\n### 坑 2：`deepMerge` 函数未使用（已清理）\n\n**现象**：`configure.mjs` 中定义了 `deepMerge` 但没调用。\n\n**原因**：开发初期设计了深度合并，后来改为直接覆盖 `fireworks-hub` 段（更安全、更可预测）。\n\n**状态**：**v1.1.1 已删除该死代码**，不再保留。\n\n### 坑 3：MiniMax 模型被误判为 flash\n\n**现象**：`MiniMax-M2.7` 等模型被 `tierPatterns` 中的 `Mini` 匹配，判为 flash。\n\n**原因**：`Mini` 关键词太宽泛。\n\n**解决（v1.0）**：在 `knownModels` 中为每个 MiniMax 模型指定精确 tier。`tierPatterns` 只是未知模型的 fallback。\n\n**根治（v1.1）**：`tierPatterns.flash` 里的 `Mini` 改为 `\\bMini\\b`（词边界匹配），`MiniMax` 不再被误匹配。`--selftest` 内置断言 `guessTier('MiniMax-M99') !== 'flash'` 持续守护。\n\n### 坑 4：SKILL.md 中不能出现品牌违禁词\n\n**现象**：`grep -riE \"odoo|uniapp|uni-app|欧度\"` 命中。\n\n**原因**：README.md 中引用了 `huo15-odoo19-module-dev`（已发布 slug，不可改名）。\n\n**解决**：slug 本身是例外，但描述文字不能出现违禁词。确保引用时只写 slug，不写 \"odoo 模块开发\" 等描述。\n\n---\n\n## 七、与其他 skill 的关系\n\n| Skill | 关系 |\n|-------|------|\n| `huo15-yh-usage` | **互补**：本 skill 配置聚星逸接入，yh-usage 查该 key 的用量账单 |\n| `huo15-openclaw-bootstrap` | **上游**：bootstrap 初始化 workspace 后，用户可能需要配置模型供应商（本 skill） |\n| `huo15-token-optimizer` | **参考**：token-optimizer 的 references 中有 openclaw.json 配置格式参考 |\n\n---\n\n## 八、调试技巧\n\n### 8.1 查看脚本生成的 JSON（不写文件）\n\n```bash\nnode scripts/configure.mjs fsk-测试key --json | python3 -m json.tool\n```\n\n### 8.2 查看当前 openclaw.json 中的聚星逸段\n\n```bash\ncat ~/.openclaw/openclaw.json | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\nprint(json.dumps(d.get('models',{}).get('providers',{}).get('fireworks-hub',{}), indent=2, ensure_ascii=False))\n\"\n```\n\n### 8.3 测试 API 连通性\n\n```bash\ncurl -s \"https://fireworks-simulator-api.huo15.com/v1/models\" \\\n  -H \"Authorization: Bearer fsk-测试key\" | python3 -m json.tool | head -20\n```\n\n### 8.4 查看备份文件\n\n```bash\nls -lt ~/.openclaw/openclaw.json.bak.* | head -5\n```\n\n---\n\n## 九、发布前自查 Checklist\n\n```bash\n# 1. 品牌词检查（必须无命中）\ngrep -riE \"odoo|uniapp|uni-app|欧度\" README.md SKILL.md CLAUDE.md docs/\n\n# 2. SKILL.md 大小（应 < 25600 字节）\nwc -c SKILL.md\n\n# 3. 脚本语法检查\nnode --check scripts/configure.mjs\n\n# 4. JSON 格式检查\npython3 -c \"import json; json.load(open('data/model-heuristics.json'))\"\npython3 -c \"import json; json.load(open('_meta.json'))\"\n\n# 5. 脚本功能测试\nnode scripts/configure.mjs --show\nnode scripts/configure.mjs fsk-测试key --list\n\n# 6. 内置自检（不联网，验证分类/解析逻辑）\nnode scripts/configure.mjs --selftest\n\n# 7. git 状态\ngit status\n```\n\n---\n\n## 十、后续规划\n\n| 版本 | 计划 |\n|------|------|\n| v1.1 | 支持配置指定 agent 的模型（非 defaults） |\n| v1.2 | 支持配置模型路由（`modelRouter` auto-task 模式） |\n| v1.3 | 模型健康检查（测试每个模型是否可调用） |\n| v1.4 | 支持配置 cost 字段（从平台 API 获取实时价格） |\n\n---\n\n**青岛火一五信息科技有限公司** · postmaster@huo15.com · QQ群 1093992108\n\nFile v1.1.1:docs/prd.md\n\n# PRD · 聚星逸配置 Skill（huo15-juxingyi-configure）\n\n> 产品需求文档 · v1.0.0 · 2026-07-11\n\n---\n\n## 一、产品定位\n\n**聚星逸配置**是 OpenClaw 生态专用 skill，帮助用户将聚星逸（Juxingyi）大模型聚合平台接入 OpenClaw 运行时。\n\n**核心价值**：用户只需提供一个 `fsk-` 密钥，skill 动态拉取最新模型列表，自动写入 `~/.openclaw/openclaw.json`，无需手动查文档、记模型 ID、写 JSON。\n\n---\n\n## 二、背景与问题\n\n### 痛点\n\n1. **模型列表变化频繁**：聚星逸平台不断新增模型（从 30+ 到 40+ 到 50+），硬编码列表很快过期\n2. **手动配置易出错**：openclaw.json 结构复杂（providers / models / agents.defaults / fallbacks / aliases），手写容易漏字段或拼错模型 ID\n3. **每次探索浪费 token**：不沉淀配置知识，每次都要消耗 LLM token 去搜索文档、探索配置格式\n4. **不知道有哪些模型可用**：用户不清楚平台有哪些模型，也不知道哪些适合文本对话、哪些是生图/视频\n\n### 解决方案\n\n| 痛点 | 解决方式 |\n|------|---------|\n| 模型列表过期 | 每次运行脚本动态调 `GET /v1/models` |\n| 手动配置易错 | 脚本自动生成完整 JSON 片段并写入 |\n| token 浪费 | SKILL.md 嵌入完整配置知识，0 次 API 探索 |\n| 不知有哪些模型 | `--list` 模式列出全部，自动分 tier 展示 |\n\n---\n\n## 三、用户故事\n\n### US-1：首次配置\n\n> 作为 OpenClaw 用户，我想用聚星逸的密钥接入平台，这样就能调用 50+ 大模型。\n\n**验收**：\n- ✅ 用户提供 `fsk-` 密钥后，脚本动态拉取模型列表\n- ✅ 自动写入 `~/.openclaw/openclaw.json` 的 `models.providers.fireworks-hub` 段\n- ✅ 默认设 `DeepSeek-V4-Flash` 为主模型\n- ✅ 写入前自动备份原配置\n- ✅ 配置完成后主动询问用户是否切换模型\n\n### US-2：切换主模型\n\n> 作为已配置用户，我想切换默认主模型（比如从 DeepSeek-V4-Flash 切到 claude-opus-4-8）。\n\n**验收**：\n- ✅ `--switch <model-id>` 一键切换\n- ✅ 旧主模型自动加入 fallbacks 链\n- ✅ 切换前自动备份\n\n### US-3：查看可用模型\n\n> 作为潜在用户，我想看看聚星逸有哪些模型可用，再决定是否配置。\n\n**验收**：\n- ✅ `--list` 模式动态获取并展示，按 tier 分组\n- ✅ 标注默认模型\n- ✅ 生图/视频模型单独列出（标注\"不配置文本对话\"）\n\n### US-4：查看当前配置\n\n> 作为已配置用户，我想看看当前聚星逸配了什么。\n\n**验收**：\n- ✅ `--show` 模式展示 provider 信息、主模型、备选链、全部已配模型\n- ✅ 密钥脱敏显示\n\n### US-5：安全存储密钥\n\n> 作为安全敏感用户，我不想把 API Key 明文写在配置文件里。\n\n**验收**：\n- ✅ `--env` 模式用环境变量引用（`FIREWORKS_API_KEY`）\n- ✅ 配置文件中只存 `{ source: \"env\", id: \"FIREWORKS_API_KEY\" }`，不存明文\n\n---\n\n## 四、功能需求\n\n### F1：动态模型获取\n\n- **输入**：`fsk-` 密钥\n- **API**：`GET https://fireworks-simulator-api.huo15.com/v1/models`\n- **鉴权**：`Authorization: Bearer <fsk-key>`\n- **输出**：模型列表 JSON（`{ object: \"list\", data: [{ id, owned_by, ... }] }`）\n\n### F2：模型分类\n\n| 类别 | 判定规则 | 处理方式 |\n|------|---------|---------|\n| 生图/视频 | ID 含 `Image` / `Seedream` / `T2V` / `I2V` / `happyhorse` | 跳过，不配置文本对话 |\n| 已知文本模型 | `data/model-heuristics.json` 的 `knownModels` 中有精确元数据 | 用精确参数 |\n| 未知文本模型 | 不在 knownModels，也不匹配 skipPatterns | 按名称模式匹配推断 tier，用默认参数 |\n\n### F3：tier 分类\n\n| Tier | 含义 | 匹配关键词 | 排序权重 |\n|------|------|-----------|---------|\n| flash | 快速、便宜 | `Flash` / `Turbo` / `lite` / `highspeed` / `Mini` | 0 |\n| pro | 主力 | `Pro` / `Max` / `Opus` / `Plus` / `Sonnet` | 1 |\n| reasoner | 深度推理 | `R1` / `reasoner` / `thinking` / `o1` / `o3` | 2 |\n\n### F4：openclaw.json 写入\n\n写入以下段：\n\n```\nmodels.providers.fireworks-hub     ← provider 配置 + 全部文本模型\nagents.defaults.model.primary      ← 默认 fireworks-hub/DeepSeek-V4-Flash\nagents.defaults.model.fallbacks    ← 其余文本模型列表\nagents.defaults.models             ← 每个模型的 alias\n```\n\n**安全规则**：\n- 只操作 `fireworks-hub` provider，不碰其他 provider\n- 合并 `agents.defaults.models` 时，保留非 `fireworks-hub/` 前条的已有条目\n- 写入前自动备份 `openclaw.json.bak.<timestamp>`\n\n### F5：子命令\n\n| 命令 | 功能 |\n|------|------|\n| `<fsk-key>` | 配置 provider + 全部模型 |\n| `<fsk-key> --list` | 列出可用模型（不写文件） |\n| `<fsk-key> --json` | 输出 JSON 配置片段（不写文件） |\n| `<fsk-key> --env` | 用环境变量引用存储密钥 |\n| `--switch <model-id>` | 切换主模型 |\n| `--show` | 查看当前配置 |\n\n---\n\n## 五、非功能需求\n\n| 项 | 要求 |\n|----|------|\n| 运行时 | Node.js 18+（自带 fetch），零依赖 |\n| 安全 | 密钥不硬编码，不出现在 commit/log/PR |\n| 可逆 | 每次写入前备份 |\n| 品牌合规 | 对外文档无 `odoo` / `uniapp` / `uni-app` / `欧度` |\n| 体积 | SKILL.md ≤ 25KB（8192 tokens 限制） |\n| 可维护 | 平台新增模型后无需更新 skill（动态发现） |\n\n---\n\n## 六、技术约束\n\n- **API 协议**：OpenAI 兼容（`openai-completions`）\n- **Provider 名称**：`fireworks-hub`（openclaw.json 中的 key）\n- **密钥格式**：`fsk-` 开头\n- **Base URL**：`https://fireworks-simulator-api.huo15.com/v1`\n\n---\n\n## 七、不做什么\n\n- ❌ 不查用量账单（走 `huo15-yh-usage` skill）\n- ❌ 不配置生图/视频模型为文本对话（跳过）\n- ❌ 不修改 openclaw.json 中其他 provider 配置\n- ❌ 不自动重启 OpenClaw（只提示用户手动重启）\n- ❌ 不缓存模型列表（每次都动态获取，确保最新）\n\n---\n\n## 八、里程碑\n\n| 版本 | 日期 | 内容 |\n|------|------|------|\n| v1.0.0 | 2026-07-11 | 首版：动态获取、自动分类、配置写入、切换、show、list、json、env |\n\n---\n\n## 九、后续规划\n\n- v1.1：支持配置指定 agent 的模型（非 defaults）\n- v1.2：支持配置模型路由（`modelRouter` auto-task 模式）\n- v1.3：模型健康检查（测试每个模型是否可调用）\n\nFile v1.1.1:docs/user-guide.md\n\n# 用户手册（SOP）· 聚星逸配置\n\n> 面向终端用户的标准操作流程。跟着走，3 分钟完成聚星逸接入 OpenClaw。\n\n---\n\n## 一、前置条件\n\n| 项 | 要求 |\n|----|------|\n| OpenClaw | 已安装并初始化（`~/.openclaw/openclaw.json` 存在） |\n| Node.js | 18.0 或更高（终端运行 `node -v` 确认） |\n| 聚星逸账号 | 已注册，有 `fsk-` 开头的 API Key |\n| Skill | 已安装 `huo15-juxingyi-configure` |\n\n### 没有聚星逸账号？\n\n1. 打开 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/)\n2. 用手机号 + 验证码注册\n3. 新用户注册即赠体验额度\n4. 进入「API 密钥」页，点击新建，生成 `fsk-` 开头的密钥（**明文仅展示一次，请妥善保存**）\n\n---\n\n## 二、安装 Skill\n\n### 方式 A：从 ClawHub 安装（推荐）\n\n```bash\nclawhub install huo15-juxingyi-configure --dir ~/.openclaw/workspace/skills\n```\n\n### 方式 B：从源码安装\n\n```bash\ngit clone https://cnb.cool/huo15/ai/huo15-skills.git\ncp -r huo15-skills/huo15-juxingyi-configure/ ~/.openclaw/workspace/skills/\n```\n\n---\n\n## 三、标准配置流程\n\n### Step 1 · 进入 skill 目录\n\n```bash\ncd ~/.openclaw/workspace/skills/huo15-juxingyi-configure\n```\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n**脚本做了什么**：\n1. 动态调用聚星逸 API 获取最新模型列表\n2. 自动分类（文本对话 vs 生图/视频）\n3. 写入 `~/.openclaw/openclaw.json`\n4. 默认设 `DeepSeek-V4-Flash` 为主模型\n5. 自动备份原配置\n\n**成功输出示例**：\n```\n✅ 聚星逸配置完成！\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-11T00-00-00-000Z\n   模型数: 30 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 29 个模型\n   密钥存储: 直接写入（明文）\n\n   主模型 & 备选链:\n   ★ fireworks-hub/DeepSeek-V4-Flash\n     fireworks-hub/DeepSeek-V4-Pro\n     ...\n\n重启 OpenClaw 后生效。\n```\n\n### Step 3 · 询问是否切换主模型\n\n配置完成后，**AI 会主动问你**是否切换到其他模型。\n\n**如果你想切换**：\n```\n回复模型名即可，如 \"DeepSeek-V4-Pro\" 或 \"claude-opus-4-8\"\n```\n\n或直接运行：\n```bash\nnode scripts/configure.mjs --switch DeepSeek-V4-Pro\n```\n\n**如果你想知道有哪些模型可选**：\n```bash\nnode scripts/configure.mjs fsk-你的密钥 --list\n```\n\n输出示例：\n```\n🛰️  聚星逸 · 可用模型列表（动态获取）\n   共 40 个模型，其中 30 个文本对话模型\n\n⚡ Flash（快速）\n  DeepSeek-V4-Flash               128K ctx  推理  ← 默认\n  Gemini-3.5-Flash               1024K ctx\n  GLM-5-Turbo                     128K ctx\n  ...\n\n🚀 Pro（主力）\n  DeepSeek-V4-Pro                 128K ctx  推理\n  GPT-5.5                         128K ctx  推理\n  claude-opus-4-8                 195K ctx  推理\n  ...\n\n🧠 Reasoner（深度推理）\n  DeepSeek-R1-0528                128K ctx  推理\n  ...\n```\n\n### Step 4 · 重启 OpenClaw\n\n```bash\nopenclaw restart\n```\n\n重启后，OpenClaw 会使用聚星逸的模型进行对话。\n\n---\n\n## 四、日常操作\n\n### 查看当前配置\n\n```bash\nnode scripts/configure.mjs --show\n```\n\n输出示例：\n```\n🛰️  聚星逸当前配置\n   Provider: fireworks-hub\n   Base URL: https://fireworks-simulator-api.huo15.com/v1\n   API 类型: openai-completions\n   密钥方式: 直接密钥 (fsk-Gho…)\n   文本模型: 30 个\n   主模型:   fireworks-hub/DeepSeek-V4-Flash\n   备选链:\n     fireworks-hub/DeepSeek-V4-Pro\n     ...\n\n   已配模型:\n   ★  DeepSeek-V4-Flash               128K   推理\n      DeepSeek-V4-Pro                 128K   推理\n      ...\n```\n\n### 切换主模型\n\n```bash\nnode scripts/configure.mjs --switch claude-opus-4-8\n```\n\n输出示例：\n```\n✅ 主模型已切换\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-11T...\n   旧主: fireworks-hub/DeepSeek-V4-Flash\n   新主: fireworks-hub/claude-opus-4-8\n   备选: 29 个模型\n\n重启 OpenClaw 后生效。\n```\n\n### 重新配置（平台新增了模型）\n\n直接重新运行配置脚本即可，它会拉取最新列表：\n\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n> 重新配置不会丢失其他 provider 的设置，只更新 `fireworks-hub` 段。\n\n---\n\n## 五、安全选项\n\n### 默认：密钥明文存储\n\n最简单的方式，密钥直接写在 `openclaw.json` 中。\n\n### 推荐：环境变量引用\n\n```bash\n# 配置时加 --env\nnode scripts/configure.mjs fsk-你的密钥 --env\n\n# 然后设置环境变量（加到 ~/.zshrc 或 ~/.bashrc）\nexport FIREWORKS_API_KEY=fsk-你的密钥\n\n# 重启 OpenClaw 前确保环境变量已加载\nsource ~/.zshrc\n```\n\n配置文件中只存：\n```json\n\"apiKey\": {\n  \"source\": \"env\",\n  \"provider\": \"default\",\n  \"id\": \"FIREWORKS_API_KEY\"\n}\n```\n\n---\n\n## 六、模型选择建议\n\n| 场景 | 推荐模型 | Tier |\n|------|---------|------|\n| 日常编程、快速问答 | DeepSeek-V4-Flash | flash |\n| 复杂代码生成、架构设计 | DeepSeek-V4-Pro 或 GPT-5.5 | pro |\n| 深度分析、数学推理 | DeepSeek-R1-0528 | reasoner |\n| 长文档处理（1M 上下文） | Gemini-3.5-Flash | flash |\n| Claude 系列偏好 | claude-opus-4-8 | pro |\n| 国产模型偏好 | Qwen3.7-Max 或 GLM-5.2 | pro |\n\n---\n\n## 七、常见问题\n\n### Q1：配置后 OpenClaw 报错 \"model not found\"\n\n**原因**：未重启 OpenClaw。\n\n**解决**：\n```bash\nopenclaw restart\n```\n\n### Q2：API 返回 401\n\n**原因**：密钥无效或已过期。\n\n**解决**：\n1. 去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」确认密钥状态\n2. 重新运行配置脚本\n\n### Q3：用了 `--env` 但 OpenClaw 报 \"API key not found\"\n\n**原因**：环境变量未设置或未加载。\n\n**解决**：\n```bash\n# 检查环境变量\necho $FIREWORKS_API_KEY\n\n# 如果为空，设置它\nexport FIREWORKS_API_KEY=fsk-你的密钥\nsource ~/.zshrc  # 或 ~/.bashrc\n\n# 然后重启 OpenClaw\nopenclaw restart\n```\n\n### Q4：想恢复配置前的状态\n\n**解决**：找到备份文件，恢复即可：\n```bash\nls ~/.openclaw/openclaw.json.bak.*\n# 选最近的\ncp ~/.openclaw/openclaw.json.bak.2026-07-11T00-00-00-000Z ~/.openclaw/openclaw.json\nopenclaw restart\n```\n\n### Q5：平台新增了模型，怎么更新配置？\n\n**解决**：直接重新运行配置脚本：\n```bash\nnode scripts/configure.mjs fsk-你的密钥\n```\n\n脚本会动态拉取最新列表，自动包含新模型。无需更新 skill 本身。\n\n---\n\n## 八、命令速查卡\n\n```bash\n# ── 配置 ──\nnode scripts/configure.mjs <fsk-key>           # 配置（默认 DeepSeek-V4-Flash）\nnode scripts/configure.mjs <fsk-key> --env     # 配置（密钥用环境变量）\n\n# ── 查看 ──\nnode scripts/configure.mjs --show              # 查看当前配置\nnode scripts/configure.mjs <fsk-key> --list    # 列出可用模型\n\n# ── 切换 ──\nnode scripts/configure.mjs --switch <model-id> # 切换主模型\n\n# ── 调试 ──\nnode scripts/configure.mjs <fsk-key> --json    # 输出 JSON 片段（不写文件）\n```\n\n---\n\n## 九、获取帮助\n\n| 渠道 | 信息 |\n|------|------|\n| 聚星逸控制台 | https://fireworks-simulator.huo15.com/app/ |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n| 辉火管家 AI | 网站右下角悬浮按钮，7×24 在线答疑 |\n| QQ 群 | 1093992108 |\n| 邮箱 | postmaster@huo15.com |\n| 电话 | 185 5489 8815 |\n| 公众号 | 逸寻智库（扫码关注） |\n\n---\n\n**青岛火一五信息科技有限公司**\n\nFile v1.1.1:skill-card.md\n\n## Description: <br>\nConnects the Juxingyi model aggregation platform to OpenClaw by dynamically fetching available models, writing the OpenClaw provider configuration, setting DeepSeek-V4-Flash as the default primary model, and guiding optional model switching. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zhaobod1](https://clawhub.ai/user/zhaobod1) <br>\n\n### License/Terms of Use: <br>\nMIT <br>\n\n\n## Use Case: <br>\nExternal OpenClaw users and developers use this skill to configure Juxingyi as a model provider, fetch current text-model options, set defaults and fallbacks, and optionally switch the active primary model. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: API keys can be stored directly in openclaw.json or exposed if command output containing real credentials is shared. <br>\nMitigation: Use the --env option with FIREWORKS_API_KEY when practical, avoid sharing --json output with real keys, and keep credentials out of logs and prompts. <br>\nRisk: Provider configuration changes affect the user's OpenClaw model defaults and fallbacks. <br>\nMitigation: Rely on the automatic backup before writes and review the resulting provider configuration before depending on it in production workflows. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zhaobod1/skills/huo15-juxingyi-configure) <br>\n- [User guide](docs/user-guide.md) <br>\n- [Developer guide](docs/dev-guide.md) <br>\n- [Changelog](docs/changelog.md) <br>\n- [Juxingyi console](https://fireworks-simulator.huo15.com/app/) <br>\n- [Juxingyi models API](https://fireworks-simulator-api.huo15.com/v1/models) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and OpenClaw JSON configuration changes] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires Node.js 18 or newer; can write OpenClaw provider settings, model defaults, backups, and optional JSON snippets.] <br>\n\n## Skill Version(s): <br>\n1.1.1 (source: frontmatter, changelog, server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.1.1:data/model-heuristics.json\n\n{\n  \"baseUrl\": \"https://fireworks-simulator-api.huo15.com/v1\",\n  \"providerName\": \"fireworks-hub\",\n  \"providerDisplayName\": \"聚星逸\",\n  \"envVarName\": \"FIREWORKS_API_KEY\",\n  \"defaultModel\": \"DeepSeek-V4-Flash\",\n\n  \"skipPatterns\": [\n    \"Image\", \"Seedream\", \"T2V\", \"I2V\", \"happyhorse\"\n  ],\n\n  \"knownModels\": {\n    \"DeepSeek-V4-Flash\":     { \"reasoning\": true,  \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"flash\"    },\n    \"DeepSeek-V4-Pro\":       { \"reasoning\": true,  \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"DeepSeek-V3.2\":         { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"DeepSeek-V3.1\":         { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"DeepSeek-R1-0528\":      { \"reasoning\": true,  \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"reasoner\" },\n    \"GPT-5.5\":               { \"reasoning\": true,  \"contextWindow\": 128000,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"GPT-5.4\":               { \"reasoning\": true,  \"contextWindow\": 128000,  \"maxTokens\": 8192, \"tier\": \"reasoner\" },\n    \"claude-opus-4-8\":       { \"reasoning\": true,  \"contextWindow\": 200000,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"claude-opus-4-7\":       { \"reasoning\": true,  \"contextWindow\": 200000,  \"maxTokens\": 8192, \"tier\": \"reasoner\" },\n    \"claude-sonnet-4-6\":     { \"reasoning\": true,  \"contextWindow\": 200000,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"claude-opus-4-6\":       { \"reasoning\": true,  \"contextWindow\": 200000,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"Qwen3.7-Max\":           { \"reasoning\": true,  \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"Qwen3.7-Plus\":          { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"flash\"    },\n    \"Qwen3.6-max-preview\":   { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"Qwen2.5-72B-Instruct\":  { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"GLM-5.2\":               { \"reasoning\": true,  \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"GLM-5.1\":               { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"GLM-5-Turbo\":           { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"flash\"    },\n    \"GLM-4.7\":               { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"Gemini-3.5-Flash\":      { \"reasoning\": false, \"contextWindow\": 1048576, \"maxTokens\": 8192, \"tier\": \"flash\"    },\n    \"Kimi-K2.6\":             { \"reasoning\": true,  \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"MiniMax-M3\":            { \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"MiniMax-M2.7\":          { \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"MiniMax-M2.7-highspeed\":{ \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"flash\"    },\n    \"MiniMax-M2.5\":          { \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"MiniMax-M2.5-highspeed\":{ \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"flash\"    },\n    \"MiniMax-M2.1\":          { \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"MiniMax-M2.1-highspeed\":{ \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"flash\"    },\n    \"MiniMax-M2\":            { \"reasoning\": false, \"contextWindow\": 204800,  \"maxTokens\": 8192, \"tier\": \"pro\"      },\n    \"Doubao-Seed-2.0-Pro\":   { \"reasoning\": false, \"contextWindow\": 131072,  \"maxTokens\": 8192, \"tier\": \"pro\"      }\n  },\n\n  \"tierPatterns\": {\n    \"flash\":    [\"Flash\", \"Turbo\", \"lite\", \"highspeed\", \"\\\\bMini\\\\b\"],\n    \"reasoner\": [\"R1\", \"reasoner\", \"thinking\", \"o1\", \"o3\"],\n    \"pro\":      [\"Pro\", \"Max\", \"Opus\", \"Plus\", \"Sonnet\"]\n  },\n\n  \"defaults\": {\n    \"reasoning\": false,\n    \"contextWindow\": 131072,\n    \"maxTokens\": 8192,\n    \"tier\": \"pro\"\n  }\n}\n\nFile v1.1.1:LICENSE\n\nMIT License\n\nCopyright (c) 2026 青岛火一五信息科技有限公司\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v1.1.0: 3 files, 5301 bytes\n\nFiles: skill-card.md (2115b), SKILL.md (7876b), _meta.json (143b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: huo15-juxingyi-configure\ndisplay_name: \"Juxingyi 聚星逸配置指南\"\ndescription: \"LLM 大模型聚合 SaaS 平台的配置与运维指南。涵盖供应商接入、模型路由、定价策略、网关增强、部署运维等。\"\ntags:\n  - llm\n  - gateway\n  - saas\n  - openai-compatible\n  - api-aggregation\n  - devops\nversion: 1.0.0\n---\n\n# Juxingyi 聚星逸配置指南\n\n> 聚星逸（Juxingyi / Fireworks Hub）— LLM 大模型聚合 SaaS 平台。一个 OpenAI 兼容密钥调用 50+ 主流大模型，按量计费、多供应商自动故障切换。\n\n## 平台架构\n\n| 层 | 技术栈 | 域名/位置 |\n|---|---|---|\n| 后端 | Node + Fastify + Prisma + PostgreSQL 18 + Redis 7 | `fireworks-simulator-api.huo15.com` → `127.0.0.1:8787` |\n| 前端控制台 | Vue3 + Vite + TS + Pinia | `fireworks-simulator.huo15.com/app/` |\n| 营销静态页 | 原生 HTML/CSS/JS | `fireworks-simulator.huo15.com` |\n| 部署 | Docker Compose + 宝塔 Nginx 反代 | 服务器 `47.104.78.121` |\n\n## 核心能力\n\n- **OpenAI 兼容网关**：`/v1/chat/completions`、`/v1/models`、`/v1/images/generations`、`/v1/videos/generations`\n- **多供应商故障切换**：`Model`（对外模型+售价）↔ `ModelRoute`（→Provider 上游模型+优先级/成本/健康度）↔ `Provider`；按 priority 选路，失败自动切下一家，连续失败 3 次熔断 60s\n- **Cheapest-First 选路**：多供应商路由按 `costInputPrice + costOutputPrice` 综合成本排序，成本最低的优先\n- **多 Key 轮询**：一个供应商挂多把上游 key（`ProviderKey` 表），每 key 独立健康度\n- **欠费动态降级**：上游报「余额不足」即该线路长冷却 30min 自动下线\n- **协议感知选路**：同优先级内入站协议（openai/anthropic）匹配的上游优先\n- **三账户钱包**：现金余额 / 赠送额度 / 佣金；扣费先扣赠送再扣现金\n- **计费**：词元订阅套餐 + 阶梯预充；分段倍率定价；缓存命中折价；分组倍率\n- **邀请返佣**：注册双方赠额度 + 好友消费按比例返现金佣金\n\n## 供应商接入指南\n\n### 当前已接入供应商\n\n| 供应商 | Slug | 协议 | Base URL | 说明 |\n|---|---|---|---|---|\n| Sidus / Sophnet | `sidus` | OpenAI | `https://model.sidus-ai.com/api/open-apis/v1` | 主供应商，7+ 模型 |\n| 润嘉云 | `alipower` | OpenAI | `https://llm.ai-token.com.cn/v1` | 8 文本 + 2 生图 |\n| OpenSand | `opensand` / `opensand-anthropic` | OpenAI + Anthropic | `https://api.opensand.ai/v1` | 双协议 new-api 站 |\n| DeepSeek 官方 | `deepseek-offical` / `deepseek-anthropic` | OpenAI + Anthropic | `api.deepseek.com` / `api.deepseek.com/anthropic/v1` | 原生双协议 |\n| 智谱清言 | `zhipu` | OpenAI | `https://open.bigmodel.cn/api/paas/v4` | GLM 直连 |\n| MiniMax | `minimax` | OpenAI | `https://api.minimaxi.com/v1` | Token Plan 套餐 |\n\n### 添加新供应商步骤\n\n1. **后台新增供应商**：「供应商」→ 新增，填写 Base URL（含 `/v1`）+ API Key\n2. **测试连通性**：点「测试」按钮，拉 `/models` 看该 key 能用哪些模型（注意：`/v1/models` 列表 ≠ 授权子集，需逐个实调验证）\n3. **给模型加路由**：到「模型」→ 选对外模型 → 加该供应商「路由」（填上游模型名 + 成本 + 优先级）\n4. **设定优先级**：按 Cheapest-First 原则，成本最低的 priority=1，次便宜=2，兜底=999\n\n### ⚠️ 常见坑\n\n- **列表 ≠ 授权**：`/v1/models` 返回的是平台全目录，不一定都是 key 授权的，要逐个实调验证\n- **Key 格式**：智谱清言 key 格式为 `{apiKey}.{secret}`\n- **URL 清洗**：客户粘贴的 URL/key 入库前用 `cleanUrl()` 清洗隐形字符\n- **AES 加密**：上游 Key 落库必须 AES 加密（`src/lib/crypto.ts` encryptSecret），不存明文\n- **OpenClaw 接入**：provider ID 必须用 `yanhua`，严禁用 `fireworks`（会触发 OpenClaw 专属改写）\n\n## 定价体系\n\n### 定价规则\n\n- **售价**挂 `Model`（`inputPrice` / `outputPrice`），单位：元/千 token\n- **成本**挂 `ModelRoute`（`costInputPrice` / `costOutputPrice`）\n- **利润**：售价 ≈ 成本 × 1.4~1.5（分段倍率：≤0.01×1.7 / ≤0.05×1.55 / ≤0.30×1.45 / >0.30×1.4）\n- **生图按张**：`outputPrice` = 每张售价，张数记 `Usage.completionTokens`\n- **视频按秒**：`outputPrice` = 每秒售价，秒数记 `Usage.completionTokens`（以轮询返回的 `usage.duration` 为准）\n- **缓存命中折价**：命中缓存输入按 `售价 × Setting('pricing.cacheSellRatio', 0.5)` 计\n- **分组倍率**：`User.priceGroup` × `Setting('group.multipliers')`（default=1 / vip=0.9 / enterprise=0.82 / reseller=0.75）\n\n### 向客户展示\n\n- **模型广场**：`/model-square.html`，未登录隐藏价格，登录后显示价格 + 官网折扣\n- **控制台模型页**：`/app/#/models`，显示每百万 token 价格 + 模型 ID 复制\n\n## 部署运维\n\n### 服务器信息\n\n- **服务器**：`47.104.78.121`（阿里云 + 宝塔 + Nginx + Docker）\n- **后端目录**：`/www/wwwroot/fireworks-simulator/backend`（docker compose：api + db + redis）\n- **前端目录**：`/www/wwwroot/fireworks-simulator/frontend`（根=营销页，`app/`=SPA）\n\n### 前端部署\n\n```bash\ncd frontend && npm run build\nrsync -av --delete frontend/dist/ root@47.104.78.121:/www/wwwroot/fireworks-simulator/frontend/app/\nscp site/*.html site/*.js site/*.svg root@47.104.78.121:/www/wwwroot/fireworks-simulator/frontend/\nssh root@47.104.78.121 \"chown -R www-data:www-data /www/wwwroot/fireworks-simulator/frontend\"\n```\n\n### 后端部署\n\n```bash\nrsync -av --delete --exclude='node_modules' --exclude='.env' --exclude='dist' backend/ root@47.104.78.121:/www/wwwroot/fireworks-simulator/backend/\nssh root@47.104.78.121 \"cd /www/wwwroot/fireworks-simulator/backend && docker compose build api && docker compose up -d\"\n```\n\n### 常用运维命令\n\n```bash\n# 查看容器状态\nssh root@47.104.78.121 \"cd /www/wwwroot/fireworks-simulator/backend && docker compose ps\"\n\n# 查看后端日志\nssh root@47.104.78.121 \"cd /www/wwwroot/fireworks-simulator/backend && docker compose logs --tail=50 api\"\n\n# 重启后端\nssh root@47.104.78.121 \"cd /www/wwwroot/fireworks-simulator/backend && docker compose restart api\"\n\n# 查看数据库\nssh root@47.104.78.121 \"cd /www/wwwroot/fireworks-simulator/backend && docker compose exec db psql -U fireworks -d fireworks -c 'SQL_HERE'\"\n\n# 重置路由熔断状态\nssh root@47.104.78.121 \"cd /www/wwwroot/fireworks-simulator/backend && docker compose exec db psql -U fireworks -d fireworks -c 'UPDATE \\\"ModelRoute\\\" SET \\\"consecutiveFailures\\\"=0, \\\"disabledUntil\\\"=NULL, \\\"lastError\\\"=NULL;'\"\n```\n\n## 红线\n\n- ❌ 不提交 secrets：`backend/.env` 已 gitignore，永不入库\n- ❌ 上游 Key 落库必须 AES 加密，不存明文\n- ❌ 用户网关 Key 只存 sha256，明文仅创建时返回一次\n- ❌ 发版仅 `git push origin master`（gitee 单 remote）\n\n## 关键文件索引\n\n| 文件 | 作用 |\n|---|---|\n| `backend/src/lib/gateway.ts` | 网关核心：选路、故障切换、熔断、SSE 流式 |\n| `backend/src/lib/pricing.ts` | 分段倍率定价 |\n| `backend/src/lib/billing.ts` | 钱包扣费逻辑 |\n| `backend/src/lib/orders.ts` | 邀请返佣 |\n| `backend/src/routes/admin.ts` | 管理后台 API |\n| `backend/src/routes/gateway.ts` | OpenAI 兼容网关路由 |\n| `backend/src/routes/public.ts` | 公开 API（模型广场用） |\n| `backend/prisma/schema.prisma` | 数据库 schema |\n| `frontend/src/views/admin/Admin.vue` | 管理后台界面 |\n| `frontend/src/views/Models.vue` | 控制台模型价格页 |\n| `site/model-square.html` | 营销页模型广场 |\n| `docs/供应商比价与路由策略.md` | 各模型路由优先级表 |\n| `docs/PRD.md` | 产品需求全貌 |\n| `docs/接手指南.md` | 部署 SOP / 凭据 / 常见操作 |\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-juxingyi-configure\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1783778592748\n}\n\nFile v1.1.0:skill-card.md\n\n## Description: <br>\nProvides configuration and operations guidance for the Juxingyi LLM aggregation SaaS platform, including provider onboarding, model routing, pricing, gateway behavior, deployment, and maintenance. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zhaobod1](https://clawhub.ai/user/zhaobod1) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to configure and maintain a Juxingyi LLM gateway/SaaS deployment, including provider connections, routing priorities, pricing rules, and deployment commands. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Production infrastructure details and host-specific paths may expose operational context if the skill is installed outside a trusted private setting. <br>\nMitigation: Redact production IPs, hostnames, and filesystem paths or replace them with scoped placeholders before broader sharing. <br>\nRisk: Root SSH, deployment, and database commands could affect live services if followed directly. <br>\nMitigation: Require operator review, scoped credentials, dry-run or staged execution where possible, backups, approval, and rollback steps before running operational commands. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zhaobod1/skills/huo15-juxingyi-configure) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown with tables and inline bash code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes operational commands and configuration guidance that should be reviewed before execution.] <br>\n\n## Skill Version(s): <br>\n1.1.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 8 files, 16258 bytes\n\nFiles: _meta.json (143b), CLAUDE.md (2607b), data/model-heuristics.json (4179b), LICENSE (1095b), README.md (6124b), scripts/configure.mjs (14818b), skill-card.md (2457b), SKILL.md (8072b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: huo15-juxingyi-configure\ndisplayName: 聚星逸配置\nversion: 1.0.0\ndescription: \"将聚星逸大模型聚合平台接入 OpenClaw——动态拉取最新可用模型列表，自动写入 openclaw.json 的 providers 段，默认设 DeepSeek-V4-Flash 为主模型，配好后询问用户是否切换。一个 fsk- 密钥调 50+ 顶级大模型。\"\nhomepage: https://github.com/zhaobod1/huo15-skills\nmetadata: { \"openclaw\": { \"emoji\": \"🛰️\", \"requires\": { \"bins\": [\"node\"] } } }\naliases:\n  - 聚星逸配置\n  - 聚星逸\n  - juxingyi\n  - 配置聚星逸\n  - 聚星逸接入\n  - 聚星逸模型\n  - fireworks-hub\n  - 烟花智汇配置\n  - fsk配置\n---\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n> 动态拉取聚星逸最新模型列表 → 自动写入 `~/.openclaw/openclaw.json` → 默认 DeepSeek-V4-Flash → 询问是否切换。\n> 青岛火一五信息科技有限公司 · OpenClaw 生态\n\n---\n\n## 一、什么时候用\n\n✅ **触发**:\n- 用户说\"配置聚星逸\"/\"接入聚星逸\"/\"juxingyi\"/\"fireworks-hub\"\n- 用户提供了 `fsk-` 开头的聚星逸 API Key，想接入 OpenClaw\n- 用户说\"把聚星逸的模型配到 openclaw\"\n- 用户想查看或切换聚星逸已配的模型\n\n❌ **不触发**:\n- 用户只是问聚星逸是什么（直接回答即可）\n- 用户想查用量账单（走 `huo15-yh-usage` skill）\n\n---\n\n## 二、前置知识\n\n**聚星逸**（Juxingyi）是青岛火一五的大模型聚合平台：\n- **Base URL**: `https://fireworks-simulator-api.huo15.com/v1`\n- **API 协议**: OpenAI 兼容（`openai-completions`）\n- **密钥格式**: `fsk-` 开头\n- **模型列表端点**: `GET /v1/models`（动态返回最新可用模型）\n- **一个 Key** 可调 50+ 主流大模型（DeepSeek / GPT / Claude / Qwen / GLM / Gemini / Kimi / MiniMax / 豆包等）\n\n在 OpenClaw 中，聚星逸作为一个 **provider**（`fireworks-hub`）配置在 `~/.openclaw/openclaw.json` 的 `models.providers` 段。\n\n---\n\n## 三、配置流程（3 步）\n\n### Step 1 · 获取用户的 API Key\n\n向用户索要聚星逸 API Key（`fsk-` 开头）。如果用户没有，引导去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页创建。\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key>\n```\n\n脚本会：\n1. **动态调用** `GET /v1/models` 拉取最新模型列表\n2. 自动分类：文本对话模型 vs 生图/视频模型（跳过后者）\n3. 按 tier 排序（flash → pro → reasoner）\n4. 写入 `~/.openclaw/openclaw.json`：\n   - `models.providers.fireworks-hub`（provider + 全部文本模型）\n   - `agents.defaults.model.primary` = `fireworks-hub/DeepSeek-V4-Flash`（默认）\n   - `agents.defaults.model.fallbacks` = 其余文本模型\n   - `agents.defaults.models` = 每个模型的 alias\n5. 自动备份原配置到 `openclaw.json.bak.<timestamp>`\n\n脚本输出示例：\n```\n✅ 聚星逸配置完成！\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-11T...\n   模型数: 18 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 17 个模型\n```\n\n### Step 3 · 询问用户是否切换主模型\n\n**配置完成后，必须主动问用户**：\n\n```\n🛰️ 聚星逸配置完成！默认主模型是 DeepSeek-V4-Flash（快速、支持推理）。\n\n需要切换到其他模型吗？可选：\n  ⚡ Flash（快速）: DeepSeek-V4-Flash, Gemini-3.5-Flash, GLM-5-Turbo, Qwen3.7-Plus\n  🚀 Pro（主力）: DeepSeek-V4-Pro, DeepSeek-V3.2, GPT-5.5, claude-opus-4-8, Qwen3.7-Max ...\n  🧠 Reasoner（深度推理）: DeepSeek-R1-0528, GPT-5.4, claude-opus-4-7 ...\n\n回复模型名即可切换，如 \"DeepSeek-V4-Pro\"。\n或回复 \"列出全部\" 看完整列表。不切换就回 \"不用了\"。\n```\n\n**如果用户要切换**：\n```bash\nnode <skill_dir>/scripts/configure.mjs --switch <model-id>\n```\n\n**如果用户想看完整列表**：\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key> --list\n```\n\n**如果用户想看当前配置**：\n```bash\nnode <skill_dir>/scripts/configure.mjs --show\n```\n\n---\n\n## 四、脚本命令速查\n\n| 命令 | 用途 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 配置 provider + 全部模型，默认 DeepSeek-V4-Flash |\n| `node configure.mjs <fsk-key> --list` | 动态获取并列出所有可用模型 |\n| `node configure.mjs <fsk-key> --json` | 输出 JSON 配置片段（不写文件） |\n| `node configure.mjs <fsk-key> --env` | 用环境变量引用存储密钥（更安全） |\n| `node configure.mjs --switch <model-id>` | 切换主模型 |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n\n> `<skill_dir>` = 本 skill 安装目录，通常为 `~/.openclaw/workspace/skills/huo15-juxingyi-configure`\n\n---\n\n## 五、模型分类规则\n\n脚本从 `/v1/models` 动态获取后，用 `data/model-heuristics.json` 分类：\n\n1. **跳过模型**（生图/视频）：含 `Image` / `Seedream` / `T2V` / `I2V` / `happyhorse` 的模型 ID 不配置文本对话\n2. **已知模型**：`knownModels` 中有精确元数据（reasoning / contextWindow / maxTokens / tier）\n3. **未知模型**（平台新加的）：按名称模式匹配推断 tier（`Flash/Turbo` → flash，`R1/reasoner` → reasoner，`Pro/Max/Opus` → pro），用默认参数\n4. **排序**：flash → pro → reasoner，同 tier 按字母序\n\n> 这意味着**平台新增模型后，无需更新本 skill**——脚本会自动发现并分类。\n\n---\n\n## 六、openclaw.json 配置结构\n\n配置完成后，`~/.openclaw/openclaw.json` 中新增/更新的段：\n\n```json\n{\n  \"models\": {\n    \"mode\": \"replace\",\n    \"providers\": {\n      \"fireworks-hub\": {\n        \"baseUrl\": \"https://fireworks-simulator-api.huo15.com/v1\",\n        \"apiKey\": \"fsk-你的密钥\",\n        \"api\": \"openai-completions\",\n        \"models\": [\n          {\n            \"id\": \"DeepSeek-V4-Flash\",\n            \"name\": \"DeepSeek V4 Flash (聚星逸)\",\n            \"reasoning\": true,\n            \"contextWindow\": 131072,\n            \"maxTokens\": 8192,\n            \"input\": [\"text\"],\n            \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n          }\n        ]\n      }\n    }\n  },\n  \"agents\": {\n    \"defaults\": {\n      \"model\": {\n        \"primary\": \"fireworks-hub/DeepSeek-V4-Flash\",\n        \"fallbacks\": [\"fireworks-hub/DeepSeek-V4-Pro\", \"...\"]\n      },\n      \"models\": {\n        \"fireworks-hub/DeepSeek-V4-Flash\": { \"alias\": \"DeepSeek V4 Flash (聚星逸)\" }\n      }\n    }\n  }\n}\n```\n\n---\n\n## 七、安全注意\n\n- API Key 默认**明文写入** openclaw.json。如需更安全，加 `--env` 用环境变量引用：\n  ```bash\n  node configure.mjs <fsk-key> --env\n  # 然后设置: export FIREWORKS_API_KEY=fsk-你的密钥\n  ```\n- 脚本每次写入前自动备份 `openclaw.json.bak.<timestamp>`\n- **密钥禁止出现在 commit / log / PR / 任何 LLM 上下文**\n\n---\n\n## 八、硬红线\n\n1. ❌ **不在任何文件中硬编码 API Key** — 用户每次提供\n2. ❌ **不跳过动态获取** — 必须调 `/v1/models`，不用过期列表\n3. ❌ **配置完不问就结束** — 必须主动问用户是否切换模型\n4. ❌ **不破坏其他 provider** — 只改 `fireworks-hub` 段\n5. ❌ **不忘记备份** — 写入前必须备份 openclaw.json\n\n---\n\n## 九、文件清单\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md","readmeExcerpt":"Skill: Huo15 Juxingyi Configure Owner: zhaobod1 Summary: 用聚星逸 fsk- 密钥调 /v1/models 接口,把最新模型列表写入 openclaw.json。模型列表完全来自接口实时返回,不依赖本地硬编码数据。支持日常更新(--update 保留主模型)、切换、查看。一个 Key 调 50+ 顶级大模型。 Tags: latest:1.3.0 Version history: v1.3.0 | 2026-07-19T10:44:25.463Z | user 新增 --update 子命令:日常更新模型列表(保留当前主模型,只刷新 providers 段),报告新增/移除,旧主模型下架时自动切换。与首次配置(重置主模型)区分。 v1.2.0 | 2026-07-19T09:20:39.643Z | user 架构简化:删除 data/model-heuristics.js","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"node <skill_dir>/scripts/configure.mjs <fsk-key>"},{"language":"text","snippet":"✅ 聚星逸配置完成!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   模型数: 18 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 17 个模型"},{"language":"text","snippet":"🛰️ 聚星逸配置完成!主模型是 <接口返回的第一个模型>。\n\n需要切换到其他模型吗?回复模型名即可切换,如 \"DeepSeek-V4-Pro\"。\n或回复 \"列出全部\" 看完整列表。不切换就回 \"不用了\"。"},{"language":"bash","snippet":"node <skill_dir>/scripts/configure.mjs --switch <model-id>"},{"language":"bash","snippet":"node <skill_dir>/scripts/configure.mjs <fsk-key> --list"},{"language":"bash","snippet":"node <skill_dir>/scripts/configure.mjs --show"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: huo15-juxingyi-configure\ndisplayName: 聚星逸配置\nversion: 1.3.0\ndescription: \"用聚星逸 fsk- 密钥调 /v1/models 接口,把最新模型列表写入 openclaw.json。模型列表完全来自接口实时返回,不依赖本地硬编码数据。支持日常更新(--update 保留主模型)、切换、查看。一个 Key 调 50+ 顶级大模型。\"\nhomepage: https://github.com/zhaobod1/huo15-skills\nmetadata: { \"openclaw\": { \"emoji\": \"🛰️\", \"requires\": { \"bins\": [\"node\"] } } }\naliases:\n  - 聚星逸配置\n  - 聚星逸\n  - juxingyi\n  - 配置聚星逸\n  - 聚星逸接入\n  - 聚星逸模型\n  - fireworks-hub\n  - 烟花智汇配置\n  - fsk配置\n---\n\n# 聚星逸配置 · huo15-juxingyi-configure\n\n> 用 fsk- 密钥调聚星逸 /v1/models 接口 → 把模型列表写入 ~/.openclaw/openclaw.json。\n> 模型列表完全来自接口实时返回,不依赖本地硬编码数据。\n> 青岛火一五信息科技有限公司 · OpenClaw 生态\n\n---\n\n## 一、什么时候用\n\n✅ **触发**:\n- 用户说\"配置聚星逸\"/\"接入聚星逸\"/\"juxingyi\"/\"fireworks-hub\"\n- 用户提供了 `fsk-` 开头的聚星逸 API Key,想接入 OpenClaw\n- 用户说\"把聚星逸的模型配到 openclaw\"\n- 用户想查看或切换聚星逸已配的模型\n\n❌ **不触发**:\n- 用户只是问聚星逸是什么(直接回答即可)\n- 用户想查用量账单(走 `huo15-yh-usage` skill)\n\n---\n\n## 二、前置知识\n\n**聚星逸**(Juxingyi)是青岛火一五的大模型聚合平台(接入文档:https://fireworks-simulator.huo15.com/docs.html):\n- **Base URL**: `https://fireworks-simulator-api.huo15.com/v1`\n- **API 协议**: OpenAI 兼容(`openai-completions`)\n- **密钥格式**: `fsk-` 开头\n- **模型列表端点**: `GET /v1/models`(动态返回最新可用模型)\n- **一个 Key** 可调 50+ 主流大模型(DeepSeek / GPT / Claude / Qwen / GLM / Gemini / Kimi / MiniMax / 豆包等)\n\n在 OpenClaw 中,聚星逸作为一个 **provider**(`fireworks-hub`)配置在 `~/.openclaw/openclaw.json` 的 `models.providers` 段。\n\n---\n\n## 三、配置流程(3 步)\n\n### Step 1 · 获取用户的 API Key\n\n向用户索要聚星逸 API Key(`fsk-` 开头)。如果用户没有,引导去 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页创建。\n\n### Step 2 · 运行配置脚本\n\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key>\n```\n\n脚本会:\n1. **调用** `GET /v1/models` 接口拉取最新模型列表(完全来自接口,无本地硬编码清单)\n2. 跳过生图/视频模型(ID 含 `image`/`t2v`/`i2v`/`video` 等关键词的不能用于文本对话)\n3. 写入 `~/.openclaw/openclaw.json`:\n   - `models.providers.fireworks-hub`(provider + 全部文本模型)\n   - `agents.defaults.model.primary` = 接口返回列表的第一个模型\n   - `agents.defaults.model.fallbacks` = 其余文本模型\n   - `agents.defaults.models` = 每个模型的 alias\n4. 自动备份原配置到 `openclaw.json.bak.<timestamp>`\n\n脚本输出示例:\n```\n✅ 聚星逸配置完成!\n   备份: ~/.openclaw/openclaw.json.bak.2026-07-19T...\n   模型数: 18 个文本对话模型\n   主模型: fireworks-hub/DeepSeek-V4-Flash\n   备选链: 17 个模型\n```\n\n> **关于模型参数**:接口 `/v1/models` 只返回模型 `id`/`owned_by`,不返回上下文窗口等参数。脚本除 `id`/`name` 外填保守默认值(`contextWindow`: 131072, `maxTokens`: 8192, `reasoning`: false)保证 OpenClaw 可用,用户可按需在 `openclaw.json` 手动调整。\n\n### Step 3 · 询问用户是否切换主模型\n\n**配置完成后,必须主动问用户**:\n\n```\n🛰️ 聚星逸配置完成!主模型是 <接口返回的第一个模型>。\n\n需要切换到其他模型吗?回复模型名即可切换,如 \"DeepSeek-V4-Pro\"。\n或回复 \"列出全部\" 看完整列表。不切换就回 \"不用了\"。\n```\n\n**如果用户要切换**:\n```bash\nnode <skill_dir>/scripts/configure.mjs --switch <model-id>\n```\n\n**如果用户想看完整列表**:\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key> --list\n```\n\n**如果用户想看当前配置**:\n```bash\nnode <skill_dir>/scripts/configure.mjs --show\n```\n\n---\n\n## 四、日常更新模型列表(平台新增了模型)\n\n**当用户说\"更新一下聚星逸模型\"/\"拉取最新模型列表\"/\"平台加了新模型\"时,用 `--update`**:\n\n```bash\nnode <skill_dir>/scripts/configure.mjs <fsk-key> --update\n```\n\n与首次配置(`<fsk-key>`)的区别:\n- **首次配置**(无 `--update`):主模型取接口返回列表的第一个,重置 fallbacks\n- **日常更新**(`--update`):**保留用户当前选定的主模型**"},{"path":"README.md","content":"# 聚星逸配置 · huo15-juxingyi-configure\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://tools.huo15.com/uploads/images/system/logo-colours.png\" alt=\"火一五Logo\" style=\"width: 120px; height: auto; display: inline; margin: 0;\" />\n\n</div>\n\n<div align=\"center\">\n\n<h3>一个 Key 调 50+ 顶级大模型</h3>\n<h3>接口实时拉取 · 自动写入 · 零本地硬编码</h3>\n\n</div>\n\n<div align=\"center\">\n\n| 🏫 教学机构 | 👨‍🏫 讲师 | 📧 联系方式         | 💬 QQ群      | 📺 配套视频                         |\n|:-----------:|:--------:|:------------------:|:-----------:|:-----------------------------------:|\n| 逸寻智库 | Job | support@huo15.com | 1093992108  | [📺 B站视频](https://space.bilibili.com/400418085) |\n\n</div>\n\n---\n\n<div align=\"center\">\n\n![Version](https://img.shields.io/badge/version-1.3.0-brightgreen)\n![License](https://img.shields.io/badge/license-MIT-green)\n![Node](https://img.shields.io/badge/node-%3E%3D18.0-blue)\n![ClawHub](https://img.shields.io/badge/ClawHub-published-ff6b6b)\n\n</div>\n\n---\n\n## 这是什么\n\n`huo15-juxingyi-configure` 是 OpenClaw 专用 skill,帮你快速接入聚星逸(Juxingyi)大模型聚合平台:\n\n1. **接口实时拉取**:每次运行都从聚星逸 `/v1/models` 接口获取最新可用模型列表\n2. **自动写入**:`~/.openclaw/openclaw.json` 的 `fireworks-hub` provider 段\n3. **主模型取列表第一个**:配完后主动询问是否切换\n4. **日常更新**:`--update` 保留当前主模型,只刷新模型列表(平台新增模型后日常刷新)\n5. **灵活切换**:随时用 `--switch` 换主模型\n6. **安全可靠**:写入前自动备份,支持环境变量引用存储密钥\n\n> **模型列表完全来自接口,不维护任何本地硬编码清单**——平台新增模型无需更新本 skill。\n> 接入文档:https://fireworks-simulator.huo15.com/docs.html\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\n# 从 ClawHub 安装(推荐)\nclawhub install huo15-juxingyi-configure --dir ~/.openclaw/workspace/skills\n\n# 或从源码安装\ngit clone https://cnb.cool/huo15/ai/huo15-skills.git\ncp -r huo15-skills/huo15-juxingyi-configure/ ~/.openclaw/workspace/skills/\n```\n\n### 使用\n\n**1. 获取聚星逸 API Key**\n\n打开 [聚星逸控制台](https://fireworks-simulator.huo15.com/app/) →「API 密钥」页,创建一个 `fsk-` 开头的密钥。\n\n**2. 运行配置脚本**\n\n```bash\ncd ~/.openclaw/workspace/skills/huo15-juxingyi-configure\nnode scripts/configure.mjs <fsk-key>\n```\n\n脚本调 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,主模型取接口返回列表的第一个。\n\n**3. 重启 OpenClaw**\n\n```bash\nopenclaw restart\n```\n\n> 完整操作流程见 [用户手册 SOP](docs/user-guide.md)\n\n---\n\n## 脚本命令\n\n| 命令 | 说明 |\n|------|------|\n| `node configure.mjs <fsk-key>` | 首次配置:拉取模型列表并写入(主模型取列表第一个) |\n| `node configure.mjs <fsk-key> --list` | 只列出接口返回的模型(不写文件) |\n| `node configure.mjs <fsk-key> --update` | **日常更新模型列表(保留当前主模型)** |\n| `node configure.mjs <fsk-key> --env` | 首次配置时用环境变量引用存储密钥(更安全) |\n| `node configure.mjs --switch <model-id>` | 切换主模型(支持前缀匹配) |\n| `node configure.mjs --show` | 查看当前聚星逸配置 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n| `node configure.mjs --help` / `-h` | 显示帮助 |\n| `node configure.mjs --version` / `-v` | 显示版本号 |\n\n---\n\n## 模型列表来源\n\n**模型列表完全来自聚星逸 `/v1/models` 接口实时返回,本 skill 不维护任何本地模型清单。**\n\n脚本处理逻辑:\n1. 调 `GET /v1/models` 拿到平台当前所有可用模型\n2. 跳过生图/视频模型(ID 含 `image`/`seedream`/`t2v`/`i2v`/`video`/`dall-e`/`happyhorse`)——不能用于文本对话\n3. 剩余文本模型全部写入配置\n4. 主模型取接口返回列表的第一个,其余作 fallbacks\n\n> **关于模型参数**:接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等参数。脚本除 `id`/`name` 外填保守默认值"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7byevkn40d6z4p7ghdb097z983tj33\",\n  \"slug\": \"huo15-juxingyi-configure\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1784457865463\n}"},{"path":"CLAUDE.md","content":"# CLAUDE.md · huo15-juxingyi-configure\n\n> 聚星逸配置 skill —— 用 fsk- 密钥调 /v1/models 接口,把模型列表写入 openclaw.json\n> 面向接手开发的 AI / 工程师,涵盖架构、规范、踩坑、运维。\n\n---\n\n## 一、项目定位\n\n将聚星逸(Juxingyi)大模型聚合平台接入 OpenClaw。用户提供一个 `fsk-` 密钥,skill 调 `/v1/models` 接口拉取最新模型列表,自动写入 `~/.openclaw/openclaw.json`,主模型取接口返回列表的第一个,配好后询问用户是否切换。\n\n**核心价值**:模型列表完全来自接口实时返回,不维护任何本地硬编码清单——平台新增模型无需更新本 skill。\n\n---\n\n## 二、技术栈\n\n| 项 | 值 |\n|----|----|\n| 脚本语言 | Node.js ES Modules(零依赖,需 Node 18+) |\n| API 协议 | OpenAI 兼容(`openai-completions`) |\n| API 端点 | `GET https://fireworks-simulator-api.huo15.com/v1/models` |\n| 接入文档 | https://fireworks-simulator.huo15.com/docs.html |\n| 配置文件 | `~/.openclaw/openclaw.json` |\n\n---\n\n## 三、核心设计决策\n\n| 决策 | 原因 |\n|------|------|\n| **接口实时获取**(非硬编码) | 平台模型变化频繁,硬编码会过期;每次运行调 `/v1/models` 确保最新 |\n| **不维护本地模型清单** | v1.2.0 起删除 `data/model-heuristics.json`,模型列表完全信任接口 |\n| **模型参数填保守默认** | 接口只返回 `id`/`owned_by`,不返回上下文窗口等;填默认值保证 OpenClaw 可用,用户可手动调 |\n| **主模型取列表第一个** | 不硬编码特定模型;配完后主动询问切换 |\n| **生图/视频过滤用脚本内正则** | 通用关键词(`image`/`t2v`/`i2v`/`video` 等),保证配置可用;非外部数据文件 |\n| **零依赖 Node 脚本** | 不需 npm install,用户直接运行 |\n| **只操作 fireworks-hub provider** | 不碰其他 provider,幂等安全 |\n| **写入前自动备份** | 可回滚 |\n| **SKILL.md 嵌入完整流程** | LLM 加载后 0 次 API 探索,省 token |\n\n---\n\n## 四、文件结构\n\n```\nhuo15-juxingyi-configure/\n├── SKILL.md                       # LLM 嵌入源(≤25KB)\n├── _meta.json                     # ClawHub 元数据\n├── README.md                      # 公开文档(面向用户)\n├── CLAUDE.md                      # 开发规范(本文档)\n├── LICENSE                        # MIT\n├── .gitignore                     # skill 级忽略\n├── scripts/\n│   └── configure.mjs              # 核心脚本(540 行),所有逻辑在此\n└── docs/\n    ├── prd.md                     # 产品需求文档\n    ├── user-guide.md              # 用户手册 SOP\n    ├── dev-guide.md               # 开发者 SOP(更详细的架构内幕)\n    └── changelog.md               # 版本变更历史\n```\n\n> v1.2.0 起**不再有** `data/` 目录——模型分类启发式数据已删除,模型列表完全来自接口。\n\n---\n\n## 五、configure.mjs 架构\n\n```\n参数解析 → Node 版本检查\n    │\n    ├── --help/-h      → cmdHelp()       显示帮助\n    ├── --version/-v   → cmdVersion()    读 _meta.json,显示版本\n    ├── --show         → cmdShow()       读 openclaw.json,展示当前配置\n    ├── --switch X     → cmdSwitch()     读/写 openclaw.json,切换主模型(支持前缀匹配)\n    ├── <key> --list   → fetchModels() + cmdList()       调接口,展示\n    ├── <key> --update → fetchModels() + cmdUpdate()     调接口,保留主模型刷新模型列表\n    └── <key>          → fetchModels() + cmdConfigure()  调接口,写入 openclaw.json(首次配置)\n```\n\n### 关键函数\n\n| 函数 | 职责 |\n|------|------|\n| `fetchModels(apiKey)` | 调 `GET /v1/models`,带 15s 超时 + 错误分类(401/403/5xx)+ 空列表防护 |\n| `toModelEntry(id)` | 单个模型配置项:`id` + `name` + 保守默认参数 |\n| `buildConfig(apiKey, rawModels)` | 生成 provider + agents.defaults(primary 取第一个 + fallbacks + aliases) |\n| `cmdUpdate(newProvider, textModels, skipped)` | **日常更新**:保留当前主模型,只刷新模型列表,报告新增/移除 |\n| `resolveModelId(input, ids)` | 模型 ID 解析:精确 → 大小写不敏感 → 前缀唯一 |\n| `readOpenclawJson()` | 读取 `~/.openclaw/openclaw.json` |\n| `writeOpenclawJson(config)` | 备份 + 写入 |\n\n### 模型处理逻辑\n\n1. `fetchModels` 调接口拿 `data.data`(OpenAI 兼容标准格式)\n2. `buildConfig` 遍历模型,"},{"path":"docs/changelog.md","content":"# 变更历史 · huo15-juxingyi-configure\n\n---\n\n## v1.3.0(2026-07-19)\n\n**新增 `--update` 子命令:日常更新模型列表,保留主模型。**\n\n### 新增\n\n- **`--update` 子命令**:已配置用户日常刷新模型列表(平台新增模型后),与首次配置区分\n- **`cmdUpdate` 函数**:保留当前主模型(若仍在平台列表中),只刷新 providers 段模型列表\n- **变更报告**:对比旧/新列表,报告新增 / 移除的模型\n- **旧主模型下架处理**:若旧主模型不在新列表(被下架),自动切到列表第一个并提示\n- **保留密钥存储方式**:更新模型列表不改密钥配置(明文 / env 引用都保留原状)\n\n### 与首次配置的区别\n\n| 场景 | 命令 | 主模型处理 |\n|------|------|-----------|\n| 首次配置 | `<fsk-key>` | 取接口返回列表第一个,重置 fallbacks |\n| 日常更新 | `<fsk-key> --update` | 保留当前主模型(若仍在列表),只刷新模型列表 |\n\n### 文档\n\n- SKILL.md:新增第四节\"日常更新模型列表\";命令速查表加 `--update`;章节顺延;版本历史加 v1.3.0\n- README.md:命令表加 `--update`;特性列表加日常更新\n- CLAUDE.md:架构图加 `--update` 分支;关键函数表加 `cmdUpdate`;脚本行数 445→540\n- docs/dev-guide.md、docs/prd.md、docs/user-guide.md 同步\n\n---\n\n## v1.2.0(2026-07-19)\n\n**架构简化:模型列表完全来自接口,删除本地硬编码分类数据。**\n\n### 变更\n\n- **删除 `data/model-heuristics.json`**:移除 30 个已知模型元数据(knownModels)、tier 模式匹配规则(tierPatterns)、skipPatterns 等全部本地硬编码分类数据\n- **删除 `data/` 目录**:不再需要\n- **模型列表完全来自接口**:脚本只调 `GET /v1/models`,信任接口返回,不维护本地清单\n- **主模型改为取接口返回列表的第一个**:不再硬编码 `DeepSeek-V4-Flash`\n- **生图/视频过滤改为脚本内通用正则**:`NON_TEXT_RE = /image|seedream|t2v|i2v|video|dall-e|happyhorse/i`(常量,非外部数据文件)\n- **模型参数填保守默认值**:接口 `/v1/models` 只返回 `id`/`owned_by`,不返回上下文窗口等;`toModelEntry` 填 `contextWindow`: 131072 / `maxTokens`: 8192 / `reasoning`: false 保证 OpenClaw 可用,可手动调整\n\n### 删除\n\n- **`--json` 子命令**:偏离核心(输出 JSON 片段),移除\n- **`--selftest` 子命令**:依赖已删除的分类逻辑(classifyModel/guessTier),移除\n- **`classifyModel` / `guessTier` / `tierWeight` 函数**:分类体系整体移除\n- **`cmdJson` / `cmdSelftest` 函数**:对应子命令已删\n\n### 文档\n\n- SKILL.md:第五节\"模型分类规则\"改为\"模型列表来源\";命令速查去掉 `--json`/`--selftest`;配置结构说明参数为保守默认;文件清单去掉 `data/`\n- README.md:\"模型分类规则\"章节改为\"模型列表来源\";文件结构去掉 `data/`;命令表同步\n- CLAUDE.md:核心设计决策、架构图、关键函数表、修改指引、踩坑全部重写以反映接口直取设计\n- docs/dev-guide.md、docs/prd.md、docs/user-guide.md 同步\n\n### 背景\n\n用户要求技能\"只通过聚星逸的接口文档和 Key 更新大模型列表配置到配置文件上\"。据此去掉所有本地启发式分类数据,模型列表完全依赖接口实时返回。\n\n---\n\n## v1.1.1(2026-07-19)\n\n**健壮性增强与代码质量提升。**(远程 1.1.0 已被 7-11 旧内容占用,跳 +1 patch 发布)\n\n### 新增\n\n- **`--help` / `-h` 子命令**:显示完整用法说明\n- **`--version` / `-v` 子命令**:从 `_meta.json` 读取并显示版本号\n- **`--selftest` 子命令**:不联网、不读写配置的内置自检(19 项断言)\n- **`--switch` 前缀匹配**:`resolveModelId` 按 精确 → 大小写不敏感 → 前缀唯一 三级解析\n- **Node 版本检查**:Node < 18 时给出友好提示\n- **API Key 格式校验**:`fsk-` 后必须有内容\n- **`fetchModels` 增强**:15s 超时 + 错误分类(401/403/5xx/超时)+ 空模型列表防护\n\n### 变更\n\n- **根治 MiniMax 误判**:`tierPatterns.flash` 里 `Mini` 改为 `\\bMini\\b`(词边界匹配)\n- **删除死代码**:移除从未调用的 `deepMerge` 函数\n\n### 文档\n\n- 同步 `CLAUDE.md` / `docs/dev-guide.md` 的脚本行数(385 → 561)、架构图、关键函数表、踩坑记录\n\n> 注:v1.2.0 删除了整个 tier 分类体系,上述 MiniMax 相关修复已成为历史。\n\n---\n\n## v1.0.0(2026-07-11)\n\n**首版发布。**\n\n### 新增\n\n- **动态模型获取**:每次运行脚本调 `GET /v1/models`,确保模型列表最新\n- **启发式分类**:`data/model-heuristics.json` 提供已知模型元数据 + 未知模型模式匹配\n- **自动配置**:写入 `~/.openclaw/openclaw.json` 的 `models.providers.fireworks-hub` 段\n- **默认主模型**:`DeepSeek-V4-Flash`(快速、支持推理)\n- **备选链**:其余文本模型自动加入 fallbacks\n- **模型别名**:每个模型自动生成 alias\n- **子命令**:`<fsk-key>` / `--list` / `--json` / `--env` / `--switch` / `--show`\n- **安全**:写入前自动备份 `openclaw.json.bak.<times"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1042,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T07:20:14.570Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T07:20:14.570Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:54:00.582Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}