paracosm 0.7.409 → 0.7.431

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 (146) hide show
  1. package/README.md +79 -14
  2. package/dist/cli/compile.d.ts +1 -1
  3. package/dist/cli/compile.js +4 -4
  4. package/dist/cli/fetch-seed-url.d.ts +48 -0
  5. package/dist/cli/fetch-seed-url.d.ts.map +1 -0
  6. package/dist/cli/fetch-seed-url.js +109 -0
  7. package/dist/cli/fetch-seed-url.js.map +1 -0
  8. package/dist/cli/fork-preconditions.d.ts +17 -0
  9. package/dist/cli/fork-preconditions.d.ts.map +1 -0
  10. package/dist/cli/fork-preconditions.js +51 -0
  11. package/dist/cli/fork-preconditions.js.map +1 -0
  12. package/dist/cli/init-templates.d.ts +43 -0
  13. package/dist/cli/init-templates.d.ts.map +1 -0
  14. package/dist/cli/init-templates.js +141 -0
  15. package/dist/cli/init-templates.js.map +1 -0
  16. package/dist/cli/init.d.ts +46 -0
  17. package/dist/cli/init.d.ts.map +1 -0
  18. package/dist/cli/init.js +207 -0
  19. package/dist/cli/init.js.map +1 -0
  20. package/dist/cli/pair-runner.d.ts +25 -2
  21. package/dist/cli/pair-runner.d.ts.map +1 -1
  22. package/dist/cli/pair-runner.js +141 -5
  23. package/dist/cli/pair-runner.js.map +1 -1
  24. package/dist/cli/quickstart-routes.d.ts +35 -0
  25. package/dist/cli/quickstart-routes.d.ts.map +1 -0
  26. package/dist/cli/quickstart-routes.js +100 -0
  27. package/dist/cli/quickstart-routes.js.map +1 -0
  28. package/dist/cli/run.js +8 -0
  29. package/dist/cli/run.js.map +1 -1
  30. package/dist/cli/server/enrich-run-record.d.ts +22 -0
  31. package/dist/cli/server/enrich-run-record.d.ts.map +1 -0
  32. package/dist/cli/server/enrich-run-record.js +27 -0
  33. package/dist/cli/server/enrich-run-record.js.map +1 -0
  34. package/dist/cli/server/routes/platform-api.d.ts +19 -3
  35. package/dist/cli/server/routes/platform-api.d.ts.map +1 -1
  36. package/dist/cli/server/routes/platform-api.js +174 -5
  37. package/dist/cli/server/routes/platform-api.js.map +1 -1
  38. package/dist/cli/server/run-history-store.d.ts +27 -1
  39. package/dist/cli/server/run-history-store.d.ts.map +1 -1
  40. package/dist/cli/server/run-history-store.js +5 -0
  41. package/dist/cli/server/run-history-store.js.map +1 -1
  42. package/dist/cli/server/run-record.d.ts +13 -0
  43. package/dist/cli/server/run-record.d.ts.map +1 -1
  44. package/dist/cli/server/run-record.js.map +1 -1
  45. package/dist/cli/server/sqlite-run-history-store.d.ts +6 -0
  46. package/dist/cli/server/sqlite-run-history-store.d.ts.map +1 -0
  47. package/dist/cli/server/sqlite-run-history-store.js +226 -0
  48. package/dist/cli/server/sqlite-run-history-store.js.map +1 -0
  49. package/dist/cli/server-app.d.ts +73 -2
  50. package/dist/cli/server-app.d.ts.map +1 -1
  51. package/dist/cli/server-app.js +409 -159
  52. package/dist/cli/server-app.js.map +1 -1
  53. package/dist/cli/session-title.js +1 -1
  54. package/dist/cli/sim-config.d.ts +13 -0
  55. package/dist/cli/sim-config.d.ts.map +1 -1
  56. package/dist/cli/sim-config.js +8 -1
  57. package/dist/cli/sim-config.js.map +1 -1
  58. package/dist/cli/simulate-route.d.ts +103 -0
  59. package/dist/cli/simulate-route.d.ts.map +1 -0
  60. package/dist/cli/simulate-route.js +95 -0
  61. package/dist/cli/simulate-route.js.map +1 -0
  62. package/dist/engine/compiler/cache.d.ts +2 -2
  63. package/dist/engine/compiler/cache.js +2 -2
  64. package/dist/engine/compiler/compile-from-seed.d.ts +78 -0
  65. package/dist/engine/compiler/compile-from-seed.d.ts.map +1 -0
  66. package/dist/engine/compiler/compile-from-seed.js +93 -0
  67. package/dist/engine/compiler/compile-from-seed.js.map +1 -0
  68. package/dist/engine/compiler/generate-fingerprint.d.ts.map +1 -1
  69. package/dist/engine/compiler/generate-fingerprint.js +3 -6
  70. package/dist/engine/compiler/generate-fingerprint.js.map +1 -1
  71. package/dist/engine/compiler/generate-politics.d.ts.map +1 -1
  72. package/dist/engine/compiler/generate-politics.js +3 -6
  73. package/dist/engine/compiler/generate-politics.js.map +1 -1
  74. package/dist/engine/compiler/generate-progression.d.ts +10 -1
  75. package/dist/engine/compiler/generate-progression.d.ts.map +1 -1
  76. package/dist/engine/compiler/generate-progression.js +15 -15
  77. package/dist/engine/compiler/generate-progression.js.map +1 -1
  78. package/dist/engine/compiler/generate-prompts.d.ts.map +1 -1
  79. package/dist/engine/compiler/generate-prompts.js +4 -7
  80. package/dist/engine/compiler/generate-prompts.js.map +1 -1
  81. package/dist/engine/compiler/generate-reactions.d.ts.map +1 -1
  82. package/dist/engine/compiler/generate-reactions.js +3 -6
  83. package/dist/engine/compiler/generate-reactions.js.map +1 -1
  84. package/dist/engine/compiler/index.d.ts +9 -6
  85. package/dist/engine/compiler/index.d.ts.map +1 -1
  86. package/dist/engine/compiler/index.js +9 -6
  87. package/dist/engine/compiler/index.js.map +1 -1
  88. package/dist/engine/compiler/sandbox-runner.d.ts +40 -0
  89. package/dist/engine/compiler/sandbox-runner.d.ts.map +1 -0
  90. package/dist/engine/compiler/sandbox-runner.js +278 -0
  91. package/dist/engine/compiler/sandbox-runner.js.map +1 -0
  92. package/dist/engine/compiler/scenario-fixture.d.ts +4 -4
  93. package/dist/engine/compiler/scenario-fixture.js +4 -4
  94. package/dist/engine/compiler/seed-ingestion.d.ts +2 -2
  95. package/dist/engine/compiler/seed-ingestion.js +2 -2
  96. package/dist/engine/compiler/state-shape-block.d.ts +1 -1
  97. package/dist/engine/compiler/state-shape-block.js +5 -5
  98. package/dist/engine/compiler/types.d.ts +2 -2
  99. package/dist/engine/compiler/types.d.ts.map +1 -1
  100. package/dist/engine/compiler/validate.js +1 -1
  101. package/dist/engine/core/kernel.d.ts +4 -4
  102. package/dist/engine/core/kernel.js +6 -6
  103. package/dist/engine/core/progression.d.ts +3 -3
  104. package/dist/engine/core/progression.js +21 -21
  105. package/dist/engine/core/state.d.ts +7 -5
  106. package/dist/engine/core/state.d.ts.map +1 -1
  107. package/dist/engine/digital-twin/index.d.ts +41 -0
  108. package/dist/engine/digital-twin/index.d.ts.map +1 -0
  109. package/dist/engine/digital-twin/index.js +40 -0
  110. package/dist/engine/digital-twin/index.js.map +1 -0
  111. package/dist/engine/index.d.ts +1 -1
  112. package/dist/engine/leader-presets.d.ts +39 -0
  113. package/dist/engine/leader-presets.d.ts.map +1 -0
  114. package/dist/engine/leader-presets.js +118 -0
  115. package/dist/engine/leader-presets.js.map +1 -0
  116. package/dist/engine/lunar/fingerprint.js +2 -2
  117. package/dist/engine/lunar/prompts.js +2 -2
  118. package/dist/engine/mars/fingerprint.js +1 -1
  119. package/dist/engine/mars/metrics.d.ts +2 -2
  120. package/dist/engine/mars/metrics.js +2 -2
  121. package/dist/engine/mars/prompts.js +3 -3
  122. package/dist/runtime/build-artifact.d.ts +2 -1
  123. package/dist/runtime/build-artifact.d.ts.map +1 -1
  124. package/dist/runtime/build-artifact.js +2 -1
  125. package/dist/runtime/build-artifact.js.map +1 -1
  126. package/dist/runtime/canonical-json.d.ts +25 -0
  127. package/dist/runtime/canonical-json.d.ts.map +1 -0
  128. package/dist/runtime/canonical-json.js +46 -0
  129. package/dist/runtime/canonical-json.js.map +1 -0
  130. package/dist/runtime/contracts.d.ts +1 -1
  131. package/dist/runtime/departments.js +1 -1
  132. package/dist/runtime/orchestrator.d.ts +44 -4
  133. package/dist/runtime/orchestrator.d.ts.map +1 -1
  134. package/dist/runtime/orchestrator.js +125 -33
  135. package/dist/runtime/orchestrator.js.map +1 -1
  136. package/dist/runtime/parsers.js +5 -5
  137. package/dist/runtime/reaction-step.js +2 -2
  138. package/dist/runtime/world-model/index.d.ts +172 -18
  139. package/dist/runtime/world-model/index.d.ts.map +1 -1
  140. package/dist/runtime/world-model/index.js +242 -4
  141. package/dist/runtime/world-model/index.js.map +1 -1
  142. package/dist/runtime/world-snapshot.d.ts +13 -0
  143. package/dist/runtime/world-snapshot.d.ts.map +1 -0
  144. package/dist/runtime/world-snapshot.js +19 -0
  145. package/dist/runtime/world-snapshot.js.map +1 -0
  146. package/package.json +19 -4
