@longarc/mdash 3.0.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 (55) hide show
  1. package/README.md +278 -0
  2. package/dist/checkpoint/engine.d.ts +208 -0
  3. package/dist/checkpoint/engine.d.ts.map +1 -0
  4. package/dist/checkpoint/engine.js +369 -0
  5. package/dist/checkpoint/engine.js.map +1 -0
  6. package/dist/context/engine.d.ts +197 -0
  7. package/dist/context/engine.d.ts.map +1 -0
  8. package/dist/context/engine.js +392 -0
  9. package/dist/context/engine.js.map +1 -0
  10. package/dist/core/commitment.d.ts +154 -0
  11. package/dist/core/commitment.d.ts.map +1 -0
  12. package/dist/core/commitment.js +305 -0
  13. package/dist/core/commitment.js.map +1 -0
  14. package/dist/core/crypto.d.ts +100 -0
  15. package/dist/core/crypto.d.ts.map +1 -0
  16. package/dist/core/crypto.js +243 -0
  17. package/dist/core/crypto.js.map +1 -0
  18. package/dist/index.d.ts +121 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +234 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/mcca/engine.d.ts +260 -0
  23. package/dist/mcca/engine.d.ts.map +1 -0
  24. package/dist/mcca/engine.js +518 -0
  25. package/dist/mcca/engine.js.map +1 -0
  26. package/dist/physics/engine.d.ts +165 -0
  27. package/dist/physics/engine.d.ts.map +1 -0
  28. package/dist/physics/engine.js +371 -0
  29. package/dist/physics/engine.js.map +1 -0
  30. package/dist/tee/engine.d.ts +285 -0
  31. package/dist/tee/engine.d.ts.map +1 -0
  32. package/dist/tee/engine.js +505 -0
  33. package/dist/tee/engine.js.map +1 -0
  34. package/dist/warrant/engine.d.ts +195 -0
  35. package/dist/warrant/engine.d.ts.map +1 -0
  36. package/dist/warrant/engine.js +409 -0
  37. package/dist/warrant/engine.js.map +1 -0
  38. package/dist/zk/engine.d.ts +243 -0
  39. package/dist/zk/engine.d.ts.map +1 -0
  40. package/dist/zk/engine.js +489 -0
  41. package/dist/zk/engine.js.map +1 -0
  42. package/package.json +25 -0
  43. package/src/__tests__/phase1.test.ts +1120 -0
  44. package/src/__tests__/phase2-4.test.ts +898 -0
  45. package/src/checkpoint/engine.ts +532 -0
  46. package/src/context/engine.ts +598 -0
  47. package/src/core/commitment.ts +438 -0
  48. package/src/core/crypto.ts +304 -0
  49. package/src/index.ts +320 -0
  50. package/src/mcca/engine.ts +778 -0
  51. package/src/physics/engine.ts +563 -0
  52. package/src/tee/engine.ts +810 -0
  53. package/src/warrant/engine.ts +625 -0
  54. package/src/zk/engine.ts +730 -0
  55. package/tsconfig.json +21 -0
