@geminixiang/mikan 1.0.0-beta.7 → 1.0.0-beta.71

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 (856) hide show
  1. package/CHANGELOG.md +1052 -0
  2. package/README.md +98 -38
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +11 -8
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  7. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  8. package/dist/adapters/commands/auto-reply.js +47 -0
  9. package/dist/adapters/commands/auto-reply.js.map +1 -0
  10. package/dist/adapters/commands/login.d.ts +6 -0
  11. package/dist/adapters/commands/login.d.ts.map +1 -0
  12. package/dist/adapters/commands/login.js +166 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +37 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +155 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +15 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +153 -0
  21. package/dist/adapters/commands/model.js.map +1 -0
  22. package/dist/adapters/commands/new.d.ts.map +1 -0
  23. package/dist/adapters/commands/new.js +41 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +5 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +43 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  30. package/dist/adapters/commands/sandbox.js +125 -0
  31. package/dist/adapters/commands/sandbox.js.map +1 -0
  32. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  33. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  34. package/dist/adapters/commands/session-view.js.map +1 -0
  35. package/dist/adapters/commands/types.d.ts +145 -0
  36. package/dist/adapters/commands/types.d.ts.map +1 -0
  37. package/dist/adapters/commands/types.js.map +1 -0
  38. package/dist/adapters/commands/utils.d.ts +14 -0
  39. package/dist/adapters/commands/utils.d.ts.map +1 -0
  40. package/dist/{commands → adapters/commands}/utils.js +18 -1
  41. package/dist/adapters/commands/utils.js.map +1 -0
  42. package/dist/adapters/discord/bot.d.ts +11 -8
  43. package/dist/adapters/discord/bot.d.ts.map +1 -1
  44. package/dist/adapters/discord/bot.js +223 -256
  45. package/dist/adapters/discord/bot.js.map +1 -1
  46. package/dist/adapters/discord/components.d.ts +28 -0
  47. package/dist/adapters/discord/components.d.ts.map +1 -0
  48. package/dist/adapters/discord/components.js +32 -0
  49. package/dist/adapters/discord/components.js.map +1 -0
  50. package/dist/adapters/discord/context.d.ts +2 -6
  51. package/dist/adapters/discord/context.d.ts.map +1 -1
  52. package/dist/adapters/discord/context.js +64 -218
  53. package/dist/adapters/discord/context.js.map +1 -1
  54. package/dist/adapters/discord/format.d.ts +3 -0
  55. package/dist/adapters/discord/format.d.ts.map +1 -0
  56. package/dist/adapters/discord/format.js +84 -0
  57. package/dist/adapters/discord/format.js.map +1 -0
  58. package/dist/adapters/discord/types.d.ts +8 -1
  59. package/dist/adapters/discord/types.d.ts.map +1 -1
  60. package/dist/adapters/discord/types.js.map +1 -1
  61. package/dist/adapters/github/bot.d.ts +102 -0
  62. package/dist/adapters/github/bot.d.ts.map +1 -0
  63. package/dist/adapters/github/bot.js +720 -0
  64. package/dist/adapters/github/bot.js.map +1 -0
  65. package/dist/adapters/github/client.d.ts +122 -0
  66. package/dist/adapters/github/client.d.ts.map +1 -0
  67. package/dist/adapters/github/client.js +301 -0
  68. package/dist/adapters/github/client.js.map +1 -0
  69. package/dist/adapters/github/context.d.ts +5 -0
  70. package/dist/adapters/github/context.d.ts.map +1 -0
  71. package/dist/adapters/github/context.js +101 -0
  72. package/dist/adapters/github/context.js.map +1 -0
  73. package/dist/adapters/github/github-ops.d.ts +78 -0
  74. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  75. package/dist/adapters/github/github-ops.js +337 -0
  76. package/dist/adapters/github/github-ops.js.map +1 -0
  77. package/dist/adapters/github/ids.d.ts +34 -0
  78. package/dist/adapters/github/ids.d.ts.map +1 -0
  79. package/dist/adapters/github/ids.js +57 -0
  80. package/dist/adapters/github/ids.js.map +1 -0
  81. package/dist/adapters/github/repo.d.ts +33 -0
  82. package/dist/adapters/github/repo.d.ts.map +1 -0
  83. package/dist/adapters/github/repo.js +141 -0
  84. package/dist/adapters/github/repo.js.map +1 -0
  85. package/dist/adapters/github/tool-pack.d.ts +14 -0
  86. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  87. package/dist/adapters/github/tool-pack.js +55 -0
  88. package/dist/adapters/github/tool-pack.js.map +1 -0
  89. package/dist/adapters/github/tools/checks.d.ts +18 -0
  90. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  91. package/dist/adapters/github/tools/checks.js +86 -0
  92. package/dist/adapters/github/tools/checks.js.map +1 -0
  93. package/dist/adapters/github/tools/issue.d.ts +21 -0
  94. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/issue.js +48 -0
  96. package/dist/adapters/github/tools/issue.js.map +1 -0
  97. package/dist/adapters/github/tools/pr.d.ts +22 -0
  98. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/pr.js +48 -0
  100. package/dist/adapters/github/tools/pr.js.map +1 -0
  101. package/dist/adapters/github/tools/read.d.ts +21 -0
  102. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/read.js +141 -0
  104. package/dist/adapters/github/tools/read.js.map +1 -0
  105. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/review-reply.js +38 -0
  108. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  109. package/dist/adapters/github/tools/sync.d.ts +17 -0
  110. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/sync.js +34 -0
  112. package/dist/adapters/github/tools/sync.js.map +1 -0
  113. package/dist/adapters/github/types.d.ts +345 -0
  114. package/dist/adapters/github/types.d.ts.map +1 -0
  115. package/dist/adapters/github/types.js.map +1 -0
  116. package/dist/adapters/github/webhook.d.ts +20 -0
  117. package/dist/adapters/github/webhook.d.ts.map +1 -0
  118. package/dist/adapters/github/webhook.js +78 -0
  119. package/dist/adapters/github/webhook.js.map +1 -0
  120. package/dist/adapters/index.d.ts +12 -0
  121. package/dist/adapters/index.d.ts.map +1 -0
  122. package/dist/adapters/index.js +19 -0
  123. package/dist/adapters/index.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +17 -6
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +96 -27
  127. package/dist/adapters/intake.js.map +1 -1
  128. package/dist/adapters/markdown-tables.d.ts +19 -0
  129. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  130. package/dist/adapters/markdown-tables.js +152 -0
  131. package/dist/adapters/markdown-tables.js.map +1 -0
  132. package/dist/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  133. package/dist/adapters/messages.d.ts.map +1 -0
  134. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  135. package/dist/adapters/messages.js.map +1 -0
  136. package/dist/adapters/progressive-renderer.d.ts +7 -0
  137. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  138. package/dist/adapters/progressive-renderer.js +443 -0
  139. package/dist/adapters/progressive-renderer.js.map +1 -0
  140. package/dist/adapters/shared.d.ts +37 -11
  141. package/dist/adapters/shared.d.ts.map +1 -1
  142. package/dist/adapters/shared.js +130 -24
  143. package/dist/adapters/shared.js.map +1 -1
  144. package/dist/adapters/slack/assistant.d.ts +73 -0
  145. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  146. package/dist/adapters/slack/assistant.js +205 -0
  147. package/dist/adapters/slack/assistant.js.map +1 -0
  148. package/dist/adapters/slack/auto-reply-context.d.ts +21 -0
  149. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  150. package/dist/adapters/slack/auto-reply-context.js +28 -0
  151. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  152. package/dist/adapters/slack/blocks.d.ts +14 -0
  153. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  154. package/dist/adapters/slack/blocks.js +104 -148
  155. package/dist/adapters/slack/blocks.js.map +1 -1
  156. package/dist/adapters/slack/bot.d.ts +154 -21
  157. package/dist/adapters/slack/bot.d.ts.map +1 -1
  158. package/dist/adapters/slack/bot.js +1037 -484
  159. package/dist/adapters/slack/bot.js.map +1 -1
  160. package/dist/adapters/slack/context.d.ts +2 -6
  161. package/dist/adapters/slack/context.d.ts.map +1 -1
  162. package/dist/adapters/slack/context.js +11 -17
  163. package/dist/adapters/slack/context.js.map +1 -1
  164. package/dist/adapters/slack/jev-context.d.ts +30 -0
  165. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  166. package/dist/adapters/slack/jev-context.js +67 -0
  167. package/dist/adapters/slack/jev-context.js.map +1 -0
  168. package/dist/adapters/slack/markdown.d.ts +3 -0
  169. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  170. package/dist/adapters/slack/markdown.js +48 -0
  171. package/dist/adapters/slack/markdown.js.map +1 -0
  172. package/dist/adapters/slack/persona.d.ts +15 -0
  173. package/dist/adapters/slack/persona.d.ts.map +1 -0
  174. package/dist/adapters/slack/persona.js +22 -0
  175. package/dist/adapters/slack/persona.js.map +1 -0
  176. package/dist/adapters/slack/response-lifecycle.d.ts +1 -1
  177. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  178. package/dist/adapters/slack/response-lifecycle.js +261 -345
  179. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  180. package/dist/adapters/slack/session.d.ts.map +1 -1
  181. package/dist/adapters/slack/session.js +7 -11
  182. package/dist/adapters/slack/session.js.map +1 -1
  183. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  184. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  185. package/dist/adapters/slack/stream-limits.js +56 -0
  186. package/dist/adapters/slack/stream-limits.js.map +1 -0
  187. package/dist/adapters/slack/task-intent.d.ts +32 -0
  188. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  189. package/dist/adapters/slack/task-intent.js +72 -0
  190. package/dist/adapters/slack/task-intent.js.map +1 -0
  191. package/dist/adapters/slack/task-status.d.ts +7 -0
  192. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  193. package/dist/adapters/slack/task-status.js +107 -0
  194. package/dist/adapters/slack/task-status.js.map +1 -0
  195. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  196. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  197. package/dist/adapters/slack/tool-pack.js +45 -0
  198. package/dist/adapters/slack/tool-pack.js.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  200. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  201. package/dist/adapters/slack/tools/blockkit.js +106 -0
  202. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  203. package/dist/adapters/slack/types.d.ts +73 -2
  204. package/dist/adapters/slack/types.d.ts.map +1 -1
  205. package/dist/adapters/slack/types.js.map +1 -1
  206. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  207. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  208. package/dist/adapters/slack/update-diagnostics.js +134 -0
  209. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  210. package/dist/adapters/telegram/bot.d.ts +10 -9
  211. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  212. package/dist/adapters/telegram/bot.js +133 -202
  213. package/dist/adapters/telegram/bot.js.map +1 -1
  214. package/dist/adapters/telegram/context.d.ts +2 -6
  215. package/dist/adapters/telegram/context.d.ts.map +1 -1
  216. package/dist/adapters/telegram/context.js +53 -190
  217. package/dist/adapters/telegram/context.js.map +1 -1
  218. package/dist/adapters/telegram/types.d.ts +1 -1
  219. package/dist/adapters/telegram/types.d.ts.map +1 -1
  220. package/dist/adapters/telegram/types.js.map +1 -1
  221. package/dist/adapters/types.d.ts +144 -13
  222. package/dist/adapters/types.d.ts.map +1 -1
  223. package/dist/adapters/types.js.map +1 -1
  224. package/dist/adapters/web/admin/portal.d.ts +44 -0
  225. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  226. package/dist/adapters/web/admin/portal.js +3207 -0
  227. package/dist/adapters/web/admin/portal.js.map +1 -0
  228. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  229. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  231. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  232. package/dist/adapters/web/admin/types.d.ts +53 -0
  233. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  234. package/dist/adapters/web/admin/types.js.map +1 -0
  235. package/dist/adapters/web/login/oauth.d.ts +5 -0
  236. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  237. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  238. package/dist/adapters/web/login/oauth.js.map +1 -0
  239. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  240. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  241. package/dist/{web → adapters/web}/login/portal.js +161 -119
  242. package/dist/adapters/web/login/portal.js.map +1 -0
  243. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  244. package/dist/adapters/web/login/types.d.ts.map +1 -0
  245. package/dist/adapters/web/login/types.js.map +1 -0
  246. package/dist/adapters/web/portal-shell.d.ts +22 -0
  247. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  248. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  249. package/dist/adapters/web/portal-shell.js.map +1 -0
  250. package/dist/{web → adapters/web}/server.d.ts +14 -8
  251. package/dist/adapters/web/server.d.ts.map +1 -0
  252. package/dist/{web → adapters/web}/server.js +14 -7
  253. package/dist/adapters/web/server.js.map +1 -0
  254. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  255. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  256. package/dist/{web → adapters/web}/session-view/portal.js +633 -162
  257. package/dist/adapters/web/session-view/portal.js.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  259. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  260. package/dist/adapters/web/session-view/types.js.map +1 -0
  261. package/dist/adapters/web/token-store.d.ts.map +1 -0
  262. package/dist/{web → adapters/web}/token-store.js +1 -1
  263. package/dist/adapters/web/token-store.js.map +1 -0
  264. package/dist/adapters/web/types.d.ts.map +1 -0
  265. package/dist/adapters/web/types.js.map +1 -0
  266. package/dist/cli/arg-grammar.d.ts +11 -0
  267. package/dist/cli/arg-grammar.d.ts.map +1 -0
  268. package/dist/cli/arg-grammar.js +50 -0
  269. package/dist/cli/arg-grammar.js.map +1 -0
  270. package/dist/cli/boot.d.ts +5 -0
  271. package/dist/cli/boot.d.ts.map +1 -0
  272. package/dist/cli/boot.js +90 -0
  273. package/dist/cli/boot.js.map +1 -0
  274. package/dist/cli/download.d.ts.map +1 -0
  275. package/dist/cli/download.js +88 -0
  276. package/dist/cli/download.js.map +1 -0
  277. package/dist/cli/office.d.ts +2 -0
  278. package/dist/cli/office.d.ts.map +1 -0
  279. package/dist/cli/office.js +181 -0
  280. package/dist/cli/office.js.map +1 -0
  281. package/dist/cli/onboard.d.ts +10 -0
  282. package/dist/cli/onboard.d.ts.map +1 -0
  283. package/dist/cli/onboard.js +225 -0
  284. package/dist/cli/onboard.js.map +1 -0
  285. package/dist/cli/process-lifecycle.d.ts +19 -0
  286. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  287. package/dist/cli/process-lifecycle.js +67 -0
  288. package/dist/cli/process-lifecycle.js.map +1 -0
  289. package/dist/cli/sessions.d.ts +2 -0
  290. package/dist/cli/sessions.d.ts.map +1 -0
  291. package/dist/cli/sessions.js +88 -0
  292. package/dist/cli/sessions.js.map +1 -0
  293. package/dist/cli/types.d.ts +25 -0
  294. package/dist/cli/types.d.ts.map +1 -0
  295. package/dist/cli/types.js.map +1 -0
  296. package/dist/dream/index.d.ts +20 -0
  297. package/dist/dream/index.d.ts.map +1 -0
  298. package/dist/dream/index.js +264 -0
  299. package/dist/dream/index.js.map +1 -0
  300. package/dist/dream/types.d.ts +30 -0
  301. package/dist/dream/types.d.ts.map +1 -0
  302. package/dist/dream/types.js +2 -0
  303. package/dist/dream/types.js.map +1 -0
  304. package/dist/env-manifest.d.ts +38 -0
  305. package/dist/env-manifest.d.ts.map +1 -0
  306. package/dist/env-manifest.js +260 -0
  307. package/dist/env-manifest.js.map +1 -0
  308. package/dist/events/index.d.ts +172 -0
  309. package/dist/events/index.d.ts.map +1 -0
  310. package/dist/events/index.js +340 -0
  311. package/dist/events/index.js.map +1 -0
  312. package/dist/events/scheduler.d.ts +34 -0
  313. package/dist/events/scheduler.d.ts.map +1 -0
  314. package/dist/events/scheduler.js +231 -0
  315. package/dist/events/scheduler.js.map +1 -0
  316. package/dist/file-guards.d.ts +26 -0
  317. package/dist/file-guards.d.ts.map +1 -0
  318. package/dist/file-guards.js +133 -0
  319. package/dist/file-guards.js.map +1 -0
  320. package/dist/harness/execution-env.d.ts +19 -0
  321. package/dist/harness/execution-env.d.ts.map +1 -0
  322. package/dist/harness/execution-env.js +262 -0
  323. package/dist/harness/execution-env.js.map +1 -0
  324. package/dist/harness/execution-resolver.d.ts +25 -0
  325. package/dist/harness/execution-resolver.d.ts.map +1 -0
  326. package/dist/harness/execution-resolver.js +156 -0
  327. package/dist/harness/execution-resolver.js.map +1 -0
  328. package/dist/harness/index.d.ts +18 -13
  329. package/dist/harness/index.d.ts.map +1 -1
  330. package/dist/harness/index.js +11 -11
  331. package/dist/harness/index.js.map +1 -1
  332. package/dist/harness/jev.d.ts +86 -0
  333. package/dist/harness/jev.d.ts.map +1 -0
  334. package/dist/harness/jev.js +167 -0
  335. package/dist/harness/jev.js.map +1 -0
  336. package/dist/harness/mcp.d.ts +38 -0
  337. package/dist/harness/mcp.d.ts.map +1 -0
  338. package/dist/harness/mcp.js +304 -0
  339. package/dist/harness/mcp.js.map +1 -0
  340. package/dist/harness/models.d.ts +7 -4
  341. package/dist/harness/models.d.ts.map +1 -1
  342. package/dist/harness/models.js +54 -55
  343. package/dist/harness/models.js.map +1 -1
  344. package/dist/harness/open-connector.d.ts +25 -0
  345. package/dist/harness/open-connector.d.ts.map +1 -0
  346. package/dist/harness/open-connector.js +178 -0
  347. package/dist/harness/open-connector.js.map +1 -0
  348. package/dist/harness/presenter.d.ts +31 -0
  349. package/dist/harness/presenter.d.ts.map +1 -0
  350. package/dist/harness/presenter.js +859 -0
  351. package/dist/harness/presenter.js.map +1 -0
  352. package/dist/harness/prompt.d.ts +30 -0
  353. package/dist/harness/prompt.d.ts.map +1 -0
  354. package/dist/harness/prompt.js +420 -0
  355. package/dist/harness/prompt.js.map +1 -0
  356. package/dist/harness/runner.d.ts +2 -123
  357. package/dist/harness/runner.d.ts.map +1 -1
  358. package/dist/harness/runner.js +551 -416
  359. package/dist/harness/runner.js.map +1 -1
  360. package/dist/harness/session.d.ts +122 -0
  361. package/dist/harness/session.d.ts.map +1 -0
  362. package/dist/harness/session.js +581 -0
  363. package/dist/harness/session.js.map +1 -0
  364. package/dist/harness/skills.d.ts +17 -28
  365. package/dist/harness/skills.d.ts.map +1 -1
  366. package/dist/harness/skills.js +104 -39
  367. package/dist/harness/skills.js.map +1 -1
  368. package/dist/harness/subagent-profiles.d.ts +8 -0
  369. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  370. package/dist/harness/subagent-profiles.js +293 -0
  371. package/dist/harness/subagent-profiles.js.map +1 -0
  372. package/dist/harness/subagent.d.ts +64 -0
  373. package/dist/harness/subagent.d.ts.map +1 -0
  374. package/dist/harness/subagent.js +687 -0
  375. package/dist/harness/subagent.js.map +1 -0
  376. package/dist/harness/tools/attach.d.ts.map +1 -0
  377. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  378. package/dist/harness/tools/attach.js.map +1 -0
  379. package/dist/{tools → harness/tools}/event.d.ts +4 -33
  380. package/dist/harness/tools/event.d.ts.map +1 -0
  381. package/dist/harness/tools/event.js +175 -0
  382. package/dist/harness/tools/event.js.map +1 -0
  383. package/dist/harness/tools/generate-image.d.ts +23 -0
  384. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  385. package/dist/harness/tools/generate-image.js +65 -0
  386. package/dist/harness/tools/generate-image.js.map +1 -0
  387. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  388. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  389. package/dist/harness/tools/host-fn-tool.js +32 -0
  390. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  391. package/dist/harness/tools/index.d.ts +41 -0
  392. package/dist/harness/tools/index.d.ts.map +1 -0
  393. package/dist/harness/tools/index.js +51 -0
  394. package/dist/harness/tools/index.js.map +1 -0
  395. package/dist/harness/tools/jev.d.ts +21 -0
  396. package/dist/harness/tools/jev.d.ts.map +1 -0
  397. package/dist/harness/tools/jev.js +109 -0
  398. package/dist/harness/tools/jev.js.map +1 -0
  399. package/dist/harness/tools/pi-tools.d.ts +18 -0
  400. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  401. package/dist/harness/tools/pi-tools.js +84 -0
  402. package/dist/harness/tools/pi-tools.js.map +1 -0
  403. package/dist/harness/tools/react.d.ts.map +1 -0
  404. package/dist/{tools → harness/tools}/react.js +6 -17
  405. package/dist/harness/tools/react.js.map +1 -0
  406. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  407. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  408. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  409. package/dist/harness/tools/sandbox.js.map +1 -0
  410. package/dist/harness/tools/subagent.d.ts +85 -0
  411. package/dist/harness/tools/subagent.d.ts.map +1 -0
  412. package/dist/harness/tools/subagent.js +677 -0
  413. package/dist/harness/tools/subagent.js.map +1 -0
  414. package/dist/harness/tools/task.d.ts +20 -0
  415. package/dist/harness/tools/task.d.ts.map +1 -0
  416. package/dist/harness/tools/task.js +79 -0
  417. package/dist/harness/tools/task.js.map +1 -0
  418. package/dist/harness/tools/types.d.ts +29 -0
  419. package/dist/harness/tools/types.d.ts.map +1 -0
  420. package/dist/harness/tools/types.js +2 -0
  421. package/dist/harness/tools/types.js.map +1 -0
  422. package/dist/harness/types.d.ts +384 -25
  423. package/dist/harness/types.d.ts.map +1 -1
  424. package/dist/harness/types.js +1 -1
  425. package/dist/harness/types.js.map +1 -1
  426. package/dist/index.d.ts +33 -9
  427. package/dist/index.d.ts.map +1 -1
  428. package/dist/index.js +19 -6
  429. package/dist/index.js.map +1 -1
  430. package/dist/log.d.ts.map +1 -1
  431. package/dist/log.js +4 -1
  432. package/dist/log.js.map +1 -1
  433. package/dist/main.js +357 -198
  434. package/dist/main.js.map +1 -1
  435. package/dist/observability/index.d.ts +33 -0
  436. package/dist/observability/index.d.ts.map +1 -0
  437. package/dist/observability/index.js +257 -0
  438. package/dist/observability/index.js.map +1 -0
  439. package/dist/observability/instrument.js +14 -6
  440. package/dist/observability/instrument.js.map +1 -1
  441. package/dist/observability/otel.d.ts +10 -0
  442. package/dist/observability/otel.d.ts.map +1 -0
  443. package/dist/observability/otel.js +183 -0
  444. package/dist/observability/otel.js.map +1 -0
  445. package/dist/observability/sentry.d.ts +40 -7
  446. package/dist/observability/sentry.d.ts.map +1 -1
  447. package/dist/observability/sentry.js +176 -32
  448. package/dist/observability/sentry.js.map +1 -1
  449. package/dist/observability/types.d.ts +24 -3
  450. package/dist/observability/types.d.ts.map +1 -1
  451. package/dist/observability/types.js.map +1 -1
  452. package/dist/office/index.d.ts +139 -0
  453. package/dist/office/index.d.ts.map +1 -0
  454. package/dist/office/index.js +1084 -0
  455. package/dist/office/index.js.map +1 -0
  456. package/dist/office/projection.d.ts +42 -0
  457. package/dist/office/projection.d.ts.map +1 -0
  458. package/dist/office/projection.js +182 -0
  459. package/dist/office/projection.js.map +1 -0
  460. package/dist/office/types.d.ts +116 -0
  461. package/dist/office/types.d.ts.map +1 -0
  462. package/dist/office/types.js +2 -0
  463. package/dist/office/types.js.map +1 -0
  464. package/dist/runtime/conversation-runtime.d.ts +1 -1
  465. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  466. package/dist/runtime/conversation-runtime.js +423 -152
  467. package/dist/runtime/conversation-runtime.js.map +1 -1
  468. package/dist/runtime/session-lifecycle.d.ts +76 -0
  469. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  470. package/dist/runtime/session-lifecycle.js +404 -0
  471. package/dist/runtime/session-lifecycle.js.map +1 -0
  472. package/dist/runtime/types.d.ts +63 -15
  473. package/dist/runtime/types.d.ts.map +1 -1
  474. package/dist/runtime/types.js.map +1 -1
  475. package/dist/sandbox/cloudflare.d.ts +4 -0
  476. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  477. package/dist/sandbox/cloudflare.js +54 -52
  478. package/dist/sandbox/cloudflare.js.map +1 -1
  479. package/dist/sandbox/container.d.ts +3 -0
  480. package/dist/sandbox/container.d.ts.map +1 -1
  481. package/dist/sandbox/container.js +19 -7
  482. package/dist/sandbox/container.js.map +1 -1
  483. package/dist/sandbox/host.d.ts +3 -0
  484. package/dist/sandbox/host.d.ts.map +1 -1
  485. package/dist/sandbox/host.js +44 -35
  486. package/dist/sandbox/host.js.map +1 -1
  487. package/dist/sandbox/identity.d.ts +42 -0
  488. package/dist/sandbox/identity.d.ts.map +1 -0
  489. package/dist/sandbox/identity.js +77 -0
  490. package/dist/sandbox/identity.js.map +1 -0
  491. package/dist/sandbox/index.d.ts +24 -6
  492. package/dist/sandbox/index.d.ts.map +1 -1
  493. package/dist/sandbox/index.js +77 -17
  494. package/dist/sandbox/index.js.map +1 -1
  495. package/dist/sandbox/provisioner.d.ts +139 -0
  496. package/dist/sandbox/provisioner.d.ts.map +1 -0
  497. package/dist/{provisioner.js → sandbox/provisioner.js} +378 -24
  498. package/dist/sandbox/provisioner.js.map +1 -0
  499. package/dist/sandbox/types.d.ts +43 -9
  500. package/dist/sandbox/types.d.ts.map +1 -1
  501. package/dist/sandbox/types.js.map +1 -1
  502. package/dist/sandbox/utils.d.ts +24 -0
  503. package/dist/sandbox/utils.d.ts.map +1 -1
  504. package/dist/sandbox/utils.js +92 -1
  505. package/dist/sandbox/utils.js.map +1 -1
  506. package/dist/sessions/chat-history-sync.d.ts +23 -0
  507. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  508. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +239 -175
  509. package/dist/sessions/chat-history-sync.js.map +1 -0
  510. package/dist/sessions/history-line.d.ts +29 -0
  511. package/dist/sessions/history-line.d.ts.map +1 -0
  512. package/dist/sessions/history-line.js +45 -0
  513. package/dist/sessions/history-line.js.map +1 -0
  514. package/dist/sessions/migrate-common.d.ts +43 -0
  515. package/dist/sessions/migrate-common.d.ts.map +1 -0
  516. package/dist/sessions/migrate-common.js +99 -0
  517. package/dist/sessions/migrate-common.js.map +1 -0
  518. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  519. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  520. package/dist/sessions/migrate-pi-084.js +302 -0
  521. package/dist/sessions/migrate-pi-084.js.map +1 -0
  522. package/dist/sessions/migrate-v3.d.ts +15 -0
  523. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  524. package/dist/sessions/migrate-v3.js +419 -0
  525. package/dist/sessions/migrate-v3.js.map +1 -0
  526. package/dist/sessions/session-key.d.ts +33 -0
  527. package/dist/sessions/session-key.d.ts.map +1 -0
  528. package/dist/sessions/session-key.js +115 -0
  529. package/dist/sessions/session-key.js.map +1 -0
  530. package/dist/sessions/session-store.d.ts +61 -0
  531. package/dist/sessions/session-store.d.ts.map +1 -0
  532. package/dist/sessions/session-store.js +684 -0
  533. package/dist/sessions/session-store.js.map +1 -0
  534. package/dist/sessions/store.d.ts +17 -10
  535. package/dist/sessions/store.d.ts.map +1 -1
  536. package/dist/sessions/store.js +182 -47
  537. package/dist/sessions/store.js.map +1 -1
  538. package/dist/sessions/types.d.ts +74 -8
  539. package/dist/sessions/types.d.ts.map +1 -1
  540. package/dist/sessions/types.js +1 -1
  541. package/dist/sessions/types.js.map +1 -1
  542. package/dist/settings/apply.d.ts +16 -0
  543. package/dist/settings/apply.d.ts.map +1 -0
  544. package/dist/settings/apply.js +60 -0
  545. package/dist/settings/apply.js.map +1 -0
  546. package/dist/settings/index.d.ts +126 -0
  547. package/dist/settings/index.d.ts.map +1 -0
  548. package/dist/settings/index.js +422 -0
  549. package/dist/settings/index.js.map +1 -0
  550. package/dist/settings/migrate.d.ts +21 -0
  551. package/dist/settings/migrate.d.ts.map +1 -0
  552. package/dist/settings/migrate.js +86 -0
  553. package/dist/settings/migrate.js.map +1 -0
  554. package/dist/types.d.ts +330 -141
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +2 -2
  557. package/dist/types.js.map +1 -1
  558. package/dist/vault/index.d.ts +52 -2
  559. package/dist/vault/index.d.ts.map +1 -1
  560. package/dist/vault/index.js +218 -86
  561. package/dist/vault/index.js.map +1 -1
  562. package/dist/vault/types.d.ts +6 -2
  563. package/dist/vault/types.d.ts.map +1 -1
  564. package/dist/vault/types.js.map +1 -1
  565. package/package.json +79 -40
  566. package/dist/adapter.d.ts +0 -2
  567. package/dist/adapter.d.ts.map +0 -1
  568. package/dist/adapter.js +0 -2
  569. package/dist/adapter.js.map +0 -1
  570. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  571. package/dist/adapters/slack/tools/attach.js.map +0 -1
  572. package/dist/adapters/streaming.d.ts +0 -18
  573. package/dist/adapters/streaming.d.ts.map +0 -1
  574. package/dist/adapters/streaming.js +0 -44
  575. package/dist/adapters/streaming.js.map +0 -1
  576. package/dist/adapters/telegram/html.d.ts +0 -3
  577. package/dist/adapters/telegram/html.d.ts.map +0 -1
  578. package/dist/adapters/telegram/html.js +0 -98
  579. package/dist/adapters/telegram/html.js.map +0 -1
  580. package/dist/agent-events.d.ts +0 -5
  581. package/dist/agent-events.d.ts.map +0 -1
  582. package/dist/agent-events.js +0 -26
  583. package/dist/agent-events.js.map +0 -1
  584. package/dist/agent.d.ts +0 -39
  585. package/dist/agent.d.ts.map +0 -1
  586. package/dist/agent.js +0 -1291
  587. package/dist/agent.js.map +0 -1
  588. package/dist/cli/ext-git.d.ts +0 -22
  589. package/dist/cli/ext-git.d.ts.map +0 -1
  590. package/dist/cli/ext-git.js +0 -76
  591. package/dist/cli/ext-git.js.map +0 -1
  592. package/dist/cli/ext.d.ts +0 -2
  593. package/dist/cli/ext.d.ts.map +0 -1
  594. package/dist/cli/ext.js +0 -217
  595. package/dist/cli/ext.js.map +0 -1
  596. package/dist/commands/admin.d.ts.map +0 -1
  597. package/dist/commands/admin.js.map +0 -1
  598. package/dist/commands/auto-reply.d.ts.map +0 -1
  599. package/dist/commands/auto-reply.js +0 -76
  600. package/dist/commands/auto-reply.js.map +0 -1
  601. package/dist/commands/extensions.d.ts +0 -14
  602. package/dist/commands/extensions.d.ts.map +0 -1
  603. package/dist/commands/extensions.js +0 -55
  604. package/dist/commands/extensions.js.map +0 -1
  605. package/dist/commands/login.d.ts +0 -5
  606. package/dist/commands/login.d.ts.map +0 -1
  607. package/dist/commands/login.js +0 -115
  608. package/dist/commands/login.js.map +0 -1
  609. package/dist/commands/model.d.ts +0 -10
  610. package/dist/commands/model.d.ts.map +0 -1
  611. package/dist/commands/model.js +0 -102
  612. package/dist/commands/model.js.map +0 -1
  613. package/dist/commands/new.d.ts.map +0 -1
  614. package/dist/commands/new.js +0 -25
  615. package/dist/commands/new.js.map +0 -1
  616. package/dist/commands/parse.d.ts +0 -7
  617. package/dist/commands/parse.d.ts.map +0 -1
  618. package/dist/commands/parse.js +0 -14
  619. package/dist/commands/parse.js.map +0 -1
  620. package/dist/commands/registry.d.ts +0 -5
  621. package/dist/commands/registry.d.ts.map +0 -1
  622. package/dist/commands/registry.js +0 -31
  623. package/dist/commands/registry.js.map +0 -1
  624. package/dist/commands/sandbox.d.ts.map +0 -1
  625. package/dist/commands/sandbox.js +0 -78
  626. package/dist/commands/sandbox.js.map +0 -1
  627. package/dist/commands/session-view.d.ts.map +0 -1
  628. package/dist/commands/session-view.js.map +0 -1
  629. package/dist/commands/types.d.ts +0 -66
  630. package/dist/commands/types.d.ts.map +0 -1
  631. package/dist/commands/types.js.map +0 -1
  632. package/dist/commands/utils.d.ts +0 -11
  633. package/dist/commands/utils.d.ts.map +0 -1
  634. package/dist/commands/utils.js.map +0 -1
  635. package/dist/config.d.ts +0 -78
  636. package/dist/config.d.ts.map +0 -1
  637. package/dist/config.js +0 -450
  638. package/dist/config.js.map +0 -1
  639. package/dist/download.d.ts.map +0 -1
  640. package/dist/download.js +0 -89
  641. package/dist/download.js.map +0 -1
  642. package/dist/events.d.ts +0 -43
  643. package/dist/events.d.ts.map +0 -1
  644. package/dist/events.js +0 -456
  645. package/dist/events.js.map +0 -1
  646. package/dist/execution-resolver.d.ts +0 -21
  647. package/dist/execution-resolver.d.ts.map +0 -1
  648. package/dist/execution-resolver.js +0 -170
  649. package/dist/execution-resolver.js.map +0 -1
  650. package/dist/harness/auth.d.ts +0 -16
  651. package/dist/harness/auth.d.ts.map +0 -1
  652. package/dist/harness/auth.js +0 -86
  653. package/dist/harness/auth.js.map +0 -1
  654. package/dist/harness/extensions/loader.d.ts +0 -86
  655. package/dist/harness/extensions/loader.d.ts.map +0 -1
  656. package/dist/harness/extensions/loader.js +0 -525
  657. package/dist/harness/extensions/loader.js.map +0 -1
  658. package/dist/harness/extensions/registry.d.ts +0 -23
  659. package/dist/harness/extensions/registry.d.ts.map +0 -1
  660. package/dist/harness/extensions/registry.js +0 -45
  661. package/dist/harness/extensions/registry.js.map +0 -1
  662. package/dist/harness/extensions/types.d.ts +0 -248
  663. package/dist/harness/extensions/types.d.ts.map +0 -1
  664. package/dist/harness/extensions/types.js.map +0 -1
  665. package/dist/harness/session-store.d.ts +0 -77
  666. package/dist/harness/session-store.d.ts.map +0 -1
  667. package/dist/harness/session-store.js +0 -248
  668. package/dist/harness/session-store.js.map +0 -1
  669. package/dist/harness/settings.d.ts +0 -47
  670. package/dist/harness/settings.d.ts.map +0 -1
  671. package/dist/harness/settings.js +0 -29
  672. package/dist/harness/settings.js.map +0 -1
  673. package/dist/model-registry.d.ts +0 -4
  674. package/dist/model-registry.d.ts.map +0 -1
  675. package/dist/model-registry.js +0 -7
  676. package/dist/model-registry.js.map +0 -1
  677. package/dist/platform-messages.d.ts.map +0 -1
  678. package/dist/platform-messages.js.map +0 -1
  679. package/dist/portal-shell.d.ts +0 -4
  680. package/dist/portal-shell.d.ts.map +0 -1
  681. package/dist/portal-shell.js.map +0 -1
  682. package/dist/provisioner.d.ts +0 -61
  683. package/dist/provisioner.d.ts.map +0 -1
  684. package/dist/provisioner.js.map +0 -1
  685. package/dist/runtime/agent-run-controller.d.ts +0 -31
  686. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  687. package/dist/runtime/agent-run-controller.js +0 -195
  688. package/dist/runtime/agent-run-controller.js.map +0 -1
  689. package/dist/sandbox/errors.d.ts +0 -6
  690. package/dist/sandbox/errors.d.ts.map +0 -1
  691. package/dist/sandbox/errors.js +0 -11
  692. package/dist/sandbox/errors.js.map +0 -1
  693. package/dist/sandbox/firecracker.d.ts +0 -15
  694. package/dist/sandbox/firecracker.d.ts.map +0 -1
  695. package/dist/sandbox/firecracker.js +0 -212
  696. package/dist/sandbox/firecracker.js.map +0 -1
  697. package/dist/sandbox/image.d.ts +0 -3
  698. package/dist/sandbox/image.d.ts.map +0 -1
  699. package/dist/sandbox/image.js +0 -27
  700. package/dist/sandbox/image.js.map +0 -1
  701. package/dist/sandbox/path-context.d.ts +0 -3
  702. package/dist/sandbox/path-context.d.ts.map +0 -1
  703. package/dist/sandbox/path-context.js +0 -20
  704. package/dist/sandbox/path-context.js.map +0 -1
  705. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  706. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  707. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  708. package/dist/sessions/metadata.d.ts +0 -3
  709. package/dist/sessions/metadata.d.ts.map +0 -1
  710. package/dist/sessions/metadata.js +0 -11
  711. package/dist/sessions/metadata.js.map +0 -1
  712. package/dist/sessions/policy.d.ts +0 -6
  713. package/dist/sessions/policy.d.ts.map +0 -1
  714. package/dist/sessions/policy.js +0 -23
  715. package/dist/sessions/policy.js.map +0 -1
  716. package/dist/store.d.ts +0 -46
  717. package/dist/store.d.ts.map +0 -1
  718. package/dist/store.js +0 -177
  719. package/dist/store.js.map +0 -1
  720. package/dist/tools/bash.d.ts +0 -10
  721. package/dist/tools/bash.d.ts.map +0 -1
  722. package/dist/tools/bash.js +0 -80
  723. package/dist/tools/bash.js.map +0 -1
  724. package/dist/tools/edit.d.ts +0 -11
  725. package/dist/tools/edit.d.ts.map +0 -1
  726. package/dist/tools/edit.js +0 -131
  727. package/dist/tools/edit.js.map +0 -1
  728. package/dist/tools/event.d.ts.map +0 -1
  729. package/dist/tools/event.js +0 -252
  730. package/dist/tools/event.js.map +0 -1
  731. package/dist/tools/index.d.ts +0 -24
  732. package/dist/tools/index.d.ts.map +0 -1
  733. package/dist/tools/index.js +0 -31
  734. package/dist/tools/index.js.map +0 -1
  735. package/dist/tools/react.d.ts.map +0 -1
  736. package/dist/tools/react.js.map +0 -1
  737. package/dist/tools/read.d.ts +0 -11
  738. package/dist/tools/read.d.ts.map +0 -1
  739. package/dist/tools/read.js +0 -134
  740. package/dist/tools/read.js.map +0 -1
  741. package/dist/tools/sandbox.d.ts.map +0 -1
  742. package/dist/tools/sandbox.js.map +0 -1
  743. package/dist/tools/truncate.d.ts +0 -33
  744. package/dist/tools/truncate.d.ts.map +0 -1
  745. package/dist/tools/truncate.js +0 -184
  746. package/dist/tools/truncate.js.map +0 -1
  747. package/dist/tools/types.d.ts +0 -54
  748. package/dist/tools/types.d.ts.map +0 -1
  749. package/dist/tools/types.js.map +0 -1
  750. package/dist/tools/write.d.ts +0 -10
  751. package/dist/tools/write.d.ts.map +0 -1
  752. package/dist/tools/write.js +0 -29
  753. package/dist/tools/write.js.map +0 -1
  754. package/dist/trigger.d.ts +0 -22
  755. package/dist/trigger.d.ts.map +0 -1
  756. package/dist/trigger.js +0 -100
  757. package/dist/trigger.js.map +0 -1
  758. package/dist/utils/date.d.ts +0 -10
  759. package/dist/utils/date.d.ts.map +0 -1
  760. package/dist/utils/date.js +0 -23
  761. package/dist/utils/date.js.map +0 -1
  762. package/dist/utils/env.d.ts +0 -3
  763. package/dist/utils/env.d.ts.map +0 -1
  764. package/dist/utils/env.js +0 -12
  765. package/dist/utils/env.js.map +0 -1
  766. package/dist/utils/file-guards.d.ts +0 -9
  767. package/dist/utils/file-guards.d.ts.map +0 -1
  768. package/dist/utils/file-guards.js +0 -59
  769. package/dist/utils/file-guards.js.map +0 -1
  770. package/dist/utils/fs-atomic.d.ts +0 -10
  771. package/dist/utils/fs-atomic.d.ts.map +0 -1
  772. package/dist/utils/fs-atomic.js +0 -45
  773. package/dist/utils/fs-atomic.js.map +0 -1
  774. package/dist/utils/html.d.ts +0 -2
  775. package/dist/utils/html.d.ts.map +0 -1
  776. package/dist/utils/html.js +0 -4
  777. package/dist/utils/html.js.map +0 -1
  778. package/dist/utils/http-body.d.ts +0 -10
  779. package/dist/utils/http-body.d.ts.map +0 -1
  780. package/dist/utils/http-body.js +0 -34
  781. package/dist/utils/http-body.js.map +0 -1
  782. package/dist/vault/routing.d.ts +0 -3
  783. package/dist/vault/routing.d.ts.map +0 -1
  784. package/dist/vault/routing.js +0 -13
  785. package/dist/vault/routing.js.map +0 -1
  786. package/dist/web/admin/portal.d.ts +0 -5
  787. package/dist/web/admin/portal.d.ts.map +0 -1
  788. package/dist/web/admin/portal.js +0 -2572
  789. package/dist/web/admin/portal.js.map +0 -1
  790. package/dist/web/admin/provider-models.d.ts.map +0 -1
  791. package/dist/web/admin/provider-models.js.map +0 -1
  792. package/dist/web/admin/store.d.ts +0 -13
  793. package/dist/web/admin/store.d.ts.map +0 -1
  794. package/dist/web/admin/store.js +0 -14
  795. package/dist/web/admin/store.js.map +0 -1
  796. package/dist/web/admin/types.d.ts +0 -30
  797. package/dist/web/admin/types.d.ts.map +0 -1
  798. package/dist/web/admin/types.js.map +0 -1
  799. package/dist/web/agent-events/portal.d.ts +0 -3
  800. package/dist/web/agent-events/portal.d.ts.map +0 -1
  801. package/dist/web/agent-events/portal.js +0 -18
  802. package/dist/web/agent-events/portal.js.map +0 -1
  803. package/dist/web/login/oauth.d.ts +0 -6
  804. package/dist/web/login/oauth.d.ts.map +0 -1
  805. package/dist/web/login/oauth.js.map +0 -1
  806. package/dist/web/login/portal.d.ts.map +0 -1
  807. package/dist/web/login/portal.js.map +0 -1
  808. package/dist/web/login/store.d.ts +0 -8
  809. package/dist/web/login/store.d.ts.map +0 -1
  810. package/dist/web/login/store.js +0 -15
  811. package/dist/web/login/store.js.map +0 -1
  812. package/dist/web/login/types.d.ts.map +0 -1
  813. package/dist/web/login/types.js.map +0 -1
  814. package/dist/web/request.d.ts +0 -3
  815. package/dist/web/request.d.ts.map +0 -1
  816. package/dist/web/request.js +0 -13
  817. package/dist/web/request.js.map +0 -1
  818. package/dist/web/server.d.ts.map +0 -1
  819. package/dist/web/server.js.map +0 -1
  820. package/dist/web/session-view/command.d.ts +0 -4
  821. package/dist/web/session-view/command.d.ts.map +0 -1
  822. package/dist/web/session-view/command.js +0 -7
  823. package/dist/web/session-view/command.js.map +0 -1
  824. package/dist/web/session-view/portal.d.ts +0 -13
  825. package/dist/web/session-view/portal.d.ts.map +0 -1
  826. package/dist/web/session-view/portal.js.map +0 -1
  827. package/dist/web/session-view/service.d.ts +0 -6
  828. package/dist/web/session-view/service.d.ts.map +0 -1
  829. package/dist/web/session-view/service.js +0 -498
  830. package/dist/web/session-view/service.js.map +0 -1
  831. package/dist/web/session-view/store.d.ts +0 -8
  832. package/dist/web/session-view/store.d.ts.map +0 -1
  833. package/dist/web/session-view/store.js +0 -15
  834. package/dist/web/session-view/store.js.map +0 -1
  835. package/dist/web/session-view/types.d.ts.map +0 -1
  836. package/dist/web/session-view/types.js.map +0 -1
  837. package/dist/web/token-store.d.ts.map +0 -1
  838. package/dist/web/token-store.js.map +0 -1
  839. package/dist/web/types.d.ts.map +0 -1
  840. package/dist/web/types.js.map +0 -1
  841. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  842. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  843. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  844. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  845. /package/dist/{commands → adapters/commands}/types.js +0 -0
  846. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  847. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  848. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  849. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  850. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  851. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  852. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  853. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  854. /package/dist/{web → cli}/types.js +0 -0
  855. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  856. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -1,11 +1,23 @@
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
+ import { normalizeSlackCurrencyBold } from "./markdown.js";
7
+ import { slackPersonaForProfile } from "./persona.js";
8
+ const MAX_MAIN_LENGTH = 35000;
9
+ /**
10
+ * Slack's own SDK buffers streamed output at this size before sending, for
11
+ * exactly the reason we do: appends are rate-limited per call, so forwarding
12
+ * every token spends the budget on latency nobody can perceive.
13
+ */
14
+ const STREAM_MIN_DELTA_CHARS = 256;
6
15
  const MAX_THREAD_LENGTH = 20000;
