paracosm 0.9.1022 → 0.9.1026

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.
Files changed (33) hide show
  1. package/README.md +35 -22
  2. package/assets/landing.css +0 -67
  3. package/dist/dashboard/dist/assets/{index-Da6eIzNW.js → index-DozeSllQ.js} +7 -5
  4. package/dist/dashboard/dist/assets/{pdf-CdfMQ2jQ.js → pdf-CZ47W0ov.js} +1 -1
  5. package/dist/dashboard/dist/index.html +24 -22
  6. package/dist/dashboard/dist/llms-full.txt +1 -1
  7. package/dist/dashboard/dist/sitemap.xml +23 -27
  8. package/dist/dashboard/landing.html +21 -32
  9. package/dist/server/rate-limiter.d.ts +9 -0
  10. package/dist/server/rate-limiter.d.ts.map +1 -1
  11. package/dist/server/rate-limiter.js +17 -0
  12. package/dist/server/rate-limiter.js.map +1 -1
  13. package/dist/server/server-app.d.ts +1 -1
  14. package/dist/server/server-app.d.ts.map +1 -1
  15. package/dist/server/server-app.js +33 -20
  16. package/dist/server/server-app.js.map +1 -1
  17. package/dist/server/site-analytics.d.ts +39 -0
  18. package/dist/server/site-analytics.d.ts.map +1 -0
  19. package/dist/server/site-analytics.js +51 -0
  20. package/dist/server/site-analytics.js.map +1 -0
  21. package/dist/server/stores/session.d.ts +6 -4
  22. package/dist/server/stores/session.d.ts.map +1 -1
  23. package/dist/server/stores/session.js +5 -3
  24. package/dist/server/stores/session.js.map +1 -1
  25. package/dist/server/stores/sqlite-run-history.d.ts +8 -12
  26. package/dist/server/stores/sqlite-run-history.d.ts.map +1 -1
  27. package/dist/server/stores/sqlite-run-history.js +6 -6
  28. package/dist/server/stores/sqlite-run-history.js.map +1 -1
  29. package/dist/server/stores/waitlist.d.ts +9 -6
  30. package/dist/server/stores/waitlist.d.ts.map +1 -1
  31. package/dist/server/stores/waitlist.js +8 -5
  32. package/dist/server/stores/waitlist.js.map +1 -1
  33. package/package.json +2 -1
