@roj-ai/sdk 0.1.35 → 0.2.1

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 (908) 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 +209 -90
  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 +27 -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.d.ts.map +1 -1
  42. package/dist/core/context/state.js +6 -2
  43. package/dist/core/context/state.js.map +1 -1
  44. package/dist/core/events/base-event-store.d.ts.map +1 -1
  45. package/dist/core/events/base-event-store.js +22 -14
  46. package/dist/core/events/base-event-store.js.map +1 -1
  47. package/dist/core/events/file.d.ts +39 -1
  48. package/dist/core/events/file.d.ts.map +1 -1
  49. package/dist/core/events/file.js +159 -20
  50. package/dist/core/events/file.js.map +1 -1
  51. package/dist/core/events/types.d.ts +1 -1
  52. package/dist/core/file-store/containment.d.ts +19 -0
  53. package/dist/core/file-store/containment.d.ts.map +1 -0
  54. package/dist/core/file-store/containment.js +62 -0
  55. package/dist/core/file-store/containment.js.map +1 -0
  56. package/dist/core/file-store/file-store.d.ts +22 -2
  57. package/dist/core/file-store/file-store.d.ts.map +1 -1
  58. package/dist/core/file-store/file-store.js +88 -20
  59. package/dist/core/file-store/file-store.js.map +1 -1
  60. package/dist/core/file-store/types.d.ts +13 -1
  61. package/dist/core/file-store/types.d.ts.map +1 -1
  62. package/dist/core/image/image-processor.d.ts.map +1 -1
  63. package/dist/core/image/image-processor.js +3 -1
  64. package/dist/core/image/image-processor.js.map +1 -1
  65. package/dist/core/image/types.d.ts +2 -0
  66. package/dist/core/image/types.d.ts.map +1 -1
  67. package/dist/core/image/vips-resizer.d.ts.map +1 -1
  68. package/dist/core/image/vips-resizer.js +81 -33
  69. package/dist/core/image/vips-resizer.js.map +1 -1
  70. package/dist/core/llm/anthropic.d.ts +0 -1
  71. package/dist/core/llm/anthropic.d.ts.map +1 -1
  72. package/dist/core/llm/anthropic.js +101 -74
  73. package/dist/core/llm/anthropic.js.map +1 -1
  74. package/dist/core/llm/logger.d.ts +14 -2
  75. package/dist/core/llm/logger.d.ts.map +1 -1
  76. package/dist/core/llm/logger.js +161 -36
  77. package/dist/core/llm/logger.js.map +1 -1
  78. package/dist/core/llm/openrouter.d.ts +0 -1
  79. package/dist/core/llm/openrouter.d.ts.map +1 -1
  80. package/dist/core/llm/openrouter.js +70 -74
  81. package/dist/core/llm/openrouter.js.map +1 -1
  82. package/dist/core/llm/provider-request.d.ts +10 -0
  83. package/dist/core/llm/provider-request.d.ts.map +1 -0
  84. package/dist/core/llm/provider-request.js +41 -0
  85. package/dist/core/llm/provider-request.js.map +1 -0
  86. package/dist/core/llm/provider.d.ts +45 -3
  87. package/dist/core/llm/provider.d.ts.map +1 -1
  88. package/dist/core/llm/provider.js +26 -0
  89. package/dist/core/llm/provider.js.map +1 -1
  90. package/dist/core/llm/state.d.ts +4 -2
  91. package/dist/core/llm/state.d.ts.map +1 -1
  92. package/dist/core/llm/state.js +15 -4
  93. package/dist/core/llm/state.js.map +1 -1
  94. package/dist/core/plugins/plugin-builder.d.ts +57 -3
  95. package/dist/core/plugins/plugin-builder.d.ts.map +1 -1
  96. package/dist/core/plugins/plugin-builder.js +68 -14
  97. package/dist/core/plugins/plugin-builder.js.map +1 -1
  98. package/dist/core/preset/preset-builder.d.ts +3 -2
  99. package/dist/core/preset/preset-builder.d.ts.map +1 -1
  100. package/dist/core/preset/preset-builder.js +7 -16
  101. package/dist/core/preset/preset-builder.js.map +1 -1
  102. package/dist/core/sessions/context.d.ts +23 -5
  103. package/dist/core/sessions/context.d.ts.map +1 -1
  104. package/dist/core/sessions/runtime-activity.d.ts +33 -0
  105. package/dist/core/sessions/runtime-activity.d.ts.map +1 -0
  106. package/dist/core/sessions/runtime-activity.js +55 -0
  107. package/dist/core/sessions/runtime-activity.js.map +1 -0
  108. package/dist/core/sessions/schema.d.ts +23 -2
  109. package/dist/core/sessions/schema.d.ts.map +1 -1
  110. package/dist/core/sessions/schema.js +24 -3
  111. package/dist/core/sessions/schema.js.map +1 -1
  112. package/dist/core/sessions/session-manager.d.ts +83 -6
  113. package/dist/core/sessions/session-manager.d.ts.map +1 -1
  114. package/dist/core/sessions/session-manager.js +517 -118
  115. package/dist/core/sessions/session-manager.js.map +1 -1
  116. package/dist/core/sessions/session-store.d.ts +18 -0
  117. package/dist/core/sessions/session-store.d.ts.map +1 -1
  118. package/dist/core/sessions/session-store.js +33 -0
  119. package/dist/core/sessions/session-store.js.map +1 -1
  120. package/dist/core/sessions/session.d.ts +42 -6
  121. package/dist/core/sessions/session.d.ts.map +1 -1
  122. package/dist/core/sessions/session.js +176 -44
  123. package/dist/core/sessions/session.js.map +1 -1
  124. package/dist/core/sessions/state.d.ts +10 -1
  125. package/dist/core/sessions/state.d.ts.map +1 -1
  126. package/dist/core/sessions/state.js +16 -1
  127. package/dist/core/sessions/state.js.map +1 -1
  128. package/dist/core/system.d.ts +9 -0
  129. package/dist/core/system.d.ts.map +1 -1
  130. package/dist/core/system.js +4 -1
  131. package/dist/core/system.js.map +1 -1
  132. package/dist/core/tools/executor.d.ts +1 -1
  133. package/dist/core/wake-key.d.ts +34 -0
  134. package/dist/core/wake-key.d.ts.map +1 -0
  135. package/dist/core/wake-key.js +51 -0
  136. package/dist/core/wake-key.js.map +1 -0
  137. package/dist/index.d.ts +24 -13
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +22 -8
  140. package/dist/index.js.map +1 -1
  141. package/dist/lib/archive/archive-inspection.d.ts +48 -0
  142. package/dist/lib/archive/archive-inspection.d.ts.map +1 -0
  143. package/dist/lib/archive/archive-inspection.fixtures.d.ts +7 -0
  144. package/dist/lib/archive/archive-inspection.fixtures.d.ts.map +1 -0
  145. package/dist/lib/archive/archive-inspection.fixtures.js +134 -0
  146. package/dist/lib/archive/archive-inspection.fixtures.js.map +1 -0
  147. package/dist/lib/archive/archive-inspection.js +253 -0
  148. package/dist/lib/archive/archive-inspection.js.map +1 -0
  149. package/dist/lib/archive/index.d.ts +3 -0
  150. package/dist/lib/archive/index.d.ts.map +1 -0
  151. package/dist/lib/archive/index.js +2 -0
  152. package/dist/lib/archive/index.js.map +1 -0
  153. package/dist/lib/logger/console.d.ts +5 -12
  154. package/dist/lib/logger/console.d.ts.map +1 -1
  155. package/dist/lib/logger/console.js +5 -47
  156. package/dist/lib/logger/console.js.map +1 -1
  157. package/dist/lib/logger/file.d.ts +8 -11
  158. package/dist/lib/logger/file.d.ts.map +1 -1
  159. package/dist/lib/logger/file.js +26 -37
  160. package/dist/lib/logger/file.js.map +1 -1
  161. package/dist/lib/logger/index.d.ts +3 -1
  162. package/dist/lib/logger/index.d.ts.map +1 -1
  163. package/dist/lib/logger/index.js +3 -1
  164. package/dist/lib/logger/index.js.map +1 -1
  165. package/dist/lib/logger/jsonl.d.ts +21 -0
  166. package/dist/lib/logger/jsonl.d.ts.map +1 -0
  167. package/dist/lib/logger/jsonl.js +29 -0
  168. package/dist/lib/logger/jsonl.js.map +1 -0
  169. package/dist/lib/logger/logger.d.ts +22 -0
  170. package/dist/lib/logger/logger.d.ts.map +1 -1
  171. package/dist/lib/logger/logger.js +37 -0
  172. package/dist/lib/logger/logger.js.map +1 -1
  173. package/dist/lib/logger/session-log.d.ts +21 -0
  174. package/dist/lib/logger/session-log.d.ts.map +1 -0
  175. package/dist/lib/logger/session-log.js +37 -0
  176. package/dist/lib/logger/session-log.js.map +1 -0
  177. package/dist/lib/utils/concurrency.d.ts +1 -1
  178. package/dist/lib/utils/concurrency.d.ts.map +1 -1
  179. package/dist/lib/utils/concurrency.js +30 -7
  180. package/dist/lib/utils/concurrency.js.map +1 -1
  181. package/dist/lib/utils/fs-batch.d.ts +17 -0
  182. package/dist/lib/utils/fs-batch.d.ts.map +1 -0
  183. package/dist/lib/utils/fs-batch.js +38 -0
  184. package/dist/lib/utils/fs-batch.js.map +1 -0
  185. package/dist/lib/utils/result.d.ts +7 -22
  186. package/dist/lib/utils/result.d.ts.map +1 -1
  187. package/dist/lib/utils/result.js +6 -17
  188. package/dist/lib/utils/result.js.map +1 -1
  189. package/dist/lib/utils/sleep.d.ts +10 -0
  190. package/dist/lib/utils/sleep.d.ts.map +1 -0
  191. package/dist/lib/utils/sleep.js +26 -0
  192. package/dist/lib/utils/sleep.js.map +1 -0
  193. package/dist/platform/fs-revision.d.ts +21 -0
  194. package/dist/platform/fs-revision.d.ts.map +1 -0
  195. package/dist/platform/fs-revision.js +9 -0
  196. package/dist/platform/fs-revision.js.map +1 -0
  197. package/dist/platform/fs.d.ts +104 -1
  198. package/dist/platform/fs.d.ts.map +1 -1
  199. package/dist/platform/git.d.ts +59 -0
  200. package/dist/platform/git.d.ts.map +1 -0
  201. package/dist/platform/git.js +8 -0
  202. package/dist/platform/git.js.map +1 -0
  203. package/dist/platform/index.d.ts +40 -1
  204. package/dist/platform/index.d.ts.map +1 -1
  205. package/dist/platform/index.js +1 -1
  206. package/dist/platform/index.js.map +1 -1
  207. package/dist/platform/llm-call-log.d.ts +80 -0
  208. package/dist/platform/llm-call-log.d.ts.map +1 -0
  209. package/dist/platform/llm-call-log.js +12 -0
  210. package/dist/platform/llm-call-log.js.map +1 -0
  211. package/dist/platform/scheduler.d.ts +32 -0
  212. package/dist/platform/scheduler.d.ts.map +1 -0
  213. package/dist/platform/scheduler.js +46 -0
  214. package/dist/platform/scheduler.js.map +1 -0
  215. package/dist/platform/session-log.d.ts +36 -0
  216. package/dist/platform/session-log.d.ts.map +1 -0
  217. package/dist/platform/session-log.js +12 -0
  218. package/dist/platform/session-log.js.map +1 -0
  219. package/dist/platform/shell.d.ts +83 -0
  220. package/dist/platform/shell.d.ts.map +1 -0
  221. package/dist/platform/shell.js +13 -0
  222. package/dist/platform/shell.js.map +1 -0
  223. package/dist/plugins/agent-status/plugin.d.ts.map +1 -1
  224. package/dist/plugins/agent-status/plugin.js +1 -0
  225. package/dist/plugins/agent-status/plugin.js.map +1 -1
  226. package/dist/plugins/agents/plugin.d.ts.map +1 -1
  227. package/dist/plugins/agents/plugin.js +129 -62
  228. package/dist/plugins/agents/plugin.js.map +1 -1
  229. package/dist/plugins/filesystem/listing.d.ts +3 -0
  230. package/dist/plugins/filesystem/listing.d.ts.map +1 -1
  231. package/dist/plugins/filesystem/listing.js +66 -10
  232. package/dist/plugins/filesystem/listing.js.map +1 -1
  233. package/dist/plugins/filesystem/plugin.d.ts.map +1 -1
  234. package/dist/plugins/filesystem/plugin.js +8 -6
  235. package/dist/plugins/filesystem/plugin.js.map +1 -1
  236. package/dist/plugins/git-status/plugin.d.ts +34 -7
  237. package/dist/plugins/git-status/plugin.d.ts.map +1 -1
  238. package/dist/plugins/git-status/plugin.js +168 -64
  239. package/dist/plugins/git-status/plugin.js.map +1 -1
  240. package/dist/plugins/llm-debug/plugin.d.ts.map +1 -1
  241. package/dist/plugins/llm-debug/plugin.js +1 -0
  242. package/dist/plugins/llm-debug/plugin.js.map +1 -1
  243. package/dist/plugins/logs/plugin.d.ts +1 -4
  244. package/dist/plugins/logs/plugin.d.ts.map +1 -1
  245. package/dist/plugins/logs/plugin.js +7 -0
  246. package/dist/plugins/logs/plugin.js.map +1 -1
  247. package/dist/plugins/mailbox/helpers.d.ts +2 -2
  248. package/dist/plugins/mailbox/helpers.js +1 -1
  249. package/dist/plugins/mailbox/plugin.d.ts.map +1 -1
  250. package/dist/plugins/mailbox/plugin.js +38 -43
  251. package/dist/plugins/mailbox/plugin.js.map +1 -1
  252. package/dist/plugins/mailbox/query.d.ts +7 -2
  253. package/dist/plugins/mailbox/query.d.ts.map +1 -1
  254. package/dist/plugins/mailbox/query.js +14 -7
  255. package/dist/plugins/mailbox/query.js.map +1 -1
  256. package/dist/plugins/mailbox/state.d.ts +5 -4
  257. package/dist/plugins/mailbox/state.d.ts.map +1 -1
  258. package/dist/plugins/mailbox/state.js +6 -5
  259. package/dist/plugins/mailbox/state.js.map +1 -1
  260. package/dist/plugins/resources/filename.d.ts +4 -0
  261. package/dist/plugins/resources/filename.d.ts.map +1 -0
  262. package/dist/plugins/resources/filename.js +18 -0
  263. package/dist/plugins/resources/filename.js.map +1 -0
  264. package/dist/plugins/resources/plugin.d.ts +3 -0
  265. package/dist/plugins/resources/plugin.d.ts.map +1 -1
  266. package/dist/plugins/resources/plugin.js +97 -60
  267. package/dist/plugins/resources/plugin.js.map +1 -1
  268. package/dist/plugins/resources/state.d.ts +1 -1
  269. package/dist/plugins/resources/state.js +1 -1
  270. package/dist/plugins/result-eviction/plugin.d.ts.map +1 -1
  271. package/dist/plugins/result-eviction/plugin.js +6 -1
  272. package/dist/plugins/result-eviction/plugin.js.map +1 -1
  273. package/dist/plugins/services/plugin.d.ts +4 -1
  274. package/dist/plugins/services/plugin.d.ts.map +1 -1
  275. package/dist/plugins/services/plugin.js +251 -100
  276. package/dist/plugins/services/plugin.js.map +1 -1
  277. package/dist/plugins/services/prompt.d.ts.map +1 -1
  278. package/dist/plugins/services/prompt.js +1 -4
  279. package/dist/plugins/services/prompt.js.map +1 -1
  280. package/dist/plugins/services/schema.d.ts +15 -5
  281. package/dist/plugins/services/schema.d.ts.map +1 -1
  282. package/dist/plugins/services/service.d.ts +100 -18
  283. package/dist/plugins/services/service.d.ts.map +1 -1
  284. package/dist/plugins/services/service.js +680 -230
  285. package/dist/plugins/services/service.js.map +1 -1
  286. package/dist/plugins/session-lifecycle/plugin.d.ts +21 -1
  287. package/dist/plugins/session-lifecycle/plugin.d.ts.map +1 -1
  288. package/dist/plugins/session-lifecycle/plugin.js +53 -40
  289. package/dist/plugins/session-lifecycle/plugin.js.map +1 -1
  290. package/dist/plugins/session-state/plugin.d.ts +21 -13
  291. package/dist/plugins/session-state/plugin.d.ts.map +1 -1
  292. package/dist/plugins/session-state/plugin.js +214 -79
  293. package/dist/plugins/session-state/plugin.js.map +1 -1
  294. package/dist/plugins/session-stats/plugin.d.ts.map +1 -1
  295. package/dist/plugins/session-stats/plugin.js +1 -0
  296. package/dist/plugins/session-stats/plugin.js.map +1 -1
  297. package/dist/plugins/shell/executor.d.ts +17 -15
  298. package/dist/plugins/shell/executor.d.ts.map +1 -1
  299. package/dist/plugins/shell/executor.js +130 -195
  300. package/dist/plugins/shell/executor.js.map +1 -1
  301. package/dist/plugins/shell/index.d.ts +2 -2
  302. package/dist/plugins/shell/index.d.ts.map +1 -1
  303. package/dist/plugins/shell/index.js +2 -2
  304. package/dist/plugins/shell/index.js.map +1 -1
  305. package/dist/plugins/shell/plugin.d.ts +5 -4
  306. package/dist/plugins/shell/plugin.d.ts.map +1 -1
  307. package/dist/plugins/shell/plugin.js +4 -8
  308. package/dist/plugins/shell/plugin.js.map +1 -1
  309. package/dist/plugins/skills/discovery.d.ts.map +1 -1
  310. package/dist/plugins/skills/discovery.js +10 -8
  311. package/dist/plugins/skills/discovery.js.map +1 -1
  312. package/dist/plugins/skills/index.d.ts +1 -1
  313. package/dist/plugins/skills/index.d.ts.map +1 -1
  314. package/dist/plugins/skills/plugin.d.ts +1 -1
  315. package/dist/plugins/skills/plugin.d.ts.map +1 -1
  316. package/dist/plugins/skills/plugin.js +23 -30
  317. package/dist/plugins/skills/plugin.js.map +1 -1
  318. package/dist/plugins/skills/prompts.d.ts +3 -3
  319. package/dist/plugins/skills/prompts.d.ts.map +1 -1
  320. package/dist/plugins/skills/prompts.js.map +1 -1
  321. package/dist/plugins/skills/schema.d.ts +4 -2
  322. package/dist/plugins/skills/schema.d.ts.map +1 -1
  323. package/dist/plugins/todo/schema.d.ts +1 -1
  324. package/dist/plugins/uploads/plugin.d.ts +11 -4
  325. package/dist/plugins/uploads/plugin.d.ts.map +1 -1
  326. package/dist/plugins/uploads/plugin.js +891 -225
  327. package/dist/plugins/uploads/plugin.js.map +1 -1
  328. package/dist/plugins/uploads/preprocessor.d.ts +14 -0
  329. package/dist/plugins/uploads/preprocessor.d.ts.map +1 -1
  330. package/dist/plugins/uploads/preprocessor.js +11 -0
  331. package/dist/plugins/uploads/preprocessor.js.map +1 -1
  332. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts +1 -1
  333. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts.map +1 -1
  334. package/dist/plugins/uploads/preprocessors/image-classifier.js +51 -26
  335. package/dist/plugins/uploads/preprocessors/image-classifier.js.map +1 -1
  336. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts +2 -2
  337. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts.map +1 -1
  338. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js +41 -16
  339. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js.map +1 -1
  340. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts +1 -1
  341. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts.map +1 -1
  342. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js +29 -14
  343. package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js.map +1 -1
  344. package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts +1 -1
  345. package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts.map +1 -1
  346. package/dist/plugins/uploads/preprocessors/zip-preprocessor.js +62 -34
  347. package/dist/plugins/uploads/preprocessors/zip-preprocessor.js.map +1 -1
  348. package/dist/plugins/uploads/schema.d.ts +25 -2
  349. package/dist/plugins/uploads/schema.d.ts.map +1 -1
  350. package/dist/plugins/uploads/schema.js +24 -3
  351. package/dist/plugins/uploads/schema.js.map +1 -1
  352. package/dist/plugins/uploads/state.d.ts +13 -1
  353. package/dist/plugins/uploads/state.d.ts.map +1 -1
  354. package/dist/plugins/uploads/state.js +4 -1
  355. package/dist/plugins/uploads/state.js.map +1 -1
  356. package/dist/plugins/user-chat/plugin.d.ts +12 -5
  357. package/dist/plugins/user-chat/plugin.d.ts.map +1 -1
  358. package/dist/plugins/user-chat/plugin.js +141 -32
  359. package/dist/plugins/user-chat/plugin.js.map +1 -1
  360. package/dist/plugins/workers/context.d.ts +35 -13
  361. package/dist/plugins/workers/context.d.ts.map +1 -1
  362. package/dist/plugins/workers/context.js +82 -32
  363. package/dist/plugins/workers/context.js.map +1 -1
  364. package/dist/plugins/workers/definition.d.ts +7 -0
  365. package/dist/plugins/workers/definition.d.ts.map +1 -1
  366. package/dist/plugins/workers/definition.js.map +1 -1
  367. package/dist/plugins/workers/index.d.ts +4 -4
  368. package/dist/plugins/workers/index.d.ts.map +1 -1
  369. package/dist/plugins/workers/index.js +2 -2
  370. package/dist/plugins/workers/index.js.map +1 -1
  371. package/dist/plugins/workers/plugin.d.ts +10 -57
  372. package/dist/plugins/workers/plugin.d.ts.map +1 -1
  373. package/dist/plugins/workers/plugin.js +385 -123
  374. package/dist/plugins/workers/plugin.js.map +1 -1
  375. package/dist/plugins/workers/state.d.ts +69 -0
  376. package/dist/plugins/workers/state.d.ts.map +1 -0
  377. package/dist/plugins/workers/state.js +52 -0
  378. package/dist/plugins/workers/state.js.map +1 -0
  379. package/dist/plugins/workers/worker.d.ts +15 -4
  380. package/dist/plugins/workers/worker.d.ts.map +1 -1
  381. package/dist/testing/conformance.d.ts +106 -0
  382. package/dist/testing/conformance.d.ts.map +1 -0
  383. package/dist/testing/conformance.js +1463 -0
  384. package/dist/testing/conformance.js.map +1 -0
  385. package/dist/testing/node-platform.d.ts.map +1 -1
  386. package/dist/testing/node-platform.js +5 -0
  387. package/dist/testing/node-platform.js.map +1 -1
  388. package/dist/testing/test-harness.d.ts +11 -1
  389. package/dist/testing/test-harness.d.ts.map +1 -1
  390. package/dist/testing/test-harness.js +17 -37
  391. package/dist/testing/test-harness.js.map +1 -1
  392. package/dist/testing/wait-helpers.d.ts.map +1 -1
  393. package/dist/testing/wait-helpers.js +1 -3
  394. package/dist/testing/wait-helpers.js.map +1 -1
  395. package/dist/transport/adapter/client-adapter.d.ts +6 -0
  396. package/dist/transport/adapter/client-adapter.d.ts.map +1 -1
  397. package/dist/transport/adapter/client-adapter.js +50 -3
  398. package/dist/transport/adapter/client-adapter.js.map +1 -1
  399. package/dist/transport/adapter/heartbeat.d.ts +16 -0
  400. package/dist/transport/adapter/heartbeat.d.ts.map +1 -0
  401. package/dist/transport/adapter/heartbeat.js +41 -0
  402. package/dist/transport/adapter/heartbeat.js.map +1 -0
  403. package/dist/transport/adapter/server-adapter.d.ts.map +1 -1
  404. package/dist/transport/adapter/server-adapter.js +6 -0
  405. package/dist/transport/adapter/server-adapter.js.map +1 -1
  406. package/dist/transport/http/app.d.ts +3 -30
  407. package/dist/transport/http/app.d.ts.map +1 -1
  408. package/dist/transport/http/app.js +3 -7
  409. package/dist/transport/http/app.js.map +1 -1
  410. package/dist/transport/http/context.d.ts +40 -0
  411. package/dist/transport/http/context.d.ts.map +1 -0
  412. package/dist/transport/http/context.js +17 -0
  413. package/dist/transport/http/context.js.map +1 -0
  414. package/dist/transport/http/fetch-guard.d.ts +49 -0
  415. package/dist/transport/http/fetch-guard.d.ts.map +1 -0
  416. package/dist/transport/http/fetch-guard.js +312 -0
  417. package/dist/transport/http/fetch-guard.js.map +1 -0
  418. package/dist/transport/http/index.d.ts +1 -1
  419. package/dist/transport/http/index.d.ts.map +1 -1
  420. package/dist/transport/http/middleware/bearer-auth.d.ts +1 -1
  421. package/dist/transport/http/middleware/bearer-auth.d.ts.map +1 -1
  422. package/dist/transport/http/middleware/error-handler.d.ts +2 -2
  423. package/dist/transport/http/middleware/error-handler.d.ts.map +1 -1
  424. package/dist/transport/http/path-containment.d.ts +20 -0
  425. package/dist/transport/http/path-containment.d.ts.map +1 -0
  426. package/dist/transport/http/path-containment.js +31 -0
  427. package/dist/transport/http/path-containment.js.map +1 -0
  428. package/dist/transport/http/responses.d.ts +30 -0
  429. package/dist/transport/http/responses.d.ts.map +1 -0
  430. package/dist/transport/http/responses.js +5 -0
  431. package/dist/transport/http/responses.js.map +1 -0
  432. package/dist/transport/http/routes/files.d.ts +1 -1
  433. package/dist/transport/http/routes/files.d.ts.map +1 -1
  434. package/dist/transport/http/routes/files.js +54 -155
  435. package/dist/transport/http/routes/files.js.map +1 -1
  436. package/dist/transport/http/routes/resources.d.ts +1 -1
  437. package/dist/transport/http/routes/resources.d.ts.map +1 -1
  438. package/dist/transport/http/routes/resources.js +92 -57
  439. package/dist/transport/http/routes/resources.js.map +1 -1
  440. package/dist/transport/http/routes/rpc.d.ts +6 -1
  441. package/dist/transport/http/routes/rpc.d.ts.map +1 -1
  442. package/dist/transport/http/routes/rpc.js +51 -21
  443. package/dist/transport/http/routes/rpc.js.map +1 -1
  444. package/dist/transport/http/routes/upload.d.ts +1 -1
  445. package/dist/transport/http/routes/upload.d.ts.map +1 -1
  446. package/dist/transport/http/routes/upload.js +256 -169
  447. package/dist/transport/http/routes/upload.js.map +1 -1
  448. package/dist/user-config.d.ts +34 -7
  449. package/dist/user-config.d.ts.map +1 -1
  450. package/dist/user-config.js +71 -0
  451. package/dist/user-config.js.map +1 -1
  452. package/package.json +18 -8
  453. package/src/bootstrap.ts +119 -35
  454. package/src/bun-platform/fs.ts +1 -0
  455. package/src/bun-platform/index.ts +18 -1
  456. package/src/bun-platform/server-lifecycle.ts +218 -0
  457. package/src/bun-platform/shell.ts +362 -0
  458. package/src/config.ts +130 -0
  459. package/src/core/agents/agent.ts +219 -95
  460. package/src/core/agents/config.ts +8 -0
  461. package/src/core/agents/retry.ts +16 -17
  462. package/src/core/agents/state.ts +28 -0
  463. package/src/core/context/state.ts +4 -0
  464. package/src/core/events/base-event-store.ts +24 -16
  465. package/src/core/events/file.ts +198 -22
  466. package/src/core/file-store/containment.ts +75 -0
  467. package/src/core/file-store/file-store.ts +106 -25
  468. package/src/core/file-store/types.ts +14 -1
  469. package/src/core/image/image-processor.ts +3 -1
  470. package/src/core/image/types.ts +2 -0
  471. package/src/core/image/vips-resizer.ts +102 -37
  472. package/src/core/llm/anthropic.ts +127 -82
  473. package/src/core/llm/logger.ts +175 -37
  474. package/src/core/llm/openrouter.ts +82 -81
  475. package/src/core/llm/provider-request.ts +40 -0
  476. package/src/core/llm/provider.ts +72 -3
  477. package/src/core/llm/state.ts +12 -0
  478. package/src/core/plugins/plugin-builder.ts +106 -14
  479. package/src/core/preset/preset-builder.ts +12 -22
  480. package/src/core/sessions/context.ts +18 -0
  481. package/src/core/sessions/runtime-activity.ts +78 -0
  482. package/src/core/sessions/schema.ts +29 -3
  483. package/src/core/sessions/session-manager.ts +560 -140
  484. package/src/core/sessions/session-store.ts +38 -0
  485. package/src/core/sessions/session.ts +187 -47
  486. package/src/core/sessions/state.ts +16 -0
  487. package/src/core/system.ts +15 -0
  488. package/src/core/wake-key.ts +65 -0
  489. package/src/index.ts +31 -12
  490. package/src/lib/archive/archive-inspection.fixtures.ts +138 -0
  491. package/src/lib/archive/archive-inspection.ts +359 -0
  492. package/src/lib/archive/index.ts +17 -0
  493. package/src/lib/logger/console.ts +7 -57
  494. package/src/lib/logger/file.ts +28 -50
  495. package/src/lib/logger/index.ts +3 -1
  496. package/src/lib/logger/jsonl.ts +36 -0
  497. package/src/lib/logger/logger.ts +48 -0
  498. package/src/lib/logger/session-log.ts +42 -0
  499. package/src/lib/utils/concurrency.ts +37 -8
  500. package/src/lib/utils/fs-batch.ts +49 -0
  501. package/src/lib/utils/result.ts +7 -31
  502. package/src/lib/utils/sleep.ts +23 -0
  503. package/src/platform/fs-revision.ts +21 -0
  504. package/src/platform/fs.ts +109 -1
  505. package/src/platform/git.ts +67 -0
  506. package/src/platform/index.ts +51 -1
  507. package/src/platform/llm-call-log.ts +86 -0
  508. package/src/platform/scheduler.ts +71 -0
  509. package/src/platform/session-log.ts +39 -0
  510. package/src/platform/shell.ts +89 -0
  511. package/src/plugins/agent-status/plugin.ts +1 -0
  512. package/src/plugins/agents/plugin.ts +134 -81
  513. package/src/plugins/filesystem/listing.ts +70 -12
  514. package/src/plugins/filesystem/plugin.ts +8 -6
  515. package/src/plugins/git-status/plugin.ts +204 -77
  516. package/src/plugins/llm-debug/plugin.ts +1 -0
  517. package/src/plugins/logs/plugin.ts +9 -0
  518. package/src/plugins/mailbox/plugin.ts +46 -64
  519. package/src/plugins/mailbox/query.ts +15 -7
  520. package/src/plugins/mailbox/state.ts +1 -0
  521. package/src/plugins/resources/filename.ts +19 -0
  522. package/src/plugins/resources/plugin.ts +111 -59
  523. package/src/plugins/result-eviction/plugin.ts +6 -1
  524. package/src/plugins/services/plugin.ts +254 -98
  525. package/src/plugins/services/prompt.ts +1 -6
  526. package/src/plugins/services/schema.ts +17 -3
  527. package/src/plugins/services/service.ts +702 -252
  528. package/src/plugins/session-lifecycle/plugin.ts +56 -41
  529. package/src/plugins/session-state/plugin.ts +242 -88
  530. package/src/plugins/session-stats/plugin.ts +1 -0
  531. package/src/plugins/shell/executor.ts +144 -226
  532. package/src/plugins/shell/index.ts +1 -4
  533. package/src/plugins/shell/plugin.ts +7 -9
  534. package/src/plugins/skills/discovery.ts +10 -8
  535. package/src/plugins/skills/index.ts +1 -1
  536. package/src/plugins/skills/plugin.ts +19 -27
  537. package/src/plugins/skills/prompts.ts +3 -3
  538. package/src/plugins/skills/schema.ts +5 -2
  539. package/src/plugins/uploads/plugin.ts +991 -273
  540. package/src/plugins/uploads/preprocessor.ts +25 -0
  541. package/src/plugins/uploads/preprocessors/image-classifier.ts +56 -25
  542. package/src/plugins/uploads/preprocessors/markitdown-preprocessor.ts +41 -15
  543. package/src/plugins/uploads/preprocessors/pdf-preprocessor.ts +32 -16
  544. package/src/plugins/uploads/preprocessors/zip-preprocessor.ts +67 -38
  545. package/src/plugins/uploads/schema.ts +30 -3
  546. package/src/plugins/uploads/state.ts +12 -0
  547. package/src/plugins/user-chat/plugin.ts +196 -40
  548. package/src/plugins/workers/context.ts +102 -39
  549. package/src/plugins/workers/definition.ts +7 -0
  550. package/src/plugins/workers/index.ts +4 -4
  551. package/src/plugins/workers/plugin.ts +461 -151
  552. package/src/plugins/workers/state.ts +64 -0
  553. package/src/plugins/workers/worker.ts +15 -4
  554. package/src/testing/conformance.ts +1751 -0
  555. package/src/testing/node-platform.ts +5 -0
  556. package/src/testing/test-harness.ts +21 -38
  557. package/src/testing/wait-helpers.ts +1 -4
  558. package/src/transport/adapter/client-adapter.ts +60 -3
  559. package/src/transport/adapter/heartbeat.ts +50 -0
  560. package/src/transport/adapter/server-adapter.ts +6 -0
  561. package/src/transport/http/app.ts +7 -35
  562. package/src/transport/http/context.ts +46 -0
  563. package/src/transport/http/fetch-guard.ts +318 -0
  564. package/src/transport/http/index.ts +1 -1
  565. package/src/transport/http/middleware/bearer-auth.ts +1 -1
  566. package/src/transport/http/middleware/error-handler.ts +1 -1
  567. package/src/transport/http/path-containment.ts +44 -0
  568. package/src/transport/http/responses.ts +20 -0
  569. package/src/transport/http/routes/files.ts +69 -159
  570. package/src/transport/http/routes/resources.ts +124 -93
  571. package/src/transport/http/routes/rpc.ts +63 -26
  572. package/src/transport/http/routes/upload.ts +327 -258
  573. package/src/user-config.ts +93 -7
  574. package/dist/config.test.d.ts +0 -2
  575. package/dist/config.test.d.ts.map +0 -1
  576. package/dist/config.test.js +0 -155
  577. package/dist/config.test.js.map +0 -1
  578. package/dist/core/agent-loop.integration.test.d.ts +0 -2
  579. package/dist/core/agent-loop.integration.test.d.ts.map +0 -1
  580. package/dist/core/agent-loop.integration.test.js +0 -414
  581. package/dist/core/agent-loop.integration.test.js.map +0 -1
  582. package/dist/core/agents/agent-config.test.d.ts +0 -2
  583. package/dist/core/agents/agent-config.test.d.ts.map +0 -1
  584. package/dist/core/agents/agent-config.test.js +0 -194
  585. package/dist/core/agents/agent-config.test.js.map +0 -1
  586. package/dist/core/agents/agent-shutdown.test.d.ts +0 -6
  587. package/dist/core/agents/agent-shutdown.test.d.ts.map +0 -1
  588. package/dist/core/agents/agent-shutdown.test.js +0 -180
  589. package/dist/core/agents/agent-shutdown.test.js.map +0 -1
  590. package/dist/core/agents/agent.test.d.ts +0 -2
  591. package/dist/core/agents/agent.test.d.ts.map +0 -1
  592. package/dist/core/agents/agent.test.js +0 -313
  593. package/dist/core/agents/agent.test.js.map +0 -1
  594. package/dist/core/agents/communicator.d.ts +0 -3
  595. package/dist/core/agents/communicator.d.ts.map +0 -1
  596. package/dist/core/agents/communicator.js +0 -13
  597. package/dist/core/agents/communicator.js.map +0 -1
  598. package/dist/core/agents/handler-events.test.d.ts +0 -5
  599. package/dist/core/agents/handler-events.test.d.ts.map +0 -1
  600. package/dist/core/agents/handler-events.test.js +0 -115
  601. package/dist/core/agents/handler-events.test.js.map +0 -1
  602. package/dist/core/agents/response-sanitizer.test.d.ts +0 -2
  603. package/dist/core/agents/response-sanitizer.test.d.ts.map +0 -1
  604. package/dist/core/agents/response-sanitizer.test.js +0 -101
  605. package/dist/core/agents/response-sanitizer.test.js.map +0 -1
  606. package/dist/core/error-recovery.integration.test.d.ts +0 -2
  607. package/dist/core/error-recovery.integration.test.d.ts.map +0 -1
  608. package/dist/core/error-recovery.integration.test.js +0 -288
  609. package/dist/core/error-recovery.integration.test.js.map +0 -1
  610. package/dist/core/event-sourcing.integration.test.d.ts +0 -2
  611. package/dist/core/event-sourcing.integration.test.d.ts.map +0 -1
  612. package/dist/core/event-sourcing.integration.test.js +0 -154
  613. package/dist/core/event-sourcing.integration.test.js.map +0 -1
  614. package/dist/core/events/file.test.d.ts +0 -2
  615. package/dist/core/events/file.test.d.ts.map +0 -1
  616. package/dist/core/events/file.test.js +0 -284
  617. package/dist/core/events/file.test.js.map +0 -1
  618. package/dist/core/events/memory.test.d.ts +0 -2
  619. package/dist/core/events/memory.test.d.ts.map +0 -1
  620. package/dist/core/events/memory.test.js +0 -502
  621. package/dist/core/events/memory.test.js.map +0 -1
  622. package/dist/core/image/image-processor.test.d.ts +0 -2
  623. package/dist/core/image/image-processor.test.d.ts.map +0 -1
  624. package/dist/core/image/image-processor.test.js +0 -171
  625. package/dist/core/image/image-processor.test.js.map +0 -1
  626. package/dist/core/image/vips-resizer.test.d.ts +0 -2
  627. package/dist/core/image/vips-resizer.test.d.ts.map +0 -1
  628. package/dist/core/image/vips-resizer.test.js +0 -336
  629. package/dist/core/image/vips-resizer.test.js.map +0 -1
  630. package/dist/core/llm/anthropic.test.d.ts +0 -2
  631. package/dist/core/llm/anthropic.test.d.ts.map +0 -1
  632. package/dist/core/llm/anthropic.test.js +0 -464
  633. package/dist/core/llm/anthropic.test.js.map +0 -1
  634. package/dist/core/llm/cache-breakpoints.test.d.ts +0 -2
  635. package/dist/core/llm/cache-breakpoints.test.d.ts.map +0 -1
  636. package/dist/core/llm/cache-breakpoints.test.js +0 -69
  637. package/dist/core/llm/cache-breakpoints.test.js.map +0 -1
  638. package/dist/core/llm/cache-live.test.d.ts +0 -16
  639. package/dist/core/llm/cache-live.test.d.ts.map +0 -1
  640. package/dist/core/llm/cache-live.test.js +0 -137
  641. package/dist/core/llm/cache-live.test.js.map +0 -1
  642. package/dist/core/llm/logger.test.d.ts +0 -7
  643. package/dist/core/llm/logger.test.d.ts.map +0 -1
  644. package/dist/core/llm/logger.test.js +0 -228
  645. package/dist/core/llm/logger.test.js.map +0 -1
  646. package/dist/core/llm/message-sanitization.test.d.ts +0 -2
  647. package/dist/core/llm/message-sanitization.test.d.ts.map +0 -1
  648. package/dist/core/llm/message-sanitization.test.js +0 -181
  649. package/dist/core/llm/message-sanitization.test.js.map +0 -1
  650. package/dist/core/llm/mock.test.d.ts +0 -2
  651. package/dist/core/llm/mock.test.d.ts.map +0 -1
  652. package/dist/core/llm/mock.test.js +0 -318
  653. package/dist/core/llm/mock.test.js.map +0 -1
  654. package/dist/core/llm/openrouter-mapping.test.d.ts +0 -2
  655. package/dist/core/llm/openrouter-mapping.test.d.ts.map +0 -1
  656. package/dist/core/llm/openrouter-mapping.test.js +0 -172
  657. package/dist/core/llm/openrouter-mapping.test.js.map +0 -1
  658. package/dist/core/llm/openrouter.test.d.ts +0 -2
  659. package/dist/core/llm/openrouter.test.d.ts.map +0 -1
  660. package/dist/core/llm/openrouter.test.js +0 -377
  661. package/dist/core/llm/openrouter.test.js.map +0 -1
  662. package/dist/core/llm/provider-integration.test.d.ts +0 -12
  663. package/dist/core/llm/provider-integration.test.d.ts.map +0 -1
  664. package/dist/core/llm/provider-integration.test.js +0 -350
  665. package/dist/core/llm/provider-integration.test.js.map +0 -1
  666. package/dist/core/llm/routing-provider.test.d.ts +0 -2
  667. package/dist/core/llm/routing-provider.test.d.ts.map +0 -1
  668. package/dist/core/llm/routing-provider.test.js +0 -94
  669. package/dist/core/llm/routing-provider.test.js.map +0 -1
  670. package/dist/core/llm/snapshot-middleware.test.d.ts +0 -2
  671. package/dist/core/llm/snapshot-middleware.test.d.ts.map +0 -1
  672. package/dist/core/llm/snapshot-middleware.test.js +0 -144
  673. package/dist/core/llm/snapshot-middleware.test.js.map +0 -1
  674. package/dist/core/multi-agent.integration.test.d.ts +0 -2
  675. package/dist/core/multi-agent.integration.test.d.ts.map +0 -1
  676. package/dist/core/multi-agent.integration.test.js +0 -298
  677. package/dist/core/multi-agent.integration.test.js.map +0 -1
  678. package/dist/core/plugin-hooks.integration.test.d.ts +0 -2
  679. package/dist/core/plugin-hooks.integration.test.d.ts.map +0 -1
  680. package/dist/core/plugin-hooks.integration.test.js +0 -458
  681. package/dist/core/plugin-hooks.integration.test.js.map +0 -1
  682. package/dist/core/session-lifecycle.integration.test.d.ts +0 -2
  683. package/dist/core/session-lifecycle.integration.test.d.ts.map +0 -1
  684. package/dist/core/session-lifecycle.integration.test.js +0 -159
  685. package/dist/core/session-lifecycle.integration.test.js.map +0 -1
  686. package/dist/core/sessions/fork-utils.test.d.ts +0 -2
  687. package/dist/core/sessions/fork-utils.test.d.ts.map +0 -1
  688. package/dist/core/sessions/fork-utils.test.js +0 -129
  689. package/dist/core/sessions/fork-utils.test.js.map +0 -1
  690. package/dist/core/sessions/session-overrides.integration.test.d.ts +0 -2
  691. package/dist/core/sessions/session-overrides.integration.test.d.ts.map +0 -1
  692. package/dist/core/sessions/session-overrides.integration.test.js +0 -154
  693. package/dist/core/sessions/session-overrides.integration.test.js.map +0 -1
  694. package/dist/core/sessions/session.test.d.ts +0 -2
  695. package/dist/core/sessions/session.test.d.ts.map +0 -1
  696. package/dist/core/sessions/session.test.js +0 -1100
  697. package/dist/core/sessions/session.test.js.map +0 -1
  698. package/dist/core/tools/executor.test.d.ts +0 -2
  699. package/dist/core/tools/executor.test.d.ts.map +0 -1
  700. package/dist/core/tools/executor.test.js +0 -144
  701. package/dist/core/tools/executor.test.js.map +0 -1
  702. package/dist/lib/logger/console.test.d.ts +0 -2
  703. package/dist/lib/logger/console.test.d.ts.map +0 -1
  704. package/dist/lib/logger/console.test.js +0 -258
  705. package/dist/lib/logger/console.test.js.map +0 -1
  706. package/dist/lib/never.d.ts +0 -2
  707. package/dist/lib/never.d.ts.map +0 -1
  708. package/dist/lib/never.js +0 -4
  709. package/dist/lib/never.js.map +0 -1
  710. package/dist/lib/utils/concurrency.test.d.ts +0 -2
  711. package/dist/lib/utils/concurrency.test.d.ts.map +0 -1
  712. package/dist/lib/utils/concurrency.test.js +0 -135
  713. package/dist/lib/utils/concurrency.test.js.map +0 -1
  714. package/dist/plugins/agent-status/agent-status.test.d.ts +0 -2
  715. package/dist/plugins/agent-status/agent-status.test.d.ts.map +0 -1
  716. package/dist/plugins/agent-status/agent-status.test.js +0 -136
  717. package/dist/plugins/agent-status/agent-status.test.js.map +0 -1
  718. package/dist/plugins/agents/agents.integration.test.d.ts +0 -2
  719. package/dist/plugins/agents/agents.integration.test.d.ts.map +0 -1
  720. package/dist/plugins/agents/agents.integration.test.js +0 -830
  721. package/dist/plugins/agents/agents.integration.test.js.map +0 -1
  722. package/dist/plugins/agents/supervision.integration.test.d.ts +0 -2
  723. package/dist/plugins/agents/supervision.integration.test.d.ts.map +0 -1
  724. package/dist/plugins/agents/supervision.integration.test.js +0 -215
  725. package/dist/plugins/agents/supervision.integration.test.js.map +0 -1
  726. package/dist/plugins/context-compact/compaction-live.test.d.ts +0 -17
  727. package/dist/plugins/context-compact/compaction-live.test.d.ts.map +0 -1
  728. package/dist/plugins/context-compact/compaction-live.test.js +0 -177
  729. package/dist/plugins/context-compact/compaction-live.test.js.map +0 -1
  730. package/dist/plugins/context-compact/context-compact.integration.test.d.ts +0 -2
  731. package/dist/plugins/context-compact/context-compact.integration.test.d.ts.map +0 -1
  732. package/dist/plugins/context-compact/context-compact.integration.test.js +0 -364
  733. package/dist/plugins/context-compact/context-compact.integration.test.js.map +0 -1
  734. package/dist/plugins/context-compact/context-compactor.test.d.ts +0 -2
  735. package/dist/plugins/context-compact/context-compactor.test.d.ts.map +0 -1
  736. package/dist/plugins/context-compact/context-compactor.test.js +0 -858
  737. package/dist/plugins/context-compact/context-compactor.test.js.map +0 -1
  738. package/dist/plugins/context-compact/history-offloader.test.d.ts +0 -2
  739. package/dist/plugins/context-compact/history-offloader.test.d.ts.map +0 -1
  740. package/dist/plugins/context-compact/history-offloader.test.js +0 -77
  741. package/dist/plugins/context-compact/history-offloader.test.js.map +0 -1
  742. package/dist/plugins/filesystem/filesystem.integration.test.d.ts +0 -2
  743. package/dist/plugins/filesystem/filesystem.integration.test.d.ts.map +0 -1
  744. package/dist/plugins/filesystem/filesystem.integration.test.js +0 -447
  745. package/dist/plugins/filesystem/filesystem.integration.test.js.map +0 -1
  746. package/dist/plugins/filesystem/schema.d.ts +0 -7
  747. package/dist/plugins/filesystem/schema.d.ts.map +0 -1
  748. package/dist/plugins/filesystem/schema.js +0 -2
  749. package/dist/plugins/filesystem/schema.js.map +0 -1
  750. package/dist/plugins/limits-guard/limit-guard.test.d.ts +0 -2
  751. package/dist/plugins/limits-guard/limit-guard.test.d.ts.map +0 -1
  752. package/dist/plugins/limits-guard/limit-guard.test.js +0 -194
  753. package/dist/plugins/limits-guard/limit-guard.test.js.map +0 -1
  754. package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts +0 -2
  755. package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts.map +0 -1
  756. package/dist/plugins/limits-guard/limits-guard.integration.test.js +0 -887
  757. package/dist/plugins/limits-guard/limits-guard.integration.test.js.map +0 -1
  758. package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts +0 -2
  759. package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts.map +0 -1
  760. package/dist/plugins/llm-debug/llm-debug.integration.test.js +0 -157
  761. package/dist/plugins/llm-debug/llm-debug.integration.test.js.map +0 -1
  762. package/dist/plugins/mailbox/mailbox.integration.test.d.ts +0 -2
  763. package/dist/plugins/mailbox/mailbox.integration.test.d.ts.map +0 -1
  764. package/dist/plugins/mailbox/mailbox.integration.test.js +0 -678
  765. package/dist/plugins/mailbox/mailbox.integration.test.js.map +0 -1
  766. package/dist/plugins/resources/resources.integration.test.d.ts +0 -2
  767. package/dist/plugins/resources/resources.integration.test.d.ts.map +0 -1
  768. package/dist/plugins/resources/resources.integration.test.js +0 -62
  769. package/dist/plugins/resources/resources.integration.test.js.map +0 -1
  770. package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts +0 -2
  771. package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts.map +0 -1
  772. package/dist/plugins/result-eviction/result-eviction.integration.test.js +0 -294
  773. package/dist/plugins/result-eviction/result-eviction.integration.test.js.map +0 -1
  774. package/dist/plugins/services/pid-registry.test.d.ts +0 -2
  775. package/dist/plugins/services/pid-registry.test.d.ts.map +0 -1
  776. package/dist/plugins/services/pid-registry.test.js +0 -161
  777. package/dist/plugins/services/pid-registry.test.js.map +0 -1
  778. package/dist/plugins/services/services.integration.test.d.ts +0 -2
  779. package/dist/plugins/services/services.integration.test.d.ts.map +0 -1
  780. package/dist/plugins/services/services.integration.test.js +0 -1057
  781. package/dist/plugins/services/services.integration.test.js.map +0 -1
  782. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts +0 -2
  783. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts.map +0 -1
  784. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js +0 -498
  785. package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js.map +0 -1
  786. package/dist/plugins/session-stats/plugin.test.d.ts +0 -2
  787. package/dist/plugins/session-stats/plugin.test.d.ts.map +0 -1
  788. package/dist/plugins/session-stats/plugin.test.js +0 -145
  789. package/dist/plugins/session-stats/plugin.test.js.map +0 -1
  790. package/dist/plugins/shell/shell.integration.test.d.ts +0 -2
  791. package/dist/plugins/shell/shell.integration.test.d.ts.map +0 -1
  792. package/dist/plugins/shell/shell.integration.test.js +0 -234
  793. package/dist/plugins/shell/shell.integration.test.js.map +0 -1
  794. package/dist/plugins/shell/shell.test.d.ts +0 -2
  795. package/dist/plugins/shell/shell.test.d.ts.map +0 -1
  796. package/dist/plugins/shell/shell.test.js +0 -236
  797. package/dist/plugins/shell/shell.test.js.map +0 -1
  798. package/dist/plugins/skills/discovery.test.d.ts +0 -2
  799. package/dist/plugins/skills/discovery.test.d.ts.map +0 -1
  800. package/dist/plugins/skills/discovery.test.js +0 -312
  801. package/dist/plugins/skills/discovery.test.js.map +0 -1
  802. package/dist/plugins/skills/skills.integration.test.d.ts +0 -2
  803. package/dist/plugins/skills/skills.integration.test.d.ts.map +0 -1
  804. package/dist/plugins/skills/skills.integration.test.js +0 -475
  805. package/dist/plugins/skills/skills.integration.test.js.map +0 -1
  806. package/dist/plugins/todo/todo.integration.test.d.ts +0 -2
  807. package/dist/plugins/todo/todo.integration.test.d.ts.map +0 -1
  808. package/dist/plugins/todo/todo.integration.test.js +0 -605
  809. package/dist/plugins/todo/todo.integration.test.js.map +0 -1
  810. package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts +0 -2
  811. package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts.map +0 -1
  812. package/dist/plugins/uploads/preprocessors/image-classifier.test.js +0 -113
  813. package/dist/plugins/uploads/preprocessors/image-classifier.test.js.map +0 -1
  814. package/dist/plugins/uploads/uploads.integration.test.d.ts +0 -2
  815. package/dist/plugins/uploads/uploads.integration.test.d.ts.map +0 -1
  816. package/dist/plugins/uploads/uploads.integration.test.js +0 -639
  817. package/dist/plugins/uploads/uploads.integration.test.js.map +0 -1
  818. package/dist/plugins/user-chat/user-chat.integration.test.d.ts +0 -2
  819. package/dist/plugins/user-chat/user-chat.integration.test.d.ts.map +0 -1
  820. package/dist/plugins/user-chat/user-chat.integration.test.js +0 -754
  821. package/dist/plugins/user-chat/user-chat.integration.test.js.map +0 -1
  822. package/dist/plugins/workers/workers.integration.test.d.ts +0 -2
  823. package/dist/plugins/workers/workers.integration.test.d.ts.map +0 -1
  824. package/dist/plugins/workers/workers.integration.test.js +0 -629
  825. package/dist/plugins/workers/workers.integration.test.js.map +0 -1
  826. package/dist/prompts/macros.test.d.ts +0 -2
  827. package/dist/prompts/macros.test.d.ts.map +0 -1
  828. package/dist/prompts/macros.test.js +0 -80
  829. package/dist/prompts/macros.test.js.map +0 -1
  830. package/dist/testing/test-harness.test.d.ts +0 -2
  831. package/dist/testing/test-harness.test.d.ts.map +0 -1
  832. package/dist/testing/test-harness.test.js +0 -92
  833. package/dist/testing/test-harness.test.js.map +0 -1
  834. package/dist/transport/http/routes/rpc.integration.test.d.ts +0 -2
  835. package/dist/transport/http/routes/rpc.integration.test.d.ts.map +0 -1
  836. package/dist/transport/http/routes/rpc.integration.test.js +0 -189
  837. package/dist/transport/http/routes/rpc.integration.test.js.map +0 -1
  838. package/dist/transport/http/routes/rpc.test.d.ts +0 -2
  839. package/dist/transport/http/routes/rpc.test.d.ts.map +0 -1
  840. package/dist/transport/http/routes/rpc.test.js +0 -316
  841. package/dist/transport/http/routes/rpc.test.js.map +0 -1
  842. package/src/config.test.ts +0 -174
  843. package/src/core/agent-loop.integration.test.ts +0 -503
  844. package/src/core/agents/agent-config.test.ts +0 -240
  845. package/src/core/agents/agent-shutdown.test.ts +0 -236
  846. package/src/core/agents/agent.test.ts +0 -387
  847. package/src/core/agents/communicator.ts +0 -16
  848. package/src/core/agents/handler-events.test.ts +0 -167
  849. package/src/core/agents/response-sanitizer.test.ts +0 -137
  850. package/src/core/error-recovery.integration.test.ts +0 -343
  851. package/src/core/event-sourcing.integration.test.ts +0 -191
  852. package/src/core/events/file.test.ts +0 -436
  853. package/src/core/events/memory.test.ts +0 -741
  854. package/src/core/image/image-processor.test.ts +0 -218
  855. package/src/core/image/vips-resizer.test.ts +0 -388
  856. package/src/core/llm/anthropic.test.ts +0 -546
  857. package/src/core/llm/cache-breakpoints.test.ts +0 -85
  858. package/src/core/llm/cache-live.test.ts +0 -155
  859. package/src/core/llm/logger.test.ts +0 -270
  860. package/src/core/llm/message-sanitization.test.ts +0 -217
  861. package/src/core/llm/mock.test.ts +0 -402
  862. package/src/core/llm/openrouter-mapping.test.ts +0 -210
  863. package/src/core/llm/openrouter.test.ts +0 -499
  864. package/src/core/llm/provider-integration.test.ts +0 -408
  865. package/src/core/llm/routing-provider.test.ts +0 -113
  866. package/src/core/llm/snapshot-middleware.test.ts +0 -168
  867. package/src/core/multi-agent.integration.test.ts +0 -340
  868. package/src/core/plugin-hooks.integration.test.ts +0 -568
  869. package/src/core/session-lifecycle.integration.test.ts +0 -202
  870. package/src/core/sessions/fork-utils.test.ts +0 -158
  871. package/src/core/sessions/session-overrides.integration.test.ts +0 -210
  872. package/src/core/sessions/session.test.ts +0 -1736
  873. package/src/core/tools/executor.test.ts +0 -161
  874. package/src/lib/logger/console.test.ts +0 -348
  875. package/src/lib/never.ts +0 -3
  876. package/src/lib/utils/concurrency.test.ts +0 -169
  877. package/src/plugins/agent-status/agent-status.test.ts +0 -164
  878. package/src/plugins/agents/agents.integration.test.ts +0 -976
  879. package/src/plugins/agents/supervision.integration.test.ts +0 -249
  880. package/src/plugins/context-compact/compaction-live.test.ts +0 -221
  881. package/src/plugins/context-compact/context-compact.integration.test.ts +0 -418
  882. package/src/plugins/context-compact/context-compactor.test.ts +0 -1036
  883. package/src/plugins/context-compact/history-offloader.test.ts +0 -100
  884. package/src/plugins/filesystem/filesystem.integration.test.ts +0 -529
  885. package/src/plugins/filesystem/schema.ts +0 -6
  886. package/src/plugins/limits-guard/limit-guard.test.ts +0 -253
  887. package/src/plugins/limits-guard/limits-guard.integration.test.ts +0 -1012
  888. package/src/plugins/llm-debug/llm-debug.integration.test.ts +0 -192
  889. package/src/plugins/mailbox/mailbox.integration.test.ts +0 -794
  890. package/src/plugins/resources/resources.integration.test.ts +0 -68
  891. package/src/plugins/result-eviction/result-eviction.integration.test.ts +0 -332
  892. package/src/plugins/services/pid-registry.test.ts +0 -180
  893. package/src/plugins/services/services.integration.test.ts +0 -1223
  894. package/src/plugins/session-lifecycle/session-lifecycle.integration.test.ts +0 -639
  895. package/src/plugins/session-stats/plugin.test.ts +0 -160
  896. package/src/plugins/shell/shell.integration.test.ts +0 -273
  897. package/src/plugins/shell/shell.test.ts +0 -314
  898. package/src/plugins/skills/discovery.test.ts +0 -395
  899. package/src/plugins/skills/skills.integration.test.ts +0 -580
  900. package/src/plugins/todo/todo.integration.test.ts +0 -687
  901. package/src/plugins/uploads/preprocessors/image-classifier.test.ts +0 -142
  902. package/src/plugins/uploads/uploads.integration.test.ts +0 -831
  903. package/src/plugins/user-chat/user-chat.integration.test.ts +0 -893
  904. package/src/plugins/workers/workers.integration.test.ts +0 -778
  905. package/src/prompts/macros.test.ts +0 -107
  906. package/src/testing/test-harness.test.ts +0 -114
  907. package/src/transport/http/routes/rpc.integration.test.ts +0 -243
  908. 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