velixar-mcp-server 0.2.4 → 1.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 (104) hide show
  1. package/README.md +120 -64
  2. package/dist/api.d.ts +64 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +405 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/errors.d.ts +19 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +52 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/justify.d.ts +9 -0
  11. package/dist/justify.d.ts.map +1 -0
  12. package/dist/justify.js +114 -0
  13. package/dist/justify.js.map +1 -0
  14. package/dist/prompts.d.ts +88 -0
  15. package/dist/prompts.d.ts.map +1 -0
  16. package/dist/prompts.js +693 -0
  17. package/dist/prompts.js.map +1 -0
  18. package/dist/resources.d.ts +25 -0
  19. package/dist/resources.d.ts.map +1 -0
  20. package/dist/resources.js +278 -0
  21. package/dist/resources.js.map +1 -0
  22. package/dist/server.d.ts +3 -0
  23. package/dist/server.d.ts.map +1 -0
  24. package/dist/server.js +392 -0
  25. package/dist/server.js.map +1 -0
  26. package/dist/simulation/personas.d.ts +41 -0
  27. package/dist/simulation/personas.d.ts.map +1 -0
  28. package/dist/simulation/personas.js +173 -0
  29. package/dist/simulation/personas.js.map +1 -0
  30. package/dist/simulation/report.d.ts +28 -0
  31. package/dist/simulation/report.d.ts.map +1 -0
  32. package/dist/simulation/report.js +105 -0
  33. package/dist/simulation/report.js.map +1 -0
  34. package/dist/simulation/runner.d.ts +63 -0
  35. package/dist/simulation/runner.d.ts.map +1 -0
  36. package/dist/simulation/runner.js +167 -0
  37. package/dist/simulation/runner.js.map +1 -0
  38. package/dist/temporal_merge.d.ts +70 -0
  39. package/dist/temporal_merge.d.ts.map +1 -0
  40. package/dist/temporal_merge.js +258 -0
  41. package/dist/temporal_merge.js.map +1 -0
  42. package/dist/tools/clairvoyance.d.ts +9 -0
  43. package/dist/tools/clairvoyance.d.ts.map +1 -0
  44. package/dist/tools/clairvoyance.js +321 -0
  45. package/dist/tools/clairvoyance.js.map +1 -0
  46. package/dist/tools/cognitive.d.ts +10 -0
  47. package/dist/tools/cognitive.d.ts.map +1 -0
  48. package/dist/tools/cognitive.js +462 -0
  49. package/dist/tools/cognitive.js.map +1 -0
  50. package/dist/tools/construction.d.ts +9 -0
  51. package/dist/tools/construction.d.ts.map +1 -0
  52. package/dist/tools/construction.js +350 -0
  53. package/dist/tools/construction.js.map +1 -0
  54. package/dist/tools/graph.d.ts +14 -0
  55. package/dist/tools/graph.d.ts.map +1 -0
  56. package/dist/tools/graph.js +263 -0
  57. package/dist/tools/graph.js.map +1 -0
  58. package/dist/tools/graph_sanitizer.d.ts +24 -0
  59. package/dist/tools/graph_sanitizer.d.ts.map +1 -0
  60. package/dist/tools/graph_sanitizer.js +79 -0
  61. package/dist/tools/graph_sanitizer.js.map +1 -0
  62. package/dist/tools/lifecycle.d.ts +9 -0
  63. package/dist/tools/lifecycle.d.ts.map +1 -0
  64. package/dist/tools/lifecycle.js +1091 -0
  65. package/dist/tools/lifecycle.js.map +1 -0
  66. package/dist/tools/livedata.d.ts +9 -0
  67. package/dist/tools/livedata.d.ts.map +1 -0
  68. package/dist/tools/livedata.js +222 -0
  69. package/dist/tools/livedata.js.map +1 -0
  70. package/dist/tools/memory.d.ts +10 -0
  71. package/dist/tools/memory.d.ts.map +1 -0
  72. package/dist/tools/memory.js +275 -0
  73. package/dist/tools/memory.js.map +1 -0
  74. package/dist/tools/recall.d.ts +9 -0
  75. package/dist/tools/recall.d.ts.map +1 -0
  76. package/dist/tools/recall.js +206 -0
  77. package/dist/tools/recall.js.map +1 -0
  78. package/dist/tools/retrieval.d.ts +9 -0
  79. package/dist/tools/retrieval.d.ts.map +1 -0
  80. package/dist/tools/retrieval.js +338 -0
  81. package/dist/tools/retrieval.js.map +1 -0
  82. package/dist/tools/system.d.ts +12 -0
  83. package/dist/tools/system.d.ts.map +1 -0
  84. package/dist/tools/system.js +228 -0
  85. package/dist/tools/system.js.map +1 -0
  86. package/dist/types.d.ts +234 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +5 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/validate.d.ts +79 -0
  91. package/dist/validate.d.ts.map +1 -0
  92. package/dist/validate.js +174 -0
  93. package/dist/validate.js.map +1 -0
  94. package/dist/validate_retrieval.d.ts +33 -0
  95. package/dist/validate_retrieval.d.ts.map +1 -0
  96. package/dist/validate_retrieval.js +97 -0
  97. package/dist/validate_retrieval.js.map +1 -0
  98. package/package.json +22 -6
  99. package/server.json +2 -2
  100. package/.github/workflows/ci.yml +0 -18
  101. package/.mcpregistry_github_token +0 -1
  102. package/.mcpregistry_registry_token +0 -1
  103. package/src/index.js +0 -262
  104. package/tests/server.test.js +0 -193
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/simulation/personas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { SimulationResult } from './runner.js';
2
+ import type { Persona } from './personas.js';
3
+ export interface PredictionReport {
4
+ badge: '🔬 THOUGHT EXPERIMENT' | '📊 DATA-INFORMED';
5
+ prediction: string;
6
+ confidenceRange: {
7
+ low: number;
8
+ high: number;
9
+ label: string;
10
+ };
11
+ keyFactors: string[];
12
+ risks: string[];
13
+ assumptions: string[];
14
+ timeline: string;
15
+ dissentingViews: string[];
16
+ dataFoundation: {
17
+ totalMemoriesUsed: number;
18
+ groundedPersonas: number;
19
+ archetypePersonas: number;
20
+ devilsAdvocates: number;
21
+ dataSufficiency: number;
22
+ classification: string;
23
+ };
24
+ disclaimer: string;
25
+ trackPrompt: string;
26
+ }
27
+ export declare function generateReport(sim: SimulationResult, personas: Persona[], coverageRatio: number, seedMemoryCount: number, minDataThreshold: number): PredictionReport;
28
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/simulation/report.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE;QACd,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,OAAO,EAAE,EACnB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,gBAAgB,CA+FlB"}
@@ -0,0 +1,105 @@
1
+ // ── Prediction Report Generator ──
2
+ // Build 1.3: Structured report from simulation results.
3
+ // H1.3: Confidence = consensus * min(1.0, coverage / 0.7)
4
+ // H1.5: Data Foundation section. H1.6: Model limitation disclaimer.
5
+ // H7.1: Ranges not points. H7.2: "What could go wrong" prominent.
6
+ // Chain 8: Post-hoc fact-check (async annotation).
7
+ // Chain 9: Badge system 🔬 vs 📊.
8
+ export function generateReport(sim, personas, coverageRatio, seedMemoryCount, minDataThreshold) {
9
+ // Chain 9: Badge system
10
+ const dataInformed = coverageRatio >= 0.4 && seedMemoryCount >= minDataThreshold;
11
+ const badge = dataInformed ? '📊 DATA-INFORMED' : '🔬 THOUGHT EXPERIMENT';
12
+ // H1.3: Confidence includes data sufficiency
13
+ const consensusStrength = sim.convergenceRound
14
+ ? Math.min(1.0, 0.5 + (sim.rounds.length - sim.convergenceRound) * 0.1)
15
+ : 0.4;
16
+ const dataSufficiency = Math.min(1.0, coverageRatio / 0.7);
17
+ const rawConfidence = consensusStrength * dataSufficiency;
18
+ // H7.1: Ranges not points
19
+ const confidenceRange = {
20
+ low: Math.max(0, Math.round((rawConfidence - 0.15) * 100) / 100),
21
+ high: Math.min(1, Math.round((rawConfidence + 0.15) * 100) / 100),
22
+ label: rawConfidence >= 0.7 ? 'moderate-high' : rawConfidence >= 0.4 ? 'moderate' : 'low',
23
+ };
24
+ // Extract key factors from state bullets
25
+ const keyFactors = sim.finalState
26
+ .filter(b => /\b(because|due to|driven by|caused by|result of|key factor)\b/i.test(b))
27
+ .slice(0, 5);
28
+ if (keyFactors.length === 0) {
29
+ // Fallback: use last 3 state bullets
30
+ keyFactors.push(...sim.finalState.slice(-3));
31
+ }
32
+ // H7.2: Risks from devil's advocate actions (prominent, not buried)
33
+ const devilActions = sim.rounds
34
+ .flatMap(r => r.actions.filter(a => a.personaType === 'devils_advocate' && a.active))
35
+ .map(a => a.action)
36
+ .filter(Boolean);
37
+ const risks = devilActions.length > 0
38
+ ? devilActions.slice(0, 3)
39
+ : ['No devil\'s advocate perspectives were generated — risks may be underexplored.'];
40
+ // H7.3: Assumptions
41
+ const assumptions = extractAssumptions(sim);
42
+ // Dissenting views
43
+ const dissentingViews = sim.rounds
44
+ .flatMap(r => r.actions.filter(a => a.active && a.personaType !== 'devils_advocate'))
45
+ .filter(a => {
46
+ const consensus = sim.emergentConsensus.toLowerCase();
47
+ const action = a.action.toLowerCase();
48
+ return consensus.includes('leave') ? action.includes('stay') :
49
+ consensus.includes('stay') ? action.includes('leave') :
50
+ false;
51
+ })
52
+ .map(a => `${a.personaName}: ${a.action.slice(0, 150)}`)
53
+ .slice(0, 3);
54
+ // Data foundation
55
+ const groundedCount = personas.filter(p => p.type === 'data_grounded').length;
56
+ const archetypeCount = personas.filter(p => p.type === 'archetype').length;
57
+ const devilCount = personas.filter(p => p.type === 'devils_advocate').length;
58
+ const dataFoundation = {
59
+ totalMemoriesUsed: seedMemoryCount,
60
+ groundedPersonas: groundedCount,
61
+ archetypePersonas: archetypeCount,
62
+ devilsAdvocates: devilCount,
63
+ dataSufficiency: Math.round(dataSufficiency * 100) / 100,
64
+ classification: dataInformed
65
+ ? `Data-informed: ${seedMemoryCount} relevant memories found, ${groundedCount} personas grounded in real data.`
66
+ : `Thought experiment: only ${seedMemoryCount} relevant memories found (threshold: ${minDataThreshold}). Simulation relies primarily on general patterns.`,
67
+ };
68
+ // Timeline estimate
69
+ const timeline = sim.convergenceRound
70
+ ? `Outcomes likely to materialize within ${Math.ceil(sim.convergenceRound / 5)} decision cycles of the triggering event.`
71
+ : 'Timeline uncertain — simulation did not converge on a clear trajectory.';
72
+ // Prediction text — H7.1: ranges, not points
73
+ const prediction = [
74
+ `[PREDICTION — simulated, not factual]`,
75
+ `Based on a ${sim.rounds.length}-round simulation with ${personas.length} personas (${groundedCount} data-grounded, ${archetypeCount} archetype, ${devilCount} devil's advocate):`,
76
+ '',
77
+ sim.emergentConsensus,
78
+ '',
79
+ `Confidence range: ${confidenceRange.low}-${confidenceRange.high} (${confidenceRange.label}).`,
80
+ sim.aborted ? '⚠️ Simulation was time-limited — results based on partial run.' : '',
81
+ ].filter(Boolean).join('\n');
82
+ // H1.6: Disclaimer
83
+ const disclaimer = 'This is a simulation-based estimate, not a forecast. It reflects patterns in your data as of today. Use as one input to decision-making alongside human judgment, market research, and domain expertise. The simulation is bounded by the AI model\'s training data and may not capture truly novel scenarios.';
84
+ // H1.7: Track prompt
85
+ const trackPrompt = `To track this prediction, note the simulation ID and check back when outcomes are known. Velixar will automatically flag when new data relates to this prediction.`;
86
+ return {
87
+ badge, prediction, confidenceRange, keyFactors, risks, assumptions,
88
+ timeline, dissentingViews, dataFoundation, disclaimer, trackPrompt,
89
+ };
90
+ }
91
+ function extractAssumptions(sim) {
92
+ const assumptions = [];
93
+ // Variable-based assumptions
94
+ for (const [k, v] of Object.entries(sim.variables)) {
95
+ assumptions.push(`Assumes ${k.replace(/_/g, ' ')} is ${v} (as specified).`);
96
+ }
97
+ // Behavioral assumptions
98
+ if (sim.personas.some(p => p.type === 'archetype')) {
99
+ assumptions.push('Some personas are based on general archetypes, not your specific data.');
100
+ }
101
+ assumptions.push('Assumes competitors do not make simultaneous changes (unless specified).');
102
+ assumptions.push('Assumes no major external shocks (regulatory changes, economic events) during the prediction window.');
103
+ return assumptions;
104
+ }
105
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/simulation/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { Persona } from './personas.js';
2
+ export interface SimulationEvent {
3
+ round: number;
4
+ description: string;
5
+ impact: string;
6
+ }
7
+ export interface RoundAction {
8
+ personaId: string;
9
+ personaName: string;
10
+ personaType: string;
11
+ action: string;
12
+ active: boolean;
13
+ grounded: boolean;
14
+ }
15
+ export interface RoundResult {
16
+ round: number;
17
+ actions: RoundAction[];
18
+ summary: string;
19
+ stateBullets: string[];
20
+ consensus: string | null;
21
+ eventInjected: string | null;
22
+ activeCount: number;
23
+ totalCount: number;
24
+ }
25
+ export interface SimulationResult {
26
+ simulationId: string;
27
+ question: string;
28
+ variables: Record<string, string>;
29
+ events: SimulationEvent[];
30
+ rounds: RoundResult[];
31
+ finalState: string[];
32
+ emergentConsensus: string;
33
+ convergenceRound: number | null;
34
+ trendHistory: string[];
35
+ personas: Array<{
36
+ id: string;
37
+ name: string;
38
+ type: string;
39
+ role: string;
40
+ memoryCount: number;
41
+ }>;
42
+ tokensUsed: number;
43
+ roundsCompleted: number;
44
+ roundsPlanned: number;
45
+ aborted: boolean;
46
+ durationMs: number;
47
+ }
48
+ type LLMCall = (system: string, user: string) => Promise<string>;
49
+ export declare function runSimulation(opts: {
50
+ simulationId: string;
51
+ question: string;
52
+ variables: Record<string, string>;
53
+ events?: SimulationEvent[];
54
+ personas: Persona[];
55
+ roundCount: number;
56
+ llmCall: LLMCall;
57
+ seed?: number;
58
+ concurrency?: number;
59
+ timeoutMs?: number;
60
+ onRound?: (round: number, total: number) => void;
61
+ }): Promise<SimulationResult>;
62
+ export {};
63
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/simulation/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/F,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoI5B"}
@@ -0,0 +1,167 @@
1
+ // ── Simulation Runner v2 ──
2
+ // Upgraded: event injection mid-simulation, per-persona activity levels,
3
+ // richer round tracking, convergence detection with trend analysis.
4
+ import { generateDevilsAdvocates } from './personas.js';
5
+ export async function runSimulation(opts) {
6
+ const { simulationId, question, variables, roundCount, llmCall, seed, concurrency = 10, timeoutMs = 60000, } = opts;
7
+ const events = (opts.events || []).sort((a, b) => a.round - b.round);
8
+ let personas = [...opts.personas];
9
+ const startTime = Date.now();
10
+ const rounds = [];
11
+ const stateBullets = [];
12
+ const trendHistory = [];
13
+ const maxBullets = roundCount * 3;
14
+ let tokensUsed = 0;
15
+ let convergenceRound = null;
16
+ let lastConsensus = '';
17
+ let consensusStreak = 0;
18
+ let aborted = false;
19
+ const rng = seed !== undefined ? seededRandom(seed) : Math.random;
20
+ for (let round = 1; round <= roundCount; round++) {
21
+ if (Date.now() - startTime > timeoutMs) {
22
+ aborted = true;
23
+ break;
24
+ }
25
+ opts.onRound?.(round, roundCount);
26
+ // Event injection — check if any events fire this round
27
+ let eventInjected = null;
28
+ const roundEvents = events.filter(e => e.round === round);
29
+ if (roundEvents.length > 0) {
30
+ eventInjected = roundEvents.map(e => `⚡ EVENT: ${e.description} (impact: ${e.impact})`).join('\n');
31
+ stateBullets.push(...roundEvents.map(e => `[EVENT R${round}] ${e.description}`));
32
+ }
33
+ // Devil's advocates at 25% mark
34
+ if (round === Math.ceil(roundCount * 0.25) && rounds.length >= 3) {
35
+ const consensus = extractRecentConsensus(rounds);
36
+ if (consensus) {
37
+ const devils = generateDevilsAdvocates(consensus, simulationId);
38
+ personas = [...personas, ...devils];
39
+ }
40
+ }
41
+ // Build round context
42
+ const recentRounds = rounds.slice(-3).map(r => `Round ${r.round}${r.eventInjected ? ' [EVENT]' : ''}: ${r.summary}`).join('\n');
43
+ const variableStr = Object.entries(variables).map(([k, v]) => `${k}: ${v}`).join(', ');
44
+ const roundContext = [
45
+ `SCENARIO VARIABLES: ${variableStr}`,
46
+ `Round ${round} of ${roundCount}.`,
47
+ eventInjected ? `\n${eventInjected}\nHow does this change your behavior?` : '',
48
+ stateBullets.length > 0 ? `\nKEY DEVELOPMENTS:\n${stateBullets.slice(-12).map(b => `• ${b}`).join('\n')}` : '',
49
+ recentRounds ? `\nRECENT:\n${recentRounds}` : '',
50
+ '\nWhat do you do? Be specific — state your action and reasoning. 2-4 sentences.',
51
+ ].filter(Boolean).join('\n');
52
+ // Determine active personas (per-persona activity level + randomness)
53
+ const activePersonas = personas.filter(p => {
54
+ const prob = p.activityLevel ?? 0.7;
55
+ // Events boost activity — everyone pays attention
56
+ const boost = eventInjected ? 0.3 : 0;
57
+ return rng() < Math.min(1.0, prob + boost);
58
+ });
59
+ if (activePersonas.length === 0)
60
+ activePersonas.push(personas[0]);
61
+ // Run in parallel batches
62
+ const actions = [];
63
+ for (let i = 0; i < activePersonas.length; i += concurrency) {
64
+ const batch = activePersonas.slice(i, i + concurrency);
65
+ const results = await Promise.allSettled(batch.map(async (p) => {
66
+ const response = await llmCall(p.systemPrompt, roundContext);
67
+ const inputTokens = estimateTokens(p.systemPrompt) + estimateTokens(roundContext);
68
+ const outputTokens = estimateTokens(response);
69
+ tokensUsed += inputTokens + outputTokens;
70
+ // Check if response references known data (simple heuristic)
71
+ const grounded = p.knowledge.some(k => {
72
+ const words = k.split(' ').filter(w => w.length > 5).slice(0, 3);
73
+ return words.some(w => response.toLowerCase().includes(w.toLowerCase()));
74
+ });
75
+ return { personaId: p.id, personaName: p.name, personaType: p.type, action: response, active: true, grounded };
76
+ }));
77
+ for (const r of results) {
78
+ if (r.status === 'fulfilled')
79
+ actions.push(r.value);
80
+ }
81
+ }
82
+ // Inactive personas
83
+ for (const p of personas) {
84
+ if (!actions.some(a => a.personaId === p.id)) {
85
+ actions.push({ personaId: p.id, personaName: p.name, personaType: p.type, action: '', active: false, grounded: false });
86
+ }
87
+ }
88
+ // Extract state bullets
89
+ const newBullets = extractBullets(actions.filter(a => a.active));
90
+ stateBullets.push(...newBullets);
91
+ while (stateBullets.length > maxBullets)
92
+ stateBullets.shift();
93
+ // Summary
94
+ const active = actions.filter(a => a.active);
95
+ const summary = active.length <= 3
96
+ ? active.map(a => `${a.personaName}: ${a.action.slice(0, 100)}`).join('. ')
97
+ : `${active.length} acted. ${active.slice(0, 2).map(a => `${a.personaName}: ${a.action.slice(0, 80)}`).join('; ')}`;
98
+ // Consensus
99
+ const roundConsensus = detectConsensus(active.map(a => a.action));
100
+ trendHistory.push(roundConsensus || 'mixed');
101
+ if (roundConsensus && roundConsensus === lastConsensus) {
102
+ consensusStreak++;
103
+ if (consensusStreak >= 3 && round >= roundCount * 0.5)
104
+ convergenceRound = round;
105
+ }
106
+ else {
107
+ consensusStreak = Math.max(0, consensusStreak - 1); // decay, don't reset
108
+ }
109
+ lastConsensus = roundConsensus || lastConsensus;
110
+ rounds.push({ round, actions, summary, stateBullets: [...stateBullets], consensus: roundConsensus, eventInjected, activeCount: active.length, totalCount: personas.length });
111
+ // Early stop: converged AND no more events pending
112
+ if (convergenceRound && round >= convergenceRound + 2 && !events.some(e => e.round > round))
113
+ break;
114
+ }
115
+ return {
116
+ simulationId, question, variables, events, rounds, finalState: stateBullets,
117
+ emergentConsensus: lastConsensus || 'No clear consensus emerged.',
118
+ convergenceRound, trendHistory,
119
+ personas: personas.map(p => ({ id: p.id, name: p.name, type: p.type, role: p.role, memoryCount: p.memoryCount })),
120
+ tokensUsed, roundsCompleted: rounds.length, roundsPlanned: roundCount,
121
+ aborted, durationMs: Date.now() - startTime,
122
+ };
123
+ }
124
+ // ── Helpers ──
125
+ function estimateTokens(text) { return Math.ceil(text.length / 3); }
126
+ function extractBullets(actions) {
127
+ const bullets = [];
128
+ for (const a of actions) {
129
+ const sentences = a.action.split(/[.!]\s+/).filter(s => s.length > 20 && s.length < 200);
130
+ for (const s of sentences) {
131
+ if (/\b(would|will|decide|switch|leave|stay|increase|decrease|launch|cancel|respond|react|announce|invest|cut|raise|delay)\b/i.test(s)) {
132
+ const prefix = a.grounded ? '' : '[est] ';
133
+ bullets.push(`${prefix}${a.personaName}: ${s.trim().replace(/\n/g, ' ')}`);
134
+ if (bullets.length >= 3)
135
+ return bullets;
136
+ }
137
+ }
138
+ }
139
+ if (bullets.length === 0 && actions.length > 0) {
140
+ const first = actions[0];
141
+ const s = first.action.split(/[.!]\s+/)[0] || first.action.slice(0, 150);
142
+ bullets.push(`${first.personaName}: ${s.trim()}`);
143
+ }
144
+ return bullets.slice(0, 3);
145
+ }
146
+ function detectConsensus(actions) {
147
+ if (actions.length < 3)
148
+ return null;
149
+ const keywords = new Map();
150
+ for (const a of actions) {
151
+ const words = a.toLowerCase().match(/\b(leave|stay|switch|increase|decrease|positive|negative|risk|opportunity|churn|retain|grow|decline|wait|accelerate|cancel|delay|invest|cut)\b/g) || [];
152
+ for (const w of words)
153
+ keywords.set(w, (keywords.get(w) || 0) + 1);
154
+ }
155
+ const threshold = actions.length * 0.5;
156
+ const dominant = [...keywords.entries()].filter(([, c]) => c >= threshold).sort((a, b) => b[1] - a[1]);
157
+ return dominant.length > 0 ? `Majority trend: ${dominant.map(([w]) => w).join(', ')}` : null;
158
+ }
159
+ function extractRecentConsensus(rounds) {
160
+ const recent = rounds.slice(-3).map(r => r.consensus).filter(Boolean);
161
+ return recent[recent.length - 1] || 'mixed signals';
162
+ }
163
+ function seededRandom(seed) {
164
+ let s = seed;
165
+ return () => { s = (s * 1664525 + 1013904223) & 0xffffffff; return (s >>> 0) / 0xffffffff; };
166
+ }
167
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/simulation/runner.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,yEAAyE;AACzE,oEAAoE;AAGpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAgDxD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAYnC;IACC,MAAM,EACJ,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAC7C,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,SAAS,GAAG,KAAK,GACnD,GAAG,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACrE,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;IAClC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAElE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;YAAC,MAAM;QAAC,CAAC;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAElC,wDAAwD;QACxD,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAC1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,WAAW,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnG,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,gCAAgC;QAChC,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACjE,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAChE,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC5C,SAAS,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,YAAY,GAAG;YACnB,uBAAuB,WAAW,EAAE;YACpC,SAAS,KAAK,OAAO,UAAU,GAAG;YAClC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,uCAAuC,CAAC,CAAC,CAAC,EAAE;YAC9E,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC9G,YAAY,CAAC,CAAC,CAAC,cAAc,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;YAChD,iFAAiF;SAClF,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,sEAAsE;QACtE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACzC,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,IAAI,GAAG,CAAC;YACpC,kDAAkD;YAClD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,0BAA0B;QAC1B,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;gBAClB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAC7D,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBAClF,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC9C,UAAU,IAAI,WAAW,GAAG,YAAY,CAAC;gBACzC,6DAA6D;gBAC7D,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBACpC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACjE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC3E,CAAC,CAAC,CAAC;gBACH,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACjH,CAAC,CAAC,CACH,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1H,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,YAAY,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QACjC,OAAO,YAAY,CAAC,MAAM,GAAG,UAAU;YAAE,YAAY,CAAC,KAAK,EAAE,CAAC;QAE9D,UAAU;QACV,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3E,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,WAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAEtH,YAAY;QACZ,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,YAAY,CAAC,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,CAAC;QAC7C,IAAI,cAAc,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;YACvD,eAAe,EAAE,CAAC;YAClB,IAAI,eAAe,IAAI,CAAC,IAAI,KAAK,IAAI,UAAU,GAAG,GAAG;gBAAE,gBAAgB,GAAG,KAAK,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB;QAC3E,CAAC;QACD,aAAa,GAAG,cAAc,IAAI,aAAa,CAAC;QAEhD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAE7K,mDAAmD;QACnD,IAAI,gBAAgB,IAAI,KAAK,IAAI,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;YAAE,MAAM;IACrG,CAAC;IAED,OAAO;QACL,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY;QAC3E,iBAAiB,EAAE,aAAa,IAAI,6BAA6B;QACjE,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACjH,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU;QACrE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KAC5C,CAAC;AACJ,CAAC;AAED,gBAAgB;AAEhB,SAAS,cAAc,CAAC,IAAY,IAAY,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpF,SAAS,cAAc,CAAC,OAAsB;IAC5C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,0HAA0H,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvI,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3E,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;oBAAE,OAAO,OAAO,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,OAAiB;IACxC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,iJAAiJ,CAAC,IAAI,EAAE,CAAC;QAC7L,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/F,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAqB;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC;AACtD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,OAAO,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { MemoryItem } from './types.js';
2
+ export interface TemporalMemory extends MemoryItem {
3
+ _superseded: boolean;
4
+ _superseded_by?: string;
5
+ _supersession_confidence: 'explicit' | 'inferred' | 'none';
6
+ _chain_head: boolean;
7
+ _chain_broken: boolean;
8
+ _chain_fork: boolean;
9
+ _hit_count?: number;
10
+ _matched_queries?: number;
11
+ _original_relevance?: number;
12
+ }
13
+ export interface TemporalGrouping {
14
+ current: TemporalMemory[];
15
+ superseded: TemporalMemory[];
16
+ temporal_context: {
17
+ newest_memory: string;
18
+ oldest_memory: string;
19
+ chain_count: number;
20
+ fork_count: number;
21
+ broken_chain_count: number;
22
+ warning: string | null;
23
+ };
24
+ }
25
+ /**
26
+ * Detect supersession relationships from chain links (previous_memory_id / derived_from).
27
+ * Returns a map of superseded_id → superseding_id.
28
+ */
29
+ export declare function detectChains(memories: MemoryItem[]): {
30
+ supersededBy: Map<string, string>;
31
+ chainHeads: Set<string>;
32
+ forks: Set<string>;
33
+ brokenChains: Set<string>;
34
+ };
35
+ /**
36
+ * For memories without chain links, detect possible supersession by timestamp gap.
37
+ * Groups by content similarity — only memories about the same topic can supersede each other.
38
+ * Returns low-confidence supersession pairs.
39
+ */
40
+ export declare function detectHeuristicSupersession(memories: MemoryItem[], alreadySuperseded: Set<string>): Map<string, {
41
+ supersededBy: string;
42
+ confidence: 'inferred';
43
+ }>;
44
+ /**
45
+ * Apply temporal decay to relevance scores.
46
+ * Semantic (tier 2) and pinned (tier 0) memories are exempt — they represent durable knowledge.
47
+ * Only episodic memories (tier 1) decay.
48
+ */
49
+ export declare function applyTemporalDecay(mem: TemporalMemory): number;
50
+ /**
51
+ * Takes a flat list of memories, applies chain detection, supersession marking,
52
+ * temporal decay, and returns grouped results.
53
+ */
54
+ export declare function temporalMerge(memories: MemoryItem[]): TemporalGrouping;
55
+ /**
56
+ * Deduplicate and merge memories from multiple search queries.
57
+ * Memories appearing in multiple queries get boosted scores.
58
+ * H3.4: Returns matched_query_indices per memory (not full strings).
59
+ * H3.5: Never reorders input queries — indices are stable.
60
+ */
61
+ export declare function mergeMultiQueryResults(perQueryResults: Array<{
62
+ query: string;
63
+ memories: MemoryItem[];
64
+ }>, strategy?: 'union' | 'intersection' | 'weighted', limit?: number, queryWeights?: number[], threshold?: number): {
65
+ merged: MemoryItem[];
66
+ diversity_score: number;
67
+ per_query_counts: number[];
68
+ matched_query_indices: Record<string, number[]>;
69
+ };
70
+ //# sourceMappingURL=temporal_merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal_merge.d.ts","sourceRoot":"","sources":["../src/temporal_merge.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAY7C,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,gBAAgB,EAAE;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC;CACH;AAUD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG;IACpD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3B,CAkDA;AAID;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,UAAU,EAAE,EACtB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC,CAiC/D;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAU9D;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,gBAAgB,CA+FtE;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,EACjE,QAAQ,GAAE,OAAO,GAAG,cAAc,GAAG,UAAuB,EAC5D,KAAK,GAAE,MAAW,EAClB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,SAAS,GAAE,MAAU,GACpB;IAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAiDhI"}