sxng-cli 1.2.6 → 1.2.7

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 (91) hide show
  1. package/README.md +63 -46
  2. package/dist/claims/deterministic-checks.d.ts +1 -0
  3. package/dist/claims/deterministic-checks.d.ts.map +1 -1
  4. package/dist/claims/deterministic-checks.js +3 -4
  5. package/dist/claims/deterministic-checks.js.map +1 -1
  6. package/dist/claims/store.d.ts +6 -0
  7. package/dist/claims/store.d.ts.map +1 -1
  8. package/dist/claims/store.js +31 -6
  9. package/dist/claims/store.js.map +1 -1
  10. package/dist/claims/types.d.ts +7 -2
  11. package/dist/claims/types.d.ts.map +1 -1
  12. package/dist/commands/claim.d.ts +3 -3
  13. package/dist/commands/claim.d.ts.map +1 -1
  14. package/dist/commands/claim.js +70 -60
  15. package/dist/commands/claim.js.map +1 -1
  16. package/dist/commands/evidence.d.ts +3 -4
  17. package/dist/commands/evidence.d.ts.map +1 -1
  18. package/dist/commands/evidence.js +164 -144
  19. package/dist/commands/evidence.js.map +1 -1
  20. package/dist/commands/extract.d.ts +3 -3
  21. package/dist/commands/extract.d.ts.map +1 -1
  22. package/dist/commands/extract.js +58 -62
  23. package/dist/commands/extract.js.map +1 -1
  24. package/dist/commands/graph-add.d.ts +3 -13
  25. package/dist/commands/graph-add.d.ts.map +1 -1
  26. package/dist/commands/graph-add.js +78 -138
  27. package/dist/commands/graph-add.js.map +1 -1
  28. package/dist/commands/json-input.d.ts +18 -0
  29. package/dist/commands/json-input.d.ts.map +1 -0
  30. package/dist/commands/json-input.js +50 -0
  31. package/dist/commands/json-input.js.map +1 -0
  32. package/dist/commands/results-add.d.ts +5 -9
  33. package/dist/commands/results-add.d.ts.map +1 -1
  34. package/dist/commands/results-add.js +66 -32
  35. package/dist/commands/results-add.js.map +1 -1
  36. package/dist/commands/review.d.ts +1 -1
  37. package/dist/commands/review.d.ts.map +1 -1
  38. package/dist/commands/review.js +63 -55
  39. package/dist/commands/review.js.map +1 -1
  40. package/dist/commands/verdict.d.ts.map +1 -1
  41. package/dist/commands/verdict.js +13 -2
  42. package/dist/commands/verdict.js.map +1 -1
  43. package/dist/deep/dedupe.js +1 -1
  44. package/dist/deep/dedupe.js.map +1 -1
  45. package/dist/deep/extractor.d.ts +3 -1
  46. package/dist/deep/extractor.d.ts.map +1 -1
  47. package/dist/deep/extractor.js +74 -19
  48. package/dist/deep/extractor.js.map +1 -1
  49. package/dist/deep/graph-explore.d.ts +1 -1
  50. package/dist/deep/graph-explore.d.ts.map +1 -1
  51. package/dist/deep/graph-explore.js +14 -12
  52. package/dist/deep/graph-explore.js.map +1 -1
  53. package/dist/deep/graph-preprocess.d.ts +2 -1
  54. package/dist/deep/graph-preprocess.d.ts.map +1 -1
  55. package/dist/deep/graph-preprocess.js +10 -10
  56. package/dist/deep/graph-preprocess.js.map +1 -1
  57. package/dist/deep/graph-sampling.d.ts.map +1 -1
  58. package/dist/deep/graph-sampling.js +3 -2
  59. package/dist/deep/graph-sampling.js.map +1 -1
  60. package/dist/deep/graph.d.ts +9 -2
  61. package/dist/deep/graph.d.ts.map +1 -1
  62. package/dist/deep/graph.js +7 -6
  63. package/dist/deep/graph.js.map +1 -1
  64. package/dist/deep/local-doc/indexer.d.ts.map +1 -1
  65. package/dist/deep/local-doc/indexer.js +34 -1
  66. package/dist/deep/local-doc/indexer.js.map +1 -1
  67. package/dist/deep/local-doc/searcher.d.ts +4 -2
  68. package/dist/deep/local-doc/searcher.d.ts.map +1 -1
  69. package/dist/deep/local-doc/searcher.js +18 -4
  70. package/dist/deep/local-doc/searcher.js.map +1 -1
  71. package/dist/deep/path-extraction.js +2 -2
  72. package/dist/deep/path-extraction.js.map +1 -1
  73. package/dist/deep/quality-assess.d.ts +4 -4
  74. package/dist/deep/quality-assess.d.ts.map +1 -1
  75. package/dist/deep/quality-assess.js +11 -11
  76. package/dist/deep/quality-assess.js.map +1 -1
  77. package/dist/deep/quality-assess.sync-conflict-20260728-195206-JAULAPO.d.ts +46 -0
  78. package/dist/deep/quality-assess.sync-conflict-20260728-195206-JAULAPO.d.ts.map +1 -0
  79. package/dist/deep/quality-assess.sync-conflict-20260728-195206-JAULAPO.js +122 -0
  80. package/dist/deep/quality-assess.sync-conflict-20260728-195206-JAULAPO.js.map +1 -0
  81. package/dist/deep/search-strategy.d.ts.map +1 -1
  82. package/dist/deep/search-strategy.js +13 -6
  83. package/dist/deep/search-strategy.js.map +1 -1
  84. package/dist/deep/session.d.ts +115 -56
  85. package/dist/deep/session.d.ts.map +1 -1
  86. package/dist/deep/session.js +554 -253
  87. package/dist/deep/session.js.map +1 -1
  88. package/dist/runCli.d.ts.map +1 -1
  89. package/dist/runCli.js +111 -44
  90. package/dist/runCli.js.map +1 -1
  91. package/package.json +1 -1
