contradiction-mcp 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -41
- package/dist/analysis/claimMatcher.d.ts +1 -0
- package/dist/analysis/claimMatcher.js +36 -11
- package/dist/analysis/claimMatcher.js.map +1 -1
- package/dist/config/env.js +1 -1
- package/dist/connectors/base/connectorUtils.d.ts +2 -1
- package/dist/connectors/base/connectorUtils.js.map +1 -1
- package/dist/connectors/document/documentConnector.js +89 -20
- package/dist/connectors/document/documentConnector.js.map +1 -1
- package/dist/connectors/syncService.js +4 -1
- package/dist/connectors/syncService.js.map +1 -1
- package/dist/connectors/website/websiteConnector.js.map +1 -1
- package/dist/discovery/candidateGenerator.js +2 -4
- package/dist/discovery/candidateGenerator.js.map +1 -1
- package/dist/discovery/similarityIndex.js +2 -1
- package/dist/discovery/similarityIndex.js.map +1 -1
- package/dist/intelligence/entityResolver.d.ts +1 -0
- package/dist/intelligence/entityResolver.js +8 -0
- package/dist/intelligence/entityResolver.js.map +1 -1
- package/dist/scripts/comprehensiveVerification.js +2 -2
- package/dist/scripts/realWorldE2ETest.d.ts +1 -0
- package/dist/scripts/realWorldE2ETest.js +125 -0
- package/dist/scripts/realWorldE2ETest.js.map +1 -0
- package/dist/server.js +624 -814
- package/dist/server.js.map +1 -1
- package/dist/storage/database.d.ts +4 -0
- package/dist/storage/database.js +20 -0
- package/dist/storage/database.js.map +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -9,16 +9,17 @@
|
|
|
9
9
|
[](https://nodejs.org/)
|
|
10
10
|
[](https://www.typescriptlang.org/)
|
|
11
11
|
[](https://modelcontextprotocol.io/)
|
|
12
|
-
[](tests)
|
|
13
13
|
[](package.json)
|
|
14
14
|
[](https://prettier.io/)
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
17
|
<a href="#the-problem-it-solves">Problem</a> •
|
|
18
18
|
<a href="#core-capabilities">Capabilities</a> •
|
|
19
|
+
<a href="#limitations--known-edge-cases">Limitations</a> •
|
|
19
20
|
<a href="#system-architecture">Architecture</a> •
|
|
20
21
|
<a href="#one-command-quickstart-all-ides">Quickstart</a> •
|
|
21
|
-
<a href="#mcp-interface-
|
|
22
|
+
<a href="#mcp-interface-12-canonical-tools-4-resources-2-prompts">Tools Reference</a> •
|
|
22
23
|
<a href="#step-by-step-hands-on-tutorial">Tutorials</a> •
|
|
23
24
|
<a href="#documentation-index">Docs</a> •
|
|
24
25
|
<a href="#license">License</a>
|
|
@@ -28,6 +29,14 @@
|
|
|
28
29
|
|
|
29
30
|
---
|
|
30
31
|
|
|
32
|
+
> [!NOTE]
|
|
33
|
+
>
|
|
34
|
+
> ### Project Status: Active Development (v0.3.0)
|
|
35
|
+
>
|
|
36
|
+
> **Contradiction MCP is currently under active development.** Core multi-format document ingestion (Markdown, RFC822 `.eml`, OpenXML `.docx`, and JSON) and cross-document contradiction discovery are operational and verified. Heuristic classifiers, deep JSON scoping, and public APIs are actively evolving prior to v1.0.0.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
31
40
|
## The Problem It Solves
|
|
32
41
|
|
|
33
42
|
Modern engineering ecosystems rely on fragmented, uncoordinated sources of truth:
|
|
@@ -53,18 +62,42 @@ When these systems diverge—for example, a Kubernetes manifest deploying Node.j
|
|
|
53
62
|
- **Deterministic SemVer Mathematics**: Employs rigorous version range satisfaction algebra rather than naive string comparisons.
|
|
54
63
|
- **Multi-Source Ingestion Pipeline**:
|
|
55
64
|
- **GitHub Connector**: Analyzes runtime engines, Dockerfiles, GitHub Actions workflows, and READMEs.
|
|
56
|
-
- **Document Connector**: Extracts structured claims from JSON, YAML, Markdown, CSV, TXT, and
|
|
65
|
+
- **Document Connector**: Extracts structured claims from JSON, YAML, Markdown, CSV, TXT, RFC822 (`.eml`), and OpenXML (`.docx`) documents with exact page- and line-numbered evidence citations.
|
|
57
66
|
- **Public Website Connector**: Web crawler hardened with multi-layer SSRF protection against loopback, private IPv4/IPv6 CIDRs, and cloud metadata endpoints (`169.254.169.254`).
|
|
58
67
|
- **Scoring & Advisory Intelligence**:
|
|
59
68
|
- `AuthorityScorer`: Ranks conflicting claims based on source hierarchy and origin credibility.
|
|
60
69
|
- `FreshnessScorer`: Applies exponential half-life time decay models.
|
|
61
|
-
|
|
70
|
+
* `EvidenceEvaluator`: Quantifies citation directness and snippet quality.
|
|
62
71
|
- `ResolutionAdvisor`: Generates actionable resolution recommendations without mutating state without operator consent.
|
|
63
72
|
- **Review & Resolution Workflows**: Full lifecycle transitions (`OPEN` → `REVIEWED` → `RESOLVED` / `DISMISSED` → `REOPENED`) backed by append-only audit histories.
|
|
64
73
|
- **Dual Transport Architecture**: Operates over standard **Stdio** (for Claude Desktop, Google Antigravity, Cursor) or **Streamable HTTP/SSE** with Bearer API key authentication and sliding rate limiting.
|
|
65
74
|
|
|
66
75
|
---
|
|
67
76
|
|
|
77
|
+
## Limitations & Known Edge Cases
|
|
78
|
+
|
|
79
|
+
While Contradiction MCP is battle-tested on cross-document and cross-source consistency audits, users should be aware of current development limitations:
|
|
80
|
+
|
|
81
|
+
1. **Intra-Manifest Hierarchical Collisions (Deeply Nested JSON/YAML)**:
|
|
82
|
+
- **Behavior**: Key-value extraction flattens object hierarchies into leaf tokens. In complex single manifests (such as Kubernetes deployments), parameters sharing identical leaf keys across distinct blocks (e.g., `readinessProbe.initialDelaySeconds` vs `livenessProbe.initialDelaySeconds`, or container `resources.requests.cpu` vs `resources.limits.cpu`) can trigger intra-file candidate comparisons and false-positive warnings.
|
|
83
|
+
- **Mitigation**: Focus analysis on cross-document source verification or filter by external source boundaries. Hierarchical path-aware namespace isolation is currently under active development.
|
|
84
|
+
|
|
85
|
+
2. **Heading & Brand Entity Extraction**:
|
|
86
|
+
- **Behavior**: Document headings containing version-like keywords (e.g., `"2. Node.js V8 Engine Upgrade"`) may occasionally extract the engine brand or section numeral as a software version string, triggering local version mismatch warnings against runtime version specifications.
|
|
87
|
+
- **Mitigation**: Structure specifications using standard tables, key-value mappings, or explicit parameter declarations.
|
|
88
|
+
|
|
89
|
+
3. **Static Specifications vs Live Network State**:
|
|
90
|
+
- **Behavior**: The engine analyzes declared assertions across files, repositories, and documentation. It does not probe live runtime sockets, ephemeral cloud infrastructure, or running processes unless synced as structured state documents.
|
|
91
|
+
|
|
92
|
+
4. **Candidate Pair Scalability on Giant Monoliths**:
|
|
93
|
+
- **Behavior**: Files producing >1,000 claims increase pairwise combinations quadratically ($O(N^2)$ worst-case prior to similarity filtering).
|
|
94
|
+
- **Mitigation**: Bounded file size guards (`MAX_FILE_SIZE_BYTES`, default 10MB) prevent memory exhaust. Partition giant monoliths into modular architecture specs.
|
|
95
|
+
|
|
96
|
+
5. **Language & Syntax Scope**:
|
|
97
|
+
- **Behavior**: Extraction heuristics, unit normalizers (e.g., `GB`, `MB`, `ms`), and predicate patterns are currently tuned for English documentation and standard DevOps/software configuration keys. Multi-lingual natural language extraction without standard keying is planned for future releases.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
68
101
|
## System Architecture
|
|
69
102
|
|
|
70
103
|
### Visual Dataflow
|
|
@@ -81,7 +114,7 @@ flowchart TD
|
|
|
81
114
|
subgraph Protocol["MCP Protocol Layer"]
|
|
82
115
|
StdioT["StdioServerTransport"]
|
|
83
116
|
HttpT["StreamableHttpTransport"]
|
|
84
|
-
Router["
|
|
117
|
+
Router["12 Canonical Tools | 4 Resources | 2 Prompts"]
|
|
85
118
|
end
|
|
86
119
|
|
|
87
120
|
subgraph Core["Analysis & Intelligence Engine"]
|
|
@@ -252,33 +285,29 @@ Connect distributed agents or team members to a centralized server daemon:
|
|
|
252
285
|
|
|
253
286
|
---
|
|
254
287
|
|
|
255
|
-
## MCP Interface:
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
|
262
|
-
|
|
|
263
|
-
| `
|
|
264
|
-
| `
|
|
265
|
-
| `
|
|
266
|
-
| `
|
|
267
|
-
| `
|
|
268
|
-
| `
|
|
269
|
-
| `
|
|
270
|
-
| `
|
|
271
|
-
| `
|
|
272
|
-
| `
|
|
273
|
-
| `
|
|
274
|
-
| `
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
| `sync_document` | Ingests local JSON, YAML, MD, CSV, TXT, or PDF files | `filePath`, `subject`, `sourceRole` |
|
|
279
|
-
| `sync_website` | Ingests web URL with pre-flight SSRF protection | `url`, `subject`, `maxDepth` |
|
|
280
|
-
| `sync_source` | Synchronizes an existing registered source by ID | `sourceId` |
|
|
281
|
-
| `sync_sources` | Bounded-concurrency batch synchronization | `sourceIds` |
|
|
288
|
+
## MCP Interface: 12 Canonical Tools, 4 Resources, 2 Prompts
|
|
289
|
+
|
|
290
|
+
Contradiction MCP exposes **12 canonical tools** engineered to the highest specification standards (Glama Tool Definition Quality Score **5.0 / 5.0 Grade A**). Every tool strictly follows `verb_noun` nomenclature, provides rich typed schemas, and isolates distinct operational domains.
|
|
291
|
+
|
|
292
|
+
### Active Canonical MCP Tools (12)
|
|
293
|
+
|
|
294
|
+
| Tool Name | Operational Domain | Description | Key Arguments |
|
|
295
|
+
| :---------------------- | :----------------- | :------------------------------------------------------------------------------------------ | :------------------------------------------------------------------- |
|
|
296
|
+
| `check_health` | Diagnostics | Verifies server runtime health, database connectivity, and active connector health | `{}` |
|
|
297
|
+
| `list_sources` | Discovery | Lists registered knowledge sources and connector types with pagination | `type`, `limit`, `offset` |
|
|
298
|
+
| `test_connection` | Connectivity | Validates credentials, permissions, and network reachability without persisting data | `type`, `target`, `credentials` |
|
|
299
|
+
| `sync_source` | Ingestion | Unified ingestion engine for files, Markdown, Word (.docx), JSON, URLs, or Git repositories | `sourceId` OR (`filePath` / `url` / `owner`+`repo`), `subject` |
|
|
300
|
+
| `scan_contradictions` | Intelligence | Scans the knowledge base, a source, or a claim for logical/semantic contradictions | `sourceId`, `claimId`, `limit`, `minConfidence`, `includeDismissed` |
|
|
301
|
+
| `analyze_claim_pair` | Intelligence | Performs pairwise contradiction and contextual relationship analysis between two claims | `claimIdA`, `claimIdB` |
|
|
302
|
+
| `list_claims` | Knowledge Base | Lists extracted factual claims with multi-field filtering and pagination | `sourceId`, `subject`, `predicate`, `environment`, `limit`, `offset` |
|
|
303
|
+
| `get_claim` | Knowledge Base | Retrieves factual claim details, contextual metadata, and audit supersession history | `claimId` |
|
|
304
|
+
| `list_contradictions` | Lifecycle | Queries detected contradictions filtered by lifecycle status, severity, and confidence | `status`, `severity`, `minConfidence`, `limit`, `offset` |
|
|
305
|
+
| `get_contradiction` | Lifecycle | Retrieves full contradiction state, conflicting claims, and contextual explanation | `contradictionId` |
|
|
306
|
+
| `advise_resolution` | Advisory | Evaluates source authority, freshness, and evidence quality to recommend canonical truth | `contradictionId` |
|
|
307
|
+
| `resolve_contradiction` | Resolution | Executes lifecycle transitions (`REVIEW`, `RESOLVE`, `DISMISS`, `REOPEN`) with audit trail | `contradictionId`, `action`, `actor`, `reason`, `canonicalClaimId` |
|
|
308
|
+
|
|
309
|
+
> [!TIP]
|
|
310
|
+
> **Full Backwards Compatibility**: Legacy tool names (`health_check`, `sync_document`, `sync_website`, `sync_github_repository`, `scan_for_contradictions`, `scan_claim_for_contradictions`, `scan_source_for_contradictions`, `explain_claim_relationship`, `review_contradiction`, `dismiss_contradiction`, `reopen_contradiction`, `get_contradiction_history`, `get_claim_history`, `list_connectors`, `test_github_connection`, `sync_sources`) continue to function without error via automatic request routing and parameter translation.
|
|
282
311
|
|
|
283
312
|
### Active MCP Resources (4)
|
|
284
313
|
|
|
@@ -297,7 +326,7 @@ Connect distributed agents or team members to a centralized server daemon:
|
|
|
297
326
|
## Example Tool Payloads & Responses
|
|
298
327
|
|
|
299
328
|
<details>
|
|
300
|
-
<summary><b>1. Ingesting a Document (<code>sync_document</code>)</b></summary>
|
|
329
|
+
<summary><b>1. Ingesting a Document (<code>sync_source</code> / legacy: <code>sync_document</code>)</b></summary>
|
|
301
330
|
|
|
302
331
|
**Request**:
|
|
303
332
|
|
|
@@ -325,7 +354,7 @@ Connect distributed agents or team members to a centralized server daemon:
|
|
|
325
354
|
</details>
|
|
326
355
|
|
|
327
356
|
<details>
|
|
328
|
-
<summary><b>2. Scanning for Contradictions (<code>scan_for_contradictions</code>)</b></summary>
|
|
357
|
+
<summary><b>2. Scanning for Contradictions (<code>scan_contradictions</code> / legacy: <code>scan_for_contradictions</code>)</b></summary>
|
|
329
358
|
|
|
330
359
|
**Request**:
|
|
331
360
|
|
|
@@ -414,20 +443,20 @@ async function main() {
|
|
|
414
443
|
const client = new Client({ name: "tester", version: "1.0.0" }, { capabilities: {} });
|
|
415
444
|
await client.connect(new StdioClientTransport({ command: "node", args: ["dist/index.js"] }));
|
|
416
445
|
|
|
417
|
-
// Ingest Deployment Spec (role: deployment)
|
|
446
|
+
// Ingest Deployment Spec (canonical: sync_source, role: deployment)
|
|
418
447
|
await client.callTool({
|
|
419
|
-
name: "
|
|
448
|
+
name: "sync_source",
|
|
420
449
|
arguments: { filePath: "/tmp/deployment_spec.json", subject: "api-server", sourceRole: "deployment", environment: "production" }
|
|
421
450
|
});
|
|
422
451
|
|
|
423
|
-
// Ingest Architecture Guide (role: documentation)
|
|
452
|
+
// Ingest Architecture Guide (canonical: sync_source, role: documentation)
|
|
424
453
|
await client.callTool({
|
|
425
|
-
name: "
|
|
454
|
+
name: "sync_source",
|
|
426
455
|
arguments: { filePath: "/tmp/architecture_guide.md", subject: "api-server", sourceRole: "documentation", environment: "production" }
|
|
427
456
|
});
|
|
428
457
|
|
|
429
|
-
// Automatically scan knowledge base
|
|
430
|
-
const scan = await client.callTool({ name: "
|
|
458
|
+
// Automatically scan knowledge base (canonical: scan_contradictions)
|
|
459
|
+
const scan = await client.callTool({ name: "scan_contradictions", arguments: {} });
|
|
431
460
|
console.log("\nDISCOVERED CONTRADICTIONS:\n", JSON.stringify(JSON.parse(scan.content[0].text), null, 2));
|
|
432
461
|
|
|
433
462
|
await client.close();
|
|
@@ -445,7 +474,7 @@ main();
|
|
|
445
474
|
| `npm run build` | Compiles TypeScript and packages SQL migration scripts |
|
|
446
475
|
| `npm start` | Launches compiled production server (`node dist/index.js`) |
|
|
447
476
|
| `npm run dev` | Runs development server with on-the-fly TypeScript execution |
|
|
448
|
-
| `npm test` | Runs complete Vitest test suite (**
|
|
477
|
+
| `npm test` | Runs complete Vitest test suite (**173 tests across 24 files**) |
|
|
449
478
|
| `npm run test:coverage` | Generates detailed V8 code coverage report |
|
|
450
479
|
| `npm run verify` | Runs all 62 end-to-end verification gates (protocol, security, heuristics) |
|
|
451
480
|
| `npm run demo` | Executes live 17-step end-to-end demonstration scenario |
|
|
@@ -512,6 +541,31 @@ docker compose logs -f
|
|
|
512
541
|
|
|
513
542
|
---
|
|
514
543
|
|
|
544
|
+
## Release History
|
|
545
|
+
|
|
546
|
+
### v0.3.0 (2026-09-14)
|
|
547
|
+
|
|
548
|
+
- **12 Canonical Tools Architecture**: Streamlined tool interface into 12 orthogonal, strictly typed `verb_noun` tools (`check_health`, `list_sources`, `test_connection`, `sync_source`, `scan_contradictions`, `analyze_claim_pair`, `list_claims`, `get_claim`, `list_contradictions`, `get_contradiction`, `advise_resolution`, `resolve_contradiction`).
|
|
549
|
+
- **Zero-Breaking Backwards Compatibility Routing**: Added a transparent request router shim ensuring all legacy tool names continue to function seamlessly with argument translation.
|
|
550
|
+
- **Enhanced OpenXML (.docx) Ingestion**: Direct extraction of table structures (`<w:tr>`, `<w:tc>`) as key-value assertions with XML stripping to eliminate duplicate claims.
|
|
551
|
+
- **Multi-Format Cross-Document Consistency**: Verified cross-referencing and contradiction discovery across Markdown runbooks, JSON configs, and Word architecture documents.
|
|
552
|
+
- **Parametric Claim Queries**: Extended SQLite database layer with multi-field filtering (`predicate`, `environment`, `valueType`, `limit`, `offset`).
|
|
553
|
+
|
|
554
|
+
### v0.2.1 (2026-09-14)
|
|
555
|
+
|
|
556
|
+
- **22 Active MCP Tools**: Full interface alignment including `scan_source_for_contradictions` for targeted source discovery.
|
|
557
|
+
- **Section Heading Namespacing in Markdown**: Hierarchical markdown headings (`##` to `######`) namespace nested properties (e.g. `### API Gateway` $\rightarrow$ `api_gateway_port`), preventing intra-document collisions while matching nested JSON configurations.
|
|
558
|
+
- **Precision Predicate Similarity Guard**: Enhanced `claimMatcher` requiring $\ge 50\%$ token overlap on multi-token phrases, eliminating false matches between distinct properties sharing generic suffixes (`node_version` vs `cache_version`, `runtime_node_version` vs `runtime_python_version`).
|
|
559
|
+
- **Scoped JSON Extraction**: Streamlined `flattenJsonObject` to emit unique composite paths, avoiding leaf key duplication explosions.
|
|
560
|
+
- **Numeric Claim Validation**: Excluded valid single-digit numbers (`4`, `3`) from short-value extraction warnings.
|
|
561
|
+
- **Multi-Format Ingestion**: End-to-end verified across Markdown, JSON, OpenXML `.docx`, and Kubernetes manifests.
|
|
562
|
+
|
|
563
|
+
### v0.2.0 (2026-09-13)
|
|
564
|
+
|
|
565
|
+
- Initial public release with 21 core MCP tools, SQLite WAL persistence, GitHub, Document, and Website ingestion connectors.
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
515
569
|
## Documentation Index
|
|
516
570
|
|
|
517
571
|
- [Architecture Guide](docs/architecture.md) — Layered design, protocol topology, and component contracts.
|
|
@@ -34,6 +34,7 @@ export declare function calculateLevenshteinSimilarity(s1: string, s2: string):
|
|
|
34
34
|
* Combined similarity score leveraging token overlap and string distance.
|
|
35
35
|
*/
|
|
36
36
|
export declare function calculateCompositeSimilarity(strA: string, strB: string): number;
|
|
37
|
+
export declare function stripWrapperPrefix(pred: string): string;
|
|
37
38
|
export declare function arePredicateSynonyms(predA: string, predB: string): boolean;
|
|
38
39
|
export declare function getCanonicalPredicate(predicate: string): string;
|
|
39
40
|
export declare const SYSTEM_LEVEL_PREDICATES: Set<string>;
|
|
@@ -85,7 +85,14 @@ export function calculateCompositeSimilarity(strA, strB) {
|
|
|
85
85
|
const inclusionScore = minLen / maxLen;
|
|
86
86
|
return Math.max(tokenSim, editSim, inclusionScore * 0.9);
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
// For multi-token phrases, edit distance can be misleading if tokens differ:
|
|
89
|
+
// e.g. 'node version' vs 'cache version' has editSim 0.69 even though 'node' != 'cache'.
|
|
90
|
+
// Only use editSim if token overlap is already substantial (>= 0.5).
|
|
91
|
+
if (tokenSim >= 0.5) {
|
|
92
|
+
const editSim = calculateLevenshteinSimilarity(normA, normB);
|
|
93
|
+
return Math.max(tokenSim, editSim);
|
|
94
|
+
}
|
|
95
|
+
return tokenSim;
|
|
89
96
|
}
|
|
90
97
|
const PREDICATE_SYNONYM_GROUPS = [
|
|
91
98
|
new Set(['port', 'listen_port', 'server_port', 'http_port', 'service_port']),
|
|
@@ -100,18 +107,29 @@ const PREDICATE_SYNONYM_GROUPS = [
|
|
|
100
107
|
'timeout_ms',
|
|
101
108
|
]),
|
|
102
109
|
new Set(['db_engine', 'database_type', 'database_engine', 'db_type', 'database', 'db_backend']),
|
|
103
|
-
new Set(['
|
|
104
|
-
new Set(['
|
|
110
|
+
new Set(['db_version', 'database_version', 'database_db_version', 'db_ver']),
|
|
111
|
+
new Set(['node_version', 'node', 'nodejs_version', 'node_ver', 'runtime_node_version']),
|
|
112
|
+
new Set(['python_version', 'python', 'python_ver', 'runtime_python_version']),
|
|
105
113
|
new Set(['memory', 'ram', 'min_ram', 'minimum_ram', 'min_memory', 'memory_limit']),
|
|
106
114
|
new Set(['cpu', 'cores', 'min_cpu', 'cpu_cores']),
|
|
107
115
|
];
|
|
116
|
+
export function stripWrapperPrefix(pred) {
|
|
117
|
+
const norm = pred.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
118
|
+
return norm.replace(/^(runtime|spec|config|configuration|settings|env|metadata|properties|parameters)_+/, '');
|
|
119
|
+
}
|
|
108
120
|
export function arePredicateSynonyms(predA, predB) {
|
|
109
121
|
const a = predA.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
110
122
|
const b = predB.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
111
123
|
if (a === b)
|
|
112
124
|
return true;
|
|
125
|
+
const strippedA = stripWrapperPrefix(a);
|
|
126
|
+
const strippedB = stripWrapperPrefix(b);
|
|
127
|
+
if (strippedA === strippedB && strippedA.length > 0)
|
|
128
|
+
return true;
|
|
113
129
|
for (const group of PREDICATE_SYNONYM_GROUPS) {
|
|
114
|
-
|
|
130
|
+
const hasA = group.has(a) || group.has(strippedA);
|
|
131
|
+
const hasB = group.has(b) || group.has(strippedB);
|
|
132
|
+
if (hasA && hasB)
|
|
115
133
|
return true;
|
|
116
134
|
}
|
|
117
135
|
return false;
|
|
@@ -227,14 +245,21 @@ export class ClaimMatcher {
|
|
|
227
245
|
if (entityMatch.isMatch) {
|
|
228
246
|
subjectSimilarity = Math.max(subjectSimilarity, entityMatch.confidence);
|
|
229
247
|
}
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
|
|
248
|
+
const tokensA = normPredA.split(' ').filter(Boolean);
|
|
249
|
+
const tokensB = normPredB.split(' ').filter(Boolean);
|
|
250
|
+
const leafA = tokensA[tokensA.length - 1] || normPredA;
|
|
251
|
+
const leafB = tokensB[tokensB.length - 1] || normPredB;
|
|
252
|
+
const isSynonym = arePredicateSynonyms(claimA.predicate, claimB.predicate);
|
|
234
253
|
let predicateSimilarity = calculateCompositeSimilarity(claimA.predicate, claimB.predicate);
|
|
235
|
-
// Guard against
|
|
236
|
-
|
|
237
|
-
|
|
254
|
+
// Guard against cross-subsystem false matches where two predicates share only
|
|
255
|
+
// a generic leaf (e.g. 'port', 'version') but have different subsystem prefixes
|
|
256
|
+
// (e.g. 'api_gateway_port' vs 'cache_port', 'node_version' vs 'cache_version').
|
|
257
|
+
if (!isSynonym) {
|
|
258
|
+
const prefixA = tokensA.slice(0, -1).join(' ');
|
|
259
|
+
const prefixB = tokensB.slice(0, -1).join(' ');
|
|
260
|
+
if (prefixA && prefixB && prefixA !== prefixB && leafA === leafB) {
|
|
261
|
+
predicateSimilarity = 0;
|
|
262
|
+
}
|
|
238
263
|
}
|
|
239
264
|
let matchDetail = '';
|
|
240
265
|
if (isSynonym) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimMatcher.js","sourceRoot":"","sources":["../../src/analysis/claimMatcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claimMatcher.js","sourceRoot":"","sources":["../../src/analysis/claimMatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/config/env.js
CHANGED
|
@@ -27,7 +27,7 @@ const EnvSchema = z.object({
|
|
|
27
27
|
DATABASE_PATH: z.string().min(1).default(getDefaultDatabasePath()),
|
|
28
28
|
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
29
29
|
SERVER_NAME: z.string().min(1).default('contradiction-mcp'),
|
|
30
|
-
SERVER_VERSION: z.string().min(1).default('0.
|
|
30
|
+
SERVER_VERSION: z.string().min(1).default('0.3.0'),
|
|
31
31
|
GITHUB_TOKEN: z.string().optional(),
|
|
32
32
|
MCP_TRANSPORT: z.enum(['stdio', 'http']).default('stdio'),
|
|
33
33
|
HTTP_HOST: z.string().default('0.0.0.0'),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ClaimValueType } from '../../domain/entities/claim.js';
|
|
1
2
|
/**
|
|
2
3
|
* Sanitizes an error message or string to ensure tokens, secrets,
|
|
3
4
|
* and sensitive authentication headers are never leaked.
|
|
@@ -28,4 +29,4 @@ export declare function hashContent(content: string): string;
|
|
|
28
29
|
* Heuristically infers the most accurate ClaimValueType from predicate and value
|
|
29
30
|
* (e.g. quantity, version, price, date, status, etc.).
|
|
30
31
|
*/
|
|
31
|
-
export declare function inferClaimValueType(predicate: string, value: string):
|
|
32
|
+
export declare function inferClaimValueType(predicate: string, value: string): ClaimValueType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectorUtils.js","sourceRoot":"","sources":["../../../src/connectors/base/connectorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"connectorUtils.js","sourceRoot":"","sources":["../../../src/connectors/base/connectorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI;SACR,OAAO,CAAC,+CAA+C,EAAE,yBAAyB,CAAC;SACnF,OAAO,CAAC,4BAA4B,EAAE,mBAAmB,CAAC;SAC1D,OAAO,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;SACxD,OAAO,CAAC,gCAAgC,EAAE,yBAAyB,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,UAAkB;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU;SACtB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,gBAAwB,EACxB,QAAgB,EAChB,SAAiB,EACjB,WAAoB;IAEpB,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,QAAQ;SACtB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,UAAU,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;IAErD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,KAAa;IAClE,MAAM,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAE/C,aAAa;IACb,IACE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,yCAAyC,CAAC,IAAI,CAAC,GAAG,CAAC;QACnD,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC;QACtC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EACnC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sBAAsB;IACtB,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,sEAAsE,CAAC,IAAI,CAAC,GAAG,CAAC,EAChF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU;IACV,IACE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1C,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6CAA6C;IAC7C,IACE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,sEAAsE,CAAC,IAAI,CAAC,GAAG,CAAC,EAChF,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,sBAAsB;IACtB,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAChF,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAClE,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -145,18 +145,44 @@ export class DocumentConnector {
|
|
|
145
145
|
encoding: 'utf-8',
|
|
146
146
|
maxBuffer: this.maxFileSizeBytes,
|
|
147
147
|
});
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
const extractedLines = [];
|
|
149
|
+
// 1. Extract table rows (<w:tr>) first to capture tabular specifications and key-value matrices
|
|
150
|
+
const tableRows = xml.match(/<w:tr\b[^>]*>.*?<\/w:tr>/gs) || [];
|
|
151
|
+
for (const tr of tableRows) {
|
|
152
|
+
const cells = tr.match(/<w:tc\b[^>]*>.*?<\/w:tc>/gs) || [];
|
|
153
|
+
const cellTexts = cells
|
|
154
|
+
.map((cell) => {
|
|
155
|
+
const tMatches = cell.match(/<w:t\b[^>]*>([^<]*)<\/w:t>/g) || [];
|
|
156
|
+
return tMatches
|
|
157
|
+
.map((t) => t.replace(/<[^>]+>/g, ''))
|
|
158
|
+
.join('')
|
|
159
|
+
.trim();
|
|
160
|
+
})
|
|
161
|
+
.filter(Boolean);
|
|
162
|
+
if (cellTexts.length >= 2) {
|
|
163
|
+
extractedLines.push(`- ${cellTexts[0]}: ${cellTexts.slice(1).join(' ')}`);
|
|
164
|
+
}
|
|
165
|
+
else if (cellTexts.length === 1) {
|
|
166
|
+
extractedLines.push(cellTexts[0]);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// 2. Extract regular paragraphs outside tables
|
|
170
|
+
const xmlWithoutTables = xml.replace(/<w:tbl\b[^>]*>.*?<\/w:tbl>/gs, '');
|
|
171
|
+
const paragraphs = xmlWithoutTables.match(/<w:p\b[^>]*>.*?<\/w:p>/gs) || [];
|
|
172
|
+
for (const p of paragraphs) {
|
|
151
173
|
const textMatches = p.match(/<w:t\b[^>]*>([^<]*)<\/w:t>/g);
|
|
152
174
|
if (!textMatches)
|
|
153
|
-
|
|
154
|
-
|
|
175
|
+
continue;
|
|
176
|
+
const text = textMatches
|
|
155
177
|
.map((t) => t.replace(/<[^>]+>/g, ''))
|
|
156
178
|
.join('')
|
|
157
179
|
.trim();
|
|
158
|
-
|
|
159
|
-
|
|
180
|
+
if (text) {
|
|
181
|
+
extractedLines.push(text);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// De-duplicate contiguous identical lines
|
|
185
|
+
lines = extractedLines.filter((l, idx) => idx === 0 || l !== extractedLines[idx - 1]);
|
|
160
186
|
content = lines.join('\n');
|
|
161
187
|
}
|
|
162
188
|
catch (err) {
|
|
@@ -243,7 +269,6 @@ export class DocumentConnector {
|
|
|
243
269
|
return claims;
|
|
244
270
|
}
|
|
245
271
|
extractFromEmail(lines, filePath, subjectBase, env, scope, sourceRole, claims, observedAt) {
|
|
246
|
-
let emailSubject = '';
|
|
247
272
|
let emailDate = null;
|
|
248
273
|
const bodyLines = [];
|
|
249
274
|
let isBody = false;
|
|
@@ -253,10 +278,6 @@ export class DocumentConnector {
|
|
|
253
278
|
isBody = true;
|
|
254
279
|
continue;
|
|
255
280
|
}
|
|
256
|
-
const subMatch = line.match(/^Subject:\s*(.+)$/i);
|
|
257
|
-
if (subMatch) {
|
|
258
|
-
emailSubject = subMatch[1].trim();
|
|
259
|
-
}
|
|
260
281
|
const dateMatch = line.match(/^Date:\s*(.+)$/i);
|
|
261
282
|
if (dateMatch) {
|
|
262
283
|
const parsed = Date.parse(dateMatch[1]);
|
|
@@ -308,18 +329,34 @@ export class DocumentConnector {
|
|
|
308
329
|
// Fallback
|
|
309
330
|
}
|
|
310
331
|
}
|
|
311
|
-
flattenJsonObject(obj, prefix = '') {
|
|
332
|
+
flattenJsonObject(obj, prefix = '', depth = 0) {
|
|
312
333
|
const entries = [];
|
|
313
334
|
for (const [k, v] of Object.entries(obj)) {
|
|
314
335
|
const compositeKey = prefix ? `${prefix}_${k}` : k;
|
|
315
336
|
if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
|
|
337
|
+
// Always emit the full composite key (namespaced path) for uniqueness.
|
|
338
|
+
// Only emit a bare leaf alias at depth 0 (top-level keys are unambiguous).
|
|
339
|
+
// For nested keys (depth > 0), the bare leaf is ambiguous across sections
|
|
340
|
+
// (e.g. api_gateway.port vs cache.port) and causes false-positive pairs.
|
|
316
341
|
entries.push([compositeKey, v]);
|
|
317
|
-
if (prefix && !entries.some(([exK]) => exK === k)) {
|
|
318
|
-
entries.push([k, v]);
|
|
319
|
-
}
|
|
320
342
|
}
|
|
321
343
|
else if (typeof v === 'object' && v !== null && !Array.isArray(v)) {
|
|
322
|
-
entries.push(...this.flattenJsonObject(v, compositeKey));
|
|
344
|
+
entries.push(...this.flattenJsonObject(v, compositeKey, depth + 1));
|
|
345
|
+
}
|
|
346
|
+
else if (Array.isArray(v)) {
|
|
347
|
+
// For env-style arrays [{name, value}], extract name=value pairs
|
|
348
|
+
for (const item of v) {
|
|
349
|
+
if (typeof item === 'object' &&
|
|
350
|
+
item !== null &&
|
|
351
|
+
'name' in item &&
|
|
352
|
+
'value' in item &&
|
|
353
|
+
typeof item.name === 'string') {
|
|
354
|
+
const envItem = item;
|
|
355
|
+
const leafKey = envItem.name.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
356
|
+
const leafVal = String(envItem.value);
|
|
357
|
+
entries.push([leafKey, leafVal]);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
323
360
|
}
|
|
324
361
|
}
|
|
325
362
|
return entries;
|
|
@@ -406,10 +443,29 @@ export class DocumentConnector {
|
|
|
406
443
|
const directKvPattern = /^\s*(?:[-*+]|\d+\.)?\s*(?:\*{1,2}|`|__)?([a-zA-Z0-9_\s.-]{2,50}?)(?:\*{1,2}|`|__)?\s*[:=]\s*(?:\*{1,2}|`|__)?([^\r\n#]{1,160}?)(?:\*{1,2}|`|__)?(?:\s+#.*)?$/;
|
|
407
444
|
// Markdown table row pattern
|
|
408
445
|
const tablePattern = /^\s*\|\s*([^|:\r\n]{2,50}?)\s*\|\s*([^|\r\n]{1,160}?)\s*\|/;
|
|
446
|
+
let currentSection = null;
|
|
409
447
|
for (let i = 0; i < lines.length; i++) {
|
|
410
448
|
const line = lines[i];
|
|
411
449
|
if (!line || !line.trim())
|
|
412
450
|
continue;
|
|
451
|
+
const headingMatch = line.match(/^(#{2,6})\s+(.+)$/);
|
|
452
|
+
if (headingMatch) {
|
|
453
|
+
const rawHeading = headingMatch[2].trim();
|
|
454
|
+
const genericSections = /^(overview|introduction|getting started|summary|table of contents|notes|appendix|prerequisites|requirements|runtime requirements|deployment profile|deployment requirements|technology stack|service configuration|configuration|specifications|specs|monitoring|security|hardware requirements)/i;
|
|
455
|
+
if (!genericSections.test(rawHeading)) {
|
|
456
|
+
let s = rawHeading
|
|
457
|
+
.toLowerCase()
|
|
458
|
+
.replace(/[^a-z0-9_]/g, '_')
|
|
459
|
+
.replace(/_+/g, '_')
|
|
460
|
+
.replace(/^_|_$/g, '');
|
|
461
|
+
s = s.replace(/_(cluster|layer|service|server|component|section)$/, '');
|
|
462
|
+
currentSection = s;
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
currentSection = null;
|
|
466
|
+
}
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
413
469
|
let key = null;
|
|
414
470
|
let val = null;
|
|
415
471
|
let method = 'markdown_pattern';
|
|
@@ -419,6 +475,15 @@ export class DocumentConnector {
|
|
|
419
475
|
const rawK = directMatch[1].trim();
|
|
420
476
|
const rawV = directMatch[2].trim();
|
|
421
477
|
if (rawK && rawV && !rawK.startsWith('#') && !rawK.includes('---')) {
|
|
478
|
+
const lowerK = rawK.toLowerCase();
|
|
479
|
+
if (lowerK === 'specification' ||
|
|
480
|
+
lowerK === 'property' ||
|
|
481
|
+
lowerK === 'setting' ||
|
|
482
|
+
lowerK === 'key' ||
|
|
483
|
+
lowerK === 'parameter' ||
|
|
484
|
+
lowerK === 'attribute') {
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
422
487
|
key = rawK.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
423
488
|
val = rawV.replace(/^[*`_"'\s]+|[*`_"'\s]+$/g, '').trim();
|
|
424
489
|
const qtyMatch = val.match(/(?:at\s+least|minimum|requires|is)?\s*(\d+(?:\.\d+)?\s*(?:gb|mb|tb|kb|g|m|b|ms|s|sec|seconds|minutes|hours))\b/i);
|
|
@@ -500,11 +565,15 @@ export class DocumentConnector {
|
|
|
500
565
|
}
|
|
501
566
|
}
|
|
502
567
|
if (key && val && key.length > 2 && val.length > 0 && !val.startsWith('http')) {
|
|
503
|
-
|
|
504
|
-
|
|
568
|
+
let finalKey = key;
|
|
569
|
+
if (currentSection && !key.startsWith(currentSection)) {
|
|
570
|
+
finalKey = `${currentSection}_${key}`;
|
|
571
|
+
}
|
|
572
|
+
const externalId = createClaimExternalId('document', filePath, finalKey, String(i + 1));
|
|
573
|
+
const valueType = inferClaimValueType(finalKey, val);
|
|
505
574
|
claims.push({
|
|
506
575
|
subject: subjectBase,
|
|
507
|
-
predicate:
|
|
576
|
+
predicate: finalKey,
|
|
508
577
|
value: val,
|
|
509
578
|
valueType,
|
|
510
579
|
environment: env,
|