paracosm 0.4.346 → 0.4.377
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 +186 -14
- package/config/leaders.example.json +32 -0
- package/config/leaders.json +32 -0
- package/dist/cli/cli-run-options.d.ts +11 -0
- package/dist/cli/cli-run-options.d.ts.map +1 -0
- package/dist/cli/cli-run-options.js +39 -0
- package/dist/cli/cli-run-options.js.map +1 -0
- package/dist/cli/compile-cli-options.d.ts +14 -0
- package/dist/cli/compile-cli-options.d.ts.map +1 -0
- package/dist/cli/compile-cli-options.js +48 -0
- package/dist/cli/compile-cli-options.js.map +1 -0
- package/dist/cli/compile.d.ts +11 -0
- package/dist/cli/compile.d.ts.map +1 -0
- package/dist/cli/compile.js +92 -0
- package/dist/cli/compile.js.map +1 -0
- package/dist/cli/custom-scenarios.d.ts +10 -0
- package/dist/cli/custom-scenarios.d.ts.map +1 -0
- package/dist/cli/custom-scenarios.js +93 -0
- package/dist/cli/custom-scenarios.js.map +1 -0
- package/dist/cli/leaders-resolver.d.ts +26 -0
- package/dist/cli/leaders-resolver.d.ts.map +1 -0
- package/dist/cli/leaders-resolver.js +66 -0
- package/dist/cli/leaders-resolver.js.map +1 -0
- package/dist/cli/pair-runner.d.ts +23 -0
- package/dist/cli/pair-runner.d.ts.map +1 -0
- package/dist/cli/pair-runner.js +225 -0
- package/dist/cli/pair-runner.js.map +1 -0
- package/dist/cli/rate-limiter.d.ts +78 -0
- package/dist/cli/rate-limiter.d.ts.map +1 -0
- package/dist/cli/rate-limiter.js +193 -0
- package/dist/cli/rate-limiter.js.map +1 -0
- package/dist/cli/retry-stats.d.ts +179 -0
- package/dist/cli/retry-stats.d.ts.map +1 -0
- package/dist/cli/retry-stats.js +167 -0
- package/dist/cli/retry-stats.js.map +1 -0
- package/dist/cli/run-a.d.ts +2 -0
- package/dist/cli/run-a.d.ts.map +1 -0
- package/dist/cli/run-a.js +13 -0
- package/dist/cli/run-a.js.map +1 -0
- package/dist/cli/run-b.d.ts +2 -0
- package/dist/cli/run-b.d.ts.map +1 -0
- package/dist/cli/run-b.js +13 -0
- package/dist/cli/run-b.js.map +1 -0
- package/dist/cli/run.d.ts +18 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +135 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/serve.d.ts +10 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +71 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/server/routes/platform-api.d.ts +8 -0
- package/dist/cli/server/routes/platform-api.d.ts.map +1 -0
- package/dist/cli/server/routes/platform-api.js +41 -0
- package/dist/cli/server/routes/platform-api.js.map +1 -0
- package/dist/cli/server/routes/public-demo.d.ts +4 -0
- package/dist/cli/server/routes/public-demo.d.ts.map +1 -0
- package/dist/cli/server/routes/public-demo.js +16 -0
- package/dist/cli/server/routes/public-demo.js.map +1 -0
- package/dist/cli/server/run-history-store.d.ts +8 -0
- package/dist/cli/server/run-history-store.d.ts.map +1 -0
- package/dist/cli/server/run-history-store.js +8 -0
- package/dist/cli/server/run-history-store.js.map +1 -0
- package/dist/cli/server/run-record.d.ts +14 -0
- package/dist/cli/server/run-record.d.ts.map +1 -0
- package/dist/cli/server/run-record.js +12 -0
- package/dist/cli/server/run-record.js.map +1 -0
- package/dist/cli/server/server-mode.d.ts +3 -0
- package/dist/cli/server/server-mode.d.ts.map +1 -0
- package/dist/cli/server/server-mode.js +8 -0
- package/dist/cli/server/server-mode.js.map +1 -0
- package/dist/cli/server-app.d.ts +46 -0
- package/dist/cli/server-app.d.ts.map +1 -0
- package/dist/cli/server-app.js +1846 -0
- package/dist/cli/server-app.js.map +1 -0
- package/dist/cli/session-store.d.ts +103 -0
- package/dist/cli/session-store.d.ts.map +1 -0
- package/dist/cli/session-store.js +254 -0
- package/dist/cli/session-store.js.map +1 -0
- package/dist/cli/session-title.d.ts +81 -0
- package/dist/cli/session-title.d.ts.map +1 -0
- package/dist/cli/session-title.js +229 -0
- package/dist/cli/session-title.js.map +1 -0
- package/dist/cli/sim-config.d.ts.map +1 -0
- package/dist/cli/sim-config.js.map +1 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/{src/cli → cli}/types.js.map +1 -1
- package/dist/engine/_template/index.d.ts.map +1 -0
- package/dist/engine/_template/index.js.map +1 -0
- package/dist/engine/compiler/cache.d.ts.map +1 -0
- package/dist/engine/compiler/cache.js.map +1 -0
- package/dist/engine/compiler/generate-director.d.ts.map +1 -0
- package/dist/engine/compiler/generate-director.js.map +1 -0
- package/dist/engine/compiler/generate-fingerprint.d.ts.map +1 -0
- package/dist/engine/compiler/generate-fingerprint.js.map +1 -0
- package/dist/engine/compiler/generate-milestones.d.ts.map +1 -0
- package/dist/engine/compiler/generate-milestones.js.map +1 -0
- package/dist/engine/compiler/generate-politics.d.ts.map +1 -0
- package/dist/engine/compiler/generate-politics.js.map +1 -0
- package/dist/engine/compiler/generate-progression.d.ts.map +1 -0
- package/dist/engine/compiler/generate-progression.js.map +1 -0
- package/dist/engine/compiler/generate-prompts.d.ts.map +1 -0
- package/dist/engine/compiler/generate-prompts.js.map +1 -0
- package/dist/engine/compiler/generate-reactions.d.ts.map +1 -0
- package/dist/engine/compiler/generate-reactions.js.map +1 -0
- package/dist/engine/compiler/index.d.ts.map +1 -0
- package/dist/engine/compiler/index.js.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedCode.d.ts.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedCode.js.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedJson.d.ts.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedJson.js.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedObject.d.ts.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedObject.js.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedProse.d.ts.map +1 -0
- package/dist/engine/compiler/llm-invocations/generateValidatedProse.js.map +1 -0
- package/dist/engine/compiler/schemas/index.d.ts.map +1 -0
- package/dist/engine/compiler/schemas/index.js.map +1 -0
- package/dist/engine/compiler/schemas/milestones.d.ts.map +1 -0
- package/dist/engine/compiler/schemas/milestones.js.map +1 -0
- package/dist/engine/compiler/seed-ingestion.d.ts.map +1 -0
- package/dist/engine/compiler/seed-ingestion.js.map +1 -0
- package/dist/engine/compiler/telemetry.d.ts.map +1 -0
- package/dist/engine/compiler/telemetry.js.map +1 -0
- package/dist/engine/compiler/types.d.ts.map +1 -0
- package/dist/engine/compiler/types.js.map +1 -0
- package/dist/engine/compiler/validate.d.ts.map +1 -0
- package/dist/engine/compiler/validate.js.map +1 -0
- package/dist/engine/core/agent-generator.d.ts.map +1 -0
- package/dist/engine/core/agent-generator.js.map +1 -0
- package/dist/engine/core/kernel.d.ts.map +1 -0
- package/dist/engine/core/kernel.js.map +1 -0
- package/dist/engine/core/progression.d.ts.map +1 -0
- package/dist/engine/core/progression.js.map +1 -0
- package/dist/engine/core/rng.d.ts.map +1 -0
- package/dist/engine/core/rng.js.map +1 -0
- package/dist/engine/core/state.d.ts.map +1 -0
- package/dist/engine/core/state.js.map +1 -0
- package/dist/engine/effect-registry.d.ts.map +1 -0
- package/dist/engine/effect-registry.js.map +1 -0
- package/dist/engine/event-taxonomy.d.ts.map +1 -0
- package/dist/engine/event-taxonomy.js.map +1 -0
- package/dist/{src/engine → engine}/index.d.ts +2 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/{src/engine → engine}/index.js +5 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/lunar/effects.d.ts.map +1 -0
- package/dist/engine/lunar/effects.js.map +1 -0
- package/dist/engine/lunar/events.d.ts.map +1 -0
- package/dist/engine/lunar/events.js.map +1 -0
- package/dist/engine/lunar/fingerprint.d.ts.map +1 -0
- package/dist/engine/lunar/fingerprint.js.map +1 -0
- package/dist/engine/lunar/hooks.d.ts.map +1 -0
- package/dist/engine/lunar/hooks.js.map +1 -0
- package/dist/engine/lunar/index.d.ts.map +1 -0
- package/dist/engine/lunar/index.js.map +1 -0
- package/dist/engine/lunar/metrics.d.ts.map +1 -0
- package/dist/engine/lunar/metrics.js.map +1 -0
- package/dist/engine/lunar/milestones.d.ts.map +1 -0
- package/dist/engine/lunar/milestones.js.map +1 -0
- package/dist/engine/lunar/names.d.ts.map +1 -0
- package/dist/engine/lunar/names.js.map +1 -0
- package/dist/engine/lunar/politics.d.ts.map +1 -0
- package/dist/engine/lunar/politics.js.map +1 -0
- package/dist/engine/lunar/presets.d.ts.map +1 -0
- package/dist/engine/lunar/presets.js.map +1 -0
- package/dist/engine/lunar/progression-hooks.d.ts.map +1 -0
- package/dist/engine/lunar/progression-hooks.js.map +1 -0
- package/dist/engine/lunar/prompts.d.ts.map +1 -0
- package/dist/engine/lunar/prompts.js.map +1 -0
- package/dist/engine/lunar/reactions.d.ts.map +1 -0
- package/dist/engine/lunar/reactions.js.map +1 -0
- package/dist/engine/lunar/research-bundle.d.ts.map +1 -0
- package/dist/engine/lunar/research-bundle.js.map +1 -0
- package/dist/engine/mars/effects.d.ts.map +1 -0
- package/dist/engine/mars/effects.js.map +1 -0
- package/dist/engine/mars/events.d.ts.map +1 -0
- package/dist/engine/mars/events.js.map +1 -0
- package/dist/engine/mars/fingerprint.d.ts.map +1 -0
- package/dist/engine/mars/fingerprint.js.map +1 -0
- package/dist/engine/mars/hooks.d.ts.map +1 -0
- package/dist/engine/mars/hooks.js.map +1 -0
- package/dist/engine/mars/index.d.ts.map +1 -0
- package/dist/engine/mars/index.js.map +1 -0
- package/dist/engine/mars/metrics.d.ts.map +1 -0
- package/dist/engine/mars/metrics.js.map +1 -0
- package/dist/engine/mars/milestones.d.ts.map +1 -0
- package/dist/engine/mars/milestones.js.map +1 -0
- package/dist/engine/mars/names.d.ts.map +1 -0
- package/dist/engine/mars/names.js.map +1 -0
- package/dist/engine/mars/politics.d.ts.map +1 -0
- package/dist/engine/mars/politics.js.map +1 -0
- package/dist/engine/mars/presets.d.ts.map +1 -0
- package/dist/engine/mars/presets.js.map +1 -0
- package/dist/engine/mars/progression-hooks.d.ts.map +1 -0
- package/dist/engine/mars/progression-hooks.js.map +1 -0
- package/dist/engine/mars/prompts.d.ts.map +1 -0
- package/dist/engine/mars/prompts.js.map +1 -0
- package/dist/engine/mars/reactions.d.ts.map +1 -0
- package/dist/engine/mars/reactions.js.map +1 -0
- package/dist/engine/mars/research-bundle.d.ts.map +1 -0
- package/dist/engine/mars/research-bundle.js.map +1 -0
- package/dist/engine/metric-registry.d.ts.map +1 -0
- package/dist/engine/metric-registry.js.map +1 -0
- package/dist/engine/provider-resolver.d.ts.map +1 -0
- package/dist/{src/engine → engine}/provider-resolver.js +2 -1
- package/dist/engine/provider-resolver.js.map +1 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/{src/engine → engine}/types.js.map +1 -1
- package/dist/runtime/agent-memory.d.ts.map +1 -0
- package/dist/runtime/agent-memory.js.map +1 -0
- package/dist/runtime/agent-reactions.d.ts.map +1 -0
- package/dist/runtime/agent-reactions.js.map +1 -0
- package/dist/runtime/batch.d.ts.map +1 -0
- package/dist/runtime/batch.js.map +1 -0
- package/dist/runtime/chat-agents.d.ts.map +1 -0
- package/dist/runtime/chat-agents.js.map +1 -0
- package/dist/runtime/citations-catalog.d.ts.map +1 -0
- package/dist/runtime/citations-catalog.js.map +1 -0
- package/dist/runtime/commander-setup.d.ts.map +1 -0
- package/dist/runtime/commander-setup.js.map +1 -0
- package/dist/runtime/contracts.d.ts.map +1 -0
- package/dist/{src/runtime → runtime}/contracts.js.map +1 -1
- package/dist/runtime/cost-tracker.d.ts.map +1 -0
- package/dist/runtime/cost-tracker.js.map +1 -0
- package/dist/runtime/departments.d.ts.map +1 -0
- package/dist/runtime/departments.js.map +1 -0
- package/dist/runtime/director.d.ts.map +1 -0
- package/dist/runtime/director.js.map +1 -0
- package/dist/runtime/economics-profile.d.ts.map +1 -0
- package/dist/runtime/economics-profile.js.map +1 -0
- package/dist/runtime/emergent-setup.d.ts.map +1 -0
- package/dist/runtime/emergent-setup.js.map +1 -0
- package/dist/runtime/generic-fingerprint.d.ts.map +1 -0
- package/dist/runtime/generic-fingerprint.js.map +1 -0
- package/dist/runtime/hexaco-cues/trajectory.d.ts.map +1 -0
- package/dist/runtime/hexaco-cues/trajectory.js.map +1 -0
- package/dist/runtime/hexaco-cues/translation.d.ts.map +1 -0
- package/dist/runtime/hexaco-cues/translation.js.map +1 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/llm-invocations/generateValidatedObject.d.ts.map +1 -0
- package/dist/runtime/llm-invocations/generateValidatedObject.js.map +1 -0
- package/dist/runtime/llm-invocations/sendAndValidate.d.ts.map +1 -0
- package/dist/runtime/llm-invocations/sendAndValidate.js.map +1 -0
- package/dist/runtime/orchestrator.d.ts.map +1 -0
- package/dist/runtime/orchestrator.js.map +1 -0
- package/dist/runtime/output-writer.d.ts.map +1 -0
- package/dist/runtime/output-writer.js.map +1 -0
- package/dist/runtime/parsers.d.ts.map +1 -0
- package/dist/runtime/parsers.js.map +1 -0
- package/dist/runtime/pricing.d.ts.map +1 -0
- package/dist/runtime/pricing.js.map +1 -0
- package/dist/runtime/provider-errors.d.ts.map +1 -0
- package/dist/runtime/provider-errors.js.map +1 -0
- package/dist/runtime/reaction-step.d.ts.map +1 -0
- package/dist/runtime/reaction-step.js.map +1 -0
- package/dist/runtime/research/knowledge-base.d.ts.map +1 -0
- package/dist/runtime/research/knowledge-base.js.map +1 -0
- package/dist/runtime/research/research-memory.d.ts.map +1 -0
- package/dist/runtime/research/research-memory.js.map +1 -0
- package/dist/runtime/research/research.d.ts.map +1 -0
- package/dist/runtime/research/research.js.map +1 -0
- package/dist/runtime/research/scenario-research.d.ts.map +1 -0
- package/dist/runtime/research/scenario-research.js.map +1 -0
- package/dist/runtime/research/scenarios.d.ts.map +1 -0
- package/dist/runtime/research/scenarios.js.map +1 -0
- package/dist/runtime/runtime-helpers.d.ts.map +1 -0
- package/dist/runtime/runtime-helpers.js.map +1 -0
- package/dist/runtime/schemas/commander.d.ts.map +1 -0
- package/dist/runtime/schemas/commander.js.map +1 -0
- package/dist/runtime/schemas/department.d.ts.map +1 -0
- package/dist/runtime/schemas/department.js.map +1 -0
- package/dist/runtime/schemas/director.d.ts.map +1 -0
- package/dist/runtime/schemas/director.js.map +1 -0
- package/dist/runtime/schemas/index.d.ts.map +1 -0
- package/dist/runtime/schemas/index.js.map +1 -0
- package/dist/runtime/schemas/reactions.d.ts.map +1 -0
- package/dist/runtime/schemas/reactions.js.map +1 -0
- package/dist/runtime/schemas/verdict.d.ts.map +1 -0
- package/dist/runtime/schemas/verdict.js.map +1 -0
- package/dist/runtime/tool-ledger.d.ts.map +1 -0
- package/dist/runtime/tool-ledger.js.map +1 -0
- package/package.json +8 -2
- package/dist/src/cli/sim-config.d.ts.map +0 -1
- package/dist/src/cli/sim-config.js.map +0 -1
- package/dist/src/cli/types.d.ts.map +0 -1
- package/dist/src/engine/_template/index.d.ts.map +0 -1
- package/dist/src/engine/_template/index.js.map +0 -1
- package/dist/src/engine/compiler/cache.d.ts.map +0 -1
- package/dist/src/engine/compiler/cache.js.map +0 -1
- package/dist/src/engine/compiler/generate-director.d.ts.map +0 -1
- package/dist/src/engine/compiler/generate-director.js.map +0 -1
- package/dist/src/engine/compiler/generate-fingerprint.d.ts.map +0 -1
- package/dist/src/engine/compiler/generate-fingerprint.js.map +0 -1
- package/dist/src/engine/compiler/generate-milestones.d.ts.map +0 -1
- package/dist/src/engine/compiler/generate-milestones.js.map +0 -1
- package/dist/src/engine/compiler/generate-politics.d.ts.map +0 -1
- package/dist/src/engine/compiler/generate-politics.js.map +0 -1
- package/dist/src/engine/compiler/generate-progression.d.ts.map +0 -1
- package/dist/src/engine/compiler/generate-progression.js.map +0 -1
- package/dist/src/engine/compiler/generate-prompts.d.ts.map +0 -1
- package/dist/src/engine/compiler/generate-prompts.js.map +0 -1
- package/dist/src/engine/compiler/generate-reactions.d.ts.map +0 -1
- package/dist/src/engine/compiler/generate-reactions.js.map +0 -1
- package/dist/src/engine/compiler/index.d.ts.map +0 -1
- package/dist/src/engine/compiler/index.js.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedCode.d.ts.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedCode.js.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedJson.d.ts.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedJson.js.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedObject.d.ts.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedObject.js.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedProse.d.ts.map +0 -1
- package/dist/src/engine/compiler/llm-invocations/generateValidatedProse.js.map +0 -1
- package/dist/src/engine/compiler/schemas/index.d.ts.map +0 -1
- package/dist/src/engine/compiler/schemas/index.js.map +0 -1
- package/dist/src/engine/compiler/schemas/milestones.d.ts.map +0 -1
- package/dist/src/engine/compiler/schemas/milestones.js.map +0 -1
- package/dist/src/engine/compiler/seed-ingestion.d.ts.map +0 -1
- package/dist/src/engine/compiler/seed-ingestion.js.map +0 -1
- package/dist/src/engine/compiler/telemetry.d.ts.map +0 -1
- package/dist/src/engine/compiler/telemetry.js.map +0 -1
- package/dist/src/engine/compiler/types.d.ts.map +0 -1
- package/dist/src/engine/compiler/types.js.map +0 -1
- package/dist/src/engine/compiler/validate.d.ts.map +0 -1
- package/dist/src/engine/compiler/validate.js.map +0 -1
- package/dist/src/engine/core/agent-generator.d.ts.map +0 -1
- package/dist/src/engine/core/agent-generator.js.map +0 -1
- package/dist/src/engine/core/kernel.d.ts.map +0 -1
- package/dist/src/engine/core/kernel.js.map +0 -1
- package/dist/src/engine/core/progression.d.ts.map +0 -1
- package/dist/src/engine/core/progression.js.map +0 -1
- package/dist/src/engine/core/rng.d.ts.map +0 -1
- package/dist/src/engine/core/rng.js.map +0 -1
- package/dist/src/engine/core/state.d.ts.map +0 -1
- package/dist/src/engine/core/state.js.map +0 -1
- package/dist/src/engine/effect-registry.d.ts.map +0 -1
- package/dist/src/engine/effect-registry.js.map +0 -1
- package/dist/src/engine/event-taxonomy.d.ts.map +0 -1
- package/dist/src/engine/event-taxonomy.js.map +0 -1
- package/dist/src/engine/index.d.ts.map +0 -1
- package/dist/src/engine/index.js.map +0 -1
- package/dist/src/engine/lunar/effects.d.ts.map +0 -1
- package/dist/src/engine/lunar/effects.js.map +0 -1
- package/dist/src/engine/lunar/events.d.ts.map +0 -1
- package/dist/src/engine/lunar/events.js.map +0 -1
- package/dist/src/engine/lunar/fingerprint.d.ts.map +0 -1
- package/dist/src/engine/lunar/fingerprint.js.map +0 -1
- package/dist/src/engine/lunar/hooks.d.ts.map +0 -1
- package/dist/src/engine/lunar/hooks.js.map +0 -1
- package/dist/src/engine/lunar/index.d.ts.map +0 -1
- package/dist/src/engine/lunar/index.js.map +0 -1
- package/dist/src/engine/lunar/metrics.d.ts.map +0 -1
- package/dist/src/engine/lunar/metrics.js.map +0 -1
- package/dist/src/engine/lunar/milestones.d.ts.map +0 -1
- package/dist/src/engine/lunar/milestones.js.map +0 -1
- package/dist/src/engine/lunar/names.d.ts.map +0 -1
- package/dist/src/engine/lunar/names.js.map +0 -1
- package/dist/src/engine/lunar/politics.d.ts.map +0 -1
- package/dist/src/engine/lunar/politics.js.map +0 -1
- package/dist/src/engine/lunar/presets.d.ts.map +0 -1
- package/dist/src/engine/lunar/presets.js.map +0 -1
- package/dist/src/engine/lunar/progression-hooks.d.ts.map +0 -1
- package/dist/src/engine/lunar/progression-hooks.js.map +0 -1
- package/dist/src/engine/lunar/prompts.d.ts.map +0 -1
- package/dist/src/engine/lunar/prompts.js.map +0 -1
- package/dist/src/engine/lunar/reactions.d.ts.map +0 -1
- package/dist/src/engine/lunar/reactions.js.map +0 -1
- package/dist/src/engine/lunar/research-bundle.d.ts.map +0 -1
- package/dist/src/engine/lunar/research-bundle.js.map +0 -1
- package/dist/src/engine/mars/effects.d.ts.map +0 -1
- package/dist/src/engine/mars/effects.js.map +0 -1
- package/dist/src/engine/mars/events.d.ts.map +0 -1
- package/dist/src/engine/mars/events.js.map +0 -1
- package/dist/src/engine/mars/fingerprint.d.ts.map +0 -1
- package/dist/src/engine/mars/fingerprint.js.map +0 -1
- package/dist/src/engine/mars/hooks.d.ts.map +0 -1
- package/dist/src/engine/mars/hooks.js.map +0 -1
- package/dist/src/engine/mars/index.d.ts.map +0 -1
- package/dist/src/engine/mars/index.js.map +0 -1
- package/dist/src/engine/mars/metrics.d.ts.map +0 -1
- package/dist/src/engine/mars/metrics.js.map +0 -1
- package/dist/src/engine/mars/milestones.d.ts.map +0 -1
- package/dist/src/engine/mars/milestones.js.map +0 -1
- package/dist/src/engine/mars/names.d.ts.map +0 -1
- package/dist/src/engine/mars/names.js.map +0 -1
- package/dist/src/engine/mars/politics.d.ts.map +0 -1
- package/dist/src/engine/mars/politics.js.map +0 -1
- package/dist/src/engine/mars/presets.d.ts.map +0 -1
- package/dist/src/engine/mars/presets.js.map +0 -1
- package/dist/src/engine/mars/progression-hooks.d.ts.map +0 -1
- package/dist/src/engine/mars/progression-hooks.js.map +0 -1
- package/dist/src/engine/mars/prompts.d.ts.map +0 -1
- package/dist/src/engine/mars/prompts.js.map +0 -1
- package/dist/src/engine/mars/reactions.d.ts.map +0 -1
- package/dist/src/engine/mars/reactions.js.map +0 -1
- package/dist/src/engine/mars/research-bundle.d.ts.map +0 -1
- package/dist/src/engine/mars/research-bundle.js.map +0 -1
- package/dist/src/engine/metric-registry.d.ts.map +0 -1
- package/dist/src/engine/metric-registry.js.map +0 -1
- package/dist/src/engine/provider-resolver.d.ts.map +0 -1
- package/dist/src/engine/provider-resolver.js.map +0 -1
- package/dist/src/engine/types.d.ts.map +0 -1
- package/dist/src/runtime/agent-memory.d.ts.map +0 -1
- package/dist/src/runtime/agent-memory.js.map +0 -1
- package/dist/src/runtime/agent-reactions.d.ts.map +0 -1
- package/dist/src/runtime/agent-reactions.js.map +0 -1
- package/dist/src/runtime/batch.d.ts.map +0 -1
- package/dist/src/runtime/batch.js.map +0 -1
- package/dist/src/runtime/chat-agents.d.ts.map +0 -1
- package/dist/src/runtime/chat-agents.js.map +0 -1
- package/dist/src/runtime/citations-catalog.d.ts.map +0 -1
- package/dist/src/runtime/citations-catalog.js.map +0 -1
- package/dist/src/runtime/commander-setup.d.ts.map +0 -1
- package/dist/src/runtime/commander-setup.js.map +0 -1
- package/dist/src/runtime/contracts.d.ts.map +0 -1
- package/dist/src/runtime/cost-tracker.d.ts.map +0 -1
- package/dist/src/runtime/cost-tracker.js.map +0 -1
- package/dist/src/runtime/departments.d.ts.map +0 -1
- package/dist/src/runtime/departments.js.map +0 -1
- package/dist/src/runtime/director.d.ts.map +0 -1
- package/dist/src/runtime/director.js.map +0 -1
- package/dist/src/runtime/economics-profile.d.ts.map +0 -1
- package/dist/src/runtime/economics-profile.js.map +0 -1
- package/dist/src/runtime/emergent-setup.d.ts.map +0 -1
- package/dist/src/runtime/emergent-setup.js.map +0 -1
- package/dist/src/runtime/generic-fingerprint.d.ts.map +0 -1
- package/dist/src/runtime/generic-fingerprint.js.map +0 -1
- package/dist/src/runtime/hexaco-cues/trajectory.d.ts.map +0 -1
- package/dist/src/runtime/hexaco-cues/trajectory.js.map +0 -1
- package/dist/src/runtime/hexaco-cues/translation.d.ts.map +0 -1
- package/dist/src/runtime/hexaco-cues/translation.js.map +0 -1
- package/dist/src/runtime/index.d.ts.map +0 -1
- package/dist/src/runtime/index.js.map +0 -1
- package/dist/src/runtime/llm-invocations/generateValidatedObject.d.ts.map +0 -1
- package/dist/src/runtime/llm-invocations/generateValidatedObject.js.map +0 -1
- package/dist/src/runtime/llm-invocations/sendAndValidate.d.ts.map +0 -1
- package/dist/src/runtime/llm-invocations/sendAndValidate.js.map +0 -1
- package/dist/src/runtime/orchestrator.d.ts.map +0 -1
- package/dist/src/runtime/orchestrator.js.map +0 -1
- package/dist/src/runtime/output-writer.d.ts.map +0 -1
- package/dist/src/runtime/output-writer.js.map +0 -1
- package/dist/src/runtime/parsers.d.ts.map +0 -1
- package/dist/src/runtime/parsers.js.map +0 -1
- package/dist/src/runtime/pricing.d.ts.map +0 -1
- package/dist/src/runtime/pricing.js.map +0 -1
- package/dist/src/runtime/provider-errors.d.ts.map +0 -1
- package/dist/src/runtime/provider-errors.js.map +0 -1
- package/dist/src/runtime/reaction-step.d.ts.map +0 -1
- package/dist/src/runtime/reaction-step.js.map +0 -1
- package/dist/src/runtime/research/knowledge-base.d.ts.map +0 -1
- package/dist/src/runtime/research/knowledge-base.js.map +0 -1
- package/dist/src/runtime/research/research-memory.d.ts.map +0 -1
- package/dist/src/runtime/research/research-memory.js.map +0 -1
- package/dist/src/runtime/research/research.d.ts.map +0 -1
- package/dist/src/runtime/research/research.js.map +0 -1
- package/dist/src/runtime/research/scenario-research.d.ts.map +0 -1
- package/dist/src/runtime/research/scenario-research.js.map +0 -1
- package/dist/src/runtime/research/scenarios.d.ts.map +0 -1
- package/dist/src/runtime/research/scenarios.js.map +0 -1
- package/dist/src/runtime/runtime-helpers.d.ts.map +0 -1
- package/dist/src/runtime/runtime-helpers.js.map +0 -1
- package/dist/src/runtime/schemas/commander.d.ts.map +0 -1
- package/dist/src/runtime/schemas/commander.js.map +0 -1
- package/dist/src/runtime/schemas/department.d.ts.map +0 -1
- package/dist/src/runtime/schemas/department.js.map +0 -1
- package/dist/src/runtime/schemas/director.d.ts.map +0 -1
- package/dist/src/runtime/schemas/director.js.map +0 -1
- package/dist/src/runtime/schemas/index.d.ts.map +0 -1
- package/dist/src/runtime/schemas/index.js.map +0 -1
- package/dist/src/runtime/schemas/reactions.d.ts.map +0 -1
- package/dist/src/runtime/schemas/reactions.js.map +0 -1
- package/dist/src/runtime/schemas/verdict.d.ts.map +0 -1
- package/dist/src/runtime/schemas/verdict.js.map +0 -1
- package/dist/src/runtime/tool-ledger.d.ts.map +0 -1
- package/dist/src/runtime/tool-ledger.js.map +0 -1
- /package/dist/{src/cli → cli}/sim-config.d.ts +0 -0
- /package/dist/{src/cli → cli}/sim-config.js +0 -0
- /package/dist/{src/cli → cli}/types.d.ts +0 -0
- /package/dist/{src/cli → cli}/types.js +0 -0
- /package/dist/{src/engine → engine}/_template/index.d.ts +0 -0
- /package/dist/{src/engine → engine}/_template/index.js +0 -0
- /package/dist/{src/engine → engine}/compiler/cache.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/cache.js +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-director.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-director.js +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-fingerprint.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-fingerprint.js +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-milestones.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-milestones.js +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-politics.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-politics.js +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-progression.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-progression.js +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-prompts.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-prompts.js +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-reactions.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/generate-reactions.js +0 -0
- /package/dist/{src/engine → engine}/compiler/index.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/index.js +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedCode.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedCode.js +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedJson.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedJson.js +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedObject.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedObject.js +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedProse.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/llm-invocations/generateValidatedProse.js +0 -0
- /package/dist/{src/engine → engine}/compiler/schemas/index.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/schemas/index.js +0 -0
- /package/dist/{src/engine → engine}/compiler/schemas/milestones.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/schemas/milestones.js +0 -0
- /package/dist/{src/engine → engine}/compiler/seed-ingestion.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/seed-ingestion.js +0 -0
- /package/dist/{src/engine → engine}/compiler/telemetry.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/telemetry.js +0 -0
- /package/dist/{src/engine → engine}/compiler/types.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/types.js +0 -0
- /package/dist/{src/engine → engine}/compiler/validate.d.ts +0 -0
- /package/dist/{src/engine → engine}/compiler/validate.js +0 -0
- /package/dist/{src/engine → engine}/core/agent-generator.d.ts +0 -0
- /package/dist/{src/engine → engine}/core/agent-generator.js +0 -0
- /package/dist/{src/engine → engine}/core/kernel.d.ts +0 -0
- /package/dist/{src/engine → engine}/core/kernel.js +0 -0
- /package/dist/{src/engine → engine}/core/progression.d.ts +0 -0
- /package/dist/{src/engine → engine}/core/progression.js +0 -0
- /package/dist/{src/engine → engine}/core/rng.d.ts +0 -0
- /package/dist/{src/engine → engine}/core/rng.js +0 -0
- /package/dist/{src/engine → engine}/core/state.d.ts +0 -0
- /package/dist/{src/engine → engine}/core/state.js +0 -0
- /package/dist/{src/engine → engine}/effect-registry.d.ts +0 -0
- /package/dist/{src/engine → engine}/effect-registry.js +0 -0
- /package/dist/{src/engine → engine}/event-taxonomy.d.ts +0 -0
- /package/dist/{src/engine → engine}/event-taxonomy.js +0 -0
- /package/dist/{src/engine → engine}/lunar/effects.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/effects.js +0 -0
- /package/dist/{src/engine → engine}/lunar/events.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/events.js +0 -0
- /package/dist/{src/engine → engine}/lunar/fingerprint.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/fingerprint.js +0 -0
- /package/dist/{src/engine → engine}/lunar/hooks.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/hooks.js +0 -0
- /package/dist/{src/engine → engine}/lunar/index.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/index.js +0 -0
- /package/dist/{src/engine → engine}/lunar/metrics.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/metrics.js +0 -0
- /package/dist/{src/engine → engine}/lunar/milestones.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/milestones.js +0 -0
- /package/dist/{src/engine → engine}/lunar/names.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/names.js +0 -0
- /package/dist/{src/engine → engine}/lunar/politics.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/politics.js +0 -0
- /package/dist/{src/engine → engine}/lunar/presets.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/presets.js +0 -0
- /package/dist/{src/engine → engine}/lunar/progression-hooks.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/progression-hooks.js +0 -0
- /package/dist/{src/engine → engine}/lunar/prompts.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/prompts.js +0 -0
- /package/dist/{src/engine → engine}/lunar/reactions.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/reactions.js +0 -0
- /package/dist/{src/engine → engine}/lunar/research-bundle.d.ts +0 -0
- /package/dist/{src/engine → engine}/lunar/research-bundle.js +0 -0
- /package/dist/{src/engine → engine}/lunar/scenario.json +0 -0
- /package/dist/{src/engine → engine}/mars/effects.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/effects.js +0 -0
- /package/dist/{src/engine → engine}/mars/events.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/events.js +0 -0
- /package/dist/{src/engine → engine}/mars/fingerprint.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/fingerprint.js +0 -0
- /package/dist/{src/engine → engine}/mars/hooks.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/hooks.js +0 -0
- /package/dist/{src/engine → engine}/mars/index.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/index.js +0 -0
- /package/dist/{src/engine → engine}/mars/metrics.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/metrics.js +0 -0
- /package/dist/{src/engine → engine}/mars/milestones.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/milestones.js +0 -0
- /package/dist/{src/engine → engine}/mars/names.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/names.js +0 -0
- /package/dist/{src/engine → engine}/mars/politics.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/politics.js +0 -0
- /package/dist/{src/engine → engine}/mars/presets.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/presets.js +0 -0
- /package/dist/{src/engine → engine}/mars/progression-hooks.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/progression-hooks.js +0 -0
- /package/dist/{src/engine → engine}/mars/prompts.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/prompts.js +0 -0
- /package/dist/{src/engine → engine}/mars/reactions.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/reactions.js +0 -0
- /package/dist/{src/engine → engine}/mars/research-bundle.d.ts +0 -0
- /package/dist/{src/engine → engine}/mars/research-bundle.js +0 -0
- /package/dist/{src/engine → engine}/mars/scenario.json +0 -0
- /package/dist/{src/engine → engine}/metric-registry.d.ts +0 -0
- /package/dist/{src/engine → engine}/metric-registry.js +0 -0
- /package/dist/{src/engine → engine}/provider-resolver.d.ts +0 -0
- /package/dist/{src/engine → engine}/types.d.ts +0 -0
- /package/dist/{src/engine → engine}/types.js +0 -0
- /package/dist/{src/runtime → runtime}/agent-memory.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/agent-memory.js +0 -0
- /package/dist/{src/runtime → runtime}/agent-reactions.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/agent-reactions.js +0 -0
- /package/dist/{src/runtime → runtime}/batch.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/batch.js +0 -0
- /package/dist/{src/runtime → runtime}/chat-agents.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/chat-agents.js +0 -0
- /package/dist/{src/runtime → runtime}/citations-catalog.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/citations-catalog.js +0 -0
- /package/dist/{src/runtime → runtime}/commander-setup.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/commander-setup.js +0 -0
- /package/dist/{src/runtime → runtime}/contracts.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/contracts.js +0 -0
- /package/dist/{src/runtime → runtime}/cost-tracker.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/cost-tracker.js +0 -0
- /package/dist/{src/runtime → runtime}/departments.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/departments.js +0 -0
- /package/dist/{src/runtime → runtime}/director.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/director.js +0 -0
- /package/dist/{src/runtime → runtime}/economics-profile.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/economics-profile.js +0 -0
- /package/dist/{src/runtime → runtime}/emergent-setup.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/emergent-setup.js +0 -0
- /package/dist/{src/runtime → runtime}/generic-fingerprint.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/generic-fingerprint.js +0 -0
- /package/dist/{src/runtime → runtime}/hexaco-cues/trajectory.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/hexaco-cues/trajectory.js +0 -0
- /package/dist/{src/runtime → runtime}/hexaco-cues/translation.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/hexaco-cues/translation.js +0 -0
- /package/dist/{src/runtime → runtime}/index.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/index.js +0 -0
- /package/dist/{src/runtime → runtime}/llm-invocations/generateValidatedObject.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/llm-invocations/generateValidatedObject.js +0 -0
- /package/dist/{src/runtime → runtime}/llm-invocations/sendAndValidate.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/llm-invocations/sendAndValidate.js +0 -0
- /package/dist/{src/runtime → runtime}/orchestrator.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/orchestrator.js +0 -0
- /package/dist/{src/runtime → runtime}/output-writer.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/output-writer.js +0 -0
- /package/dist/{src/runtime → runtime}/parsers.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/parsers.js +0 -0
- /package/dist/{src/runtime → runtime}/pricing.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/pricing.js +0 -0
- /package/dist/{src/runtime → runtime}/provider-errors.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/provider-errors.js +0 -0
- /package/dist/{src/runtime → runtime}/reaction-step.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/reaction-step.js +0 -0
- /package/dist/{src/runtime → runtime}/research/knowledge-base.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/research/knowledge-base.js +0 -0
- /package/dist/{src/runtime → runtime}/research/research-memory.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/research/research-memory.js +0 -0
- /package/dist/{src/runtime → runtime}/research/research.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/research/research.js +0 -0
- /package/dist/{src/runtime → runtime}/research/scenario-research.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/research/scenario-research.js +0 -0
- /package/dist/{src/runtime → runtime}/research/scenarios.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/research/scenarios.js +0 -0
- /package/dist/{src/runtime → runtime}/runtime-helpers.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/runtime-helpers.js +0 -0
- /package/dist/{src/runtime → runtime}/schemas/commander.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/schemas/commander.js +0 -0
- /package/dist/{src/runtime → runtime}/schemas/department.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/schemas/department.js +0 -0
- /package/dist/{src/runtime → runtime}/schemas/director.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/schemas/director.js +0 -0
- /package/dist/{src/runtime → runtime}/schemas/index.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/schemas/index.js +0 -0
- /package/dist/{src/runtime → runtime}/schemas/reactions.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/schemas/reactions.js +0 -0
- /package/dist/{src/runtime → runtime}/schemas/verdict.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/schemas/verdict.js +0 -0
- /package/dist/{src/runtime → runtime}/tool-ledger.d.ts +0 -0
- /package/dist/{src/runtime → runtime}/tool-ledger.js +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
function isRecord(value) {
|
|
4
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
5
|
+
}
|
|
6
|
+
function hasString(value, key) {
|
|
7
|
+
return typeof value[key] === 'string' && value[key].length > 0;
|
|
8
|
+
}
|
|
9
|
+
function hasNumber(value, key) {
|
|
10
|
+
return typeof value[key] === 'number' && Number.isFinite(value[key]);
|
|
11
|
+
}
|
|
12
|
+
export function isRunnableScenarioPackage(value) {
|
|
13
|
+
if (!isRecord(value))
|
|
14
|
+
return false;
|
|
15
|
+
if (!hasString(value, 'id') || !hasString(value, 'version'))
|
|
16
|
+
return false;
|
|
17
|
+
if (value.engineArchetype !== 'closed_turn_based_settlement')
|
|
18
|
+
return false;
|
|
19
|
+
const labels = value.labels;
|
|
20
|
+
const theme = value.theme;
|
|
21
|
+
const setup = value.setup;
|
|
22
|
+
const world = value.world;
|
|
23
|
+
const ui = value.ui;
|
|
24
|
+
const policies = value.policies;
|
|
25
|
+
const hooks = value.hooks;
|
|
26
|
+
if (!isRecord(labels))
|
|
27
|
+
return false;
|
|
28
|
+
if (!hasString(labels, 'name') || !hasString(labels, 'shortName') || !hasString(labels, 'populationNoun') || !hasString(labels, 'settlementNoun') || !hasString(labels, 'currency'))
|
|
29
|
+
return false;
|
|
30
|
+
if (!isRecord(theme))
|
|
31
|
+
return false;
|
|
32
|
+
if (!hasString(theme, 'primaryColor') || !hasString(theme, 'accentColor') || !isRecord(theme.cssVariables))
|
|
33
|
+
return false;
|
|
34
|
+
if (!isRecord(setup))
|
|
35
|
+
return false;
|
|
36
|
+
if (!hasNumber(setup, 'defaultTurns') || !hasNumber(setup, 'defaultSeed') || !hasNumber(setup, 'defaultStartYear') || !hasNumber(setup, 'defaultPopulation') || !Array.isArray(setup.configurableSections))
|
|
37
|
+
return false;
|
|
38
|
+
if (!isRecord(world) || !isRecord(world.metrics) || !isRecord(world.capacities) || !isRecord(world.statuses) || !isRecord(world.politics) || !isRecord(world.environment))
|
|
39
|
+
return false;
|
|
40
|
+
if (!Array.isArray(value.departments) || !Array.isArray(value.metrics) || !Array.isArray(value.events) || !Array.isArray(value.effects) || !Array.isArray(value.presets))
|
|
41
|
+
return false;
|
|
42
|
+
if (!isRecord(ui))
|
|
43
|
+
return false;
|
|
44
|
+
if (!Array.isArray(ui.headerMetrics) || !Array.isArray(ui.tooltipFields) || !Array.isArray(ui.reportSections) || !isRecord(ui.departmentIcons) || !isRecord(ui.eventRenderers) || !Array.isArray(ui.setupSections))
|
|
45
|
+
return false;
|
|
46
|
+
if (!isRecord(policies))
|
|
47
|
+
return false;
|
|
48
|
+
if (!isRecord(policies.toolForging) || typeof policies.toolForging.enabled !== 'boolean')
|
|
49
|
+
return false;
|
|
50
|
+
if (!isRecord(policies.liveSearch) || typeof policies.liveSearch.enabled !== 'boolean' || typeof policies.liveSearch.mode !== 'string')
|
|
51
|
+
return false;
|
|
52
|
+
if (!isRecord(policies.bulletin) || typeof policies.bulletin.enabled !== 'boolean')
|
|
53
|
+
return false;
|
|
54
|
+
if (!isRecord(policies.characterChat) || typeof policies.characterChat.enabled !== 'boolean')
|
|
55
|
+
return false;
|
|
56
|
+
if (!isRecord(policies.sandbox) || !hasNumber(policies.sandbox, 'timeoutMs') || !hasNumber(policies.sandbox, 'memoryMB'))
|
|
57
|
+
return false;
|
|
58
|
+
if (!isRecord(value.knowledge) || !isRecord(value.knowledge.topics) || !isRecord(value.knowledge.categoryMapping))
|
|
59
|
+
return false;
|
|
60
|
+
if (!isRecord(hooks))
|
|
61
|
+
return false;
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
export function loadDiskCustomScenarios(scenarioDir) {
|
|
65
|
+
const catalog = new Map();
|
|
66
|
+
if (!existsSync(scenarioDir))
|
|
67
|
+
return catalog;
|
|
68
|
+
for (const entry of readdirSync(scenarioDir, { withFileTypes: true })) {
|
|
69
|
+
if (!entry.isFile() || !entry.name.endsWith('.json'))
|
|
70
|
+
continue;
|
|
71
|
+
const filePath = resolve(scenarioDir, entry.name);
|
|
72
|
+
try {
|
|
73
|
+
const parsed = JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
74
|
+
if (!isRunnableScenarioPackage(parsed))
|
|
75
|
+
continue;
|
|
76
|
+
catalog.set(parsed.id, { scenario: parsed, source: 'disk' });
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Ignore unreadable or invalid custom scenario files at boot.
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return catalog;
|
|
83
|
+
}
|
|
84
|
+
export function describeCustomScenarioSource(source) {
|
|
85
|
+
if (source === 'builtin')
|
|
86
|
+
return 'Built-in scenario';
|
|
87
|
+
if (source === 'disk')
|
|
88
|
+
return 'Custom scenario (disk)';
|
|
89
|
+
if (source === 'compiled')
|
|
90
|
+
return 'Custom compiled scenario';
|
|
91
|
+
return 'Custom scenario (memory)';
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=custom-scenarios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-scenarios.js","sourceRoot":"","sources":["../../src/cli/custom-scenarios.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LeaderConfig } from './types.js';
|
|
2
|
+
export interface ResolvedLeaders {
|
|
3
|
+
leaders: LeaderConfig[];
|
|
4
|
+
/** Absolute path of the file the leaders were read from. Surfaces
|
|
5
|
+
* in CLI output so users know which file is actually in use. */
|
|
6
|
+
sourcePath: string;
|
|
7
|
+
/** Marker for whether the source was the shipped example (we
|
|
8
|
+
* want to print a hint nudging users to create their own). */
|
|
9
|
+
isExample: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Walks the candidate paths and loads the first `leaders.json` that
|
|
13
|
+
* exists. Throws only when nothing (not even the bundled example)
|
|
14
|
+
* is available — which would indicate a broken install.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveLeaders(options?: {
|
|
17
|
+
explicitPath?: string;
|
|
18
|
+
}): ResolvedLeaders;
|
|
19
|
+
/**
|
|
20
|
+
* Pulls `--leaders <path>` out of argv WITHOUT mutating the array.
|
|
21
|
+
* Returns undefined when the flag isn't present. Kept separate from
|
|
22
|
+
* the main CLI parser so run.ts / serve.ts can resolve leaders the
|
|
23
|
+
* same way without duplicating flag logic.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseLeadersFlag(args: readonly string[]): string | undefined;
|
|
26
|
+
//# sourceMappingURL=leaders-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaders-resolver.d.ts","sourceRoot":"","sources":["../../src/cli/leaders-resolver.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB;qEACiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB;mEAC+D;IAC/D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAwBvF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAM5E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the active `leaders.json` for a paracosm CLI invocation.
|
|
3
|
+
*
|
|
4
|
+
* Search order (first match wins):
|
|
5
|
+
* 1. --leaders <path> CLI flag (explicit path)
|
|
6
|
+
* 2. $CWD/leaders.json (user's project root)
|
|
7
|
+
* 3. $CWD/config/leaders.json (user's config dir)
|
|
8
|
+
* 4. <package>/config/leaders.json (paracosm-shipped fallback)
|
|
9
|
+
* 5. <package>/config/leaders.example.json (last-resort default)
|
|
10
|
+
*
|
|
11
|
+
* Covers three consumer shapes:
|
|
12
|
+
* - Repo clone: users edit config/leaders.json at the repo root.
|
|
13
|
+
* - npm install: users drop leaders.json (or config/leaders.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/leaders-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 `leaders.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 resolveLeaders(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, 'leaders.json'), isExample: false });
|
|
38
|
+
candidates.push({ path: resolve(cwd, 'config', 'leaders.json'), isExample: false });
|
|
39
|
+
candidates.push({ path: resolve(packageRoot, 'config', 'leaders.json'), isExample: false });
|
|
40
|
+
candidates.push({ path: resolve(packageRoot, 'config', 'leaders.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 leaders = Array.isArray(raw.leaders) ? raw.leaders : [];
|
|
46
|
+
return { leaders, sourcePath: path, isExample };
|
|
47
|
+
}
|
|
48
|
+
throw new Error(`paracosm: no leaders.json found. Create one at ${resolve(cwd, 'config', 'leaders.json')} ` +
|
|
49
|
+
`or pass --leaders <path>. A starter template lives at ${resolve(packageRoot, 'config', 'leaders.example.json')}.`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pulls `--leaders <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 leaders the
|
|
55
|
+
* same way without duplicating flag logic.
|
|
56
|
+
*/
|
|
57
|
+
export function parseLeadersFlag(args) {
|
|
58
|
+
const idx = args.indexOf('--leaders');
|
|
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=leaders-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaders-resolver.js","sourceRoot":"","sources":["../../src/cli/leaders-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,cAAc,CAAC,UAAqC,EAAE;IACpE,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,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5F,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnG,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,CAAiC,CAAC;QACpF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,KAAK,CACb,kDAAkD,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,CAAC,GAAG;QAC3F,yDAAyD,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,sBAAsB,CAAC,GAAG,CACnH,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAuB;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type NormalizedSimulationConfig } from './sim-config.js';
|
|
2
|
+
import type { ScenarioPackage } from '../engine/types.js';
|
|
3
|
+
export type BroadcastFn = (event: string, data: unknown) => void;
|
|
4
|
+
export declare function runPairSimulations(simConfig: NormalizedSimulationConfig, broadcast: BroadcastFn,
|
|
5
|
+
/**
|
|
6
|
+
* Optional cancellation signal. When the server's disconnect watchdog
|
|
7
|
+
* trips (all SSE clients gone + grace period expired), it aborts this
|
|
8
|
+
* signal. Both leaders' runSimulation calls check it at turn
|
|
9
|
+
* boundaries and short-circuit cleanly, emitting a `sim_aborted`
|
|
10
|
+
* event and returning partial results. The event buffer is preserved
|
|
11
|
+
* so a returning user sees everything up to the cancel point.
|
|
12
|
+
*/
|
|
13
|
+
signal?: AbortSignal,
|
|
14
|
+
/**
|
|
15
|
+
* Scenario to run. Defaults to Mars Genesis when omitted so CLI
|
|
16
|
+
* callers that don't thread a scenario still work. The server path
|
|
17
|
+
* passes the currently-active scenario (set by /compile or
|
|
18
|
+
* /scenario/switch) so custom-compiled scenarios (e.g. "Brain Sim")
|
|
19
|
+
* actually get their own hooks + labels run instead of silently
|
|
20
|
+
* falling back to Mars while the page title shows the custom name.
|
|
21
|
+
*/
|
|
22
|
+
scenario?: ScenarioPackage): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=pair-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pair-runner.d.ts","sourceRoot":"","sources":["../../src/cli/pair-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAyBjE,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,0BAA0B,EACrC,SAAS,EAAE,WAAW;AACtB;;;;;;;GAOG;AACH,MAAM,CAAC,EAAE,WAAW;AACpB;;;;;;;GAOG;AACH,QAAQ,GAAE,eAA8B,GACvC,OAAO,CAAC,IAAI,CAAC,CA2Lf"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { DEFAULT_KEY_PERSONNEL } from './sim-config.js';
|
|
2
|
+
import { marsScenario } from '../engine/mars/index.js';
|
|
3
|
+
import { generateValidatedObject } from '../runtime/llm-invocations/generateValidatedObject.js';
|
|
4
|
+
import { VerdictSchema } from '../runtime/schemas/verdict.js';
|
|
5
|
+
function resolveVerdictModel(provider, economics) {
|
|
6
|
+
switch (economics.verdict.mode) {
|
|
7
|
+
case 'skip':
|
|
8
|
+
return null;
|
|
9
|
+
case 'cheap':
|
|
10
|
+
return provider === 'anthropic'
|
|
11
|
+
? 'claude-haiku-4-5-20251001'
|
|
12
|
+
: 'gpt-5.4-mini';
|
|
13
|
+
case 'flagship':
|
|
14
|
+
return provider === 'anthropic'
|
|
15
|
+
? 'claude-opus-4-7'
|
|
16
|
+
: 'gpt-5.4-pro';
|
|
17
|
+
case 'balanced':
|
|
18
|
+
default:
|
|
19
|
+
return provider === 'anthropic'
|
|
20
|
+
? 'claude-sonnet-4-6'
|
|
21
|
+
: 'gpt-5.4';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function runPairSimulations(simConfig, broadcast,
|
|
25
|
+
/**
|
|
26
|
+
* Optional cancellation signal. When the server's disconnect watchdog
|
|
27
|
+
* trips (all SSE clients gone + grace period expired), it aborts this
|
|
28
|
+
* signal. Both leaders' runSimulation calls check it at turn
|
|
29
|
+
* boundaries and short-circuit cleanly, emitting a `sim_aborted`
|
|
30
|
+
* event and returning partial results. The event buffer is preserved
|
|
31
|
+
* so a returning user sees everything up to the cancel point.
|
|
32
|
+
*/
|
|
33
|
+
signal,
|
|
34
|
+
/**
|
|
35
|
+
* Scenario to run. Defaults to Mars Genesis when omitted so CLI
|
|
36
|
+
* callers that don't thread a scenario still work. The server path
|
|
37
|
+
* passes the currently-active scenario (set by /compile or
|
|
38
|
+
* /scenario/switch) so custom-compiled scenarios (e.g. "Brain Sim")
|
|
39
|
+
* actually get their own hooks + labels run instead of silently
|
|
40
|
+
* falling back to Mars while the page title shows the custom name.
|
|
41
|
+
*/
|
|
42
|
+
scenario = marsScenario) {
|
|
43
|
+
const { leaders, turns, seed, startYear, liveSearch, customEvents } = simConfig;
|
|
44
|
+
broadcast('status', { phase: 'starting', maxTurns: turns, customEvents });
|
|
45
|
+
const { runSimulation } = await import('../runtime/orchestrator.js');
|
|
46
|
+
const onEvent = (event) => broadcast('sim', event);
|
|
47
|
+
broadcast('status', {
|
|
48
|
+
phase: 'parallel',
|
|
49
|
+
leaders: leaders.map(leader => ({
|
|
50
|
+
name: leader.name,
|
|
51
|
+
archetype: leader.archetype,
|
|
52
|
+
colony: leader.colony,
|
|
53
|
+
hexaco: leader.hexaco,
|
|
54
|
+
})),
|
|
55
|
+
});
|
|
56
|
+
console.log(` Running: ${leaders[0].name} vs ${leaders[1].name} | ${turns} turns | seed ${seed}\n`);
|
|
57
|
+
const results = await Promise.allSettled(leaders.map((leader, index) => {
|
|
58
|
+
const tag = leader.archetype.toLowerCase().replace(/^the\s+/, '').replace(/\s+/g, '-') || `leader-${index}`;
|
|
59
|
+
return runSimulation(leader, simConfig.keyPersonnel ?? DEFAULT_KEY_PERSONNEL, {
|
|
60
|
+
maxTurns: turns,
|
|
61
|
+
seed,
|
|
62
|
+
startYear,
|
|
63
|
+
yearsPerTurn: simConfig.yearsPerTurn,
|
|
64
|
+
liveSearch,
|
|
65
|
+
activeDepartments: simConfig.activeDepartments,
|
|
66
|
+
onEvent,
|
|
67
|
+
customEvents,
|
|
68
|
+
provider: simConfig.provider,
|
|
69
|
+
models: simConfig.models,
|
|
70
|
+
economics: simConfig.economics,
|
|
71
|
+
initialPopulation: simConfig.initialPopulation,
|
|
72
|
+
startingResources: simConfig.startingResources,
|
|
73
|
+
startingPolitics: simConfig.startingPolitics,
|
|
74
|
+
execution: simConfig.execution,
|
|
75
|
+
scenario,
|
|
76
|
+
signal,
|
|
77
|
+
}).then(result => {
|
|
78
|
+
broadcast('result', {
|
|
79
|
+
leader: tag,
|
|
80
|
+
summary: {
|
|
81
|
+
population: result.finalState?.colony?.population,
|
|
82
|
+
morale: result.finalState?.colony?.morale,
|
|
83
|
+
toolsForged: result.totalToolsForged,
|
|
84
|
+
citations: result.totalCitations,
|
|
85
|
+
},
|
|
86
|
+
fingerprint: result.fingerprint || null,
|
|
87
|
+
});
|
|
88
|
+
return { tag, leader, result };
|
|
89
|
+
}, error => {
|
|
90
|
+
broadcast('sim_error', { leader: tag, error: String(error) });
|
|
91
|
+
throw error;
|
|
92
|
+
});
|
|
93
|
+
}));
|
|
94
|
+
// Generate final verdict comparing both leaders
|
|
95
|
+
const settled = results.filter(r => r.status === 'fulfilled').map(r => r.value);
|
|
96
|
+
// Skip verdict generation when EITHER leader was cancelled externally
|
|
97
|
+
// (user navigated away → server pulled the plug) or hit a terminal
|
|
98
|
+
// provider error. Running the verdict LLM call on partial data would
|
|
99
|
+
// burn an extra flagship call for a comparison that doesn't mean
|
|
100
|
+
// anything on incomplete runs. The dashboard shows the "Unfinished"
|
|
101
|
+
// badge in place of the verdict card.
|
|
102
|
+
const anyAborted = settled.some(v => v.result?.aborted === true || v.result?.providerError);
|
|
103
|
+
if (anyAborted) {
|
|
104
|
+
broadcast('complete', { timestamp: new Date().toISOString(), aborted: true });
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (settled.length === 2) {
|
|
108
|
+
try {
|
|
109
|
+
const [a, b] = settled;
|
|
110
|
+
const colA = a.result.finalState?.colony;
|
|
111
|
+
const colB = b.result.finalState?.colony;
|
|
112
|
+
const verdictModel = resolveVerdictModel(simConfig.provider || 'openai', simConfig.economics);
|
|
113
|
+
if (!verdictModel) {
|
|
114
|
+
broadcast('complete', {
|
|
115
|
+
timestamp: new Date().toISOString(),
|
|
116
|
+
verdictSkipped: true,
|
|
117
|
+
economicsProfile: simConfig.economics.id,
|
|
118
|
+
});
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// Build a richer per-leader summary including innovation telemetry
|
|
122
|
+
// (forged toolbox details, fingerprint classification) so the LLM
|
|
123
|
+
// verdict actually reasons about emergent tool use, not just final
|
|
124
|
+
// colony numbers.
|
|
125
|
+
const formatLeader = (label, v, col) => {
|
|
126
|
+
const fp = v.result.fingerprint || {};
|
|
127
|
+
const toolbox = v.result.forgedToolbox || [];
|
|
128
|
+
const topTools = toolbox.slice(0, 5).map((t) => `${t.name}(${t.firstForgedDepartment}, reused ${t.reuseCount}x)`).join('; ');
|
|
129
|
+
// Cause-of-death breakdown. Each death in the event log carries
|
|
130
|
+
// an attributed cause (natural, radiation cancer, starvation,
|
|
131
|
+
// despair, fatal fracture, accident). Roll up for the verdict
|
|
132
|
+
// prompt so the LLM can reason about HOW colonists died, not
|
|
133
|
+
// just how many — a Mars colony losing 5 to radiation reads
|
|
134
|
+
// very differently from losing 5 to accidents.
|
|
135
|
+
const deathEvents = (v.result.finalState?.eventLog ?? []).filter((e) => e.type === 'death');
|
|
136
|
+
const causeCounts = {};
|
|
137
|
+
for (const d of deathEvents) {
|
|
138
|
+
const raw = d.cause ?? 'unknown';
|
|
139
|
+
const key = raw.startsWith('accident:') ? 'accident' : raw;
|
|
140
|
+
causeCounts[key] = (causeCounts[key] ?? 0) + 1;
|
|
141
|
+
}
|
|
142
|
+
const causeSummary = Object.keys(causeCounts).length > 0
|
|
143
|
+
? Object.entries(causeCounts).sort((a, b) => b[1] - a[1]).map(([k, n]) => `${n} ${k}`).join(', ')
|
|
144
|
+
: 'no deaths';
|
|
145
|
+
return [
|
|
146
|
+
`${label}: ${v.leader.name} "${v.leader.archetype}" (${v.leader.colony})`,
|
|
147
|
+
` HEXACO: O${v.leader.hexaco.openness.toFixed(2)} C${v.leader.hexaco.conscientiousness.toFixed(2)} E${v.leader.hexaco.extraversion.toFixed(2)} A${v.leader.hexaco.agreeableness.toFixed(2)} Em${v.leader.hexaco.emotionality.toFixed(2)} HH${v.leader.hexaco.honestyHumility.toFixed(2)}`,
|
|
148
|
+
` Final: Pop ${col?.population ?? '?'}, Morale ${Math.round((col?.morale ?? 0) * 100)}%, Food ${col?.foodMonthsReserve?.toFixed(1) ?? '?'}mo, Power ${col?.powerKw?.toFixed(0) ?? '?'}kW, Modules ${col?.infrastructureModules?.toFixed(1) ?? '?'}, Science ${col?.scienceOutput ?? '?'}`,
|
|
149
|
+
` Mortality: ${deathEvents.length} total (${causeSummary})`,
|
|
150
|
+
` Innovation: ${toolbox.length} unique tools forged (${fp.innovation || 'n/a'}), citations ${v.result.totalCitations}`,
|
|
151
|
+
topTools ? ` Top tools: ${topTools}` : ' No tools forged',
|
|
152
|
+
` Fingerprint: ${fp.summary || 'n/a'}`,
|
|
153
|
+
` Cost: $${v.result.cost?.totalCostUSD?.toFixed(4) ?? '?'} over ${v.result.cost?.llmCalls ?? '?'} LLM calls`,
|
|
154
|
+
].join('\n');
|
|
155
|
+
};
|
|
156
|
+
// Verdict runs once per completed sim and is the single most
|
|
157
|
+
// user-facing synthesis call in the pipeline: it reads both
|
|
158
|
+
// final states, the per-leader cause-of-death breakdown, the
|
|
159
|
+
// forged toolbox, and writes the headline + summary that the
|
|
160
|
+
// user sees first when the run finishes. Cheap-tier output on
|
|
161
|
+
// this call was noticeably flatter than flagship output, so
|
|
162
|
+
// pay the ~$0.02-0.05 per run for the better read.
|
|
163
|
+
try {
|
|
164
|
+
const { object: verdict, fromFallback } = await generateValidatedObject({
|
|
165
|
+
provider: simConfig.provider || 'openai',
|
|
166
|
+
model: verdictModel,
|
|
167
|
+
schema: VerdictSchema,
|
|
168
|
+
schemaName: 'Verdict',
|
|
169
|
+
prompt: `You are judging a colony simulation. Two AI commanders with opposing HEXACO personality profiles led identical colonies through ${turns} turns from the same starting conditions and deterministic seed. Your job is to write a verdict that explains WHY the runs diverged the way they did, not just WHO won.
|
|
170
|
+
|
|
171
|
+
${formatLeader('LEADER A', a, colA)}
|
|
172
|
+
|
|
173
|
+
${formatLeader('LEADER B', b, colB)}
|
|
174
|
+
|
|
175
|
+
TRADEOFFS TO WEIGH
|
|
176
|
+
Tool forging is a cost / capability tradeoff: every forged tool spent a judge LLM call and ate analyst attention; failed forges hurt morale and produced no reusable capability; successful tools let later decisions reason about concrete numbers. A leader who built few tools and reused them many times has a disciplined, cost-efficient signature. A leader who forged many novel tools has an exploratory signature with broader capability surface. Both are valid strategies and your scoring should reflect that trade, not punish either extreme.
|
|
177
|
+
|
|
178
|
+
Mortality is a cause-specific signal, not a number. The "Mortality" line above names HOW each colonist died. A leader who lost 5 to starvation made different resource-allocation decisions than a leader who lost 5 to radiation cancer; a leader with despair deaths presided over a colony in psychological freefall. Reference the specific causes when they shape the story.
|
|
179
|
+
|
|
180
|
+
REASONING — populate the "reasoning" field of your JSON response with a numbered list covering:
|
|
181
|
+
(1) Population trajectory — how did each colony's population evolve, and which tradeoffs produced that shape?
|
|
182
|
+
(2) Morale + psychological state — which leader's colony held together emotionally, and what does that say about HEXACO + decision style?
|
|
183
|
+
(3) Resource efficiency — food, power, infrastructure — which side ran leaner, which hit crises?
|
|
184
|
+
(4) Innovation signature — tools forged vs reused, breadth vs depth. What does each leader's toolbox say about their cognition?
|
|
185
|
+
(5) Mortality story — which causes dominated each side, and what does THAT say about the leader's priorities?
|
|
186
|
+
(6) The single most impactful divergence — resource decision, crisis response, tool strategy, or emergent behavior. Name it precisely.
|
|
187
|
+
(7) Weighing the tradeoffs, who won and why.
|
|
188
|
+
|
|
189
|
+
Then fill out:
|
|
190
|
+
winner: "A" or "B" or "tie"
|
|
191
|
+
winnerName: the winning leader's name, or "Tie" for a tie
|
|
192
|
+
headline: one-line verdict grounded in the key divergence (max 80 chars)
|
|
193
|
+
summary: 2-3 sentences naming the personality + tool-use + mortality pattern that drove the divergence
|
|
194
|
+
keyDivergence: the single most impactful difference between the two runs
|
|
195
|
+
scores: { a: { survival, prosperity, morale, innovation }, b: { survival, prosperity, morale, innovation } } — each 0-10`,
|
|
196
|
+
});
|
|
197
|
+
if (fromFallback) {
|
|
198
|
+
console.log(' Verdict schema fallback; skipping broadcast');
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
broadcast('verdict', {
|
|
202
|
+
...verdict,
|
|
203
|
+
leaderA: { name: a.leader.name, archetype: a.leader.archetype, colony: a.leader.colony },
|
|
204
|
+
leaderB: { name: b.leader.name, archetype: b.leader.archetype, colony: b.leader.colony },
|
|
205
|
+
finalStats: {
|
|
206
|
+
a: { population: colA?.population, morale: colA?.morale, food: colA?.foodMonthsReserve, power: colA?.powerKw, modules: colA?.infrastructureModules, science: colA?.scienceOutput, tools: a.result.totalToolsForged },
|
|
207
|
+
b: { population: colB?.population, morale: colB?.morale, food: colB?.foodMonthsReserve, power: colB?.powerKw, modules: colB?.infrastructureModules, science: colB?.scienceOutput, tools: b.result.totalToolsForged },
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
console.log(`\n VERDICT: ${verdict.headline}`);
|
|
211
|
+
console.log(` Winner: ${verdict.winnerName} (${verdict.winner})`);
|
|
212
|
+
console.log(` ${verdict.summary}\n`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch (verdictErr) {
|
|
216
|
+
console.log(' Verdict generation failed:', verdictErr);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (outerErr) {
|
|
220
|
+
console.log(' Verdict outer failure:', outerErr);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
broadcast('complete', { timestamp: new Date().toISOString() });
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=pair-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pair-runner.js","sourceRoot":"","sources":["../../src/cli/pair-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IP-based rate limiter with optional JSON-file persistence.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from server-app.ts so the quota machinery can be unit-tested
|
|
5
|
+
* without spinning up the whole HTTP server and so createMarsServer reads
|
|
6
|
+
* more like a route file. Behavior is unchanged.
|
|
7
|
+
*
|
|
8
|
+
* Three buckets keyed by IP:
|
|
9
|
+
* - simStore / maxPerDay: /setup (most expensive action, daily)
|
|
10
|
+
* - compileStore / maxCompilePerDay: /compile (~$0.10 per call, daily)
|
|
11
|
+
* - chatStore / maxChatPerHour: /chat (hourly, users legitimately
|
|
12
|
+
* burst but scripts/loops flatten the
|
|
13
|
+
* budget if unlimited)
|
|
14
|
+
*
|
|
15
|
+
* When a persistencePath is supplied, state is loaded on construct and
|
|
16
|
+
* flushed on every mutation via a 500ms-debounced atomic write
|
|
17
|
+
* (tmp + rename). pm2 restarts preserve user quotas. Missing or corrupt
|
|
18
|
+
* files self-heal at next mutation.
|
|
19
|
+
*
|
|
20
|
+
* @module paracosm/cli/rate-limiter
|
|
21
|
+
*/
|
|
22
|
+
import type { IncomingMessage } from 'node:http';
|
|
23
|
+
export interface RateLimitDecision {
|
|
24
|
+
allowed: boolean;
|
|
25
|
+
remaining: number;
|
|
26
|
+
resetAt: number;
|
|
27
|
+
limit: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class IpRateLimiter {
|
|
30
|
+
private simStore;
|
|
31
|
+
private compileStore;
|
|
32
|
+
private chatStore;
|
|
33
|
+
private maxPerDay;
|
|
34
|
+
private maxCompilePerDay;
|
|
35
|
+
private maxChatPerHour;
|
|
36
|
+
private cleanupTimer;
|
|
37
|
+
private persistencePath;
|
|
38
|
+
private persistTimer;
|
|
39
|
+
constructor(maxPerDay?: number, maxCompilePerDay?: number, maxChatPerHour?: number, persistencePath?: string | null);
|
|
40
|
+
/** Load persisted state from disk. Silently tolerates missing/corrupt files. */
|
|
41
|
+
private load;
|
|
42
|
+
/** Debounced flush to disk. Writes atomically via tmp+rename. */
|
|
43
|
+
private persist;
|
|
44
|
+
/** Extract client IP, respecting reverse proxy headers (nginx, Cloudflare, etc.) */
|
|
45
|
+
static getIp(req: IncomingMessage): string;
|
|
46
|
+
private nextReset;
|
|
47
|
+
private bump;
|
|
48
|
+
/** Check the simulation-per-day quota without consuming it. */
|
|
49
|
+
check(ip: string): RateLimitDecision;
|
|
50
|
+
/** Record a simulation start. Prefer `check` + `record` for legacy callers. */
|
|
51
|
+
record(ip: string): void;
|
|
52
|
+
/** Check AND consume a slot for /compile (daily bucket, ~$0.10/call). */
|
|
53
|
+
consumeCompile(ip: string): RateLimitDecision;
|
|
54
|
+
/** Check AND consume a slot for /chat (hourly bucket). */
|
|
55
|
+
consumeChat(ip: string): RateLimitDecision;
|
|
56
|
+
/** Get stats for monitoring endpoints. */
|
|
57
|
+
stats(): {
|
|
58
|
+
totalIps: number;
|
|
59
|
+
sim: Array<{
|
|
60
|
+
ip: string;
|
|
61
|
+
count: number;
|
|
62
|
+
resetAt: string;
|
|
63
|
+
}>;
|
|
64
|
+
compile: Array<{
|
|
65
|
+
ip: string;
|
|
66
|
+
count: number;
|
|
67
|
+
resetAt: string;
|
|
68
|
+
}>;
|
|
69
|
+
chat: Array<{
|
|
70
|
+
ip: string;
|
|
71
|
+
count: number;
|
|
72
|
+
resetAt: string;
|
|
73
|
+
}>;
|
|
74
|
+
};
|
|
75
|
+
private cleanup;
|
|
76
|
+
destroy(): void;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/cli/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAcjD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,YAAY,CAA8C;gBAGhE,SAAS,GAAE,MAAU,EACrB,gBAAgB,GAAE,MAAU,EAC5B,cAAc,GAAE,MAAY,EAC5B,eAAe,GAAE,MAAM,GAAG,IAAW;IAUvC,gFAAgF;IAChF,OAAO,CAAC,IAAI;IAyBZ,iEAAiE;IACjE,OAAO,CAAC,OAAO;IA0Bf,oFAAoF;IACpF,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM;IAa1C,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,IAAI;IAyBZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB;IAIpC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQxB,yEAAyE;IACzE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB;IAI7C,0DAA0D;IAC1D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB;IAI1C,0CAA0C;IAC1C,KAAK,IAAI;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7D;IAWD,OAAO,CAAC,OAAO;IAcf,OAAO,IAAI,IAAI;CAIhB"}
|