@geminixiang/mikan 1.0.0-beta.78 → 1.0.0-beta.79

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 (471) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/adapters/commands/admin.js +1 -1
  3. package/dist/adapters/commands/admin.js.map +1 -1
  4. package/dist/adapters/commands/login.d.ts.map +1 -1
  5. package/dist/adapters/commands/login.js +3 -2
  6. package/dist/adapters/commands/login.js.map +1 -1
  7. package/dist/adapters/commands/manifest.d.ts +0 -1
  8. package/dist/adapters/commands/manifest.d.ts.map +1 -1
  9. package/dist/adapters/commands/manifest.js.map +1 -1
  10. package/dist/adapters/commands/model.d.ts +0 -1
  11. package/dist/adapters/commands/model.d.ts.map +1 -1
  12. package/dist/adapters/commands/model.js +8 -20
  13. package/dist/adapters/commands/model.js.map +1 -1
  14. package/dist/adapters/commands/new.js +1 -1
  15. package/dist/adapters/commands/new.js.map +1 -1
  16. package/dist/adapters/commands/registry.js +1 -1
  17. package/dist/adapters/commands/registry.js.map +1 -1
  18. package/dist/adapters/commands/sandbox.d.ts +0 -1
  19. package/dist/adapters/commands/sandbox.d.ts.map +1 -1
  20. package/dist/adapters/commands/sandbox.js +1 -1
  21. package/dist/adapters/commands/sandbox.js.map +1 -1
  22. package/dist/adapters/commands/types.d.ts +6 -17
  23. package/dist/adapters/commands/types.d.ts.map +1 -1
  24. package/dist/adapters/commands/types.js.map +1 -1
  25. package/dist/adapters/commands/utils.d.ts +1 -1
  26. package/dist/adapters/commands/utils.d.ts.map +1 -1
  27. package/dist/adapters/commands/utils.js.map +1 -1
  28. package/dist/adapters/discord/bot.d.ts +4 -10
  29. package/dist/adapters/discord/bot.d.ts.map +1 -1
  30. package/dist/adapters/discord/bot.js +26 -22
  31. package/dist/adapters/discord/bot.js.map +1 -1
  32. package/dist/adapters/discord/components.d.ts +0 -1
  33. package/dist/adapters/discord/components.d.ts.map +1 -1
  34. package/dist/adapters/discord/components.js.map +1 -1
  35. package/dist/adapters/discord/context.d.ts +3 -3
  36. package/dist/adapters/discord/context.d.ts.map +1 -1
  37. package/dist/adapters/discord/context.js +1 -1
  38. package/dist/adapters/discord/context.js.map +1 -1
  39. package/dist/adapters/discord/types.d.ts +83 -1
  40. package/dist/adapters/discord/types.d.ts.map +1 -1
  41. package/dist/adapters/discord/types.js.map +1 -1
  42. package/dist/adapters/github/bot.d.ts +4 -5
  43. package/dist/adapters/github/bot.d.ts.map +1 -1
  44. package/dist/adapters/github/bot.js +10 -10
  45. package/dist/adapters/github/bot.js.map +1 -1
  46. package/dist/adapters/github/client.js +1 -1
  47. package/dist/adapters/github/client.js.map +1 -1
  48. package/dist/adapters/github/context.d.ts +3 -4
  49. package/dist/adapters/github/context.d.ts.map +1 -1
  50. package/dist/adapters/github/context.js +1 -2
  51. package/dist/adapters/github/context.js.map +1 -1
  52. package/dist/adapters/github/github-ops.d.ts +5 -6
  53. package/dist/adapters/github/github-ops.d.ts.map +1 -1
  54. package/dist/adapters/github/github-ops.js +1 -2
  55. package/dist/adapters/github/github-ops.js.map +1 -1
  56. package/dist/adapters/github/ids.d.ts +0 -3
  57. package/dist/adapters/github/ids.d.ts.map +1 -1
  58. package/dist/adapters/github/ids.js +0 -19
  59. package/dist/adapters/github/ids.js.map +1 -1
  60. package/dist/adapters/github/repo.d.ts +1 -1
  61. package/dist/adapters/github/repo.js.map +1 -1
  62. package/dist/adapters/github/tools/checks.d.ts +6 -4
  63. package/dist/adapters/github/tools/checks.d.ts.map +1 -1
  64. package/dist/adapters/github/tools/checks.js +4 -3
  65. package/dist/adapters/github/tools/checks.js.map +1 -1
  66. package/dist/adapters/github/tools/issue.d.ts +10 -8
  67. package/dist/adapters/github/tools/issue.d.ts.map +1 -1
  68. package/dist/adapters/github/tools/issue.js +4 -3
  69. package/dist/adapters/github/tools/issue.js.map +1 -1
  70. package/dist/adapters/github/tools/pr.d.ts +8 -6
  71. package/dist/adapters/github/tools/pr.d.ts.map +1 -1
  72. package/dist/adapters/github/tools/pr.js +4 -3
  73. package/dist/adapters/github/tools/pr.js.map +1 -1
  74. package/dist/adapters/github/tools/read.d.ts +9 -7
  75. package/dist/adapters/github/tools/read.d.ts.map +1 -1
  76. package/dist/adapters/github/tools/read.js +4 -3
  77. package/dist/adapters/github/tools/read.js.map +1 -1
  78. package/dist/adapters/github/tools/review-reply.d.ts +6 -4
  79. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -1
  80. package/dist/adapters/github/tools/review-reply.js +4 -3
  81. package/dist/adapters/github/tools/review-reply.js.map +1 -1
  82. package/dist/adapters/github/tools/sync.d.ts +5 -3
  83. package/dist/adapters/github/tools/sync.d.ts.map +1 -1
  84. package/dist/adapters/github/tools/sync.js +4 -3
  85. package/dist/adapters/github/tools/sync.js.map +1 -1
  86. package/dist/adapters/github/types.d.ts +5 -4
  87. package/dist/adapters/github/types.d.ts.map +1 -1
  88. package/dist/adapters/github/types.js.map +1 -1
  89. package/dist/adapters/github/webhook.d.ts +0 -1
  90. package/dist/adapters/github/webhook.d.ts.map +1 -1
  91. package/dist/adapters/github/webhook.js.map +1 -1
  92. package/dist/adapters/intake.d.ts +1 -1
  93. package/dist/adapters/intake.d.ts.map +1 -1
  94. package/dist/adapters/intake.js.map +1 -1
  95. package/dist/adapters/markdown-tables.d.ts +0 -1
  96. package/dist/adapters/markdown-tables.d.ts.map +1 -1
  97. package/dist/adapters/markdown-tables.js.map +1 -1
  98. package/dist/adapters/messages.d.ts +1 -1
  99. package/dist/adapters/messages.d.ts.map +1 -1
  100. package/dist/adapters/messages.js.map +1 -1
  101. package/dist/adapters/progressive-renderer.d.ts +1 -1
  102. package/dist/adapters/progressive-renderer.d.ts.map +1 -1
  103. package/dist/adapters/progressive-renderer.js +8 -6
  104. package/dist/adapters/progressive-renderer.js.map +1 -1
  105. package/dist/adapters/shared.d.ts +6 -4
  106. package/dist/adapters/shared.d.ts.map +1 -1
  107. package/dist/adapters/shared.js +39 -25
  108. package/dist/adapters/shared.js.map +1 -1
  109. package/dist/adapters/slack/assistant.d.ts +0 -1
  110. package/dist/adapters/slack/assistant.d.ts.map +1 -1
  111. package/dist/adapters/slack/assistant.js +2 -1
  112. package/dist/adapters/slack/assistant.js.map +1 -1
  113. package/dist/adapters/slack/bot.d.ts +5 -10
  114. package/dist/adapters/slack/bot.d.ts.map +1 -1
  115. package/dist/adapters/slack/bot.js +84 -86
  116. package/dist/adapters/slack/bot.js.map +1 -1
  117. package/dist/adapters/slack/context.d.ts +3 -5
  118. package/dist/adapters/slack/context.d.ts.map +1 -1
  119. package/dist/adapters/slack/context.js +1 -2
  120. package/dist/adapters/slack/context.js.map +1 -1
  121. package/dist/adapters/slack/jev-context.d.ts.map +1 -1
  122. package/dist/adapters/slack/jev-context.js +4 -2
  123. package/dist/adapters/slack/jev-context.js.map +1 -1
  124. package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
  125. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  126. package/dist/adapters/slack/response-lifecycle.js +5 -3
  127. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  128. package/dist/adapters/slack/session.d.ts +1 -1
  129. package/dist/adapters/slack/session.d.ts.map +1 -1
  130. package/dist/adapters/slack/session.js.map +1 -1
  131. package/dist/adapters/slack/task-intent.js +1 -1
  132. package/dist/adapters/slack/task-intent.js.map +1 -1
  133. package/dist/adapters/slack/task-status.d.ts.map +1 -1
  134. package/dist/adapters/slack/task-status.js +2 -1
  135. package/dist/adapters/slack/task-status.js.map +1 -1
  136. package/dist/adapters/slack/tool-pack.d.ts +0 -1
  137. package/dist/adapters/slack/tool-pack.d.ts.map +1 -1
  138. package/dist/adapters/slack/tool-pack.js +2 -1
  139. package/dist/adapters/slack/tool-pack.js.map +1 -1
  140. package/dist/adapters/slack/tools/blockkit.d.ts +9 -7
  141. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -1
  142. package/dist/adapters/slack/tools/blockkit.js +6 -4
  143. package/dist/adapters/slack/tools/blockkit.js.map +1 -1
  144. package/dist/adapters/slack/types.d.ts +36 -2
  145. package/dist/adapters/slack/types.d.ts.map +1 -1
  146. package/dist/adapters/slack/types.js.map +1 -1
  147. package/dist/adapters/telegram/bot.d.ts +3 -8
  148. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  149. package/dist/adapters/telegram/bot.js +11 -11
  150. package/dist/adapters/telegram/bot.js.map +1 -1
  151. package/dist/adapters/telegram/context.d.ts +3 -3
  152. package/dist/adapters/telegram/context.d.ts.map +1 -1
  153. package/dist/adapters/telegram/context.js +2 -2
  154. package/dist/adapters/telegram/context.js.map +1 -1
  155. package/dist/adapters/telegram/types.d.ts +24 -1
  156. package/dist/adapters/telegram/types.d.ts.map +1 -1
  157. package/dist/adapters/telegram/types.js.map +1 -1
  158. package/dist/adapters/types.d.ts +1 -2
  159. package/dist/adapters/types.d.ts.map +1 -1
  160. package/dist/adapters/types.js.map +1 -1
  161. package/dist/adapters/web/admin/client-assets.d.ts +1 -1
  162. package/dist/adapters/web/admin/client-assets.d.ts.map +1 -1
  163. package/dist/adapters/web/admin/client-assets.js +3 -2
  164. package/dist/adapters/web/admin/client-assets.js.map +1 -1
  165. package/dist/adapters/web/admin/portal.d.ts +4 -11
  166. package/dist/adapters/web/admin/portal.d.ts.map +1 -1
  167. package/dist/adapters/web/admin/portal.js +27 -30
  168. package/dist/adapters/web/admin/portal.js.map +1 -1
  169. package/dist/adapters/web/admin/provider-models.d.ts +1 -1
  170. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -1
  171. package/dist/adapters/web/admin/provider-models.js.map +1 -1
  172. package/dist/adapters/web/admin/types.d.ts +10 -4
  173. package/dist/adapters/web/admin/types.d.ts.map +1 -1
  174. package/dist/adapters/web/admin/types.js.map +1 -1
  175. package/dist/adapters/web/login/oauth.d.ts +0 -1
  176. package/dist/adapters/web/login/oauth.d.ts.map +1 -1
  177. package/dist/adapters/web/login/oauth.js +12 -12
  178. package/dist/adapters/web/login/oauth.js.map +1 -1
  179. package/dist/adapters/web/login/portal.d.ts +3 -6
  180. package/dist/adapters/web/login/portal.d.ts.map +1 -1
  181. package/dist/adapters/web/login/portal.js +5 -4
  182. package/dist/adapters/web/login/portal.js.map +1 -1
  183. package/dist/adapters/web/login/types.d.ts +1 -1
  184. package/dist/adapters/web/login/types.d.ts.map +1 -1
  185. package/dist/adapters/web/login/types.js.map +1 -1
  186. package/dist/adapters/web/portal-shell.d.ts +0 -1
  187. package/dist/adapters/web/portal-shell.d.ts.map +1 -1
  188. package/dist/adapters/web/portal-shell.js.map +1 -1
  189. package/dist/adapters/web/server.d.ts +6 -6
  190. package/dist/adapters/web/server.d.ts.map +1 -1
  191. package/dist/adapters/web/server.js +3 -2
  192. package/dist/adapters/web/server.js.map +1 -1
  193. package/dist/adapters/web/session-view/portal.d.ts +2 -3
  194. package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
  195. package/dist/adapters/web/session-view/portal.js +12 -12
  196. package/dist/adapters/web/session-view/portal.js.map +1 -1
  197. package/dist/adapters/web/session-view/types.d.ts +1 -11
  198. package/dist/adapters/web/session-view/types.d.ts.map +1 -1
  199. package/dist/adapters/web/session-view/types.js.map +1 -1
  200. package/dist/adapters/web/token-store.d.ts +0 -1
  201. package/dist/adapters/web/token-store.d.ts.map +1 -1
  202. package/dist/adapters/web/token-store.js.map +1 -1
  203. package/dist/cli/boot.d.ts +0 -1
  204. package/dist/cli/boot.d.ts.map +1 -1
  205. package/dist/cli/boot.js +4 -4
  206. package/dist/cli/boot.js.map +1 -1
  207. package/dist/cli/office.d.ts.map +1 -1
  208. package/dist/cli/office.js +4 -3
  209. package/dist/cli/office.js.map +1 -1
  210. package/dist/cli/onboard.js +1 -1
  211. package/dist/cli/onboard.js.map +1 -1
  212. package/dist/cli/sandbox.d.ts.map +1 -1
  213. package/dist/cli/sandbox.js +2 -1
  214. package/dist/cli/sandbox.js.map +1 -1
  215. package/dist/cli/sessions.d.ts.map +1 -1
  216. package/dist/cli/sessions.js +2 -1
  217. package/dist/cli/sessions.js.map +1 -1
  218. package/dist/env-manifest.d.ts +1 -1
  219. package/dist/env-manifest.d.ts.map +1 -1
  220. package/dist/env-manifest.js.map +1 -1
  221. package/dist/events/index.d.ts +3 -2
  222. package/dist/events/index.d.ts.map +1 -1
  223. package/dist/events/index.js +11 -10
  224. package/dist/events/index.js.map +1 -1
  225. package/dist/events/scheduler.d.ts +1 -2
  226. package/dist/events/scheduler.d.ts.map +1 -1
  227. package/dist/events/scheduler.js +4 -4
  228. package/dist/events/scheduler.js.map +1 -1
  229. package/dist/file-guards.d.ts +8 -6
  230. package/dist/file-guards.d.ts.map +1 -1
  231. package/dist/file-guards.js +10 -15
  232. package/dist/file-guards.js.map +1 -1
  233. package/dist/harness/execution-env.d.ts +1 -1
  234. package/dist/harness/execution-env.d.ts.map +1 -1
  235. package/dist/harness/execution-env.js +7 -6
  236. package/dist/harness/execution-env.js.map +1 -1
  237. package/dist/harness/execution-resolver.d.ts +4 -6
  238. package/dist/harness/execution-resolver.d.ts.map +1 -1
  239. package/dist/harness/execution-resolver.js +1 -1
  240. package/dist/harness/execution-resolver.js.map +1 -1
  241. package/dist/harness/jev.d.ts +1 -1
  242. package/dist/harness/jev.d.ts.map +1 -1
  243. package/dist/harness/jev.js +1 -4
  244. package/dist/harness/jev.js.map +1 -1
  245. package/dist/harness/mcp-result.d.ts.map +1 -1
  246. package/dist/harness/mcp-result.js +15 -7
  247. package/dist/harness/mcp-result.js.map +1 -1
  248. package/dist/harness/mcp.d.ts +0 -2
  249. package/dist/harness/mcp.d.ts.map +1 -1
  250. package/dist/harness/mcp.js +13 -15
  251. package/dist/harness/mcp.js.map +1 -1
  252. package/dist/harness/models.d.ts +0 -1
  253. package/dist/harness/models.d.ts.map +1 -1
  254. package/dist/harness/models.js +2 -1
  255. package/dist/harness/models.js.map +1 -1
  256. package/dist/harness/open-connector.d.ts +2 -3
  257. package/dist/harness/open-connector.d.ts.map +1 -1
  258. package/dist/harness/open-connector.js +13 -9
  259. package/dist/harness/open-connector.js.map +1 -1
  260. package/dist/harness/presenter.d.ts +4 -25
  261. package/dist/harness/presenter.d.ts.map +1 -1
  262. package/dist/harness/presenter.js +26 -20
  263. package/dist/harness/presenter.js.map +1 -1
  264. package/dist/harness/prompt.d.ts +1 -2
  265. package/dist/harness/prompt.d.ts.map +1 -1
  266. package/dist/harness/prompt.js.map +1 -1
  267. package/dist/harness/runner.d.ts.map +1 -1
  268. package/dist/harness/runner.js +34 -17
  269. package/dist/harness/runner.js.map +1 -1
  270. package/dist/harness/session.d.ts +0 -7
  271. package/dist/harness/session.d.ts.map +1 -1
  272. package/dist/harness/session.js +16 -14
  273. package/dist/harness/session.js.map +1 -1
  274. package/dist/harness/skills.d.ts +2 -5
  275. package/dist/harness/skills.d.ts.map +1 -1
  276. package/dist/harness/skills.js.map +1 -1
  277. package/dist/harness/subagent-profiles.d.ts +0 -1
  278. package/dist/harness/subagent-profiles.d.ts.map +1 -1
  279. package/dist/harness/subagent-profiles.js +12 -16
  280. package/dist/harness/subagent-profiles.js.map +1 -1
  281. package/dist/harness/subagent.d.ts +1 -1
  282. package/dist/harness/subagent.d.ts.map +1 -1
  283. package/dist/harness/subagent.js +17 -17
  284. package/dist/harness/subagent.js.map +1 -1
  285. package/dist/harness/tool-args.d.ts +2 -0
  286. package/dist/harness/tool-args.d.ts.map +1 -0
  287. package/dist/harness/tool-args.js +20 -0
  288. package/dist/harness/tool-args.js.map +1 -0
  289. package/dist/harness/tools/attach.d.ts +5 -4
  290. package/dist/harness/tools/attach.d.ts.map +1 -1
  291. package/dist/harness/tools/attach.js +1 -1
  292. package/dist/harness/tools/attach.js.map +1 -1
  293. package/dist/harness/tools/event.d.ts +12 -11
  294. package/dist/harness/tools/event.d.ts.map +1 -1
  295. package/dist/harness/tools/event.js +1 -1
  296. package/dist/harness/tools/event.js.map +1 -1
  297. package/dist/harness/tools/generate-image.d.ts +7 -5
  298. package/dist/harness/tools/generate-image.d.ts.map +1 -1
  299. package/dist/harness/tools/generate-image.js +7 -5
  300. package/dist/harness/tools/generate-image.js.map +1 -1
  301. package/dist/harness/tools/host-fn-tool.d.ts +3 -2
  302. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -1
  303. package/dist/harness/tools/host-fn-tool.js +5 -2
  304. package/dist/harness/tools/host-fn-tool.js.map +1 -1
  305. package/dist/harness/tools/index.d.ts +3 -4
  306. package/dist/harness/tools/index.d.ts.map +1 -1
  307. package/dist/harness/tools/index.js +1 -3
  308. package/dist/harness/tools/index.js.map +1 -1
  309. package/dist/harness/tools/jev-browser.d.ts +12 -10
  310. package/dist/harness/tools/jev-browser.d.ts.map +1 -1
  311. package/dist/harness/tools/jev-browser.js +6 -4
  312. package/dist/harness/tools/jev-browser.js.map +1 -1
  313. package/dist/harness/tools/jev.d.ts +9 -7
  314. package/dist/harness/tools/jev.d.ts.map +1 -1
  315. package/dist/harness/tools/jev.js +5 -6
  316. package/dist/harness/tools/jev.js.map +1 -1
  317. package/dist/harness/tools/pi-tools.d.ts.map +1 -1
  318. package/dist/harness/tools/pi-tools.js +2 -2
  319. package/dist/harness/tools/pi-tools.js.map +1 -1
  320. package/dist/harness/tools/react.d.ts +3 -2
  321. package/dist/harness/tools/react.d.ts.map +1 -1
  322. package/dist/harness/tools/react.js +1 -1
  323. package/dist/harness/tools/react.js.map +1 -1
  324. package/dist/harness/tools/sandbox.d.ts +7 -6
  325. package/dist/harness/tools/sandbox.d.ts.map +1 -1
  326. package/dist/harness/tools/sandbox.js +3 -2
  327. package/dist/harness/tools/sandbox.js.map +1 -1
  328. package/dist/harness/tools/subagent.d.ts +26 -26
  329. package/dist/harness/tools/subagent.d.ts.map +1 -1
  330. package/dist/harness/tools/subagent.js +25 -29
  331. package/dist/harness/tools/subagent.js.map +1 -1
  332. package/dist/harness/tools/task.d.ts +11 -8
  333. package/dist/harness/tools/task.d.ts.map +1 -1
  334. package/dist/harness/tools/task.js +8 -6
  335. package/dist/harness/tools/task.js.map +1 -1
  336. package/dist/harness/tools/types.d.ts +2 -1
  337. package/dist/harness/tools/types.d.ts.map +1 -1
  338. package/dist/harness/tools/types.js.map +1 -1
  339. package/dist/harness/types.d.ts +37 -4
  340. package/dist/harness/types.d.ts.map +1 -1
  341. package/dist/harness/types.js.map +1 -1
  342. package/dist/index.d.ts +16 -13
  343. package/dist/index.d.ts.map +1 -1
  344. package/dist/index.js +3 -2
  345. package/dist/index.js.map +1 -1
  346. package/dist/log.d.ts +0 -1
  347. package/dist/log.d.ts.map +1 -1
  348. package/dist/log.js +1 -1
  349. package/dist/log.js.map +1 -1
  350. package/dist/main.js +27 -17
  351. package/dist/main.js.map +1 -1
  352. package/dist/memory-capture/index.d.ts +1 -2
  353. package/dist/memory-capture/index.d.ts.map +1 -1
  354. package/dist/memory-capture/index.js +8 -3
  355. package/dist/memory-capture/index.js.map +1 -1
  356. package/dist/memory-capture/types.d.ts +1 -1
  357. package/dist/memory-capture/types.js.map +1 -1
  358. package/dist/observability/index.d.ts +0 -3
  359. package/dist/observability/index.d.ts.map +1 -1
  360. package/dist/observability/index.js +11 -16
  361. package/dist/observability/index.js.map +1 -1
  362. package/dist/observability/sentry.d.ts +9 -12
  363. package/dist/observability/sentry.d.ts.map +1 -1
  364. package/dist/observability/sentry.js +9 -118
  365. package/dist/observability/sentry.js.map +1 -1
  366. package/dist/office/index.d.ts +14 -3
  367. package/dist/office/index.d.ts.map +1 -1
  368. package/dist/office/index.js +51 -14
  369. package/dist/office/index.js.map +1 -1
  370. package/dist/office/projection.d.ts +1 -3
  371. package/dist/office/projection.d.ts.map +1 -1
  372. package/dist/office/projection.js +5 -5
  373. package/dist/office/projection.js.map +1 -1
  374. package/dist/office/types.d.ts +5 -0
  375. package/dist/office/types.d.ts.map +1 -1
  376. package/dist/office/types.js.map +1 -1
  377. package/dist/runtime/conversation-runtime.d.ts +0 -1
  378. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  379. package/dist/runtime/conversation-runtime.js +10 -6
  380. package/dist/runtime/conversation-runtime.js.map +1 -1
  381. package/dist/runtime/session-lifecycle.d.ts.map +1 -1
  382. package/dist/runtime/session-lifecycle.js +2 -1
  383. package/dist/runtime/session-lifecycle.js.map +1 -1
  384. package/dist/runtime/types.d.ts +8 -5
  385. package/dist/runtime/types.d.ts.map +1 -1
  386. package/dist/runtime/types.js.map +1 -1
  387. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  388. package/dist/sandbox/cloudflare.js +3 -2
  389. package/dist/sandbox/cloudflare.js.map +1 -1
  390. package/dist/sandbox/container.d.ts.map +1 -1
  391. package/dist/sandbox/container.js +2 -1
  392. package/dist/sandbox/container.js.map +1 -1
  393. package/dist/sandbox/host.js +1 -1
  394. package/dist/sandbox/host.js.map +1 -1
  395. package/dist/sandbox/identity.d.ts +0 -1
  396. package/dist/sandbox/identity.d.ts.map +1 -1
  397. package/dist/sandbox/identity.js.map +1 -1
  398. package/dist/sandbox/index.d.ts +4 -14
  399. package/dist/sandbox/index.d.ts.map +1 -1
  400. package/dist/sandbox/index.js +4 -93
  401. package/dist/sandbox/index.js.map +1 -1
  402. package/dist/sandbox/provisioner.d.ts +0 -1
  403. package/dist/sandbox/provisioner.d.ts.map +1 -1
  404. package/dist/sandbox/provisioner.js +12 -11
  405. package/dist/sandbox/provisioner.js.map +1 -1
  406. package/dist/sandbox/registry.d.ts +12 -0
  407. package/dist/sandbox/registry.d.ts.map +1 -0
  408. package/dist/sandbox/registry.js +93 -0
  409. package/dist/sandbox/registry.js.map +1 -0
  410. package/dist/sandbox/types.d.ts +3 -0
  411. package/dist/sandbox/types.d.ts.map +1 -1
  412. package/dist/sandbox/types.js.map +1 -1
  413. package/dist/sandbox/utils.d.ts.map +1 -1
  414. package/dist/sandbox/utils.js +1 -0
  415. package/dist/sandbox/utils.js.map +1 -1
  416. package/dist/sessions/chat-history-sync.d.ts +2 -2
  417. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  418. package/dist/sessions/chat-history-sync.js +32 -23
  419. package/dist/sessions/chat-history-sync.js.map +1 -1
  420. package/dist/sessions/migrate-common.js +2 -2
  421. package/dist/sessions/migrate-common.js.map +1 -1
  422. package/dist/sessions/migrate-pi-084.d.ts +0 -1
  423. package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
  424. package/dist/sessions/migrate-pi-084.js +4 -6
  425. package/dist/sessions/migrate-pi-084.js.map +1 -1
  426. package/dist/sessions/migrate-v3.d.ts +0 -1
  427. package/dist/sessions/migrate-v3.d.ts.map +1 -1
  428. package/dist/sessions/migrate-v3.js +3 -5
  429. package/dist/sessions/migrate-v3.js.map +1 -1
  430. package/dist/sessions/session-key.d.ts +0 -1
  431. package/dist/sessions/session-key.d.ts.map +1 -1
  432. package/dist/sessions/session-key.js.map +1 -1
  433. package/dist/sessions/session-store.d.ts.map +1 -1
  434. package/dist/sessions/session-store.js +12 -19
  435. package/dist/sessions/session-store.js.map +1 -1
  436. package/dist/sessions/store.d.ts +0 -1
  437. package/dist/sessions/store.d.ts.map +1 -1
  438. package/dist/sessions/store.js +5 -3
  439. package/dist/sessions/store.js.map +1 -1
  440. package/dist/sessions/types.d.ts +2 -0
  441. package/dist/sessions/types.d.ts.map +1 -1
  442. package/dist/sessions/types.js +1 -0
  443. package/dist/sessions/types.js.map +1 -1
  444. package/dist/settings/apply.d.ts +1 -2
  445. package/dist/settings/apply.d.ts.map +1 -1
  446. package/dist/settings/apply.js.map +1 -1
  447. package/dist/settings/index.d.ts +37 -34
  448. package/dist/settings/index.d.ts.map +1 -1
  449. package/dist/settings/index.js +28 -22
  450. package/dist/settings/index.js.map +1 -1
  451. package/dist/settings/migrate.d.ts +1 -1
  452. package/dist/settings/migrate.d.ts.map +1 -1
  453. package/dist/settings/migrate.js +5 -4
  454. package/dist/settings/migrate.js.map +1 -1
  455. package/dist/types.d.ts +17 -6
  456. package/dist/types.d.ts.map +1 -1
  457. package/dist/types.js +1 -3
  458. package/dist/types.js.map +1 -1
  459. package/dist/unknown-values.d.ts +3 -0
  460. package/dist/unknown-values.d.ts.map +1 -0
  461. package/dist/unknown-values.js +7 -0
  462. package/dist/unknown-values.js.map +1 -0
  463. package/dist/vault/index.d.ts +10 -2
  464. package/dist/vault/index.d.ts.map +1 -1
  465. package/dist/vault/index.js +16 -7
  466. package/dist/vault/index.js.map +1 -1
  467. package/package.json +3 -2
  468. package/dist/adapters/index.d.ts +0 -11
  469. package/dist/adapters/index.d.ts.map +0 -1
  470. package/dist/adapters/index.js +0 -19
  471. package/dist/adapters/index.js.map +0 -1