@@ -1,84 +1,83 @@
1
1
  /**
2
- * claim-add / claim-list Claim subcommands for the review pipeline.
2
+ * Claim add and list commands for the review pipeline.
3
3
  */
4
- import { loadClaims, saveClaims, getClaimsByStatus, } from '../claims/store.js';
4
+ import { loadClaims, saveClaims, getClaimsByStatus, ClaimsStateError, assertClaimsStoreReadable, } from '../claims/store.js';
5
5
  import { searchCandidates } from '../claims/deterministic-checks.js';
6
6
  import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
7
- import { resolveSessionPath } from '../deep/session.js';
7
+ import { initSessionDir, mutateSessionState, resolveSessionPath } from '../deep/session.js';
8
+ import { isJsonObject, readSessionJsonInput } from './json-input.js';
8
9
  export async function runClaimAdd(session, options) {
9
10
  const sessionDir = resolveSessionPath(session);
11
+ initSessionDir(sessionDir);
10
12
  // Parse input
11
13
  let inputs = [];
12
- if (options.claims) {
13
- try {
14
- const parsed = JSON.parse(options.claims);
15
- if (!Array.isArray(parsed)) {
16
- console.log(JSON.stringify(createErrorEnvelope('INVALID_CLAIMS', '--claims must be a JSON array', { hint: 'Example: --claims \'[{"text":"..."}]\'' }), null, 2));
17
- return 1;
18
- }
19
- inputs = parsed;
20
- }
21
- catch {
22
- console.log(JSON.stringify(createErrorEnvelope('INVALID_JSON', 'Failed to parse --claims JSON', { hint: 'Ensure valid JSON array' }), null, 2));
23
- return 1;
24
- }
25
- }
26
- else if (options.claim) {
27
- try {
28
- const parsed = JSON.parse(options.claim);
29
- inputs = [parsed];
30
- }
31
- catch {
32
- console.log(JSON.stringify(createErrorEnvelope('INVALID_JSON', 'Failed to parse --claim JSON', { hint: 'Ensure valid JSON object' }), null, 2));
33
- return 1;
34
- }
14
+ const input = readSessionJsonInput(sessionDir, [
15
+ { option: '--claim-file', value: options.claimFile, file: true },
16
+ { option: '--claims-file', value: options.claimsFile, file: true },
17
+ ]);
18
+ if (!input.ok) {
19
+ console.log(JSON.stringify(createErrorEnvelope(input.code, input.message), null, 2));
20
+ return 1;
35
21
  }
36
- else {
37
- console.log(JSON.stringify(createErrorEnvelope('MISSING_CLAIM', 'Provide either --claim or --claims', { hint: 'Use: sxng claim-add <session> --claim \'{"text":"..."}\'' }), null, 2));
22
+ const batchInput = input.source === '--claims-file';
23
+ if (batchInput && !Array.isArray(input.value)) {
24
+ console.log(JSON.stringify(createErrorEnvelope('INVALID_CLAIMS', '--claims-file must contain a JSON array'), null, 2));
38
25
  return 1;
39
26
  }
27
+ inputs = batchInput ? input.value : [input.value];
40
28
  // Validate required fields
41
29
  for (let i = 0; i < inputs.length; i++) {
42
- if (!inputs[i].text || typeof inputs[i].text !== 'string') {
30
+ if (!isJsonObject(inputs[i]) || !inputs[i].text || typeof inputs[i].text !== 'string') {
43
31
  console.log(JSON.stringify(createErrorEnvelope('MISSING_TEXT', `Entry ${i} is missing required field "text"`), null, 2));
44
32
  return 1;
45
33
  }
46
34
  }
47
- const now = Date.now();
48
- const existing = loadClaims(sessionDir);
49
- const newClaims = [];
50
- const candidates = {};
51
- for (const [index, input] of inputs.entries()) {
52
- const id = `cl_${String(existing.length + index + 1).padStart(3, '0')}`;
53
- const claim = {
54
- id,
55
- text: input.text,
56
- subject: input.subject,
57
- predicate: input.predicate,
58
- object: input.object,
59
- time: input.time,
60
- riskLevel: input.riskLevel || 'medium',
61
- status: 'pending',
62
- sessionDir,
63
- createdAt: now,
64
- };
65
- newClaims.push(claim);
66
- // Auto-trigger evidence search
67
- candidates[id] = searchCandidates(sessionDir, claim.text);
35
+ let result;
36
+ try {
37
+ result = mutateSessionState(sessionDir, () => {
38
+ assertClaimsStoreReadable(sessionDir);
39
+ const existing = loadClaims(sessionDir);
40
+ const now = Date.now();
41
+ const newClaims = [];
42
+ const candidates = {};
43
+ for (const [index, input] of inputs.entries()) {
44
+ const id = `cl_${String(existing.length + index + 1).padStart(3, '0')}`;
45
+ const claim = {
46
+ id,
47
+ text: input.text,
48
+ subject: input.subject,
49
+ predicate: input.predicate,
50
+ object: input.object,
51
+ time: input.time,
52
+ riskLevel: input.riskLevel || 'medium',
53
+ status: 'pending',
54
+ sessionDir,
55
+ createdAt: now,
56
+ };
57
+ newClaims.push(claim);
58
+ candidates[id] = searchCandidates(sessionDir, claim.text);
59
+ }
60
+ saveClaims(sessionDir, [...existing, ...newClaims]);
61
+ return {
62
+ claims: newClaims.map(c => ({ id: c.id, text: c.text, status: c.status })),
63
+ candidates,
64
+ };
65
+ });
66
+ }
67
+ catch (error) {
68
+ if (error instanceof ClaimsStateError) {
69
+ console.log(JSON.stringify(createErrorEnvelope('CLAIMS_STATE_CORRUPTED', error.message), null, 2));
70
+ return 1;
71
+ }
72
+ throw error;
68
73
  }
69
- // Append to existing claims
70
- saveClaims(sessionDir, [...existing, ...newClaims]);
71
- const result = {
72
- claims: newClaims.map(c => ({ id: c.id, text: c.text, status: c.status })),
73
- candidates,
74
- };
75
74
  const outputFormat = options.format || 'json';
76
75
  if (outputFormat === 'md') {
77
76
  console.log('## Claim-Add Results\n');
78
- for (const c of newClaims) {
77
+ for (const c of result.claims) {
79
78
  console.log(`**${c.id}**: ${c.text}`);
80
- console.log(`- Status: ${c.status}, Risk: ${c.riskLevel}`);
81
- const cs = candidates[c.id] || [];
79
+ console.log(`- Status: ${c.status}`);
80
+ const cs = result.candidates[c.id] || [];
82
81
  if (cs.length > 0) {
83
82
  console.log(`- Candidates: ${cs.length} found`);
84
83
  for (const cand of cs) {
@@ -99,7 +98,18 @@ export async function runClaimAdd(session, options) {
99
98
  export async function runClaimList(session, options) {
100
99
  const sessionDir = resolveSessionPath(session);
101
100
  const statusFilter = options.status;
102
- const claims = getClaimsByStatus(sessionDir, statusFilter);
101
+ let claims;
102
+ try {
103
+ assertClaimsStoreReadable(sessionDir);
104
+ claims = getClaimsByStatus(sessionDir, statusFilter);
105
+ }
106
+ catch (error) {
107
+ if (error instanceof ClaimsStateError) {
108
+ console.log(JSON.stringify(createErrorEnvelope('CLAIMS_STATE_CORRUPTED', error.message), null, 2));
109
+ return 1;
110
+ }
111
+ throw error;
112
+ }
103
113
  const outputFormat = options.format || 'json';
104
114
  if (outputFormat === 'md') {
105
115
  if (claims.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,11 @@
1
- /**
2
- * evidence-search / evidence-verify / evidence-list — Evidence subcommands.
3
- */
1
+ /** Evidence search, verification, and listing commands. */
4
2
  export declare function runEvidenceSearch(session: string, options: {
5
3
  claimId: string;
6
4
  format?: string;
7
5
  }): Promise<number>;
8
6
  export declare function runEvidenceVerify(session: string, options: {
9
7
  claimId: string;
10
- evidence: string;
8
+ evidenceFile?: string;
11
9
  stance: 'support' | 'refute' | 'insufficient';
12
10
  reason: string;
13
11
  confidence?: number;
@@ -17,5 +15,6 @@ export declare function runEvidenceVerify(session: string, options: {
17
15
  export declare function runEvidenceList(session: string, options: {
18
16
  claimId: string;
19
17
  format?: string;
18
+ includeInvalid?: boolean;
20
19
  }): Promise<number>;
21
20
  //# sourceMappingURL=evidence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/commands/evidence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAYD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CA0JjB;AAID,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/commands/evidence.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAoC3D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CAmIjB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACtE,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
@@ -1,35 +1,45 @@
1
- /**
2
- * evidence-search / evidence-verify / evidence-list — Evidence subcommands.
3
- */
4
- import { loadEvidences, saveEvidences, nextEvidenceId, loadVerdicts, saveVerdicts, nextVerdictId, loadClaims, loadReviews, saveReviews, } from '../claims/store.js';
1
+ /** Evidence search, verification, and listing commands. */
2
+ import { createHash } from 'crypto';
3
+ import { assertClaimsStoreReadable, ClaimsStateError, loadClaims, loadEvidences, loadReviews, loadVerdicts, saveClaims, saveEvidences, saveReviews, saveVerdicts, } from '../claims/store.js';
5
4
  import { aggregateClaim } from '../claims/policy.js';
6
- import { computeSourceClusterId } from '../claims/deterministic-checks.js';
7
- import { resolveSessionPath, loadSessionResults } from '../deep/session.js';
8
- import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
9
- import { searchCandidates } from '../claims/deterministic-checks.js';
10
- // ── evidence-search ─────────────────────────────────────────────────
5
+ import { computeSourceClusterId, searchCandidates } from '../claims/deterministic-checks.js';
6
+ import { getApprovedResults, initSessionDir, mutateSessionState, resolveSessionPath } from '../deep/session.js';
7
+ import { createErrorEnvelope, createSuccessEnvelope } from '../protocol.js';
8
+ import { isJsonObject, readSessionJsonInput } from './json-input.js';
9
+ class EvidenceCommandError extends Error {
10
+ code;
11
+ constructor(code, message) {
12
+ super(message);
13
+ this.code = code;
14
+ }
15
+ }
11
16
  export async function runEvidenceSearch(session, options) {
12
17
  const sessionDir = resolveSessionPath(session);
13
- // Load the claim to get its text
14
- const claims = loadClaims(sessionDir);
15
- const claim = claims.find(c => c.id === options.claimId);
18
+ let claim;
19
+ try {
20
+ assertClaimsStoreReadable(sessionDir);
21
+ claim = loadClaims(sessionDir).find(item => item.id === options.claimId);
22
+ }
23
+ catch (error) {
24
+ if (error instanceof ClaimsStateError) {
25
+ console.log(JSON.stringify(createErrorEnvelope('CLAIMS_STATE_CORRUPTED', error.message), null, 2));
26
+ return 1;
27
+ }
28
+ throw error;
29
+ }
16
30
  if (!claim) {
17
31
  console.log(JSON.stringify(createErrorEnvelope('CLAIM_NOT_FOUND', `Claim ${options.claimId} not found`), null, 2));
18
32
  return 1;
19
33
  }
20
34
  const candidates = searchCandidates(sessionDir, claim.text);
21
- const outputFormat = options.format || 'json';
22
- if (outputFormat === 'md') {
35
+ if ((options.format || 'json') === 'md') {
23
36
  console.log(`## Evidence Candidates for ${options.claimId}\n`);
24
- if (candidates.length === 0) {
37
+ if (!candidates.length)
25
38
  console.log('No candidates found.');
26
- }
27
- for (let i = 0; i < candidates.length; i++) {
28
- const c = candidates[i];
29
- console.log(`**${i + 1}.** [${c.domain}](${c.resultUrl})`);
30
- console.log(` ${c.quote.slice(0, 200)}`);
31
- console.log(` offset: ${c.charStart}-${c.charEnd}`);
32
- console.log('');
39
+ for (const [index, candidate] of candidates.entries()) {
40
+ console.log(`**${index + 1}.** [${candidate.domain}](${candidate.resultUrl})`);
41
+ console.log(` ${candidate.quote.slice(0, 200)}`);
42
+ console.log(` offset: ${candidate.charStart}-${candidate.charEnd}\n`);
33
43
  }
34
44
  }
35
45
  else {
@@ -39,153 +49,163 @@ export async function runEvidenceSearch(session, options) {
39
49
  }
40
50
  export async function runEvidenceVerify(session, options) {
41
51
  const sessionDir = resolveSessionPath(session);
42
- // Parse evidence input
43
- let evInput;
44
- try {
45
- evInput = JSON.parse(options.evidence);
46
- }
47
- catch {
48
- console.log(JSON.stringify(createErrorEnvelope('INVALID_EVIDENCE', 'Failed to parse --evidence JSON'), null, 2));
49
- return 1;
50
- }
51
- // Validate required fields
52
- if (!evInput.resultUrl || !evInput.quote) {
53
- console.log(JSON.stringify(createErrorEnvelope('MISSING_FIELDS', '--evidence must contain resultUrl and quote'), null, 2));
54
- return 1;
55
- }
56
- // Verify the claim exists
57
- const claims = loadClaims(sessionDir);
58
- const claim = claims.find(c => c.id === options.claimId);
59
- if (!claim) {
60
- console.log(JSON.stringify(createErrorEnvelope('CLAIM_NOT_FOUND', `Claim ${options.claimId} not found`), null, 2));
61
- return 1;
62
- }
63
- // Deterministic checks: anchor the evidence
64
- const sessionResults = loadSessionResults(sessionDir);
65
- const approvedResults = sessionResults.filter(r => r.status === 'approved');
66
- const result = approvedResults.find(r => r.url === evInput.resultUrl);
67
- if (!result) {
68
- console.log(JSON.stringify(createErrorEnvelope('URL_NOT_APPROVED', `Result URL ${evInput.resultUrl} is not in approved results`), null, 2));
69
- return 1;
70
- }
71
- const content = result.content || '';
72
- if (evInput.charEnd > content.length || evInput.charStart < 0) {
73
- console.log(JSON.stringify(createErrorEnvelope('OFFSET_OUT_OF_RANGE', `charStart/charEnd out of range (content length: ${content.length})`), null, 2));
74
- return 1;
75
- }
76
- if (result.extractedAt === undefined) {
77
- console.log(JSON.stringify(createErrorEnvelope('EXTRACTION_TIME_MISSING', 'Approved result has no extraction timestamp; re-extract the source before verifying evidence'), null, 2));
52
+ initSessionDir(sessionDir);
53
+ const input = readSessionJsonInput(sessionDir, [{ option: '--evidence-file', value: options.evidenceFile, file: true }]);
54
+ if (!input.ok) {
55
+ console.log(JSON.stringify(createErrorEnvelope(input.code, input.message), null, 2));
78
56
  return 1;
79
57
  }
80
- // Verify content hash
81
- const { createHash } = await import('crypto');
82
- const slice = content.slice(evInput.charStart, evInput.charEnd);
83
- if (slice !== evInput.quote) {
84
- console.log(JSON.stringify(createErrorEnvelope('QUOTE_MISMATCH', 'Quote does not match source content at the provided offsets'), null, 2));
58
+ if (!isJsonObject(input.value)) {
59
+ console.log(JSON.stringify(createErrorEnvelope('INVALID_EVIDENCE', '--evidence-file must contain a JSON object'), null, 2));
85
60
  return 1;
86
61
  }
87
- const computedHash = createHash('sha256').update(slice).digest('hex');
88
- const providedHash = evInput.contentHash || computedHash;
89
- if (providedHash !== computedHash) {
90
- console.log(JSON.stringify(createErrorEnvelope('HASH_MISMATCH', 'Content hash mismatch — quote does not match source'), null, 2));
62
+ const evidenceInput = {
63
+ resultId: input.value.resultId,
64
+ quote: input.value.quote,
65
+ charStart: input.value.charStart,
66
+ charEnd: input.value.charEnd,
67
+ contentHash: typeof input.value.contentHash === 'string' ? input.value.contentHash : undefined,
68
+ };
69
+ if (typeof evidenceInput.resultId !== 'string' || typeof evidenceInput.quote !== 'string'
70
+ || !Number.isSafeInteger(evidenceInput.charStart) || !Number.isSafeInteger(evidenceInput.charEnd)) {
71
+ console.log(JSON.stringify(createErrorEnvelope('MISSING_FIELDS', '--evidence-file must contain resultId, quote, charStart, and charEnd'), null, 2));
91
72
  return 1;
92
73
  }
93
- // All checks passed — write evidence
94
- const now = Date.now();
95
- const evId = nextEvidenceId(sessionDir);
96
- const evidence = {
97
- id: evId,
98
- claimId: options.claimId,
99
- resultUrl: evInput.resultUrl,
100
- quote: evInput.quote,
101
- charStart: evInput.charStart,
102
- charEnd: evInput.charEnd,
103
- contentHash: computedHash,
104
- extractedAt: result.extractedAt,
105
- sourceClusterId: undefined, // computed during policy-aggregate
106
- };
107
- const existingEvs = loadEvidences(sessionDir);
108
- saveEvidences(sessionDir, [...existingEvs, evidence]);
109
- // Write verdict alongside evidence
110
- const vdId = nextVerdictId(sessionDir);
111
- const verdict = {
112
- id: vdId,
113
- claimId: options.claimId,
114
- evidenceIds: [evId],
115
- stance: options.stance,
116
- confidence: options.confidence,
117
- reason: options.reason,
118
- createdAt: now,
119
- };
120
- const existingVds = loadVerdicts(sessionDir);
121
- saveVerdicts(sessionDir, [...existingVds, verdict]);
122
- // Update claim status to verifying
123
- claim.status = 'verifying';
124
- const { saveClaims } = await import('../claims/store.js');
125
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
126
- saveClaims(sessionDir, claims);
127
- // If --complete, trigger policy aggregation
128
- let review = undefined;
129
- if (options.complete) {
130
- // Gather all evidence and verdicts for this claim
131
- const storedEvidences = loadEvidences(sessionDir);
132
- const allEvs = storedEvidences.filter(e => e.claimId === options.claimId);
133
- const allVds = loadVerdicts(sessionDir).filter(v => v.claimId === options.claimId);
134
- // Refresh source cluster IDs using the current publisher-domain rule.
135
- for (const ev of allEvs) {
136
- ev.sourceClusterId = computeSourceClusterId(ev);
74
+ let mutation;
75
+ try {
76
+ mutation = mutateSessionState(sessionDir, () => {
77
+ assertClaimsStoreReadable(sessionDir);
78
+ const claims = loadClaims(sessionDir);
79
+ const claim = claims.find(item => item.id === options.claimId);
80
+ if (!claim)
81
+ throw new EvidenceCommandError('CLAIM_NOT_FOUND', `Claim ${options.claimId} not found`);
82
+ const result = getApprovedResults(sessionDir).find(item => item.id === evidenceInput.resultId);
83
+ if (!result)
84
+ throw new EvidenceCommandError('RESULT_NOT_APPROVED', `Result ID ${evidenceInput.resultId} is not in approved results`);
85
+ const content = result.content;
86
+ if (evidenceInput.charStart < 0 || evidenceInput.charEnd > content.length) {
87
+ throw new EvidenceCommandError('OFFSET_OUT_OF_RANGE', `charStart/charEnd out of range (content length: ${content.length})`);
88
+ }
89
+ const quote = content.slice(evidenceInput.charStart, evidenceInput.charEnd);
90
+ if (quote !== evidenceInput.quote)
91
+ throw new EvidenceCommandError('QUOTE_MISMATCH', 'Quote does not match source content at the provided offsets');
92
+ const contentHash = createHash('sha256').update(quote).digest('hex');
93
+ if ((evidenceInput.contentHash || contentHash) !== contentHash) {
94
+ throw new EvidenceCommandError('HASH_MISMATCH', 'Content hash mismatch: quote does not match source');
95
+ }
96
+ const evidences = loadEvidences(sessionDir);
97
+ const duplicate = evidences.find(item => item.claimId === claim.id
98
+ && item.resultId === result.id
99
+ && item.quote === evidenceInput.quote
100
+ && item.charStart === evidenceInput.charStart
101
+ && item.charEnd === evidenceInput.charEnd
102
+ && !item.invalid);
103
+ const idempotent = Boolean(duplicate);
104
+ const evidence = duplicate ?? {
105
+ id: `ev_${String(evidences.length + 1).padStart(3, '0')}`,
106
+ claimId: claim.id,
107
+ resultId: result.id,
108
+ resultUrl: result.url,
109
+ quote: evidenceInput.quote,
110
+ charStart: evidenceInput.charStart,
111
+ charEnd: evidenceInput.charEnd,
112
+ contentHash,
113
+ extractedAt: result.extractedAt,
114
+ };
115
+ if (!duplicate)
116
+ evidences.push(evidence);
117
+ const verdicts = loadVerdicts(sessionDir);
118
+ let verdict = verdicts.find(item => item.claimId === claim.id && item.evidenceIds.length === 1 && item.evidenceIds[0] === evidence.id);
119
+ if (!verdict) {
120
+ verdict = {
121
+ id: `vd_${String(verdicts.length + 1).padStart(3, '0')}`,
122
+ claimId: claim.id,
123
+ evidenceIds: [evidence.id],
124
+ stance: options.stance,
125
+ confidence: options.confidence,
126
+ reason: options.reason,
127
+ createdAt: Date.now(),
128
+ };
129
+ verdicts.push(verdict);
130
+ }
131
+ claim.status = 'verifying';
132
+ const reviews = loadReviews(sessionDir);
133
+ let review;
134
+ if (options.complete) {
135
+ const validEvidences = evidences.filter(item => item.claimId === claim.id && !item.invalid);
136
+ for (const item of validEvidences)
137
+ item.sourceClusterId = computeSourceClusterId(item);
138
+ const validIds = new Set(validEvidences.map(item => item.id));
139
+ const claimVerdicts = verdicts.filter(item => item.claimId === claim.id && item.evidenceIds.some(id => validIds.has(id)));
140
+ review = aggregateClaim({ claimId: claim.id, riskLevel: claim.riskLevel, verdicts: claimVerdicts, evidences: validEvidences });
141
+ claim.status = 'reviewed';
142
+ const reviewIndex = reviews.findIndex(item => item.claimId === claim.id);
143
+ if (reviewIndex === -1)
144
+ reviews.push(review);
145
+ else
146
+ reviews[reviewIndex] = review;
147
+ }
148
+ // Every retry derives the full desired state, repairing partial prior writes.
149
+ saveEvidences(sessionDir, evidences);
150
+ saveVerdicts(sessionDir, verdicts);
151
+ saveClaims(sessionDir, claims);
152
+ saveReviews(sessionDir, reviews);
153
+ return { evidence, verdict, review, idempotent };
154
+ });
155
+ }
156
+ catch (error) {
157
+ if (error instanceof ClaimsStateError) {
158
+ console.log(JSON.stringify(createErrorEnvelope('CLAIMS_STATE_CORRUPTED', error.message), null, 2));
159
+ return 1;
160
+ }
161
+ if (error instanceof EvidenceCommandError) {
162
+ console.log(JSON.stringify(createErrorEnvelope(error.code, error.message), null, 2));
163
+ return 1;
137
164
  }
138
- saveEvidences(sessionDir, storedEvidences);
139
- const input = {
140
- claimId: options.claimId,
141
- riskLevel: claim.riskLevel,
142
- verdicts: allVds,
143
- evidences: allEvs,
144
- };
145
- const result = aggregateClaim(input);
146
- // Update claim status
147
- claim.status = 'reviewed';
148
- saveClaims(sessionDir, claims);
149
- // Persist review
150
- const existingReviews = loadReviews(sessionDir);
151
- saveReviews(sessionDir, [...existingReviews, result]);
152
- review = result;
165
+ throw error;
153
166
  }
154
167
  const output = {
155
- evidence: { id: evId, claimId: options.claimId },
156
- verdict: { id: vdId, stance: options.stance },
157
- ...(review ? { review: { claimId: review.claimId, decision: review.decision, matchedRule: review.matchedRule, autoPass: review.autoPass } } : {}),
168
+ evidence: { id: mutation.evidence.id, claimId: options.claimId },
169
+ verdict: { id: mutation.verdict.id, stance: mutation.verdict.stance },
170
+ ...(mutation.idempotent ? { idempotent: true } : {}),
171
+ ...(mutation.review ? { review: { claimId: mutation.review.claimId, decision: mutation.review.decision, matchedRule: mutation.review.matchedRule, autoPass: mutation.review.autoPass } } : {}),
158
172
  };
159
- const outputFormat = options.format || 'json';
160
- if (outputFormat === 'md') {
173
+ if ((options.format || 'json') === 'md') {
161
174
  console.log('## Evidence-Verify Result\n');
162
- console.log(`**Evidence**: ${evId} ${options.claimId}`);
163
- console.log(`**Verdict**: ${vdId} ${options.stance}`);
164
- if (review) {
165
- console.log(`**Review**: ${review.decision} (rule: ${review.matchedRule}, autoPass: ${review.autoPass})`);
166
- }
175
+ console.log(`**Evidence**: ${mutation.evidence.id} -> ${options.claimId}`);
176
+ console.log(`**Verdict**: ${mutation.verdict.id} - ${mutation.verdict.stance}`);
177
+ if (mutation.review)
178
+ console.log(`**Review**: ${mutation.review.decision} (rule: ${mutation.review.matchedRule}, autoPass: ${mutation.review.autoPass})`);
167
179
  }
168
180
  else {
169
181
  console.log(JSON.stringify(createSuccessEnvelope(output), null, 2));
170
182
  }
171
183
  return 0;
172
184
  }
173
- // ── evidence-list ───────────────────────────────────────────────────
174
185
  export async function runEvidenceList(session, options) {
175
186
  const sessionDir = resolveSessionPath(session);
176
- const evidences = loadEvidences(sessionDir).filter(e => e.claimId === options.claimId);
177
- const outputFormat = options.format || 'json';
178
- if (outputFormat === 'md') {
179
- if (evidences.length === 0) {
187
+ let evidences;
188
+ try {
189
+ assertClaimsStoreReadable(sessionDir);
190
+ evidences = loadEvidences(sessionDir).filter(item => item.claimId === options.claimId && (options.includeInvalid || !item.invalid));
191
+ }
192
+ catch (error) {
193
+ if (error instanceof ClaimsStateError) {
194
+ console.log(JSON.stringify(createErrorEnvelope('CLAIMS_STATE_CORRUPTED', error.message), null, 2));
195
+ return 1;
196
+ }
197
+ throw error;
198
+ }
199
+ if ((options.format || 'json') === 'md') {
200
+ if (!evidences.length) {
180
201
  console.log('No evidence found for this claim.');
181
202
  return 0;
182
203
  }
183
204
  console.log('## Evidence\n');
184
205
  console.log('| ID | Source | Quote |');
185
206
  console.log('|----|--------|-------|');
186
- for (const e of evidences) {
187
- console.log(`| ${e.id} | ${e.resultUrl} | ${e.quote.slice(0, 60)}... |`);
188
- }
207
+ for (const evidence of evidences)
208
+ console.log(`| ${evidence.id} | ${evidence.resultUrl} | ${evidence.quote.slice(0, 60)}... |`);
189
209
  }
190
210
  else {
191
211
  console.log(JSON.stringify(createSuccessEnvelope({ evidences }), null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/commands/evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/commands/evidence.ts"],"names":[],"mappings":"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"}