@@ -69,7 +69,7 @@ export class SimulationKernel {
69
69
  leaderId, seed,
70
70
  startTime, currentTime: startTime, currentTurn: 0,
71
71
  },
72
- systems: {
72
+ metrics: {
73
73
  // Mars-heritage numerics
74
74
  population: agents.length,
75
75
  powerKw: 400,
@@ -189,9 +189,9 @@ export class SimulationKernel {
189
189
  /** Apply a policy effect from the commander's decision. */
190
190
  applyPolicy(effect) {
191
191
  const { patches, events } = effect;
192
- if (patches.systems) {
193
- const c = this.state.systems;
194
- for (const [k, v] of Object.entries(patches.systems)) {
192
+ if (patches.metrics) {
193
+ const c = this.state.metrics;
194
+ for (const [k, v] of Object.entries(patches.metrics)) {
195
195
  if (v !== undefined && k in c)
196
196
  c[k] = v;
197
197
  }
@@ -232,7 +232,7 @@ export class SimulationKernel {
232
232
  this.state.metadata.currentTurn = nextTurn;
233
233
  const { state: progressed, events } = progressBetweenTurns(this.state, timeDelta, turnRng, progressionHook);
234
234
  this.state = progressed;
235
- this.state.systems.population = this.getAliveCount();
235
+ this.state.metrics.population = this.getAliveCount();
236
236
  this.updateFeaturedAgents(events);
237
237
  return this.getState();
238
238
  }
@@ -288,7 +288,7 @@ export class SimulationKernel {
288
288
  }
289
289
  /** Apply additive deltas to world systems (not absolute values). */
290
290
  applySystemDeltas(deltas, events = []) {
291
- const c = this.state.systems;
291
+ const c = this.state.metrics;
292
292
  for (const [k, v] of Object.entries(deltas)) {
293
293
  if (v !== undefined && typeof v === 'number' && k in c) {
294
294
  c[k] = c[k] + v;
@@ -1,4 +1,4 @@
1
- import type { Agent, WorldSystems, TurnEvent, SimulationState, HexacoProfile, TurnOutcome } from './state.js';
1
+ import type { Agent, WorldMetrics, TurnEvent, SimulationState, HexacoProfile, TurnOutcome } from './state.js';
2
2
  import { SeededRng } from './rng.js';
3
3
  declare const ROLE_ACTIVATIONS: Record<string, Partial<HexacoProfile>>;
4
4
  export { ROLE_ACTIVATIONS };
@@ -30,7 +30,7 @@ export declare function driftCommanderHexaco(leaderHexaco: HexacoProfile, outcom
30
30
  * Classify turn outcome as risky/conservative success/failure.
31
31
  * Deterministic from seed + decision text.
32
32
  */
33
- export declare function classifyOutcome(decisionText: string, riskyOption: string, riskSuccessProbability: number, systems: WorldSystems, rng: SeededRng): TurnOutcome;
33
+ export declare function classifyOutcome(decisionText: string, riskyOption: string, riskSuccessProbability: number, metrics: WorldMetrics, rng: SeededRng): TurnOutcome;
34
34
  /**
35
35
  * Classify turn outcome using structured option ID.
36
36
  * Preferred over text-based classifyOutcome.
@@ -38,7 +38,7 @@ export declare function classifyOutcome(decisionText: string, riskyOption: strin
38
38
  export declare function classifyOutcomeById(selectedOptionId: string, options: Array<{
39
39
  id: string;
40
40
  isRisky: boolean;
41
- }>, riskSuccessProbability: number, systems: WorldSystems, rng: SeededRng): TurnOutcome;
41
+ }>, riskSuccessProbability: number, metrics: WorldMetrics, rng: SeededRng): TurnOutcome;
42
42
  /**
43
43
  * Run all between-turn progression: aging, mortality, births, careers,
44
44
  * health degradation, resource production. All deterministic from seed.
@@ -135,14 +135,14 @@ export function driftCommanderHexaco(leaderHexaco, outcome, timeDelta, turn, tim
135
135
  * Classify turn outcome as risky/conservative success/failure.
136
136
  * Deterministic from seed + decision text.
137
137
  */
138
- export function classifyOutcome(decisionText, riskyOption, riskSuccessProbability, systems, rng) {
138
+ export function classifyOutcome(decisionText, riskyOption, riskSuccessProbability, metrics, rng) {
139
139
  const isRisky = decisionText.toLowerCase().includes(riskyOption.toLowerCase());
140
140
  let prob = riskSuccessProbability;
141
- if (systems.morale > 0.7)
141
+ if (metrics.morale > 0.7)
142
142
  prob += 0.1;
143
- if (systems.foodMonthsReserve > 12)
143
+ if (metrics.foodMonthsReserve > 12)
144
144
  prob += 0.05;
145
- if (systems.population > 150)
145
+ if (metrics.population > 150)
146
146
  prob -= 0.05;
147
147
  prob = Math.max(0.1, Math.min(0.9, prob));
148
148
  const success = rng.chance(prob);
@@ -158,15 +158,15 @@ export function classifyOutcome(decisionText, riskyOption, riskSuccessProbabilit
158
158
  * Classify turn outcome using structured option ID.
159
159
  * Preferred over text-based classifyOutcome.
160
160
  */
161
- export function classifyOutcomeById(selectedOptionId, options, riskSuccessProbability, systems, rng) {
161
+ export function classifyOutcomeById(selectedOptionId, options, riskSuccessProbability, metrics, rng) {
162
162
  const selected = options.find(o => o.id === selectedOptionId);
163
163
  const isRisky = selected?.isRisky ?? false;
164
164
  let prob = riskSuccessProbability;
165
- if (systems.morale > 0.7)
165
+ if (metrics.morale > 0.7)
166
166
  prob += 0.1;
167
- if (systems.foodMonthsReserve > 12)
167
+ if (metrics.foodMonthsReserve > 12)
168
168
  prob += 0.05;
169
- if (systems.population > 150)
169
+ if (metrics.population > 150)
170
170
  prob -= 0.05;
171
171
  prob = Math.max(0.1, Math.min(0.9, prob));
172
172
  const success = rng.chance(prob);
@@ -187,7 +187,7 @@ export function progressBetweenTurns(state, timeDelta, turnRng, progressionHook)
187
187
  const time = state.metadata.currentTime;
188
188
  const turn = state.metadata.currentTurn;
189
189
  let colonists = state.agents.map(c => structuredClone(c));
190
- let systems = structuredClone(state.systems);
190
+ let metrics = structuredClone(state.metrics);
191
191
  // 1. Age all colonists (generic: experience, earth contacts)
192
192
  for (const c of colonists) {
193
193
  if (!c.health.alive)
@@ -257,10 +257,10 @@ export function progressBetweenTurns(state, timeDelta, turnRng, progressionHook)
257
257
  // 2c. Starvation — settlement-wide food reserve below a month triggers
258
258
  // per-colonist starvation risk. Every colonist is equally at risk;
259
259
  // it is settlement-scale, not individual.
260
- if (systems.foodMonthsReserve < 1.0) {
261
- const starveProb = (1.0 - systems.foodMonthsReserve) * 0.15 * timeDelta;
260
+ if (metrics.foodMonthsReserve < 1.0) {
261
+ const starveProb = (1.0 - metrics.foodMonthsReserve) * 0.15 * timeDelta;
262
262
  if (turnRng.chance(Math.min(starveProb, 0.3))) {
263
- killColonist(c, 'starvation', `died at age ${age} of starvation (settlement food reserve ${systems.foodMonthsReserve.toFixed(1)} months)`);
263
+ killColonist(c, 'starvation', `died at age ${age} of starvation (settlement food reserve ${metrics.foodMonthsReserve.toFixed(1)} months)`);
264
264
  continue;
265
265
  }
266
266
  }
@@ -318,7 +318,7 @@ export function progressBetweenTurns(state, timeDelta, turnRng, progressionHook)
318
318
  && (time - c.core.birthTime) >= 20
319
319
  && (time - c.core.birthTime) <= 60
320
320
  && !c.social.partnerId);
321
- const partnerProb = systems.morale > 0.35 ? 0.10 * timeDelta : 0.03 * timeDelta;
321
+ const partnerProb = metrics.morale > 0.35 ? 0.10 * timeDelta : 0.03 * timeDelta;
322
322
  for (let i = 0; i < unpartneredAdults.length; i++) {
323
323
  const a = unpartneredAdults[i];
324
324
  if (a.social.partnerId)
@@ -383,7 +383,7 @@ export function progressBetweenTurns(state, timeDelta, turnRng, progressionHook)
383
383
  seenPairs.add(b.core.id);
384
384
  partneredCouples.push([a, b]);
385
385
  }
386
- const baseBirthProb = systems.morale > 0.4 && systems.foodMonthsReserve > 6 ? 0.08 * timeDelta : 0.02 * timeDelta;
386
+ const baseBirthProb = metrics.morale > 0.4 && metrics.foodMonthsReserve > 6 ? 0.08 * timeDelta : 0.02 * timeDelta;
387
387
  // Partnered couples: 3x the base rate (stable relationships, higher
388
388
  // intentional birth decisions). Unpartnered pairs: 0.3x the base rate.
389
389
  const partneredBirthProb = Math.min(0.6, baseBirthProb * 3);
@@ -519,17 +519,17 @@ export function progressBetweenTurns(state, timeDelta, turnRng, progressionHook)
519
519
  const aliveColonists = colonists.filter(c => c.health.alive);
520
520
  const avgPsych = aliveColonists.length ? aliveColonists.reduce((s, c) => s + c.health.psychScore, 0) / aliveColonists.length : 0.5;
521
521
  const psychPressure = avgPsych < 0.4 ? -0.06 : avgPsych > 0.7 ? 0.03 : 0;
522
- const foodPressure = systems.foodMonthsReserve < 6 ? -0.05 : 0;
523
- const popPressure = aliveColonists.length > systems.lifeSupportCapacity ? -0.08 : 0;
522
+ const foodPressure = metrics.foodMonthsReserve < 6 ? -0.05 : 0;
523
+ const popPressure = aliveColonists.length > metrics.lifeSupportCapacity ? -0.08 : 0;
524
524
  const deathShock = deadThisTurn.size > 2 ? -0.04 * deadThisTurn.size : 0;
525
- systems.morale = Math.max(0, Math.min(1, systems.morale + (0.6 - systems.morale) * 0.1 + foodPressure + popPressure + psychPressure + deathShock));
525
+ metrics.morale = Math.max(0, Math.min(1, metrics.morale + (0.6 - metrics.morale) * 0.1 + foodPressure + popPressure + psychPressure + deathShock));
526
526
  // 7. Update population count
527
- systems.population = aliveColonists.length;
527
+ metrics.population = aliveColonists.length;
528
528
  // 8. Resource production
529
- systems.foodMonthsReserve = Math.max(0, systems.foodMonthsReserve - (timeDelta * 0.5) + (systems.infrastructureModules * 0.3 * timeDelta));
530
- systems.scienceOutput += timeDelta;
529
+ metrics.foodMonthsReserve = Math.max(0, metrics.foodMonthsReserve - (timeDelta * 0.5) + (metrics.infrastructureModules * 0.3 * timeDelta));
530
+ metrics.scienceOutput += timeDelta;
531
531
  return {
532
- state: { ...state, agents: colonists, systems, eventLog: [...state.eventLog, ...events] },
532
+ state: { ...state, agents: colonists, metrics, eventLog: [...state.eventLog, ...events] },
533
533
  events,
534
534
  };
535
535
  }
@@ -111,7 +111,7 @@ export interface Agent {
111
111
  * Scenario-specific metrics (e.g., a submarine's hullPressureBars or a
112
112
  * corporation's quarterlyRevenue) live alongside via `[key: string]: number`.
113
113
  */
114
- export interface WorldSystems {
114
+ export interface WorldMetrics {
115
115
  /** Alive headcount. */
116
116
  population: number;
117
117
  /** Aggregate morale, 0..1. */
@@ -187,13 +187,15 @@ export interface TurnEvent {
187
187
  export interface SimulationState {
188
188
  metadata: SimulationMetadata;
189
189
  /**
190
- * Numerical world state. The `WorldSystems` fields below
190
+ * Numerical world state. The `WorldMetrics` fields below
191
191
  * (`population`, `morale`, `foodMonthsReserve`, `powerKw`, etc.) are
192
- * Mars/space heritage conveniences — any scenario extends the bag
192
+ * Mars/space heritage conveniences. Any scenario extends the bag
193
193
  * via the `[key: string]: number` index signature without touching
194
- * these defaults. Was `colony` pre-0.5.0.
194
+ * these defaults. Was `colony` pre-0.5.0, then `systems` 0.5.x-0.6.x,
195
+ * now `metrics` aligning with `WorldSnapshot.metrics` from the
196
+ * universal schema.
195
197
  */
196
- systems: WorldSystems;
198
+ metrics: WorldMetrics;
197
199
  agents: Agent[];
198
200
  politics: WorldPolitics;
199
201
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/engine/core/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/engine/core/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Subpath export: paracosm/digital-twin
3
+ *
4
+ * Curated entry point for the digital-twin use case. `DigitalTwin` is
5
+ * an alias for the same `WorldModel` class exported from
6
+ * `paracosm/world-model`; the alias names the use case the user is
7
+ * modeling rather than the underlying mechanism.
8
+ *
9
+ * Use this subpath when:
10
+ * - You have a specific subject (person, organism, organization, or
11
+ * system) you want to simulate under counterfactual interventions.
12
+ * - You want the most ergonomic surface for `simulateIntervention()`.
13
+ * - You want type-only access to `SubjectConfig` and `InterventionConfig`
14
+ * without pulling the full `paracosm/runtime` module.
15
+ *
16
+ * Use `paracosm/world-model` instead when:
17
+ * - You are running civilization simulations or policy comparisons
18
+ * across scenarios.
19
+ * - You need access to the full `WorldModel.batch`, `WorldModel.fork`,
20
+ * or `WorldModel.replay` surface (those methods are also available
21
+ * here, since `DigitalTwin === WorldModel`, but the subpath
22
+ * docstrings focus on the digital-twin case).
23
+ *
24
+ * Both subpaths back-end to the same class. Choosing one is a
25
+ * positioning decision, not a functional one.
26
+ *
27
+ * @example Quickstart with subject + intervention
28
+ * ```ts
29
+ * import { DigitalTwin, type SubjectConfig, type InterventionConfig } from 'paracosm/digital-twin';
30
+ *
31
+ * const twin = await DigitalTwin.fromJson(scenarioJson);
32
+ * const subject: SubjectConfig = { id: 'company', kind: 'organization', attributes: { headcount: 100 } };
33
+ * const intervention: InterventionConfig = { id: 'rif', kind: 'policy', description: '25% RIF', parameters: { percent: 25 } };
34
+ * const artifact = await twin.simulateIntervention(subject, intervention, leader, { maxTurns: 4 });
35
+ * ```
36
+ *
37
+ * @module paracosm/digital-twin
38
+ */
39
+ export { WorldModel as DigitalTwin } from '../../runtime/world-model/index.js';
40
+ export type { SubjectConfig, InterventionConfig, RunArtifact } from '../schema/index.js';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/digital-twin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Subpath export: paracosm/digital-twin
3
+ *
4
+ * Curated entry point for the digital-twin use case. `DigitalTwin` is
5
+ * an alias for the same `WorldModel` class exported from
6
+ * `paracosm/world-model`; the alias names the use case the user is
7
+ * modeling rather than the underlying mechanism.
8
+ *
9
+ * Use this subpath when:
10
+ * - You have a specific subject (person, organism, organization, or
11
+ * system) you want to simulate under counterfactual interventions.
12
+ * - You want the most ergonomic surface for `simulateIntervention()`.
13
+ * - You want type-only access to `SubjectConfig` and `InterventionConfig`
14
+ * without pulling the full `paracosm/runtime` module.
15
+ *
16
+ * Use `paracosm/world-model` instead when:
17
+ * - You are running civilization simulations or policy comparisons
18
+ * across scenarios.
19
+ * - You need access to the full `WorldModel.batch`, `WorldModel.fork`,
20
+ * or `WorldModel.replay` surface (those methods are also available
21
+ * here, since `DigitalTwin === WorldModel`, but the subpath
22
+ * docstrings focus on the digital-twin case).
23
+ *
24
+ * Both subpaths back-end to the same class. Choosing one is a
25
+ * positioning decision, not a functional one.
26
+ *
27
+ * @example Quickstart with subject + intervention
28
+ * ```ts
29
+ * import { DigitalTwin, type SubjectConfig, type InterventionConfig } from 'paracosm/digital-twin';
30
+ *
31
+ * const twin = await DigitalTwin.fromJson(scenarioJson);
32
+ * const subject: SubjectConfig = { id: 'company', kind: 'organization', attributes: { headcount: 100 } };
33
+ * const intervention: InterventionConfig = { id: 'rif', kind: 'policy', description: '25% RIF', parameters: { percent: 25 } };
34
+ * const artifact = await twin.simulateIntervention(subject, intervention, leader, { maxTurns: 4 });
35
+ * ```
36
+ *
37
+ * @module paracosm/digital-twin
38
+ */
39
+ export { WorldModel as DigitalTwin } from '../../runtime/world-model/index.js';
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/digital-twin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAC"}
@@ -12,7 +12,7 @@ export { SimulationKernel } from './core/kernel.js';
12
12
  export { SeededRng } from './core/rng.js';
13
13
  export { generateInitialPopulation } from './core/agent-generator.js';
14
14
  export { progressBetweenTurns, applyPersonalityDrift, classifyOutcome, classifyOutcomeById } from './core/progression.js';
15
- export type { Agent, AgentCore, AgentHealth, AgentCareer, AgentSocial, AgentNarrative, AgentMemory, AgentMemoryEntry, WorldSystems, WorldPolitics, SimulationState, SimulationMetadata, HexacoProfile, TurnEvent, TurnOutcome, Department, PromotionRecord, } from './core/state.js';
15
+ export type { Agent, AgentCore, AgentHealth, AgentCareer, AgentSocial, AgentNarrative, AgentMemory, AgentMemoryEntry, WorldMetrics, WorldPolitics, SimulationState, SimulationMetadata, HexacoProfile, TurnEvent, TurnOutcome, Department, PromotionRecord, } from './core/state.js';
16
16
  export type { KeyPersonnel } from './core/agent-generator.js';
17
17
  export type { SystemsPatch, PolicyEffect, SimulationInitOverrides } from './core/kernel.js';
18
18
  export type { HexacoSnapshot, LifeEvent } from './core/state.js';
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Curated library of archetypal leader presets with HEXACO personality
3
+ * profiles. Dual-use:
4
+ *
5
+ * - Dashboard `ForkModal` + `Quickstart` "Swap leader" controls read
6
+ * from it.
7
+ * - External consumers pull `LEADER_PRESETS` via the `paracosm/leader-presets`
8
+ * subpath for programmatic `runBatch` sweeps.
9
+ *
10
+ * HEXACO traits live in [0, 1]. Each preset is designed to diverge from
11
+ * the others on at least one high-impact trait (openness, conscientiousness,
12
+ * emotionality), producing measurably different decision-making when
13
+ * the same scenario + seed runs against them.
14
+ *
15
+ * @module paracosm/leader-presets
16
+ */
17
+ import type { HexacoProfile } from './core/state.js';
18
+ /**
19
+ * One preset entry. `hexaco` must have all six traits in [0, 1].
20
+ * `description` is shown in the dashboard preset picker and kept under
21
+ * 140 chars for compact UI rendering.
22
+ */
23
+ export interface LeaderPreset {
24
+ id: string;
25
+ name: string;
26
+ archetype: string;
27
+ description: string;
28
+ hexaco: HexacoProfile;
29
+ }
30
+ export declare const LEADER_PRESETS: Readonly<Record<string, LeaderPreset>>;
31
+ /** Lookup by preset id. Returns undefined for unknown ids. */
32
+ export declare function getPresetById(id: string): LeaderPreset | undefined;
33
+ /**
34
+ * List all presets where the given HEXACO trait is above 0.7 (when
35
+ * `high: true`) or below 0.3 (when `high: false`). Used by the preset
36
+ * picker to group recommendations by trait emphasis.
37
+ */
38
+ export declare function listPresetsByTrait(trait: keyof HexacoProfile, high: boolean): LeaderPreset[];
39
+ //# sourceMappingURL=leader-presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leader-presets.d.ts","sourceRoot":"","sources":["../../src/engine/leader-presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAqGhE,CAAC;AAEH,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,aAAa,EAC1B,IAAI,EAAE,OAAO,GACZ,YAAY,EAAE,CAKhB"}
@@ -0,0 +1,118 @@
1
+ export const LEADER_PRESETS = Object.freeze({
2
+ 'visionary': {
3
+ id: 'visionary',
4
+ name: 'Aria Okafor',
5
+ archetype: 'The Visionary',
6
+ description: 'Bets on bold experiments. Tolerates ambiguity. Casts a wide pattern net.',
7
+ hexaco: {
8
+ openness: 0.95, conscientiousness: 0.35, extraversion: 0.85,
9
+ agreeableness: 0.55, emotionality: 0.30, honestyHumility: 0.65,
10
+ },
11
+ },
12
+ 'pragmatist': {
13
+ id: 'pragmatist',
14
+ name: 'Marcus Reyes',
15
+ archetype: 'The Pragmatist',
16
+ description: 'Leads by protocol and evidence. Safety margins first.',
17
+ hexaco: {
18
+ openness: 0.40, conscientiousness: 0.90, extraversion: 0.35,
19
+ agreeableness: 0.60, emotionality: 0.50, honestyHumility: 0.85,
20
+ },
21
+ },
22
+ 'innovator': {
23
+ id: 'innovator',
24
+ name: 'Yuki Tanaka',
25
+ archetype: 'The Innovator',
26
+ description: 'Pushes novel tool forging. Accepts higher variance.',
27
+ hexaco: {
28
+ openness: 0.90, conscientiousness: 0.40, extraversion: 0.70,
29
+ agreeableness: 0.45, emotionality: 0.35, honestyHumility: 0.55,
30
+ },
31
+ },
32
+ 'stabilizer': {
33
+ id: 'stabilizer',
34
+ name: 'Elena Voss',
35
+ archetype: 'The Stabilizer',
36
+ description: 'Holds the line. Protects existing capacity. Change-averse.',
37
+ hexaco: {
38
+ openness: 0.30, conscientiousness: 0.85, extraversion: 0.40,
39
+ agreeableness: 0.75, emotionality: 0.55, honestyHumility: 0.70,
40
+ },
41
+ },
42
+ 'crisis-manager': {
43
+ id: 'crisis-manager',
44
+ name: 'Nadia Chen',
45
+ archetype: 'The Crisis Manager',
46
+ description: 'Thrives under pressure. Decisive. Low emotional reactivity.',
47
+ hexaco: {
48
+ openness: 0.55, conscientiousness: 0.80, extraversion: 0.75,
49
+ agreeableness: 0.45, emotionality: 0.25, honestyHumility: 0.60,
50
+ },
51
+ },
52
+ 'growth-optimist': {
53
+ id: 'growth-optimist',
54
+ name: 'Diego Santoro',
55
+ archetype: 'The Growth Optimist',
56
+ description: 'Chases expansion. High risk tolerance. Charismatic rally-er.',
57
+ hexaco: {
58
+ openness: 0.80, conscientiousness: 0.50, extraversion: 0.90,
59
+ agreeableness: 0.55, emotionality: 0.35, honestyHumility: 0.40,
60
+ },
61
+ },
62
+ 'protocol-builder': {
63
+ id: 'protocol-builder',
64
+ name: 'Priya Rao',
65
+ archetype: 'The Protocol Builder',
66
+ description: 'Codifies everything. Demands evidence. Slow to decide, hard to dislodge.',
67
+ hexaco: {
68
+ openness: 0.50, conscientiousness: 0.95, extraversion: 0.35,
69
+ agreeableness: 0.60, emotionality: 0.45, honestyHumility: 0.90,
70
+ },
71
+ },
72
+ 'social-architect': {
73
+ id: 'social-architect',
74
+ name: 'Kai Rivers',
75
+ archetype: 'The Social Architect',
76
+ description: 'Builds coalitions. Manages morale. Relationship-first.',
77
+ hexaco: {
78
+ openness: 0.60, conscientiousness: 0.65, extraversion: 0.80,
79
+ agreeableness: 0.90, emotionality: 0.55, honestyHumility: 0.70,
80
+ },
81
+ },
82
+ 'cost-cutter': {
83
+ id: 'cost-cutter',
84
+ name: 'Hannah Novak',
85
+ archetype: 'The Cost Cutter',
86
+ description: 'Optimizes ruthlessly. Will trade morale for capacity.',
87
+ hexaco: {
88
+ openness: 0.35, conscientiousness: 0.90, extraversion: 0.45,
89
+ agreeableness: 0.30, emotionality: 0.25, honestyHumility: 0.55,
90
+ },
91
+ },
92
+ 'compliance-hawk': {
93
+ id: 'compliance-hawk',
94
+ name: 'Owen Ibarra',
95
+ archetype: 'The Compliance Hawk',
96
+ description: 'Audits every decision. Never cuts corners. Reports failures transparently.',
97
+ hexaco: {
98
+ openness: 0.40, conscientiousness: 0.90, extraversion: 0.45,
99
+ agreeableness: 0.65, emotionality: 0.50, honestyHumility: 0.95,
100
+ },
101
+ },
102
+ });
103
+ /** Lookup by preset id. Returns undefined for unknown ids. */
104
+ export function getPresetById(id) {
105
+ return LEADER_PRESETS[id];
106
+ }
107
+ /**
108
+ * List all presets where the given HEXACO trait is above 0.7 (when
109
+ * `high: true`) or below 0.3 (when `high: false`). Used by the preset
110
+ * picker to group recommendations by trait emphasis.
111
+ */
112
+ export function listPresetsByTrait(trait, high) {
113
+ return Object.values(LEADER_PRESETS).filter(p => {
114
+ const v = p.hexaco[trait];
115
+ return high ? v > 0.7 : v < 0.3;
116
+ });
117
+ }
118
+ //# sourceMappingURL=leader-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leader-presets.js","sourceRoot":"","sources":["../../src/engine/leader-presets.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@ export function lunarFingerprint(finalState, outcomeLog, leader, toolRegs, maxTu
6
6
  const riskyLosses = outcomeLog.filter((o) => o.outcome === 'risky_failure').length;
7
7
  const conservativeWins = outcomeLog.filter((o) => o.outcome === 'conservative_success').length;
8
8
  const totalTools = Object.values(toolRegs).flat().length;
9
- const resilience = finalState.systems.morale > 0.6 ? 'robust' : finalState.systems.morale > 0.35 ? 'stable' : 'fragile';
10
- const sustainment = finalState.systems.foodMonthsReserve > 12 ? 'self-sustaining' : finalState.systems.foodMonthsReserve > 6 ? 'resupply-dependent' : 'critical';
9
+ const resilience = finalState.metrics.morale > 0.6 ? 'robust' : finalState.metrics.morale > 0.35 ? 'stable' : 'fragile';
10
+ const sustainment = finalState.metrics.foodMonthsReserve > 12 ? 'self-sustaining' : finalState.metrics.foodMonthsReserve > 6 ? 'resupply-dependent' : 'critical';
11
11
  const leadership = leader.hexaco.conscientiousness > 0.7 ? 'methodical' : leader.hexaco.openness > 0.7 ? 'pioneering' : 'balanced';
12
12
  const riskProfile = riskyWins + riskyLosses > conservativeWins ? 'exploratory' : 'procedural';
13
13
  const science = totalTools > maxTurns * 2 ? 'discovery-driven' : totalTools > maxTurns ? 'productive' : 'operational';
@@ -12,13 +12,13 @@ export function lunarDepartmentPromptLines(dept, state) {
12
12
  break;
13
13
  }
14
14
  case 'engineering':
15
- lines.push('INFRASTRUCTURE:', `Modules: ${state.systems.infrastructureModules} | Power: ${state.systems.powerKw}kW (solar + nuclear) | Life support: ${state.systems.lifeSupportCapacity}/${state.systems.population} | Volume: ${state.systems.pressurizedVolumeM3}m³`);
15
+ lines.push('INFRASTRUCTURE:', `Modules: ${state.metrics.infrastructureModules} | Power: ${state.metrics.powerKw}kW (solar + nuclear) | Life support: ${state.metrics.lifeSupportCapacity}/${state.metrics.population} | Volume: ${state.metrics.pressurizedVolumeM3}m³`);
16
16
  break;
17
17
  case 'mining':
18
18
  lines.push('MINING:', `Ice extraction active in permanently shadowed craters. Regolith processing for construction materials. ISRU capacity scales with power.`);
19
19
  break;
20
20
  case 'life-support':
21
- lines.push('LIFE SUPPORT:', `Reserves: ${state.systems.foodMonthsReserve.toFixed(1)}mo | Water: ${state.systems.waterLitersPerDay}L/day | O2 from electrolysis. Crew to support: ${state.systems.population}`);
21
+ lines.push('LIFE SUPPORT:', `Reserves: ${state.metrics.foodMonthsReserve.toFixed(1)}mo | Water: ${state.metrics.waterLitersPerDay}L/day | O2 from electrolysis. Crew to support: ${state.metrics.population}`);
22
22
  break;
23
23
  case 'communications':
24
24
  lines.push('COMMS:', `Earth visible from crater rim during ~70% of lunar day. Direct line-of-sight link. 1.3s signal delay. Relay satellite for far-side coverage.`);
@@ -9,7 +9,7 @@ export function marsFingerprint(finalState, outcomeLog, leader, toolRegs, maxTur
9
9
  const aliveCount = finalState.agents.filter((c) => c.health.alive).length;
10
10
  const marsBorn = finalState.agents.filter((c) => c.health.alive && c.core.marsborn).length;
11
11
  const totalTools = Object.values(toolRegs).flat().length;
12
- const resilience = finalState.systems.morale > 0.6 ? 'antifragile' : finalState.systems.morale > 0.35 ? 'resilient' : 'brittle';
12
+ const resilience = finalState.metrics.morale > 0.6 ? 'antifragile' : finalState.metrics.morale > 0.35 ? 'resilient' : 'brittle';
13
13
  const autonomy = finalState.politics.earthDependencyPct < 40 ? 'autonomous' : finalState.politics.earthDependencyPct < 70 ? 'transitioning' : 'Earth-tethered';
14
14
  const governance = leader.hexaco.extraversion > 0.7 ? 'charismatic' : leader.hexaco.conscientiousness > 0.7 ? 'technocratic' : 'communal';
15
15
  const riskProfile = riskyWins + riskyLosses > conservativeWins ? 'expansionist' : 'conservative';
@@ -10,9 +10,9 @@ export interface ScenarioMetric {
10
10
  showInHeader: boolean;
11
11
  format: 'number' | 'percent' | 'currency' | 'duration' | 'string';
12
12
  }
13
- /** Colony systems metrics (from WorldSystems in kernel/state.ts) */
13
+ /** Colony systems metrics (from WorldMetrics in kernel/state.ts) */
14
14
  export declare const MARS_WORLD_METRICS: ScenarioMetric[];
15
- /** Capacity metrics (from WorldSystems) */
15
+ /** Capacity metrics (from WorldMetrics) */
16
16
  export declare const MARS_CAPACITY_METRICS: ScenarioMetric[];
17
17
  /** Status metrics (from WorldPolitics) */
18
18
  export declare const MARS_STATUS_METRICS: ScenarioMetric[];
@@ -1,4 +1,4 @@
1
- /** Colony systems metrics (from WorldSystems in kernel/state.ts) */
1
+ /** Colony systems metrics (from WorldMetrics in kernel/state.ts) */
2
2
  export const MARS_WORLD_METRICS = [
3
3
  { id: 'population', label: 'Population', unit: '', type: 'number', initial: 100, min: 0, category: 'metric', showInHeader: true, format: 'number' },
4
4
  { id: 'powerKw', label: 'Power', unit: 'kW', type: 'number', initial: 400, min: 0, category: 'metric', showInHeader: true, format: 'number' },
@@ -9,7 +9,7 @@ export const MARS_WORLD_METRICS = [
9
9
  { id: 'scienceOutput', label: 'Science', unit: '', type: 'number', initial: 0, min: 0, category: 'metric', showInHeader: true, format: 'number' },
10
10
  { id: 'morale', label: 'Morale', unit: '%', type: 'number', initial: 0.85, min: 0, max: 1, category: 'metric', showInHeader: true, format: 'percent' },
11
11
  ];
12
- /** Capacity metrics (from WorldSystems) */
12
+ /** Capacity metrics (from WorldMetrics) */
13
13
  export const MARS_CAPACITY_METRICS = [
14
14
  { id: 'lifeSupportCapacity', label: 'Life Support Cap', unit: '', type: 'number', initial: 120, min: 0, category: 'capacity', showInHeader: false, format: 'number' },
15
15
  ];
@@ -15,15 +15,15 @@ export function marsDepartmentPromptLines(dept, state) {
15
15
  break;
16
16
  }
17
17
  case 'engineering':
18
- lines.push('INFRASTRUCTURE:', `Modules: ${state.systems.infrastructureModules} | Power: ${state.systems.powerKw}kW | Life support: ${state.systems.lifeSupportCapacity}/${state.systems.population} | Volume: ${state.systems.pressurizedVolumeM3}m³ | Water: ${state.systems.waterLitersPerDay}L/day`);
18
+ lines.push('INFRASTRUCTURE:', `Modules: ${state.metrics.infrastructureModules} | Power: ${state.metrics.powerKw}kW | Life support: ${state.metrics.lifeSupportCapacity}/${state.metrics.population} | Volume: ${state.metrics.pressurizedVolumeM3}m³ | Water: ${state.metrics.waterLitersPerDay}L/day`);
19
19
  break;
20
20
  case 'agriculture':
21
- lines.push('FOOD:', `Reserves: ${state.systems.foodMonthsReserve.toFixed(1)}mo | Pop to feed: ${state.systems.population} | Farm modules: ${Math.floor(state.systems.infrastructureModules * 0.3)}`);
21
+ lines.push('FOOD:', `Reserves: ${state.metrics.foodMonthsReserve.toFixed(1)}mo | Pop to feed: ${state.metrics.population} | Farm modules: ${Math.floor(state.metrics.infrastructureModules * 0.3)}`);
22
22
  break;
23
23
  case 'psychology': {
24
24
  const avgPsych = alive.length ? alive.reduce((s, c) => s + c.health.psychScore, 0) / alive.length : 0;
25
25
  const depressed = alive.filter(c => c.health.psychScore < 0.5).length;
26
- lines.push('PSYCH:', `Morale: ${Math.round(state.systems.morale * 100)}% | Avg psych: ${avgPsych.toFixed(2)} | Depressed: ${depressed}/${alive.length} | Mars-born: ${alive.filter(c => c.core.marsborn).length}`);
26
+ lines.push('PSYCH:', `Morale: ${Math.round(state.metrics.morale * 100)}% | Avg psych: ${avgPsych.toFixed(2)} | Depressed: ${depressed}/${alive.length} | Mars-born: ${alive.filter(c => c.core.marsborn).length}`);
27
27
  lines.push('', 'SOCIAL:', ...featured.slice(0, 4).map(c => `- ${c.core.name}: psych ${c.health.psychScore.toFixed(2)} partner:${c.social.partnerId ? 'y' : 'n'} children:${c.social.childrenIds.length} earthContacts:${c.social.earthContacts}`));
28
28
  break;
29
29
  }
@@ -89,7 +89,8 @@ export interface BuildArtifactInputs {
89
89
  /** Per-turn agent reactions — stashed under scenarioExtensions.reactions. */
90
90
  agentReactions: unknown[];
91
91
  finalState?: {
92
- systems: Record<string, number>;
92
+ metrics: Record<string, number>;
93
+ capacities?: Record<string, number>;
93
94
  politics?: Record<string, number | string | boolean>;
94
95
  statuses?: Record<string, string | boolean>;
95
96
  environment?: Record<string, number | string | boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"build-artifact.d.ts","sourceRoot":"","sources":["../../src/runtime/build-artifact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-artifact.d.ts","sourceRoot":"","sources":["../../src/runtime/build-artifact.ts"],"names":[],"mappings":"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"}
@@ -102,7 +102,8 @@ export function buildRunArtifact(inputs) {
102
102
  intervention: inputs.intervention,
103
103
  finalState: inputs.finalState
104
104
  ? {
105
- metrics: inputs.finalState.systems,
105
+ metrics: inputs.finalState.metrics,
106
+ capacities: inputs.finalState.capacities,
106
107
  politics: inputs.finalState.politics,
107
108
  statuses: inputs.finalState.statuses,
108
109
  environment: inputs.finalState.environment,