@roj-ai/sdk 0.0.2

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 (763) hide show
  1. package/dist/bootstrap.d.ts +453 -0
  2. package/dist/bootstrap.d.ts.map +1 -0
  3. package/dist/builtin-events.d.ts +16 -0
  4. package/dist/builtin-events.d.ts.map +1 -0
  5. package/dist/bun-platform/fs.d.ts +9 -0
  6. package/dist/bun-platform/fs.d.ts.map +1 -0
  7. package/dist/bun-platform/index.d.ts +12 -0
  8. package/dist/bun-platform/index.d.ts.map +1 -0
  9. package/dist/bun-platform/process.d.ts +6 -0
  10. package/dist/bun-platform/process.d.ts.map +1 -0
  11. package/dist/config.d.ts +38 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.test.d.ts +2 -0
  14. package/dist/config.test.d.ts.map +1 -0
  15. package/dist/core/agent-loop.integration.test.d.ts +2 -0
  16. package/dist/core/agent-loop.integration.test.d.ts.map +1 -0
  17. package/dist/core/agents/agent-config.test.d.ts +2 -0
  18. package/dist/core/agents/agent-config.test.d.ts.map +1 -0
  19. package/dist/core/agents/agent-roles.d.ts +33 -0
  20. package/dist/core/agents/agent-roles.d.ts.map +1 -0
  21. package/dist/core/agents/agent-shutdown.test.d.ts +6 -0
  22. package/dist/core/agents/agent-shutdown.test.d.ts.map +1 -0
  23. package/dist/core/agents/agent.d.ts +234 -0
  24. package/dist/core/agents/agent.d.ts.map +1 -0
  25. package/dist/core/agents/agent.test.d.ts +2 -0
  26. package/dist/core/agents/agent.test.d.ts.map +1 -0
  27. package/dist/core/agents/communicator.d.ts +3 -0
  28. package/dist/core/agents/communicator.d.ts.map +1 -0
  29. package/dist/core/agents/config.d.ts +84 -0
  30. package/dist/core/agents/config.d.ts.map +1 -0
  31. package/dist/core/agents/context.d.ts +16 -0
  32. package/dist/core/agents/context.d.ts.map +1 -0
  33. package/dist/core/agents/debounce.d.ts +52 -0
  34. package/dist/core/agents/debounce.d.ts.map +1 -0
  35. package/dist/core/agents/handler-events.test.d.ts +5 -0
  36. package/dist/core/agents/handler-events.test.d.ts.map +1 -0
  37. package/dist/core/agents/index.d.ts +2 -0
  38. package/dist/core/agents/index.d.ts.map +1 -0
  39. package/dist/core/agents/response-sanitizer.d.ts +25 -0
  40. package/dist/core/agents/response-sanitizer.d.ts.map +1 -0
  41. package/dist/core/agents/response-sanitizer.test.d.ts +2 -0
  42. package/dist/core/agents/response-sanitizer.test.d.ts.map +1 -0
  43. package/dist/core/agents/retry.d.ts +40 -0
  44. package/dist/core/agents/retry.d.ts.map +1 -0
  45. package/dist/core/agents/schema.d.ts +57 -0
  46. package/dist/core/agents/schema.d.ts.map +1 -0
  47. package/dist/core/agents/state.d.ts +255 -0
  48. package/dist/core/agents/state.d.ts.map +1 -0
  49. package/dist/core/context/state.d.ts +28 -0
  50. package/dist/core/context/state.d.ts.map +1 -0
  51. package/dist/core/errors.d.ts +29 -0
  52. package/dist/core/errors.d.ts.map +1 -0
  53. package/dist/core/event-sourcing.integration.test.d.ts +2 -0
  54. package/dist/core/event-sourcing.integration.test.d.ts.map +1 -0
  55. package/dist/core/events/base-event-store.d.ts +55 -0
  56. package/dist/core/events/base-event-store.d.ts.map +1 -0
  57. package/dist/core/events/event-store.d.ts +108 -0
  58. package/dist/core/events/event-store.d.ts.map +1 -0
  59. package/dist/core/events/file.d.ts +50 -0
  60. package/dist/core/events/file.d.ts.map +1 -0
  61. package/dist/core/events/file.test.d.ts +2 -0
  62. package/dist/core/events/file.test.d.ts.map +1 -0
  63. package/dist/core/events/index.d.ts +4 -0
  64. package/dist/core/events/index.d.ts.map +1 -0
  65. package/dist/core/events/memory.d.ts +43 -0
  66. package/dist/core/events/memory.d.ts.map +1 -0
  67. package/dist/core/events/memory.test.d.ts +2 -0
  68. package/dist/core/events/memory.test.d.ts.map +1 -0
  69. package/dist/core/events/metadata-utils.d.ts +27 -0
  70. package/dist/core/events/metadata-utils.d.ts.map +1 -0
  71. package/dist/core/events/test-helpers.d.ts +28 -0
  72. package/dist/core/events/test-helpers.d.ts.map +1 -0
  73. package/dist/core/events/types.d.ts +46 -0
  74. package/dist/core/events/types.d.ts.map +1 -0
  75. package/dist/core/file-store/file-store.d.ts +56 -0
  76. package/dist/core/file-store/file-store.d.ts.map +1 -0
  77. package/dist/core/file-store/types.d.ts +50 -0
  78. package/dist/core/file-store/types.d.ts.map +1 -0
  79. package/dist/core/image/image-processor.d.ts +15 -0
  80. package/dist/core/image/image-processor.d.ts.map +1 -0
  81. package/dist/core/image/image-processor.test.d.ts +2 -0
  82. package/dist/core/image/image-processor.test.d.ts.map +1 -0
  83. package/dist/core/image/index.d.ts +5 -0
  84. package/dist/core/image/index.d.ts.map +1 -0
  85. package/dist/core/image/noop-resizer.d.ts +5 -0
  86. package/dist/core/image/noop-resizer.d.ts.map +1 -0
  87. package/dist/core/image/types.d.ts +20 -0
  88. package/dist/core/image/types.d.ts.map +1 -0
  89. package/dist/core/image/vips-resizer.d.ts +21 -0
  90. package/dist/core/image/vips-resizer.d.ts.map +1 -0
  91. package/dist/core/image/vips-resizer.test.d.ts +2 -0
  92. package/dist/core/image/vips-resizer.test.d.ts.map +1 -0
  93. package/dist/core/llm/anthropic.d.ts +51 -0
  94. package/dist/core/llm/anthropic.d.ts.map +1 -0
  95. package/dist/core/llm/anthropic.test.d.ts +2 -0
  96. package/dist/core/llm/anthropic.test.d.ts.map +1 -0
  97. package/dist/core/llm/cache-breakpoints.d.ts +17 -0
  98. package/dist/core/llm/cache-breakpoints.d.ts.map +1 -0
  99. package/dist/core/llm/cache-live.test.d.ts +16 -0
  100. package/dist/core/llm/cache-live.test.d.ts.map +1 -0
  101. package/dist/core/llm/index.d.ts +16 -0
  102. package/dist/core/llm/index.d.ts.map +1 -0
  103. package/dist/core/llm/llm-log-types.d.ts +148 -0
  104. package/dist/core/llm/llm-log-types.d.ts.map +1 -0
  105. package/dist/core/llm/logger.d.ts +74 -0
  106. package/dist/core/llm/logger.d.ts.map +1 -0
  107. package/dist/core/llm/logger.test.d.ts +7 -0
  108. package/dist/core/llm/logger.test.d.ts.map +1 -0
  109. package/dist/core/llm/logging-provider.d.ts +20 -0
  110. package/dist/core/llm/logging-provider.d.ts.map +1 -0
  111. package/dist/core/llm/middleware.d.ts +79 -0
  112. package/dist/core/llm/middleware.d.ts.map +1 -0
  113. package/dist/core/llm/mock.d.ts +79 -0
  114. package/dist/core/llm/mock.d.ts.map +1 -0
  115. package/dist/core/llm/mock.test.d.ts +2 -0
  116. package/dist/core/llm/mock.test.d.ts.map +1 -0
  117. package/dist/core/llm/openrouter-mapping.test.d.ts +2 -0
  118. package/dist/core/llm/openrouter-mapping.test.d.ts.map +1 -0
  119. package/dist/core/llm/openrouter.d.ts +37 -0
  120. package/dist/core/llm/openrouter.d.ts.map +1 -0
  121. package/dist/core/llm/openrouter.test.d.ts +2 -0
  122. package/dist/core/llm/openrouter.test.d.ts.map +1 -0
  123. package/dist/core/llm/provider-integration.test.d.ts +12 -0
  124. package/dist/core/llm/provider-integration.test.d.ts.map +1 -0
  125. package/dist/core/llm/provider.d.ts +175 -0
  126. package/dist/core/llm/provider.d.ts.map +1 -0
  127. package/dist/core/llm/routing-provider.d.ts +31 -0
  128. package/dist/core/llm/routing-provider.d.ts.map +1 -0
  129. package/dist/core/llm/routing-provider.test.d.ts +2 -0
  130. package/dist/core/llm/routing-provider.test.d.ts.map +1 -0
  131. package/dist/core/llm/schema.d.ts +24 -0
  132. package/dist/core/llm/schema.d.ts.map +1 -0
  133. package/dist/core/llm/snapshot-fetch.d.ts +21 -0
  134. package/dist/core/llm/snapshot-fetch.d.ts.map +1 -0
  135. package/dist/core/llm/snapshot-middleware.d.ts +71 -0
  136. package/dist/core/llm/snapshot-middleware.d.ts.map +1 -0
  137. package/dist/core/llm/snapshot-middleware.test.d.ts +2 -0
  138. package/dist/core/llm/snapshot-middleware.test.d.ts.map +1 -0
  139. package/dist/core/llm/state.d.ts +73 -0
  140. package/dist/core/llm/state.d.ts.map +1 -0
  141. package/dist/core/llm/tokens.d.ts +36 -0
  142. package/dist/core/llm/tokens.d.ts.map +1 -0
  143. package/dist/core/multi-agent.integration.test.d.ts +2 -0
  144. package/dist/core/multi-agent.integration.test.d.ts.map +1 -0
  145. package/dist/core/plugin-hooks.integration.test.d.ts +2 -0
  146. package/dist/core/plugin-hooks.integration.test.d.ts.map +1 -0
  147. package/dist/core/plugins/hook-types.d.ts +55 -0
  148. package/dist/core/plugins/hook-types.d.ts.map +1 -0
  149. package/dist/core/plugins/index.d.ts +23 -0
  150. package/dist/core/plugins/index.d.ts.map +1 -0
  151. package/dist/core/plugins/plugin-builder.d.ts +474 -0
  152. package/dist/core/plugins/plugin-builder.d.ts.map +1 -0
  153. package/dist/core/preset/config.d.ts +55 -0
  154. package/dist/core/preset/config.d.ts.map +1 -0
  155. package/dist/core/preset/index.d.ts +8 -0
  156. package/dist/core/preset/index.d.ts.map +1 -0
  157. package/dist/core/preset/preset-builder.d.ts +44 -0
  158. package/dist/core/preset/preset-builder.d.ts.map +1 -0
  159. package/dist/core/session-lifecycle.integration.test.d.ts +2 -0
  160. package/dist/core/session-lifecycle.integration.test.d.ts.map +1 -0
  161. package/dist/core/sessions/apply-event.d.ts +19 -0
  162. package/dist/core/sessions/apply-event.d.ts.map +1 -0
  163. package/dist/core/sessions/context.d.ts +34 -0
  164. package/dist/core/sessions/context.d.ts.map +1 -0
  165. package/dist/core/sessions/fork-utils.d.ts +20 -0
  166. package/dist/core/sessions/fork-utils.d.ts.map +1 -0
  167. package/dist/core/sessions/fork-utils.test.d.ts +2 -0
  168. package/dist/core/sessions/fork-utils.test.d.ts.map +1 -0
  169. package/dist/core/sessions/reducer.d.ts +50 -0
  170. package/dist/core/sessions/reducer.d.ts.map +1 -0
  171. package/dist/core/sessions/schema.d.ts +82 -0
  172. package/dist/core/sessions/schema.d.ts.map +1 -0
  173. package/dist/core/sessions/session-environment.d.ts +13 -0
  174. package/dist/core/sessions/session-environment.d.ts.map +1 -0
  175. package/dist/core/sessions/session-manager.d.ts +183 -0
  176. package/dist/core/sessions/session-manager.d.ts.map +1 -0
  177. package/dist/core/sessions/session-store.d.ts +69 -0
  178. package/dist/core/sessions/session-store.d.ts.map +1 -0
  179. package/dist/core/sessions/session.d.ts +212 -0
  180. package/dist/core/sessions/session.d.ts.map +1 -0
  181. package/dist/core/sessions/session.test.d.ts +2 -0
  182. package/dist/core/sessions/session.test.d.ts.map +1 -0
  183. package/dist/core/sessions/state.d.ts +110 -0
  184. package/dist/core/sessions/state.d.ts.map +1 -0
  185. package/dist/core/system.d.ts +97 -0
  186. package/dist/core/system.d.ts.map +1 -0
  187. package/dist/core/tools/context.d.ts +3 -0
  188. package/dist/core/tools/context.d.ts.map +1 -0
  189. package/dist/core/tools/definition.d.ts +10 -0
  190. package/dist/core/tools/definition.d.ts.map +1 -0
  191. package/dist/core/tools/executor.d.ts +28 -0
  192. package/dist/core/tools/executor.d.ts.map +1 -0
  193. package/dist/core/tools/executor.test.d.ts +2 -0
  194. package/dist/core/tools/executor.test.d.ts.map +1 -0
  195. package/dist/core/tools/index.d.ts +4 -0
  196. package/dist/core/tools/index.d.ts.map +1 -0
  197. package/dist/core/tools/schema.d.ts +61 -0
  198. package/dist/core/tools/schema.d.ts.map +1 -0
  199. package/dist/core/tools/state.d.ts +28 -0
  200. package/dist/core/tools/state.d.ts.map +1 -0
  201. package/dist/index.d.ts +111 -0
  202. package/dist/index.d.ts.map +1 -0
  203. package/dist/lib/json/index.d.ts +17 -0
  204. package/dist/lib/json/index.d.ts.map +1 -0
  205. package/dist/lib/logger/console.d.ts +35 -0
  206. package/dist/lib/logger/console.d.ts.map +1 -0
  207. package/dist/lib/logger/console.test.d.ts +2 -0
  208. package/dist/lib/logger/console.test.d.ts.map +1 -0
  209. package/dist/lib/logger/file.d.ts +20 -0
  210. package/dist/lib/logger/file.d.ts.map +1 -0
  211. package/dist/lib/logger/index.d.ts +5 -0
  212. package/dist/lib/logger/index.d.ts.map +1 -0
  213. package/dist/lib/logger/logger.d.ts +87 -0
  214. package/dist/lib/logger/logger.d.ts.map +1 -0
  215. package/dist/lib/logger/ring-buffer.d.ts +33 -0
  216. package/dist/lib/logger/ring-buffer.d.ts.map +1 -0
  217. package/dist/lib/logger/tee.d.ts +15 -0
  218. package/dist/lib/logger/tee.d.ts.map +1 -0
  219. package/dist/lib/mime.d.ts +9 -0
  220. package/dist/lib/mime.d.ts.map +1 -0
  221. package/dist/lib/never.d.ts +2 -0
  222. package/dist/lib/never.d.ts.map +1 -0
  223. package/dist/lib/utils/hash.d.ts +19 -0
  224. package/dist/lib/utils/hash.d.ts.map +1 -0
  225. package/dist/lib/utils/result.d.ts +26 -0
  226. package/dist/lib/utils/result.d.ts.map +1 -0
  227. package/dist/platform/fs.d.ts +39 -0
  228. package/dist/platform/fs.d.ts.map +1 -0
  229. package/dist/platform/index.d.ts +21 -0
  230. package/dist/platform/index.d.ts.map +1 -0
  231. package/dist/platform/process.d.ts +24 -0
  232. package/dist/platform/process.d.ts.map +1 -0
  233. package/dist/plugins/agent-status/plugin.d.ts +8 -0
  234. package/dist/plugins/agent-status/plugin.d.ts.map +1 -0
  235. package/dist/plugins/agents/agents.integration.test.d.ts +2 -0
  236. package/dist/plugins/agents/agents.integration.test.d.ts.map +1 -0
  237. package/dist/plugins/agents/index.d.ts +3 -0
  238. package/dist/plugins/agents/index.d.ts.map +1 -0
  239. package/dist/plugins/agents/plugin.d.ts +57 -0
  240. package/dist/plugins/agents/plugin.d.ts.map +1 -0
  241. package/dist/plugins/context-compact/context-compact.integration.test.d.ts +2 -0
  242. package/dist/plugins/context-compact/context-compact.integration.test.d.ts.map +1 -0
  243. package/dist/plugins/context-compact/context-compactor.d.ts +88 -0
  244. package/dist/plugins/context-compact/context-compactor.d.ts.map +1 -0
  245. package/dist/plugins/context-compact/context-compactor.test.d.ts +2 -0
  246. package/dist/plugins/context-compact/context-compactor.test.d.ts.map +1 -0
  247. package/dist/plugins/context-compact/history-offloader.d.ts +17 -0
  248. package/dist/plugins/context-compact/history-offloader.d.ts.map +1 -0
  249. package/dist/plugins/context-compact/history-offloader.test.d.ts +2 -0
  250. package/dist/plugins/context-compact/history-offloader.test.d.ts.map +1 -0
  251. package/dist/plugins/context-compact/index.d.ts +4 -0
  252. package/dist/plugins/context-compact/index.d.ts.map +1 -0
  253. package/dist/plugins/context-compact/plugin.d.ts +15 -0
  254. package/dist/plugins/context-compact/plugin.d.ts.map +1 -0
  255. package/dist/plugins/filesystem/filesystem.integration.test.d.ts +2 -0
  256. package/dist/plugins/filesystem/filesystem.integration.test.d.ts.map +1 -0
  257. package/dist/plugins/filesystem/helpers.d.ts +34 -0
  258. package/dist/plugins/filesystem/helpers.d.ts.map +1 -0
  259. package/dist/plugins/filesystem/index.d.ts +5 -0
  260. package/dist/plugins/filesystem/index.d.ts.map +1 -0
  261. package/dist/plugins/filesystem/listing.d.ts +38 -0
  262. package/dist/plugins/filesystem/listing.d.ts.map +1 -0
  263. package/dist/plugins/filesystem/plugin.d.ts +53 -0
  264. package/dist/plugins/filesystem/plugin.d.ts.map +1 -0
  265. package/dist/plugins/filesystem/schema.d.ts +7 -0
  266. package/dist/plugins/filesystem/schema.d.ts.map +1 -0
  267. package/dist/plugins/git-status/index.d.ts +2 -0
  268. package/dist/plugins/git-status/index.d.ts.map +1 -0
  269. package/dist/plugins/git-status/plugin.d.ts +12 -0
  270. package/dist/plugins/git-status/plugin.d.ts.map +1 -0
  271. package/dist/plugins/limits-guard/config.d.ts +23 -0
  272. package/dist/plugins/limits-guard/config.d.ts.map +1 -0
  273. package/dist/plugins/limits-guard/index.d.ts +5 -0
  274. package/dist/plugins/limits-guard/index.d.ts.map +1 -0
  275. package/dist/plugins/limits-guard/limit-guard.d.ts +40 -0
  276. package/dist/plugins/limits-guard/limit-guard.d.ts.map +1 -0
  277. package/dist/plugins/limits-guard/limit-guard.test.d.ts +2 -0
  278. package/dist/plugins/limits-guard/limit-guard.test.d.ts.map +1 -0
  279. package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts +2 -0
  280. package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts.map +1 -0
  281. package/dist/plugins/limits-guard/plugin.d.ts +39 -0
  282. package/dist/plugins/limits-guard/plugin.d.ts.map +1 -0
  283. package/dist/plugins/llm-debug/index.d.ts +2 -0
  284. package/dist/plugins/llm-debug/index.d.ts.map +1 -0
  285. package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts +2 -0
  286. package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts.map +1 -0
  287. package/dist/plugins/llm-debug/plugin.d.ts +31 -0
  288. package/dist/plugins/llm-debug/plugin.d.ts.map +1 -0
  289. package/dist/plugins/logs/index.d.ts +2 -0
  290. package/dist/plugins/logs/index.d.ts.map +1 -0
  291. package/dist/plugins/logs/plugin.d.ts +10 -0
  292. package/dist/plugins/logs/plugin.d.ts.map +1 -0
  293. package/dist/plugins/mailbox/helpers.d.ts +20 -0
  294. package/dist/plugins/mailbox/helpers.d.ts.map +1 -0
  295. package/dist/plugins/mailbox/index.d.ts +9 -0
  296. package/dist/plugins/mailbox/index.d.ts.map +1 -0
  297. package/dist/plugins/mailbox/mailbox.integration.test.d.ts +2 -0
  298. package/dist/plugins/mailbox/mailbox.integration.test.d.ts.map +1 -0
  299. package/dist/plugins/mailbox/plugin.d.ts +31 -0
  300. package/dist/plugins/mailbox/plugin.d.ts.map +1 -0
  301. package/dist/plugins/mailbox/prompts.d.ts +21 -0
  302. package/dist/plugins/mailbox/prompts.d.ts.map +1 -0
  303. package/dist/plugins/mailbox/query.d.ts +33 -0
  304. package/dist/plugins/mailbox/query.d.ts.map +1 -0
  305. package/dist/plugins/mailbox/schema.d.ts +54 -0
  306. package/dist/plugins/mailbox/schema.d.ts.map +1 -0
  307. package/dist/plugins/mailbox/state.d.ts +40 -0
  308. package/dist/plugins/mailbox/state.d.ts.map +1 -0
  309. package/dist/plugins/resources/index.d.ts +7 -0
  310. package/dist/plugins/resources/index.d.ts.map +1 -0
  311. package/dist/plugins/resources/manifest.d.ts +23 -0
  312. package/dist/plugins/resources/manifest.d.ts.map +1 -0
  313. package/dist/plugins/resources/plugin.d.ts +28 -0
  314. package/dist/plugins/resources/plugin.d.ts.map +1 -0
  315. package/dist/plugins/resources/post-inject.d.ts +39 -0
  316. package/dist/plugins/resources/post-inject.d.ts.map +1 -0
  317. package/dist/plugins/resources/state.d.ts +25 -0
  318. package/dist/plugins/resources/state.d.ts.map +1 -0
  319. package/dist/plugins/result-eviction/index.d.ts +3 -0
  320. package/dist/plugins/result-eviction/index.d.ts.map +1 -0
  321. package/dist/plugins/result-eviction/plugin.d.ts +19 -0
  322. package/dist/plugins/result-eviction/plugin.d.ts.map +1 -0
  323. package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts +2 -0
  324. package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts.map +1 -0
  325. package/dist/plugins/services/plugin.d.ts +85 -0
  326. package/dist/plugins/services/plugin.d.ts.map +1 -0
  327. package/dist/plugins/services/port-pool.d.ts +32 -0
  328. package/dist/plugins/services/port-pool.d.ts.map +1 -0
  329. package/dist/plugins/services/prompt.d.ts +13 -0
  330. package/dist/plugins/services/prompt.d.ts.map +1 -0
  331. package/dist/plugins/services/schema.d.ts +70 -0
  332. package/dist/plugins/services/schema.d.ts.map +1 -0
  333. package/dist/plugins/services/service.d.ts +86 -0
  334. package/dist/plugins/services/service.d.ts.map +1 -0
  335. package/dist/plugins/services/services.integration.test.d.ts +2 -0
  336. package/dist/plugins/services/services.integration.test.d.ts.map +1 -0
  337. package/dist/plugins/session-lifecycle/index.d.ts +2 -0
  338. package/dist/plugins/session-lifecycle/index.d.ts.map +1 -0
  339. package/dist/plugins/session-lifecycle/plugin.d.ts +97 -0
  340. package/dist/plugins/session-lifecycle/plugin.d.ts.map +1 -0
  341. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts +2 -0
  342. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts.map +1 -0
  343. package/dist/plugins/session-state/plugin.d.ts +48 -0
  344. package/dist/plugins/session-state/plugin.d.ts.map +1 -0
  345. package/dist/plugins/session-stats/index.d.ts +4 -0
  346. package/dist/plugins/session-stats/index.d.ts.map +1 -0
  347. package/dist/plugins/session-stats/plugin.d.ts +29 -0
  348. package/dist/plugins/session-stats/plugin.d.ts.map +1 -0
  349. package/dist/plugins/shell/executor.d.ts +78 -0
  350. package/dist/plugins/shell/executor.d.ts.map +1 -0
  351. package/dist/plugins/shell/index.d.ts +6 -0
  352. package/dist/plugins/shell/index.d.ts.map +1 -0
  353. package/dist/plugins/shell/plugin.d.ts +51 -0
  354. package/dist/plugins/shell/plugin.d.ts.map +1 -0
  355. package/dist/plugins/shell/shell.integration.test.d.ts +2 -0
  356. package/dist/plugins/shell/shell.integration.test.d.ts.map +1 -0
  357. package/dist/plugins/shell/shell.test.d.ts +2 -0
  358. package/dist/plugins/shell/shell.test.d.ts.map +1 -0
  359. package/dist/plugins/skills/discovery.d.ts +69 -0
  360. package/dist/plugins/skills/discovery.d.ts.map +1 -0
  361. package/dist/plugins/skills/discovery.test.d.ts +2 -0
  362. package/dist/plugins/skills/discovery.test.d.ts.map +1 -0
  363. package/dist/plugins/skills/index.d.ts +11 -0
  364. package/dist/plugins/skills/index.d.ts.map +1 -0
  365. package/dist/plugins/skills/plugin.d.ts +94 -0
  366. package/dist/plugins/skills/plugin.d.ts.map +1 -0
  367. package/dist/plugins/skills/prompts.d.ts +29 -0
  368. package/dist/plugins/skills/prompts.d.ts.map +1 -0
  369. package/dist/plugins/skills/schema.d.ts +64 -0
  370. package/dist/plugins/skills/schema.d.ts.map +1 -0
  371. package/dist/plugins/skills/skills.integration.test.d.ts +2 -0
  372. package/dist/plugins/skills/skills.integration.test.d.ts.map +1 -0
  373. package/dist/plugins/snapshotting/index.d.ts +4 -0
  374. package/dist/plugins/snapshotting/index.d.ts.map +1 -0
  375. package/dist/plugins/snapshotting/jj-snapshotter.d.ts +27 -0
  376. package/dist/plugins/snapshotting/jj-snapshotter.d.ts.map +1 -0
  377. package/dist/plugins/snapshotting/plugin.d.ts +15 -0
  378. package/dist/plugins/snapshotting/plugin.d.ts.map +1 -0
  379. package/dist/plugins/snapshotting/snapshotter.d.ts +19 -0
  380. package/dist/plugins/snapshotting/snapshotter.d.ts.map +1 -0
  381. package/dist/plugins/todo/index.d.ts +7 -0
  382. package/dist/plugins/todo/index.d.ts.map +1 -0
  383. package/dist/plugins/todo/plugin.d.ts +95 -0
  384. package/dist/plugins/todo/plugin.d.ts.map +1 -0
  385. package/dist/plugins/todo/prompts.d.ts +13 -0
  386. package/dist/plugins/todo/prompts.d.ts.map +1 -0
  387. package/dist/plugins/todo/schema.d.ts +44 -0
  388. package/dist/plugins/todo/schema.d.ts.map +1 -0
  389. package/dist/plugins/todo/todo.integration.test.d.ts +2 -0
  390. package/dist/plugins/todo/todo.integration.test.d.ts.map +1 -0
  391. package/dist/plugins/uploads/index.d.ts +9 -0
  392. package/dist/plugins/uploads/index.d.ts.map +1 -0
  393. package/dist/plugins/uploads/plugin.d.ts +56 -0
  394. package/dist/plugins/uploads/plugin.d.ts.map +1 -0
  395. package/dist/plugins/uploads/preprocessor.d.ts +70 -0
  396. package/dist/plugins/uploads/preprocessor.d.ts.map +1 -0
  397. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts +49 -0
  398. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts.map +1 -0
  399. package/dist/plugins/uploads/preprocessors/index.d.ts +7 -0
  400. package/dist/plugins/uploads/preprocessors/index.d.ts.map +1 -0
  401. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts +43 -0
  402. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts.map +1 -0
  403. package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts +30 -0
  404. package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts.map +1 -0
  405. package/dist/plugins/uploads/schema.d.ts +72 -0
  406. package/dist/plugins/uploads/schema.d.ts.map +1 -0
  407. package/dist/plugins/uploads/state.d.ts +38 -0
  408. package/dist/plugins/uploads/state.d.ts.map +1 -0
  409. package/dist/plugins/uploads/uploads.integration.test.d.ts +2 -0
  410. package/dist/plugins/uploads/uploads.integration.test.d.ts.map +1 -0
  411. package/dist/plugins/user-chat/index.d.ts +7 -0
  412. package/dist/plugins/user-chat/index.d.ts.map +1 -0
  413. package/dist/plugins/user-chat/plugin.d.ts +221 -0
  414. package/dist/plugins/user-chat/plugin.d.ts.map +1 -0
  415. package/dist/plugins/user-chat/prompts.d.ts +13 -0
  416. package/dist/plugins/user-chat/prompts.d.ts.map +1 -0
  417. package/dist/plugins/user-chat/schema.d.ts +82 -0
  418. package/dist/plugins/user-chat/schema.d.ts.map +1 -0
  419. package/dist/plugins/user-chat/user-chat.integration.test.d.ts +2 -0
  420. package/dist/plugins/user-chat/user-chat.integration.test.d.ts.map +1 -0
  421. package/dist/plugins/workers/context.d.ts +159 -0
  422. package/dist/plugins/workers/context.d.ts.map +1 -0
  423. package/dist/plugins/workers/definition.d.ts +118 -0
  424. package/dist/plugins/workers/definition.d.ts.map +1 -0
  425. package/dist/plugins/workers/index.d.ts +11 -0
  426. package/dist/plugins/workers/index.d.ts.map +1 -0
  427. package/dist/plugins/workers/plugin.d.ts +125 -0
  428. package/dist/plugins/workers/plugin.d.ts.map +1 -0
  429. package/dist/plugins/workers/worker.d.ts +76 -0
  430. package/dist/plugins/workers/worker.d.ts.map +1 -0
  431. package/dist/plugins/workers/workers.integration.test.d.ts +2 -0
  432. package/dist/plugins/workers/workers.integration.test.d.ts.map +1 -0
  433. package/dist/prompts/base.d.ts +75 -0
  434. package/dist/prompts/base.d.ts.map +1 -0
  435. package/dist/prompts/builder.d.ts +73 -0
  436. package/dist/prompts/builder.d.ts.map +1 -0
  437. package/dist/prompts/index.d.ts +10 -0
  438. package/dist/prompts/index.d.ts.map +1 -0
  439. package/dist/prompts/macros.d.ts +15 -0
  440. package/dist/prompts/macros.d.ts.map +1 -0
  441. package/dist/prompts/macros.test.d.ts +2 -0
  442. package/dist/prompts/macros.test.d.ts.map +1 -0
  443. package/dist/testing/bootstrap-for-testing.d.ts +12 -0
  444. package/dist/testing/bootstrap-for-testing.d.ts.map +1 -0
  445. package/dist/testing/index.d.ts +8 -0
  446. package/dist/testing/index.d.ts.map +1 -0
  447. package/dist/testing/node-platform.d.ts +12 -0
  448. package/dist/testing/node-platform.d.ts.map +1 -0
  449. package/dist/testing/notification-collector.d.ts +46 -0
  450. package/dist/testing/notification-collector.d.ts.map +1 -0
  451. package/dist/testing/preset-helpers.d.ts +28 -0
  452. package/dist/testing/preset-helpers.d.ts.map +1 -0
  453. package/dist/testing/test-harness.d.ts +117 -0
  454. package/dist/testing/test-harness.d.ts.map +1 -0
  455. package/dist/testing/test-harness.test.d.ts +2 -0
  456. package/dist/testing/test-harness.test.d.ts.map +1 -0
  457. package/dist/testing/wait-helpers.d.ts +17 -0
  458. package/dist/testing/wait-helpers.d.ts.map +1 -0
  459. package/dist/transport/adapter/client-adapter.d.ts +32 -0
  460. package/dist/transport/adapter/client-adapter.d.ts.map +1 -0
  461. package/dist/transport/adapter/index.d.ts +23 -0
  462. package/dist/transport/adapter/index.d.ts.map +1 -0
  463. package/dist/transport/adapter/server-adapter.d.ts +29 -0
  464. package/dist/transport/adapter/server-adapter.d.ts.map +1 -0
  465. package/dist/transport/adapter/types.d.ts +14 -0
  466. package/dist/transport/adapter/types.d.ts.map +1 -0
  467. package/dist/transport/http/app.d.ts +41 -0
  468. package/dist/transport/http/app.d.ts.map +1 -0
  469. package/dist/transport/http/index.d.ts +7 -0
  470. package/dist/transport/http/index.d.ts.map +1 -0
  471. package/dist/transport/http/middleware/bearer-auth.d.ts +16 -0
  472. package/dist/transport/http/middleware/bearer-auth.d.ts.map +1 -0
  473. package/dist/transport/http/middleware/error-handler.d.ts +21 -0
  474. package/dist/transport/http/middleware/error-handler.d.ts.map +1 -0
  475. package/dist/transport/http/routes/files.d.ts +16 -0
  476. package/dist/transport/http/routes/files.d.ts.map +1 -0
  477. package/dist/transport/http/routes/resources.d.ts +12 -0
  478. package/dist/transport/http/routes/resources.d.ts.map +1 -0
  479. package/dist/transport/http/routes/rpc.d.ts +22 -0
  480. package/dist/transport/http/routes/rpc.d.ts.map +1 -0
  481. package/dist/transport/http/routes/rpc.integration.test.d.ts +2 -0
  482. package/dist/transport/http/routes/rpc.integration.test.d.ts.map +1 -0
  483. package/dist/transport/http/routes/rpc.test.d.ts +2 -0
  484. package/dist/transport/http/routes/rpc.test.d.ts.map +1 -0
  485. package/dist/transport/http/routes/upload.d.ts +14 -0
  486. package/dist/transport/http/routes/upload.d.ts.map +1 -0
  487. package/dist/transport/rpc/index.d.ts +8 -0
  488. package/dist/transport/rpc/index.d.ts.map +1 -0
  489. package/dist/transport/rpc/methods.d.ts +25 -0
  490. package/dist/transport/rpc/methods.d.ts.map +1 -0
  491. package/dist/user-config.d.ts +29 -0
  492. package/dist/user-config.d.ts.map +1 -0
  493. package/package.json +154 -0
  494. package/src/bootstrap.ts +268 -0
  495. package/src/builtin-events.ts +25 -0
  496. package/src/bun-platform/fs.ts +50 -0
  497. package/src/bun-platform/index.ts +21 -0
  498. package/src/bun-platform/process.ts +25 -0
  499. package/src/config.test.ts +174 -0
  500. package/src/config.ts +103 -0
  501. package/src/core/agent-loop.integration.test.ts +503 -0
  502. package/src/core/agents/agent-config.test.ts +240 -0
  503. package/src/core/agents/agent-roles.ts +41 -0
  504. package/src/core/agents/agent-shutdown.test.ts +236 -0
  505. package/src/core/agents/agent.test.ts +387 -0
  506. package/src/core/agents/agent.ts +1472 -0
  507. package/src/core/agents/communicator.ts +16 -0
  508. package/src/core/agents/config.ts +98 -0
  509. package/src/core/agents/context.ts +19 -0
  510. package/src/core/agents/debounce.ts +116 -0
  511. package/src/core/agents/handler-events.test.ts +167 -0
  512. package/src/core/agents/index.ts +1 -0
  513. package/src/core/agents/response-sanitizer.test.ts +137 -0
  514. package/src/core/agents/response-sanitizer.ts +67 -0
  515. package/src/core/agents/retry.ts +164 -0
  516. package/src/core/agents/schema.ts +75 -0
  517. package/src/core/agents/state.ts +272 -0
  518. package/src/core/context/state.ts +38 -0
  519. package/src/core/errors.ts +55 -0
  520. package/src/core/event-sourcing.integration.test.ts +191 -0
  521. package/src/core/events/base-event-store.ts +264 -0
  522. package/src/core/events/event-store.ts +143 -0
  523. package/src/core/events/file.test.ts +436 -0
  524. package/src/core/events/file.ts +372 -0
  525. package/src/core/events/index.ts +3 -0
  526. package/src/core/events/memory.test.ts +741 -0
  527. package/src/core/events/memory.ts +131 -0
  528. package/src/core/events/metadata-utils.ts +133 -0
  529. package/src/core/events/test-helpers.ts +31 -0
  530. package/src/core/events/types.ts +64 -0
  531. package/src/core/file-store/file-store.ts +275 -0
  532. package/src/core/file-store/types.ts +52 -0
  533. package/src/core/image/image-processor.test.ts +218 -0
  534. package/src/core/image/image-processor.ts +127 -0
  535. package/src/core/image/index.ts +4 -0
  536. package/src/core/image/noop-resizer.ts +7 -0
  537. package/src/core/image/types.ts +24 -0
  538. package/src/core/image/vips-resizer.test.ts +377 -0
  539. package/src/core/image/vips-resizer.ts +124 -0
  540. package/src/core/llm/__snapshots__/anthropic-assistant-text-with-tool-calls.json +156 -0
  541. package/src/core/llm/__snapshots__/anthropic-consecutive-tool-results.json +152 -0
  542. package/src/core/llm/__snapshots__/anthropic-image-data-url.json +105 -0
  543. package/src/core/llm/__snapshots__/anthropic-image-http-url.json +104 -0
  544. package/src/core/llm/__snapshots__/anthropic-multiple-images.json +113 -0
  545. package/src/core/llm/__snapshots__/anthropic-multiple-tool-calls-requested.json +151 -0
  546. package/src/core/llm/__snapshots__/anthropic-simple-user-message.json +97 -0
  547. package/src/core/llm/__snapshots__/anthropic-system-message-in-conversation.json +119 -0
  548. package/src/core/llm/__snapshots__/anthropic-tool-call.json +123 -0
  549. package/src/core/llm/__snapshots__/anthropic-tool-error-result.json +139 -0
  550. package/src/core/llm/__snapshots__/anthropic-tool-result-with-image.json +152 -0
  551. package/src/core/llm/__snapshots__/anthropic-tool-roundtrip.json +139 -0
  552. package/src/core/llm/__snapshots__/openrouter-assistant-text-with-tool-calls.json +150 -0
  553. package/src/core/llm/__snapshots__/openrouter-consecutive-tool-results.json +150 -0
  554. package/src/core/llm/__snapshots__/openrouter-image-data-url.json +107 -0
  555. package/src/core/llm/__snapshots__/openrouter-image-http-url.json +107 -0
  556. package/src/core/llm/__snapshots__/openrouter-multiple-images.json +113 -0
  557. package/src/core/llm/__snapshots__/openrouter-multiple-tool-calls-requested.json +158 -0
  558. package/src/core/llm/__snapshots__/openrouter-simple-user-message.json +96 -0
  559. package/src/core/llm/__snapshots__/openrouter-system-message-in-conversation.json +108 -0
  560. package/src/core/llm/__snapshots__/openrouter-tool-call.json +129 -0
  561. package/src/core/llm/__snapshots__/openrouter-tool-error-result.json +137 -0
  562. package/src/core/llm/__snapshots__/openrouter-tool-result-with-image.json +148 -0
  563. package/src/core/llm/__snapshots__/openrouter-tool-roundtrip.json +137 -0
  564. package/src/core/llm/anthropic.test.ts +509 -0
  565. package/src/core/llm/anthropic.ts +578 -0
  566. package/src/core/llm/cache-breakpoints.ts +38 -0
  567. package/src/core/llm/cache-live.test.ts +155 -0
  568. package/src/core/llm/index.ts +30 -0
  569. package/src/core/llm/llm-log-types.ts +167 -0
  570. package/src/core/llm/logger.test.ts +270 -0
  571. package/src/core/llm/logger.ts +306 -0
  572. package/src/core/llm/logging-provider.ts +73 -0
  573. package/src/core/llm/middleware.ts +172 -0
  574. package/src/core/llm/mock.test.ts +402 -0
  575. package/src/core/llm/mock.ts +234 -0
  576. package/src/core/llm/openrouter-mapping.test.ts +153 -0
  577. package/src/core/llm/openrouter.test.ts +499 -0
  578. package/src/core/llm/openrouter.ts +458 -0
  579. package/src/core/llm/provider-integration.test.ts +408 -0
  580. package/src/core/llm/provider.ts +238 -0
  581. package/src/core/llm/routing-provider.test.ts +113 -0
  582. package/src/core/llm/routing-provider.ts +86 -0
  583. package/src/core/llm/schema.ts +47 -0
  584. package/src/core/llm/snapshot-fetch.ts +158 -0
  585. package/src/core/llm/snapshot-middleware.test.ts +168 -0
  586. package/src/core/llm/snapshot-middleware.ts +185 -0
  587. package/src/core/llm/state.ts +92 -0
  588. package/src/core/llm/tokens.ts +61 -0
  589. package/src/core/multi-agent.integration.test.ts +340 -0
  590. package/src/core/plugin-hooks.integration.test.ts +428 -0
  591. package/src/core/plugins/hook-types.ts +49 -0
  592. package/src/core/plugins/index.ts +52 -0
  593. package/src/core/plugins/plugin-builder.ts +967 -0
  594. package/src/core/preset/config.ts +110 -0
  595. package/src/core/preset/index.ts +11 -0
  596. package/src/core/preset/preset-builder.ts +111 -0
  597. package/src/core/session-lifecycle.integration.test.ts +202 -0
  598. package/src/core/sessions/apply-event.ts +46 -0
  599. package/src/core/sessions/context.ts +36 -0
  600. package/src/core/sessions/fork-utils.test.ts +158 -0
  601. package/src/core/sessions/fork-utils.ts +71 -0
  602. package/src/core/sessions/reducer.ts +95 -0
  603. package/src/core/sessions/schema.ts +91 -0
  604. package/src/core/sessions/session-environment.ts +12 -0
  605. package/src/core/sessions/session-manager.ts +883 -0
  606. package/src/core/sessions/session-store.ts +141 -0
  607. package/src/core/sessions/session.test.ts +1730 -0
  608. package/src/core/sessions/session.ts +833 -0
  609. package/src/core/sessions/state.ts +520 -0
  610. package/src/core/system.ts +206 -0
  611. package/src/core/tools/context.ts +3 -0
  612. package/src/core/tools/definition.ts +15 -0
  613. package/src/core/tools/executor.test.ts +160 -0
  614. package/src/core/tools/executor.ts +117 -0
  615. package/src/core/tools/index.ts +3 -0
  616. package/src/core/tools/schema.ts +80 -0
  617. package/src/core/tools/state.ts +34 -0
  618. package/src/index.ts +165 -0
  619. package/src/lib/json/index.ts +20 -0
  620. package/src/lib/logger/console.test.ts +348 -0
  621. package/src/lib/logger/console.ts +185 -0
  622. package/src/lib/logger/file.ts +65 -0
  623. package/src/lib/logger/index.ts +4 -0
  624. package/src/lib/logger/logger.ts +114 -0
  625. package/src/lib/logger/ring-buffer.ts +65 -0
  626. package/src/lib/logger/tee.ts +51 -0
  627. package/src/lib/mime.ts +23 -0
  628. package/src/lib/never.ts +3 -0
  629. package/src/lib/utils/hash.ts +38 -0
  630. package/src/lib/utils/result.ts +35 -0
  631. package/src/platform/fs.ts +38 -0
  632. package/src/platform/index.ts +23 -0
  633. package/src/platform/process.ts +28 -0
  634. package/src/plugins/agent-status/plugin.ts +77 -0
  635. package/src/plugins/agents/agents.integration.test.ts +808 -0
  636. package/src/plugins/agents/index.ts +2 -0
  637. package/src/plugins/agents/plugin.ts +242 -0
  638. package/src/plugins/context-compact/context-compact.integration.test.ts +207 -0
  639. package/src/plugins/context-compact/context-compactor.test.ts +923 -0
  640. package/src/plugins/context-compact/context-compactor.ts +343 -0
  641. package/src/plugins/context-compact/history-offloader.test.ts +100 -0
  642. package/src/plugins/context-compact/history-offloader.ts +47 -0
  643. package/src/plugins/context-compact/index.ts +3 -0
  644. package/src/plugins/context-compact/plugin.ts +62 -0
  645. package/src/plugins/filesystem/filesystem.integration.test.ts +485 -0
  646. package/src/plugins/filesystem/helpers.ts +216 -0
  647. package/src/plugins/filesystem/index.ts +4 -0
  648. package/src/plugins/filesystem/listing.ts +276 -0
  649. package/src/plugins/filesystem/plugin.ts +468 -0
  650. package/src/plugins/filesystem/schema.ts +6 -0
  651. package/src/plugins/git-status/index.ts +1 -0
  652. package/src/plugins/git-status/plugin.ts +166 -0
  653. package/src/plugins/limits-guard/config.ts +26 -0
  654. package/src/plugins/limits-guard/index.ts +4 -0
  655. package/src/plugins/limits-guard/limit-guard.test.ts +161 -0
  656. package/src/plugins/limits-guard/limit-guard.ts +164 -0
  657. package/src/plugins/limits-guard/limits-guard.integration.test.ts +437 -0
  658. package/src/plugins/limits-guard/plugin.ts +306 -0
  659. package/src/plugins/llm-debug/index.ts +1 -0
  660. package/src/plugins/llm-debug/llm-debug.integration.test.ts +192 -0
  661. package/src/plugins/llm-debug/plugin.ts +172 -0
  662. package/src/plugins/logs/index.ts +1 -0
  663. package/src/plugins/logs/plugin.ts +39 -0
  664. package/src/plugins/mailbox/helpers.ts +83 -0
  665. package/src/plugins/mailbox/index.ts +13 -0
  666. package/src/plugins/mailbox/mailbox.integration.test.ts +705 -0
  667. package/src/plugins/mailbox/plugin.ts +270 -0
  668. package/src/plugins/mailbox/prompts.ts +104 -0
  669. package/src/plugins/mailbox/query.ts +53 -0
  670. package/src/plugins/mailbox/schema.ts +81 -0
  671. package/src/plugins/mailbox/state.ts +52 -0
  672. package/src/plugins/resources/index.ts +11 -0
  673. package/src/plugins/resources/manifest.ts +25 -0
  674. package/src/plugins/resources/plugin.ts +201 -0
  675. package/src/plugins/resources/post-inject.ts +74 -0
  676. package/src/plugins/resources/state.ts +30 -0
  677. package/src/plugins/result-eviction/index.ts +2 -0
  678. package/src/plugins/result-eviction/plugin.ts +65 -0
  679. package/src/plugins/result-eviction/result-eviction.integration.test.ts +244 -0
  680. package/src/plugins/services/plugin.ts +485 -0
  681. package/src/plugins/services/port-pool.ts +73 -0
  682. package/src/plugins/services/prompt.ts +53 -0
  683. package/src/plugins/services/schema.ts +83 -0
  684. package/src/plugins/services/service.ts +578 -0
  685. package/src/plugins/services/services.integration.test.ts +595 -0
  686. package/src/plugins/session-lifecycle/index.ts +1 -0
  687. package/src/plugins/session-lifecycle/plugin.ts +302 -0
  688. package/src/plugins/session-lifecycle/session-lifecycle.integration.test.ts +639 -0
  689. package/src/plugins/session-state/plugin.ts +179 -0
  690. package/src/plugins/session-stats/index.ts +3 -0
  691. package/src/plugins/session-stats/plugin.ts +120 -0
  692. package/src/plugins/shell/executor.ts +462 -0
  693. package/src/plugins/shell/index.ts +23 -0
  694. package/src/plugins/shell/plugin.ts +118 -0
  695. package/src/plugins/shell/shell.integration.test.ts +273 -0
  696. package/src/plugins/shell/shell.test.ts +314 -0
  697. package/src/plugins/skills/discovery.test.ts +395 -0
  698. package/src/plugins/skills/discovery.ts +276 -0
  699. package/src/plugins/skills/index.ts +32 -0
  700. package/src/plugins/skills/plugin.ts +381 -0
  701. package/src/plugins/skills/prompts.ts +84 -0
  702. package/src/plugins/skills/schema.ts +88 -0
  703. package/src/plugins/skills/skills.integration.test.ts +580 -0
  704. package/src/plugins/snapshotting/index.ts +3 -0
  705. package/src/plugins/snapshotting/jj-snapshotter.ts +122 -0
  706. package/src/plugins/snapshotting/plugin.ts +36 -0
  707. package/src/plugins/snapshotting/snapshotter.ts +20 -0
  708. package/src/plugins/todo/index.ts +11 -0
  709. package/src/plugins/todo/plugin.ts +363 -0
  710. package/src/plugins/todo/prompts.ts +63 -0
  711. package/src/plugins/todo/schema.ts +71 -0
  712. package/src/plugins/todo/todo.integration.test.ts +687 -0
  713. package/src/plugins/uploads/index.ts +13 -0
  714. package/src/plugins/uploads/plugin.ts +406 -0
  715. package/src/plugins/uploads/preprocessor.ts +111 -0
  716. package/src/plugins/uploads/preprocessors/image-classifier.ts +176 -0
  717. package/src/plugins/uploads/preprocessors/index.ts +7 -0
  718. package/src/plugins/uploads/preprocessors/markitdown-preprocessor.ts +262 -0
  719. package/src/plugins/uploads/preprocessors/zip-preprocessor.ts +210 -0
  720. package/src/plugins/uploads/schema.ts +92 -0
  721. package/src/plugins/uploads/state.ts +42 -0
  722. package/src/plugins/uploads/uploads.integration.test.ts +654 -0
  723. package/src/plugins/user-chat/index.ts +17 -0
  724. package/src/plugins/user-chat/plugin.ts +728 -0
  725. package/src/plugins/user-chat/prompts.ts +30 -0
  726. package/src/plugins/user-chat/schema.ts +80 -0
  727. package/src/plugins/user-chat/user-chat.integration.test.ts +794 -0
  728. package/src/plugins/workers/context.ts +251 -0
  729. package/src/plugins/workers/definition.ts +169 -0
  730. package/src/plugins/workers/index.ts +21 -0
  731. package/src/plugins/workers/plugin.ts +722 -0
  732. package/src/plugins/workers/worker.ts +115 -0
  733. package/src/plugins/workers/workers.integration.test.ts +778 -0
  734. package/src/prompts/base.ts +266 -0
  735. package/src/prompts/builder.ts +194 -0
  736. package/src/prompts/index.ts +36 -0
  737. package/src/prompts/macros.test.ts +107 -0
  738. package/src/prompts/macros.ts +27 -0
  739. package/src/testing/bootstrap-for-testing.ts +39 -0
  740. package/src/testing/index.ts +7 -0
  741. package/src/testing/node-platform.ts +80 -0
  742. package/src/testing/notification-collector.ts +100 -0
  743. package/src/testing/preset-helpers.ts +57 -0
  744. package/src/testing/test-harness.test.ts +63 -0
  745. package/src/testing/test-harness.ts +279 -0
  746. package/src/testing/wait-helpers.ts +84 -0
  747. package/src/transport/adapter/client-adapter.ts +81 -0
  748. package/src/transport/adapter/index.ts +42 -0
  749. package/src/transport/adapter/server-adapter.ts +93 -0
  750. package/src/transport/adapter/types.ts +20 -0
  751. package/src/transport/http/app.ts +129 -0
  752. package/src/transport/http/index.ts +7 -0
  753. package/src/transport/http/middleware/bearer-auth.ts +40 -0
  754. package/src/transport/http/middleware/error-handler.ts +76 -0
  755. package/src/transport/http/routes/files.ts +274 -0
  756. package/src/transport/http/routes/resources.ts +115 -0
  757. package/src/transport/http/routes/rpc.integration.test.ts +243 -0
  758. package/src/transport/http/routes/rpc.test.ts +372 -0
  759. package/src/transport/http/routes/rpc.ts +156 -0
  760. package/src/transport/http/routes/upload.ts +286 -0
  761. package/src/transport/rpc/index.ts +11 -0
  762. package/src/transport/rpc/methods.ts +38 -0
  763. package/src/user-config.ts +33 -0
