@geminixiang/mikan 1.0.0-beta.4 → 1.0.0-beta.40

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 (639) hide show
  1. package/CHANGELOG.md +688 -0
  2. package/README.md +99 -36
  3. package/dist/adapter.d.ts +11 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +18 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/adapters/discord/bot.d.ts +6 -7
  8. package/dist/adapters/discord/bot.d.ts.map +1 -1
  9. package/dist/adapters/discord/bot.js +82 -117
  10. package/dist/adapters/discord/bot.js.map +1 -1
  11. package/dist/adapters/discord/context.d.ts +3 -1
  12. package/dist/adapters/discord/context.d.ts.map +1 -1
  13. package/dist/adapters/discord/context.js +54 -215
  14. package/dist/adapters/discord/context.js.map +1 -1
  15. package/dist/adapters/github/bot.d.ts +89 -0
  16. package/dist/adapters/github/bot.d.ts.map +1 -0
  17. package/dist/adapters/github/bot.js +653 -0
  18. package/dist/adapters/github/bot.js.map +1 -0
  19. package/dist/adapters/github/client.d.ts +122 -0
  20. package/dist/adapters/github/client.d.ts.map +1 -0
  21. package/dist/adapters/github/client.js +314 -0
  22. package/dist/adapters/github/client.js.map +1 -0
  23. package/dist/adapters/github/cloudbuild.d.ts +19 -0
  24. package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
  25. package/dist/adapters/github/cloudbuild.js +71 -0
  26. package/dist/adapters/github/cloudbuild.js.map +1 -0
  27. package/dist/adapters/github/context.d.ts +12 -0
  28. package/dist/adapters/github/context.d.ts.map +1 -0
  29. package/dist/adapters/github/context.js +101 -0
  30. package/dist/adapters/github/context.js.map +1 -0
  31. package/dist/adapters/github/gcp-auth.d.ts +28 -0
  32. package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
  33. package/dist/adapters/github/gcp-auth.js +196 -0
  34. package/dist/adapters/github/gcp-auth.js.map +1 -0
  35. package/dist/adapters/github/github-ops.d.ts +91 -0
  36. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  37. package/dist/adapters/github/github-ops.js +406 -0
  38. package/dist/adapters/github/github-ops.js.map +1 -0
  39. package/dist/adapters/github/ids.d.ts +34 -0
  40. package/dist/adapters/github/ids.d.ts.map +1 -0
  41. package/dist/adapters/github/ids.js +57 -0
  42. package/dist/adapters/github/ids.js.map +1 -0
  43. package/dist/adapters/github/repo.d.ts +33 -0
  44. package/dist/adapters/github/repo.d.ts.map +1 -0
  45. package/dist/adapters/github/repo.js +141 -0
  46. package/dist/adapters/github/repo.js.map +1 -0
  47. package/dist/adapters/github/tool-pack.d.ts +14 -0
  48. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  49. package/dist/adapters/github/tool-pack.js +56 -0
  50. package/dist/adapters/github/tool-pack.js.map +1 -0
  51. package/dist/adapters/github/tools/checks.d.ts +19 -0
  52. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  53. package/dist/adapters/github/tools/checks.js +105 -0
  54. package/dist/adapters/github/tools/checks.js.map +1 -0
  55. package/dist/adapters/github/tools/issue.d.ts +21 -0
  56. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  57. package/dist/adapters/github/tools/issue.js +48 -0
  58. package/dist/adapters/github/tools/issue.js.map +1 -0
  59. package/dist/adapters/github/tools/pr.d.ts +22 -0
  60. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  61. package/dist/adapters/github/tools/pr.js +48 -0
  62. package/dist/adapters/github/tools/pr.js.map +1 -0
  63. package/dist/adapters/github/tools/read.d.ts +21 -0
  64. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  65. package/dist/adapters/github/tools/read.js +141 -0
  66. package/dist/adapters/github/tools/read.js.map +1 -0
  67. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  68. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  69. package/dist/adapters/github/tools/review-reply.js +38 -0
  70. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  71. package/dist/adapters/github/tools/sync.d.ts +17 -0
  72. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  73. package/dist/adapters/github/tools/sync.js +34 -0
  74. package/dist/adapters/github/tools/sync.js.map +1 -0
  75. package/dist/adapters/github/types.d.ts +373 -0
  76. package/dist/adapters/github/types.d.ts.map +1 -0
  77. package/dist/adapters/github/types.js +2 -0
  78. package/dist/adapters/github/types.js.map +1 -0
  79. package/dist/adapters/intake.d.ts +16 -5
  80. package/dist/adapters/intake.d.ts.map +1 -1
  81. package/dist/adapters/intake.js +86 -23
  82. package/dist/adapters/intake.js.map +1 -1
  83. package/dist/adapters/progressive-renderer.d.ts +7 -0
  84. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  85. package/dist/adapters/progressive-renderer.js +383 -0
  86. package/dist/adapters/progressive-renderer.js.map +1 -0
  87. package/dist/adapters/shared.d.ts +23 -10
  88. package/dist/adapters/shared.d.ts.map +1 -1
  89. package/dist/adapters/shared.js +60 -22
  90. package/dist/adapters/shared.js.map +1 -1
  91. package/dist/adapters/slack/blocks.d.ts +14 -0
  92. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  93. package/dist/adapters/slack/blocks.js +147 -111
  94. package/dist/adapters/slack/blocks.js.map +1 -1
  95. package/dist/adapters/slack/bot.d.ts +43 -13
  96. package/dist/adapters/slack/bot.d.ts.map +1 -1
  97. package/dist/adapters/slack/bot.js +385 -207
  98. package/dist/adapters/slack/bot.js.map +1 -1
  99. package/dist/adapters/slack/context.d.ts +3 -1
  100. package/dist/adapters/slack/context.d.ts.map +1 -1
  101. package/dist/adapters/slack/context.js +11 -17
  102. package/dist/adapters/slack/context.js.map +1 -1
  103. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  104. package/dist/adapters/slack/response-lifecycle.js +126 -323
  105. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  106. package/dist/adapters/slack/session.d.ts.map +1 -1
  107. package/dist/adapters/slack/session.js +7 -11
  108. package/dist/adapters/slack/session.js.map +1 -1
  109. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  110. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  111. package/dist/adapters/slack/tool-pack.js +45 -0
  112. package/dist/adapters/slack/tool-pack.js.map +1 -0
  113. package/dist/adapters/slack/tools/attach.js +1 -1
  114. package/dist/adapters/slack/tools/attach.js.map +1 -1
  115. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  116. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  117. package/dist/adapters/slack/tools/blockkit.js +106 -0
  118. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  119. package/dist/adapters/slack/types.d.ts +40 -2
  120. package/dist/adapters/slack/types.d.ts.map +1 -1
  121. package/dist/adapters/slack/types.js.map +1 -1
  122. package/dist/adapters/telegram/bot.d.ts +8 -9
  123. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  124. package/dist/adapters/telegram/bot.js +90 -117
  125. package/dist/adapters/telegram/bot.js.map +1 -1
  126. package/dist/adapters/telegram/context.d.ts +2 -0
  127. package/dist/adapters/telegram/context.d.ts.map +1 -1
  128. package/dist/adapters/telegram/context.js +61 -184
  129. package/dist/adapters/telegram/context.js.map +1 -1
  130. package/dist/adapters/telegram/html.d.ts.map +1 -1
  131. package/dist/adapters/telegram/html.js +10 -7
  132. package/dist/adapters/telegram/html.js.map +1 -1
  133. package/dist/adapters/types.d.ts +109 -12
  134. package/dist/adapters/types.d.ts.map +1 -1
  135. package/dist/adapters/types.js.map +1 -1
  136. package/dist/agent-events.d.ts +3 -2
  137. package/dist/agent-events.d.ts.map +1 -1
  138. package/dist/agent-events.js +19 -1
  139. package/dist/agent-events.js.map +1 -1
  140. package/dist/agent.d.ts +14 -19
  141. package/dist/agent.d.ts.map +1 -1
  142. package/dist/agent.js +840 -298
  143. package/dist/agent.js.map +1 -1
  144. package/dist/cli/arg-grammar.d.ts +25 -0
  145. package/dist/cli/arg-grammar.d.ts.map +1 -0
  146. package/dist/cli/arg-grammar.js +61 -0
  147. package/dist/cli/arg-grammar.js.map +1 -0
  148. package/dist/cli/boot.d.ts +5 -0
  149. package/dist/cli/boot.d.ts.map +1 -0
  150. package/dist/cli/boot.js +117 -0
  151. package/dist/cli/boot.js.map +1 -0
  152. package/dist/cli/download.d.ts.map +1 -0
  153. package/dist/{download.js → cli/download.js} +2 -0
  154. package/dist/cli/download.js.map +1 -0
  155. package/dist/cli/ext-dev.d.ts +2 -0
  156. package/dist/cli/ext-dev.d.ts.map +1 -0
  157. package/dist/cli/ext-dev.js +188 -0
  158. package/dist/cli/ext-dev.js.map +1 -0
  159. package/dist/cli/ext.d.ts +2 -0
  160. package/dist/cli/ext.d.ts.map +1 -0
  161. package/dist/cli/ext.js +324 -0
  162. package/dist/cli/ext.js.map +1 -0
  163. package/dist/cli/office.d.ts +2 -0
  164. package/dist/cli/office.d.ts.map +1 -0
  165. package/dist/cli/office.js +91 -0
  166. package/dist/cli/office.js.map +1 -0
  167. package/dist/cli/types.d.ts +16 -0
  168. package/dist/cli/types.d.ts.map +1 -0
  169. package/dist/cli/types.js +2 -0
  170. package/dist/cli/types.js.map +1 -0
  171. package/dist/commands/admin.d.ts.map +1 -1
  172. package/dist/commands/admin.js +3 -2
  173. package/dist/commands/admin.js.map +1 -1
  174. package/dist/commands/auto-reply.d.ts.map +1 -1
  175. package/dist/commands/auto-reply.js +5 -9
  176. package/dist/commands/auto-reply.js.map +1 -1
  177. package/dist/commands/extensions.d.ts.map +1 -1
  178. package/dist/commands/extensions.js +9 -6
  179. package/dist/commands/extensions.js.map +1 -1
  180. package/dist/commands/login.d.ts +2 -1
  181. package/dist/commands/login.d.ts.map +1 -1
  182. package/dist/commands/login.js +40 -5
  183. package/dist/commands/login.js.map +1 -1
  184. package/dist/commands/manifest.d.ts +37 -0
  185. package/dist/commands/manifest.d.ts.map +1 -0
  186. package/dist/commands/manifest.js +151 -0
  187. package/dist/commands/manifest.js.map +1 -0
  188. package/dist/commands/model.d.ts +2 -3
  189. package/dist/commands/model.d.ts.map +1 -1
  190. package/dist/commands/model.js +63 -24
  191. package/dist/commands/model.js.map +1 -1
  192. package/dist/commands/new.d.ts.map +1 -1
  193. package/dist/commands/new.js +15 -3
  194. package/dist/commands/new.js.map +1 -1
  195. package/dist/commands/registry.d.ts +2 -2
  196. package/dist/commands/registry.d.ts.map +1 -1
  197. package/dist/commands/registry.js +1 -2
  198. package/dist/commands/registry.js.map +1 -1
  199. package/dist/commands/sandbox.d.ts.map +1 -1
  200. package/dist/commands/sandbox.js +83 -33
  201. package/dist/commands/sandbox.js.map +1 -1
  202. package/dist/commands/session-view.d.ts.map +1 -1
  203. package/dist/commands/session-view.js +6 -3
  204. package/dist/commands/session-view.js.map +1 -1
  205. package/dist/commands/types.d.ts +79 -7
  206. package/dist/commands/types.d.ts.map +1 -1
  207. package/dist/commands/types.js.map +1 -1
  208. package/dist/config.d.ts +23 -8
  209. package/dist/config.d.ts.map +1 -1
  210. package/dist/config.js +222 -135
  211. package/dist/config.js.map +1 -1
  212. package/dist/env-manifest.d.ts +30 -0
  213. package/dist/env-manifest.d.ts.map +1 -0
  214. package/dist/env-manifest.js +229 -0
  215. package/dist/env-manifest.js.map +1 -0
  216. package/dist/events.d.ts.map +1 -1
  217. package/dist/events.js +20 -81
  218. package/dist/events.js.map +1 -1
  219. package/dist/execution-resolver.d.ts +7 -8
  220. package/dist/execution-resolver.d.ts.map +1 -1
  221. package/dist/execution-resolver.js +106 -110
  222. package/dist/execution-resolver.js.map +1 -1
  223. package/dist/extension-schedules.d.ts +31 -0
  224. package/dist/extension-schedules.d.ts.map +1 -0
  225. package/dist/extension-schedules.js +229 -0
  226. package/dist/extension-schedules.js.map +1 -0
  227. package/dist/harness/auth.d.ts +2 -1
  228. package/dist/harness/auth.d.ts.map +1 -1
  229. package/dist/harness/auth.js +11 -5
  230. package/dist/harness/auth.js.map +1 -1
  231. package/dist/harness/event-format.d.ts +27 -0
  232. package/dist/harness/event-format.d.ts.map +1 -0
  233. package/dist/harness/event-format.js +160 -0
  234. package/dist/harness/event-format.js.map +1 -0
  235. package/dist/harness/extensions/loader.d.ts +27 -49
  236. package/dist/harness/extensions/loader.d.ts.map +1 -1
  237. package/dist/harness/extensions/loader.js +486 -130
  238. package/dist/harness/extensions/loader.js.map +1 -1
  239. package/dist/harness/extensions/registry.d.ts +107 -2
  240. package/dist/harness/extensions/registry.d.ts.map +1 -1
  241. package/dist/harness/extensions/registry.js +316 -0
  242. package/dist/harness/extensions/registry.js.map +1 -1
  243. package/dist/harness/extensions/types.d.ts +482 -42
  244. package/dist/harness/extensions/types.d.ts.map +1 -1
  245. package/dist/harness/extensions/types.js.map +1 -1
  246. package/dist/harness/index.d.ts +18 -8
  247. package/dist/harness/index.d.ts.map +1 -1
  248. package/dist/harness/index.js +7 -4
  249. package/dist/harness/index.js.map +1 -1
  250. package/dist/harness/models.d.ts +7 -4
  251. package/dist/harness/models.d.ts.map +1 -1
  252. package/dist/harness/models.js +46 -24
  253. package/dist/harness/models.js.map +1 -1
  254. package/dist/harness/runner.d.ts +50 -54
  255. package/dist/harness/runner.d.ts.map +1 -1
  256. package/dist/harness/runner.js +232 -46
  257. package/dist/harness/runner.js.map +1 -1
  258. package/dist/harness/session-store.d.ts +11 -5
  259. package/dist/harness/session-store.d.ts.map +1 -1
  260. package/dist/harness/session-store.js +141 -36
  261. package/dist/harness/session-store.js.map +1 -1
  262. package/dist/harness/settings.d.ts +2 -20
  263. package/dist/harness/settings.d.ts.map +1 -1
  264. package/dist/harness/settings.js +12 -1
  265. package/dist/harness/settings.js.map +1 -1
  266. package/dist/harness/skills.d.ts +10 -29
  267. package/dist/harness/skills.d.ts.map +1 -1
  268. package/dist/harness/skills.js +48 -6
  269. package/dist/harness/skills.js.map +1 -1
  270. package/dist/harness/subagent-profiles.d.ts +8 -0
  271. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  272. package/dist/harness/subagent-profiles.js +299 -0
  273. package/dist/harness/subagent-profiles.js.map +1 -0
  274. package/dist/harness/subagent-runner.d.ts +39 -0
  275. package/dist/harness/subagent-runner.d.ts.map +1 -0
  276. package/dist/harness/subagent-runner.js +617 -0
  277. package/dist/harness/subagent-runner.js.map +1 -0
  278. package/dist/harness/types.d.ts +267 -1
  279. package/dist/harness/types.d.ts.map +1 -1
  280. package/dist/harness/types.js.map +1 -1
  281. package/dist/harness/usage.d.ts +6 -0
  282. package/dist/harness/usage.d.ts.map +1 -0
  283. package/dist/harness/usage.js +32 -0
  284. package/dist/harness/usage.js.map +1 -0
  285. package/dist/index.d.ts +36 -8
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +22 -6
  288. package/dist/index.js.map +1 -1
  289. package/dist/main.js +391 -127
  290. package/dist/main.js.map +1 -1
  291. package/dist/observability/instrument.js +7 -5
  292. package/dist/observability/instrument.js.map +1 -1
  293. package/dist/observability/sentry.d.ts +2 -0
  294. package/dist/observability/sentry.d.ts.map +1 -1
  295. package/dist/observability/sentry.js +10 -2
  296. package/dist/observability/sentry.js.map +1 -1
  297. package/dist/office/address.d.ts +31 -0
  298. package/dist/office/address.d.ts.map +1 -0
  299. package/dist/office/address.js +113 -0
  300. package/dist/office/address.js.map +1 -0
  301. package/dist/office/index.d.ts +11 -0
  302. package/dist/office/index.d.ts.map +1 -0
  303. package/dist/office/index.js +11 -0
  304. package/dist/office/index.js.map +1 -0
  305. package/dist/office/layout.d.ts +27 -0
  306. package/dist/office/layout.d.ts.map +1 -0
  307. package/dist/office/layout.js +97 -0
  308. package/dist/office/layout.js.map +1 -0
  309. package/dist/office/migration.d.ts +44 -0
  310. package/dist/office/migration.d.ts.map +1 -0
  311. package/dist/office/migration.js +255 -0
  312. package/dist/office/migration.js.map +1 -0
  313. package/dist/office/registry.d.ts +75 -0
  314. package/dist/office/registry.d.ts.map +1 -0
  315. package/dist/office/registry.js +646 -0
  316. package/dist/office/registry.js.map +1 -0
  317. package/dist/office/types.d.ts +71 -0
  318. package/dist/office/types.d.ts.map +1 -0
  319. package/dist/office/types.js +2 -0
  320. package/dist/office/types.js.map +1 -0
  321. package/dist/packages/admin.d.ts +17 -0
  322. package/dist/packages/admin.d.ts.map +1 -0
  323. package/dist/packages/admin.js +98 -0
  324. package/dist/packages/admin.js.map +1 -0
  325. package/dist/packages/index.d.ts +6 -0
  326. package/dist/packages/index.d.ts.map +1 -0
  327. package/dist/packages/index.js +6 -0
  328. package/dist/packages/index.js.map +1 -0
  329. package/dist/packages/inspect.d.ts +11 -0
  330. package/dist/packages/inspect.d.ts.map +1 -0
  331. package/dist/packages/inspect.js +98 -0
  332. package/dist/packages/inspect.js.map +1 -0
  333. package/dist/packages/materialize.d.ts +40 -0
  334. package/dist/packages/materialize.d.ts.map +1 -0
  335. package/dist/packages/materialize.js +297 -0
  336. package/dist/packages/materialize.js.map +1 -0
  337. package/dist/packages/resolve.d.ts +25 -0
  338. package/dist/packages/resolve.d.ts.map +1 -0
  339. package/dist/packages/resolve.js +208 -0
  340. package/dist/packages/resolve.js.map +1 -0
  341. package/dist/packages/source.d.ts +39 -0
  342. package/dist/packages/source.d.ts.map +1 -0
  343. package/dist/packages/source.js +189 -0
  344. package/dist/packages/source.js.map +1 -0
  345. package/dist/packages/types.d.ts +104 -0
  346. package/dist/packages/types.d.ts.map +1 -0
  347. package/dist/packages/types.js +2 -0
  348. package/dist/packages/types.js.map +1 -0
  349. package/dist/provisioner.d.ts +66 -0
  350. package/dist/provisioner.d.ts.map +1 -1
  351. package/dist/provisioner.js +335 -13
  352. package/dist/provisioner.js.map +1 -1
  353. package/dist/runtime/conversation-runtime.d.ts +1 -1
  354. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  355. package/dist/runtime/conversation-runtime.js +562 -118
  356. package/dist/runtime/conversation-runtime.js.map +1 -1
  357. package/dist/runtime/session-lifecycle.d.ts +38 -0
  358. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  359. package/dist/runtime/session-lifecycle.js +193 -0
  360. package/dist/runtime/session-lifecycle.js.map +1 -0
  361. package/dist/runtime/types.d.ts +66 -7
  362. package/dist/runtime/types.d.ts.map +1 -1
  363. package/dist/runtime/types.js.map +1 -1
  364. package/dist/sandbox/cloudflare.d.ts +3 -0
  365. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  366. package/dist/sandbox/cloudflare.js +13 -1
  367. package/dist/sandbox/cloudflare.js.map +1 -1
  368. package/dist/sandbox/container.d.ts +4 -0
  369. package/dist/sandbox/container.d.ts.map +1 -1
  370. package/dist/sandbox/container.js +13 -3
  371. package/dist/sandbox/container.js.map +1 -1
  372. package/dist/sandbox/firecracker.d.ts +3 -0
  373. package/dist/sandbox/firecracker.d.ts.map +1 -1
  374. package/dist/sandbox/firecracker.js +13 -2
  375. package/dist/sandbox/firecracker.js.map +1 -1
  376. package/dist/sandbox/gondolin.d.ts +57 -0
  377. package/dist/sandbox/gondolin.d.ts.map +1 -0
  378. package/dist/sandbox/gondolin.js +764 -0
  379. package/dist/sandbox/gondolin.js.map +1 -0
  380. package/dist/sandbox/host.d.ts +3 -0
  381. package/dist/sandbox/host.d.ts.map +1 -1
  382. package/dist/sandbox/host.js +18 -3
  383. package/dist/sandbox/host.js.map +1 -1
  384. package/dist/sandbox/identity.d.ts +44 -0
  385. package/dist/sandbox/identity.d.ts.map +1 -0
  386. package/dist/sandbox/identity.js +68 -0
  387. package/dist/sandbox/identity.js.map +1 -0
  388. package/dist/sandbox/image.d.ts.map +1 -1
  389. package/dist/sandbox/image.js +2 -0
  390. package/dist/sandbox/image.js.map +1 -1
  391. package/dist/sandbox/index.d.ts +17 -4
  392. package/dist/sandbox/index.d.ts.map +1 -1
  393. package/dist/sandbox/index.js +37 -3
  394. package/dist/sandbox/index.js.map +1 -1
  395. package/dist/sandbox/types.d.ts +65 -1
  396. package/dist/sandbox/types.d.ts.map +1 -1
  397. package/dist/sandbox/types.js.map +1 -1
  398. package/dist/sandbox/utils.d.ts +14 -0
  399. package/dist/sandbox/utils.d.ts.map +1 -1
  400. package/dist/sandbox/utils.js +68 -1
  401. package/dist/sandbox/utils.js.map +1 -1
  402. package/dist/sessions/chat-history-sync.d.ts +25 -0
  403. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  404. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +135 -131
  405. package/dist/sessions/chat-history-sync.js.map +1 -0
  406. package/dist/sessions/conversation-log.d.ts +9 -0
  407. package/dist/sessions/conversation-log.d.ts.map +1 -0
  408. package/dist/sessions/conversation-log.js +50 -0
  409. package/dist/sessions/conversation-log.js.map +1 -0
  410. package/dist/sessions/history-line.d.ts +29 -0
  411. package/dist/sessions/history-line.d.ts.map +1 -0
  412. package/dist/sessions/history-line.js +45 -0
  413. package/dist/sessions/history-line.js.map +1 -0
  414. package/dist/sessions/rotation.d.ts +2 -0
  415. package/dist/sessions/rotation.d.ts.map +1 -0
  416. package/dist/sessions/rotation.js +39 -0
  417. package/dist/sessions/rotation.js.map +1 -0
  418. package/dist/sessions/session-key.d.ts +33 -0
  419. package/dist/sessions/session-key.d.ts.map +1 -0
  420. package/dist/sessions/session-key.js +115 -0
  421. package/dist/sessions/session-key.js.map +1 -0
  422. package/dist/sessions/store.d.ts +15 -7
  423. package/dist/sessions/store.d.ts.map +1 -1
  424. package/dist/sessions/store.js +127 -36
  425. package/dist/sessions/store.js.map +1 -1
  426. package/dist/sessions/types.d.ts +19 -5
  427. package/dist/sessions/types.d.ts.map +1 -1
  428. package/dist/sessions/types.js.map +1 -1
  429. package/dist/settings-mutation.d.ts +40 -0
  430. package/dist/settings-mutation.d.ts.map +1 -0
  431. package/dist/settings-mutation.js +61 -0
  432. package/dist/settings-mutation.js.map +1 -0
  433. package/dist/subagent-progress.d.ts +43 -0
  434. package/dist/subagent-progress.d.ts.map +1 -0
  435. package/dist/subagent-progress.js +220 -0
  436. package/dist/subagent-progress.js.map +1 -0
  437. package/dist/tools/bash.d.ts +3 -1
  438. package/dist/tools/bash.d.ts.map +1 -1
  439. package/dist/tools/bash.js +26 -18
  440. package/dist/tools/bash.js.map +1 -1
  441. package/dist/tools/edit.d.ts.map +1 -1
  442. package/dist/tools/edit.js +14 -13
  443. package/dist/tools/edit.js.map +1 -1
  444. package/dist/tools/event.d.ts +1 -1
  445. package/dist/tools/event.d.ts.map +1 -1
  446. package/dist/tools/event.js +58 -45
  447. package/dist/tools/event.js.map +1 -1
  448. package/dist/tools/generate-image.d.ts +23 -0
  449. package/dist/tools/generate-image.d.ts.map +1 -0
  450. package/dist/tools/generate-image.js +65 -0
  451. package/dist/tools/generate-image.js.map +1 -0
  452. package/dist/tools/host-fn-tool.d.ts +21 -0
  453. package/dist/tools/host-fn-tool.d.ts.map +1 -0
  454. package/dist/tools/host-fn-tool.js +32 -0
  455. package/dist/tools/host-fn-tool.js.map +1 -0
  456. package/dist/tools/index.d.ts +19 -2
  457. package/dist/tools/index.d.ts.map +1 -1
  458. package/dist/tools/index.js +25 -2
  459. package/dist/tools/index.js.map +1 -1
  460. package/dist/tools/react.d.ts +15 -0
  461. package/dist/tools/react.d.ts.map +1 -0
  462. package/dist/tools/react.js +29 -0
  463. package/dist/tools/react.js.map +1 -0
  464. package/dist/tools/read.d.ts +1 -0
  465. package/dist/tools/read.d.ts.map +1 -1
  466. package/dist/tools/read.js +39 -33
  467. package/dist/tools/read.js.map +1 -1
  468. package/dist/tools/sandbox.d.ts +2 -2
  469. package/dist/tools/sandbox.d.ts.map +1 -1
  470. package/dist/tools/sandbox.js +14 -9
  471. package/dist/tools/sandbox.js.map +1 -1
  472. package/dist/tools/subagent-slots.d.ts +28 -0
  473. package/dist/tools/subagent-slots.d.ts.map +1 -0
  474. package/dist/tools/subagent-slots.js +72 -0
  475. package/dist/tools/subagent-slots.js.map +1 -0
  476. package/dist/tools/subagent.d.ts +54 -0
  477. package/dist/tools/subagent.d.ts.map +1 -0
  478. package/dist/tools/subagent.js +411 -0
  479. package/dist/tools/subagent.js.map +1 -0
  480. package/dist/tools/types.d.ts +40 -32
  481. package/dist/tools/types.d.ts.map +1 -1
  482. package/dist/tools/types.js.map +1 -1
  483. package/dist/tools/write.d.ts.map +1 -1
  484. package/dist/tools/write.js +2 -8
  485. package/dist/tools/write.js.map +1 -1
  486. package/dist/trigger.d.ts +2 -1
  487. package/dist/trigger.d.ts.map +1 -1
  488. package/dist/trigger.js +6 -9
  489. package/dist/trigger.js.map +1 -1
  490. package/dist/types.d.ts +403 -59
  491. package/dist/types.d.ts.map +1 -1
  492. package/dist/types.js +2 -2
  493. package/dist/types.js.map +1 -1
  494. package/dist/utils/file-guards.d.ts +9 -0
  495. package/dist/utils/file-guards.d.ts.map +1 -1
  496. package/dist/utils/file-guards.js +44 -1
  497. package/dist/utils/file-guards.js.map +1 -1
  498. package/dist/vault/disabled.d.ts +9 -0
  499. package/dist/vault/disabled.d.ts.map +1 -0
  500. package/dist/vault/disabled.js +25 -0
  501. package/dist/vault/disabled.js.map +1 -0
  502. package/dist/vault/index.d.ts +45 -2
  503. package/dist/vault/index.d.ts.map +1 -1
  504. package/dist/vault/index.js +127 -36
  505. package/dist/vault/index.js.map +1 -1
  506. package/dist/vault/types.d.ts +6 -2
  507. package/dist/vault/types.d.ts.map +1 -1
  508. package/dist/vault/types.js.map +1 -1
  509. package/dist/web/admin/portal.d.ts +31 -3
  510. package/dist/web/admin/portal.d.ts.map +1 -1
  511. package/dist/web/admin/portal.js +846 -345
  512. package/dist/web/admin/portal.js.map +1 -1
  513. package/dist/web/admin/provider-models.js +1 -1
  514. package/dist/web/admin/provider-models.js.map +1 -1
  515. package/dist/web/admin/types.d.ts +23 -3
  516. package/dist/web/admin/types.d.ts.map +1 -1
  517. package/dist/web/admin/types.js.map +1 -1
  518. package/dist/web/login/oauth.d.ts +2 -3
  519. package/dist/web/login/oauth.d.ts.map +1 -1
  520. package/dist/web/login/oauth.js +1 -32
  521. package/dist/web/login/oauth.js.map +1 -1
  522. package/dist/web/login/portal.d.ts +1 -1
  523. package/dist/web/login/portal.d.ts.map +1 -1
  524. package/dist/web/login/portal.js +13 -36
  525. package/dist/web/login/portal.js.map +1 -1
  526. package/dist/web/login/types.d.ts +0 -11
  527. package/dist/web/login/types.d.ts.map +1 -1
  528. package/dist/web/login/types.js.map +1 -1
  529. package/dist/web/portal-shell.d.ts +21 -0
  530. package/dist/web/portal-shell.d.ts.map +1 -0
  531. package/dist/{portal-shell.js → web/portal-shell.js} +67 -2
  532. package/dist/web/portal-shell.js.map +1 -0
  533. package/dist/web/server.d.ts +3 -2
  534. package/dist/web/server.d.ts.map +1 -1
  535. package/dist/web/server.js +11 -4
  536. package/dist/web/server.js.map +1 -1
  537. package/dist/web/session-view/portal.d.ts +1 -1
  538. package/dist/web/session-view/portal.d.ts.map +1 -1
  539. package/dist/web/session-view/portal.js +37 -28
  540. package/dist/web/session-view/portal.js.map +1 -1
  541. package/dist/web/session-view/service.d.ts +1 -1
  542. package/dist/web/session-view/service.d.ts.map +1 -1
  543. package/dist/web/session-view/service.js +61 -18
  544. package/dist/web/session-view/service.js.map +1 -1
  545. package/dist/web/session-view/types.d.ts +0 -3
  546. package/dist/web/session-view/types.d.ts.map +1 -1
  547. package/dist/web/session-view/types.js.map +1 -1
  548. package/dist/web/token-store.js +1 -1
  549. package/dist/web/token-store.js.map +1 -1
  550. package/dist/workspace-projection/index.d.ts +10 -0
  551. package/dist/workspace-projection/index.d.ts.map +1 -0
  552. package/dist/workspace-projection/index.js +120 -0
  553. package/dist/workspace-projection/index.js.map +1 -0
  554. package/dist/workspace-projection/types.d.ts +16 -0
  555. package/dist/workspace-projection/types.d.ts.map +1 -0
  556. package/dist/workspace-projection/types.js +2 -0
  557. package/dist/workspace-projection/types.js.map +1 -0
  558. package/package.json +67 -37
  559. package/dist/adapters/streaming.d.ts +0 -18
  560. package/dist/adapters/streaming.d.ts.map +0 -1
  561. package/dist/adapters/streaming.js +0 -44
  562. package/dist/adapters/streaming.js.map +0 -1
  563. package/dist/commands/parse.d.ts +0 -7
  564. package/dist/commands/parse.d.ts.map +0 -1
  565. package/dist/commands/parse.js +0 -14
  566. package/dist/commands/parse.js.map +0 -1
  567. package/dist/download.d.ts.map +0 -1
  568. package/dist/download.js.map +0 -1
  569. package/dist/model-registry.d.ts +0 -4
  570. package/dist/model-registry.d.ts.map +0 -1
  571. package/dist/model-registry.js +0 -7
  572. package/dist/model-registry.js.map +0 -1
  573. package/dist/portal-shell.d.ts +0 -4
  574. package/dist/portal-shell.d.ts.map +0 -1
  575. package/dist/portal-shell.js.map +0 -1
  576. package/dist/runtime/agent-run-controller.d.ts +0 -31
  577. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  578. package/dist/runtime/agent-run-controller.js +0 -195
  579. package/dist/runtime/agent-run-controller.js.map +0 -1
  580. package/dist/sandbox/path-context.d.ts +0 -3
  581. package/dist/sandbox/path-context.d.ts.map +0 -1
  582. package/dist/sandbox/path-context.js +0 -20
  583. package/dist/sandbox/path-context.js.map +0 -1
  584. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  585. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  586. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  587. package/dist/sessions/metadata.d.ts +0 -3
  588. package/dist/sessions/metadata.d.ts.map +0 -1
  589. package/dist/sessions/metadata.js +0 -11
  590. package/dist/sessions/metadata.js.map +0 -1
  591. package/dist/sessions/policy.d.ts +0 -6
  592. package/dist/sessions/policy.d.ts.map +0 -1
  593. package/dist/sessions/policy.js +0 -23
  594. package/dist/sessions/policy.js.map +0 -1
  595. package/dist/store.d.ts +0 -46
  596. package/dist/store.d.ts.map +0 -1
  597. package/dist/store.js +0 -177
  598. package/dist/store.js.map +0 -1
  599. package/dist/tools/truncate.d.ts +0 -33
  600. package/dist/tools/truncate.d.ts.map +0 -1
  601. package/dist/tools/truncate.js +0 -184
  602. package/dist/tools/truncate.js.map +0 -1
  603. package/dist/utils/date.d.ts +0 -10
  604. package/dist/utils/date.d.ts.map +0 -1
  605. package/dist/utils/date.js +0 -23
  606. package/dist/utils/date.js.map +0 -1
  607. package/dist/utils/env.d.ts +0 -3
  608. package/dist/utils/env.d.ts.map +0 -1
  609. package/dist/utils/env.js +0 -12
  610. package/dist/utils/env.js.map +0 -1
  611. package/dist/utils/fs-atomic.d.ts +0 -10
  612. package/dist/utils/fs-atomic.d.ts.map +0 -1
  613. package/dist/utils/fs-atomic.js +0 -45
  614. package/dist/utils/fs-atomic.js.map +0 -1
  615. package/dist/utils/html.d.ts +0 -2
  616. package/dist/utils/html.d.ts.map +0 -1
  617. package/dist/utils/html.js +0 -4
  618. package/dist/utils/html.js.map +0 -1
  619. package/dist/utils/http-body.d.ts +0 -10
  620. package/dist/utils/http-body.d.ts.map +0 -1
  621. package/dist/utils/http-body.js +0 -34
  622. package/dist/utils/http-body.js.map +0 -1
  623. package/dist/vault/routing.d.ts +0 -3
  624. package/dist/vault/routing.d.ts.map +0 -1
  625. package/dist/vault/routing.js +0 -13
  626. package/dist/vault/routing.js.map +0 -1
  627. package/dist/web/agent-events/portal.d.ts +0 -3
  628. package/dist/web/agent-events/portal.d.ts.map +0 -1
  629. package/dist/web/agent-events/portal.js +0 -18
  630. package/dist/web/agent-events/portal.js.map +0 -1
  631. package/dist/web/request.d.ts +0 -3
  632. package/dist/web/request.d.ts.map +0 -1
  633. package/dist/web/request.js +0 -13
  634. package/dist/web/request.js.map +0 -1
  635. package/dist/web/session-view/command.d.ts +0 -4
  636. package/dist/web/session-view/command.d.ts.map +0 -1
  637. package/dist/web/session-view/command.js +0 -7
  638. package/dist/web/session-view/command.js.map +0 -1
  639. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
