dsh-research-report 0.1.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/CHANGELOG.md +18 -0
- package/LICENSE +201 -0
- package/README.es.md +155 -0
- package/README.hi.md +155 -0
- package/README.md +155 -0
- package/README.pt.md +155 -0
- package/README.zh.md +155 -0
- package/THIRD_PARTY_NOTICES.md +21 -0
- package/cordis.patch.yml +24 -0
- package/lib/index.js +2143 -0
- package/lib/types/assemble.d.ts +123 -0
- package/lib/types/assemble.d.ts.map +1 -0
- package/lib/types/assemble.js +239 -0
- package/lib/types/assemble.js.map +1 -0
- package/lib/types/config.d.ts +48 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/config.js +60 -0
- package/lib/types/config.js.map +1 -0
- package/lib/types/gather.d.ts +119 -0
- package/lib/types/gather.d.ts.map +1 -0
- package/lib/types/gather.js +165 -0
- package/lib/types/gather.js.map +1 -0
- package/lib/types/index.d.ts +51 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +71 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/ledger.d.ts +159 -0
- package/lib/types/ledger.d.ts.map +1 -0
- package/lib/types/ledger.js +276 -0
- package/lib/types/ledger.js.map +1 -0
- package/lib/types/provider-local.d.ts +137 -0
- package/lib/types/provider-local.d.ts.map +1 -0
- package/lib/types/provider-local.js +418 -0
- package/lib/types/provider-local.js.map +1 -0
- package/lib/types/service.d.ts +302 -0
- package/lib/types/service.d.ts.map +1 -0
- package/lib/types/service.js +31 -0
- package/lib/types/service.js.map +1 -0
- package/lib/types/tools/evidence-add.d.ts +36 -0
- package/lib/types/tools/evidence-add.d.ts.map +1 -0
- package/lib/types/tools/evidence-add.js +107 -0
- package/lib/types/tools/evidence-add.js.map +1 -0
- package/lib/types/tools/ledger-query.d.ts +42 -0
- package/lib/types/tools/ledger-query.d.ts.map +1 -0
- package/lib/types/tools/ledger-query.js +154 -0
- package/lib/types/tools/ledger-query.js.map +1 -0
- package/lib/types/tools/research-report.d.ts +67 -0
- package/lib/types/tools/research-report.d.ts.map +1 -0
- package/lib/types/tools/research-report.js +345 -0
- package/lib/types/tools/research-report.js.map +1 -0
- package/lib/types/verify.d.ts +128 -0
- package/lib/types/verify.d.ts.map +1 -0
- package/lib/types/verify.js +208 -0
- package/lib/types/verify.js.map +1 -0
- package/lib/types/version.d.ts +7 -0
- package/lib/types/version.d.ts.map +1 -0
- package/lib/types/version.js +7 -0
- package/lib/types/version.js.map +1 -0
- package/package.json +147 -0
- package/src/assemble.ts +302 -0
- package/src/config.ts +97 -0
- package/src/gather.ts +239 -0
- package/src/index.ts +139 -0
- package/src/ledger.ts +344 -0
- package/src/provider-local.ts +489 -0
- package/src/service.ts +322 -0
- package/src/tools/evidence-add.ts +132 -0
- package/src/tools/ledger-query.ts +191 -0
- package/src/tools/research-report.ts +424 -0
- package/src/verify.ts +285 -0
- package/src/version.ts +7 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim verification: the built-in byte-level check plus the optional numeric
|
|
3
|
+
* bridge to `ctx.dataQuality`.
|
|
4
|
+
*
|
|
5
|
+
* Byte-level semantics (v1 is deliberately NON-semantic): every number and
|
|
6
|
+
* quoted span in the claim text must be locatable VERBATIM in the bound
|
|
7
|
+
* evidence snapshots. A citation that cannot be located makes the claim
|
|
8
|
+
* `unverified`; a number whose left-context label appears in the snapshot
|
|
9
|
+
* followed by a DIFFERENT number makes the claim `contradicted`. The check
|
|
10
|
+
* proves "the claimed literals exist in the captured bytes", nothing more.
|
|
11
|
+
*
|
|
12
|
+
* The `CitationCheckRequest` / `CitationCheckResult` block below is BYTE-FROZEN:
|
|
13
|
+
* it is the structural surface of the optional `ctx.dataQuality` service
|
|
14
|
+
* (provided by the sibling dsh-data-quality plugin, consumed via `ctx.get` —
|
|
15
|
+
* never imported, never injected). `scripts/verify-frozen-contract.mjs` gates
|
|
16
|
+
* drift.
|
|
17
|
+
*
|
|
18
|
+
* @module dsh-research-report/verify
|
|
19
|
+
*/
|
|
20
|
+
export interface CitationCheckRequest {
|
|
21
|
+
/** Workspace-relative path of the source dataset snapshot (CSV/JSON). */
|
|
22
|
+
dataset: string;
|
|
23
|
+
/** Citations to verify against the dataset. */
|
|
24
|
+
citations: Array<{
|
|
25
|
+
/** Stable id chosen by the caller, echoed back in results. */
|
|
26
|
+
id: string;
|
|
27
|
+
/** JSON-path-ish locator, e.g. "rows[3].nav" or "summary.annualReturn". */
|
|
28
|
+
path: string;
|
|
29
|
+
/** The value as cited in the document. */
|
|
30
|
+
value: number | string;
|
|
31
|
+
/** Optional relative tolerance for numeric comparison, e.g. 0.01 = 1%. */
|
|
32
|
+
tolerance?: number;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export interface CitationCheckResult {
|
|
36
|
+
results: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
status: 'verified' | 'mismatch' | 'not-found' | 'unverifiable';
|
|
39
|
+
/** Actual value found at path, when found. */
|
|
40
|
+
actual?: number | string;
|
|
41
|
+
/** Human-readable evidence note. */
|
|
42
|
+
note?: string;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The structural surface of the optional `ctx.dataQuality` service. Declared
|
|
47
|
+
* locally (never imported from the sibling package) and reached via
|
|
48
|
+
* `ctx.get('dataQuality')` + an `as unknown as` assertion.
|
|
49
|
+
*/
|
|
50
|
+
export interface DataQualityBridge {
|
|
51
|
+
/**
|
|
52
|
+
* Verify citations against a structured dataset snapshot.
|
|
53
|
+
* @param request - the dataset and its citations.
|
|
54
|
+
* @returns per-citation outcomes.
|
|
55
|
+
*/
|
|
56
|
+
verifyCitations(request: CitationCheckRequest): Promise<CitationCheckResult>;
|
|
57
|
+
}
|
|
58
|
+
/** One literal citation extracted from a claim text. */
|
|
59
|
+
export interface Citation {
|
|
60
|
+
/** What kind of literal this is. */
|
|
61
|
+
kind: 'number' | 'quote';
|
|
62
|
+
/** The literal text that must be locatable verbatim in bound evidence. */
|
|
63
|
+
text: string;
|
|
64
|
+
/** Left-context label of a number citation (drives the contradiction check). */
|
|
65
|
+
context?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Extract the trailing context label of a number citation: up to 24 characters
|
|
69
|
+
* before the number, trimmed to its trailing label run. Too-short labels are
|
|
70
|
+
* dropped (a weak label would false-positive the contradiction check).
|
|
71
|
+
* @param text - the full claim text.
|
|
72
|
+
* @param index - offset of the number in the text.
|
|
73
|
+
* @returns the label, or undefined when there is no usable one.
|
|
74
|
+
*/
|
|
75
|
+
export declare function contextLabelOf(text: string, index: number): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Extract every checkable citation from one claim text: number literals (with
|
|
78
|
+
* their left-context labels) and quoted spans.
|
|
79
|
+
* @param claimText - the claim to analyze.
|
|
80
|
+
* @returns citations in first-seen order (duplicates kept once).
|
|
81
|
+
*/
|
|
82
|
+
export declare function extractCitations(claimText: string): Citation[];
|
|
83
|
+
/** Normalize a number literal for comparison (drop grouping commas and %). */
|
|
84
|
+
export declare function normalizeNumber(text: string): string;
|
|
85
|
+
/** The outcome of the byte-level check of one claim. */
|
|
86
|
+
export interface ByteCheckOutcome {
|
|
87
|
+
/** The three-state verdict. */
|
|
88
|
+
status: 'verified' | 'unverified' | 'contradicted';
|
|
89
|
+
/** Human-readable evidence note. */
|
|
90
|
+
note: string;
|
|
91
|
+
/** Citations that could not be located verbatim. */
|
|
92
|
+
missing: string[];
|
|
93
|
+
/** Contradiction details (`label: claimed X, snapshot says Y`). */
|
|
94
|
+
contradictions: string[];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Run the byte-level check of one claim against its bound evidence snapshots.
|
|
98
|
+
* @param claimText - the claim text.
|
|
99
|
+
* @param evidenceContents - the verbatim snapshot contents of the bound evidence.
|
|
100
|
+
* @returns the outcome (never throws).
|
|
101
|
+
*/
|
|
102
|
+
export declare function verifyClaimText(claimText: string, evidenceContents: readonly string[]): ByteCheckOutcome;
|
|
103
|
+
/**
|
|
104
|
+
* Map one bridge result set onto the three-state verdict vocabulary.
|
|
105
|
+
* `mismatch` maps to `contradicted`; `not-found`/`unverifiable` map to
|
|
106
|
+
* `unverified`.
|
|
107
|
+
* @param result - the dataQuality outcome.
|
|
108
|
+
* @returns the mapped status plus a human-readable note.
|
|
109
|
+
*/
|
|
110
|
+
export declare function mapBridgeResults(result: CitationCheckResult): {
|
|
111
|
+
status: 'verified' | 'unverified' | 'contradicted';
|
|
112
|
+
note: string;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Combine the byte-level and bridge outcomes: `contradicted` wins, then
|
|
116
|
+
* `unverified`, then `verified`.
|
|
117
|
+
* @param byte - the byte-level outcome.
|
|
118
|
+
* @param bridge - the bridge outcome, when the numeric bridge ran.
|
|
119
|
+
* @returns the combined status and a merged note.
|
|
120
|
+
*/
|
|
121
|
+
export declare function combineOutcomes(byte: ByteCheckOutcome, bridge: {
|
|
122
|
+
status: 'verified' | 'unverified' | 'contradicted';
|
|
123
|
+
note: string;
|
|
124
|
+
} | undefined): {
|
|
125
|
+
status: 'verified' | 'unverified' | 'contradicted';
|
|
126
|
+
note: string;
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAA;IACf,+CAA+C;IAC/C,SAAS,EAAE,KAAK,CAAC;QACf,8DAA8D;QAC9D,EAAE,EAAE,MAAM,CAAA;QACV,2EAA2E;QAC3E,IAAI,EAAE,MAAM,CAAA;QACZ,0CAA0C;QAC1C,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;QACtB,0EAA0E;QAC1E,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;CACH;AACD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,CAAA;QAC9D,8CAA8C;QAC9C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QACxB,oCAAoC;QACpC,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAC,CAAA;CACH;AAID;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAC7E;AAID,wDAAwD;AACxD,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAA;IACxB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAeD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM9E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmB9D;AAOD,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AASD,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,cAAc,CAAA;IAClD,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,mEAAmE;IACnE,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAKD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAoExG;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAkBlI;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE;IAAE,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACvF;IAAE,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKtE"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claim verification: the built-in byte-level check plus the optional numeric
|
|
3
|
+
* bridge to `ctx.dataQuality`.
|
|
4
|
+
*
|
|
5
|
+
* Byte-level semantics (v1 is deliberately NON-semantic): every number and
|
|
6
|
+
* quoted span in the claim text must be locatable VERBATIM in the bound
|
|
7
|
+
* evidence snapshots. A citation that cannot be located makes the claim
|
|
8
|
+
* `unverified`; a number whose left-context label appears in the snapshot
|
|
9
|
+
* followed by a DIFFERENT number makes the claim `contradicted`. The check
|
|
10
|
+
* proves "the claimed literals exist in the captured bytes", nothing more.
|
|
11
|
+
*
|
|
12
|
+
* The `CitationCheckRequest` / `CitationCheckResult` block below is BYTE-FROZEN:
|
|
13
|
+
* it is the structural surface of the optional `ctx.dataQuality` service
|
|
14
|
+
* (provided by the sibling dsh-data-quality plugin, consumed via `ctx.get` —
|
|
15
|
+
* never imported, never injected). `scripts/verify-frozen-contract.mjs` gates
|
|
16
|
+
* drift.
|
|
17
|
+
*
|
|
18
|
+
* @module dsh-research-report/verify
|
|
19
|
+
*/
|
|
20
|
+
/** Number literal: optional sign, grouped digits, decimals, trailing %. */
|
|
21
|
+
const NUMBER_PATTERN = /-?\d[\d,]*(?:\.\d+)?%?/gu;
|
|
22
|
+
/** Quoted spans: ASCII double quotes, CJK corner brackets, full-width quotes. */
|
|
23
|
+
const QUOTE_PATTERNS = [
|
|
24
|
+
/"([^"\n]{4,200})"/gu,
|
|
25
|
+
/「([^」\n]{2,200})」/gu,
|
|
26
|
+
/“([^“”\n]{4,200})”/gu,
|
|
27
|
+
];
|
|
28
|
+
/** The tail run of label characters (letters / CJK) ending a context window. */
|
|
29
|
+
const LABEL_PATTERN = /[\p{L}\p{N}_()()%$-]{2,24}$/u;
|
|
30
|
+
/**
|
|
31
|
+
* Extract the trailing context label of a number citation: up to 24 characters
|
|
32
|
+
* before the number, trimmed to its trailing label run. Too-short labels are
|
|
33
|
+
* dropped (a weak label would false-positive the contradiction check).
|
|
34
|
+
* @param text - the full claim text.
|
|
35
|
+
* @param index - offset of the number in the text.
|
|
36
|
+
* @returns the label, or undefined when there is no usable one.
|
|
37
|
+
*/
|
|
38
|
+
export function contextLabelOf(text, index) {
|
|
39
|
+
const window = text.slice(Math.max(0, index - 24), index).trimEnd();
|
|
40
|
+
const match = LABEL_PATTERN.exec(window);
|
|
41
|
+
const label = match?.[0].trim();
|
|
42
|
+
if (label === undefined || label.length < 2)
|
|
43
|
+
return undefined;
|
|
44
|
+
return label;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Extract every checkable citation from one claim text: number literals (with
|
|
48
|
+
* their left-context labels) and quoted spans.
|
|
49
|
+
* @param claimText - the claim to analyze.
|
|
50
|
+
* @returns citations in first-seen order (duplicates kept once).
|
|
51
|
+
*/
|
|
52
|
+
export function extractCitations(claimText) {
|
|
53
|
+
const citations = [];
|
|
54
|
+
const seen = new Set();
|
|
55
|
+
for (const match of claimText.matchAll(NUMBER_PATTERN)) {
|
|
56
|
+
const text = match[0];
|
|
57
|
+
if (seen.has(`number:${text}`))
|
|
58
|
+
continue;
|
|
59
|
+
seen.add(`number:${text}`);
|
|
60
|
+
const context = contextLabelOf(claimText, match.index);
|
|
61
|
+
citations.push(context === undefined ? { kind: 'number', text } : { kind: 'number', text, context });
|
|
62
|
+
}
|
|
63
|
+
for (const pattern of QUOTE_PATTERNS) {
|
|
64
|
+
for (const match of claimText.matchAll(pattern)) {
|
|
65
|
+
const text = match[1];
|
|
66
|
+
if (seen.has(`quote:${text}`))
|
|
67
|
+
continue;
|
|
68
|
+
seen.add(`quote:${text}`);
|
|
69
|
+
citations.push({ kind: 'quote', text });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return citations;
|
|
73
|
+
}
|
|
74
|
+
// ── Byte-level verification ─────────────────────────────────────────────────
|
|
75
|
+
/** The number token scan window after a context label (bytes of text). */
|
|
76
|
+
const CONTEXT_SCAN_WINDOW = 24;
|
|
77
|
+
/** Normalize a number literal for comparison (drop grouping commas and %). */
|
|
78
|
+
export function normalizeNumber(text) {
|
|
79
|
+
return text.replace(/[,%]/gu, '');
|
|
80
|
+
}
|
|
81
|
+
/** The first number literal found in `text` from `from` (fresh regex — no shared lastIndex). */
|
|
82
|
+
function numberAfter(text, from) {
|
|
83
|
+
const window = text.slice(from, from + CONTEXT_SCAN_WINDOW);
|
|
84
|
+
const match = /-?\d[\d,]*(?:\.\d+)?%?/u.exec(window);
|
|
85
|
+
return match?.[0];
|
|
86
|
+
}
|
|
87
|
+
/** Cap how many problem citations one note enumerates. */
|
|
88
|
+
const NOTE_LIST_CAP = 5;
|
|
89
|
+
/**
|
|
90
|
+
* Run the byte-level check of one claim against its bound evidence snapshots.
|
|
91
|
+
* @param claimText - the claim text.
|
|
92
|
+
* @param evidenceContents - the verbatim snapshot contents of the bound evidence.
|
|
93
|
+
* @returns the outcome (never throws).
|
|
94
|
+
*/
|
|
95
|
+
export function verifyClaimText(claimText, evidenceContents) {
|
|
96
|
+
if (evidenceContents.length === 0) {
|
|
97
|
+
return { status: 'unverified', note: 'claim binds no evidence snapshot', missing: [], contradictions: [] };
|
|
98
|
+
}
|
|
99
|
+
const haystack = evidenceContents.join('\n');
|
|
100
|
+
const citations = extractCitations(claimText);
|
|
101
|
+
if (citations.length === 0) {
|
|
102
|
+
return {
|
|
103
|
+
status: 'unverified',
|
|
104
|
+
note: 'claim carries no checkable citation (number or quoted span); byte-level verification needs a literal to locate',
|
|
105
|
+
missing: [],
|
|
106
|
+
contradictions: [],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const missing = [];
|
|
110
|
+
const contradictions = [];
|
|
111
|
+
for (const citation of citations) {
|
|
112
|
+
if (citation.kind === 'quote') {
|
|
113
|
+
if (!haystack.includes(citation.text))
|
|
114
|
+
missing.push(`"${citation.text}"`);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// Number citation, presence-first: a number locatable verbatim supports
|
|
118
|
+
// the claim. The contradiction check runs only when the claimed number is
|
|
119
|
+
// ABSENT — then a label occurrence carrying a different number means the
|
|
120
|
+
// snapshot explicitly contradicts the claim (the audit-critical signal).
|
|
121
|
+
if (haystack.includes(citation.text))
|
|
122
|
+
continue;
|
|
123
|
+
if (citation.context !== undefined) {
|
|
124
|
+
let searchFrom = 0;
|
|
125
|
+
let different;
|
|
126
|
+
for (;;) {
|
|
127
|
+
const at = haystack.indexOf(citation.context, searchFrom);
|
|
128
|
+
if (at === -1)
|
|
129
|
+
break;
|
|
130
|
+
const found = numberAfter(haystack, at + citation.context.length);
|
|
131
|
+
if (found !== undefined && normalizeNumber(found) !== normalizeNumber(citation.text)) {
|
|
132
|
+
different = found;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
searchFrom = at + citation.context.length;
|
|
136
|
+
}
|
|
137
|
+
if (different !== undefined) {
|
|
138
|
+
contradictions.push(`${citation.context}: claim says ${citation.text}, snapshot says ${different}`);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
missing.push(citation.text);
|
|
143
|
+
}
|
|
144
|
+
if (contradictions.length > 0) {
|
|
145
|
+
return {
|
|
146
|
+
status: 'contradicted',
|
|
147
|
+
note: `contradicts the snapshot: ${contradictions.slice(0, NOTE_LIST_CAP).join('; ')}`,
|
|
148
|
+
missing,
|
|
149
|
+
contradictions,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (missing.length > 0) {
|
|
153
|
+
return {
|
|
154
|
+
status: 'unverified',
|
|
155
|
+
note: `citation(s) not found in bound evidence: ${missing.slice(0, NOTE_LIST_CAP).join(', ')}`,
|
|
156
|
+
missing,
|
|
157
|
+
contradictions,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
status: 'verified',
|
|
162
|
+
note: `${citations.length} citation(s) located verbatim in the bound snapshot(s)`,
|
|
163
|
+
missing,
|
|
164
|
+
contradictions,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// ── The numeric bridge mapping ──────────────────────────────────────────────
|
|
168
|
+
/**
|
|
169
|
+
* Map one bridge result set onto the three-state verdict vocabulary.
|
|
170
|
+
* `mismatch` maps to `contradicted`; `not-found`/`unverifiable` map to
|
|
171
|
+
* `unverified`.
|
|
172
|
+
* @param result - the dataQuality outcome.
|
|
173
|
+
* @returns the mapped status plus a human-readable note.
|
|
174
|
+
*/
|
|
175
|
+
export function mapBridgeResults(result) {
|
|
176
|
+
const mismatch = result.results.filter(entry => entry.status === 'mismatch');
|
|
177
|
+
if (mismatch.length > 0) {
|
|
178
|
+
const detail = mismatch
|
|
179
|
+
.slice(0, NOTE_LIST_CAP)
|
|
180
|
+
.map(entry => `${entry.id}: dataset has ${String(entry.actual ?? '?')}${entry.note === undefined ? '' : ` (${entry.note})`}`)
|
|
181
|
+
.join('; ');
|
|
182
|
+
return { status: 'contradicted', note: `dataset cross-check mismatch: ${detail}` };
|
|
183
|
+
}
|
|
184
|
+
const unresolved = result.results.filter(entry => entry.status === 'not-found' || entry.status === 'unverifiable');
|
|
185
|
+
if (unresolved.length > 0) {
|
|
186
|
+
const detail = unresolved
|
|
187
|
+
.slice(0, NOTE_LIST_CAP)
|
|
188
|
+
.map(entry => `${entry.id}: ${entry.status}${entry.note === undefined ? '' : ` (${entry.note})`}`)
|
|
189
|
+
.join('; ');
|
|
190
|
+
return { status: 'unverified', note: `dataset cross-check unresolved: ${detail}` };
|
|
191
|
+
}
|
|
192
|
+
return { status: 'verified', note: `${result.results.length} dataset citation(s) verified via ctx.dataQuality` };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Combine the byte-level and bridge outcomes: `contradicted` wins, then
|
|
196
|
+
* `unverified`, then `verified`.
|
|
197
|
+
* @param byte - the byte-level outcome.
|
|
198
|
+
* @param bridge - the bridge outcome, when the numeric bridge ran.
|
|
199
|
+
* @returns the combined status and a merged note.
|
|
200
|
+
*/
|
|
201
|
+
export function combineOutcomes(byte, bridge) {
|
|
202
|
+
if (bridge === undefined)
|
|
203
|
+
return { status: byte.status, note: byte.note };
|
|
204
|
+
const rank = { verified: 0, unverified: 1, contradicted: 2 };
|
|
205
|
+
const status = rank[bridge.status] > rank[byte.status] ? bridge.status : byte.status;
|
|
206
|
+
return { status, note: `${byte.note} | ${bridge.note}` };
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qCAAqC;AACrC,eAAO,MAAM,OAAO,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qCAAqC;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-research-report",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Verifiable research-report engine for DeepSeek Harness: a content-addressed evidence ledger (claim ↔ snapshot binding, tamper-evident) plus versioned sealed reports where every claim carries a verification verdict and the manifest hash seals the directory. Retrieval orchestration reuses the official ctx.web / ctx.jobs seams — no deep-research loop.",
|
|
5
|
+
"author": "dsh-research-report contributors",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/PerryLink/dsh-research-report.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/PerryLink/dsh-research-report#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/PerryLink/dsh-research-report/issues"
|
|
13
|
+
},
|
|
14
|
+
"private": false,
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "./lib/index.js",
|
|
17
|
+
"types": "./lib/types/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./lib/types/index.d.ts",
|
|
21
|
+
"default": "./lib/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./package.json": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"lib",
|
|
27
|
+
"src",
|
|
28
|
+
"cordis.patch.yml",
|
|
29
|
+
"CHANGELOG.md",
|
|
30
|
+
"THIRD_PARTY_NOTICES.md",
|
|
31
|
+
"README.md",
|
|
32
|
+
"README.zh.md",
|
|
33
|
+
"README.es.md",
|
|
34
|
+
"README.pt.md",
|
|
35
|
+
"README.hi.md",
|
|
36
|
+
"LICENSE"
|
|
37
|
+
],
|
|
38
|
+
"sideEffects": false,
|
|
39
|
+
"dsh": {
|
|
40
|
+
"bundle": {
|
|
41
|
+
"patch": "./cordis.patch.yml"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"dshWorkshop": {
|
|
45
|
+
"schema": "omdsh-workshop-package/v1",
|
|
46
|
+
"type": "plugin",
|
|
47
|
+
"integration": {
|
|
48
|
+
"protocol": "harness-profile",
|
|
49
|
+
"artifact": "cordis.patch.yml"
|
|
50
|
+
},
|
|
51
|
+
"install": {
|
|
52
|
+
"mode": "transactional",
|
|
53
|
+
"adapter": "profile-bundle",
|
|
54
|
+
"failurePolicy": "generation-rollback",
|
|
55
|
+
"touchesCurrentBeforeActivation": false
|
|
56
|
+
},
|
|
57
|
+
"lifecycle": {
|
|
58
|
+
"activation": "restart-profile",
|
|
59
|
+
"dispose": "supported"
|
|
60
|
+
},
|
|
61
|
+
"permissions": [
|
|
62
|
+
"fs:workspace-write",
|
|
63
|
+
"network:via-ctx.web-only",
|
|
64
|
+
"session:read",
|
|
65
|
+
"session:write",
|
|
66
|
+
"native-code:none"
|
|
67
|
+
],
|
|
68
|
+
"compatibility": {
|
|
69
|
+
"dshVersions": [
|
|
70
|
+
"0.1.0-rc.6"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"capability": {
|
|
74
|
+
"id": "research-report",
|
|
75
|
+
"kind": "verifiable-reporting",
|
|
76
|
+
"invocation": "mount the dsh-research-report bundle row",
|
|
77
|
+
"expected": "provides ctx.researchReport (assemble), the evidence_add / research_report / ledger_query tools, and a content-addressed evidence ledger with tamper-evident sealed reports under the workspace"
|
|
78
|
+
},
|
|
79
|
+
"evidence": {
|
|
80
|
+
"install": null,
|
|
81
|
+
"failureIsolation": null,
|
|
82
|
+
"hotReload": null,
|
|
83
|
+
"remove": null
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"keywords": [
|
|
87
|
+
"dsh",
|
|
88
|
+
"dsh-plugin",
|
|
89
|
+
"deepseek-harness",
|
|
90
|
+
"cordis",
|
|
91
|
+
"research",
|
|
92
|
+
"evidence-ledger",
|
|
93
|
+
"verifiable-report",
|
|
94
|
+
"audit",
|
|
95
|
+
"citation-verification"
|
|
96
|
+
],
|
|
97
|
+
"engines": {
|
|
98
|
+
"node": "^22.19.0 || >=24.0.0"
|
|
99
|
+
},
|
|
100
|
+
"packageManager": "pnpm@11.7.0",
|
|
101
|
+
"peerDependencies": {
|
|
102
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
103
|
+
"@deepseek-ai/dsh-jobs": "0.1.0-rc.6",
|
|
104
|
+
"@deepseek-ai/dsh-session": "0.1.0-rc.6",
|
|
105
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
|
|
106
|
+
"@deepseek-ai/dsh-tools": "0.1.0-rc.6",
|
|
107
|
+
"@deepseek-ai/dsh-web": "0.1.0-rc.6",
|
|
108
|
+
"@deepseek-ai/schemastery": "^3.18.0"
|
|
109
|
+
},
|
|
110
|
+
"dependencies": {
|
|
111
|
+
"tsdown": "^0.22.14",
|
|
112
|
+
"typescript": "^5.9.0"
|
|
113
|
+
},
|
|
114
|
+
"devDependencies": {
|
|
115
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
116
|
+
"@deepseek-ai/cordis-plugin-include": "1.0.6",
|
|
117
|
+
"@deepseek-ai/cordis-plugin-loader": "1.0.2",
|
|
118
|
+
"@deepseek-ai/dsh-agent": "0.1.0-rc.6",
|
|
119
|
+
"@deepseek-ai/dsh-jobs": "0.1.0-rc.6",
|
|
120
|
+
"@deepseek-ai/dsh-jobs-local": "0.1.0-rc.6",
|
|
121
|
+
"@deepseek-ai/dsh-llm": "0.1.0-rc.6",
|
|
122
|
+
"@deepseek-ai/dsh-session": "0.1.0-rc.6",
|
|
123
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
|
|
124
|
+
"@deepseek-ai/dsh-tools": "0.1.0-rc.6",
|
|
125
|
+
"@deepseek-ai/dsh-web": "0.1.0-rc.6",
|
|
126
|
+
"@deepseek-ai/schemastery": "^3.18.0",
|
|
127
|
+
"@types/node": "^22.19.0",
|
|
128
|
+
"@vitest/coverage-v8": "^3.2.0",
|
|
129
|
+
"oxlint": "0.18.1",
|
|
130
|
+
"vitest": "^3.2.0"
|
|
131
|
+
},
|
|
132
|
+
"scripts": {
|
|
133
|
+
"build": "node scripts/prepare.mjs",
|
|
134
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
|
|
135
|
+
"typecheck:ci": "tsc -p tsconfig.ci.json --noEmit",
|
|
136
|
+
"test": "vitest run",
|
|
137
|
+
"test:coverage": "vitest run --coverage",
|
|
138
|
+
"lint": "oxlint",
|
|
139
|
+
"prepare": "node scripts/prepare.mjs",
|
|
140
|
+
"verify:self-contained": "node scripts/verify-self-contained.mjs",
|
|
141
|
+
"verify:artifacts": "node scripts/verify-artifacts.mjs",
|
|
142
|
+
"verify:readme-sync": "node scripts/check-readme-sync.mjs",
|
|
143
|
+
"verify:frozen-contract": "node scripts/verify-frozen-contract.mjs",
|
|
144
|
+
"pack:check": "node scripts/prepare.mjs && pnpm pack"
|
|
145
|
+
},
|
|
146
|
+
"license": "Apache-2.0"
|
|
147
|
+
}
|