@henjicc/ai-sdk 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +231 -211
  2. package/README.md +2 -2
  3. package/dist/capabilities/speech-recognition/bailian/module.js +29 -14
  4. package/dist/capabilities/speech-recognition/bailian/types.d.ts +2 -0
  5. package/dist/catalog/apimart/gemini-omni-flash.model.js +3 -14
  6. package/dist/catalog/bailian/cosyvoice-v3.5.model.js +1 -1
  7. package/dist/catalog/bailian/minimax-speech-2.8.model.js +1 -1
  8. package/dist/catalog/bailian/qwen-audio-3.1-tts-flash.model.js +1 -1
  9. package/dist/catalog/fal/eleven-v3-tts.model.js +1 -1
  10. package/dist/catalog/fal/minimax-speech-2.8.model.js +1 -1
  11. package/dist/catalog/kie/eleven-turbo-2.5-tts.model.js +1 -1
  12. package/dist/catalog/kie/eleven-v3-dialogue.model.js +1 -1
  13. package/dist/catalog/kie/gemini-3.1-flash-tts.model.js +1 -1
  14. package/dist/catalog/kie/gemini-omni-video.model.js +5 -26
  15. package/dist/catalog/ppio/minimax-speech.model.js +1 -1
  16. package/dist/catalog/siliconflow/cosyvoice2-tts.model.js +1 -1
  17. package/dist/catalog/siliconflow/moss-ttsd-0.5.model.js +1 -1
  18. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.d.ts +1 -0
  19. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.js +52 -10
  20. package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.d.ts +2 -0
  21. package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.js +438 -0
  22. package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +3 -3
  23. package/dist/generation/core.d.ts +6 -0
  24. package/dist/generation/core.js +10 -2
  25. package/dist/index.d.ts +5 -0
  26. package/dist/index.js +7 -0
  27. package/dist/providers/index.d.ts +1 -0
  28. package/dist/providers/index.js +1 -0
  29. package/dist/providers/tts-voices.d.ts +9 -0
  30. package/dist/providers/tts-voices.js +139 -0
  31. package/dist/providers/volcengine-speech.d.ts +1 -1
  32. package/dist/providers/volcengine-speech.js +9 -3
  33. package/dist/providers/volcengine-voice-clone.d.ts +3 -0
  34. package/dist/providers/volcengine-voice-clone.js +129 -0
  35. package/dist/types/runtime.d.ts +3 -0
  36. package/dist/upload/media-binary.js +1 -0
  37. package/docs/consumers.md +27 -3
  38. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +1 -0
  39. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_KIE.md +1 -0
  40. package/docs/model-adaptation/README.md +11 -7
  41. package/docs/model-adaptation/Seed-ICL-2.0/Seed-ICL-2.0_/347/201/253/345/261/261/345/274/225/346/223/216.md +65 -0
  42. package/docs/model-adaptation/TTS-/345/244/232/344/276/233/345/272/224/345/225/206-2026-09.md +69 -55
  43. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +6 -0
  44. package/docs/model-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +6 -5
  45. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,218 +1,238 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.0 - 2026-10-06
4
+
5
+ - 生成结果新增 `urls: string[]`:按输出顺序列出全部结果地址,多结果模型不再需要拆分 `url` 中的 `|||` 拼接串。`url` 保留为兼容字段,内容不变。
6
+
7
+ - 百炼文件转写支持 `options.resumeTaskId`,通过官方任务查询恢复,不重新读取、上传或提交音频。短音频协议明确拒绝恢复参数。
8
+ - 恢复查询沿用取消、超时、供应商失败和转写结果校验;现有请求行为保持兼容。
9
+
10
+ - Seed-ICL 2.0 新增 `volcIclMode: 'clone'`:使用 V3 上传录音、自动生成后付费音色编号、训练与按任务恢复查询。音色名称用 `volcCloneName`,音频用 `volcCloneAudio`,统一 `prompt` 为 4–300 字试听文本;完成响应中的 `metadata.clonedVoice` 供宿主持久保存,试听 URL 可为空。
11
+ - 提交网络结果不确定时保留可查询任务,不自动重放训练;已激活或正在训练的预付费槽位禁止覆盖。
12
+ - Seed-TTS / Seed-ICL 2.0 的公开后付费字符估价更新为 ¥3/万字符;首次正式调用后付费复刻音色另收 ¥138 并锁定音色。
13
+ - 迁移:使用非 `S_` 音色进行正式合成时需显式传入 `volcIclActivationConsent: true`,表示已向用户说明首次激活收费。已有预付费 `S_` 音色与语音供应商凭据 ID 保持兼容。消费者应处理克隆成功但无试听 URL 的元数据结果,不能将其视为合成音频。
14
+
15
+ ## 0.8.0 - 2026-09-27
16
+
17
+ - TTS 音色参数统一支持选择器;公开 `listTtsVoices` 查询百炼 MiniMax、Qwen Audio 3.1、CosyVoice 3.5 和硅基流动 CosyVoice2 的账号音色。
18
+ - Henji-AI 首发宿主加入 Qwen Audio 3.1 与火山 Seed-TTS 2.0 的官方预置音色目录,并为其他 TTS 模型展示已核实的预置或示例音色。无法查询完整音色目录的渠道保留手填 ID 兜底。
19
+ - 迁移:上述 TTS 音色参数在目录中改为 `composite` 字符串字段;依赖旧 `dropdown.options` 渲染 Qwen 3.1 音色的 SDK 消费方需改用自己的音色选择器。原参数 ID、字符串值和请求构建保持不变。
20
+
3
21
  ## 0.7.0 - 2026-09-27
4
22
 
5
23
  - 新增 Fal、百炼、KIE、硅基流动和火山语音的 13 个 TTS 模型入口;保留派欧云 MiniMax Speech 2.8,并按平台契约隐藏未证实的情感参数。
6
24
  - 接入百炼 MiniMax Hex 音频、百炼 Qwen/CosyVoice 同步音频、硅基流动二进制音频及火山 V3 分块音频;输出统一交给现有媒体落盘边界。
7
25
  - 有公开字符单价的模型提供估算;按音频输出 Token 计费或缺少可核实按量单价的模型不显示数字估算。
