@amodalai/runtime 0.1.26 → 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 (347) hide show
  1. package/dist/src/__fixtures__/README.md +84 -0
  2. package/dist/src/__fixtures__/smoke-agent/amodal.json +11 -0
  3. package/dist/src/__fixtures__/smoke-agent/automations/test-auto.md +5 -0
  4. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/access.json +11 -0
  5. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/spec.json +4 -0
  6. package/dist/src/__fixtures__/smoke-agent/connections/mock-api/surface.md +9 -0
  7. package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/access.json +3 -0
  8. package/dist/src/__fixtures__/smoke-agent/connections/mock-mcp/spec.json +8 -0
  9. package/dist/src/__fixtures__/smoke-agent/evals/basic-eval.md +12 -0
  10. package/dist/src/__fixtures__/smoke-agent/knowledge/test-knowledge.md +3 -0
  11. package/dist/src/__fixtures__/smoke-agent/skills/test-skill/SKILL.md +11 -0
  12. package/dist/src/__fixtures__/smoke-agent/stores/test-items.json +11 -0
  13. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.d.ts +18 -0
  14. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js +22 -0
  15. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/handler.js.map +1 -0
  16. package/dist/src/__fixtures__/smoke-agent/tools/echo_tool/tool.json +17 -0
  17. package/dist/src/__fixtures__/smoke.test.js +718 -0
  18. package/dist/src/__fixtures__/smoke.test.js.map +1 -0
  19. package/dist/src/__tests__/test-providers.d.ts +40 -0
  20. package/dist/src/__tests__/test-providers.js +61 -0
  21. package/dist/src/__tests__/test-providers.js.map +1 -0
  22. package/dist/src/agent/local-server.d.ts +3 -3
  23. package/dist/src/agent/local-server.js +213 -122
  24. package/dist/src/agent/local-server.js.map +1 -1
  25. package/dist/src/agent/loop-types.d.ts +175 -0
  26. package/dist/src/agent/loop-types.js +20 -0
  27. package/dist/src/agent/loop-types.js.map +1 -0
  28. package/dist/src/agent/loop.d.ts +31 -0
  29. package/dist/src/agent/loop.js +139 -0
  30. package/dist/src/agent/loop.js.map +1 -0
  31. package/dist/src/agent/loop.test.js +1030 -0
  32. package/dist/src/agent/loop.test.js.map +1 -0
  33. package/dist/src/agent/mcp-config.d.ts +28 -0
  34. package/dist/src/agent/mcp-config.js +57 -0
  35. package/dist/src/agent/mcp-config.js.map +1 -0
  36. package/dist/src/agent/page-builder.js +6 -1
  37. package/dist/src/agent/page-builder.js.map +1 -1
  38. package/dist/src/agent/proactive/proactive-runner.d.ts +24 -8
  39. package/dist/src/agent/proactive/proactive-runner.js +30 -32
  40. package/dist/src/agent/proactive/proactive-runner.js.map +1 -1
  41. package/dist/src/agent/proactive/proactive-runner.test.d.ts +1 -1
  42. package/dist/src/agent/proactive/proactive-runner.test.js +75 -87
  43. package/dist/src/agent/proactive/proactive-runner.test.js.map +1 -1
  44. package/dist/src/agent/routes/admin-chat.d.ts +15 -3
  45. package/dist/src/agent/routes/admin-chat.js +63 -18
  46. package/dist/src/agent/routes/admin-chat.js.map +1 -1
  47. package/dist/src/agent/routes/automations.js +5 -6
  48. package/dist/src/agent/routes/automations.js.map +1 -1
  49. package/dist/src/agent/routes/evals.d.ts +3 -2
  50. package/dist/src/agent/routes/evals.js +25 -12
  51. package/dist/src/agent/routes/evals.js.map +1 -1
  52. package/dist/src/agent/routes/files.js +7 -9
  53. package/dist/src/agent/routes/files.js.map +1 -1
  54. package/dist/src/agent/routes/inspect.d.ts +6 -2
  55. package/dist/src/agent/routes/inspect.js +31 -17
  56. package/dist/src/agent/routes/inspect.js.map +1 -1
  57. package/dist/src/agent/routes/inspect.test.js +18 -42
  58. package/dist/src/agent/routes/inspect.test.js.map +1 -1
  59. package/dist/src/agent/routes/stores.js +9 -12
  60. package/dist/src/agent/routes/stores.js.map +1 -1
  61. package/dist/src/agent/routes/task.d.ts +15 -3
  62. package/dist/src/agent/routes/task.js +16 -7
  63. package/dist/src/agent/routes/task.js.map +1 -1
  64. package/dist/src/agent/routes/task.test.d.ts +1 -1
  65. package/dist/src/agent/routes/task.test.js +70 -53
  66. package/dist/src/agent/routes/task.test.js.map +1 -1
  67. package/dist/src/agent/routes/webhooks.js +12 -3
  68. package/dist/src/agent/routes/webhooks.js.map +1 -1
  69. package/dist/src/agent/session-store.d.ts +11 -2
  70. package/dist/src/agent/session-store.js +1 -1
  71. package/dist/src/agent/session-store.js.map +1 -1
  72. package/dist/src/agent/snapshot-server.d.ts +2 -22
  73. package/dist/src/agent/snapshot-server.js +50 -27
  74. package/dist/src/agent/snapshot-server.js.map +1 -1
  75. package/dist/src/agent/states/compacting.d.ts +14 -0
  76. package/dist/src/agent/states/compacting.js +258 -0
  77. package/dist/src/agent/states/compacting.js.map +1 -0
  78. package/dist/src/agent/states/confirming.d.ts +10 -0
  79. package/dist/src/agent/states/confirming.js +76 -0
  80. package/dist/src/agent/states/confirming.js.map +1 -0
  81. package/dist/src/agent/states/dispatching.d.ts +18 -0
  82. package/dist/src/agent/states/dispatching.js +241 -0
  83. package/dist/src/agent/states/dispatching.js.map +1 -0
  84. package/dist/src/agent/states/executing.d.ts +21 -0
  85. package/dist/src/agent/states/executing.js +308 -0
  86. package/dist/src/agent/states/executing.js.map +1 -0
  87. package/dist/src/agent/states/streaming.d.ts +10 -0
  88. package/dist/src/agent/states/streaming.js +155 -0
  89. package/dist/src/agent/states/streaming.js.map +1 -0
  90. package/dist/src/agent/states/thinking.d.ts +13 -0
  91. package/dist/src/agent/states/thinking.js +233 -0
  92. package/dist/src/agent/states/thinking.js.map +1 -0
  93. package/dist/src/agent/token-estimate.d.ts +17 -0
  94. package/dist/src/agent/token-estimate.js +13 -0
  95. package/dist/src/agent/token-estimate.js.map +1 -0
  96. package/dist/src/agent/tool-executor-local.js +9 -18
  97. package/dist/src/agent/tool-executor-local.js.map +1 -1
  98. package/dist/src/agent/tool-executor-local.test.js +3 -5
  99. package/dist/src/agent/tool-executor-local.test.js.map +1 -1
  100. package/dist/src/api/create-agent.d.ts +15 -0
  101. package/dist/src/api/create-agent.js +137 -0
  102. package/dist/src/api/create-agent.js.map +1 -0
  103. package/dist/src/api/types.d.ts +68 -0
  104. package/dist/src/api/types.js +7 -0
  105. package/dist/src/api/types.js.map +1 -0
  106. package/dist/src/context/compiler.d.ts +13 -0
  107. package/dist/src/context/compiler.js +358 -0
  108. package/dist/src/context/compiler.js.map +1 -0
  109. package/dist/src/context/compiler.test.js +532 -0
  110. package/dist/src/context/compiler.test.js.map +1 -0
  111. package/dist/src/context/types.d.ts +110 -0
  112. package/dist/src/context/types.js +7 -0
  113. package/dist/src/context/types.js.map +1 -0
  114. package/dist/src/index.d.ts +33 -6
  115. package/dist/src/index.js +35 -21
  116. package/dist/src/index.js.map +1 -1
  117. package/dist/src/providers/create-provider.d.ts +23 -0
  118. package/dist/src/providers/create-provider.js +185 -0
  119. package/dist/src/providers/create-provider.js.map +1 -0
  120. package/dist/src/{agent/stores-e2e.test.d.ts → providers/create-provider.test.d.ts} +1 -1
  121. package/dist/src/providers/create-provider.test.js +95 -0
  122. package/dist/src/providers/create-provider.test.js.map +1 -0
  123. package/dist/src/providers/failover.d.ts +38 -0
  124. package/dist/src/providers/failover.js +147 -0
  125. package/dist/src/providers/failover.js.map +1 -0
  126. package/dist/src/providers/failover.test.d.ts +6 -0
  127. package/dist/src/providers/failover.test.js +169 -0
  128. package/dist/src/providers/failover.test.js.map +1 -0
  129. package/dist/src/providers/types.d.ts +110 -0
  130. package/dist/src/providers/types.js +7 -0
  131. package/dist/src/providers/types.js.map +1 -0
  132. package/dist/src/routes/ai-stream.d.ts +13 -10
  133. package/dist/src/routes/ai-stream.js +76 -41
  134. package/dist/src/routes/ai-stream.js.map +1 -1
  135. package/dist/src/routes/chat-new.test.d.ts +6 -0
  136. package/dist/src/routes/chat-new.test.js +107 -0
  137. package/dist/src/routes/chat-new.test.js.map +1 -0
  138. package/dist/src/routes/chat-stream-new.test.d.ts +6 -0
  139. package/dist/src/routes/chat-stream-new.test.js +135 -0
  140. package/dist/src/routes/chat-stream-new.test.js.map +1 -0
  141. package/dist/src/routes/chat-stream.d.ts +14 -4
  142. package/dist/src/routes/chat-stream.js +47 -29
  143. package/dist/src/routes/chat-stream.js.map +1 -1
  144. package/dist/src/routes/chat.d.ts +13 -4
  145. package/dist/src/routes/chat.js +60 -23
  146. package/dist/src/routes/chat.js.map +1 -1
  147. package/dist/src/routes/health.d.ts +3 -2
  148. package/dist/src/routes/health.js.map +1 -1
  149. package/dist/src/routes/route-helpers.d.ts +50 -0
  150. package/dist/src/routes/route-helpers.js +80 -0
  151. package/dist/src/routes/route-helpers.js.map +1 -0
  152. package/dist/src/routes/session-resolver.d.ts +72 -0
  153. package/dist/src/routes/session-resolver.js +123 -0
  154. package/dist/src/routes/session-resolver.js.map +1 -0
  155. package/dist/src/routes/session-resolver.test.d.ts +6 -0
  156. package/dist/src/routes/session-resolver.test.js +206 -0
  157. package/dist/src/routes/session-resolver.test.js.map +1 -0
  158. package/dist/src/routes/webhooks.d.ts +3 -1
  159. package/dist/src/routes/webhooks.js +12 -4
  160. package/dist/src/routes/webhooks.js.map +1 -1
  161. package/dist/src/security/permission-checker.d.ts +80 -0
  162. package/dist/src/security/permission-checker.js +75 -0
  163. package/dist/src/security/permission-checker.js.map +1 -0
  164. package/dist/src/security/permission-checker.test.d.ts +6 -0
  165. package/dist/src/security/permission-checker.test.js +208 -0
  166. package/dist/src/security/permission-checker.test.js.map +1 -0
  167. package/dist/src/server.d.ts +12 -11
  168. package/dist/src/server.js +44 -46
  169. package/dist/src/server.js.map +1 -1
  170. package/dist/src/server.test.d.ts +1 -1
  171. package/dist/src/server.test.js +6 -144
  172. package/dist/src/server.test.js.map +1 -1
  173. package/dist/src/session/manager.d.ts +98 -0
  174. package/dist/src/session/manager.js +364 -0
  175. package/dist/src/session/manager.js.map +1 -0
  176. package/dist/src/session/manager.test.d.ts +6 -0
  177. package/dist/src/session/manager.test.js +315 -0
  178. package/dist/src/session/manager.test.js.map +1 -0
  179. package/dist/src/session/session-builder.d.ts +71 -0
  180. package/dist/src/session/session-builder.js +364 -0
  181. package/dist/src/session/session-builder.js.map +1 -0
  182. package/dist/src/session/session-builder.test.d.ts +6 -0
  183. package/dist/src/session/session-builder.test.js +352 -0
  184. package/dist/src/session/session-builder.test.js.map +1 -0
  185. package/dist/src/session/store.d.ts +57 -0
  186. package/dist/src/session/store.js +167 -0
  187. package/dist/src/session/store.js.map +1 -0
  188. package/dist/src/session/store.test.d.ts +6 -0
  189. package/dist/src/session/store.test.js +145 -0
  190. package/dist/src/session/store.test.js.map +1 -0
  191. package/dist/src/session/stream-hooks.d.ts +39 -0
  192. package/dist/src/session/stream-hooks.js +7 -0
  193. package/dist/src/session/stream-hooks.js.map +1 -0
  194. package/dist/src/session/tool-context-factory.d.ts +60 -0
  195. package/dist/src/session/tool-context-factory.js +190 -0
  196. package/dist/src/session/tool-context-factory.js.map +1 -0
  197. package/dist/src/session/tool-context-factory.test.d.ts +6 -0
  198. package/dist/src/session/tool-context-factory.test.js +287 -0
  199. package/dist/src/session/tool-context-factory.test.js.map +1 -0
  200. package/dist/src/session/types.d.ts +188 -0
  201. package/dist/src/session/types.js +7 -0
  202. package/dist/src/session/types.js.map +1 -0
  203. package/dist/src/stores/drizzle-store-backend.d.ts +49 -0
  204. package/dist/src/stores/drizzle-store-backend.js +306 -0
  205. package/dist/src/stores/drizzle-store-backend.js.map +1 -0
  206. package/dist/src/stores/drizzle-store-backend.test.d.ts +6 -0
  207. package/dist/src/stores/drizzle-store-backend.test.js +215 -0
  208. package/dist/src/stores/drizzle-store-backend.test.js.map +1 -0
  209. package/dist/src/stores/index.d.ts +4 -0
  210. package/dist/src/stores/index.js +2 -0
  211. package/dist/src/stores/index.js.map +1 -1
  212. package/dist/src/stores/pglite-store-backend.d.ts +16 -19
  213. package/dist/src/stores/pglite-store-backend.js +85 -239
  214. package/dist/src/stores/pglite-store-backend.js.map +1 -1
  215. package/dist/src/stores/postgres-store-backend.d.ts +30 -0
  216. package/dist/src/stores/postgres-store-backend.js +100 -0
  217. package/dist/src/stores/postgres-store-backend.js.map +1 -0
  218. package/dist/src/stores/schema.d.ts +491 -0
  219. package/dist/src/stores/schema.js +57 -0
  220. package/dist/src/stores/schema.js.map +1 -0
  221. package/dist/src/tools/admin-file-tools.d.ts +13 -0
  222. package/dist/src/tools/admin-file-tools.js +200 -0
  223. package/dist/src/tools/admin-file-tools.js.map +1 -0
  224. package/dist/src/tools/admin-file-tools.test.d.ts +6 -0
  225. package/dist/src/tools/admin-file-tools.test.js +152 -0
  226. package/dist/src/tools/admin-file-tools.test.js.map +1 -0
  227. package/dist/src/tools/custom-tool-adapter.d.ts +41 -0
  228. package/dist/src/tools/custom-tool-adapter.js +190 -0
  229. package/dist/src/tools/custom-tool-adapter.js.map +1 -0
  230. package/dist/src/tools/custom-tool-adapter.test.d.ts +6 -0
  231. package/dist/src/tools/custom-tool-adapter.test.js +244 -0
  232. package/dist/src/tools/custom-tool-adapter.test.js.map +1 -0
  233. package/dist/src/tools/dispatch-tool.d.ts +52 -0
  234. package/dist/src/tools/dispatch-tool.js +71 -0
  235. package/dist/src/tools/dispatch-tool.js.map +1 -0
  236. package/dist/src/tools/dispatch-tool.test.d.ts +6 -0
  237. package/dist/src/tools/dispatch-tool.test.js +75 -0
  238. package/dist/src/tools/dispatch-tool.test.js.map +1 -0
  239. package/dist/src/tools/mcp-tool-adapter.d.ts +18 -0
  240. package/dist/src/tools/mcp-tool-adapter.js +135 -0
  241. package/dist/src/tools/mcp-tool-adapter.js.map +1 -0
  242. package/dist/src/tools/mcp-tool-adapter.test.d.ts +6 -0
  243. package/dist/src/tools/mcp-tool-adapter.test.js +227 -0
  244. package/dist/src/tools/mcp-tool-adapter.test.js.map +1 -0
  245. package/dist/src/tools/registry.d.ts +25 -0
  246. package/dist/src/tools/registry.js +72 -0
  247. package/dist/src/tools/registry.js.map +1 -0
  248. package/dist/src/tools/registry.test.d.ts +6 -0
  249. package/dist/src/tools/registry.test.js +121 -0
  250. package/dist/src/tools/registry.test.js.map +1 -0
  251. package/dist/src/tools/request-tool.d.ts +42 -0
  252. package/dist/src/tools/request-tool.js +190 -0
  253. package/dist/src/tools/request-tool.js.map +1 -0
  254. package/dist/src/tools/request-tool.test.d.ts +6 -0
  255. package/dist/src/tools/request-tool.test.js +254 -0
  256. package/dist/src/tools/request-tool.test.js.map +1 -0
  257. package/dist/src/tools/store-tools.d.ts +29 -0
  258. package/dist/src/tools/store-tools.js +224 -0
  259. package/dist/src/tools/store-tools.js.map +1 -0
  260. package/dist/src/tools/store-tools.test.d.ts +6 -0
  261. package/dist/src/tools/store-tools.test.js +216 -0
  262. package/dist/src/tools/store-tools.test.js.map +1 -0
  263. package/dist/src/tools/types.d.ts +111 -0
  264. package/dist/src/tools/types.js +7 -0
  265. package/dist/src/tools/types.js.map +1 -0
  266. package/dist/src/types.d.ts +20 -12
  267. package/dist/src/types.js +3 -2
  268. package/dist/src/types.js.map +1 -1
  269. package/dist/tsconfig.tsbuildinfo +1 -1
  270. package/package.json +13 -4
  271. package/dist/src/__tests__/sse-contract.test.js +0 -464
  272. package/dist/src/__tests__/sse-contract.test.js.map +0 -1
  273. package/dist/src/__tests__/tools.test.js +0 -583
  274. package/dist/src/__tests__/tools.test.js.map +0 -1
  275. package/dist/src/agent/agent-runner.d.ts +0 -33
  276. package/dist/src/agent/agent-runner.js +0 -1040
  277. package/dist/src/agent/agent-runner.js.map +0 -1
  278. package/dist/src/agent/custom-tools-e2e.test.d.ts +0 -6
  279. package/dist/src/agent/custom-tools-e2e.test.js +0 -566
  280. package/dist/src/agent/custom-tools-e2e.test.js.map +0 -1
  281. package/dist/src/agent/request-helper.d.ts +0 -16
  282. package/dist/src/agent/request-helper.js +0 -96
  283. package/dist/src/agent/request-helper.js.map +0 -1
  284. package/dist/src/agent/stores-e2e.test.js +0 -433
  285. package/dist/src/agent/stores-e2e.test.js.map +0 -1
  286. package/dist/src/agent/tool-context-builder.d.ts +0 -11
  287. package/dist/src/agent/tool-context-builder.js +0 -102
  288. package/dist/src/agent/tool-context-builder.js.map +0 -1
  289. package/dist/src/agent/tool-context-builder.test.d.ts +0 -6
  290. package/dist/src/agent/tool-context-builder.test.js +0 -152
  291. package/dist/src/agent/tool-context-builder.test.js.map +0 -1
  292. package/dist/src/agent/write-repo-file.test.js +0 -270
  293. package/dist/src/agent/write-repo-file.test.js.map +0 -1
  294. package/dist/src/cron/heartbeat-runner.d.ts +0 -21
  295. package/dist/src/cron/heartbeat-runner.js +0 -79
  296. package/dist/src/cron/heartbeat-runner.js.map +0 -1
  297. package/dist/src/cron/heartbeat-runner.test.d.ts +0 -6
  298. package/dist/src/cron/heartbeat-runner.test.js +0 -120
  299. package/dist/src/cron/heartbeat-runner.test.js.map +0 -1
  300. package/dist/src/cron/heartbeat-scheduler.d.ts +0 -26
  301. package/dist/src/cron/heartbeat-scheduler.js +0 -55
  302. package/dist/src/cron/heartbeat-scheduler.js.map +0 -1
  303. package/dist/src/cron/heartbeat-scheduler.test.d.ts +0 -6
  304. package/dist/src/cron/heartbeat-scheduler.test.js +0 -61
  305. package/dist/src/cron/heartbeat-scheduler.test.js.map +0 -1
  306. package/dist/src/routes/ai-stream.test.d.ts +0 -6
  307. package/dist/src/routes/ai-stream.test.js +0 -586
  308. package/dist/src/routes/ai-stream.test.js.map +0 -1
  309. package/dist/src/routes/ask-user-response.d.ts +0 -30
  310. package/dist/src/routes/ask-user-response.js +0 -61
  311. package/dist/src/routes/ask-user-response.js.map +0 -1
  312. package/dist/src/routes/ask-user-response.test.d.ts +0 -6
  313. package/dist/src/routes/ask-user-response.test.js +0 -88
  314. package/dist/src/routes/ask-user-response.test.js.map +0 -1
  315. package/dist/src/routes/chat-stream.test.d.ts +0 -6
  316. package/dist/src/routes/chat-stream.test.js +0 -155
  317. package/dist/src/routes/chat-stream.test.js.map +0 -1
  318. package/dist/src/routes/chat.test.d.ts +0 -6
  319. package/dist/src/routes/chat.test.js +0 -99
  320. package/dist/src/routes/chat.test.js.map +0 -1
  321. package/dist/src/routes/widget-actions.d.ts +0 -49
  322. package/dist/src/routes/widget-actions.js +0 -78
  323. package/dist/src/routes/widget-actions.js.map +0 -1
  324. package/dist/src/session/custom-tool-adapter.d.ts +0 -74
  325. package/dist/src/session/custom-tool-adapter.js +0 -180
  326. package/dist/src/session/custom-tool-adapter.js.map +0 -1
  327. package/dist/src/session/history-converter.d.ts +0 -21
  328. package/dist/src/session/history-converter.js +0 -59
  329. package/dist/src/session/history-converter.js.map +0 -1
  330. package/dist/src/session/history-converter.test.d.ts +0 -6
  331. package/dist/src/session/history-converter.test.js +0 -130
  332. package/dist/src/session/history-converter.test.js.map +0 -1
  333. package/dist/src/session/session-manager.d.ts +0 -219
  334. package/dist/src/session/session-manager.js +0 -915
  335. package/dist/src/session/session-manager.js.map +0 -1
  336. package/dist/src/session/session-manager.test.d.ts +0 -6
  337. package/dist/src/session/session-manager.test.js +0 -455
  338. package/dist/src/session/session-manager.test.js.map +0 -1
  339. package/dist/src/session/session-runner.d.ts +0 -45
  340. package/dist/src/session/session-runner.js +0 -719
  341. package/dist/src/session/session-runner.js.map +0 -1
  342. package/dist/src/session/session-runner.test.d.ts +0 -6
  343. package/dist/src/session/session-runner.test.js +0 -834
  344. package/dist/src/session/session-runner.test.js.map +0 -1
  345. /package/dist/src/{__tests__/sse-contract.test.d.ts → __fixtures__/smoke.test.d.ts} +0 -0
  346. /package/dist/src/{__tests__/tools.test.d.ts → agent/loop.test.d.ts} +0 -0
  347. /package/dist/src/{agent/write-repo-file.test.d.ts → context/compiler.test.d.ts} +0 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { loadRepo, McpManager } from '@amodalai/core';
