dsh-grok-provider 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.5 - 2026-08-28
4
+
5
+ - Bind Trusted Publisher runs to the exact stable tag ref and peeled commit, require one non-draft/non-prerelease GitHub Release asset with the exact package filename, and pin the publishing runtime to Node.js `24.19.0`.
6
+ - Project model input modalities into the account dashboard so exact `grok-4.6` visibly advertises image input while text-only models do not.
7
+ - Make provider installation transactional: partial authentication and adapter registrations are rolled back when a later installation step fails, while successful disposal remains idempotent and best-effort.
8
+ - Correct release-state and streaming-deadline documentation without changing authentication, endpoints, image compilation, or Responses wire behavior.
9
+ - Keep Web/X Search, image generation, URL downloads, API-key mode, and new SSE event handling outside this maintenance release.
10
+
3
11
  ## 0.1.4 - 2026-08-28
4
12
 
5
13
  - Add an asynchronous Responses request compiler for bounded jpeg/png image input from the optional Harness attachment store.
package/README.en.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Use an already authenticated official Grok Build account from DeepSeek Harness, with dynamic model discovery, streaming reasoning, tool calls, and an account quota/model capability dashboard.
6
6
 
7
- > Unofficial community project; not affiliated with xAI or DeepSeek Harness. The current source version is `0.1.4`; the published stable version is whatever the npm Registry currently assigns to `latest`. The project no longer publishes prereleases; stable defects are fixed in a new incremented stable version.
7
+ > Unofficial community project; not affiliated with xAI or DeepSeek Harness. The current source version is `0.1.5`; the published stable version is whatever the npm Registry currently assigns to `latest`. The project no longer publishes prereleases; stable defects are fixed in a new incremented stable version.
8
8
 
9
9
  ## What it provides
10
10
 
@@ -39,10 +39,10 @@ The official CLI opens a browser on first use. The provider supports only the of
39
39
 
40
40
  ### 2. Install the provider
41
41
 
42
- After `0.1.4` is published, install that exact version from npm:
42
+ After `0.1.5` is published, install that exact version from npm:
43
43
 
44
44
  ```sh
45
- dsh plugin --profile web add dsh-grok-provider@0.1.4
45
+ dsh plugin --profile web add dsh-grok-provider@0.1.5
46
46
  dsh web
47
47
  ```
48
48
 
@@ -63,7 +63,7 @@ The Web settings page shows:
63
63
 
64
64
  - login state and sign-in, cancel, and logout actions;
65
65
  - used/remaining quota and the real billing-period reset time;
66
- - account-visible models, context windows, reasoning efforts, streaming and tool capabilities.
66
+ - account-visible models, context windows, reasoning efforts, and image-input, streaming, and tool capabilities.
67
67
 
68
68
  When protobuf-backed billing includes a complete weekly/monthly period but omits a zero-valued percentage, the page restores “0% used / 100% remaining.” Other incomplete responses remain unknown.
69
69
 
@@ -112,8 +112,8 @@ Uninstalling the provider does not remove the official Grok CLI or directly modi
112
112
 
113
113
  ## Sources and discovery
114
114
 
