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,193 @@
|
|
|
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 { readFileSync, existsSync, writeFileSync, renameSync } from 'node:fs';
|
|
23
|
+
export class IpRateLimiter {
|
|
24
|
+
simStore = new Map();
|
|
25
|
+
compileStore = new Map();
|
|
26
|
+
chatStore = new Map();
|
|
27
|
+
maxPerDay;
|
|
28
|
+
maxCompilePerDay;
|
|
29
|
+
maxChatPerHour;
|
|
30
|
+
cleanupTimer;
|
|
31
|
+
persistencePath = null;
|
|
32
|
+
persistTimer = null;
|
|
33
|
+
constructor(maxPerDay = 3, maxCompilePerDay = 5, maxChatPerHour = 200, persistencePath = null) {
|
|
34
|
+
this.maxPerDay = maxPerDay;
|
|
35
|
+
this.maxCompilePerDay = maxCompilePerDay;
|
|
36
|
+
this.maxChatPerHour = maxChatPerHour;
|
|
37
|
+
this.persistencePath = persistencePath;
|
|
38
|
+
this.cleanupTimer = setInterval(() => this.cleanup(), 60 * 60 * 1000);
|
|
39
|
+
this.load();
|
|
40
|
+
}
|
|
41
|
+
/** Load persisted state from disk. Silently tolerates missing/corrupt files. */
|
|
42
|
+
load() {
|
|
43
|
+
if (!this.persistencePath)
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
if (!existsSync(this.persistencePath))
|
|
47
|
+
return;
|
|
48
|
+
const raw = readFileSync(this.persistencePath, 'utf-8');
|
|
49
|
+
const data = JSON.parse(raw);
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
const hydrate = (store, src) => {
|
|
52
|
+
if (!src)
|
|
53
|
+
return;
|
|
54
|
+
for (const [ip, entry] of Object.entries(src)) {
|
|
55
|
+
if (entry?.resetAt && entry.resetAt > now)
|
|
56
|
+
store.set(ip, entry);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
hydrate(this.simStore, data.sim);
|
|
60
|
+
hydrate(this.compileStore, data.compile);
|
|
61
|
+
hydrate(this.chatStore, data.chat);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Missing file, permission denied, corrupt JSON — start fresh.
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Debounced flush to disk. Writes atomically via tmp+rename. */
|
|
68
|
+
persist() {
|
|
69
|
+
if (!this.persistencePath)
|
|
70
|
+
return;
|
|
71
|
+
if (this.persistTimer)
|
|
72
|
+
return;
|
|
73
|
+
this.persistTimer = setTimeout(() => {
|
|
74
|
+
this.persistTimer = null;
|
|
75
|
+
if (!this.persistencePath)
|
|
76
|
+
return;
|
|
77
|
+
try {
|
|
78
|
+
const dump = (s) => {
|
|
79
|
+
const out = {};
|
|
80
|
+
for (const [ip, e] of s)
|
|
81
|
+
out[ip] = e;
|
|
82
|
+
return out;
|
|
83
|
+
};
|
|
84
|
+
const payload = JSON.stringify({
|
|
85
|
+
sim: dump(this.simStore),
|
|
86
|
+
compile: dump(this.compileStore),
|
|
87
|
+
chat: dump(this.chatStore),
|
|
88
|
+
});
|
|
89
|
+
const tmp = `${this.persistencePath}.tmp`;
|
|
90
|
+
writeFileSync(tmp, payload, 'utf-8');
|
|
91
|
+
renameSync(tmp, this.persistencePath);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Disk full, permission denied — swallow; logs would be noisy.
|
|
95
|
+
}
|
|
96
|
+
}, 500);
|
|
97
|
+
}
|
|
98
|
+
/** Extract client IP, respecting reverse proxy headers (nginx, Cloudflare, etc.) */
|
|
99
|
+
static getIp(req) {
|
|
100
|
+
const xff = req.headers['x-forwarded-for'];
|
|
101
|
+
if (xff) {
|
|
102
|
+
const first = (Array.isArray(xff) ? xff[0] : xff).split(',')[0].trim();
|
|
103
|
+
if (first)
|
|
104
|
+
return first;
|
|
105
|
+
}
|
|
106
|
+
const realIp = req.headers['x-real-ip'];
|
|
107
|
+
if (realIp)
|
|
108
|
+
return Array.isArray(realIp) ? realIp[0] : realIp;
|
|
109
|
+
const cfIp = req.headers['cf-connecting-ip'];
|
|
110
|
+
if (cfIp)
|
|
111
|
+
return Array.isArray(cfIp) ? cfIp[0] : cfIp;
|
|
112
|
+
return req.socket.remoteAddress || 'unknown';
|
|
113
|
+
}
|
|
114
|
+
nextReset(kind) {
|
|
115
|
+
if (kind === 'daily') {
|
|
116
|
+
const tomorrow = new Date();
|
|
117
|
+
tomorrow.setUTCHours(24, 0, 0, 0);
|
|
118
|
+
return tomorrow.getTime();
|
|
119
|
+
}
|
|
120
|
+
const nextHour = new Date();
|
|
121
|
+
nextHour.setUTCMinutes(60, 0, 0);
|
|
122
|
+
return nextHour.getTime();
|
|
123
|
+
}
|
|
124
|
+
bump(store, ip, limit, kind, mutate) {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
let entry = store.get(ip);
|
|
127
|
+
let mutated = false;
|
|
128
|
+
if (!entry || now >= entry.resetAt) {
|
|
129
|
+
entry = { count: 0, resetAt: this.nextReset(kind) };
|
|
130
|
+
store.set(ip, entry);
|
|
131
|
+
mutated = true;
|
|
132
|
+
}
|
|
133
|
+
const allowed = entry.count < limit;
|
|
134
|
+
if (allowed && mutate) {
|
|
135
|
+
entry.count++;
|
|
136
|
+
mutated = true;
|
|
137
|
+
}
|
|
138
|
+
const remaining = Math.max(0, limit - entry.count);
|
|
139
|
+
if (mutated)
|
|
140
|
+
this.persist();
|
|
141
|
+
return { allowed, remaining, resetAt: entry.resetAt, limit };
|
|
142
|
+
}
|
|
143
|
+
/** Check the simulation-per-day quota without consuming it. */
|
|
144
|
+
check(ip) {
|
|
145
|
+
return this.bump(this.simStore, ip, this.maxPerDay, 'daily', false);
|
|
146
|
+
}
|
|
147
|
+
/** Record a simulation start. Prefer `check` + `record` for legacy callers. */
|
|
148
|
+
record(ip) {
|
|
149
|
+
const entry = this.simStore.get(ip);
|
|
150
|
+
if (entry) {
|
|
151
|
+
entry.count++;
|
|
152
|
+
this.persist();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Check AND consume a slot for /compile (daily bucket, ~$0.10/call). */
|
|
156
|
+
consumeCompile(ip) {
|
|
157
|
+
return this.bump(this.compileStore, ip, this.maxCompilePerDay, 'daily', true);
|
|
158
|
+
}
|
|
159
|
+
/** Check AND consume a slot for /chat (hourly bucket). */
|
|
160
|
+
consumeChat(ip) {
|
|
161
|
+
return this.bump(this.chatStore, ip, this.maxChatPerHour, 'hourly', true);
|
|
162
|
+
}
|
|
163
|
+
/** Get stats for monitoring endpoints. */
|
|
164
|
+
stats() {
|
|
165
|
+
const dump = (s) => [...s.entries()].map(([ip, e]) => ({ ip, count: e.count, resetAt: new Date(e.resetAt).toISOString() }));
|
|
166
|
+
return {
|
|
167
|
+
totalIps: this.simStore.size + this.compileStore.size + this.chatStore.size,
|
|
168
|
+
sim: dump(this.simStore),
|
|
169
|
+
compile: dump(this.compileStore),
|
|
170
|
+
chat: dump(this.chatStore),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
cleanup() {
|
|
174
|
+
const now = Date.now();
|
|
175
|
+
let mutated = false;
|
|
176
|
+
for (const store of [this.simStore, this.compileStore, this.chatStore]) {
|
|
177
|
+
for (const [ip, entry] of store) {
|
|
178
|
+
if (now >= entry.resetAt) {
|
|
179
|
+
store.delete(ip);
|
|
180
|
+
mutated = true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (mutated)
|
|
185
|
+
this.persist();
|
|
186
|
+
}
|
|
187
|
+
destroy() {
|
|
188
|
+
clearInterval(this.cleanupTimer);
|
|
189
|
+
if (this.persistTimer)
|
|
190
|
+
clearTimeout(this.persistTimer);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/cli/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAoB9E,MAAM,OAAO,aAAa;IAChB,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC7C,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,SAAS,CAAS;IAClB,gBAAgB,CAAS;IACzB,cAAc,CAAS;IACvB,YAAY,CAAiC;IAC7C,eAAe,GAAkB,IAAI,CAAC;IACtC,YAAY,GAAyC,IAAI,CAAC;IAElE,YACE,YAAoB,CAAC,EACrB,mBAA2B,CAAC,EAC5B,iBAAyB,GAAG,EAC5B,kBAAiC,IAAI;QAErC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,gFAAgF;IACxE,IAAI;QACV,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAClC,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;gBAAE,OAAO;YAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAI1B,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,CAAC,KAAkC,EAAE,GAA+C,EAAE,EAAE;gBACtG,IAAI,CAAC,GAAG;oBAAE,OAAO;gBACjB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9C,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,GAAG,GAAG;wBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;IACH,CAAC;IAED,iEAAiE;IACzD,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAClC,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,eAAe;gBAAE,OAAO;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,CAA8B,EAAkC,EAAE;oBAC9E,MAAM,GAAG,GAAmC,EAAE,CAAC;oBAC/C,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;wBAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrC,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC;gBACF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC7B,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACxB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;oBAChC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC3B,CAAC,CAAC;gBACH,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,MAAM,CAAC;gBAC1C,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACrC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED,oFAAoF;IACpF,MAAM,CAAC,KAAK,CAAC,GAAoB;QAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC3C,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvE,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,MAAM;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC7C,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,OAAO,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC;IAC/C,CAAC;IAEO,SAAS,CAAC,IAAgB;QAChC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;YAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAEO,IAAI,CACV,KAAkC,EAClC,EAAU,EACV,KAAa,EACb,IAAgB,EAChB,MAAe;QAEf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpC,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/D,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,EAAU;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,cAAc,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,0DAA0D;IAC1D,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,0CAA0C;IAC1C,KAAK;QAMH,MAAM,IAAI,GAAG,CAAC,CAA8B,EAAE,EAAE,CAC9C,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1G,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;YAC3E,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;SAC3B,CAAC;IACJ,CAAC;IAEO,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACvE,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;gBAChC,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACjB,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-run schema-retry aggregation for production reliability telemetry.
|
|
3
|
+
*
|
|
4
|
+
* Each simulation reports per-schema `{ attempts, calls, fallbacks }` in
|
|
5
|
+
* its cost payload (see [cost-tracker.ts](../runtime/cost-tracker.ts)).
|
|
6
|
+
* This module sums those per-run buckets across the last N runs so the
|
|
7
|
+
* dashboard and `/retry-stats` endpoint can surface live reliability
|
|
8
|
+
* metrics without running an expensive replay.
|
|
9
|
+
*
|
|
10
|
+
* Metrics surfaced per schema across the aggregated window:
|
|
11
|
+
*
|
|
12
|
+
* - `calls` — total schema-validated LLM calls on this schema
|
|
13
|
+
* - `attempts` — total attempts (≥ calls; > calls when retries happened)
|
|
14
|
+
* - `avgAttempts`— attempts / calls. 1.0 = first-try success; > 1.0
|
|
15
|
+
* means the model is retrying on validation failures
|
|
16
|
+
* and maxRetries / schema discipline should be tuned
|
|
17
|
+
* - `fallbacks` — runs where retries were exhausted and the caller's
|
|
18
|
+
* empty skeleton was returned instead of a validated object
|
|
19
|
+
* - `fallbackRate` — fallbacks / calls. > 0 means the run served
|
|
20
|
+
* degraded data on at least one turn for this schema
|
|
21
|
+
* - `runsPresent`— number of runs in the window where this schema
|
|
22
|
+
* appeared at least once (not every run exercises every
|
|
23
|
+
* schema: agriculture dept only fires on some turns)
|
|
24
|
+
*
|
|
25
|
+
* @module paracosm/cli/retry-stats
|
|
26
|
+
*/
|
|
27
|
+
/** Per-run payload emitted by the cost tracker. Keys are schema names. */
|
|
28
|
+
export type PerRunSchemaRetries = Record<string, {
|
|
29
|
+
attempts: number;
|
|
30
|
+
calls: number;
|
|
31
|
+
fallbacks: number;
|
|
32
|
+
}>;
|
|
33
|
+
/** Aggregate rollup across N runs. */
|
|
34
|
+
export interface SchemaRetryStats {
|
|
35
|
+
runCount: number;
|
|
36
|
+
schemas: Record<string, {
|
|
37
|
+
calls: number;
|
|
38
|
+
attempts: number;
|
|
39
|
+
fallbacks: number;
|
|
40
|
+
/** attempts / calls; rounded to two decimals. */
|
|
41
|
+
avgAttempts: number;
|
|
42
|
+
/** fallbacks / calls; rounded to four decimals. */
|
|
43
|
+
fallbackRate: number;
|
|
44
|
+
/** Count of runs in the window where this schema appeared. */
|
|
45
|
+
runsPresent: number;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Fold an array of per-run `schemaRetries` payloads into a single
|
|
50
|
+
* aggregate rollup. Safe with empty / missing entries — an empty run
|
|
51
|
+
* (`{}`) still contributes to `runCount` but doesn't add to any
|
|
52
|
+
* per-schema bucket.
|
|
53
|
+
*/
|
|
54
|
+
export declare function aggregateSchemaRetries(runs: PerRunSchemaRetries[]): SchemaRetryStats;
|
|
55
|
+
/**
|
|
56
|
+
* Per-run forge-stats payload emitted by the cost tracker once any
|
|
57
|
+
* forge attempt (approved or rejected) has been captured. Mirrors the
|
|
58
|
+
* shape of {@link CostTracker.finalCost}'s `forgeStats` field.
|
|
59
|
+
*/
|
|
60
|
+
export interface PerRunForgeStats {
|
|
61
|
+
attempts: number;
|
|
62
|
+
approved: number;
|
|
63
|
+
rejected: number;
|
|
64
|
+
/** Sum of judge confidence across approved forges; divide by approved for avg. */
|
|
65
|
+
approvedConfidenceSum: number;
|
|
66
|
+
/** Count of unique tool names attempted this run. Optional for back-compat
|
|
67
|
+
* with v2 entries that predate unique tracking. */
|
|
68
|
+
uniqueNames?: number;
|
|
69
|
+
/** Count of unique names that got approved at least once. */
|
|
70
|
+
uniqueApproved?: number;
|
|
71
|
+
/** Count of unique names that were only ever rejected. */
|
|
72
|
+
uniqueTerminalRejections?: number;
|
|
73
|
+
/** Rejection-reason histogram. Optional for back-compat with entries
|
|
74
|
+
* written before 2026-04-18. */
|
|
75
|
+
rejectionReasons?: {
|
|
76
|
+
schema_extra_field: number;
|
|
77
|
+
shape_check: number;
|
|
78
|
+
parse_error: number;
|
|
79
|
+
judge_correctness: number;
|
|
80
|
+
other: number;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Aggregate rollup across N runs' forge stats. */
|
|
84
|
+
export interface ForgeStatsRollup {
|
|
85
|
+
totalAttempts: number;
|
|
86
|
+
approved: number;
|
|
87
|
+
rejected: number;
|
|
88
|
+
/** approved / totalAttempts, rounded to 4 decimals. 0 when no attempts. */
|
|
89
|
+
approvalRate: number;
|
|
90
|
+
/** approvedConfidenceSum / approved, rounded to 2 decimals. 0 when no approvals. */
|
|
91
|
+
avgApprovedConfidence: number;
|
|
92
|
+
/** Sum of unique names attempted across all runs. */
|
|
93
|
+
totalUniqueNames: number;
|
|
94
|
+
/** Sum of unique names approved at least once across all runs. */
|
|
95
|
+
totalUniqueApproved: number;
|
|
96
|
+
/** Sum of unique names that were only rejected across all runs. */
|
|
97
|
+
totalUniqueTerminalRejections: number;
|
|
98
|
+
/** totalUniqueApproved / totalUniqueNames, rounded to 4 decimals. The
|
|
99
|
+
* "eventually-approved" rate — closer to the real quality signal than
|
|
100
|
+
* raw approvalRate when the retry loop re-forges under the same name. */
|
|
101
|
+
uniqueApprovalRate: number;
|
|
102
|
+
/** Summed rejection-reason histogram across all runs. Lets operators
|
|
103
|
+
* see the failure-mode distribution over time (e.g. did the
|
|
104
|
+
* 2026-04-18 forge-guidance prompt fix cut schema_extra_field). */
|
|
105
|
+
rejectionReasons: {
|
|
106
|
+
schema_extra_field: number;
|
|
107
|
+
shape_check: number;
|
|
108
|
+
parse_error: number;
|
|
109
|
+
judge_correctness: number;
|
|
110
|
+
other: number;
|
|
111
|
+
};
|
|
112
|
+
/** Count of runs in the window that recorded at least one forge attempt. */
|
|
113
|
+
runsPresent: number;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Fold an array of per-run forge-stats payloads into a single rollup
|
|
117
|
+
* for the /retry-stats response. Runs without any forge activity are
|
|
118
|
+
* counted in the window's runCount (see aggregateSchemaRetries) but do
|
|
119
|
+
* not contribute to the forge rollup (they have `attempts===0`).
|
|
120
|
+
*/
|
|
121
|
+
export declare function aggregateForgeStats(runs: PerRunForgeStats[]): ForgeStatsRollup;
|
|
122
|
+
/**
|
|
123
|
+
* Per-run cache-stats payload emitted by the cost tracker when the
|
|
124
|
+
* provider returned non-zero cache counters (Anthropic reports these
|
|
125
|
+
* on every call). Matches {@link CostTracker.finalCost}'s `cacheStats`.
|
|
126
|
+
*/
|
|
127
|
+
export interface PerRunCacheStats {
|
|
128
|
+
readTokens: number;
|
|
129
|
+
creationTokens: number;
|
|
130
|
+
savingsUSD: number;
|
|
131
|
+
}
|
|
132
|
+
/** Aggregate prompt-cache rollup across N runs. */
|
|
133
|
+
export interface CacheStatsRollup {
|
|
134
|
+
totalReadTokens: number;
|
|
135
|
+
totalCreationTokens: number;
|
|
136
|
+
/** Sum of savingsUSD across runs; rounded to 4 decimals. */
|
|
137
|
+
totalSavingsUSD: number;
|
|
138
|
+
/** readTokens / (readTokens + creationTokens), rounded to 4 decimals.
|
|
139
|
+
* Healthy caching shows ratios > 0.7 — most traffic is replays. */
|
|
140
|
+
readRatio: number;
|
|
141
|
+
/** Count of runs that reported any cache activity. */
|
|
142
|
+
runsPresent: number;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Fold an array of per-run cache-stats payloads into a rollup. Runs
|
|
146
|
+
* without cache activity (OpenAI with opaque counters, or very short
|
|
147
|
+
* runs that never crossed the auto-cache threshold) are skipped.
|
|
148
|
+
*/
|
|
149
|
+
export declare function aggregateCacheStats(runs: PerRunCacheStats[]): CacheStatsRollup;
|
|
150
|
+
/**
|
|
151
|
+
* Per-run provider-error counters. Keys match the classifier's
|
|
152
|
+
* ProviderErrorKind; `total` is the sum for dashboard rendering
|
|
153
|
+
* convenience.
|
|
154
|
+
*/
|
|
155
|
+
export interface PerRunProviderErrors {
|
|
156
|
+
auth: number;
|
|
157
|
+
quota: number;
|
|
158
|
+
rate_limit: number;
|
|
159
|
+
network: number;
|
|
160
|
+
unknown: number;
|
|
161
|
+
total: number;
|
|
162
|
+
}
|
|
163
|
+
/** Aggregate provider-error rollup across N runs. */
|
|
164
|
+
export interface ProviderErrorsRollup {
|
|
165
|
+
auth: number;
|
|
166
|
+
quota: number;
|
|
167
|
+
rate_limit: number;
|
|
168
|
+
network: number;
|
|
169
|
+
unknown: number;
|
|
170
|
+
total: number;
|
|
171
|
+
/** Count of runs that recorded at least one provider error. */
|
|
172
|
+
runsPresent: number;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Fold per-run provider-error counters into a rollup. Runs without any
|
|
176
|
+
* classified errors are skipped (total === 0).
|
|
177
|
+
*/
|
|
178
|
+
export declare function aggregateProviderErrors(runs: PerRunProviderErrors[]): ProviderErrorsRollup;
|
|
179
|
+
//# sourceMappingURL=retry-stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-stats.d.ts","sourceRoot":"","sources":["../../src/cli/retry-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-run schema-retry aggregation for production reliability telemetry.
|
|
3
|
+
*
|
|
4
|
+
* Each simulation reports per-schema `{ attempts, calls, fallbacks }` in
|
|
5
|
+
* its cost payload (see [cost-tracker.ts](../runtime/cost-tracker.ts)).
|
|
6
|
+
* This module sums those per-run buckets across the last N runs so the
|
|
7
|
+
* dashboard and `/retry-stats` endpoint can surface live reliability
|
|
8
|
+
* metrics without running an expensive replay.
|
|
9
|
+
*
|
|
10
|
+
* Metrics surfaced per schema across the aggregated window:
|
|
11
|
+
*
|
|
12
|
+
* - `calls` — total schema-validated LLM calls on this schema
|
|
13
|
+
* - `attempts` — total attempts (≥ calls; > calls when retries happened)
|
|
14
|
+
* - `avgAttempts`— attempts / calls. 1.0 = first-try success; > 1.0
|
|
15
|
+
* means the model is retrying on validation failures
|
|
16
|
+
* and maxRetries / schema discipline should be tuned
|
|
17
|
+
* - `fallbacks` — runs where retries were exhausted and the caller's
|
|
18
|
+
* empty skeleton was returned instead of a validated object
|
|
19
|
+
* - `fallbackRate` — fallbacks / calls. > 0 means the run served
|
|
20
|
+
* degraded data on at least one turn for this schema
|
|
21
|
+
* - `runsPresent`— number of runs in the window where this schema
|
|
22
|
+
* appeared at least once (not every run exercises every
|
|
23
|
+
* schema: agriculture dept only fires on some turns)
|
|
24
|
+
*
|
|
25
|
+
* @module paracosm/cli/retry-stats
|
|
26
|
+
*/
|
|
27
|
+
const round = (v, precision) => {
|
|
28
|
+
const f = Math.pow(10, precision);
|
|
29
|
+
return Math.round(v * f) / f;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Fold an array of per-run `schemaRetries` payloads into a single
|
|
33
|
+
* aggregate rollup. Safe with empty / missing entries — an empty run
|
|
34
|
+
* (`{}`) still contributes to `runCount` but doesn't add to any
|
|
35
|
+
* per-schema bucket.
|
|
36
|
+
*/
|
|
37
|
+
export function aggregateSchemaRetries(runs) {
|
|
38
|
+
const rollup = new Map();
|
|
39
|
+
for (const run of runs) {
|
|
40
|
+
if (!run)
|
|
41
|
+
continue;
|
|
42
|
+
for (const [schemaName, bucket] of Object.entries(run)) {
|
|
43
|
+
const existing = rollup.get(schemaName) ?? { calls: 0, attempts: 0, fallbacks: 0, runsPresent: 0 };
|
|
44
|
+
existing.calls += bucket.calls;
|
|
45
|
+
existing.attempts += bucket.attempts;
|
|
46
|
+
existing.fallbacks += bucket.fallbacks;
|
|
47
|
+
existing.runsPresent += 1;
|
|
48
|
+
rollup.set(schemaName, existing);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const schemas = {};
|
|
52
|
+
for (const [name, r] of rollup.entries()) {
|
|
53
|
+
schemas[name] = {
|
|
54
|
+
calls: r.calls,
|
|
55
|
+
attempts: r.attempts,
|
|
56
|
+
fallbacks: r.fallbacks,
|
|
57
|
+
avgAttempts: r.calls > 0 ? round(r.attempts / r.calls, 2) : 0,
|
|
58
|
+
fallbackRate: r.calls > 0 ? round(r.fallbacks / r.calls, 4) : 0,
|
|
59
|
+
runsPresent: r.runsPresent,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return { runCount: runs.length, schemas };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fold an array of per-run forge-stats payloads into a single rollup
|
|
66
|
+
* for the /retry-stats response. Runs without any forge activity are
|
|
67
|
+
* counted in the window's runCount (see aggregateSchemaRetries) but do
|
|
68
|
+
* not contribute to the forge rollup (they have `attempts===0`).
|
|
69
|
+
*/
|
|
70
|
+
export function aggregateForgeStats(runs) {
|
|
71
|
+
let totalAttempts = 0;
|
|
72
|
+
let approved = 0;
|
|
73
|
+
let rejected = 0;
|
|
74
|
+
let approvedConfidenceSum = 0;
|
|
75
|
+
let totalUniqueNames = 0;
|
|
76
|
+
let totalUniqueApproved = 0;
|
|
77
|
+
let totalUniqueTerminalRejections = 0;
|
|
78
|
+
let runsPresent = 0;
|
|
79
|
+
const rejectionReasons = {
|
|
80
|
+
schema_extra_field: 0,
|
|
81
|
+
shape_check: 0,
|
|
82
|
+
parse_error: 0,
|
|
83
|
+
judge_correctness: 0,
|
|
84
|
+
other: 0,
|
|
85
|
+
};
|
|
86
|
+
for (const run of runs) {
|
|
87
|
+
if (!run || run.attempts === 0)
|
|
88
|
+
continue;
|
|
89
|
+
totalAttempts += run.attempts;
|
|
90
|
+
approved += run.approved;
|
|
91
|
+
rejected += run.rejected;
|
|
92
|
+
approvedConfidenceSum += run.approvedConfidenceSum;
|
|
93
|
+
totalUniqueNames += run.uniqueNames ?? 0;
|
|
94
|
+
totalUniqueApproved += run.uniqueApproved ?? 0;
|
|
95
|
+
totalUniqueTerminalRejections += run.uniqueTerminalRejections ?? 0;
|
|
96
|
+
if (run.rejectionReasons) {
|
|
97
|
+
rejectionReasons.schema_extra_field += run.rejectionReasons.schema_extra_field;
|
|
98
|
+
rejectionReasons.shape_check += run.rejectionReasons.shape_check;
|
|
99
|
+
rejectionReasons.parse_error += run.rejectionReasons.parse_error;
|
|
100
|
+
rejectionReasons.judge_correctness += run.rejectionReasons.judge_correctness;
|
|
101
|
+
rejectionReasons.other += run.rejectionReasons.other;
|
|
102
|
+
}
|
|
103
|
+
runsPresent += 1;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
totalAttempts,
|
|
107
|
+
approved,
|
|
108
|
+
rejected,
|
|
109
|
+
approvalRate: totalAttempts > 0 ? round(approved / totalAttempts, 4) : 0,
|
|
110
|
+
avgApprovedConfidence: approved > 0 ? round(approvedConfidenceSum / approved, 2) : 0,
|
|
111
|
+
totalUniqueNames,
|
|
112
|
+
totalUniqueApproved,
|
|
113
|
+
totalUniqueTerminalRejections,
|
|
114
|
+
uniqueApprovalRate: totalUniqueNames > 0 ? round(totalUniqueApproved / totalUniqueNames, 4) : 0,
|
|
115
|
+
rejectionReasons,
|
|
116
|
+
runsPresent,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Fold an array of per-run cache-stats payloads into a rollup. Runs
|
|
121
|
+
* without cache activity (OpenAI with opaque counters, or very short
|
|
122
|
+
* runs that never crossed the auto-cache threshold) are skipped.
|
|
123
|
+
*/
|
|
124
|
+
export function aggregateCacheStats(runs) {
|
|
125
|
+
let totalReadTokens = 0;
|
|
126
|
+
let totalCreationTokens = 0;
|
|
127
|
+
let totalSavingsUSD = 0;
|
|
128
|
+
let runsPresent = 0;
|
|
129
|
+
for (const run of runs) {
|
|
130
|
+
if (!run || (run.readTokens === 0 && run.creationTokens === 0))
|
|
131
|
+
continue;
|
|
132
|
+
totalReadTokens += run.readTokens;
|
|
133
|
+
totalCreationTokens += run.creationTokens;
|
|
134
|
+
totalSavingsUSD += run.savingsUSD;
|
|
135
|
+
runsPresent += 1;
|
|
136
|
+
}
|
|
137
|
+
const denom = totalReadTokens + totalCreationTokens;
|
|
138
|
+
return {
|
|
139
|
+
totalReadTokens,
|
|
140
|
+
totalCreationTokens,
|
|
141
|
+
totalSavingsUSD: round(totalSavingsUSD, 4),
|
|
142
|
+
readRatio: denom > 0 ? round(totalReadTokens / denom, 4) : 0,
|
|
143
|
+
runsPresent,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Fold per-run provider-error counters into a rollup. Runs without any
|
|
148
|
+
* classified errors are skipped (total === 0).
|
|
149
|
+
*/
|
|
150
|
+
export function aggregateProviderErrors(runs) {
|
|
151
|
+
const rollup = {
|
|
152
|
+
auth: 0, quota: 0, rate_limit: 0, network: 0, unknown: 0, total: 0, runsPresent: 0,
|
|
153
|
+
};
|
|
154
|
+
for (const run of runs) {
|
|
155
|
+
if (!run || run.total === 0)
|
|
156
|
+
continue;
|
|
157
|
+
rollup.auth += run.auth;
|
|
158
|
+
rollup.quota += run.quota;
|
|
159
|
+
rollup.rate_limit += run.rate_limit;
|
|
160
|
+
rollup.network += run.network;
|
|
161
|
+
rollup.unknown += run.unknown;
|
|
162
|
+
rollup.total += run.total;
|
|
163
|
+
rollup.runsPresent += 1;
|
|
164
|
+
}
|
|
165
|
+
return rollup;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=retry-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-stats.js","sourceRoot":"","sources":["../../src/cli/retry-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-a.d.ts","sourceRoot":"","sources":["../../src/cli/run-a.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mars Genesis: Leader A (first entry in leaders.json)
|
|
3
|
+
* Edit leaders.json to change who this runs.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx tsx src/run-a.ts # full 12 turns
|
|
7
|
+
* npx tsx src/run-a.ts 3 # 3-turn smoke test
|
|
8
|
+
* npx tsx src/run-a.ts 5 --live # 5 turns + live web search
|
|
9
|
+
*/
|
|
10
|
+
process.argv.splice(2, 0, '--leader', '0');
|
|
11
|
+
await import('./run.js');
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=run-a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-a.js","sourceRoot":"","sources":["../../src/cli/run-a.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;AAC3C,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-b.d.ts","sourceRoot":"","sources":["../../src/cli/run-b.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mars Genesis: Leader B (second entry in leaders.json)
|
|
3
|
+
* Edit leaders.json to change who this runs.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx tsx src/run-b.ts # full 12 turns
|
|
7
|
+
* npx tsx src/run-b.ts 3 # 3-turn smoke test
|
|
8
|
+
* npx tsx src/run-b.ts 5 --live # 5 turns + live web search
|
|
9
|
+
*/
|
|
10
|
+
process.argv.splice(2, 0, '--leader', '1');
|
|
11
|
+
await import('./run.js');
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=run-b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-b.js","sourceRoot":"","sources":["../../src/cli/run-b.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;AAC3C,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Mars Genesis: General-purpose standalone simulation runner.
|
|
4
|
+
*
|
|
5
|
+
* Reads leader configs via `resolveLeaders` which walks a priority
|
|
6
|
+
* chain: --leaders flag, $CWD/leaders.json, $CWD/config/leaders.json,
|
|
7
|
+
* bundled config/leaders.json, bundled config/leaders.example.json.
|
|
8
|
+
* CLI flags on top of that override individual leader fields.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* npx tsx src/run.ts --leader 0 # Leader A
|
|
12
|
+
* npx tsx src/run.ts --leader 1 5 # Leader B, 5 turns
|
|
13
|
+
* npx tsx src/run.ts --leader 0 --live # live web search
|
|
14
|
+
* npx tsx src/run.ts --name "Custom" --openness 0.8 3 # Override fields
|
|
15
|
+
* npx tsx src/run.ts --leaders ./my-leaders.json # Custom config file
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG"}
|