@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,155 @@
1
+ /**
2
+ * Live cache verification tests for Anthropic + OpenRouter providers.
3
+ *
4
+ * Opt-in: run with `LIVE_TESTS=1 ANTHROPIC_API_KEY=… OPENROUTER_API_KEY=…`.
5
+ * Skipped otherwise so the default `bun test` run stays hermetic.
6
+ *
7
+ * These tests bypass snapshot-fetch entirely (use real `globalThis.fetch`) so
8
+ * two sequential identical calls actually land on the live API — proving that
9
+ * the new message-level `cacheControl` flag → last-block placement is both
10
+ * accepted and honored as a prompt cache checkpoint.
11
+ *
12
+ * The system prompt is padded to comfortably exceed Anthropic's 1024-token
13
+ * minimum cacheable prefix for Haiku / Sonnet.
14
+ */
15
+
16
+ import { describe, expect, test } from 'bun:test'
17
+ import z4 from 'zod/v4'
18
+ import type { LLMMessage } from '~/core/agents/state.js'
19
+ import type { ImageProcessor } from '~/core/image/types.js'
20
+ import type { ToolDefinition } from '~/core/tools/definition.js'
21
+ import { ToolCallId } from '~/core/tools/schema.js'
22
+ import { AnthropicProvider } from './anthropic.js'
23
+ import { applyCacheBreakpoint } from './cache-breakpoints.js'
24
+ import { OpenRouterProvider } from './openrouter.js'
25
+ import { ModelId } from './schema.js'
26
+
27
+ const liveEnabled = process.env.LIVE_TESTS === '1'
28
+ const anthropicApiKey = liveEnabled ? process.env.ANTHROPIC_API_KEY : undefined
29
+ const openRouterApiKey = liveEnabled ? process.env.OPENROUTER_API_KEY : undefined
30
+
31
+ const noopImageProcessor: ImageProcessor = {
32
+ resolveContent: async (content) => content,
33
+ }
34
+
35
+ const weatherTool: ToolDefinition<{ city: string }> = {
36
+ name: 'get_weather',
37
+ description: 'Get current weather for a city',
38
+ input: z4.object({ city: z4.string() }),
39
+ execute: async () => ({ ok: true, value: 'not implemented' }),
40
+ }
41
+
42
+ /**
43
+ * Large filler system prompt to push the cacheable prefix comfortably past
44
+ * Anthropic's 1024-token minimum. Content is deterministic so successive
45
+ * calls reuse the exact same prefix.
46
+ */
47
+ const LARGE_SYSTEM_PROMPT = [
48
+ 'You are a meticulous assistant helping with data analysis tasks.',
49
+ 'Always respond concisely and accurately. Never speculate beyond the data.',
50
+ 'When you use tools, interpret the results carefully and explain your reasoning.',
51
+ 'Follow these rules strictly:',
52
+ ...Array.from(
53
+ { length: 120 },
54
+ (_, i) => `- Rule ${i + 1}: When asked about topic ${i + 1}, prefer factual sources and cite them when possible. Decline to speculate.`,
55
+ ),
56
+ 'End of instructions.',
57
+ ].join('\n')
58
+
59
+ const describeLive = (name: string, apiKey: string | undefined, fn: () => void) => {
60
+ if (!apiKey) {
61
+ describe.skip(`${name} (skipped — API key missing)`, fn)
62
+ return
63
+ }
64
+ describe(name, fn)
65
+ }
66
+
67
+ describeLive('Anthropic live cache verification', anthropicApiKey, () => {
68
+ test('cacheControl on tool_result target causes cache write then cache read', async () => {
69
+ const provider = new AnthropicProvider({
70
+ apiKey: anthropicApiKey!,
71
+ imageProcessor: noopImageProcessor,
72
+ defaultModel: 'claude-haiku-4-5-20251001',
73
+ })
74
+
75
+ const history: LLMMessage[] = [
76
+ { role: 'user', content: 'What is the weather in Prague?' },
77
+ {
78
+ role: 'assistant',
79
+ content: '',
80
+ toolCalls: [{ id: ToolCallId('call_1'), name: 'get_weather', input: { city: 'Prague' } }],
81
+ },
82
+ {
83
+ role: 'tool',
84
+ toolCallId: ToolCallId('call_1'),
85
+ content: 'Sunny, 22°C, light breeze from the west.',
86
+ },
87
+ ]
88
+ const messages = applyCacheBreakpoint(history, 0)
89
+
90
+ const request = {
91
+ model: ModelId('claude-haiku-4-5-20251001'),
92
+ systemPrompt: LARGE_SYSTEM_PROMPT,
93
+ messages,
94
+ tools: [weatherTool],
95
+ }
96
+
97
+ // First call — primes the cache
98
+ const first = await provider.inference(request)
99
+ if (!first.ok) {
100
+ if (first.error.message?.includes('credit balance')) {
101
+ console.warn('⚠️ Anthropic live cache test skipped: credit balance too low')
102
+ return
103
+ }
104
+ throw new Error(`first call failed: ${JSON.stringify(first.error)}`)
105
+ }
106
+ expect(first.value.metrics.promptTokens).toBeGreaterThan(1024)
107
+
108
+ // Second call — cache read proves the write on call 1 was honored
109
+ const second = await provider.inference(request)
110
+ if (!second.ok) throw new Error(`second call failed: ${JSON.stringify(second.error)}`)
111
+ expect(second.value.metrics.cachedTokens ?? 0).toBeGreaterThan(1024)
112
+ }, 60_000)
113
+ })
114
+
115
+ describeLive('OpenRouter live cache verification', openRouterApiKey, () => {
116
+ test('cacheControl on tool_result target produces cache hit on second call', async () => {
117
+ const provider = new OpenRouterProvider({
118
+ apiKey: openRouterApiKey!,
119
+ imageProcessor: noopImageProcessor,
120
+ defaultModel: 'anthropic/claude-haiku-4.5',
121
+ })
122
+
123
+ const history: LLMMessage[] = [
124
+ { role: 'user', content: 'What is the weather in Prague?' },
125
+ {
126
+ role: 'assistant',
127
+ content: '',
128
+ toolCalls: [{ id: ToolCallId('call_1'), name: 'get_weather', input: { city: 'Prague' } }],
129
+ },
130
+ {
131
+ role: 'tool',
132
+ toolCallId: ToolCallId('call_1'),
133
+ content: 'Sunny, 22°C, light breeze from the west.',
134
+ },
135
+ ]
136
+ const messages = applyCacheBreakpoint(history, 0)
137
+
138
+ const request = {
139
+ model: ModelId('anthropic/claude-haiku-4.5'),
140
+ systemPrompt: LARGE_SYSTEM_PROMPT,
141
+ messages,
142
+ tools: [weatherTool],
143
+ }
144
+
145
+ // First call primes the cache
146
+ const first = await provider.inference(request)
147
+ if (!first.ok) throw new Error(`first call failed: ${JSON.stringify(first.error)}`)
148
+ expect(first.value.metrics.promptTokens).toBeGreaterThan(1024)
149
+
150
+ // Second call — same prefix → cache read proves the write on call 1 was honored
151
+ const second = await provider.inference(request)
152
+ if (!second.ok) throw new Error(`second call failed: ${JSON.stringify(second.error)}`)
153
+ expect(second.value.metrics.cachedTokens ?? 0).toBeGreaterThan(1024)
154
+ }, 60_000)
155
+ })
@@ -0,0 +1,30 @@
1
+ export { AnthropicProvider } from './anthropic.js'
2
+ export type { AnthropicConfig } from './anthropic.js'
3
+
4
+ export { OpenRouterProvider } from './openrouter.js'
5
+ export type { OpenRouterConfig } from './openrouter.js'
6
+
7
+ export { RoutingLLMProvider } from './routing-provider.js'
8
+ export type { RoutableLLMProvider } from './routing-provider.js'
9
+
10
+ export { LoggingLLMProvider } from './logging-provider.js'
11
+
12
+ export { MockLLMProvider, RequestMatchers } from './mock.js'
13
+ export type { MockInferenceHandler } from './mock.js'
14
+
15
+ export { LLMLogger } from './logger.js'
16
+ export type { LLMLoggerConfig } from './logger.js'
17
+
18
+ export { applyMiddleware, useProvider, withAnthropic, withMaxTokens, withOpenRouter, withTemperature } from './middleware.js'
19
+ export type { InferenceNext, LLMMiddleware } from './middleware.js'
20
+
21
+ export {
22
+ composeStrippers,
23
+ createSnapshotLLMMiddleware,
24
+ normalizeStripRuntime,
25
+ normalizeStripUuids,
26
+ normalizeWith,
27
+ stripEphemeralPorts,
28
+ stripUuids,
29
+ } from './snapshot-middleware.js'
30
+ export type { SnapshotLLMMiddlewareOptions } from './snapshot-middleware.js'
@@ -0,0 +1,167 @@
1
+ import type { AgentId } from '~/core/agents/schema.js'
2
+ import type { AnthropicRequestOptions, OpenRouterRequestOptions } from '~/core/llm/provider.js'
3
+ import type { LLMCallId } from '~/core/llm/schema.js'
4
+ import type { SessionId } from '~/core/sessions/schema.js'
5
+ import type { ToolCallId } from '~/core/tools/schema.js'
6
+ import type { LLMToolCall } from './state.js'
7
+
8
+ export type ChatMessageContentItemText = {
9
+ type: 'text'
10
+ text: string
11
+ cacheControl?: { type: 'ephemeral' }
12
+ }
13
+
14
+ export type ChatMessageContentItemImageDetail = 'auto' | 'low' | 'high'
15
+
16
+ export type ChatMessageContentItemImage = {
17
+ type: 'image_url'
18
+ imageUrl: {
19
+ url: string
20
+ detail?: ChatMessageContentItemImageDetail
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Union of all content item types.
26
+ * Start with text and image, extend with audio/video as needed.
27
+ */
28
+ export type ChatMessageContentItem =
29
+ | ChatMessageContentItemText
30
+ | ChatMessageContentItemImage
31
+
32
+ /**
33
+ * Tool result content - string or array of content items.
34
+ * Matches OpenRouter's ToolResponseMessageContent type.
35
+ */
36
+ export type ToolResultContent = string | ChatMessageContentItem[]
37
+
38
+ /**
39
+ * Helper to normalize content to string (for display/logging).
40
+ */
41
+ export const contentToString = (content: ToolResultContent): string => {
42
+ if (typeof content === 'string') return content
43
+ return content
44
+ .filter((c): c is ChatMessageContentItemText => c.type === 'text')
45
+ .map((c) => c.text)
46
+ .join('\n')
47
+ }
48
+
49
+ /**
50
+ * Represents an LLM message in the request.
51
+ */
52
+ export type LLMCallMessage = {
53
+ role: 'user' | 'assistant' | 'tool' | 'system'
54
+ content: string | ChatMessageContentItem[]
55
+ toolCalls?: LLMToolCall[]
56
+ toolCallId?: ToolCallId
57
+ /** Assistant reasoning (for models that support it) */
58
+ reasoning?: string
59
+ /** Prompt cache breakpoint marker (ephemeral cache checkpoint after this message) */
60
+ cacheControl?: { type: 'ephemeral' }
61
+ }
62
+
63
+ /**
64
+ * Tool definition for logging (includes full JSON schema).
65
+ */
66
+ export type LLMCallToolDefinition = {
67
+ name: string
68
+ description: string
69
+ /** JSON Schema for tool parameters */
70
+ parameters?: Record<string, unknown>
71
+ }
72
+
73
+ /**
74
+ * Request data stored in the log entry.
75
+ */
76
+ export type LLMCallRequest = {
77
+ model: string
78
+ systemPrompt: string
79
+ messages: LLMCallMessage[]
80
+ tools?: LLMCallToolDefinition[]
81
+ toolsCount: number
82
+ maxTokens?: number
83
+ temperature?: number
84
+ /** Provider-specific options set by middleware */
85
+ providerOptions?: {
86
+ openrouter?: OpenRouterRequestOptions
87
+ anthropic?: AnthropicRequestOptions
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Response data stored in the log entry.
93
+ */
94
+ export type LLMCallResponse = {
95
+ content: string | null
96
+ toolCalls: LLMToolCall[]
97
+ finishReason: 'stop' | 'tool_calls' | 'length' | 'error'
98
+ /** Assistant reasoning (for models that support extended thinking) */
99
+ reasoning?: string
100
+ }
101
+
102
+ /**
103
+ * Extended metrics with detailed token breakdown.
104
+ */
105
+ export type LLMCallMetrics = {
106
+ promptTokens: number
107
+ completionTokens: number
108
+ totalTokens: number
109
+ /** Reasoning/thinking tokens (for models like o1, Claude with extended thinking) */
110
+ reasoningTokens?: number
111
+ /** Cached prompt tokens (for providers with prompt caching) */
112
+ cachedTokens?: number
113
+ /** Tokens written to prompt cache */
114
+ cacheWriteTokens?: number
115
+ latencyMs: number
116
+ /** Generation time (actual model inference time) */
117
+ generationTimeMs?: number
118
+ model: string
119
+ /** Provider name (e.g., "anthropic", "openai") */
120
+ provider?: string
121
+ cost?: number
122
+ /** Cache status */
123
+ cacheStatus?: 'hit' | 'miss' | 'none'
124
+ }
125
+
126
+ /**
127
+ * Error data stored in the log entry.
128
+ */
129
+ export type LLMCallError = {
130
+ type: string
131
+ message: string
132
+ retryAfterMs?: number
133
+ /** HTTP status code from the provider response */
134
+ statusCode?: number
135
+ /** Raw HTTP response body from the provider */
136
+ responseBody?: string
137
+ }
138
+
139
+ /**
140
+ * Complete LLM call log entry.
141
+ * Each entry represents a single LLM API call with full request/response details.
142
+ */
143
+ export type LLMCallLogEntry = {
144
+ id: LLMCallId
145
+ sessionId: SessionId
146
+ agentId: AgentId
147
+ createdAt: number
148
+ completedAt?: number
149
+ durationMs?: number
150
+ status: 'running' | 'success' | 'error'
151
+
152
+ request: LLMCallRequest
153
+ response?: LLMCallResponse
154
+ metrics?: LLMCallMetrics
155
+ error?: LLMCallError
156
+
157
+ /** Provider-specific request ID (e.g., OpenRouter generation ID) */
158
+ providerRequestId?: string
159
+ }
160
+
161
+ /**
162
+ * Response for listing LLM calls.
163
+ */
164
+ export type GetLLMCallsResponse = {
165
+ calls: LLMCallLogEntry[]
166
+ total: number
167
+ }
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Tests for LLM Logger
3
+ *
4
+ * Tests individual LLM call file storage in session folders.
5
+ */
6
+
7
+ import { afterEach, beforeEach, describe, expect, it } from 'bun:test'
8
+ import { mkdir, readdir, readFile, rm } from 'node:fs/promises'
9
+ import { tmpdir } from 'node:os'
10
+ import { join } from 'node:path'
11
+ import z from 'zod/v4'
12
+ import { AgentId } from '~/core/agents/schema.js'
13
+ import { LLMCallId, ModelId } from '~/core/llm/schema.js'
14
+ import { SessionId } from '~/core/sessions/schema.js'
15
+ import { createNodeFileSystem } from '~/testing/node-platform.js'
16
+ import { LLMLogger } from './logger.js'
17
+ import type { LLMLoggerConfig } from './logger.js'
18
+ import type { InferenceRequest, InferenceResponse, LLMError } from './provider.js'
19
+
20
+ // ============================================================================
21
+ // Test helpers
22
+ // ============================================================================
23
+
24
+ const createTestConfig = (overrides: Partial<LLMLoggerConfig> = {}): LLMLoggerConfig => ({
25
+ basePath: join(tmpdir(), `llm-logger-test-${Date.now()}-${Math.random().toString(36).slice(2)}`),
26
+ enabled: true,
27
+ fs: createNodeFileSystem(),
28
+ ...overrides,
29
+ })
30
+
31
+ const createTestRequest = (): InferenceRequest => {
32
+ return {
33
+ model: ModelId('test-model'),
34
+ systemPrompt: 'You are a test assistant.',
35
+ messages: [
36
+ { role: 'user', content: 'Hello' },
37
+ { role: 'assistant', content: 'Hi there!' },
38
+ ],
39
+ tools: [
40
+ { name: 'test_tool', description: 'A test tool', input: z.unknown(), execute: async () => ({ ok: true, value: '' }) },
41
+ ],
42
+ maxTokens: 100,
43
+ temperature: 0.7,
44
+ }
45
+ }
46
+
47
+ const createTestResponse = (): InferenceResponse => ({
48
+ content: 'Test response',
49
+ toolCalls: [
50
+ { id: 'tc-1' as any, name: 'test_tool', input: { foo: 'bar' } },
51
+ ],
52
+ finishReason: 'stop',
53
+ metrics: {
54
+ promptTokens: 10,
55
+ completionTokens: 5,
56
+ totalTokens: 15,
57
+ latencyMs: 100,
58
+ model: 'test-model',
59
+ cost: 0.001,
60
+ },
61
+ })
62
+
63
+ const createTestError = (): LLMError => ({
64
+ type: 'rate_limit',
65
+ message: 'Rate limit exceeded',
66
+ retryAfterMs: 5000,
67
+ })
68
+
69
+ // ============================================================================
70
+ // Tests
71
+ // ============================================================================
72
+
73
+ describe('LLMLogger', () => {
74
+ let testBasePath: string
75
+
76
+ beforeEach(async () => {
77
+ testBasePath = join(tmpdir(), `llm-logger-test-${Date.now()}-${Math.random().toString(36).slice(2)}`)
78
+ })
79
+
80
+ afterEach(async () => {
81
+ try {
82
+ await rm(testBasePath, { recursive: true, force: true })
83
+ } catch {
84
+ // Ignore cleanup errors
85
+ }
86
+ })
87
+
88
+ describe('createCall', () => {
89
+ it('creates a call file with request data', async () => {
90
+ const config = createTestConfig({ basePath: testBasePath })
91
+ const logger = new LLMLogger(config)
92
+ const sessionId = SessionId('test-session-1')
93
+ const agentId = AgentId('test-agent-1')
94
+
95
+ const callId = await logger.createCall(sessionId, agentId, createTestRequest())
96
+
97
+ expect(callId).toBeTruthy()
98
+
99
+ const call = await logger.getCall(sessionId, callId)
100
+ expect(call).not.toBeNull()
101
+ expect(call!.id).toBe(callId)
102
+ expect(call!.sessionId).toBe(sessionId)
103
+ expect(call!.agentId).toBe(agentId)
104
+ expect(call!.status).toBe('running')
105
+ expect(call!.request.model).toBe('test-model')
106
+ expect(call!.request.systemPrompt).toBe('You are a test assistant.')
107
+ expect(call!.request.messages.length).toBe(2)
108
+ expect(call!.request.toolsCount).toBe(1)
109
+ })
110
+
111
+ it('stores call in session folder structure', async () => {
112
+ const config = createTestConfig({ basePath: testBasePath })
113
+ const logger = new LLMLogger(config)
114
+ const sessionId = SessionId('session-abc')
115
+ const agentId = AgentId('agent-1')
116
+
117
+ const callId = await logger.createCall(sessionId, agentId, createTestRequest())
118
+
119
+ // Verify file exists in correct location
120
+ const callPath = join(testBasePath, 'sessions', sessionId, 'calls', `${callId}.json`)
121
+ const content = await readFile(callPath, 'utf-8')
122
+ const parsed = JSON.parse(content)
123
+ expect(parsed.id).toBe(callId)
124
+ })
125
+ })
126
+
127
+ describe('completeCall', () => {
128
+ it('updates call with response data', async () => {
129
+ const config = createTestConfig({ basePath: testBasePath })
130
+ const logger = new LLMLogger(config)
131
+ const sessionId = SessionId('test-session-2')
132
+ const agentId = AgentId('test-agent-1')
133
+
134
+ const callId = await logger.createCall(sessionId, agentId, createTestRequest())
135
+ await logger.completeCall(sessionId, callId, createTestResponse(), 150)
136
+
137
+ const call = await logger.getCall(sessionId, callId)
138
+ expect(call!.status).toBe('success')
139
+ expect(call!.durationMs).toBe(150)
140
+ expect(call!.response).toBeDefined()
141
+ expect(call!.response!.content).toBe('Test response')
142
+ expect(call!.response!.finishReason).toBe('stop')
143
+ expect(call!.metrics).toBeDefined()
144
+ expect(call!.metrics!.promptTokens).toBe(10)
145
+ expect(call!.metrics!.completionTokens).toBe(5)
146
+ expect(call!.metrics!.cost).toBe(0.001)
147
+ })
148
+
149
+ it('handles non-existent call gracefully', async () => {
150
+ const config = createTestConfig({ basePath: testBasePath })
151
+ const logger = new LLMLogger(config)
152
+ const sessionId = SessionId('test-session-3')
153
+
154
+ // Should not throw
155
+ await logger.completeCall(sessionId, LLMCallId('non-existent'), createTestResponse(), 100)
156
+ })
157
+ })
158
+
159
+ describe('failCall', () => {
160
+ it('updates call with error data', async () => {
161
+ const config = createTestConfig({ basePath: testBasePath })
162
+ const logger = new LLMLogger(config)
163
+ const sessionId = SessionId('test-session-4')
164
+ const agentId = AgentId('test-agent-1')
165
+
166
+ const callId = await logger.createCall(sessionId, agentId, createTestRequest())
167
+ await logger.failCall(sessionId, callId, createTestError(), 50)
168
+
169
+ const call = await logger.getCall(sessionId, callId)
170
+ expect(call!.status).toBe('error')
171
+ expect(call!.durationMs).toBe(50)
172
+ expect(call!.error).toBeDefined()
173
+ expect(call!.error!.type).toBe('rate_limit')
174
+ expect(call!.error!.message).toBe('Rate limit exceeded')
175
+ expect(call!.error!.retryAfterMs).toBe(5000)
176
+ })
177
+ })
178
+
179
+ describe('getCall', () => {
180
+ it('returns null for non-existent call', async () => {
181
+ const config = createTestConfig({ basePath: testBasePath })
182
+ const logger = new LLMLogger(config)
183
+ const sessionId = SessionId('test-session-6')
184
+
185
+ const call = await logger.getCall(sessionId, LLMCallId('non-existent'))
186
+ expect(call).toBeNull()
187
+ })
188
+ })
189
+
190
+ describe('listCalls', () => {
191
+ it('lists all calls for a session', async () => {
192
+ const config = createTestConfig({ basePath: testBasePath })
193
+ const logger = new LLMLogger(config)
194
+ const sessionId = SessionId('test-session-7')
195
+ const agentId = AgentId('test-agent-1')
196
+
197
+ // Create multiple calls
198
+ await logger.createCall(sessionId, agentId, createTestRequest())
199
+ await logger.createCall(sessionId, agentId, createTestRequest())
200
+ await logger.createCall(sessionId, agentId, createTestRequest())
201
+
202
+ const result = await logger.listCalls(sessionId)
203
+ expect(result.total).toBe(3)
204
+ expect(result.calls.length).toBe(3)
205
+ })
206
+
207
+ it('returns empty list for session without calls', async () => {
208
+ const config = createTestConfig({ basePath: testBasePath })
209
+ const logger = new LLMLogger(config)
210
+ const sessionId = SessionId('test-session-8')
211
+
212
+ const result = await logger.listCalls(sessionId)
213
+ expect(result.total).toBe(0)
214
+ expect(result.calls.length).toBe(0)
215
+ })
216
+
217
+ it('supports pagination', async () => {
218
+ const config = createTestConfig({ basePath: testBasePath })
219
+ const logger = new LLMLogger(config)
220
+ const sessionId = SessionId('test-session-9')
221
+ const agentId = AgentId('test-agent-1')
222
+
223
+ // Create 5 calls
224
+ for (let i = 0; i < 5; i++) {
225
+ await logger.createCall(sessionId, agentId, createTestRequest())
226
+ }
227
+
228
+ const result = await logger.listCalls(sessionId, { limit: 2, offset: 1 })
229
+ expect(result.total).toBe(5)
230
+ expect(result.calls.length).toBe(2)
231
+ })
232
+
233
+ it('orders calls by most recent first', async () => {
234
+ const config = createTestConfig({ basePath: testBasePath })
235
+ const logger = new LLMLogger(config)
236
+ const sessionId = SessionId('test-session-10')
237
+ const agentId = AgentId('test-agent-1')
238
+
239
+ const callId1 = await logger.createCall(sessionId, agentId, createTestRequest())
240
+ // Small delay to ensure different UUIDv7 timestamps
241
+ await new Promise(resolve => setTimeout(resolve, 2))
242
+ const callId2 = await logger.createCall(sessionId, agentId, createTestRequest())
243
+
244
+ const result = await logger.listCalls(sessionId)
245
+ // Most recent (callId2) should be first
246
+ expect(result.calls[0].id).toBe(callId2)
247
+ expect(result.calls[1].id).toBe(callId1)
248
+ })
249
+ })
250
+
251
+ describe('multiple sessions', () => {
252
+ it('isolates calls between sessions', async () => {
253
+ const config = createTestConfig({ basePath: testBasePath })
254
+ const logger = new LLMLogger(config)
255
+ const sessionId1 = SessionId('session-a')
256
+ const sessionId2 = SessionId('session-b')
257
+ const agentId = AgentId('test-agent-1')
258
+
259
+ await logger.createCall(sessionId1, agentId, createTestRequest())
260
+ await logger.createCall(sessionId1, agentId, createTestRequest())
261
+ await logger.createCall(sessionId2, agentId, createTestRequest())
262
+
263
+ const result1 = await logger.listCalls(sessionId1)
264
+ const result2 = await logger.listCalls(sessionId2)
265
+
266
+ expect(result1.total).toBe(2)
267
+ expect(result2.total).toBe(1)
268
+ })
269
+ })
270
+ })