paracosm 0.7.487 → 0.8.488
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/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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ActorConfig } from './types.js';
|
|
2
|
-
export interface
|
|
3
|
-
|
|
4
|
-
/** Absolute path of the file the
|
|
2
|
+
export interface ResolvedActors {
|
|
3
|
+
actors: ActorConfig[];
|
|
4
|
+
/** Absolute path of the file the actors were read from. Surfaces
|
|
5
5
|
* in CLI output so users know which file is actually in use. */
|
|
6
6
|
sourcePath: string;
|
|
7
7
|
/** Marker for whether the source was the shipped example (we
|
|
@@ -9,18 +9,18 @@ export interface ResolvedLeaders {
|
|
|
9
9
|
isExample: boolean;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Walks the candidate paths and loads the first `
|
|
12
|
+
* Walks the candidate paths and loads the first `actors.json` that
|
|
13
13
|
* exists. Throws only when nothing (not even the bundled example)
|
|
14
14
|
* is available — which would indicate a broken install.
|
|
15
15
|
*/
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function resolveActors(options?: {
|
|
17
17
|
explicitPath?: string;
|
|
18
|
-
}):
|
|
18
|
+
}): ResolvedActors;
|
|
19
19
|
/**
|
|
20
|
-
* Pulls `--
|
|
20
|
+
* Pulls `--actors <path>` out of argv WITHOUT mutating the array.
|
|
21
21
|
* Returns undefined when the flag isn't present. Kept separate from
|
|
22
|
-
* the main CLI parser so run.ts / serve.ts can resolve
|
|
22
|
+
* the main CLI parser so run.ts / serve.ts can resolve actors the
|
|
23
23
|
* same way without duplicating flag logic.
|
|
24
24
|
*/
|
|
25
|
-
export declare function
|
|
26
|
-
//# sourceMappingURL=
|
|
25
|
+
export declare function parseActorsFlag(args: readonly string[]): string | undefined;
|
|
26
|
+
//# sourceMappingURL=actors-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actors-resolver.d.ts","sourceRoot":"","sources":["../../src/cli/actors-resolver.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;qEACiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB;mEAC+D;IAC/D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,cAAc,CAwBrF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAM3E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the active `actors.json` for a paracosm CLI invocation.
|
|
3
|
+
*
|
|
4
|
+
* Search order (first match wins):
|
|
5
|
+
* 1. --actors <path> CLI flag (explicit path)
|
|
6
|
+
* 2. $CWD/actors.json (user's project root)
|
|
7
|
+
* 3. $CWD/config/actors.json (user's config dir)
|
|
8
|
+
* 4. <package>/config/actors.json (paracosm-shipped fallback)
|
|
9
|
+
* 5. <package>/config/actors.example.json (last-resort default)
|
|
10
|
+
*
|
|
11
|
+
* Covers three consumer shapes:
|
|
12
|
+
* - Repo clone: users edit config/actors.json at the repo root.
|
|
13
|
+
* - npm install: users drop actors.json (or config/actors.json)
|
|
14
|
+
* into their project CWD.
|
|
15
|
+
* - npx one-off: falls back to the bundled example so `npx
|
|
16
|
+
* paracosm` Just Works even before the user writes any config.
|
|
17
|
+
*
|
|
18
|
+
* @module paracosm/cli/actors-resolver
|
|
19
|
+
*/
|
|
20
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
21
|
+
import { resolve, dirname } from 'node:path';
|
|
22
|
+
import { fileURLToPath } from 'node:url';
|
|
23
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
24
|
+
const __dirname = dirname(__filename);
|
|
25
|
+
/**
|
|
26
|
+
* Walks the candidate paths and loads the first `actors.json` that
|
|
27
|
+
* exists. Throws only when nothing (not even the bundled example)
|
|
28
|
+
* is available — which would indicate a broken install.
|
|
29
|
+
*/
|
|
30
|
+
export function resolveActors(options = {}) {
|
|
31
|
+
const cwd = process.cwd();
|
|
32
|
+
const packageRoot = resolve(__dirname, '..', '..');
|
|
33
|
+
const candidates = [];
|
|
34
|
+
if (options.explicitPath) {
|
|
35
|
+
candidates.push({ path: resolve(cwd, options.explicitPath), isExample: false });
|
|
36
|
+
}
|
|
37
|
+
candidates.push({ path: resolve(cwd, 'actors.json'), isExample: false });
|
|
38
|
+
candidates.push({ path: resolve(cwd, 'config', 'actors.json'), isExample: false });
|
|
39
|
+
candidates.push({ path: resolve(packageRoot, 'config', 'actors.json'), isExample: false });
|
|
40
|
+
candidates.push({ path: resolve(packageRoot, 'config', 'actors.example.json'), isExample: true });
|
|
41
|
+
for (const { path, isExample } of candidates) {
|
|
42
|
+
if (!existsSync(path))
|
|
43
|
+
continue;
|
|
44
|
+
const raw = JSON.parse(readFileSync(path, 'utf-8'));
|
|
45
|
+
const actors = Array.isArray(raw.actors) ? raw.actors : [];
|
|
46
|
+
return { actors, sourcePath: path, isExample };
|
|
47
|
+
}
|
|
48
|
+
throw new Error(`paracosm: no actors.json found. Create one at ${resolve(cwd, 'config', 'actors.json')} ` +
|
|
49
|
+
`or pass --actors <path>. A starter template lives at ${resolve(packageRoot, 'config', 'actors.example.json')}.`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pulls `--actors <path>` out of argv WITHOUT mutating the array.
|
|
53
|
+
* Returns undefined when the flag isn't present. Kept separate from
|
|
54
|
+
* the main CLI parser so run.ts / serve.ts can resolve actors the
|
|
55
|
+
* same way without duplicating flag logic.
|
|
56
|
+
*/
|
|
57
|
+
export function parseActorsFlag(args) {
|
|
58
|
+
const idx = args.indexOf('--actors');
|
|
59
|
+
if (idx < 0)
|
|
60
|
+
return undefined;
|
|
61
|
+
const next = args[idx + 1];
|
|
62
|
+
if (!next || next.startsWith('--'))
|
|
63
|
+
return undefined;
|
|
64
|
+
return next;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=actors-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actors-resolver.js","sourceRoot":"","sources":["../../src/cli/actors-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAYtC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAqC,EAAE;IACnE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,UAAU,GAAgD,EAAE,CAAC;IAEnE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3F,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,qBAAqB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElG,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAA+B,CAAC;QAClF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,KAAK,CACb,iDAAiD,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG;QACzF,wDAAwD,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CACjH,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/cli/help.js
CHANGED
|
@@ -10,11 +10,11 @@ import { fileURLToPath } from 'node:url';
|
|
|
10
10
|
const TOP_LEVEL_HELP = `paracosm <command> [options]
|
|
11
11
|
|
|
12
12
|
A structured world model for AI agents. Compile prompts, briefs, URLs, or
|
|
13
|
-
JSON contracts into typed scenarios. Run HEXACO-personality
|
|
13
|
+
JSON contracts into typed scenarios. Run HEXACO-personality actors against
|
|
14
14
|
a deterministic kernel.
|
|
15
15
|
|
|
16
16
|
Commands:
|
|
17
|
-
run Run a simulation against
|
|
17
|
+
run Run a simulation against actors.json
|
|
18
18
|
dashboard Start the SSE web dashboard at http://localhost:3456
|
|
19
19
|
compile <scenario> Compile a scenario draft into runnable hooks (cached)
|
|
20
20
|
init <dir> Scaffold a starter project from a free-text brief
|
|
@@ -26,8 +26,8 @@ Global flags:
|
|
|
26
26
|
--version, -v Print version
|
|
27
27
|
|
|
28
28
|
Examples:
|
|
29
|
-
paracosm run # default
|
|
30
|
-
paracosm run --
|
|
29
|
+
paracosm run # default actor, full turns
|
|
30
|
+
paracosm run --actor 1 --turns 5 # actor index 1, 5 turns
|
|
31
31
|
paracosm run --name "Reyes" --openness 0.85 6 # inline HEXACO override
|
|
32
32
|
paracosm dashboard --turns 6 # opens browser dashboard
|
|
33
33
|
paracosm compile scenarios/lunar.json --seed-url <url> # compile + cache
|
|
@@ -38,23 +38,23 @@ GitHub: https://github.com/framersai/paracosm
|
|
|
38
38
|
`;
|
|
39
39
|
const RUN_HELP = `paracosm run [options]
|
|
40
40
|
|
|
41
|
-
Run a simulation against
|
|
41
|
+
Run a simulation against actors.json (or --actors <path>) and print
|
|
42
42
|
turn-by-turn narrative to stdout. Saves the full RunArtifact JSON to
|
|
43
43
|
./output/v3-<archetype>-<timestamp>.json (override with PARACOSM_OUTPUT_DIR).
|
|
44
44
|
|
|
45
45
|
Options:
|
|
46
|
-
--
|
|
47
|
-
--
|
|
46
|
+
--actor <n> Actor index in actors.json (default: 0)
|
|
47
|
+
--actors <path> Custom actors.json path
|
|
48
48
|
--turns <n> Override turn count
|
|
49
49
|
--seed <n> Override seed
|
|
50
50
|
--start-time <n> Override start time / year
|
|
51
51
|
--provider <p> openai | anthropic (defaults to whichever key is set)
|
|
52
52
|
--cost <p> quality | economy (default: quality)
|
|
53
53
|
--live Enable live web search during department analysis
|
|
54
|
-
--name <s> Override
|
|
55
|
-
--archetype <s> Override
|
|
56
|
-
--unit <s> Override
|
|
57
|
-
--instructions <s> Override
|
|
54
|
+
--name <s> Override actor name
|
|
55
|
+
--archetype <s> Override actor archetype
|
|
56
|
+
--unit <s> Override actor unit
|
|
57
|
+
--instructions <s> Override actor instructions
|
|
58
58
|
--openness <0-1> HEXACO openness override
|
|
59
59
|
--conscientiousness <0-1>
|
|
60
60
|
--extraversion <0-1>
|
|
@@ -74,7 +74,7 @@ tabs over a streaming connection. Without [turns], waits for setup at
|
|
|
74
74
|
|
|
75
75
|
Options:
|
|
76
76
|
[turns] Auto-launch with N turns. Omit to wait for setup.
|
|
77
|
-
--
|
|
77
|
+
--actors <path> Custom actors.json path
|
|
78
78
|
--seed <n> Override seed
|
|
79
79
|
--start-time <n> Override start time
|
|
80
80
|
--provider <p> openai | anthropic
|
|
@@ -104,14 +104,14 @@ Options:
|
|
|
104
104
|
const INIT_HELP = `paracosm init <dir> --domain <text|url> [options]
|
|
105
105
|
|
|
106
106
|
Scaffold a runnable paracosm project from a free-text brief or a URL.
|
|
107
|
-
Calls compileFromSeed +
|
|
107
|
+
Calls compileFromSeed + generateQuickstartActors, then writes
|
|
108
108
|
package.json, run.mjs, README.md, .env.example, .gitignore to <dir>.
|
|
109
109
|
|
|
110
110
|
Options:
|
|
111
111
|
<dir> Output directory (default: ./paracosm-app)
|
|
112
112
|
--domain <text|url> Required: seed text or URL describing the scenario
|
|
113
113
|
--mode <m> turn-loop | batch-trajectory | batch-point (default: turn-loop)
|
|
114
|
-
--
|
|
114
|
+
--actors <n> Number of HEXACO actors, 2-6 (default: 3)
|
|
115
115
|
--name <s> Project name (default: derived from --domain)
|
|
116
116
|
--force Overwrite a non-empty target directory
|
|
117
117
|
|
|
@@ -17,7 +17,7 @@ export type SimulationMode = 'turn-loop' | 'batch-trajectory' | 'batch-point';
|
|
|
17
17
|
* Render the entry script for a paracosm-init scaffolded project.
|
|
18
18
|
*
|
|
19
19
|
* The script imports `runSimulation` from `paracosm/runtime` and runs the
|
|
20
|
-
*
|
|
20
|
+
* actor at index 0 against a turn-loop simulation. Mode is intentionally
|
|
21
21
|
* NOT a runtime input: it is a property of the produced
|
|
22
22
|
* `RunArtifact.metadata`, surfaced after the run completes. Batch-trajectory
|
|
23
23
|
* and batch-point modes are produced by `runBatch` (different entry point,
|
|
@@ -29,7 +29,7 @@ export interface ReadmeInput {
|
|
|
29
29
|
name: string;
|
|
30
30
|
domain: string;
|
|
31
31
|
mode: SimulationMode;
|
|
32
|
-
|
|
32
|
+
actors: number;
|
|
33
33
|
}
|
|
34
34
|
export declare function renderReadme(input: ReadmeInput): string;
|
|
35
35
|
export declare function renderEnvExample(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-templates.d.ts","sourceRoot":"","sources":["../../src/cli/init-templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAcjE;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAqCrC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"init-templates.d.ts","sourceRoot":"","sources":["../../src/cli/init-templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAcjE;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAqCrC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA8BvD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAWzC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS/C"}
|
|
@@ -26,7 +26,7 @@ export function renderPackageJson(input) {
|
|
|
26
26
|
* Render the entry script for a paracosm-init scaffolded project.
|
|
27
27
|
*
|
|
28
28
|
* The script imports `runSimulation` from `paracosm/runtime` and runs the
|
|
29
|
-
*
|
|
29
|
+
* actor at index 0 against a turn-loop simulation. Mode is intentionally
|
|
30
30
|
* NOT a runtime input: it is a property of the produced
|
|
31
31
|
* `RunArtifact.metadata`, surfaced after the run completes. Batch-trajectory
|
|
32
32
|
* and batch-point modes are produced by `runBatch` (different entry point,
|
|
@@ -38,9 +38,9 @@ export function renderRunMjs() {
|
|
|
38
38
|
/**
|
|
39
39
|
* Entry script for a paracosm-init scaffolded project.
|
|
40
40
|
*
|
|
41
|
-
* Reads scenario.json +
|
|
42
|
-
* configured
|
|
43
|
-
* Edit the
|
|
41
|
+
* Reads scenario.json + actors.json from this directory, runs the
|
|
42
|
+
* configured actor at index 0, and prints the resulting RunArtifact JSON.
|
|
43
|
+
* Edit the actor index, maxTurns, or seed below to explore.
|
|
44
44
|
*
|
|
45
45
|
* The "mode" of the resulting run lives on artifact.metadata.mode and is
|
|
46
46
|
* always "turn-loop" for runs produced by runSimulation. For
|
|
@@ -53,16 +53,16 @@ import { runSimulation } from 'paracosm/runtime';
|
|
|
53
53
|
|
|
54
54
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
55
55
|
const scenario = JSON.parse(readFileSync(resolve(here, 'scenario.json'), 'utf-8'));
|
|
56
|
-
const
|
|
56
|
+
const actors = JSON.parse(readFileSync(resolve(here, 'actors.json'), 'utf-8'));
|
|
57
57
|
|
|
58
|
-
if (!Array.isArray(
|
|
59
|
-
console.error('
|
|
58
|
+
if (!Array.isArray(actors) || actors.length === 0) {
|
|
59
|
+
console.error('actors.json is empty. Re-run \\\`paracosm init\\\` to regenerate.');
|
|
60
60
|
process.exit(1);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
const
|
|
63
|
+
const actor = actors[0];
|
|
64
64
|
|
|
65
|
-
const result = await runSimulation(
|
|
65
|
+
const result = await runSimulation(actor, [], {
|
|
66
66
|
scenario,
|
|
67
67
|
maxTurns: 6,
|
|
68
68
|
seed: 42,
|
|
@@ -81,8 +81,8 @@ Scaffolded by \`paracosm init\` from the seed:
|
|
|
81
81
|
This project contains:
|
|
82
82
|
|
|
83
83
|
- \`scenario.json\`: compiled \`ScenarioPackage\` (LLM-generated at init time)
|
|
84
|
-
- \`
|
|
85
|
-
- \`run.mjs\`: minimal entry script that runs
|
|
84
|
+
- \`actors.json\`: ${input.actors} HEXACO actor configs (LLM-generated)
|
|
85
|
+
- \`run.mjs\`: minimal entry script that runs actor 0 in \`${input.mode}\` mode
|
|
86
86
|
|
|
87
87
|
## Quickstart
|
|
88
88
|
|
|
@@ -96,8 +96,8 @@ node run.mjs
|
|
|
96
96
|
## Customizing
|
|
97
97
|
|
|
98
98
|
- Edit \`scenario.json\` to tweak departments, world state, events.
|
|
99
|
-
- Edit \`
|
|
100
|
-
- Edit \`run.mjs\` to change the
|
|
99
|
+
- Edit \`actors.json\` to swap HEXACO traits or instructions.
|
|
100
|
+
- Edit \`run.mjs\` to change the actor index, mode, turn count, or seed.
|
|
101
101
|
|
|
102
102
|
See https://github.com/framersai/paracosm for the full API reference.
|
|
103
103
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../../src/cli/init-templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,KAAK,EAAE,cAAc;SACtB;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,IAAI,KAAK,CAAC,eAAe,EAAE;SACtC;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC;AAID;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCR,CAAC;AACF,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,OAAO,KAAK,KAAK,CAAC,IAAI;;;;IAIpB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;
|
|
1
|
+
{"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../../src/cli/init-templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,KAAK,EAAE,cAAc;SACtB;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,IAAI,KAAK,CAAC,eAAe,EAAE;SACtC;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC;AAID;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCR,CAAC;AACF,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,OAAO,KAAK,KAAK,CAAC,IAAI;;;;IAIpB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;qBAKlD,KAAK,CAAC,MAAM;6DAC4B,KAAK,CAAC,IAAI;;;;;;;;;;;;;;;;;;CAkBtE,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;;;CAMR,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,IAAI,GAAG,GAAG;SACb,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,IAAI,IAAI,cAAc,CAAC;AAChC,CAAC"}
|
package/dist/cli/init.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { compileFromSeed } from '../engine/compiler/compile-from-seed.js';
|
|
2
|
-
import {
|
|
2
|
+
import { generateQuickstartActors } from '../runtime/world-model/index.js';
|
|
3
3
|
import { type SimulationMode } from './init-templates.js';
|
|
4
4
|
export interface InitOptions {
|
|
5
5
|
outputDir: string;
|
|
6
6
|
domain: string;
|
|
7
7
|
mode: SimulationMode;
|
|
8
|
-
|
|
8
|
+
actors: number;
|
|
9
9
|
name: string;
|
|
10
10
|
force: boolean;
|
|
11
11
|
}
|
|
@@ -25,7 +25,7 @@ export type InitArgResult = {
|
|
|
25
25
|
export declare function parseInitArgs(argv: readonly string[]): InitArgResult;
|
|
26
26
|
/**
|
|
27
27
|
* Hook seam for tests. Real implementation calls compileFromSeed +
|
|
28
|
-
*
|
|
28
|
+
* generateQuickstartActors + URL fetch directly. Tests pass mocks.
|
|
29
29
|
*/
|
|
30
30
|
export interface RunInitDeps {
|
|
31
31
|
fetchSeedFromUrl?: (url: string) => Promise<{
|
|
@@ -33,7 +33,7 @@ export interface RunInitDeps {
|
|
|
33
33
|
title: string;
|
|
34
34
|
}>;
|
|
35
35
|
compileFromSeed?: typeof compileFromSeed;
|
|
36
|
-
|
|
36
|
+
generateQuickstartActors?: typeof generateQuickstartActors;
|
|
37
37
|
readEnv?: () => NodeJS.ProcessEnv;
|
|
38
38
|
paracosmVersion?: string;
|
|
39
39
|
log?: (msg: string) => void;
|
package/dist/cli/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAAG,YAAY,CAAC;AAqB9E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CA0DpE;AA6BD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,eAAe,CAAC,EAAE,OAAO,eAAe,CAAC;IACzC,wBAAwB,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC,UAAU,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgF9F"}
|
package/dist/cli/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `paracosm init` subcommand. Scaffolds a runnable paracosm project
|
|
3
3
|
* from a seed text or URL via the existing compileFromSeed +
|
|
4
|
-
*
|
|
4
|
+
* generateQuickstartActors infrastructure.
|
|
5
5
|
*
|
|
6
6
|
* Flag-driven only (no interactive prompts) so it composes with shell
|
|
7
7
|
* scripts and CI. URL handling mirrors the server-app.ts pattern that
|
|
@@ -13,7 +13,7 @@ import { mkdirSync, readdirSync, writeFileSync, existsSync, readFileSync } from
|
|
|
13
13
|
import { resolve, basename, dirname } from 'node:path';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
15
|
import { compileFromSeed } from '../engine/compiler/compile-from-seed.js';
|
|
16
|
-
import {
|
|
16
|
+
import { generateQuickstartActors } from '../runtime/world-model/index.js';
|
|
17
17
|
import { fetchSeedFromUrl as fetchSeedFromUrlViaAgentOS } from './fetch-seed-url.js';
|
|
18
18
|
import { renderPackageJson, renderRunMjs, renderReadme, renderEnvExample, renderGitignore, slugifyName, } from './init-templates.js';
|
|
19
19
|
const VALID_MODES = new Set([
|
|
@@ -21,17 +21,17 @@ const VALID_MODES = new Set([
|
|
|
21
21
|
'batch-trajectory',
|
|
22
22
|
'batch-point',
|
|
23
23
|
]);
|
|
24
|
-
const USAGE = `paracosm init [dir] --domain <text|url> [--mode <m>] [--
|
|
24
|
+
const USAGE = `paracosm init [dir] --domain <text|url> [--mode <m>] [--actors <n>] [--name <name>] [--force]
|
|
25
25
|
|
|
26
26
|
dir output directory (default: ./paracosm-app)
|
|
27
27
|
--domain required: seed text describing the scenario, OR a URL
|
|
28
28
|
--mode turn-loop | batch-trajectory | batch-point (default: turn-loop)
|
|
29
|
-
--
|
|
29
|
+
--actors number of HEXACO leaders, 2-6 (default: 3)
|
|
30
30
|
--name project name, default: derived from --domain
|
|
31
31
|
--force overwrite non-empty target dir
|
|
32
32
|
|
|
33
33
|
example:
|
|
34
|
-
paracosm init my-app --domain "Submarine crew of 8 in deep ocean for 30 days" --
|
|
34
|
+
paracosm init my-app --domain "Submarine crew of 8 in deep ocean for 30 days" --actors 3
|
|
35
35
|
`;
|
|
36
36
|
/**
|
|
37
37
|
* Parse the argv slice that follows `paracosm init`. Returns either a
|
|
@@ -42,7 +42,7 @@ export function parseInitArgs(argv) {
|
|
|
42
42
|
let outputDir;
|
|
43
43
|
let domain;
|
|
44
44
|
let mode = 'turn-loop';
|
|
45
|
-
let
|
|
45
|
+
let actors = 3;
|
|
46
46
|
let name;
|
|
47
47
|
let force = false;
|
|
48
48
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -57,12 +57,12 @@ export function parseInitArgs(argv) {
|
|
|
57
57
|
}
|
|
58
58
|
mode = candidate;
|
|
59
59
|
}
|
|
60
|
-
else if (arg === '--
|
|
60
|
+
else if (arg === '--actors') {
|
|
61
61
|
const n = Number(argv[++i]);
|
|
62
62
|
if (!Number.isFinite(n) || n < 2 || n > 6 || !Number.isInteger(n)) {
|
|
63
|
-
return { ok: false, message: `Invalid --
|
|
63
|
+
return { ok: false, message: `Invalid --actors "${argv[i]}". Must be an integer in [2, 6].\n\n${USAGE}` };
|
|
64
64
|
}
|
|
65
|
-
|
|
65
|
+
actors = n;
|
|
66
66
|
}
|
|
67
67
|
else if (arg === '--name') {
|
|
68
68
|
name = argv[++i];
|
|
@@ -94,7 +94,7 @@ export function parseInitArgs(argv) {
|
|
|
94
94
|
outputDir: resolvedDir,
|
|
95
95
|
domain,
|
|
96
96
|
mode,
|
|
97
|
-
|
|
97
|
+
actors,
|
|
98
98
|
name: resolvedName,
|
|
99
99
|
force,
|
|
100
100
|
},
|
|
@@ -177,14 +177,14 @@ export async function runInit(argv, deps = {}) {
|
|
|
177
177
|
process.stderr.write(`Scenario compile failed: ${String(err)}\n`);
|
|
178
178
|
return 2;
|
|
179
179
|
}
|
|
180
|
-
log(`[paracosm init] Generating ${opts.
|
|
181
|
-
let
|
|
180
|
+
log(`[paracosm init] Generating ${opts.actors} HEXACO actors...`);
|
|
181
|
+
let actors;
|
|
182
182
|
try {
|
|
183
|
-
const gen = deps.
|
|
184
|
-
|
|
183
|
+
const gen = deps.generateQuickstartActors ?? generateQuickstartActors;
|
|
184
|
+
actors = await gen(scenario, opts.actors, {});
|
|
185
185
|
}
|
|
186
186
|
catch (err) {
|
|
187
|
-
process.stderr.write(`
|
|
187
|
+
process.stderr.write(`Actor generation failed: ${String(err)}\n`);
|
|
188
188
|
return 2;
|
|
189
189
|
}
|
|
190
190
|
log(`[paracosm init] Writing files to ${opts.outputDir}/...`);
|
|
@@ -192,9 +192,9 @@ export async function runInit(argv, deps = {}) {
|
|
|
192
192
|
const paracosmVersion = deps.paracosmVersion ?? readOwnVersion();
|
|
193
193
|
writeFileSync(`${opts.outputDir}/package.json`, renderPackageJson({ name: opts.name, paracosmVersion }));
|
|
194
194
|
writeFileSync(`${opts.outputDir}/scenario.json`, JSON.stringify(scenario, null, 2) + '\n');
|
|
195
|
-
writeFileSync(`${opts.outputDir}/
|
|
195
|
+
writeFileSync(`${opts.outputDir}/actors.json`, JSON.stringify(actors, null, 2) + '\n');
|
|
196
196
|
writeFileSync(`${opts.outputDir}/run.mjs`, renderRunMjs());
|
|
197
|
-
writeFileSync(`${opts.outputDir}/README.md`, renderReadme({ name: opts.name, domain: opts.domain, mode: opts.mode,
|
|
197
|
+
writeFileSync(`${opts.outputDir}/README.md`, renderReadme({ name: opts.name, domain: opts.domain, mode: opts.mode, actors: opts.actors }));
|
|
198
198
|
writeFileSync(`${opts.outputDir}/.env.example`, renderEnvExample());
|
|
199
199
|
writeFileSync(`${opts.outputDir}/.gitignore`, renderGitignore());
|
|
200
200
|
log(`[paracosm init] Done. Run:`);
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/pair-runner.js
CHANGED
|
@@ -48,21 +48,21 @@ scenario = marsScenario,
|
|
|
48
48
|
* caught and logged so a failing handler does not break the run.
|
|
49
49
|
*/
|
|
50
50
|
onArtifact) {
|
|
51
|
-
const {
|
|
51
|
+
const { actors, turns, seed, startTime, liveSearch, customEvents } = simConfig;
|
|
52
52
|
broadcast('status', { phase: 'starting', maxTurns: turns, customEvents });
|
|
53
53
|
const { runSimulation } = await import('../runtime/orchestrator.js');
|
|
54
54
|
const onEvent = (event) => broadcast('sim', event);
|
|
55
55
|
broadcast('status', {
|
|
56
56
|
phase: 'parallel',
|
|
57
|
-
|
|
57
|
+
actors: actors.map(leader => ({
|
|
58
58
|
name: leader.name,
|
|
59
59
|
archetype: leader.archetype,
|
|
60
60
|
unit: leader.unit,
|
|
61
61
|
hexaco: leader.hexaco,
|
|
62
62
|
})),
|
|
63
63
|
});
|
|
64
|
-
console.log(` Running: ${
|
|
65
|
-
const results = await Promise.allSettled(
|
|
64
|
+
console.log(` Running: ${actors[0].name} vs ${actors[1].name} | ${turns} turns | seed ${seed}\n`);
|
|
65
|
+
const results = await Promise.allSettled(actors.map((leader, index) => {
|
|
66
66
|
const tag = leader.archetype.toLowerCase().replace(/^the\s+/, '').replace(/\s+/g, '-') || `leader-${index}`;
|
|
67
67
|
return runSimulation(leader, simConfig.keyPersonnel ?? DEFAULT_KEY_PERSONNEL, {
|
|
68
68
|
maxTurns: turns,
|
|
@@ -274,10 +274,10 @@ onArtifact) {
|
|
|
274
274
|
if (!simConfig.forkFrom) {
|
|
275
275
|
throw new Error('runForkSimulation called without simConfig.forkFrom set');
|
|
276
276
|
}
|
|
277
|
-
if (simConfig.
|
|
278
|
-
throw new Error(`runForkSimulation requires exactly 1 leader, got ${simConfig.
|
|
277
|
+
if (simConfig.actors.length !== 1) {
|
|
278
|
+
throw new Error(`runForkSimulation requires exactly 1 leader, got ${simConfig.actors.length}`);
|
|
279
279
|
}
|
|
280
|
-
const leader = simConfig.
|
|
280
|
+
const leader = simConfig.actors[0];
|
|
281
281
|
const { turns, seed, startTime, liveSearch, customEvents } = simConfig;
|
|
282
282
|
broadcast('status', { phase: 'starting', maxTurns: turns, customEvents, fork: true });
|
|
283
283
|
const { WorldModel } = await import('../runtime/world-model/index.js');
|
|
@@ -368,31 +368,31 @@ onArtifact) {
|
|
|
368
368
|
export async function runBatchSimulations(simConfig, broadcast, signal, scenario = marsScenario,
|
|
369
369
|
/** Optional callback fired after each leader's artifact completes. */
|
|
370
370
|
onArtifact) {
|
|
371
|
-
const {
|
|
372
|
-
broadcast('status', { phase: 'starting', maxTurns: turns, customEvents, batch: true, actorCount:
|
|
371
|
+
const { actors, turns, seed, startTime, liveSearch, customEvents } = simConfig;
|
|
372
|
+
broadcast('status', { phase: 'starting', maxTurns: turns, customEvents, batch: true, actorCount: actors.length });
|
|
373
373
|
const { runSimulation } = await import('../runtime/orchestrator.js');
|
|
374
374
|
const onEvent = (event) => broadcast('sim', event);
|
|
375
375
|
broadcast('status', {
|
|
376
376
|
phase: 'parallel',
|
|
377
377
|
batch: true,
|
|
378
|
-
|
|
378
|
+
actors: actors.map(leader => ({
|
|
379
379
|
name: leader.name,
|
|
380
380
|
archetype: leader.archetype,
|
|
381
381
|
unit: leader.unit,
|
|
382
382
|
hexaco: leader.hexaco,
|
|
383
383
|
})),
|
|
384
384
|
});
|
|
385
|
-
console.log(` Running batch: ${
|
|
385
|
+
console.log(` Running batch: ${actors.map(l => l.name).join(' vs ')} | ${turns} turns | seed ${seed}
|
|
386
386
|
`);
|
|
387
387
|
const usedTags = new Map();
|
|
388
|
-
const
|
|
388
|
+
const actorsWithTags = actors.map((leader, index) => {
|
|
389
389
|
const base = leader.archetype.toLowerCase().replace(/^the\s+/, '').replace(/\s+/g, '-') || `leader-${index}`;
|
|
390
390
|
const count = usedTags.get(base) ?? 0;
|
|
391
391
|
usedTags.set(base, count + 1);
|
|
392
392
|
const tag = count === 0 ? base : `${base}-${count + 1}`;
|
|
393
393
|
return { leader, index, tag };
|
|
394
394
|
});
|
|
395
|
-
const settled = await Promise.allSettled(
|
|
395
|
+
const settled = await Promise.allSettled(actorsWithTags.map(({ leader, index, tag }) => {
|
|
396
396
|
return runSimulation(leader, simConfig.keyPersonnel ?? DEFAULT_KEY_PERSONNEL, {
|
|
397
397
|
maxTurns: turns,
|
|
398
398
|
seed,
|