115
- - npm `0.1.4` page (available after publication): [dsh-grok-provider@0.1.4](https://www.npmjs.com/package/dsh-grok-provider/v/0.1.4)
116
- - GitHub `0.1.4` release and integrity values (available after publication): [v0.1.4](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.4)
115
+ - npm `0.1.5` page (available after publication): [dsh-grok-provider@0.1.5](https://www.npmjs.com/package/dsh-grok-provider/v/0.1.5)
116
+ - GitHub `0.1.5` release and integrity values (available after publication): [v0.1.5](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.5)
117
117
  - GitHub community discovery: the repository carries the DeepSeek Harness-recommended `dsh-plugin` and `dsh` topics
118
118
  - YukiRyou managed source: [deepseek-yukiryou-plugin-catalog](https://github.com/yoshino-xiao7/deepseek-yukiryou-plugin-catalog), still pinned to the real-device-accepted `dsh-grok-provider@0.1.0` and marking only `darwin-arm64`
119
119
 
@@ -121,17 +121,17 @@ Directory inclusion is not an endorsement by xAI or DeepSeek Harness. [Listing P
121
121
 
122
122
  ## Compatibility and scope
123
123
 
124
- | Item | `0.1.4` status |
124
+ | Item | `0.1.5` status |
125
125
  | --- | --- |
126
126
  | DeepSeek Harness | Exact support for `0.1.1-rc.2` |
127
127
  | Node.js | `>=24.19.0` |
128
128
  | macOS arm64 | Real-network and isolated Harness acceptance completed |
129
- | Windows x64 | Code and Windows CI supported; no independent real-device acceptance completed for this release |
129
+ | Windows x64 | Code and Windows CI supported; the current `0.1.5` candidate adds no independent real-device acceptance |
130
130
  | macOS x64 / Linux | Unsupported |
131
131
  | Grok CLI | No full-version lock; official path, `login --oauth` capability, and production OIDC credential contract are enforced |
132
132
  | Models | Every account catalog model whose backend has a strict codec in this release |
133
133
 
134
- `0.1.4` enables image input only for exact `grok-4.6`; `grok-4.5` and every other dynamically discovered model remain text-only. Images must be verified JPEG/PNG projections from the Harness attachment service. Ordinary user content and images nested one level inside a tool result are supported, with `detail:"high"` fixed to the official xAI Responses image example; URLs, filesystem paths, file IDs, and caller-supplied data URLs are rejected.
134
+ `0.1.5` preserves the `0.1.4` image boundary: image input is enabled only for exact `grok-4.6`, while `grok-4.5` and every other dynamically discovered model remain text-only. The account dashboard projects capability badges from that same catalog, so only image-capable models show “Image input.” Images must be verified JPEG/PNG projections from the Harness attachment service. Ordinary user content and images nested one level inside a tool result are supported, with `detail:"high"` fixed to the official xAI Responses image example; URLs, filesystem paths, file IDs, and caller-supplied data URLs are rejected.
135
135
 
136
136
  Each projected image is limited to 4 MiB, 16,777,216 pixels, and 8192px per side. A request retains at most eight images and 8 MiB of projected image bytes. When a limit is exceeded, the globally oldest images are offloaded to Harness text placeholders; the final JSON remains capped at 16 MiB. Web/X Search, image generation, arbitrary downloads, API-key mode, multiple accounts, enterprise OIDC, ACP, and Headless agent wrapping remain out of scope; see the [capability roadmap](docs/11-capability-roadmap.md).
137
137
 
@@ -219,7 +219,8 @@ Read the [contributing guide](CONTRIBUTING.md) before filing an issue or PR. Cha
219
219
  - [x] Publish the `0.1.1` documentation and release-process correction
220
220
  - [x] Publish the `0.1.2` Windows CLI compatibility correction
221
221
  - [x] Publish the `0.1.3` cross-provider tool-history compatibility correction
222
- - [x] `0.1.4`: image input only for exact `grok-4.6`; red/blue user and tool-result Proxy gates plus final Harness attachment revalidation pass, while `grok-4.5` fails closed as text-only
222
+ - [x] Publish `0.1.4`: image input only for exact `grok-4.6`; red/blue user/tool-result Proxy gates and final Harness attachment revalidation passed, while `grok-4.5` fails closed as text-only
223
+ - [ ] Publish `0.1.5`: maintenance for release binding, dashboard capability badges, and transactional Provider Runtime installation (development, PR, and dual-platform CI are complete)
223
224
  - [ ] Later independent slice: opt-in, default-off Web Search / X Search
224
225
  - [ ] A subsequent slice: opt-in image generation (inline results only, committed through Harness attachments)
225
226
  - [ ] Complete independent Windows x64 acceptance and publish a later stable fix if needed
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  让 DeepSeek Harness 使用你已登录的官方 Grok Build 账号:动态模型发现、流式推理、工具调用,以及账号额度与模型能力面板。
6
6
 
7
- > 非官方社区项目,与 xAI 或 DeepSeek Harness 官方无隶属关系。当前源码版本为 `0.1.4`;npm 已发布稳定版本以 Registry 的 `latest` 标签为准。项目不再发行预发行版;正式版缺陷通过新的递增稳定版本修复。
7
+ > 非官方社区项目,与 xAI 或 DeepSeek Harness 官方无隶属关系。当前源码版本为 `0.1.5`;npm 已发布稳定版本以 Registry 的 `latest` 标签为准。项目不再发行预发行版;正式版缺陷通过新的递增稳定版本修复。
8
8
 
9
9
  ## 它解决什么问题
10
10
 
@@ -39,10 +39,10 @@ grok models
39
39
 
40
40
  ### 2. 安装 Provider
41
41
 
42
- `0.1.4` 发布后,从 npm 安装该精确版本:
42
+ `0.1.5` 发布后,从 npm 安装该精确版本:
43
43
 
44
44
  ```sh
45
- dsh plugin --profile web add dsh-grok-provider@0.1.4
45
+ dsh plugin --profile web add dsh-grok-provider@0.1.5
46
46
  dsh web
47
47
  ```
48
48
 
@@ -63,7 +63,7 @@ Web 设置页展示:
63
63
 
64
64
  - 当前登录状态及登录、取消、退出操作;
65
65
  - 已使用/剩余额度和真实周期重置时间;
66
- - 当前账号可见模型、上下文窗口、reasoning 档位、streaming 与 tool capability。
66
+ - 当前账号可见模型、上下文窗口、reasoning 档位,以及图片输入、streaming 与 tool capability。
67
67
 
68
68
  当 protobuf-backed billing 返回完整的 weekly/monthly 周期但省略零值百分比时,页面会恢复为“已使用 0% / 剩余 100%”;其他不完整响应保持未知,不伪造额度。
69
69
 
@@ -112,8 +112,8 @@ dsh web
112
112
 
113
113
  ## 项目来源与发现
114
114
 
115
- - npm `0.1.4` 页面(发布后可用):[dsh-grok-provider@0.1.4](https://www.npmjs.com/package/dsh-grok-provider/v/0.1.4)
116
- - GitHub `0.1.4` 发行版与校验值(发布后可用):[v0.1.4](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.4)
115
+ - npm `0.1.5` 页面(发布后可用):[dsh-grok-provider@0.1.5](https://www.npmjs.com/package/dsh-grok-provider/v/0.1.5)
116
+ - GitHub `0.1.5` 发行版与校验值(发布后可用):[v0.1.5](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.5)
117
117
  - GitHub 社区发现:仓库已添加 DeepSeek Harness 官方推荐的 `dsh-plugin` 与 `dsh` Topics
118
118
  - YukiRyou 受管来源:[deepseek-yukiryou-plugin-catalog](https://github.com/yoshino-xiao7/deepseek-yukiryou-plugin-catalog),当前仍锁定已完成真机验收的 `dsh-grok-provider@0.1.0`,且只标记 `darwin-arm64`
119
119
 
@@ -121,17 +121,17 @@ dsh web
121
121
 
122
122
  ## 兼容性与范围
123
123
 
124
- | 项目 | `0.1.4` 状态 |
124
+ | 项目 | `0.1.5` 状态 |
125
125
  | --- | --- |
126
126
  | DeepSeek Harness | 精确支持 `0.1.1-rc.2` |
127
127
  | Node.js | `>=24.19.0` |
128
128
  | macOS arm64 | 已完成真实网络与隔离 Harness 验收 |
129
- | Windows x64 | 代码与 Windows CI 支持;本次正式发布未完成独立真机验收 |
129
+ | Windows x64 | 代码与 Windows CI 支持;当前 `0.1.5` 候选未新增独立真机验收 |
130
130
  | macOS x64 / Linux | 不支持 |
131
131
  | Grok CLI | 不锁完整版本;严格校验官方路径、`login --oauth` 能力与生产 OIDC 凭据契约 |
132
132
  | 模型 | 当前账号目录中 backend 已被严格 codec 支持的全部模型 |
133
133
 
134
- `0.1.4` 只为精确的 `grok-4.6` 开启图片输入;`grok-4.5` 与其他动态发现的模型继续按 text-only 处理。图片只能来自 Harness attachment service 的已验证 JPEG/PNG 投影,支持普通用户内容和一层工具结果中的图片,并按 xAI 官方 Responses 图片示例固定使用 `detail:"high"`;不接受 URL、文件路径、file ID 或调用方预制的 data URL。
134
+ `0.1.5` 沿用 `0.1.4` 的图片边界:只为精确的 `grok-4.6` 开启图片输入;`grok-4.5` 与其他动态发现的模型继续按 text-only 处理。账户面板从同一模型目录投影能力标签,因此只有图片模型显示“图片输入”。图片只能来自 Harness attachment service 的已验证 JPEG/PNG 投影,支持普通用户内容和一层工具结果中的图片,并按 xAI 官方 Responses 图片示例固定使用 `detail:"high"`;不接受 URL、文件路径、file ID 或调用方预制的 data URL。
135
135
 
136
136
  每张投影图片最多 4 MiB、16,777,216 像素且任一边不超过 8192px;每次请求最多保留 8 张、投影字节合计最多 8 MiB。超限时按全局最旧优先移除图片并保留 Harness 的文本占位,最终 JSON 仍受 16 MiB 上限约束。Web/X Search、图片生成、任意文件下载、API Key 模式、多账号、企业 OIDC、ACP 与 Headless agent 封装仍不在本版本范围内;后续切片见[能力路线图](docs/11-capability-roadmap.md)。
137
137
 
@@ -219,7 +219,8 @@ npm run pack:check
219
219
  - [x] 发布 `0.1.1` 文档与发布流程修正版
220
220
  - [x] 发布 `0.1.2` Windows CLI 兼容性修正版
221
221
  - [x] 发布 `0.1.3` 跨 Provider 工具调用历史兼容性修正版
222
- - [x] `0.1.4`:仅精确 `grok-4.6` 图片输入;user/tool-result 红蓝语义 Proxy 门禁与最终 Harness attachment 复验均已通过,`grok-4.5` 已按失败关闭保持 text-only
222
+ - [x] 发布 `0.1.4`:仅精确 `grok-4.6` 图片输入;user/tool-result 红蓝语义 Proxy 门禁与最终 Harness attachment 复验通过,`grok-4.5` 失败关闭为 text-only
223
+ - [ ] 发布 `0.1.5`:发布链路、账户面板能力标签与 Provider Runtime 安装回滚维护版(开发、PR 与双平台 CI 已完成)
223
224
  - [ ] 后续独立切片:默认关闭、用户分别开启的 Web Search / X Search
224
225
  - [ ] 再后续独立切片:默认关闭的图片生成(只收内联结果,提交 Harness attachment)
225
226
  - [ ] 完成 Windows x64 独立真机验收并按需发布后续稳定修复版
package/SECURITY.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 支持范围
6
6
 
7
- 本安全策略对应源码版本 `0.1.4`;当前已发布稳定版本以 npm Registry 的 `latest` 标签为准。DeepSeek Harness、Node.js 与操作系统按发布线明确维护;Grok CLI 不使用完整版本字符串作为信任门禁,而是严格校验官方默认路径、命令能力、生产 OIDC 凭据契约和固定服务端协议。macOS arm64 已完成真实验收;Windows x64 有代码与 CI 覆盖。`0.1.4` 只为精确 `grok-4.6` 增加有界图片输入;`grok-4.5` 与所有其他模型保持 text-only,不改动认证、凭据、CLI subprocess 或 endpoint 边界。图片只能来自 Harness attachment service 的已验证 JPEG/PNG 投影,以 `detail:"high"` 发送,并受单图字节、像素、边长、数量、总字节与最终 JSON 上限约束;URL、路径、file ID 和调用方预制 data URL 都会被拒绝。项目不再发行预发行版,安全或兼容性缺陷使用新的递增稳定版本修复。
7
+ 本安全策略对应源码版本 `0.1.5`;当前已发布稳定版本以 npm Registry 的 `latest` 标签为准。DeepSeek Harness、Node.js 与操作系统按发布线明确维护;Grok CLI 不使用完整版本字符串作为信任门禁,而是严格校验官方默认路径、命令能力、生产 OIDC 凭据契约和固定服务端协议。macOS arm64 已完成真实验收;Windows x64 有代码与 CI 覆盖。`0.1.5` 沿用 `0.1.4` 的图片边界:只为精确 `grok-4.6` 提供有界图片输入;`grok-4.5` 与所有其他模型保持 text-only,不改动认证、凭据、CLI subprocess 或 endpoint 边界。图片只能来自 Harness attachment service 的已验证 JPEG/PNG 投影,以 `detail:"high"` 发送,并受单图字节、像素、边长、数量、总字节与最终 JSON 上限约束;URL、路径、file ID 和调用方预制 data URL 都会被拒绝。项目不再发行预发行版,安全或兼容性缺陷使用新的递增稳定版本修复。
8
8
 
9
9
  ## 私下报告漏洞
10
10
 
@@ -32,4 +32,4 @@
32
32
 
33
33
  ---
34
34
 
35
- English summary: GitHub Private vulnerability reporting is enabled and is the preferred reporting channel. Version `0.1.4` enables bounded JPEG/PNG attachment projections with `detail:"high"` only for exact `grok-4.6`; `grok-4.5` and all other models remain text-only. It accepts no URL, path, file ID, or caller-supplied data URL and does not change authentication or endpoints. If private reporting is unavailable, open only a detail-free contact issue. Never publish or send real credentials, identity data, prompts, tool arguments, cookies, source/projected image bytes, or unreviewed diagnostic archives. Include exact versions, platform, minimal reproduction conditions, impact, and redacted evidence.
35
+ English summary: GitHub Private vulnerability reporting is enabled and is the preferred reporting channel. Version `0.1.5` preserves the `0.1.4` bounded JPEG/PNG attachment boundary with `detail:"high"` only for exact `grok-4.6`; `grok-4.5` and all other models remain text-only. It accepts no URL, path, file ID, or caller-supplied data URL and does not change authentication or endpoints. If private reporting is unavailable, open only a detail-free contact issue. Never publish or send real credentials, identity data, prompts, tool arguments, cookies, source/projected image bytes, or unreviewed diagnostic archives. Include exact versions, platform, minimal reproduction conditions, impact, and redacted evidence.
@@ -21,7 +21,7 @@ window.__ModuleLoader__.load({
21
21
  usageUnknown: "上游未提供使用比例", quotaUnavailable: "暂时无法读取 Grok Build 额度。",
22
22
  modelsTitle: "当前账号可用的模型", modelsDescription: "模型来自 Grok Build 动态目录;Harness 模型选择器会显示这里列出的全部模型。",
23
23
  modelsUnavailable: "暂时无法读取模型目录。", noModels: "当前账号没有返回可用模型。",
24
- context: "上下文", reasoning: "推理档位", defaultEffort: "默认", text: "文本输入", streaming: "流式输出", tools: "工具调用",
24
+ context: "上下文", reasoning: "推理档位", defaultEffort: "默认", text: "文本输入", image: "图片输入", streaming: "流式输出", tools: "工具调用",
25
25
  lastUpdated: "数据更新时间",
26
26
  },
27
27
  en: {
@@ -38,7 +38,7 @@ window.__ModuleLoader__.load({
38
38
  usageUnknown: "Usage percentage was not provided", quotaUnavailable: "Grok Build quota is temporarily unavailable.",
39
39
  modelsTitle: "Models available to this account", modelsDescription: "Models come from the live Grok Build catalog; every model listed here remains visible in the Harness model selector.",
40
40
  modelsUnavailable: "The model catalog is temporarily unavailable.", noModels: "This account returned no available models.",
41
- context: "Context", reasoning: "Reasoning", defaultEffort: "default", text: "Text input", streaming: "Streaming", tools: "Tool calling",
41
+ context: "Context", reasoning: "Reasoning", defaultEffort: "default", text: "Text input", image: "Image input", streaming: "Streaming", tools: "Tool calling",
42
42
  lastUpdated: "Updated",
43
43
  },
44
44
  }
@@ -158,6 +158,7 @@ window.__ModuleLoader__.load({
158
158
  React.createElement("div", { className: "dsh-grok-badges" },
159
159
  React.createElement("span", { className: "dsh-grok-badge", "data-accent": true }, `${t("context")} ${formatContext(model.contextWindow)}`),
160
160
  model.capabilities?.textInput && React.createElement("span", { className: "dsh-grok-badge" }, t("text")),
161
+ model.capabilities?.imageInput && React.createElement("span", { className: "dsh-grok-badge" }, t("image")),
161
162
  model.capabilities?.streaming && React.createElement("span", { className: "dsh-grok-badge" }, t("streaming")),
162
163
  model.capabilities?.functionTools && React.createElement("span", { className: "dsh-grok-badge" }, t("tools"))),
163
164
  effortText && React.createElement("div", { className: "dsh-grok-efforts" }, `${t("reasoning")}:${effortText}`))
@@ -40,10 +40,36 @@ function projectModel(model) {
40
40
  ...(typeof model.description === "string" ? { description: model.description } : {}),
41
41
  contextWindow: model.context.contextWindow,
42
42
  ...(model.reasoning === undefined ? {} : { reasoning: projectReasoning(model.reasoning) }),
43
- capabilities: Object.freeze({ textInput: true, streaming: true, functionTools: true }),
43
+ capabilities: projectCapabilities(model.inputModalities),
44
44
  })
45
45
  }
46
46
 
47
+ function projectCapabilities(inputModalities) {
48
+ if (
49
+ !Array.isArray(inputModalities) ||
50
+ Object.getPrototypeOf(inputModalities) !== Array.prototype
51
+ ) throw new TypeError("Invalid Grok dashboard input modalities")
52
+ const length = inputModalities.length
53
+ if (
54
+ length === 0 ||
55
+ length > 2 ||
56
+ Reflect.ownKeys(inputModalities).length !== length + 1
57
+ ) throw new TypeError("Invalid Grok dashboard input modalities")
58
+
59
+ let textInput = false
60
+ let imageInput = false
61
+ for (let index = 0; index < length; index += 1) {
62
+ const descriptor = Object.getOwnPropertyDescriptor(inputModalities, String(index))
63
+ if (descriptor === undefined || !("value" in descriptor)) {
64
+ throw new TypeError("Invalid Grok dashboard input modalities")
65
+ }
66
+ if (descriptor.value === "text" && !textInput) textInput = true
67
+ else if (descriptor.value === "image" && !imageInput) imageInput = true
68
+ else throw new TypeError("Invalid Grok dashboard input modalities")
69
+ }
70
+ return Object.freeze({ textInput, imageInput, streaming: true, functionTools: true })
71
+ }
72
+
47
73
  function projectReasoning(reasoning) {
48
74
  if (!isPlainObject(reasoning) || !Array.isArray(reasoning.efforts)) {
49
75
  throw new TypeError("Invalid Grok dashboard reasoning capability")
@@ -19,14 +19,29 @@ export function installProviderRuntime({
19
19
 
20
20
  const auth = createAuthRegistry({ createTransport })
21
21
  const removeOfficial = auth.install(officialSource)
22
- const adapter = createAdapter({ getGeneration: () => auth.getGeneration() })
23
- const removeAdapter = llm.registerAdapter(["grok"], adapter)
24
- const removeDirectory = llm.registerConfigurableProviders([{
25
- provider: "grok",
26
- displayName: "Grok Build",
27
- settingsNs: "llm-grok",
28
- settingsPath: [],
29
- }])
22
+ let adapter
23
+ try {
24
+ adapter = createAdapter({ getGeneration: () => auth.getGeneration() })
25
+ } catch (error) {
26
+ rollbackInstall(error, [removeOfficial])
27
+ }
28
+ let removeAdapter
29
+ try {
30
+ removeAdapter = llm.registerAdapter(["grok"], adapter)
31
+ } catch (error) {
32
+ rollbackInstall(error, [removeOfficial])
33
+ }
34
+ let removeDirectory
35
+ try {
36
+ removeDirectory = llm.registerConfigurableProviders([{
37
+ provider: "grok",
38
+ displayName: "Grok Build",
39
+ settingsNs: "llm-grok",
40
+ settingsPath: [],
41
+ }])
42
+ } catch (error) {
43
+ rollbackInstall(error, [removeAdapter, removeOfficial])
44
+ }
30
45
  let disposed = false
31
46
 
32
47
  return Object.freeze({
@@ -35,9 +50,36 @@ export function installProviderRuntime({
35
50
  dispose() {
36
51
  if (disposed) return
37
52
  disposed = true
38
- removeDirectory()
39
- removeAdapter()
40
- removeOfficial()
53
+ disposeAll([removeDirectory, removeAdapter, removeOfficial])
41
54
  },
42
55
  })
43
56
  }
57
+
58
+ function disposeAll(disposers) {
59
+ const failures = runDisposers(disposers)
60
+ if (failures.length === 1) throw failures[0]
61
+ if (failures.length > 1) {
62
+ throw new AggregateError(failures, "Grok provider runtime disposal failed")
63
+ }
64
+ }
65
+
66
+ function rollbackInstall(error, disposers) {
67
+ const failures = runDisposers(disposers)
68
+ if (failures.length === 0) throw error
69
+ throw new AggregateError(
70
+ [error, ...failures],
71
+ "Grok provider runtime installation and rollback failed",
72
+ )
73
+ }
74
+
75
+ function runDisposers(disposers) {
76
+ const failures = []
77
+ for (const dispose of disposers) {
78
+ try {
79
+ dispose()
80
+ } catch (error) {
81
+ failures.push(error)
82
+ }
83
+ }
84
+ return failures
85
+ }
@@ -69,7 +69,7 @@
69
69
  - Grok ACP 或 `grok -p` headless 代理。
70
70
  - 厂商侧 Web Search、X Search、远程抓取。
71
71
  - 图片生成、图片 URL 下载或文件落盘。
72
- - 图片输入(`0.1.0`–`0.1.3`);`0.1.4` 候选按[能力路线图](./11-capability-roadmap.md)与 [ADR-0008](./adr/0008-image-input-request-compiler.md)只为精确 `grok-4.6` 独立引入,`grok-4.5` 与所有其他模型继续 text-only。
72
+ - 图片输入(`0.1.0`–`0.1.3`);已发布 `0.1.4` 按[能力路线图](./11-capability-roadmap.md)与 [ADR-0008](./adr/0008-image-input-request-compiler.md)只为精确 `grok-4.6` 独立引入,`grok-4.5` 与所有其他模型继续 text-only;维护版 `0.1.5` 不扩大该集合。
73
73
  - 自定义 endpoint、企业 OIDC、自定义代理或多账号。
74
74
  - 自动安装或更新 Grok CLI。
75
75
  - 在远程 Web/headless 主机自动打开浏览器或无人值守登录的承诺。
@@ -134,6 +134,7 @@ Web 的“退出”或 TUI `/grok logout` 先中止本插件所有在途 Grok
134
134
  `0.1.0`–`0.1.3` 的“不包含”列表继续描述这些稳定版的发布事实。仓库所有者已于 2026-08-28 接受后续内容类型序列,完整切片、安全门禁与永久非目标见[能力路线图](./11-capability-roadmap.md):
135
135
 
136
136
  - `0.1.4`:仅图片输入。
137
+ - `0.1.5`:发布链路、账户面板能力标签和 Provider Runtime 安装事务维护;不新增模型能力。
137
138
  - 后续独立切片:默认关闭的 Web Search / X Search。
138
139
  - 再后续独立切片:默认关闭的图片生成(内联结果 → Harness attachment)。
139
140
 
@@ -51,7 +51,7 @@ Host AuthCoordinator
51
51
  | external/企业/歧义凭据误送固定 xAI Proxy | token 泄漏或账号混淆 | 唯一候选;闭合 auth mode/issuer/scope/client/expiry 关系;schema 不符失败关闭;承认 metadata 未签名 | P0 |
52
52
  | token 被发往自定义或重定向 origin | 账号接管 | endpoint ID;固定 HTTPS origin/path;`redirect: "error"` | P0 |
53
53
  | Authorization 被继承到远端 URL | 账号接管 | 所有版本永久禁止任意图片 URL 下载;transport 不接受调用方 URL | P0 |
54
- | SSE/压缩响应无限增长 | 内存、CPU、磁盘 DoS | 字节、行、事件、总时长和 idle timeout 双重上限 | P0 |
54
+ | SSE/压缩响应无限增长 | 内存、CPU、磁盘 DoS | 解压后字节、行、事件、单事件与整体请求期限均有上限;当前没有独立 first-byte/idle timeout | P0 |
55
55
  | 原始远端错误返回 UI | token、账号或内部信息泄漏 | 只返回插件稳定错误码和安全文案;Harness RPC correlation 留在 carrier 内部 | P0 |
56
56
  | billing 响应或 credential metadata 越界进入 renderer | 身份、订阅或凭据泄漏 | Host 严格抽取百分比、周期与模型 capability;拒绝/忽略 identity、balance、history、headers、URL 和原始响应 | P0 |
57
57
  | token 到期被误标为额度重置 | 错误产品决策、误导用户 | 重置时间只接受 billing period end;credential `expires_at` 不进入 dashboard DTO | P0 |
@@ -220,7 +220,7 @@ TUI 通过 Harness 的 human-command registry 注册一个全局 `/grok`,只
220
220
  - 不存在模型可控文件路径写入。
221
221
  - 不存在把 Bearer token 带到第二个 origin 的功能路径。
222
222
 
223
- `0.1.4` 候选按 [ADR-0008](./adr/0008-image-input-request-compiler.md) 只增加图片输入:
223
+ `0.1.4` 发布版按 [ADR-0008](./adr/0008-image-input-request-compiler.md) 只增加图片输入;`0.1.5` 沿用同一边界:
224
224
 
225
225
  - 仅精确 `grok-4.6` route 声明 image;`grok-4.5` 与未知模型继续 text-only。
226
226
  - 只从可选 Harness attachment store 调用 `readImageRequest`,不解析 URL、路径、file ID 或调用方 data URL。
@@ -231,7 +231,7 @@ TUI 通过 Harness 的 human-command registry 注册一个全局 `/grok`,只
231
231
  - 最终 JSON 超限继续逐张淘汰最旧图片;缺服务、projection unsupported、源图片位置/引用/MIME 不支持在 Responses POST 前以 `UNSUPPORTED_CONTENT` 拒绝。store 返回损坏或不自洽的投影、超过含图编译 block 预算、更深 tool-result,以及图片全部淘汰后剩余非图片请求仍不合法,都保持通用 `INVALID_RESPONSE`。
232
232
  - AbortSignal 在查询服务前检查并传给所有投影读取;编译失败时 Responses POST 调用必须为 0,但模型目录 GET 可能已发生。
233
233
 
234
- 公开 xAI 文档、离线测试与真机验证继续作为三类独立证据。[上游证据页](./12-upstream-image-input-evidence.md)记录的固定 Proxy 门禁已对 `grok-4.6` 的普通 user 与一层 tool-result 分别发送红/蓝合成图:4 次均为 HTTP 200、`text/event-stream`、completed,规范化整段回复只含正确颜色词和可选句末标点。`grok-4.5` 的受控红图结果语义不可靠,因此即使公开模型页声明图片能力也不进入本插件图片集合。图片固定使用 `detail:"high"`。Harness `0.1.1-rc.2` attachment-local/LlmRuntime 必须复验 `grok-4.6` image、`grok-4.5`/未知模型 text-only 后才能关闭候选门禁。任意 URL 下载与把 Authorization 带到第二个 origin 在所有后续版本仍永久禁止;Web/X Search、图片生成和 `prompt_cache_key` 不属于 `0.1.4`。
234
+ 公开 xAI 文档、离线测试与真机验证继续作为三类独立证据。[上游证据页](./12-upstream-image-input-evidence.md)记录的固定 Proxy 门禁已对 `grok-4.6` 的普通 user 与一层 tool-result 分别发送红/蓝合成图:4 次均为 HTTP 200、`text/event-stream`、completed,规范化整段回复只含正确颜色词和可选句末标点。`grok-4.5` 的受控红图结果语义不可靠,因此即使公开模型页声明图片能力也不进入本插件图片集合。图片固定使用 `detail:"high"`。Harness `0.1.1-rc.2` attachment-local/LlmRuntime 已复验 `grok-4.6` image、`grok-4.5`/未知模型 text-only,候选门禁随后关闭并完成 `0.1.4` 发布。任意 URL 下载与把 Authorization 带到第二个 origin 在所有后续版本仍永久禁止;Web/X Search、图片生成和 `prompt_cache_key` 不属于 `0.1.4` 或维护版 `0.1.5`。
235
235
 
236
236
  ## 9. 残余风险
237
237
 
@@ -88,6 +88,8 @@ ctx.llm.registerConfigurableProviders([{
88
88
  }])
89
89
  ```
90
90
 
91
+ `0.1.5` 将这组 Host 注册定义为一个事务:先安装官方 auth source,再创建/注册 adapter,最后注册 configurable provider。任一后续步骤失败都按相反顺序回滚已经取得的 disposer;单个 disposer 抛错不得阻止剩余清理。安装错误与清理错误必须同时保留(多错误使用 `AggregateError`)。成功安装后的 `dispose()` 同样逆序、尽力执行全部清理,并在首次调用开始时即标记为已处置,因此即使清理抛错,后续调用也不会重复执行副作用。对外仍只暴露同一个 runtime `adapter`、`auth` 与 `dispose()` Interface。
92
+
91
93
  `listModels()` 是异步动态目录:使用所选 auth generation 请求固定 `/v1/models`,返回该账号当前全部可见模型。目录是 discovery surface,不是路由白名单;`resolveModel()` 对未缓存的显式模型 ID 可做一次有界刷新,但不得根据 ID 名称猜 capability。
92
94
 
93
95
  每个 provider HTTP 请求必须包含 `attributionHeaders()`。
@@ -186,7 +188,7 @@ ctx.connection.rpc.handle(
186
188
 
187
189
  `status`、`login`、`logout` 只接受空对象;`cancel` 只接受当前公开状态中的 `sessionId`。不存在 `authMode`、模式选择、OAuth URL、device code、access/refresh token、identity 或 token endpoint 字段。
188
190
 
189
- `dashboard` 也只接受空对象,并且只在 `status.available === true` 时由页面调用。它返回脱敏模型 capability 和额度摘要;不得返回 credential metadata、用户身份、上游原文、headers 或 endpoint。额度重置时间只能来自 billing period end,不得使用 OAuth credential expiry。
191
+ `dashboard` 也只接受空对象,并且只在 `status.available === true` 时由页面调用。它返回脱敏模型 capability 和额度摘要;模型的 `textInput`/`imageInput` 必须从同一动态目录的 `inputModalities` 严格投影,缺失、重复、未知或 accessor-backed modality 使 models 分支失败关闭,renderer 不按模型名猜测。不得返回 credential metadata、用户身份、上游原文、headers 或 endpoint。额度重置时间只能来自 billing period end,不得使用 OAuth credential expiry。
190
192
 
191
193
  业务状态不能冒充 rc.2 的 `RpcErrorCode`。成功分支承载闭合 outcome:
192
194
 
@@ -326,4 +328,5 @@ Harness rc.2 不提供 HTTPS URL opener,也不需要插件自建 opener:插
326
328
  - 清空 token 内存缓存。
327
329
  - 清理 timer、reader 与 event listener。
328
330
  - 等待受控 inflight promise settle,不留下未处理 rejection。
331
+ - Provider Runtime 的部分安装失败必须逆序回滚;正常卸载即使某个 disposer 失败也继续清理其他资源,且整个 `dispose()` 只执行一次。
329
332
  - 覆盖 Host activate → unload → activate 后只有一个 adapter/RPC/command;client bundle revision 更新后旧 slot、listener、store/controller 全部释放;subprocess service 替换时 child fiber 执行进程终止与有界等待后才卸载,并覆盖 `waitForExit()` 返回 `false` 的路径。
@@ -207,6 +207,8 @@ Web 与 TUI 分别验证:
207
207
  - Web、TUI、headless profile 分别覆盖缺失 optional peer/service;缺少 subprocess 时登录按钮/命令明确不可用,但已有合格会话的 Provider 可安全启动。
208
208
  - Web dashboard 只在 credential ready 后请求固定 billing/models;分别覆盖百分比+重置时间、仅重置时间、旧 monthly counters、空 config 与两个分支独立失败。
209
209
  - dashboard RPC 与 client bundle 断言不含 token、credential path、`user_id`、email、team/principal ID、balance、history、原始响应或远端错误。
210
+ - dashboard 从同一模型目录投影 `textInput`/`imageInput`;覆盖精确 image/text-only 卡片和缺失、空、未知、重复、accessor-backed modality,只有 image-capable 卡片渲染图片标签。
211
+ - Provider Runtime 覆盖 official source、adapter 创建/注册和 configurable provider 注册各阶段失败;已取得资源逆序回滚,disposer 抛错后继续清理,多错误顺序稳定,`dispose()` 即使首次抛错也不重复执行。
210
212
  - 视觉验收覆盖桌面双列模型卡和 `max-width:680px` 单列规则;刷新操作不得触发重复登录或持久化额度。
211
213
 
212
214
  ## 8. 打包与供应链
@@ -218,6 +220,8 @@ Web 与 TUI 分别验证:
218
220
  - root 与完整 runtime/optional dependency 图均无 `preinstall`、`install`、`postinstall`;普通构建/测试 scripts 不在该市场阻断集合中,但候选包不得依赖安装时构建。
219
221
  - 从真实 tarball 在全新 Harness profile 安装,不依赖仓库外文件。
220
222
  - GitHub macOS/Windows checkout 后发行文本统一为 LF;`grok-provider.patch.yml` 的逐字节契约不得因 `core.autocrlf` 改写。
223
+ - 发布 workflow 契约测试固定 Node `24.19.0`,并要求输入 tag、workflow ref/type/name/SHA、递归 peeled commit、非草稿/非预发行 Release 与唯一精确 asset 全部一致。
224
+ - 制品契约测试同时锁定 manifest/lockfile 版本、中英文 README 安装命令、`SECURITY.md` 源码版本和中文在前/英文在后的无重复标题 Release Notes。
221
225
 
222
226
  ## 9. 发布验收
223
227
 
@@ -229,4 +233,4 @@ Web 与 TUI 分别验证:
229
233
  - Windows x64 自动化平台测试通过,且 README、release notes 和 marketplace 元数据在首次真机验证前明确披露“代码支持、真机未验证”。
230
234
  - npm 回读的 SHA-512 与本地发布 tarball 一致。
231
235
 
232
- `0.1.0` 发布后原计划完成一次 Windows x64 Registry 精确版本真机验收;仓库所有者随后明确决定该验收不再阻断稳定发布,且普通后续版本不重复要求真机验证。`0.1.1` 及后续版本以 CI、契约测试、隔离安装和制品校验为常规门禁;只有认证流程、Harness subprocess seam 或平台安全策略发生变化时才必须定向真机验证。`0.1.3` 只修改平台无关的历史消息请求转换,并以真实脱敏 Ark 调用 ID 回归和 macOS/Windows CI 为平台门禁。
236
+ `0.1.0` 发布后原计划完成一次 Windows x64 Registry 精确版本真机验收;仓库所有者随后明确决定该验收不再阻断稳定发布,且普通后续版本不重复要求真机验证。`0.1.1` 及后续版本以 CI、契约测试、隔离安装和制品校验为常规门禁;只有认证流程、Harness subprocess seam 或平台安全策略发生变化时才必须定向真机验证。`0.1.3` 只修改平台无关的历史消息请求转换;`0.1.4` 的图片输入已完成独立 Proxy/Harness 门禁并发布;`0.1.5` 只维护发布链路、dashboard 投影和 runtime 生命周期,均以聚焦回归与 macOS/Windows CI 为平台门禁。
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## 0. 当前状态
4
4
 
5
- 当前 npm `latest` 为 `dsh-grok-provider@0.1.3`。`0.1.4` 稳定候选位于 `yukiryou/v0.1.4`:仅精确 `grok-4.6` 开启图片,其普通 user 与一层 tool-result 红/蓝语义 Proxy 门禁及 Harness `0.1.1-rc.2` 最终 modality 复验均已通过;`grok-4.5` 因红图语义不可靠失败关闭并保持 text-only。最终源码与文档同步后的 Node 24 全量测试、生产依赖审计和 dry-run 打包检查已通过;macOS/Windows CI、最终 release commit 的唯一制品、PR 合并和仓库所有者对精确 `0.1.4` 的发布授权仍未完成。
5
+ 当前 npm `latest` 为 `dsh-grok-provider@0.1.4`;其 release commit 为 `59776af8e954aa6e14463c659a22c6c3d5798bb5`,Registry、GitHub Release 与本地验收制品逐字节一致,签名与 SLSA provenance 已回读。`0.1.5` 维护候选位于 `yukiryou/v0.1.5`,只补强发布身份绑定、账户面板能力标签和 Provider Runtime 安装事务,不新增搜索、生图、认证或 endpoint 能力;PR #10 及 macOS/Windows CI 已通过,当前等待最终 release commit 制品核验与精确发布授权。
6
6
 
7
7
  首个 `dsh-grok-provider@0.1.0` 于 2026-08-26 从 GitHub Release 中唯一的候选 tarball 发布到 npm;Registry 回读的 SHA-512、重新下载文件的 SHA-256 和 GitHub Release 产物完全一致,并生成 npm provenance attestation。后续稳定版沿用由该流程建立的不可变制品与回读原则。
8
8
 
@@ -130,7 +130,7 @@ patch 路径必须为不含 `..`、绝对路径、反斜线或 NUL 的相对 `.y
130
130
 
131
131
  ## 7. Git 与版本
132
132
 
133
- - `0.1.0` 历史开发分支:`yukiryou/v0.1.0`;当前版本分支:`yukiryou/v0.1.4`。
133
+ - `0.1.0` 历史开发分支:`yukiryou/v0.1.0`;当前版本分支:`yukiryou/v0.1.5`。
134
134
  - `package.json`、CHANGELOG、release notes、Git tag 和 tarball 必须使用同一个精确候选版本。
135
135
  - 发布提交必须干净且可复现。
136
136
  - tag 使用 `v<major>.<minor>.<patch>`,只在发布提交确定后创建。
@@ -154,12 +154,13 @@ CI 使用的官方 GitHub Actions 必须固定到已核对的完整 commit SHA
154
154
  长期发布工作流只接受严格稳定 tag `v<major>.<minor>.<patch>` 和对应 GitHub Release tarball 的 base64 SHA-512。工作流必须:
155
155
 
156
156
  1. 从 tag 派生版本和唯一产物名;不接受 prerelease、build metadata、路径字符、自由格式文件名或调用者指定 dist-tag。
157
- 2. 只下载对应 GitHub Release 的 `dsh-grok-provider-<version>.tgz`。
158
- 3. 在发布前核对输入 SHA-512,以及 tarball 内的 name、version 和 canonical repository。
159
- 4. 使用 Node 24、固定 npm CLI 版本、GitHub-hosted Ubuntu runner、`environment: npm` 和 `id-token: write`。
160
- 5. 把 tarball 作为带 `./` 前缀的本地文件路径交给 `npm publish`,避免 npm package-spec 将其解释为 GitHub shorthand。
161
- 6. 不设置 `NODE_AUTH_TOKEN`,不读取任何 npm secret;身份完全来自 Trusted Publisher OIDC。
162
- 7. 保留 `--access public`、`--tag latest` 和 `--provenance`,即使 Trusted Publishing 会自动生成 provenance,也明确表达发布策略。
157
+ 2. 强制 workflow 从输入 tag 的 ref 运行,并递归剥离 annotated/lightweight tag,确认最终 commit 精确等于 `github.sha`。
158
+ 3. 要求对应 GitHub Release 的 tag 精确一致且非草稿、非预发行,只允许唯一 `dsh-grok-provider-<version>.tgz` 附件;下载后再次确认本地只有该文件。
159
+ 4. 在发布前核对输入 SHA-512,以及 tarball 内的 name、version 和 canonical repository。
160
+ 5. 使用精确 Node `24.19.0`、固定 npm CLI 版本、GitHub-hosted Ubuntu runner、`environment: npm` 和 `id-token: write`。
161
+ 6. 把 tarball 作为带 `./` 前缀的本地文件路径交给 `npm publish`,避免 npm package-spec 将其解释为 GitHub shorthand。
162
+ 7. 不设置 `NODE_AUTH_TOKEN`,不读取任何 npm secret;身份完全来自 Trusted Publisher OIDC。
163
+ 8. 保留 `--access public`、`--tag latest` 和 `--provenance`,即使 Trusted Publishing 会自动生成 provenance,也明确表达发布策略。
163
164
 
164
165
  发布经过测试的同一个 tarball:
165
166
 
@@ -191,8 +192,8 @@ scoped 包首次公开发布必须保留 `--access public`。
191
192
  npm 发布不会自动成为受管可安装项。当前发现状态:
192
193
 
193
194
  - GitHub 仓库已添加 DeepSeek Harness 官方推荐的 `dsh-plugin` 与 `dsh` Topics,可被 Topic 驱动来源发现。
194
- - YukiRyou curated catalog 当前仍是精确 `dsh-grok-provider@0.1.0`、verification `installed`、仅 `darwin-arm64`。`0.1.4` 的协议/attachment 候选门禁不等于从 catalog 安装精确发布包,因此不得据此把条目改为 `0.1.4` 或增加平台。
195
- - 公共 `awesome-dsh-plugin` 的收录 PR #3415 已合并,项目已进入 `model` 分类。该列表不记录精确 npm 版本或平台验证字段,因此收录只代表发现入口,不证明 `0.1.4` 制品、安装或平台验收。
195
+ - YukiRyou curated catalog 当前仍是精确 `dsh-grok-provider@0.1.0`、verification `installed`、仅 `darwin-arm64`。`0.1.4` 已发布及其完整性/provenance 回读不等于从 catalog 安装该精确版本,因此不得据此升级条目或增加平台。
196
+ - 公共 `awesome-dsh-plugin` 的收录 PR #3415 已合并,项目已进入 `model` 分类。该列表不记录精确 npm 版本或平台验证字段,因此收录只代表发现入口,不证明任一后续制品的受管安装或平台验收。
196
197
  - Windows x64 仍需对 Registry 精确 `0.1.0` 完成首次 production inspector、安装、重启、浏览器登录、聊天、工具调用和重新认证;完成前保持“代码支持、真机未验证”。
197
198
 
198
199
  catalog 条目只能记录实际验证完成的精确版本和平台。当前条目记录:
@@ -1,11 +1,11 @@
1
1
  # 当前实现与发布状态
2
2
 
3
- 稳定 `0.1.3` 修复 Ark 等其他 Provider 的历史工具调用 ID 含有 Grok 不接受字符时,本地请求转换立即失败的问题。`0.1.4` 候选在不改动认证、凭据、额度、endpoint 或平台 subprocess 边界的前提下,只为精确 `grok-4.6` 增加有界图片输入;`grok-4.5` 与所有其他模型保持 text-only。
3
+ 稳定 `0.1.4` 在不改动认证、凭据、额度、endpoint 或平台 subprocess 边界的前提下,只为精确 `grok-4.6` 增加有界图片输入;`grok-4.5` 与所有其他模型保持 text-only。`0.1.5` 是维护候选,只补强发布绑定、账户面板能力展示和 Provider Runtime 安装事务。
4
4
 
5
5
  状态日期:2026-08-28
6
- 当前 npm 发布线:`dsh-grok-provider@0.1.3`
7
- 当前候选:`dsh-grok-provider@0.1.4`
8
- 版本分支:`yukiryou/v0.1.4`
6
+ 当前 npm 发布线:`dsh-grok-provider@0.1.4`
7
+ 当前候选:`dsh-grok-provider@0.1.5`
8
+ 版本分支:`yukiryou/v0.1.5`
9
9
  内容类型路线:已冻结于 [能力路线图](./11-capability-roadmap.md);`0.1.4` 只做图片输入,`prompt_cache_key` 已拆出。
10
10
 
11
11
  ## 已实现
@@ -89,12 +89,22 @@ Windows x64 真机不再是 `0.1.0` 预发布阻断项。首次发布后必须
89
89
  - 三张社区市场预览图保存在 `.github/assets/plugin-preview/` 并由中英文 README 引用;npm tarball 明确排除这些展示资源。
90
90
  - 根目录 `screenshots.json` 固定三张预览图顺序;公共 `awesome-dsh-plugin` 收录 PR #3415 的 README 生成、locale parity、awesome-lint 与 build 自动门禁通过,随后已由独立维护者合并并进入 `model` 分类。该列表不记录精确 npm 版本或平台验证字段。
91
91
 
92
- ## `0.1.4` 候选准备状态
92
+ ## `0.1.4` 发布结果
93
93
 
94
- - 仓库所有者已于 2026-08-28 接受按独立切片推进内容类型;`0.1.4` 只做图片输入,搜索与生图顺延且版本号可因修复版变化。
94
+ - 仓库所有者已于 2026-08-28 接受按独立切片推进内容类型;`0.1.4` 只做图片输入,搜索与生图顺延。
95
95
  - 任意 URL 下载与 API Key 模式保持永久非目标。
96
96
  - [ADR-0008](./adr/0008-image-input-request-compiler.md)、异步 request compiler、可选 attachment seam、精确模型 route 与离线自动化测试已完成开发。
97
97
  - 最终源码与发行文档同步后已用 Node 24 完成 119 项全量测试(117 pass、0 fail、2 项 Windows-only skip);`npm audit --omit=dev` 为 0 漏洞,dry-run 包含 58 个文件。
98
98
  - 公开 xAI 图片协议与精确 `grok-4.6` 的 user/tool-result 红蓝语义 Proxy 门禁已经验证;`grok-4.5` 因语义不可靠失败关闭。最终 Harness attachment modality 复验见[证据页](./12-upstream-image-input-evidence.md)。
99
99
  - 本轮未引入 `prompt_cache_key`、搜索、生图、新 SSE 事件、URL 下载、认证或 endpoint 变化。
100
- - 代码 PR [#8](https://github.com/yoshino-xiao7/dsh-grok-provider/pull/8) 已合并,CI run [33149124946](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33149124946) 的 macOS/Windows job 均通过;最终 release commit 的唯一 tarball、同一制品隔离安装与精确 `0.1.4` 发布授权仍待完成,当前不得创建最终 tag 或执行 `npm publish`。
100
+ - 代码 PR [#8](https://github.com/yoshino-xiao7/dsh-grok-provider/pull/8) 与发布证据 PR #9 已合并;CI run [33149124946](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33149124946) 的 macOS/Windows job 均通过。
101
+ - 最终 release commit 为 `59776af8e954aa6e14463c659a22c6c3d5798bb5`;不可变 `v0.1.4` tag 精确指向该提交。唯一正式 tarball 为 58 个文件、130,958 bytes,SHA-256 `7a1733c1ab391150430d3f302ff5cb3d04f5153c339ecbdbfba128191d02ad3e`,npm SRI `sha512-IkEFEdBnt/EpE9y8mCAyE6i+023Z2229J6gsR2y1cNZ+md9rwpxiqb5IsDMZO84ewh65wMM/ajCQ6F4UT2bDGg==`。
102
+ - GitHub Release [v0.1.4](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.4) 与 Trusted Publisher run [33151195684](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33151195684) 完成;npm `latest=0.1.4`,Registry tarball、Release asset 与本地制品逐字节一致,Registry 签名与 SLSA provenance attestation 验证通过。
103
+
104
+ ## `0.1.5` 开发状态
105
+
106
+ - 从上述精确 `0.1.4` release commit 创建独立分支 `yukiryou/v0.1.5`,不直接修改发布基线。
107
+ - 维护范围冻结为:发布 workflow 的 tag/ref/commit 与唯一 Release asset 绑定、Node `24.19.0` 固定;账户面板从模型 `inputModalities` 展示图片能力;Provider Runtime 部分安装失败时逆序回滚。
108
+ - 不改变认证、凭据、CLI subprocess、endpoint、Responses wire、图片编译资源策略或平台支持矩阵;Web/X Search 与图片生成继续顺延。
109
+ - `package.json`、lockfile、CHANGELOG、中英文 README、安全策略和双语 Release Notes 已进入 `0.1.5` 候选状态;精确 Node `24.19.0` 全量测试通过(133 项、131 pass、0 fail、2 项 Windows-only skip),生产依赖审计为 0 漏洞,dry-run 打包为 59 个文件。
110
+ - 代码 PR [#10](https://github.com/yoshino-xiao7/dsh-grok-provider/pull/10) 已合并,merge commit 为 `a0bb3864b474f3129050a211bf44d0bf73a9474e`;PR CI run [33160850486](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33160850486) 的 macOS 14 与 Windows 2022 job 均通过。唯一最终制品与精确发布授权仍按发布检查表执行。
@@ -103,7 +103,20 @@ English summary: every release must close documentation, security, tests, determ
103
103
  - [x] 新候选的 macOS/Windows CI run [33149124946](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33149124946) 全绿;两个 job 均完成 `npm ci --ignore-scripts`、全量测试、生产依赖审计与 `pack:check`。
104
104
  - [x] 同步 `package.json`、lockfile、制品契约测试、中英文 README 安装版本、正式 CHANGELOG 日期和 `docs/releases/v0.1.4.md`;未发布事实使用“当前源码版本/发布后可用”表述,未预写 npm 或 GitHub Release 已存在。
105
105
  - [x] 版本分支经 [PR #8](https://github.com/yoshino-xiao7/dsh-grok-provider/pull/8) 合并 `yukiryou/main`;代码合并提交为 `39fbaf1ab3f77b3f0af0727e87b8a64534efbb8d`。
106
- - [ ] 从最终 release commit 冻结唯一 `dsh-grok-provider-0.1.4.tgz`,记录文件数、bytes、SHA-256、base64 SHA-512,并从同一制品完成隔离安装/加载 smoke。
107
- - [ ] GitHub 正式 Release 使用中文在前、英文在后且不重复页面标题,只附加唯一已验收 tarball;`v0.1.4` 精确指向 release commit。
108
- - [ ] 仓库所有者明确授权发布精确 `dsh-grok-provider@0.1.4`;开发请求与绿色自动化均不构成发布授权。
109
- - [ ] Trusted Publisher 发布、npm `latest=0.1.4`、Registry 逐字节回读、签名与 SLSA provenance attestation 验证完成。
106
+ - [x] 从最终 release commit `59776af8e954aa6e14463c659a22c6c3d5798bb5` 冻结唯一 `dsh-grok-provider-0.1.4.tgz`,并从同一制品完成隔离安装/加载 smoke:58 个文件、130,958 bytes、SHA-256 `7a1733c1ab391150430d3f302ff5cb3d04f5153c339ecbdbfba128191d02ad3e`、SRI `sha512-IkEFEdBnt/EpE9y8mCAyE6i+023Z2229J6gsR2y1cNZ+md9rwpxiqb5IsDMZO84ewh65wMM/ajCQ6F4UT2bDGg==`。
107
+ - [x] GitHub 正式 Release [v0.1.4](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.4) 使用中文在前、英文在后且不重复页面标题,只附加唯一已验收 tarball;`v0.1.4` 精确指向 release commit。
108
+ - [x] 仓库所有者于 2026-08-28 明确授权发布精确 `dsh-grok-provider@0.1.4`。
109
+ - [x] Trusted Publisher run [33151195684](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33151195684) 发布完成;npm `latest=0.1.4`,Registry tarball 与本地/Release 制品逐字节一致,签名与 SLSA provenance attestation 验证通过。
110
+
111
+ ## `0.1.5` 开发与发布门禁
112
+
113
+ - [x] 从精确 `0.1.4` release commit `59776af8e954aa6e14463c659a22c6c3d5798bb5` 创建独立分支 `yukiryou/v0.1.5`。
114
+ - [x] 发布 workflow 强绑定稳定 tag ref、剥离后的 tag commit 与 `github.sha`,并要求非草稿、非预发行且仅含唯一精确 tarball 的 GitHub Release;发布 Node 固定为 `24.19.0`。
115
+ - [x] 账户面板从严格模型 `inputModalities` 投影 text/image capability,客户端只为图片模型显示中英文图片输入标签;畸形目录失败关闭。
116
+ - [x] Provider Runtime 部分安装失败时按相反顺序回滚已注册资源;成功卸载保持幂等并尽力执行全部清理。
117
+ - [x] 同步 `package.json`、lockfile、CHANGELOG、中英文 README、`SECURITY.md`、状态文档和 `docs/releases/v0.1.5.md`;不把维护候选写成已发布事实。
118
+ - [x] 本地精确 Node `24.19.0` 全量测试通过:133 项、131 pass、0 fail、2 项 Windows-only skip;`npm audit --omit=dev` 为 0 漏洞,`npm run pack:check` 为 59 个文件,`git diff --check` 通过。
119
+ - [x] PR [#10](https://github.com/yoshino-xiao7/dsh-grok-provider/pull/10) 合并到 `yukiryou/main`,merge commit 为 `a0bb3864b474f3129050a211bf44d0bf73a9474e`;PR CI run [33160850486](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33160850486) 的 macOS 14 与 Windows 2022 job 均通过。
120
+ - [ ] 从最终 release commit 冻结唯一候选 tarball并完成隔离安装、digest 与清单核验。
121
+ - [ ] 仓库所有者在最终制品证据后明确授权发布精确 `dsh-grok-provider@0.1.5`。
122
+ - [ ] GitHub Release、不可变 tag、Trusted Publisher、Registry 逐字节回读、签名与 SLSA provenance attestation 完成。
@@ -1,9 +1,9 @@
1
1
  # 能力路线图
2
2
 
3
- - 状态:**已接受;`0.1.4` 的 `grok-4.6` Proxy 图片语义门禁与 Harness 最终复验均已通过(2026-08-28)**
4
- - 当前 npm 稳定版:`0.1.3`
5
- - 当前候选:`0.1.4`
6
- - 当前版本分支:`yukiryou/v0.1.4`
3
+ - 状态:**`0.1.4` 图片输入切片已发布;`0.1.5` 维护候选已完成 PR 与双平台 CI,待最终制品与发布授权(2026-08-28)**
4
+ - 当前 npm 稳定版:`0.1.4`
5
+ - 当前候选:`0.1.5`
6
+ - 当前版本分支:`yukiryou/v0.1.5`
7
7
 
8
8
  本文是 `0.1.3` 之后内容类型迭代的单一事实来源。`0.1.0`–`0.1.3` 的历史范围仍以 [ADR-0002](./adr/0002-v0.1-scope.md) 和[产品需求](./01-product-requirements.md)为准。
9
9
 
@@ -24,6 +24,7 @@
24
24
  | 版本 | 能力 | 发布前置条件 | ADR |
25
25
  | --- | --- | --- | --- |
26
26
  | `0.1.4` | 图片输入 | Proxy 接受本版本的 data URL wire shape;Harness attachment 投影与限额可执行 | [ADR-0008](./adr/0008-image-input-request-compiler.md) |
27
+ | `0.1.5` | 发布链路、能力展示与安装事务维护;不新增模型能力 | 精确 tag/commit/Release 制品绑定、回滚与 UI 投影测试 | 复用现有接口与发布契约 |
27
28
  | 后续版本 | 默认关闭的 Web Search / X Search | Proxy 接受 server tools;已记录可放行事件 | ADR-0009 |
28
29
  | 再后续版本 | 默认关闭的图片生成 | Proxy 返回可有界提交到 Harness attachment 的内联结果 | ADR-0010 |
29
30
 
@@ -49,7 +50,7 @@ const request = await requestCompiler.compile(options, preparedRoute)
49
50
 
50
51
  ### 模型能力
51
52
 
52
- - `0.1.4` 候选只对公开 xAI 模型页声明 text+image、当前 Proxy 目录已观察到且红蓝语义门禁通过的精确 ID `grok-4.6` 生成图片 route。
53
+ - `0.1.4` 发布版只对公开 xAI 模型页声明 text+image、当前 Proxy 目录已观察到且红蓝语义门禁通过的精确 ID `grok-4.6` 生成图片 route;`0.1.5` 不扩大该集合。
53
54
  - 新出现的模型即使也是 Responses backend,也只声明文本,直到完成同等级证据更新。
54
55
  - `grok-4.5` 即使公开模型页声明图片,也因固定 Proxy 红图语义不可靠保持 text-only;HTTP 200/SSE 完成不能替代语义门禁。`grok-4.6` 的普通 user 与一层 tool-result 红蓝证据见[上游证据](./12-upstream-image-input-evidence.md)。
55
56
 
@@ -83,7 +84,7 @@ const request = await requestCompiler.compile(options, preparedRoute)
83
84
  - 公网/内网图片 URL、signed URL、file ID、路径读取、citation 跟随或 markdown 图片下载。
84
85
  - assistant 图片输出、workspace 文件写入、第二个网络 origin、API Key 或 endpoint 配置。
85
86
 
86
- ### 当前候选状态与发布门禁
87
+ ### `0.1.4` 发布结果
87
88
 
88
89
  - [x] request compiler / attachment seam / per-model route 接口冻结。
89
90
  - [x] 用户图片、一层 tool-result、Abort、缺服务、旧图淘汰和纯文本回归测试。
@@ -94,9 +95,10 @@ const request = await requestCompiler.compile(options, preparedRoute)
94
95
  - [x] 开发树 Node 24 本地全量测试、preflight `npm run pack:check` 与真机脚本加入后的聚焦测试。
95
96
  - [x] 最终版本/发行文档同步后的 Node 24 全量测试(119 项、117 pass、0 fail、2 项 Windows-only skip)、生产依赖审计(0 漏洞)与 `npm run pack:check`(58 个文件)。
96
97
  - [x] 代码 PR [#8](https://github.com/yoshino-xiao7/dsh-grok-provider/pull/8) 已合并,macOS/Windows CI run [33149124946](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33149124946) 全绿。
97
- - [ ] 最终 release commit 的唯一候选 tarball、隔离安装、digest 与精确发布授权。
98
+ - [x] 最终 release commit `59776af8e954aa6e14463c659a22c6c3d5798bb5` 的唯一 tarball、隔离安装、digest 与精确发布授权。
99
+ - [x] GitHub Release `v0.1.4` 与 Trusted Publisher run `33151195684` 发布完成;npm `latest=0.1.4`,Registry、Release 与本地制品逐字节一致,签名和 SLSA provenance 均已回读。
98
100
 
99
- `grok-4.6` Proxy 语义门禁、Harness 最终 modality 复验、本地自动化与双平台 PR/CI 门禁已关闭,`grok-4.5` 已失败关闭;最终制品与仓库所有者精确发布授权未完成前,不得创建最终 tag、GitHub Release 或执行 `npm publish`。
101
+ `grok-4.6` Proxy 语义门禁、Harness 最终 modality 复验、本地自动化、双平台 PR/CI、唯一制品与发布回读均已关闭,`grok-4.5` 保持失败关闭。`0.1.5` 仅维护发布供应链、账户面板能力投影与 Provider Runtime 安装事务,不提前实现下一内容切片。
100
102
 
101
103
  ## 4. 后续:默认关闭的 Web/X Search
102
104
 
@@ -120,4 +122,4 @@ const request = await requestCompiler.compile(options, preparedRoute)
120
122
  - ACP、`grok -p` Headless、Linux / macOS x64 发布承诺。
121
123
  - 厂商 `code_execution`;Harness 已有本地工具权限层。
122
124
 
123
- English summary: `0.1.4` is an unpublished image-input-only candidate for exact `grok-4.6`. Red/blue user and one-level tool-result Proxy checks all passed a normalized whole-response color assertion with `detail:"high"`. A controlled `grok-4.5` red-image result was semantically unreliable, so `grok-4.5` and all other models remain text-only. Final Harness modality revalidation, Node 24 tests, production audit, and dry-run packaging passed; CI, final-release-commit artifact verification, and exact publication authorization are still pending.
125
+ English summary: `0.1.4` is published with image input only for exact `grok-4.6`. Red/blue user and one-level tool-result Proxy checks passed the normalized whole-response color assertion with `detail:"high"`; `grok-4.5` and all other models remain text-only. The exact release artifact, Registry bytes, signatures, and SLSA provenance were verified. `0.1.5` is a maintenance candidate for release-chain binding, dashboard capability projection, and transactional Provider Runtime installation; it does not add search or image generation.
@@ -1,6 +1,6 @@
1
1
  # `0.1.4` 图片输入上游证据
2
2
 
3
- - 状态:**公开协议、`grok-4.6` CLI Chat Proxy 图片语义门禁与 Harness 最终 capability 复验均已通过;`grok-4.5` 已失败关闭,发行自动化待完成**
3
+ - 状态:**公开协议、`grok-4.6` CLI Chat Proxy 图片语义门禁、Harness 最终 capability 复验及 `0.1.4` 发布回读均已完成;`grok-4.5` 已失败关闭**
4
4
  - 核对日期:2026-08-28(Asia/Shanghai)
5
5
 
6
6
  本文只记录脱敏、可公开的能力事实和验证边界。不得写入 token、身份字段、真实用户图片、prompt 或模型输出。
@@ -80,13 +80,15 @@ Node 24 协议测试使用内存 attachment store 和合成 jpeg/png 字节,
80
80
  - [x] 同一目录中的 `grok-4.5` 与未知 `grok-future` 都投影为确定性 text-only 占位,不因 Responses backend 自动获得图片能力。
81
81
  - [x] 共编译 4 个请求,网络请求数为 0;临时 attachment 目录在 finally 中删除。
82
82
 
83
- ## 6. 剩余发行门禁
83
+ ## 6. `0.1.4` 发行结果
84
84
 
85
- `grok-4.6` 的图片 wire、普通 user 与一层 tool-result 红蓝语义门禁已经完成,`grok-4.5` 已失败关闭;`0.1.4` 仍是未发布候选。以下事项仍未完成,不能从上述结果推导为已发布或已授权:
85
+ `grok-4.6` 的图片 wire、普通 user 与一层 tool-result 红蓝语义门禁已经完成,`grok-4.5` 已失败关闭。以下独立发布门禁也已关闭:
86
86
 
87
87
  - [x] 按第 5 节最终模型集合完成 Harness attachment/LlmRuntime 复验。
88
88
  - [x] 最终版本与发行文档同步后的 Node 24 全量测试(119 项、117 pass、0 fail、2 项 Windows-only skip)、`npm audit --omit=dev`(0 漏洞)与 `npm run pack:check`(58 个文件)。
89
89
  - [x] 代码 PR [#8](https://github.com/yoshino-xiao7/dsh-grok-provider/pull/8) 已合并,macOS/Windows CI run [33149124946](https://github.com/yoshino-xiao7/dsh-grok-provider/actions/runs/33149124946) 全绿。
90
- - [ ] 最终 release commit、唯一候选 tarball、隔离安装与制品 digest。
91
- - [ ] tag、GitHub Release、Trusted Publisher、Registry 回读和 provenance。
92
- - [ ] 仓库所有者明确授权发布精确 `dsh-grok-provider@0.1.4`。
90
+ - [x] 最终 release commit `59776af8e954aa6e14463c659a22c6c3d5798bb5`、唯一 58 文件/130,958-byte tarball、隔离安装与制品 digest。
91
+ - [x] 不可变 `v0.1.4` tag、GitHub Release、Trusted Publisher run `33151195684`、Registry 逐字节回读、签名和 SLSA provenance。
92
+ - [x] 仓库所有者明确授权并完成精确 `dsh-grok-provider@0.1.4` 发布;npm `latest=0.1.4`。
93
+
94
+ 这些发布事实不扩大图片能力集合。维护版 `0.1.5` 继续沿用相同的 `grok-4.6` image / 其他模型 text-only policy。
package/docs/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Grok Build Provider 文档索引
2
2
 
3
- - 状态:**稳定版 `0.1.4` 候选:`grok-4.6` Proxy 图片语义门禁与 Harness 最终复验均已通过**
4
- - 当前 npm 稳定版本:`0.1.3`
5
- - 当前候选版本:`0.1.4`
6
- - 版本分支:`yukiryou/v0.1.4`
7
- - 候选状态:固定 CLI Chat Proxy 的 `grok-4.6` 图片语义门禁、真实 Harness attachment 最终 capability 复验、最终 Node 24 测试、生产依赖审计与 dry-run 打包检查均已通过,`grok-4.5` 已失败关闭为 text-only;macOS/Windows CI、最终制品核验和精确发布授权仍待完成
3
+ - 状态:**稳定版 `0.1.4` 已发布;`0.1.5` 维护候选已完成 PR 与双平台 CI,待最终制品与发布授权**
4
+ - 当前 npm 稳定版本:`0.1.4`
5
+ - 当前候选版本:`0.1.5`
6
+ - 版本分支:`yukiryou/v0.1.5`
7
+ - 候选状态:发布 tag/ref/commit 与唯一 Release asset 绑定、账户面板图片能力标签、Provider Runtime 安装事务已实现;精确 Node 24 全量测试、生产依赖审计、dry-run 打包及 PR #10 双平台 CI 通过,最终制品和精确发布授权仍待关闭
8
8
  - 兼容基线:DeepSeek Harness `0.1.1-rc.2`
9
9
  - 目标平台:macOS arm64、Windows x64
10
10
 
@@ -45,6 +45,7 @@
45
45
  - [v0.1.2 中英双语发行说明](./releases/v0.1.2.md)
46
46
  - [v0.1.3 中英双语发行说明](./releases/v0.1.3.md)
47
47
  - [v0.1.4 中英双语发行说明](./releases/v0.1.4.md)
48
+ - [v0.1.5 中英双语发行说明](./releases/v0.1.5.md)
48
49
  - [v0.1.2-rc.1 中英双语预发行说明](./releases/v0.1.2-rc.1.md)
49
50
  - [ADR-0001:认证与传输路线](./adr/0001-auth-and-transport-route.md)
50
51
  - [ADR-0002:首版能力边界](./adr/0002-v0.1-scope.md)
@@ -57,7 +58,7 @@
57
58
 
58
59
  ## 开发门禁
59
60
 
60
- `0.1.2-rc.1` 是唯一一次预发行尝试。仓库所有者决定从稳定 `0.1.2` 起不再发行预发行版;正式版缺陷通过新的递增稳定版本修复。`0.1.4` 改变内容输入边界:仅精确 `grok-4.6` 开启图片,普通 user 与一层 tool-result 的红/蓝合成图共四次脱敏 Proxy 请求均通过;`grok-4.5` 的红图语义结果不可靠,因此失败关闭并与其他模型保持 text-only。Harness `0.1.1-rc.2` attachment-local/LlmRuntime 已按最终 capability 复验通过。完整测试、审计、打包、双平台 CI、唯一制品和仓库所有者精确发布授权仍按[逐版发布检查表](./10-release-checklist.md)执行。
61
+ `0.1.2-rc.1` 是唯一一次预发行尝试。仓库所有者决定从稳定 `0.1.2` 起不再发行预发行版;正式版缺陷通过新的递增稳定版本修复。`0.1.4` 已发布:仅精确 `grok-4.6` 开启图片,普通 user 与一层 tool-result 的红/蓝合成图共四次脱敏 Proxy 请求均通过;`grok-4.5` 的红图语义结果不可靠,因此失败关闭并与其他模型保持 text-only。`0.1.5` 不新增模型能力,只维护发布供应链、账户面板投影与 Provider Runtime 安装事务。完整测试、审计、打包、双平台 CI、唯一制品和仓库所有者精确发布授权仍按[逐版发布检查表](./10-release-checklist.md)执行。
61
62
 
62
63
  ## 官方依据
63
64
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  - 状态:Accepted
4
4
  - 日期:2026-08-26
5
- - 适用版本:`0.1.0`
5
+ - 适用版本:`0.1.0`;`0.1.5` 补充逐模型 input-modality 展示契约
6
6
 
7
7
  ## 背景
8
8
 
@@ -34,7 +34,7 @@ xAI 官方 Grok Build 源码公开了两条可复用的 CLI Proxy 能力:
34
34
 
35
35
  新增闭合 RPC action `dashboard`,只接受空对象。成功 DTO 仅包含:
36
36
 
37
- - `models[]`:`id`、`name`、可选 `description`、`contextWindow`、reasoning efforts/default;
37
+ - `models[]`:`id`、`name`、可选 `description`、`contextWindow`、reasoning efforts/default,以及闭合的 `capabilities.{textInput,imageInput,streaming,functionTools}`;
38
38
  - `quota`:闭合状态与可选 `usedPercent`、`remainingPercent`、`periodKind`、`periodStart`、`resetsAt`;
39
39
  - `fetchedAt`。
40
40
 
@@ -53,14 +53,16 @@ xAI 官方 Grok Build 源码公开了两条可复用的 CLI Proxy 能力:
53
53
 
54
54
  ### 4. 模型能力语义
55
55
 
56
- 模型必须来自本次动态 catalog;不维护静态模型白名单。首版展示已验证的 capability:
56
+ 模型必须来自本次动态 catalog;dashboard 不维护第二份模型白名单。展示已验证的 capability:
57
57
 
58
- - 文本输入;
58
+ - 文本/图片输入,严格从同一 `LlmResolvedModelInfo.inputModalities` 投影;`0.1.5` 只有精确 `grok-4.6` 显示图片输入;
59
59
  - 上下文窗口;
60
60
  - reasoning efforts 与默认 effort;
61
61
  - Responses 流式输出;
62
62
  - function tools(Provider transport 已覆盖)。
63
63
 
64
+ 缺失、空、未知、重复或 accessor-backed `inputModalities` 使 models 分支整体失败关闭,不从模型 ID、名称或 Responses backend 在 renderer 中猜测能力。`streaming` 与 `functionTools` 来自当前 Provider 的固定接口能力,不读取任意上游字段。
65
+
64
66
  模型列表是能力展示,不在 `0.1.0` 增加隐藏/禁用模型设置。所有账号可见模型继续出现在 Harness 模型选择器中,避免 UI 过滤与“支持所有模型”的产品要求冲突。
65
67
 
66
68
  ## 失败行为
@@ -80,5 +82,5 @@ xAI 官方 Grok Build 源码公开了两条可复用的 CLI Proxy 能力:
80
82
  - parser fixture 覆盖新 credits、完整类型化周期的 protobuf 零值恢复、不完整/未知周期、旧 monthly、字段缺失、越界百分比、超大/错误 JSON。
81
83
  - transport 测试断言固定 URL、method、redirect、headers、deadline 与响应上限。
82
84
  - RPC 测试断言闭合 payload、64 KiB 序列化边界和原始错误折叠。
83
- - client bundle 测试断言无 token/path/identity 字段,并渲染 dashboard 关键文案。
85
+ - client bundle 测试断言无 token/path/identity 字段,并实际渲染 text-only 与 image-capable 两张模型卡,确保只有后者显示中英文图片输入标签。
84
86
  - macOS 使用本机已授权 Grok Build 做脱敏真值 smoke;Windows 首版发布后真机验证,发布前保持“代码支持、真机未验证”。
@@ -35,7 +35,7 @@ model catalog 为每条记录生成同源的两类信息:
35
35
 
36
36
  `prepareCall()` 必须在同一个 auth/transport generation 中解析完整 route,并将它与 stream closure 一起冻结。图片能力不能由 `api_backend === "responses"` 推导。
37
37
 
38
- `0.1.4` 候选的精确图片模型集合只有 `grok-4.6`;`grok-4.5` 与未知 ID 明确保持文本。若 Proxy 后续提供可信、闭合的逐模型 modality 字段,可另行修订 catalog parser;在此之前不接受模糊 family、alias 或前缀匹配。
38
+ `0.1.4` 发布版与维护版 `0.1.5` 的精确图片模型集合只有 `grok-4.6`;`grok-4.5` 与未知 ID 明确保持文本。若 Proxy 后续提供可信、闭合的逐模型 modality 字段,可另行修订 catalog parser;在此之前不接受模糊 family、alias 或前缀匹配。
39
39
 
40
40
  ### 3. wire shape
41
41
 
@@ -0,0 +1,53 @@
1
+ ## 中文
2
+
3
+ `0.1.5` 聚焦于已发布 `0.1.4` 之后的维护,不扩展模型协议、认证方式或网络边界。
4
+
5
+ ### 变更
6
+
7
+ - 发布工作流现在必须从精确稳定 tag ref 启动,并验证该 tag 剥离后的 commit 与工作流 commit 一致。
8
+ - 发布前要求 GitHub Release 非草稿、非预发行、tag 精确匹配,且只包含唯一的 `dsh-grok-provider-0.1.5.tgz`;发布 Node.js 固定为 `24.19.0`。
9
+ - 账户面板从模型目录的 `inputModalities` 投影能力标签:精确 `grok-4.6` 显示图片输入,text-only 模型不显示。
10
+ - Provider Runtime 安装失败时按相反顺序回滚已完成的注册;正常卸载保持幂等,并尽力执行全部清理项。
11
+ - 文档同步 `0.1.4` 的最终发布事实,并修正 SSE 只有整体请求期限、没有独立 idle timeout 的表述。
12
+
13
+ ### 兼容性与范围
14
+
15
+ - DeepSeek Harness:精确 `0.1.1-rc.2`
16
+ - Node.js:`>=24.19.0`
17
+ - 平台:macOS arm64、Windows x64(Windows 仍为代码与 CI 支持,未声称独立真机验收)
18
+ - 图片:沿用 `0.1.4`;只有精确 `grok-4.6` 接收有界 JPEG/PNG attachment,`grok-4.5` 与其他模型保持 text-only
19
+ - 不包含 Web/X Search、图片生成、任意 URL 下载、API Key、自定义 endpoint、多账号或新 SSE 事件
20
+
21
+ 发布后安装精确版本:
22
+
23
+ ```sh
24
+ dsh plugin --profile web add dsh-grok-provider@0.1.5
25
+ dsh web
26
+ ```
27
+
28
+ ## English
29
+
30
+ `0.1.5` focuses on maintenance after published `0.1.4`. It does not expand the model protocol, authentication modes, or network boundary.
31
+
32
+ ### Changes
33
+
34
+ - The publishing workflow must run from the exact stable tag ref and verifies that the peeled tag commit equals the workflow commit.
35
+ - Publishing requires a matching, non-draft, non-prerelease GitHub Release with exactly one `dsh-grok-provider-0.1.5.tgz` asset; the publishing runtime is pinned to Node.js `24.19.0`.
36
+ - The account dashboard projects capability badges from catalog `inputModalities`: exact `grok-4.6` shows image input while text-only models do not.
37
+ - Provider Runtime installation rolls back completed registrations in reverse order after a later failure; normal disposal remains idempotent and attempts every cleanup.
38
+ - Documentation records the final `0.1.4` release facts and accurately states that SSE has an overall request deadline, not an independent idle timeout.
39
+
40
+ ### Compatibility and scope
41
+
42
+ - DeepSeek Harness: exact `0.1.1-rc.2`
43
+ - Node.js: `>=24.19.0`
44
+ - Platforms: macOS arm64 and Windows x64 (Windows remains code/CI supported without an independent real-device acceptance claim)
45
+ - Images: unchanged from `0.1.4`; only exact `grok-4.6` accepts bounded JPEG/PNG attachments, while `grok-4.5` and all other models remain text-only
46
+ - Excludes Web/X Search, image generation, arbitrary URL downloads, API-key mode, custom endpoints, multiple accounts, and new SSE events
47
+
48
+ After publication, install the exact version:
49
+
50
+ ```sh
51
+ dsh plugin --profile web add dsh-grok-provider@0.1.5
52
+ dsh web
53
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-grok-provider",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Clean-room Grok Build provider for DeepSeek Harness with official CLI browser authentication",
5
5
  "type": "module",
6
6
  "license": "MIT",