@@ -1,19 +1,18 @@
1
1
  import { SocketModeClient } from "@slack/socket-mode";
2
2
  import { WebAPIRateLimitedError, WebClient } from "@slack/web-api";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
- import { readFile, writeFile } from "node:fs/promises";
5
- import { basename, join } from "node:path";
6
- import { createConversationEvent, createConversationMessage, } from "../index.js";
7
- import { createOfficeAddress, listRegisteredOffices } from "../../office/index.js";
4
+ import { readFile } from "node:fs/promises";
5
+ import { basename } from "node:path";
6
+ import { createConversationEvent, createConversationMessage, createOfficeAddress, listRegisteredOffices, } from "../../office/index.js";
8
7
  import { COMMAND_MANIFEST } from "../commands/manifest.js";
9
8
  import { slackConversationAutoReplyMode, resolveConversationSettings, } from "../../settings/index.js";
10
- import { evaluateWithJev, JevNotConfiguredError } from "../../harness/index.js";
9
+ import { evaluateWithJev, JevNotConfiguredError } from "../../harness/jev.js";
11
10
  import * as log from "../../log.js";
12
- import { isRecord, readTextFileIfExists } from "../../file-guards.js";
11
+ import { readTextFileIfExists } from "../../file-guards.js";
13
12
  import { PRODUCT_NAME, formatForceStopped } from "../messages.js";
