upstream-radar 0.38.0 → 0.40.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 +58 -12
- package/dist/src/cli.js +94 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/dsh-install-observation.d.ts +154 -0
- package/dist/src/dsh-install-observation.d.ts.map +1 -0
- package/dist/src/dsh-install-observation.js +877 -0
- package/dist/src/dsh-install-observation.js.map +1 -0
- package/dist/src/dsh-install-plan.d.ts +28 -0
- package/dist/src/dsh-install-plan.d.ts.map +1 -0
- package/dist/src/dsh-install-plan.js +184 -0
- package/dist/src/dsh-install-plan.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/upstream-alignment.d.ts +4 -0
- package/dist/src/upstream-alignment.d.ts.map +1 -1
- package/dist/src/upstream-alignment.js +30 -2
- package/dist/src/upstream-alignment.js.map +1 -1
- package/dist/src/upstream-observer.d.ts +5 -0
- package/dist/src/upstream-observer.d.ts.map +1 -1
- package/dist/src/upstream-observer.js +75 -16
- 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 +21 -20
- package/package.json +2 -2
- package/schemas/dsh-install-observation.schema.json +218 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-observer.d.ts","sourceRoot":"","sources":["../../src/upstream-observer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgC,KAAK,uBAAuB,EAAE,KAAK,sBAAsB,EAAuC,MAAM,uBAAuB,CAAA;AACpK,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAGzD,OAAO,EAAwD,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACzH,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,WAAW,EACX,uBAAuB,EACvB,UAAU,EACV,OAAO,EACP,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAEnB,eAAO,MAAM,uBAAuB,EAAG,0CAAmD,CAAA;AAC1F,eAAO,MAAM,wBAAwB,EAAG,2CAAoD,CAAA;AAC5F,eAAO,MAAM,2BAA2B,EAAG,8CAAuD,CAAA;AAClG,eAAO,MAAM,sBAAsB,EAAG,yCAAkD,CAAA;
|
|
1
|
+
{"version":3,"file":"upstream-observer.d.ts","sourceRoot":"","sources":["../../src/upstream-observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ const OBSERVER_RETRY_DELAY_MS = 150;
|
|
|
30
30
|
const EXACT_NPM_PACKAGE_NAME = /^(?:@[^/\s]+\/[^/\s]+|[^/@\s]+)$/;
|
|
31
31
|
const EXACT_DSH_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
|
|
32
32
|
const SAFE_TARGET_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
33
|
+
const SAFE_NPM_DIST_TAG = /^[a-z][a-z0-9._-]{0,127}$/;
|
|
33
34
|
function asRecord(value) {
|
|
34
35
|
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
35
36
|
return undefined;
|
|
@@ -178,6 +179,10 @@ function yamlMapping(line) {
|
|
|
178
179
|
function normalizeTargetKey(key) {
|
|
179
180
|
if (key === 'package')
|
|
180
181
|
return 'packageName';
|
|
182
|
+
if (key === 'npm')
|
|
183
|
+
return 'observeNpm';
|
|
184
|
+
if (key === 'package-tag')
|
|
185
|
+
return 'packageTag';
|
|
181
186
|
if (key === 'package-path')
|
|
182
187
|
return 'packagePath';
|
|
183
188
|
if (key === 'lockfile-type')
|
|
@@ -302,6 +307,17 @@ function target(value, index) {
|
|
|
302
307
|
if (packageName !== undefined && !EXACT_NPM_PACKAGE_NAME.test(packageName)) {
|
|
303
308
|
throw new Error(`targets[${index}].package must be an npm package name`);
|
|
304
309
|
}
|
|
310
|
+
const observeNpm = source.observeNpm === undefined ? true : source.observeNpm;
|
|
311
|
+
if (typeof observeNpm !== 'boolean')
|
|
312
|
+
throw new Error(`targets[${index}].npm must be true or false`);
|
|
313
|
+
const packageTag = optionalBoundedString(source.packageTag, `targets[${index}].packageTag`, 128);
|
|
314
|
+
if (packageTag !== undefined && !SAFE_NPM_DIST_TAG.test(packageTag)) {
|
|
315
|
+
throw new Error(`targets[${index}].packageTag must be a lowercase npm dist-tag`);
|
|
316
|
+
}
|
|
317
|
+
if (!observeNpm && packageName !== undefined)
|
|
318
|
+
throw new Error(`targets[${index}].package cannot be set when npm is false`);
|
|
319
|
+
if (!observeNpm && packageTag !== undefined)
|
|
320
|
+
throw new Error(`targets[${index}].packageTag cannot be set when npm is false`);
|
|
305
321
|
const lockfile = source.lockfile === undefined ? undefined : validateRelativePath(source.lockfile, `targets[${index}].lockfile`);
|
|
306
322
|
const rawLockfileType = optionalBoundedString(source.lockfileType, `targets[${index}].lockfileType`, 16);
|
|
307
323
|
const lockfileType = rawLockfileType === undefined
|
|
@@ -328,6 +344,8 @@ function target(value, index) {
|
|
|
328
344
|
repository: validateRepository(source.repository, `targets[${index}].repository`),
|
|
329
345
|
ref,
|
|
330
346
|
...(packageName === undefined ? {} : { packageName }),
|
|
347
|
+
...(observeNpm ? {} : { observeNpm: false }),
|
|
348
|
+
...(packageTag === undefined ? {} : { packageTag }),
|
|
331
349
|
...(packagePath === undefined ? {} : { packagePath }),
|
|
332
350
|
...(lockfile === undefined ? {} : { lockfile }),
|
|
333
351
|
...(lockfileType === undefined ? {} : { lockfileType }),
|
|
@@ -382,9 +400,13 @@ function parsePackageObservation(value, label) {
|
|
|
382
400
|
throw new Error(`${label} must be an object`);
|
|
383
401
|
const name = boundedString(source.name, `${label}.name`, 512);
|
|
384
402
|
const version = boundedString(source.version, `${label}.version`, 512);
|
|
403
|
+
const distTag = optionalBoundedString(source.distTag, `${label}.distTag`, 128);
|
|
404
|
+
if (distTag !== undefined && !SAFE_NPM_DIST_TAG.test(distTag))
|
|
405
|
+
throw new Error(`${label}.distTag is invalid`);
|
|
385
406
|
return {
|
|
386
407
|
name,
|
|
387
408
|
version,
|
|
409
|
+
...(distTag === undefined ? {} : { distTag }),
|
|
388
410
|
...(optionalBoundedString(source.integrity, `${label}.integrity`, 512) === undefined ? {} : { integrity: source.integrity }),
|
|
389
411
|
...(optionalBoundedString(source.tarball, `${label}.tarball`, 4_096) === undefined ? {} : { tarball: source.tarball }),
|
|
390
412
|
...(optionalBoundedString(source.repository, `${label}.repository`, 4_096) === undefined ? {} : { repository: source.repository }),
|
|
@@ -810,7 +832,7 @@ export class UpstreamObserverClient {
|
|
|
810
832
|
}
|
|
811
833
|
return undefined;
|
|
812
834
|
}
|
|
813
|
-
async fetchNpmObservation(name) {
|
|
835
|
+
async fetchNpmObservation(name, distTag = 'latest') {
|
|
814
836
|
const url = new URL(encodeURIComponent(name), this.registry);
|
|
815
837
|
const response = await this.fetchWithRetry(url, {
|
|
816
838
|
headers: { accept: 'application/vnd.npm.install-v1+json, application/json', 'user-agent': 'upstream-radar/upstream-observer' },
|
|
@@ -822,22 +844,23 @@ export class UpstreamObserverClient {
|
|
|
822
844
|
const tags = asRecord(root?.['dist-tags']);
|
|
823
845
|
const versions = asRecord(root?.versions);
|
|
824
846
|
const times = asRecord(root?.time);
|
|
825
|
-
const
|
|
826
|
-
const rawManifest =
|
|
847
|
+
const selectedVersion = typeof tags?.[distTag] === 'string' ? tags[distTag] : undefined;
|
|
848
|
+
const rawManifest = selectedVersion === undefined ? undefined : versions?.[selectedVersion];
|
|
827
849
|
const manifest = asRecord(rawManifest);
|
|
828
|
-
if (
|
|
829
|
-
throw new Error(`npm registry has no
|
|
850
|
+
if (selectedVersion === undefined || manifest === undefined)
|
|
851
|
+
throw new Error(`npm registry has no ${distTag} manifest for ${name}`);
|
|
830
852
|
const dist = asRecord(manifest.dist);
|
|
831
853
|
const repository = typeof manifest.repository === 'string'
|
|
832
854
|
? manifest.repository
|
|
833
855
|
: typeof asRecord(manifest.repository)?.url === 'string' ? asRecord(manifest.repository)?.url : undefined;
|
|
834
856
|
return {
|
|
835
857
|
name,
|
|
836
|
-
version:
|
|
858
|
+
version: selectedVersion,
|
|
859
|
+
distTag,
|
|
837
860
|
...(typeof dist?.integrity === 'string' ? { integrity: dist.integrity } : {}),
|
|
838
861
|
...(typeof dist?.tarball === 'string' ? { tarball: dist.tarball } : {}),
|
|
839
862
|
...(repository === undefined ? {} : { repository: repository.slice(0, 4_096) }),
|
|
840
|
-
...(typeof times?.[
|
|
863
|
+
...(typeof times?.[selectedVersion] === 'string' ? { publishedAt: times[selectedVersion] } : {}),
|
|
841
864
|
};
|
|
842
865
|
}
|
|
843
866
|
async observe(targetValue, now) {
|
|
@@ -862,9 +885,12 @@ export class UpstreamObserverClient {
|
|
|
862
885
|
if (targetValue.packageName !== undefined && targetValue.packageName !== manifest.name) {
|
|
863
886
|
warnings.push(`target package ${targetValue.packageName} does not match source manifest ${manifest.name}`);
|
|
864
887
|
}
|
|
865
|
-
const packageObservation =
|
|
866
|
-
|
|
888
|
+
const packageObservation = targetValue.observeNpm === false
|
|
889
|
+
? undefined
|
|
890
|
+
: await this.fetchNpmObservation(packageName, targetValue.packageTag);
|
|
891
|
+
if (targetValue.observeNpm !== false && packageObservation === undefined) {
|
|
867
892
|
warnings.push(`${packageName} was not found on the configured npm registry`);
|
|
893
|
+
}
|
|
868
894
|
let graph;
|
|
869
895
|
let graphError;
|
|
870
896
|
let lockfileUrl;
|
|
@@ -934,6 +960,7 @@ export class UpstreamObserverClient {
|
|
|
934
960
|
packagePath,
|
|
935
961
|
},
|
|
936
962
|
manifest,
|
|
963
|
+
npmExpected: targetValue.observeNpm !== false,
|
|
937
964
|
...(packageObservation === undefined ? {} : {
|
|
938
965
|
package: {
|
|
939
966
|
name: packageObservation.name,
|
|
@@ -1054,6 +1081,10 @@ function summary(snapshot) {
|
|
|
1054
1081
|
...(snapshot.alignment === undefined ? {} : { alignment: structuredClone(snapshot.alignment) }),
|
|
1055
1082
|
};
|
|
1056
1083
|
}
|
|
1084
|
+
function snapshotEvidenceSignature(snapshot) {
|
|
1085
|
+
const { observedAt: _observedAt, ...evidence } = snapshot;
|
|
1086
|
+
return JSON.stringify(evidence);
|
|
1087
|
+
}
|
|
1057
1088
|
function alignmentSignature(value) {
|
|
1058
1089
|
if (value === undefined)
|
|
1059
1090
|
return '';
|
|
@@ -1150,6 +1181,11 @@ function packageChanged(before, after) {
|
|
|
1150
1181
|
return true;
|
|
1151
1182
|
return before.package?.integrity !== after.package?.integrity;
|
|
1152
1183
|
}
|
|
1184
|
+
function sourcePublishedVersionDrift(snapshot) {
|
|
1185
|
+
if (snapshot.package === undefined || snapshot.manifest.version === snapshot.package.version)
|
|
1186
|
+
return undefined;
|
|
1187
|
+
return `${snapshot.manifest.name}@${snapshot.manifest.version}|${snapshot.package.name}@${snapshot.package.version}`;
|
|
1188
|
+
}
|
|
1153
1189
|
function graphChanged(before, after) {
|
|
1154
1190
|
if (before.graphError !== after.graphError)
|
|
1155
1191
|
return true;
|
|
@@ -1175,7 +1211,9 @@ function meaningfulChange(sourceChange, before, after) {
|
|
|
1175
1211
|
if (before.manifest.name !== after.manifest.name || before.manifest.version !== after.manifest.version) {
|
|
1176
1212
|
reasons.push(`source manifest identity changed: ${before.manifest.name}@${before.manifest.version} → ${after.manifest.name}@${after.manifest.version}`);
|
|
1177
1213
|
}
|
|
1178
|
-
|
|
1214
|
+
const beforeDrift = sourcePublishedVersionDrift(before);
|
|
1215
|
+
const afterDrift = sourcePublishedVersionDrift(after);
|
|
1216
|
+
if (afterDrift !== undefined && beforeDrift !== afterDrift && after.package !== undefined) {
|
|
1179
1217
|
reasons.push(`source/published version drift: source ${after.manifest.name}@${after.manifest.version}, npm ${after.package.name}@${after.package.version}`);
|
|
1180
1218
|
}
|
|
1181
1219
|
// Legacy observation files predate the IR. Populate the new field on the
|
|
@@ -1409,6 +1447,16 @@ function llmCompletionEndpoints(baseUrl) {
|
|
|
1409
1447
|
}
|
|
1410
1448
|
return [...new Set(bases)].map(base => `${base}/chat/completions`);
|
|
1411
1449
|
}
|
|
1450
|
+
function isDeepSeekJsonModel(baseUrl, model) {
|
|
1451
|
+
if (model === 'deepseek-v4-flash' || model === 'deepseek-v4-pro' || model === 'deepseek-chat' || model === 'deepseek-reasoner')
|
|
1452
|
+
return true;
|
|
1453
|
+
try {
|
|
1454
|
+
return new URL(baseUrl).hostname === 'api.deepseek.com';
|
|
1455
|
+
}
|
|
1456
|
+
catch {
|
|
1457
|
+
return false;
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1412
1460
|
/**
|
|
1413
1461
|
* Call an explicit OpenAI-compatible model without requiring users to write a
|
|
1414
1462
|
* DSH wrapper. The env file is read for this invocation only; the key and
|
|
@@ -1453,14 +1501,17 @@ export async function runOpenAiCompatibleAgent(task, prompt, options) {
|
|
|
1453
1501
|
body: JSON.stringify({
|
|
1454
1502
|
model,
|
|
1455
1503
|
messages: [
|
|
1456
|
-
{ role: 'system', content: '
|
|
1504
|
+
{ role: 'system', content: '只返回一个严格 JSON 对象。不要输出 Markdown、解释、前缀或后缀;输出必须以 { 开始并以 } 结束。' },
|
|
1457
1505
|
{ role: 'user', content: prompt },
|
|
1458
1506
|
],
|
|
1459
1507
|
temperature: 0,
|
|
1508
|
+
// DeepSeek V4 enables thinking by default. For this machine-readable
|
|
1509
|
+
// contract, disable it so the output budget is reserved for the JSON
|
|
1510
|
+
// conclusion instead of an optional reasoning stream.
|
|
1511
|
+
...(isDeepSeekJsonModel(baseUrl, model) ? { thinking: { type: 'disabled' } } : {}),
|
|
1460
1512
|
response_format: { type: 'json_object' },
|
|
1461
|
-
//
|
|
1462
|
-
//
|
|
1463
|
-
// reasoning and return an empty `content` field.
|
|
1513
|
+
// Keep an explicit output budget so the JSON conclusion is not
|
|
1514
|
+
// truncated by a provider default.
|
|
1464
1515
|
max_tokens: DEFAULT_LLM_MAX_TOKENS,
|
|
1465
1516
|
}),
|
|
1466
1517
|
signal: AbortSignal.timeout(timeoutMs),
|
|
@@ -1573,13 +1624,19 @@ export async function runObserver(config, previousState, options = {}) {
|
|
|
1573
1624
|
try {
|
|
1574
1625
|
const current = await source.observe(configuredTarget, checkedAt);
|
|
1575
1626
|
const before = previousState.targets[configuredTarget.id];
|
|
1576
|
-
nextTargets[configuredTarget.id] = current;
|
|
1577
1627
|
if (before === undefined) {
|
|
1628
|
+
nextTargets[configuredTarget.id] = current;
|
|
1578
1629
|
baselineTargets.push(configuredTarget.id);
|
|
1579
1630
|
if (current.alignment !== undefined)
|
|
1580
1631
|
alignmentFindings.push({ targetId: configuredTarget.id, alignment: structuredClone(current.alignment) });
|
|
1581
1632
|
continue;
|
|
1582
1633
|
}
|
|
1634
|
+
// checkedAt belongs in the run report. Keep the durable observation point
|
|
1635
|
+
// byte-stable when its evidence did not change, so a no-op cron run does
|
|
1636
|
+
// not manufacture a commit from a fresh timestamp alone.
|
|
1637
|
+
nextTargets[configuredTarget.id] = snapshotEvidenceSignature(before) === snapshotEvidenceSignature(current)
|
|
1638
|
+
? before
|
|
1639
|
+
: current;
|
|
1583
1640
|
if (before.alignment === undefined && current.alignment !== undefined) {
|
|
1584
1641
|
// Upgrade legacy state into the IR and show its first finding once.
|
|
1585
1642
|
// This is evidence for the author, not a fake upstream change and not
|
|
@@ -1704,7 +1761,9 @@ export function observerExitCode(report) {
|
|
|
1704
1761
|
return report.errors.length > 0 ? 1 : 0;
|
|
1705
1762
|
}
|
|
1706
1763
|
function displayPackage(value) {
|
|
1707
|
-
return value === undefined
|
|
1764
|
+
return value === undefined
|
|
1765
|
+
? 'not observed'
|
|
1766
|
+
: `${value.name}@${value.version}${value.distTag === undefined ? '' : ` via npm tag ${value.distTag}`}`;
|
|
1708
1767
|
}
|
|
1709
1768
|
function displayGraph(value) {
|
|
1710
1769
|
return value === undefined ? 'not observed' : `${value.nodes} nodes, ${value.edges} edges${value.unresolved === 0 ? '' : `, ${value.unresolved} unresolved`}`;
|