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,270 @@
1
+ /**
2
+ * Paracosm Scenario Compiler
3
+ *
4
+ * Takes a raw scenario JSON (the data portion of a ScenarioPackage) and generates
5
+ * all runtime hooks via LLM calls. Returns a complete ScenarioPackage ready to
6
+ * pass to runSimulation().
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { compileScenario } from 'paracosm/compiler';
11
+ * import { runSimulation } from 'paracosm/runtime';
12
+ *
13
+ * const scenario = await compileScenario(submarineJson, {
14
+ * provider: 'anthropic',
15
+ * model: 'claude-sonnet-4-6',
16
+ * });
17
+ *
18
+ * const output = await runSimulation(leader, personnel, { scenario, maxTurns: 8 });
19
+ * ```
20
+ */
21
+ import { readCache, writeCache } from './cache.js';
22
+ import { generateProgressionHook, parseResponse as parseProgression } from './generate-progression.js';
23
+ import { generateDirectorInstructions } from './generate-director.js';
24
+ import { generateMilestones, parseMilestones } from './generate-milestones.js';
25
+ import { generateFingerprintHook, parseResponse as parseFingerprint } from './generate-fingerprint.js';
26
+ import { generatePoliticsHook, parseResponse as parsePolitics } from './generate-politics.js';
27
+ import { generateReactionContextHook, parseResponse as parseReactions } from './generate-reactions.js';
28
+ import { ingestSeed, ingestFromUrl } from './seed-ingestion.js';
29
+ import { generateDepartmentPromptHook, parseResponse as parsePrompts } from './generate-prompts.js';
30
+ export { ingestSeed, ingestFromUrl } from './seed-ingestion.js';
31
+ /** Build a default generateText function using AgentOS. */
32
+ async function buildDefaultGenerateText(provider, model) {
33
+ const { generateText } = await import('@framers/agentos');
34
+ return async (prompt) => {
35
+ const result = await generateText({ provider, model, prompt });
36
+ return result.text;
37
+ };
38
+ }
39
+ /** Hook names in generation order. */
40
+ const HOOK_NAMES = [
41
+ 'progression',
42
+ 'director',
43
+ 'prompts',
44
+ 'milestones',
45
+ 'fingerprint',
46
+ 'politics',
47
+ 'reactions',
48
+ ];
49
+ /** Restore a hook from cached source text. Returns the hook assignment or null if parse fails. */
50
+ function restoreHookFromCache(hookName, source) {
51
+ try {
52
+ switch (hookName) {
53
+ case 'progression': {
54
+ const fn = parseProgression(source);
55
+ return fn ? { progressionHook: fn } : null;
56
+ }
57
+ case 'director': {
58
+ const cleaned = source.trim();
59
+ return cleaned.length > 50 ? { directorInstructions: () => cleaned } : null;
60
+ }
61
+ case 'prompts': {
62
+ const fn = parsePrompts(source);
63
+ return fn ? { departmentPromptHook: fn } : null;
64
+ }
65
+ case 'milestones': {
66
+ const result = parseMilestones(source);
67
+ if (!result)
68
+ return null;
69
+ const [founding, legacy] = result;
70
+ return {
71
+ getMilestoneEvent: (turn, maxTurns) => {
72
+ if (turn === 1)
73
+ return founding;
74
+ if (turn === maxTurns)
75
+ return legacy;
76
+ return null;
77
+ },
78
+ };
79
+ }
80
+ case 'fingerprint': {
81
+ const fn = parseFingerprint(source);
82
+ return fn ? { fingerprintHook: fn } : null;
83
+ }
84
+ case 'politics': {
85
+ const fn = parsePolitics(source);
86
+ return fn ? { politicsHook: fn } : null;
87
+ }
88
+ case 'reactions': {
89
+ const fn = parseReactions(source);
90
+ return fn ? { reactionContextHook: fn } : null;
91
+ }
92
+ default:
93
+ return null;
94
+ }
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /**
101
+ * Compile a scenario JSON into a complete ScenarioPackage with generated hooks.
102
+ *
103
+ * @param scenarioJson - The data portion of a scenario (labels, departments, metrics, effects, etc.)
104
+ * @param options - Compiler options (provider, model, cache settings)
105
+ * @returns A complete ScenarioPackage ready for runSimulation()
106
+ */
107
+ export async function compileScenario(scenarioJson, options = {}) {
108
+ const { provider = 'anthropic', model = 'claude-sonnet-4-6', cache = true, cacheDir = '.paracosm/cache', onProgress, } = options;
109
+ const genText = options.generateText ?? await buildDefaultGenerateText(provider, model);
110
+ const json = scenarioJson;
111
+ const hooks = {};
112
+ // Generate each hook, using cache when available
113
+ for (const hookName of HOOK_NAMES) {
114
+ // Try to restore from cache first
115
+ if (cache) {
116
+ const cached = readCache(json, hookName, model, cacheDir);
117
+ if (cached !== null) {
118
+ const restored = restoreHookFromCache(hookName, cached);
119
+ if (restored) {
120
+ onProgress?.(hookName, 'cached');
121
+ Object.assign(hooks, restored);
122
+ continue;
123
+ }
124
+ }
125
+ }
126
+ onProgress?.(hookName, 'generating');
127
+ switch (hookName) {
128
+ case 'progression': {
129
+ const result = await generateProgressionHook(json, genText);
130
+ hooks.progressionHook = result.hook;
131
+ if (cache)
132
+ writeCache(json, hookName, result.source, model, cacheDir);
133
+ break;
134
+ }
135
+ case 'director': {
136
+ const result = await generateDirectorInstructions(json, genText);
137
+ hooks.directorInstructions = result.hook;
138
+ if (cache)
139
+ writeCache(json, hookName, result.source, model, cacheDir);
140
+ break;
141
+ }
142
+ case 'prompts': {
143
+ const result = await generateDepartmentPromptHook(json, genText);
144
+ hooks.departmentPromptHook = result.hook;
145
+ if (cache)
146
+ writeCache(json, hookName, result.source, model, cacheDir);
147
+ break;
148
+ }
149
+ case 'milestones': {
150
+ const result = await generateMilestones(json, genText);
151
+ hooks.getMilestoneEvent = result.hook;
152
+ if (cache)
153
+ writeCache(json, hookName, result.source, model, cacheDir);
154
+ break;
155
+ }
156
+ case 'fingerprint': {
157
+ const result = await generateFingerprintHook(json, genText);
158
+ hooks.fingerprintHook = result.hook;
159
+ if (cache)
160
+ writeCache(json, hookName, result.source, model, cacheDir);
161
+ break;
162
+ }
163
+ case 'politics': {
164
+ const result = await generatePoliticsHook(json, genText);
165
+ hooks.politicsHook = result.hook;
166
+ if (cache)
167
+ writeCache(json, hookName, result.source, model, cacheDir);
168
+ break;
169
+ }
170
+ case 'reactions': {
171
+ const result = await generateReactionContextHook(json, genText);
172
+ hooks.reactionContextHook = result.hook;
173
+ if (cache)
174
+ writeCache(json, hookName, result.source, model, cacheDir);
175
+ break;
176
+ }
177
+ }
178
+ onProgress?.(hookName, 'done');
179
+ }
180
+ // Seed ingestion: enrich knowledge bundle from document or URL
181
+ let knowledge = json.knowledge ?? { topics: {}, categoryMapping: {} };
182
+ if (options.seedUrl) {
183
+ onProgress?.('seed-ingestion', 'generating');
184
+ const seedBundle = await ingestFromUrl(options.seedUrl, {
185
+ generateText: genText,
186
+ webSearch: options.webSearch ?? true,
187
+ maxSearches: options.maxSearches ?? 5,
188
+ onProgress: (step, status) => onProgress?.(`seed-${step}`, status === 'start' ? 'generating' : 'done'),
189
+ });
190
+ knowledge = mergeKnowledgeBundles(knowledge, seedBundle);
191
+ onProgress?.('seed-ingestion', 'done');
192
+ }
193
+ else if (options.seedText) {
194
+ onProgress?.('seed-ingestion', 'generating');
195
+ const seedBundle = await ingestSeed(options.seedText, {
196
+ generateText: genText,
197
+ webSearch: options.webSearch ?? true,
198
+ maxSearches: options.maxSearches ?? 5,
199
+ onProgress: (step, status) => onProgress?.(`seed-${step}`, status === 'start' ? 'generating' : 'done'),
200
+ });
201
+ knowledge = mergeKnowledgeBundles(knowledge, seedBundle);
202
+ onProgress?.('seed-ingestion', 'done');
203
+ }
204
+ // Build world schema from metrics if not already structured
205
+ const world = json.world ?? {
206
+ metrics: {},
207
+ capacities: {},
208
+ statuses: {},
209
+ politics: {},
210
+ environment: {},
211
+ };
212
+ // Build effects array
213
+ const effects = Array.isArray(json.effects)
214
+ ? json.effects
215
+ : json.effects && typeof json.effects === 'object'
216
+ ? [{ id: 'category_effects', type: 'category_outcome', label: 'Category Outcome Effects', categoryDefaults: json.effects }]
217
+ : [];
218
+ // Build UI definition
219
+ const ui = {
220
+ ...(json.ui ?? {}),
221
+ eventRenderers: Object.fromEntries((json.events ?? []).map((e) => [e.id, { icon: e.icon, color: e.color }])),
222
+ };
223
+ return {
224
+ id: json.id ?? 'compiled-scenario',
225
+ version: json.version ?? '1.0.0',
226
+ engineArchetype: json.engineArchetype ?? 'closed_turn_based_settlement',
227
+ labels: json.labels ?? { name: 'Compiled Scenario', shortName: 'compiled', populationNoun: 'members', settlementNoun: 'settlement', currency: 'credits' },
228
+ theme: json.theme ?? { primaryColor: '#6366f1', accentColor: '#818cf8', cssVariables: {} },
229
+ setup: json.setup ?? { defaultTurns: 8, defaultSeed: 100, defaultStartYear: 2040, defaultPopulation: 50, configurableSections: ['leaders', 'departments', 'models'] },
230
+ world,
231
+ departments: json.departments ?? [],
232
+ metrics: json.metrics ?? [],
233
+ events: json.events ?? [],
234
+ effects,
235
+ ui,
236
+ knowledge,
237
+ policies: json.policies ?? {
238
+ toolForging: { enabled: true },
239
+ liveSearch: { enabled: false, mode: 'off' },
240
+ bulletin: { enabled: true },
241
+ characterChat: { enabled: true },
242
+ sandbox: { timeoutMs: 10000, memoryMB: 128 },
243
+ },
244
+ presets: json.presets ?? [],
245
+ hooks,
246
+ };
247
+ }
248
+ /** Merge two knowledge bundles, combining topics and category mappings. */
249
+ function mergeKnowledgeBundles(base, overlay) {
250
+ const topics = { ...base.topics };
251
+ for (const [key, topic] of Object.entries(overlay.topics)) {
252
+ if (topics[key]) {
253
+ // Merge citations into existing topic
254
+ topics[key] = {
255
+ ...topics[key],
256
+ canonicalFacts: [...(topics[key].canonicalFacts || []), ...(topic.canonicalFacts || [])],
257
+ counterpoints: [...(topics[key].counterpoints || []), ...(topic.counterpoints || [])],
258
+ };
259
+ }
260
+ else {
261
+ topics[key] = topic;
262
+ }
263
+ }
264
+ const categoryMapping = { ...base.categoryMapping };
265
+ for (const [cat, topicIds] of Object.entries(overlay.categoryMapping)) {
266
+ categoryMapping[cat] = [...new Set([...(categoryMapping[cat] || []), ...topicIds])];
267
+ }
268
+ return { topics, categoryMapping };
269
+ }
270
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/compiler/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Real-World Seed Ingestion
3
+ *
4
+ * Accepts a document (text, markdown, or URL) and uses it to enrich
5
+ * a scenario's knowledge bundle via:
6
+ *
7
+ * 1. LLM extraction: extract entities, facts, and domain knowledge from the seed
8
+ * 2. Optional web search: use AgentOS WebSearchService (Tavily, Firecrawl, Serper, Brave)
9
+ * with Cohere neural reranking to find real citations grounding the seed material
10
+ * 3. Knowledge bundle assembly: structure extracted + searched knowledge into
11
+ * KnowledgeBundle format compatible with the ScenarioPackage
12
+ *
13
+ * The web search is emergent: the LLM decides what to search for based on
14
+ * the seed content, not hardcoded queries.
15
+ */
16
+ import type { KnowledgeBundle } from '../types.js';
17
+ import type { GenerateTextFn } from './types.js';
18
+ export interface SeedIngestionOptions {
19
+ /** LLM generateText function */
20
+ generateText: GenerateTextFn;
21
+ /** Enable live web search to enrich with real citations. Requires search API keys in env. */
22
+ webSearch?: boolean;
23
+ /** Maximum number of web searches to perform. Default: 5. */
24
+ maxSearches?: number;
25
+ /** Progress callback */
26
+ onProgress?: (step: string, status: 'start' | 'done') => void;
27
+ }
28
+ /**
29
+ * Ingest a seed document and produce a KnowledgeBundle for a scenario.
30
+ *
31
+ * @param seedText - The raw text content of the seed document
32
+ * @param options - Ingestion options (LLM function, web search toggle)
33
+ * @returns A KnowledgeBundle ready to merge into a ScenarioPackage
34
+ */
35
+ export declare function ingestSeed(seedText: string, options: SeedIngestionOptions): Promise<KnowledgeBundle>;
36
+ /**
37
+ * Ingest from a URL by fetching and extracting content.
38
+ */
39
+ export declare function ingestFromUrl(url: string, options: SeedIngestionOptions): Promise<KnowledgeBundle>;
40
+ //# sourceMappingURL=seed-ingestion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-ingestion.d.ts","sourceRoot":"","sources":["../../../src/engine/compiler/seed-ingestion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAqC,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,YAAY,EAAE,cAAc,CAAC;IAC7B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;CAC/D;AAmLD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAyB1B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CA+B1B"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Real-World Seed Ingestion
3
+ *
4
+ * Accepts a document (text, markdown, or URL) and uses it to enrich
5
+ * a scenario's knowledge bundle via:
6
+ *
7
+ * 1. LLM extraction: extract entities, facts, and domain knowledge from the seed
8
+ * 2. Optional web search: use AgentOS WebSearchService (Tavily, Firecrawl, Serper, Brave)
9
+ * with Cohere neural reranking to find real citations grounding the seed material
10
+ * 3. Knowledge bundle assembly: structure extracted + searched knowledge into
11
+ * KnowledgeBundle format compatible with the ScenarioPackage
12
+ *
13
+ * The web search is emergent: the LLM decides what to search for based on
14
+ * the seed content, not hardcoded queries.
15
+ */
16
+ /**
17
+ * Extract knowledge structure from seed text via LLM.
18
+ */
19
+ async function extractFromSeed(seedText, generateText) {
20
+ const prompt = `You are analyzing a document to extract domain knowledge for a simulation engine.
21
+
22
+ DOCUMENT:
23
+ ${seedText.slice(0, 8000)}
24
+
25
+ Extract the following as JSON:
26
+ {
27
+ "topics": ["list of 3-8 domain topics/themes in this document"],
28
+ "facts": [{"topic": "topic name", "claim": "specific factual claim from the document"}],
29
+ "searchQueries": ["5 web search queries that would find real scientific/technical citations supporting or expanding on this document's claims"],
30
+ "crisisCategories": ["3-6 categories of crises or challenges relevant to this domain"]
31
+ }
32
+
33
+ Focus on extractable, verifiable facts. Search queries should target academic papers, technical reports, and authoritative sources. Return JSON only.`;
34
+ const text = await generateText(prompt);
35
+ let cleaned = text.trim().replace(/^```(?:json)?\n?/i, '').replace(/\n?```$/i, '').trim();
36
+ try {
37
+ return JSON.parse(cleaned);
38
+ }
39
+ catch {
40
+ return { topics: [], facts: [], searchQueries: [], crisisCategories: [] };
41
+ }
42
+ }
43
+ /**
44
+ * Perform web searches using AgentOS WebSearchService.
45
+ * Returns citations organized by query.
46
+ */
47
+ async function searchForCitations(queries, maxSearches) {
48
+ const searchResults = [];
49
+ try {
50
+ const { WebSearchService, FirecrawlProvider, TavilyProvider, SerperProvider, BraveProvider } = await import('@framers/agentos/web-search');
51
+ const service = new WebSearchService();
52
+ if (process.env.FIRECRAWL_API_KEY)
53
+ service.registerProvider(new FirecrawlProvider(process.env.FIRECRAWL_API_KEY));
54
+ if (process.env.TAVILY_API_KEY)
55
+ service.registerProvider(new TavilyProvider(process.env.TAVILY_API_KEY));
56
+ if (process.env.SERPER_API_KEY)
57
+ service.registerProvider(new SerperProvider(process.env.SERPER_API_KEY));
58
+ if (process.env.BRAVE_API_KEY)
59
+ service.registerProvider(new BraveProvider(process.env.BRAVE_API_KEY));
60
+ if (!service.hasProviders()) {
61
+ console.log(' [seed] No search API keys configured. Skipping web search enrichment.');
62
+ return [];
63
+ }
64
+ const useRerank = !!process.env.COHERE_API_KEY;
65
+ const queriesToRun = queries.slice(0, maxSearches);
66
+ for (const query of queriesToRun) {
67
+ try {
68
+ const results = await service.search(query, { maxResults: 3, rerank: useRerank });
69
+ searchResults.push({
70
+ query,
71
+ results: results.map(r => ({ title: r.title, url: r.url, snippet: r.snippet })),
72
+ });
73
+ }
74
+ catch (err) {
75
+ console.log(` [seed] Search failed for "${query}": ${err}`);
76
+ }
77
+ }
78
+ }
79
+ catch {
80
+ // AgentOS web-search module not available, try direct Serper fallback
81
+ const key = process.env.SERPER_API_KEY;
82
+ if (!key)
83
+ return [];
84
+ for (const query of queries.slice(0, maxSearches)) {
85
+ try {
86
+ const res = await fetch('https://google.serper.dev/search', {
87
+ method: 'POST',
88
+ headers: { 'X-API-KEY': key, 'Content-Type': 'application/json' },
89
+ body: JSON.stringify({ q: query, num: 3 }),
90
+ });
91
+ if (res.ok) {
92
+ const data = await res.json();
93
+ searchResults.push({
94
+ query,
95
+ results: (data.organic || []).slice(0, 3).map((r) => ({ title: r.title, url: r.link, snippet: r.snippet })),
96
+ });
97
+ }
98
+ }
99
+ catch { }
100
+ }
101
+ }
102
+ return searchResults;
103
+ }
104
+ /**
105
+ * Assemble extracted facts and search results into a KnowledgeBundle.
106
+ */
107
+ function assembleKnowledgeBundle(extracted, searchResults) {
108
+ const topics = {};
109
+ // Group extracted facts by topic
110
+ for (const topicName of extracted.topics) {
111
+ const topicFacts = extracted.facts.filter(f => f.topic === topicName);
112
+ const citations = topicFacts.map(f => ({
113
+ claim: f.claim,
114
+ source: 'Seed document',
115
+ url: '',
116
+ }));
117
+ topics[topicName] = {
118
+ canonicalFacts: citations,
119
+ counterpoints: [],
120
+ departmentNotes: {},
121
+ };
122
+ }
123
+ // Enrich with web search results by matching queries to topics via word overlap
124
+ for (const sr of searchResults) {
125
+ const queryWords = new Set(sr.query.toLowerCase().split(/\s+/).filter(w => w.length > 3));
126
+ let bestTopic = extracted.topics[0] || 'general';
127
+ let bestOverlap = 0;
128
+ for (const t of extracted.topics) {
129
+ const topicWords = t.toLowerCase().split(/\s+/).filter(w => w.length > 3);
130
+ const overlap = topicWords.filter(w => queryWords.has(w)).length;
131
+ // Also check if any query word is a substring of the topic or vice versa
132
+ const substringBonus = topicWords.some(tw => [...queryWords].some(qw => tw.includes(qw) || qw.includes(tw))) ? 1 : 0;
133
+ const score = overlap + substringBonus;
134
+ if (score > bestOverlap) {
135
+ bestOverlap = score;
136
+ bestTopic = t;
137
+ }
138
+ }
139
+ const matchingTopic = bestTopic;
140
+ if (!topics[matchingTopic]) {
141
+ topics[matchingTopic] = { canonicalFacts: [], counterpoints: [], departmentNotes: {} };
142
+ }
143
+ for (const result of sr.results) {
144
+ topics[matchingTopic].canonicalFacts.push({
145
+ claim: result.snippet,
146
+ source: result.title,
147
+ url: result.url,
148
+ });
149
+ }
150
+ }
151
+ // Build category mapping: associate each crisis category with topics that
152
+ // share facts or have overlapping terminology
153
+ const categoryMapping = {};
154
+ for (const category of extracted.crisisCategories) {
155
+ // Find topics whose facts mention the crisis category, or whose names overlap
156
+ const catLower = category.toLowerCase();
157
+ const relevant = extracted.topics.filter(t => {
158
+ const tLower = t.toLowerCase();
159
+ // Direct name overlap
160
+ if (catLower.includes(tLower) || tLower.includes(catLower))
161
+ return true;
162
+ // Topic has facts that mention the category
163
+ return extracted.facts.some(f => f.topic === t && f.claim.toLowerCase().includes(catLower));
164
+ });
165
+ // Fall back to first 2 topics if no specific match
166
+ categoryMapping[category] = relevant.length > 0 ? relevant : extracted.topics.slice(0, 2);
167
+ }
168
+ return { topics, categoryMapping };
169
+ }
170
+ /**
171
+ * Ingest a seed document and produce a KnowledgeBundle for a scenario.
172
+ *
173
+ * @param seedText - The raw text content of the seed document
174
+ * @param options - Ingestion options (LLM function, web search toggle)
175
+ * @returns A KnowledgeBundle ready to merge into a ScenarioPackage
176
+ */
177
+ export async function ingestSeed(seedText, options) {
178
+ const { generateText, webSearch = true, maxSearches = 5, onProgress } = options;
179
+ // Step 1: Extract knowledge from seed
180
+ onProgress?.('extract', 'start');
181
+ const extracted = await extractFromSeed(seedText, generateText);
182
+ onProgress?.('extract', 'done');
183
+ console.log(` [seed] Extracted ${extracted.topics.length} topics, ${extracted.facts.length} facts, ${extracted.searchQueries.length} search queries`);
184
+ // Step 2: Optional web search enrichment
185
+ let searchResults = [];
186
+ if (webSearch && extracted.searchQueries.length > 0) {
187
+ onProgress?.('search', 'start');
188
+ searchResults = await searchForCitations(extracted.searchQueries, maxSearches);
189
+ onProgress?.('search', 'done');
190
+ const totalCitations = searchResults.reduce((sum, sr) => sum + sr.results.length, 0);
191
+ console.log(` [seed] Web search found ${totalCitations} citations from ${searchResults.length} queries`);
192
+ }
193
+ // Step 3: Assemble knowledge bundle
194
+ onProgress?.('assemble', 'start');
195
+ const bundle = assembleKnowledgeBundle(extracted, searchResults);
196
+ onProgress?.('assemble', 'done');
197
+ return bundle;
198
+ }
199
+ /**
200
+ * Ingest from a URL by fetching and extracting content.
201
+ */
202
+ export async function ingestFromUrl(url, options) {
203
+ let content;
204
+ // Try Firecrawl first for clean markdown extraction
205
+ try {
206
+ const key = process.env.FIRECRAWL_API_KEY;
207
+ if (key) {
208
+ const res = await fetch('https://api.firecrawl.dev/v1/scrape', {
209
+ method: 'POST',
210
+ headers: { 'Authorization': `Bearer ${key}`, 'Content-Type': 'application/json' },
211
+ body: JSON.stringify({ url, formats: ['markdown'] }),
212
+ });
213
+ if (res.ok) {
214
+ const data = await res.json();
215
+ content = data.data?.markdown || data.data?.content || '';
216
+ if (content) {
217
+ console.log(` [seed] Fetched ${content.length} chars from ${url} via Firecrawl`);
218
+ return ingestSeed(content, options);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ catch { }
224
+ // Fallback to plain fetch
225
+ const res = await fetch(url);
226
+ content = await res.text();
227
+ // Strip HTML tags for plain text extraction
228
+ content = content.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
229
+ console.log(` [seed] Fetched ${content.length} chars from ${url} via plain fetch`);
230
+ return ingestSeed(content, options);
231
+ }
232
+ //# sourceMappingURL=seed-ingestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-ingestion.js","sourceRoot":"","sources":["../../../src/engine/compiler/seed-ingestion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared types for the scenario compiler module.
3
+ */
4
+ import type { LlmProvider } from '../types.js';
5
+ /** Function signature for LLM text generation calls. */
6
+ export type GenerateTextFn = (prompt: string) => Promise<string>;
7
+ /** Options for compileScenario(). */
8
+ export interface CompileOptions {
9
+ /** LLM provider to use for hook generation. */
10
+ provider?: LlmProvider;
11
+ /** Model name for hook generation. */
12
+ model?: string;
13
+ /** Whether to use disk caching. Default: true. */
14
+ cache?: boolean;
15
+ /** Base directory for the disk cache. Default: '.paracosm/cache'. */
16
+ cacheDir?: string;
17
+ /** Custom generateText function (overrides provider/model). */
18
+ generateText?: GenerateTextFn;
19
+ /** Progress callback for each hook being generated. */
20
+ onProgress?: (hookName: string, status: 'generating' | 'cached' | 'done' | 'fallback') => void;
21
+ /** Seed text to ingest into the scenario's knowledge bundle via LLM extraction + optional web search. */
22
+ seedText?: string;
23
+ /** Seed URL to fetch and ingest. If set, seedText is ignored. */
24
+ seedUrl?: string;
25
+ /** Enable live web search during seed ingestion. Requires search API keys. Default: true. */
26
+ webSearch?: boolean;
27
+ /** Max web searches during seed ingestion. Default: 5. */
28
+ maxSearches?: number;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engine/compiler/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjE,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,uDAAuD;IACvD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;IAC/F,yGAAyG;IACzG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for the scenario compiler module.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engine/compiler/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}