upstream-radar 0.32.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +396 -43
- package/cordis.patch.yml +1 -0
- package/dist/src/cli.js +950 -33
- package/dist/src/cli.js.map +1 -1
- package/dist/src/compatibility.d.ts +3 -1
- package/dist/src/compatibility.d.ts.map +1 -1
- package/dist/src/compatibility.js +146 -12
- package/dist/src/compatibility.js.map +1 -1
- package/dist/src/demo.d.ts +13 -0
- package/dist/src/demo.d.ts.map +1 -0
- package/dist/src/demo.js +85 -0
- package/dist/src/demo.js.map +1 -0
- package/dist/src/doctor.d.ts.map +1 -1
- package/dist/src/doctor.js +62 -0
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/dsh-analysis.d.ts.map +1 -1
- package/dist/src/dsh-analysis.js +2 -1
- package/dist/src/dsh-analysis.js.map +1 -1
- package/dist/src/dsh-plugin.d.ts +9 -3
- package/dist/src/dsh-plugin.d.ts.map +1 -1
- package/dist/src/dsh-plugin.js +87 -11
- package/dist/src/dsh-plugin.js.map +1 -1
- package/dist/src/dsh-runtime.d.ts +7 -0
- package/dist/src/dsh-runtime.d.ts.map +1 -1
- package/dist/src/dsh-runtime.js +21 -0
- package/dist/src/dsh-runtime.js.map +1 -1
- package/dist/src/github-advisory.d.ts +25 -0
- package/dist/src/github-advisory.d.ts.map +1 -0
- package/dist/src/github-advisory.js +335 -0
- package/dist/src/github-advisory.js.map +1 -0
- package/dist/src/graph.d.ts +2 -0
- package/dist/src/graph.d.ts.map +1 -1
- package/dist/src/graph.js +600 -4
- package/dist/src/graph.js.map +1 -1
- package/dist/src/index.d.ts +14 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +13 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/init.d.ts +44 -2
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +62 -5
- package/dist/src/init.js.map +1 -1
- package/dist/src/installed-graph.d.ts +3 -1
- package/dist/src/installed-graph.d.ts.map +1 -1
- package/dist/src/installed-graph.js +101 -2
- package/dist/src/installed-graph.js.map +1 -1
- package/dist/src/inventory.d.ts.map +1 -1
- package/dist/src/inventory.js +76 -2
- package/dist/src/inventory.js.map +1 -1
- package/dist/src/notification-policy.d.ts +20 -0
- package/dist/src/notification-policy.d.ts.map +1 -0
- package/dist/src/notification-policy.js +87 -0
- package/dist/src/notification-policy.js.map +1 -0
- package/dist/src/npm-release.d.ts.map +1 -1
- package/dist/src/npm-release.js +18 -7
- package/dist/src/npm-release.js.map +1 -1
- package/dist/src/osv.d.ts.map +1 -1
- package/dist/src/osv.js +1 -0
- package/dist/src/osv.js.map +1 -1
- package/dist/src/quickstart.d.ts +31 -0
- package/dist/src/quickstart.d.ts.map +1 -0
- package/dist/src/quickstart.js +266 -0
- package/dist/src/quickstart.js.map +1 -0
- package/dist/src/radar-history.d.ts +22 -0
- package/dist/src/radar-history.d.ts.map +1 -0
- package/dist/src/radar-history.js +80 -0
- package/dist/src/radar-history.js.map +1 -0
- package/dist/src/radar-render.d.ts.map +1 -1
- package/dist/src/radar-render.js +106 -1
- package/dist/src/radar-render.js.map +1 -1
- package/dist/src/radar-state.d.ts.map +1 -1
- package/dist/src/radar-state.js +264 -6
- package/dist/src/radar-state.js.map +1 -1
- package/dist/src/radar-status.d.ts +36 -1
- package/dist/src/radar-status.d.ts.map +1 -1
- package/dist/src/radar-status.js +199 -16
- package/dist/src/radar-status.js.map +1 -1
- package/dist/src/radar-types.d.ts +128 -3
- package/dist/src/radar-types.d.ts.map +1 -1
- package/dist/src/radar-types.js +4 -0
- package/dist/src/radar-types.js.map +1 -1
- package/dist/src/radar.d.ts +7 -1
- package/dist/src/radar.d.ts.map +1 -1
- package/dist/src/radar.js +432 -70
- package/dist/src/radar.js.map +1 -1
- package/dist/src/render.d.ts.map +1 -1
- package/dist/src/render.js +10 -0
- package/dist/src/render.js.map +1 -1
- package/dist/src/threat-intel.d.ts +46 -0
- package/dist/src/threat-intel.d.ts.map +1 -0
- package/dist/src/threat-intel.js +243 -0
- package/dist/src/threat-intel.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/vulnerability-priority.d.ts +16 -0
- package/dist/src/vulnerability-priority.d.ts.map +1 -0
- package/dist/src/vulnerability-priority.js +20 -0
- package/dist/src/vulnerability-priority.js.map +1 -0
- package/dist/src/webhook.d.ts +84 -0
- package/dist/src/webhook.d.ts.map +1 -0
- package/dist/src/webhook.js +432 -0
- package/dist/src/webhook.js.map +1 -0
- package/docs/README.zh-CN.md +394 -40
- package/package.json +22 -3
- package/schemas/quickstart.schema.json +56 -0
- package/schemas/webhook.schema.json +53 -0
package/dist/src/demo.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createAnalysisTask } from './dsh-analysis.js';
|
|
2
|
+
import { renderRadarEvent } from './radar-render.js';
|
|
3
|
+
import { RADAR_EVENT_SCHEMA, } from './radar-types.js';
|
|
4
|
+
export const DEMO_SCHEMA = 'upstream-radar.demo/v1alpha1';
|
|
5
|
+
export function createDemoEvent() {
|
|
6
|
+
return {
|
|
7
|
+
schema: RADAR_EVENT_SCHEMA,
|
|
8
|
+
id: 'demo-event-parser-2-9-0',
|
|
9
|
+
incidentId: 'demo-project\u0000parser\u00002.9.0\u0000GHSA-demo-parser',
|
|
10
|
+
kind: 'vulnerability',
|
|
11
|
+
change: 'new',
|
|
12
|
+
detectedAt: '2026-08-16T00:00:00.000Z',
|
|
13
|
+
project: { id: 'demo-project', name: 'Demo project' },
|
|
14
|
+
route: { channels: ['stdout'] },
|
|
15
|
+
plugin: { ecosystem: 'npm', name: 'demo-plugin', version: '1.0.0' },
|
|
16
|
+
affected: { ecosystem: 'npm', name: 'parser', version: '2.9.0' },
|
|
17
|
+
affectedSources: ['profile'],
|
|
18
|
+
paths: [[
|
|
19
|
+
{ ecosystem: 'npm', name: 'demo-plugin', version: '1.0.0' },
|
|
20
|
+
{ ecosystem: 'npm', name: 'logger', version: '4.0.2' },
|
|
21
|
+
{ ecosystem: 'npm', name: 'parser', version: '2.9.0' },
|
|
22
|
+
]],
|
|
23
|
+
advisory: {
|
|
24
|
+
id: 'GHSA-demo-parser',
|
|
25
|
+
aliases: ['CVE-2026-1234'],
|
|
26
|
+
summary: 'The demo parser advisory is attached to the exact transitive path.',
|
|
27
|
+
details: 'This deterministic local fixture exists only to demonstrate the Radar-to-DSH handoff.',
|
|
28
|
+
severity: 'high',
|
|
29
|
+
published: '2026-08-15T00:00:00.000Z',
|
|
30
|
+
modified: '2026-08-16T00:00:00.000Z',
|
|
31
|
+
fixedVersions: ['3.0.0', '3.1.0'],
|
|
32
|
+
references: ['https://example.test/advisories/GHSA-demo-parser'],
|
|
33
|
+
sources: ['osv', 'github-advisories'],
|
|
34
|
+
conflicts: [{
|
|
35
|
+
field: 'fixed-versions',
|
|
36
|
+
claims: [
|
|
37
|
+
{ source: 'osv', value: '3.0.0' },
|
|
38
|
+
{ source: 'github-advisories', value: '3.1.0' },
|
|
39
|
+
],
|
|
40
|
+
}],
|
|
41
|
+
riskSignals: {
|
|
42
|
+
cisaKev: {
|
|
43
|
+
knownExploited: true,
|
|
44
|
+
dateAdded: '2026-08-15',
|
|
45
|
+
dueDate: '2026-08-22',
|
|
46
|
+
},
|
|
47
|
+
epss: {
|
|
48
|
+
score: 0.97224,
|
|
49
|
+
percentile: 0.99999,
|
|
50
|
+
date: '2026-08-16',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function createDemoReport() {
|
|
57
|
+
const event = createDemoEvent();
|
|
58
|
+
return {
|
|
59
|
+
schema: DEMO_SCHEMA,
|
|
60
|
+
networkFree: true,
|
|
61
|
+
event,
|
|
62
|
+
analysisTask: createAnalysisTask(event),
|
|
63
|
+
nextCommand: 'npx --yes upstream-radar@latest setup --project-name "My DSH project"',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function renderDemo(report = createDemoReport()) {
|
|
67
|
+
return [
|
|
68
|
+
'Upstream Radar demo — network-free; no DSH profile required',
|
|
69
|
+
'',
|
|
70
|
+
'1. Deterministic fact',
|
|
71
|
+
renderRadarEvent(report.event).trim(),
|
|
72
|
+
'',
|
|
73
|
+
'2. DSH Agent follow-up',
|
|
74
|
+
`Task: ${report.analysisTask.id}`,
|
|
75
|
+
'Read-only project analysis; advisory text is untrusted data, not an instruction.',
|
|
76
|
+
'Radar accepts only the strict JSON result bound to this task and event.',
|
|
77
|
+
'',
|
|
78
|
+
'Try it for real:',
|
|
79
|
+
` ${report.nextCommand}`,
|
|
80
|
+
'',
|
|
81
|
+
'This demo uses a local fixture. It does not query OSV, inspect your repository, install packages, or claim that the demo advisory is real.',
|
|
82
|
+
'',
|
|
83
|
+
].join('\n');
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/demo.ts"],"names":[],"mappings":"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"}
|
package/dist/src/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAA;AAS1B,eAAO,MAAM,aAAa,EAAG,gCAAyC,CAAA;AAEtE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AACxD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAAA;AAE7E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,aAAa,CAAA;IAC5B,MAAM,EAAE,mBAAmB,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAwSD,iGAAiG;AACjG,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA0GtF;AAQD,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAmB/D"}
|
package/dist/src/doctor.js
CHANGED
|
@@ -5,6 +5,7 @@ import { parseRadarConfig } from './inventory.js';
|
|
|
5
5
|
import { emptyRadarState } from './radar.js';
|
|
6
6
|
import { loadRadarState } from './radar-state.js';
|
|
7
7
|
import { createRadarStatus, renderRadarStatus, } from './radar-status.js';
|
|
8
|
+
import { isFeishuV2WebhookUrl, isLegacyFeishuWebhookUrl, normalizeRadarWebhookUrl, resolveRadarWebhookTargets, } from './webhook.js';
|
|
8
9
|
export const DOCTOR_SCHEMA = 'upstream-radar.doctor/v1alpha1';
|
|
9
10
|
const MAX_CONFIG_BYTES = 8 * 1024 * 1024;
|
|
10
11
|
const MAX_PATCH_BYTES = 1 * 1024 * 1024;
|
|
@@ -104,6 +105,62 @@ async function inspectPatch(checks, patchFile, configFile, stateFile, profile) {
|
|
|
104
105
|
addCheck(checks, 'dsh-overlay', 'fail', '无法读取 DSH overlay', errorText(error), `确认文件存在且可读:${output}`);
|
|
105
106
|
}
|
|
106
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Check the environment-based delivery route without contacting the endpoint.
|
|
110
|
+
* The URL itself is deliberately never included in the report because webhook
|
|
111
|
+
* query strings commonly contain a credential.
|
|
112
|
+
*/
|
|
113
|
+
function inspectWebhookEnvironment(checks) {
|
|
114
|
+
const configuredUrl = process.env.UPSTREAM_RADAR_WEBHOOK_URL?.trim();
|
|
115
|
+
const configuredSecret = process.env.UPSTREAM_RADAR_FEISHU_SECRET?.trim();
|
|
116
|
+
if (configuredUrl === undefined || configuredUrl.length === 0) {
|
|
117
|
+
if (configuredSecret !== undefined && configuredSecret.length > 0) {
|
|
118
|
+
addCheck(checks, 'webhook-secret', 'warn', '发现飞书密钥,但没有配置 webhook 地址', 'UPSTREAM_RADAR_FEISHU_SECRET 只会用于飞书/Lark V2 自定义机器人;当前没有可用的 webhook,因此密钥会被忽略。', '设置 UPSTREAM_RADAR_WEBHOOK_URL,或清除 UPSTREAM_RADAR_FEISHU_SECRET。');
|
|
119
|
+
}
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
let endpoint;
|
|
123
|
+
try {
|
|
124
|
+
endpoint = normalizeRadarWebhookUrl(configuredUrl);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
addCheck(checks, 'webhook', 'fail', 'webhook 地址不可用', errorText(error), '设置一个不带账号密码、fragment 且使用 HTTPS 的 webhook 地址。');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (isLegacyFeishuWebhookUrl(endpoint)) {
|
|
131
|
+
addCheck(checks, 'webhook', 'fail', '配置的是不再支持的飞书/Lark V1 webhook', 'Radar 只向 /open-apis/bot/v2/hook/… 地址发送原生飞书文本消息。', '把机器人地址替换为 /open-apis/bot/v2/hook/…;不要把旧 V1 地址继续交给 DSH。');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (isFeishuV2WebhookUrl(endpoint)) {
|
|
135
|
+
if (configuredSecret !== undefined && configuredSecret.length > 4_096) {
|
|
136
|
+
addCheck(checks, 'webhook', 'fail', '飞书 webhook 密钥过长', 'UPSTREAM_RADAR_FEISHU_SECRET 超过 4096 个字符,发送时会被拒绝。', '更换为不超过 4096 个字符的飞书签名密钥。');
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
addCheck(checks, 'webhook', 'pass', '已识别飞书/Lark V2 webhook', configuredSecret === undefined
|
|
140
|
+
? '使用原生 text 消息;未设置签名密钥时不会生成签名。密钥只从环境变量读取,不写入状态文件。'
|
|
141
|
+
: '使用原生 text 消息和环境变量中的签名密钥;地址与密钥都不会写入状态文件。');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
addCheck(checks, 'webhook', 'pass', 'HTTPS webhook 配置有效', configuredSecret === undefined
|
|
145
|
+
? '使用通用 Radar JSON 消息;地址不会写入状态文件。'
|
|
146
|
+
: '使用通用 Radar JSON 消息;飞书密钥不会用于该地址,也不会写入状态文件。');
|
|
147
|
+
if (configuredSecret !== undefined) {
|
|
148
|
+
addCheck(checks, 'webhook-secret', 'warn', '飞书密钥不会用于当前 webhook', '只有飞书/Lark V2 自定义机器人地址会使用 UPSTREAM_RADAR_FEISHU_SECRET。', '如果目标是飞书,请改用 /open-apis/bot/v2/hook/… 地址;否则清除这个多余的环境变量。');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Check project-specific webhook environment routes without contacting them. */
|
|
152
|
+
function inspectProjectWebhookEnvironment(checks, config) {
|
|
153
|
+
const routedProjects = config.projects.filter(project => project.project.webhookUrlEnv !== undefined);
|
|
154
|
+
if (routedProjects.length === 0)
|
|
155
|
+
return;
|
|
156
|
+
try {
|
|
157
|
+
const targets = resolveRadarWebhookTargets(config.projects);
|
|
158
|
+
addCheck(checks, 'project-webhooks', 'pass', `已检查 ${routedProjects.length} 个项目级 webhook 路由`, `${targets.length} 个 endpoint;URL 和签名密钥只从环境变量读取,不写入配置或状态文件。`);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
addCheck(checks, 'project-webhooks', 'fail', '项目级 webhook 路由不可用', errorText(error), '设置配置中声明的 URL 环境变量,并确认地址使用 HTTPS;如果是飞书,使用 V2 webhook 地址。');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
107
164
|
function reportStatus(checks) {
|
|
108
165
|
if (checks.some(check => check.status === 'fail'))
|
|
109
166
|
return 'blocked';
|
|
@@ -170,6 +227,8 @@ export async function createDoctorReport(options) {
|
|
|
170
227
|
addCheck(checks, 'monitoring', 'warn', '尚未完成第一次监控', undefined, `启动 DSH 或运行 upstream-radar radar check ${configFile} --state ${stateFile}。`);
|
|
171
228
|
}
|
|
172
229
|
await inspectPatch(checks, options.patchFile, configFile, stateFile, profile);
|
|
230
|
+
inspectWebhookEnvironment(checks);
|
|
231
|
+
inspectProjectWebhookEnvironment(checks, config);
|
|
173
232
|
const report = {
|
|
174
233
|
schema: DOCTOR_SCHEMA,
|
|
175
234
|
status: reportStatus(checks),
|
|
@@ -184,6 +243,9 @@ export async function createDoctorReport(options) {
|
|
|
184
243
|
return report;
|
|
185
244
|
}
|
|
186
245
|
await inspectPatch(checks, options.patchFile, configFile, stateFile, profile);
|
|
246
|
+
inspectWebhookEnvironment(checks);
|
|
247
|
+
if (config !== undefined)
|
|
248
|
+
inspectProjectWebhookEnvironment(checks, config);
|
|
187
249
|
await inspectDshProfile(checks, profile, options.dshHome);
|
|
188
250
|
return {
|
|
189
251
|
schema: DOCTOR_SCHEMA,
|
package/dist/src/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsh-analysis.d.ts","sourceRoot":"","sources":["../../src/dsh-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAOzB,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAoBlE;
|
|
1
|
+
{"version":3,"file":"dsh-analysis.d.ts","sourceRoot":"","sources":["../../src/dsh-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAOzB,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAoBlE;AA4CD,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEpE;AAED,oFAAoF;AACpF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAIrF;AAED,0FAA0F;AAC1F,eAAO,MAAM,uBAAuB,kCAA4B,CAAA"}
|
package/dist/src/dsh-analysis.js
CHANGED
|
@@ -51,7 +51,8 @@ function renderAnalysisPrompt(task, events, taskIds = [task.id]) {
|
|
|
51
51
|
7. 如果 upgradePath.vulnerabilityStatus 是 unavailable,不得推荐任何候选版本为安全或可升级;应先恢复 OSV 监控并说明当前判断不完整。
|
|
52
52
|
8. 如果 upgradePath.dependencyStatus 是 unavailable,不得推荐任何候选版本;如果是 partial,只能把 firstCandidate 理解为“已检查的最早一小段中的候选”,不能推断后续版本没有风险。
|
|
53
53
|
9. 如果候选的 dependencyCheck.status 是 incomplete 或 unavailable,必须把传递依赖风险写成 unknown,并说明缺少哪类检查;不要把“没有发现”写成“安全”。
|
|
54
|
-
10.
|
|
54
|
+
10. 如果 event_json 含有 upgradePath.remediationCoverage 和 firstCandidateRemovingAllPaths,它们只表示“已查询的漏洞源和候选图中没有发现这些已知路径”;仍要检查项目兼容性,不得把它写成“安全”或“已验证”。如果 remediationCoverage 是 partial、unavailable 或 not-requested,不得推荐候选已经消除了漏洞;应说明缺失的检查。
|
|
55
|
+
11. 返回一个 JSON 对象,字段严格为 project_exposure、confidence、evidence、recommended_action、urgency、reasoning_summary。${groupedInstruction}
|
|
55
56
|
|
|
56
57
|
expected_output:
|
|
57
58
|
${JSON.stringify(task.expectedOutput, null, 2)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsh-analysis.js","sourceRoot":"","sources":["../../src/dsh-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EACL,oBAAoB,GAGrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,OAAO;QACL,MAAM,EAAE,oBAAoB;QAC5B,EAAE,EAAE,YAAY,SAAS,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE;QAC/D,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,KAAK;QACL,WAAW,EAAE;YACX,yBAAyB,EAAE,IAAI;YAC/B,QAAQ,EAAE,IAAI;YACd,sBAAsB,EAAE,IAAI;SAC7B;QACD,cAAc,EAAE;YACd,gBAAgB,EAAE,kDAAkD;YACpE,UAAU,EAAE,qBAAqB;YACjC,QAAQ,EAAE,qEAAqE;YAC/E,kBAAkB,EAAE,8BAA8B;YAClD,OAAO,EAAE,iDAAiD;YAC1D,iBAAiB,EAAE,sEAAsE;SAC1F;KACF,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAkB,EAClB,MAA6B,EAC7B,OAAO,GAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;IAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe;QAC/C,CAAC,CAAC,gEAAgE;QAClE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe;YACnC,CAAC,CAAC,+DAA+D;YACjE,CAAC,CAAC,oDAAoD,CAAA;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACnC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5C,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,MAAM,CAAC,MAAM,mEAAmE,CAAA;IAE9F,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC;;;;;;;KAOxC,KAAK
|
|
1
|
+
{"version":3,"file":"dsh-analysis.js","sourceRoot":"","sources":["../../src/dsh-analysis.ts"],"names":[],"mappings":"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"}
|
package/dist/src/dsh-plugin.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AnalysisDelivery, type AnalysisTask, type ProjectReference, type RadarState, type StoredAnalysisResult } from './radar-types.js';
|
|
1
|
+
import { type AnalysisDelivery, type AnalysisTask, type ProjectReference, type RadarNotificationPolicy, type RadarState, type StoredAnalysisResult } from './radar-types.js';
|
|
2
2
|
export declare const name = "upstream-radar";
|
|
3
3
|
export declare const inject: string[];
|
|
4
4
|
export interface Config {
|
|
@@ -13,6 +13,12 @@ export interface Config {
|
|
|
13
13
|
registry?: string;
|
|
14
14
|
/** Set false to skip bounded transitive candidate graph checks. */
|
|
15
15
|
deepCandidates?: boolean;
|
|
16
|
+
/** Set false to skip the independent GitHub Advisory Database check. */
|
|
17
|
+
githubAdvisories?: boolean;
|
|
18
|
+
/** Set false to skip CISA KEV and FIRST EPSS prioritization signals. */
|
|
19
|
+
threatIntel?: boolean;
|
|
20
|
+
/** Optional HTTPS endpoint for changed-event notifications; the URL is never persisted. */
|
|
21
|
+
webhookUrl?: string;
|
|
16
22
|
runOnStart?: boolean;
|
|
17
23
|
}
|
|
18
24
|
export interface DshRadarMessage {
|
|
@@ -84,9 +90,9 @@ export declare function applyDshAnalysisSessionEvent(state: RadarState, session:
|
|
|
84
90
|
export declare function selectDshAgentForProject(project: ProjectReference, agents: readonly DshAgentLike[]): DshAgentLike | undefined;
|
|
85
91
|
type DeliveryObserver = (delivery: AnalysisDelivery, phase: 'before' | 'accepted' | 'rejected') => void;
|
|
86
92
|
/** Deliver grouped tasks to the matching DSH root; unroutable tasks stay queued. */
|
|
87
|
-
export declare function deliverPendingAnalysisTasksToAgents(state: RadarState, agents: readonly DshAgentLike[], now?: Date, observeDelivery?: DeliveryObserver): RadarState;
|
|
93
|
+
export declare function deliverPendingAnalysisTasksToAgents(state: RadarState, agents: readonly DshAgentLike[], now?: Date, observeDelivery?: DeliveryObserver, notificationPolicies?: ReadonlyMap<string, RadarNotificationPolicy>): RadarState;
|
|
88
94
|
/** Synchronous follow-up admission is the acknowledgement boundary; failures stay queued. */
|
|
89
|
-
export declare function deliverPendingAnalysisTasks(state: RadarState, agent: DshAgentLike): RadarState;
|
|
95
|
+
export declare function deliverPendingAnalysisTasks(state: RadarState, agent: DshAgentLike, notificationPolicies?: ReadonlyMap<string, RadarNotificationPolicy>): RadarState;
|
|
90
96
|
/** Cordis function-plugin entrypoint. The polling loop stays deterministic; DSH receives only matched tasks. */
|
|
91
97
|
export declare function apply(ctx: DshRadarContext, config?: Config): void;
|
|
92
98
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsh-plugin.d.ts","sourceRoot":"","sources":["../../src/dsh-plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dsh-plugin.d.ts","sourceRoot":"","sources":["../../src/dsh-plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/src/dsh-plugin.js
CHANGED
|
@@ -2,15 +2,19 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
4
|
import { renderAgentAnalysisGroupPrompt, renderAgentAnalysisPrompt } from './dsh-analysis.js';
|
|
5
|
-
import { discoverDshRuntimeNodeModulesDirectory } from './dsh-runtime.js';
|
|
5
|
+
import { discoverDshRuntimeNodeModulesDirectory, discoverDshRuntimePackage, discoverDshRuntimePackageDirectory, } from './dsh-runtime.js';
|
|
6
6
|
import { GitHubReleaseClient } from './github-release.js';
|
|
7
|
+
import { GitHubAdvisoryClient } from './github-advisory.js';
|
|
7
8
|
import { parseRadarConfig } from './inventory.js';
|
|
8
9
|
import { refreshRadarConfigFromDshProfile } from './init.js';
|
|
9
10
|
import { OsvClient } from './osv.js';
|
|
10
11
|
import { NpmCandidateGraphClient } from './npm-candidate.js';
|
|
11
12
|
import { NpmReleaseClient } from './npm-release.js';
|
|
13
|
+
import { CisaKevClient, EpssClient } from './threat-intel.js';
|
|
14
|
+
import { createNotificationPolicyMap, decideProjectRadarNotification, filterNotifiableRadarEvents, isRadarIncidentMuted, } from './notification-policy.js';
|
|
12
15
|
import { pollRadar } from './radar.js';
|
|
13
16
|
import { loadRadarState, saveRadarState } from './radar-state.js';
|
|
17
|
+
import { eventsForRadarWebhookTarget, markRadarWebhookEventsDelivered, markRadarWebhookEventsDeliveredForRoute, normalizeRadarWebhookUrl, queueRadarWebhookEvents, queueRadarWebhookEventsForRoute, resolveRadarWebhookTargets, sendRadarWebhook, undeliveredRadarWebhookEvents, undeliveredRadarWebhookEventsForRoute, } from './webhook.js';
|
|
14
18
|
import { ANALYSIS_DELIVERY_SCHEMA, } from './radar-types.js';
|
|
15
19
|
import { extractAnalysisTaskIds, parseAgentAnalysisResult, } from './dsh-analysis-result.js';
|
|
16
20
|
export const name = 'upstream-radar';
|
|
@@ -33,7 +37,9 @@ function taskSummary(task) {
|
|
|
33
37
|
return `${task.event.kind === 'malware' ? 'Malicious package' : 'Vulnerability'} for ${project}`;
|
|
34
38
|
}
|
|
35
39
|
function isDshRuntimePackage(name) {
|
|
36
|
-
return name === '@deepseek-ai/
|
|
40
|
+
return name === '@deepseek-ai/dsh'
|
|
41
|
+
|| name === '@deepseek-ai/cordis'
|
|
42
|
+
|| name.startsWith('@deepseek-ai/dsh-');
|
|
37
43
|
}
|
|
38
44
|
/** Keep independent state incidents, but combine one project's DSH runtime updates into one Agent notice. */
|
|
39
45
|
export function groupPendingAnalysisTasks(tasks) {
|
|
@@ -332,26 +338,31 @@ export function selectDshAgentForProject(project, agents) {
|
|
|
332
338
|
return matches.length === 1 ? matches[0] : undefined;
|
|
333
339
|
}
|
|
334
340
|
/** Deliver grouped tasks to the matching DSH root; unroutable tasks stay queued. */
|
|
335
|
-
export function deliverPendingAnalysisTasksToAgents(state, agents, now = new Date(), observeDelivery) {
|
|
341
|
+
export function deliverPendingAnalysisTasksToAgents(state, agents, now = new Date(), observeDelivery, notificationPolicies = new Map()) {
|
|
336
342
|
if (!Number.isFinite(now.getTime()))
|
|
337
343
|
throw new Error('analysis delivery time is invalid');
|
|
338
344
|
const deliveredIds = new Set();
|
|
339
345
|
const deliveries = { ...(state.analysisDeliveries ?? {}) };
|
|
340
346
|
for (const group of groupPendingAnalysisTasks(state.pendingAnalysisTasks)) {
|
|
341
|
-
const
|
|
347
|
+
const deliverableGroup = group.filter(task => !isRadarIncidentMuted(state, task.event, now));
|
|
348
|
+
const first = deliverableGroup[0];
|
|
342
349
|
if (first === undefined)
|
|
343
350
|
continue;
|
|
351
|
+
if (deliverableGroup.some(task => !decideProjectRadarNotification(task.event, notificationPolicies, now).deliver))
|
|
352
|
+
continue;
|
|
344
353
|
const agent = selectDshAgentForProject(first.event.project, agents);
|
|
345
354
|
if (agent === undefined)
|
|
346
355
|
continue;
|
|
347
|
-
const message =
|
|
348
|
-
|
|
356
|
+
const message = deliverableGroup.length === 1
|
|
357
|
+
? createDshRadarMessage(deliverableGroup[0])
|
|
358
|
+
: createDshRadarFamilyMessage(deliverableGroup);
|
|
359
|
+
const delivery = createAnalysisDelivery(message, deliverableGroup, agent, now.toISOString());
|
|
349
360
|
observeDelivery?.(delivery, 'before');
|
|
350
361
|
try {
|
|
351
362
|
agent.followup(message);
|
|
352
363
|
observeDelivery?.(delivery, 'accepted');
|
|
353
364
|
deliveries[delivery.id] = delivery;
|
|
354
|
-
for (const task of
|
|
365
|
+
for (const task of deliverableGroup)
|
|
355
366
|
deliveredIds.add(task.id);
|
|
356
367
|
}
|
|
357
368
|
catch {
|
|
@@ -370,8 +381,8 @@ export function deliverPendingAnalysisTasksToAgents(state, agents, now = new Dat
|
|
|
370
381
|
};
|
|
371
382
|
}
|
|
372
383
|
/** Synchronous follow-up admission is the acknowledgement boundary; failures stay queued. */
|
|
373
|
-
export function deliverPendingAnalysisTasks(state, agent) {
|
|
374
|
-
return deliverPendingAnalysisTasksToAgents(state, [agent]);
|
|
384
|
+
export function deliverPendingAnalysisTasks(state, agent, notificationPolicies) {
|
|
385
|
+
return deliverPendingAnalysisTasksToAgents(state, [agent], new Date(), undefined, notificationPolicies);
|
|
375
386
|
}
|
|
376
387
|
async function readConfig(path) {
|
|
377
388
|
const contents = await readFile(path, 'utf8');
|
|
@@ -404,9 +415,29 @@ export function apply(ctx, config = {}) {
|
|
|
404
415
|
? undefined
|
|
405
416
|
: new NpmCandidateGraphClient({ ...(config.registry === undefined ? {} : { registry: config.registry }) });
|
|
406
417
|
const releaseNotes = new GitHubReleaseClient();
|
|
418
|
+
const githubAdvisories = config.githubAdvisories === false
|
|
419
|
+
? undefined
|
|
420
|
+
: new GitHubAdvisoryClient({ ...(process.env.GITHUB_TOKEN === undefined ? {} : { token: process.env.GITHUB_TOKEN }) });
|
|
421
|
+
const threatIntelSources = config.threatIntel === false
|
|
422
|
+
? []
|
|
423
|
+
: [
|
|
424
|
+
{ name: 'cisa-kev', source: new CisaKevClient() },
|
|
425
|
+
{ name: 'epss', source: new EpssClient() },
|
|
426
|
+
];
|
|
427
|
+
const configuredWebhookUrl = config.webhookUrl ?? process.env.UPSTREAM_RADAR_WEBHOOK_URL;
|
|
428
|
+
const webhookUrl = configuredWebhookUrl === undefined || configuredWebhookUrl.trim() === ''
|
|
429
|
+
? undefined
|
|
430
|
+
: normalizeRadarWebhookUrl(configuredWebhookUrl);
|
|
431
|
+
const feishuSecret = process.env.UPSTREAM_RADAR_FEISHU_SECRET?.trim() || undefined;
|
|
407
432
|
const dshHostNodeModulesDirectory = config.profile === undefined || config.refreshProfile === false
|
|
408
433
|
? undefined
|
|
409
434
|
: discoverDshRuntimeNodeModulesDirectory();
|
|
435
|
+
const dshHostRuntimePackage = config.profile === undefined || config.refreshProfile === false
|
|
436
|
+
? undefined
|
|
437
|
+
: discoverDshRuntimePackage();
|
|
438
|
+
const dshHostRuntimePackageDirectory = config.profile === undefined || config.refreshProfile === false
|
|
439
|
+
? undefined
|
|
440
|
+
: discoverDshRuntimePackageDirectory();
|
|
410
441
|
if (dshHostNodeModulesDirectory !== undefined) {
|
|
411
442
|
ctx.logger.info('upstream-radar: DSH runtime dependency plane discovered for exact graph refresh');
|
|
412
443
|
}
|
|
@@ -414,6 +445,8 @@ export function apply(ctx, config = {}) {
|
|
|
414
445
|
let stopped = false;
|
|
415
446
|
let serial = Promise.resolve();
|
|
416
447
|
const inFlightDeliveries = new Map();
|
|
448
|
+
let activeNotificationPolicies = new Map();
|
|
449
|
+
let notificationPoliciesLoaded = false;
|
|
417
450
|
const onSessionEvent = (session, event) => {
|
|
418
451
|
serial = serial.then(async () => {
|
|
419
452
|
const state = await loadRadarState(stateFile);
|
|
@@ -434,6 +467,7 @@ export function apply(ctx, config = {}) {
|
|
|
434
467
|
if (stopped)
|
|
435
468
|
return;
|
|
436
469
|
let state = await loadRadarState(stateFile);
|
|
470
|
+
let notificationPolicies = activeNotificationPolicies;
|
|
437
471
|
if (poll) {
|
|
438
472
|
const configured = await readConfig(configFile);
|
|
439
473
|
const radarConfig = config.profile === undefined || config.refreshProfile === false
|
|
@@ -441,14 +475,50 @@ export function apply(ctx, config = {}) {
|
|
|
441
475
|
: await refreshRadarConfigFromDshProfile(configured, config.profile, undefined, dshHostNodeModulesDirectory === undefined ? {} : {
|
|
442
476
|
hostNodeModulesDirectory: dshHostNodeModulesDirectory,
|
|
443
477
|
hostRuntimeSource: 'dsh-process',
|
|
478
|
+
...(dshHostRuntimePackage === undefined ? {} : { hostRuntimePackage: dshHostRuntimePackage }),
|
|
479
|
+
...(dshHostRuntimePackageDirectory === undefined ? {} : { hostRuntimePackageDirectory: dshHostRuntimePackageDirectory }),
|
|
444
480
|
});
|
|
445
481
|
if (radarConfig !== configured && JSON.stringify(radarConfig.projects) !== JSON.stringify(configured.projects)) {
|
|
446
482
|
ctx.logger.info(`upstream-radar: refreshed installed DSH profile ${config.profile}`);
|
|
447
483
|
}
|
|
448
|
-
|
|
484
|
+
notificationPolicies = createNotificationPolicyMap(radarConfig.projects);
|
|
485
|
+
activeNotificationPolicies = notificationPolicies;
|
|
486
|
+
notificationPoliciesLoaded = true;
|
|
487
|
+
const result = await pollRadar(radarConfig.projects, state, source, new Date(), releases, releaseNotes, candidateGraphs, githubAdvisories === undefined ? [] : [{ name: 'github-advisories', source: githubAdvisories }], threatIntelSources);
|
|
449
488
|
state = result.state;
|
|
450
489
|
// Persist before model delivery. A crash may duplicate a task, but cannot silently lose it.
|
|
451
490
|
await saveRadarState(stateFile, state);
|
|
491
|
+
const webhookTargets = resolveRadarWebhookTargets(radarConfig.projects, {
|
|
492
|
+
...(webhookUrl === undefined ? {} : { globalUrl: webhookUrl }),
|
|
493
|
+
...(feishuSecret === undefined ? {} : { globalFeishuSecret: feishuSecret }),
|
|
494
|
+
});
|
|
495
|
+
for (const target of webhookTargets) {
|
|
496
|
+
const targetEvents = eventsForRadarWebhookTarget(result.events, target);
|
|
497
|
+
const isLegacyGlobal = webhookUrl !== undefined && target.projectIds === undefined;
|
|
498
|
+
const queuedState = isLegacyGlobal
|
|
499
|
+
? queueRadarWebhookEvents(state, target.endpointHash, targetEvents)
|
|
500
|
+
: queueRadarWebhookEventsForRoute(state, target.endpointHash, targetEvents);
|
|
501
|
+
state = queuedState;
|
|
502
|
+
await saveRadarState(stateFile, state);
|
|
503
|
+
const pendingWebhookEvents = filterNotifiableRadarEvents(isLegacyGlobal
|
|
504
|
+
? undeliveredRadarWebhookEvents(state, target.endpointHash, targetEvents)
|
|
505
|
+
: undeliveredRadarWebhookEventsForRoute(state, target.endpointHash, targetEvents), notificationPolicies, new Date(), state);
|
|
506
|
+
if (pendingWebhookEvents.length === 0)
|
|
507
|
+
continue;
|
|
508
|
+
try {
|
|
509
|
+
const payload = await sendRadarWebhook(target.url, pendingWebhookEvents, target.feishuSecret === undefined ? {} : { feishuSecret: target.feishuSecret });
|
|
510
|
+
const deliveredIds = new Set(payload.events.map(event => event.id));
|
|
511
|
+
const deliveredEvents = pendingWebhookEvents.filter(event => deliveredIds.has(event.id));
|
|
512
|
+
state = isLegacyGlobal
|
|
513
|
+
? markRadarWebhookEventsDelivered(state, target.endpointHash, deliveredEvents)
|
|
514
|
+
: markRadarWebhookEventsDeliveredForRoute(state, target.endpointHash, deliveredEvents);
|
|
515
|
+
await saveRadarState(stateFile, state);
|
|
516
|
+
ctx.logger.info(`upstream-radar: delivered ${deliveredEvents.length} changed event(s) to the configured webhook route`);
|
|
517
|
+
}
|
|
518
|
+
catch (error) {
|
|
519
|
+
ctx.logger.warn(`upstream-radar: webhook delivery failed; will retry: ${safeMessage(error)}`);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
452
522
|
if (result.events.length > 0) {
|
|
453
523
|
ctx.logger.info(`upstream-radar: ${result.events.length} change(s), ${result.analysisTasks.length} analysis task(s)`);
|
|
454
524
|
}
|
|
@@ -456,6 +526,12 @@ export function apply(ctx, config = {}) {
|
|
|
456
526
|
ctx.logger.warn(`upstream-radar: ${error.source}: ${safeMessage(error.message)}`);
|
|
457
527
|
}
|
|
458
528
|
}
|
|
529
|
+
else if (!notificationPoliciesLoaded) {
|
|
530
|
+
const configured = await readConfig(configFile);
|
|
531
|
+
activeNotificationPolicies = createNotificationPolicyMap(configured.projects);
|
|
532
|
+
notificationPolicies = activeNotificationPolicies;
|
|
533
|
+
notificationPoliciesLoaded = true;
|
|
534
|
+
}
|
|
459
535
|
const agents = ctx.agents.roots();
|
|
460
536
|
if (agents.length === 0 || state.pendingAnalysisTasks.length === 0)
|
|
461
537
|
return;
|
|
@@ -464,7 +540,7 @@ export function apply(ctx, config = {}) {
|
|
|
464
540
|
inFlightDeliveries.delete(delivery.id);
|
|
465
541
|
else
|
|
466
542
|
inFlightDeliveries.set(delivery.id, delivery);
|
|
467
|
-
});
|
|
543
|
+
}, notificationPolicies);
|
|
468
544
|
if (next !== state)
|
|
469
545
|
await saveRadarState(stateFile, next);
|
|
470
546
|
const unrouted = groupPendingAnalysisTasks(next.pendingAnalysisTasks).find((group) => {
|