@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
package/src/index.ts CHANGED
@@ -9,8 +9,12 @@ export { loadConfig, validateConfig } from './config.js'
9
9
  export type { Config } from './config.js'
10
10
 
11
11
  // Bootstrap
12
- export { bootstrap, createSystemFromServices } from './bootstrap.js'
13
- export type { Services } from './bootstrap.js'
12
+ export { bootstrap, createSystemFromServices, fullPlugins, isolatePlugins } from './bootstrap.js'
13
+ export type { BootstrapOptions, BuiltinMethodSchemas, IsolateMethodSchemas, PluginProfile, Services } from './bootstrap.js'
14
+
15
+ // Scheduler wake keys — a host delivering its own wakes mints and reads them
16
+ export { agentWakeKey, parseAgentWakeKey, pluginWakeKey, parsePluginWakeKey } from './core/wake-key.js'
17
+ export type { AgentWake, AgentWakeKind, PluginWake } from './core/wake-key.js'
14
18
 
15
19
  // System
16
20
  export { createSystem } from './core/system.js'
@@ -25,8 +29,8 @@ export type { ConsoleLoggerConfig } from '~/lib/logger/index.js'
25
29
  export type { LogLevel, Logger } from '~/lib/logger/logger.js'
26
30
 
27
31
  // User config
28
- export { defineConfig } from './user-config.js'
29
- export type { LocalResource, RojConfig } from './user-config.js'
32
+ export { defineConfig, parseExtraBinds } from './user-config.js'
33
+ export type { LocalResource, RojConfig, SessionDefaults } from './user-config.js'
30
34
 
31
35
  // Transport adapters
32
36
  export { ClientAdapter, createAgentTransport, ServerAdapter } from './transport/adapter/index.js'
@@ -37,7 +41,7 @@ export { Agent } from '~/core/agents/agent.js'
37
41
  export type { AgentConfig } from '~/core/agents/agent.js'
38
42
  export { SessionManager } from '~/core/sessions/session-manager.js'
39
43
  export type { SessionManagerOptions } from '~/core/sessions/session-manager.js'
40
- export { SessionStore } from '~/core/sessions/session-store.js'
44
+ export { SessionRuntimeDetachedError, SessionStore } from '~/core/sessions/session-store.js'
41
45
  export { Session } from '~/core/sessions/session.js'
42
46
  export type { UserOutputCallback } from '~/core/sessions/session.js'
43
47
 
@@ -48,8 +52,11 @@ export type { Preset } from '~/core/preset/index.js'
48
52
  // Domain types (re-exported for external consumers, replacing @roj-ai/shared root exports)
49
53
  export { AgentId } from '~/core/agents/schema.js'
50
54
  export type { AgentStatus as DomainAgentStatus, ProtocolAgentStatus, ProtocolAgentStatus as AgentStatus } from '~/core/agents/schema.js'
55
+ // Event factories behind BuiltinEvent — a third-party plugin declares these in
56
+ // .events([...]) to react to built-in events without reaching into src/.
51
57
  export { agentEvents } from '~/core/agents/state.js'
52
58
  export type { AgentPauseReason, AgentState, LLMMessage } from '~/core/agents/state.js'
59
+ export { contextEvents } from '~/core/context/state.js'
53
60
  export type { DomainEvent } from '~/core/events/types.js'
54
61
  export type { FactoryEventType } from '~/core/events/types.js'
55
62
  export { isDomainEvent } from '~/core/events/types.js'