14
- import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, MessagingIntakeTracker, saveIncomingAttachments, withRetry, } from "../shared.js";
13
+ import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, MessagingIntakeTracker, AttachmentRejectedError, saveIncomingAttachments, writeResponseToFile, withRetry, } from "../shared.js";
15
14
  import { matchMagicWord, processMessageIntake } from "../intake.js";
16
- import { readPlatformChannelKind, recordPlatformChannelKind, } from "../../office/projection.js";
15
+ import { readPlatformChannelKind, recordPlatformChannelKind } from "../../office/projection.js";
17
16
  import { AssistantThreadRegistry, handleAgentContextChanged, handleAgentDmOpened, handleAssistantThreadStarted, titleAssistantThread, } from "./assistant.js";
18
17
  import { createSlackAdapters } from "./context.js";
19
18
  import { hasMaterializedChatSession, registerThreadSession, } from "../../sessions/chat-history-sync.js";
@@ -26,6 +25,7 @@ import { querySlackTasks, formatTaskStatus, readTaskRoots, isTaskStatusQuestion,
26
25
  import { buildAutoReplyState, JEV_ADDRESSED_INSTRUCTIONS } from "./auto-reply-context.js";
27
26
  import { buildTaskIntentState, classifyTaskIntent } from "./task-intent.js";
28
27
  import { StreamStartLimiter } from "./stream-limits.js";
28
+ import { errorMessage, isRecord } from "../../unknown-values.js";
29
29
  const SLACK_EVENT_ANCHOR_TEXT = "Working on it...";
30
30
  function hasMessageContent(message, includeBlocks = true) {
31
31
  const content = [message.text, message.files];
@@ -103,13 +103,24 @@ class AttachmentDownloadHttpError extends Error {
103
103
  }
104
104
  }
105
105
  function isRetryableAttachmentDownloadError(error) {
106
+ if (error instanceof AttachmentRejectedError)
107
+ return false;
106
108
  if (!(error instanceof AttachmentDownloadHttpError))
107
109
  return true;
108
110
  return error.status === 408 || error.status === 429 || error.status >= 500;
109
111
  }
112
+ function assertSlackFileUrl(url) {
113
+ const { protocol, hostname } = new URL(url);
114
+ if (protocol === "https:" && (hostname === "slack.com" || hostname.endsWith(".slack.com")))
115
+ return;
116
+ throw new AttachmentRejectedError(`refusing to send the bot token to ${hostname}`);
117
+ }
110
118
  export class SlackMessagingBot {
119
+ office(channelId) {
120
+ return this.workspace.office(createOfficeAddress("slack", channelId));
121
+ }
111
122
  conversationDir(channelId) {
112
- return this.workspace.office(createOfficeAddress("slack", channelId)).dir;
123
+ return this.office(channelId).dir;
113
124
  }
114
125
  resolveReplyMode(address) {
115
126
  return (resolveConversationSettings(this.workspace.office(address)).slack?.replyMode ?? "top-level");
@@ -215,15 +226,19 @@ export class SlackMessagingBot {
215
226
  this.handler = handler;
216
227
  this.workspace = config.workspace;
217
228
  this.botToken = config.botToken;
218
- this.socketClient = new SocketModeClient({
219
- appToken: config.appToken,
220
- clientPingTimeout: 12_000,
221
- });
222
- this.webClient = new WebClient(config.botToken);
229
+ this.fetchFn = config.fetch ?? ((input, init) => fetch(input, init));
230
+ this.socketClient =
231
+ config.socket ??
232
+ new SocketModeClient({
233
+ appToken: config.appToken,
234
+ clientPingTimeout: 12_000,
235
+ });
236
+ this.webClient = config.webApi ?? new WebClient(config.botToken, { fetch: config.fetch });
223
237
  this.statusClient = new WebClient(config.botToken, {
224
238
  timeout: 3000,
225
239
  retryConfig: { retries: 0 },
226
240
  rejectRateLimitedCalls: true,
241
+ fetch: config.fetch,
227
242
  });
228
243
  }
229
244
  setEventScheduler(scheduler) {
@@ -286,8 +301,9 @@ export class SlackMessagingBot {
286
301
  return slackRetry(async () => {
287
302
  const payload = {
288
303
  channel,
289
- ...(threadTs !== undefined ? { thread_ts: threadTs } : {}),
290
- ...(identity ? { username: identity.username, icon_emoji: identity.iconEmoji } : {}),
304
+ thread_ts: threadTs,
305
+ username: identity?.username,
306
+ icon_emoji: identity?.iconEmoji,
291
307
  ...renderSlackBlocks(this.resolveMentions(text)),
292
308
  };
293
309
  const result = await this.webClient.chat.postMessage(payload);
@@ -313,8 +329,8 @@ export class SlackMessagingBot {
313
329
  channel,
314
330
  user,
315
331
  text,
316
- ...(blocks !== undefined ? { blocks: blocks } : {}),
317
- ...(threadTs ? { thread_ts: threadTs } : {}),
332
+ blocks: blocks,
333
+ thread_ts: threadTs || undefined,
318
334
  });
319
335
  });
320
336
  }
@@ -327,7 +343,7 @@ export class SlackMessagingBot {
327
343
  channel,
328
344
  text,
329
345
  blocks: blocks,
330
- ...(threadTs !== undefined ? { thread_ts: threadTs } : {}),
346
+ thread_ts: threadTs,
331
347
  };
332
348
  const result = await this.webClient.chat.postMessage(payload);
333
349
  return result.ts;
@@ -366,12 +382,14 @@ export class SlackMessagingBot {
366
382
  ? await this.webClient.conversations.replies({
367
383
  channel,
368
384
  ts: threadTs,
369
- ...(options?.oldest ? { oldest: options.oldest, inclusive: false } : {}),
385
+ oldest: options?.oldest || undefined,
386
+ inclusive: options?.oldest ? false : undefined,
370
387
  limit,
371
388
  })
372
389
  : await this.webClient.conversations.history({
373
390
  channel,
374
- ...(options?.oldest ? { oldest: options.oldest, inclusive: false } : {}),
391
+ oldest: options?.oldest || undefined,
392
+ inclusive: options?.oldest ? false : undefined,
375
393
  limit,
376
394
  });
377
395
  const messages = (result.messages ?? []);
@@ -427,9 +445,9 @@ export class SlackMessagingBot {
427
445
  const result = await this.webClient.apiCall("chat.startStream", {
428
446
  channel,
429
447
  markdown_text: this.resolveMentions(head ?? ""),
430
- ...(threadTs ? { thread_ts: threadTs } : {}),
431
- ...(this.teamId ? { recipient_team_id: this.teamId } : {}),
432
- ...(recipientUserId ? { recipient_user_id: recipientUserId } : {}),
448
+ thread_ts: threadTs || undefined,
449
+ recipient_team_id: this.teamId || undefined,
450
+ recipient_user_id: recipientUserId || undefined,
433
451
  });
434
452
  const streamTs = result.ts;
435
453
  if (!streamTs)
@@ -489,7 +507,7 @@ export class SlackMessagingBot {
489
507
  return slackRetry(async () => {
490
508
  await this.webClient.assistant.threads.setSuggestedPrompts({
491
509
  channel_id: channel,
492
- ...(threadTs ? { thread_ts: threadTs } : {}),
510
+ thread_ts: threadTs || undefined,
493
511
  prompts,
494
512
  });
495
513
  });
@@ -518,7 +536,7 @@ export class SlackMessagingBot {
518
536
  return;
519
537
  void handleAssistantThreadStarted(this.assistantOps(), this.assistantThreads, payload.assistant_thread);
520
538
  }
521
- handleAgentContextChangedEvent({ event, ack, }) {
539
+ handleAgentContextChangedEvent({ event, ack }) {
522
540
  ack();
523
541
  const payload = event;
524
542
  if (payload.assistant_thread) {
@@ -560,11 +578,11 @@ export class SlackMessagingBot {
560
578
  logBotResponse(channel, text, ts, threadTs, slackBlocks) {
561
579
  appendBotResponseLog(this.workspace.office(createOfficeAddress("slack", channel)), text, ts, threadTs, {
562
580
  platform: "slack",
563
- ...(slackBlocks ? { slackBlocks } : {}),
581
+ slackBlocks,
564
582
  });
565
583
  }
566
584
  ownsBlockKitMessage(channel, ts, threadTs) {
567
- const content = readTextFileIfExists(join(this.conversationDir(channel), "log.jsonl"));
585
+ const content = readTextFileIfExists(this.office(channel).logPath);
568
586
  if (content === undefined)
569
587
  return false;
570
588
  for (const line of content.trim().split("\n").toReversed()) {
@@ -586,7 +604,7 @@ export class SlackMessagingBot {
586
604
  getMessagingInfo() {
587
605
  return {
588
606
  name: "slack",
589
- ...(this.teamId ? { workspaceId: this.teamId } : {}),
607
+ workspaceId: this.teamId || undefined,
590
608
  trustModel: "membership",
591
609
  formattingGuide: "## Slack Formatting\nWrite standard Markdown/GFM: **bold**, _italic_, ~~strike~~, `code`, fenced code blocks, [links](url), lists, and pipe tables (rendered as native Slack tables).\nDo NOT use Slack mrkdwn syntax like *single-asterisk bold* or <url|label> links.",
592
610
  channels: this.getAllChannels().map((c) => ({ id: c.id, name: c.name })),
@@ -617,7 +635,7 @@ export class SlackMessagingBot {
617
635
  anchorTs = await this.postMessage(conversationId, SLACK_EVENT_ANCHOR_TEXT);
618
636
  }
619
637
  catch (err) {
620
- log.logWarning(`Failed to post Slack event anchor for ${conversationId}`, err instanceof Error ? err.message : String(err));
638
+ log.logWarning(`Failed to post Slack event anchor for ${conversationId}`, errorMessage(err));
621
639
  reportUserFacingError(err, {
622
640
  domain: "events",
623
641
  surface: "event_delivery",
@@ -979,7 +997,7 @@ export class SlackMessagingBot {
979
997
  text: commandText,
980
998
  attachments: [],
981
999
  isMessagingBot: false,
982
- ...(threadTs ? { threadTs } : {}),
1000
+ threadTs: threadTs || undefined,
983
1001
  });
984
1002
  const event = createConversationEvent({
985
1003
  platform: "slack",
@@ -990,7 +1008,7 @@ export class SlackMessagingBot {
990
1008
  user: payload.user_id,
991
1009
  text: commandText,
992
1010
  attachments: [],
993
- ...(threadTs ? { thread_ts: threadTs } : {}),
1011
+ thread_ts: threadTs || undefined,
994
1012
  sessionKey,
995
1013
  });
996
1014
  const context = this.createCommandAdapters({
@@ -999,9 +1017,9 @@ export class SlackMessagingBot {
999
1017
  userName,
1000
1018
  text: commandText,
1001
1019
  ts: eventTs,
1002
- ...(isDirectMessage
1003
- ? { threadTs, sessionKey }
1004
- : { ephemeralChannelId: conversationId, threadTs, sessionKey }),
1020
+ ephemeralChannelId: isDirectMessage ? undefined : conversationId,
1021
+ threadTs,
1022
+ sessionKey,
1005
1023
  });
1006
1024
  return { event, context };
1007
1025
  }
@@ -1009,13 +1027,11 @@ export class SlackMessagingBot {
1009
1027
  const { event, context } = this.buildSlashCommandEvent(payload, {
1010
1028
  includeText: route.includeText,
1011
1029
  thread: route.thread,
1012
- ...(route.privateCommand
1013
- ? {
1014
- type: payload.channel_id.startsWith("D")
1015
- ? "dm"
1016
- : "private_command",
1017
- }
1018
- : {}),
1030
+ type: route.privateCommand
1031
+ ? payload.channel_id.startsWith("D")
1032
+ ? "dm"
1033
+ : "private_command"
1034
+ : undefined,
1019
1035
  });
1020
1036
  await this.handler.handleEvent(event, this, context);
1021
1037
  }
@@ -1029,35 +1045,18 @@ export class SlackMessagingBot {
1029
1045
  this.socketClient.on("unable_to_socket_mode_start", (err) => {
1030
1046
  log.logWarning("Slack socket unable_to_start", err ? String(err) : "");
1031
1047
  });
1032
- this.socketClient.on("app_mention", (payload) => {
1033
- void this.intake.run(() => this.handleAppMention(payload));
1034
- });
1035
- this.socketClient.on("message", (payload) => {
1036
- void this.intake.run(() => this.handleMessageEvent(payload));
1037
- });
1038
- this.socketClient.on("slash_commands", (payload) => {
1039
- void this.intake.run(() => this.handleSlashCommand(payload));
1040
- });
1041
- this.socketClient.on("app_home_opened", (payload) => {
1042
- void this.intake.run(() => this.handleAppHomeOpened(payload));
1043
- });
1044
- this.socketClient.on("assistant_thread_started", (payload) => {
1045
- void this.intake.run(() => this.handleAssistantThreadStarted(payload));
1046
- });
1047
- this.socketClient.on("assistant_thread_context_changed", (payload) => {
1048
- void this.intake.run(() => this.handleAgentContextChangedEvent(payload));
1049
- });
1050
- this.socketClient.on("app_context_changed", (payload) => {
1051
- void this.intake.run(() => this.handleAgentContextChangedEvent(payload));
1052
- });
1053
- this.socketClient.on("block_actions", (payload) => {
1054
- void this.intake.run(() => this.handleBlockAction(payload));
1055
- });
1056
- this.socketClient.on("interactive", (payload) => {
1057
- void this.intake.run(() => this.handleBlockAction(payload));
1058
- });
1059
- }
1060
- async handleAppMention({ event, ack, }) {
1048
+ this.socketClient.on("app_mention", (payload) => this.intake.run(() => this.handleAppMention(payload)));
1049
+ this.socketClient.on("message", (payload) => this.intake.run(() => this.handleMessageEvent(payload)));
1050
+ this.socketClient.on("slash_commands", (payload) => this.intake.run(() => this.handleSlashCommand(payload)));
1051
+ this.socketClient.on("app_home_opened", (payload) => this.intake.run(() => this.handleAppHomeOpened(payload)));
1052
+ this.socketClient.on("assistant_thread_started", (payload) => this.intake.run(() => this.handleAssistantThreadStarted(payload)));
1053
+ this.socketClient.on("assistant_thread_context_changed", (payload) => this.intake.run(() => this.handleAgentContextChangedEvent(payload)));
1054
+ this.socketClient.on("app_context_changed", (payload) => this.intake.run(() => this.handleAgentContextChangedEvent(payload)));
1055
+ const blockAction = ({ body, ack }) => this.intake.run(() => this.handleBlockAction({ body: body, ack }));
1056
+ this.socketClient.on("block_actions", blockAction);
1057
+ this.socketClient.on("interactive", blockAction);
1058
+ }
1059
+ async handleAppMention({ event, ack }) {
1061
1060
  const e = event;
1062
1061
  if (e.channel.startsWith("D")) {
1063
1062
  ack();
@@ -1208,7 +1207,7 @@ export class SlackMessagingBot {
1208
1207
  return false;
1209
1208
  }
1210
1209
  }
1211
- async handleMessageEvent({ event, ack, }) {
1210
+ async handleMessageEvent({ event, ack }) {
1212
1211
  const e = event;
1213
1212
  if (!this.admitHumanMessage(e, ack))
1214
1213
  return;
@@ -1275,7 +1274,7 @@ export class SlackMessagingBot {
1275
1274
  ack();
1276
1275
  await intake;
1277
1276
  }
1278
- async handleSlashCommand({ body, ack, }) {
1277
+ async handleSlashCommand({ body, ack }) {
1279
1278
  const payload = body;
1280
1279
  await ack();
1281
1280
  if (!payload.command || !payload.channel_id || !payload.user_id) {
@@ -1298,7 +1297,7 @@ export class SlackMessagingBot {
1298
1297
  });
1299
1298
  }
1300
1299
  catch (err) {
1301
- log.logWarning("Slack slash command error", err instanceof Error ? err.message : String(err));
1300
+ log.logWarning("Slack slash command error", errorMessage(err));
1302
1301
  }
1303
1302
  }
1304
1303
  handleAppHomeOpened({ event, ack }) {
@@ -1372,7 +1371,7 @@ export class SlackMessagingBot {
1372
1371
  this.logToFile(channelId, {
1373
1372
  date: new Date().toISOString(),
1374
1373
  ts,
1375
- ...(threadTs ? { threadTs } : {}),
1374
+ threadTs: threadTs || undefined,
1376
1375
  user: userId,
1377
1376
  userName: body.user?.username ?? body.user?.name,
1378
1377
  text,
@@ -1404,7 +1403,7 @@ export class SlackMessagingBot {
1404
1403
  user: userId,
1405
1404
  text,
1406
1405
  attachments: [],
1407
- ...(threadTs ? { thread_ts: threadTs } : {}),
1406
+ thread_ts: threadTs || undefined,
1408
1407
  sessionKey,
1409
1408
  });
1410
1409
  this.getQueue(this.resolveQueueKey(channelId, sessionKey)).enqueue(async () => {
@@ -1447,21 +1446,21 @@ export class SlackMessagingBot {
1447
1446
  const firstFailure = failed[0];
1448
1447
  if (firstFailure) {
1449
1448
  const { name, error } = firstFailure;
1450
- const errorMsg = error instanceof Error ? error.message : String(error);
1449
+ const errorMsg = errorMessage(error);
1451
1450
  throw new Error(`Failed to download attachment ${name}: ${errorMsg}`, { cause: error });
1452
1451
  }
1453
1452
  return saved;
1454
1453
  }
1455
1454
  async downloadSlackFile(url, destPath) {
1455
+ assertSlackFileUrl(url);
1456
1456
  await withRetry(async () => {
1457
- const response = await fetch(url, {
1457
+ const response = await this.fetchFn(url, {
1458
1458
  headers: { Authorization: `Bearer ${this.botToken}` },
1459
1459
  });
1460
1460
  if (!response.ok) {
1461
1461
  throw new AttachmentDownloadHttpError(`HTTP ${response.status}: ${response.statusText}`, response.status);
1462
1462
  }
1463
- const buffer = await response.arrayBuffer();
1464
- await writeFile(destPath, Buffer.from(buffer));
1463
+ await writeResponseToFile(response, destPath);
1465
1464
  }, { maxAttempts: 3, baseDelayMs: 250, isRateLimited: isRetryableAttachmentDownloadError });
1466
1465
  }
1467
1466
  async logUserMessage(event) {
@@ -1513,7 +1512,7 @@ export class SlackMessagingBot {
1513
1512
  return attachments;
1514
1513
  }
1515
1514
  async getExistingTimestamps(channelId) {
1516
- const logPath = join(this.conversationDir(channelId), "log.jsonl");
1515
+ const { logPath } = this.office(channelId);
1517
1516
  const timestamps = new Set();
1518
1517
  if (!existsSync(logPath))
1519
1518
  return timestamps;
@@ -1526,7 +1525,7 @@ export class SlackMessagingBot {
1526
1525
  timestamps.add(entry.ts);
1527
1526
  }
1528
1527
  catch (err) {
1529
- log.logWarning(`Skipping malformed log entry at ${logPath}:${i + 1}`, err instanceof Error ? err.message : String(err));
1528
+ log.logWarning(`Skipping malformed log entry at ${logPath}:${i + 1}`, errorMessage(err));
1530
1529
  }
1531
1530
  }
1532
1531
  return timestamps;
@@ -1605,8 +1604,7 @@ export class SlackMessagingBot {
1605
1604
  const startTime = Date.now();
1606
1605
  const channelsToBackfill = [];
1607
1606
  for (const [channelId, channel] of this.channels) {
1608
- const logPath = join(this.conversationDir(channelId), "log.jsonl");
1609
- if (existsSync(logPath)) {
1607
+ if (existsSync(this.office(channelId).logPath)) {
1610
1608
  channelsToBackfill.push([channelId, channel]);
1611
1609
  }
1612
1610
  }
@@ -1663,8 +1661,8 @@ export class SlackMessagingBot {
1663
1661
  this.channels.set(c.id, {
1664
1662
  id: c.id,
1665
1663
  name: c.name,
1666
- ...(typeof c.is_private === "boolean" ? { isPrivate: c.is_private } : {}),
1667
- ...(c.is_shared || c.is_ext_shared ? { isExternallyShared: true } : {}),
1664
+ isPrivate: typeof c.is_private === "boolean" ? c.is_private : undefined,
1665
+ isExternallyShared: c.is_shared || c.is_ext_shared ? true : undefined,
1668
1666
  });
1669
1667
  }
1670
1668
  cursor = result.response_metadata?.next_cursor;