sxng-cli 1.2.2 → 1.2.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 (240) hide show
  1. package/README.md +33 -0
  2. package/dist/claims/deterministic-checks.d.ts +46 -0
  3. package/dist/claims/deterministic-checks.d.ts.map +1 -0
  4. package/dist/claims/deterministic-checks.js +146 -0
  5. package/dist/claims/deterministic-checks.js.map +1 -0
  6. package/dist/claims/policy.d.ts +25 -0
  7. package/dist/claims/policy.d.ts.map +1 -0
  8. package/dist/claims/policy.js +168 -0
  9. package/dist/claims/policy.js.map +1 -0
  10. package/dist/claims/store.d.ts +31 -0
  11. package/dist/claims/store.d.ts.map +1 -0
  12. package/dist/claims/store.js +127 -0
  13. package/dist/claims/store.js.map +1 -0
  14. package/dist/claims/types.d.ts +93 -0
  15. package/dist/claims/types.d.ts.map +1 -0
  16. package/dist/claims/types.js +9 -0
  17. package/dist/claims/types.js.map +1 -0
  18. package/dist/commands/build-graph.d.ts +0 -0
  19. package/dist/commands/build-graph.d.ts.map +0 -0
  20. package/dist/commands/build-graph.js +0 -0
  21. package/dist/commands/build-graph.js.map +0 -0
  22. package/dist/commands/claim.d.ts +13 -0
  23. package/dist/commands/claim.d.ts.map +1 -0
  24. package/dist/commands/claim.js +121 -0
  25. package/dist/commands/claim.js.map +1 -0
  26. package/dist/commands/doc-index.d.ts +0 -0
  27. package/dist/commands/doc-index.d.ts.map +0 -0
  28. package/dist/commands/doc-index.js +0 -0
  29. package/dist/commands/doc-index.js.map +0 -0
  30. package/dist/commands/doc-search.d.ts +0 -0
  31. package/dist/commands/doc-search.d.ts.map +0 -0
  32. package/dist/commands/doc-search.js +0 -0
  33. package/dist/commands/doc-search.js.map +0 -0
  34. package/dist/commands/evidence.d.ts +21 -0
  35. package/dist/commands/evidence.d.ts.map +1 -0
  36. package/dist/commands/evidence.js +187 -0
  37. package/dist/commands/evidence.js.map +1 -0
  38. package/dist/commands/extract.d.ts +0 -0
  39. package/dist/commands/extract.d.ts.map +0 -0
  40. package/dist/commands/extract.js +0 -0
  41. package/dist/commands/extract.js.map +0 -0
  42. package/dist/commands/graph-add.d.ts +0 -0
  43. package/dist/commands/graph-add.d.ts.map +0 -0
  44. package/dist/commands/graph-add.d.ts.sync-conflict-20260629-232900-2SGIW5T.map +0 -0
  45. package/dist/commands/graph-add.js +0 -0
  46. package/dist/commands/graph-add.js.map +0 -0
  47. package/dist/commands/graph-add.js.sync-conflict-20260629-232916-2SGIW5T.map +0 -0
  48. package/dist/commands/graph-add.sync-conflict-20260629-232853-2SGIW5T.js +0 -0
  49. package/dist/commands/graph-drill.d.ts +0 -0
  50. package/dist/commands/graph-drill.d.ts.map +0 -0
  51. package/dist/commands/graph-drill.js +0 -0
  52. package/dist/commands/graph-drill.js.map +0 -0
  53. package/dist/commands/graph-explore.d.ts +0 -0
  54. package/dist/commands/graph-explore.d.ts.map +0 -0
  55. package/dist/commands/graph-explore.js +0 -0
  56. package/dist/commands/graph-explore.js.map +0 -0
  57. package/dist/commands/graph-obfuscate.d.ts +0 -0
  58. package/dist/commands/graph-obfuscate.d.ts.map +0 -0
  59. package/dist/commands/graph-obfuscate.js +0 -0
  60. package/dist/commands/graph-obfuscate.js.map +0 -0
  61. package/dist/commands/graph-search.d.ts +0 -0
  62. package/dist/commands/graph-search.d.ts.map +0 -0
  63. package/dist/commands/graph-search.js +0 -0
  64. package/dist/commands/graph-search.js.map +0 -0
  65. package/dist/commands/graph-traverse.d.ts +0 -0
  66. package/dist/commands/graph-traverse.d.ts.map +0 -0
  67. package/dist/commands/graph-traverse.js +0 -0
  68. package/dist/commands/graph-traverse.js.map +0 -0
  69. package/dist/commands/query-graph.d.ts +0 -0
  70. package/dist/commands/query-graph.d.ts.map +0 -0
  71. package/dist/commands/query-graph.js +0 -0
  72. package/dist/commands/query-graph.js.map +0 -0
  73. package/dist/commands/raw.d.ts +0 -0
  74. package/dist/commands/raw.d.ts.map +0 -0
  75. package/dist/commands/raw.js +0 -0
  76. package/dist/commands/raw.js.map +0 -0
  77. package/dist/commands/results-add.d.ts +0 -0
  78. package/dist/commands/results-add.d.ts.map +0 -0
  79. package/dist/commands/results-add.js +0 -0
  80. package/dist/commands/results-add.js.map +0 -0
  81. package/dist/commands/review.d.ts +12 -0
  82. package/dist/commands/review.d.ts.map +1 -0
  83. package/dist/commands/review.js +113 -0
  84. package/dist/commands/review.js.map +1 -0
  85. package/dist/commands/session.d.ts +0 -0
  86. package/dist/commands/session.d.ts.map +0 -0
  87. package/dist/commands/session.js +0 -0
  88. package/dist/commands/session.js.map +0 -0
  89. package/dist/commands/verdict.d.ts +9 -0
  90. package/dist/commands/verdict.d.ts.map +1 -0
  91. package/dist/commands/verdict.js +29 -0
  92. package/dist/commands/verdict.js.map +1 -0
  93. package/dist/config.d.ts +0 -0
  94. package/dist/config.d.ts.map +0 -0
  95. package/dist/config.js +0 -0
  96. package/dist/config.js.map +0 -0
  97. package/dist/deep/co-occurrence.d.ts +0 -0
  98. package/dist/deep/co-occurrence.d.ts.map +0 -0
  99. package/dist/deep/co-occurrence.js +0 -0
  100. package/dist/deep/co-occurrence.js.map +0 -0
  101. package/dist/deep/dedupe.d.ts +0 -0
  102. package/dist/deep/dedupe.d.ts.map +0 -0
  103. package/dist/deep/dedupe.js +0 -0
  104. package/dist/deep/dedupe.js.map +0 -0
  105. package/dist/deep/degree-utils.d.ts +0 -0
  106. package/dist/deep/degree-utils.d.ts.map +0 -0
  107. package/dist/deep/degree-utils.js +0 -0
  108. package/dist/deep/degree-utils.js.map +0 -0
  109. package/dist/deep/extractor.d.sync-conflict-20260629-232902-2SGIW5T.ts +0 -0
  110. package/dist/deep/extractor.d.ts +0 -0
  111. package/dist/deep/extractor.d.ts.map +0 -0
  112. package/dist/deep/extractor.d.ts.sync-conflict-20260629-232921-2SGIW5T.map +0 -0
  113. package/dist/deep/extractor.js +0 -0
  114. package/dist/deep/extractor.js.map +0 -0
  115. package/dist/deep/extractor.js.sync-conflict-20260629-232921-2SGIW5T.map +0 -0
  116. package/dist/deep/extractor.sync-conflict-20260629-232903-2SGIW5T.js +0 -0
  117. package/dist/deep/graph-explore.d.ts +0 -0
  118. package/dist/deep/graph-explore.d.ts.map +0 -0
  119. package/dist/deep/graph-explore.js +0 -0
  120. package/dist/deep/graph-explore.js.map +0 -0
  121. package/dist/deep/graph-obfuscate.d.ts +0 -0
  122. package/dist/deep/graph-obfuscate.d.ts.map +0 -0
  123. package/dist/deep/graph-obfuscate.js +0 -0
  124. package/dist/deep/graph-obfuscate.js.map +0 -0
  125. package/dist/deep/graph-preprocess.d.ts +0 -0
  126. package/dist/deep/graph-preprocess.d.ts.map +0 -0
  127. package/dist/deep/graph-preprocess.js +0 -0
  128. package/dist/deep/graph-preprocess.js.map +0 -0
  129. package/dist/deep/graph-sampling.d.ts +0 -0
  130. package/dist/deep/graph-sampling.d.ts.map +0 -0
  131. package/dist/deep/graph-sampling.js +0 -0
  132. package/dist/deep/graph-sampling.js.map +0 -0
  133. package/dist/deep/graph.d.sync-conflict-20260629-232917-2SGIW5T.ts +0 -0
  134. package/dist/deep/graph.d.ts +0 -0
  135. package/dist/deep/graph.d.ts.map +0 -0
  136. package/dist/deep/graph.d.ts.sync-conflict-20260629-232911-2SGIW5T.map +0 -0
  137. package/dist/deep/graph.js +0 -0
  138. package/dist/deep/graph.js.map +0 -0
  139. package/dist/deep/graph.js.sync-conflict-20260629-232855-2SGIW5T.map +0 -0
  140. package/dist/deep/graph.sync-conflict-20260629-232907-2SGIW5T.js +0 -0
  141. package/dist/deep/index.d.ts +0 -0
  142. package/dist/deep/index.d.ts.map +0 -0
  143. package/dist/deep/index.js +0 -0
  144. package/dist/deep/index.js.map +0 -0
  145. package/dist/deep/iteration-data.d.ts +0 -0
  146. package/dist/deep/iteration-data.d.ts.map +0 -0
  147. package/dist/deep/iteration-data.js +0 -0
  148. package/dist/deep/iteration-data.js.map +0 -0
  149. package/dist/deep/keywords.d.ts +0 -0
  150. package/dist/deep/keywords.d.ts.map +0 -0
  151. package/dist/deep/keywords.js +0 -0
  152. package/dist/deep/keywords.js.map +0 -0
  153. package/dist/deep/local-doc/indexer.d.ts +0 -0
  154. package/dist/deep/local-doc/indexer.d.ts.map +0 -0
  155. package/dist/deep/local-doc/indexer.js +0 -0
  156. package/dist/deep/local-doc/indexer.js.map +0 -0
  157. package/dist/deep/local-doc/scanner.d.ts +0 -0
  158. package/dist/deep/local-doc/scanner.d.ts.map +0 -0
  159. package/dist/deep/local-doc/scanner.js +0 -0
  160. package/dist/deep/local-doc/scanner.js.map +0 -0
  161. package/dist/deep/local-doc/searcher.d.ts +0 -0
  162. package/dist/deep/local-doc/searcher.d.ts.map +0 -0
  163. package/dist/deep/local-doc/searcher.js +0 -0
  164. package/dist/deep/local-doc/searcher.js.map +0 -0
  165. package/dist/deep/local-doc/types.d.ts +0 -0
  166. package/dist/deep/local-doc/types.d.ts.map +0 -0
  167. package/dist/deep/local-doc/types.js +0 -0
  168. package/dist/deep/local-doc/types.js.map +0 -0
  169. package/dist/deep/path-extraction.d.ts +0 -0
  170. package/dist/deep/path-extraction.d.ts.map +0 -0
  171. package/dist/deep/path-extraction.js +0 -0
  172. package/dist/deep/path-extraction.js.map +0 -0
  173. package/dist/deep/quality-assess.d.ts +0 -0
  174. package/dist/deep/quality-assess.d.ts.map +0 -0
  175. package/dist/deep/quality-assess.js +0 -0
  176. package/dist/deep/quality-assess.js.map +0 -0
  177. package/dist/deep/query-redundancy.d.ts +0 -0
  178. package/dist/deep/query-redundancy.d.ts.map +0 -0
  179. package/dist/deep/query-redundancy.js +0 -0
  180. package/dist/deep/query-redundancy.js.map +0 -0
  181. package/dist/deep/query-suggest.d.ts +0 -0
  182. package/dist/deep/query-suggest.d.ts.map +0 -0
  183. package/dist/deep/query-suggest.js +0 -0
  184. package/dist/deep/query-suggest.js.map +0 -0
  185. package/dist/deep/recovery-analysis.d.ts +0 -0
  186. package/dist/deep/recovery-analysis.d.ts.map +0 -0
  187. package/dist/deep/recovery-analysis.js +0 -0
  188. package/dist/deep/recovery-analysis.js.map +0 -0
  189. package/dist/deep/rrf.d.ts +0 -0
  190. package/dist/deep/rrf.d.ts.map +0 -0
  191. package/dist/deep/rrf.js +0 -0
  192. package/dist/deep/rrf.js.map +0 -0
  193. package/dist/deep/search-strategy.d.ts +0 -0
  194. package/dist/deep/search-strategy.d.ts.map +0 -0
  195. package/dist/deep/search-strategy.js +0 -0
  196. package/dist/deep/search-strategy.js.map +0 -0
  197. package/dist/deep/session.d.sync-conflict-20260629-232917-2SGIW5T.ts +0 -0
  198. package/dist/deep/session.d.ts +2 -0
  199. package/dist/deep/session.d.ts.map +1 -1
  200. package/dist/deep/session.d.ts.sync-conflict-20260629-232921-2SGIW5T.map +0 -0
  201. package/dist/deep/session.js +0 -0
  202. package/dist/deep/session.js.map +1 -1
  203. package/dist/deep/session.js.sync-conflict-20260629-232854-2SGIW5T.map +0 -0
  204. package/dist/deep/simhash.d.ts +0 -0
  205. package/dist/deep/simhash.d.ts.map +0 -0
  206. package/dist/deep/simhash.js +0 -0
  207. package/dist/deep/simhash.js.map +0 -0
  208. package/dist/deep/tfidf.d.ts +0 -0
  209. package/dist/deep/tfidf.d.ts.map +0 -0
  210. package/dist/deep/tfidf.js +0 -0
  211. package/dist/deep/tfidf.js.map +0 -0
  212. package/dist/index.d.ts +0 -0
  213. package/dist/index.d.ts.map +0 -0
  214. package/dist/index.js +0 -0
  215. package/dist/index.js.map +0 -0
  216. package/dist/init.d.ts +0 -0
  217. package/dist/init.d.ts.map +0 -0
  218. package/dist/init.js +0 -0
  219. package/dist/init.js.map +0 -0
  220. package/dist/protocol.d.ts +0 -0
  221. package/dist/protocol.d.ts.map +0 -0
  222. package/dist/protocol.js +0 -0
  223. package/dist/protocol.js.map +0 -0
  224. package/dist/runCli.d.ts +0 -0
  225. package/dist/runCli.d.ts.map +1 -1
  226. package/dist/runCli.d.ts.sync-conflict-20260629-232854-2SGIW5T.map +0 -0
  227. package/dist/runCli.js +125 -0
  228. package/dist/runCli.js.map +1 -1
  229. package/dist/runCli.js.sync-conflict-20260629-232857-2SGIW5T.map +0 -0
  230. package/dist/runCli.sync-conflict-20260629-232915-2SGIW5T.js +0 -0
  231. package/dist/runCli.sync-conflict-20260629-233530-JAULAPO.d.ts +0 -0
  232. package/dist/runCli.sync-conflict-20260629-233530-JAULAPO.d.ts.map +0 -0
  233. package/dist/runCli.sync-conflict-20260629-233530-JAULAPO.js +0 -0
  234. package/dist/runCli.sync-conflict-20260629-233530-JAULAPO.js.map +0 -0
  235. package/dist/service.d.ts +0 -0
  236. package/dist/service.d.ts.map +0 -0
  237. package/dist/service.js +0 -0
  238. package/dist/service.js.map +0 -0
  239. package/package.json +2 -2
  240. package/sxng.config.example.json +0 -0
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Claim—Evidence—Review types for automatic audit pipeline.
3
+ *
4
+ * All field names use camelCase per project convention.
5
+ * String literal values (status, stance, decision) use lower_case
6
+ * to match existing SessionResult.status pattern.
7
+ */
8
+ export interface Claim {
9
+ /** Assigned by CLI: cl_<seq>, auto-increment per session */
10
+ id: string;
11
+ /** Raw claim text */
12
+ text: string;
13
+ /** Semantic decomposition (provided by Agent, CLI does not validate) */
14
+ subject?: string;
15
+ predicate?: string;
16
+ object?: string;
17
+ /** Time constraint, e.g. "2025-06", "Q3 2025" */
18
+ time?: string;
19
+ /** Risk classification (Agent-assigned) */
20
+ riskLevel: 'low' | 'medium' | 'high';
21
+ /**
22
+ * Lifecycle status
23
+ * - pending: submitted, no evidence yet
24
+ * - verifying: has EvidenceSpan(s), awaiting policy aggregation
25
+ * - reviewed: policy aggregation complete
26
+ */
27
+ status: 'pending' | 'verifying' | 'reviewed';
28
+ /** Owning session directory */
29
+ sessionDir: string;
30
+ /** Creation timestamp */
31
+ createdAt: number;
32
+ }
33
+ export interface EvidenceSpan {
34
+ id: string;
35
+ claimId: string;
36
+ /** Approved result URL this evidence points to */
37
+ resultUrl: string;
38
+ /** Verbatim quote from source */
39
+ quote: string;
40
+ /** Offset in UTF-16 code units (JS .slice() convention) */
41
+ charStart: number;
42
+ charEnd: number;
43
+ /** SHA256 hex digest of the exact quote slice */
44
+ contentHash: string;
45
+ /** Retrieval timestamp */
46
+ retrievedAt: number;
47
+ /** Source publish date (inherited from SessionResult.publishedDate) */
48
+ publishedDate?: string;
49
+ /** Source author / site name (set dynamically by mergeExtractedContent) */
50
+ author?: string;
51
+ siteName?: string;
52
+ /**
53
+ * Source independence cluster ID.
54
+ * null on write; computed on-demand during policy-aggregate.
55
+ * Derived from: domain + byline + content SimHash → SHA256 → 16 hex chars.
56
+ */
57
+ sourceClusterId?: string;
58
+ }
59
+ export interface Verdict {
60
+ id: string;
61
+ claimId: string;
62
+ evidenceIds: string[];
63
+ stance: 'support' | 'refute' | 'insufficient';
64
+ confidence?: number;
65
+ reason: string;
66
+ createdAt: number;
67
+ }
68
+ export type ReviewStatus = 'approved' | 'needsReview' | 'rejected';
69
+ export interface ReviewChecks {
70
+ sourceIndependent: boolean;
71
+ hasRefute: boolean;
72
+ allSupport: boolean;
73
+ }
74
+ export interface ReviewConflict {
75
+ summary: string;
76
+ supporting: string[];
77
+ refuting: string[];
78
+ }
79
+ export interface Review {
80
+ claimId: string;
81
+ decision: ReviewStatus;
82
+ autoPass: boolean;
83
+ /** Deterministic check results */
84
+ checks: ReviewChecks;
85
+ /** Conflict info (populated when refute exists) */
86
+ conflict?: ReviewConflict;
87
+ /** Matched rule name */
88
+ matchedRule: string;
89
+ /** Reviewer (always "agent" for now) */
90
+ reviewer: string;
91
+ reviewedAt: number;
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/claims/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,KAAK;IACpB,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IAEX,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IAEb,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,2CAA2C;IAC3C,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAErC;;;;;OAKG;IACH,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAE7C,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IAEnB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IAEd,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAEhB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAElB,kCAAkC;IAClC,MAAM,EAAE,YAAY,CAAC;IAErB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Claim—Evidence—Review types for automatic audit pipeline.
3
+ *
4
+ * All field names use camelCase per project convention.
5
+ * String literal values (status, stance, decision) use lower_case
6
+ * to match existing SessionResult.status pattern.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/claims/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,13 @@
1
+ /**
2
+ * claim-add / claim-list — Claim subcommands for the review pipeline.
3
+ */
4
+ export declare function runClaimAdd(session: string, options: {
5
+ claim?: string;
6
+ claims?: string;
7
+ format?: string;
8
+ }): Promise<number>;
9
+ export declare function runClaimList(session: string, options: {
10
+ status?: string;
11
+ format?: string;
12
+ }): Promise<number>;
13
+ //# sourceMappingURL=claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CA8FjB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * claim-add / claim-list — Claim subcommands for the review pipeline.
3
+ */
4
+ import { loadClaims, saveClaims, nextClaimId, getClaimsByStatus, } from '../claims/store.js';
5
+ import { searchCandidates } from '../claims/deterministic-checks.js';
6
+ import { createSuccessEnvelope, createErrorEnvelope } from '../protocol.js';
7
+ import { resolveSessionPath } from '../deep/session.js';
8
+ export async function runClaimAdd(session, options) {
9
+ const sessionDir = resolveSessionPath(session);
10
+ // Parse input
11
+ 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
+ }
35
+ }
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));
38
+ return 1;
39
+ }
40
+ // Validate required fields
41
+ for (let i = 0; i < inputs.length; i++) {
42
+ if (!inputs[i].text || typeof inputs[i].text !== 'string') {
43
+ console.log(JSON.stringify(createErrorEnvelope('MISSING_TEXT', `Entry ${i} is missing required field "text"`), null, 2));
44
+ return 1;
45
+ }
46
+ }
47
+ const now = Date.now();
48
+ const newClaims = [];
49
+ const candidates = {};
50
+ for (const input of inputs) {
51
+ const id = nextClaimId(sessionDir);
52
+ const claim = {
53
+ id,
54
+ text: input.text,
55
+ subject: input.subject,
56
+ predicate: input.predicate,
57
+ object: input.object,
58
+ time: input.time,
59
+ riskLevel: input.riskLevel || 'medium',
60
+ status: 'pending',
61
+ sessionDir,
62
+ createdAt: now,
63
+ };
64
+ newClaims.push(claim);
65
+ // Auto-trigger evidence search
66
+ candidates[id] = searchCandidates(sessionDir, claim.text);
67
+ }
68
+ // Append to existing claims
69
+ const existing = loadClaims(sessionDir);
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
+ const outputFormat = options.format || 'json';
76
+ if (outputFormat === 'md') {
77
+ console.log('## Claim-Add Results\n');
78
+ for (const c of newClaims) {
79
+ console.log(`**${c.id}**: ${c.text}`);
80
+ console.log(`- Status: ${c.status}, Risk: ${c.riskLevel}`);
81
+ const cs = candidates[c.id] || [];
82
+ if (cs.length > 0) {
83
+ console.log(`- Candidates: ${cs.length} found`);
84
+ for (const cand of cs) {
85
+ console.log(` - [${cand.domain}] ${cand.quote.slice(0, 80)}...`);
86
+ }
87
+ }
88
+ else {
89
+ console.log('- Candidates: none');
90
+ }
91
+ console.log('');
92
+ }
93
+ }
94
+ else {
95
+ console.log(JSON.stringify(createSuccessEnvelope(result), null, 2));
96
+ }
97
+ return 0;
98
+ }
99
+ export async function runClaimList(session, options) {
100
+ const sessionDir = resolveSessionPath(session);
101
+ const statusFilter = options.status;
102
+ const claims = getClaimsByStatus(sessionDir, statusFilter);
103
+ const outputFormat = options.format || 'json';
104
+ if (outputFormat === 'md') {
105
+ if (claims.length === 0) {
106
+ console.log('No claims found.');
107
+ return 0;
108
+ }
109
+ console.log('## Claims\n');
110
+ console.log('| ID | Text | Status | Risk |');
111
+ console.log('|---:|------|--------|------|');
112
+ for (const c of claims) {
113
+ console.log(`| ${c.id} | ${c.text} | ${c.status} | ${c.riskLevel} |`);
114
+ }
115
+ }
116
+ else {
117
+ console.log(JSON.stringify(createSuccessEnvelope({ claims }), null, 2));
118
+ }
119
+ return 0;
120
+ }
121
+ //# sourceMappingURL=claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,21 @@
1
+ /**
2
+ * evidence-search / evidence-verify / evidence-list — Evidence subcommands.
3
+ */
4
+ export declare function runEvidenceSearch(session: string, options: {
5
+ claimId: string;
6
+ format?: string;
7
+ }): Promise<number>;
8
+ export declare function runEvidenceVerify(session: string, options: {
9
+ claimId: string;
10
+ evidence: string;
11
+ stance: 'support' | 'refute' | 'insufficient';
12
+ reason: string;
13
+ confidence?: number;
14
+ complete?: boolean;
15
+ format?: string;
16
+ }): Promise<number>;
17
+ export declare function runEvidenceList(session: string, options: {
18
+ claimId: string;
19
+ format?: string;
20
+ }): Promise<number>;
21
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +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,CAkJjB;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"}
@@ -0,0 +1,187 @@
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';
5
+ 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 ─────────────────────────────────────────────────
11
+ export async function runEvidenceSearch(session, options) {
12
+ 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);
16
+ if (!claim) {
17
+ console.log(JSON.stringify(createErrorEnvelope('CLAIM_NOT_FOUND', `Claim ${options.claimId} not found`), null, 2));
18
+ return 1;
19
+ }
20
+ const candidates = searchCandidates(sessionDir, claim.text);
21
+ const outputFormat = options.format || 'json';
22
+ if (outputFormat === 'md') {
23
+ console.log(`## Evidence Candidates for ${options.claimId}\n`);
24
+ if (candidates.length === 0) {
25
+ 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('');
33
+ }
34
+ }
35
+ else {
36
+ console.log(JSON.stringify(createSuccessEnvelope({ candidates }), null, 2));
37
+ }
38
+ return 0;
39
+ }
40
+ export async function runEvidenceVerify(session, options) {
41
+ 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
+ // Verify content hash
77
+ const { createHash } = await import('crypto');
78
+ const slice = content.slice(evInput.charStart, evInput.charEnd);
79
+ const computedHash = createHash('sha256').update(slice).digest('hex');
80
+ const providedHash = evInput.contentHash || computedHash;
81
+ if (providedHash !== computedHash) {
82
+ console.log(JSON.stringify(createErrorEnvelope('HASH_MISMATCH', 'Content hash mismatch — quote does not match source'), null, 2));
83
+ return 1;
84
+ }
85
+ // All checks passed — write evidence
86
+ const now = Date.now();
87
+ const evId = nextEvidenceId(sessionDir);
88
+ const evidence = {
89
+ id: evId,
90
+ claimId: options.claimId,
91
+ resultUrl: evInput.resultUrl,
92
+ quote: evInput.quote,
93
+ charStart: evInput.charStart,
94
+ charEnd: evInput.charEnd,
95
+ contentHash: computedHash,
96
+ retrievedAt: now,
97
+ sourceClusterId: undefined, // computed during policy-aggregate
98
+ };
99
+ const existingEvs = loadEvidences(sessionDir);
100
+ saveEvidences(sessionDir, [...existingEvs, evidence]);
101
+ // Write verdict alongside evidence
102
+ const vdId = nextVerdictId(sessionDir);
103
+ const verdict = {
104
+ id: vdId,
105
+ claimId: options.claimId,
106
+ evidenceIds: [evId],
107
+ stance: options.stance,
108
+ confidence: options.confidence,
109
+ reason: options.reason,
110
+ createdAt: now,
111
+ };
112
+ const existingVds = loadVerdicts(sessionDir);
113
+ saveVerdicts(sessionDir, [...existingVds, verdict]);
114
+ // Update claim status to verifying
115
+ claim.status = 'verifying';
116
+ const { saveClaims } = await import('../claims/store.js');
117
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
118
+ saveClaims(sessionDir, claims);
119
+ // If --complete, trigger policy aggregation
120
+ let review = undefined;
121
+ if (options.complete) {
122
+ // Gather all evidence and verdicts for this claim
123
+ const allEvs = loadEvidences(sessionDir).filter(e => e.claimId === options.claimId);
124
+ const allVds = loadVerdicts(sessionDir).filter(v => v.claimId === options.claimId);
125
+ // Compute source cluster IDs on demand
126
+ for (const ev of allEvs) {
127
+ if (!ev.sourceClusterId) {
128
+ ev.sourceClusterId = computeSourceClusterId(ev);
129
+ }
130
+ }
131
+ const input = {
132
+ claimId: options.claimId,
133
+ riskLevel: claim.riskLevel,
134
+ verdicts: allVds,
135
+ evidences: allEvs,
136
+ };
137
+ const result = aggregateClaim(input);
138
+ // Update claim status
139
+ claim.status = 'reviewed';
140
+ saveClaims(sessionDir, claims);
141
+ // Persist review
142
+ const existingReviews = loadReviews(sessionDir);
143
+ saveReviews(sessionDir, [...existingReviews, result]);
144
+ review = result;
145
+ }
146
+ const output = {
147
+ evidence: { id: evId, claimId: options.claimId },
148
+ verdict: { id: vdId, stance: options.stance },
149
+ ...(review ? { review: { claimId: review.claimId, decision: review.decision, matchedRule: review.matchedRule, autoPass: review.autoPass } } : {}),
150
+ };
151
+ const outputFormat = options.format || 'json';
152
+ if (outputFormat === 'md') {
153
+ console.log('## Evidence-Verify Result\n');
154
+ console.log(`**Evidence**: ${evId} → ${options.claimId}`);
155
+ console.log(`**Verdict**: ${vdId} — ${options.stance}`);
156
+ if (review) {
157
+ console.log(`**Review**: ${review.decision} (rule: ${review.matchedRule}, autoPass: ${review.autoPass})`);
158
+ }
159
+ }
160
+ else {
161
+ console.log(JSON.stringify(createSuccessEnvelope(output), null, 2));
162
+ }
163
+ return 0;
164
+ }
165
+ // ── evidence-list ───────────────────────────────────────────────────
166
+ export async function runEvidenceList(session, options) {
167
+ const sessionDir = resolveSessionPath(session);
168
+ const evidences = loadEvidences(sessionDir).filter(e => e.claimId === options.claimId);
169
+ const outputFormat = options.format || 'json';
170
+ if (outputFormat === 'md') {
171
+ if (evidences.length === 0) {
172
+ console.log('No evidence found for this claim.');
173
+ return 0;
174
+ }
175
+ console.log('## Evidence\n');
176
+ console.log('| ID | Source | Quote |');
177
+ console.log('|----|--------|-------|');
178
+ for (const e of evidences) {
179
+ console.log(`| ${e.id} | ${e.resultUrl} | ${e.quote.slice(0, 60)}... |`);
180
+ }
181
+ }
182
+ else {
183
+ console.log(JSON.stringify(createSuccessEnvelope({ evidences }), null, 2));
184
+ }
185
+ return 0;
186
+ }
187
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/commands/evidence.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes