@agent-e/core 1.1.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.
@@ -0,0 +1,532 @@
1
+ type EconomicEventType = 'trade' | 'mint' | 'burn' | 'transfer' | 'produce' | 'consume' | 'role_change' | 'spawn' | 'churn';
2
+ interface EconomicEvent {
3
+ type: EconomicEventType;
4
+ timestamp: number;
5
+ actor: string;
6
+ role?: string;
7
+ resource?: string;
8
+ amount?: number;
9
+ price?: number;
10
+ from?: string;
11
+ to?: string;
12
+ metadata?: Record<string, unknown>;
13
+ }
14
+ type PinchPointStatus = 'optimal' | 'oversupplied' | 'scarce';
15
+ interface EconomyMetrics {
16
+ tick: number;
17
+ timestamp: number;
18
+ totalSupply: number;
19
+ netFlow: number;
20
+ velocity: number;
21
+ inflationRate: number;
22
+ populationByRole: Record<string, number>;
23
+ roleShares: Record<string, number>;
24
+ totalAgents: number;
25
+ churnRate: number;
26
+ churnByRole: Record<string, number>;
27
+ personaDistribution: Record<string, number>;
28
+ giniCoefficient: number;
29
+ medianBalance: number;
30
+ meanBalance: number;
31
+ top10PctShare: number;
32
+ meanMedianDivergence: number;
33
+ priceIndex: number;
34
+ productionIndex: number;
35
+ capacityUsage: number;
36
+ prices: Record<string, number>;
37
+ priceVolatility: Record<string, number>;
38
+ supplyByResource: Record<string, number>;
39
+ demandSignals: Record<string, number>;
40
+ pinchPoints: Record<string, PinchPointStatus>;
41
+ avgSatisfaction: number;
42
+ blockedAgentCount: number;
43
+ timeToValue: number;
44
+ faucetVolume: number;
45
+ sinkVolume: number;
46
+ tapSinkRatio: number;
47
+ poolSizes: Record<string, number>;
48
+ anchorRatioDrift: number;
49
+ extractionRatio: number;
50
+ newUserDependency: number;
51
+ smokeTestRatio: number;
52
+ currencyInsulation: number;
53
+ sharkToothPeaks: number[];
54
+ sharkToothValleys: number[];
55
+ eventCompletionRate: number;
56
+ arbitrageIndex: number;
57
+ contentDropAge: number;
58
+ giftTradeRatio: number;
59
+ disposalTradeRatio: number;
60
+ custom: Record<string, number>;
61
+ }
62
+ declare function emptyMetrics(tick?: number): EconomyMetrics;
63
+ type PrincipleCategory = 'supply_chain' | 'incentive' | 'population' | 'currency' | 'bootstrap' | 'feedback' | 'regulator' | 'market_dynamics' | 'measurement' | 'wealth_distribution' | 'resource' | 'system_design' | 'player_experience' | 'statistical' | 'system_dynamics' | 'open_economy' | 'liveops';
64
+ interface PrincipleViolation {
65
+ violated: true;
66
+ severity: number;
67
+ evidence: Record<string, unknown>;
68
+ suggestedAction: SuggestedAction;
69
+ confidence: number;
70
+ estimatedLag?: number;
71
+ }
72
+ interface PrincipleOk {
73
+ violated: false;
74
+ }
75
+ type PrincipleResult = PrincipleViolation | PrincipleOk;
76
+ interface Principle {
77
+ id: string;
78
+ name: string;
79
+ category: PrincipleCategory;
80
+ description: string;
81
+ check: (metrics: EconomyMetrics, thresholds: Thresholds) => PrincipleResult;
82
+ }
83
+ interface SuggestedAction {
84
+ parameter: string;
85
+ direction: 'increase' | 'decrease' | 'set';
86
+ magnitude?: number;
87
+ absoluteValue?: number;
88
+ reasoning: string;
89
+ }
90
+ interface ActionPlan {
91
+ id: string;
92
+ diagnosis: Diagnosis;
93
+ parameter: string;
94
+ currentValue: number;
95
+ targetValue: number;
96
+ maxChangePercent: number;
97
+ cooldownTicks: number;
98
+ rollbackCondition: RollbackCondition;
99
+ simulationResult: SimulationResult;
100
+ estimatedLag: number;
101
+ appliedAt?: number;
102
+ }
103
+ interface RollbackCondition {
104
+ metric: keyof EconomyMetrics | string;
105
+ direction: 'above' | 'below';
106
+ threshold: number;
107
+ checkAfterTick: number;
108
+ }
109
+ interface Diagnosis {
110
+ principle: Principle;
111
+ violation: PrincipleViolation;
112
+ tick: number;
113
+ }
114
+ interface SimulationOutcome {
115
+ p10: EconomyMetrics;
116
+ p50: EconomyMetrics;
117
+ p90: EconomyMetrics;
118
+ mean: EconomyMetrics;
119
+ }
120
+ interface SimulationResult {
121
+ proposedAction: SuggestedAction;
122
+ iterations: number;
123
+ forwardTicks: number;
124
+ outcomes: SimulationOutcome;
125
+ netImprovement: boolean;
126
+ noNewProblems: boolean;
127
+ confidenceInterval: [number, number];
128
+ estimatedEffectTick: number;
129
+ overshootRisk: number;
130
+ }
131
+ type DecisionResult = 'applied' | 'skipped_cooldown' | 'skipped_simulation_failed' | 'skipped_locked' | 'skipped_override' | 'rolled_back';
132
+ interface DecisionEntry {
133
+ id: string;
134
+ tick: number;
135
+ timestamp: number;
136
+ diagnosis: Diagnosis;
137
+ plan: ActionPlan;
138
+ result: DecisionResult;
139
+ reasoning: string;
140
+ metricsSnapshot: EconomyMetrics;
141
+ }
142
+ interface EconomyState {
143
+ tick: number;
144
+ roles: string[];
145
+ resources: string[];
146
+ currency: string;
147
+ agentBalances: Record<string, number>;
148
+ agentRoles: Record<string, string>;
149
+ agentInventories: Record<string, Record<string, number>>;
150
+ agentSatisfaction?: Record<string, number>;
151
+ marketPrices: Record<string, number>;
152
+ recentTransactions: EconomicEvent[];
153
+ poolSizes?: Record<string, number>;
154
+ customData?: Record<string, unknown>;
155
+ }
156
+ interface EconomyAdapter {
157
+ /** Return current full state snapshot */
158
+ getState(): EconomyState | Promise<EconomyState>;
159
+ /** Apply a parameter change to the host system */
160
+ setParam(key: string, value: number): void | Promise<void>;
161
+ /** Optional: adapter pushes events as they happen */
162
+ onEvent?: (handler: (event: EconomicEvent) => void) => void;
163
+ }
164
+ interface Thresholds {
165
+ meanMedianDivergenceMax: number;
166
+ simulationMinIterations: number;
167
+ personaMonocultureMax: number;
168
+ personaMinClusters: number;
169
+ extractionRatioYellow: number;
170
+ extractionRatioRed: number;
171
+ smokeTestWarning: number;
172
+ smokeTestCritical: number;
173
+ currencyInsulationMax: number;
174
+ timeBudgetRatio: number;
175
+ payPowerRatioMax: number;
176
+ payPowerRatioTarget: number;
177
+ sharkToothPeakDecay: number;
178
+ sharkToothValleyDecay: number;
179
+ eventCompletionMin: number;
180
+ eventCompletionMax: number;
181
+ lagMultiplierMin: number;
182
+ lagMultiplierMax: number;
183
+ complexityBudgetMax: number;
184
+ replacementRateMultiplier: number;
185
+ maxAdjustmentPercent: number;
186
+ cooldownTicks: number;
187
+ arenaWinRate: number;
188
+ arenaHouseCut: number;
189
+ roleSwitchFrictionMax: number;
190
+ poolCapPercent: number;
191
+ poolDecayRate: number;
192
+ stampedeProfitRatio: number;
193
+ blockedAgentMaxFraction: number;
194
+ giniWarnThreshold: number;
195
+ giniRedThreshold: number;
196
+ churnWarnRate: number;
197
+ netFlowWarnThreshold: number;
198
+ arbitrageIndexWarning: number;
199
+ arbitrageIndexCritical: number;
200
+ contentDropCooldownTicks: number;
201
+ postDropArbitrageMax: number;
202
+ relativePriceConvergenceTarget: number;
203
+ priceDiscoveryWindowTicks: number;
204
+ giftTradeFilterRatio: number;
205
+ disposalTradeWeightDiscount: number;
206
+ }
207
+ type AgentEMode = 'autonomous' | 'advisor';
208
+ interface AgentEConfig {
209
+ adapter: EconomyAdapter | 'game' | 'defi' | 'marketplace';
210
+ mode?: AgentEMode;
211
+ dominantRoles?: string[];
212
+ idealDistribution?: Record<string, number>;
213
+ gracePeriod?: number;
214
+ checkInterval?: number;
215
+ maxAdjustmentPercent?: number;
216
+ cooldownTicks?: number;
217
+ thresholds?: Partial<Thresholds>;
218
+ onDecision?: (entry: DecisionEntry) => void;
219
+ onAlert?: (diagnosis: Diagnosis) => void;
220
+ onRollback?: (plan: ActionPlan, reason: string) => void;
221
+ }
222
+ type PersonaType = 'Gamer' | 'Trader' | 'Collector' | 'Speculator' | 'Earner' | 'Builder' | 'Social' | 'Whale' | 'Influencer';
223
+ interface PersonaProfile {
224
+ type: PersonaType;
225
+ share: number;
226
+ healthyRangeMin: number;
227
+ healthyRangeMax: number;
228
+ }
229
+ type MetricResolution = 'fine' | 'medium' | 'coarse';
230
+ interface MetricQuery {
231
+ metric: keyof EconomyMetrics | string;
232
+ from?: number;
233
+ to?: number;
234
+ resolution?: MetricResolution;
235
+ }
236
+ interface MetricQueryResult {
237
+ metric: string;
238
+ resolution: MetricResolution;
239
+ points: Array<{
240
+ tick: number;
241
+ value: number;
242
+ }>;
243
+ }
244
+
245
+ declare class Diagnoser {
246
+ private principles;
247
+ constructor(principles: Principle[]);
248
+ addPrinciple(principle: Principle): void;
249
+ removePrinciple(id: string): void;
250
+ /**
251
+ * Run all principles against current metrics.
252
+ * Returns violations sorted by severity (highest first).
253
+ * Only one action is taken per cycle — the highest severity violation.
254
+ */
255
+ diagnose(metrics: EconomyMetrics, thresholds: Thresholds): Diagnosis[];
256
+ getPrinciples(): Principle[];
257
+ }
258
+
259
+ declare class DecisionLog {
260
+ private entries;
261
+ private maxEntries;
262
+ constructor(maxEntries?: number);
263
+ record(diagnosis: Diagnosis, plan: ActionPlan, result: DecisionResult, metrics: EconomyMetrics): DecisionEntry;
264
+ recordSkip(diagnosis: Diagnosis, result: DecisionResult, metrics: EconomyMetrics, reason: string): void;
265
+ query(filter?: {
266
+ since?: number;
267
+ until?: number;
268
+ issue?: string;
269
+ parameter?: string;
270
+ result?: DecisionResult;
271
+ }): DecisionEntry[];
272
+ latest(n?: number): DecisionEntry[];
273
+ export(format?: 'json' | 'text'): string;
274
+ private buildReasoning;
275
+ private stubPlan;
276
+ }
277
+
278
+ declare class MetricStore {
279
+ /** Fine: last 200 ticks, one entry per tick */
280
+ private fine;
281
+ /** Medium: last 200 windows of 10 ticks */
282
+ private medium;
283
+ /** Coarse: last 200 epochs of 100 ticks */
284
+ private coarse;
285
+ private ticksSinceLastMedium;
286
+ private ticksSinceLastCoarse;
287
+ private mediumAccumulator;
288
+ private coarseAccumulator;
289
+ record(metrics: EconomyMetrics): void;
290
+ latest(resolution?: MetricResolution): EconomyMetrics;
291
+ query(q: MetricQuery): MetricQueryResult;
292
+ /** Check if fine and coarse resolution metrics diverge significantly */
293
+ divergenceDetected(): boolean;
294
+ private bufferFor;
295
+ private aggregate;
296
+ }
297
+
298
+ type EventName = 'decision' | 'alert' | 'rollback' | 'beforeAction' | 'afterAction';
299
+ declare class AgentE {
300
+ private readonly config;
301
+ private readonly thresholds;
302
+ private adapter;
303
+ private mode;
304
+ private observer;
305
+ private diagnoser;
306
+ private simulator;
307
+ private planner;
308
+ private executor;
309
+ readonly log: DecisionLog;
310
+ readonly store: MetricStore;
311
+ private personaTracker;
312
+ private params;
313
+ private eventBuffer;
314
+ private isRunning;
315
+ private isPaused;
316
+ private currentTick;
317
+ private handlers;
318
+ constructor(config: AgentEConfig);
319
+ connect(adapter: EconomyAdapter): this;
320
+ start(): this;
321
+ pause(): void;
322
+ resume(): void;
323
+ stop(): void;
324
+ tick(state?: EconomyState): Promise<void>;
325
+ /** Apply a plan manually (for advisor mode) */
326
+ apply(plan: ActionPlan): Promise<void>;
327
+ lock(param: string): void;
328
+ unlock(param: string): void;
329
+ constrain(param: string, bounds: {
330
+ min: number;
331
+ max: number;
332
+ }): void;
333
+ addPrinciple(principle: Principle): void;
334
+ removePrinciple(id: string): void;
335
+ registerCustomMetric(name: string, fn: (state: EconomyState) => number): void;
336
+ getDecisions(filter?: Parameters<DecisionLog['query']>[0]): DecisionEntry[];
337
+ getPrinciples(): Principle[];
338
+ getActivePlans(): ActionPlan[];
339
+ /** Access to the metric time-series store */
340
+ readonly metrics: {
341
+ query: (q: MetricQuery) => MetricQueryResult;
342
+ latest: (resolution?: "fine" | "medium" | "coarse") => EconomyMetrics;
343
+ };
344
+ on(event: EventName, handler: (...args: unknown[]) => unknown): this;
345
+ off(event: EventName, handler: (...args: unknown[]) => unknown): this;
346
+ private emit;
347
+ diagnoseNow(): ReturnType<Diagnoser['diagnose']>;
348
+ getHealth(): number;
349
+ ingest(event: EconomicEvent): void;
350
+ }
351
+
352
+ declare class Observer {
353
+ private previousMetrics;
354
+ private previousPrices;
355
+ private customMetricFns;
356
+ private anchorBaseline;
357
+ registerCustomMetric(name: string, fn: (state: EconomyState) => number): void;
358
+ compute(state: EconomyState, recentEvents: EconomicEvent[]): EconomyMetrics;
359
+ }
360
+
361
+ declare class Simulator {
362
+ private diagnoser;
363
+ /**
364
+ * Simulate the effect of applying `action` to the current economy forward `forwardTicks`.
365
+ * Runs `iterations` Monte Carlo trials and returns the outcome distribution.
366
+ *
367
+ * The inner model is intentionally lightweight — it models how key metrics evolve
368
+ * under a parameter change using simplified dynamics. This is not a full agent simulation;
369
+ * it is a fast inner model that catches obvious over/under-corrections.
370
+ */
371
+ simulate(action: SuggestedAction, currentMetrics: EconomyMetrics, thresholds: Thresholds, iterations?: number, forwardTicks?: number): SimulationResult;
372
+ /**
373
+ * Lightweight forward model: apply action then project key metrics forward.
374
+ * Uses simplified dynamics — not a full agent replay.
375
+ */
376
+ private runForward;
377
+ private actionMultiplier;
378
+ private flowEffect;
379
+ private checkImprovement;
380
+ private averageMetrics;
381
+ }
382
+
383
+ interface ParameterConstraint {
384
+ min: number;
385
+ max: number;
386
+ }
387
+ declare class Planner {
388
+ private lockedParams;
389
+ private constraints;
390
+ private cooldowns;
391
+ private activePlanCount;
392
+ lock(param: string): void;
393
+ unlock(param: string): void;
394
+ constrain(param: string, constraint: ParameterConstraint): void;
395
+ /**
396
+ * Convert a diagnosis into an ActionPlan.
397
+ * Returns null if:
398
+ * - parameter is locked
399
+ * - parameter is still in cooldown
400
+ * - simulation result failed
401
+ * - complexity budget exceeded
402
+ */
403
+ plan(diagnosis: Diagnosis, metrics: EconomyMetrics, simulationResult: SimulationResult, currentParams: Record<string, number>, thresholds: Thresholds): ActionPlan | null;
404
+ recordApplied(plan: ActionPlan, tick: number): void;
405
+ recordRolledBack(_plan: ActionPlan): void;
406
+ isOnCooldown(param: string, currentTick: number, cooldownTicks: number): boolean;
407
+ /** Reset all cooldowns (useful for testing) */
408
+ resetCooldowns(): void;
409
+ }
410
+
411
+ declare class Executor {
412
+ private activePlans;
413
+ apply(plan: ActionPlan, adapter: EconomyAdapter, currentParams: Record<string, number>): Promise<void>;
414
+ /**
415
+ * Check all active plans for rollback conditions.
416
+ * Called every tick after metrics are computed.
417
+ * Returns list of plans that were rolled back.
418
+ */
419
+ checkRollbacks(metrics: EconomyMetrics, adapter: EconomyAdapter): Promise<ActionPlan[]>;
420
+ private getMetricValue;
421
+ getActivePlans(): ActionPlan[];
422
+ }
423
+
424
+ declare class PersonaTracker {
425
+ private agentHistory;
426
+ /** Ingest a state snapshot and update agent signal history */
427
+ update(state: EconomyState): void;
428
+ /** Classify all agents and return persona distribution */
429
+ getDistribution(): Record<string, number>;
430
+ private classify;
431
+ }
432
+
433
+ declare const DEFAULT_THRESHOLDS: Thresholds;
434
+ declare const PERSONA_HEALTHY_RANGES: Record<string, {
435
+ min: number;
436
+ max: number;
437
+ }>;
438
+
439
+ declare const P1_ProductionMatchesConsumption: Principle;
440
+ declare const P2_ClosedLoopsNeedDirectHandoff: Principle;
441
+ declare const P3_BootstrapCapitalCoversFirstTransaction: Principle;
442
+ declare const P4_MaterialsFlowFasterThanCooldown: Principle;
443
+ declare const P60_SurplusDisposalAsymmetry: Principle;
444
+ declare const SUPPLY_CHAIN_PRINCIPLES: Principle[];
445
+
446
+ declare const P5_ProfitabilityIsCompetitive: Principle;
447
+ declare const P6_CrowdingMultiplierOnAllRoles: Principle;
448
+ declare const P7_NonSpecialistsSubsidiseSpecialists: Principle;
449
+ declare const P8_RegulatorCannotFightDesign: Principle;
450
+ declare const INCENTIVE_PRINCIPLES: Principle[];
451
+
452
+ declare const P9_RoleSwitchingNeedsFriction: Principle;
453
+ declare const P10_SpawnWeightingUsesInversePopulation: Principle;
454
+ declare const P11_TwoTierPressure: Principle;
455
+ declare const P46_PersonaDiversity: Principle;
456
+ declare const POPULATION_PRINCIPLES: Principle[];
457
+
458
+ declare const P12_OnePrimaryFaucet: Principle;
459
+ declare const P13_PotsAreZeroSumAndSelfRegulate: Principle;
460
+ declare const P14_TrackActualInjection: Principle;
461
+ declare const P15_PoolsNeedCapAndDecay: Principle;
462
+ declare const P16_WithdrawalPenaltyScales: Principle;
463
+ declare const P32_VelocityAboveSupply: Principle;
464
+ declare const P58_NoNaturalNumeraire: Principle;
465
+ declare const CURRENCY_FLOW_PRINCIPLES: Principle[];
466
+
467
+ declare const P17_GracePeriodBeforeIntervention: Principle;
468
+ declare const P18_FirstProducerNeedsStartingInventory: Principle;
469
+ declare const P19_StartingSupplyExceedsDemand: Principle;
470
+ declare const BOOTSTRAP_PRINCIPLES: Principle[];
471
+
472
+ declare const P20_DecayPreventsAccumulation: Principle;
473
+ declare const P21_PriceFromGlobalSupply: Principle;
474
+ declare const P22_MarketAwarenessPreventsSurplus: Principle;
475
+ declare const P23_ProfitabilityFactorsFeasibility: Principle;
476
+ declare const P24_BlockedAgentsDecayFaster: Principle;
477
+ declare const FEEDBACK_LOOP_PRINCIPLES: Principle[];
478
+
479
+ declare const P25_CorrectLeversForCorrectProblems: Principle;
480
+ declare const P26_ContinuousPressureBeatsThresholdCuts: Principle;
481
+ declare const P27_AdjustmentsNeedCooldowns: Principle;
482
+ declare const P28_StructuralDominanceIsNotPathological: Principle;
483
+ declare const P38_CommunicationPreventsRevolt: Principle;
484
+ declare const REGULATOR_PRINCIPLES: Principle[];
485
+
486
+ declare const P29_PinchPoint: Principle;
487
+ declare const P30_MovingPinchPoint: Principle;
488
+ declare const P57_CombinatorialPriceSpace: Principle;
489
+ declare const MARKET_DYNAMICS_PRINCIPLES: Principle[];
490
+
491
+ declare const P31_AnchorValueTracking: Principle;
492
+ declare const P41_MultiResolutionMonitoring: Principle;
493
+ declare const P55_ArbitrageThermometer: Principle;
494
+ declare const P59_GiftEconomyNoise: Principle;
495
+ declare const MEASUREMENT_PRINCIPLES: Principle[];
496
+
497
+ declare const P42_TheMedianPrinciple: Principle;
498
+ declare const P43_SimulationMinimum: Principle;
499
+ declare const STATISTICAL_PRINCIPLES: Principle[];
500
+
501
+ declare const P39_TheLagPrinciple: Principle;
502
+ declare const P44_ComplexityBudget: Principle;
503
+ declare const SYSTEM_DYNAMICS_PRINCIPLES: Principle[];
504
+
505
+ declare const P35_DestructionCreatesValue: Principle;
506
+ declare const P40_ReplacementRate: Principle;
507
+ declare const P49_IdleAssetTax: Principle;
508
+ declare const RESOURCE_MGMT_PRINCIPLES: Principle[];
509
+
510
+ declare const P33_FairNotEqual: Principle;
511
+ declare const P36_MechanicFrictionDetector: Principle;
512
+ declare const P37_LatecommerProblem: Principle;
513
+ declare const P45_TimeBudget: Principle;
514
+ declare const P50_PayPowerRatio: Principle;
515
+ declare const PLAYER_EXPERIENCE_PRINCIPLES: Principle[];
516
+
517
+ declare const P34_ExtractionRatio: Principle;
518
+ declare const P47_SmokeTest: Principle;
519
+ declare const P48_CurrencyInsulation: Principle;
520
+ declare const OPEN_ECONOMY_PRINCIPLES: Principle[];
521
+
522
+ declare const P51_SharkTooth: Principle;
523
+ declare const P52_EndowmentEffect: Principle;
524
+ declare const P53_EventCompletionRate: Principle;
525
+ declare const P54_LiveOpsCadence: Principle;
526
+ declare const P56_ContentDropShock: Principle;
527
+ declare const LIVEOPS_PRINCIPLES: Principle[];
528
+
529
+ /** All 60 built-in principles in priority order (supply chain → liveops) */
530
+ declare const ALL_PRINCIPLES: Principle[];
531
+
532
+ export { ALL_PRINCIPLES, type ActionPlan, AgentE, type AgentEConfig, type AgentEMode, BOOTSTRAP_PRINCIPLES, CURRENCY_FLOW_PRINCIPLES, DEFAULT_THRESHOLDS, type DecisionEntry, DecisionLog, type DecisionResult, Diagnoser, type Diagnosis, type EconomicEvent, type EconomicEventType, type EconomyAdapter, type EconomyMetrics, type EconomyState, Executor, FEEDBACK_LOOP_PRINCIPLES, INCENTIVE_PRINCIPLES, LIVEOPS_PRINCIPLES, MARKET_DYNAMICS_PRINCIPLES, MEASUREMENT_PRINCIPLES, type MetricQuery, type MetricQueryResult, type MetricResolution, MetricStore, OPEN_ECONOMY_PRINCIPLES, Observer, P10_SpawnWeightingUsesInversePopulation, P11_TwoTierPressure, P12_OnePrimaryFaucet, P13_PotsAreZeroSumAndSelfRegulate, P14_TrackActualInjection, P15_PoolsNeedCapAndDecay, P16_WithdrawalPenaltyScales, P17_GracePeriodBeforeIntervention, P18_FirstProducerNeedsStartingInventory, P19_StartingSupplyExceedsDemand, P1_ProductionMatchesConsumption, P20_DecayPreventsAccumulation, P21_PriceFromGlobalSupply, P22_MarketAwarenessPreventsSurplus, P23_ProfitabilityFactorsFeasibility, P24_BlockedAgentsDecayFaster, P25_CorrectLeversForCorrectProblems, P26_ContinuousPressureBeatsThresholdCuts, P27_AdjustmentsNeedCooldowns, P28_StructuralDominanceIsNotPathological, P29_PinchPoint, P2_ClosedLoopsNeedDirectHandoff, P30_MovingPinchPoint, P31_AnchorValueTracking, P32_VelocityAboveSupply, P33_FairNotEqual, P34_ExtractionRatio, P35_DestructionCreatesValue, P36_MechanicFrictionDetector, P37_LatecommerProblem, P38_CommunicationPreventsRevolt, P39_TheLagPrinciple, P3_BootstrapCapitalCoversFirstTransaction, P40_ReplacementRate, P41_MultiResolutionMonitoring, P42_TheMedianPrinciple, P43_SimulationMinimum, P44_ComplexityBudget, P45_TimeBudget, P46_PersonaDiversity, P47_SmokeTest, P48_CurrencyInsulation, P49_IdleAssetTax, P4_MaterialsFlowFasterThanCooldown, P50_PayPowerRatio, P51_SharkTooth, P52_EndowmentEffect, P53_EventCompletionRate, P54_LiveOpsCadence, P55_ArbitrageThermometer, P56_ContentDropShock, P57_CombinatorialPriceSpace, P58_NoNaturalNumeraire, P59_GiftEconomyNoise, P5_ProfitabilityIsCompetitive, P60_SurplusDisposalAsymmetry, P6_CrowdingMultiplierOnAllRoles, P7_NonSpecialistsSubsidiseSpecialists, P8_RegulatorCannotFightDesign, P9_RoleSwitchingNeedsFriction, PERSONA_HEALTHY_RANGES, PLAYER_EXPERIENCE_PRINCIPLES, POPULATION_PRINCIPLES, type PersonaProfile, PersonaTracker, type PersonaType, type PinchPointStatus, Planner, type Principle, type PrincipleCategory, type PrincipleOk, type PrincipleResult, type PrincipleViolation, REGULATOR_PRINCIPLES, RESOURCE_MGMT_PRINCIPLES, type RollbackCondition, STATISTICAL_PRINCIPLES, SUPPLY_CHAIN_PRINCIPLES, SYSTEM_DYNAMICS_PRINCIPLES, type SimulationOutcome, type SimulationResult, Simulator, type SuggestedAction, type Thresholds, emptyMetrics };