@@ -58,31 +65,42 @@ export type { ChatMessageContentItem, LLMCallLogEntry, LLMCallMessage, ToolResul
58
65
  export { contentToString } from '~/core/llm/llm-log-types.js'
59
66
  export { applyMiddleware, useProvider, withAnthropic, withMaxTokens, withOpenRouter, withTemperature } from '~/core/llm/middleware.js'
60
67
  export type { InferenceNext, LLMMiddleware } from '~/core/llm/middleware.js'
68
+ export type { OpenRouterProviderRouting, OpenRouterReasoningOptions, OpenRouterRequestOptions } from '~/core/llm/provider.js'
61
69
  export { ModelId } from '~/core/llm/schema.js'
62
70
  export type { LLMCallId } from '~/core/llm/schema.js'
71
+ export { llmEvents } from '~/core/llm/state.js'
63
72
  export type { InferenceCompletedEvent, InferenceFailedEvent, InferenceStartedEvent } from '~/core/llm/state.js'
64
73
  export { estimateTokens } from '~/core/llm/tokens.js'
65
74
  export { applyEvent } from '~/core/sessions/apply-event.js'
66
75
  export { selectPluginState } from '~/core/sessions/reducer.js'
67
- export { SessionId } from '~/core/sessions/schema.js'
76
+ export { isValidSessionId, parseSessionId, SessionId } from '~/core/sessions/schema.js'
77
+ export type { RuntimeLeaseRelease, SessionRuntimeActivity, SessionRuntimeActivitySnapshot } from '~/core/sessions/runtime-activity.js'
68
78
  export type { SessionMetadata } from '~/core/sessions/schema.js'
79
+ // Exported so a consumer can validate a callManagerMethod('sessions.list')
80
+ // result — that call is typed Result<unknown>, so the plugin's output schema
81
+ // does not reach the caller.
82
+ export { sessionMetadataSchema } from '~/core/sessions/schema.js'
69
83
  export type { AgentOverrides, SessionOverrides, SessionOverridesPatch } from '~/core/sessions/state.js'
70
84
  export {
71
85
  agentOverridesSchema,
72
86
  createSessionState,
73
87
  reconstructSessionState,
74
88
  resolveAgentOverrides,
89
+ sessionEvents,
75
90
  sessionOverridesPatchSchema,
76
91
  } from '~/core/sessions/state.js'
77
92
  export type { SessionState } from '~/core/sessions/state.js'
78
- export type { ToolCallId } from '~/core/tools/schema.js'
93
+ export { ToolCallId } from '~/core/tools/schema.js'
94
+ export { toolEvents } from '~/core/tools/state.js'
79
95
  export type { ToolStartedEvent } from '~/core/tools/state.js'
80
- export { getAgentMailbox, selectMailboxState } from '~/plugins/mailbox/query.js'
96
+ export { getAgentMailbox, getAgentUnconsumedMailbox, selectMailboxState } from '~/plugins/mailbox/query.js'
81
97
  export type { MailboxPluginState } from '~/plugins/mailbox/query.js'
98
+ export { mailboxEvents } from '~/plugins/mailbox/state.js'
82
99
  export { MessageId } from '~/plugins/mailbox/schema.js'
83
100
  export type { MailboxMessage } from '~/plugins/mailbox/schema.js'
84
- export type { ServiceStatus } from '~/plugins/services/schema.js'
101
+ export type { ServiceStatus, ServiceStoppedBy, ServiceStopSource } from '~/plugins/services/schema.js'
85
102
  export { ChatMessageId } from '~/plugins/user-chat/schema.js'
103
+ export { isValidUploadId, parseUploadId, UploadId } from '~/plugins/uploads/schema.js'
86
104
  export type { AskUserInputType, AskUserInputTypeSchema, AskUserOption } from '~/plugins/user-chat/schema.js'
87
105
  export type { BuiltinEvent } from './builtin-events.js'
88
106
 
@@ -128,7 +146,8 @@ export type {
128
146
  export { RESOURCE_MANIFEST_FILENAME, ResourceManifestSchema } from '~/plugins/resources/manifest.js'
129
147
  export type { ResourceManifest } from '~/plugins/resources/manifest.js'
130
148
  export { uploadsPlugin } from '~/plugins/uploads/plugin.js'
131
- export { userChatPlugin } from '~/plugins/user-chat/plugin.js'
149
+ export type { ArchiveLimitOverrides, ArchiveLimits } from '~/lib/archive/index.js'
150
+ export { userChatEvents, userChatPlugin } from '~/plugins/user-chat/plugin.js'
132
151
  export type { UserChatAgentConfig, UserChatPresetConfig, UserCommunicationMode } from '~/plugins/user-chat/plugin.js'
133
152
 
134
153
  // Workers plugin
@@ -140,8 +159,8 @@ export type { WorkerContext } from '~/plugins/workers/index.js'
140
159
  export type { WorkerError, WorkerResult } from '~/plugins/workers/index.js'
141
160
 
142
161
  // Plugin builder
143
- export { definePlugin } from '~/core/plugins/plugin-builder.js'
144
- export type { CallerContext, ConfiguredPlugin, PluginDefinition } from '~/core/plugins/plugin-builder.js'
162
+ export { DEFAULT_PLUGIN_ORDER, definePlugin } from '~/core/plugins/plugin-builder.js'
163
+ export type { CallerContext, ConfiguredPlugin, PluginDefinition, SessionCloseReason } from '~/core/plugins/plugin-builder.js'
145
164
 
146
165
  // Zod (re-export for presets that need schemas)
147
166
  export { default as z } from 'zod/v4'
@@ -0,0 +1,138 @@
1
+ // Captured from Info-ZIP 6.00; unrelated verbose fields were omitted.
2
+ export const SAFE_INFO_ZIP_6_FIXTURE = `Archive: fixture.zip
3
+ There is no zipfile comment.
4
+
5
+ End-of-central-directory record:
6
+ -------------------------------
7
+
8
+ This zipfile constitutes the sole disk of a single-part archive; its
9
+ central directory contains 3 entries.
10
+
11
+ Central directory entry #1:
12
+ ---------------------------
13
+
14
+ regular.txt
15
+
16
+ file system or operating system of origin: Unix
17
+ uncompressed size: 1 bytes
18
+ length of filename: 11 characters
19
+ Unix file attributes (100664 octal): -rw-rw-r--
20
+ MS-DOS file attributes (00 hex): none
21
+
22
+ Central directory entry #2:
23
+ ---------------------------
24
+
25
+ space ž.txt
26
+
27
+ file system or operating system of origin: Unix
28
+ uncompressed size: 7 bytes
29
+ length of filename: 12 characters
30
+ Unix file attributes (100664 octal): -rw-rw-r--
31
+ MS-DOS file attributes (00 hex): none
32
+
33
+ Central directory entry #3:
34
+ ---------------------------
35
+
36
+ dir/
37
+
38
+ file system or operating system of origin: Unix
39
+ uncompressed size: 0 bytes
40
+ length of filename: 4 characters
41
+ Unix file attributes (040775 octal): drwxrwxr-x
42
+ MS-DOS file attributes (10 hex): dir
43
+ `
44
+
45
+ export const BACKSLASH_INFO_ZIP_6_FIXTURE = `Archive: backslash.zip
46
+ There is no zipfile comment.
47
+
48
+ This zipfile constitutes the sole disk of a single-part archive; its
49
+ central directory contains 1 entry.
50
+
51
+ Central directory entry #1:
52
+ ---------------------------
53
+
54
+ trailing\\
55
+
56
+ file system or operating system of origin: Unix
57
+ uncompressed size: 5 bytes
58
+ length of filename: 9 characters
59
+ Unix file attributes (100664 octal): -rw-rw-r--
60
+ MS-DOS file attributes (00 hex): none
61
+ `
62
+
63
+ export const SYMLINK_INFO_ZIP_6_FIXTURE = `Archive: symlink.zip
64
+ There is no zipfile comment.
65
+
66
+ This zipfile constitutes the sole disk of a single-part archive; its
67
+ central directory contains 1 entry.
68
+
69
+ Central directory entry #1:
70
+ ---------------------------
71
+
72
+ dir/link
73
+
74
+ file system or operating system of origin: Unix
75
+ uncompressed size: 14 bytes
76
+ length of filename: 8 characters
77
+ Unix file attributes (120777 octal): lrwxrwxrwx
78
+ MS-DOS file attributes (00 hex): none
79
+ `
80
+
81
+ export const DOS_INFO_ZIP_6_FIXTURE = `Archive: windows.zip
82
+ There is no zipfile comment.
83
+
84
+ This zipfile constitutes the sole disk of a single-part archive; its
85
+ central directory contains 2 entries.
86
+
87
+ Central directory entry #1:
88
+ ---------------------------
89
+
90
+ win-file.txt
91
+
92
+ file system or operating system of origin: MS-DOS, OS/2 or NT FAT
93
+ uncompressed size: 1 bytes
94
+ length of filename: 12 characters
95
+ non-MSDOS external file attributes: 000000 hex
96
+ MS-DOS file attributes (20 hex): arc
97
+
98
+ Central directory entry #2:
99
+ ---------------------------
100
+
101
+ win-dir/
102
+
103
+ file system or operating system of origin: MS-DOS, OS/2 or NT FAT
104
+ uncompressed size: 0 bytes
105
+ length of filename: 8 characters
106
+ non-MSDOS external file attributes: 000000 hex
107
+ MS-DOS file attributes (10 hex): dir
108
+ `
109
+
110
+ export const EMPTY_INFO_ZIP_6_FIXTURE = `Archive: empty.zip
111
+ There is no zipfile comment.
112
+
113
+ End-of-central-directory record:
114
+ -------------------------------
115
+
116
+ This zipfile constitutes the sole disk of a single-part archive; its
117
+ central directory contains 0 entries.
118
+ The central directory is 0 (0000000000000000h) bytes long,
119
+ and its (expected) offset in bytes from the beginning of the zipfile
120
+ is 0 (0000000000000000h).
121
+
122
+ Empty zipfile.
123
+ `
124
+
125
+ export const TRUNCATED_INFO_ZIP_6_FIXTURE = `Archive: truncated.zip
126
+ There is no zipfile comment.
127
+
128
+ This zipfile constitutes the sole disk of a single-part archive; its
129
+ central directory contains 1 entry.
130
+
131
+ Central directory entry #1:
132
+ ---------------------------
133
+
134
+ truncated.txt
135
+
136
+ file system or operating system of origin: Unix
137
+ uncompressed size: 1 bytes
138
+ `
@@ -0,0 +1,359 @@
1
+ import type { Result } from '~/lib/utils/result.js'
2
+ import { Err, Ok } from '~/lib/utils/result.js'
3
+ import type { ProcessRunner } from '~/platform/process.js'
4
+
5
+ const MEBIBYTE = 1024 * 1024
6
+ const ZIPINFO_TIMEOUT_MS = 60_000
7
+ const ZIPINFO_MAX_BUFFER = 10 * MEBIBYTE
8
+
9
+ export interface ArchiveLimits {
10
+ maxEntries: number
11
+ maxTotalUncompressedSize: number
12
+ }
13
+
14
+ export type ArchiveLimitOverrides = Partial<ArchiveLimits>
15
+
16
+ export const DEFAULT_ARCHIVE_LIMITS: Readonly<ArchiveLimits> = {
17
+ maxEntries: 500,
18
+ maxTotalUncompressedSize: 100 * MEBIBYTE,
19
+ }
20
+
21
+ export interface ArchiveEntry {
22
+ name: string
23
+ uncompressedSize: number
24
+ type: 'file' | 'directory'
25
+ }
26
+
27
+ export interface ArchiveInspection {
28
+ entries: readonly ArchiveEntry[]
29
+ fileCount: number
30
+ directoryCount: number
31
+ totalUncompressedSize: number
32
+ }
33
+
34
+ export type ArchiveInspectionErrorCode =
35
+ | 'aborted'
36
+ | 'command_failed'
37
+ | 'empty_archive'
38
+ | 'invalid_listing'
39
+ | 'unsafe_path'
40
+ | 'too_many_entries'
41
+ | 'too_large'
42
+ | 'unsupported_entry_type'
43
+
44
+ export class ArchiveInspectionError extends Error {
45
+ readonly code: ArchiveInspectionErrorCode
46
+ readonly entryName?: string
47
+
48
+ constructor(code: ArchiveInspectionErrorCode, message: string, options?: { cause?: unknown; entryName?: string }) {
49
+ super(message, options?.cause === undefined ? undefined : { cause: options.cause })
50
+ this.name = 'ArchiveInspectionError'
51
+ this.code = code
52
+ this.entryName = options?.entryName
53
+ }
54
+ }
55
+
56
+ export interface InspectZipArchiveOptions {
57
+ signal?: AbortSignal
58
+ timeoutMs?: number
59
+ limits?: ArchiveLimitOverrides
60
+ }
61
+
62
+ export function resolveArchiveLimits(overrides: ArchiveLimitOverrides = {}): Readonly<ArchiveLimits> {
63
+ return { ...DEFAULT_ARCHIVE_LIMITS, ...overrides }
64
+ }
65
+
66
+ /** Tracks one aggregate extraction budget across a top-level archive and every nested archive. */
67
+ export class ArchiveBudget {
68
+ readonly limits: Readonly<ArchiveLimits>
69
+ private consumedEntries = 0
70
+ private consumedUncompressedSize = 0
71
+
72
+ constructor(limits: ArchiveLimitOverrides = {}) {
73
+ this.limits = resolveArchiveLimits(limits)
74
+ }
75
+
76
+ consume(inspection: ArchiveInspection): Result<void, ArchiveInspectionError> {
77
+ if (!isValidLimit(this.limits.maxEntries) || !isValidLimit(this.limits.maxTotalUncompressedSize)) {
78
+ return invalidListing('Archive limits must be non-negative safe integers')
79
+ }
80
+
81
+ const nextEntries = this.consumedEntries + inspection.entries.length
82
+ if (!Number.isSafeInteger(nextEntries) || nextEntries > this.limits.maxEntries) {
83
+ return Err(new ArchiveInspectionError(
84
+ 'too_many_entries',
85
+ `Nested ZIP archives exceed the aggregate ${this.limits.maxEntries} entry limit`,
86
+ ))
87
+ }
88
+
89
+ const nextSize = this.consumedUncompressedSize + inspection.totalUncompressedSize
90
+ if (!Number.isSafeInteger(nextSize) || nextSize > this.limits.maxTotalUncompressedSize) {
91
+ return Err(new ArchiveInspectionError(
92
+ 'too_large',
93
+ `Nested ZIP archives exceed the aggregate ${this.limits.maxTotalUncompressedSize} byte uncompressed size limit`,
94
+ ))
95
+ }
96
+
97
+ this.consumedEntries = nextEntries
98
+ this.consumedUncompressedSize = nextSize
99
+ return Ok(undefined)
100
+ }
101
+ }
102
+
103
+ /** Inspect the central directory before a caller performs extraction. */
104
+ export async function inspectZipArchive(
105
+ process: ProcessRunner,
106
+ archivePath: string,
107
+ options: InspectZipArchiveOptions = {},
108
+ ): Promise<Result<ArchiveInspection, ArchiveInspectionError>> {
109
+ if (options.signal?.aborted) {
110
+ return Err(abortedError(options.signal))
111
+ }
112
+
113
+ let stdout: string
114
+ try {
115
+ const result = await process.execFile('unzip', ['-Z', '-v', archivePath], {
116
+ timeout: options.timeoutMs ?? ZIPINFO_TIMEOUT_MS,
117
+ maxBuffer: ZIPINFO_MAX_BUFFER,
118
+ signal: options.signal,
119
+ })
120
+ stdout = result.stdout
121
+ } catch (cause) {
122
+ if (options.signal?.aborted) {
123
+ return Err(abortedError(options.signal))
124
+ }
125
+ // Info-ZIP uses non-zero exits for warnings; inspection fails closed on all of them.
126
+ return Err(new ArchiveInspectionError('command_failed', 'Failed to inspect ZIP archive', { cause }))
127
+ }
128
+
129
+ const parsed = parseZipInfoVerbose(stdout)
130
+ if (!parsed.ok) return parsed
131
+ return validateArchiveEntries(parsed.value, resolveArchiveLimits(options.limits))
132
+ }
133
+
134
+ /** Parse the stable fields emitted by Info-ZIP's verbose central-directory listing. */
135
+ export function parseZipInfoVerbose(output: string): Result<readonly ArchiveEntry[], ArchiveInspectionError> {
136
+ const normalized = output.replaceAll('\r\n', '\n')
137
+ const countMatches = [...normalized.matchAll(/central directory contains (\d+) entr(?:y|ies)\./g)]
138
+ if (countMatches.length !== 1) {
139
+ return invalidListing('ZIP listing does not contain one central-directory entry count')
140
+ }
141
+
142
+ const expectedCountText = countMatches[0]?.[1]
143
+ const expectedCount = expectedCountText === undefined ? Number.NaN : Number(expectedCountText)
144
+ if (!Number.isSafeInteger(expectedCount) || expectedCount < 0) {
145
+ return invalidListing('ZIP listing contains an invalid central-directory entry count')
146
+ }
147
+ if (expectedCount === 0) {
148
+ return Err(new ArchiveInspectionError('empty_archive', 'Empty ZIP archives are not accepted'))
149
+ }
150
+
151
+ const markers = [...normalized.matchAll(/^Central directory entry #(\d+):\n-+\n/gm)]
152
+ if (markers.length !== expectedCount) {
153
+ return invalidListing(`ZIP listing declared ${expectedCount} entries but described ${markers.length}`)
154
+ }
155
+
156
+ const entries: ArchiveEntry[] = []
157
+ for (let index = 0; index < markers.length; index++) {
158
+ const marker = markers[index]
159
+ const nextMarker = markers[index + 1]
160
+ if (marker === undefined || marker.index === undefined) {
161
+ return invalidListing('ZIP listing contains an entry without a location')
162
+ }
163
+
164
+ const declaredIndex = marker[1] === undefined ? Number.NaN : Number(marker[1])
165
+ if (declaredIndex !== index + 1) {
166
+ return invalidListing('ZIP listing entry numbers are not sequential')
167
+ }
168
+
169
+ const bodyStart = marker.index + marker[0].length
170
+ const bodyEnd = nextMarker?.index ?? normalized.length
171
+ const body = normalized.slice(bodyStart, bodyEnd)
172
+ const nameMatch = /^\n {2}([^\n]*)\n\n/.exec(body)
173
+ if (nameMatch?.[1] === undefined || nameMatch[1].length === 0) {
174
+ return invalidListing(`ZIP listing entry #${index + 1} has no unambiguous filename`)
175
+ }
176
+
177
+ const name = nameMatch[1]
178
+ const size = parseSingleIntegerField(body, 'uncompressed size')
179
+ const filenameLength = parseSingleIntegerField(body, 'length of filename')
180
+ if (!size.ok) return size
181
+ if (!filenameLength.ok) return filenameLength
182
+ if (new TextEncoder().encode(name).byteLength !== filenameLength.value) {
183
+ return invalidListing(`ZIP listing entry #${index + 1} has an ambiguous filename`)
184
+ }
185
+
186
+ const type = parseEntryType(body, name)
187
+ if (!type.ok) return type
188
+
189
+ entries.push({
190
+ name,
191
+ uncompressedSize: size.value,
192
+ type: type.value,
193
+ })
194
+ }
195
+
196
+ return Ok(entries)
197
+ }
198
+
199
+ export function validateArchiveEntries(
200
+ entries: readonly ArchiveEntry[],
201
+ limits: Readonly<ArchiveLimits> = DEFAULT_ARCHIVE_LIMITS,
202
+ ): Result<ArchiveInspection, ArchiveInspectionError> {
203
+ if (!isValidLimit(limits.maxEntries) || !isValidLimit(limits.maxTotalUncompressedSize)) {
204
+ return invalidListing('Archive limits must be non-negative safe integers')
205
+ }
206
+ if (entries.length === 0) {
207
+ return Err(new ArchiveInspectionError('empty_archive', 'Empty ZIP archives are not accepted'))
208
+ }
209
+ if (entries.length > limits.maxEntries) {
210
+ return Err(new ArchiveInspectionError(
211
+ 'too_many_entries',
212
+ `ZIP archive exceeds the ${limits.maxEntries} entry limit`,
213
+ ))
214
+ }
215
+
216
+ let fileCount = 0
217
+ let directoryCount = 0
218
+ let totalUncompressedSize = 0
219
+
220
+ for (const entry of entries) {
221
+ const pathError = validateArchivePath(entry.name)
222
+ if (pathError !== null) {
223
+ return Err(new ArchiveInspectionError('unsafe_path', pathError, { entryName: entry.name }))
224
+ }
225
+ if (!isValidLimit(entry.uncompressedSize)) {
226
+ return invalidListing(`ZIP entry has an invalid uncompressed size: ${entry.name}`)
227
+ }
228
+
229
+ if (entry.type === 'directory') {
230
+ if (!entry.name.endsWith('/') || entry.uncompressedSize !== 0) {
231
+ return Err(new ArchiveInspectionError(
232
+ 'unsupported_entry_type',
233
+ 'ZIP directory entry has an inconsistent name or size',
234
+ { entryName: entry.name },
235
+ ))
236
+ }
237
+ directoryCount++
238
+ continue
239
+ }
240
+
241
+ if (entry.name.endsWith('/')) {
242
+ return Err(new ArchiveInspectionError(
243
+ 'unsupported_entry_type',
244
+ 'ZIP regular file entry has a directory name',
245
+ { entryName: entry.name },
246
+ ))
247
+ }
248
+ fileCount++
249
+ totalUncompressedSize += entry.uncompressedSize
250
+ if (!Number.isSafeInteger(totalUncompressedSize) || totalUncompressedSize > limits.maxTotalUncompressedSize) {
251
+ return Err(new ArchiveInspectionError(
252
+ 'too_large',
253
+ `ZIP archive exceeds the ${limits.maxTotalUncompressedSize} byte uncompressed size limit`,
254
+ ))
255
+ }
256
+ }
257
+
258
+ return Ok({ entries, fileCount, directoryCount, totalUncompressedSize })
259
+ }
260
+
261
+ function parseEntryType(
262
+ body: string,
263
+ name: string,
264
+ ): Result<ArchiveEntry['type'], ArchiveInspectionError> {
265
+ const origin = parseSingleTextField(body, 'file system or operating system of origin')
266
+ if (!origin.ok) return origin
267
+
268
+ let type: ArchiveEntry['type']
269
+ if (origin.value === 'Unix') {
270
+ const modeMatches = [...body.matchAll(/^ {2}Unix file attributes \(([0-7]{6}) octal\):\s+.*$/gm)]
271
+ const modeText = modeMatches[0]?.[1]
272
+ if (modeMatches.length !== 1 || modeText === undefined) {
273
+ return invalidListing('ZIP listing entry has invalid Unix file attributes')
274
+ }
275
+ const kind = Number.parseInt(modeText, 8) & 0o170000
276
+ if (kind === 0o100000) type = 'file'
277
+ else if (kind === 0o040000) type = 'directory'
278
+ else return unsupportedEntryType(name)
279
+ } else if (origin.value === 'MS-DOS, OS/2 or NT FAT') {
280
+ const attributeMatches = [...body.matchAll(/^ {2}MS-DOS file attributes \(([0-9A-Fa-f]{2}) hex\):\s+.*$/gm)]
281
+ const attributesText = attributeMatches[0]?.[1]
282
+ if (attributeMatches.length !== 1 || attributesText === undefined) {
283
+ return invalidListing('ZIP listing entry has invalid MS-DOS file attributes')
284
+ }
285
+ const attributes = Number.parseInt(attributesText, 16)
286
+ if ((attributes & 0x08) !== 0) return unsupportedEntryType(name)
287
+ type = (attributes & 0x10) !== 0 ? 'directory' : 'file'
288
+ } else {
289
+ return unsupportedEntryType(name)
290
+ }
291
+
292
+ if ((type === 'directory') !== name.endsWith('/')) {
293
+ return Err(new ArchiveInspectionError(
294
+ 'unsupported_entry_type',
295
+ 'ZIP entry name and file type are inconsistent',
296
+ { entryName: name },
297
+ ))
298
+ }
299
+ return Ok(type)
300
+ }
301
+
302
+ function parseSingleIntegerField(
303
+ body: string,
304
+ field: 'uncompressed size' | 'length of filename',
305
+ ): Result<number, ArchiveInspectionError> {
306
+ const expression = new RegExp(`^ ${field}:\\s+(\\d+)(?: bytes| characters)$`, 'gm')
307
+ const matches = [...body.matchAll(expression)]
308
+ const valueText = matches[0]?.[1]
309
+ const value = valueText === undefined ? Number.NaN : Number(valueText)
310
+ if (matches.length !== 1 || !Number.isSafeInteger(value) || value < 0) {
311
+ return invalidListing(`ZIP listing entry has an invalid ${field} field`)
312
+ }
313
+ return Ok(value)
314
+ }
315
+
316
+ function parseSingleTextField(
317
+ body: string,
318
+ field: 'file system or operating system of origin',
319
+ ): Result<string, ArchiveInspectionError> {
320
+ const expression = new RegExp(`^ ${field}:\\s+(.+)$`, 'gm')
321
+ const matches = [...body.matchAll(expression)]
322
+ const value = matches[0]?.[1]
323
+ if (matches.length !== 1 || value === undefined || value.length === 0) {
324
+ return invalidListing(`ZIP listing entry has an invalid ${field} field`)
325
+ }
326
+ return Ok(value)
327
+ }
328
+
329
+ function validateArchivePath(name: string): string | null {
330
+ if (name.includes('\0')) return 'ZIP entry name contains a NUL byte'
331
+ if (name.includes('\\')) return 'ZIP entry name contains a backslash'
332
+ if (name.startsWith('/')) return 'ZIP entry path is absolute'
333
+ if (/^[A-Za-z]:/.test(name)) return 'ZIP entry path contains a drive prefix'
334
+
335
+ if (name.split('/').some(segment => segment === '..')) {
336
+ return 'ZIP entry path escapes the extraction root'
337
+ }
338
+ return null
339
+ }
340
+
341
+ function unsupportedEntryType(name: string): Result<never, ArchiveInspectionError> {
342
+ return Err(new ArchiveInspectionError(
343
+ 'unsupported_entry_type',
344
+ 'ZIP archive contains a symlink or unsupported special entry',
345
+ { entryName: name },
346
+ ))
347
+ }
348
+
349
+ function invalidListing(message: string): Result<never, ArchiveInspectionError> {
350
+ return Err(new ArchiveInspectionError('invalid_listing', message))
351
+ }
352
+
353
+ function isValidLimit(value: number): boolean {
354
+ return Number.isSafeInteger(value) && value >= 0
355
+ }
356
+
357
+ function abortedError(signal: AbortSignal): ArchiveInspectionError {
358
+ return new ArchiveInspectionError('aborted', 'ZIP archive inspection was aborted', { cause: signal.reason })
359
+ }
@@ -0,0 +1,17 @@
1
+ export {
2
+ ArchiveBudget,
3
+ ArchiveInspectionError,
4
+ DEFAULT_ARCHIVE_LIMITS,
5
+ inspectZipArchive,
6
+ parseZipInfoVerbose,
7
+ resolveArchiveLimits,
8
+ validateArchiveEntries,
9
+ } from './archive-inspection.js'
10
+ export type {
11
+ ArchiveEntry,
12
+ ArchiveInspection,
13
+ ArchiveInspectionErrorCode,
14
+ ArchiveLimitOverrides,
15
+ ArchiveLimits,
16
+ InspectZipArchiveOptions,
17
+ } from './archive-inspection.js'