7
+ import { StandaloneSessionManager } from '../session/manager.js';
8
+ import { buildSessionComponents } from '../session/session-builder.js';
9
+ import { LocalToolExecutor } from '../agent/tool-executor-local.js';
10
+ import { buildMcpConfigs } from '../agent/mcp-config.js';
11
+ import { createPGLiteStoreBackend } from '../stores/pglite-store-backend.js';
12
+ import { createLogger } from '../logger.js';
13
+ import { SessionError } from '../errors.js';
14
+ import { LOCAL_APP_ID } from '../constants.js';
15
+ const MCP_STARTUP_TIMEOUT_MS = 30_000;
16
+ // ---------------------------------------------------------------------------
17
+ // createAgent
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Create a running agent from a repo path or pre-loaded bundle.
21
+ *
22
+ * This is the main entry point for programmatic use of the Amodal runtime.
23
+ * It loads the agent configuration, initializes stores, MCP connections,
24
+ * and the session manager, then returns an Agent handle for creating
25
+ * sessions and streaming messages.
26
+ */
27
+ export async function createAgent(config) {
28
+ const logger = config.logger ?? createLogger({ component: 'agent' });
29
+ // Load bundle
30
+ const bundle = config.bundle ?? await loadRepo({ localPath: config.repoPath });
31
+ // Store backend
32
+ let storeBackend = config.storeBackend ?? null;
33
+ if (!storeBackend && bundle.stores.length > 0 && config.repoPath) {
34
+ const dataDir = `${config.repoPath}/.amodal/store-data`;
35
+ storeBackend = await createPGLiteStoreBackend(bundle.stores, dataDir);
36
+ }
37
+ // Tool executor
38
+ const toolExecutor = bundle.tools.length > 0 ? new LocalToolExecutor() : undefined;
39
+ // MCP — with timeout to prevent hanging on broken MCP servers
40
+ let mcpManager = config.mcpManager ?? null;
41
+ if (!mcpManager) {
42
+ const mcpConfigs = buildMcpConfigs(bundle);
43
+ if (Object.keys(mcpConfigs).length > 0) {
44
+ const manager = new McpManager();
45
+ try {
46
+ await Promise.race([
47
+ manager.startServers(mcpConfigs),
48
+ new Promise((_, reject) => {
49
+ setTimeout(() => reject(new Error('MCP startup timed out')), MCP_STARTUP_TIMEOUT_MS);
50
+ }),
51
+ ]);
52
+ if (manager.connectedCount > 0) {
53
+ mcpManager = manager;
54
+ logger.info('mcp_initialized', { servers: manager.connectedCount });
55
+ }
56
+ }
57
+ catch (err) {
58
+ logger.warn('mcp_startup_failed', { error: err instanceof Error ? err.message : String(err) });
59
+ // Continue without MCP — agent still works for non-MCP tools
60
+ }
61
+ }
62
+ }
63
+ // Session manager
64
+ const sessionManager = new StandaloneSessionManager({
65
+ logger,
66
+ ttlMs: config.sessionTtlMs,
67
+ });
68
+ sessionManager.start();
69
+ // Build components once (reused for each session)
70
+ const components = buildSessionComponents({
71
+ bundle,
72
+ storeBackend,
73
+ mcpManager,
74
+ logger,
75
+ toolExecutor,
76
+ });
77
+ return {
78
+ createSession(opts) {
79
+ const session = sessionManager.create({
80
+ tenantId: opts?.tenantId ?? LOCAL_APP_ID,
81
+ userId: opts?.userId ?? 'api',
82
+ provider: components.provider,
83
+ toolRegistry: components.toolRegistry,
84
+ permissionChecker: components.permissionChecker,
85
+ systemPrompt: components.systemPrompt,
86
+ userRoles: opts?.userRoles ?? components.userRoles,
87
+ toolContextFactory: components.toolContextFactory,
88
+ });
89
+ return createAgentSession(sessionManager, session.id, components);
90
+ },
91
+ async resumeSession(sessionId) {
92
+ const existing = sessionManager.get(sessionId);
93
+ if (existing) {
94
+ return createAgentSession(sessionManager, existing.id, components);
95
+ }
96
+ return null;
97
+ },
98
+ getSystemPrompt() {
99
+ return components.systemPrompt;
100
+ },
101
+ getBundle() {
102
+ return bundle;
103
+ },
104
+ async shutdown() {
105
+ await sessionManager.shutdown();
106
+ if (mcpManager) {
107
+ await mcpManager.shutdown();
108
+ }
109
+ if (storeBackend) {
110
+ await storeBackend.close();
111
+ }
112
+ },
113
+ };
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // AgentSession wrapper
117
+ // ---------------------------------------------------------------------------
118
+ function createAgentSession(sessionManager, sessionId, components) {
119
+ const session = sessionManager.get(sessionId);
120
+ if (!session) {
121
+ throw new SessionError(`Session "${sessionId}" not found`, {
122
+ sessionId,
123
+ context: { operation: 'createAgentSession' },
124
+ });
125
+ }
126
+ return {
127
+ get id() { return sessionId; },
128
+ get session() { return session; },
129
+ async *stream(message, opts) {
130
+ yield* sessionManager.runMessage(sessionId, message, {
131
+ signal: opts?.signal,
132
+ buildToolContext: components.toolContextFactory,
133
+ });
134
+ },
135
+ };
136
+ }
137
+ //# sourceMappingURL=create-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-agent.js","sourceRoot":"","sources":["../../../src/api/create-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Public API types for the Amodal runtime.
8
+ *
9
+ * These are the only types ISV consumers should depend on.
10
+ * Internal types (state machine, tool registry internals, etc.)
11
+ * are not exported from the public API.
12
+ */
13
+ import type { AgentBundle, StoreBackend } from '@amodalai/types';
14
+ import type { McpManager } from '@amodalai/core';
15
+ import type { LLMProvider, ProviderConfig } from '../providers/types.js';
16
+ import type { Session } from '../session/types.js';
17
+ import type { SSEEvent } from '../types.js';
18
+ import type { StreamHooks } from '../session/stream-hooks.js';
19
+ import type { Logger } from '../logger.js';
20
+ /** Configuration for creating an agent. */
21
+ export interface AgentConfig {
22
+ /** Path to the agent repo (local mode). */
23
+ repoPath?: string;
24
+ /** Pre-loaded agent bundle (alternative to repoPath). */
25
+ bundle?: AgentBundle;
26
+ /** LLM provider override (default: created from bundle model config). */
27
+ provider?: LLMProvider;
28
+ /** Provider config override (default: from bundle model config). */
29
+ providerConfig?: ProviderConfig;
30
+ /** Custom store backend (default: PGLite in .amodal/store-data). */
31
+ storeBackend?: StoreBackend;
32
+ /** MCP manager (default: created from bundle MCP configs). */
33
+ mcpManager?: McpManager;
34
+ /** Logger (default: built-in structured logger). */
35
+ logger?: Logger;
36
+ /** Session TTL in milliseconds (default: 30 minutes). */
37
+ sessionTtlMs?: number;
38
+ /** Stream hooks for audit logging, usage reporting, and persistence. */
39
+ streamHooks?: StreamHooks;
40
+ }
41
+ /** A running agent instance. */
42
+ export interface Agent {
43
+ /** Create a new chat session. */
44
+ createSession(opts?: {
45
+ tenantId?: string;
46
+ userId?: string;
47
+ userRoles?: string[];
48
+ }): AgentSession;
49
+ /** Resume an existing session by ID. Returns null if not found. */
50
+ resumeSession(sessionId: string): Promise<AgentSession | null>;
51
+ /** Get the agent's compiled system prompt. */
52
+ getSystemPrompt(): string;
53
+ /** Get the agent bundle. */
54
+ getBundle(): AgentBundle;
55
+ /** Shut down the agent (close store, MCP, cleanup). */
56
+ shutdown(): Promise<void>;
57
+ }
58
+ /** A chat session — send messages and receive SSE events. */
59
+ export interface AgentSession {
60
+ /** Session ID. */
61
+ readonly id: string;
62
+ /** Send a message and stream SSE events back. */
63
+ stream(message: string, opts?: {
64
+ signal?: AbortSignal;
65
+ }): AsyncGenerator<SSEEvent>;
66
+ /** The underlying session object (for advanced use). */
67
+ readonly session: Session;
68
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import type { CompilerInput, CompilerOutput } from './types.js';
7
+ /**
8
+ * Compile an agent's configuration into a system prompt.
9
+ *
10
+ * This is the single entry point for prompt compilation. It replaces the
11
+ * scattered buildDefaultPrompt() callsites in session-manager and inspect.
12
+ */
13
+ export declare function compileContext(input: CompilerInput): CompilerOutput;
@@ -0,0 +1,358 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ // ---------------------------------------------------------------------------
7
+ // Token estimation
8
+ // ---------------------------------------------------------------------------
9
+ /** Rough token estimate: ~4 chars per token. */
10
+ function estimateTokens(text) {
11
+ return Math.ceil(text.length / 4);
12
+ }
13
+ // ---------------------------------------------------------------------------
14
+ // Field guidance (internalized from user-context.ts)
15
+ // ---------------------------------------------------------------------------
16
+ function generateFieldGuidance(connections, userRoles) {
17
+ const lines = [];
18
+ for (const conn of connections) {
19
+ if (!conn.fieldRestrictions || conn.fieldRestrictions.length === 0)
20
+ continue;
21
+ for (const r of conn.fieldRestrictions) {
22
+ switch (r.policy) {
23
+ case 'never_retrieve': {
24
+ const reason = r.reason ? ` (${r.reason})` : '';
25
+ lines.push(`Do not request: ${r.entity}.${r.field}${reason}`);
26
+ break;
27
+ }
28
+ case 'role_gated': {
29
+ const allowed = r.allowedRoles ?? [];
30
+ const hasAccess = userRoles.some((role) => allowed.includes(role));
31
+ if (!hasAccess) {
32
+ lines.push(`Do not request: ${r.entity}.${r.field} (requires role: ${allowed.join(', ')})`);
33
+ }
34
+ break;
35
+ }
36
+ case 'retrieve_but_redact':
37
+ lines.push(`Will be redacted: ${r.entity}.${r.field}`);
38
+ break;
39
+ default: {
40
+ const _exhaustive = r.policy;
41
+ throw new Error(`Unknown field restriction policy: ${String(_exhaustive)}`);
42
+ }
43
+ }
44
+ }
45
+ }
46
+ return lines.join('\n');
47
+ }
48
+ // ---------------------------------------------------------------------------
49
+ // Scope labels
50
+ // ---------------------------------------------------------------------------
51
+ function resolveScopeLabels(connections, userRoles) {
52
+ const labels = {};
53
+ for (const conn of connections) {
54
+ if (!conn.rowScoping)
55
+ continue;
56
+ for (const [entity, roleMap] of Object.entries(conn.rowScoping)) {
57
+ if (labels[entity])
58
+ continue; // already resolved from a prior connection
59
+ for (const role of userRoles) {
60
+ const rule = roleMap[role];
61
+ if (rule) {
62
+ labels[entity] = rule.label ?? `scoped by ${rule.type}`;
63
+ break;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ return labels;
69
+ }
70
+ // ---------------------------------------------------------------------------
71
+ // Alternative lookup guidance
72
+ // ---------------------------------------------------------------------------
73
+ function generateAlternativeLookupGuidance(connections) {
74
+ const lines = [];
75
+ for (const conn of connections) {
76
+ if (!conn.alternativeLookups || conn.alternativeLookups.length === 0)
77
+ continue;
78
+ for (const lookup of conn.alternativeLookups) {
79
+ const desc = lookup.description ? ` — ${lookup.description}` : '';
80
+ lines.push(`Instead of ${lookup.restrictedField}, use ${lookup.alternativeEndpoint}${desc}`);
81
+ }
82
+ }
83
+ return lines.join('\n');
84
+ }
85
+ // ---------------------------------------------------------------------------
86
+ // Store schema rendering
87
+ // ---------------------------------------------------------------------------
88
+ function renderFieldType(field) {
89
+ switch (field.type) {
90
+ case 'string':
91
+ case 'number':
92
+ case 'boolean':
93
+ case 'datetime':
94
+ return field.nullable ? `${field.type} | null` : field.type;
95
+ case 'enum':
96
+ return field.values ? field.values.join(' | ') : 'enum';
97
+ case 'array':
98
+ return field.item ? `${renderFieldType(field.item)}[]` : 'array';
99
+ case 'object':
100
+ return 'object';
101
+ case 'ref':
102
+ return field.store ? `ref → ${field.store}` : 'ref';
103
+ default: {
104
+ const _exhaustive = field.type;
105
+ return String(_exhaustive);
106
+ }
107
+ }
108
+ }
109
+ function renderSingleStore(store) {
110
+ const parts = [];
111
+ parts.push(`### ${store.name}`);
112
+ parts.push(`Entity: ${store.entity.name} (key: \`${store.entity.key}\`)`);
113
+ parts.push('');
114
+ parts.push('| Field | Type |');
115
+ parts.push('| ----- | ---- |');
116
+ for (const [name, field] of Object.entries(store.entity.schema)) {
117
+ parts.push(`| ${name} | ${renderFieldType(field)} |`);
118
+ }
119
+ return parts.join('\n');
120
+ }
121
+ function renderStoreSection(stores) {
122
+ const parts = ['## Data Stores', ''];
123
+ for (const store of stores) {
124
+ parts.push(renderSingleStore(store));
125
+ parts.push('');
126
+ }
127
+ parts.push('Use `store_<name>` to write a single document, `store_<name>_batch` for multiple, and `query_store` to read from any store.');
128
+ parts.push('');
129
+ return parts.join('\n');
130
+ }
131
+ // ---------------------------------------------------------------------------
132
+ // Main compiler
133
+ // ---------------------------------------------------------------------------
134
+ /**
135
+ * Compile an agent's configuration into a system prompt.
136
+ *
137
+ * This is the single entry point for prompt compilation. It replaces the
138
+ * scattered buildDefaultPrompt() callsites in session-manager and inspect.
139
+ */
140
+ export function compileContext(input) {
141
+ // Short-circuit: if basePrompt is set, use it directly
142
+ if (input.basePrompt) {
143
+ return {
144
+ systemPrompt: input.basePrompt,
145
+ source: 'base_prompt_override',
146
+ contributions: [{ name: 'Base prompt override', category: 'system', tokens: estimateTokens(input.basePrompt) }],
147
+ warnings: [],
148
+ };
149
+ }
150
+ const parts = [];
151
+ const contributions = [];
152
+ const warnings = [];
153
+ // -------------------------------------------------------------------------
154
+ // Identity
155
+ // -------------------------------------------------------------------------
156
+ const identity = `You are ${input.name}${input.description ? ` — ${input.description}` : ''}.`;
157
+ parts.push(identity);
158
+ parts.push('');
159
+ // -------------------------------------------------------------------------
160
+ // User context (standing instructions for this deployment)
161
+ // -------------------------------------------------------------------------
162
+ if (input.userContext) {
163
+ parts.push(input.userContext);
164
+ parts.push('');
165
+ }
166
+ // -------------------------------------------------------------------------
167
+ // Agent override (custom prompt from agents/main.md)
168
+ // -------------------------------------------------------------------------
169
+ if (input.agentOverride) {
170
+ parts.push(input.agentOverride);
171
+ parts.push('');
172
+ contributions.push({ name: 'Agent override', category: 'system', tokens: estimateTokens(input.agentOverride) });
173
+ }
174
+ // -------------------------------------------------------------------------
175
+ // Core behavior
176
+ // -------------------------------------------------------------------------
177
+ const coreBehavior = `## How you work
178
+
179
+ - Use the **request** tool to query connected systems. Always specify the connection name, HTTP method, endpoint, and intent (read or write).
180
+ - Answer straightforward questions directly. If the user asks for a list, give them a complete list with all requested fields — don't summarize or editorialize. Save analysis and recommendations for when they're asked for.
181
+ - Write operations require user confirmation unless the user has explicitly approved the action.
182
+ - Never fabricate data. If a query returns no results, say so. If you're uncertain, ask.
183
+ - When the user's question requires data from external systems, always query first — do not guess.
184
+ - Keep responses concise and grounded in the data you retrieve.`;
185
+ parts.push(coreBehavior);
186
+ parts.push('');
187
+ // -------------------------------------------------------------------------
188
+ // Error handling guidance
189
+ // -------------------------------------------------------------------------
190
+ const errorGuidance = `## Error handling
191
+
192
+ - If a query returns empty results, try different parameters before giving up (e.g. broader filters, different sort/state).
193
+ - If a tool call returns an error, report it clearly to the user with the connection name and what went wrong.
194
+ - On 401/403 errors: tell the user their credentials may be misconfigured. Do not retry.
195
+ - On network errors: tell the user the service appears unreachable. Do not retry.
196
+ - If a connection name is not recognized, use the suggestion from the error message.`;
197
+ parts.push(errorGuidance);
198
+ parts.push('');
199
+ const baseTokens = estimateTokens(identity + coreBehavior + errorGuidance);
200
+ contributions.push({ name: 'Base prompt', category: 'system', tokens: baseTokens });
201
+ // -------------------------------------------------------------------------
202
+ // Skills (before connections — skills are trimmed first when budget is added)
203
+ // -------------------------------------------------------------------------
204
+ if (input.skills && input.skills.length > 0) {
205
+ parts.push('## Skills');
206
+ parts.push('');
207
+ for (const skill of input.skills) {
208
+ const skillParts = [];
209
+ skillParts.push(`### ${skill.name}`);
210
+ if (skill.trigger) {
211
+ skillParts.push(`**When to activate:** ${skill.trigger}`);
212
+ }
213
+ skillParts.push(skill.description);
214
+ if (skill.body) {
215
+ skillParts.push('');
216
+ skillParts.push(skill.body);
217
+ }
218
+ skillParts.push('');
219
+ const skillText = skillParts.join('\n');
220
+ parts.push(skillText);
221
+ contributions.push({ name: skill.name, category: 'skill', tokens: estimateTokens(skillText) });
222
+ }
223
+ }
224
+ // -------------------------------------------------------------------------
225
+ // Knowledge
226
+ // -------------------------------------------------------------------------
227
+ if (input.knowledge && input.knowledge.length > 0) {
228
+ parts.push('## Knowledge Base');
229
+ parts.push('');
230
+ for (const doc of input.knowledge) {
231
+ const docParts = [];
232
+ docParts.push(`### ${doc.title ?? doc.name}`);
233
+ if (doc.body) {
234
+ docParts.push(doc.body);
235
+ }
236
+ docParts.push('');
237
+ const docText = docParts.join('\n');
238
+ parts.push(docText);
239
+ contributions.push({ name: doc.title ?? doc.name, category: 'knowledge', tokens: estimateTokens(docText) });
240
+ }
241
+ }
242
+ // -------------------------------------------------------------------------
243
+ // Connections (after skills/knowledge — connection guidance is security-
244
+ // relevant and should be preserved when budget trimming is added)
245
+ // -------------------------------------------------------------------------
246
+ if (input.connections && input.connections.length > 0) {
247
+ parts.push('## Connected systems');
248
+ parts.push('');
249
+ for (const conn of input.connections) {
250
+ const connParts = [];
251
+ connParts.push(`### Connection: ${conn.name}`);
252
+ if (conn.description) {
253
+ connParts.push(conn.description);
254
+ }
255
+ if (conn.endpoints.length > 0) {
256
+ connParts.push('');
257
+ connParts.push('**Available Endpoints:**');
258
+ for (const ep of conn.endpoints) {
259
+ connParts.push(`- ${ep.method} ${ep.path} — ${ep.description}`);
260
+ }
261
+ }
262
+ if (conn.entities) {
263
+ connParts.push('');
264
+ connParts.push(conn.entities);
265
+ }
266
+ if (conn.rules) {
267
+ connParts.push('');
268
+ connParts.push(conn.rules);
269
+ }
270
+ connParts.push('');
271
+ const connText = connParts.join('\n');
272
+ parts.push(connText);
273
+ contributions.push({ name: conn.name, category: 'connection', tokens: estimateTokens(connText) });
274
+ }
275
+ parts.push('Use `request` with the connection name, method, endpoint, and intent to interact with these systems.');
276
+ parts.push('');
277
+ }
278
+ // -------------------------------------------------------------------------
279
+ // Stores
280
+ // -------------------------------------------------------------------------
281
+ if (input.stores && input.stores.length > 0) {
282
+ const storeText = renderStoreSection(input.stores);
283
+ parts.push(storeText);
284
+ parts.push('');
285
+ for (const store of input.stores) {
286
+ contributions.push({ name: store.name, category: 'store', tokens: estimateTokens(renderSingleStore(store)) });
287
+ }
288
+ }
289
+ // -------------------------------------------------------------------------
290
+ // Automation context
291
+ // -------------------------------------------------------------------------
292
+ if (input.automationContext) {
293
+ parts.push('## Automation Context');
294
+ parts.push(input.automationContext);
295
+ parts.push('');
296
+ contributions.push({ name: 'Automation context', category: 'system', tokens: estimateTokens(input.automationContext) });
297
+ }
298
+ // -------------------------------------------------------------------------
299
+ // Field access restrictions (generated from connection access configs)
300
+ // -------------------------------------------------------------------------
301
+ const userRoles = input.userRoles ?? [];
302
+ if (input.connections && input.connections.length > 0) {
303
+ const fieldGuidance = generateFieldGuidance(input.connections, userRoles);
304
+ if (fieldGuidance) {
305
+ parts.push('## Field Access Restrictions');
306
+ parts.push(fieldGuidance);
307
+ parts.push('');
308
+ contributions.push({ name: 'Field guidance', category: 'system', tokens: estimateTokens(fieldGuidance) });
309
+ }
310
+ const scopeLabels = resolveScopeLabels(input.connections, userRoles);
311
+ if (Object.keys(scopeLabels).length > 0) {
312
+ parts.push('## Data Scope');
313
+ for (const [entity, label] of Object.entries(scopeLabels)) {
314
+ parts.push(`- ${entity}: ${label}`);
315
+ }
316
+ parts.push('');
317
+ }
318
+ const altLookup = generateAlternativeLookupGuidance(input.connections);
319
+ if (altLookup) {
320
+ parts.push(altLookup);
321
+ parts.push('');
322
+ contributions.push({ name: 'Alternative lookups', category: 'system', tokens: estimateTokens(altLookup) });
323
+ }
324
+ }
325
+ // -------------------------------------------------------------------------
326
+ // Plan mode
327
+ // -------------------------------------------------------------------------
328
+ if (input.planMode) {
329
+ parts.push('## Planning Mode Active');
330
+ parts.push('You are currently in planning mode. Present your plan to the user before executing write operations.');
331
+ parts.push('Read operations and explore are allowed freely.');
332
+ if (input.approvedPlan) {
333
+ parts.push('');
334
+ parts.push('## Approved Plan');
335
+ parts.push('Execute the following approved plan:');
336
+ parts.push(input.approvedPlan);
337
+ }
338
+ parts.push('');
339
+ }
340
+ const systemPrompt = parts.join('\n').trim();
341
+ // -------------------------------------------------------------------------
342
+ // Token budget warning
343
+ // -------------------------------------------------------------------------
344
+ if (input.maxSystemTokens) {
345
+ const totalTokens = estimateTokens(systemPrompt);
346
+ if (totalTokens > input.maxSystemTokens) {
347
+ warnings.push(`System prompt exceeds token budget: ~${String(totalTokens)} tokens estimated vs ${String(input.maxSystemTokens)} budget. ` +
348
+ 'Token trimming is not yet implemented — all sections included unconditionally.');
349
+ }
350
+ }
351
+ return {
352
+ systemPrompt,
353
+ source: 'compiled',
354
+ contributions,
355
+ warnings,
356
+ };
357
+ }
358
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/context/compiler.ts"],"names":[],"mappings":"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"}