@roj-ai/sdk 0.1.36 → 0.2.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 (925) hide show
  1. package/dist/bootstrap.d.ts +420 -26
  2. package/dist/bootstrap.d.ts.map +1 -1
  3. package/dist/bootstrap.js +55 -24
  4. package/dist/bootstrap.js.map +1 -1
  5. package/dist/bun-platform/fs.d.ts.map +1 -1
  6. package/dist/bun-platform/fs.js +1 -0
  7. package/dist/bun-platform/fs.js.map +1 -1
  8. package/dist/bun-platform/index.d.ts +4 -1
  9. package/dist/bun-platform/index.d.ts.map +1 -1
  10. package/dist/bun-platform/index.js +7 -1
  11. package/dist/bun-platform/index.js.map +1 -1
  12. package/dist/bun-platform/server-lifecycle.d.ts +30 -0
  13. package/dist/bun-platform/server-lifecycle.d.ts.map +1 -0
  14. package/dist/bun-platform/server-lifecycle.js +182 -0
  15. package/dist/bun-platform/server-lifecycle.js.map +1 -0
  16. package/dist/bun-platform/shell.d.ts +33 -0
  17. package/dist/bun-platform/shell.d.ts.map +1 -0
  18. package/dist/bun-platform/shell.js +322 -0
  19. package/dist/bun-platform/shell.js.map +1 -0
  20. package/dist/config.d.ts +34 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +97 -0
  23. package/dist/config.js.map +1 -1
  24. package/dist/core/agents/agent.d.ts +42 -7
  25. package/dist/core/agents/agent.d.ts.map +1 -1
  26. package/dist/core/agents/agent.js +202 -87
  27. package/dist/core/agents/agent.js.map +1 -1
  28. package/dist/core/agents/config.d.ts +8 -1
  29. package/dist/core/agents/config.d.ts.map +1 -1
  30. package/dist/core/agents/config.js +5 -1
  31. package/dist/core/agents/config.js.map +1 -1
  32. package/dist/core/agents/retry.d.ts +1 -1
  33. package/dist/core/agents/retry.d.ts.map +1 -1
  34. package/dist/core/agents/retry.js +14 -16
  35. package/dist/core/agents/retry.js.map +1 -1
  36. package/dist/core/agents/state.d.ts +3 -1
  37. package/dist/core/agents/state.d.ts.map +1 -1
  38. package/dist/core/agents/state.js +1 -1
  39. package/dist/core/agents/state.js.map +1 -1
  40. package/dist/core/context/state.d.ts +3 -3
  41. package/dist/core/context/state.js +2 -2
  42. package/dist/core/events/base-event-store.d.ts.map +1 -1
  43. package/dist/core/events/base-event-store.js +22 -14
  44. package/dist/core/events/base-event-store.js.map +1 -1
  45. package/dist/core/events/file.d.ts +39 -1
  46. package/dist/core/events/file.d.ts.map +1 -1
  47. package/dist/core/events/file.js +159 -20
  48. package/dist/core/events/file.js.map +1 -1
  49. package/dist/core/events/types.d.ts +1 -1
  50. package/dist/core/file-store/containment.d.ts +19 -0
  51. package/dist/core/file-store/containment.d.ts.map +1 -0
  52. package/dist/core/file-store/containment.js +62 -0
  53. package/dist/core/file-store/containment.js.map +1 -0
  54. package/dist/core/file-store/file-store.d.ts +22 -2
  55. package/dist/core/file-store/file-store.d.ts.map +1 -1
  56. package/dist/core/file-store/file-store.js +88 -20
  57. package/dist/core/file-store/file-store.js.map +1 -1
  58. package/dist/core/file-store/types.d.ts +13 -1
  59. package/dist/core/file-store/types.d.ts.map +1 -1
  60. package/dist/core/image/image-processor.d.ts.map +1 -1
  61. package/dist/core/image/image-processor.js +3 -1
  62. package/dist/core/image/image-processor.js.map +1 -1
  63. package/dist/core/image/types.d.ts +2 -0
  64. package/dist/core/image/types.d.ts.map +1 -1
  65. package/dist/core/image/vips-resizer.d.ts.map +1 -1
  66. package/dist/core/image/vips-resizer.js +81 -33
  67. package/dist/core/image/vips-resizer.js.map +1 -1
  68. package/dist/core/llm/anthropic.d.ts +0 -1
  69. package/dist/core/llm/anthropic.d.ts.map +1 -1
  70. package/dist/core/llm/anthropic.js +58 -72
  71. package/dist/core/llm/anthropic.js.map +1 -1
  72. package/dist/core/llm/logger.d.ts +14 -2
  73. package/dist/core/llm/logger.d.ts.map +1 -1
  74. package/dist/core/llm/logger.js +161 -36
  75. package/dist/core/llm/logger.js.map +1 -1
  76. package/dist/core/llm/openrouter.d.ts +0 -1
  77. package/dist/core/llm/openrouter.d.ts.map +1 -1
  78. package/dist/core/llm/openrouter.js +53 -66
  79. package/dist/core/llm/openrouter.js.map +1 -1
  80. package/dist/core/llm/provider-request.d.ts +10 -0
  81. package/dist/core/llm/provider-request.d.ts.map +1 -0
  82. package/dist/core/llm/provider-request.js +41 -0
  83. package/dist/core/llm/provider-request.js.map +1 -0
  84. package/dist/core/llm/provider.d.ts +11 -0
  85. package/dist/core/llm/provider.d.ts.map +1 -1
  86. package/dist/core/llm/provider.js +26 -0
  87. package/dist/core/llm/provider.js.map +1 -1
  88. package/dist/core/llm/state.d.ts +2 -2
  89. package/dist/core/llm/state.js +4 -4
  90. package/dist/core/plugins/plugin-builder.d.ts +57 -3
  91. package/dist/core/plugins/plugin-builder.d.ts.map +1 -1
  92. package/dist/core/plugins/plugin-builder.js +68 -14
  93. package/dist/core/plugins/plugin-builder.js.map +1 -1
  94. package/dist/core/preset/preset-builder.d.ts +3 -2
  95. package/dist/core/preset/preset-builder.d.ts.map +1 -1
  96. package/dist/core/preset/preset-builder.js +7 -16
  97. package/dist/core/preset/preset-builder.js.map +1 -1
  98. package/dist/core/sessions/context.d.ts +23 -5
  99. package/dist/core/sessions/context.d.ts.map +1 -1
  100. package/dist/core/sessions/runtime-activity.d.ts +33 -0
  101. package/dist/core/sessions/runtime-activity.d.ts.map +1 -0
  102. package/dist/core/sessions/runtime-activity.js +55 -0
  103. package/dist/core/sessions/runtime-activity.js.map +1 -0
  104. package/dist/core/sessions/schema.d.ts +23 -2
  105. package/dist/core/sessions/schema.d.ts.map +1 -1
  106. package/dist/core/sessions/schema.js +24 -3
  107. package/dist/core/sessions/schema.js.map +1 -1
  108. package/dist/core/sessions/session-manager.d.ts +83 -6
  109. package/dist/core/sessions/session-manager.d.ts.map +1 -1
  110. package/dist/core/sessions/session-manager.js +517 -118
  111. package/dist/core/sessions/session-manager.js.map +1 -1
  112. package/dist/core/sessions/session-store.d.ts +18 -0
  113. package/dist/core/sessions/session-store.d.ts.map +1 -1
  114. package/dist/core/sessions/session-store.js +33 -0
  115. package/dist/core/sessions/session-store.js.map +1 -1
  116. package/dist/core/sessions/session.d.ts +42 -6
  117. package/dist/core/sessions/session.d.ts.map +1 -1
  118. package/dist/core/sessions/session.js +176 -44
  119. package/dist/core/sessions/session.js.map +1 -1
  120. package/dist/core/sessions/state.d.ts +10 -1
  121. package/dist/core/sessions/state.d.ts.map +1 -1
  122. package/dist/core/sessions/state.js +11 -1
  123. package/dist/core/sessions/state.js.map +1 -1
  124. package/dist/core/system.d.ts +9 -0
  125. package/dist/core/system.d.ts.map +1 -1
  126. package/dist/core/system.js +4 -1
  127. package/dist/core/system.js.map +1 -1
  128. package/dist/core/tools/executor.d.ts +1 -1
  129. package/dist/core/wake-key.d.ts +34 -0
  130. package/dist/core/wake-key.d.ts.map +1 -0
  131. package/dist/core/wake-key.js +51 -0
  132. package/dist/core/wake-key.js.map +1 -0
  133. package/dist/index.d.ts +25 -13
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +23 -8
  136. package/dist/index.js.map +1 -1
  137. package/dist/lib/archive/archive-inspection.d.ts +48 -0
  138. package/dist/lib/archive/archive-inspection.d.ts.map +1 -0
  139. package/dist/lib/archive/archive-inspection.fixtures.d.ts +7 -0
  140. package/dist/lib/archive/archive-inspection.fixtures.d.ts.map +1 -0
  141. package/dist/lib/archive/archive-inspection.fixtures.js +134 -0
  142. package/dist/lib/archive/archive-inspection.fixtures.js.map +1 -0
  143. package/dist/lib/archive/archive-inspection.js +253 -0
  144. package/dist/lib/archive/archive-inspection.js.map +1 -0
  145. package/dist/lib/archive/index.d.ts +3 -0
  146. package/dist/lib/archive/index.d.ts.map +1 -0
  147. package/dist/lib/archive/index.js +2 -0
  148. package/dist/lib/archive/index.js.map +1 -0
  149. package/dist/lib/logger/console.d.ts +5 -12
  150. package/dist/lib/logger/console.d.ts.map +1 -1
  151. package/dist/lib/logger/console.js +5 -47
  152. package/dist/lib/logger/console.js.map +1 -1
  153. package/dist/lib/logger/file.d.ts +8 -11
  154. package/dist/lib/logger/file.d.ts.map +1 -1
  155. package/dist/lib/logger/file.js +26 -37
  156. package/dist/lib/logger/file.js.map +1 -1
  157. package/dist/lib/logger/index.d.ts +3 -1
  158. package/dist/lib/logger/index.d.ts.map +1 -1
  159. package/dist/lib/logger/index.js +3 -1
  160. package/dist/lib/logger/index.js.map +1 -1
  161. package/dist/lib/logger/jsonl.d.ts +21 -0
  162. package/dist/lib/logger/jsonl.d.ts.map +1 -0
  163. package/dist/lib/logger/jsonl.js +29 -0
  164. package/dist/lib/logger/jsonl.js.map +1 -0
  165. package/dist/lib/logger/logger.d.ts +22 -0
  166. package/dist/lib/logger/logger.d.ts.map +1 -1
  167. package/dist/lib/logger/logger.js +37 -0
  168. package/dist/lib/logger/logger.js.map +1 -1
  169. package/dist/lib/logger/session-log.d.ts +21 -0
  170. package/dist/lib/logger/session-log.d.ts.map +1 -0
  171. package/dist/lib/logger/session-log.js +37 -0
  172. package/dist/lib/logger/session-log.js.map +1 -0
  173. package/dist/lib/utils/concurrency.d.ts +1 -1
  174. package/dist/lib/utils/concurrency.d.ts.map +1 -1
  175. package/dist/lib/utils/concurrency.js +30 -7
  176. package/dist/lib/utils/concurrency.js.map +1 -1
  177. package/dist/lib/utils/fs-batch.d.ts +17 -0
  178. package/dist/lib/utils/fs-batch.d.ts.map +1 -0
  179. package/dist/lib/utils/fs-batch.js +38 -0
  180. package/dist/lib/utils/fs-batch.js.map +1 -0
  181. package/dist/lib/utils/result.d.ts +7 -22
  182. package/dist/lib/utils/result.d.ts.map +1 -1
  183. package/dist/lib/utils/result.js +6 -17
  184. package/dist/lib/utils/result.js.map +1 -1
  185. package/dist/lib/utils/sleep.d.ts +10 -0
  186. package/dist/lib/utils/sleep.d.ts.map +1 -0
  187. package/dist/lib/utils/sleep.js +26 -0
  188. package/dist/lib/utils/sleep.js.map +1 -0
  189. package/dist/platform/fs-revision.d.ts +21 -0
  190. package/dist/platform/fs-revision.d.ts.map +1 -0
  191. package/dist/platform/fs-revision.js +9 -0
  192. package/dist/platform/fs-revision.js.map +1 -0
  193. package/dist/platform/fs.d.ts +104 -1
  194. package/dist/platform/fs.d.ts.map +1 -1
  195. package/dist/platform/git.d.ts +59 -0
  196. package/dist/platform/git.d.ts.map +1 -0
  197. package/dist/platform/git.js +8 -0
  198. package/dist/platform/git.js.map +1 -0
  199. package/dist/platform/index.d.ts +40 -1
  200. package/dist/platform/index.d.ts.map +1 -1
  201. package/dist/platform/index.js +1 -1
  202. package/dist/platform/index.js.map +1 -1
  203. package/dist/platform/llm-call-log.d.ts +80 -0
  204. package/dist/platform/llm-call-log.d.ts.map +1 -0
  205. package/dist/platform/llm-call-log.js +12 -0
  206. package/dist/platform/llm-call-log.js.map +1 -0
  207. package/dist/platform/scheduler.d.ts +32 -0
  208. package/dist/platform/scheduler.d.ts.map +1 -0
  209. package/dist/platform/scheduler.js +46 -0
  210. package/dist/platform/scheduler.js.map +1 -0
  211. package/dist/platform/session-log.d.ts +36 -0
  212. package/dist/platform/session-log.d.ts.map +1 -0
  213. package/dist/platform/session-log.js +12 -0
  214. package/dist/platform/session-log.js.map +1 -0
  215. package/dist/platform/shell.d.ts +83 -0
  216. package/dist/platform/shell.d.ts.map +1 -0
  217. package/dist/platform/shell.js +13 -0
  218. package/dist/platform/shell.js.map +1 -0
  219. package/dist/plugins/agent-status/plugin.d.ts.map +1 -1
  220. package/dist/plugins/agent-status/plugin.js +1 -0
  221. package/dist/plugins/agent-status/plugin.js.map +1 -1
  222. package/dist/plugins/agents/plugin.d.ts.map +1 -1
  223. package/dist/plugins/agents/plugin.js +129 -62
  224. package/dist/plugins/agents/plugin.js.map +1 -1
  225. package/dist/plugins/filesystem/listing.d.ts +3 -0
  226. package/dist/plugins/filesystem/listing.d.ts.map +1 -1
  227. package/dist/plugins/filesystem/listing.js +66 -10
  228. package/dist/plugins/filesystem/listing.js.map +1 -1
  229. package/dist/plugins/filesystem/plugin.d.ts.map +1 -1
  230. package/dist/plugins/filesystem/plugin.js +8 -6
  231. package/dist/plugins/filesystem/plugin.js.map +1 -1
  232. package/dist/plugins/git-status/index.d.ts +1 -0
  233. package/dist/plugins/git-status/index.d.ts.map +1 -1
  234. package/dist/plugins/git-status/plugin.d.ts +38 -7
  235. package/dist/plugins/git-status/plugin.d.ts.map +1 -1
  236. package/dist/plugins/git-status/plugin.js +169 -64
  237. package/dist/plugins/git-status/plugin.js.map +1 -1
  238. package/dist/plugins/llm-debug/plugin.d.ts.map +1 -1
  239. package/dist/plugins/llm-debug/plugin.js +1 -0
  240. package/dist/plugins/llm-debug/plugin.js.map +1 -1
  241. package/dist/plugins/logs/plugin.d.ts +1 -4
  242. package/dist/plugins/logs/plugin.d.ts.map +1 -1
  243. package/dist/plugins/logs/plugin.js +7 -0
  244. package/dist/plugins/logs/plugin.js.map +1 -1
  245. package/dist/plugins/mailbox/helpers.d.ts +2 -2
  246. package/dist/plugins/mailbox/helpers.js +1 -1
  247. package/dist/plugins/mailbox/plugin.d.ts.map +1 -1
  248. package/dist/plugins/mailbox/plugin.js +38 -43
  249. package/dist/plugins/mailbox/plugin.js.map +1 -1
  250. package/dist/plugins/mailbox/query.d.ts +7 -2
  251. package/dist/plugins/mailbox/query.d.ts.map +1 -1
  252. package/dist/plugins/mailbox/query.js +14 -7
  253. package/dist/plugins/mailbox/query.js.map +1 -1
  254. package/dist/plugins/mailbox/state.d.ts +5 -4
  255. package/dist/plugins/mailbox/state.d.ts.map +1 -1
  256. package/dist/plugins/mailbox/state.js +6 -5
  257. package/dist/plugins/mailbox/state.js.map +1 -1
  258. package/dist/plugins/resources/filename.d.ts +4 -0
  259. package/dist/plugins/resources/filename.d.ts.map +1 -0
  260. package/dist/plugins/resources/filename.js +18 -0
  261. package/dist/plugins/resources/filename.js.map +1 -0
  262. package/dist/plugins/resources/plugin.d.ts +3 -0
  263. package/dist/plugins/resources/plugin.d.ts.map +1 -1
  264. package/dist/plugins/resources/plugin.js +97 -60
  265. package/dist/plugins/resources/plugin.js.map +1 -1
  266. package/dist/plugins/resources/state.d.ts +1 -1
  267. package/dist/plugins/resources/state.js +1 -1
  268. package/dist/plugins/result-eviction/plugin.d.ts.map +1 -1
  269. package/dist/plugins/result-eviction/plugin.js +6 -1
  270. package/dist/plugins/result-eviction/plugin.js.map +1 -1
  271. package/dist/plugins/services/plugin.d.ts +4 -1
  272. package/dist/plugins/services/plugin.d.ts.map +1 -1
  273. package/dist/plugins/services/plugin.js +251 -100
  274. package/dist/plugins/services/plugin.js.map +1 -1
  275. package/dist/plugins/services/prompt.d.ts.map +1 -1
  276. package/dist/plugins/services/prompt.js +1 -4
  277. package/dist/plugins/services/prompt.js.map +1 -1
  278. package/dist/plugins/services/schema.d.ts +15 -5
  279. package/dist/plugins/services/schema.d.ts.map +1 -1
  280. package/dist/plugins/services/service.d.ts +100 -18
  281. package/dist/plugins/services/service.d.ts.map +1 -1
  282. package/dist/plugins/services/service.js +680 -230
  283. package/dist/plugins/services/service.js.map +1 -1
  284. package/dist/plugins/session-lifecycle/plugin.d.ts +21 -1
  285. package/dist/plugins/session-lifecycle/plugin.d.ts.map +1 -1
  286. package/dist/plugins/session-lifecycle/plugin.js +53 -40
  287. package/dist/plugins/session-lifecycle/plugin.js.map +1 -1
  288. package/dist/plugins/session-state/plugin.d.ts +21 -13
  289. package/dist/plugins/session-state/plugin.d.ts.map +1 -1
  290. package/dist/plugins/session-state/plugin.js +214 -79
  291. package/dist/plugins/session-state/plugin.js.map +1 -1
  292. package/dist/plugins/session-stats/plugin.d.ts.map +1 -1
  293. package/dist/plugins/session-stats/plugin.js +1 -0
  294. package/dist/plugins/session-stats/plugin.js.map +1 -1
  295. package/dist/plugins/shell/executor.d.ts +17 -15
  296. package/dist/plugins/shell/executor.d.ts.map +1 -1
  297. package/dist/plugins/shell/executor.js +130 -195
  298. package/dist/plugins/shell/executor.js.map +1 -1
  299. package/dist/plugins/shell/index.d.ts +2 -2
  300. package/dist/plugins/shell/index.d.ts.map +1 -1
  301. package/dist/plugins/shell/index.js +2 -2
  302. package/dist/plugins/shell/index.js.map +1 -1
  303. package/dist/plugins/shell/plugin.d.ts +5 -4
  304. package/dist/plugins/shell/plugin.d.ts.map +1 -1
  305. package/dist/plugins/shell/plugin.js +4 -8
  306. package/dist/plugins/shell/plugin.js.map +1 -1
  307. package/dist/plugins/skills/discovery.d.ts.map +1 -1
  308. package/dist/plugins/skills/discovery.js +10 -8
  309. package/dist/plugins/skills/discovery.js.map +1 -1
  310. package/dist/plugins/skills/index.d.ts +1 -1
  311. package/dist/plugins/skills/index.d.ts.map +1 -1
  312. package/dist/plugins/skills/plugin.d.ts +1 -1
  313. package/dist/plugins/skills/plugin.d.ts.map +1 -1
  314. package/dist/plugins/skills/plugin.js +23 -30
  315. package/dist/plugins/skills/plugin.js.map +1 -1
  316. package/dist/plugins/skills/prompts.d.ts +3 -3
  317. package/dist/plugins/skills/prompts.d.ts.map +1 -1
  318. package/dist/plugins/skills/prompts.js.map +1 -1
  319. package/dist/plugins/skills/schema.d.ts +4 -2
  320. package/dist/plugins/skills/schema.d.ts.map +1 -1
  321. package/dist/plugins/todo/schema.d.ts +1 -1
  322. package/dist/plugins/uploads/plugin.d.ts +11 -4
  323. package/dist/plugins/uploads/plugin.d.ts.map +1 -1
  324. package/dist/plugins/uploads/plugin.js +891 -225
  325. package/dist/plugins/uploads/plugin.js.map +1 -1
  326. package/dist/plugins/uploads/preprocessor.d.ts +14 -0
  327. package/dist/plugins/uploads/preprocessor.d.ts.map +1 -1
  328. package/dist/plugins/uploads/preprocessor.js +11 -0
  329. package/dist/plugins/uploads/preprocessor.js.map +1 -1
  330. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts +1 -1
  331. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts.map +1 -1
  332. package/dist/plugins/uploads/preprocessors/image-classifier.js +51 -26
  333. package/dist/plugins/uploads/preprocessors/image-classifier.js.map +1 -1
  334. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts +2 -2
  335. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts.map +1 -1
  336. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js +41 -16
  337. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js.map +1 -1
  338. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts +1 -1
  339. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts.map +1 -1
  340. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js +29 -14
  341. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js.map +1 -1
  342. package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts +1 -1
  343. package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts.map +1 -1
  344. package/dist/plugins/uploads/preprocessors/zip-preprocessor.js +62 -34
  345. package/dist/plugins/uploads/preprocessors/zip-preprocessor.js.map +1 -1
  346. package/dist/plugins/uploads/schema.d.ts +25 -2
  347. package/dist/plugins/uploads/schema.d.ts.map +1 -1
  348. package/dist/plugins/uploads/schema.js +24 -3
  349. package/dist/plugins/uploads/schema.js.map +1 -1
  350. package/dist/plugins/uploads/state.d.ts +13 -1
  351. package/dist/plugins/uploads/state.d.ts.map +1 -1
  352. package/dist/plugins/uploads/state.js +4 -1
  353. package/dist/plugins/uploads/state.js.map +1 -1
  354. package/dist/plugins/user-chat/plugin.d.ts +12 -5
  355. package/dist/plugins/user-chat/plugin.d.ts.map +1 -1
  356. package/dist/plugins/user-chat/plugin.js +141 -32
  357. package/dist/plugins/user-chat/plugin.js.map +1 -1
  358. package/dist/plugins/workers/context.d.ts +35 -13
  359. package/dist/plugins/workers/context.d.ts.map +1 -1
  360. package/dist/plugins/workers/context.js +82 -32
  361. package/dist/plugins/workers/context.js.map +1 -1
  362. package/dist/plugins/workers/definition.d.ts +7 -0
  363. package/dist/plugins/workers/definition.d.ts.map +1 -1
  364. package/dist/plugins/workers/definition.js.map +1 -1
  365. package/dist/plugins/workers/index.d.ts +4 -4
  366. package/dist/plugins/workers/index.d.ts.map +1 -1
  367. package/dist/plugins/workers/index.js +2 -2
  368. package/dist/plugins/workers/index.js.map +1 -1
  369. package/dist/plugins/workers/plugin.d.ts +10 -57
  370. package/dist/plugins/workers/plugin.d.ts.map +1 -1
  371. package/dist/plugins/workers/plugin.js +385 -123
  372. package/dist/plugins/workers/plugin.js.map +1 -1
  373. package/dist/plugins/workers/state.d.ts +69 -0
  374. package/dist/plugins/workers/state.d.ts.map +1 -0
  375. package/dist/plugins/workers/state.js +52 -0
  376. package/dist/plugins/workers/state.js.map +1 -0
  377. package/dist/plugins/workers/worker.d.ts +15 -4
  378. package/dist/plugins/workers/worker.d.ts.map +1 -1
  379. package/dist/testing/conformance.d.ts +106 -0
  380. package/dist/testing/conformance.d.ts.map +1 -0
  381. package/dist/testing/conformance.js +1463 -0
  382. package/dist/testing/conformance.js.map +1 -0
  383. package/dist/testing/node-platform.d.ts.map +1 -1
  384. package/dist/testing/node-platform.js +5 -0
  385. package/dist/testing/node-platform.js.map +1 -1
  386. package/dist/testing/test-harness.d.ts +11 -1
  387. package/dist/testing/test-harness.d.ts.map +1 -1
  388. package/dist/testing/test-harness.js +17 -37
  389. package/dist/testing/test-harness.js.map +1 -1
  390. package/dist/testing/wait-helpers.d.ts.map +1 -1
  391. package/dist/testing/wait-helpers.js +1 -3
  392. package/dist/testing/wait-helpers.js.map +1 -1
  393. package/dist/transport/adapter/client-adapter.d.ts +6 -0
  394. package/dist/transport/adapter/client-adapter.d.ts.map +1 -1
  395. package/dist/transport/adapter/client-adapter.js +50 -3
  396. package/dist/transport/adapter/client-adapter.js.map +1 -1
  397. package/dist/transport/adapter/heartbeat.d.ts +16 -0
  398. package/dist/transport/adapter/heartbeat.d.ts.map +1 -0
  399. package/dist/transport/adapter/heartbeat.js +41 -0
  400. package/dist/transport/adapter/heartbeat.js.map +1 -0
  401. package/dist/transport/adapter/server-adapter.d.ts.map +1 -1
  402. package/dist/transport/adapter/server-adapter.js +6 -0
  403. package/dist/transport/adapter/server-adapter.js.map +1 -1
  404. package/dist/transport/http/app.d.ts +3 -30
  405. package/dist/transport/http/app.d.ts.map +1 -1
  406. package/dist/transport/http/app.js +3 -7
  407. package/dist/transport/http/app.js.map +1 -1
  408. package/dist/transport/http/context.d.ts +40 -0
  409. package/dist/transport/http/context.d.ts.map +1 -0
  410. package/dist/transport/http/context.js +17 -0
  411. package/dist/transport/http/context.js.map +1 -0
  412. package/dist/transport/http/fetch-guard.d.ts +49 -0
  413. package/dist/transport/http/fetch-guard.d.ts.map +1 -0
  414. package/dist/transport/http/fetch-guard.js +312 -0
  415. package/dist/transport/http/fetch-guard.js.map +1 -0
  416. package/dist/transport/http/index.d.ts +1 -1
  417. package/dist/transport/http/index.d.ts.map +1 -1
  418. package/dist/transport/http/middleware/bearer-auth.d.ts +1 -1
  419. package/dist/transport/http/middleware/bearer-auth.d.ts.map +1 -1
  420. package/dist/transport/http/middleware/error-handler.d.ts +2 -2
  421. package/dist/transport/http/middleware/error-handler.d.ts.map +1 -1
  422. package/dist/transport/http/path-containment.d.ts +20 -0
  423. package/dist/transport/http/path-containment.d.ts.map +1 -0
  424. package/dist/transport/http/path-containment.js +31 -0
  425. package/dist/transport/http/path-containment.js.map +1 -0
  426. package/dist/transport/http/responses.d.ts +30 -0
  427. package/dist/transport/http/responses.d.ts.map +1 -0
  428. package/dist/transport/http/responses.js +5 -0
  429. package/dist/transport/http/responses.js.map +1 -0
  430. package/dist/transport/http/routes/files.d.ts +1 -1
  431. package/dist/transport/http/routes/files.d.ts.map +1 -1
  432. package/dist/transport/http/routes/files.js +54 -155
  433. package/dist/transport/http/routes/files.js.map +1 -1
  434. package/dist/transport/http/routes/resources.d.ts +1 -1
  435. package/dist/transport/http/routes/resources.d.ts.map +1 -1
  436. package/dist/transport/http/routes/resources.js +92 -57
  437. package/dist/transport/http/routes/resources.js.map +1 -1
  438. package/dist/transport/http/routes/rpc.d.ts +6 -1
  439. package/dist/transport/http/routes/rpc.d.ts.map +1 -1
  440. package/dist/transport/http/routes/rpc.js +51 -21
  441. package/dist/transport/http/routes/rpc.js.map +1 -1
  442. package/dist/transport/http/routes/upload.d.ts +1 -1
  443. package/dist/transport/http/routes/upload.d.ts.map +1 -1
  444. package/dist/transport/http/routes/upload.js +256 -169
  445. package/dist/transport/http/routes/upload.js.map +1 -1
  446. package/dist/user-config.d.ts +34 -7
  447. package/dist/user-config.d.ts.map +1 -1
  448. package/dist/user-config.js +71 -0
  449. package/dist/user-config.js.map +1 -1
  450. package/package.json +17 -7
  451. package/src/bootstrap.ts +119 -35
  452. package/src/bun-platform/fs.ts +1 -0
  453. package/src/bun-platform/index.ts +18 -1
  454. package/src/bun-platform/server-lifecycle.ts +218 -0
  455. package/src/bun-platform/shell.ts +362 -0
  456. package/src/config.ts +130 -0
  457. package/src/core/agents/agent.ts +210 -92
  458. package/src/core/agents/config.ts +8 -0
  459. package/src/core/agents/retry.ts +16 -17
  460. package/src/core/agents/state.ts +2 -0
  461. package/src/core/events/base-event-store.ts +24 -16
  462. package/src/core/events/file.ts +198 -22
  463. package/src/core/file-store/containment.ts +75 -0
  464. package/src/core/file-store/file-store.ts +106 -25
  465. package/src/core/file-store/types.ts +14 -1
  466. package/src/core/image/image-processor.ts +3 -1
  467. package/src/core/image/types.ts +2 -0
  468. package/src/core/image/vips-resizer.ts +102 -37
  469. package/src/core/llm/anthropic.ts +63 -79
  470. package/src/core/llm/logger.ts +175 -37
  471. package/src/core/llm/openrouter.ts +57 -72
  472. package/src/core/llm/provider-request.ts +40 -0
  473. package/src/core/llm/provider.ts +28 -0
  474. package/src/core/plugins/plugin-builder.ts +106 -14
  475. package/src/core/preset/preset-builder.ts +12 -22
  476. package/src/core/sessions/context.ts +18 -0
  477. package/src/core/sessions/runtime-activity.ts +78 -0
  478. package/src/core/sessions/schema.ts +29 -3
  479. package/src/core/sessions/session-manager.ts +560 -140
  480. package/src/core/sessions/session-store.ts +38 -0
  481. package/src/core/sessions/session.ts +187 -47
  482. package/src/core/sessions/state.ts +11 -0
  483. package/src/core/system.ts +15 -0
  484. package/src/core/wake-key.ts +65 -0
  485. package/src/index.ts +32 -12
  486. package/src/lib/archive/archive-inspection.fixtures.ts +138 -0
  487. package/src/lib/archive/archive-inspection.ts +359 -0
  488. package/src/lib/archive/index.ts +17 -0
  489. package/src/lib/logger/console.ts +7 -57
  490. package/src/lib/logger/file.ts +28 -50
  491. package/src/lib/logger/index.ts +3 -1
  492. package/src/lib/logger/jsonl.ts +36 -0
  493. package/src/lib/logger/logger.ts +48 -0
  494. package/src/lib/logger/session-log.ts +42 -0
  495. package/src/lib/utils/concurrency.ts +37 -8
  496. package/src/lib/utils/fs-batch.ts +49 -0
  497. package/src/lib/utils/result.ts +7 -31
  498. package/src/lib/utils/sleep.ts +23 -0
  499. package/src/platform/fs-revision.ts +21 -0
  500. package/src/platform/fs.ts +109 -1
  501. package/src/platform/git.ts +67 -0
  502. package/src/platform/index.ts +51 -1
  503. package/src/platform/llm-call-log.ts +86 -0
  504. package/src/platform/scheduler.ts +71 -0
  505. package/src/platform/session-log.ts +39 -0
  506. package/src/platform/shell.ts +89 -0
  507. package/src/plugins/agent-status/plugin.ts +1 -0
  508. package/src/plugins/agents/plugin.ts +134 -81
  509. package/src/plugins/filesystem/listing.ts +70 -12
  510. package/src/plugins/filesystem/plugin.ts +8 -6
  511. package/src/plugins/git-status/index.ts +1 -0
  512. package/src/plugins/git-status/plugin.ts +211 -77
  513. package/src/plugins/llm-debug/plugin.ts +1 -0
  514. package/src/plugins/logs/plugin.ts +9 -0
  515. package/src/plugins/mailbox/plugin.ts +46 -64
  516. package/src/plugins/mailbox/query.ts +15 -7
  517. package/src/plugins/mailbox/state.ts +1 -0
  518. package/src/plugins/resources/filename.ts +19 -0
  519. package/src/plugins/resources/plugin.ts +111 -59
  520. package/src/plugins/result-eviction/plugin.ts +6 -1
  521. package/src/plugins/services/plugin.ts +254 -98
  522. package/src/plugins/services/prompt.ts +1 -6
  523. package/src/plugins/services/schema.ts +17 -3
  524. package/src/plugins/services/service.ts +702 -252
  525. package/src/plugins/session-lifecycle/plugin.ts +56 -41
  526. package/src/plugins/session-state/plugin.ts +242 -88
  527. package/src/plugins/session-stats/plugin.ts +1 -0
  528. package/src/plugins/shell/executor.ts +144 -226
  529. package/src/plugins/shell/index.ts +1 -4
  530. package/src/plugins/shell/plugin.ts +7 -9
  531. package/src/plugins/skills/discovery.ts +10 -8
  532. package/src/plugins/skills/index.ts +1 -1
  533. package/src/plugins/skills/plugin.ts +19 -27
  534. package/src/plugins/skills/prompts.ts +3 -3
  535. package/src/plugins/skills/schema.ts +5 -2
  536. package/src/plugins/uploads/plugin.ts +991 -273
  537. package/src/plugins/uploads/preprocessor.ts +25 -0
  538. package/src/plugins/uploads/preprocessors/image-classifier.ts +56 -25
  539. package/src/plugins/uploads/preprocessors/markitdown-preprocessor.ts +41 -15
  540. package/src/plugins/uploads/preprocessors/pdf-preprocessor.ts +32 -16
  541. package/src/plugins/uploads/preprocessors/zip-preprocessor.ts +67 -38
  542. package/src/plugins/uploads/schema.ts +30 -3
  543. package/src/plugins/uploads/state.ts +12 -0
  544. package/src/plugins/user-chat/plugin.ts +196 -40
  545. package/src/plugins/workers/context.ts +102 -39
  546. package/src/plugins/workers/definition.ts +7 -0
  547. package/src/plugins/workers/index.ts +4 -4
  548. package/src/plugins/workers/plugin.ts +461 -151
  549. package/src/plugins/workers/state.ts +64 -0
  550. package/src/plugins/workers/worker.ts +15 -4
  551. package/src/testing/conformance.ts +1751 -0
  552. package/src/testing/node-platform.ts +5 -0
  553. package/src/testing/test-harness.ts +21 -38
  554. package/src/testing/wait-helpers.ts +1 -4
  555. package/src/transport/adapter/client-adapter.ts +60 -3
  556. package/src/transport/adapter/heartbeat.ts +50 -0
  557. package/src/transport/adapter/server-adapter.ts +6 -0
  558. package/src/transport/http/app.ts +7 -35
  559. package/src/transport/http/context.ts +46 -0
  560. package/src/transport/http/fetch-guard.ts +318 -0
  561. package/src/transport/http/index.ts +1 -1
  562. package/src/transport/http/middleware/bearer-auth.ts +1 -1
  563. package/src/transport/http/middleware/error-handler.ts +1 -1
  564. package/src/transport/http/path-containment.ts +44 -0
  565. package/src/transport/http/responses.ts +20 -0
  566. package/src/transport/http/routes/files.ts +69 -159
  567. package/src/transport/http/routes/resources.ts +124 -93
  568. package/src/transport/http/routes/rpc.ts +63 -26
  569. package/src/transport/http/routes/upload.ts +327 -258
  570. package/src/user-config.ts +93 -7
  571. package/dist/config.test.d.ts +0 -2
  572. package/dist/config.test.d.ts.map +0 -1
  573. package/dist/config.test.js +0 -155
  574. package/dist/config.test.js.map +0 -1
  575. package/dist/core/agent-loop.integration.test.d.ts +0 -2
  576. package/dist/core/agent-loop.integration.test.d.ts.map +0 -1
  577. package/dist/core/agent-loop.integration.test.js +0 -414
  578. package/dist/core/agent-loop.integration.test.js.map +0 -1
  579. package/dist/core/agents/agent-config.test.d.ts +0 -2
  580. package/dist/core/agents/agent-config.test.d.ts.map +0 -1
  581. package/dist/core/agents/agent-config.test.js +0 -194
  582. package/dist/core/agents/agent-config.test.js.map +0 -1
  583. package/dist/core/agents/agent-shutdown.test.d.ts +0 -6
  584. package/dist/core/agents/agent-shutdown.test.d.ts.map +0 -1
  585. package/dist/core/agents/agent-shutdown.test.js +0 -180
  586. package/dist/core/agents/agent-shutdown.test.js.map +0 -1
  587. package/dist/core/agents/agent.test.d.ts +0 -2
  588. package/dist/core/agents/agent.test.d.ts.map +0 -1
  589. package/dist/core/agents/agent.test.js +0 -313
  590. package/dist/core/agents/agent.test.js.map +0 -1
  591. package/dist/core/agents/communicator.d.ts +0 -3
  592. package/dist/core/agents/communicator.d.ts.map +0 -1
  593. package/dist/core/agents/communicator.js +0 -13
  594. package/dist/core/agents/communicator.js.map +0 -1
  595. package/dist/core/agents/handler-events.test.d.ts +0 -5
  596. package/dist/core/agents/handler-events.test.d.ts.map +0 -1
  597. package/dist/core/agents/handler-events.test.js +0 -115
  598. package/dist/core/agents/handler-events.test.js.map +0 -1
  599. package/dist/core/agents/response-sanitizer.test.d.ts +0 -2
  600. package/dist/core/agents/response-sanitizer.test.d.ts.map +0 -1
  601. package/dist/core/agents/response-sanitizer.test.js +0 -101
  602. package/dist/core/agents/response-sanitizer.test.js.map +0 -1
  603. package/dist/core/error-recovery.integration.test.d.ts +0 -2
  604. package/dist/core/error-recovery.integration.test.d.ts.map +0 -1
  605. package/dist/core/error-recovery.integration.test.js +0 -288
  606. package/dist/core/error-recovery.integration.test.js.map +0 -1
  607. package/dist/core/event-sourcing.integration.test.d.ts +0 -2
  608. package/dist/core/event-sourcing.integration.test.d.ts.map +0 -1
  609. package/dist/core/event-sourcing.integration.test.js +0 -154
  610. package/dist/core/event-sourcing.integration.test.js.map +0 -1
  611. package/dist/core/events/file.test.d.ts +0 -2
  612. package/dist/core/events/file.test.d.ts.map +0 -1
  613. package/dist/core/events/file.test.js +0 -284
  614. package/dist/core/events/file.test.js.map +0 -1
  615. package/dist/core/events/memory.test.d.ts +0 -2
  616. package/dist/core/events/memory.test.d.ts.map +0 -1
  617. package/dist/core/events/memory.test.js +0 -502
  618. package/dist/core/events/memory.test.js.map +0 -1
  619. package/dist/core/image/image-processor.test.d.ts +0 -2
  620. package/dist/core/image/image-processor.test.d.ts.map +0 -1
  621. package/dist/core/image/image-processor.test.js +0 -171
  622. package/dist/core/image/image-processor.test.js.map +0 -1
  623. package/dist/core/image/vips-resizer.test.d.ts +0 -2
  624. package/dist/core/image/vips-resizer.test.d.ts.map +0 -1
  625. package/dist/core/image/vips-resizer.test.js +0 -336
  626. package/dist/core/image/vips-resizer.test.js.map +0 -1
  627. package/dist/core/llm/anthropic.test.d.ts +0 -2
  628. package/dist/core/llm/anthropic.test.d.ts.map +0 -1
  629. package/dist/core/llm/anthropic.test.js +0 -464
  630. package/dist/core/llm/anthropic.test.js.map +0 -1
  631. package/dist/core/llm/cache-breakpoints.test.d.ts +0 -2
  632. package/dist/core/llm/cache-breakpoints.test.d.ts.map +0 -1
  633. package/dist/core/llm/cache-breakpoints.test.js +0 -69
  634. package/dist/core/llm/cache-breakpoints.test.js.map +0 -1
  635. package/dist/core/llm/cache-live.test.d.ts +0 -16
  636. package/dist/core/llm/cache-live.test.d.ts.map +0 -1
  637. package/dist/core/llm/cache-live.test.js +0 -137
  638. package/dist/core/llm/cache-live.test.js.map +0 -1
  639. package/dist/core/llm/logger.test.d.ts +0 -7
  640. package/dist/core/llm/logger.test.d.ts.map +0 -1
  641. package/dist/core/llm/logger.test.js +0 -228
  642. package/dist/core/llm/logger.test.js.map +0 -1
  643. package/dist/core/llm/message-sanitization.test.d.ts +0 -2
  644. package/dist/core/llm/message-sanitization.test.d.ts.map +0 -1
  645. package/dist/core/llm/message-sanitization.test.js +0 -181
  646. package/dist/core/llm/message-sanitization.test.js.map +0 -1
  647. package/dist/core/llm/mock.test.d.ts +0 -2
  648. package/dist/core/llm/mock.test.d.ts.map +0 -1
  649. package/dist/core/llm/mock.test.js +0 -318
  650. package/dist/core/llm/mock.test.js.map +0 -1
  651. package/dist/core/llm/model-shortlist-live.test.d.ts +0 -35
  652. package/dist/core/llm/model-shortlist-live.test.d.ts.map +0 -1
  653. package/dist/core/llm/model-shortlist-live.test.js +0 -452
  654. package/dist/core/llm/model-shortlist-live.test.js.map +0 -1
  655. package/dist/core/llm/openrouter-mapping.test.d.ts +0 -2
  656. package/dist/core/llm/openrouter-mapping.test.d.ts.map +0 -1
  657. package/dist/core/llm/openrouter-mapping.test.js +0 -190
  658. package/dist/core/llm/openrouter-mapping.test.js.map +0 -1
  659. package/dist/core/llm/openrouter.test.d.ts +0 -2
  660. package/dist/core/llm/openrouter.test.d.ts.map +0 -1
  661. package/dist/core/llm/openrouter.test.js +0 -377
  662. package/dist/core/llm/openrouter.test.js.map +0 -1
  663. package/dist/core/llm/provider-integration.test.d.ts +0 -12
  664. package/dist/core/llm/provider-integration.test.d.ts.map +0 -1
  665. package/dist/core/llm/provider-integration.test.js +0 -350
  666. package/dist/core/llm/provider-integration.test.js.map +0 -1
  667. package/dist/core/llm/reasoning-details.test.d.ts +0 -2
  668. package/dist/core/llm/reasoning-details.test.d.ts.map +0 -1
  669. package/dist/core/llm/reasoning-details.test.js +0 -144
  670. package/dist/core/llm/reasoning-details.test.js.map +0 -1
  671. package/dist/core/llm/routing-provider.test.d.ts +0 -2
  672. package/dist/core/llm/routing-provider.test.d.ts.map +0 -1
  673. package/dist/core/llm/routing-provider.test.js +0 -94
  674. package/dist/core/llm/routing-provider.test.js.map +0 -1
  675. package/dist/core/llm/snapshot-middleware.test.d.ts +0 -2
  676. package/dist/core/llm/snapshot-middleware.test.d.ts.map +0 -1
  677. package/dist/core/llm/snapshot-middleware.test.js +0 -144
  678. package/dist/core/llm/snapshot-middleware.test.js.map +0 -1
  679. package/dist/core/llm/thinking-blocks.test.d.ts +0 -2
  680. package/dist/core/llm/thinking-blocks.test.d.ts.map +0 -1
  681. package/dist/core/llm/thinking-blocks.test.js +0 -291
  682. package/dist/core/llm/thinking-blocks.test.js.map +0 -1
  683. package/dist/core/multi-agent.integration.test.d.ts +0 -2
  684. package/dist/core/multi-agent.integration.test.d.ts.map +0 -1
  685. package/dist/core/multi-agent.integration.test.js +0 -298
  686. package/dist/core/multi-agent.integration.test.js.map +0 -1
  687. package/dist/core/plugin-hooks.integration.test.d.ts +0 -2
  688. package/dist/core/plugin-hooks.integration.test.d.ts.map +0 -1
  689. package/dist/core/plugin-hooks.integration.test.js +0 -458
  690. package/dist/core/plugin-hooks.integration.test.js.map +0 -1
  691. package/dist/core/reasoning-round-trip.integration.test.d.ts +0 -2
  692. package/dist/core/reasoning-round-trip.integration.test.d.ts.map +0 -1
  693. package/dist/core/reasoning-round-trip.integration.test.js +0 -150
  694. package/dist/core/reasoning-round-trip.integration.test.js.map +0 -1
  695. package/dist/core/session-lifecycle.integration.test.d.ts +0 -2
  696. package/dist/core/session-lifecycle.integration.test.d.ts.map +0 -1
  697. package/dist/core/session-lifecycle.integration.test.js +0 -159
  698. package/dist/core/session-lifecycle.integration.test.js.map +0 -1
  699. package/dist/core/sessions/fork-utils.test.d.ts +0 -2
  700. package/dist/core/sessions/fork-utils.test.d.ts.map +0 -1
  701. package/dist/core/sessions/fork-utils.test.js +0 -129
  702. package/dist/core/sessions/fork-utils.test.js.map +0 -1
  703. package/dist/core/sessions/session-overrides.integration.test.d.ts +0 -2
  704. package/dist/core/sessions/session-overrides.integration.test.d.ts.map +0 -1
  705. package/dist/core/sessions/session-overrides.integration.test.js +0 -154
  706. package/dist/core/sessions/session-overrides.integration.test.js.map +0 -1
  707. package/dist/core/sessions/session.test.d.ts +0 -2
  708. package/dist/core/sessions/session.test.d.ts.map +0 -1
  709. package/dist/core/sessions/session.test.js +0 -1100
  710. package/dist/core/sessions/session.test.js.map +0 -1
  711. package/dist/core/tools/executor.test.d.ts +0 -2
  712. package/dist/core/tools/executor.test.d.ts.map +0 -1
  713. package/dist/core/tools/executor.test.js +0 -144
  714. package/dist/core/tools/executor.test.js.map +0 -1
  715. package/dist/lib/logger/console.test.d.ts +0 -2
  716. package/dist/lib/logger/console.test.d.ts.map +0 -1
  717. package/dist/lib/logger/console.test.js +0 -258
  718. package/dist/lib/logger/console.test.js.map +0 -1
  719. package/dist/lib/never.d.ts +0 -2
  720. package/dist/lib/never.d.ts.map +0 -1
  721. package/dist/lib/never.js +0 -4
  722. package/dist/lib/never.js.map +0 -1
  723. package/dist/lib/utils/concurrency.test.d.ts +0 -2
  724. package/dist/lib/utils/concurrency.test.d.ts.map +0 -1
  725. package/dist/lib/utils/concurrency.test.js +0 -135
  726. package/dist/lib/utils/concurrency.test.js.map +0 -1
  727. package/dist/plugins/agent-status/agent-status.test.d.ts +0 -2
  728. package/dist/plugins/agent-status/agent-status.test.d.ts.map +0 -1
  729. package/dist/plugins/agent-status/agent-status.test.js +0 -136
  730. package/dist/plugins/agent-status/agent-status.test.js.map +0 -1
  731. package/dist/plugins/agents/agents.integration.test.d.ts +0 -2
  732. package/dist/plugins/agents/agents.integration.test.d.ts.map +0 -1
  733. package/dist/plugins/agents/agents.integration.test.js +0 -830
  734. package/dist/plugins/agents/agents.integration.test.js.map +0 -1
  735. package/dist/plugins/agents/supervision.integration.test.d.ts +0 -2
  736. package/dist/plugins/agents/supervision.integration.test.d.ts.map +0 -1
  737. package/dist/plugins/agents/supervision.integration.test.js +0 -215
  738. package/dist/plugins/agents/supervision.integration.test.js.map +0 -1
  739. package/dist/plugins/context-compact/compaction-live.test.d.ts +0 -17
  740. package/dist/plugins/context-compact/compaction-live.test.d.ts.map +0 -1
  741. package/dist/plugins/context-compact/compaction-live.test.js +0 -177
  742. package/dist/plugins/context-compact/compaction-live.test.js.map +0 -1
  743. package/dist/plugins/context-compact/context-compact.integration.test.d.ts +0 -2
  744. package/dist/plugins/context-compact/context-compact.integration.test.d.ts.map +0 -1
  745. package/dist/plugins/context-compact/context-compact.integration.test.js +0 -364
  746. package/dist/plugins/context-compact/context-compact.integration.test.js.map +0 -1
  747. package/dist/plugins/context-compact/context-compactor.test.d.ts +0 -2
  748. package/dist/plugins/context-compact/context-compactor.test.d.ts.map +0 -1
  749. package/dist/plugins/context-compact/context-compactor.test.js +0 -858
  750. package/dist/plugins/context-compact/context-compactor.test.js.map +0 -1
  751. package/dist/plugins/context-compact/history-offloader.test.d.ts +0 -2
  752. package/dist/plugins/context-compact/history-offloader.test.d.ts.map +0 -1
  753. package/dist/plugins/context-compact/history-offloader.test.js +0 -77
  754. package/dist/plugins/context-compact/history-offloader.test.js.map +0 -1
  755. package/dist/plugins/filesystem/filesystem.integration.test.d.ts +0 -2
  756. package/dist/plugins/filesystem/filesystem.integration.test.d.ts.map +0 -1
  757. package/dist/plugins/filesystem/filesystem.integration.test.js +0 -447
  758. package/dist/plugins/filesystem/filesystem.integration.test.js.map +0 -1
  759. package/dist/plugins/filesystem/schema.d.ts +0 -7
  760. package/dist/plugins/filesystem/schema.d.ts.map +0 -1
  761. package/dist/plugins/filesystem/schema.js +0 -2
  762. package/dist/plugins/filesystem/schema.js.map +0 -1
  763. package/dist/plugins/limits-guard/limit-guard.test.d.ts +0 -2
  764. package/dist/plugins/limits-guard/limit-guard.test.d.ts.map +0 -1
  765. package/dist/plugins/limits-guard/limit-guard.test.js +0 -194
  766. package/dist/plugins/limits-guard/limit-guard.test.js.map +0 -1
  767. package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts +0 -2
  768. package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts.map +0 -1
  769. package/dist/plugins/limits-guard/limits-guard.integration.test.js +0 -887
  770. package/dist/plugins/limits-guard/limits-guard.integration.test.js.map +0 -1
  771. package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts +0 -2
  772. package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts.map +0 -1
  773. package/dist/plugins/llm-debug/llm-debug.integration.test.js +0 -157
  774. package/dist/plugins/llm-debug/llm-debug.integration.test.js.map +0 -1
  775. package/dist/plugins/mailbox/mailbox.integration.test.d.ts +0 -2
  776. package/dist/plugins/mailbox/mailbox.integration.test.d.ts.map +0 -1
  777. package/dist/plugins/mailbox/mailbox.integration.test.js +0 -678
  778. package/dist/plugins/mailbox/mailbox.integration.test.js.map +0 -1
  779. package/dist/plugins/resources/resources.integration.test.d.ts +0 -2
  780. package/dist/plugins/resources/resources.integration.test.d.ts.map +0 -1
  781. package/dist/plugins/resources/resources.integration.test.js +0 -62
  782. package/dist/plugins/resources/resources.integration.test.js.map +0 -1
  783. package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts +0 -2
  784. package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts.map +0 -1
  785. package/dist/plugins/result-eviction/result-eviction.integration.test.js +0 -294
  786. package/dist/plugins/result-eviction/result-eviction.integration.test.js.map +0 -1
  787. package/dist/plugins/services/pid-registry.test.d.ts +0 -2
  788. package/dist/plugins/services/pid-registry.test.d.ts.map +0 -1
  789. package/dist/plugins/services/pid-registry.test.js +0 -161
  790. package/dist/plugins/services/pid-registry.test.js.map +0 -1
  791. package/dist/plugins/services/services.integration.test.d.ts +0 -2
  792. package/dist/plugins/services/services.integration.test.d.ts.map +0 -1
  793. package/dist/plugins/services/services.integration.test.js +0 -1057
  794. package/dist/plugins/services/services.integration.test.js.map +0 -1
  795. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts +0 -2
  796. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts.map +0 -1
  797. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js +0 -498
  798. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js.map +0 -1
  799. package/dist/plugins/session-stats/plugin.test.d.ts +0 -2
  800. package/dist/plugins/session-stats/plugin.test.d.ts.map +0 -1
  801. package/dist/plugins/session-stats/plugin.test.js +0 -145
  802. package/dist/plugins/session-stats/plugin.test.js.map +0 -1
  803. package/dist/plugins/shell/shell.integration.test.d.ts +0 -2
  804. package/dist/plugins/shell/shell.integration.test.d.ts.map +0 -1
  805. package/dist/plugins/shell/shell.integration.test.js +0 -234
  806. package/dist/plugins/shell/shell.integration.test.js.map +0 -1
  807. package/dist/plugins/shell/shell.test.d.ts +0 -2
  808. package/dist/plugins/shell/shell.test.d.ts.map +0 -1
  809. package/dist/plugins/shell/shell.test.js +0 -236
  810. package/dist/plugins/shell/shell.test.js.map +0 -1
  811. package/dist/plugins/skills/discovery.test.d.ts +0 -2
  812. package/dist/plugins/skills/discovery.test.d.ts.map +0 -1
  813. package/dist/plugins/skills/discovery.test.js +0 -312
  814. package/dist/plugins/skills/discovery.test.js.map +0 -1
  815. package/dist/plugins/skills/skills.integration.test.d.ts +0 -2
  816. package/dist/plugins/skills/skills.integration.test.d.ts.map +0 -1
  817. package/dist/plugins/skills/skills.integration.test.js +0 -475
  818. package/dist/plugins/skills/skills.integration.test.js.map +0 -1
  819. package/dist/plugins/todo/todo.integration.test.d.ts +0 -2
  820. package/dist/plugins/todo/todo.integration.test.d.ts.map +0 -1
  821. package/dist/plugins/todo/todo.integration.test.js +0 -605
  822. package/dist/plugins/todo/todo.integration.test.js.map +0 -1
  823. package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts +0 -2
  824. package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts.map +0 -1
  825. package/dist/plugins/uploads/preprocessors/image-classifier.test.js +0 -113
  826. package/dist/plugins/uploads/preprocessors/image-classifier.test.js.map +0 -1
  827. package/dist/plugins/uploads/uploads.integration.test.d.ts +0 -2
  828. package/dist/plugins/uploads/uploads.integration.test.d.ts.map +0 -1
  829. package/dist/plugins/uploads/uploads.integration.test.js +0 -639
  830. package/dist/plugins/uploads/uploads.integration.test.js.map +0 -1
  831. package/dist/plugins/user-chat/user-chat.integration.test.d.ts +0 -2
  832. package/dist/plugins/user-chat/user-chat.integration.test.d.ts.map +0 -1
  833. package/dist/plugins/user-chat/user-chat.integration.test.js +0 -754
  834. package/dist/plugins/user-chat/user-chat.integration.test.js.map +0 -1
  835. package/dist/plugins/workers/workers.integration.test.d.ts +0 -2
  836. package/dist/plugins/workers/workers.integration.test.d.ts.map +0 -1
  837. package/dist/plugins/workers/workers.integration.test.js +0 -629
  838. package/dist/plugins/workers/workers.integration.test.js.map +0 -1
  839. package/dist/prompts/macros.test.d.ts +0 -2
  840. package/dist/prompts/macros.test.d.ts.map +0 -1
  841. package/dist/prompts/macros.test.js +0 -80
  842. package/dist/prompts/macros.test.js.map +0 -1
  843. package/dist/testing/test-harness.test.d.ts +0 -2
  844. package/dist/testing/test-harness.test.d.ts.map +0 -1
  845. package/dist/testing/test-harness.test.js +0 -92
  846. package/dist/testing/test-harness.test.js.map +0 -1
  847. package/dist/transport/http/routes/rpc.integration.test.d.ts +0 -2
  848. package/dist/transport/http/routes/rpc.integration.test.d.ts.map +0 -1
  849. package/dist/transport/http/routes/rpc.integration.test.js +0 -189
  850. package/dist/transport/http/routes/rpc.integration.test.js.map +0 -1
  851. package/dist/transport/http/routes/rpc.test.d.ts +0 -2
  852. package/dist/transport/http/routes/rpc.test.d.ts.map +0 -1
  853. package/dist/transport/http/routes/rpc.test.js +0 -316
  854. package/dist/transport/http/routes/rpc.test.js.map +0 -1
  855. package/src/config.test.ts +0 -174
  856. package/src/core/agent-loop.integration.test.ts +0 -503
  857. package/src/core/agents/agent-config.test.ts +0 -240
  858. package/src/core/agents/agent-shutdown.test.ts +0 -236
  859. package/src/core/agents/agent.test.ts +0 -387
  860. package/src/core/agents/communicator.ts +0 -16
  861. package/src/core/agents/handler-events.test.ts +0 -167
  862. package/src/core/agents/response-sanitizer.test.ts +0 -137
  863. package/src/core/error-recovery.integration.test.ts +0 -343
  864. package/src/core/event-sourcing.integration.test.ts +0 -191
  865. package/src/core/events/file.test.ts +0 -436
  866. package/src/core/events/memory.test.ts +0 -741
  867. package/src/core/image/image-processor.test.ts +0 -218
  868. package/src/core/image/vips-resizer.test.ts +0 -388
  869. package/src/core/llm/anthropic.test.ts +0 -546
  870. package/src/core/llm/cache-breakpoints.test.ts +0 -85
  871. package/src/core/llm/cache-live.test.ts +0 -155
  872. package/src/core/llm/logger.test.ts +0 -270
  873. package/src/core/llm/message-sanitization.test.ts +0 -217
  874. package/src/core/llm/mock.test.ts +0 -402
  875. package/src/core/llm/model-shortlist-live.test.ts +0 -577
  876. package/src/core/llm/openrouter-mapping.test.ts +0 -234
  877. package/src/core/llm/openrouter.test.ts +0 -499
  878. package/src/core/llm/provider-integration.test.ts +0 -408
  879. package/src/core/llm/reasoning-details.test.ts +0 -177
  880. package/src/core/llm/routing-provider.test.ts +0 -113
  881. package/src/core/llm/snapshot-middleware.test.ts +0 -168
  882. package/src/core/llm/thinking-blocks.test.ts +0 -345
  883. package/src/core/multi-agent.integration.test.ts +0 -340
  884. package/src/core/plugin-hooks.integration.test.ts +0 -568
  885. package/src/core/reasoning-round-trip.integration.test.ts +0 -188
  886. package/src/core/session-lifecycle.integration.test.ts +0 -202
  887. package/src/core/sessions/fork-utils.test.ts +0 -158
  888. package/src/core/sessions/session-overrides.integration.test.ts +0 -210
  889. package/src/core/sessions/session.test.ts +0 -1736
  890. package/src/core/tools/executor.test.ts +0 -161
  891. package/src/lib/logger/console.test.ts +0 -348
  892. package/src/lib/never.ts +0 -3
  893. package/src/lib/utils/concurrency.test.ts +0 -169
  894. package/src/plugins/agent-status/agent-status.test.ts +0 -164
  895. package/src/plugins/agents/agents.integration.test.ts +0 -976
  896. package/src/plugins/agents/supervision.integration.test.ts +0 -249
  897. package/src/plugins/context-compact/compaction-live.test.ts +0 -221
  898. package/src/plugins/context-compact/context-compact.integration.test.ts +0 -418
  899. package/src/plugins/context-compact/context-compactor.test.ts +0 -1036
  900. package/src/plugins/context-compact/history-offloader.test.ts +0 -100
  901. package/src/plugins/filesystem/filesystem.integration.test.ts +0 -529
  902. package/src/plugins/filesystem/schema.ts +0 -6
  903. package/src/plugins/limits-guard/limit-guard.test.ts +0 -253
  904. package/src/plugins/limits-guard/limits-guard.integration.test.ts +0 -1012
  905. package/src/plugins/llm-debug/llm-debug.integration.test.ts +0 -192
  906. package/src/plugins/mailbox/mailbox.integration.test.ts +0 -794
  907. package/src/plugins/resources/resources.integration.test.ts +0 -68
  908. package/src/plugins/result-eviction/result-eviction.integration.test.ts +0 -332
  909. package/src/plugins/services/pid-registry.test.ts +0 -180
  910. package/src/plugins/services/services.integration.test.ts +0 -1223
  911. package/src/plugins/session-lifecycle/session-lifecycle.integration.test.ts +0 -639
  912. package/src/plugins/session-stats/plugin.test.ts +0 -160
  913. package/src/plugins/shell/shell.integration.test.ts +0 -273
  914. package/src/plugins/shell/shell.test.ts +0 -314
  915. package/src/plugins/skills/discovery.test.ts +0 -395
  916. package/src/plugins/skills/skills.integration.test.ts +0 -580
  917. package/src/plugins/todo/todo.integration.test.ts +0 -687
  918. package/src/plugins/uploads/preprocessors/image-classifier.test.ts +0 -142
  919. package/src/plugins/uploads/uploads.integration.test.ts +0 -831
  920. package/src/plugins/user-chat/user-chat.integration.test.ts +0 -893
  921. package/src/plugins/workers/workers.integration.test.ts +0 -778
  922. package/src/prompts/macros.test.ts +0 -107
  923. package/src/testing/test-harness.test.ts +0 -114
  924. package/src/transport/http/routes/rpc.integration.test.ts +0 -243
  925. package/src/transport/http/routes/rpc.test.ts +0 -372
