structural-codes-viewer 0.1.0-alpha.2 → 0.1.0-alpha.3

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.
Files changed (75) hide show
  1. package/README.md +34 -101
  2. package/package-dist/styles.css +7 -172
  3. package/package.json +4 -46
  4. package/package-dist/chatntc/canonicalization.d.ts +0 -15
  5. package/package-dist/chatntc/canonicalization.js +0 -107
  6. package/package-dist/chatntc/canonicalization.js.map +0 -1
  7. package/package-dist/chatntc/directives.d.ts +0 -2
  8. package/package-dist/chatntc/directives.js +0 -38
  9. package/package-dist/chatntc/directives.js.map +0 -1
  10. package/package-dist/chatntc/evidence.d.ts +0 -17
  11. package/package-dist/chatntc/evidence.js +0 -116
  12. package/package-dist/chatntc/evidence.js.map +0 -1
  13. package/package-dist/chatntc/index.d.ts +0 -10
  14. package/package-dist/chatntc/index.js +0 -9
  15. package/package-dist/chatntc/index.js.map +0 -1
  16. package/package-dist/chatntc/issueCategories.d.ts +0 -2
  17. package/package-dist/chatntc/issueCategories.js +0 -11
  18. package/package-dist/chatntc/issueCategories.js.map +0 -1
  19. package/package-dist/chatntc/policy.d.ts +0 -35
  20. package/package-dist/chatntc/policy.js +0 -36
  21. package/package-dist/chatntc/policy.js.map +0 -1
  22. package/package-dist/chatntc/provider.d.ts +0 -42
  23. package/package-dist/chatntc/provider.js +0 -2
  24. package/package-dist/chatntc/provider.js.map +0 -1
  25. package/package-dist/chatntc/responseContract.d.ts +0 -52
  26. package/package-dist/chatntc/responseContract.js +0 -73
  27. package/package-dist/chatntc/responseContract.js.map +0 -1
  28. package/package-dist/chatntc/retrieval.d.ts +0 -5
  29. package/package-dist/chatntc/retrieval.js +0 -220
  30. package/package-dist/chatntc/retrieval.js.map +0 -1
  31. package/package-dist/chatntc/types.d.ts +0 -240
  32. package/package-dist/chatntc/types.js +0 -2
  33. package/package-dist/chatntc/types.js.map +0 -1
  34. package/package-dist/chatntc/validation.d.ts +0 -8
  35. package/package-dist/chatntc/validation.js +0 -299
  36. package/package-dist/chatntc/validation.js.map +0 -1
  37. package/package-dist/chatntc/viewerArtifacts.d.ts +0 -14
  38. package/package-dist/chatntc/viewerArtifacts.js +0 -168
  39. package/package-dist/chatntc/viewerArtifacts.js.map +0 -1
  40. package/package-dist/chatntc-history/index.d.ts +0 -2
  41. package/package-dist/chatntc-history/index.js +0 -3
  42. package/package-dist/chatntc-history/index.js.map +0 -1
  43. package/package-dist/chatntc-history/indexedDb.d.ts +0 -27
  44. package/package-dist/chatntc-history/indexedDb.js +0 -258
  45. package/package-dist/chatntc-history/indexedDb.js.map +0 -1
  46. package/package-dist/chatntc-history/schema.d.ts +0 -5
  47. package/package-dist/chatntc-history/schema.js +0 -102
  48. package/package-dist/chatntc-history/schema.js.map +0 -1
  49. package/package-dist/chatntc-history/types.d.ts +0 -78
  50. package/package-dist/chatntc-history/types.js +0 -23
  51. package/package-dist/chatntc-history/types.js.map +0 -1
  52. package/package-dist/chatntc-ui/ChatNTCHistoryPanel.d.ts +0 -9
  53. package/package-dist/chatntc-ui/ChatNTCHistoryPanel.js +0 -239
  54. package/package-dist/chatntc-ui/ChatNTCHistoryPanel.js.map +0 -1
  55. package/package-dist/chatntc-ui/ChatNTCIcons.d.ts +0 -10
  56. package/package-dist/chatntc-ui/ChatNTCIcons.js +0 -20
  57. package/package-dist/chatntc-ui/ChatNTCIcons.js.map +0 -1
  58. package/package-dist/chatntc-ui/ChatNTCLoadingSkeleton.d.ts +0 -1
  59. package/package-dist/chatntc-ui/ChatNTCLoadingSkeleton.js +0 -5
  60. package/package-dist/chatntc-ui/ChatNTCLoadingSkeleton.js.map +0 -1
  61. package/package-dist/chatntc-ui/ChatNTCMarkdown.d.ts +0 -14
  62. package/package-dist/chatntc-ui/ChatNTCMarkdown.js +0 -112
  63. package/package-dist/chatntc-ui/ChatNTCMarkdown.js.map +0 -1
  64. package/package-dist/chatntc-ui/ChatNTCPanel.d.ts +0 -29
  65. package/package-dist/chatntc-ui/ChatNTCPanel.js +0 -241
  66. package/package-dist/chatntc-ui/ChatNTCPanel.js.map +0 -1
  67. package/package-dist/chatntc-ui/historyMessages.d.ts +0 -5
  68. package/package-dist/chatntc-ui/historyMessages.js +0 -53
  69. package/package-dist/chatntc-ui/historyMessages.js.map +0 -1
  70. package/package-dist/chatntc-ui/index.d.ts +0 -3
  71. package/package-dist/chatntc-ui/index.js +0 -4
  72. package/package-dist/chatntc-ui/index.js.map +0 -1
  73. package/package-dist/chatntc-ui/transport.d.ts +0 -51
  74. package/package-dist/chatntc-ui/transport.js +0 -9
  75. package/package-dist/chatntc-ui/transport.js.map +0 -1
