paracosm 0.7.487 → 0.8.489
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 +66 -66
- package/dist/cli/{leaders-resolver.d.ts → actors-resolver.d.ts} +10 -10
- package/dist/cli/actors-resolver.d.ts.map +1 -0
- package/dist/cli/actors-resolver.js +66 -0
- package/dist/cli/actors-resolver.js.map +1 -0
- package/dist/cli/help.js +14 -14
- package/dist/cli/init-templates.d.ts +2 -2
- package/dist/cli/init-templates.d.ts.map +1 -1
- package/dist/cli/init-templates.js +13 -13
- package/dist/cli/init-templates.js.map +1 -1
- package/dist/cli/init.d.ts +4 -4
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +17 -17
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/pair-runner.js +13 -13
- package/dist/cli/pair-runner.js.map +1 -1
- package/dist/cli/quickstart-routes.d.ts +2 -2
- package/dist/cli/quickstart-routes.d.ts.map +1 -1
- package/dist/cli/quickstart-routes.js +8 -8
- package/dist/cli/quickstart-routes.js.map +1 -1
- package/dist/cli/run-dashboard.js +9 -9
- package/dist/cli/run-dashboard.js.map +1 -1
- package/dist/cli/run-sim.d.ts +1 -1
- package/dist/cli/run-sim.js +34 -34
- package/dist/cli/run-sim.js.map +1 -1
- package/dist/cli/server/sqlite-run-history-store.js +13 -13
- package/dist/cli/server/sqlite-run-history-store.js.map +1 -1
- package/dist/cli/server-app.d.ts +1 -1
- package/dist/cli/server-app.js +13 -13
- package/dist/cli/server-app.js.map +1 -1
- package/dist/cli/session-store.js +5 -5
- package/dist/cli/session-store.js.map +1 -1
- package/dist/cli/session-title.js +9 -9
- package/dist/cli/session-title.js.map +1 -1
- package/dist/cli/sim-config.d.ts +2 -2
- package/dist/cli/sim-config.d.ts.map +1 -1
- package/dist/cli/sim-config.js +10 -10
- package/dist/cli/sim-config.js.map +1 -1
- package/dist/engine/_template/index.js +2 -2
- package/dist/engine/_template/index.js.map +1 -1
- package/dist/engine/compiler/index.js +2 -2
- package/dist/engine/compiler/index.js.map +1 -1
- package/dist/engine/types.d.ts +2 -2
- package/dist/engine/types.d.ts.map +1 -1
- package/dist/runtime/batch.d.ts +2 -2
- package/dist/runtime/batch.d.ts.map +1 -1
- package/dist/runtime/batch.js +2 -2
- package/dist/runtime/batch.js.map +1 -1
- package/dist/runtime/world-model/index.d.ts +8 -8
- package/dist/runtime/world-model/index.d.ts.map +1 -1
- package/dist/runtime/world-model/index.js +18 -18
- package/dist/runtime/world-model/index.js.map +1 -1
- package/package.json +2 -2
- package/config/leaders.example.json +0 -32
- package/config/leaders.json +0 -32
- package/dist/cli/leaders-resolver.d.ts.map +0 -1
- package/dist/cli/leaders-resolver.js +0 -66
- package/dist/cli/leaders-resolver.js.map +0 -1
package/dist/cli/run-sim.js
CHANGED
|
@@ -11,7 +11,7 @@ import { runSimulation } from '../runtime/orchestrator.js';
|
|
|
11
11
|
import { parseCliRunOptions } from './cli-run-options.js';
|
|
12
12
|
import { DEFAULT_KEY_PERSONNEL } from './sim-config.js';
|
|
13
13
|
import { marsScenario } from '../engine/mars/index.js';
|
|
14
|
-
import {
|
|
14
|
+
import { resolveActors, parseActorsFlag } from './actors-resolver.js';
|
|
15
15
|
/**
|
|
16
16
|
* Load `.env` from the current working directory (CWD-scoped, not
|
|
17
17
|
* package-relative). Existing process.env values always win.
|
|
@@ -32,44 +32,44 @@ function loadEnv() {
|
|
|
32
32
|
process.stdout.write(` [env] loaded ${loaded} var${loaded === 1 ? '' : 's'} from ${envPath}\n`);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
function
|
|
36
|
-
const explicitPath =
|
|
35
|
+
function loadActors(argv) {
|
|
36
|
+
const explicitPath = parseActorsFlag(argv);
|
|
37
37
|
try {
|
|
38
|
-
const resolved =
|
|
38
|
+
const resolved = resolveActors({ explicitPath });
|
|
39
39
|
if (resolved.isExample) {
|
|
40
|
-
process.stdout.write(` Using bundled example
|
|
41
|
-
process.stdout.write(' Create config/
|
|
40
|
+
process.stdout.write(` Using bundled example actors at ${resolved.sourcePath}\n`);
|
|
41
|
+
process.stdout.write(' Create config/actors.json in your project to customize.\n\n');
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
|
-
process.stdout.write(` Loaded ${resolved.
|
|
44
|
+
process.stdout.write(` Loaded ${resolved.actors.length} actors from ${resolved.sourcePath}\n`);
|
|
45
45
|
}
|
|
46
|
-
return resolved.
|
|
46
|
+
return resolved.actors;
|
|
47
47
|
}
|
|
48
48
|
catch (err) {
|
|
49
49
|
process.stderr.write(` ${err instanceof Error ? err.message : String(err)}\n`);
|
|
50
50
|
process.exit(1);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
function
|
|
54
|
-
const
|
|
53
|
+
function parseActorFromArgs(args) {
|
|
54
|
+
const actor = {};
|
|
55
55
|
const hexaco = {};
|
|
56
56
|
for (let i = 0; i < args.length; i += 1) {
|
|
57
57
|
const arg = args[i];
|
|
58
58
|
const next = args[i + 1];
|
|
59
59
|
if (arg === '--name' && next) {
|
|
60
|
-
|
|
60
|
+
actor.name = next;
|
|
61
61
|
i += 1;
|
|
62
62
|
}
|
|
63
63
|
else if (arg === '--archetype' && next) {
|
|
64
|
-
|
|
64
|
+
actor.archetype = next;
|
|
65
65
|
i += 1;
|
|
66
66
|
}
|
|
67
67
|
else if (arg === '--unit' && next) {
|
|
68
|
-
|
|
68
|
+
actor.unit = next;
|
|
69
69
|
i += 1;
|
|
70
70
|
}
|
|
71
71
|
else if (arg === '--instructions' && next) {
|
|
72
|
-
|
|
72
|
+
actor.instructions = next;
|
|
73
73
|
i += 1;
|
|
74
74
|
}
|
|
75
75
|
else if (arg === '--openness' && next) {
|
|
@@ -98,43 +98,43 @@ function parseLeaderFromArgs(args) {
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
if (Object.keys(hexaco).length)
|
|
101
|
-
|
|
102
|
-
return
|
|
101
|
+
actor.hexaco = hexaco;
|
|
102
|
+
return actor;
|
|
103
103
|
}
|
|
104
|
-
function
|
|
105
|
-
const idx = args.indexOf('--
|
|
104
|
+
function getActorIndex(args) {
|
|
105
|
+
const idx = args.indexOf('--actor');
|
|
106
106
|
if (idx >= 0 && args[idx + 1])
|
|
107
107
|
return parseInt(args[idx + 1], 10);
|
|
108
108
|
return 0;
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
|
-
* Run a simulation. Reads
|
|
111
|
+
* Run a simulation. Reads actors, applies CLI overrides, calls
|
|
112
112
|
* runSimulation against marsScenario by default. Returns the process
|
|
113
113
|
* exit code so the caller can choose whether to call process.exit().
|
|
114
114
|
*/
|
|
115
115
|
export async function runSim(argv) {
|
|
116
116
|
loadEnv();
|
|
117
117
|
const cliOptions = parseCliRunOptions(argv);
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
if (!
|
|
122
|
-
process.stderr.write(' No
|
|
118
|
+
const actorIdx = getActorIndex(argv);
|
|
119
|
+
const cliActor = parseActorFromArgs(argv);
|
|
120
|
+
const actors = loadActors(argv);
|
|
121
|
+
if (!actors.length) {
|
|
122
|
+
process.stderr.write(' No actors defined in actors.json\n');
|
|
123
123
|
return 1;
|
|
124
124
|
}
|
|
125
|
-
const
|
|
126
|
-
const
|
|
127
|
-
...
|
|
128
|
-
...
|
|
129
|
-
hexaco: { ...
|
|
125
|
+
const baseActor = actors[actorIdx] || actors[0];
|
|
126
|
+
const actor = {
|
|
127
|
+
...baseActor,
|
|
128
|
+
...cliActor,
|
|
129
|
+
hexaco: { ...baseActor.hexaco, ...(cliActor.hexaco || {}) },
|
|
130
130
|
};
|
|
131
|
-
if (
|
|
132
|
-
|
|
131
|
+
if (cliActor.name && !cliActor.instructions) {
|
|
132
|
+
actor.instructions = `You are ${actor.name}. ${actor.archetype}. Respond with JSON.`;
|
|
133
133
|
}
|
|
134
|
-
process.stdout.write(`\n
|
|
135
|
-
process.stdout.write(` HEXACO: O=${
|
|
134
|
+
process.stdout.write(`\n Actor: ${actor.name} (${actor.archetype}): ${actor.unit}\n`);
|
|
135
|
+
process.stdout.write(` HEXACO: O=${actor.hexaco.openness} C=${actor.hexaco.conscientiousness} E=${actor.hexaco.extraversion}\n`);
|
|
136
136
|
try {
|
|
137
|
-
await runSimulation(
|
|
137
|
+
await runSimulation(actor, DEFAULT_KEY_PERSONNEL, {
|
|
138
138
|
seed: 950,
|
|
139
139
|
...cliOptions,
|
|
140
140
|
scenario: marsScenario,
|
package/dist/cli/run-sim.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-sim.js","sourceRoot":"","sources":["../../src/cli/run-sim.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"run-sim.js","sourceRoot":"","sources":["../../src/cli/run-sim.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ function rowToRecord(row) {
|
|
|
32
32
|
createdAt: row.created_at,
|
|
33
33
|
scenarioId: row.scenario_id,
|
|
34
34
|
scenarioVersion: row.scenario_version,
|
|
35
|
-
actorConfigHash: row.
|
|
35
|
+
actorConfigHash: row.actor_config_hash,
|
|
36
36
|
economicsProfile: row.economics_profile,
|
|
37
37
|
sourceMode: row.source_mode,
|
|
38
38
|
createdBy: row.created_by,
|
|
@@ -45,10 +45,10 @@ function rowToRecord(row) {
|
|
|
45
45
|
record.durationMs = row.duration_ms;
|
|
46
46
|
if (row.mode !== null)
|
|
47
47
|
record.mode = row.mode;
|
|
48
|
-
if (row.
|
|
49
|
-
record.actorName = row.
|
|
50
|
-
if (row.
|
|
51
|
-
record.actorArchetype = row.
|
|
48
|
+
if (row.actor_name !== null)
|
|
49
|
+
record.actorName = row.actor_name;
|
|
50
|
+
if (row.actor_archetype !== null)
|
|
51
|
+
record.actorArchetype = row.actor_archetype;
|
|
52
52
|
if (row.bundle_id !== null)
|
|
53
53
|
record.bundleId = row.bundle_id;
|
|
54
54
|
if (row.summary_trajectory !== null) {
|
|
@@ -76,8 +76,8 @@ function ensureRunsColumns(db) {
|
|
|
76
76
|
['cost_usd', 'REAL'],
|
|
77
77
|
['duration_ms', 'INTEGER'],
|
|
78
78
|
['mode', 'TEXT'],
|
|
79
|
-
['
|
|
80
|
-
['
|
|
79
|
+
['actor_name', 'TEXT'],
|
|
80
|
+
['actor_archetype', 'TEXT'],
|
|
81
81
|
['replay_attempts', 'INTEGER DEFAULT 0'],
|
|
82
82
|
['replay_matches', 'INTEGER DEFAULT 0'],
|
|
83
83
|
['bundle_id', 'TEXT'],
|
|
@@ -106,14 +106,14 @@ export function createSqliteRunHistoryStore(options) {
|
|
|
106
106
|
created_at TEXT NOT NULL,
|
|
107
107
|
scenario_id TEXT NOT NULL,
|
|
108
108
|
scenario_version TEXT NOT NULL,
|
|
109
|
-
|
|
109
|
+
actor_config_hash TEXT NOT NULL,
|
|
110
110
|
economics_profile TEXT NOT NULL,
|
|
111
111
|
source_mode TEXT NOT NULL,
|
|
112
112
|
created_by TEXT NOT NULL
|
|
113
113
|
);
|
|
114
114
|
CREATE INDEX IF NOT EXISTS idx_runs_created_at ON runs (created_at DESC);
|
|
115
115
|
CREATE INDEX IF NOT EXISTS idx_runs_scenario_created ON runs (scenario_id, created_at DESC);
|
|
116
|
-
CREATE INDEX IF NOT EXISTS
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_runs_actor_created ON runs (actor_config_hash, created_at DESC);
|
|
117
117
|
CREATE INDEX IF NOT EXISTS idx_runs_mode_created ON runs (source_mode, created_at DESC);
|
|
118
118
|
`);
|
|
119
119
|
ensureRunsColumns(db);
|
|
@@ -134,9 +134,9 @@ export function createSqliteRunHistoryStore(options) {
|
|
|
134
134
|
}
|
|
135
135
|
const insertStmt = db.prepare(`
|
|
136
136
|
INSERT OR IGNORE INTO runs
|
|
137
|
-
(run_id, created_at, scenario_id, scenario_version,
|
|
137
|
+
(run_id, created_at, scenario_id, scenario_version, actor_config_hash,
|
|
138
138
|
economics_profile, source_mode, created_by,
|
|
139
|
-
artifact_path, cost_usd, duration_ms, mode,
|
|
139
|
+
artifact_path, cost_usd, duration_ms, mode, actor_name, actor_archetype,
|
|
140
140
|
bundle_id, summary_trajectory)
|
|
141
141
|
VALUES
|
|
142
142
|
(@runId, @createdAt, @scenarioId, @scenarioVersion, @actorConfigHash,
|
|
@@ -183,11 +183,11 @@ export function createSqliteRunHistoryStore(options) {
|
|
|
183
183
|
params.scenarioId = filters.scenarioId;
|
|
184
184
|
}
|
|
185
185
|
if (filters?.actorConfigHash) {
|
|
186
|
-
clauses.push('
|
|
186
|
+
clauses.push('actor_config_hash = @actorConfigHash');
|
|
187
187
|
params.actorConfigHash = filters.actorConfigHash;
|
|
188
188
|
}
|
|
189
189
|
if (filters?.q) {
|
|
190
|
-
clauses.push('(scenario_id LIKE @q OR
|
|
190
|
+
clauses.push('(scenario_id LIKE @q OR actor_name LIKE @q OR actor_archetype LIKE @q)');
|
|
191
191
|
params.q = `%${filters.q}%`;
|
|
192
192
|
}
|
|
193
193
|
if (filters?.bundleId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-run-history-store.js","sourceRoot":"","sources":["../../../src/cli/server/sqlite-run-history-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IACjF,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,GAAuB;IAC1C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAuBD,SAAS,WAAW,CAAC,GAAW;IAC9B,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,MAAM,GAAc;QACxB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,eAAe,EAAE,GAAG,CAAC,gBAAgB;QACrC,eAAe,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"sqlite-run-history-store.js","sourceRoot":"","sources":["../../../src/cli/server/sqlite-run-history-store.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/server-app.d.ts
CHANGED
package/dist/cli/server-app.js
CHANGED
|
@@ -4,7 +4,7 @@ import { resolve, dirname } from 'node:path';
|
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { normalizeSimulationConfig, applyDemoCaps } from './sim-config.js';
|
|
6
6
|
import { runPairSimulations, runForkSimulation, runBatchSimulations } from './pair-runner.js';
|
|
7
|
-
import { handleFetchSeed, handleCompileFromSeed,
|
|
7
|
+
import { handleFetchSeed, handleCompileFromSeed, handleGenerateActors, } from './quickstart-routes.js';
|
|
8
8
|
import { handleSimulate } from './simulate-route.js';
|
|
9
9
|
import { compileScenario as compileScenarioReal } from '../engine/compiler/index.js';
|
|
10
10
|
import { marsScenario } from '../engine/mars/index.js';
|
|
@@ -217,14 +217,14 @@ export function buildResultsPayloadFromEventBuffer(eventBuffer) {
|
|
|
217
217
|
slot.systemsSnapshots.push({ turn, time, ...data });
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
|
-
const
|
|
220
|
+
const actors = [...byLeader.entries()].map(([name, slot]) => ({ name, ...slot }));
|
|
221
221
|
return {
|
|
222
222
|
results,
|
|
223
223
|
verdict,
|
|
224
224
|
isComplete,
|
|
225
225
|
turnsCompleted: Math.floor(turns),
|
|
226
226
|
totalEvents: simEvents.length,
|
|
227
|
-
|
|
227
|
+
actors,
|
|
228
228
|
};
|
|
229
229
|
}
|
|
230
230
|
export function createMarsServer(options = {}) {
|
|
@@ -993,8 +993,8 @@ export function createMarsServer(options = {}) {
|
|
|
993
993
|
await handleCompileFromSeed(req, res, body, quickstartDeps);
|
|
994
994
|
return;
|
|
995
995
|
}
|
|
996
|
-
if (req.url === '/api/quickstart/generate-
|
|
997
|
-
await
|
|
996
|
+
if (req.url === '/api/quickstart/generate-actors') {
|
|
997
|
+
await handleGenerateActors(req, res, body, quickstartDeps);
|
|
998
998
|
return;
|
|
999
999
|
}
|
|
1000
1000
|
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
@@ -1585,19 +1585,19 @@ export function createMarsServer(options = {}) {
|
|
|
1585
1585
|
else if (hasUserKeys) {
|
|
1586
1586
|
console.log(` [rate-limit] Bypassed — user provided API keys`);
|
|
1587
1587
|
}
|
|
1588
|
-
// Fork setups take exactly one
|
|
1588
|
+
// Fork setups take exactly one actor (the override for the
|
|
1589
1589
|
// forked branch). Regular setups take exactly two. Spec 2B.
|
|
1590
1590
|
const isForkSetup = !!config.forkFrom;
|
|
1591
1591
|
if (isForkSetup) {
|
|
1592
|
-
if (!config.
|
|
1592
|
+
if (!config.actors || config.actors.length !== 1) {
|
|
1593
1593
|
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
1594
|
-
res.end(JSON.stringify({ error: 'Fork setup requires exactly one
|
|
1594
|
+
res.end(JSON.stringify({ error: 'Fork setup requires exactly one actor.' }));
|
|
1595
1595
|
return;
|
|
1596
1596
|
}
|
|
1597
1597
|
}
|
|
1598
|
-
else if (!config.
|
|
1598
|
+
else if (!config.actors || config.actors.length < 2) {
|
|
1599
1599
|
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
1600
|
-
res.end(JSON.stringify({ error: 'Two
|
|
1600
|
+
res.end(JSON.stringify({ error: 'Two actors required' }));
|
|
1601
1601
|
return;
|
|
1602
1602
|
}
|
|
1603
1603
|
simConfig = normalizeSimulationConfig(config);
|
|
@@ -1651,12 +1651,12 @@ export function createMarsServer(options = {}) {
|
|
|
1651
1651
|
// query. Solo runs (1 leader) leave bundleId undefined and
|
|
1652
1652
|
// render as solo cards exactly as today.
|
|
1653
1653
|
const { generateBundleId } = await import('./server/bundle-id.js');
|
|
1654
|
-
const bundleId = simConfig.
|
|
1654
|
+
const bundleId = simConfig.actors.length >= 2 ? generateBundleId() : undefined;
|
|
1655
1655
|
const runRecord = createRunRecord({
|
|
1656
1656
|
scenarioId: activeScenario.id,
|
|
1657
1657
|
scenarioVersion: activeScenario.version,
|
|
1658
1658
|
actorConfigHash: hashActorConfig({
|
|
1659
|
-
|
|
1659
|
+
actors: simConfig.actors,
|
|
1660
1660
|
turns: simConfig.turns,
|
|
1661
1661
|
seed: simConfig.seed,
|
|
1662
1662
|
}),
|
|
@@ -2059,7 +2059,7 @@ export function createMarsServer(options = {}) {
|
|
|
2059
2059
|
if (config.forkFrom) {
|
|
2060
2060
|
await runForkSimulation(config, broadcast, controller.signal, activeScenario, hooks?.onArtifact);
|
|
2061
2061
|
}
|
|
2062
|
-
else if (config.
|
|
2062
|
+
else if (config.actors.length >= 3) {
|
|
2063
2063
|
// Tier 5 Quickstart dispatches N >= 3 leaders to the batch
|
|
2064
2064
|
// runner (same SSE contract per leader, no verdict).
|
|
2065
2065
|
await runBatchSimulations(config, broadcast, controller.signal, activeScenario, hooks?.onArtifact);
|