dsh-grok-provider 0.1.9 → 0.1.11
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 +20 -1
- package/README.en.md +14 -12
- package/README.md +14 -12
- package/SECURITY.md +4 -4
- package/dist/host/index.mjs +19 -5
- package/dist/internal/grok-adapter.mjs +13 -2
- package/dist/internal/responses-codec.mjs +200 -20
- package/dist/internal/responses-request-compiler.mjs +1 -0
- package/dist/internal/responses-request.mjs +8 -1
- package/docs/01-product-requirements.md +7 -3
- package/docs/03-security-threat-model.md +6 -4
- package/docs/04-harness-contract.md +2 -2
- package/docs/05-test-plan.md +5 -3
- package/docs/06-release-plan.md +6 -6
- package/docs/09-implementation-status.md +34 -9
- package/docs/10-release-checklist.md +33 -4
- package/docs/11-capability-roadmap.md +28 -8
- package/docs/12-upstream-image-input-evidence.md +1 -1
- package/docs/13-upstream-search-evidence.md +13 -6
- package/docs/README.md +11 -8
- package/docs/adr/0010-default-off-web-x-search.md +24 -2
- package/docs/releases/v0.1.10.md +48 -0
- package/docs/releases/v0.1.11.md +72 -0
- package/docs/releases/v0.1.8.md +2 -2
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.11 - 2026-08-30
|
|
4
|
+
|
|
5
|
+
- Fix `INVALID_RESPONSE` failures when exact `grok-4.6` at High Effort continues after Web Search by accepting the observed one-time reuse of an already closed reasoning item ID as a new empty reasoning placeholder only after one completed Search, while rejecting open, cross-type, non-empty, or repeated reuse.
|
|
6
|
+
- Accept closed empty reasoning output items without weakening sequence, output-index, item-status, or encrypted-replay validation.
|
|
7
|
+
- Decode the official Responses raw-reasoning lifecycle (`reasoning_text` content parts plus `response.reasoning_text.delta` / `done`) and keep raw reasoning strictly mutually exclusive with the existing reasoning-summary lifecycle.
|
|
8
|
+
- Keep raw plaintext out of replay metadata: subsequent requests send only `encrypted_content` with `summary: []` and never replay or relabel raw plaintext as a summary; live raw reasoning deltas remain visible to Harness like summary reasoning deltas.
|
|
9
|
+
- Add focused regressions for valid empty/reused reasoning, raw reasoning streaming and replay, plus malformed reuse, mixed raw/summary, out-of-order, duplicate, and incomplete lifecycle rejection.
|
|
10
|
+
- Re-run a redacted real `grok-4.6` Web Search probe through the production decoder: one POST yielded 68 events, 34 summary deltas, zero raw-reasoning deltas, one accepted finish, and no saved prompt, response text, query, citation URL, or credential. This verifies the observed summary/Search path only; raw reasoning remains fixture-verified rather than live-probe verified.
|
|
11
|
+
- Keep authentication, settings, model routing, image input, Search descriptors, citations, fixed endpoints, and platform support unchanged.
|
|
12
|
+
|
|
13
|
+
## 0.1.10 - 2026-08-30
|
|
14
|
+
|
|
15
|
+
- Register the `llm-grok` Host settings namespace through Harness's canonical settings module so the Web Search and X Search controls are writable instead of permanently `unavailable`.
|
|
16
|
+
- Resolve Search settings from schema defaults, composition config, and the persisted user layer, while retaining the composition config when no settings provider is mounted.
|
|
17
|
+
- Snapshot the current Search policy once at each adapter-call boundary before model discovery awaits; later calls observe committed setting changes while prepared and in-flight calls keep their original policy.
|
|
18
|
+
- Add real `SettingsProvider` integration coverage for namespace defaults, lifecycle cleanup, persisted updates, composition fallback, and prepared-call isolation, plus a deferred-discovery adapter regression.
|
|
19
|
+
- Keep authentication, credentials, endpoints, Search protocol allowlists, citation handling, image input, and platform support unchanged.
|
|
20
|
+
|
|
3
21
|
## 0.1.9 - 2026-08-30
|
|
4
22
|
|
|
5
23
|
- Add independent, default-off Web Search and X Search Provider settings for exact `grok-4.6`; keep every other dynamically discovered model Search-disabled until the same fixed-Proxy evidence exists.
|
|
@@ -8,11 +26,12 @@
|
|
|
8
26
|
- Decode the fixed Proxy's standard Web Search lifecycle and its Grok-Build-specific four-name X Search `custom_tool_call` lifecycle as server-executed activity that emits no Harness tool-call chunks; observing either category suppresses encrypted reasoning replay for that response.
|
|
9
27
|
- Preserve inline citation Markdown as assistant text while bounding and discarding structured citation metadata; never follow, preview, or download citation URLs.
|
|
10
28
|
- Add bilingual Search risk disclosures to the existing Grok Build settings page through Harness `settingsScope`, without a second configuration RPC, renderer-local persistence, a production dependency, a new endpoint, or a new authentication mode.
|
|
29
|
+
- Known issue: the published Host omitted the matching `llm-grok` settings registration, leaving both user-facing Search controls disabled. `0.1.10` repairs this integration and the missing live-setting consumption path.
|
|
11
30
|
|
|
12
31
|
## 0.1.8 - 2026-08-30 (withdrawn)
|
|
13
32
|
|
|
14
33
|
- Briefly published a Grok-only sidebar quota card that moved the sidebar's Grok quota querying and display ownership into the Provider, then withdrew the release by reverting that change.
|
|
15
|
-
- The npm Registry version `dsh-grok-provider@0.1.8` remains permanently reserved and cannot be reused after unpublish; `latest`
|
|
34
|
+
- The npm Registry version `dsh-grok-provider@0.1.8` remains permanently reserved and cannot be reused after unpublish; `latest` returned to `0.1.7` after withdrawal, and the independent Search slice moved to the subsequently published `0.1.9`.
|
|
16
35
|
|
|
17
36
|
## 0.1.7 - 2026-08-29
|
|
18
37
|
|
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, image input, optional Web/X Search, 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 candidate is `0.1.
|
|
7
|
+
> Unofficial community project; not affiliated with xAI or DeepSeek Harness. The current source candidate is `0.1.11`; the current stable release and npm Registry `latest` are both `0.1.10`. Published `0.1.10` repaired Web/X Search settings registration, but real use later found that `grok-4.6` at High Effort can hit a generic invalid-response error while continuing after Web Search because of a reasoning-lifecycle compatibility gap; unpublished `0.1.11` is the focused protocol repair. Version `0.1.8` was published and then withdrawn and cannot be reused. 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
|
|
|
@@ -15,7 +15,7 @@ Use an already authenticated official Grok Build account from DeepSeek Harness,
|
|
|
15
15
|
| Models | Discovers every model visible to the account at runtime; no static model allowlist |
|
|
16
16
|
| Conversations | Streaming Responses text, reasoning, encrypted reasoning replay, usage, and finish reasons |
|
|
17
17
|
| Images | Only exact `grok-4.6` accepts bounded JPEG/PNG images from Harness attachments; `grok-4.5` and all other models remain text-only |
|
|
18
|
-
| Search |
|
|
18
|
+
| Search | `0.1.10` provides independent, default-off Web Search and X Search for exact `grok-4.6`; the `0.1.11` candidate repairs the High Effort + Web Search reasoning-continuation lifecycle, while remote lifecycles are never misrepresented as local tools |
|
|
19
19
|
| Tools | Returns function calls to the Harness permission layer; the provider never executes tools |
|
|
20
20
|
| Account dashboard | Login status, weekly/monthly quota, reset time, dynamic model capabilities and reasoning efforts |
|
|
21
21
|
| Surfaces | Bilingual Web settings and a closed `/grok` TUI command set |
|
|
@@ -40,10 +40,10 @@ When the network is reachable and OIDC discovery succeeds, the official CLI open
|
|
|
40
40
|
|
|
41
41
|
### 2. Install the provider
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
`0.1.11` is not published yet. After it is published and read back from the Registry, install that exact version from npm:
|
|
44
44
|
|
|
45
45
|
```sh
|
|
46
|
-
dsh plugin --profile web add dsh-grok-provider@0.1.
|
|
46
|
+
dsh plugin --profile web add dsh-grok-provider@0.1.11
|
|
47
47
|
dsh web
|
|
48
48
|
```
|
|
49
49
|
|
|
@@ -130,8 +130,8 @@ Uninstalling the provider does not remove the official Grok CLI or directly modi
|
|
|
130
130
|
|
|
131
131
|
## Sources and discovery
|
|
132
132
|
|
|
133
|
-
- Current npm stable release: [dsh-grok-provider@0.1.
|
|
134
|
-
- Most recent GitHub release and integrity values: [v0.1.
|
|
133
|
+
- Current npm stable release: [dsh-grok-provider@0.1.10](https://www.npmjs.com/package/dsh-grok-provider/v/0.1.10) (unique artifact, dual-platform CI, signatures, and provenance verified; known High Effort + Web Search reasoning-compatibility defect)
|
|
134
|
+
- Most recent GitHub release and integrity values: [v0.1.10](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.10)
|
|
135
135
|
- GitHub community discovery: the repository carries the DeepSeek Harness-recommended `dsh-plugin` and `dsh` topics
|
|
136
136
|
- 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`
|
|
137
137
|
|
|
@@ -139,21 +139,21 @@ Directory inclusion is not an endorsement by xAI or DeepSeek Harness. [Listing P
|
|
|
139
139
|
|
|
140
140
|
## Compatibility and scope
|
|
141
141
|
|
|
142
|
-
| Item | `0.1.
|
|
142
|
+
| Item | `0.1.10` stable / `0.1.11` candidate status |
|
|
143
143
|
| --- | --- |
|
|
144
144
|
| DeepSeek Harness | Exact support for `0.1.1-rc.2` |
|
|
145
145
|
| Node.js | `>=24.19.0` |
|
|
146
|
-
| macOS arm64 |
|
|
147
|
-
| Windows x64 |
|
|
146
|
+
| macOS arm64 | Image sending has real-Harness confirmation; focused `0.1.11` regressions, the redacted summary/Search probe, and the code merge commit's macOS 14 CI pass; the release-evidence commit's final CI and unique artifact remain pending |
|
|
147
|
+
| Windows x64 | The `0.1.11` code merge commit's Windows 2022 CI and existing slow fakes pass; the release-evidence commit's final CI remains pending. On a reachable network the official CLI generates the URL and opens the browser, and that path still lacks real-device Windows acceptance |
|
|
148
148
|
| macOS x64 / Linux | Unsupported |
|
|
149
149
|
| Grok CLI | No full-version lock; official path, `login --oauth` capability, and production OIDC credential contract are enforced |
|
|
150
150
|
| Models | Every account catalog model whose backend has a strict codec in this release |
|
|
151
151
|
|
|
152
|
-
`0.1.
|
|
152
|
+
`0.1.11` preserves the published 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. Image sending has been confirmed in a real Harness conversation. 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 fixed `detail:"high"`; URLs, filesystem paths, file IDs, and caller-supplied data URLs are rejected. Private reasoning in ordinary user/system history is omitted while adjacent visible text remains ordered.
|
|
153
153
|
|
|
154
154
|
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.
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
Published `0.1.10` registers and persists both Search settings through the canonical Harness settings module; each new call reads the latest value once before model discovery, while prepared and in-flight calls keep their original snapshot. Real use later found that exact `grok-4.6` at High Effort may close a reasoning item, complete Search, and then reuse the same ID once as an empty placeholder, which the old decoder rejected. The `0.1.11` candidate permits that strictly empty one-time reuse only when a completed Search lies between the two reasoning lifecycles and adds the official raw `reasoning_text` lifecycle. Raw and summary modes are mutually exclusive; replay metadata does not retain raw plaintext, later requests send only `encrypted_content` with an empty summary, and live raw deltas remain visible to Harness as reasoning output. A redacted real probe observed 34 summary deltas and zero raw deltas, so it verifies only the summary/Search path; raw reasoning remains fixture-verified. Search stays default-off and limited to exact `grok-4.6`; remote activity is not projected as a local tool, and citation URLs are never opened or downloaded. Search results are untrusted remote data, so verify sources before commands or file changes. 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).
|
|
157
157
|
|
|
158
158
|
## How it works
|
|
159
159
|
|
|
@@ -255,7 +255,9 @@ Read the [contributing guide](CONTRIBUTING.md) before filing an issue or PR. Cha
|
|
|
255
255
|
- [x] Publish `0.1.5`: maintenance for release binding, dashboard capability badges, and transactional Provider Runtime installation; the unique artifact, dual-platform CI, signatures, and SLSA provenance are verified
|
|
256
256
|
- [x] Publish `0.1.6`: image-history reasoning compatibility and per-stage official-CLI deadline repair for Windows; image sending is confirmed in a real Harness conversation
|
|
257
257
|
- [x] Publish `0.1.7`: Provider/CLI version diagnostics, CLI installation recovery, redacted OIDC discovery-timeout settlement, and the `IconThinkOutline16` settings-navigation compatibility layer
|
|
258
|
-
- [
|
|
258
|
+
- [x] Publish `0.1.9`: added the Web/X Search protocol and settings page; the unique artifact, dual-platform CI, signatures, and SLSA provenance are verified; post-release verification found the missing Host settings namespace and unusable controls
|
|
259
|
+
- [x] Publish `0.1.10`: `llm-grok` registration, per-call capture, unique artifact, dual-platform CI, signatures, and provenance are complete
|
|
260
|
+
- [ ] Publish `0.1.11`: repair High Effort + Web Search reasoning-lifecycle compatibility; the code PR and main dual-platform CI pass, while release-evidence final CI, the unique artifact, exact authorization, Registry, and provenance readback remain pending
|
|
259
261
|
- [ ] A subsequent slice: opt-in image generation (inline results only, committed through Harness attachments)
|
|
260
262
|
- [ ] Complete independent Windows x64 acceptance and publish a later stable fix if needed
|
|
261
263
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
让 DeepSeek Harness 使用你已登录的官方 Grok Build 账号:动态模型发现、流式推理、图片输入、可选 Web/X Search、工具调用,以及账号额度与模型能力面板。
|
|
6
6
|
|
|
7
|
-
> 非官方社区项目,与 xAI 或 DeepSeek Harness 官方无隶属关系。当前源码候选版本为 `0.1.
|
|
7
|
+
> 非官方社区项目,与 xAI 或 DeepSeek Harness 官方无隶属关系。当前源码候选版本为 `0.1.11`;当前稳定版及 npm Registry 的 `latest` 均为 `0.1.10`。已发布的 `0.1.10` 修复了 Web/X Search 设置注册,但真实使用随后发现 `grok-4.6` 在 High Effort + Web Search 续跑时可能因 reasoning 生命周期兼容缺口返回通用非法响应;尚未发布的 `0.1.11` 专门修复该协议兼容问题。`0.1.8` 曾发布后撤回且版本号不可复用。项目不再发行预发行版;正式版缺陷通过新的递增稳定版本修复。
|
|
8
8
|
|
|
9
9
|
## 它解决什么问题
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
| 模型 | 运行时读取账号可见的全部 Grok Build 模型,不维护静态模型白名单 |
|
|
16
16
|
| 对话 | Responses 流式文本、reasoning、加密 reasoning replay、usage 与 finish reason |
|
|
17
17
|
| 图片 | 仅精确 `grok-4.6` 接收 Harness attachment 中有界的 JPEG/PNG 图片;`grok-4.5` 与其他模型保持 text-only |
|
|
18
|
-
| 搜索 | `0.1.
|
|
18
|
+
| 搜索 | `0.1.10` 已让精确 `grok-4.6` 的 Web Search / X Search 可默认关闭、分别开启;`0.1.11` 候选修复 High Effort + Web Search 续跑的 reasoning 生命周期兼容,远端 lifecycle 仍不伪装成本地工具 |
|
|
19
19
|
| 工具 | 将 function call 交回 Harness 权限层;Provider 本身不执行工具 |
|
|
20
20
|
| 账户面板 | 登录状态、每周/月额度、重置时间、动态模型能力与 reasoning 档位 |
|
|
21
21
|
| 界面 | Web 设置页中英文切换;TUI 提供闭合的 `/grok` 命令 |
|
|
@@ -40,10 +40,10 @@ grok models
|
|
|
40
40
|
|
|
41
41
|
### 2. 安装 Provider
|
|
42
42
|
|
|
43
|
-
`0.1.
|
|
43
|
+
`0.1.11` 尚未发布;待它发布并完成 Registry 回读后,从 npm 安装该精确版本:
|
|
44
44
|
|
|
45
45
|
```sh
|
|
46
|
-
dsh plugin --profile web add dsh-grok-provider@0.1.
|
|
46
|
+
dsh plugin --profile web add dsh-grok-provider@0.1.11
|
|
47
47
|
dsh web
|
|
48
48
|
```
|
|
49
49
|
|
|
@@ -130,8 +130,8 @@ dsh web
|
|
|
130
130
|
|
|
131
131
|
## 项目来源与发现
|
|
132
132
|
|
|
133
|
-
- npm 当前稳定版:[dsh-grok-provider@0.1.
|
|
134
|
-
- GitHub 最近发行版与校验值:[v0.1.
|
|
133
|
+
- npm 当前稳定版:[dsh-grok-provider@0.1.10](https://www.npmjs.com/package/dsh-grok-provider/v/0.1.10)(唯一制品、双平台 CI、签名与 provenance 已验证;High Effort + Web Search 续跑存在已知 reasoning 兼容缺陷)
|
|
134
|
+
- GitHub 最近发行版与校验值:[v0.1.10](https://github.com/yoshino-xiao7/dsh-grok-provider/releases/tag/v0.1.10)
|
|
135
135
|
- GitHub 社区发现:仓库已添加 DeepSeek Harness 官方推荐的 `dsh-plugin` 与 `dsh` Topics
|
|
136
136
|
- YukiRyou 受管来源:[deepseek-yukiryou-plugin-catalog](https://github.com/yoshino-xiao7/deepseek-yukiryou-plugin-catalog),当前仍锁定已完成真机验收的 `dsh-grok-provider@0.1.0`,且只标记 `darwin-arm64`
|
|
137
137
|
|
|
@@ -139,21 +139,21 @@ dsh web
|
|
|
139
139
|
|
|
140
140
|
## 兼容性与范围
|
|
141
141
|
|
|
142
|
-
| 项目 | `0.1.
|
|
142
|
+
| 项目 | `0.1.10` 稳定版 / `0.1.11` 候选状态 |
|
|
143
143
|
| --- | --- |
|
|
144
144
|
| DeepSeek Harness | 精确支持 `0.1.1-rc.2` |
|
|
145
145
|
| Node.js | `>=24.19.0` |
|
|
146
|
-
| macOS arm64 |
|
|
147
|
-
| Windows x64 |
|
|
146
|
+
| macOS arm64 | 图片发送已完成真实 Harness 验证;`0.1.11` 聚焦回归、脱敏真实 summary/Search 探针及代码 merge commit 的 macOS 14 CI 通过;发布证据提交的 final CI 与唯一制品待关闭 |
|
|
147
|
+
| Windows x64 | `0.1.11` 代码 merge commit 的 Windows 2022 CI 与现有 slow-fake 通过;发布证据提交的 final CI 待关闭。网络可达时由官方 CLI 生成 URL 并打开浏览器,该路径仍未完成 Windows 真机验收 |
|
|
148
148
|
| macOS x64 / Linux | 不支持 |
|
|
149
149
|
| Grok CLI | 不锁完整版本;严格校验官方路径、`login --oauth` 能力与生产 OIDC 凭据契约 |
|
|
150
150
|
| 模型 | 当前账号目录中 backend 已被严格 codec 支持的全部模型 |
|
|
151
151
|
|
|
152
|
-
`0.1.
|
|
152
|
+
`0.1.11` 沿用已发布版本的图片边界:只为精确的 `grok-4.6` 开启图片输入;`grok-4.5` 与其他动态发现的模型继续按 text-only 处理。图片发送已在真实 Harness 对话中确认可用。图片只能来自 Harness attachment service 的已验证 JPEG/PNG 投影,支持普通用户内容和一层工具结果中的图片,并固定使用 `detail:"high"`;不接受 URL、文件路径、file ID 或调用方预制的 data URL。普通 user/system 历史中的私有 reasoning 会被省略并保留相邻可见文本。
|
|
153
153
|
|
|
154
154
|
每张投影图片最多 4 MiB、16,777,216 像素且任一边不超过 8192px;每次请求最多保留 8 张、投影字节合计最多 8 MiB。超限时按全局最旧优先移除图片并保留 Harness 的文本占位,最终 JSON 仍受 16 MiB 上限约束。
|
|
155
155
|
|
|
156
|
-
`0.1.
|
|
156
|
+
已发布的 `0.1.10` 使用 Harness 官方 settings 模块注册并持久化两个 Search 设置;每个新调用在模型发现前读取一次最新值,已准备和在途调用保持原快照。真实使用随后发现精确 `grok-4.6` 在 High Effort + Web Search 续跑时,可能先关闭 reasoning 项,在一次 Search 完成后再把同一 ID 使用一次作为空占位,旧解码器会因此失败关闭。`0.1.11` 候选仅在已完成 Search 位于两段 reasoning 之间时允许该 ID 以严格空项再出现一次,并增加官方 raw `reasoning_text` 生命周期;raw 与 summary 互斥,replay 元数据不保存 raw 明文,后续请求只发送 `encrypted_content` 与空 summary,当前流中的 raw delta 仍会作为 Harness 可见 reasoning 输出。脱敏真实探针观察到 34 个 summary delta、0 个 raw delta,因此只验证 summary/Search 路径,raw reasoning 仍只有 fixture 回归。Search 继续只对精确 `grok-4.6` 默认关闭地开放;远端活动不变成本地工具,citation URL 不会被打开或下载。搜索结果属于不可信远端数据,执行命令或修改文件前应核实来源。图片生成、任意文件下载、API Key 模式、多账号、企业 OIDC、ACP 与 Headless agent 封装仍不在本版本范围内;后续切片见[能力路线图](docs/11-capability-roadmap.md)。
|
|
157
157
|
|
|
158
158
|
## 工作原理
|
|
159
159
|
|
|
@@ -255,7 +255,9 @@ npm run pack:check
|
|
|
255
255
|
- [x] 发布 `0.1.5`:发布链路、账户面板能力标签与 Provider Runtime 安装回滚维护版;唯一制品、双平台 CI、签名与 SLSA provenance 均已验证
|
|
256
256
|
- [x] 发布 `0.1.6`:图片历史 reasoning 兼容与 Windows 官方 CLI 分阶段 deadline 修复版;图片发送已完成真实 Harness 验证
|
|
257
257
|
- [x] 发布 `0.1.7`:Provider/CLI 双版本诊断、CLI 安装恢复、OIDC discovery 超时脱敏结算与 `IconThinkOutline16` 设置导航兼容层
|
|
258
|
-
- [
|
|
258
|
+
- [x] 发布 `0.1.9`:加入 Web/X Search 协议与设置页,唯一制品、双平台 CI、签名与 SLSA provenance 均已验证;发布后确认 Host 设置 namespace 遗漏,开关不可用
|
|
259
|
+
- [x] 发布 `0.1.10`:`llm-grok` 注册、按调用读取设置、唯一制品、双平台 CI、签名与 provenance 已完成
|
|
260
|
+
- [ ] 发布 `0.1.11`:修复 High Effort + Web Search reasoning 生命周期兼容;代码 PR 与 main 双平台 CI 已通过,发布证据 final CI、唯一制品、精确授权、Registry 与 provenance 回读待完成
|
|
259
261
|
- [ ] 再后续独立切片:默认关闭的图片生成(只收内联结果,提交 Harness attachment)
|
|
260
262
|
- [ ] 完成 Windows x64 独立真机验收并按需发布后续稳定修复版
|
|
261
263
|
|
package/SECURITY.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
## 支持范围
|
|
6
6
|
|
|
7
|
-
本安全策略对应源码候选版本 `0.1.
|
|
7
|
+
本安全策略对应源码候选版本 `0.1.11`;当前稳定版及 npm Registry 的 `latest` 均为 `0.1.10`。`0.1.8` 曾发布后撤回且版本号不可复用。已发布的 `0.1.10` 完成唯一制品、macOS 14 / Windows 2022 CI、Registry 字节、签名与 provenance 回读,并修复 Web/X Search 的 Host settings 注册;真实使用随后发现精确 `grok-4.6` 在 High Effort + Web Search 续跑时可能复用已关闭 reasoning ID 作为空占位,旧解码器会失败关闭为通用非法响应。尚未发布的 `0.1.11` 只修复该 reasoning 生命周期兼容并加入官方 raw reasoning 事件支持;代码 PR #25 与 main CI run `33302830043` 双平台已通过,发布证据提交的 final CI、唯一制品、精确授权和发布回读仍待完成。DeepSeek Harness、Node.js 与操作系统按发布线明确维护;Grok CLI 不使用完整版本字符串作为信任门禁,而是严格校验官方默认路径、命令能力、生产 OIDC 凭据契约和固定服务端协议。图片发送已在真实 Harness 对话中确认可用;脱敏真实 Search 探针不保存 prompt、回复、检索词、citation URL 或凭据,但也不覆盖浏览器手工对话、OAuth、完整真实会话或网络可达 Windows 真机外部浏览器弹出。
|
|
8
8
|
|
|
9
|
-
`0.1.
|
|
9
|
+
`0.1.11` 沿用已发布版本的图片边界:只为精确 `grok-4.6` 提供有界图片输入;`grok-4.5` 与所有其他模型保持 text-only。普通 user/system 历史中的私有 reasoning 会被省略并保留相邻可见 text/image;只有有效的同 Provider assistant 历史可进入加密 reasoning replay,一层 tool-result 仍只接受公开 text/image。图片只能来自 Harness attachment service 的已验证 JPEG/PNG 投影,以 `detail:"high"` 发送,并受单图字节、像素、边长、数量、总字节与最终 JSON 上限约束;URL、路径、file ID 和调用方预制 data URL 都会被拒绝。
|
|
10
10
|
|
|
11
11
|
`0.1.7` 的闭合运行时诊断、CLI 安装恢复、OIDC timeout 脱敏结算和 `IconThinkOutline16` 兼容层在本版保持不变。官方 CLI 仍负责生成登录 URL 与打开外部浏览器;插件不修复系统 DNS、代理、防火墙、VPN 或 CLI 行为。
|
|
12
12
|
|
|
13
|
-
`0.1.
|
|
13
|
+
已发布的 `0.1.10` 通过 Harness 官方 settings module 注册 `llm-grok`,按 schema 默认值、组合配置、持久化用户层的顺序解析两个 Search 开关;设置提交只影响之后创建的调用。`0.1.11` 不改变这条设置链路,只收窄地扩展响应 codec:已闭合的 reasoning ID 最多可再出现一次,且必须有一个已完成的 server Search 位于两段 reasoning 之间,第二段必须是严格空项;无 Search 间隔、未闭合、跨类型、非空或第二次复用继续失败关闭。空 reasoning 项仍须完整闭合。官方 raw `reasoning_text` 与 summary reasoning 采用互斥状态机,混用、乱序、重复、截断和内容不一致均被拒绝;replay 元数据只保存加密内容及类型标记,不保存 raw 明文,下一请求只发送 `encrypted_content` 与 `summary: []`,不会回传或伪装为 summary;当前流中的 raw delta 仍作为 Harness 可见 reasoning 输出。脱敏真实探针完成 1 次 POST、68 个事件、34 个 summary delta、0 个 raw delta、1 个 finish,因此只能证明当前 summary/Search 路径,raw reasoning 仍只有协议 fixture 证据。Search 继续只为精确 `grok-4.6` 默认关闭地开放;结果和 citation 仍是不可信远端数据,Provider 不把远端 lifecycle 映射为 Harness 本地工具,也不跟随或下载 citation URL。固定路径/argv、最小环境、无 shell、输出上限、凭据、固定 origin 与 URL 拒绝边界不变;本版不新增生成、认证模式或 endpoint。
|
|
14
14
|
|
|
15
15
|
## 私下报告漏洞
|
|
16
16
|
|
|
@@ -38,4 +38,4 @@
|
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
English summary: GitHub Private vulnerability reporting is enabled and preferred. The current source candidate is `0.1.
|
|
41
|
+
English summary: GitHub Private vulnerability reporting is enabled and preferred. The current source candidate is `0.1.11`; the current stable release and npm Registry `latest` are both `0.1.10`. Version `0.1.8` was published and then withdrawn, and npm version numbers cannot be reused. Published `0.1.10` completed unique-artifact, macOS 14 / Windows 2022 CI, Registry-byte, signature, and provenance verification and repaired Host Search settings registration. Real use later found that exact `grok-4.6` at High Effort may close a reasoning ID, complete Search, and then reuse it once as an empty placeholder, which the old decoder rejected. Unpublished `0.1.11` permits that strictly empty reuse only when a completed server Search lies between the two reasoning lifecycles, accepts fully closed empty reasoning items, and adds a mutually exclusive official raw `reasoning_text` lifecycle. Replay metadata does not retain raw plaintext; later requests carry only `encrypted_content` plus `summary: []`, while live raw deltas remain visible to Harness. A redacted real probe produced one POST, 68 events, 34 summary deltas, zero raw deltas, and one finish, so it verifies only the summary/Search path; raw reasoning remains fixture-verified. Code PR #25 and main CI run `33302830043` passed on macOS 14 and Windows 2022; the release-evidence commit's final CI, the unique artifact, exact authorization, and release readback remain pending. Authentication, settings, image input, citations, endpoints, and platform support are unchanged. Search results and citations remain untrusted remote data. Never send credentials, identity data, prompts, tool arguments, cookies, image bytes, Search contents, or unreviewed diagnostics.
|
package/dist/host/index.mjs
CHANGED
|
@@ -4,6 +4,10 @@ import { randomUUID } from "node:crypto"
|
|
|
4
4
|
import packageJson from "../../package.json" with { type: "json" }
|
|
5
5
|
|
|
6
6
|
import { attributionHeaders } from "@deepseek-ai/dsh-llm"
|
|
7
|
+
import {
|
|
8
|
+
installSettingsSection,
|
|
9
|
+
settingsNamespace,
|
|
10
|
+
} from "@deepseek-ai/dsh-settings"
|
|
7
11
|
import Schema from "@deepseek-ai/schemastery"
|
|
8
12
|
|
|
9
13
|
import {
|
|
@@ -27,6 +31,7 @@ import { createRuntimeDiagnostics } from "../internal/runtime-diagnostics.mjs"
|
|
|
27
31
|
|
|
28
32
|
export const name = "llm-grok"
|
|
29
33
|
export const inject = ["llm"]
|
|
34
|
+
const SETTINGS_NAMESPACE = settingsNamespace(name)
|
|
30
35
|
|
|
31
36
|
export const Config = Schema.object({
|
|
32
37
|
webSearch: Schema.boolean().default(false).description("Allow xAI Web Search for regular Grok requests"),
|
|
@@ -39,10 +44,7 @@ export function apply(ctx, config) {
|
|
|
39
44
|
throw new TypeError("dsh-grok-provider supports macOS and Windows")
|
|
40
45
|
}
|
|
41
46
|
|
|
42
|
-
|
|
43
|
-
webSearch: config.webSearch,
|
|
44
|
-
xSearch: config.xSearch,
|
|
45
|
-
})
|
|
47
|
+
let currentConfig = () => config
|
|
46
48
|
|
|
47
49
|
const homeDir = os.homedir()
|
|
48
50
|
let refreshOfficialCredential
|
|
@@ -72,10 +74,22 @@ export function apply(ctx, config) {
|
|
|
72
74
|
createAdapter: ({ getGeneration }) => createGrokAdapter({
|
|
73
75
|
getGeneration,
|
|
74
76
|
getAttachmentStore: () => ctx.get("attachments"),
|
|
77
|
+
getSearchPolicy: () => {
|
|
78
|
+
const current = currentConfig()
|
|
79
|
+
return {
|
|
80
|
+
webSearch: current.webSearch,
|
|
81
|
+
xSearch: current.xSearch,
|
|
82
|
+
}
|
|
83
|
+
},
|
|
75
84
|
mapError: mapLlmError,
|
|
76
|
-
searchPolicy,
|
|
77
85
|
}),
|
|
78
86
|
})
|
|
87
|
+
installSettingsSection(ctx, SETTINGS_NAMESPACE, Config, config, {
|
|
88
|
+
setSource(source) {
|
|
89
|
+
currentConfig = source
|
|
90
|
+
},
|
|
91
|
+
onChange() {},
|
|
92
|
+
})
|
|
79
93
|
const authController = createAuthController({
|
|
80
94
|
registry: runtime.auth,
|
|
81
95
|
randomUUID,
|
|
@@ -11,14 +11,23 @@ export class GrokAdapterError extends Error {
|
|
|
11
11
|
export function createGrokAdapter({
|
|
12
12
|
getGeneration,
|
|
13
13
|
getAttachmentStore = () => undefined,
|
|
14
|
-
|
|
14
|
+
getSearchPolicy = () => undefined,
|
|
15
15
|
mapError = (error) => error,
|
|
16
16
|
}) {
|
|
17
17
|
if (typeof getGeneration !== "function") {
|
|
18
18
|
throw new TypeError("A Grok adapter generation source is required")
|
|
19
19
|
}
|
|
20
20
|
if (typeof mapError !== "function") throw new TypeError("Invalid Grok adapter error mapper")
|
|
21
|
-
|
|
21
|
+
if (typeof getAttachmentStore !== "function") {
|
|
22
|
+
throw new TypeError("Invalid Grok attachment store source")
|
|
23
|
+
}
|
|
24
|
+
if (typeof getSearchPolicy !== "function") {
|
|
25
|
+
throw new TypeError("Invalid Grok Search policy source")
|
|
26
|
+
}
|
|
27
|
+
const captureCallProtocol = () => createResponsesCallProtocol({
|
|
28
|
+
getAttachmentStore,
|
|
29
|
+
searchPolicy: getSearchPolicy(),
|
|
30
|
+
})
|
|
22
31
|
|
|
23
32
|
const captureGeneration = () => {
|
|
24
33
|
const generation = getGeneration()
|
|
@@ -75,6 +84,7 @@ export function createGrokAdapter({
|
|
|
75
84
|
async prepareCall(provider, model, signal) {
|
|
76
85
|
try {
|
|
77
86
|
const generation = captureGeneration()
|
|
87
|
+
const callProtocol = captureCallProtocol()
|
|
78
88
|
const route = await resolveRouteWithGeneration(generation, provider, model, signal)
|
|
79
89
|
return Object.freeze({
|
|
80
90
|
model: route.resolvedModelInfo,
|
|
@@ -97,6 +107,7 @@ export function createGrokAdapter({
|
|
|
97
107
|
stream(options) {
|
|
98
108
|
let requestPlan
|
|
99
109
|
try {
|
|
110
|
+
const callProtocol = captureCallProtocol()
|
|
100
111
|
requestPlan = callProtocol.prepare(options)
|
|
101
112
|
return streamWithGeneration(captureGeneration(), undefined, requestPlan, mapError)
|
|
102
113
|
} catch (error) {
|