package/README.md CHANGED
@@ -459,7 +459,7 @@ Programmatic surfaces: `paracosm` root (`run`, `runMany`, `WorldModel`, `compile
459
459
 
460
460
  For non-SSE consumers there's `POST /simulate` (gated on `PARACOSM_ENABLE_SIMULATE_ENDPOINT=true`) and nine read-and-replay routes under `/api/v1/*`. Wire-level details: [`docs/HTTP_API.md`](docs/HTTP_API.md).
461
461
 
462
- Storage: SQLite by default, Postgres / sql.js / IndexedDB via `STORAGE_ADAPTER=` env. Run history (Library) and session blobs (Load menu) share the same schema. Admin write routes (`/admin/sessions/save`, `/admin/data/wipe`) require both `ADMIN_WRITE=true` and an `ADMIN_TOKEN` bearer; off by default.
462
+ Storage: SQLite through `@framers/sql-storage-adapter` (better-sqlite3, or sql.js when the native module cannot load). Run history (Library) lives in `data/runs.db` under `APP_DIR`, the working directory when unset (`PARACOSM_RUN_HISTORY_DB_PATH` moves it), and saved sessions (Load menu) in `data/sessions.db`; `STORAGE_ADAPTER` and `DATABASE_URL` have no effect on either. Admin write routes (`/admin/sessions/save`, `/admin/data/wipe`) require both `ADMIN_WRITE=true` and an `ADMIN_TOKEN` bearer; off by default.
463
463
 
464
464
  ---
465
465
 
@@ -467,28 +467,41 @@ Storage: SQLite by default, Postgres / sql.js / IndexedDB via `STORAGE_ADAPTER=`
467
467
 
468
468
  ```
469
469
  src/
470
- engine/ the npm package
471
- core/ deterministic kernel: RNG, state, progression, personality drift
472
- compiler/ scenario draft + source grounding to ScenarioPackage compiler
473
- mars/ Mars Genesis scenario
474
- lunar/ Lunar Outpost scenario
475
-
476
- runtime/ orchestration (not exported)
477
- orchestrator turn pipeline: director, kernel, departments, commander
478
- director emergent event generation from simulation state
479
- departments parallel department analysis agents
480
- agent-reactions batched agent reactions, 10 agents per LLM call
481
- agent-memory persistent memory, consolidation, stance drift
482
- chat-agents post-simulation conversational agents
483
- schemas/ Zod schemas for every structured LLM call
484
- llm-invocations/ generateValidatedObject + sendAndValidate wrappers
485
- hexaco-cues/ trajectory and reaction cue translation helpers
486
-
487
- cli/ server + dashboard (not exported)
488
- serve.ts HTTP + SSE server
489
- dashboard/ React + Vite live visualization, cellular automata viz
470
+ index.ts the package root: run, runMany, WorldModel, compileScenario,
471
+ the built-in scenarios, trait models, presets and types
472
+ api/ run() and runMany()
473
+ engine/ scenario contract, compiler and deterministic kernel
474
+ core/ kernel: seeded RNG, state, snapshots, progression (paracosm/core)
475
+ compiler/ scenario draft + source grounding to ScenarioPackage (paracosm/compiler)
476
+ schema/ RunArtifact types and Zod schemas (paracosm/schema)
477
+ digital-twin/ WorldModel as DigitalTwin (paracosm/digital-twin)
478
+ scenarios/ loads Mars Genesis and Lunar Outpost from scenarios/*.json
479
+ data-driven-hooks/ turns a scenario's JSON hooks into runtime hooks
480
+ physics/ per-agent progression physics a scenario names in its JSON
481
+ traits/ trait models: HEXACO and the AI-agent model
482
+ registries/ effects, events and metrics
483
+ presets/ actor presets
484
+ provider/ provider key resolution
485
+
486
+ runtime/ simulation execution
487
+ orchestrator/ turn pipeline: event director, departments, commander, reactions
488
+ agents/ agent reactions, memory and post-run chat
489
+ world-model/ the WorldModel facade: simulate, replay, fork, intervene, batch
490
+ swarm/ views over a run's agent swarm (paracosm/swarm)
491
+ research/ citation and research memory
492
+ validators/ Zod validators for LLM responses
493
+ economics/ cost tracking and pricing
494
+ io/ output writer, artifact assembly, SSE envelopes
495
+ util/ parsers and shared helpers
496
+
497
+ llm/ validated LLM calls shared by the runtime and the compiler
498
+ cli/ the paracosm command
499
+ server/ the dashboard's HTTP and SSE server
500
+ dashboard/ the React + Vite dashboard at /sim, and the landing page
490
501
  ```
491
502
 
503
+ [docs/architecture/INTERNAL_LAYOUT.md](https://github.com/framerslab/paracosm/blob/master/docs/architecture/INTERNAL_LAYOUT.md) describes each folder.
504
+
492
505
  The engine owns the chassis. The scenario owns the domain. The kernel handles state, time, randomness, and invariants. The scenario handles event categories, department instructions, progression hooks, and research citations. The orchestrator connects them.
493
506
 
494
507
  ---
@@ -518,7 +531,7 @@ Paracosm uses [AgentOS](https://agentos.sh/en) for agent orchestration, LLM disp
518
531
  |---|---|---|
519
532
  | Where | [paracosm.agentos.sh/sim](https://paracosm.agentos.sh/sim), in the browser, without an account. | Your machine or server: `npm install paracosm` for the SDK and the CLI, `paracosm dashboard` for the same dashboard at `http://localhost:3456`. |
520
533
  | Model keys | The host's keys, or your own OpenAI or Anthropic key entered in Settings. | Your own keys, from the environment or a `.env` file. |
521
- | Limits | Runs on the host's keys are capped in turns, population and departments, and each IP address has a daily run limit. Your own key lifts both. | None in the SDK and `paracosm run`. The dashboard server limits runs on its own keys to `RATE_LIMIT` per IP address per day (1 when unset); `RATE_LIMIT=0` turns the limit off. |
534
+ | Limits | Runs on the host's keys are capped in turns, population and departments, and each IP address has a daily run limit. Your own key lifts both. | No hosted quotas: the SDK and `paracosm run` cap no turns, population, departments or daily runs. The API has its own bounds: `runMany()` and `WorldModel.quickstart()` take 2 to 6 actors and throw outside that range, `run()` runs two and returns the first, and a dashboard run takes 2 to 300 actors (a fork takes 1). The dashboard server limits runs on its own keys to `RATE_LIMIT` per IP address per day (1 when unset); `RATE_LIMIT=0` turns the limit off. |
522
535
  | Cost | Free to try. | Free. You pay your model provider for the runs you make. |
523
536
  | Support | Community via Discord and GitHub. | Community via Discord and GitHub. |
524
537
 
@@ -780,50 +780,6 @@ a:hover { text-decoration: underline; }
780
780
  .feat p { font-size: var(--font-md); color: var(--t2); line-height: 1.7; }
781
781
  .feat-ref { font-size: var(--font-2xs); color: var(--t4); margin-top: 10px; font-family: var(--mono); border-top: 1px solid var(--border); padding-top: 8px; }
782
782
 
783
- /* ── Flow Diagram ─────────────────────────────────────────────────────────── */
784
-
785
- .flow-wrap { position: relative; margin: 48px 0; padding: 40px 0; }
786
-
787
- /* Pin the connector to the vertical center of the icon-ring row.
788
- padding-top (40px) + half the ring height (64 / 2 = 32px) = 72px.
789
- Was `top: 50%`, which scaled with the tallest node's paragraph and
790
- started cutting through the title/description text as soon as the
791
- copy got long enough. */
792
- .flow-line { position: absolute; top: 72px; left: 60px; right: 60px; height: 2px; background: var(--border); z-index: 0; }
793
- .flow-line-fill { height: 100%; width: 0; background: var(--grad); transition: width 1.5s ease; }
794
- .flow-line-fill.active { width: 100%; }
795
-
796
- .flow { display: flex; justify-content: space-between; position: relative; z-index: 1; }
797
-
798
- .flow-node { display: flex; flex-direction: column; align-items: center; text-align: center; width: 22%; position: relative; }
799
-
800
- .flow-ring {
801
- width: 64px; height: 64px;
802
- border-radius: 50%;
803
- border: 2px solid var(--border);
804
- display: flex; align-items: center; justify-content: center;
805
- background: var(--bg);
806
- transition: all .5s;
807
- margin-bottom: 14px;
808
- }
809
-
810
- .flow-ring svg { width: 28px; height: 28px; opacity: .7; transition: opacity .3s; }
811
- .flow-ring.active { border-color: var(--amber); }
812
- .flow-ring.active svg { opacity: 1; }
813
-
814
- .flow-num { font-family: var(--mono); font-size: var(--font-2xs); font-weight: 700; color: var(--t4); letter-spacing: 1px; margin-bottom: 4px; }
815
- .flow-node h3 { font-family: var(--mono); font-size: var(--font-md); font-weight: 700; color: var(--t1); margin-bottom: 4px; }
816
- .flow-node p { font-size: var(--font-xs); color: var(--t3); line-height: 1.5; max-width: 180px; }
817
-
818
- /* ── Divergence Visualization ─────────────────────────────────────────────── */
819
-
820
- .diverge { display: flex; gap: 20px; margin-top: 48px; }
821
- .diverge-side { flex: 1; border-radius: 8px; padding: 24px; border: 1px solid var(--border); background: var(--bg3); transition: all .3s; }
822
- .diverge-side:hover { border-color: var(--border-hl); }
823
- .diverge-side h3 { font-family: var(--mono); font-size: var(--font-lg); font-weight: 700; margin-bottom: 8px; }
824
- .diverge-bar { height: 6px; border-radius: 3px; margin: 6px 0; overflow: hidden; background: var(--border); }
825
- .diverge-fill { height: 100%; border-radius: 3px; transition: width 1s ease; }
826
-
827
783
  /* ── Scenarios ────────────────────────────────────────────────────────────── */
828
784
 
829
785
  .scenarios { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
@@ -902,14 +858,6 @@ a:hover { text-decoration: underline; }
902
858
  width: 100%;
903
859
  }
904
860
 
905
- /* ── Pricing ──────────────────────────────────────────────────────────────── */
906
-
907
- .pricing-banner { background: var(--bg3); border: 1px solid var(--border); border-radius: 12px; padding: 40px; text-align: center; max-width: 700px; margin: 0 auto; backdrop-filter: blur(12px); }
908
- .pricing-banner h3 { font-family: var(--mono); font-size: var(--font-2xl); font-weight: 700; color: var(--t1); margin-bottom: 8px; }
909
- .pricing-banner p { font-size: var(--font-lg); color: var(--t2); line-height: 1.8; margin-bottom: 8px; }
910
- .pricing-tiers { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin: 20px 0; }
911
- .pricing-tier { font-family: var(--mono); font-size: var(--font-sm); font-weight: 700; padding: 6px 16px; border-radius: 6px; background: var(--bg4); color: var(--t2); border: 1px solid var(--border); }
912
-
913
861
  /* ── Code Blocks ──────────────────────────────────────────────────────────── */
914
862
 
915
863
  .code-sec { margin-top: 56px; width: 100%; max-width: 720px; }
@@ -1263,19 +1211,8 @@ html:not(.js) .rv {
1263
1211
  * step instead of staggering across a 20px window (.arch used to
1264
1212
  * collapse at 880, .scenarios at 900 — visible double reflow). */
1265
1213
  .arch { grid-template-columns: 1fr; }
1266
- .flow { flex-direction: column; align-items: stretch; gap: 28px; }
1267
- .flow-line { display: none; }
1268
- /* Desktop keeps each node at width:22% so four fit across the row. On
1269
- mobile the flex direction flips to column, but without widening the
1270
- node the 22% cap turns every stacked block into a narrow centered
1271
- strip with huge empty gutters. Let each node take the full column
1272
- width and the description paragraph read at a natural line length. */
1273
- .flow-node { width: 100%; max-width: 520px; margin: 0 auto; }
1274
- .flow-node p { max-width: none; font-size: var(--font-md); line-height: 1.6; }
1275
- .diverge { flex-direction: column; }
1276
1214
  .contact-grid { grid-template-columns: 1fr; }
1277
1215
  .hero-chips { gap: 6px; }
1278
- .pricing-tiers { flex-direction: column; align-items: center; }
1279
1216
  }
1280
1217
 
1281
1218
 
@@ -1317,9 +1254,6 @@ html:not(.js) .rv {
1317
1254
  }
1318
1255
 
1319
1256
  .light .arch-row { background: rgba(248, 242, 228, .7); border-color: var(--border); box-shadow: 0 2px 8px rgba(60, 40, 10, .06); }
1320
- .light .flow-ring { background: var(--bg); border-color: var(--border); }
1321
- .light .diverge-side { background: var(--bg3); border-color: var(--border); }
1322
- .light .pricing-banner { background: var(--bg3); border-color: var(--border); }
1323
1257
  .light .contact-card { background: var(--bg3); border-color: var(--border); }
1324
1258
  .light .faq-item { border-bottom-color: var(--border); }
1325
1259
 
@@ -1355,7 +1289,6 @@ html:not(.js) .rv {
1355
1289
  .light footer { background: var(--bg2); border-top-color: var(--border); }
1356
1290
  .light .banner::before { opacity: .15; }
1357
1291
  .light .pc-badge { background: var(--bg4); color: var(--amber); border-color: var(--border); }
1358
- .light .pricing-tier { background: var(--bg); color: var(--t2); border-color: var(--border); }
1359
1292
  .light .theme-toggle { color: var(--t3); border-color: var(--border); }
1360
1293
  .light .theme-toggle:hover { color: var(--t1); border-color: var(--border-hl); }
1361
1294