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.
- package/README.md +79 -14
- package/dist/cli/compile.d.ts +1 -1
- package/dist/cli/compile.js +4 -4
- package/dist/cli/fetch-seed-url.d.ts +48 -0
- package/dist/cli/fetch-seed-url.d.ts.map +1 -0
- package/dist/cli/fetch-seed-url.js +109 -0
- package/dist/cli/fetch-seed-url.js.map +1 -0
- package/dist/cli/fork-preconditions.d.ts +17 -0
- package/dist/cli/fork-preconditions.d.ts.map +1 -0
- package/dist/cli/fork-preconditions.js +51 -0
- package/dist/cli/fork-preconditions.js.map +1 -0
- package/dist/cli/init-templates.d.ts +43 -0
- package/dist/cli/init-templates.d.ts.map +1 -0
- package/dist/cli/init-templates.js +141 -0
- package/dist/cli/init-templates.js.map +1 -0
- package/dist/cli/init.d.ts +46 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +207 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/pair-runner.d.ts +25 -2
- package/dist/cli/pair-runner.d.ts.map +1 -1
- package/dist/cli/pair-runner.js +141 -5
- package/dist/cli/pair-runner.js.map +1 -1
- package/dist/cli/quickstart-routes.d.ts +35 -0
- package/dist/cli/quickstart-routes.d.ts.map +1 -0
- package/dist/cli/quickstart-routes.js +100 -0
- package/dist/cli/quickstart-routes.js.map +1 -0
- package/dist/cli/run.js +8 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/server/enrich-run-record.d.ts +22 -0
- package/dist/cli/server/enrich-run-record.d.ts.map +1 -0
- package/dist/cli/server/enrich-run-record.js +27 -0
- package/dist/cli/server/enrich-run-record.js.map +1 -0
- package/dist/cli/server/routes/platform-api.d.ts +19 -3
- package/dist/cli/server/routes/platform-api.d.ts.map +1 -1
- package/dist/cli/server/routes/platform-api.js +174 -5
- package/dist/cli/server/routes/platform-api.js.map +1 -1
- package/dist/cli/server/run-history-store.d.ts +27 -1
- package/dist/cli/server/run-history-store.d.ts.map +1 -1
- package/dist/cli/server/run-history-store.js +5 -0
- package/dist/cli/server/run-history-store.js.map +1 -1
- package/dist/cli/server/run-record.d.ts +13 -0
- package/dist/cli/server/run-record.d.ts.map +1 -1
- package/dist/cli/server/run-record.js.map +1 -1
- package/dist/cli/server/sqlite-run-history-store.d.ts +6 -0
- package/dist/cli/server/sqlite-run-history-store.d.ts.map +1 -0
- package/dist/cli/server/sqlite-run-history-store.js +226 -0
- package/dist/cli/server/sqlite-run-history-store.js.map +1 -0
- package/dist/cli/server-app.d.ts +73 -2
- package/dist/cli/server-app.d.ts.map +1 -1
- package/dist/cli/server-app.js +409 -159
- package/dist/cli/server-app.js.map +1 -1
- package/dist/cli/session-title.js +1 -1
- package/dist/cli/sim-config.d.ts +13 -0
- package/dist/cli/sim-config.d.ts.map +1 -1
- package/dist/cli/sim-config.js +8 -1
- package/dist/cli/sim-config.js.map +1 -1
- package/dist/cli/simulate-route.d.ts +103 -0
- package/dist/cli/simulate-route.d.ts.map +1 -0
- package/dist/cli/simulate-route.js +95 -0
- package/dist/cli/simulate-route.js.map +1 -0
- package/dist/engine/compiler/cache.d.ts +2 -2
- package/dist/engine/compiler/cache.js +2 -2
- package/dist/engine/compiler/compile-from-seed.d.ts +78 -0
- package/dist/engine/compiler/compile-from-seed.d.ts.map +1 -0
- package/dist/engine/compiler/compile-from-seed.js +93 -0
- package/dist/engine/compiler/compile-from-seed.js.map +1 -0
- package/dist/engine/compiler/generate-fingerprint.d.ts.map +1 -1
- package/dist/engine/compiler/generate-fingerprint.js +3 -6
- package/dist/engine/compiler/generate-fingerprint.js.map +1 -1
- package/dist/engine/compiler/generate-politics.d.ts.map +1 -1
- package/dist/engine/compiler/generate-politics.js +3 -6
- package/dist/engine/compiler/generate-politics.js.map +1 -1
- package/dist/engine/compiler/generate-progression.d.ts +10 -1
- package/dist/engine/compiler/generate-progression.d.ts.map +1 -1
- package/dist/engine/compiler/generate-progression.js +15 -15
- package/dist/engine/compiler/generate-progression.js.map +1 -1
- package/dist/engine/compiler/generate-prompts.d.ts.map +1 -1
- package/dist/engine/compiler/generate-prompts.js +4 -7
- package/dist/engine/compiler/generate-prompts.js.map +1 -1
- package/dist/engine/compiler/generate-reactions.d.ts.map +1 -1
- package/dist/engine/compiler/generate-reactions.js +3 -6
- package/dist/engine/compiler/generate-reactions.js.map +1 -1
- package/dist/engine/compiler/index.d.ts +9 -6
- package/dist/engine/compiler/index.d.ts.map +1 -1
- package/dist/engine/compiler/index.js +9 -6
- package/dist/engine/compiler/index.js.map +1 -1
- package/dist/engine/compiler/sandbox-runner.d.ts +40 -0
- package/dist/engine/compiler/sandbox-runner.d.ts.map +1 -0
- package/dist/engine/compiler/sandbox-runner.js +278 -0
- package/dist/engine/compiler/sandbox-runner.js.map +1 -0
- package/dist/engine/compiler/scenario-fixture.d.ts +4 -4
- package/dist/engine/compiler/scenario-fixture.js +4 -4
- package/dist/engine/compiler/seed-ingestion.d.ts +2 -2
- package/dist/engine/compiler/seed-ingestion.js +2 -2
- package/dist/engine/compiler/state-shape-block.d.ts +1 -1
- package/dist/engine/compiler/state-shape-block.js +5 -5
- package/dist/engine/compiler/types.d.ts +2 -2
- package/dist/engine/compiler/types.d.ts.map +1 -1
- package/dist/engine/compiler/validate.js +1 -1
- package/dist/engine/core/kernel.d.ts +4 -4
- package/dist/engine/core/kernel.js +6 -6
- package/dist/engine/core/progression.d.ts +3 -3
- package/dist/engine/core/progression.js +21 -21
- package/dist/engine/core/state.d.ts +7 -5
- package/dist/engine/core/state.d.ts.map +1 -1
- package/dist/engine/digital-twin/index.d.ts +41 -0
- package/dist/engine/digital-twin/index.d.ts.map +1 -0
- package/dist/engine/digital-twin/index.js +40 -0
- package/dist/engine/digital-twin/index.js.map +1 -0
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/leader-presets.d.ts +39 -0
- package/dist/engine/leader-presets.d.ts.map +1 -0
- package/dist/engine/leader-presets.js +118 -0
- package/dist/engine/leader-presets.js.map +1 -0
- package/dist/engine/lunar/fingerprint.js +2 -2
- package/dist/engine/lunar/prompts.js +2 -2
- package/dist/engine/mars/fingerprint.js +1 -1
- package/dist/engine/mars/metrics.d.ts +2 -2
- package/dist/engine/mars/metrics.js +2 -2
- package/dist/engine/mars/prompts.js +3 -3
- package/dist/runtime/build-artifact.d.ts +2 -1
- package/dist/runtime/build-artifact.d.ts.map +1 -1
- package/dist/runtime/build-artifact.js +2 -1
- package/dist/runtime/build-artifact.js.map +1 -1
- package/dist/runtime/canonical-json.d.ts +25 -0
- package/dist/runtime/canonical-json.d.ts.map +1 -0
- package/dist/runtime/canonical-json.js +46 -0
- package/dist/runtime/canonical-json.js.map +1 -0
- package/dist/runtime/contracts.d.ts +1 -1
- package/dist/runtime/departments.js +1 -1
- package/dist/runtime/orchestrator.d.ts +44 -4
- package/dist/runtime/orchestrator.d.ts.map +1 -1
- package/dist/runtime/orchestrator.js +125 -33
- package/dist/runtime/orchestrator.js.map +1 -1
- package/dist/runtime/parsers.js +5 -5
- package/dist/runtime/reaction-step.js +2 -2
- package/dist/runtime/world-model/index.d.ts +172 -18
- package/dist/runtime/world-model/index.d.ts.map +1 -1
- package/dist/runtime/world-model/index.js +242 -4
- package/dist/runtime/world-model/index.js.map +1 -1
- package/dist/runtime/world-snapshot.d.ts +13 -0
- package/dist/runtime/world-snapshot.d.ts.map +1 -0
- package/dist/runtime/world-snapshot.js +19 -0
- package/dist/runtime/world-snapshot.js.map +1 -0
- 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
|
-
|
|
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.
|
|
193
|
-
const c = this.state.
|
|
194
|
-
for (const [k, v] of Object.entries(patches.
|
|
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.
|
|
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.
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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 (
|
|
141
|
+
if (metrics.morale > 0.7)
|
|
142
142
|
prob += 0.1;
|
|
143
|
-
if (
|
|
143
|
+
if (metrics.foodMonthsReserve > 12)
|
|
144
144
|
prob += 0.05;
|
|
145
|
-
if (
|
|
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,
|
|
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 (
|
|
165
|
+
if (metrics.morale > 0.7)
|
|
166
166
|
prob += 0.1;
|
|
167
|
-
if (
|
|
167
|
+
if (metrics.foodMonthsReserve > 12)
|
|
168
168
|
prob += 0.05;
|
|
169
|
-
if (
|
|
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
|
|
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 (
|
|
261
|
-
const starveProb = (1.0 -
|
|
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 ${
|
|
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 =
|
|
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 =
|
|
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 =
|
|
523
|
-
const popPressure = aliveColonists.length >
|
|
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
|
-
|
|
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
|
-
|
|
527
|
+
metrics.population = aliveColonists.length;
|
|
528
528
|
// 8. Resource production
|
|
529
|
-
|
|
530
|
-
|
|
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,
|
|
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
|
|
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 `
|
|
190
|
+
* Numerical world state. The `WorldMetrics` fields below
|
|
191
191
|
* (`population`, `morale`, `foodMonthsReserve`, `powerKw`, etc.) are
|
|
192
|
-
* Mars/space heritage conveniences
|
|
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
|
-
|
|
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"}
|
package/dist/engine/index.d.ts
CHANGED
|
@@ -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,
|
|
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.
|
|
10
|
-
const sustainment = finalState.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
13
|
+
/** Colony systems metrics (from WorldMetrics in kernel/state.ts) */
|
|
14
14
|
export declare const MARS_WORLD_METRICS: ScenarioMetric[];
|
|
15
|
-
/** Capacity metrics (from
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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,
|