@@ -1,14 +1,16 @@
1
+ import { createConversationMessage, } from "../../adapter.js";
2
+ import {} from "./bot.js";
1
3
  import { createSlackResponseContext } from "./response-lifecycle.js";
2
4
  import { planSlackAdapterSession } from "./session.js";
3
- const SLACK_FORMATTING_GUIDE = `## Slack Formatting (mrkdwn, NOT Markdown)
4
- Bold: *text*, Italic: _text_, Code: \`code\`, Block: \`\`\`code\`\`\`, Links: <url|text>
5
- Do NOT use **double asterisks** or [markdown](links).`;
6
5
  export function createSlackAdapters(event, slack, adapterOptions = {}) {
7
6
  const sessionPlan = planSlackAdapterSession(event, {
8
7
  initialMessageTs: adapterOptions.initialMessageTs,
9
8
  });
10
9
  const user = slack.getUser(event.user);
11
- const message = {
10
+ const message = createConversationMessage({
11
+ platform: "slack",
12
+ conversationId: event.conversationId,
13
+ address: event.address,
12
14
  id: event.ts,
13
15
  sessionKey: sessionPlan.sessionKey,
14
16
  conversationKind: event.conversationKind,
@@ -20,18 +22,10 @@ export function createSlackAdapters(event, slack, adapterOptions = {}) {
20
22
  localPath: a.localPath,
21
23
  })),
22
24
  threadTs: event.thread_ts,
23
- };
24
- const platform = {
25
- name: "slack",
26
- formattingGuide: SLACK_FORMATTING_GUIDE,
27
- channels: slack.getAllChannels().map((c) => ({ id: c.id, name: c.name })),
28
- users: slack
29
- .getAllUsers()
30
- .map((u) => ({ id: u.id, userName: u.userName, displayName: u.displayName })),
31
- diagnostics: {
32
- showUsageSummary: true,
33
- },
34
- };
25
+ });
26
+ // The bot's getMessagingInfo() is the single authority for platform info;
27
+ // context factories compose from it instead of maintaining a second copy.
28
+ const platform = slack.getMessagingInfo();
35
29
  const responder = createSlackResponseContext({
36
30
  event,
37
31
  slack,
@@ -39,6 +33,6 @@ export function createSlackAdapters(event, slack, adapterOptions = {}) {
39
33
  replyMode: adapterOptions.replyMode ?? "top-level",
40
34
  message,
41
35
  });
42
- return { message, responder, platform };
36
+ return { address: message.address, message, responder, platform };
43
37
  }