@@ -1,73 +0,0 @@
1
- const classifications = ["direct-reference", "combined-reference", "interpretation", "no-direct-reference", "external-source"];
2
- const nonEmptyString = { type: "string", pattern: "\\S" };
3
- /**
4
- * Minimal provider wire schema. Canonical citation metadata is reconstructed server-side.
5
- * The global classification plus explicit prose distinctions are intentional: another provider
6
- * assertion would not give the server deterministic semantic-entailment verification.
7
- */
8
- export const CHATNTC_RESPONSE_JSON_SCHEMA = {
9
- $schema: "http://json-schema.org/draft-07/schema#",
10
- title: "ChatNTCProviderOutput v2",
11
- type: "object", additionalProperties: false,
12
- required: ["formatVersion", "evidencePackageId", "answerMarkdown", "references", "classification", "status", "needsMoreEvidence", "externalResearchSuggested"],
13
- properties: {
14
- formatVersion: { const: 2 }, evidencePackageId: nonEmptyString,
15
- answerMarkdown: Object.assign(Object.assign({}, nonEmptyString), { description: "Risposta utile e naturale: distingue prescrizioni sostenute dal testo disponibile, letture coordinate e ragionamento ingegneristico generale senza etichettare ogni frase." }),
16
- references: { type: "array", maxItems: 24, items: nonEmptyString,
17
- description: "Riferimenti testuali da risolvere canonicamente. Un riferimento reale o pertinente non prova da solo che sostenga semanticamente la conclusione." },
18
- classification: { enum: classifications,
19
- description: "Base epistemica conservativa della conclusione centrale: direct-reference solo per una conclusione normativa esplicitamente sostenuta e nel medesimo scope; combined-reference per più proposizioni direttamente sostenute da più riferimenti senza nuova inferenza; interpretation per coordinamento o inferenza tra disposizioni; no-direct-reference per una conclusione tecnica non formulata direttamente dalla norma, compatibile con status answered; external-source non è abilitata." },
20
- status: { enum: ["answered", "partial", "abstained"] },
21
- needsMoreEvidence: { type: "boolean" }, externalResearchSuggested: { type: "boolean" },
22
- },
23
- };
24
- const object = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
25
- const text = (value) => typeof value === "string" && value.trim().length > 0;
26
- const strings = (value) => Array.isArray(value) && value.every(text);
27
- const keys = (value, allowed) => Object.keys(value).every((key) => allowed.includes(key));
28
- const classification = (value) => typeof value === "string" && classifications.includes(value);
29
- export function isChatNTCProviderOutput(value) {
30
- return object(value) && keys(value, ["formatVersion", "evidencePackageId", "answerMarkdown", "references", "classification", "status", "needsMoreEvidence", "externalResearchSuggested"])
31
- && value.formatVersion === 2 && text(value.evidencePackageId) && text(value.answerMarkdown)
32
- && strings(value.references) && value.references.length <= 24
33
- && classification(value.classification) && ["answered", "partial", "abstained"].includes(String(value.status))
34
- && typeof value.needsMoreEvidence === "boolean" && typeof value.externalResearchSuggested === "boolean";
35
- }
36
- function isCitation(value) {
37
- return object(value) && keys(value, ["evidenceId", "unitId", "document", "numbering", "blockId", "assetId", "assetNumber"])
38
- && text(value.evidenceId) && text(value.unitId) && text(value.numbering)
39
- && (value.document === "ntc2018" || value.document === "circ2019")
40
- && (value.blockId === undefined || text(value.blockId))
41
- && (value.assetId === undefined || text(value.assetId))
42
- && (value.assetNumber === undefined || value.assetNumber === null || text(value.assetNumber));
43
- }
44
- function isVerifiedReference(value) {
45
- return object(value) && keys(value, ["unitId", "document", "numbering", "kind", "blockId", "assetId", "assetNumber"])
46
- && text(value.unitId) && text(value.numbering)
47
- && (value.document === "ntc2018" || value.document === "circ2019")
48
- && ["unit", "block", "formula", "table", "figure"].includes(String(value.kind))
49
- && (value.blockId === undefined || text(value.blockId))
50
- && (value.assetId === undefined || text(value.assetId))
51
- && (value.assetNumber === undefined || value.assetNumber === null || text(value.assetNumber));
52
- }
53
- /** Reusable structural check for adapters that do not run retrieval. */
54
- export function isChatNTCResponse(value) {
55
- if (object(value) && value.formatVersion === 3) {
56
- return keys(value, ["formatVersion", "evidencePackageId", "answerMarkdown", "classification", "status", "verifiedReferences", "referenceWarning", "warnings", "needsMoreEvidence", "externalResearchSuggested"])
57
- && text(value.evidencePackageId) && text(value.answerMarkdown) && classification(value.classification)
58
- && ["answered", "partial", "abstained"].includes(String(value.status))
59
- && Array.isArray(value.verifiedReferences) && value.verifiedReferences.every(isVerifiedReference)
60
- && (value.referenceWarning === undefined || ["some-references-omitted", "no-references-verified"].includes(String(value.referenceWarning)))
61
- && strings(value.warnings) && typeof value.needsMoreEvidence === "boolean" && typeof value.externalResearchSuggested === "boolean";
62
- }
63
- return object(value) && keys(value, ["formatVersion", "evidencePackageId", "answer", "classification", "status", "claims", "usedEvidenceIds", "warnings", "needsMoreEvidence", "externalResearchSuggested"])
64
- && (value.formatVersion === 1 ? value.status === undefined
65
- : value.formatVersion === 2 && ["answered", "partial", "abstained"].includes(String(value.status)))
66
- && text(value.evidencePackageId) && text(value.answer)
67
- && classification(value.classification) && strings(value.usedEvidenceIds) && strings(value.warnings)
68
- && typeof value.needsMoreEvidence === "boolean" && typeof value.externalResearchSuggested === "boolean"
69
- && Array.isArray(value.claims) && value.claims.every((claim) => object(claim)
70
- && keys(claim, ["id", "text", "classification", "citations"]) && text(claim.id) && text(claim.text)
71
- && classification(claim.classification) && Array.isArray(claim.citations) && claim.citations.every(isCitation));
72
- }
73
- //# sourceMappingURL=responseContract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"responseContract.js","sourceRoot":"","sources":["../../shared/chatntc/responseContract.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { ChatNTCEvidencePackage, ChatNTCRepository, ChatNTCRetrievalOptions } from "./types.js";
2
- export declare class ChatNTCContextError extends Error {
3
- constructor();
4
- }
5
- export declare function retrieveChatNTCEvidence(repository: ChatNTCRepository, question: string, input?: ChatNTCRetrievalOptions): Promise<ChatNTCEvidencePackage>;
@@ -1,220 +0,0 @@
1
- import { findCrossReferences } from "../crossReferences.js";
2
- import { tokenizeSearchText } from "../searchEngine.js";
3
- import { CHATNTC_DEFAULT_RETRIEVAL, CHATNTC_EPISTEMIC_POLICY } from "./policy.js";
4
- import { evidencePackageId, evidenceUnitSelectionLength, projectEvidenceBlock, projectEvidenceHierarchy, projectEvidenceUnit, stableJson } from "./evidence.js";
5
- const compare = (a, b) => a < b ? -1 : a > b ? 1 : 0;
6
- export class ChatNTCContextError extends Error {
7
- constructor() { super("ChatNTC: contesto non corrispondente al corpus."); this.name = "ChatNTCContextError"; }
8
- }
9
- function optionsFor(input) {
10
- const configured = Object.assign({}, input);
11
- delete configured.queryContext;
12
- delete configured.requiredReferences;
13
- const options = Object.assign(Object.assign({}, CHATNTC_DEFAULT_RETRIEVAL), configured);
14
- for (const key of ["maxPrimaryUnits", "maxRelatedUnits", "maxChildrenPerUnit", "maxEvidenceCharacters", "maxUnitCharacters"]) {
15
- const minimum = key === "maxRelatedUnits" || key === "maxChildrenPerUnit" ? 0 : 1;
16
- const maximum = key.endsWith("Characters") ? 1000000 : 50;
17
- if (!Number.isSafeInteger(options[key]) || options[key] < minimum || options[key] > maximum)
18
- throw new Error(`ChatNTC: opzione non valida: ${key}`);
19
- }
20
- for (const key of ["includeParents", "includeCrossReferences", "includeExplicitRelations", "includeProposedRelations"]) {
21
- if (typeof options[key] !== "boolean")
22
- throw new Error(`ChatNTC: opzione non valida: ${key}`);
23
- }
24
- if (options.document && options.document !== "ntc2018" && options.document !== "circ2019")
25
- throw new Error("ChatNTC: documento non valido.");
26
- return options;
27
- }
28
- function selectUnit(record, hierarchy, candidate, question, budget) {
29
- const projected = record.unit.blocks.map((block) => projectEvidenceBlock(block, record));
30
- const base = Object.assign(Object.assign({}, projectEvidenceUnit(record, hierarchy)), { reasons: candidate.reasons });
31
- const build = (positions) => (Object.assign(Object.assign({}, base), { blocks: [...positions].sort((a, b) => a - b).map((position) => projected[position]), selection: { complete: positions.length === projected.length, omittedBlocks: projected.length - positions.length } }));
32
- const full = build(projected.map((_, position) => position));
33
- if (evidenceUnitSelectionLength(full) <= budget)
34
- return full;
35
- const terms = new Set(tokenizeSearchText(question));
36
- const priority = projected.map((block, position) => {
37
- var _a, _b;
38
- const tokens = tokenizeSearchText((_b = (_a = block.text) === null || _a === void 0 ? void 0 : _a.normalized) !== null && _b !== void 0 ? _b : "");
39
- const termScore = new Set(tokens.filter((term) => terms.has(term))).size;
40
- return { position, score: candidate.targetBlocks.has(block.blockId) ? 1000000
41
- : termScore * 100 + (block.kind === "heading" ? 1 : 0) };
42
- }).sort((a, b) => b.score - a.score || a.position - b.position);
43
- const positions = [];
44
- for (const { position } of priority) {
45
- // Whole blocks/assets only. A large table is omitted, never cut into misleading cells.
46
- if (evidenceUnitSelectionLength(build([...positions, position])) <= budget)
47
- positions.push(position);
48
- }
49
- return positions.length ? build(positions) : null;
50
- }
51
- function relationScore(relation) {
52
- if (relation.kind === "explicit-relation")
53
- return relation.reviewStatus === "confirmed" ? 900 : 800;
54
- if (relation.kind === "cross-reference")
55
- return relation.direction === "incoming" ? 600 : 700;
56
- return relation.kind === "parent" ? 500 : 400;
57
- }
58
- export async function retrieveChatNTCEvidence(repository, question, input = {}) {
59
- var _a, _b, _c, _d, _e;
60
- if (typeof question !== "string" || !question.trim())
61
- throw new Error("ChatNTC: domanda vuota.");
62
- if (input.queryContext && (!Array.isArray(input.queryContext) || input.queryContext.some((item) => typeof item !== "string" || !item.trim())))
63
- throw new Error("ChatNTC: contesto query non valido.");
64
- if (input.requiredReferences && (!Array.isArray(input.requiredReferences) || input.requiredReferences.length > 12
65
- || input.requiredReferences.some((item) => typeof item !== "string" || !item.trim() || item.length > 120)))
66
- throw new Error("ChatNTC: riferimenti richiesti non validi.");
67
- const options = optionsFor(input);
68
- const queryContext = [...((_a = input.queryContext) !== null && _a !== void 0 ? _a : [])].slice(-3);
69
- const retrievalQuery = [question, ...queryContext].join("\n");
70
- const corpus = await repository.identity();
71
- const warnings = [];
72
- let reduced = false;
73
- const exact = await repository.resolveExact(question, options.document);
74
- let hits = exact !== null && exact !== void 0 ? exact : [];
75
- const explicitUnitIds = new Set((exact !== null && exact !== void 0 ? exact : []).map((hit) => hit.unitId));
76
- if ((exact === null || exact === void 0 ? void 0 : exact.length) === 0)
77
- warnings.push({ code: "unresolved-reference" });
78
- if (exact === null) {
79
- const references = findCrossReferences(question);
80
- if (references.length > 12)
81
- reduced = true;
82
- for (const reference of references.slice(0, 12)) {
83
- const resolved = await repository.resolveExact(reference.text, options.document);
84
- if ((resolved === null || resolved === void 0 ? void 0 : resolved.length) === 0)
85
- warnings.push({ code: "unresolved-reference" });
86
- for (const hit of resolved !== null && resolved !== void 0 ? resolved : [])
87
- explicitUnitIds.add(hit.unitId);
88
- hits.push(...(resolved !== null && resolved !== void 0 ? resolved : []));
89
- }
90
- for (const contextualReference of findCrossReferences(queryContext.join("\n")).slice(0, 12)) {
91
- hits.push(...((_b = await repository.resolveExact(contextualReference.text, options.document)) !== null && _b !== void 0 ? _b : []));
92
- }
93
- // Existing full-text ranking is authoritative for text hits; no new search index.
94
- hits.push(...await repository.search(retrievalQuery, Math.min(50, options.maxPrimaryUnits + 4), options.document));
95
- }
96
- for (const reference of (_c = input.requiredReferences) !== null && _c !== void 0 ? _c : []) {
97
- const resolved = await repository.resolveExact(reference, options.document);
98
- if ((resolved === null || resolved === void 0 ? void 0 : resolved.length) === 0)
99
- warnings.push({ code: "unresolved-reference" });
100
- for (const hit of resolved !== null && resolved !== void 0 ? resolved : [])
101
- explicitUnitIds.add(hit.unitId);
102
- hits.push(...(resolved !== null && resolved !== void 0 ? resolved : []));
103
- }
104
- hits = [...hits].sort((a, b) => { var _a, _b; return b.score - a.score || compare(a.unitId, b.unitId) || compare((_a = a.blockId) !== null && _a !== void 0 ? _a : "", (_b = b.blockId) !== null && _b !== void 0 ? _b : ""); });
105
- const primaryCandidates = new Map();
106
- if (options.context) {
107
- const context = options.context;
108
- explicitUnitIds.add(context.unitId);
109
- const record = await repository.getUnit(context.unitId);
110
- const block = record === null || record === void 0 ? void 0 : record.unit.blocks.find((item) => context.blockId ? item.blockId === context.blockId : context.assetId && item.assetId === context.assetId);
111
- if (!record || record.unit.document !== context.documentId || record.unit.numbering.official !== context.numbering
112
- || (options.document && context.documentId !== options.document)
113
- || (context.blockId && !block) || (context.assetId && (block === null || block === void 0 ? void 0 : block.assetId) !== context.assetId))
114
- throw new ChatNTCContextError();
115
- // Reserve one bounded primary slot for the explicit user hint; search above still runs unchanged.
116
- primaryCandidates.set(context.unitId, { unitId: context.unitId, score: 0,
117
- reasons: [{ kind: "viewer-context", score: 0 }], targetBlocks: new Map(block ? [[block.blockId, block.assetId]] : []) });
118
- }
119
- for (const hit of hits) {
120
- const candidate = (_d = primaryCandidates.get(hit.unitId)) !== null && _d !== void 0 ? _d : { unitId: hit.unitId, score: hit.score, reasons: [], targetBlocks: new Map() };
121
- const reason = { kind: hit.match === "exact-reference" || hit.match === "number-exact" ? "exact-reference" : "full-text", score: hit.score };
122
- if (!candidate.reasons.some((item) => stableJson(item) === stableJson(reason)))
123
- candidate.reasons.push(reason);
124
- if (hit.assetId && !hit.blockId)
125
- throw new Error("ChatNTC: target asset senza blocco proprietario.");
126
- if (hit.blockId)
127
- candidate.targetBlocks.set(hit.blockId, hit.assetId);
128
- primaryCandidates.set(hit.unitId, candidate);
129
- }
130
- if (primaryCandidates.size > options.maxPrimaryUnits)
131
- reduced = true;
132
- let remaining = options.maxEvidenceCharacters;
133
- const primaryUnits = [];
134
- const relatedUnits = [];
135
- async function collect(candidate, output) {
136
- const record = await repository.getUnit(candidate.unitId);
137
- if (!record)
138
- throw new Error(`ChatNTC: target dell'indice assente: ${candidate.unitId}`);
139
- if (options.document && record.unit.document !== options.document)
140
- return;
141
- for (const [blockId, assetId] of candidate.targetBlocks) {
142
- const block = record.unit.blocks.find((entry) => entry.blockId === blockId);
143
- if (!block || (assetId && block.assetId !== assetId))
144
- throw new Error(`ChatNTC: target del rimando incoerente con il corpus: ${blockId}`);
145
- }
146
- const hierarchy = await projectEvidenceHierarchy(record, (unitId) => repository.getUnit(unitId));
147
- const selected = selectUnit(record, hierarchy, candidate, question, Math.min(remaining, options.maxUnitCharacters));
148
- if (!selected) {
149
- reduced = true;
150
- return;
151
- }
152
- if (!selected.selection.complete)
153
- reduced = true;
154
- remaining -= evidenceUnitSelectionLength(selected);
155
- output.push(selected);
156
- }
157
- const rankedPrimary = [...primaryCandidates.values()].sort((a, b) => Number(explicitUnitIds.has(b.unitId)) - Number(explicitUnitIds.has(a.unitId))
158
- || b.score - a.score || compare(a.unitId, b.unitId));
159
- const explicitCount = rankedPrimary.filter((candidate) => explicitUnitIds.has(candidate.unitId)).length;
160
- for (const candidate of rankedPrimary.slice(0, Math.max(options.maxPrimaryUnits, explicitCount)))
161
- await collect(candidate, primaryUnits);
162
- const relatedCandidates = new Map();
163
- const primaryIds = new Set(primaryUnits.map((unit) => unit.unitId));
164
- for (const primary of options.maxRelatedUnits > 0 ? primaryUnits : []) {
165
- let children = 0;
166
- const usefulChildren = primary.reasons.some((reason) => reason.kind === "exact-reference" || reason.kind === "viewer-context") || primary.blocks.every((block) => block.kind === "heading");
167
- const links = [...await repository.related(primary.unitId)]
168
- .sort((a, b) => relationScore(b) - relationScore(a) || compare(stableJson(a), stableJson(b)));
169
- for (const relation of links) {
170
- if (primaryIds.has(relation.unitId))
171
- continue;
172
- // Canonical URNs encode the document; filter before consuming relation/child slots.
173
- if (options.document && !relation.unitId.startsWith(`urn:structural-codes:it:unit:${options.document}:`))
174
- continue;
175
- if (relation.kind === "parent" && !options.includeParents)
176
- continue;
177
- if (relation.kind === "child") {
178
- if (!usefulChildren || options.maxChildrenPerUnit === 0)
179
- continue;
180
- if (children++ >= options.maxChildrenPerUnit) {
181
- reduced = true;
182
- continue;
183
- }
184
- }
185
- if (relation.kind === "cross-reference" && !options.includeCrossReferences)
186
- continue;
187
- if (relation.kind === "explicit-relation" && (!options.includeExplicitRelations || relation.reviewStatus === "rejected"
188
- || (relation.reviewStatus !== "confirmed" && !options.includeProposedRelations)))
189
- continue;
190
- const candidate = (_e = relatedCandidates.get(relation.unitId)) !== null && _e !== void 0 ? _e : { unitId: relation.unitId, score: relationScore(relation), reasons: [], targetBlocks: new Map() };
191
- if (!candidate.reasons.some((reason) => stableJson(reason) === stableJson(relation)))
192
- candidate.reasons.push(relation);
193
- candidate.score = Math.max(candidate.score, relationScore(relation));
194
- if (relation.blockId)
195
- candidate.targetBlocks.set(relation.blockId, relation.assetId);
196
- relatedCandidates.set(relation.unitId, candidate);
197
- }
198
- }
199
- const ranked = [...relatedCandidates.values()].sort((a, b) => b.score - a.score || compare(a.unitId, b.unitId));
200
- if (ranked.length > options.maxRelatedUnits)
201
- reduced = true;
202
- for (const candidate of ranked.slice(0, options.maxRelatedUnits))
203
- await collect(candidate, relatedUnits);
204
- for (const unit of [...primaryUnits, ...relatedUnits]) {
205
- if (unit.blocks.some((block) => { var _a; return ((_a = block.asset) === null || _a === void 0 ? void 0 : _a.kind) === "figure"; }))
206
- warnings.push({ code: "figure-metadata-only", unitId: unit.unitId });
207
- }
208
- if (!primaryUnits.length)
209
- warnings.push({ code: "no-evidence" });
210
- if (reduced)
211
- warnings.push({ code: "evidence-reduced" });
212
- const value = {
213
- formatVersion: 1, policyVersion: CHATNTC_EPISTEMIC_POLICY.version, question, corpus, primaryUnits, relatedUnits,
214
- retrieval: { options, query: retrievalQuery, evidenceCharacters: options.maxEvidenceCharacters - remaining, reduced },
215
- warnings: [...new Map(warnings.map((warning) => [stableJson(warning), warning])).values()],
216
- };
217
- // Detach the returned package from cached corpus objects; consumers cannot mutate the corpus through it.
218
- return JSON.parse(JSON.stringify(Object.assign(Object.assign({}, value), { packageId: await evidencePackageId(value) })));
219
- }
220
- //# sourceMappingURL=retrieval.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retrieval.js","sourceRoot":"","sources":["../../shared/chatntc/retrieval.ts"],"names":[],"mappings":"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"}
@@ -1,240 +0,0 @@
1
- import type { AssetBundle, CorpusBlock, CorpusManifest, CorpusUnit, DocumentId, FigureAsset, FormulaAsset, TableAsset, SearchMatchKind } from "../corpusData.js";
2
- export type ChatNTCClassification = "direct-reference" | "combined-reference" | "interpretation" | "no-direct-reference" | "external-source";
3
- export type ChatNTCAnswerStatus = "answered" | "partial" | "abstained";
4
- export interface ChatNTCCorpusIdentity {
5
- sourceOfTruth: "structural-codes";
6
- version: string;
7
- schemaVersion: string;
8
- assetSchemaVersion: string;
9
- fingerprint: string;
10
- artifactFingerprint: string;
11
- status: string;
12
- disclaimer: string;
13
- documents: Record<DocumentId, Pick<CorpusManifest["documents"][DocumentId], "shortLabel" | "sourceId" | "sourceUrl" | "sourceSha256" | "publicationUrl">>;
14
- }
15
- export interface ChatNTCTarget {
16
- unitId: string;
17
- blockId?: string;
18
- assetId?: string;
19
- }
20
- export interface ChatNTCRetrievalContext extends ChatNTCTarget {
21
- documentId: DocumentId;
22
- numbering: string;
23
- }
24
- export interface ChatNTCHit extends ChatNTCTarget {
25
- score: number;
26
- match: "exact-reference" | SearchMatchKind;
27
- }
28
- export interface ChatNTCRelation extends ChatNTCTarget {
29
- kind: "parent" | "child" | "explicit-relation" | "cross-reference";
30
- fromUnitId: string;
31
- sourceBlockId?: string;
32
- direction?: "outgoing" | "incoming";
33
- relationId?: string;
34
- relationType?: string;
35
- basis?: string;
36
- reviewStatus?: string;
37
- evidenceBlockIds?: string[];
38
- }
39
- /** A repository instance represents one immutable corpus snapshot. */
40
- export interface ChatNTCRepository {
41
- identity(): Promise<ChatNTCCorpusIdentity>;
42
- /** null = not exact syntax; [] = recognized reference, absent from this snapshot. */
43
- resolveExact(query: string, document?: DocumentId): Promise<ChatNTCHit[] | null>;
44
- search(query: string, limit: number, document?: DocumentId): Promise<ChatNTCHit[]>;
45
- getUnit(unitId: string): Promise<ChatNTCUnitRecord | null>;
46
- related(unitId: string): Promise<ChatNTCRelation[]>;
47
- }
48
- export interface ChatNTCUnitRecord {
49
- unit: CorpusUnit;
50
- assets: AssetBundle;
51
- provenance: {
52
- chunkPath: string;
53
- chunkFingerprint: string;
54
- };
55
- }
56
- export type ChatNTCEvidenceAsset = {
57
- kind: "formula";
58
- data: FormulaAsset;
59
- } | {
60
- kind: "table";
61
- data: TableAsset;
62
- } | {
63
- kind: "figure";
64
- data: FigureAsset;
65
- contentAvailability: "metadata-only";
66
- };
67
- export interface ChatNTCEvidenceBlock {
68
- /** Canonical block ID, stable across retrievals of the same snapshot. */
69
- evidenceId: string;
70
- blockId: string;
71
- kind: string;
72
- origin: string;
73
- listMarker?: CorpusBlock["listMarker"];
74
- listLevel?: number;
75
- indentLevel?: number;
76
- text?: Pick<NonNullable<CorpusBlock["text"]>, "normalized" | "inline">;
77
- assetId?: string;
78
- asset?: ChatNTCEvidenceAsset;
79
- provenance?: Pick<NonNullable<CorpusBlock["evidence"]>, "sourceId" | "pdfPage" | "printedPage" | "region" | "normalizedSha256">;
80
- }
81
- export interface ChatNTCEvidenceHierarchyEntry {
82
- numbering: string;
83
- title: string;
84
- }
85
- export interface ChatNTCEvidenceUnit {
86
- /** Unit citations refer only to the selected blocks, never omitted content. */
87
- evidenceId: string;
88
- unitId: string;
89
- document: DocumentId;
90
- numbering: string;
91
- title: string;
92
- /** Canonical ancestors from the document root through the immediate parent. */
93
- hierarchy: ChatNTCEvidenceHierarchyEntry[];
94
- editorial: CorpusUnit["review"];
95
- validity: CorpusUnit["validity"];
96
- provenance: ChatNTCUnitRecord["provenance"];
97
- reasons: Array<{
98
- kind: "exact-reference" | "full-text" | "viewer-context";
99
- score: number;
100
- } | ChatNTCRelation>;
101
- blocks: ChatNTCEvidenceBlock[];
102
- selection: {
103
- complete: boolean;
104
- omittedBlocks: number;
105
- };
106
- }
107
- export interface ChatNTCRetrievalOptions {
108
- /** Additional candidate, verified against the repository. Does not filter search. */
109
- context?: ChatNTCRetrievalContext;
110
- document?: DocumentId;
111
- maxPrimaryUnits?: number;
112
- maxRelatedUnits?: number;
113
- maxChildrenPerUnit?: number;
114
- /** UTF-16 selection length, including established unit metadata and assets but excluding additive hierarchy scope. Not tokens. */
115
- maxEvidenceCharacters?: number;
116
- maxUnitCharacters?: number;
117
- includeParents?: boolean;
118
- includeCrossReferences?: boolean;
119
- includeExplicitRelations?: boolean;
120
- includeProposedRelations?: boolean;
121
- /** Previous USER messages only. They guide ranking but never become normative evidence. */
122
- queryContext?: readonly string[];
123
- /** Canonical textual references requested by the validator for one bounded expansion. */
124
- requiredReferences?: readonly string[];
125
- }
126
- export interface ChatNTCWarning {
127
- code: "no-evidence" | "evidence-reduced" | "figure-metadata-only" | "unresolved-reference";
128
- unitId?: string;
129
- }
130
- export interface ChatNTCEvidencePackage {
131
- formatVersion: 1;
132
- packageId: string;
133
- policyVersion: "chatntc-epistemic-v2";
134
- question: string;
135
- corpus: ChatNTCCorpusIdentity;
136
- primaryUnits: ChatNTCEvidenceUnit[];
137
- relatedUnits: ChatNTCEvidenceUnit[];
138
- retrieval: {
139
- options: Required<Omit<ChatNTCRetrievalOptions, "document" | "context" | "queryContext" | "requiredReferences">> & Pick<ChatNTCRetrievalOptions, "document" | "context">;
140
- /** Deterministic retrieval query. Conversation text here is context, never evidence. */
141
- query: string;
142
- evidenceCharacters: number;
143
- reduced: boolean;
144
- };
145
- warnings: ChatNTCWarning[];
146
- }
147
- export interface ChatNTCCitation extends ChatNTCTarget {
148
- evidenceId: string;
149
- document: DocumentId;
150
- /** Official unit numbering; an asset's number is a separate field. */
151
- numbering: string;
152
- assetNumber?: string | null;
153
- }
154
- /**
155
- * Canonical post-hoc reference. Unlike a legacy citation, it is independent from the
156
- * Evidence Package selected before generation and therefore never invents an evidenceId.
157
- */
158
- export interface ChatNTCVerifiedReference extends ChatNTCTarget {
159
- document: DocumentId;
160
- /** Official unit numbering; an asset's number is a separate field. */
161
- numbering: string;
162
- kind: "unit" | "block" | "formula" | "table" | "figure";
163
- assetNumber?: string | null;
164
- }
165
- export type ChatNTCReference = ChatNTCCitation | ChatNTCVerifiedReference;
166
- export type ChatNTCReferenceWarning = "some-references-omitted" | "no-references-verified";
167
- export interface ChatNTCClaim {
168
- id: string;
169
- text: string;
170
- classification: ChatNTCClassification;
171
- citations: ChatNTCCitation[];
172
- }
173
- /** Minimal provider wire output. References are textual; canonical metadata is server-owned. */
174
- export interface ChatNTCProviderOutput {
175
- formatVersion: 2;
176
- evidencePackageId: string;
177
- answerMarkdown: string;
178
- references: string[];
179
- /**
180
- * Conservative, response-level description of the epistemic basis of the central conclusion.
181
- * It is not proof that references semantically entail the answer; the provider must express
182
- * mixed normative, interpretative and engineering content clearly in answerMarkdown.
183
- * A claim array is intentionally not part of the current provider contract.
184
- */
185
- classification: ChatNTCClassification;
186
- status: ChatNTCAnswerStatus;
187
- needsMoreEvidence: boolean;
188
- externalResearchSuggested: boolean;
189
- }
190
- /** Historical public response retained for saved v1/v2 conversations. */
191
- export interface ChatNTCLegacyResponseBody {
192
- evidencePackageId: string;
193
- answer: string;
194
- classification: ChatNTCClassification;
195
- claims: ChatNTCClaim[];
196
- usedEvidenceIds: string[];
197
- warnings: string[];
198
- needsMoreEvidence: boolean;
199
- externalResearchSuggested: boolean;
200
- }
201
- /** v1 remains readable for saved history; providers generate the semantically explicit v2. */
202
- export type ChatNTCLegacyResponse = ChatNTCLegacyResponseBody & ({
203
- formatVersion: 1;
204
- status?: never;
205
- } | {
206
- formatVersion: 2;
207
- status: ChatNTCAnswerStatus;
208
- });
209
- /** Rich response produced by the server and consumed by current UI clients. */
210
- export interface CanonicalChatNTCResponse {
211
- formatVersion: 3;
212
- evidencePackageId: string;
213
- answerMarkdown: string;
214
- classification: ChatNTCClassification;
215
- status: ChatNTCAnswerStatus;
216
- verifiedReferences: ChatNTCVerifiedReference[];
217
- referenceWarning?: ChatNTCReferenceWarning;
218
- warnings: string[];
219
- needsMoreEvidence: boolean;
220
- externalResearchSuggested: boolean;
221
- }
222
- export type ChatNTCResponse = ChatNTCLegacyResponse | CanonicalChatNTCResponse;
223
- export type ChatNTCProcessingStage = "GENERATED" | "NORMALIZED" | "REFERENCES_RESOLVED" | "EXPANDED" | "REPAIRED" | "CONSERVATIVE_REGENERATED" | "PARTIALLY_SANITIZED" | "DEGRADED" | "HARD_REJECTED";
224
- export interface ChatNTCValidationIssue {
225
- code: string;
226
- path: string;
227
- message: string;
228
- category: "integrity" | "bookkeeping" | "discovery";
229
- reference?: string;
230
- targets?: ChatNTCTarget[];
231
- }
232
- export interface ChatNTCValidationResult {
233
- valid: boolean;
234
- issues: ChatNTCValidationIssue[];
235
- }
236
- export interface ChatNTCCanonicalizationResult {
237
- response: CanonicalChatNTCResponse;
238
- issues: ChatNTCValidationIssue[];
239
- normalized: boolean;
240
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../shared/chatntc/types.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- import type { ChatNTCEvidencePackage, ChatNTCRepository, ChatNTCValidationResult } from "./types.js";
2
- /**
3
- * The package is supplied by the application, never by the provider. Provider output is unknown.
4
- * Current v3 responses are checked for package/corpus integrity and canonical references only.
5
- * Legacy claim accounting remains readable for saved v1/v2 responses. Success does NOT establish semantic support.
6
- * Repository I/O failures reject the promise, never turn into successful validation.
7
- */
8
- export declare function validateChatNTCResponse(response: unknown, evidence: ChatNTCEvidencePackage, repository: ChatNTCRepository): Promise<ChatNTCValidationResult>;