@@ -0,0 +1,110 @@
1
+ import type { AnyAgentDefinition, CommunicatorConfig, OrchestratorConfig } from '~/core/agents/config.js'
2
+ import type { LLMMiddleware } from '~/core/llm/middleware.js'
3
+ import type { SessionPluginConfig } from '~/core/plugins/plugin-builder.js'
4
+ import type { CreatePresetInput } from './preset-builder.js'
5
+ import { collectFromTree } from './preset-builder.js'
6
+
7
+ /**
8
+ * Preset - complete configuration for a Roj session
9
+ */
10
+ export interface PresetDefinition {
11
+ id: string
12
+ name: string
13
+ description?: string
14
+
15
+ /** Default workspace directory path. Can be overridden per session. */
16
+ workspaceDir?: string
17
+
18
+ /** When true, agents see virtual paths (/home/user/session, /home/user/workspace) instead of real filesystem paths */
19
+ sandboxed?: boolean
20
+
21
+ /**
22
+ * Session-level plugin configurations.
23
+ * Created via `pluginDefinition.configure(config)`.
24
+ */
25
+ plugins?: SessionPluginConfig[]
26
+
27
+ /** Orchestrator configuration (always exists) */
28
+ orchestrator: OrchestratorConfig
29
+
30
+ /**
31
+ * Communication agent configuration.
32
+ * When present, user messages are routed through communicator first.
33
+ * When absent, messages go directly to orchestrator.
34
+ */
35
+ communicator?: CommunicatorConfig
36
+
37
+ /** Definitions of spawnable agents (accepts both typed and untyped agents) */
38
+ agents: AnyAgentDefinition[]
39
+
40
+ /** LLM middleware chain applied to all agents in this preset (runs before agent-level middleware) */
41
+ llmMiddleware?: LLMMiddleware[]
42
+
43
+ /**
44
+ * Platform resource slugs to inject into sessions by default.
45
+ * The init workflow resolves these slugs to resource files and injects them
46
+ * into the workspace when no explicit resourceIds are provided.
47
+ */
48
+ defaultResourceSlugs?: string[]
49
+ }
50
+
51
+ /**
52
+ * Create a preset with automatic collection.
53
+ *
54
+ * Recursively walks the orchestrator (and communicator) tree to collect
55
+ * all agents. Then validates with `validatePreset()`.
56
+ *
57
+ * @throws Error if preset validation fails
58
+ */
59
+ export function createPreset(input: CreatePresetInput): PresetDefinition {
60
+ const collected = collectFromTree(input.orchestrator)
61
+
62
+ if (input.communicator) {
63
+ const commCollected = collectFromTree(input.communicator)
64
+ for (const a of commCollected.agents) {
65
+ if (!collected.agents.includes(a)) collected.agents.push(a)
66
+ }
67
+ }
68
+
69
+ const preset: PresetDefinition = {
70
+ ...input,
71
+ agents: collected.agents,
72
+ }
73
+
74
+ const errors = validatePreset(preset)
75
+ if (errors.length > 0) {
76
+ throw new Error(`Invalid preset "${preset.id}":\n${errors.map((e) => ` - ${e}`).join('\n')}`)
77
+ }
78
+
79
+ return preset
80
+ }
81
+
82
+ /**
83
+ * Validates a preset configuration, checking that all referenced agents, and services exist.
84
+ * @param preset The preset to validate
85
+ * @returns Array of error messages (empty if valid)
86
+ */
87
+ export const validatePreset = (preset: PresetDefinition): string[] => {
88
+ const errors: string[] = []
89
+
90
+ // Collect all defined agent names
91
+ const agentNames = new Set(preset.agents.map((a) => a.name))
92
+
93
+ // Check orchestrator spawnable agents
94
+ for (const name of preset.orchestrator.agents ?? []) {
95
+ if (!agentNames.has(name)) {
96
+ errors.push(`Orchestrator references unknown agent: ${name}`)
97
+ }
98
+ }
99
+
100
+ // Check each agent's spawnable agents and workers
101
+ for (const agent of preset.agents) {
102
+ for (const name of agent.agents ?? []) {
103
+ if (!agentNames.has(name)) {
104
+ errors.push(`Agent '${agent.name}' references unknown agent: ${name}`)
105
+ }
106
+ }
107
+ }
108
+
109
+ return errors
110
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Preset module - type-safe preset builder and configuration
3
+ */
4
+
5
+ // Re-export from config
6
+ export type { PresetDefinition as Preset } from './config.js'
7
+ export { createPreset, validatePreset } from './config.js'
8
+
9
+ // Re-export from preset-builder
10
+ export type { CreateOrchestratorInput, DefineAgentInput } from './preset-builder.js'
11
+ export { createOrchestrator, defineAgent } from './preset-builder.js'
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Type-safe preset builder for Roj SDK.
3
+ *
4
+ * Replaces string-based cross-references (spawnableAgents)
5
+ * with object references, catching typos and renames at compile time.
6
+ *
7
+ * `createPreset` recursively collects agents from the orchestrator tree.
8
+ */
9
+
10
+ import type { Preset } from '~/core/preset/index.js'
11
+ import type { AgentDefinition, AnyAgentDefinition, BaseAgentConfig, OrchestratorConfig } from '../agents/config.js'
12
+
13
+ // ============================================================================
14
+ // Helper types
15
+ // ============================================================================
16
+
17
+ interface ObjectRefs {
18
+ agents?: AnyAgentDefinition[]
19
+ }
20
+
21
+ /**
22
+ * Replace string ref fields with short object-ref fields.
23
+ * `agents: string[]` → `agents: AnyAgentDefinition[]`
24
+ */
25
+ type WithObjectRefs<T> =
26
+ & Omit<T, 'spawnableAgents' | 'agents'>
27
+ & ObjectRefs
28
+
29
+ // ============================================================================
30
+ // Public input types
31
+ // ============================================================================
32
+
33
+ /** Input type for defineAgent - uses object refs instead of string names */
34
+ export type DefineAgentInput<TInput = unknown> = WithObjectRefs<AgentDefinition<TInput>>
35
+
36
+ /** Input type for createOrchestrator - uses object refs instead of string names */
37
+ export type CreateOrchestratorInput = WithObjectRefs<BaseAgentConfig>
38
+
39
+ /** Input type for createPreset - agents are auto-collected from the tree */
40
+ export type CreatePresetInput = Omit<Preset, 'agents'>
41
+
42
+ // ============================================================================
43
+ // Internal: ref storage & resolution
44
+ // ============================================================================
45
+
46
+ /** Stores original object refs for each resolved config, keyed by identity */
47
+ const refStore = new WeakMap<object, ObjectRefs>()
48
+
49
+ function resolveAndStore<T extends object>(
50
+ refs: ObjectRefs,
51
+ resolved: T,
52
+ ): T {
53
+ refStore.set(resolved, refs)
54
+ return resolved
55
+ }
56
+
57
+ interface ResolvedRefs {
58
+ agents: string[]
59
+ }
60
+
61
+ function resolveRefs(refs: ObjectRefs): ResolvedRefs {
62
+ return {
63
+ agents: (refs.agents ?? []).map((a) => a.name),
64
+ }
65
+ }
66
+
67
+ /** Recursively collect agents from a config node */
68
+ export function collectFromTree(root: object): { agents: AnyAgentDefinition[] } {
69
+ const agents = new Set<AnyAgentDefinition>()
70
+
71
+ function visit(node: object) {
72
+ const refs = refStore.get(node)
73
+ if (!refs) return
74
+
75
+ for (const agent of refs.agents ?? []) {
76
+ if (!agents.has(agent)) {
77
+ agents.add(agent)
78
+ visit(agent)
79
+ }
80
+ }
81
+ }
82
+
83
+ visit(root)
84
+ return { agents: [...agents] }
85
+ }
86
+
87
+ // ============================================================================
88
+ // Public API
89
+ // ============================================================================
90
+
91
+ /**
92
+ * Define an agent with type-safe object references.
93
+ *
94
+ * Accepts `agents` as object references
95
+ * and resolves them to string names for the runtime.
96
+ */
97
+ export function defineAgent<TInput = unknown>(input: DefineAgentInput<TInput>): AgentDefinition<TInput> {
98
+ const { agents, ...rest } = input
99
+ return resolveAndStore({ agents }, { ...rest, ...resolveRefs({ agents }) })
100
+ }
101
+
102
+ /**
103
+ * Create an orchestrator config with type-safe object references.
104
+ *
105
+ * Accepts `agents` as object references
106
+ * and resolves them to string names for the runtime.
107
+ */
108
+ export function createOrchestrator(input: CreateOrchestratorInput): OrchestratorConfig {
109
+ const { agents, ...rest } = input
110
+ return resolveAndStore({ agents }, { ...rest, ...resolveRefs({ agents }) })
111
+ }
@@ -0,0 +1,202 @@
1
+ import { describe, expect, it } from 'bun:test'
2
+ import { AgentId } from '~/core/agents/schema.js'
3
+ import { agentEvents } from '~/core/agents/state.js'
4
+ import { MockLLMProvider } from '~/core/llm/mock.js'
5
+ import { ModelId } from '~/core/llm/schema.js'
6
+ import { SessionId } from '~/core/sessions/schema.js'
7
+ import { sessionEvents } from '~/core/sessions/state.js'
8
+ import { createTestPreset, TestHarness } from '~/testing/index.js'
9
+
10
+ describe('core: session lifecycle', () => {
11
+ it('create session → session_created event emitted', async () => {
12
+ const harness = new TestHarness({
13
+ presets: [createTestPreset()],
14
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
15
+ })
16
+
17
+ const session = await harness.createSession('test')
18
+
19
+ const events = await session.getEventsByType(sessionEvents, 'session_created')
20
+ expect(events).toHaveLength(1)
21
+ expect(events[0].presetId).toBe('test')
22
+
23
+ await harness.shutdown()
24
+ })
25
+
26
+ it('create session → orchestrator agent spawned automatically', async () => {
27
+ const harness = new TestHarness({
28
+ presets: [createTestPreset()],
29
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
30
+ })
31
+
32
+ const session = await harness.createSession('test')
33
+
34
+ const spawnEvents = await session.getEventsByType(agentEvents, 'agent_spawned')
35
+ expect(spawnEvents.length).toBeGreaterThanOrEqual(1)
36
+
37
+ // The orchestrator should be the entry agent
38
+ const entryAgentId = session.getEntryAgentId()
39
+ expect(entryAgentId).not.toBeNull()
40
+
41
+ const agentState = session.state.agents.get(entryAgentId!)
42
+ expect(agentState).toBeDefined()
43
+
44
+ await harness.shutdown()
45
+ })
46
+
47
+ it('create session with communicator config → both communicator and orchestrator spawned', async () => {
48
+ const harness = new TestHarness({
49
+ presets: [{
50
+ id: 'test-comm',
51
+ name: 'Test with communicator',
52
+ orchestrator: {
53
+ system: 'Orchestrator.',
54
+ model: ModelId('mock'),
55
+ tools: [],
56
+ agents: [],
57
+ debounceMs: 0,
58
+ },
59
+ communicator: {
60
+ system: 'Communicator.',
61
+ model: ModelId('mock'),
62
+ debounceMs: 0,
63
+ },
64
+ agents: [],
65
+ }],
66
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
67
+ })
68
+
69
+ const session = await harness.createSession('test-comm')
70
+
71
+ const spawnEvents = await session.getEventsByType(agentEvents, 'agent_spawned')
72
+ // Should have both communicator and orchestrator
73
+ expect(spawnEvents.length).toBeGreaterThanOrEqual(2)
74
+
75
+ // Entry agent should be the communicator
76
+ const entryAgentId = session.getEntryAgentId()
77
+ expect(entryAgentId).not.toBeNull()
78
+
79
+ // Both agents should exist in state
80
+ expect(session.state.agents.size).toBeGreaterThanOrEqual(2)
81
+
82
+ await harness.shutdown()
83
+ })
84
+
85
+ it('close session → session_closed event → status becomes closed', async () => {
86
+ const harness = new TestHarness({
87
+ presets: [createTestPreset()],
88
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
89
+ })
90
+
91
+ const session = await harness.createSession('test')
92
+ await session.sendAndWaitForIdle('Hi')
93
+
94
+ await session.close()
95
+
96
+ // Reload the session to check state
97
+ const reloaded = await harness.sessionManager.getSession(session.sessionId)
98
+ expect(reloaded.ok).toBe(true)
99
+ if (reloaded.ok) {
100
+ expect(reloaded.value.state.status).toBe('closed')
101
+
102
+ const closedEvents = await harness.eventStore.getEventsByType(session.sessionId, 'session_closed')
103
+ expect(closedEvents).toHaveLength(1)
104
+ }
105
+
106
+ await harness.shutdown()
107
+ })
108
+
109
+ it('reopen session → session_reopened event → agents can process again', async () => {
110
+ const harness = new TestHarness({
111
+ presets: [createTestPreset()],
112
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
113
+ })
114
+
115
+ const session = await harness.createSession('test')
116
+ await session.sendAndWaitForIdle('Hi')
117
+
118
+ // Close
119
+ await session.close()
120
+
121
+ // Reopen via plugin method (need to reload first)
122
+ const reloaded = await harness.sessionManager.getSession(session.sessionId)
123
+ expect(reloaded.ok).toBe(true)
124
+ if (reloaded.ok) {
125
+ const reopenResult = await reloaded.value.callPluginMethod('sessions.reopen', {})
126
+ expect(reopenResult.ok).toBe(true)
127
+
128
+ const reopenedEvents = await harness.eventStore.getEventsByType(session.sessionId, 'session_reopened')
129
+ expect(reopenedEvents).toHaveLength(1)
130
+
131
+ // Session should be active again
132
+ expect(reloaded.value.state.status).toBe('active')
133
+ }
134
+
135
+ await harness.shutdown()
136
+ })
137
+
138
+ it('session state reconstructed correctly from events', async () => {
139
+ const harness = new TestHarness({
140
+ presets: [createTestPreset()],
141
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
142
+ })
143
+
144
+ const session = await harness.createSession('test')
145
+ await session.sendAndWaitForIdle('Hello')
146
+
147
+ const originalState = session.state
148
+ const originalAgentCount = originalState.agents.size
149
+ const originalPresetId = originalState.presetId
150
+
151
+ // Reload session from event store (simulates restart)
152
+ const reloaded = await harness.sessionManager.getSession(session.sessionId)
153
+ expect(reloaded.ok).toBe(true)
154
+ if (reloaded.ok) {
155
+ const reloadedState = reloaded.value.state
156
+ expect(reloadedState.presetId).toBe(originalPresetId)
157
+ expect(reloadedState.agents.size).toBe(originalAgentCount)
158
+ expect(reloadedState.status).toBe('active')
159
+ }
160
+
161
+ await harness.shutdown()
162
+ })
163
+
164
+ it('fork session → new session with events up to fork point, independent processing', async () => {
165
+ const harness = new TestHarness({
166
+ presets: [createTestPreset()],
167
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
168
+ })
169
+
170
+ const session = await harness.createSession('test')
171
+ await session.sendAndWaitForIdle('Message 1')
172
+ await session.sendAndWaitForIdle('Message 2')
173
+
174
+ const originalEvents = await session.getEvents()
175
+ // Fork at roughly half the events
176
+ const forkIndex = Math.floor(originalEvents.length / 2)
177
+
178
+ const forkResult = await harness.sessionManager.callManagerMethod('sessions.fork', {
179
+ sessionId: String(session.sessionId),
180
+ eventIndex: forkIndex,
181
+ })
182
+
183
+ expect(forkResult.ok).toBe(true)
184
+ if (forkResult.ok) {
185
+ expect(forkResult.value).toMatchObject({ sessionId: expect.any(String) })
186
+ }
187
+
188
+ if (forkResult.ok && typeof forkResult.value === 'object' && forkResult.value !== null && 'sessionId' in forkResult.value) {
189
+ const forkedSessionId = SessionId(String(forkResult.value.sessionId))
190
+
191
+ // Forked session should have fewer events than the original
192
+ const forkedEvents = await harness.eventStore.load(forkedSessionId)
193
+ expect(forkedEvents.length).toBeLessThan(originalEvents.length)
194
+
195
+ // Original session should be unaffected
196
+ const originalEventsAfter = await session.getEvents()
197
+ expect(originalEventsAfter.length).toBe(originalEvents.length)
198
+ }
199
+
200
+ await harness.shutdown()
201
+ })
202
+ })
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Composed event reducer — core reducer + plugin state slices.
3
+ *
4
+ * This file is the composition root for the event-sourced reducer.
5
+ * Core SessionState stays free of plugin imports; each plugin owns a
6
+ * dynamic state slice accessed via `selectPluginState()`.
7
+ *
8
+ * The default `applyEvent` includes core + always-enabled plugins (mailbox).
9
+ * Additional plugin reducers are composed via `createApplyEvent()`.
10
+ */
11
+
12
+ import type { ConfiguredPlugin } from '~/core/plugins/plugin-builder.js'
13
+ import { mailboxPlugin } from '~/plugins/mailbox/plugin.js'
14
+ import type { SessionReducer } from './reducer.js'
15
+ import { composeReducers } from './reducer.js'
16
+ import { coreReducer } from './state.js'
17
+
18
+ /**
19
+ * Base reducer: core events + always-enabled plugin state slices (mailbox).
20
+ * Mailbox is always enabled, has no config, and is fundamental to all sessions.
21
+ */
22
+ const mailboxConfigured = mailboxPlugin.create({})
23
+ const baseReducer: SessionReducer = mailboxConfigured.slice
24
+ ? composeReducers(coreReducer, mailboxConfigured.slice.reducer)
25
+ : coreReducer
26
+
27
+ export const applyEvent: SessionReducer = baseReducer
28
+
29
+ /**
30
+ * Create a composed reducer that handles core + all plugin events.
31
+ * Use this when additional plugins are available (e.g. in SessionStore).
32
+ */
33
+ export const createApplyEvent = (plugins: ConfiguredPlugin[]): SessionReducer => {
34
+ const pluginReducers: SessionReducer[] = []
35
+ for (const plugin of plugins) {
36
+ // Skip mailbox — already included in baseReducer
37
+ if (plugin.name === 'mailbox') continue
38
+ if (plugin.slice !== undefined) {
39
+ pluginReducers.push(plugin.slice.reducer)
40
+ }
41
+ }
42
+
43
+ if (pluginReducers.length === 0) return baseReducer
44
+
45
+ return composeReducers(baseReducer, ...pluginReducers)
46
+ }
@@ -0,0 +1,36 @@
1
+ import type { EventStore } from '~/core/events/event-store'
2
+ import type { BaseEvent } from '~/core/events/types'
3
+ import type { LLMLogger } from '~/core/llm/logger'
4
+ import type { LLMProvider } from '~/core/llm/provider'
5
+ import type { Logger } from '~/lib/logger/logger'
6
+ import type { Platform } from '~/platform/index.js'
7
+ import type { FileStore } from '../file-store/types'
8
+ import type { SessionId } from './schema'
9
+ import type { SessionEnvironment } from './session-environment'
10
+ import type { SessionState } from './state'
11
+
12
+ export type SessionContext<TSessionInput = unknown> = {
13
+ readonly sessionId: SessionId
14
+ /** The full session state (readonly) */
15
+ readonly sessionState: SessionState
16
+ /** The typed input if agent has inputSchema, otherwise the task string */
17
+ readonly sessionInput: TSessionInput
18
+ /** Session environment directories */
19
+ readonly environment: SessionEnvironment
20
+ /** LLM inference client for handlers that need LLM access */
21
+ readonly llm: LLMProvider
22
+ /** FileStore with full access - resolves agent-visible paths */
23
+ readonly files: FileStore
24
+ /** Event store for loading/querying events */
25
+ readonly eventStore: EventStore
26
+ /** LLM call logger for debugging and audit */
27
+ readonly llmLogger?: LLMLogger
28
+ /** Host-environment adapters (filesystem, process). */
29
+ readonly platform: Platform
30
+
31
+ readonly logger: Logger
32
+
33
+ emitEvent: (event: Omit<BaseEvent<string>, 'sessionId'>) => Promise<void>
34
+ /** Send a notification to connected clients via transport (ephemeral, not persisted) */
35
+ notify: (type: string, payload: unknown) => void
36
+ }
@@ -0,0 +1,158 @@
1
+ import { AgentId } from '~/core/agents/schema.js'
2
+ import { agentEvents } from '~/core/agents/state.js'
3
+ import { withSessionId } from '~/core/events/test-helpers.js'
4
+ import type { DomainEvent, FactoryEventType } from '~/core/events/types.js'
5
+ import { SessionId } from '~/core/sessions/schema.js'
6
+ import { sessionEvents } from '~/core/sessions/state.js'
7
+ import type { SessionCreatedEvent } from '~/core/sessions/state.js'
8
+ import { ToolCallId } from '~/core/tools/schema.js'
9
+ import { toolEvents } from '~/core/tools/state.js'
10
+
11
+ type ToolEvent = FactoryEventType<typeof toolEvents>
12
+ import { describe, expect, it } from 'bun:test'
13
+ import { findSnapshotRefsAtIndex, rewriteEventsForFork } from './fork-utils.js'
14
+
15
+ const sourceSessionId = SessionId('source-session-id')
16
+ const newSessionId = SessionId('new-session-id')
17
+ const agentId = AgentId('agent-1')
18
+
19
+ function makeEvents(): DomainEvent[] {
20
+ return [
21
+ {
22
+ ...withSessionId(
23
+ sourceSessionId,
24
+ sessionEvents.create('session_created', {
25
+ presetId: 'test-preset',
26
+ workspaceDir: '/workspace/source',
27
+ }),
28
+ ),
29
+ timestamp: 1000,
30
+ },
31
+ {
32
+ ...withSessionId(
33
+ sourceSessionId,
34
+ agentEvents.create('agent_spawned', {
35
+ agentId,
36
+ definitionName: 'orchestrator',
37
+ parentId: null,
38
+ }),
39
+ ),
40
+ timestamp: 1001,
41
+ },
42
+ {
43
+ ...withSessionId(
44
+ sourceSessionId,
45
+ toolEvents.create('tool_completed', {
46
+ agentId,
47
+ toolCallId: ToolCallId('tc-1'),
48
+ result: 'done',
49
+ sessionRef: 'session-ref-1',
50
+ workspaceRef: 'workspace-ref-1',
51
+ }),
52
+ ),
53
+ timestamp: 1002,
54
+ },
55
+ {
56
+ ...withSessionId(
57
+ sourceSessionId,
58
+ toolEvents.create('tool_completed', {
59
+ agentId,
60
+ toolCallId: ToolCallId('tc-2'),
61
+ result: 'done again',
62
+ sessionRef: 'session-ref-2',
63
+ }),
64
+ ),
65
+ timestamp: 1003,
66
+ },
67
+ {
68
+ ...withSessionId(
69
+ sourceSessionId,
70
+ toolEvents.create('tool_failed', {
71
+ agentId,
72
+ toolCallId: ToolCallId('tc-3'),
73
+ error: 'oops',
74
+ workspaceRef: 'workspace-ref-3',
75
+ sessionRef: 'session-ref-3',
76
+ }),
77
+ ),
78
+ timestamp: 1004,
79
+ },
80
+ ]
81
+ }
82
+
83
+ describe('rewriteEventsForFork', () => {
84
+ it('slices events up to eventIndex inclusive', () => {
85
+ const events = makeEvents()
86
+ const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
87
+ expect(result).toHaveLength(3)
88
+ })
89
+
90
+ it('rewrites sessionId on all events', () => {
91
+ const events = makeEvents()
92
+ const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
93
+ for (const event of result) {
94
+ expect(event.sessionId).toBe(newSessionId)
95
+ }
96
+ })
97
+
98
+ it('adds forkedFrom to session_created event', () => {
99
+ const events = makeEvents()
100
+ const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
101
+ const created = result[0] as SessionCreatedEvent
102
+ expect(created.type).toBe('session_created')
103
+ expect(created.forkedFrom).toEqual({
104
+ sessionId: sourceSessionId,
105
+ eventIndex: 2,
106
+ })
107
+ })
108
+
109
+ it('preserves all other event fields', () => {
110
+ const events = makeEvents()
111
+ const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
112
+ const toolEvent = result[2] as ToolEvent
113
+ expect(toolEvent.type).toBe('tool_completed')
114
+ if (toolEvent.type === 'tool_completed') {
115
+ expect(toolEvent.sessionRef).toBe('session-ref-1')
116
+ expect(toolEvent.workspaceRef).toBe('workspace-ref-1')
117
+ expect(toolEvent.result).toBe('done')
118
+ }
119
+ })
120
+
121
+ it('handles eventIndex 0 (only session_created)', () => {
122
+ const events = makeEvents()
123
+ const result = rewriteEventsForFork(events, 0, newSessionId, sourceSessionId)
124
+ expect(result).toHaveLength(1)
125
+ expect(result[0].type).toBe('session_created')
126
+ })
127
+ })
128
+
129
+ describe('findSnapshotRefsAtIndex', () => {
130
+ it('finds the most recent refs scanning backwards', () => {
131
+ const events = makeEvents()
132
+ const refs = findSnapshotRefsAtIndex(events, 4)
133
+ expect(refs.sessionRef).toBe('session-ref-3')
134
+ expect(refs.workspaceRef).toBe('workspace-ref-3')
135
+ })
136
+
137
+ it('finds refs at exact index', () => {
138
+ const events = makeEvents()
139
+ const refs = findSnapshotRefsAtIndex(events, 2)
140
+ expect(refs.sessionRef).toBe('session-ref-1')
141
+ expect(refs.workspaceRef).toBe('workspace-ref-1')
142
+ })
143
+
144
+ it('falls back to earlier events for missing refs', () => {
145
+ const events = makeEvents()
146
+ // Event 3 has sessionRef but no workspaceRef, should fall back to event 2 for workspaceRef
147
+ const refs = findSnapshotRefsAtIndex(events, 3)
148
+ expect(refs.sessionRef).toBe('session-ref-2')
149
+ expect(refs.workspaceRef).toBe('workspace-ref-1')
150
+ })
151
+
152
+ it('returns undefined refs when no events have them', () => {
153
+ const events = makeEvents()
154
+ const refs = findSnapshotRefsAtIndex(events, 1)
155
+ expect(refs.sessionRef).toBeUndefined()
156
+ expect(refs.workspaceRef).toBeUndefined()
157
+ })
158
+ })