7
16
  const FALLBACK_MAIN_LENGTH = 3000;
8
- const WORKING_INDICATOR = " ...";
17
+ // A separate paragraph preserves a rich_text block while headings/tables grow.
18
+ // Inline suffixes become part of header/table, and Slack can reject replacing
19
+ // an existing rich_text-only message with that non-rich-text-only shape.
20
+ const WORKING_INDICATOR = "\n\n...";
9
21
  const TRUNCATION_NOTE_INCREMENTAL = "\n\n_(message truncated, ask me to elaborate on specific parts)_";
10
22
  const formatSlackContinuation = (partNum) => `_(continued ${partNum})_`;
11
23
  function isSlackMsgTooLong(err) {
@@ -13,28 +25,43 @@ function isSlackMsgTooLong(err) {
13
25
  const message = err instanceof Error ? err.message : String(err);
14
26
  return data?.error === "msg_too_long" || message.includes("msg_too_long");
15
27
  }
28
+ /**
29
+ * Where to cut a response that has to be truncated.
30
+ *
31
+ * Back off to the last line break rather than slicing at the exact budget: a
32
+ * hard cut lands mid-word, and since the notice is inserted between the two
33
+ * halves, the line cannot be read whole in either place. Only back off within
34
+ * reach of the limit — a response with no line break in its final quarter has
35
+ * nothing better to offer, and losing a quarter of it would be worse.
36
+ */
37
+ function truncationCut(text, limit) {
38
+ if (text.length <= limit)
39
+ return text.length;
40
+ const lastBreak = text.lastIndexOf("\n", limit);
41
+ return lastBreak > limit * 0.75 ? lastBreak : limit;
42
+ }
16
43
  function fallbackLongSlackText(text, overflowLink, prefixLength = FALLBACK_MAIN_LENGTH) {
17
44
  const suffix = overflowLink
18
45
  ? `\n\n_(message too long for Slack; continued in thread; session view: <${overflowLink}|open>)_`
19
46
  : "\n\n_(message too long for Slack; continued in thread)_";
20
- return `${text.slice(0, prefixLength)}${suffix}`;
47
+ const cut = truncationCut(text, prefixLength);
48
+ return { text: `${text.slice(0, cut)}${suffix}`, cut };
21
49
  }
22
50
  async function postSlackTextWithFallback(post, text, overflowLink) {
23
51
  let prefixLength = FALLBACK_MAIN_LENGTH;
24
- let lastErr;
25
52
  for (;;) {
26
- const fallbackText = fallbackLongSlackText(text, overflowLink, prefixLength);
53
+ const fallback = fallbackLongSlackText(text, overflowLink, prefixLength);
27
54
  try {
28
- const result = await post(fallbackText);
29
- return { result, text: fallbackText, prefixLength };
55
+ await post(fallback.text);
56
+ // The continuation resumes from where the text was actually cut, which
57
+ // is not the nominal budget once it backs off to a line break.
58
+ return { text: fallback.text, prefixLength: fallback.cut };
30
59
  }
31
60
  catch (err) {
32
61
  if (!isSlackMsgTooLong(err))
33
62
  throw err;
34
- lastErr = err;
35
- if (prefixLength === 0) {
36
- throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
37
- }
63
+ if (prefixLength === 0)
64
+ throw err;
38
65
  prefixLength = Math.max(0, Math.floor(prefixLength / 2));
39
66
  }
40
67
  }
@@ -51,357 +78,246 @@ function formatSlackToolResult(result) {
51
78
  text += `*Result:*\n\`\`\`\n${result.result}\n\`\`\``;
52
79
  return text;
53
80
  }
54
- export function createSlackResponseContext({ event, slack, sessionPlan, replyMode, message, }) {
55
- let messageTs = sessionPlan.initialMessageTs ?? null;
56
- let assistantStatusFailureWarned = false;
57
- const onAssistantStatusError = (label, err) => {
58
- if (assistantStatusFailureWarned)
81
+ function closeOpenFences(text) {
82
+ let openMarker = null;
83
+ for (const line of text.split("\n")) {
84
+ const marker = line.match(/^\s*(`{3,}|~{3,})/)?.[1];
85
+ if (marker === undefined)
86
+ continue;
87
+ if (openMarker === null)
88
+ openMarker = marker;
89
+ else if (marker[0] === openMarker[0] && marker.length >= openMarker.length)
90
+ openMarker = null;
91
+ }
92
+ return openMarker ? `${text}\n${openMarker}` : text;
93
+ }
94
+ function needsCanonicalRender(text) {
95
+ if (normalizeSlackCurrencyBold(text) !== text)
96
+ return true;
97
+ return renderSlackBlocks(text).blocks.some((block) => block.type === "table");
98
+ }
99
+ class SlackResponseLifecycle {
100
+ constructor(context) {
101
+ this.context = context;
102
+ this.assistantStatusFailureWarned = false;
103
+ this.statusEnded = false;
104
+ this.statusRequested = false;
105
+ /** The tail of an over-long response, awaiting delivery to a thread. */
106
+ this.pendingContinuation = "";
107
+ this.continuationAnchor = null;
108
+ /** How much of that tail the thread already holds. */
109
+ this.continuationSent = "";
110
+ }
111
+ onAssistantStatusError(label, err) {
112
+ if (this.assistantStatusFailureWarned)
59
113
  return;
60
- assistantStatusFailureWarned = true;
114
+ this.assistantStatusFailureWarned = true;
61
115
  log.logWarning(`Slack setAssistantStatus failed (${label}; further occurrences suppressed for this session)`, err instanceof Error ? err.message : String(err));
62
- };
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;
116
+ }
117
+ async postThreadDiagnostic(text, options = {}, responseId) {
118
+ const { event, sessionPlan, slack } = this.context;
119
+ const threadAnchor = responseId ?? sessionPlan.rootTs;
90
120
  if (!threadAnchor)
91
- return;
121
+ return [];
122
+ const ids = [];
92
123
  for (const part of splitText(text, MAX_THREAD_LENGTH, formatSlackContinuation)) {
93
- if (options?.style === "muted") {
94
- const ts = await slack.postInThreadBlocks(channelId, threadAnchor, part, [
124
+ if (options.style === "muted") {
125
+ ids.push(await slack.postInThreadBlocks(event.channel, threadAnchor, part, [
95
126
  buildMrkdwnContextBlock(part),
96
- ]);
97
- threadMessageTs.push(ts);
127
+ ]));
98
128
  }
99
129
  else {
100
- const diagnosticText = options?.style === "error" ? `_${part}_` : part;
101
- const ts = await slack.postInThread(channelId, threadAnchor, diagnosticText);
102
- threadMessageTs.push(ts);
130
+ ids.push(await slack.postInThread(event.channel, threadAnchor, options.style === "error" ? `_${part}_` : part));
103
131
  }
104
132
  }
105
- };
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)
133
+ return ids;
134
+ }
135
+ /**
136
+ * Deliver the tail of an over-long response to its thread.
137
+ *
138
+ * Called only at points where the response is final, and idempotent, so the
139
+ * replace path and the end of the run can both call it without the thread
140
+ * seeing anything twice. Sending the whole remainder in one message is also
141
+ * what keeps it faithful: Slack trims message text, so every extra split is
142
+ * a chance to drop the whitespace it lands on.
143
+ */
144
+ async flushContinuation() {
145
+ if (!this.pendingContinuation || this.pendingContinuation === this.continuationSent)
143
146
  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);
147
+ const extendsSentPrefix = this.pendingContinuation.startsWith(this.continuationSent);
148
+ const unsent = extendsSentPrefix
149
+ ? this.pendingContinuation.slice(this.continuationSent.length)
150
+ : this.pendingContinuation;
151
+ if (!unsent.trim())
154
152
  return;
153
+ await this.postThreadDiagnostic(extendsSentPrefix && this.continuationSent
154
+ ? unsent
155
+ : `_(continued from truncated message)_\n\n${unsent}`, {}, this.continuationAnchor);
156
+ this.continuationSent = this.pendingContinuation;
157
+ }
158
+ requestStatus(status) {
159
+ const { event, sessionPlan, slack } = this.context;
160
+ if (!sessionPlan.rootTs)
161
+ return;
162
+ void slack
163
+ .setAssistantStatus(event.channel, sessionPlan.rootTs, status)
164
+ .catch((err) => this.onAssistantStatusError(status ? "typing" : "clear-on-idle", err));
165
+ }
166
+ endStatus() {
167
+ if (this.statusEnded)
168
+ return;
169
+ this.statusEnded = true;
170
+ this.requestStatus("");
171
+ }
172
+ async deleteMessage(id) {
173
+ this.endStatus();
174
+ const { event, slack } = this.context;
175
+ await slack.deleteMessage(event.channel, id);
176
+ }
177
+ async setTyping(isTyping, responseId) {
178
+ const { eventFilename, sessionPlan } = this.context;
179
+ if (!isTyping || responseId || !sessionPlan.rootTs || this.statusEnded || this.statusRequested)
180
+ return;
181
+ this.statusRequested = true;
182
+ this.requestStatus(eventFilename ? `Starting event: ${eventFilename}` : "Thinking");
183
+ }
184
+ async onWorkingChanged(working) {
185
+ if (!working)
186
+ this.endStatus();
187
+ }
188
+ async onFinish(text, responseId) {
189
+ const { event, replyInThread, sessionPlan, slack } = this.context;
190
+ if (responseId && text.trim()) {
191
+ slack.logBotResponse(event.channel, text, responseId, replyInThread ? sessionPlan.rootTs : undefined);
155
192
  }
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);
198
- },
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);
193
+ this.endStatus();
194
+ await this.flushContinuation();
195
+ }
196
+ async handleTooLong({ text, operation, options, responseId, write, getResponseId, }) {
197
+ const { replyInThread, sessionPlan } = this.context;
198
+ let overflowLink;
199
+ const resolveOverflowLink = () => {
200
+ if (overflowLink === undefined && options?.createOverflowLink) {
201
+ overflowLink = options.createOverflowLink();
227
202
  }
228
- },
203
+ return overflowLink;
204
+ };
205
+ const fallback = await postSlackTextWithFallback(write, text, resolveOverflowLink());
206
+ // The truncation notice promises a thread continuation unconditionally,
207
+ // so every path that prints it has to deliver one. Incremental renders
208
+ // reach this repeatedly as the text grows, so the tail is only recorded
209
+ // here and delivered once the response is final. Posting each increment
210
+ // would also lose whitespace that Slack trims at fragment boundaries.
211
+ this.pendingContinuation = text.slice(fallback.prefixLength).trimStart();
212
+ this.continuationAnchor = replyInThread
213
+ ? (sessionPlan.rootTs ?? getResponseId() ?? responseId)
214
+ : (getResponseId() ?? responseId);
215
+ if (operation === "replace")
216
+ await this.flushContinuation();
217
+ return fallback;
218
+ }
219
+ }
220
+ function formatProvisionalSlackText(text, working) {
221
+ const closed = closeOpenFences(text);
222
+ return working ? `${closed}${WORKING_INDICATOR}` : closed;
223
+ }
224
+ function prepareSlackSource(text, working) {
225
+ text = normalizeSlackCurrencyBold(text);
226
+ const limit = working ? MAX_MAIN_LENGTH - WORKING_INDICATOR.length : MAX_MAIN_LENGTH;
227
+ if (text.length <= limit)
228
+ return text;
229
+ return `${text.slice(0, Math.max(0, limit - TRUNCATION_NOTE_INCREMENTAL.length))}${TRUNCATION_NOTE_INCREMENTAL}`;
230
+ }
231
+ export function createSlackResponseContext({ event, slack, sessionPlan, replyMode, message, }) {
232
+ const { rootTs, isThreaded } = sessionPlan;
233
+ const replyInThread = Boolean(rootTs && (isThreaded || replyMode === "thread"));
234
+ const eventFilename = event.ts.match(/^event:([^:]+(?:\.json)?)/)?.[1];
235
+ const lifecycle = new SlackResponseLifecycle({
236
+ event,
237
+ slack,
238
+ sessionPlan,
239
+ replyInThread,
240
+ eventFilename,
229
241
  });
230
- const queueResponseOperation = async (label, operation, work, context) => {
231
- updatePromise = updatePromise.then(async () => {
232
- try {
233
- await work();
234
- }
235
- catch (err) {
236
- log.logWarning(`Slack ${label} error`, err instanceof Error ? err.message : String(err));
237
- reportResponseError(err, operation, context(err));
238
- }
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
- }));
262
- },
263
- appendResponseDelta: async (delta) => {
264
- await queueResponseOperation("appendResponseDelta", "respond", async () => {
265
- await stream.append(delta);
266
- }, () => ({ textLength: delta.length, accumulatedLength: stream.getText().length }));
267
- },
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;
278
- await slack
279
- .setAssistantStatus(channelId, rootTs, "")
280
- .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
- }));
329
- },
330
- respondToolResult: async (result) => {
331
- await responder.respondDiagnostic(formatSlackToolResult(result));
332
- },
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);
338
- }
339
- catch (err) {
340
- // Assistant API not available — first respond() call will create the message.
341
- onAssistantStatusError("typing", err);
342
- }
242
+ // Reserve before choosing, not after failing: the buffered path is a
243
+ // working answer rather than a degraded retry after a wasted request.
244
+ const streamKind = replyInThread && rootTs && slack.tryReserveStreamStart() ? "native" : "buffered";
245
+ const { responder } = createProgressiveRenderer({
246
+ label: "Slack",
247
+ maxLength: MAX_MAIN_LENGTH,
248
+ initialResponseId: sessionPlan.initialMessageTs ?? null,
249
+ formatContinuation: formatSlackContinuation,
250
+ errorPrefix: "",
251
+ workingIndicator: streamKind === "buffered" ? WORKING_INDICATOR : undefined,
252
+ formatProvisional: formatProvisionalSlackText,
253
+ prepareSource: prepareSlackSource,
254
+ supportsDeltas: true,
255
+ stream: streamKind === "native"
256
+ ? {
257
+ start: (text) => slack.startMessageStream(event.channel, text, rootTs, event.user),
258
+ append: (id, delta) => slack.appendMessageStream(event.channel, id, delta),
259
+ stop: (id) => slack.stopMessageStream(event.channel, id),
260
+ minDeltaChars: STREAM_MIN_DELTA_CHARS,
343
261
  }
344
- },
345
- uploadFile: async (filePath, title) => {
346
- await slack.uploadFile(channelId, filePath, title, rootTs);
347
- },
262
+ : undefined,
263
+ needsCanonicalRender,
264
+ formatToolResult: formatSlackToolResult,
265
+ responseErrorContext: (responseId) => ({
266
+ platform: "slack",
267
+ conversationId: event.conversationId,
268
+ channelId: event.channel,
269
+ messageId: message.id,
270
+ sessionKey: message.sessionKey,
271
+ responseMessageId: responseId,
272
+ threadTs: rootTs,
273
+ conversationKind: message.conversationKind,
274
+ isThreaded,
275
+ }),
276
+ post: (text) => replyInThread && rootTs
277
+ ? slack.postInThread(event.channel, rootTs, text)
278
+ : slack.postMessage(event.channel, text),
279
+ update: (id, text) => slack.updateMessage(event.channel, id, text),
280
+ postExtra: (text, responseId) => slack.postInThread(event.channel, responseId ?? rootTs ?? "", text),
281
+ postDiagnostic: lifecycle.postThreadDiagnostic.bind(lifecycle),
282
+ delete: lifecycle.deleteMessage.bind(lifecycle),
283
+ deleteExtra: (id) => slack.deleteMessage(event.channel, String(id)),
284
+ setTyping: lifecycle.setTyping.bind(lifecycle),
285
+ onWorkingChanged: lifecycle.onWorkingChanged.bind(lifecycle),
286
+ onFinish: lifecycle.onFinish.bind(lifecycle),
287
+ isTooLongError: isSlackMsgTooLong,
288
+ handleTooLong: lifecycle.handleTooLong.bind(lifecycle),
289
+ uploadFile: (filePath, title) => slack.uploadFile(event.channel, filePath, title, replyInThread ? rootTs : undefined),
348
290
  react: async (emoji) => {
349
- // React to the triggering message. Event runs have no real message ts.
350
- if (eventFilename)
351
- return;
352
- await slack.addReaction(channelId, event.ts, emoji);
353
- },
354
- setWorking: async (working) => {
355
- await queueResponseOperation("setWorking", "set_working", async () => {
356
- isWorking = working;
357
- if (messageTs) {
358
- const displayText = isWorking ? accumulatedText + WORKING_INDICATOR : accumulatedText;
359
- const updates = streamActive && !isWorking
360
- ? [
361
- slack.stopMessageStream(channelId, messageTs).then(() => {
362
- streamActive = false;
363
- }),
364
- ]
365
- : [slack.updateMessage(channelId, messageTs, displayText)];
366
- if (!working && rootTs) {
367
- updates.push(slack
368
- .setAssistantStatus(channelId, rootTs, "")
369
- .catch((err) => onAssistantStatusError("clear-on-idle", err)));
370
- }
371
- await Promise.all(updates);
372
- }
373
- }, () => ({ working }));
291
+ if (!eventFilename)
292
+ await slack.addReaction(event.channel, event.ts, emoji);
374
293
  },
294
+ });
295
+ return {
296
+ ...responder,
375
297
  deleteResponse: async () => {
376
- updatePromise = updatePromise.then(async () => {
377
- // Clear assistant status first
378
- if (rootTs) {
379
- try {
380
- await slack.setAssistantStatus(channelId, rootTs, "");
381
- }
382
- catch {
383
- // Ignore errors clearing status
384
- }
385
- }
386
- // Delete thread messages first (in reverse order)
387
- for (let i = threadMessageTs.length - 1; i >= 0; i--) {
388
- try {
389
- await slack.deleteMessage(channelId, threadMessageTs[i]);
390
- }
391
- catch {
392
- // Ignore errors deleting thread messages
393
- }
394
- }
395
- threadMessageTs.length = 0;
396
- // Then delete main message
397
- if (messageTs) {
398
- await slack.deleteMessage(channelId, messageTs);
399
- messageTs = null;
400
- }
401
- });
402
- await updatePromise;
298
+ lifecycle.endStatus();
299
+ await responder.deleteResponse();
300
+ },
301
+ /**
302
+ * Spike: post the specialist's answer as a fresh Slack message under that
303
+ * profile's own username/icon. `chat.update`/`chat.appendStream` cannot
304
+ * carry an identity, so the in-progress message (already posted under
305
+ * mikan's own identity) is left as-is and this always sends a new message
306
+ * rather than editing it.
307
+ */
308
+ respondAsRole: async (profile, text) => {
309
+ const identity = slackPersonaForProfile(profile);
310
+ if (!identity) {
311
+ await (replyInThread && rootTs
312
+ ? slack.postInThread(event.channel, rootTs, text)
313
+ : slack.postMessage(event.channel, text));
314
+ return;
315
+ }
316
+ const ts = await (replyInThread && rootTs
317
+ ? slack.postInThread(event.channel, rootTs, text, identity)
318
+ : slack.postMessage(event.channel, text, undefined, identity));
319
+ slack.logBotResponse(event.channel, text, ts, replyInThread ? rootTs : undefined);
403
320
  },
404
321
  };
405
- return responder;
406
322
  }
407
323
  //# sourceMappingURL=response-lifecycle.js.map