paracosm 0.0.1 → 0.2.0

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 (273) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +224 -0
  3. package/dist/cli/sim-config.d.ts +100 -0
  4. package/dist/cli/sim-config.d.ts.map +1 -0
  5. package/dist/cli/sim-config.js +124 -0
  6. package/dist/cli/sim-config.js.map +1 -0
  7. package/dist/cli/types.d.ts +73 -0
  8. package/dist/cli/types.d.ts.map +1 -0
  9. package/dist/cli/types.js +2 -0
  10. package/dist/cli/types.js.map +1 -0
  11. package/dist/engine/_template/index.d.ts +9 -0
  12. package/dist/engine/_template/index.d.ts.map +1 -0
  13. package/dist/engine/_template/index.js +91 -0
  14. package/dist/engine/_template/index.js.map +1 -0
  15. package/dist/engine/compiler/cache.d.ts +12 -0
  16. package/dist/engine/compiler/cache.d.ts.map +1 -0
  17. package/dist/engine/compiler/cache.js +75 -0
  18. package/dist/engine/compiler/cache.js.map +1 -0
  19. package/dist/engine/compiler/generate-director.d.ts +9 -0
  20. package/dist/engine/compiler/generate-director.d.ts.map +1 -0
  21. package/dist/engine/compiler/generate-director.js +57 -0
  22. package/dist/engine/compiler/generate-director.js.map +1 -0
  23. package/dist/engine/compiler/generate-fingerprint.d.ts +12 -0
  24. package/dist/engine/compiler/generate-fingerprint.d.ts.map +1 -0
  25. package/dist/engine/compiler/generate-fingerprint.js +86 -0
  26. package/dist/engine/compiler/generate-fingerprint.js.map +1 -0
  27. package/dist/engine/compiler/generate-milestones.d.ts +11 -0
  28. package/dist/engine/compiler/generate-milestones.d.ts.map +1 -0
  29. package/dist/engine/compiler/generate-milestones.js +121 -0
  30. package/dist/engine/compiler/generate-milestones.js.map +1 -0
  31. package/dist/engine/compiler/generate-politics.d.ts +11 -0
  32. package/dist/engine/compiler/generate-politics.d.ts.map +1 -0
  33. package/dist/engine/compiler/generate-politics.js +85 -0
  34. package/dist/engine/compiler/generate-politics.js.map +1 -0
  35. package/dist/engine/compiler/generate-progression.d.ts +15 -0
  36. package/dist/engine/compiler/generate-progression.d.ts.map +1 -0
  37. package/dist/engine/compiler/generate-progression.js +104 -0
  38. package/dist/engine/compiler/generate-progression.js.map +1 -0
  39. package/dist/engine/compiler/generate-prompts.d.ts +11 -0
  40. package/dist/engine/compiler/generate-prompts.d.ts.map +1 -0
  41. package/dist/engine/compiler/generate-prompts.js +90 -0
  42. package/dist/engine/compiler/generate-prompts.js.map +1 -0
  43. package/dist/engine/compiler/generate-reactions.d.ts +12 -0
  44. package/dist/engine/compiler/generate-reactions.d.ts.map +1 -0
  45. package/dist/engine/compiler/generate-reactions.js +90 -0
  46. package/dist/engine/compiler/generate-reactions.js.map +1 -0
  47. package/dist/engine/compiler/index.d.ts +34 -0
  48. package/dist/engine/compiler/index.d.ts.map +1 -0
  49. package/dist/engine/compiler/index.js +270 -0
  50. package/dist/engine/compiler/index.js.map +1 -0
  51. package/dist/engine/compiler/seed-ingestion.d.ts +40 -0
  52. package/dist/engine/compiler/seed-ingestion.d.ts.map +1 -0
  53. package/dist/engine/compiler/seed-ingestion.js +232 -0
  54. package/dist/engine/compiler/seed-ingestion.js.map +1 -0
  55. package/dist/engine/compiler/types.d.ts +30 -0
  56. package/dist/engine/compiler/types.d.ts.map +1 -0
  57. package/dist/engine/compiler/types.js +5 -0
  58. package/dist/engine/compiler/types.js.map +1 -0
  59. package/dist/engine/compiler/validate.d.ts +37 -0
  60. package/dist/engine/compiler/validate.d.ts.map +1 -0
  61. package/dist/engine/compiler/validate.js +141 -0
  62. package/dist/engine/compiler/validate.js.map +1 -0
  63. package/dist/engine/core/agent-generator.d.ts +11 -0
  64. package/dist/engine/core/agent-generator.d.ts.map +1 -0
  65. package/dist/engine/core/agent-generator.js +85 -0
  66. package/dist/engine/core/agent-generator.js.map +1 -0
  67. package/dist/engine/core/kernel.d.ts +69 -0
  68. package/dist/engine/core/kernel.d.ts.map +1 -0
  69. package/dist/engine/core/kernel.js +223 -0
  70. package/dist/engine/core/kernel.js.map +1 -0
  71. package/dist/engine/core/progression.d.ts +38 -0
  72. package/dist/engine/core/progression.d.ts.map +1 -0
  73. package/dist/engine/core/progression.js +292 -0
  74. package/dist/engine/core/progression.js.map +1 -0
  75. package/dist/engine/core/rng.d.ts +19 -0
  76. package/dist/engine/core/rng.d.ts.map +1 -0
  77. package/dist/engine/core/rng.js +34 -0
  78. package/dist/engine/core/rng.js.map +1 -0
  79. package/dist/engine/core/state.d.ts +144 -0
  80. package/dist/engine/core/state.d.ts.map +1 -0
  81. package/dist/engine/core/state.js +5 -0
  82. package/dist/engine/core/state.js.map +1 -0
  83. package/dist/engine/effect-registry.d.ts +14 -0
  84. package/dist/engine/effect-registry.d.ts.map +1 -0
  85. package/dist/engine/effect-registry.js +28 -0
  86. package/dist/engine/effect-registry.js.map +1 -0
  87. package/dist/engine/event-taxonomy.d.ts +9 -0
  88. package/dist/engine/event-taxonomy.d.ts.map +1 -0
  89. package/dist/engine/event-taxonomy.js +13 -0
  90. package/dist/engine/event-taxonomy.js.map +1 -0
  91. package/dist/engine/index.d.ts +25 -0
  92. package/dist/engine/index.d.ts.map +1 -0
  93. package/dist/engine/index.js +19 -0
  94. package/dist/engine/index.js.map +1 -0
  95. package/dist/engine/lunar/effects.d.ts +7 -0
  96. package/dist/engine/lunar/effects.d.ts.map +1 -0
  97. package/dist/engine/lunar/effects.js +16 -0
  98. package/dist/engine/lunar/effects.js.map +1 -0
  99. package/dist/engine/lunar/events.d.ts +3 -0
  100. package/dist/engine/lunar/events.d.ts.map +1 -0
  101. package/dist/engine/lunar/events.js +11 -0
  102. package/dist/engine/lunar/events.js.map +1 -0
  103. package/dist/engine/lunar/fingerprint.d.ts +5 -0
  104. package/dist/engine/lunar/fingerprint.d.ts.map +1 -0
  105. package/dist/engine/lunar/fingerprint.js +17 -0
  106. package/dist/engine/lunar/fingerprint.js.map +1 -0
  107. package/dist/engine/lunar/hooks.d.ts +10 -0
  108. package/dist/engine/lunar/hooks.d.ts.map +1 -0
  109. package/dist/engine/lunar/hooks.js +10 -0
  110. package/dist/engine/lunar/hooks.js.map +1 -0
  111. package/dist/engine/lunar/index.d.ts +8 -0
  112. package/dist/engine/lunar/index.d.ts.map +1 -0
  113. package/dist/engine/lunar/index.js +38 -0
  114. package/dist/engine/lunar/index.js.map +1 -0
  115. package/dist/engine/lunar/metrics.d.ts +4 -0
  116. package/dist/engine/lunar/metrics.d.ts.map +1 -0
  117. package/dist/engine/lunar/metrics.js +14 -0
  118. package/dist/engine/lunar/metrics.js.map +1 -0
  119. package/dist/engine/lunar/milestones.d.ts +3 -0
  120. package/dist/engine/lunar/milestones.d.ts.map +1 -0
  121. package/dist/engine/lunar/milestones.js +53 -0
  122. package/dist/engine/lunar/milestones.js.map +1 -0
  123. package/dist/engine/lunar/names.d.ts +4 -0
  124. package/dist/engine/lunar/names.d.ts.map +1 -0
  125. package/dist/engine/lunar/names.js +23 -0
  126. package/dist/engine/lunar/names.js.map +1 -0
  127. package/dist/engine/lunar/politics.d.ts +6 -0
  128. package/dist/engine/lunar/politics.d.ts.map +1 -0
  129. package/dist/engine/lunar/politics.js +13 -0
  130. package/dist/engine/lunar/politics.js.map +1 -0
  131. package/dist/engine/lunar/presets.d.ts +25 -0
  132. package/dist/engine/lunar/presets.d.ts.map +1 -0
  133. package/dist/engine/lunar/presets.js +24 -0
  134. package/dist/engine/lunar/presets.js.map +1 -0
  135. package/dist/engine/lunar/progression-hooks.d.ts +7 -0
  136. package/dist/engine/lunar/progression-hooks.d.ts.map +1 -0
  137. package/dist/engine/lunar/progression-hooks.js +20 -0
  138. package/dist/engine/lunar/progression-hooks.js.map +1 -0
  139. package/dist/engine/lunar/prompts.d.ts +10 -0
  140. package/dist/engine/lunar/prompts.d.ts.map +1 -0
  141. package/dist/engine/lunar/prompts.js +64 -0
  142. package/dist/engine/lunar/prompts.js.map +1 -0
  143. package/dist/engine/lunar/reactions.d.ts +5 -0
  144. package/dist/engine/lunar/reactions.d.ts.map +1 -0
  145. package/dist/engine/lunar/reactions.js +15 -0
  146. package/dist/engine/lunar/reactions.js.map +1 -0
  147. package/dist/engine/lunar/research-bundle.d.ts +8 -0
  148. package/dist/engine/lunar/research-bundle.d.ts.map +1 -0
  149. package/dist/engine/lunar/research-bundle.js +157 -0
  150. package/dist/engine/lunar/research-bundle.js.map +1 -0
  151. package/dist/engine/lunar/scenario.json +117 -0
  152. package/dist/engine/mars/effects.d.ts +18 -0
  153. package/dist/engine/mars/effects.d.ts.map +1 -0
  154. package/dist/engine/mars/effects.js +21 -0
  155. package/dist/engine/mars/effects.js.map +1 -0
  156. package/dist/engine/mars/events.d.ts +9 -0
  157. package/dist/engine/mars/events.d.ts.map +1 -0
  158. package/dist/engine/mars/events.js +12 -0
  159. package/dist/engine/mars/events.js.map +1 -0
  160. package/dist/engine/mars/fingerprint.d.ts +6 -0
  161. package/dist/engine/mars/fingerprint.d.ts.map +1 -0
  162. package/dist/engine/mars/fingerprint.js +21 -0
  163. package/dist/engine/mars/fingerprint.js.map +1 -0
  164. package/dist/engine/mars/hooks.d.ts +11 -0
  165. package/dist/engine/mars/hooks.d.ts.map +1 -0
  166. package/dist/engine/mars/hooks.js +11 -0
  167. package/dist/engine/mars/hooks.js.map +1 -0
  168. package/dist/engine/mars/index.d.ts +8 -0
  169. package/dist/engine/mars/index.d.ts.map +1 -0
  170. package/dist/engine/mars/index.js +44 -0
  171. package/dist/engine/mars/index.js.map +1 -0
  172. package/dist/engine/mars/metrics.d.ts +21 -0
  173. package/dist/engine/mars/metrics.d.ts.map +1 -0
  174. package/dist/engine/mars/metrics.js +25 -0
  175. package/dist/engine/mars/metrics.js.map +1 -0
  176. package/dist/engine/mars/milestones.d.ts +15 -0
  177. package/dist/engine/mars/milestones.d.ts.map +1 -0
  178. package/dist/engine/mars/milestones.js +72 -0
  179. package/dist/engine/mars/milestones.js.map +1 -0
  180. package/dist/engine/mars/names.d.ts +12 -0
  181. package/dist/engine/mars/names.d.ts.map +1 -0
  182. package/dist/engine/mars/names.js +45 -0
  183. package/dist/engine/mars/names.js.map +1 -0
  184. package/dist/engine/mars/politics.d.ts +7 -0
  185. package/dist/engine/mars/politics.d.ts.map +1 -0
  186. package/dist/engine/mars/politics.js +14 -0
  187. package/dist/engine/mars/politics.js.map +1 -0
  188. package/dist/engine/mars/presets.d.ts +29 -0
  189. package/dist/engine/mars/presets.d.ts.map +1 -0
  190. package/dist/engine/mars/presets.js +28 -0
  191. package/dist/engine/mars/presets.js.map +1 -0
  192. package/dist/engine/mars/progression-hooks.d.ts +8 -0
  193. package/dist/engine/mars/progression-hooks.d.ts.map +1 -0
  194. package/dist/engine/mars/progression-hooks.js +21 -0
  195. package/dist/engine/mars/progression-hooks.js.map +1 -0
  196. package/dist/engine/mars/prompts.d.ts +12 -0
  197. package/dist/engine/mars/prompts.d.ts.map +1 -0
  198. package/dist/engine/mars/prompts.js +75 -0
  199. package/dist/engine/mars/prompts.js.map +1 -0
  200. package/dist/engine/mars/reactions.d.ts +7 -0
  201. package/dist/engine/mars/reactions.d.ts.map +1 -0
  202. package/dist/engine/mars/reactions.js +24 -0
  203. package/dist/engine/mars/reactions.js.map +1 -0
  204. package/dist/engine/mars/research-bundle.d.ts +7 -0
  205. package/dist/engine/mars/research-bundle.d.ts.map +1 -0
  206. package/dist/engine/mars/research-bundle.js +174 -0
  207. package/dist/engine/mars/research-bundle.js.map +1 -0
  208. package/dist/engine/mars/scenario.json +118 -0
  209. package/dist/engine/metric-registry.d.ts +12 -0
  210. package/dist/engine/metric-registry.d.ts.map +1 -0
  211. package/dist/engine/metric-registry.js +26 -0
  212. package/dist/engine/metric-registry.js.map +1 -0
  213. package/dist/engine/types.d.ts +349 -0
  214. package/dist/engine/types.d.ts.map +1 -0
  215. package/dist/engine/types.js +7 -0
  216. package/dist/engine/types.js.map +1 -0
  217. package/dist/runtime/agent-memory.d.ts +43 -0
  218. package/dist/runtime/agent-memory.d.ts.map +1 -0
  219. package/dist/runtime/agent-memory.js +201 -0
  220. package/dist/runtime/agent-memory.js.map +1 -0
  221. package/dist/runtime/agent-reactions.d.ts +55 -0
  222. package/dist/runtime/agent-reactions.d.ts.map +1 -0
  223. package/dist/runtime/agent-reactions.js +136 -0
  224. package/dist/runtime/agent-reactions.js.map +1 -0
  225. package/dist/runtime/batch.d.ts +43 -0
  226. package/dist/runtime/batch.d.ts.map +1 -0
  227. package/dist/runtime/batch.js +49 -0
  228. package/dist/runtime/batch.js.map +1 -0
  229. package/dist/runtime/contracts.d.ts +127 -0
  230. package/dist/runtime/contracts.d.ts.map +1 -0
  231. package/dist/runtime/contracts.js +2 -0
  232. package/dist/runtime/contracts.js.map +1 -0
  233. package/dist/runtime/departments.d.ts +28 -0
  234. package/dist/runtime/departments.d.ts.map +1 -0
  235. package/dist/runtime/departments.js +111 -0
  236. package/dist/runtime/departments.js.map +1 -0
  237. package/dist/runtime/director.d.ts +92 -0
  238. package/dist/runtime/director.d.ts.map +1 -0
  239. package/dist/runtime/director.js +220 -0
  240. package/dist/runtime/director.js.map +1 -0
  241. package/dist/runtime/index.d.ts +16 -0
  242. package/dist/runtime/index.d.ts.map +1 -0
  243. package/dist/runtime/index.js +12 -0
  244. package/dist/runtime/index.js.map +1 -0
  245. package/dist/runtime/orchestrator.d.ts +66 -0
  246. package/dist/runtime/orchestrator.d.ts.map +1 -0
  247. package/dist/runtime/orchestrator.js +821 -0
  248. package/dist/runtime/orchestrator.js.map +1 -0
  249. package/dist/runtime/research/knowledge-base.d.ts +14 -0
  250. package/dist/runtime/research/knowledge-base.d.ts.map +1 -0
  251. package/dist/runtime/research/knowledge-base.js +229 -0
  252. package/dist/runtime/research/knowledge-base.js.map +1 -0
  253. package/dist/runtime/research/research-memory.d.ts +21 -0
  254. package/dist/runtime/research/research-memory.d.ts.map +1 -0
  255. package/dist/runtime/research/research-memory.js +118 -0
  256. package/dist/runtime/research/research-memory.js.map +1 -0
  257. package/dist/runtime/research/research.d.ts +4 -0
  258. package/dist/runtime/research/research.d.ts.map +1 -0
  259. package/dist/runtime/research/research.js +138 -0
  260. package/dist/runtime/research/research.js.map +1 -0
  261. package/dist/runtime/research/scenario-research.d.ts +13 -0
  262. package/dist/runtime/research/scenario-research.d.ts.map +1 -0
  263. package/dist/runtime/research/scenario-research.js +58 -0
  264. package/dist/runtime/research/scenario-research.js.map +1 -0
  265. package/dist/runtime/research/scenarios.d.ts +3 -0
  266. package/dist/runtime/research/scenarios.d.ts.map +1 -0
  267. package/dist/runtime/research/scenarios.js +252 -0
  268. package/dist/runtime/research/scenarios.js.map +1 -0
  269. package/dist/runtime/runtime-helpers.d.ts +12 -0
  270. package/dist/runtime/runtime-helpers.d.ts.map +1 -0
  271. package/dist/runtime/runtime-helpers.js +33 -0
  272. package/dist/runtime/runtime-helpers.js.map +1 -0
  273. package/package.json +78 -4
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Crisis Director — generates emergent crises per timeline based on colony state.
3
+ *
4
+ * Replaces static SCENARIOS for turns 2-11. Turn 1 (Landfall) and the final turn
5
+ * (Legacy Assessment) remain fixed milestones for narrative anchoring.
6
+ */
7
+ import type { Department, HexacoProfile, TurnOutcome } from '../engine/core/state.js';
8
+ import type { CrisisOption } from './contracts.js';
9
+ import type { LlmProvider } from '../engine/types.js';
10
+ /** Event category. Scenario-defined, not a fixed union. */
11
+ export type EventCategory = string;
12
+ /** @deprecated Use EventCategory */
13
+ export type CrisisCategory = EventCategory;
14
+ /** A turn event generated by the Event Director. */
15
+ export interface DirectorEvent {
16
+ title: string;
17
+ /** Event description presented to the commander */
18
+ description: string;
19
+ options: CrisisOption[];
20
+ riskyOptionId: string;
21
+ riskSuccessProbability: number;
22
+ category: string;
23
+ researchKeywords: string[];
24
+ relevantDepartments: Department[];
25
+ turnSummary: string;
26
+ }
27
+ /** @deprecated Use DirectorEvent */
28
+ export type DirectorCrisis = DirectorEvent & {
29
+ crisis?: string;
30
+ };
31
+ /** Context passed to the Event Director for generating turn events. */
32
+ export interface DirectorContext {
33
+ turn: number;
34
+ year: number;
35
+ leaderName: string;
36
+ leaderArchetype: string;
37
+ leaderHexaco: HexacoProfile;
38
+ /** Scenario state metrics (population, morale, resources, etc.) */
39
+ state: Record<string, number>;
40
+ /** Political/social state variables */
41
+ politics: Record<string, number | string | boolean>;
42
+ aliveCount: number;
43
+ /** Count of agents born at the settlement (vs arrived from elsewhere) */
44
+ nativeBornCount: number;
45
+ recentDeaths: number;
46
+ recentBirths: number;
47
+ previousEvents: Array<{
48
+ turn: number;
49
+ title: string;
50
+ category: string;
51
+ selectedOptionId?: string;
52
+ decision?: string;
53
+ outcome: TurnOutcome;
54
+ }>;
55
+ toolsForged: string[];
56
+ driftSummary: Array<{
57
+ name: string;
58
+ role: string;
59
+ openness: number;
60
+ conscientiousness: number;
61
+ }>;
62
+ /** Key outputs from forged tools last turn */
63
+ recentToolOutputs: Array<{
64
+ name: string;
65
+ department: string;
66
+ output: string;
67
+ }>;
68
+ /** Agent mood summary from last turn */
69
+ agentMoodSummary?: string;
70
+ /** @deprecated Use state */
71
+ colony?: Record<string, number>;
72
+ /** @deprecated Use previousEvents */
73
+ previousCrises?: DirectorContext['previousEvents'];
74
+ /** @deprecated Use nativeBornCount */
75
+ marsBornCount?: number;
76
+ }
77
+ export declare class EventDirector {
78
+ /**
79
+ * Generate a turn event. Uses AgentOS generateText().
80
+ */
81
+ generateEvent(ctx: DirectorContext, provider?: LlmProvider, model?: string, instructions?: string): Promise<DirectorEvent>;
82
+ /** @deprecated Use generateEvent */
83
+ generateCrisis(ctx: DirectorContext, provider?: LlmProvider, model?: string, instructions?: string): Promise<DirectorEvent>;
84
+ /**
85
+ * Get a milestone crisis (Turn 1 or final turn).
86
+ * These are fixed for narrative anchoring.
87
+ */
88
+ getMilestoneCrisis(turn: number, maxTurns: number): DirectorCrisis | null;
89
+ }
90
+ /** @deprecated Use EventDirector */
91
+ export declare const CrisisDirector: typeof EventDirector;
92
+ //# sourceMappingURL=director.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"director.d.ts","sourceRoot":"","sources":["../../src/runtime/director.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Crisis Director — generates emergent crises per timeline based on colony state.
3
+ *
4
+ * Replaces static SCENARIOS for turns 2-11. Turn 1 (Landfall) and the final turn
5
+ * (Legacy Assessment) remain fixed milestones for narrative anchoring.
6
+ */
7
+ import { SCENARIOS } from './research/scenarios.js';
8
+ const DEFAULT_DIRECTOR_INSTRUCTIONS = `You are the Event Director for a simulation. You observe simulation state and generate events that test the settlement's weaknesses, exploit consequences of prior decisions, and create narrative tension.
9
+
10
+ RULES:
11
+ 1. Each event has exactly 2-3 options with stable IDs (option_a, option_b, option_c)
12
+ 2. Exactly one option must be marked isRisky: true (higher upside, higher downside)
13
+ 3. Events must reference domain-appropriate knowledge
14
+ 4. Never repeat an event category from the immediately previous turn
15
+ 5. Escalate: later events should reference consequences of earlier decisions
16
+ 6. Calibrate difficulty to current state: struggling settlements get survivable events, thriving ones get existential ones
17
+ 7. Include actual state numbers in the event description
18
+ 8. Specify which departments should analyze (2-4 departments per event)
19
+
20
+ Return ONLY valid JSON:
21
+ {"title":"Event Title","description":"Full description with specific state numbers...","options":[{"id":"option_a","label":"Option Label","description":"What this option does","isRisky":false},{"id":"option_b","label":"Risky Option","description":"Higher upside, higher risk","isRisky":true}],"riskyOptionId":"option_b","riskSuccessProbability":0.55,"category":"environmental","researchKeywords":["keyword"],"relevantDepartments":["dept_id"],"turnSummary":"One sentence: why this event emerged from prior decisions"}`;
22
+ /** Build the prompt for the director given simulation context. */
23
+ function buildDirectorPrompt(ctx) {
24
+ const events = ctx.previousEvents ?? ctx.previousCrises ?? [];
25
+ const prevHistory = events.length
26
+ ? events.map(e => ` Turn ${e.turn}: "${e.title}" (${e.category}) -> ${e.outcome}${e.decision ? ': ' + e.decision.slice(0, 80) : ''}`).join('\n')
27
+ : ' None yet (this is the first emergent turn)';
28
+ const prevCategories = events.map(e => e.category);
29
+ const lastCategory = prevCategories[prevCategories.length - 1] || 'none';
30
+ // Build state summary from generic key-value pairs
31
+ const stateLines = Object.entries(ctx.state).map(([k, v]) => {
32
+ const display = typeof v === 'number' && v < 1 && v > 0 ? `${Math.round(v * 100)}%` : String(v);
33
+ return `- ${k}: ${display}`;
34
+ }).join('\n');
35
+ const politicsLines = Object.entries(ctx.politics).map(([k, v]) => {
36
+ const display = typeof v === 'number' && v < 1 && v > 0 ? `${Math.round(v * 100)}%` : String(v);
37
+ return `- ${k}: ${display}`;
38
+ }).join('\n');
39
+ return `GENERATE EVENT FOR TURN ${ctx.turn}, YEAR ${ctx.year}
40
+
41
+ SIMULATION STATE:
42
+ - Commander: ${ctx.leaderName} (${ctx.leaderArchetype})
43
+ - Population: ${ctx.aliveCount} alive (${ctx.nativeBornCount} native-born)
44
+ - Recent: +${ctx.recentBirths} births, -${ctx.recentDeaths} deaths
45
+ ${stateLines}
46
+ ${politicsLines ? `\nPOLITICS/SOCIAL:\n${politicsLines}` : ''}
47
+ - Tools forged so far: ${ctx.toolsForged.length}
48
+
49
+ COMMANDER PERSONALITY (HEXACO):
50
+ O: ${ctx.leaderHexaco.openness.toFixed(2)} C: ${ctx.leaderHexaco.conscientiousness.toFixed(2)} E: ${ctx.leaderHexaco.extraversion.toFixed(2)}
51
+ A: ${ctx.leaderHexaco.agreeableness.toFixed(2)} Em: ${ctx.leaderHexaco.emotionality.toFixed(2)} HH: ${ctx.leaderHexaco.honestyHumility.toFixed(2)}
52
+
53
+ DECISION HISTORY:
54
+ ${prevHistory}
55
+ ${ctx.recentToolOutputs.length ? `\nTOOL INTELLIGENCE (what department agents computed last turn):\n${ctx.recentToolOutputs.slice(0, 4).map(t => ` [${t.department}] ${t.name}: ${t.output.slice(0, 120)}`).join('\n')}\nUse these findings to generate an event that follows from what the tools revealed.` : ''}
56
+ ${ctx.agentMoodSummary ? `\nAGENT MOOD: ${ctx.agentMoodSummary}` : ''}
57
+
58
+ CONSTRAINT: Do NOT use category "${lastCategory}" (used last turn). Pick a different category.
59
+
60
+ Generate an event that tests this settlement based on its current state, past decisions, and tool intelligence. The event should feel like a consequence of what happened before. Return JSON only.`;
61
+ }
62
+ /** Parse director LLM response into DirectorCrisis. */
63
+ function parseDirectorResponse(text) {
64
+ // Try to extract JSON
65
+ let depth = 0, start = -1;
66
+ for (let i = 0; i < text.length; i++) {
67
+ if (text[i] === '{') {
68
+ if (depth === 0)
69
+ start = i;
70
+ depth++;
71
+ }
72
+ if (text[i] === '}') {
73
+ depth--;
74
+ if (depth === 0 && start >= 0) {
75
+ try {
76
+ const raw = JSON.parse(text.slice(start, i + 1));
77
+ if (raw.title && (raw.description || raw.crisis) && raw.options) {
78
+ return {
79
+ title: raw.title,
80
+ description: raw.description || raw.crisis,
81
+ crisis: raw.crisis || raw.description,
82
+ options: (raw.options || []).map((o, idx) => ({
83
+ id: o.id || `option_${String.fromCharCode(97 + idx)}`,
84
+ label: o.label || `Option ${String.fromCharCode(65 + idx)}`,
85
+ description: o.description || '',
86
+ isRisky: o.isRisky === true,
87
+ })),
88
+ riskyOptionId: raw.riskyOptionId || raw.options?.find((o) => o.isRisky)?.id || 'option_b',
89
+ riskSuccessProbability: typeof raw.riskSuccessProbability === 'number' ? raw.riskSuccessProbability : 0.5,
90
+ category: raw.category || 'infrastructure',
91
+ researchKeywords: raw.researchKeywords || [],
92
+ relevantDepartments: raw.relevantDepartments || ['medical', 'engineering'],
93
+ turnSummary: raw.turnSummary || '',
94
+ };
95
+ }
96
+ }
97
+ catch { /* try next block */ }
98
+ start = -1;
99
+ }
100
+ }
101
+ }
102
+ return null;
103
+ }
104
+ /** Fallback events if director fails. */
105
+ const FALLBACK_EVENTS = [
106
+ {
107
+ title: 'System Malfunction',
108
+ description: 'A critical support component has developed an intermittent failure. Operating at 60% efficiency. Reserves are becoming dangerously low.',
109
+ options: [
110
+ { id: 'option_a', label: 'Emergency repair', description: 'Divert all engineering to immediate repair. Safe but halts all other construction for 2 weeks.', isRisky: false },
111
+ { id: 'option_b', label: 'Improvised bypass', description: 'Build a bypass from non-standard parts. Faster but untested. Could fail catastrophically.', isRisky: true },
112
+ ],
113
+ riskyOptionId: 'option_b', riskSuccessProbability: 0.5, category: 'infrastructure',
114
+ researchKeywords: ['life support failure', 'ECLSS redundancy'], relevantDepartments: ['engineering', 'medical'],
115
+ turnSummary: 'Infrastructure strain triggered a life support component failure.',
116
+ },
117
+ {
118
+ title: 'Supply Shortage',
119
+ description: 'Unexpected contamination of reserves has rendered 30% of stored supplies unusable. The settlement must decide how to manage the shortfall.',
120
+ options: [
121
+ { id: 'option_a', label: 'Strict rationing', description: 'Reduce caloric intake by 25% colony-wide for 3 months. Morale will drop.', isRisky: false },
122
+ { id: 'option_b', label: 'Emergency crop acceleration', description: 'Boost grow lights to 24/7, triple nutrient concentration. Could yield 2x harvest or kill the crops.', isRisky: true },
123
+ ],
124
+ riskyOptionId: 'option_b', riskSuccessProbability: 0.55, category: 'resource',
125
+ researchKeywords: ['food security mars', 'hydroponic acceleration'], relevantDepartments: ['agriculture', 'medical'],
126
+ turnSummary: 'Food contamination created an unexpected supply crisis.',
127
+ },
128
+ {
129
+ title: 'Social Unrest',
130
+ description: 'Tensions between work crews have escalated into a refusal to cooperate. Two factions have formed around competing visions. Productivity has dropped 40%.',
131
+ options: [
132
+ { id: 'option_a', label: 'Mediation program', description: 'Mandatory conflict resolution sessions. Slow but addresses root causes.', isRisky: false },
133
+ { id: 'option_b', label: 'Restructure work crews', description: 'Break up existing teams and reassign. Disrupts established relationships.', isRisky: true },
134
+ ],
135
+ riskyOptionId: 'option_b', riskSuccessProbability: 0.45, category: 'psychological',
136
+ researchKeywords: ['group conflict isolation', 'crew cohesion'], relevantDepartments: ['psychology', 'governance'],
137
+ turnSummary: 'Accumulated social pressure erupted into factional conflict.',
138
+ },
139
+ ];
140
+ export class EventDirector {
141
+ /**
142
+ * Generate a turn event. Uses AgentOS generateText().
143
+ */
144
+ async generateEvent(ctx, provider = 'openai', model = 'gpt-5.4', instructions) {
145
+ const prompt = buildDirectorPrompt(ctx);
146
+ const systemInstructions = instructions || DEFAULT_DIRECTOR_INSTRUCTIONS;
147
+ try {
148
+ const { generateText } = await import('@framers/agentos');
149
+ const result = await generateText({
150
+ provider,
151
+ model,
152
+ prompt: systemInstructions + '\n\n' + prompt,
153
+ });
154
+ const event = parseDirectorResponse(result.text);
155
+ if (event) {
156
+ console.log(` [director] Generated: "${event.title}" (${event.category}) for ${ctx.leaderName}`);
157
+ return event;
158
+ }
159
+ console.log(` [director] Failed to parse response for ${ctx.leaderName}, using fallback`);
160
+ }
161
+ catch (err) {
162
+ console.log(` [director] Error for ${ctx.leaderName}: ${err}`);
163
+ }
164
+ // Fallback
165
+ const fallback = FALLBACK_EVENTS[ctx.turn % FALLBACK_EVENTS.length];
166
+ console.log(` [director] Using fallback: "${fallback.title}"`);
167
+ return { ...fallback };
168
+ }
169
+ /** @deprecated Use generateEvent */
170
+ async generateCrisis(ctx, provider = 'openai', model = 'gpt-5.4', instructions) {
171
+ return this.generateEvent(ctx, provider, model, instructions);
172
+ }
173
+ /**
174
+ * Get a milestone crisis (Turn 1 or final turn).
175
+ * These are fixed for narrative anchoring.
176
+ */
177
+ getMilestoneCrisis(turn, maxTurns) {
178
+ if (turn === 1) {
179
+ const s = SCENARIOS[0];
180
+ return {
181
+ title: s.title,
182
+ description: s.crisis,
183
+ crisis: s.crisis,
184
+ options: s.options || [
185
+ { id: 'option_a', label: 'Arcadia Planitia', description: 'Flat basalt plains, safe, ice access', isRisky: false },
186
+ { id: 'option_b', label: 'Valles Marineris rim', description: 'Canyon rim, mineral rich, hazardous terrain', isRisky: true },
187
+ ],
188
+ riskyOptionId: 'option_b',
189
+ riskSuccessProbability: s.riskSuccessProbability,
190
+ category: 'infrastructure',
191
+ researchKeywords: s.researchKeywords,
192
+ relevantDepartments: ['medical', 'engineering'],
193
+ turnSummary: 'Colony ship in orbit. Safe plains or mineral-rich canyon rim: the first decision shapes everything.',
194
+ };
195
+ }
196
+ if (turn === maxTurns) {
197
+ const s = SCENARIOS[11]; // Legacy Assessment
198
+ const crisisText = s?.crisis || 'Earth requests a comprehensive status report on your colony. Assess your legacy.';
199
+ return {
200
+ title: s?.title || 'Legacy Assessment',
201
+ description: crisisText,
202
+ crisis: crisisText,
203
+ options: [
204
+ { id: 'option_a', label: 'Honest assessment', description: 'Report factually, including failures and regrets', isRisky: false },
205
+ { id: 'option_b', label: 'Ambitious projection', description: 'Emphasize achievements, propose bold next-century vision', isRisky: true },
206
+ ],
207
+ riskyOptionId: 'option_b',
208
+ riskSuccessProbability: 0.5,
209
+ category: 'political',
210
+ researchKeywords: ['Mars colony long-term projections'],
211
+ relevantDepartments: ['governance', 'psychology', 'medical', 'engineering'],
212
+ turnSummary: 'Earth demands a full status report. The commander must decide: honest accounting of failures, or bold vision for the next century.',
213
+ };
214
+ }
215
+ return null; // Not a milestone turn
216
+ }
217
+ }
218
+ /** @deprecated Use EventDirector */
219
+ export const CrisisDirector = EventDirector;
220
+ //# sourceMappingURL=director.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"director.js","sourceRoot":"","sources":["../../src/runtime/director.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAgEpD,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;qgBAa+d,CAAC;AAEtgB,kEAAkE;AAClE,SAAS,mBAAmB,CAAC,GAAoB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;IAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM;QAC/B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACjJ,CAAC,CAAC,8CAA8C,CAAC;IAEnD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;IAEzE,mDAAmD;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,2BAA2B,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI;;;eAG/C,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,eAAe;gBACrC,GAAG,CAAC,UAAU,WAAW,GAAG,CAAC,eAAe;aAC/C,GAAG,CAAC,YAAY,aAAa,GAAG,CAAC,YAAY;EACxD,UAAU;EACV,aAAa,CAAC,CAAC,CAAC,uBAAuB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;yBACpC,GAAG,CAAC,WAAW,CAAC,MAAM;;;KAG1C,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;KACvI,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;;;EAG/I,WAAW;EACX,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,qEAAqE,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC,CAAC,EAAE;EAChT,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;;mCAElC,YAAY;;oMAEqJ,CAAC;AACrM,CAAC;AAED,uDAAuD;AACvD,SAAS,qBAAqB,CAAC,IAAY;IACzC,sBAAsB;IACtB,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,IAAI,KAAK,KAAK,CAAC;gBAAE,KAAK,GAAG,CAAC,CAAC;YAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACjD,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;wBAChE,OAAO;4BACL,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM;4BAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW;4BACrC,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC;gCACzD,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,UAAU,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;gCACrD,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,UAAU,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;gCAC3D,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;gCAChC,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,IAAI;6BAC5B,CAAC,CAAC;4BACH,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,UAAU;4BAC9F,sBAAsB,EAAE,OAAO,GAAG,CAAC,sBAAsB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG;4BACzG,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,gBAAgB;4BAC1C,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,IAAI,EAAE;4BAC5C,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;4BAC1E,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;yBACnC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;gBAChC,KAAK,GAAG,CAAC,CAAC,CAAC;YACb,CAAC;QAAA,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yCAAyC;AACzC,MAAM,eAAe,GAAoB;IACvC;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,yIAAyI;QACtJ,OAAO,EAAE;YACP,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,gGAAgG,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5K,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,2FAA2F,EAAE,OAAO,EAAE,IAAI,EAAE;SACxK;QACD,aAAa,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB;QAClF,gBAAgB,EAAE,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,EAAE,mBAAmB,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;QAC/G,WAAW,EAAE,mEAAmE;KACjF;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,4IAA4I;QACzJ,OAAO,EAAE;YACP,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,0EAA0E,EAAE,OAAO,EAAE,KAAK,EAAE;YACtJ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,6BAA6B,EAAE,WAAW,EAAE,qGAAqG,EAAE,OAAO,EAAE,IAAI,EAAE;SAC5L;QACD,aAAa,EAAE,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU;QAC7E,gBAAgB,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,EAAE,mBAAmB,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;QACpH,WAAW,EAAE,yDAAyD;KACvE;IACD;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,0JAA0J;QACvK,OAAO,EAAE;YACP,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,yEAAyE,EAAE,OAAO,EAAE,KAAK,EAAE;YACtJ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,2EAA2E,EAAE,OAAO,EAAE,IAAI,EAAE;SAC7J;QACD,aAAa,EAAE,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe;QAClF,gBAAgB,EAAE,CAAC,0BAA0B,EAAE,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;QAClH,WAAW,EAAE,8DAA8D;KAC5E;CACF,CAAC;AAEF,MAAM,OAAO,aAAa;IACxB;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,GAAoB,EAAE,WAAwB,QAAQ,EAAE,QAAgB,SAAS,EAAE,YAAqB;QAC1H,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,kBAAkB,GAAG,YAAY,IAAI,6BAA6B,CAAC;QAEzE,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,QAAQ;gBACR,KAAK;gBACL,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,MAAM;aAC7C,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,QAAQ,SAAS,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBAClG,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,6CAA6C,GAAG,CAAC,UAAU,kBAAkB,CAAC,CAAC;QAC7F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QAChE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,cAAc,CAAC,GAAoB,EAAE,WAAwB,QAAQ,EAAE,QAAgB,SAAS,EAAE,YAAqB;QAC3H,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,IAAY,EAAE,QAAgB;QAC/C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,MAAM;gBACrB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI;oBACpB,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,sCAAsC,EAAE,OAAO,EAAE,KAAK,EAAE;oBAClH,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,6CAA6C,EAAE,OAAO,EAAE,IAAI,EAAE;iBAC7H;gBACD,aAAa,EAAE,UAAU;gBACzB,sBAAsB,EAAE,CAAC,CAAC,sBAAsB;gBAChD,QAAQ,EAAE,gBAAgB;gBAC1B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;gBACpC,mBAAmB,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;gBAC/C,WAAW,EAAE,qGAAqG;aACnH,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;YAC7C,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,IAAI,kFAAkF,CAAC;YACnH,OAAO;gBACL,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,mBAAmB;gBACtC,WAAW,EAAE,UAAU;gBACvB,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE;oBACP,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,kDAAkD,EAAE,OAAO,EAAE,KAAK,EAAE;oBAC/H,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,0DAA0D,EAAE,OAAO,EAAE,IAAI,EAAE;iBAC1I;gBACD,aAAa,EAAE,UAAU;gBACzB,sBAAsB,EAAE,GAAG;gBAC3B,QAAQ,EAAE,WAAW;gBACrB,gBAAgB,EAAE,CAAC,mCAAmC,CAAC;gBACvD,mBAAmB,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,CAAC;gBAC3E,WAAW,EAAE,oIAAoI;aAClJ,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,uBAAuB;IACtC,CAAC;CACF;AAED,oCAAoC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Paracosm Runtime — orchestration layer
3
+ *
4
+ * Run simulations with AI agents, crisis directors, and department analysis.
5
+ */
6
+ export { runSimulation } from './orchestrator.js';
7
+ export type { RunOptions, SimEvent, LeaderConfig } from './orchestrator.js';
8
+ export { EventDirector, CrisisDirector } from './director.js';
9
+ export type { DirectorEvent, DirectorCrisis, DirectorContext, EventCategory, CrisisCategory } from './director.js';
10
+ export type { DepartmentReport, CommanderDecision, TurnArtifact, CrisisResearchPacket } from './contracts.js';
11
+ export { buildDepartmentContext, getDepartmentsForTurn } from './departments.js';
12
+ export { generateAgentReactions } from './agent-reactions.js';
13
+ export { runBatch } from './batch.js';
14
+ export type { BatchConfig, BatchResult, BatchManifest } from './batch.js';
15
+ export { recordReactionMemory, consolidateMemory, updateRelationshipsFromReactions, buildMemoryContext } from './agent-memory.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnH,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC9G,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Paracosm Runtime — orchestration layer
3
+ *
4
+ * Run simulations with AI agents, crisis directors, and department analysis.
5
+ */
6
+ export { runSimulation } from './orchestrator.js';
7
+ export { EventDirector, CrisisDirector } from './director.js';
8
+ export { buildDepartmentContext, getDepartmentsForTurn } from './departments.js';
9
+ export { generateAgentReactions } from './agent-reactions.js';
10
+ export { runBatch } from './batch.js';
11
+ export { recordReactionMemory, consolidateMemory, updateRelationshipsFromReactions, buildMemoryContext } from './agent-memory.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { Department, TurnOutcome } from '../engine/core/state.js';
2
+ import type { TurnArtifact } from './contracts.js';
3
+ import type { KeyPersonnel } from '../engine/core/agent-generator.js';
4
+ import type { ScenarioPackage } from '../engine/types.js';
5
+ import type { LlmProvider, SimulationModelConfig } from '../engine/types.js';
6
+ import { type SimulationExecutionConfig, type StartingPolitics, type StartingResources } from '../cli/sim-config.js';
7
+ import type { LeaderConfig } from '../engine/types.js';
8
+ export type { LeaderConfig };
9
+ export type SimEvent = {
10
+ type: 'turn_start' | 'dept_start' | 'dept_done' | 'forge_attempt' | 'commander_deciding' | 'commander_decided' | 'outcome' | 'drift' | 'agent_reactions' | 'bulletin' | 'turn_done' | 'promotion';
11
+ leader: string;
12
+ turn?: number;
13
+ year?: number;
14
+ data?: Record<string, unknown>;
15
+ };
16
+ export interface RunOptions {
17
+ maxTurns?: number;
18
+ seed?: number;
19
+ startYear?: number;
20
+ yearsPerTurn?: number;
21
+ liveSearch?: boolean;
22
+ activeDepartments?: Department[];
23
+ provider?: LlmProvider;
24
+ onEvent?: (event: SimEvent) => void;
25
+ customEvents?: Array<{
26
+ turn: number;
27
+ title: string;
28
+ description: string;
29
+ }>;
30
+ models?: Partial<SimulationModelConfig>;
31
+ initialPopulation?: number;
32
+ startingResources?: StartingResources;
33
+ startingPolitics?: StartingPolitics;
34
+ execution?: Partial<SimulationExecutionConfig>;
35
+ scenario?: ScenarioPackage;
36
+ }
37
+ export declare function runSimulation(leader: LeaderConfig, keyPersonnel: KeyPersonnel[], opts?: RunOptions): Promise<{
38
+ simulation: string;
39
+ leader: {
40
+ name: string;
41
+ archetype: string;
42
+ colony: string;
43
+ hexaco: import("../engine/index.js").HexacoProfile;
44
+ };
45
+ turnArtifacts: TurnArtifact[];
46
+ finalState: import("../engine/index.js").SimulationState;
47
+ toolRegistries: Record<string, string[]>;
48
+ agentTrajectories: {
49
+ [k: string]: {
50
+ name: string;
51
+ promotedTurn: number;
52
+ promotedAs: string;
53
+ promotedBy: string;
54
+ hexacoTrajectory: import("../engine/index.js").HexacoSnapshot[];
55
+ };
56
+ };
57
+ outcomeClassifications: {
58
+ turn: number;
59
+ year: number;
60
+ outcome: TurnOutcome;
61
+ }[];
62
+ fingerprint: Record<string, string>;
63
+ totalCitations: number;
64
+ totalToolsForged: number;
65
+ }>;
66
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/runtime/orchestrator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGvE,OAAO,KAAK,EAAuC,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAQtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,CAAC;AAiS7B,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IAClM,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE,UAAe;;;;;;;;;;;;;;;;;;;;;cA6G3E,MAAM;cAAQ,MAAM;iBAAW,WAAW;;;;;GAib3E"}