8
-
9
- ## 0.6.2 - 2026-09-24
10
-
11
- - 完善聊天与翻译 SSE 的事件边界和完成状态校验:保留合法空中间帧、用量与状态通知,提前结束、服务端错误和无效终态不再伪装成功;保留翻译增量/累积协议差异。
12
- - 修复百炼实时 ASR 字段校验、Qwen 中间文字拼接和状态通知处理;保留 0.6.1 空中间帧兼容,诊断包含实际模型、协议及失败阶段。
13
- - 收口共享实时会话的取消、超时、后台故障通知和资源释放;SDK 会话提供可选 result promise,旧自定义会话仍兼容。握手清理失败保留首个故障,火山服务错误默认脱敏。
14
- - 阻止聊天及火山实时识别在取消后继续派发同一帧的后续结果;明确智谱推理网络错误与上下文截断,扩展通知不冒充完成证据。
15
- - 增加脱敏事件序列回归并执行修复撤销验证,更新聊天示例的合法结束帧。未改变供应商配额、网络稳定性或模型识别质量。
16
-
17
- ## 0.6.1 - 2026-09-24
18
-
19
- - 修复百炼 Fun Duplex 实时识别把无句首标记的空文本中间帧误判为无效响应的问题;覆盖 Qwen Audio 3.1 streaming 与 Fun-ASR 共享协议。
20
- - 保持缺失文字字段、空最终结果、全程无有效 final 的严格校验及连接释放。
21
-
22
- ## 0.6.0 - 2026-09-24
23
-
24
- - 新增 MiMo 2.6 Pro / Flash / Pro-UltraSpeed 能力;默认推荐 Pro / Flash,保留 2.5 ID(官方计划 10 月 21 日下线),不自动替换用户选择。
25
- - MiMo Chat / Responses 思考字段分离,兼容完整 reasoning_text 事件及历史思考回传,流中断不再伪装完成。
26
- - 新增大陆 GLM-5.3-FlashX 与官方价格;Flash / FlashX 开放 JSON 输出并保留思考。
27
- - 新增 KIE HappyHorse 1.1 文生、图生、多图参考模式,以及火山 Seedream 5.0 Flash 生成/编辑和图层拆分;价格按最新官方单价。
28
- - 百炼新增 Qwen-Audio 3.1 短音频、文件与实时 ASR,支持方言/即时热词与说话人输出;修复短音频 JSON 回退、上下文字段及文件声道数组。
29
- - Kimi K3 资料补齐缓存写入 TTL 价格。新增公开入口保持向后兼容,既有外部 ASR 消费方从 0.2.x 升级仍须满足 0.5.0 的宿主流式上传要求。
30
-
31
-
32
- ## 0.5.2 - 2026-09-21
33
-
34
- - `llm/streaming` 新增有类型定义的文本、JSON Object 与 JSON Schema 输出配置,并把它正式写入 Chat Completions 的 `response_format`。
35
- - 模型能力现在可声明结构化输出与思考模式能否并用;不支持或尚未核实的组合在网络请求前返回可解析错误码,Groq 流式 JSON Schema 按官方限制明确拒绝。
36
- - 新增 `maxOutputTokens`,OpenAI/Groq/MiMo 使用 `max_completion_tokens`,其余兼容端点沿用 `max_tokens`;省略时不再强制 4096,流结束用 `truncated` 标记 token 上限截断。
37
- - 最终发送体复用正式构建结果,`onRequestBuilt` 只收到观察快照;保留正文/思考分流、AbortSignal、可选总时限与轻量受限宿主边界。
38
-
39
- ## 0.5.1 - 2026-09-21
40
-
41
- - Grsai GPT Image 2.5 默认变体从维护中的 Flare 切换为可用的 Standard;显式 Flare/Sunburst 参数保持兼容,等待官方恢复公告。
42
- - 默认请求体与默认价格估算同步使用 Standard,避免界面未选择变体时仍把任务提交到维护通道。
43
-
44
- ## 0.5.0 - 2026-09-21
45
-
46
- - 文件 ASR 支持分块 JSON/Base64 与 multipart,请求体不重组整文件;支持结构化大小错误、PCM 时长估算及取消清理。
47
- - **迁移要求**:百炼异步本地文件需宿主 transport.uploadFile 原生直传 OSS,不再走媒体读取通道。其他流式路径需 describe/readChunk + fetchStream;旧 read 路径保留但不得放宽内存保护。
48
- - 修复上传凭证字符串大小限制漏检,采用官方临时上传 1 GB 上限;Qwen 按编码后 10 MB 预检,Groq/硅基流动附件采用保守十进制上限。
49
- - 包含原待发布 0.4.2 网络重试修复;外部消费者从公共 npm 精确安装 0.5.0。
50
-
51
- ## 0.4.2 - 待发布
52
-
53
- - 明确识别 TLS 建立前的断连;安全请求在端点尝试耗尽后按 1、3、8 秒退避恢复,取消可立即结束等待。
54
- - 每次失败重新判定是否可以重试;提交状态不明的写请求停止重放,查询中断继续使用原任务。
55
- - 网络错误附带脱敏端点、连接阶段、耗时与提交状态,便于宿主定位失败。
56
-
57
- ## 0.4.1 - 2026-09-11
58
-
59
- - 修复 KIE GPT Image 2 / 2.5 误带参考生视频标签;保留图片生成、编辑、多图输入与原有请求契约。
60
- - 增加全目录输出模态与视频能力标签一致性回归检查,防止图片模型再次显示视频功能。
61
-
62
- ## 0.4.0 - 2026-09-11
63
-
64
- - 新增硅基流动 LLM 按需入口与四个常用模型预设,支持流式正文、思考和工具调用,复用聊天与模型步骤运行时。
65
- - 硅基流动模型发现支持服务端 chat / embedding / reranker 分类,保留新模型;无效响应不再伪装为空列表。
66
- - DeepSeek 官方默认仍为 V4.1 Flash;硅基流动托管模型使用独立协议与能力标注。
67
-
68
- ## 0.3.0 - 2026-09-11
69
-
70
- - 新增按需文本 Embedding/Rerank 能力:硅基流动、百炼、派欧云、智谱两类入口,以及火山方舟单条文本向量入口;统一向量索引、重排分数、用量与取消,通过宿主 transport/credentials 执行。火山 VikingDB 重排不在本轮范围。
71
-
72
- - 新增 GPT Image 2.5 的 APIMart、KIE、Fal、Grsai 模型及按需入口,默认生成目录从 105 扩展至 109;保留 GPT Image 2 及现有参数和入口。
73
- - DeepSeek 官方默认与唯一推荐模型更新为 `deepseek-flash`(V4.1 Flash),登记图片理解、1M 上下文和 384K 输出,默认使用 Responses;聚合渠道旧模型保持独立。
74
- - 根据供应商分别支持 Flare / Sunburst、官方 / Ext 渠道、1K–4K、质量、透明背景、多图和 Fal 遮罩编辑;不支持的组合在构建请求时明确拒绝。
75
- - 价格区分按张、积分与 token:Fal/APIMart 官方渠道显示输出参考估算,输入另计;Grsai 保留基础充值档估价,并说明大额充值折扣。
76
- - 补充官方字段与响应 fixture、文生图/编辑契约和宿主参数切换回归;未执行付费生成,不代表实测质量、速度或账单。
77
-
78
- ## Unreleased
79
-
80
- ## 0.2.8 - 2026-08-31
81
-
82
- - 正式分发渠道从需要读包凭据的私有 GitHub Packages 迁移到公共 npm;消费项目现在可以直接安装 `@henjicc/ai-sdk`,无需 `.npmrc` 或访问令牌。
83
- - 发布前门禁固定校验 npm 公共 registry、仓库 scope 映射与 `access=public`,并提供显式指定公共源的 `npm run publish:sdk`,避免用户级配置把版本误发回私有源;正式发布仍只由 npm 包维护者手动执行。
84
- - 本次只调整分发与安装契约,不改变 0.2.7 的运行时 API、模型目录、请求协议或宿主能力边界。
85
-
86
- ## 0.2.7 - 2026-08-31
87
-
88
- - ASR 按需能力从百炼 9 个模型扩展到 15 个:新增火山引擎 SeedASR 2.0 文件 submit/query 与二进制实时 WebSocket、硅基流动 SenseVoiceSmall/TeleSpeechASR,以及 Groq Whisper Large v3/Turbo。
89
- - 火山实时协议严格校验 V1 大端二进制帧、sequence、payload size、gzip 与终包语义;文件标准版只接受官方要求的公网 URL,不为本地文件伪造上传能力。
90
- - Groq 与硅基流动使用各自官方 multipart 转写契约并统一输出 `SpeechRecognitionOutput`;Groq `verbose_json` 额外归一化时长、分句和词级时间戳,免费层默认按 25 MB 本地上限保护,消费宿主可按套餐显式调整。
91
- - 新增四个 ASR 独立 exports、官方来源 fixture、协议断牙测试、bundle 隔离、仓外 Vite/Node ESM 与无全局 TextEncoder/TextDecoder 的受限宿主门禁。
92
-
93
- - 默认生成目录从 99 个扩展到 105 个模型,新增六个 Fal 入口:IC-Light v2 重打光,以及 Topaz、Topaz 透明图、SeedVR2、Bria Creative、Ideogram 高清放大;按需工具仍不混入默认目录。
94
- - IC-Light v2 固定单图约 1MP 重打光契约,并提供五档官方初始光照方向;Fal GPT Image 2 新增 `2:1` 比例和显式约 2K 输出档。
95
- - Topaz 图片放大统一为 Precision / Creative / Generative 显式模式路由,按模式裁剪模型、增强和人脸参数;Topaz 计价改为按实时官方输出 MP 阶梯计算,不再将所有超过 48MP 的任务直接估为 `$1.36`。
96
- - Fal 可选图片工具扩展到 12 个:保留 3 个消除工具,新增 6 个重打光、暗光增强、扩图、商品摄影、照片修复、背景移除工具,以及 Qwen、Perspective、FLUX 2 三个多角度工具;提供 3 / 6 / 3 三个聚合 pack 和对应单模型入口。
97
- - 多角度工具分别支持九档离散方位、透视水平/垂直旋转与 FLUX 2 连续水平、垂直、缩放控制;图片实用工具保持单图输入、官方字段限制和独立固定/按 MP 估价。
98
- - 新增可移植的 `StructuredGenerationOutput` / `layer-stack` 响应契约;火山引擎、APIMart、KIE 的 Seedream 5.0 Pro 图层拆分统一解析输出顺序、尺寸、格式、包围盒和原始索引,同时保留供应商原始 metadata。
99
- - Fal 队列提交现在只把 `sync_mode: true` 当作本地直连路由标记;显式 `sync_mode: false` 会继续发送给队列,保证 Pixelcut 等端点返回可持久化 CDN URL。
100
- - Fal 返回或恢复的 `status_url` / `response_url` 必须属于官方 `https://queue.fal.run` 源,拒绝带用户信息或第三方源的任务 URL,且 `invalid_endpoint` 不进入轮询重试,避免 API Key 被外带。
101
- - `continuePolling()` 只解析模型端点,不再为了续查重建并校验完整生成请求体;持久化任务可在没有原始媒体参数时安全恢复轮询。
102
- - 新增 `openai-responses` 模型步骤协议,与 Chat Completions 并存;标准 Responses SSE、usage、失败与取消统一落到既有模型步骤事件和错误契约。
103
- - 预制供应商按“供应商端点 × 具体模型”自动选择协议:DeepSeek、火山引擎、百炼、MiniMax 与智谱国内 GLM-5.3 的已确认组合默认 Responses,聚合网关和未确认模型继续 Chat。
104
- - Anthropic 协议仍未实现,不再向宿主设置界面提供伪选项;自定义未知端点只需在 Chat / Responses 之间选择。
105
- - `LlmProviderSetup` 新增可选 `connectionOverrides`:预设默认继续按具体模型自动路由,只有用户主动修改时才覆盖 API 地址或统一请求协议;供应商身份、凭据槽与模型能力仍保留预设契约。
106
- - 发布门禁同步锁定 105 个默认模型、12 个 Fal 工具、三类工具聚合包以及仓库外 Node ESM、严格 TypeScript、Vite 与受限宿主包回装;fixture/scripted 验证不发起付费供应商请求。
107
-
108
- ## 0.2.6 - 2026-08-28
109
-
110
- - 新增统一的 `PROVIDER_METADATA` 与 `findProviderMetadata(providerId, options)` 公共契约,覆盖全部生成供应商、LLM 预设与 BigModel 国内/国际端点的官网和 API Key 入口。
111
- - 派欧云、KIE、APIMart 的 `websiteUrl` 保留项目已有邀请码,其余供应商使用正常官网;未知自定义供应商返回 `null`,宿主无需复制或猜测链接。
112
- - LLM preset 与 endpoint profile 改为消费统一供应商目录,并更新 Kimi、MiniMax、小米 MiMo、百炼、火山引擎等已变化的控制台入口。
113
-
114
- ## 0.2.5 - 2026-08-28
115
-
116
- - 新增 `LlmProviderSetup` 的 preset/custom 来源契约和 `builtin | user` 生命周期;已有配置字段与工厂参数均保持可选,0.2.4 消费代码无需迁移即可继续运行。
117
- - `createProviderFromPreset()` 现在显式返回稳定 `credentialId` 与 setup 来源,并允许宿主把正式内置记录标为 `builtin`;BigModel cn/global 仍保持区域化 endpoint profile 与凭据隔离。
118
- - 新增 API Key 管理地址规范化与解析:endpoint profile 官方地址优先,其次 preset 官方地址,custom 只接受不含内嵌凭据、长度不超过 2048 的绝对 HTTP(S) URL。
119
-
120
- ## 0.2.4 - 2026-08-28
121
-
122
- - 新增 `@henjicc/ai-sdk/llm/bigmodel` 按需入口:保留 `bigmodel` 中国大陆默认实例,并在同一协议族内提供 `cn/global` 两个端点 profile、独立凭据槽和分区价格。
123
- - 新增 GLM-5.3-Flash 的保守能力目录与 Chat Completions 文件引用、普通 SSE 工具分片支持;结构化输出、`tool_stream` 与 SDK 未实现的 `file_id` 上传保持关闭。
124
- - LLM 原生流式与模型步按 `providerFamilyId` 应用协议规则、按 `credentialId` 取密钥,并拒绝 BigModel 跨区端点或凭据错配。
125
-
126
- 本项目遵循语义化版本。`0.x` 阶段仍可能包含破坏性调整,升级时请先阅读对应版本说明。
127
-
128
- ## 0.2.3 - 2026-08-28
129
-
130
- - 修复 Fun-ASR Realtime 把官方 `sentence_begin=true`、`sentence_end=false`、`text=""` 句首生命周期事件误报为 `invalid_response`;空句首现在继续等待真实文本。
131
- - 保持严格终态:空 final 仍报协议错误,任务全程没有有效 final 时在 `task-finished` 报无有效转写;空 `task-finished.payload` 不覆盖已累计结果。
132
- - 重复 final 只累计并通知一次;补齐官方事件 fixture、用户错误回归、空终态、终态顺序、错误与资源释放断牙测试。
133
-
134
- ## 0.2.2 - 2026-08-28
135
-
136
- - 新增按需入口 `@henjicc/ai-sdk/llm/modules`:外部包、插件与内置 LLM 共用 source-aware 注册、流式/非流式执行、模型发现、取消、drain、namespace 注销和 dispose 生命周期。
137
- - LLM module 复用现有 Chat DTO、Token/ReasoningToken、usage、Abort/timeout、RuntimeContext、日志、trace 与统一 discovery;client 统一发射 Usage/Finish/Done/Error,插件不需要导入 SDK,也没有第二套插件专用执行器。
138
- - module ID 与 provider/model 坐标冲突均拒绝覆盖并列出双方 source;新增 `createGroqLlmModule()`,正式验证外部插件不能遮蔽内置 Groq。
139
- - 新增精确资源/断牙测试、无网络 bundle 隔离门禁,以及远端 Node ESM、strict TypeScript、Vite 和无全局 `TextEncoder` / `TextDecoder` 消费验证。
140
-
141
- ## 0.2.1 - 2026-08-28
142
-
143
- - 修复构建期 ESM specifier 重写漏掉精确 `.` / `..` 目录导入,确保 Node ESM 消费方可直接加载 ASR、实时 ASR、翻译和 Groq 按需入口。
144
- - 发布门禁新增仓库外 Node ESM 实际执行,连同严格 TypeScript、Vite、无全局 `TextEncoder` / `TextDecoder` 与 bundle 隔离一起验证;发布说明将 `0.2.0` 标记为不建议使用。
145
-
146
- ## 0.2.0 - 2026-08-28
147
-
148
- - 新增供应商无关的 ASR、翻译与实时会话能力协议;宿主按需注入 HTTP、实时连接、媒体读取、凭据、日志、Abort 与超时,不依赖 Node/Electron 或浏览器全局 WebSocket。
149
- - 新增 5 个百炼短音频/文件 ASR、4 个百炼实时 ASR、Qwen-MT Flash/Plus/Lite,以及 Groq GPT-OSS 20B 流式聊天、静态默认模型与模型发现入口;具体能力均需从独立子路径显式导入。
150
- - capability descriptor 新增必填 `source.kind/source.namespace`,支持内置/外部/插件所有权、冲突诊断、来源批量卸载和资源释放;module ID、provider/kind/model 坐标与统一 discovery ID 冲突不再静默覆盖。
151
- - **破坏性变更**:百炼 ASR module ID 从 `bailian.<modelId>` 统一为 `bailian.speech-recognition.<modelId>`,SDK 不保留旧 ID 或 `funasr` provider alias;已有宿主持久化数据需一次性迁移。
152
- - 新增 ASR、翻译、Groq 与开放 OCR/custom operation 的穷举/断牙测试及独立 bundle 门禁;所有供应商 fixture 均不含真实密钥,本版本发布验证不发起付费模型请求。
153
-
154
- ## 0.1.8 - 2026-08-28
155
-
156
- - 修复 Photoshop UXP 9.2 缺少全局 `TextDecoder` 时 LLM SSE 无法启动:窄流式入口改用 SDK 内部增量 UTF-8 解码器,不要求宿主注入 DOM 或 Node polyfill。
157
- - UTF-8 解码覆盖中文与 emoji 跨 chunk、畸形/过长/代理项/越界序列的替换字符语义,以及流结束截断尾段 flush;LLM reasoning/text/usage/stop/`[DONE]` 和 Abort 契约不变。
158
- - UXP 门禁不再向 VM 注入 `TextEncoder` / `TextDecoder`,并禁止重新引入直接 `TextDecoder` 构造。
159
-
160
- ## 0.1.7 - 2026-08-28
161
-
162
- - 新增 `@henjicc/ai-sdk/llm/streaming` 受限宿主入口,仅包含原生 OpenAI-compatible SSE、取消、必要类型与错误协议,不静态带入 modelStep、Zod 或 Vercel AI SDK。
163
- - 原生 SSE 补齐 usage 与 finish reason 结果,保持 reasoning/text 事件与旧入口兼容;覆盖 UTF-8 跨 chunk、`[DONE]`、供应商错误与 Abort。
164
- - 新增关闭 tree-shaking 的 UXP LLM IIFE/ESM 发布门禁,禁止动态代码生成、Node 全局与非必需 Streams polyfill。
165
-
166
- ## 0.1.6 - 2026-08-28
167
-
168
- - APIMart Nano Banana 2、Lite、Pro 新增常规/官方双渠道,保持常规渠道为默认,并按渠道切换精确模型 ID 与估价。
169
- - APIMart Seedream 5 Pro 补齐官方合法的 `2:1` / `1:2`;Pro/Lite 对列表外比例显式报错,不再静默降级 1:1。
170
- - Fal Seedream 5 Pro/Lite、Qwen Image 3、GPT Image 2、Z-Image 补齐通用比例与显式约 1MP 请求档;GPT Image 2 补齐 `quality=auto`,所有 0.1.5 默认保持不变。
171
- - 补齐 Photoshop adapter 迁移交接;APIMart Midjourney、Z-Image、GPT Image 2 与 Fal Nano 隐藏默认经官方契约核证后维持现实现。
172
-
173
- ## 0.1.5 - 2026-08-28
174
-
175
- - 新增零内置依赖的 `generation/core`、99 个完整单模型 pack、8 个 provider adapter/pack;默认
176
- `generation` 仍保持 99 模型兼容行为。
177
- - 新增 provider-scoped 媒体预处理/上传策略,完整 pack 可独立完成媒体读取、上传与生成生命周期。
178
- - 新增开放 capability module 协议,支持 ASR/OCR 等非媒体生成能力按模块注册、发现、类型化执行与取消。
179
- - 新增 3 个不进入默认目录的 Fal 图像消除单模型 pack 与聚合 `tool-packs/fal-image-edit-tools`,复用同一
180
- Fal 上传、队列、轮询、错误与取消内核。
181
- - 新增跨 generation、LLM 与开放扩展的统一能力画像和组合筛选;筛选只作用于宿主已导入候选,
182
- 静态最小化仍由单模型、供应商或模型集合 pack 的 import 边界决定。
183
-
184
- ## 0.1.4 - 2026-08-27
185
-
186
- - 新增 `@henjicc/ai-sdk/generation` 与 `createGenerationClient`,复用根客户端唯一生成内核,不静态带入 LLM/Vercel AI SDK。
187
- - 新增 generation IIFE/VM 发布门禁:99 模型目录与零网络生命周期通过,禁止 Node、动态代码生成、global fetch、Streams、File、`btoa`/`atob` 等受限宿主风险。
188
- - Fal CDN 上传改为全程使用 `RuntimeContext.transport` 的 REST initiate + signed PUT,不再依赖 `@fal-ai/client` 或构造 `File`;补齐成功、失败、取消 fixture。
189
- - 保留 `uploadToFal(apiKey, prepared)` 两参数兼容调用;新宿主应显式传 Transport 或使用生成客户端。
190
-
191
- ## 0.1.3 - 2026-08-27
192
-
193
- - 修复 Fal 队列任务在提交 alias 与状态查询 canonical route 不一致时轮询失败:优先保存供应商返回的完整 `status_url`,仅缺失时才按 `request_id` 重建。
194
- - 完整 `status_url` 轮询完成后仍还原纯 request id,避免状态 URL 被媒体结果收集器误判为生成结果。
195
- - KIE/Fal Seedream 4.0、4.5 四个历史 override 已完成真实供应商单张最小规格验证;KIE/APIMart/PPIO 只读连通性与 KIE/APIMart 设置页余额展示已完成正式 Electron 验证。
196
-
197
- ## 0.1.2 - 2026-08-27
198
-
199
- - 修复发布包在标准 Vite 开发模式下无法解析:五个 `exports` 入口不再优先指向未随包发布的 `src/`,统一解析到已发布的 `dist/` ESM 与类型声明。
200
- - 发布前门禁新增仓库外临时消费方的标准 Vite dev server 解析回归,覆盖包根及四个子路径入口,防止再次发布只在 monorepo 内可用的条件导出。
201
-
202
- ## 0.1.1 - 2026-08-27
203
-
204
- - 新增 Electron、Tauri、UXP 接入指南,以及供应商域名与错误处理参考。
205
- - 新增 `minimal-node`、`form-renderer`、`llm-chat` 三个可构建示例。
206
- - 重写快速开始,补齐 GitHub Packages 私有安装、四项宿主接口注入和生成/轮询示例。
207
-
208
- - 不改变 `0.1.0` 的运行时 API;此补丁版用于交付完整指南、示例与已知限制。
209
-
210
- ## 0.1.0 - 2026-08-27
211
-
212
- - 首次私有发布到 GitHub Packages:`@henjicc/ai-sdk`。
213
- - 提供 8 个生成供应商、99 个模型目录、媒体上传预处理与统一 `createAIClient` 入口。
214
- - 提供 OpenAI-compatible LLM 流式执行与模型步能力。
215
- - 提供 5 个 ESM 导出入口、完整 TypeScript 类型声明及模型/LLM 适配文档。
216
- - 产物保留源码模块结构,不预打成单文件,供 UXP、Tauri 与现代 Node 打包器静态分析和 tree-shaking。
217
-
218
- 迁移说明:这是首次发布,无历史 npm 版本需要迁移;仓库内原占位导入名 `@henji/ai-sdk` 已统一改为 `@henjicc/ai-sdk`。
26
+
27
+ ## 0.6.2 - 2026-09-24
28
+
29
+ - 完善聊天与翻译 SSE 的事件边界和完成状态校验:保留合法空中间帧、用量与状态通知,提前结束、服务端错误和无效终态不再伪装成功;保留翻译增量/累积协议差异。
30
+ - 修复百炼实时 ASR 字段校验、Qwen 中间文字拼接和状态通知处理;保留 0.6.1 空中间帧兼容,诊断包含实际模型、协议及失败阶段。
31
+ - 收口共享实时会话的取消、超时、后台故障通知和资源释放;SDK 会话提供可选 result promise,旧自定义会话仍兼容。握手清理失败保留首个故障,火山服务错误默认脱敏。
32
+ - 阻止聊天及火山实时识别在取消后继续派发同一帧的后续结果;明确智谱推理网络错误与上下文截断,扩展通知不冒充完成证据。
33
+ - 增加脱敏事件序列回归并执行修复撤销验证,更新聊天示例的合法结束帧。未改变供应商配额、网络稳定性或模型识别质量。
34
+
35
+ ## 0.6.1 - 2026-09-24
36
+
37
+ - 修复百炼 Fun Duplex 实时识别把无句首标记的空文本中间帧误判为无效响应的问题;覆盖 Qwen Audio 3.1 streaming 与 Fun-ASR 共享协议。
38
+ - 保持缺失文字字段、空最终结果、全程无有效 final 的严格校验及连接释放。
39
+
40
+ ## 0.6.0 - 2026-09-24
41
+
42
+ - 新增 MiMo 2.6 Pro / Flash / Pro-UltraSpeed 能力;默认推荐 Pro / Flash,保留 2.5 ID(官方计划 10 月 21 日下线),不自动替换用户选择。
43
+ - MiMo Chat / Responses 思考字段分离,兼容完整 reasoning_text 事件及历史思考回传,流中断不再伪装完成。
44
+ - 新增大陆 GLM-5.3-FlashX 与官方价格;Flash / FlashX 开放 JSON 输出并保留思考。
45
+ - 新增 KIE HappyHorse 1.1 文生、图生、多图参考模式,以及火山 Seedream 5.0 Flash 生成/编辑和图层拆分;价格按最新官方单价。
46
+ - 百炼新增 Qwen-Audio 3.1 短音频、文件与实时 ASR,支持方言/即时热词与说话人输出;修复短音频 JSON 回退、上下文字段及文件声道数组。
47
+ - Kimi K3 资料补齐缓存写入 TTL 价格。新增公开入口保持向后兼容,既有外部 ASR 消费方从 0.2.x 升级仍须满足 0.5.0 的宿主流式上传要求。
48
+
49
+
50
+ ## 0.5.2 - 2026-09-21
51
+
52
+ - `llm/streaming` 新增有类型定义的文本、JSON Object 与 JSON Schema 输出配置,并把它正式写入 Chat Completions 的 `response_format`。
53
+ - 模型能力现在可声明结构化输出与思考模式能否并用;不支持或尚未核实的组合在网络请求前返回可解析错误码,Groq 流式 JSON Schema 按官方限制明确拒绝。
54
+ - 新增 `maxOutputTokens`,OpenAI/Groq/MiMo 使用 `max_completion_tokens`,其余兼容端点沿用 `max_tokens`;省略时不再强制 4096,流结束用 `truncated` 标记 token 上限截断。
55
+ - 最终发送体复用正式构建结果,`onRequestBuilt` 只收到观察快照;保留正文/思考分流、AbortSignal、可选总时限与轻量受限宿主边界。
56
+
57
+ ## 0.5.1 - 2026-09-21
58
+
59
+ - Grsai GPT Image 2.5 默认变体从维护中的 Flare 切换为可用的 Standard;显式 Flare/Sunburst 参数保持兼容,等待官方恢复公告。
60
+ - 默认请求体与默认价格估算同步使用 Standard,避免界面未选择变体时仍把任务提交到维护通道。
61
+
62
+ ## 0.5.0 - 2026-09-21
63
+
64
+ - 文件 ASR 支持分块 JSON/Base64 与 multipart,请求体不重组整文件;支持结构化大小错误、PCM 时长估算及取消清理。
65
+ - **迁移要求**:百炼异步本地文件需宿主 transport.uploadFile 原生直传 OSS,不再走媒体读取通道。其他流式路径需 describe/readChunk + fetchStream;旧 read 路径保留但不得放宽内存保护。
66
+ - 修复上传凭证字符串大小限制漏检,采用官方临时上传 1 GB 上限;Qwen 按编码后 10 MB 预检,Groq/硅基流动附件采用保守十进制上限。
67
+ - 包含原待发布 0.4.2 网络重试修复;外部消费者从公共 npm 精确安装 0.5.0。
68
+
69
+ ## 0.4.2 - 待发布
70
+
71
+
72
+ - 根入口补充导出既有的百炼、火山引擎、硅基流动与 Groq 语音识别模块,兼容经典 Node 模块解析的 Electron 宿主;原有按需子路径保持不变。
73
+ - 明确识别 TLS 建立前的断连;安全请求在端点尝试耗尽后按 1、3、8 秒退避恢复,取消可立即结束等待。
74
+ - 每次失败重新判定是否可以重试;提交状态不明的写请求停止重放,查询中断继续使用原任务。
75
+ - 网络错误附带脱敏端点、连接阶段、耗时与提交状态,便于宿主定位失败。
76
+
77
+ ## 0.4.1 - 2026-09-11
78
+
79
+ - 修复 KIE GPT Image 2 / 2.5 误带参考生视频标签;保留图片生成、编辑、多图输入与原有请求契约。
80
+ - 增加全目录输出模态与视频能力标签一致性回归检查,防止图片模型再次显示视频功能。
81
+
82
+ ## 0.4.0 - 2026-09-11
83
+
84
+ - 新增硅基流动 LLM 按需入口与四个常用模型预设,支持流式正文、思考和工具调用,复用聊天与模型步骤运行时。
85
+ - 硅基流动模型发现支持服务端 chat / embedding / reranker 分类,保留新模型;无效响应不再伪装为空列表。
86
+ - DeepSeek 官方默认仍为 V4.1 Flash;硅基流动托管模型使用独立协议与能力标注。
87
+
88
+ ## 0.3.0 - 2026-09-11
89
+
90
+ - 新增按需文本 Embedding/Rerank 能力:硅基流动、百炼、派欧云、智谱两类入口,以及火山方舟单条文本向量入口;统一向量索引、重排分数、用量与取消,通过宿主 transport/credentials 执行。火山 VikingDB 重排不在本轮范围。
91
+
92
+ - 新增 GPT Image 2.5 的 APIMart、KIE、Fal、Grsai 模型及按需入口,默认生成目录从 105 扩展至 109;保留 GPT Image 2 及现有参数和入口。
93
+ - DeepSeek 官方默认与唯一推荐模型更新为 `deepseek-flash`(V4.1 Flash),登记图片理解、1M 上下文和 384K 输出,默认使用 Responses;聚合渠道旧模型保持独立。
94
+ - 根据供应商分别支持 Flare / Sunburst、官方 / Ext 渠道、1K–4K、质量、透明背景、多图和 Fal 遮罩编辑;不支持的组合在构建请求时明确拒绝。
95
+ - 价格区分按张、积分与 token:Fal/APIMart 官方渠道显示输出参考估算,输入另计;Grsai 保留基础充值档估价,并说明大额充值折扣。
96
+ - 补充官方字段与响应 fixture、文生图/编辑契约和宿主参数切换回归;未执行付费生成,不代表实测质量、速度或账单。
97
+
98
+ ## Unreleased
99
+
100
+ ## 0.2.8 - 2026-08-31
101
+
102
+ - 正式分发渠道从需要读包凭据的私有 GitHub Packages 迁移到公共 npm;消费项目现在可以直接安装 `@henjicc/ai-sdk`,无需 `.npmrc` 或访问令牌。
103
+ - 发布前门禁固定校验 npm 公共 registry、仓库 scope 映射与 `access=public`,并提供显式指定公共源的 `npm run publish:sdk`,避免用户级配置把版本误发回私有源;正式发布仍只由 npm 包维护者手动执行。
104
+ - 本次只调整分发与安装契约,不改变 0.2.7 的运行时 API、模型目录、请求协议或宿主能力边界。
105
+
106
+ ## 0.2.7 - 2026-08-31
107
+
108
+ - ASR 按需能力从百炼 9 个模型扩展到 15 个:新增火山引擎 SeedASR 2.0 文件 submit/query 与二进制实时 WebSocket、硅基流动 SenseVoiceSmall/TeleSpeechASR,以及 Groq Whisper Large v3/Turbo。
109
+ - 火山实时协议严格校验 V1 大端二进制帧、sequence、payload size、gzip 与终包语义;文件标准版只接受官方要求的公网 URL,不为本地文件伪造上传能力。
110
+ - Groq 与硅基流动使用各自官方 multipart 转写契约并统一输出 `SpeechRecognitionOutput`;Groq `verbose_json` 额外归一化时长、分句和词级时间戳,免费层默认按 25 MB 本地上限保护,消费宿主可按套餐显式调整。
111
+ - 新增四个 ASR 独立 exports、官方来源 fixture、协议断牙测试、bundle 隔离、仓外 Vite/Node ESM 与无全局 TextEncoder/TextDecoder 的受限宿主门禁。
112
+
113
+ - 默认生成目录从 99 个扩展到 105 个模型,新增六个 Fal 入口:IC-Light v2 重打光,以及 Topaz、Topaz 透明图、SeedVR2、Bria Creative、Ideogram 高清放大;按需工具仍不混入默认目录。
114
+ - IC-Light v2 固定单图约 1MP 重打光契约,并提供五档官方初始光照方向;Fal GPT Image 2 新增 `2:1` 比例和显式约 2K 输出档。
115
+ - Topaz 图片放大统一为 Precision / Creative / Generative 显式模式路由,按模式裁剪模型、增强和人脸参数;Topaz 计价改为按实时官方输出 MP 阶梯计算,不再将所有超过 48MP 的任务直接估为 `$1.36`。
116
+ - Fal 可选图片工具扩展到 12 个:保留 3 个消除工具,新增 6 个重打光、暗光增强、扩图、商品摄影、照片修复、背景移除工具,以及 Qwen、Perspective、FLUX 2 三个多角度工具;提供 3 / 6 / 3 三个聚合 pack 和对应单模型入口。
117
+ - 多角度工具分别支持九档离散方位、透视水平/垂直旋转与 FLUX 2 连续水平、垂直、缩放控制;图片实用工具保持单图输入、官方字段限制和独立固定/按 MP 估价。
118
+ - 新增可移植的 `StructuredGenerationOutput` / `layer-stack` 响应契约;火山引擎、APIMart、KIE 的 Seedream 5.0 Pro 图层拆分统一解析输出顺序、尺寸、格式、包围盒和原始索引,同时保留供应商原始 metadata。
119
+ - Fal 队列提交现在只把 `sync_mode: true` 当作本地直连路由标记;显式 `sync_mode: false` 会继续发送给队列,保证 Pixelcut 等端点返回可持久化 CDN URL。
120
+ - Fal 返回或恢复的 `status_url` / `response_url` 必须属于官方 `https://queue.fal.run` 源,拒绝带用户信息或第三方源的任务 URL,且 `invalid_endpoint` 不进入轮询重试,避免 API Key 被外带。
121
+ - `continuePolling()` 只解析模型端点,不再为了续查重建并校验完整生成请求体;持久化任务可在没有原始媒体参数时安全恢复轮询。
122
+ - 新增 `openai-responses` 模型步骤协议,与 Chat Completions 并存;标准 Responses SSE、usage、失败与取消统一落到既有模型步骤事件和错误契约。
123
+ - 预制供应商按“供应商端点 × 具体模型”自动选择协议:DeepSeek、火山引擎、百炼、MiniMax 与智谱国内 GLM-5.3 的已确认组合默认 Responses,聚合网关和未确认模型继续 Chat。
124
+ - Anthropic 协议仍未实现,不再向宿主设置界面提供伪选项;自定义未知端点只需在 Chat / Responses 之间选择。
125
+ - `LlmProviderSetup` 新增可选 `connectionOverrides`:预设默认继续按具体模型自动路由,只有用户主动修改时才覆盖 API 地址或统一请求协议;供应商身份、凭据槽与模型能力仍保留预设契约。
126
+ - 发布门禁同步锁定 105 个默认模型、12 个 Fal 工具、三类工具聚合包以及仓库外 Node ESM、严格 TypeScript、Vite 与受限宿主包回装;fixture/scripted 验证不发起付费供应商请求。
127
+
128
+ ## 0.2.6 - 2026-08-28
129
+
130
+ - 新增统一的 `PROVIDER_METADATA` 与 `findProviderMetadata(providerId, options)` 公共契约,覆盖全部生成供应商、LLM 预设与 BigModel 国内/国际端点的官网和 API Key 入口。
131
+ - 派欧云、KIE、APIMart 的 `websiteUrl` 保留项目已有邀请码,其余供应商使用正常官网;未知自定义供应商返回 `null`,宿主无需复制或猜测链接。
132
+ - LLM preset 与 endpoint profile 改为消费统一供应商目录,并更新 Kimi、MiniMax、小米 MiMo、百炼、火山引擎等已变化的控制台入口。
133
+
134
+ ## 0.2.5 - 2026-08-28
135
+
136
+ - 新增 `LlmProviderSetup` 的 preset/custom 来源契约和 `builtin | user` 生命周期;已有配置字段与工厂参数均保持可选,0.2.4 消费代码无需迁移即可继续运行。
137
+ - `createProviderFromPreset()` 现在显式返回稳定 `credentialId` 与 setup 来源,并允许宿主把正式内置记录标为 `builtin`;BigModel cn/global 仍保持区域化 endpoint profile 与凭据隔离。
138
+ - 新增 API Key 管理地址规范化与解析:endpoint profile 官方地址优先,其次 preset 官方地址,custom 只接受不含内嵌凭据、长度不超过 2048 的绝对 HTTP(S) URL。
139
+
140
+ ## 0.2.4 - 2026-08-28
141
+
142
+ - 新增 `@henjicc/ai-sdk/llm/bigmodel` 按需入口:保留 `bigmodel` 中国大陆默认实例,并在同一协议族内提供 `cn/global` 两个端点 profile、独立凭据槽和分区价格。
143
+ - 新增 GLM-5.3-Flash 的保守能力目录与 Chat Completions 文件引用、普通 SSE 工具分片支持;结构化输出、`tool_stream` 与 SDK 未实现的 `file_id` 上传保持关闭。
144
+ - LLM 原生流式与模型步按 `providerFamilyId` 应用协议规则、按 `credentialId` 取密钥,并拒绝 BigModel 跨区端点或凭据错配。
145
+
146
+ 本项目遵循语义化版本。`0.x` 阶段仍可能包含破坏性调整,升级时请先阅读对应版本说明。
147
+
148
+ ## 0.2.3 - 2026-08-28
149
+
150
+ - 修复 Fun-ASR Realtime 把官方 `sentence_begin=true`、`sentence_end=false`、`text=""` 句首生命周期事件误报为 `invalid_response`;空句首现在继续等待真实文本。
151
+ - 保持严格终态:空 final 仍报协议错误,任务全程没有有效 final 时在 `task-finished` 报无有效转写;空 `task-finished.payload` 不覆盖已累计结果。
152
+ - 重复 final 只累计并通知一次;补齐官方事件 fixture、用户错误回归、空终态、终态顺序、错误与资源释放断牙测试。
153
+
154
+ ## 0.2.2 - 2026-08-28
155
+
156
+ - 新增按需入口 `@henjicc/ai-sdk/llm/modules`:外部包、插件与内置 LLM 共用 source-aware 注册、流式/非流式执行、模型发现、取消、drain、namespace 注销和 dispose 生命周期。
157
+ - LLM module 复用现有 Chat DTO、Token/ReasoningToken、usage、Abort/timeout、RuntimeContext、日志、trace 与统一 discovery;client 统一发射 Usage/Finish/Done/Error,插件不需要导入 SDK,也没有第二套插件专用执行器。
158
+ - module ID 与 provider/model 坐标冲突均拒绝覆盖并列出双方 source;新增 `createGroqLlmModule()`,正式验证外部插件不能遮蔽内置 Groq。
159
+ - 新增精确资源/断牙测试、无网络 bundle 隔离门禁,以及远端 Node ESM、strict TypeScript、Vite 和无全局 `TextEncoder` / `TextDecoder` 消费验证。
160
+
161
+ ## 0.2.1 - 2026-08-28
162
+
163
+ - 修复构建期 ESM specifier 重写漏掉精确 `.` / `..` 目录导入,确保 Node ESM 消费方可直接加载 ASR、实时 ASR、翻译和 Groq 按需入口。
164
+ - 发布门禁新增仓库外 Node ESM 实际执行,连同严格 TypeScript、Vite、无全局 `TextEncoder` / `TextDecoder` 与 bundle 隔离一起验证;发布说明将 `0.2.0` 标记为不建议使用。
165
+
166
+ ## 0.2.0 - 2026-08-28
167
+
168
+ - 新增供应商无关的 ASR、翻译与实时会话能力协议;宿主按需注入 HTTP、实时连接、媒体读取、凭据、日志、Abort 与超时,不依赖 Node/Electron 或浏览器全局 WebSocket。
169
+ - 新增 5 个百炼短音频/文件 ASR、4 个百炼实时 ASR、Qwen-MT Flash/Plus/Lite,以及 Groq GPT-OSS 20B 流式聊天、静态默认模型与模型发现入口;具体能力均需从独立子路径显式导入。
170
+ - capability descriptor 新增必填 `source.kind/source.namespace`,支持内置/外部/插件所有权、冲突诊断、来源批量卸载和资源释放;module ID、provider/kind/model 坐标与统一 discovery ID 冲突不再静默覆盖。
171
+ - **破坏性变更**:百炼 ASR module ID 从 `bailian.<modelId>` 统一为 `bailian.speech-recognition.<modelId>`,SDK 不保留旧 ID 或 `funasr` provider alias;已有宿主持久化数据需一次性迁移。
172
+ - 新增 ASR、翻译、Groq 与开放 OCR/custom operation 的穷举/断牙测试及独立 bundle 门禁;所有供应商 fixture 均不含真实密钥,本版本发布验证不发起付费模型请求。
173
+
174
+ ## 0.1.8 - 2026-08-28
175
+
176
+ - 修复 Photoshop UXP 9.2 缺少全局 `TextDecoder` 时 LLM SSE 无法启动:窄流式入口改用 SDK 内部增量 UTF-8 解码器,不要求宿主注入 DOM 或 Node polyfill。
177
+ - UTF-8 解码覆盖中文与 emoji 跨 chunk、畸形/过长/代理项/越界序列的替换字符语义,以及流结束截断尾段 flush;LLM reasoning/text/usage/stop/`[DONE]` 和 Abort 契约不变。
178
+ - UXP 门禁不再向 VM 注入 `TextEncoder` / `TextDecoder`,并禁止重新引入直接 `TextDecoder` 构造。
179
+
180
+ ## 0.1.7 - 2026-08-28
181
+
182
+ - 新增 `@henjicc/ai-sdk/llm/streaming` 受限宿主入口,仅包含原生 OpenAI-compatible SSE、取消、必要类型与错误协议,不静态带入 modelStep、Zod 或 Vercel AI SDK。
183
+ - 原生 SSE 补齐 usage 与 finish reason 结果,保持 reasoning/text 事件与旧入口兼容;覆盖 UTF-8 跨 chunk、`[DONE]`、供应商错误与 Abort。
184
+ - 新增关闭 tree-shaking 的 UXP LLM IIFE/ESM 发布门禁,禁止动态代码生成、Node 全局与非必需 Streams polyfill。
185
+
186
+ ## 0.1.6 - 2026-08-28
187
+
188
+ - APIMart Nano Banana 2、Lite、Pro 新增常规/官方双渠道,保持常规渠道为默认,并按渠道切换精确模型 ID 与估价。
189
+ - APIMart Seedream 5 Pro 补齐官方合法的 `2:1` / `1:2`;Pro/Lite 对列表外比例显式报错,不再静默降级 1:1。
190
+ - Fal Seedream 5 Pro/Lite、Qwen Image 3、GPT Image 2、Z-Image 补齐通用比例与显式约 1MP 请求档;GPT Image 2 补齐 `quality=auto`,所有 0.1.5 默认保持不变。
191
+ - 补齐 Photoshop adapter 迁移交接;APIMart Midjourney、Z-Image、GPT Image 2 与 Fal Nano 隐藏默认经官方契约核证后维持现实现。
192
+
193
+ ## 0.1.5 - 2026-08-28
194
+
195
+ - 新增零内置依赖的 `generation/core`、99 个完整单模型 pack、8 个 provider adapter/pack;默认
196
+ `generation` 仍保持 99 模型兼容行为。
197
+ - 新增 provider-scoped 媒体预处理/上传策略,完整 pack 可独立完成媒体读取、上传与生成生命周期。
198
+ - 新增开放 capability module 协议,支持 ASR/OCR 等非媒体生成能力按模块注册、发现、类型化执行与取消。
199
+ - 新增 3 个不进入默认目录的 Fal 图像消除单模型 pack 与聚合 `tool-packs/fal-image-edit-tools`,复用同一
200
+ Fal 上传、队列、轮询、错误与取消内核。
201
+ - 新增跨 generation、LLM 与开放扩展的统一能力画像和组合筛选;筛选只作用于宿主已导入候选,
202
+ 静态最小化仍由单模型、供应商或模型集合 pack 的 import 边界决定。
203
+
204
+ ## 0.1.4 - 2026-08-27
205
+
206
+ - 新增 `@henjicc/ai-sdk/generation` 与 `createGenerationClient`,复用根客户端唯一生成内核,不静态带入 LLM/Vercel AI SDK。
207
+ - 新增 generation IIFE/VM 发布门禁:99 模型目录与零网络生命周期通过,禁止 Node、动态代码生成、global fetch、Streams、File、`btoa`/`atob` 等受限宿主风险。
208
+ - Fal CDN 上传改为全程使用 `RuntimeContext.transport` 的 REST initiate + signed PUT,不再依赖 `@fal-ai/client` 或构造 `File`;补齐成功、失败、取消 fixture。
209
+ - 保留 `uploadToFal(apiKey, prepared)` 两参数兼容调用;新宿主应显式传 Transport 或使用生成客户端。
210
+
211
+ ## 0.1.3 - 2026-08-27
212
+
213
+ - 修复 Fal 队列任务在提交 alias 与状态查询 canonical route 不一致时轮询失败:优先保存供应商返回的完整 `status_url`,仅缺失时才按 `request_id` 重建。
214
+ - 完整 `status_url` 轮询完成后仍还原纯 request id,避免状态 URL 被媒体结果收集器误判为生成结果。
215
+ - KIE/Fal Seedream 4.0、4.5 四个历史 override 已完成真实供应商单张最小规格验证;KIE/APIMart/PPIO 只读连通性与 KIE/APIMart 设置页余额展示已完成正式 Electron 验证。
216
+
217
+ ## 0.1.2 - 2026-08-27
218
+
219
+ - 修复发布包在标准 Vite 开发模式下无法解析:五个 `exports` 入口不再优先指向未随包发布的 `src/`,统一解析到已发布的 `dist/` ESM 与类型声明。
220
+ - 发布前门禁新增仓库外临时消费方的标准 Vite dev server 解析回归,覆盖包根及四个子路径入口,防止再次发布只在 monorepo 内可用的条件导出。
221
+
222
+ ## 0.1.1 - 2026-08-27
223
+
224
+ - 新增 Electron、Tauri、UXP 接入指南,以及供应商域名与错误处理参考。
225
+ - 新增 `minimal-node`、`form-renderer`、`llm-chat` 三个可构建示例。
226
+ - 重写快速开始,补齐 GitHub Packages 私有安装、四项宿主接口注入和生成/轮询示例。
227
+
228
+ - 不改变 `0.1.0` 的运行时 API;此补丁版用于交付完整指南、示例与已知限制。
229
+
230
+ ## 0.1.0 - 2026-08-27
231
+
232
+ - 首次私有发布到 GitHub Packages:`@henjicc/ai-sdk`。
233
+ - 提供 8 个生成供应商、99 个模型目录、媒体上传预处理与统一 `createAIClient` 入口。
234
+ - 提供 OpenAI-compatible LLM 流式执行与模型步能力。
235
+ - 提供 5 个 ESM 导出入口、完整 TypeScript 类型声明及模型/LLM 适配文档。
236
+ - 产物保留源码模块结构,不预打成单文件,供 UXP、Tauri 与现代 Node 打包器静态分析和 tree-shaking。
237
+
238
+ 迁移说明:这是首次发布,无历史 npm 版本需要迁移;仓库内原占位导入名 `@henji/ai-sdk` 已统一改为 `@henjicc/ai-sdk`。
package/README.md CHANGED
@@ -48,10 +48,10 @@ try {
48
48
 
49
49
  百炼工厂必须传 `baseUrl` 为实际地域/工作空间的 API 根地址,不包含端点路径。其他供应商可以覆盖根地址与 `credentialId`;SDK 不自动切换地域或账号。不同模型的向量不能混用;切换模型通常需要重建向量索引。Rerank 分数仅在本次请求内比较。
50
50
 
51
- SDK `0.7.0` 的正式分发渠道为公共 npm,无需配置 registry 或访问令牌:
51
+ SDK `0.9.0` 的正式分发渠道为公共 npm,无需配置 registry 或访问令牌:
52
52
 
53
53
  ```bash
54
- npm install @henjicc/ai-sdk@0.7.0
54
+ npm install @henjicc/ai-sdk@0.9.0
55
55
  ```
56
56
 
57
57
  然后提供 4 个宿主能力(`Transport` / `CredentialStore` / `MediaReader` / `Logger`),创建客户端:
@@ -172,19 +172,32 @@ async function wait(ms, context) {
172
172
  });