@@ -0,0 +1,518 @@
1
+ /**
2
+ * mdash v3.0 - MCCA v3 (Manifold-Constrained Context Architecture)
3
+ *
4
+ * Based on DeepSeek's research on constrained context windows.
5
+ * Implements manifold commitment proofs and influence budgets.
6
+ *
7
+ * Core Concepts:
8
+ * - Manifold: A bounded region of valid agent behavior
9
+ * - Influence Budget: Maximum context influence per source
10
+ * - Commitment Proofs: Cryptographic proof of context integrity
11
+ * - Drift Detection: Identifies context manipulation attempts
12
+ *
13
+ * @version 3.0.0
14
+ */
15
+ import { generateTimestamp, sha256, sha256Object, hmacSeal, deriveKey, generateFragmentId, } from '../core/crypto.js';
16
+ /**
17
+ * Default influence budget (conservative)
18
+ */
19
+ export const DEFAULT_INFLUENCE_BUDGET = {
20
+ system: 0.30,
21
+ user: 0.35,
22
+ agent: 0.15,
23
+ tool: 0.10,
24
+ memory: 0.05,
25
+ external: 0.05,
26
+ };
27
+ export const DEFAULT_CONFIG = {
28
+ budget: DEFAULT_INFLUENCE_BUDGET,
29
+ maxFragments: 1000,
30
+ maxTokens: 100000,
31
+ driftThreshold: 0.3,
32
+ autoPrune: true,
33
+ regionLimits: {
34
+ core: 10000,
35
+ task: 30000,
36
+ history: 40000,
37
+ reference: 15000,
38
+ ephemeral: 5000,
39
+ },
40
+ };
41
+ export class MCCAEngine {
42
+ key = null;
43
+ config;
44
+ commitmentEngine;
45
+ // Fragment storage
46
+ fragments = new Map();
47
+ fragmentsByRegion = new Map();
48
+ fragmentsBySource = new Map();
49
+ // Commitment proofs
50
+ proofs = new Map();
51
+ // Running totals
52
+ totalTokens = 0;
53
+ influenceBySource = {
54
+ system: 0,
55
+ user: 0,
56
+ agent: 0,
57
+ tool: 0,
58
+ memory: 0,
59
+ external: 0,
60
+ };
61
+ constructor(commitmentEngine, config = {}) {
62
+ this.commitmentEngine = commitmentEngine;
63
+ this.config = { ...DEFAULT_CONFIG, ...config };
64
+ // Initialize region maps
65
+ for (const region of Object.keys(this.config.regionLimits)) {
66
+ this.fragmentsByRegion.set(region, []);
67
+ }
68
+ // Initialize source maps
69
+ for (const source of Object.keys(this.config.budget)) {
70
+ this.fragmentsBySource.set(source, []);
71
+ }
72
+ }
73
+ /**
74
+ * Initialize the MCCA engine
75
+ */
76
+ async initialize(sealKey) {
77
+ this.key = await deriveKey(sealKey);
78
+ }
79
+ /**
80
+ * Add a fragment to the manifold
81
+ * Automatically positions it based on source and content
82
+ */
83
+ async addFragment(params) {
84
+ if (!this.key) {
85
+ throw new Error('MCCA engine not initialized');
86
+ }
87
+ const startTime = performance.now();
88
+ // Check region capacity
89
+ const regionTokens = this.getRegionTokens(params.region);
90
+ if (regionTokens + params.token_count > this.config.regionLimits[params.region]) {
91
+ if (this.config.autoPrune) {
92
+ await this.pruneRegion(params.region, params.token_count);
93
+ }
94
+ else {
95
+ throw new Error(`Region ${params.region} capacity exceeded`);
96
+ }
97
+ }
98
+ // Calculate influence
99
+ const baseInfluence = params.influence ?? this.calculateBaseInfluence(params.source_class, params.token_count);
100
+ // Calculate position in manifold
101
+ const position = this.calculatePosition(params.source_class, params.region, baseInfluence);
102
+ // Create fragment
103
+ const id = generateFragmentId();
104
+ const contentHash = await sha256Object(params.content);
105
+ const now = generateTimestamp();
106
+ const fragmentData = {
107
+ id,
108
+ content_hash: contentHash,
109
+ source_class: params.source_class,
110
+ region: params.region,
111
+ position,
112
+ influence: baseInfluence,
113
+ token_count: params.token_count,
114
+ timestamp: now,
115
+ };
116
+ const seal = await hmacSeal(fragmentData, this.key);
117
+ const fragment = {
118
+ ...fragmentData,
119
+ seal,
120
+ };
121
+ // Store fragment
122
+ this.fragments.set(id, fragment);
123
+ this.fragmentsByRegion.get(params.region).push(id);
124
+ this.fragmentsBySource.get(params.source_class).push(id);
125
+ // Update totals
126
+ this.totalTokens += params.token_count;
127
+ this.influenceBySource[params.source_class] += baseInfluence;
128
+ // Commit to L1
129
+ await this.commitmentEngine.commit(fragment, `mcca:${id}`);
130
+ const elapsed = performance.now() - startTime;
131
+ if (elapsed > 5) {
132
+ console.warn(`[MCCA] Fragment addition exceeded 5ms: ${elapsed.toFixed(2)}ms`);
133
+ }
134
+ return fragment;
135
+ }
136
+ /**
137
+ * Calculate base influence for a fragment
138
+ */
139
+ calculateBaseInfluence(source, tokens) {
140
+ const budgetShare = this.config.budget[source];
141
+ const currentUsage = this.influenceBySource[source];
142
+ const remaining = budgetShare - currentUsage;
143
+ // Scale by token count (normalized)
144
+ const tokenFactor = Math.min(tokens / 1000, 1);
145
+ return Math.max(0, Math.min(remaining * tokenFactor, remaining));
146
+ }
147
+ /**
148
+ * Calculate position in manifold
149
+ */
150
+ calculatePosition(source, region, influence) {
151
+ // X-axis: Influence (based on source class priority)
152
+ const sourcePriority = {
153
+ system: 0.9,
154
+ user: 0.8,
155
+ agent: 0.5,
156
+ tool: 0.6,
157
+ memory: 0.4,
158
+ external: 0.3,
159
+ };
160
+ const x = sourcePriority[source] * influence;
161
+ // Y-axis: Recency (newer = higher)
162
+ const y = this.fragments.size > 0
163
+ ? 1 - (this.fragments.size / this.config.maxFragments)
164
+ : 1;
165
+ // Z-axis: Region relevance
166
+ const regionRelevance = {
167
+ core: 1.0,
168
+ task: 0.9,
169
+ history: 0.5,
170
+ reference: 0.6,
171
+ ephemeral: 0.2,
172
+ };
173
+ const z = regionRelevance[region];
174
+ return { x, y, z };
175
+ }
176
+ /**
177
+ * Prune a region to make space
178
+ */
179
+ async pruneRegion(region, needed) {
180
+ const fragmentIds = this.fragmentsByRegion.get(region) || [];
181
+ const fragments = fragmentIds
182
+ .map(id => this.fragments.get(id))
183
+ .sort((a, b) => {
184
+ // Prune by: low influence, old, low relevance
185
+ const scoreA = a.influence * a.position.y * a.position.z;
186
+ const scoreB = b.influence * b.position.y * b.position.z;
187
+ return scoreA - scoreB;
188
+ });
189
+ let freed = 0;
190
+ for (const fragment of fragments) {
191
+ if (freed >= needed)
192
+ break;
193
+ await this.removeFragment(fragment.id);
194
+ freed += fragment.token_count;
195
+ }
196
+ }
197
+ /**
198
+ * Remove a fragment from the manifold
199
+ */
200
+ async removeFragment(id) {
201
+ const fragment = this.fragments.get(id);
202
+ if (!fragment)
203
+ return;
204
+ // Update totals
205
+ this.totalTokens -= fragment.token_count;
206
+ this.influenceBySource[fragment.source_class] -= fragment.influence;
207
+ // Remove from indices
208
+ const regionIds = this.fragmentsByRegion.get(fragment.region) || [];
209
+ this.fragmentsByRegion.set(fragment.region, regionIds.filter(fid => fid !== id));
210
+ const sourceIds = this.fragmentsBySource.get(fragment.source_class) || [];
211
+ this.fragmentsBySource.set(fragment.source_class, sourceIds.filter(fid => fid !== id));
212
+ this.fragments.delete(id);
213
+ }
214
+ /**
215
+ * Get region token count
216
+ */
217
+ getRegionTokens(region) {
218
+ const fragmentIds = this.fragmentsByRegion.get(region) || [];
219
+ return fragmentIds.reduce((sum, id) => {
220
+ const fragment = this.fragments.get(id);
221
+ return sum + (fragment?.token_count || 0);
222
+ }, 0);
223
+ }
224
+ /**
225
+ * Generate a manifold commitment proof
226
+ */
227
+ async generateCommitmentProof() {
228
+ if (!this.key) {
229
+ throw new Error('MCCA engine not initialized');
230
+ }
231
+ // Calculate merkle root of all fragments
232
+ const fragmentHashes = Array.from(this.fragments.values())
233
+ .map(f => f.content_hash);
234
+ const merkleRoot = fragmentHashes.length > 0
235
+ ? await this.computeMerkleRoot(fragmentHashes)
236
+ : await sha256('empty-manifold');
237
+ // Calculate total influence
238
+ const totalInfluence = Object.values(this.influenceBySource).reduce((a, b) => a + b, 0);
239
+ // Calculate influence distribution (normalized)
240
+ const distribution = {};
241
+ for (const [source, influence] of Object.entries(this.influenceBySource)) {
242
+ distribution[source] = totalInfluence > 0
243
+ ? influence / totalInfluence
244
+ : 0;
245
+ }
246
+ // Check budget compliance
247
+ const budgetCompliant = this.checkBudgetCompliance();
248
+ // Calculate drift score
249
+ const driftAnalysis = await this.analyzeDrift();
250
+ const now = generateTimestamp();
251
+ const id = `mcp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
252
+ const proofData = {
253
+ id,
254
+ timestamp: now,
255
+ merkle_root: merkleRoot,
256
+ fragment_count: this.fragments.size,
257
+ influence_distribution: distribution,
258
+ budget_compliant: budgetCompliant.compliant,
259
+ drift_score: driftAnalysis.score,
260
+ commitment_id: '',
261
+ };
262
+ // Commit to L1
263
+ const commitment = await this.commitmentEngine.commit(proofData, `mcca-proof:${id}`);
264
+ proofData.commitment_id = commitment.operationId;
265
+ const seal = await hmacSeal(proofData, this.key);
266
+ const proof = {
267
+ ...proofData,
268
+ seal,
269
+ };
270
+ this.proofs.set(id, proof);
271
+ return proof;
272
+ }
273
+ /**
274
+ * Compute merkle root from hashes
275
+ */
276
+ async computeMerkleRoot(hashes) {
277
+ if (hashes.length === 0) {
278
+ return sha256('empty');
279
+ }
280
+ if (hashes.length === 1) {
281
+ return hashes[0];
282
+ }
283
+ const pairs = [];
284
+ for (let i = 0; i < hashes.length; i += 2) {
285
+ const left = hashes[i];
286
+ const right = hashes[i + 1] || left; // Duplicate last if odd
287
+ const combined = await sha256(`${left}|${right}`);
288
+ pairs.push(combined);
289
+ }
290
+ return this.computeMerkleRoot(pairs);
291
+ }
292
+ /**
293
+ * Check if current state complies with budget
294
+ */
295
+ checkBudgetCompliance() {
296
+ const violations = [];
297
+ const totalInfluence = Object.values(this.influenceBySource).reduce((a, b) => a + b, 0);
298
+ if (totalInfluence === 0) {
299
+ return { compliant: true, violations: [] };
300
+ }
301
+ for (const [source, budget] of Object.entries(this.config.budget)) {
302
+ const actual = this.influenceBySource[source] / totalInfluence;
303
+ const tolerance = 0.1; // 10% tolerance
304
+ if (actual > budget + tolerance) {
305
+ violations.push(`${source}: ${(actual * 100).toFixed(1)}% exceeds budget ${(budget * 100).toFixed(1)}%`);
306
+ }
307
+ }
308
+ return {
309
+ compliant: violations.length === 0,
310
+ violations,
311
+ };
312
+ }
313
+ /**
314
+ * Analyze drift from expected manifold state
315
+ */
316
+ async analyzeDrift() {
317
+ const totalInfluence = Object.values(this.influenceBySource).reduce((a, b) => a + b, 0);
318
+ const violations = [];
319
+ const bySource = {};
320
+ // Calculate drift per source
321
+ for (const [source, budget] of Object.entries(this.config.budget)) {
322
+ const actual = totalInfluence > 0
323
+ ? this.influenceBySource[source] / totalInfluence
324
+ : 0;
325
+ const drift = Math.abs(actual - budget);
326
+ bySource[source] = drift;
327
+ if (drift > 0.15) { // 15% threshold
328
+ violations.push({
329
+ type: 'budget_exceeded',
330
+ source: source,
331
+ expected: budget,
332
+ actual,
333
+ message: `${source} influence drifted ${(drift * 100).toFixed(1)}% from budget`,
334
+ });
335
+ }
336
+ }
337
+ // Check region overflow
338
+ for (const [region, limit] of Object.entries(this.config.regionLimits)) {
339
+ const tokens = this.getRegionTokens(region);
340
+ if (tokens > limit * 0.9) { // 90% threshold
341
+ violations.push({
342
+ type: 'region_overflow',
343
+ source: 'system',
344
+ expected: limit,
345
+ actual: tokens,
346
+ message: `Region ${region} at ${((tokens / limit) * 100).toFixed(1)}% capacity`,
347
+ });
348
+ }
349
+ }
350
+ // Calculate overall score
351
+ const avgDrift = Object.values(bySource).reduce((a, b) => a + b, 0) /
352
+ Object.values(bySource).length;
353
+ const score = Math.min(avgDrift * 2, 1); // Scale to 0-1
354
+ // Classify severity
355
+ let severity;
356
+ if (score < 0.1)
357
+ severity = 'none';
358
+ else if (score < 0.25)
359
+ severity = 'low';
360
+ else if (score < 0.5)
361
+ severity = 'medium';
362
+ else if (score < 0.75)
363
+ severity = 'high';
364
+ else
365
+ severity = 'critical';
366
+ // Generate recommendations
367
+ const recommendations = [];
368
+ if (violations.length > 0) {
369
+ if (bySource.external > 0.15) {
370
+ recommendations.push('Reduce external content influence');
371
+ }
372
+ if (bySource.agent > 0.15) {
373
+ recommendations.push('Agent self-influence exceeds threshold');
374
+ }
375
+ if (severity === 'high' || severity === 'critical') {
376
+ recommendations.push('Consider context reset');
377
+ }
378
+ }
379
+ return {
380
+ score,
381
+ severity,
382
+ by_source: bySource,
383
+ violations,
384
+ recommendations,
385
+ };
386
+ }
387
+ /**
388
+ * Get fragment by ID
389
+ */
390
+ getFragment(id) {
391
+ return this.fragments.get(id) || null;
392
+ }
393
+ /**
394
+ * Get all fragments in a region
395
+ */
396
+ getRegionFragments(region) {
397
+ const ids = this.fragmentsByRegion.get(region) || [];
398
+ return ids.map(id => this.fragments.get(id)).filter(Boolean);
399
+ }
400
+ /**
401
+ * Get fragments by source
402
+ */
403
+ getSourceFragments(source) {
404
+ const ids = this.fragmentsBySource.get(source) || [];
405
+ return ids.map(id => this.fragments.get(id)).filter(Boolean);
406
+ }
407
+ /**
408
+ * Get current manifold state
409
+ */
410
+ getState() {
411
+ const tokensByRegion = {};
412
+ for (const region of Object.keys(this.config.regionLimits)) {
413
+ tokensByRegion[region] = this.getRegionTokens(region);
414
+ }
415
+ return {
416
+ totalFragments: this.fragments.size,
417
+ totalTokens: this.totalTokens,
418
+ influenceBySource: { ...this.influenceBySource },
419
+ tokensByRegion,
420
+ };
421
+ }
422
+ /**
423
+ * Get engine statistics
424
+ */
425
+ getStats() {
426
+ return {
427
+ fragments: this.fragments.size,
428
+ tokens: this.totalTokens,
429
+ proofs: this.proofs.size,
430
+ budgetCompliance: this.checkBudgetCompliance(),
431
+ config: this.config,
432
+ };
433
+ }
434
+ }
435
+ // ============================================================================
436
+ // CONTEXT WINDOW MANAGER
437
+ // ============================================================================
438
+ /**
439
+ * Higher-level context window management
440
+ * Uses MCCA engine underneath
441
+ */
442
+ export class ContextWindowManager {
443
+ mcca;
444
+ maxTokens;
445
+ constructor(mcca, maxTokens = 100000) {
446
+ this.mcca = mcca;
447
+ this.maxTokens = maxTokens;
448
+ }
449
+ /**
450
+ * Add system prompt
451
+ */
452
+ async addSystemPrompt(content, tokens) {
453
+ return this.mcca.addFragment({
454
+ content,
455
+ source_class: 'system',
456
+ region: 'core',
457
+ token_count: tokens,
458
+ influence: 0.3, // High influence for system
459
+ });
460
+ }
461
+ /**
462
+ * Add user message
463
+ */
464
+ async addUserMessage(content, tokens) {
465
+ return this.mcca.addFragment({
466
+ content,
467
+ source_class: 'user',
468
+ region: 'task',
469
+ token_count: tokens,
470
+ });
471
+ }
472
+ /**
473
+ * Add agent response
474
+ */
475
+ async addAgentResponse(content, tokens) {
476
+ return this.mcca.addFragment({
477
+ content,
478
+ source_class: 'agent',
479
+ region: 'history',
480
+ token_count: tokens,
481
+ });
482
+ }
483
+ /**
484
+ * Add tool output
485
+ */
486
+ async addToolOutput(content, tokens) {
487
+ return this.mcca.addFragment({
488
+ content,
489
+ source_class: 'tool',
490
+ region: 'task',
491
+ token_count: tokens,
492
+ });
493
+ }
494
+ /**
495
+ * Add retrieved memory
496
+ */
497
+ async addMemory(content, tokens) {
498
+ return this.mcca.addFragment({
499
+ content,
500
+ source_class: 'memory',
501
+ region: 'reference',
502
+ token_count: tokens,
503
+ });
504
+ }
505
+ /**
506
+ * Get context health
507
+ */
508
+ async getHealth() {
509
+ const state = this.mcca.getState();
510
+ const drift = await this.mcca.analyzeDrift();
511
+ return {
512
+ healthy: drift.severity === 'none' || drift.severity === 'low',
513
+ drift,
514
+ utilization: state.totalTokens / this.maxTokens,
515
+ };
516
+ }
517
+ }
518
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/mcca/engine.ts"],"names":[],"mappings":"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"}