44
38
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/adapters/slack/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAIvD,MAAM,sBAAsB,GAAG;;sDAEuB,CAAC;AAEvD,MAAM,UAAU,mBAAmB,CACjC,KAAiB,EACjB,KAAwB,EACxB,cAAc,GAAwB,EAAE;IAMxC,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,EAAE;QACjD,gBAAgB,EAAE,cAAc,CAAC,gBAAgB;KAClD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAwB;QACnC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,MAAM,EAAE,KAAK,CAAC,IAAI;QAClB,QAAQ,EAAE,IAAI,EAAE,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC;QACH,QAAQ,EAAE,KAAK,CAAC,SAAS;KAC1B,CAAC;IAEF,MAAM,QAAQ,GAAkB;QAC9B,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,sBAAsB;QACvC,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,KAAK,EAAE,KAAK;aACT,WAAW,EAAE;aACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/E,WAAW,EAAE;YACX,gBAAgB,EAAE,IAAI;SACvB;KACF,CAAC;IAEF,MAAM,SAAS,GAAG,0BAA0B,CAAC;QAC3C,KAAK;QACL,KAAK;QACL,WAAW;QACX,SAAS,EAAE,cAAc,CAAC,SAAS,IAAI,WAAW;QAClD,OAAO;KACR,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC","sourcesContent":["import type { ConversationMessage, ConversationResponder, MessagingInfo } from \"../../adapter.js\";\nimport { type SlackMessagingBot, type SlackEvent } from \"./bot.js\";\nimport { createSlackResponseContext } from \"./response-lifecycle.js\";\nimport { planSlackAdapterSession } from \"./session.js\";\nexport type { SlackAdapterOptions } from \"./types.js\";\nimport type { SlackAdapterOptions } from \"./types.js\";\n\nconst SLACK_FORMATTING_GUIDE = `## Slack Formatting (mrkdwn, NOT Markdown)\nBold: *text*, Italic: _text_, Code: \\`code\\`, Block: \\`\\`\\`code\\`\\`\\`, Links: <url|text>\nDo NOT use **double asterisks** or [markdown](links).`;\n\nexport function createSlackAdapters(\n event: SlackEvent,\n slack: SlackMessagingBot,\n adapterOptions: SlackAdapterOptions = {},\n): {\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n} {\n const sessionPlan = planSlackAdapterSession(event, {\n initialMessageTs: adapterOptions.initialMessageTs,\n });\n const user = slack.getUser(event.user);\n\n const message: ConversationMessage = {\n id: event.ts,\n sessionKey: sessionPlan.sessionKey,\n conversationKind: event.conversationKind,\n userId: event.user,\n userName: user?.userName,\n text: event.text,\n attachments: (event.attachments || []).map((a) => ({\n name: a.original,\n localPath: a.localPath,\n })),\n threadTs: event.thread_ts,\n };\n\n const platform: MessagingInfo = {\n name: \"slack\",\n formattingGuide: SLACK_FORMATTING_GUIDE,\n channels: slack.getAllChannels().map((c) => ({ id: c.id, name: c.name })),\n users: slack\n .getAllUsers()\n .map((u) => ({ id: u.id, userName: u.userName, displayName: u.displayName })),\n diagnostics: {\n showUsageSummary: true,\n },\n };\n\n const responder = createSlackResponseContext({\n event,\n slack,\n sessionPlan,\n replyMode: adapterOptions.replyMode ?? \"top-level\",\n message,\n });\n\n return { message, responder, platform };\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/adapters/slack/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAI1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA2C,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAKvD,MAAM,UAAU,mBAAmB,CACjC,KAAiB,EACjB,KAAwB,EACxB,cAAc,GAAwB,EAAE;IAOxC,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,EAAE;QACjD,gBAAgB,EAAE,cAAc,CAAC,gBAAgB;KAClD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAG,yBAAyB,CAAC;QACxC,QAAQ,EAAE,OAAO;QACjB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,MAAM,EAAE,KAAK,CAAC,IAAI;QAClB,QAAQ,EAAE,IAAI,EAAE,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC;QACH,QAAQ,EAAE,KAAK,CAAC,SAAS;KAC1B,CAAC,CAAC;IAEH,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,QAAQ,GAAkB,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAEzD,MAAM,SAAS,GAAG,0BAA0B,CAAC;QAC3C,KAAK;QACL,KAAK;QACL,WAAW;QACX,SAAS,EAAE,cAAc,CAAC,SAAS,IAAI,WAAW;QAClD,OAAO;KACR,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACpE,CAAC","sourcesContent":["import {\n createConversationMessage,\n type ConversationMessage,\n type ConversationResponder,\n type MessagingInfo,\n} from \"../../adapter.js\";\nimport { type SlackMessagingBot, type SlackEvent } from \"./bot.js\";\nimport { createSlackResponseContext } from \"./response-lifecycle.js\";\nimport { planSlackAdapterSession } from \"./session.js\";\nexport type { SlackAdapterOptions } from \"./types.js\";\nimport type { SlackAdapterOptions } from \"./types.js\";\nimport type { OfficeAddress } from \"../../adapter.js\";\n\nexport function createSlackAdapters(\n event: SlackEvent,\n slack: SlackMessagingBot,\n adapterOptions: SlackAdapterOptions = {},\n): {\n address: OfficeAddress;\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n} {\n const sessionPlan = planSlackAdapterSession(event, {\n initialMessageTs: adapterOptions.initialMessageTs,\n });\n const user = slack.getUser(event.user);\n\n const message = createConversationMessage({\n platform: \"slack\",\n conversationId: event.conversationId,\n address: event.address,\n id: event.ts,\n sessionKey: sessionPlan.sessionKey,\n conversationKind: event.conversationKind,\n userId: event.user,\n userName: user?.userName,\n text: event.text,\n attachments: (event.attachments || []).map((a) => ({\n name: a.original,\n localPath: a.localPath,\n })),\n threadTs: event.thread_ts,\n });\n\n // The bot's getMessagingInfo() is the single authority for platform info;\n // context factories compose from it instead of maintaining a second copy.\n const platform: MessagingInfo = slack.getMessagingInfo();\n\n const responder = createSlackResponseContext({\n event,\n slack,\n sessionPlan,\n replyMode: adapterOptions.replyMode ?? \"top-level\",\n message,\n });\n\n return { address: message.address, message, responder, platform };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"response-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/response-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAkB,MAAM,kBAAkB,CAAC;AASnG,OAAO,EAA2B,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AA+D1D,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,OAAO,GACR,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE,uBAAuB,CAAC;IACrC,SAAS,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;CAC9B,GAAG,qBAAqB,CAmaxB"}
1
+ {"version":3,"file":"response-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/response-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAkB,MAAM,kBAAkB,CAAC;AAInG,OAAO,EAA2B,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAwE1D,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,OAAO,GACR,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE,uBAAuB,CAAC;IACrC,SAAS,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;CAC9B,GAAG,qBAAqB,CAiKxB"}
@@ -1,8 +1,9 @@
1
1
  import * as log from "../../log.js";
2
- import { createChatResponseErrorReporter, formatToolArgs, splitText, } from "../shared.js";
3
- import { BufferedResponseStream } from "../streaming.js";
2
+ import { createProgressiveRenderer } from "../progressive-renderer.js";
3
+ import { formatToolArgs, splitText } from "../shared.js";
4
4
  import { buildMrkdwnContextBlock } from "./bot.js";
5
- const MAX_MAIN_LENGTH = 35000; // Best-effort streaming cap; final responses use Slack error-driven fallback.
5
+ import { renderSlackBlocks } from "./blocks.js";
6
+ const MAX_MAIN_LENGTH = 35000;
6
7
  const MAX_THREAD_LENGTH = 20000;
7
8
  const FALLBACK_MAIN_LENGTH = 3000;
8
9
  const WORKING_INDICATOR = " ...";
@@ -21,20 +22,17 @@ function fallbackLongSlackText(text, overflowLink, prefixLength = FALLBACK_MAIN_
21
22
  }
22
23
  async function postSlackTextWithFallback(post, text, overflowLink) {
23
24
  let prefixLength = FALLBACK_MAIN_LENGTH;
24
- let lastErr;
25
25
  for (;;) {
26
26
  const fallbackText = fallbackLongSlackText(text, overflowLink, prefixLength);
27
27
  try {
28
- const result = await post(fallbackText);
29
- return { result, text: fallbackText, prefixLength };
28
+ await post(fallbackText);
29
+ return { text: fallbackText, prefixLength };
30
30
  }
31
31
  catch (err) {
32
32
  if (!isSlackMsgTooLong(err))
33
33
  throw err;
34
- lastErr = err;
35
- if (prefixLength === 0) {
36
- throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
37
- }
34
+ if (prefixLength === 0)
35
+ throw err;
38
36
  prefixLength = Math.max(0, Math.floor(prefixLength / 2));
39
37
  }
40
38
  }
@@ -51,8 +49,28 @@ function formatSlackToolResult(result) {
51
49
  text += `*Result:*\n\`\`\`\n${result.result}\n\`\`\``;
52
50
  return text;
53
51
  }
52
+ function closeOpenFences(text) {
53
+ let openMarker = null;
54
+ for (const line of text.split("\n")) {
55
+ const marker = line.match(/^\s*(`{3,}|~{3,})/)?.[1];
56
+ if (marker === undefined)
57
+ continue;
58
+ if (openMarker === null)
59
+ openMarker = marker;
60
+ else if (marker[0] === openMarker[0] && marker.length >= openMarker.length)
61
+ openMarker = null;
62
+ }
63
+ return openMarker ? `${text}\n${openMarker}` : text;
64
+ }
65
+ function needsCanonicalRender(text) {
66
+ return renderSlackBlocks(text).blocks.some((block) => block.type === "table");
67
+ }
54
68
  export function createSlackResponseContext({ event, slack, sessionPlan, replyMode, message, }) {
55
- let messageTs = sessionPlan.initialMessageTs ?? null;
69
+ const channelId = event.channel;
70
+ const conversationId = event.conversationId;
71
+ const eventFilename = event.ts.match(/^event:([^:]+(?:\.json)?)/)?.[1];
72
+ const { rootTs, isThreaded } = sessionPlan;
73
+ const replyInThread = Boolean(rootTs && (isThreaded || replyMode === "thread"));
56
74
  let assistantStatusFailureWarned = false;
57
75
  const onAssistantStatusError = (label, err) => {
58
76
  if (assistantStatusFailureWarned)
@@ -60,342 +78,127 @@ export function createSlackResponseContext({ event, slack, sessionPlan, replyMod
60
78
  assistantStatusFailureWarned = true;
61
79
  log.logWarning(`Slack setAssistantStatus failed (${label}; further occurrences suppressed for this session)`, err instanceof Error ? err.message : String(err));
62
80
  };
63
- const threadMessageTs = [];
64
- let accumulatedText = "";
65
- let isWorking = true;
66
- let mainResponseLogged = false;
67
- let streamActive = false;
68
- let streamUnavailable = false;
69
- let streamedText = "";
70
- let updatePromise = Promise.resolve();
71
- const channelId = event.channel;
72
- const conversationId = event.conversationId;
73
- // Slack message timestamps are numeric; event-file triggers use `event:<filename>`.
74
- const eventFilename = event.ts.match(/^event:([^:]+(?:\.json)?)/)?.[1];
75
- const { rootTs, isThreaded } = sessionPlan;
76
- const replyInThread = Boolean(rootTs && (isThreaded || replyMode === "thread"));
77
- /**
78
- * Post the first visible reply.
79
- * Default Slack behavior is now top-level channel replies.
80
- * If the triggering message is already inside a thread, stay in that thread.
81
- */
82
- const postFirstMessage = async (text) => {
83
- if (replyInThread && rootTs) {
84
- return slack.postInThread(channelId, rootTs, text);
85
- }
86
- return slack.postMessage(channelId, text);
87
- };
88
- const postDiagnosticDirect = async (text, options) => {
89
- const threadAnchor = messageTs ?? rootTs;
81
+ const postThreadDiagnostic = async (text, options = {}, responseId) => {
82
+ const threadAnchor = responseId ?? rootTs;
90
83
  if (!threadAnchor)
91
- return;
84
+ return [];
85
+ const ids = [];
92
86
  for (const part of splitText(text, MAX_THREAD_LENGTH, formatSlackContinuation)) {
93
- if (options?.style === "muted") {
94
- const ts = await slack.postInThreadBlocks(channelId, threadAnchor, part, [
87
+ if (options.style === "muted") {
88
+ ids.push(await slack.postInThreadBlocks(channelId, threadAnchor, part, [
95
89
  buildMrkdwnContextBlock(part),
96
- ]);
97
- threadMessageTs.push(ts);
90
+ ]));
98
91
  }
99
92
  else {
100
- const diagnosticText = options?.style === "error" ? `_${part}_` : part;
101
- const ts = await slack.postInThread(channelId, threadAnchor, diagnosticText);
102
- threadMessageTs.push(ts);
93
+ ids.push(await slack.postInThread(channelId, threadAnchor, options.style === "error" ? `_${part}_` : part));
103
94
  }
104
95
  }
96
+ return ids;
105
97
  };
106
- const reportResponseError = createChatResponseErrorReporter(() => ({
107
- platform: "slack",
108
- conversationId,
109
- channelId,
110
- messageId: message.id,
111
- sessionKey: message.sessionKey,
112
- responseMessageId: messageTs,
113
- threadTs: rootTs,
114
- conversationKind: message.conversationKind,
115
- isThreaded,
116
- }));
117
- const postOrUpdateMain = async (body, handleMsgTooLong = true) => {
118
- const writeMain = async (text) => {
119
- if (messageTs) {
120
- await slack.updateMessage(channelId, messageTs, text);
121
- return;
122
- }
123
- if (replyInThread && rootTs) {
124
- messageTs = await slack.postInThread(channelId, rootTs, text);
125
- return messageTs;
126
- }
127
- messageTs = await postFirstMessage(text);
128
- return messageTs;
129
- };
130
- try {
131
- await writeMain(body);
132
- }
133
- catch (err) {
134
- if (!handleMsgTooLong || !isSlackMsgTooLong(err))
135
- throw err;
136
- const fallback = await postSlackTextWithFallback(writeMain, body);
137
- accumulatedText = fallback.text;
138
- stream.setText(accumulatedText);
139
- }
140
- };
141
- const abandonActiveStream = async () => {
142
- if (!streamActive || !messageTs)
143
- return;
144
- const failedStreamTs = messageTs;
145
- streamActive = false;
146
- streamedText = "";
147
- await slack.stopMessageStream(channelId, failedStreamTs).catch(() => undefined);
148
- if (messageTs === failedStreamTs)
149
- messageTs = null;
150
- };
151
- const startOrAppendStream = async (text, displayText) => {
152
- if (streamUnavailable) {
153
- await postOrUpdateMain(displayText);
154
- return;
155
- }
156
- try {
157
- if (messageTs && streamActive) {
158
- if (!text.startsWith(streamedText)) {
159
- await abandonActiveStream();
160
- await postOrUpdateMain(displayText);
161
- return;
162
- }
163
- const delta = text.slice(streamedText.length);
164
- if (delta) {
165
- await slack.appendMessageStream(channelId, messageTs, delta);
166
- streamedText = text;
167
- }
168
- return;
169
- }
170
- if (!replyInThread || !rootTs) {
171
- streamUnavailable = true;
172
- await postOrUpdateMain(displayText);
173
- return;
174
- }
175
- messageTs = await slack.startMessageStream(channelId, text, rootTs, event.user);
176
- streamActive = true;
177
- streamedText = text;
178
- }
179
- catch (err) {
180
- streamUnavailable = true;
181
- log.logWarning("Slack streaming unavailable; falling back to chat.update", err instanceof Error ? err.message : String(err));
182
- await abandonActiveStream();
183
- await postOrUpdateMain(displayText);
184
- }
185
- };
186
- const stream = new BufferedResponseStream({
187
- flush: async (text) => {
188
- accumulatedText = text;
189
- const mainLimit = isWorking ? MAX_MAIN_LENGTH - WORKING_INDICATOR.length : MAX_MAIN_LENGTH;
190
- if (accumulatedText.length > mainLimit) {
191
- accumulatedText =
192
- accumulatedText.substring(0, mainLimit - TRUNCATION_NOTE_INCREMENTAL.length) +
193
- TRUNCATION_NOTE_INCREMENTAL;
194
- stream.setText(accumulatedText);
195
- }
196
- const displayText = isWorking ? accumulatedText + WORKING_INDICATOR : accumulatedText;
197
- await startOrAppendStream(text, displayText);
98
+ const streamKind = replyInThread && rootTs ? "native" : "buffered";
99
+ const { responder } = createProgressiveRenderer({
100
+ label: "Slack",
101
+ maxLength: MAX_MAIN_LENGTH,
102
+ initialResponseId: sessionPlan.initialMessageTs ?? null,
103
+ formatContinuation: formatSlackContinuation,
104
+ errorPrefix: "",
105
+ workingIndicator: streamKind === "buffered" ? WORKING_INDICATOR : undefined,
106
+ formatProvisional: (text, working) => {
107
+ const closed = closeOpenFences(text);
108
+ return working ? `${closed}${WORKING_INDICATOR}` : closed;
198
109
  },
199
- finish: async (text) => {
200
- accumulatedText = text;
201
- isWorking = false;
202
- if (streamActive && messageTs) {
203
- try {
204
- if (!accumulatedText.startsWith(streamedText)) {
205
- await abandonActiveStream();
206
- await postOrUpdateMain(accumulatedText);
207
- return;
208
- }
209
- const delta = accumulatedText.slice(streamedText.length);
210
- if (delta) {
211
- await slack.appendMessageStream(channelId, messageTs, delta);
212
- streamedText = accumulatedText;
213
- }
214
- await slack.stopMessageStream(channelId, messageTs);
215
- streamActive = false;
216
- streamedText = "";
217
- return;
218
- }
219
- catch (err) {
220
- streamUnavailable = true;
221
- log.logWarning("Slack streaming unavailable; falling back to chat.update", err instanceof Error ? err.message : String(err));
222
- await abandonActiveStream();
223
- }
224
- }
225
- if (messageTs || accumulatedText) {
226
- await postOrUpdateMain(accumulatedText);
227
- }
110
+ prepareSource: (text, working) => {
111
+ const limit = working ? MAX_MAIN_LENGTH - WORKING_INDICATOR.length : MAX_MAIN_LENGTH;
112
+ if (text.length <= limit)
113
+ return text;
114
+ return `${text.slice(0, Math.max(0, limit - TRUNCATION_NOTE_INCREMENTAL.length))}${TRUNCATION_NOTE_INCREMENTAL}`;
228
115
  },
229
- });
230
- const queueResponseOperation = async (label, operation, work, context) => {
231
- updatePromise = updatePromise.then(async () => {
232
- try {
233
- await work();
116
+ supportsDeltas: true,
117
+ stream: streamKind === "native"
118
+ ? {
119
+ start: (text) => slack.startMessageStream(channelId, text, rootTs, event.user),
120
+ append: (id, delta) => slack.appendMessageStream(channelId, id, delta),
121
+ stop: (id) => slack.stopMessageStream(channelId, id),
234
122
  }
235
- catch (err) {
236
- log.logWarning(`Slack ${label} error`, err instanceof Error ? err.message : String(err));
237
- reportResponseError(err, operation, context(err));
123
+ : undefined,
124
+ needsCanonicalRender,
125
+ formatToolResult: formatSlackToolResult,
126
+ responseErrorContext: (responseId) => ({
127
+ platform: "slack",
128
+ conversationId,
129
+ channelId,
130
+ messageId: message.id,
131
+ sessionKey: message.sessionKey,
132
+ responseMessageId: responseId,
133
+ threadTs: rootTs,
134
+ conversationKind: message.conversationKind,
135
+ isThreaded,
136
+ }),
137
+ post: (text) => replyInThread && rootTs
138
+ ? slack.postInThread(channelId, rootTs, text)
139
+ : slack.postMessage(channelId, text),
140
+ update: (id, text) => slack.updateMessage(channelId, id, text),
141
+ postExtra: (text, responseId) => slack.postInThread(channelId, responseId ?? rootTs ?? "", text),
142
+ postDiagnostic: postThreadDiagnostic,
143
+ delete: async (id) => {
144
+ if (rootTs) {
145
+ await slack
146
+ .setAssistantStatus(channelId, rootTs, "")
147
+ .catch((err) => onAssistantStatusError("clear-on-delete", err));
238
148
  }
239
- });
240
- await updatePromise;
241
- };
242
- const responder = {
243
- respond: async (text) => {
244
- await queueResponseOperation("respond", "respond", async () => {
245
- accumulatedText = accumulatedText ? `${accumulatedText}\n${text}` : text;
246
- const mainLimit = isWorking
247
- ? MAX_MAIN_LENGTH - WORKING_INDICATOR.length
248
- : MAX_MAIN_LENGTH;
249
- if (accumulatedText.length > mainLimit) {
250
- accumulatedText =
251
- accumulatedText.substring(0, mainLimit - TRUNCATION_NOTE_INCREMENTAL.length) +
252
- TRUNCATION_NOTE_INCREMENTAL;
253
- }
254
- stream.setText(accumulatedText);
255
- const displayText = isWorking ? accumulatedText + WORKING_INDICATOR : accumulatedText;
256
- await startOrAppendStream(text, displayText);
257
- }, () => ({
258
- phase: messageTs ? "update" : "initial_post",
259
- textLength: text.length,
260
- accumulatedLength: accumulatedText.length,
261
- }));
149
+ await slack.deleteMessage(channelId, id);
262
150
  },
263
- appendResponseDelta: async (delta) => {
264
- await queueResponseOperation("appendResponseDelta", "respond", async () => {
265
- await stream.append(delta);
266
- }, () => ({ textLength: delta.length, accumulatedLength: stream.getText().length }));
151
+ deleteExtra: (id) => slack.deleteMessage(channelId, String(id)),
152
+ setTyping: async (isTyping, responseId) => {
153
+ if (isTyping && !responseId && rootTs) {
154
+ const statusText = eventFilename ? `Starting event: ${eventFilename}` : "Thinking";
155
+ await slack
156
+ .setAssistantStatus(channelId, rootTs, statusText)
157
+ .catch((err) => onAssistantStatusError("typing", err));
158
+ }
267
159
  },
268
- finishResponse: async (finalText) => {
269
- await queueResponseOperation("finishResponse", "set_working", async () => {
270
- await stream.finish(finalText);
271
- accumulatedText = stream.getText();
272
- if (messageTs && accumulatedText.trim() && !mainResponseLogged) {
273
- slack.logBotResponse(channelId, accumulatedText, messageTs, replyInThread ? rootTs : undefined);
274
- mainResponseLogged = true;
275
- }
276
- if (!rootTs)
277
- return;
160
+ onWorkingChanged: async (working, responseId) => {
161
+ if (!working && responseId && rootTs) {
278
162
  await slack
279
163
  .setAssistantStatus(channelId, rootTs, "")
280
164
  .catch((err) => onAssistantStatusError("clear-on-idle", err));
281
- }, () => ({ finalTextLength: finalText?.length }));
282
- },
283
- replaceResponse: async (text, options) => {
284
- await queueResponseOperation("replaceResponse", "replace_response", async () => {
285
- // Lazy: only mint a token if Slack actually rejects the message.
286
- let overflowLink;
287
- const resolveOverflowLink = () => {
288
- if (overflowLink === undefined && options?.createOverflowLink) {
289
- overflowLink = options.createOverflowLink();
290
- }
291
- return overflowLink;
292
- };
293
- accumulatedText = text;
294
- stream.setText(accumulatedText);
295
- const displayText = isWorking ? accumulatedText + WORKING_INDICATOR : accumulatedText;
296
- try {
297
- if (streamActive && messageTs) {
298
- await slack.stopMessageStream(channelId, messageTs);
299
- streamActive = false;
300
- streamedText = "";
301
- }
302
- await postOrUpdateMain(displayText, false);
303
- }
304
- catch (err) {
305
- if (!isSlackMsgTooLong(err))
306
- throw err;
307
- const link = resolveOverflowLink();
308
- const fallback = await postSlackTextWithFallback(async (body) => {
309
- await postOrUpdateMain(body);
310
- }, text, link);
311
- accumulatedText = fallback.text;
312
- const continuation = text.slice(fallback.prefixLength).trimStart();
313
- if (continuation) {
314
- await postDiagnosticDirect(`_(continued from truncated message)_\n\n${continuation}`);
315
- }
316
- }
317
- }, () => ({
318
- textLength: text.length,
319
- hadExistingResponse: Boolean(messageTs),
320
- }));
321
- },
322
- respondDiagnostic: async (text, options) => {
323
- await queueResponseOperation("respondDiagnostic", "respond_diagnostic", async () => {
324
- await postDiagnosticDirect(text, options);
325
- }, () => ({
326
- textLength: text.length,
327
- style: options?.style,
328
- }));
165
+ }
329
166
  },
330
- respondToolResult: async (result) => {
331
- await responder.respondDiagnostic(formatSlackToolResult(result));
167
+ onFinish: (text, responseId) => {
168
+ if (responseId && text.trim()) {
169
+ slack.logBotResponse(channelId, text, responseId, replyInThread ? rootTs : undefined);
170
+ }
171
+ if (rootTs) {
172
+ void slack
173
+ .setAssistantStatus(channelId, rootTs, "")
174
+ .catch((err) => onAssistantStatusError("clear-on-idle", err));
175
+ }
332
176
  },
333
- setTyping: async (isTyping) => {
334
- if (isTyping && !messageTs && rootTs) {
335
- try {
336
- const statusText = eventFilename ? `Starting event: ${eventFilename}` : "Thinking";
337
- await slack.setAssistantStatus(channelId, rootTs, statusText);
177
+ handleTooLong: async (text, operation, options, responseId, write, getResponseId) => {
178
+ let overflowLink;
179
+ const resolveOverflowLink = () => {
180
+ if (overflowLink === undefined && options?.createOverflowLink) {
181
+ overflowLink = options.createOverflowLink();
338
182
  }
339
- catch (err) {
340
- // Assistant API not available — first respond() call will create the message.
341
- onAssistantStatusError("typing", err);
183
+ return overflowLink;
184
+ };
185
+ const fallback = await postSlackTextWithFallback(write, text, operation === "replace" ? resolveOverflowLink() : undefined);
186
+ if (operation === "replace") {
187
+ const continuation = text.slice(fallback.prefixLength).trimStart();
188
+ if (continuation) {
189
+ await postThreadDiagnostic(`_(continued from truncated message)_\n\n${continuation}`, {}, replyInThread
190
+ ? (rootTs ?? getResponseId() ?? responseId)
191
+ : (getResponseId() ?? responseId));
342
192
  }
343
193
  }
194
+ return fallback;
344
195
  },
345
- uploadFile: async (filePath, title) => {
346
- await slack.uploadFile(channelId, filePath, title, rootTs);
196
+ uploadFile: (filePath, title) => slack.uploadFile(channelId, filePath, title, replyInThread ? rootTs : undefined),
197
+ react: async (emoji) => {
198
+ if (!eventFilename)
199
+ await slack.addReaction(channelId, event.ts, emoji);
347
200
  },
348
- setWorking: async (working) => {
349
- await queueResponseOperation("setWorking", "set_working", async () => {
350
- isWorking = working;
351
- if (messageTs) {
352
- const displayText = isWorking ? accumulatedText + WORKING_INDICATOR : accumulatedText;
353
- const updates = streamActive && !isWorking
354
- ? [
355
- slack.stopMessageStream(channelId, messageTs).then(() => {
356
- streamActive = false;
357
- }),
358
- ]
359
- : [slack.updateMessage(channelId, messageTs, displayText)];
360
- if (!working && rootTs) {
361
- updates.push(slack
362
- .setAssistantStatus(channelId, rootTs, "")
363
- .catch((err) => onAssistantStatusError("clear-on-idle", err)));
364
- }
365
- await Promise.all(updates);
366
- }
367
- }, () => ({ working }));
368
- },
369
- deleteResponse: async () => {
370
- updatePromise = updatePromise.then(async () => {
371
- // Clear assistant status first
372
- if (rootTs) {
373
- try {
374
- await slack.setAssistantStatus(channelId, rootTs, "");
375
- }
376
- catch {
377
- // Ignore errors clearing status
378
- }
379
- }
380
- // Delete thread messages first (in reverse order)
381
- for (let i = threadMessageTs.length - 1; i >= 0; i--) {
382
- try {
383
- await slack.deleteMessage(channelId, threadMessageTs[i]);
384
- }
385
- catch {
386
- // Ignore errors deleting thread messages
387
- }
388
- }
389
- threadMessageTs.length = 0;
390
- // Then delete main message
391
- if (messageTs) {
392
- await slack.deleteMessage(channelId, messageTs);
393
- messageTs = null;
394
- }
395
- });
396
- await updatePromise;
397
- },
398
- };
201
+ });
399
202
  return responder;
400
203
  }
401
204
  //# sourceMappingURL=response-lifecycle.js.map