@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,80 @@
1
+ /**
2
+ * Test-only Platform impl backed by `node:fs/promises` + `node:child_process`.
3
+ *
4
+ * Mirrors the production adapter from `@roj-ai/sdk/bun-platform` but lives in this
5
+ * package so tests don't create a workspace cycle. Production SDK code MUST
6
+ * NOT import from here — use injected `Platform` from the caller instead.
7
+ */
8
+
9
+ import { type ChildProcess, execFile as execFileCb, spawn as nodeSpawn } from 'node:child_process'
10
+ import * as fsp from 'node:fs/promises'
11
+ import { tmpdir } from 'node:os'
12
+ import { promisify } from 'node:util'
13
+ import type { FileSystem, Platform, ProcessRunner } from '~/platform/index.js'
14
+
15
+ const execFileP = promisify(execFileCb)
16
+
17
+ export function createNodeFileSystem(): FileSystem {
18
+ return {
19
+ readFile: ((path: string, encoding?: 'utf-8' | 'utf8') =>
20
+ encoding ? fsp.readFile(path, encoding) : fsp.readFile(path)) as FileSystem['readFile'],
21
+
22
+ writeFile: (path, data) => fsp.writeFile(path, data),
23
+ appendFile: (path, data) => fsp.appendFile(path, data),
24
+
25
+ mkdir: async (path, options) => {
26
+ await fsp.mkdir(path, options)
27
+ },
28
+
29
+ readdir: ((path: string, options?: { withFileTypes: true }) =>
30
+ options?.withFileTypes
31
+ ? fsp.readdir(path, { withFileTypes: true })
32
+ : fsp.readdir(path)) as FileSystem['readdir'],
33
+
34
+ stat: (path) => fsp.stat(path),
35
+ access: (path, mode) => fsp.access(path, mode),
36
+
37
+ unlink: (path) => fsp.unlink(path),
38
+ rm: (path, options) => fsp.rm(path, options),
39
+ cp: async (source, dest, options) => {
40
+ await fsp.cp(source, dest, options)
41
+ },
42
+
43
+ open: (path, flags) => fsp.open(path, flags),
44
+
45
+ exists: async (path) => {
46
+ try {
47
+ await fsp.access(path)
48
+ return true
49
+ } catch {
50
+ return false
51
+ }
52
+ },
53
+
54
+ realpath: (path) => fsp.realpath(path),
55
+ }
56
+ }
57
+
58
+ export function createNodeProcessRunner(): ProcessRunner {
59
+ return {
60
+ async execFile(file, args, options) {
61
+ const { stdout, stderr } = await execFileP(file, args, options ?? {})
62
+ return {
63
+ stdout: typeof stdout === 'string' ? stdout : Buffer.from(stdout).toString(),
64
+ stderr: typeof stderr === 'string' ? stderr : Buffer.from(stderr).toString(),
65
+ }
66
+ },
67
+
68
+ spawn(command, args, options): ChildProcess {
69
+ return nodeSpawn(command, args, options ?? {})
70
+ },
71
+ }
72
+ }
73
+
74
+ export function createNodePlatform(): Platform {
75
+ return {
76
+ fs: createNodeFileSystem(),
77
+ process: createNodeProcessRunner(),
78
+ tmpDir: tmpdir(),
79
+ }
80
+ }
@@ -0,0 +1,100 @@
1
+ import type { PluginNotification } from '~/core/plugins/plugin-builder.js'
2
+
3
+ /**
4
+ * In-memory notification collector for testing.
5
+ * Captures PluginNotification instances emitted during session execution.
6
+ */
7
+ export class NotificationCollector {
8
+ private notifications: PluginNotification[] = []
9
+ private waiters: Array<{
10
+ predicate: (n: PluginNotification) => boolean
11
+ resolve: (n: PluginNotification) => void
12
+ reject: (err: Error) => void
13
+ timer: ReturnType<typeof setTimeout>
14
+ }> = []
15
+
16
+ /**
17
+ * Push a notification into the collector.
18
+ * Wired to SessionManager's onUserOutput callback.
19
+ */
20
+ push(notification: PluginNotification): void {
21
+ this.notifications.push(notification)
22
+
23
+ // Check waiters
24
+ for (let i = this.waiters.length - 1; i >= 0; i--) {
25
+ const waiter = this.waiters[i]
26
+ if (waiter.predicate(notification)) {
27
+ clearTimeout(waiter.timer)
28
+ this.waiters.splice(i, 1)
29
+ waiter.resolve(notification)
30
+ }
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Get all collected notifications.
36
+ */
37
+ getAll(): PluginNotification[] {
38
+ return [...this.notifications]
39
+ }
40
+
41
+ /**
42
+ * Get notifications from a specific plugin.
43
+ */
44
+ getByPlugin(pluginName: string): PluginNotification[] {
45
+ return this.notifications.filter((n) => n.pluginName === pluginName)
46
+ }
47
+
48
+ /**
49
+ * Get notifications matching plugin name and type.
50
+ */
51
+ getByType(pluginName: string, type: string): PluginNotification[] {
52
+ return this.notifications.filter((n) => n.pluginName === pluginName && n.type === type)
53
+ }
54
+
55
+ /**
56
+ * Get agent messages (user-chat.agentMessage notifications) with extracted payload.
57
+ */
58
+ getAgentMessages(): Array<{ content: string; format: string; sessionId: string }> {
59
+ return this.getByType('user-chat', 'agentMessage').map((n) => {
60
+ const payload = n.payload as { content: string; format: string; sessionId: string }
61
+ return {
62
+ content: payload.content,
63
+ format: payload.format,
64
+ sessionId: payload.sessionId,
65
+ }
66
+ })
67
+ }
68
+
69
+ /**
70
+ * Wait for a notification matching the predicate.
71
+ * Checks already-collected notifications first, then waits for new ones.
72
+ */
73
+ waitFor(
74
+ predicate: (n: PluginNotification) => boolean,
75
+ opts?: { timeoutMs?: number },
76
+ ): Promise<PluginNotification> {
77
+ // Check already-collected
78
+ const existing = this.notifications.find(predicate)
79
+ if (existing) return Promise.resolve(existing)
80
+
81
+ const timeoutMs = opts?.timeoutMs ?? 5000
82
+
83
+ return new Promise<PluginNotification>((resolve, reject) => {
84
+ const timer = setTimeout(() => {
85
+ const idx = this.waiters.findIndex((w) => w.resolve === resolve)
86
+ if (idx !== -1) this.waiters.splice(idx, 1)
87
+ reject(new Error(`waitFor timed out after ${timeoutMs}ms`))
88
+ }, timeoutMs)
89
+
90
+ this.waiters.push({ predicate, resolve, reject, timer })
91
+ })
92
+ }
93
+
94
+ /**
95
+ * Clear all collected notifications.
96
+ */
97
+ clear(): void {
98
+ this.notifications = []
99
+ }
100
+ }
@@ -0,0 +1,57 @@
1
+ import type { AgentDefinition } from '~/core/agents/config.js'
2
+ import { ModelId } from '~/core/llm/schema.js'
3
+ import type { AgentPluginConfig, SessionPluginConfig } from '~/core/plugins/plugin-builder.js'
4
+ import type { Preset } from '~/core/preset/index.js'
5
+
6
+ /** AgentDefinition with model optional — defaults to ModelId('mock') in test helpers. */
7
+ export type TestAgentDefinition<TInput = unknown> = Omit<AgentDefinition<TInput>, 'model'> & { model?: ReturnType<typeof ModelId> }
8
+
9
+ /**
10
+ * Create a minimal test preset with sensible defaults.
11
+ * All agents get debounceMs: 0 and model: ModelId('mock').
12
+ */
13
+ export function createTestPreset(overrides?: {
14
+ id?: string
15
+ orchestratorSystem?: string
16
+ agents?: TestAgentDefinition[]
17
+ plugins?: SessionPluginConfig[]
18
+ orchestratorPlugins?: AgentPluginConfig[]
19
+ }): Preset {
20
+ const agents = overrides?.agents ?? []
21
+
22
+ return {
23
+ id: overrides?.id ?? 'test',
24
+ name: 'Test Preset',
25
+ orchestrator: {
26
+ system: overrides?.orchestratorSystem ?? 'You are a test agent.',
27
+ model: ModelId('mock'),
28
+ tools: [],
29
+ agents: agents.map((a) => a.name),
30
+ debounceMs: 0,
31
+ plugins: overrides?.orchestratorPlugins,
32
+ },
33
+ agents: agents.map((a) => ({
34
+ ...a,
35
+ model: a.model ?? ModelId('mock'),
36
+ debounceMs: a.debounceMs ?? 0,
37
+ })),
38
+ plugins: overrides?.plugins,
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Create a multi-agent test preset from agent definitions.
44
+ * The orchestrator can spawn all provided agents.
45
+ */
46
+ export function createMultiAgentPreset(
47
+ agents: TestAgentDefinition[],
48
+ overrides?: {
49
+ id?: string
50
+ orchestratorSystem?: string
51
+ },
52
+ ): Preset {
53
+ return createTestPreset({
54
+ ...overrides,
55
+ agents,
56
+ })
57
+ }
@@ -0,0 +1,63 @@
1
+ import { describe, expect, it } from 'bun:test'
2
+ import { MockLLMProvider } from '~/core/llm/mock.js'
3
+ import { ToolCallId } from '~/core/tools/schema.js'
4
+ import { createTestPreset, TestHarness } from './index.js'
5
+
6
+ describe('TestHarness', () => {
7
+ it('sendMessage → tell_user → notification', async () => {
8
+ const harness = new TestHarness({
9
+ presets: [createTestPreset()],
10
+ llmProvider: MockLLMProvider.withSequence([
11
+ {
12
+ content: null,
13
+ toolCalls: [{ id: ToolCallId('tc1'), name: 'tell_user', input: { message: 'Hello!' } }],
14
+ },
15
+ { content: 'Done', toolCalls: [] },
16
+ ]),
17
+ })
18
+
19
+ const session = await harness.createSession('test')
20
+ await session.sendAndWaitForIdle('Hi')
21
+
22
+ const messages = harness.notifications.getAgentMessages()
23
+ expect(messages).toHaveLength(1)
24
+ expect(messages[0].content).toBe('Hello!')
25
+
26
+ await harness.shutdown()
27
+ })
28
+
29
+ it('creates session with correct state', async () => {
30
+ const harness = new TestHarness({
31
+ presets: [createTestPreset()],
32
+ })
33
+
34
+ const session = await harness.createSession('test')
35
+
36
+ expect(session.state.status).toBe('active')
37
+ expect(session.state.presetId).toBe('test')
38
+ expect(session.getEntryAgentId()).not.toBeNull()
39
+
40
+ await harness.shutdown()
41
+ })
42
+
43
+ it('captures events from event store', async () => {
44
+ const harness = new TestHarness({
45
+ presets: [createTestPreset()],
46
+ llmProvider: MockLLMProvider.withFixedResponse({
47
+ content: 'Done',
48
+ toolCalls: [],
49
+ }),
50
+ })
51
+
52
+ const session = await harness.createSession('test')
53
+ await session.sendAndWaitForIdle('Test')
54
+
55
+ const events = await session.getEvents()
56
+ const sessionCreated = await session.getEventsByType('session_created')
57
+
58
+ expect(events.length).toBeGreaterThan(0)
59
+ expect(sessionCreated).toHaveLength(1)
60
+
61
+ await harness.shutdown()
62
+ })
63
+ })
@@ -0,0 +1,279 @@
1
+ import type { AgentId } from '~/core/agents/schema.js'
2
+ import type { DomainError } from '~/core/errors.js'
3
+ import { MemoryEventStore } from '~/core/events/memory.js'
4
+ import type { DomainEvent } from '~/core/events/types.js'
5
+ import { SessionFileStore } from '~/core/file-store/file-store.js'
6
+ import type { LLMLogger } from '~/core/llm/logger.js'
7
+ import { LoggingLLMProvider } from '~/core/llm/logging-provider.js'
8
+ import { MockLLMProvider } from '~/core/llm/mock.js'
9
+ import type { MockInferenceHandler } from '~/core/llm/mock.js'
10
+ import type { PluginDefinition, PluginNotification } from '~/core/plugins/plugin-builder.js'
11
+ import type { Preset } from '~/core/preset/index.js'
12
+ import type { SessionId } from '~/core/sessions/schema.js'
13
+ import { SessionManager } from '~/core/sessions/session-manager.js'
14
+ import type { Session } from '~/core/sessions/session.js'
15
+ import type { SessionState } from '~/core/sessions/state.js'
16
+ import { ToolExecutor } from '~/core/tools/executor.js'
17
+ import { silentLogger } from '~/lib/logger/logger.js'
18
+ import { createNodePlatform } from './node-platform.js'
19
+ import type { Result } from '~/lib/utils/result.js'
20
+ import { agentsPlugin } from '~/plugins/agents/plugin.js'
21
+ import { filesystemPlugin } from '~/plugins/filesystem/index.js'
22
+ import { llmDebugPlugin } from '~/plugins/llm-debug/plugin.js'
23
+ import { logsPlugin } from '~/plugins/logs/index.js'
24
+ import { mailboxPlugin } from '~/plugins/mailbox/plugin.js'
25
+ import { presetsPlugin, sessionLifecyclePlugin } from '~/plugins/session-lifecycle/index.js'
26
+ import { uploadsPlugin } from '~/plugins/uploads/plugin.js'
27
+ import { userChatPlugin } from '~/plugins/user-chat/plugin.js'
28
+ import { NotificationCollector } from './notification-collector.js'
29
+ import { waitForAllAgentsIdle } from './wait-helpers.js'
30
+
31
+ /**
32
+ * Default system plugins for testing — same as builtinPlugins in bootstrap.ts.
33
+ */
34
+ const defaultSystemPlugins: readonly PluginDefinition<string, any, any, any, any>[] = [
35
+ sessionLifecyclePlugin,
36
+ presetsPlugin,
37
+ mailboxPlugin,
38
+ agentsPlugin,
39
+ userChatPlugin,
40
+ uploadsPlugin,
41
+ llmDebugPlugin,
42
+ filesystemPlugin,
43
+ logsPlugin,
44
+ ]
45
+
46
+ /**
47
+ * TestHarness — boots a real SessionManager with MemoryEventStore,
48
+ * MockLLMProvider, and in-memory notification collection.
49
+ *
50
+ * Enables full-flow integration tests without external dependencies.
51
+ */
52
+ export class TestHarness {
53
+ readonly eventStore: MemoryEventStore
54
+ readonly llmProvider: MockLLMProvider
55
+ readonly notifications: NotificationCollector
56
+ readonly sessionManager: SessionManager
57
+
58
+ constructor(options: {
59
+ presets: Preset[]
60
+ llmProvider?: MockLLMProvider
61
+ mockHandler?: MockInferenceHandler
62
+ /** Additional system plugins to register (merged with built-in defaults) */
63
+ systemPlugins?: readonly PluginDefinition<string, any, any, any, any>[]
64
+ /** Optional LLM logger — when provided, wraps the mock provider with LoggingLLMProvider */
65
+ llmLogger?: LLMLogger
66
+ /** Optional pre-existing event store — lets multiple harnesses share persisted state (simulates server restart) */
67
+ eventStore?: MemoryEventStore
68
+ }) {
69
+ this.eventStore = options.eventStore ?? new MemoryEventStore()
70
+
71
+ if (options.llmProvider) {
72
+ this.llmProvider = options.llmProvider
73
+ } else if (options.mockHandler) {
74
+ this.llmProvider = new MockLLMProvider(options.mockHandler)
75
+ } else {
76
+ // Default: echo back content with no tool calls
77
+ this.llmProvider = MockLLMProvider.withFixedResponse({
78
+ content: 'Mock response',
79
+ toolCalls: [],
80
+ })
81
+ }
82
+
83
+ this.notifications = new NotificationCollector()
84
+
85
+ const presetsMap = new Map(options.presets.map((p) => [p.id, p]))
86
+
87
+ // Override debounceMs: 0 on all preset agents for instant processing
88
+ for (const preset of presetsMap.values()) {
89
+ preset.orchestrator.debounceMs = 0
90
+ if (preset.communicator) {
91
+ preset.communicator.debounceMs = 0
92
+ }
93
+ for (const agent of preset.agents) {
94
+ agent.debounceMs = 0
95
+ }
96
+ }
97
+
98
+ const basePath = `/tmp/roj-test-${Math.random().toString(36).slice(2)}`
99
+ const toolExecutor = new ToolExecutor(silentLogger)
100
+ const platform = createNodePlatform()
101
+ const dataFileStore = new SessionFileStore(basePath, undefined, false, platform.fs, 'session')
102
+
103
+ // When llmLogger is provided, wrap the mock provider so calls get logged
104
+ const effectiveProvider = options.llmLogger
105
+ ? new LoggingLLMProvider(this.llmProvider, options.llmLogger)
106
+ : this.llmProvider
107
+
108
+ this.sessionManager = new SessionManager({
109
+ eventStore: this.eventStore,
110
+ llmProvider: effectiveProvider,
111
+ toolExecutor,
112
+ presets: presetsMap,
113
+ logger: silentLogger,
114
+ basePath,
115
+ dataFileStore,
116
+ onUserOutput: (n: PluginNotification) => this.notifications.push(n),
117
+ llmLogger: options.llmLogger,
118
+ platform,
119
+ systemPlugins: [...defaultSystemPlugins, ...(options.systemPlugins ?? [])],
120
+ })
121
+ }
122
+
123
+ /**
124
+ * Create a session and return a TestSession wrapper.
125
+ */
126
+ async createSession(presetId: string): Promise<TestSession> {
127
+ const result = await this.sessionManager.createSession(presetId)
128
+ if (!result.ok) {
129
+ throw new Error(`Failed to create session: ${result.error.type} — ${result.error.message}`)
130
+ }
131
+ return new TestSession(result.value, this)
132
+ }
133
+
134
+ /**
135
+ * Open an existing session from the event store (replays events, runs onSessionReady hooks).
136
+ * Used to simulate server restart by pairing with another harness over the same eventStore.
137
+ */
138
+ async openSession(sessionId: SessionId): Promise<TestSession> {
139
+ const result = await this.sessionManager.getSession(sessionId)
140
+ if (!result.ok) {
141
+ throw new Error(`Failed to open session: ${result.error.type} — ${result.error.message}`)
142
+ }
143
+ return new TestSession(result.value, this)
144
+ }
145
+
146
+ /**
147
+ * Shutdown all sessions.
148
+ */
149
+ async shutdown(): Promise<void> {
150
+ await this.sessionManager.shutdown()
151
+ }
152
+ }
153
+
154
+ /**
155
+ * TestSession — convenience wrapper around Session for integration tests.
156
+ */
157
+ export class TestSession {
158
+ readonly sessionId: SessionId
159
+
160
+ constructor(
161
+ private readonly session: Session,
162
+ private readonly harness: TestHarness,
163
+ ) {
164
+ this.sessionId = session.id
165
+ }
166
+
167
+ /**
168
+ * Send a message to the entry agent (communicator or orchestrator).
169
+ */
170
+ async sendMessage(content: string): Promise<void> {
171
+ const entryAgentId = this.session.getEntryAgentId()
172
+ if (!entryAgentId) {
173
+ throw new Error('No entry agent found')
174
+ }
175
+ await this.sendMessageToAgent(entryAgentId, content)
176
+ }
177
+
178
+ /**
179
+ * Send a message to a specific agent.
180
+ */
181
+ async sendMessageToAgent(agentId: AgentId, content: string): Promise<void> {
182
+ const result = await this.session.callPluginMethod('user-chat.sendMessage', {
183
+ sessionId: String(this.sessionId),
184
+ content,
185
+ agentId: String(agentId),
186
+ })
187
+ if (!result.ok) {
188
+ throw new Error(`sendMessage failed: ${result.error.type} — ${result.error.message}`)
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Wait for all agents to become idle.
194
+ */
195
+ async waitForIdle(opts?: { timeoutMs?: number }): Promise<void> {
196
+ await waitForAllAgentsIdle(this.session, opts)
197
+ }
198
+
199
+ /**
200
+ * Send a message and wait for all agents to become idle.
201
+ */
202
+ async sendAndWaitForIdle(content: string, opts?: { timeoutMs?: number }): Promise<void> {
203
+ await this.sendMessage(content)
204
+ await this.waitForIdle(opts)
205
+ }
206
+
207
+ /**
208
+ * Get all events from the event store for this session.
209
+ */
210
+ async getEvents(): Promise<DomainEvent[]> {
211
+ return this.harness.eventStore.load(this.sessionId)
212
+ }
213
+
214
+ /**
215
+ * Get events filtered by type.
216
+ * When called with an EventsFactory, returns fully typed events.
217
+ */
218
+ async getEventsByType(type: string): Promise<DomainEvent[]>
219
+ async getEventsByType<TEventsMap extends Record<string, DomainEvent>, K extends string & keyof TEventsMap>(
220
+ factory: { Events: TEventsMap },
221
+ type: K,
222
+ ): Promise<TEventsMap[K][]>
223
+ async getEventsByType(factoryOrType: string | { Events: Record<string, DomainEvent> }, maybeType?: string): Promise<DomainEvent[]> {
224
+ const type = typeof factoryOrType === 'string' ? factoryOrType : maybeType!
225
+ return this.harness.eventStore.getEventsByType(this.sessionId, type)
226
+ }
227
+
228
+ /**
229
+ * Get notifications for this session.
230
+ */
231
+ getNotifications(): PluginNotification[] {
232
+ return this.harness.notifications.getAll()
233
+ }
234
+
235
+ /**
236
+ * Get the current session state.
237
+ */
238
+ get state(): SessionState {
239
+ return this.session.state
240
+ }
241
+
242
+ /**
243
+ * Get the entry agent ID.
244
+ */
245
+ getEntryAgentId(): AgentId | null {
246
+ return this.session.getEntryAgentId()
247
+ }
248
+
249
+ /**
250
+ * Close the session.
251
+ */
252
+ async close(): Promise<void> {
253
+ const result = await this.session.close()
254
+ if (!result.ok) {
255
+ throw new Error(`close failed: ${result.error.type} — ${result.error.message}`)
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Call a plugin method on the underlying session.
261
+ */
262
+ async callPluginMethod(method: string, input: unknown): Promise<Result<unknown, DomainError>> {
263
+ return this.session.callPluginMethod(method, input)
264
+ }
265
+
266
+ /**
267
+ * Answer a user-chat question (convenience wrapper around callPluginMethod).
268
+ */
269
+ async answerQuestion(agentId: AgentId, questionId: string, answer: unknown): Promise<void> {
270
+ const result = await this.session.callPluginMethod('user-chat.answerQuestion', {
271
+ agentId: String(agentId),
272
+ questionId,
273
+ answer,
274
+ })
275
+ if (!result.ok) {
276
+ throw new Error(`answerQuestion failed: ${result.error.type} — ${result.error.message}`)
277
+ }
278
+ }
279
+ }
@@ -0,0 +1,84 @@
1
+ import type { AgentId } from '~/core/agents/schema.js'
2
+ import type { Session } from '~/core/sessions/session.js'
3
+
4
+ const DEFAULT_TIMEOUT_MS = 5000
5
+ const POLL_INTERVAL_MS = 10
6
+
7
+ /**
8
+ * Wait for a specific agent to become idle.
9
+ * An agent is "idle" when: status === 'pending', no pendingToolCalls,
10
+ * no pendingToolResults, and not scheduled for processing.
11
+ */
12
+ export async function waitForAgentIdle(
13
+ session: Session,
14
+ agentId: AgentId,
15
+ opts?: { timeoutMs?: number },
16
+ ): Promise<void> {
17
+ const timeoutMs = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS
18
+ const deadline = Date.now() + timeoutMs
19
+
20
+ while (Date.now() < deadline) {
21
+ if (isAgentIdle(session, agentId)) {
22
+ // Double-check after one poll interval to account for queueMicrotask re-entry
23
+ await sleep(POLL_INTERVAL_MS)
24
+ if (isAgentIdle(session, agentId)) {
25
+ return
26
+ }
27
+ }
28
+ await sleep(POLL_INTERVAL_MS)
29
+ }
30
+
31
+ throw new Error(`waitForAgentIdle timed out after ${timeoutMs}ms for agent ${agentId}`)
32
+ }
33
+
34
+ /**
35
+ * Wait for all agents in a session to become idle.
36
+ */
37
+ export async function waitForAllAgentsIdle(
38
+ session: Session,
39
+ opts?: { timeoutMs?: number },
40
+ ): Promise<void> {
41
+ const timeoutMs = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS
42
+ const deadline = Date.now() + timeoutMs
43
+
44
+ while (Date.now() < deadline) {
45
+ if (areAllAgentsIdle(session)) {
46
+ // Double-check after one poll interval
47
+ await sleep(POLL_INTERVAL_MS)
48
+ if (areAllAgentsIdle(session)) {
49
+ return
50
+ }
51
+ }
52
+ await sleep(POLL_INTERVAL_MS)
53
+ }
54
+
55
+ throw new Error(`waitForAllAgentsIdle timed out after ${timeoutMs}ms`)
56
+ }
57
+
58
+ function isAgentIdle(session: Session, agentId: AgentId): boolean {
59
+ const agent = session.getAgent(agentId)
60
+ if (!agent) return true // Agent doesn't exist, consider idle
61
+
62
+ const agentState = agent.state
63
+ if (!agentState) return true
64
+
65
+ return (
66
+ agentState.status === 'pending'
67
+ && agentState.pendingToolCalls.length === 0
68
+ && agentState.pendingToolResults.length === 0
69
+ && !agent.isScheduled()
70
+ )
71
+ }
72
+
73
+ function areAllAgentsIdle(session: Session): boolean {
74
+ for (const [agentId] of session.state.agents) {
75
+ if (!isAgentIdle(session, agentId)) {
76
+ return false
77
+ }
78
+ }
79
+ return true
80
+ }
81
+
82
+ function sleep(ms: number): Promise<void> {
83
+ return new Promise((resolve) => setTimeout(resolve, ms))
84
+ }