173
173
  }
174
174
  async function executeFile(preset, input, apiKey, apiBaseUrl, uploadBaseUrl, config, context) {
175
- const audio = await resolveAsyncAudioUrl(input.audio, preset.modelId, apiKey, uploadBaseUrl, context);
176
- const asyncInput = preset.asyncInputField === 'file_urls' ? { file_urls: [audio.url] } : { file_url: audio.url };
177
- const headers = {
178
- Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json', 'X-DashScope-Async': 'enable',
179
- };
180
- if (audio.usesOss)
181
- headers['X-DashScope-OssResourceResolve'] = 'enable';
182
- const submitResponse = await context.runtime.transport.fetch(`${apiBaseUrl}/services/audio/asr/transcription`, {
183
- method: 'POST', headers,
184
- body: JSON.stringify({ model: preset.modelId, input: asyncInput, parameters: asyncParameters(preset, input, providerOptions(input)) }),
185
- signal: context.signal,
186
- });
187
- const submitted = parseTaskState(await responseJson(submitResponse, 'file ASR submit'));
175
+ const resumeTaskId = providerOptions(input).resumeTaskId;
176
+ let submitted;
177
+ if (resumeTaskId !== undefined) {
178
+ if (typeof resumeTaskId !== 'string' || !/^[a-zA-Z0-9_-]{1,256}$/.test(resumeTaskId))
179
+ throw new AiRuntimeError('invalid_parameter', 'Invalid ASR resume task ID');
180
+ const response = await context.runtime.transport.fetch(`${apiBaseUrl}/tasks/${encodeURIComponent(resumeTaskId)}`, { headers: { Authorization: `Bearer ${apiKey}` }, signal: context.signal });
181
+ submitted = parseTaskState(await responseJson(response, 'file ASR resume'));
182
+ if (submitted.taskId && submitted.taskId !== resumeTaskId)
183
+ throw new AiRuntimeError('invalid_response', 'ASR resume returned a different task');
184
+ submitted = { ...submitted, taskId: resumeTaskId };
185
+ }
186
+ else {
187
+ const audio = await resolveAsyncAudioUrl(input.audio, preset.modelId, apiKey, uploadBaseUrl, context);
188
+ const asyncInput = preset.asyncInputField === 'file_urls' ? { file_urls: [audio.url] } : { file_url: audio.url };
189
+ const headers = {
190
+ Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json', 'X-DashScope-Async': 'enable',
191
+ };
192
+ if (audio.usesOss)
193
+ headers['X-DashScope-OssResourceResolve'] = 'enable';
194
+ const submitResponse = await context.runtime.transport.fetch(`${apiBaseUrl}/services/audio/asr/transcription`, {
195
+ method: 'POST', headers,
196
+ body: JSON.stringify({ model: preset.modelId, input: asyncInput, parameters: asyncParameters(preset, input, providerOptions(input)) }),
197
+ signal: context.signal,
198
+ });
199
+ submitted = parseTaskState(await responseJson(submitResponse, 'file ASR submit'));
200
+ }
188
201
  const taskId = submitted.taskId;
189
202
  if (!taskId)
190
203
  throw new AiRuntimeError('invalid_response', 'Bailian file ASR submit response has no task_id');
@@ -223,9 +236,11 @@ export function createBailianAsrModule(preset, options = {}) {
223
236
  maxPollingMs: options.maxPollingMs ?? 30 * 60_000,
224
237
  };
225
238
  return {
226
- descriptor: preset.descriptor,
239
+ descriptor: preset.protocol === 'fun-short-sse' || preset.protocol === 'qwen-short' ? preset.descriptor : { ...preset.descriptor, features: [...preset.descriptor.features ?? [], 'resume-task'] },
227
240
  execute: async (input, context) => {
228
241
  checkAbort(context);
242
+ if (providerOptions(input).resumeTaskId !== undefined && (preset.protocol === 'fun-short-sse' || preset.protocol === 'qwen-short'))
243
+ throw new AiRuntimeError('unsupported_operation', 'Short ASR cannot resume a file task');
229
244
  const apiKey = await credential(context);
230
245
  if (preset.protocol === 'fun-short-sse') {
231
246
  return await executeFunShort(preset, input, apiKey, apiBaseUrl, context);
@@ -1,4 +1,6 @@
1
1
  export interface BailianAsrOptions {
2
+ /** Resume polling an existing file task without reading/uploading/submitting audio. */
3
+ resumeTaskId?: string;
2
4
  format?: string;
3
5
  sampleRateHz?: number;
4
6
  enableItn?: boolean;