@obsidicore/cascade-engine 0.2.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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cascade/checkpoints.d.ts +55 -0
  3. package/dist/cascade/checkpoints.js +123 -0
  4. package/dist/cascade/checkpoints.js.map +1 -0
  5. package/dist/cascade/engine.d.ts +72 -0
  6. package/dist/cascade/engine.js +170 -0
  7. package/dist/cascade/engine.js.map +1 -0
  8. package/dist/cascade/gates.d.ts +46 -0
  9. package/dist/cascade/gates.js +199 -0
  10. package/dist/cascade/gates.js.map +1 -0
  11. package/dist/cascade/research.d.ts +50 -0
  12. package/dist/cascade/research.js +127 -0
  13. package/dist/cascade/research.js.map +1 -0
  14. package/dist/cli.d.ts +19 -0
  15. package/dist/cli.js +165 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/control/kalman.d.ts +53 -0
  18. package/dist/control/kalman.js +83 -0
  19. package/dist/control/kalman.js.map +1 -0
  20. package/dist/control/pid.d.ts +57 -0
  21. package/dist/control/pid.js +95 -0
  22. package/dist/control/pid.js.map +1 -0
  23. package/dist/control/stability.d.ts +42 -0
  24. package/dist/control/stability.js +117 -0
  25. package/dist/control/stability.js.map +1 -0
  26. package/dist/db/index.d.ts +26 -0
  27. package/dist/db/index.js +116 -0
  28. package/dist/db/index.js.map +1 -0
  29. package/dist/db/schema.sql +282 -0
  30. package/dist/graph/amem.d.ts +80 -0
  31. package/dist/graph/amem.js +190 -0
  32. package/dist/graph/amem.js.map +1 -0
  33. package/dist/graph/entities.d.ts +66 -0
  34. package/dist/graph/entities.js +187 -0
  35. package/dist/graph/entities.js.map +1 -0
  36. package/dist/graph/queries.d.ts +48 -0
  37. package/dist/graph/queries.js +176 -0
  38. package/dist/graph/queries.js.map +1 -0
  39. package/dist/hitl/dashboard.d.ts +51 -0
  40. package/dist/hitl/dashboard.js +135 -0
  41. package/dist/hitl/dashboard.js.map +1 -0
  42. package/dist/hitl/interventions.d.ts +36 -0
  43. package/dist/hitl/interventions.js +150 -0
  44. package/dist/hitl/interventions.js.map +1 -0
  45. package/dist/hitl/steering.d.ts +37 -0
  46. package/dist/hitl/steering.js +118 -0
  47. package/dist/hitl/steering.js.map +1 -0
  48. package/dist/index.d.ts +12 -0
  49. package/dist/index.js +701 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/memory/consolidation.d.ts +51 -0
  52. package/dist/memory/consolidation.js +122 -0
  53. package/dist/memory/consolidation.js.map +1 -0
  54. package/dist/memory/ncd.d.ts +40 -0
  55. package/dist/memory/ncd.js +90 -0
  56. package/dist/memory/ncd.js.map +1 -0
  57. package/dist/memory/sm2.d.ts +44 -0
  58. package/dist/memory/sm2.js +119 -0
  59. package/dist/memory/sm2.js.map +1 -0
  60. package/dist/memory/tiers.d.ts +49 -0
  61. package/dist/memory/tiers.js +145 -0
  62. package/dist/memory/tiers.js.map +1 -0
  63. package/dist/server.d.ts +6 -0
  64. package/dist/server.js +6 -0
  65. package/dist/server.js.map +1 -0
  66. package/dist/trust/ingestion.d.ts +38 -0
  67. package/dist/trust/ingestion.js +147 -0
  68. package/dist/trust/ingestion.js.map +1 -0
  69. package/dist/trust/patterns.d.ts +26 -0
  70. package/dist/trust/patterns.js +78 -0
  71. package/dist/trust/patterns.js.map +1 -0
  72. package/dist/trust/scoring.d.ts +39 -0
  73. package/dist/trust/scoring.js +206 -0
  74. package/dist/trust/scoring.js.map +1 -0
  75. package/package.json +58 -0
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Trust Scoring — SpamAssassin-inspired multi-signal composite
3
+ *
4
+ * 6 orthogonal signals → composite 0-1:
5
+ * 1. Source reputation
6
+ * 2. Cross-corroboration
7
+ * 3. Semantic anomaly (distance from topic centroid)
8
+ * 4. Instruction pattern detection
9
+ * 5. Temporal consistency
10
+ * 6. GRADE assessment
11
+ *
12
+ * Thresholds: ≥0.7 auto-admit | 0.3-0.7 quarantine | <0.3 reject
13
+ */
14
+ import { getDb } from '../db/index.js';
15
+ import { detectInstructionPatterns } from './patterns.js';
16
+ // Signal weights — sum to 1.0
17
+ const WEIGHTS = {
18
+ sourceReputation: 0.20,
19
+ crossCorroboration: 0.20,
20
+ semanticAnomaly: 0.15,
21
+ instructionScore: 0.20,
22
+ temporalConsistency: 0.10,
23
+ gradeAssessment: 0.15,
24
+ };
25
+ /**
26
+ * Compute composite trust score for a finding.
27
+ */
28
+ export function scoreTrust(claim, sourceUrl, existingClaims, sourceType) {
29
+ const signals = {
30
+ sourceReputation: scoreSourceReputation(sourceUrl),
31
+ crossCorroboration: scoreCrossCorroboration(claim, existingClaims),
32
+ semanticAnomaly: 1.0, // Default — would need embeddings for real scoring
33
+ instructionScore: scoreInstructionSafety(claim),
34
+ temporalConsistency: 1.0, // Default — would compare timestamps
35
+ gradeAssessment: scoreGradeProxy(sourceType),
36
+ };
37
+ const composite = signals.sourceReputation * WEIGHTS.sourceReputation +
38
+ signals.crossCorroboration * WEIGHTS.crossCorroboration +
39
+ signals.semanticAnomaly * WEIGHTS.semanticAnomaly +
40
+ signals.instructionScore * WEIGHTS.instructionScore +
41
+ signals.temporalConsistency * WEIGHTS.temporalConsistency +
42
+ signals.gradeAssessment * WEIGHTS.gradeAssessment;
43
+ // Novel-vs-malicious detection
44
+ const isNovel = signals.crossCorroboration < 0.3; // Not corroborated
45
+ const isPrecise = signals.instructionScore > 0.7;
46
+ const isTrusted = signals.sourceReputation > 0.5;
47
+ let action;
48
+ let reason;
49
+ if (composite >= 0.7) {
50
+ action = 'admit';
51
+ reason = 'Trust score above admission threshold';
52
+ }
53
+ else if (composite < 0.3) {
54
+ action = 'reject';
55
+ reason = composite < 0.2
56
+ ? 'Trust score critically low — likely injection or unreliable'
57
+ : 'Trust score below rejection threshold';
58
+ }
59
+ else {
60
+ // Quarantine zone — apply novel-vs-malicious heuristic
61
+ if (isNovel && isPrecise && isTrusted) {
62
+ action = 'quarantine';
63
+ reason = 'Contested novelty — novel claim from trusted source. Needs human review.';
64
+ }
65
+ else if (isNovel && !isPrecise && !isTrusted) {
66
+ action = 'reject';
67
+ reason = 'Structural anomaly — novel, imprecise, untrusted. Likely attack vector.';
68
+ }
69
+ else {
70
+ action = 'quarantine';
71
+ reason = 'Moderate trust — quarantined for review';
72
+ }
73
+ }
74
+ // GRADE evidence assessment
75
+ // Based on PRISMA/GRADE framework: 5 downgrade factors, 3 upgrade factors
76
+ // Simplified: composite of source quality, corroboration, and precision
77
+ const gradeLevel = computeGradeLevel(signals, sourceType);
78
+ return { composite, signals, action, gradeLevel, reason, isNovel };
79
+ }
80
+ /**
81
+ * Score source reputation based on domain history.
82
+ */
83
+ function scoreSourceReputation(sourceUrl) {
84
+ if (!sourceUrl)
85
+ return 0.3; // Unknown source gets low baseline
86
+ const db = getDb();
87
+ let domain;
88
+ try {
89
+ domain = new URL(sourceUrl).hostname;
90
+ }
91
+ catch {
92
+ return 0.2; // Invalid URL
93
+ }
94
+ // Check known reputation
95
+ const rep = db.prepare('SELECT reputation_score FROM source_reputation WHERE domain = ?').get(domain);
96
+ if (rep)
97
+ return rep.reputation_score;
98
+ // Known-good domains baseline
99
+ const knownGood = [
100
+ 'arxiv.org', 'github.com', 'stackoverflow.com', 'docs.python.org',
101
+ 'developer.mozilla.org', 'en.wikipedia.org', 'scholar.google.com',
102
+ 'proceedings.neurips.cc', 'openreview.net', 'dl.acm.org',
103
+ 'ieee.org', 'nature.com', 'science.org',
104
+ ];
105
+ if (knownGood.some(d => domain.endsWith(d))) {
106
+ // Initialize reputation
107
+ db.prepare('INSERT OR IGNORE INTO source_reputation (domain, reputation_score) VALUES (?, 0.8)')
108
+ .run(domain);
109
+ return 0.8;
110
+ }
111
+ // Unknown domain — neutral
112
+ db.prepare('INSERT OR IGNORE INTO source_reputation (domain, reputation_score) VALUES (?, 0.5)')
113
+ .run(domain);
114
+ return 0.5;
115
+ }
116
+ /**
117
+ * Score cross-corroboration — how many existing findings support this claim.
118
+ * Simple text overlap heuristic (would use embeddings in production).
119
+ */
120
+ function scoreCrossCorroboration(claim, existingClaims) {
121
+ if (existingClaims.length === 0)
122
+ return 0.3; // First finding — neutral
123
+ // Simple word overlap scoring
124
+ const claimWords = new Set(claim.toLowerCase().split(/\s+/).filter(w => w.length > 4));
125
+ let maxOverlap = 0;
126
+ let corroborations = 0;
127
+ for (const existing of existingClaims) {
128
+ const existingWords = new Set(existing.toLowerCase().split(/\s+/).filter(w => w.length > 4));
129
+ let overlap = 0;
130
+ for (const word of claimWords) {
131
+ if (existingWords.has(word))
132
+ overlap++;
133
+ }
134
+ const overlapRatio = claimWords.size > 0 ? overlap / claimWords.size : 0;
135
+ maxOverlap = Math.max(maxOverlap, overlapRatio);
136
+ if (overlapRatio > 0.3)
137
+ corroborations++;
138
+ }
139
+ // More corroborations = higher score, diminishing returns
140
+ return Math.min(1.0, 0.3 + corroborations * 0.15 + maxOverlap * 0.3);
141
+ }
142
+ /**
143
+ * Score instruction safety — detect prompt injection patterns.
144
+ */
145
+ function scoreInstructionSafety(text) {
146
+ const patterns = detectInstructionPatterns(text);
147
+ return Math.max(0, 1.0 + patterns.totalScore); // patterns.totalScore is negative
148
+ }
149
+ /**
150
+ * Proxy GRADE assessment based on source type.
151
+ */
152
+ function scoreGradeProxy(sourceType) {
153
+ switch (sourceType) {
154
+ case 'primary': return 0.9; // Peer-reviewed, official docs
155
+ case 'secondary': return 0.6; // Blog posts, tutorials
156
+ case 'tertiary': return 0.4; // Forum posts, social media
157
+ default: return 0.5;
158
+ }
159
+ }
160
+ /**
161
+ * Compute GRADE evidence level from trust signals.
162
+ *
163
+ * GRADE framework (simplified):
164
+ * Start at HIGH if primary source, MODERATE if secondary, LOW if tertiary.
165
+ * Downgrade for: low reputation, low corroboration, instruction patterns, low precision.
166
+ * Upgrade for: high corroboration (≥3 sources), high source reputation, dose-response (multiple signals agree).
167
+ */
168
+ function computeGradeLevel(signals, sourceType) {
169
+ // Start level based on source type
170
+ let level = sourceType === 'primary' ? 3 : sourceType === 'secondary' ? 2 : sourceType === 'tertiary' ? 1 : 2;
171
+ // Downgrade factors (GRADE: 5 domains)
172
+ if (signals.sourceReputation < 0.4)
173
+ level--; // Risk of bias
174
+ if (signals.crossCorroboration < 0.4)
175
+ level--; // Inconsistency (not independently confirmed)
176
+ if (signals.instructionScore < 0.8)
177
+ level--; // Imprecision (suspicious content)
178
+ if (signals.gradeAssessment < 0.5)
179
+ level--; // Indirectness
180
+ // Upgrade factors (GRADE: 3 domains)
181
+ if (signals.crossCorroboration > 0.7)
182
+ level++; // Large effect (strong corroboration)
183
+ if (signals.sourceReputation > 0.8)
184
+ level++; // Dose-response (trusted + confirmed)
185
+ // Clamp and map
186
+ level = Math.max(0, Math.min(3, level));
187
+ const grades = ['very_low', 'low', 'moderate', 'high'];
188
+ return grades[level];
189
+ }
190
+ /**
191
+ * Update source reputation based on finding outcomes.
192
+ * Called when human reviews findings (SpamAssassin ham/spam training).
193
+ */
194
+ export function updateSourceReputation(domain, wasAccurate) {
195
+ const db = getDb();
196
+ const direction = wasAccurate ? 0.05 : -0.1; // Penalize inaccuracy more
197
+ db.prepare(`INSERT INTO source_reputation (domain, reputation_score, total_entries)
198
+ VALUES (?, ?, 1)
199
+ ON CONFLICT(domain) DO UPDATE SET
200
+ reputation_score = MAX(0, MIN(1, reputation_score + ?)),
201
+ total_entries = total_entries + 1,
202
+ flagged_entries = flagged_entries + CASE WHEN ? THEN 0 ELSE 1 END,
203
+ last_updated = datetime('now')`)
204
+ .run(domain, 0.5 + direction, direction, wasAccurate ? 1 : 0);
205
+ }
206
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/trust/scoring.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@obsidicore/cascade-engine",
3
+ "version": "0.2.0",
4
+ "description": "Progressive deep research engine with knowledge graph, trust scoring, and self-regulation. MCP server for Claude Code, OpenClaw, or any MCP client.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "cascade-engine": "dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*.js",
12
+ "dist/**/*.d.ts",
13
+ "dist/**/*.js.map",
14
+ "dist/db/schema.sql",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc && node -e \"require('fs').copyFileSync('src/db/schema.sql','dist/db/schema.sql')\"",
20
+ "dev": "tsc --watch",
21
+ "start": "node dist/index.js",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "typecheck": "tsc --noEmit",
25
+ "prepublishOnly": "npm run typecheck && npm test && npm run build"
26
+ },
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.12.0",
29
+ "better-sqlite3": "^11.9.0",
30
+ "zod": "^3.24.0"
31
+ },
32
+ "devDependencies": {
33
+ "@types/better-sqlite3": "^7.6.13",
34
+ "@types/node": "^22.15.0",
35
+ "typescript": "^5.8.0",
36
+ "vitest": "^3.1.0"
37
+ },
38
+ "engines": {
39
+ "node": ">=22.0.0"
40
+ },
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/geoff-obsidicore/Research-Cascade.git"
44
+ },
45
+ "keywords": [
46
+ "mcp",
47
+ "research",
48
+ "knowledge-graph",
49
+ "ai-agent",
50
+ "memory",
51
+ "sqlite",
52
+ "cascade",
53
+ "trust-scoring",
54
+ "self-regulation"
55
+ ],
56
+ "author": "Obsidicore",
57
+ "license": "MIT"
58
+ }