@tenova/swt3-mcp 0.1.0 → 0.5.1

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 (68) hide show
  1. package/README.md +1 -1
  2. package/dist/chain-verifier.d.ts +46 -0
  3. package/dist/chain-verifier.d.ts.map +1 -0
  4. package/dist/chain-verifier.js +210 -0
  5. package/dist/chain-verifier.js.map +1 -0
  6. package/dist/client.d.ts +4 -0
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js.map +1 -1
  9. package/dist/config.d.ts +8 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +8 -0
  12. package/dist/config.js.map +1 -1
  13. package/dist/density-policy.d.ts +55 -0
  14. package/dist/density-policy.d.ts.map +1 -0
  15. package/dist/density-policy.js +124 -0
  16. package/dist/density-policy.js.map +1 -0
  17. package/dist/redis-reader.d.ts +57 -0
  18. package/dist/redis-reader.d.ts.map +1 -0
  19. package/dist/redis-reader.js +254 -0
  20. package/dist/redis-reader.js.map +1 -0
  21. package/dist/server.d.ts.map +1 -1
  22. package/dist/server.js +442 -0
  23. package/dist/server.js.map +1 -1
  24. package/dist/state.d.ts +27 -0
  25. package/dist/state.d.ts.map +1 -0
  26. package/dist/state.js +18 -0
  27. package/dist/state.js.map +1 -0
  28. package/dist/tools/audit.d.ts +20 -0
  29. package/dist/tools/audit.d.ts.map +1 -0
  30. package/dist/tools/audit.js +102 -0
  31. package/dist/tools/audit.js.map +1 -0
  32. package/dist/tools/authorize.d.ts +19 -0
  33. package/dist/tools/authorize.d.ts.map +1 -0
  34. package/dist/tools/authorize.js +96 -0
  35. package/dist/tools/authorize.js.map +1 -0
  36. package/dist/tools/chain.d.ts +24 -0
  37. package/dist/tools/chain.d.ts.map +1 -0
  38. package/dist/tools/chain.js +114 -0
  39. package/dist/tools/chain.js.map +1 -0
  40. package/dist/tools/model.d.ts +33 -0
  41. package/dist/tools/model.d.ts.map +1 -0
  42. package/dist/tools/model.js +162 -0
  43. package/dist/tools/model.js.map +1 -0
  44. package/dist/tools/signup.d.ts +2 -2
  45. package/dist/tools/signup.d.ts.map +1 -1
  46. package/dist/tools/signup.js +10 -3
  47. package/dist/tools/signup.js.map +1 -1
  48. package/dist/tools/skill.d.ts +33 -0
  49. package/dist/tools/skill.d.ts.map +1 -0
  50. package/dist/tools/skill.js +168 -0
  51. package/dist/tools/skill.js.map +1 -0
  52. package/dist/tools/suggest.d.ts +15 -0
  53. package/dist/tools/suggest.d.ts.map +1 -0
  54. package/dist/tools/suggest.js +174 -0
  55. package/dist/tools/suggest.js.map +1 -0
  56. package/dist/tools/trust.d.ts +33 -0
  57. package/dist/tools/trust.d.ts.map +1 -0
  58. package/dist/tools/trust.js +209 -0
  59. package/dist/tools/trust.js.map +1 -0
  60. package/dist/tools/violation.d.ts +20 -0
  61. package/dist/tools/violation.d.ts.map +1 -0
  62. package/dist/tools/violation.js +97 -0
  63. package/dist/tools/violation.js.map +1 -0
  64. package/dist/tools/witness.d.ts +6 -1
  65. package/dist/tools/witness.d.ts.map +1 -1
  66. package/dist/tools/witness.js +19 -5
  67. package/dist/tools/witness.js.map +1 -1
  68. package/package.json +25 -2
