upstream-radar 0.43.3 → 0.43.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/README-zh-CN.md +64 -70
- package/README.md +83 -77
- package/dist/src/cli.js +22 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/dsh-directory-feed.d.ts +8 -3
- package/dist/src/dsh-directory-feed.d.ts.map +1 -1
- package/dist/src/dsh-directory-feed.js +80 -10
- package/dist/src/dsh-directory-feed.js.map +1 -1
- package/dist/src/dsh-headless-agent-plan.d.ts +7 -0
- package/dist/src/dsh-headless-agent-plan.d.ts.map +1 -1
- package/dist/src/dsh-headless-agent-plan.js +20 -1
- package/dist/src/dsh-headless-agent-plan.js.map +1 -1
- package/dist/src/dsh-install-plan.d.ts +7 -0
- package/dist/src/dsh-install-plan.d.ts.map +1 -1
- package/dist/src/dsh-install-plan.js +8 -2
- package/dist/src/dsh-install-plan.js.map +1 -1
- package/dist/src/upstream-observer.d.ts +2 -0
- package/dist/src/upstream-observer.d.ts.map +1 -1
- package/dist/src/upstream-observer.js +166 -123
- package/dist/src/upstream-observer.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/README.zh-CN.md +19 -19
- package/package.json +2 -2
package/README-zh-CN.md
CHANGED
|
@@ -1,44 +1,47 @@
|
|
|
1
1
|
<h1 align="center">Upstream Radar</h1>
|
|
2
2
|
|
|
3
|
-
<p align="center"><strong
|
|
4
|
-
|
|
5
|
-
<p align="center">
|
|
6
|
-
<a href="README.md">English</a> · 简体中文
|
|
7
|
-
</p>
|
|
3
|
+
<p align="center"><strong>在 DeepSeek Harness 生态变化后,找出哪些插件需要维护者关注。</strong></p>
|
|
8
4
|
|
|
9
5
|
<p align="center">
|
|
6
|
+
<a href="README.md">English</a> ·
|
|
10
7
|
<a href="https://github.com/MicroMilo/upstream-radar/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/MicroMilo/upstream-radar/actions/workflows/ci.yml/badge.svg"></a>
|
|
11
8
|
<a href="https://www.npmjs.com/package/upstream-radar"><img alt="npm" src="https://img.shields.io/npm/v/upstream-radar"></a>
|
|
12
|
-
<a href="https://github.com/MicroMilo/upstream-radar/stargazers"><img alt="GitHub
|
|
9
|
+
<a href="https://github.com/MicroMilo/upstream-radar/stargazers"><img alt="GitHub Stars" src="https://img.shields.io/github/stars/MicroMilo/upstream-radar"></a>
|
|
13
10
|
<a href="LICENSE"><img alt="Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
|
|
14
11
|
</p>
|
|
15
12
|
|
|
16
|
-
Upstream Radar
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Radar 会再次检查并关闭闭环。
|
|
13
|
+
Upstream Radar 持续检查三者之间的真实关系:精确的 DSH 插件发布物、DSH 宿主和依赖图。
|
|
14
|
+
当 DSH 或插件发布新版本改变这层关系时,Radar 告诉你变了什么、实际观测到了什么,以及维护者
|
|
15
|
+
可以修什么。
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
它面向 [DeepSeek Harness(DSH)](https://github.com/deepseek-ai/deepseek-harness) 插件生态。
|
|
18
|
+
静态检查是关于发布包的证据;隔离运行检查是关于某个精确的
|
|
19
|
+
`插件 × DSH × Node/profile` 组合的证据。两者都不会被包装成永久有效的“兼容”徽章或安全证书。
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
> 已被 DSH 生态目录
|
|
22
|
+
> [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/data/plugins/MicroMilo__upstream-radar.yml)、
|
|
23
|
+
> [awesome-deepseek-harness](https://github.com/0xsline/awesome-deepseek-harness) 和
|
|
24
|
+
> [awesome-deepseek-harness-plugins](https://github.com/imsai-sh/awesome-deepseek-harness-plugins/blob/main/catalog/plugins/micromilo--upstream-radar.json)
|
|
25
|
+
> 收录。
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
兼容;另 2 个明确停在 Web 客户端依赖边界,没有被误报成插件坏了。
|
|
27
|
+
## 为什么需要它
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
插件源码仓库看起来正常,但用户真正安装的发布物可能还没有适配当前 DSH 宿主:
|
|
31
30
|
|
|
32
|
-
|
|
31
|
+
- README 宣传的版本根本没有发布;
|
|
32
|
+
- 插件实际导入了比 peer range 更新的 DSH 包;
|
|
33
|
+
- `package.json` 和 lockfile 描述的不是同一个版本;
|
|
34
|
+
- 安装阶段需要构建工具或依赖脚本,而用户环境没有;
|
|
35
|
+
- DSH 宿主依赖没有发布,完整依赖图无法建立。
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
DSH 版本、Node 运行时、profile 和依赖组合;其中任何一项更新,都可能让插件一夜
|
|
36
|
-
之间失效。
|
|
37
|
+
这些是生态关系问题。分别检查两个仓库,很容易漏掉它们。
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
回答“这个插件今天能不能过”;Radar 回答“生态变化后,维护中的哪些插件不再能过”。
|
|
39
|
+
## Radar 做什么
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
1. **锁定真实输入。** 读取精确 npm 发布物、DSH 版本、Node 运行时、profile、lockfile 和依赖路径。
|
|
42
|
+
2. **比较真实关系。** 发现上游变化、发布/源码漂移、依赖图不完整和 DSH 契约不一致。
|
|
43
|
+
3. **需要执行时再观察。** 在全新的、无密钥的环境中安装、注册并加载精确发布物,记录结果和边界。
|
|
44
|
+
4. **完成闭环。** 生成有边界的证据,把重要变化交给可选的 DSH Agent,并在干净复测后更新或关闭一条面向维护者的 Issue。
|
|
42
45
|
|
|
43
46
|
```mermaid
|
|
44
47
|
flowchart TB
|
|
@@ -51,68 +54,59 @@ flowchart TB
|
|
|
51
54
|
```
|
|
52
55
|
|
|
53
56
|
Agent 读取仓库说明和最新运行证据,决定 headless 是否重试、重试时允许哪些安装条件。
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
真正的结果由一次性虚拟机执行得出,而不是模型判断。模型不能凭空增加安装包、不能进入目标
|
|
58
|
+
虚拟机执行,也不能把缺失证据说成通过。
|
|
56
59
|
|
|
57
|
-
##
|
|
60
|
+
## 试试一个真实检查
|
|
58
61
|
|
|
59
|
-
|
|
60
|
-
- 把 Agent 规划的后续动作,与真实发布物的安装、注册、加载结果放在一起判断。
|
|
61
|
-
- DSH 或插件变化后自动重新检查,而不是只生成一次报告。
|
|
62
|
-
- 同一问题持续更新;回归时重新打开;干净复测通过后自动关闭。
|
|
62
|
+
第一次检查不需要本地 DSH profile,也不会执行插件代码:
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
```bash
|
|
65
|
+
npx --yes upstream-radar@0.43.5 inspect \
|
|
66
|
+
@sanqi-normal/dsh-webui-market-plugin@0.5.4 \
|
|
67
|
+
--deep --fail-on never
|
|
68
|
+
```
|
|
65
69
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
持续监控所依赖的依赖图是否可信。
|
|
70
|
+
这个历史 DSH 插件版本会返回 `review / incomplete`,因为它发布的宿主依赖链指向了一个不可用的包。
|
|
71
|
+
这是可复现的发布/宿主契约问题,不是恶意行为指控。查看[完整证据报告](examples/dsh/reports/sanqi-market-plugin-dependency-resolution.md)。
|
|
69
72
|
|
|
70
|
-
|
|
73
|
+
如果要检查自己的公开仓库,而不安装它:
|
|
71
74
|
|
|
72
|
-
|
|
73
|
-
-
|
|
75
|
+
```bash
|
|
76
|
+
npx --yes upstream-radar@0.43.5 scan \
|
|
77
|
+
https://github.com/owner/dsh-plugin \
|
|
78
|
+
--fail-on never
|
|
79
|
+
```
|
|
74
80
|
|
|
75
|
-
|
|
81
|
+
仓库扫描会读取源码 manifest、DSH 元数据和 lockfile;不会安装依赖、执行 lifecycle script、加载插件、启动 DSH 或调用 LLM。
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
- **已关闭** · [6Mikao9/dsh-wsl-workspace#6](https://github.com/6Mikao9/dsh-wsl-workspace/issues/6)
|
|
79
|
-
- **已关闭** · [3274375092/dsh-voice#2](https://github.com/3274375092/dsh-voice/issues/2)
|
|
80
|
-
- **开放** · [AmeKrance/anan-thermal-monitor#1](https://github.com/AmeKrance/anan-thermal-monitor/issues/1)
|
|
81
|
-
- **开放** · [AbcdefgXW/dsh-msg-hub#3](https://github.com/AbcdefgXW/dsh-msg-hub/issues/3)
|
|
82
|
-
- **开放** · [030611/dsh-verification-receipt#3](https://github.com/030611/dsh-verification-receipt/issues/3)
|
|
83
|
-
- **开放** · [0xsline/dsh-spotlight#5](https://github.com/0xsline/dsh-spotlight/issues/5)
|
|
83
|
+
## 让它持续运行
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
把下面任意一个维护好的 workflow 复制到你的仓库:
|
|
86
86
|
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
- **开放** · [13071301808/dsh-composer-expand#1](https://github.com/13071301808/dsh-composer-expand/issues/1)
|
|
87
|
+
- [跨多个 DSH 版本检查一个精确插件](examples/github-actions/dsh-plugin-review-minimal.yml):手动触发,得到发布物证据和隔离加载矩阵。
|
|
88
|
+
- [每天观察一个插件仓库](examples/github-actions/upstream-observer-minimal.yml):比较 commit、发布版本、manifest 和依赖图,只有发生重要变化才唤起 Agent。
|
|
89
|
+
- [在 CI 中运行依赖门禁](examples/github-actions/upstream-radar.yml):在合并前检查 lockfile 或审查过的 Radar 配置。
|
|
91
90
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
对照,且目前已关闭;但它们不是 Upstream Radar 提出的报告,所以不计入上面的 13 条。
|
|
95
|
-
当前维护中的 `dsh-browser` 条目也都观测为兼容,不应被列成问题。
|
|
91
|
+
[隔离观察 workflow](.github/workflows/observe-dsh-plugin-install.yml) 会为需要执行代码的检查使用全新的 GitHub 托管 runner。
|
|
92
|
+
它不是你的电脑,也不会接收项目密钥。
|
|
96
93
|
|
|
97
|
-
|
|
98
|
-
以及仍需维护者确认的弱结论。
|
|
94
|
+
## 来自真实生态的结果
|
|
99
95
|
|
|
100
|
-
|
|
96
|
+
当前的[100 插件兼容性 feed](feeds/dsh-plugin-compatibility.md)记录了 74 个精确 headless
|
|
97
|
+
通过、22 个仅待复核结果、0 个已复现不兼容和 4 个仅仓库条目。在真正观测所需的
|
|
98
|
+
Web/client 或仓库安装平面之前,待复核项不会被包装成插件故障。
|
|
101
99
|
|
|
102
|
-
|
|
103
|
-
npx --yes upstream-radar@0.43.3 review dsh-plugin \
|
|
104
|
-
<包名>@<版本> \
|
|
105
|
-
--dsh-version <DSH版本>
|
|
106
|
-
```
|
|
100
|
+
截至 2026-08-25,Radar 共向维护者提交了 13 条报告。比数量更重要的是处理结果:
|
|
107
101
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
| 结果 | 报告 |
|
|
103
|
+
| --- | --- |
|
|
104
|
+
| **已发布修复并复核(5)** | [Sanqi #5](https://github.com/Sanqi-normal/dsh-webui-market-plugin/issues/5)(`0.5.5`)、[HDC #3](https://github.com/1na-ko/dsh-hdc-bridge/issues/3)(`0.7.3`)、[Voice #2](https://github.com/3274375092/dsh-voice/issues/2)(`0.2.6`)、[Msg Hub #1](https://github.com/AbcdefgXW/dsh-msg-hub/issues/1)、[Toolbox Web #1](https://github.com/AbcdefgXW/dsh-toolbox-web/issues/1) |
|
|
105
|
+
| **维护者复核或补充契约(3)** | [Msg Hub #3](https://github.com/AbcdefgXW/dsh-msg-hub/issues/3)、[Spotlight #5 / PR #7](https://github.com/0xsline/dsh-spotlight/pull/7)、[WSL Workspace #6](https://github.com/6Mikao9/dsh-wsl-workspace/issues/6)——均已关闭,但不冒充运行时修复 |
|
|
106
|
+
| **仍开放(5)** | [Anan #1](https://github.com/AmeKrance/anan-thermal-monitor/issues/1)、[Verification Receipt #3](https://github.com/030611/dsh-verification-receipt/issues/3)、[dshscan #1](https://github.com/shaoshi20/dshscan/issues/1)、[OAuth #14](https://github.com/lninghaha/dsh-coding-subscription-oauth/issues/14)、[Composer Expand #1](https://github.com/13071301808/dsh-composer-expand/issues/1) |
|
|
111
107
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
[第一批 50 个插件](examples/dsh/first-batch/README.md)和
|
|
115
|
-
[架构说明](docs/architecture.md)。
|
|
108
|
+
“关闭”不自动等于“修复”。[完整的 domain 报告索引](docs/domain-reports.md)逐条保留了证据、
|
|
109
|
+
验证等级、PR 覆盖和剩余边界。
|
|
116
110
|
|
|
117
111
|
<p align="center">
|
|
118
112
|
<strong>如果 Upstream Radar 对 DSH 生态有帮助,欢迎<a href="https://github.com/MicroMilo/upstream-radar">点一个 Star</a> ⭐</strong>
|
package/README.md
CHANGED
|
@@ -1,47 +1,55 @@
|
|
|
1
1
|
<h1 align="center">Upstream Radar</h1>
|
|
2
2
|
|
|
3
|
-
<p align="center"><strong>
|
|
4
|
-
|
|
5
|
-
<p align="center">
|
|
6
|
-
English · <a href="README-zh-CN.md">简体中文</a>
|
|
7
|
-
</p>
|
|
3
|
+
<p align="center"><strong>Find the DeepSeek Harness plugins that need attention when the ecosystem moves.</strong></p>
|
|
8
4
|
|
|
9
5
|
<p align="center">
|
|
6
|
+
<a href="README-zh-CN.md">简体中文</a> ·
|
|
10
7
|
<a href="https://github.com/MicroMilo/upstream-radar/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/MicroMilo/upstream-radar/actions/workflows/ci.yml/badge.svg"></a>
|
|
11
8
|
<a href="https://www.npmjs.com/package/upstream-radar"><img alt="npm" src="https://img.shields.io/npm/v/upstream-radar"></a>
|
|
12
9
|
<a href="https://github.com/MicroMilo/upstream-radar/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/MicroMilo/upstream-radar"></a>
|
|
13
10
|
<a href="LICENSE"><img alt="Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg"></a>
|
|
14
11
|
</p>
|
|
15
12
|
|
|
16
|
-
Upstream Radar continuously
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
issue; when the author ships a fix, it retests and closes the loop.
|
|
13
|
+
Upstream Radar continuously checks the relationship between an exact published
|
|
14
|
+
DSH plugin, its DSH host, and its dependency graph. When a DSH or plugin release
|
|
15
|
+
changes that relationship, Radar shows what changed, what was actually observed,
|
|
16
|
+
and what a maintainer can fix.
|
|
21
17
|
|
|
22
|
-
|
|
18
|
+
It is built for the [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness)
|
|
19
|
+
plugin ecosystem. A static review is evidence about a package; an isolated
|
|
20
|
+
runtime review is evidence about one exact `plugin × DSH × Node/profile` pair.
|
|
21
|
+
Neither is presented as a timeless compatibility badge or a security certificate.
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
> Listed by the DSH ecosystem in
|
|
24
|
+
> [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/data/plugins/MicroMilo__upstream-radar.yml),
|
|
25
|
+
> [awesome-deepseek-harness](https://github.com/0xsline/awesome-deepseek-harness), and
|
|
26
|
+
> [awesome-deepseek-harness-plugins](https://github.com/imsai-sh/awesome-deepseek-harness-plugins/blob/main/catalog/plugins/micromilo--upstream-radar.json).
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
bounded retries; seven became compatible, while two stopped at an explicit Web
|
|
30
|
-
client dependency boundary instead of being mislabeled as broken.
|
|
28
|
+
## The problem
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
A source repository can be green while the package users install is not ready
|
|
31
|
+
for the current DSH host:
|
|
33
32
|
|
|
34
|
-
|
|
33
|
+
- the README advertises a version that was never published;
|
|
34
|
+
- a plugin imports a newer DSH package than its peer range allows;
|
|
35
|
+
- `package.json` and the lockfile describe different releases;
|
|
36
|
+
- an install-time build or dependency script needs tools the user does not have;
|
|
37
|
+
- a DSH host dependency is missing, so the dependency graph cannot be completed.
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
runtime, profile, and dependency set—and any of them can change overnight.
|
|
39
|
+
These are ecosystem relationship problems. They are easy to miss when the two
|
|
40
|
+
repositories are checked separately.
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
pre-publish check asks, “does this plugin pass today?” Radar asks, “which
|
|
42
|
-
maintained plugins stopped passing after the ecosystem changed?”
|
|
42
|
+
## What Radar does
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
1. **Pin the real inputs.** Read the exact npm artifact, DSH version, Node
|
|
45
|
+
runtime, profile, lockfile, and dependency paths.
|
|
46
|
+
2. **Compare the relationship.** Detect upstream changes, package/release drift,
|
|
47
|
+
incomplete graphs, and DSH contract mismatches.
|
|
48
|
+
3. **Observe when execution matters.** In a fresh, secret-free runner, install,
|
|
49
|
+
register, and load the exact artifact; record the result and its boundary.
|
|
50
|
+
4. **Close the loop.** Produce bounded evidence, route meaningful changes to an
|
|
51
|
+
optional DSH Agent, and update or close one maintainer-facing issue after a
|
|
52
|
+
clean retest.
|
|
45
53
|
|
|
46
54
|
```mermaid
|
|
47
55
|
flowchart TB
|
|
@@ -58,72 +66,70 @@ then chooses whether and how headless should retry. The disposable runner—not
|
|
|
58
66
|
the model—establishes the result. A model cannot invent a build package, execute
|
|
59
67
|
inside the target VM, or turn missing evidence into a pass.
|
|
60
68
|
|
|
61
|
-
##
|
|
69
|
+
## Try a real check
|
|
62
70
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
- Agent-planned follow-ups joined with real install/register/load evidence from
|
|
66
|
-
the published artifact.
|
|
67
|
-
- A maintained result that is retested when DSH or the plugin changes.
|
|
68
|
-
- One managed issue that is updated on repeat failures, reopened on regression,
|
|
69
|
-
and closed after a clean retest.
|
|
71
|
+
No local DSH profile is needed for this first check. It reviews one exact
|
|
72
|
+
published artifact without executing plugin code:
|
|
70
73
|
|
|
71
|
-
|
|
74
|
+
```bash
|
|
75
|
+
npx --yes upstream-radar@0.43.5 inspect \
|
|
76
|
+
@sanqi-normal/dsh-webui-market-plugin@0.5.4 \
|
|
77
|
+
--deep --fail-on never
|
|
78
|
+
```
|
|
72
79
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
This historical DSH plugin release returns `review / incomplete` because its
|
|
81
|
+
published host dependency chain reaches an unavailable package. That is a
|
|
82
|
+
useful, reproducible release/host-contract report—not a claim of malicious
|
|
83
|
+
behavior. See the [full evidence report](examples/dsh/reports/sanqi-market-plugin-dependency-resolution.md).
|
|
77
84
|
|
|
78
|
-
|
|
85
|
+
To review your own public repository without installing it:
|
|
79
86
|
|
|
80
|
-
|
|
81
|
-
-
|
|
87
|
+
```bash
|
|
88
|
+
npx --yes upstream-radar@0.43.5 scan \
|
|
89
|
+
https://github.com/owner/dsh-plugin \
|
|
90
|
+
--fail-on never
|
|
91
|
+
```
|
|
82
92
|
|
|
83
|
-
|
|
93
|
+
The repository scan reads source manifests, DSH metadata, and lockfiles. It does
|
|
94
|
+
not install dependencies, run lifecycle scripts, load the plugin, start DSH, or
|
|
95
|
+
call an LLM.
|
|
84
96
|
|
|
85
|
-
|
|
86
|
-
- **closed** · [6Mikao9/dsh-wsl-workspace#6](https://github.com/6Mikao9/dsh-wsl-workspace/issues/6)
|
|
87
|
-
- **closed** · [3274375092/dsh-voice#2](https://github.com/3274375092/dsh-voice/issues/2)
|
|
88
|
-
- **open** · [AmeKrance/anan-thermal-monitor#1](https://github.com/AmeKrance/anan-thermal-monitor/issues/1)
|
|
89
|
-
- **open** · [AbcdefgXW/dsh-msg-hub#3](https://github.com/AbcdefgXW/dsh-msg-hub/issues/3)
|
|
90
|
-
- **open** · [030611/dsh-verification-receipt#3](https://github.com/030611/dsh-verification-receipt/issues/3)
|
|
91
|
-
- **open** · [0xsline/dsh-spotlight#5](https://github.com/0xsline/dsh-spotlight/issues/5)
|
|
97
|
+
## Run it on every change
|
|
92
98
|
|
|
93
|
-
|
|
99
|
+
Copy one of the maintained workflows into your repository:
|
|
94
100
|
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
-
|
|
98
|
-
|
|
101
|
+
- [Review one exact plugin across DSH versions](examples/github-actions/dsh-plugin-review-minimal.yml)
|
|
102
|
+
— a manual check with artifact evidence and an isolated load matrix.
|
|
103
|
+
- [Observe one plugin repository every day](examples/github-actions/upstream-observer-minimal.yml)
|
|
104
|
+
— compares commits, published versions, manifests, and dependency graphs, then
|
|
105
|
+
wakes an Agent only when there is a meaningful change.
|
|
106
|
+
- [Run the dependency gate in CI](examples/github-actions/upstream-radar.yml)
|
|
107
|
+
— checks the lockfile or reviewed Radar configuration before merge.
|
|
99
108
|
|
|
100
|
-
The
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
filed by Upstream Radar and are therefore not counted above. The maintained
|
|
104
|
-
`dsh-browser` entries currently observed compatible are also not findings.
|
|
109
|
+
The [isolated observer workflow](.github/workflows/observe-dsh-plugin-install.yml)
|
|
110
|
+
uses a fresh GitHub-hosted runner for code-executing checks. The runner is not
|
|
111
|
+
your workstation and does not receive project secrets.
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
validation level, impact, and the boundary between a confirmed runtime issue
|
|
108
|
-
and a report that only needs maintainer confirmation.
|
|
113
|
+
## Evidence from the ecosystem
|
|
109
114
|
|
|
110
|
-
|
|
115
|
+
The current [100-plugin compatibility feed](feeds/dsh-plugin-compatibility.md)
|
|
116
|
+
records 74 exact headless passes, 22 review-only results, zero reproduced
|
|
117
|
+
incompatibilities, and four repository-only entries. The review-only group is
|
|
118
|
+
kept separate from failures until the required Web/client or repository install
|
|
119
|
+
plane is actually observed.
|
|
111
120
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
<package>@<version> \
|
|
115
|
-
--dsh-version <dsh-version>
|
|
116
|
-
```
|
|
121
|
+
As of 2026-08-25, Radar has filed 13 maintainer-facing reports. The outcome is
|
|
122
|
+
more useful than the raw count:
|
|
117
123
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
124
|
+
| Outcome | Reports |
|
|
125
|
+
| --- | --- |
|
|
126
|
+
| **Fix shipped and rechecked (5)** | [Sanqi #5](https://github.com/Sanqi-normal/dsh-webui-market-plugin/issues/5) (`0.5.5`), [HDC #3](https://github.com/1na-ko/dsh-hdc-bridge/issues/3) (`0.7.3`), [Voice #2](https://github.com/3274375092/dsh-voice/issues/2) (`0.2.6`), [Msg Hub #1](https://github.com/AbcdefgXW/dsh-msg-hub/issues/1), [Toolbox Web #1](https://github.com/AbcdefgXW/dsh-toolbox-web/issues/1) |
|
|
127
|
+
| **Boundary reviewed or documented (3)** | [Msg Hub #3](https://github.com/AbcdefgXW/dsh-msg-hub/issues/3), [Spotlight #5 / PR #7](https://github.com/0xsline/dsh-spotlight/pull/7), [WSL Workspace #6](https://github.com/6Mikao9/dsh-wsl-workspace/issues/6) — closed without claiming a runtime fix |
|
|
128
|
+
| **Still open (5)** | [Anan #1](https://github.com/AmeKrance/anan-thermal-monitor/issues/1), [Verification Receipt #3](https://github.com/030611/dsh-verification-receipt/issues/3), [dshscan #1](https://github.com/shaoshi20/dshscan/issues/1), [OAuth #14](https://github.com/lninghaha/dsh-coding-subscription-oauth/issues/14), [Composer Expand #1](https://github.com/13071301808/dsh-composer-expand/issues/1) |
|
|
122
129
|
|
|
123
|
-
|
|
124
|
-
the
|
|
125
|
-
|
|
126
|
-
[architecture notes](docs/architecture.md).
|
|
130
|
+
“Closed” is not automatically “fixed.” The [full domain report index](docs/domain-reports.md)
|
|
131
|
+
records the evidence, validation level, PR coverage, and remaining boundary for
|
|
132
|
+
every report.
|
|
127
133
|
|
|
128
134
|
<p align="center">
|
|
129
135
|
<strong>If Upstream Radar helps the DSH ecosystem stay compatible, <a href="https://github.com/MicroMilo/upstream-radar">please give it a Star</a> ⭐</strong>
|
package/dist/src/cli.js
CHANGED
|
@@ -205,7 +205,8 @@ Usage:
|
|
|
205
205
|
[--report <report.md>] [--dsh-version <v1>,<v2>,...]
|
|
206
206
|
[--reverse-index <index.json>]
|
|
207
207
|
[--dsh-agent-command <executable>]
|
|
208
|
-
[--dsh-agent-arg <argument>] [--llm-env-file <path>]
|
|
208
|
+
[--dsh-agent-arg <argument>] [--llm-env-file <path>]
|
|
209
|
+
[--retry-pending | --retry-pending-only]
|
|
209
210
|
[--ecosystem <dsh|codex|pi>] [--id <id>] [--package <name>]
|
|
210
211
|
[--package-path <path>] [--lockfile <path>] [--lockfile-type <npm|pnpm>]
|
|
211
212
|
[--ref <branch>] [--json]
|
|
@@ -238,6 +239,11 @@ keys; it never writes the key or endpoint to observations.json.
|
|
|
238
239
|
If a ModelBest-style base URL ends in /llm/v1, a 404 also retries the known
|
|
239
240
|
/llm/openai/v1 path.
|
|
240
241
|
|
|
242
|
+
--retry-pending-only consumes durable Agent tasks from observations.json
|
|
243
|
+
without reading GitHub/npm, reviewing artifacts, or changing source observation
|
|
244
|
+
points. It requires an Agent or model configuration and fails while any retry
|
|
245
|
+
still remains pending.
|
|
246
|
+
|
|
241
247
|
The exact npm artifact review is independent of the DSH Agent/model. It runs
|
|
242
248
|
when a meaningful change has a published package, and its dependency findings
|
|
243
249
|
remain in the report even when no model is configured or the model endpoint is
|
|
@@ -471,7 +477,7 @@ Usage:
|
|
|
471
477
|
upstream-radar doctor [config.json] [options]
|
|
472
478
|
upstream-radar scan <directory-or-github-url> [--json] [--fail-on <warn|review|block|never>]
|
|
473
479
|
upstream-radar inspect [npm:]<package>@<exact-version> [--deep] [--json] [--fail-on <warn|review|block|never>]
|
|
474
|
-
upstream-radar observe <targets.yml|github-url> [--state <observations.json>] [--report <report.md>] [--dsh-version <v1>,<v2>,...] [--reverse-index <index.json>] [--dsh-agent-command <executable>] [--dsh-agent-arg <argument>] [--llm-env-file <path>] [--retry-pending] [--ecosystem <dsh|codex|pi>] [--id <id>] [--package <name>] [--package-path <path>] [--lockfile <path>] [--lockfile-type <npm|pnpm>] [--ref <branch>] [--json]
|
|
480
|
+
upstream-radar observe <targets.yml|github-url> [--state <observations.json>] [--report <report.md>] [--dsh-version <v1>,<v2>,...] [--reverse-index <index.json>] [--dsh-agent-command <executable>] [--dsh-agent-arg <argument>] [--llm-env-file <path>] [--retry-pending | --retry-pending-only] [--ecosystem <dsh|codex|pi>] [--id <id>] [--package <name>] [--package-path <path>] [--lockfile <path>] [--lockfile-type <npm|pnpm>] [--ref <branch>] [--json]
|
|
475
481
|
upstream-radar graph <npm-lock|pnpm-lock> <lockfile> [--root <package>@<exact-version>] [--json]
|
|
476
482
|
upstream-radar graph reverse <reports-directory> [--package <name>@<exact-version>] [--output <index.json>] [--json]
|
|
477
483
|
upstream-radar profile-check [profile-directory] [--patch <path>] [--report <path>] [--summary] [--json]
|
|
@@ -1852,6 +1858,7 @@ async function runObserve(args) {
|
|
|
1852
1858
|
let reverseIndexPath;
|
|
1853
1859
|
let registry;
|
|
1854
1860
|
let retryPending = false;
|
|
1861
|
+
let retryPendingOnly = false;
|
|
1855
1862
|
let json = false;
|
|
1856
1863
|
let inlineEcosystem;
|
|
1857
1864
|
let inlineId;
|
|
@@ -1870,6 +1877,9 @@ async function runObserve(args) {
|
|
|
1870
1877
|
else if (argument === '--retry-pending') {
|
|
1871
1878
|
retryPending = true;
|
|
1872
1879
|
}
|
|
1880
|
+
else if (argument === '--retry-pending-only') {
|
|
1881
|
+
retryPendingOnly = true;
|
|
1882
|
+
}
|
|
1873
1883
|
else if (argument === '--ecosystem' || argument === '--id' || argument === '--package' || argument === '--package-path' || argument === '--lockfile' || argument === '--lockfile-type' || argument === '--ref' || argument === '--dsh-version' || argument === '--state' || argument === '--report' || argument === '--reverse-index' || argument === '--dsh-agent-command' || argument === '--dsh-agent-arg' || argument === '--llm-env-file' || argument === '--registry') {
|
|
1874
1884
|
const value = args[index + 1];
|
|
1875
1885
|
if (value === undefined || (value.startsWith('-') && argument !== '--dsh-agent-arg'))
|
|
@@ -1959,10 +1969,17 @@ async function runObserve(args) {
|
|
|
1959
1969
|
if (agentCommand !== undefined && llmEnvFile !== undefined) {
|
|
1960
1970
|
throw new Error('observe accepts either --dsh-agent-command or --llm-env-file, not both');
|
|
1961
1971
|
}
|
|
1972
|
+
if (retryPending && retryPendingOnly) {
|
|
1973
|
+
throw new Error('observe accepts either --retry-pending or --retry-pending-only, not both');
|
|
1974
|
+
}
|
|
1975
|
+
if (retryPendingOnly && agentCommand === undefined && llmEnvFile === undefined) {
|
|
1976
|
+
throw new Error('--retry-pending-only requires --dsh-agent-command or --llm-env-file');
|
|
1977
|
+
}
|
|
1962
1978
|
const result = await runObserver(config, previousState, {
|
|
1963
1979
|
source,
|
|
1964
1980
|
...(reverseDependencyIndex === undefined ? {} : { reverseDependencyIndex }),
|
|
1965
1981
|
retryPending,
|
|
1982
|
+
retryPendingOnly,
|
|
1966
1983
|
artifactReviewer: async (spec, target) => reviewObserverArtifact(spec, target, registry),
|
|
1967
1984
|
...(agentOptions === undefined ? {} : {
|
|
1968
1985
|
agent: (task, prompt) => runDshAgentCommand(task, prompt, agentOptions),
|
|
@@ -1978,10 +1995,11 @@ async function runObserve(args) {
|
|
|
1978
1995
|
}
|
|
1979
1996
|
process.stdout.write(json ? reportJson : renderObserverReport(result.report));
|
|
1980
1997
|
const observerExit = observerExitCode(result.report);
|
|
1998
|
+
const pendingRetryExit = retryPendingOnly && result.report.pendingTasks.length > 0 ? 1 : 0;
|
|
1981
1999
|
if (result.report.agent.failed > 0) {
|
|
1982
|
-
process.stderr.write(
|
|
2000
|
+
process.stderr.write(`upstream-radar: DSH Agent/model analysis remains pending. See the report and rerun with ${retryPendingOnly ? '--retry-pending-only' : '--retry-pending'}.\n`);
|
|
1983
2001
|
}
|
|
1984
|
-
return observerExit;
|
|
2002
|
+
return observerExit === 0 && pendingRetryExit === 0 ? 0 : 1;
|
|
1985
2003
|
}
|
|
1986
2004
|
async function runQuickstart(args) {
|
|
1987
2005
|
let directory = process.cwd();
|