@@ -1,754 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import { MockLLMProvider } from '../../core/llm/mock.js';
3
- import { selectPluginState } from '../../core/sessions/reducer.js';
4
- import { ToolCallId } from '../../core/tools/schema.js';
5
- import { createTestPreset, TestHarness } from '../../testing/index.js';
6
- import { userChatEvents, userChatPlugin } from './index.js';
7
- describe('user-chat plugin', () => {
8
- // =========================================================================
9
- // sendMessage flow
10
- // =========================================================================
11
- describe('sendMessage flow', () => {
12
- it('sendMessage → agent scheduled → LLM called with user message content', async () => {
13
- const harness = new TestHarness({
14
- presets: [createTestPreset()],
15
- llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
16
- });
17
- const session = await harness.createSession('test');
18
- await session.sendAndWaitForIdle('Hello world');
19
- const lastRequest = harness.llmProvider.getLastRequest();
20
- expect(lastRequest).toBeDefined();
21
- const lastMessage = lastRequest.messages[lastRequest.messages.length - 1];
22
- expect(lastMessage.content).toContain('Hello world');
23
- await harness.shutdown();
24
- });
25
- it('sendMessage → user_chat_message_received event emitted', async () => {
26
- const harness = new TestHarness({
27
- presets: [createTestPreset()],
28
- llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
29
- });
30
- const session = await harness.createSession('test');
31
- await session.sendAndWaitForIdle('Test message');
32
- const events = await session.getEventsByType('user_chat_message_received');
33
- expect(events).toHaveLength(1);
34
- expect(events[0]).toMatchObject({
35
- type: 'user_chat_message_received',
36
- content: 'Test message',
37
- });
38
- await harness.shutdown();
39
- });
40
- it('sendMessage to specific agent (non-entry) via sendMessageToAgent', async () => {
41
- const harness = new TestHarness({
42
- presets: [createTestPreset()],
43
- llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
44
- });
45
- const session = await harness.createSession('test');
46
- const entryAgentId = session.getEntryAgentId();
47
- await session.sendMessageToAgent(entryAgentId, 'Direct message');
48
- await session.waitForIdle();
49
- const events = await session.getEventsByType('user_chat_message_received');
50
- expect(events).toHaveLength(1);
51
- expect(events[0]).toMatchObject({
52
- agentId: entryAgentId,
53
- content: 'Direct message',
54
- });
55
- await harness.shutdown();
56
- });
57
- it('multiple sendMessage calls → all messages appear in conversation history in order', async () => {
58
- const harness = new TestHarness({
59
- presets: [createTestPreset()],
60
- llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
61
- });
62
- const session = await harness.createSession('test');
63
- await session.sendAndWaitForIdle('First message');
64
- await session.sendAndWaitForIdle('Second message');
65
- const events = await session.getEventsByType('user_chat_message_received');
66
- expect(events).toHaveLength(2);
67
- expect(events[0]).toMatchObject({ content: 'First message' });
68
- expect(events[1]).toMatchObject({ content: 'Second message' });
69
- await harness.shutdown();
70
- });
71
- it('sendMessage → pending inbound message created and marked consumed after inference', async () => {
72
- const harness = new TestHarness({
73
- presets: [createTestPreset()],
74
- llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
75
- });
76
- const session = await harness.createSession('test');
77
- await session.sendAndWaitForIdle('Test');
78
- // Check consumed event was emitted
79
- const consumedEvents = await session.getEventsByType('user_chat_messages_consumed');
80
- expect(consumedEvents.length).toBeGreaterThanOrEqual(1);
81
- // After consumption, pending messages should be marked consumed in state
82
- const pendingInbound = selectPluginState(session.state, 'messages')?.pendingInbound ?? [];
83
- const unconsumed = pendingInbound.filter((m) => !m.consumed);
84
- expect(unconsumed).toHaveLength(0);
85
- await harness.shutdown();
86
- });
87
- });
88
- // =========================================================================
89
- // tell_user tool
90
- // =========================================================================
91
- describe('tell_user tool', () => {
92
- it('agent calls tell_user → agentMessage notification emitted', async () => {
93
- const harness = new TestHarness({
94
- presets: [createTestPreset()],
95
- llmProvider: MockLLMProvider.withSequence([
96
- {
97
- toolCalls: [{ id: ToolCallId('tc1'), name: 'tell_user', input: { message: 'Hello user!' } }],
98
- },
99
- { content: 'Done', toolCalls: [] },
100
- ]),
101
- });
102
- const session = await harness.createSession('test');
103
- await session.sendAndWaitForIdle('Hi');
104
- const messages = harness.notifications.getAgentMessages();
105
- expect(messages).toHaveLength(1);
106
- expect(messages[0].content).toBe('Hello user!');
107
- await harness.shutdown();
108
- });
109
- it('tell_user with format: text → notification has text format', async () => {
110
- const harness = new TestHarness({
111
- presets: [createTestPreset()],
112
- llmProvider: MockLLMProvider.withSequence([
113
- {
114
- toolCalls: [{ id: ToolCallId('tc1'), name: 'tell_user', input: { message: 'Plain text', format: 'text' } }],
115
- },
116
- { content: 'Done', toolCalls: [] },
117
- ]),
118
- });
119
- const session = await harness.createSession('test');
120
- await session.sendAndWaitForIdle('Hi');
121
- const messages = harness.notifications.getAgentMessages();
122
- expect(messages).toHaveLength(1);
123
- expect(messages[0].format).toBe('text');
124
- await harness.shutdown();
125
- });
126
- it('tell_user with format: markdown → notification has markdown format', async () => {
127
- const harness = new TestHarness({
128
- presets: [createTestPreset()],
129
- llmProvider: MockLLMProvider.withSequence([
130
- {
131
- toolCalls: [{ id: ToolCallId('tc1'), name: 'tell_user', input: { message: '**Bold**', format: 'markdown' } }],
132
- },
133
- { content: 'Done', toolCalls: [] },
134
- ]),
135
- });
136
- const session = await harness.createSession('test');
137
- await session.sendAndWaitForIdle('Hi');
138
- const messages = harness.notifications.getAgentMessages();
139
- expect(messages).toHaveLength(1);
140
- expect(messages[0].format).toBe('markdown');
141
- await harness.shutdown();
142
- });
143
- it('tell_user → user_message_sent event emitted with correct content', async () => {
144
- const harness = new TestHarness({
145
- presets: [createTestPreset()],
146
- llmProvider: MockLLMProvider.withSequence([
147
- {
148
- toolCalls: [{ id: ToolCallId('tc1'), name: 'tell_user', input: { message: 'Event test' } }],
149
- },
150
- { content: 'Done', toolCalls: [] },
151
- ]),
152
- });
153
- const session = await harness.createSession('test');
154
- await session.sendAndWaitForIdle('Hi');
155
- const events = await session.getEventsByType('user_message_sent');
156
- expect(events).toHaveLength(1);
157
- expect(events[0]).toMatchObject({
158
- type: 'user_message_sent',
159
- message: 'Event test',
160
- });
161
- await harness.shutdown();
162
- });
163
- it('tell_user → message appears in getMessages result', async () => {
164
- const harness = new TestHarness({
165
- presets: [createTestPreset()],
166
- llmProvider: MockLLMProvider.withSequence([
167
- {
168
- toolCalls: [{ id: ToolCallId('tc1'), name: 'tell_user', input: { message: 'Stored msg' } }],
169
- },
170
- { content: 'Done', toolCalls: [] },
171
- ]),
172
- });
173
- const session = await harness.createSession('test');
174
- await session.sendAndWaitForIdle('Hi');
175
- const chatMessages = selectPluginState(session.state, 'messages')?.messages ?? [];
176
- const agentMessages = chatMessages.filter((m) => m.type === 'agent_message');
177
- expect(agentMessages).toHaveLength(1);
178
- expect(agentMessages[0]).toMatchObject({
179
- type: 'agent_message',
180
- content: 'Stored msg',
181
- });
182
- await harness.shutdown();
183
- });
184
- });
185
- // =========================================================================
186
- // ask_user tool
187
- // =========================================================================
188
- describe('ask_user tool', () => {
189
- it('agent calls ask_user (text input) → askUser notification emitted with question', async () => {
190
- const harness = new TestHarness({
191
- presets: [createTestPreset()],
192
- llmProvider: MockLLMProvider.withSequence([
193
- {
194
- toolCalls: [{
195
- id: ToolCallId('tc1'),
196
- name: 'ask_user',
197
- input: { question: 'What is your name?', inputType: 'text' },
198
- }],
199
- },
200
- { content: 'Done', toolCalls: [] },
201
- ]),
202
- });
203
- const session = await harness.createSession('test');
204
- await session.sendAndWaitForIdle('Hi');
205
- const askNotifications = harness.notifications.getByType('user-chat', 'askUser');
206
- expect(askNotifications).toHaveLength(1);
207
- expect(askNotifications[0].payload).toMatchObject({
208
- question: 'What is your name?',
209
- inputType: { type: 'text' },
210
- });
211
- await harness.shutdown();
212
- });
213
- it('ask_user → user_question_asked event emitted', async () => {
214
- const harness = new TestHarness({
215
- presets: [createTestPreset()],
216
- llmProvider: MockLLMProvider.withSequence([
217
- {
218
- toolCalls: [{
219
- id: ToolCallId('tc1'),
220
- name: 'ask_user',
221
- input: { question: 'Confirm?', inputType: 'confirm' },
222
- }],
223
- },
224
- { content: 'Done', toolCalls: [] },
225
- ]),
226
- });
227
- const session = await harness.createSession('test');
228
- await session.sendAndWaitForIdle('Hi');
229
- const events = await session.getEventsByType('user_question_asked');
230
- expect(events).toHaveLength(1);
231
- expect(events[0]).toMatchObject({
232
- type: 'user_question_asked',
233
- question: 'Confirm?',
234
- });
235
- await harness.shutdown();
236
- });
237
- it('ask_user with single_choice → notification contains options', async () => {
238
- const harness = new TestHarness({
239
- presets: [createTestPreset()],
240
- llmProvider: MockLLMProvider.withSequence([
241
- {
242
- toolCalls: [{
243
- id: ToolCallId('tc1'),
244
- name: 'ask_user',
245
- input: {
246
- question: 'Pick one',
247
- inputType: 'single_choice',
248
- options: [
249
- { value: 'a', label: 'Option A' },
250
- { value: 'b', label: 'Option B' },
251
- ],
252
- },
253
- }],
254
- },
255
- { content: 'Done', toolCalls: [] },
256
- ]),
257
- });
258
- const session = await harness.createSession('test');
259
- await session.sendAndWaitForIdle('Hi');
260
- const askNotifications = harness.notifications.getByType('user-chat', 'askUser');
261
- expect(askNotifications).toHaveLength(1);
262
- expect(askNotifications[0].payload).toMatchObject({
263
- inputType: {
264
- type: 'single_choice',
265
- options: [
266
- { value: 'a', label: 'Option A' },
267
- { value: 'b', label: 'Option B' },
268
- ],
269
- },
270
- });
271
- await harness.shutdown();
272
- });
273
- it('ask_user with multi_choice → notification contains options', async () => {
274
- const harness = new TestHarness({
275
- presets: [createTestPreset()],
276
- llmProvider: MockLLMProvider.withSequence([
277
- {
278
- toolCalls: [{
279
- id: ToolCallId('tc1'),
280
- name: 'ask_user',
281
- input: {
282
- question: 'Pick multiple',
283
- inputType: 'multi_choice',
284
- options: [
285
- { value: 'x', label: 'X' },
286
- { value: 'y', label: 'Y' },
287
- ],
288
- },
289
- }],
290
- },
291
- { content: 'Done', toolCalls: [] },
292
- ]),
293
- });
294
- const session = await harness.createSession('test');
295
- await session.sendAndWaitForIdle('Hi');
296
- const askNotifications = harness.notifications.getByType('user-chat', 'askUser');
297
- expect(askNotifications).toHaveLength(1);
298
- expect(askNotifications[0].payload).toMatchObject({
299
- inputType: {
300
- type: 'multi_choice',
301
- options: [
302
- { value: 'x', label: 'X' },
303
- { value: 'y', label: 'Y' },
304
- ],
305
- },
306
- });
307
- await harness.shutdown();
308
- });
309
- it('ask_user with confirm → notification has confirm type', async () => {
310
- const harness = new TestHarness({
311
- presets: [createTestPreset()],
312
- llmProvider: MockLLMProvider.withSequence([
313
- {
314
- toolCalls: [{
315
- id: ToolCallId('tc1'),
316
- name: 'ask_user',
317
- input: { question: 'Are you sure?', inputType: 'confirm' },
318
- }],
319
- },
320
- { content: 'Done', toolCalls: [] },
321
- ]),
322
- });
323
- const session = await harness.createSession('test');
324
- await session.sendAndWaitForIdle('Hi');
325
- const askNotifications = harness.notifications.getByType('user-chat', 'askUser');
326
- expect(askNotifications).toHaveLength(1);
327
- expect(askNotifications[0].payload).toMatchObject({
328
- inputType: { type: 'confirm' },
329
- });
330
- await harness.shutdown();
331
- });
332
- it('ask_user with rating → notification has min/max', async () => {
333
- const harness = new TestHarness({
334
- presets: [createTestPreset()],
335
- llmProvider: MockLLMProvider.withSequence([
336
- {
337
- toolCalls: [{
338
- id: ToolCallId('tc1'),
339
- name: 'ask_user',
340
- input: { question: 'Rate this', inputType: 'rating', min: 1, max: 10 },
341
- }],
342
- },
343
- { content: 'Done', toolCalls: [] },
344
- ]),
345
- });
346
- const session = await harness.createSession('test');
347
- await session.sendAndWaitForIdle('Hi');
348
- const askNotifications = harness.notifications.getByType('user-chat', 'askUser');
349
- expect(askNotifications).toHaveLength(1);
350
- expect(askNotifications[0].payload).toMatchObject({
351
- inputType: { type: 'rating', min: 1, max: 10 },
352
- });
353
- await harness.shutdown();
354
- });
355
- it('answerQuestion → answer delivered → agent sees answer in next inference', async () => {
356
- let inferenceCount = 0;
357
- const harness = new TestHarness({
358
- presets: [createTestPreset()],
359
- mockHandler: (request) => {
360
- inferenceCount++;
361
- if (inferenceCount === 1) {
362
- return {
363
- content: null,
364
- toolCalls: [{
365
- id: ToolCallId('tc1'),
366
- name: 'ask_user',
367
- input: { question: 'Your name?', inputType: 'text' },
368
- }],
369
- finishReason: 'stop',
370
- metrics: MockLLMProvider.defaultMetrics(),
371
- };
372
- }
373
- if (inferenceCount === 2) {
374
- // After tool result — agent finishes this cycle
375
- return {
376
- content: 'Waiting for answer',
377
- toolCalls: [],
378
- finishReason: 'stop',
379
- metrics: MockLLMProvider.defaultMetrics(),
380
- };
381
- }
382
- // After answer arrives — check the LLM sees it
383
- const lastMessage = request.messages[request.messages.length - 1];
384
- const content = typeof lastMessage.content === 'string' ? lastMessage.content : '';
385
- return {
386
- content: `Got: ${content}`,
387
- toolCalls: [],
388
- finishReason: 'stop',
389
- metrics: MockLLMProvider.defaultMetrics(),
390
- };
391
- },
392
- });
393
- const session = await harness.createSession('test');
394
- await session.sendAndWaitForIdle('Hi');
395
- // Find the question event to get the questionId
396
- const questionEvents = await session.getEventsByType(userChatEvents, 'user_question_asked');
397
- expect(questionEvents).toHaveLength(1);
398
- const questionId = questionEvents[0].messageId;
399
- const entryAgentId = session.getEntryAgentId();
400
- // Answer the question via the new helper
401
- await session.answerQuestion(entryAgentId, questionId, 'John');
402
- await session.waitForIdle();
403
- // Verify the answer event was emitted
404
- const answerEvents = await session.getEventsByType('user_chat_answer_received');
405
- expect(answerEvents).toHaveLength(1);
406
- expect(answerEvents[0]).toMatchObject({
407
- answerValue: 'John',
408
- });
409
- // Verify LLM saw the answer (inference count should be > 2)
410
- expect(inferenceCount).toBeGreaterThan(2);
411
- await harness.shutdown();
412
- });
413
- it('answerQuestion → user_chat_answer_received event emitted', async () => {
414
- const harness = new TestHarness({
415
- presets: [createTestPreset()],
416
- llmProvider: MockLLMProvider.withSequence([
417
- {
418
- toolCalls: [{
419
- id: ToolCallId('tc1'),
420
- name: 'ask_user',
421
- input: { question: 'Color?', inputType: 'text' },
422
- }],
423
- },
424
- { content: 'Waiting', toolCalls: [] },
425
- { content: 'Got it', toolCalls: [] },
426
- ]),
427
- });
428
- const session = await harness.createSession('test');
429
- await session.sendAndWaitForIdle('Hi');
430
- const questionEvents = await session.getEventsByType(userChatEvents, 'user_question_asked');
431
- const questionId = questionEvents[0].messageId;
432
- const entryAgentId = session.getEntryAgentId();
433
- await session.answerQuestion(entryAgentId, questionId, 'Blue');
434
- await session.waitForIdle();
435
- const answerEvents = await session.getEventsByType('user_chat_answer_received');
436
- expect(answerEvents).toHaveLength(1);
437
- expect(answerEvents[0]).toMatchObject({
438
- type: 'user_chat_answer_received',
439
- answerValue: 'Blue',
440
- questionId,
441
- });
442
- await harness.shutdown();
443
- });
444
- it('answerQuestion → question marked as answered in getMessages', async () => {
445
- const harness = new TestHarness({
446
- presets: [createTestPreset()],
447
- llmProvider: MockLLMProvider.withSequence([
448
- {
449
- toolCalls: [{
450
- id: ToolCallId('tc1'),
451
- name: 'ask_user',
452
- input: { question: 'Ready?', inputType: 'confirm' },
453
- }],
454
- },
455
- { content: 'Waiting', toolCalls: [] },
456
- { content: 'Great', toolCalls: [] },
457
- ]),
458
- });
459
- const session = await harness.createSession('test');
460
- await session.sendAndWaitForIdle('Hi');
461
- const questionEvents = await session.getEventsByType(userChatEvents, 'user_question_asked');
462
- const questionId = questionEvents[0].messageId;
463
- const entryAgentId = session.getEntryAgentId();
464
- await session.answerQuestion(entryAgentId, questionId, true);
465
- await session.waitForIdle();
466
- // Check messages state
467
- const chatMessages = selectPluginState(session.state, 'messages')?.messages ?? [];
468
- const askMessages = chatMessages.filter((m) => m.type === 'ask_user');
469
- expect(askMessages).toHaveLength(1);
470
- expect(askMessages[0]).toMatchObject({
471
- type: 'ask_user',
472
- answered: true,
473
- answer: true,
474
- });
475
- await harness.shutdown();
476
- });
477
- });
478
- // =========================================================================
479
- // Unicode escape decoding (defensive fix for models that double-escape
480
- // non-ASCII in tool argument JSON — see plugin.ts decodeUnicodeEscapes).
481
- // =========================================================================
482
- describe('unicode escape decoding in user-facing fields', () => {
483
- it('ask_user (text) → literal \\uXXXX in question/placeholder is decoded', async () => {
484
- const harness = new TestHarness({
485
- presets: [createTestPreset()],
486
- llmProvider: MockLLMProvider.withSequence([
487
- {
488
- toolCalls: [{
489
- id: ToolCallId('tc1'),
490
- name: 'ask_user',
491
- input: {
492
- question: 'Pro\\u010d ne?',
493
- inputType: 'text',
494
- placeholder: 'Nap\\u0159. ano',
495
- },
496
- }],
497
- },
498
- { content: 'Done', toolCalls: [] },
499
- ]),
500
- });
501
- const session = await harness.createSession('test');
502
- await session.sendAndWaitForIdle('Hi');
503
- const askNotifications = harness.notifications.getByType('user-chat', 'askUser');
504
- expect(askNotifications[0].payload).toMatchObject({
505
- question: 'Proč ne?',
506
- inputType: { type: 'text', placeholder: 'Např. ano' },
507
- });
508
- await harness.shutdown();
509
- });
510
- it('ask_user (single_choice) → option labels decoded, values left intact', async () => {
511
- const harness = new TestHarness({
512
- presets: [createTestPreset()],
513
- llmProvider: MockLLMProvider.withSequence([
514
- {
515
- toolCalls: [{
516
- id: ToolCallId('tc1'),
517
- name: 'ask_user',
518
- input: {
519
- question: 'Pick',
520
- inputType: 'single_choice',
521
- options: [
522
- { value: 'kun_ze_\\u0159adu', label: 'K\\u016f\\u0148 ze \\u0159adu' },
523
- ],
524
- },
525
- }],
526
- },
527
- { content: 'Done', toolCalls: [] },
528
- ]),
529
- });
530
- const session = await harness.createSession('test');
531
- await session.sendAndWaitForIdle('Hi');
532
- const askNotifications = harness.notifications.getByType('user-chat', 'askUser');
533
- expect(askNotifications[0].payload).toMatchObject({
534
- inputType: {
535
- type: 'single_choice',
536
- // Value preserved verbatim so answer round-trip stays consistent
537
- // with what the LLM emitted.
538
- options: [{ value: 'kun_ze_\\u0159adu', label: 'Kůň ze řadu' }],
539
- },
540
- });
541
- await harness.shutdown();
542
- });
543
- it('tell_user → literal \\uXXXX in message is decoded', async () => {
544
- const harness = new TestHarness({
545
- presets: [createTestPreset()],
546
- llmProvider: MockLLMProvider.withSequence([
547
- {
548
- toolCalls: [{
549
- id: ToolCallId('tc1'),
550
- name: 'tell_user',
551
- input: { message: 'Ahoj sv\\u011bte' },
552
- }],
553
- },
554
- { content: 'Done', toolCalls: [] },
555
- ]),
556
- });
557
- const session = await harness.createSession('test');
558
- await session.sendAndWaitForIdle('Hi');
559
- const msgs = harness.notifications.getByType('user-chat', 'agentMessage');
560
- expect(msgs[0].payload).toMatchObject({ content: 'Ahoj světe' });
561
- await harness.shutdown();
562
- });
563
- });
564
- // =========================================================================
565
- // XML mode
566
- // =========================================================================
567
- describe('XML mode', () => {
568
- it('agent with userCommunication: xml → <user> tags parsed from response → notification emitted', async () => {
569
- const harness = new TestHarness({
570
- presets: [createTestPreset({
571
- orchestratorPlugins: [
572
- userChatPlugin.configureAgent({ enabled: true, userCommunication: 'xml' }),
573
- ],
574
- })],
575
- llmProvider: MockLLMProvider.withFixedResponse({
576
- content: 'Thinking... <user>Hello from XML!</user> Done.',
577
- toolCalls: [],
578
- }),
579
- });
580
- const session = await harness.createSession('test');
581
- await session.sendAndWaitForIdle('Hi');
582
- const messages = harness.notifications.getAgentMessages();
583
- expect(messages).toHaveLength(1);
584
- expect(messages[0].content).toBe('Hello from XML!');
585
- await harness.shutdown();
586
- });
587
- it('<user> tags stripped from response content after parsing', async () => {
588
- const harness = new TestHarness({
589
- presets: [createTestPreset({
590
- orchestratorPlugins: [
591
- userChatPlugin.configureAgent({ enabled: true, userCommunication: 'xml' }),
592
- ],
593
- })],
594
- llmProvider: MockLLMProvider.withFixedResponse({
595
- content: 'Before <user>Message</user> After',
596
- toolCalls: [],
597
- }),
598
- });
599
- const session = await harness.createSession('test');
600
- await session.sendAndWaitForIdle('Hi');
601
- // The user_message_sent event should have the extracted message
602
- const events = await session.getEventsByType('user_message_sent');
603
- expect(events).toHaveLength(1);
604
- expect(events[0]).toMatchObject({ message: 'Message' });
605
- await harness.shutdown();
606
- });
607
- it('agent with userCommunication: both → both tools and <user> tags work', async () => {
608
- const harness = new TestHarness({
609
- presets: [createTestPreset({
610
- orchestratorPlugins: [
611
- userChatPlugin.configureAgent({ enabled: true, userCommunication: 'both' }),
612
- ],
613
- })],
614
- llmProvider: MockLLMProvider.withSequence([
615
- {
616
- content: 'Thinking... <user>XML message!</user> Done.',
617
- toolCalls: [{ id: ToolCallId('tc1'), name: 'tell_user', input: { message: 'Tool message!' } }],
618
- },
619
- { content: 'Finished', toolCalls: [] },
620
- ]),
621
- });
622
- const session = await harness.createSession('test');
623
- await session.sendAndWaitForIdle('Hi');
624
- const messages = harness.notifications.getAgentMessages();
625
- expect(messages).toHaveLength(2);
626
- const contents = messages.map((m) => m.content);
627
- expect(contents).toContain('Tool message!');
628
- expect(contents).toContain('XML message!');
629
- await harness.shutdown();
630
- });
631
- it('agent with userCommunication: tool (default) → <user> tags ignored', async () => {
632
- const harness = new TestHarness({
633
- presets: [createTestPreset()],
634
- llmProvider: MockLLMProvider.withFixedResponse({
635
- content: 'Response with <user>Should not be parsed</user> content',
636
- toolCalls: [],
637
- }),
638
- });
639
- const session = await harness.createSession('test');
640
- await session.sendAndWaitForIdle('Hi');
641
- const messages = harness.notifications.getAgentMessages();
642
- expect(messages).toHaveLength(0);
643
- await harness.shutdown();
644
- });
645
- });
646
- // =========================================================================
647
- // getMessages
648
- // =========================================================================
649
- describe('getMessages', () => {
650
- it('getMessages returns all chat messages (user + agent + ask_user) in order', async () => {
651
- const harness = new TestHarness({
652
- presets: [createTestPreset()],
653
- llmProvider: MockLLMProvider.withSequence([
654
- {
655
- toolCalls: [
656
- { id: ToolCallId('tc1'), name: 'tell_user', input: { message: 'Hello!' } },
657
- { id: ToolCallId('tc2'), name: 'ask_user', input: { question: 'Name?', inputType: 'text' } },
658
- ],
659
- },
660
- { content: 'Done', toolCalls: [] },
661
- ]),
662
- });
663
- const session = await harness.createSession('test');
664
- await session.sendAndWaitForIdle('Hi');
665
- const chatMessages = selectPluginState(session.state, 'messages')?.messages ?? [];
666
- // Should have: user_message (from sendMessage), agent_message (from tell_user), ask_user (from ask_user)
667
- expect(chatMessages.length).toBeGreaterThanOrEqual(3);
668
- const types = chatMessages.map((m) => m.type);
669
- expect(types).toContain('user_message');
670
- expect(types).toContain('agent_message');
671
- expect(types).toContain('ask_user');
672
- await harness.shutdown();
673
- });
674
- it('getMessages reflects answered questions', async () => {
675
- const harness = new TestHarness({
676
- presets: [createTestPreset()],
677
- llmProvider: MockLLMProvider.withSequence([
678
- {
679
- toolCalls: [{
680
- id: ToolCallId('tc1'),
681
- name: 'ask_user',
682
- input: { question: 'Favorite color?', inputType: 'text' },
683
- }],
684
- },
685
- { content: 'Waiting', toolCalls: [] },
686
- { content: 'Got it', toolCalls: [] },
687
- ]),
688
- });
689
- const session = await harness.createSession('test');
690
- await session.sendAndWaitForIdle('Hi');
691
- // Before answering — question should be unanswered
692
- const beforeMessages = selectPluginState(session.state, 'messages')?.messages ?? [];
693
- const beforeAsk = beforeMessages.filter((m) => m.type === 'ask_user');
694
- expect(beforeAsk).toHaveLength(1);
695
- expect(beforeAsk[0]).toMatchObject({ answered: false });
696
- expect(beforeAsk[0]).not.toHaveProperty('answer');
697
- // Answer the question
698
- const questionEvents = await session.getEventsByType(userChatEvents, 'user_question_asked');
699
- const questionId = questionEvents[0].messageId;
700
- const entryAgentId = session.getEntryAgentId();
701
- await session.answerQuestion(entryAgentId, questionId, 'Blue');
702
- await session.waitForIdle();
703
- // After answering — question should be marked as answered with answer value
704
- const afterMessages = selectPluginState(session.state, 'messages')?.messages ?? [];
705
- const afterAsk = afterMessages.filter((m) => m.type === 'ask_user');
706
- expect(afterAsk).toHaveLength(1);
707
- expect(afterAsk[0]).toMatchObject({
708
- answered: true,
709
- answer: 'Blue',
710
- });
711
- await harness.shutdown();
712
- });
713
- });
714
- // =========================================================================
715
- // disabled
716
- // =========================================================================
717
- describe('disabled', () => {
718
- it('plugin enabled: false → no tools provided to agent', async () => {
719
- const harness = new TestHarness({
720
- presets: [createTestPreset({
721
- plugins: [
722
- userChatPlugin.configure({ enabled: false }),
723
- ],
724
- })],
725
- llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
726
- });
727
- const session = await harness.createSession('test');
728
- await session.sendAndWaitForIdle('Hi');
729
- const lastRequest = harness.llmProvider.getLastRequest();
730
- const toolNames = lastRequest?.tools?.map((t) => t.name) ?? [];
731
- expect(toolNames).not.toContain('tell_user');
732
- expect(toolNames).not.toContain('ask_user');
733
- await harness.shutdown();
734
- });
735
- it('agent enabled: false → no user-chat tools provided to that agent', async () => {
736
- const harness = new TestHarness({
737
- presets: [createTestPreset({
738
- orchestratorPlugins: [
739
- userChatPlugin.configureAgent({ enabled: false }),
740
- ],
741
- })],
742
- llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
743
- });
744
- const session = await harness.createSession('test');
745
- await session.sendAndWaitForIdle('Hi');
746
- const lastRequest = harness.llmProvider.getLastRequest();
747
- const toolNames = lastRequest?.tools?.map((t) => t.name) ?? [];
748
- expect(toolNames).not.toContain('tell_user');
749
- expect(toolNames).not.toContain('ask_user');
750
- await harness.shutdown();
751
- });
752
- });
753
- });
754
- //# sourceMappingURL=user-chat.integration.test.js.map