@@ -0,0 +1,254 @@
1
+ /**
2
+ * SWT3 MCP Server: Redis Stream Reader for real-time anchor freshness.
3
+ *
4
+ * Subscribes to the swt3:anchors Redis stream as a separate consumer group
5
+ * (swt3-mcp-verifiers) and maintains an in-memory index for 0ms lookups.
6
+ * The chain verifier queries this index before falling back to Supabase.
7
+ *
8
+ * Architecture:
9
+ * - Consumer group: swt3-mcp-verifiers (separate from swt3-processors)
10
+ * - XREADGROUP with BLOCK for backpressure-friendly consumption
11
+ * - In-memory index keyed by agent_id and cycle_id
12
+ * - TTL eviction (1 hour) + max entries (10,000 LRU)
13
+ *
14
+ * Patent coverage: PPA #7
15
+ */
16
+ import { hostname } from "node:os";
17
+ // ── Constants ──────────────────────────────────────────��──────────────
18
+ const DEFAULT_GROUP = "swt3-mcp-verifiers";
19
+ const DEFAULT_STREAM = "swt3:anchors";
20
+ const DEFAULT_MAX_ENTRIES = parseInt(process.env.SWT3_READER_MAX_ENTRIES || "10000", 10);
21
+ const DEFAULT_TTL_MS = parseInt(process.env.SWT3_READER_TTL_MINUTES || "60", 10) * 60 * 1000;
22
+ const EVICTION_INTERVAL_MS = 60_000; // 60 seconds
23
+ const READ_BLOCK_MS = 2000; // block 2s per read cycle
24
+ const READ_COUNT = 100; // messages per read
25
+ // ── Module State ───────────────��──────────────────────────────────────
26
+ let redis = null;
27
+ let running = false;
28
+ let readLoopPromise = null;
29
+ let evictionTimer = null;
30
+ let config = null;
31
+ // In-memory indices
32
+ const byAgent = new Map();
33
+ const byCycle = new Map();
34
+ const allEntries = [];
35
+ // ── Public API ────────────────────────��───────────────────────────────
36
+ /**
37
+ * Start the Redis stream reader. No-op if already running or ioredis unavailable.
38
+ */
39
+ export async function startRedisReader(opts) {
40
+ if (running)
41
+ return true;
42
+ let Redis;
43
+ try {
44
+ Redis = (await import("ioredis")).default;
45
+ }
46
+ catch {
47
+ // ioredis not installed -- graceful degradation
48
+ return false;
49
+ }
50
+ config = {
51
+ redisUrl: opts.redisUrl || process.env.SWT3_REDIS_URL || "redis://localhost:6379",
52
+ streamName: opts.streamName || process.env.SWT3_REDIS_STREAM || DEFAULT_STREAM,
53
+ groupName: DEFAULT_GROUP,
54
+ maxEntries: DEFAULT_MAX_ENTRIES,
55
+ ttlMs: DEFAULT_TTL_MS,
56
+ };
57
+ try {
58
+ redis = new Redis(config.redisUrl, {
59
+ maxRetriesPerRequest: 3,
60
+ retryStrategy: (times) => (times > 5 ? null : Math.min(times * 200, 2000)),
61
+ lazyConnect: true,
62
+ });
63
+ await redis.connect();
64
+ }
65
+ catch {
66
+ redis = null;
67
+ return false;
68
+ }
69
+ // Create consumer group (idempotent)
70
+ try {
71
+ await redis.xgroup("CREATE", config.streamName, config.groupName, "$", "MKSTREAM");
72
+ }
73
+ catch (err) {
74
+ // BUSYGROUP = group already exists, fine
75
+ if (!err.message?.includes("BUSYGROUP")) {
76
+ redis.disconnect();
77
+ redis = null;
78
+ return false;
79
+ }
80
+ }
81
+ running = true;
82
+ // Start background read loop
83
+ readLoopPromise = readLoop();
84
+ // Start TTL eviction timer
85
+ evictionTimer = setInterval(evictStale, EVICTION_INTERVAL_MS);
86
+ return true;
87
+ }
88
+ /**
89
+ * Stop the Redis reader gracefully.
90
+ */
91
+ export async function stopRedisReader() {
92
+ running = false;
93
+ if (evictionTimer) {
94
+ clearInterval(evictionTimer);
95
+ evictionTimer = null;
96
+ }
97
+ if (readLoopPromise) {
98
+ await readLoopPromise;
99
+ readLoopPromise = null;
100
+ }
101
+ if (redis) {
102
+ try {
103
+ redis.disconnect();
104
+ }
105
+ catch { /* ignore */ }
106
+ redis = null;
107
+ }
108
+ // Clear indices
109
+ byAgent.clear();
110
+ byCycle.clear();
111
+ allEntries.length = 0;
112
+ }
113
+ /**
114
+ * Query cached anchors by agent_id and/or cycle_id.
115
+ * Returns empty array if Redis reader not running.
116
+ */
117
+ export function queryAnchors(agentId, cycleId) {
118
+ if (!running)
119
+ return [];
120
+ // If both provided, intersect
121
+ if (agentId && cycleId) {
122
+ const agentAnchors = byAgent.get(agentId) || [];
123
+ const cycleSet = new Set((byCycle.get(cycleId) || []).map((e) => e.messageId));
124
+ return agentAnchors.filter((e) => cycleSet.has(e.messageId));
125
+ }
126
+ if (agentId)
127
+ return byAgent.get(agentId) || [];
128
+ if (cycleId)
129
+ return byCycle.get(cycleId) || [];
130
+ return [];
131
+ }
132
+ /**
133
+ * Get reader state for health/diagnostics.
134
+ */
135
+ export function getReaderState() {
136
+ if (!running)
137
+ return null;
138
+ return {
139
+ running,
140
+ connected: redis?.status === "ready",
141
+ entriesCount: allEntries.length,
142
+ lastMessageId: allEntries.length > 0 ? allEntries[allEntries.length - 1].messageId : "0-0",
143
+ };
144
+ }
145
+ // ── Internal: Read Loop ──────────────────────��────────────────────────
146
+ async function readLoop() {
147
+ const consumer = `mcp-${hostname()}-${process.pid}`;
148
+ while (running && redis && config) {
149
+ try {
150
+ const results = await redis.xreadgroup("GROUP", config.groupName, consumer, "COUNT", READ_COUNT, "BLOCK", READ_BLOCK_MS, "STREAMS", config.streamName, ">");
151
+ if (!results || !running)
152
+ continue;
153
+ const idsToAck = [];
154
+ for (const [, messages] of results) {
155
+ for (const [id, fields] of messages) {
156
+ const entry = parseStreamMessage(id, fields);
157
+ if (entry) {
158
+ indexEntry(entry);
159
+ idsToAck.push(id);
160
+ }
161
+ }
162
+ }
163
+ // ACK processed messages
164
+ if (idsToAck.length > 0) {
165
+ await redis.xack(config.streamName, config.groupName, ...idsToAck);
166
+ }
167
+ }
168
+ catch (err) {
169
+ // Connection lost -- wait briefly then retry
170
+ if (running) {
171
+ await sleep(1000);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ // ── Internal: Parse & Index ───────────────────────────────────────────
177
+ function parseStreamMessage(id, fields) {
178
+ const map = {};
179
+ for (let i = 0; i < fields.length; i += 2) {
180
+ map[fields[i]] = fields[i + 1];
181
+ }
182
+ // Require at minimum: procedure_id and anchor_fingerprint
183
+ if (!map.procedure_id || !map.anchor_fingerprint)
184
+ return null;
185
+ return {
186
+ messageId: id,
187
+ procedure_id: map.procedure_id,
188
+ anchor_fingerprint: map.anchor_fingerprint,
189
+ anchor_epoch: parseInt(map.anchor_epoch || "0", 10),
190
+ agent_id: map.agent_id || undefined,
191
+ cycle_id: map.cycle_id || undefined,
192
+ provider: map.provider || map.witness_source || undefined,
193
+ payload_signature: map.payload_signature || undefined,
194
+ verdict: map.verdict || undefined,
195
+ ai_input_tokens: map.ai_input_tokens ? parseInt(map.ai_input_tokens, 10) : undefined,
196
+ ai_output_tokens: map.ai_output_tokens ? parseInt(map.ai_output_tokens, 10) : undefined,
197
+ clearing_level: map.clearing_level ? parseInt(map.clearing_level, 10) : undefined,
198
+ receivedAt: Date.now(),
199
+ };
200
+ }
201
+ function indexEntry(entry) {
202
+ // Enforce max entries (LRU: drop oldest)
203
+ if (allEntries.length >= (config?.maxEntries ?? DEFAULT_MAX_ENTRIES)) {
204
+ const evicted = allEntries.shift();
205
+ if (evicted)
206
+ removeFromIndices(evicted);
207
+ }
208
+ allEntries.push(entry);
209
+ if (entry.agent_id) {
210
+ const list = byAgent.get(entry.agent_id) || [];
211
+ list.push(entry);
212
+ byAgent.set(entry.agent_id, list);
213
+ }
214
+ if (entry.cycle_id) {
215
+ const list = byCycle.get(entry.cycle_id) || [];
216
+ list.push(entry);
217
+ byCycle.set(entry.cycle_id, list);
218
+ }
219
+ }
220
+ function removeFromIndices(entry) {
221
+ if (entry.agent_id) {
222
+ const list = byAgent.get(entry.agent_id);
223
+ if (list) {
224
+ const idx = list.indexOf(entry);
225
+ if (idx >= 0)
226
+ list.splice(idx, 1);
227
+ if (list.length === 0)
228
+ byAgent.delete(entry.agent_id);
229
+ }
230
+ }
231
+ if (entry.cycle_id) {
232
+ const list = byCycle.get(entry.cycle_id);
233
+ if (list) {
234
+ const idx = list.indexOf(entry);
235
+ if (idx >= 0)
236
+ list.splice(idx, 1);
237
+ if (list.length === 0)
238
+ byCycle.delete(entry.cycle_id);
239
+ }
240
+ }
241
+ }
242
+ // ── Internal: Eviction ────────────────���───────────────────────────────
243
+ function evictStale() {
244
+ const cutoff = Date.now() - (config?.ttlMs ?? DEFAULT_TTL_MS);
245
+ while (allEntries.length > 0 && allEntries[0].receivedAt < cutoff) {
246
+ const evicted = allEntries.shift();
247
+ removeFromIndices(evicted);
248
+ }
249
+ }
250
+ // ── Utility ─────────────────��─────────────────────────────��───────────
251
+ function sleep(ms) {
252
+ return new Promise((r) => setTimeout(r, ms));
253
+ }
254
+ //# sourceMappingURL=redis-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-reader.js","sourceRoot":"","sources":["../src/redis-reader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAY7C,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAmKzD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAyB7C,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAunBzD"}