@geminixiang/mikan 0.5.0-beta.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/CHANGELOG.md +72 -2
  2. package/README.md +13 -13
  3. package/dist/adapter.d.ts +1 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/adapters/discord/bot.d.ts +9 -6
  7. package/dist/adapters/discord/bot.d.ts.map +1 -1
  8. package/dist/adapters/discord/bot.js +22 -22
  9. package/dist/adapters/discord/bot.js.map +1 -1
  10. package/dist/adapters/discord/context.d.ts +6 -6
  11. package/dist/adapters/discord/context.d.ts.map +1 -1
  12. package/dist/adapters/discord/context.js +3 -3
  13. package/dist/adapters/discord/context.js.map +1 -1
  14. package/dist/adapters/discord/types.d.ts +2 -2
  15. package/dist/adapters/discord/types.d.ts.map +1 -1
  16. package/dist/adapters/discord/types.js.map +1 -1
  17. package/dist/adapters/intake.d.ts +2 -2
  18. package/dist/adapters/intake.d.ts.map +1 -1
  19. package/dist/adapters/intake.js +4 -4
  20. package/dist/adapters/intake.js.map +1 -1
  21. package/dist/adapters/shared.d.ts +3 -3
  22. package/dist/adapters/shared.d.ts.map +1 -1
  23. package/dist/adapters/shared.js +2 -2
  24. package/dist/adapters/shared.js.map +1 -1
  25. package/dist/adapters/slack/blocks.d.ts +6 -0
  26. package/dist/adapters/slack/blocks.d.ts.map +1 -0
  27. package/dist/adapters/slack/blocks.js +176 -0
  28. package/dist/adapters/slack/blocks.js.map +1 -0
  29. package/dist/adapters/slack/bot.d.ts +10 -8
  30. package/dist/adapters/slack/bot.d.ts.map +1 -1
  31. package/dist/adapters/slack/bot.js +58 -80
  32. package/dist/adapters/slack/bot.js.map +1 -1
  33. package/dist/adapters/slack/context.d.ts +6 -6
  34. package/dist/adapters/slack/context.d.ts.map +1 -1
  35. package/dist/adapters/slack/context.js +2 -2
  36. package/dist/adapters/slack/context.js.map +1 -1
  37. package/dist/adapters/slack/response-lifecycle.d.ts +6 -6
  38. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  39. package/dist/adapters/slack/response-lifecycle.js +8 -33
  40. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  41. package/dist/adapters/slack/session.d.ts.map +1 -1
  42. package/dist/adapters/slack/tools/attach.d.ts.map +1 -1
  43. package/dist/adapters/slack/types.d.ts +1 -1
  44. package/dist/adapters/slack/types.d.ts.map +1 -1
  45. package/dist/adapters/slack/types.js.map +1 -1
  46. package/dist/adapters/streaming.d.ts.map +1 -1
  47. package/dist/adapters/telegram/bot.d.ts +10 -7
  48. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  49. package/dist/adapters/telegram/bot.js +21 -21
  50. package/dist/adapters/telegram/bot.js.map +1 -1
  51. package/dist/adapters/telegram/context.d.ts +6 -6
  52. package/dist/adapters/telegram/context.d.ts.map +1 -1
  53. package/dist/adapters/telegram/context.js +3 -3
  54. package/dist/adapters/telegram/context.js.map +1 -1
  55. package/dist/adapters/telegram/html.d.ts.map +1 -1
  56. package/dist/adapters/telegram/types.d.ts +2 -2
  57. package/dist/adapters/telegram/types.d.ts.map +1 -1
  58. package/dist/adapters/telegram/types.js.map +1 -1
  59. package/dist/adapters/types.d.ts +6 -6
  60. package/dist/adapters/types.d.ts.map +1 -1
  61. package/dist/adapters/types.js.map +1 -1
  62. package/dist/agent-events.d.ts +5 -0
  63. package/dist/agent-events.d.ts.map +1 -0
  64. package/dist/agent-events.js +26 -0
  65. package/dist/agent-events.js.map +1 -0
  66. package/dist/agent.d.ts +7 -7
  67. package/dist/agent.d.ts.map +1 -1
  68. package/dist/agent.js +117 -82
  69. package/dist/agent.js.map +1 -1
  70. package/dist/commands/admin.d.ts.map +1 -1
  71. package/dist/commands/admin.js +1 -1
  72. package/dist/commands/admin.js.map +1 -1
  73. package/dist/commands/auto-reply.d.ts.map +1 -1
  74. package/dist/commands/auto-reply.js +3 -3
  75. package/dist/commands/auto-reply.js.map +1 -1
  76. package/dist/commands/login.d.ts.map +1 -1
  77. package/dist/commands/login.js +1 -1
  78. package/dist/commands/login.js.map +1 -1
  79. package/dist/commands/model.d.ts.map +1 -1
  80. package/dist/commands/model.js +5 -5
  81. package/dist/commands/model.js.map +1 -1
  82. package/dist/commands/new.d.ts.map +1 -1
  83. package/dist/commands/new.js +2 -2
  84. package/dist/commands/new.js.map +1 -1
  85. package/dist/commands/parse.d.ts.map +1 -1
  86. package/dist/commands/registry.d.ts.map +1 -1
  87. package/dist/commands/sandbox.d.ts.map +1 -1
  88. package/dist/commands/sandbox.js +5 -5
  89. package/dist/commands/sandbox.js.map +1 -1
  90. package/dist/commands/session-view.d.ts.map +1 -1
  91. package/dist/commands/session-view.js +1 -1
  92. package/dist/commands/session-view.js.map +1 -1
  93. package/dist/commands/types.d.ts +5 -5
  94. package/dist/commands/types.d.ts.map +1 -1
  95. package/dist/commands/types.js.map +1 -1
  96. package/dist/commands/utils.d.ts +3 -3
  97. package/dist/commands/utils.d.ts.map +1 -1
  98. package/dist/commands/utils.js +6 -6
  99. package/dist/commands/utils.js.map +1 -1
  100. package/dist/config.d.ts.map +1 -1
  101. package/dist/context.d.ts.map +1 -1
  102. package/dist/download.d.ts.map +1 -1
  103. package/dist/events.d.ts +2 -2
  104. package/dist/events.d.ts.map +1 -1
  105. package/dist/events.js.map +1 -1
  106. package/dist/execution-resolver.d.ts.map +1 -1
  107. package/dist/index.d.ts +3 -3
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +2 -2
  110. package/dist/index.js.map +1 -1
  111. package/dist/log.d.ts.map +1 -1
  112. package/dist/main.d.ts.map +1 -1
  113. package/dist/main.js +35 -27
  114. package/dist/main.js.map +1 -1
  115. package/dist/model-registry.d.ts.map +1 -1
  116. package/dist/observability/instrument.d.ts.map +1 -1
  117. package/dist/observability/sentry.d.ts.map +1 -1
  118. package/dist/observability/sentry.js +27 -9
  119. package/dist/observability/sentry.js.map +1 -1
  120. package/dist/observability/types.d.ts.map +1 -1
  121. package/dist/platform-messages.d.ts +2 -2
  122. package/dist/platform-messages.d.ts.map +1 -1
  123. package/dist/platform-messages.js +2 -2
  124. package/dist/platform-messages.js.map +1 -1
  125. package/dist/portal-shell.d.ts.map +1 -1
  126. package/dist/provisioner.d.ts.map +1 -1
  127. package/dist/provisioner.js +6 -0
  128. package/dist/provisioner.js.map +1 -1
  129. package/dist/runtime/{conversation-orchestrator.d.ts → agent-run-controller.d.ts} +7 -5
  130. package/dist/runtime/agent-run-controller.d.ts.map +1 -0
  131. package/dist/runtime/{conversation-orchestrator.js → agent-run-controller.js} +18 -17
  132. package/dist/runtime/agent-run-controller.js.map +1 -0
  133. package/dist/runtime/conversation-runtime.d.ts +4 -0
  134. package/dist/runtime/conversation-runtime.d.ts.map +1 -0
  135. package/dist/runtime/{session-runtime.js → conversation-runtime.js} +19 -15
  136. package/dist/runtime/conversation-runtime.js.map +1 -0
  137. package/dist/runtime/types.d.ts +11 -9
  138. package/dist/runtime/types.d.ts.map +1 -1
  139. package/dist/runtime/types.js.map +1 -1
  140. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  141. package/dist/sandbox/cloudflare.js +2 -4
  142. package/dist/sandbox/cloudflare.js.map +1 -1
  143. package/dist/sandbox/container.d.ts.map +1 -1
  144. package/dist/sandbox/container.js +43 -10
  145. package/dist/sandbox/container.js.map +1 -1
  146. package/dist/sandbox/errors.d.ts.map +1 -1
  147. package/dist/sandbox/firecracker.d.ts.map +1 -1
  148. package/dist/sandbox/firecracker.js +2 -4
  149. package/dist/sandbox/firecracker.js.map +1 -1
  150. package/dist/sandbox/host.d.ts.map +1 -1
  151. package/dist/sandbox/image.d.ts.map +1 -1
  152. package/dist/sandbox/index.d.ts.map +1 -1
  153. package/dist/sandbox/path-context.d.ts.map +1 -1
  154. package/dist/sandbox/types.d.ts.map +1 -1
  155. package/dist/sandbox/utils.d.ts.map +1 -1
  156. package/dist/sessions/agent-memory-file-manager.d.ts +19 -0
  157. package/dist/sessions/agent-memory-file-manager.d.ts.map +1 -0
  158. package/dist/sessions/{chat-session-manager.js → agent-memory-file-manager.js} +107 -34
  159. package/dist/sessions/agent-memory-file-manager.js.map +1 -0
  160. package/dist/sessions/metadata.d.ts.map +1 -1
  161. package/dist/sessions/policy.d.ts.map +1 -1
  162. package/dist/sessions/store.d.ts.map +1 -1
  163. package/dist/sessions/store.js +4 -4
  164. package/dist/sessions/store.js.map +1 -1
  165. package/dist/sessions/types.d.ts +5 -3
  166. package/dist/sessions/types.d.ts.map +1 -1
  167. package/dist/sessions/types.js.map +1 -1
  168. package/dist/store.d.ts +3 -0
  169. package/dist/store.d.ts.map +1 -1
  170. package/dist/store.js +1 -1
  171. package/dist/store.js.map +1 -1
  172. package/dist/tools/bash.d.ts.map +1 -1
  173. package/dist/tools/edit.d.ts.map +1 -1
  174. package/dist/tools/event.d.ts.map +1 -1
  175. package/dist/tools/index.d.ts +1 -2
  176. package/dist/tools/index.d.ts.map +1 -1
  177. package/dist/tools/index.js +0 -4
  178. package/dist/tools/index.js.map +1 -1
  179. package/dist/tools/read.d.ts.map +1 -1
  180. package/dist/tools/sandbox.d.ts.map +1 -1
  181. package/dist/tools/truncate.d.ts.map +1 -1
  182. package/dist/tools/types.d.ts.map +1 -1
  183. package/dist/tools/write.d.ts.map +1 -1
  184. package/dist/trigger.d.ts +2 -2
  185. package/dist/trigger.d.ts.map +1 -1
  186. package/dist/trigger.js +1 -1
  187. package/dist/trigger.js.map +1 -1
  188. package/dist/types.d.ts +47 -29
  189. package/dist/types.d.ts.map +1 -1
  190. package/dist/types.js +1 -1
  191. package/dist/types.js.map +1 -1
  192. package/dist/utils/date.d.ts +1 -1
  193. package/dist/utils/date.d.ts.map +1 -1
  194. package/dist/utils/date.js +1 -1
  195. package/dist/utils/date.js.map +1 -1
  196. package/dist/utils/env.d.ts.map +1 -1
  197. package/dist/utils/file-guards.d.ts.map +1 -1
  198. package/dist/utils/fs-atomic.d.ts.map +1 -1
  199. package/dist/utils/html.d.ts.map +1 -1
  200. package/dist/utils/http-body.d.ts.map +1 -1
  201. package/dist/vault/index.d.ts.map +1 -1
  202. package/dist/vault/routing.d.ts.map +1 -1
  203. package/dist/vault/types.d.ts.map +1 -1
  204. package/dist/web/admin/portal.d.ts.map +1 -1
  205. package/dist/web/admin/portal.js +1 -1
  206. package/dist/web/admin/portal.js.map +1 -1
  207. package/dist/web/admin/provider-models.d.ts.map +1 -1
  208. package/dist/web/admin/store.d.ts.map +1 -1
  209. package/dist/web/admin/types.d.ts +1 -1
  210. package/dist/web/admin/types.d.ts.map +1 -1
  211. package/dist/web/admin/types.js.map +1 -1
  212. package/dist/web/agent-events/portal.d.ts +3 -0
  213. package/dist/web/agent-events/portal.d.ts.map +1 -0
  214. package/dist/web/agent-events/portal.js +18 -0
  215. package/dist/web/agent-events/portal.js.map +1 -0
  216. package/dist/web/login/oauth.d.ts.map +1 -1
  217. package/dist/web/login/oauth.js.map +1 -1
  218. package/dist/web/login/portal.d.ts +2 -14
  219. package/dist/web/login/portal.d.ts.map +1 -1
  220. package/dist/web/login/portal.js +53 -130
  221. package/dist/web/login/portal.js.map +1 -1
  222. package/dist/web/login/store.d.ts.map +1 -1
  223. package/dist/web/login/types.d.ts.map +1 -1
  224. package/dist/web/request.d.ts +3 -0
  225. package/dist/web/request.d.ts.map +1 -0
  226. package/dist/web/request.js +13 -0
  227. package/dist/web/request.js.map +1 -0
  228. package/dist/web/server.d.ts +28 -0
  229. package/dist/web/server.d.ts.map +1 -0
  230. package/dist/web/server.js +66 -0
  231. package/dist/web/server.js.map +1 -0
  232. package/dist/web/session-view/command.d.ts.map +1 -1
  233. package/dist/web/session-view/portal.d.ts.map +1 -1
  234. package/dist/web/session-view/portal.js +8 -8
  235. package/dist/web/session-view/portal.js.map +1 -1
  236. package/dist/web/session-view/service.d.ts.map +1 -1
  237. package/dist/web/session-view/store.d.ts.map +1 -1
  238. package/dist/web/session-view/types.d.ts +4 -4
  239. package/dist/web/session-view/types.d.ts.map +1 -1
  240. package/dist/web/session-view/types.js.map +1 -1
  241. package/dist/web/token-store.d.ts.map +1 -1
  242. package/dist/web/types.d.ts.map +1 -1
  243. package/package.json +44 -20
  244. package/dist/adapters/slack/tools/block-kit.d.ts +0 -16
  245. package/dist/adapters/slack/tools/block-kit.d.ts.map +0 -1
  246. package/dist/adapters/slack/tools/block-kit.js +0 -105
  247. package/dist/adapters/slack/tools/block-kit.js.map +0 -1
  248. package/dist/runtime/conversation-orchestrator.d.ts.map +0 -1
  249. package/dist/runtime/conversation-orchestrator.js.map +0 -1
  250. package/dist/runtime/session-runtime.d.ts +0 -4
  251. package/dist/runtime/session-runtime.d.ts.map +0 -1
  252. package/dist/runtime/session-runtime.js.map +0 -1
  253. package/dist/sandbox/credential-policy.d.ts +0 -2
  254. package/dist/sandbox/credential-policy.d.ts.map +0 -1
  255. package/dist/sandbox/credential-policy.js +0 -77
  256. package/dist/sandbox/credential-policy.js.map +0 -1
  257. package/dist/sessions/chat-session-manager.d.ts +0 -18
  258. package/dist/sessions/chat-session-manager.d.ts.map +0 -1
  259. package/dist/sessions/chat-session-manager.js.map +0 -1
  260. package/dist/tool-diagnostics.d.ts +0 -2
  261. package/dist/tool-diagnostics.d.ts.map +0 -1
  262. package/dist/tool-diagnostics.js +0 -7
  263. package/dist/tool-diagnostics.js.map +0 -1
@@ -6,12 +6,13 @@ import { basename, join } from "path";
6
6
  import { resolveConversationSettings } from "../../config.js";
7
7
  import * as log from "../../log.js";
8
8
  import { PRODUCT_NAME, formatForceStopped, formatNothingRunning } from "../../platform-messages.js";
9
- import { appendBotResponseLog, appendChannelLog, ChannelQueue, resolveOnlyScopedStopTarget, resolveStopTarget, withRetry, } from "../shared.js";
9
+ import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, resolveOnlyScopedStopTarget, resolveStopTarget, withRetry, } from "../shared.js";
10
10
  import { processMessageIntake } from "../intake.js";
11
11
  import { createSlackAdapters } from "./context.js";
12
- import { hasMaterializedChatSession, registerThreadSession, } from "../../sessions/chat-session-manager.js";
12
+ import { hasMaterializedChatSession, registerThreadSession, } from "../../sessions/agent-memory-file-manager.js";
13
13
  import { isSlackThreadSessionKey, planSlackAdapterSession, planSlackEventAnchorRun, resolveSlackSessionKey, } from "./session.js";
14
14
  import { reportUserFacingError } from "../../observability/sentry.js";
15
+ import { renderSlackBlocks } from "./blocks.js";
15
16
  const SLACK_EVENT_ANCHOR_TEXT = "Working on it...";
16
17
  // Slack WebClient errors carry either `code: "rate_limited"` (retry-after) or
17
18
  // the legacy `data.error === "rate_limited"` / 429 status shape.
@@ -69,10 +70,10 @@ export function buildMrkdwnContextBlock(text) {
69
70
  return { type: "context", elements: [{ type: "mrkdwn", text: blockText }] };
70
71
  }
71
72
  // ============================================================================
72
- // SlackBot
73
+ // SlackMessagingBot
73
74
  // ============================================================================
74
- export class SlackBot {
75
- createAdapters(event) {
75
+ export class SlackMessagingBot {
76
+ createContext(event) {
76
77
  return createSlackAdapters(event, this, {
77
78
  replyMode: resolveConversationSettings(join(this.workingDir, event.conversationId)).slack?.replyMode ??
78
79
  "top-level",
@@ -146,7 +147,8 @@ export class SlackBot {
146
147
  }
147
148
  async postMessage(channel, text) {
148
149
  return slackRetry(async () => {
149
- const result = await this.webClient.chat.postMessage({ channel, text });
150
+ const payload = { channel, ...renderSlackBlocks(text) };
151
+ const result = await this.webClient.chat.postMessage(payload);
150
152
  return result.ts;
151
153
  });
152
154
  }
@@ -173,11 +175,8 @@ export class SlackBot {
173
175
  }
174
176
  async postMessageBlocks(channel, text, blocks) {
175
177
  return slackRetry(async () => {
176
- const result = await this.webClient.chat.postMessage({
177
- channel,
178
- text,
179
- blocks: blocks,
180
- });
178
+ const payload = { channel, text, blocks: blocks };
179
+ const result = await this.webClient.chat.postMessage(payload);
181
180
  return result.ts;
182
181
  });
183
182
  }
@@ -203,7 +202,8 @@ export class SlackBot {
203
202
  }
204
203
  async updateMessage(channel, ts, text) {
205
204
  return slackRetry(async () => {
206
- await this.webClient.chat.update({ channel, ts, text });
205
+ const payload = { channel, ts, ...renderSlackBlocks(text) };
206
+ await this.webClient.chat.update(payload);
207
207
  });
208
208
  }
209
209
  async startMessageStream(channel, text, threadTs, recipientUserId) {
@@ -255,42 +255,20 @@ export class SlackBot {
255
255
  }
256
256
  async postInThread(channel, threadTs, text) {
257
257
  return slackRetry(async () => {
258
- // Use Block Kit section for long messages to trigger Slack's "Show more" collapsing (~700 chars)
259
- const SECTION_TEXT_LIMIT = 3000;
260
- if (text.length > 500) {
261
- const blockText = text.length > SECTION_TEXT_LIMIT
262
- ? text.substring(0, SECTION_TEXT_LIMIT - 20) + "\n_(truncated)_"
263
- : text;
264
- const result = await this.webClient.chat.postMessage({
265
- channel,
266
- thread_ts: threadTs,
267
- text, // full text as notification fallback
268
- blocks: [{ type: "section", text: { type: "mrkdwn", text: blockText } }],
269
- });
270
- return result.ts;
271
- }
272
- const result = await this.webClient.chat.postMessage({ channel, thread_ts: threadTs, text });
258
+ const payload = { channel, thread_ts: threadTs, ...renderSlackBlocks(text) };
259
+ const result = await this.webClient.chat.postMessage(payload);
273
260
  return result.ts;
274
261
  });
275
262
  }
276
263
  async postInThreadBlocks(channel, threadTs, text, blocks) {
277
264
  return slackRetry(async () => {
278
- const result = await this.webClient.chat.postMessage({
265
+ const payload = {
279
266
  channel,
280
267
  thread_ts: threadTs,
281
268
  text, // fallback for notifications
282
269
  blocks: blocks,
283
- });
284
- return result.ts;
285
- });
286
- }
287
- async postBlocks(channel, text, blocks) {
288
- return slackRetry(async () => {
289
- const result = await this.webClient.chat.postMessage({
290
- channel,
291
- text,
292
- blocks: blocks,
293
- });
270
+ };
271
+ const result = await this.webClient.chat.postMessage(payload);
294
272
  return result.ts;
295
273
  });
296
274
  }
@@ -316,7 +294,7 @@ export class SlackBot {
316
294
  ...(slackBlocks ? { slackBlocks } : {}),
317
295
  });
318
296
  }
319
- getPlatformInfo() {
297
+ getMessagingInfo() {
320
298
  return {
321
299
  name: "slack",
322
300
  formattingGuide: "## Slack Formatting (mrkdwn, NOT Markdown)\nBold: *text*, Italic: _text_, Code: `code`, Block: ```code```, Links: <url|text>\nDo NOT use **double asterisks** or [markdown](links).",
@@ -397,12 +375,12 @@ export class SlackBot {
397
375
  })),
398
376
  sessionKey: eventForRun.sessionKey,
399
377
  };
400
- const adapters = createSlackAdapters(slackEvent, this, {
378
+ const context = createSlackAdapters(slackEvent, this, {
401
379
  initialMessageTs: eventPlan.initialMessageTs,
402
380
  replyMode: resolveConversationSettings(join(this.workingDir, eventForRun.conversationId)).slack
403
381
  ?.replyMode ?? "top-level",
404
382
  });
405
- return this.handler.handleEvent(eventForRun, this, adapters);
383
+ return this.handler.handleEvent(eventForRun, this, context);
406
384
  });
407
385
  });
408
386
  return true;
@@ -413,7 +391,7 @@ export class SlackBot {
413
391
  getQueue(channelId) {
414
392
  let queue = this.queues.get(channelId);
415
393
  if (!queue) {
416
- queue = new ChannelQueue("Slack");
394
+ queue = new MessagingEventQueue("Slack");
417
395
  this.queues.set(channelId, queue);
418
396
  }
419
397
  return queue;
@@ -442,7 +420,7 @@ export class SlackBot {
442
420
  enqueue: (queueKey, work) => this.getQueue(queueKey).enqueue(work),
443
421
  handler: this.handler,
444
422
  bot: this,
445
- createAdapters: (event) => this.createAdapters(event),
423
+ createContext: (event) => this.createContext(event),
446
424
  onNotTriggered: options.onNotTriggered,
447
425
  deferAttachmentsUntilRun: true,
448
426
  });
@@ -624,7 +602,7 @@ export class SlackBot {
624
602
  const messageTs = await this.postMessageBlocks(conversationId, responseText, blocks);
625
603
  this.logBotResponse(conversationId, responseText, messageTs);
626
604
  };
627
- const responseCtx = {
605
+ const responder = {
628
606
  respond,
629
607
  replaceResponse: respond,
630
608
  respondDiagnostic: async (responseText, responseOptions) => {
@@ -647,8 +625,8 @@ export class SlackBot {
647
625
  };
648
626
  return {
649
627
  message,
650
- responseCtx,
651
- platform: this.getPlatformInfo(),
628
+ responder,
629
+ platform: this.getMessagingInfo(),
652
630
  };
653
631
  }
654
632
  buildSlashCommandEvent(payload, options = {}) {
@@ -670,7 +648,7 @@ export class SlackBot {
670
648
  userName,
671
649
  text: commandText,
672
650
  attachments: [],
673
- isBot: false,
651
+ isMessagingBot: false,
674
652
  ...(threadTs ? { threadTs } : {}),
675
653
  });
676
654
  const event = {
@@ -684,15 +662,15 @@ export class SlackBot {
684
662
  ...(threadTs ? { thread_ts: threadTs } : {}),
685
663
  sessionKey,
686
664
  };
687
- const adapters = this.createCommandAdapters(conversationId, payload.user_id, userName, commandText, eventTs, isDirectMessage ? { threadTs } : { ephemeralChannelId: conversationId, threadTs });
688
- return { event, adapters };
665
+ const context = this.createCommandAdapters(conversationId, payload.user_id, userName, commandText, eventTs, isDirectMessage ? { threadTs } : { ephemeralChannelId: conversationId, threadTs });
666
+ return { event, context };
689
667
  }
690
668
  async routeSlashLoginCommand(payload) {
691
- const { event, adapters } = this.buildSlashCommandEvent(payload, {
669
+ const { event, context } = this.buildSlashCommandEvent(payload, {
692
670
  type: payload.channel_id.startsWith("D") ? "dm" : "private_command",
693
671
  includeText: true,
694
672
  });
695
- await this.handler.handleEvent(event, this, adapters);
673
+ await this.handler.handleEvent(event, this, context);
696
674
  }
697
675
  async routeSlashNewCommand(payload) {
698
676
  const conversationId = payload.channel_id;
@@ -710,28 +688,28 @@ export class SlackBot {
710
688
  userName,
711
689
  text: payload.command,
712
690
  attachments: [],
713
- isBot: false,
691
+ isMessagingBot: false,
714
692
  });
715
- const commandBot = {
693
+ const commandMessagingBot = {
716
694
  start: async () => { },
717
695
  postMessage: async (_channel, text) => this.postMessage(conversationId, text),
718
696
  updateMessage: async (channel, ts, text) => this.updateMessage(channel, ts, text),
719
697
  enqueueEvent: (event) => this.enqueueEvent(event),
720
- getPlatformInfo: () => this.getPlatformInfo(),
698
+ getMessagingInfo: () => this.getMessagingInfo(),
721
699
  };
722
- await this.handler.handleNewCommand(conversationId, conversationId, commandBot);
700
+ await this.handler.handleNewCommand(conversationId, conversationId, commandMessagingBot);
723
701
  }
724
702
  async routeSlashModelCommand(payload) {
725
- const { event, adapters } = this.buildSlashCommandEvent(payload, { includeText: true });
726
- await this.handler.handleEvent(event, this, adapters);
703
+ const { event, context } = this.buildSlashCommandEvent(payload, { includeText: true });
704
+ await this.handler.handleEvent(event, this, context);
727
705
  }
728
706
  async routeSlashSessionCommand(payload) {
729
- const { event, adapters } = this.buildSlashCommandEvent(payload, { thread: true });
730
- await this.handler.handleEvent(event, this, adapters);
707
+ const { event, context } = this.buildSlashCommandEvent(payload, { thread: true });
708
+ await this.handler.handleEvent(event, this, context);
731
709
  }
732
710
  async routeSlashAdminCommand(payload) {
733
- const { event, adapters } = this.buildSlashCommandEvent(payload, { thread: true });
734
- await this.handler.handleEvent(event, this, adapters);
711
+ const { event, context } = this.buildSlashCommandEvent(payload, { thread: true });
712
+ await this.handler.handleEvent(event, this, context);
735
713
  }
736
714
  setupEventHandlers() {
737
715
  this.socketClient.on("disconnect", (err) => {
@@ -810,13 +788,13 @@ export class SlackBot {
810
788
  const e = event;
811
789
  const hasFiles = !!e.files && e.files.length > 0;
812
790
  const hasSlackContent = !!e.text || hasFiles || !!e.blocks?.length || !!e.attachments?.length;
813
- const isOwnBotMessage = (!!e.user && e.user === this.botUserId) || (!!this.botId && e.bot_id === this.botId);
814
- if (isOwnBotMessage) {
791
+ const isOwnMessagingBotMessage = (!!e.user && e.user === this.botUserId) || (!!this.botId && e.bot_id === this.botId);
792
+ if (isOwnMessagingBotMessage) {
815
793
  ack();
816
794
  return;
817
795
  }
818
- const isExternalBotMessage = !!e.bot_id || e.subtype === "bot_message";
819
- if (isExternalBotMessage) {
796
+ const isExternalMessagingBotMessage = !!e.bot_id || e.subtype === "bot_message";
797
+ if (isExternalMessagingBotMessage) {
820
798
  if (e.subtype !== undefined && e.subtype !== "bot_message" && e.subtype !== "file_share") {
821
799
  ack();
822
800
  return;
@@ -825,7 +803,7 @@ export class SlackBot {
825
803
  ack();
826
804
  return;
827
805
  }
828
- void this.logExternalBotMessage(e).catch((err) => {
806
+ void this.logExternalMessagingBotMessage(e).catch((err) => {
829
807
  log.logWarning("Failed to log Slack bot message", String(err));
830
808
  });
831
809
  ack();
@@ -845,9 +823,9 @@ export class SlackBot {
845
823
  }
846
824
  const isDM = e.channel_type === "im";
847
825
  const conversationKind = isDM ? "direct" : "shared";
848
- const isBotMention = e.text?.includes(`<@${this.botUserId}>`);
826
+ const isMessagingBotMention = e.text?.includes(`<@${this.botUserId}>`);
849
827
  // Skip channel @mentions - already handled by app_mention event
850
- if (!isDM && isBotMention) {
828
+ if (!isDM && isMessagingBotMention) {
851
829
  ack();
852
830
  return;
853
831
  }
@@ -1067,7 +1045,7 @@ export class SlackBot {
1067
1045
  userName: body.user?.username ?? body.user?.name,
1068
1046
  text,
1069
1047
  attachments: [],
1070
- isBot: false,
1048
+ isMessagingBot: false,
1071
1049
  platform: "slack",
1072
1050
  slackInteraction: {
1073
1051
  type: "block_actions",
@@ -1109,7 +1087,7 @@ export class SlackBot {
1109
1087
  attachments: [],
1110
1088
  sessionKey,
1111
1089
  };
1112
- return this.handler.handleEvent(event, this, this.createAdapters(slackEvent));
1090
+ return this.handler.handleEvent(event, this, this.createContext(slackEvent));
1113
1091
  });
1114
1092
  }
1115
1093
  /**
@@ -1138,13 +1116,13 @@ export class SlackBot {
1138
1116
  displayName: user?.displayName,
1139
1117
  text: event.text,
1140
1118
  attachments,
1141
- isBot: false,
1119
+ isMessagingBot: false,
1142
1120
  });
1143
1121
  if (attachmentError)
1144
1122
  throw attachmentError;
1145
1123
  return attachments;
1146
1124
  }
1147
- async logExternalBotMessage(event) {
1125
+ async logExternalMessagingBotMessage(event) {
1148
1126
  const attachments = event.files
1149
1127
  ? await this.store.processAttachments(event.channel, event.files, event.ts)
1150
1128
  : [];
@@ -1158,7 +1136,7 @@ export class SlackBot {
1158
1136
  displayName: botName,
1159
1137
  text: buildSlackAppMessageText(event),
1160
1138
  attachments,
1161
- isBot: true,
1139
+ isMessagingBot: true,
1162
1140
  botId: event.bot_id,
1163
1141
  appId: event.app_id ?? event.bot_profile?.app_id,
1164
1142
  subtype: event.subtype,
@@ -1220,8 +1198,8 @@ export class SlackBot {
1220
1198
  return false; // Skip duplicates
1221
1199
  if (msg.user === this.botUserId)
1222
1200
  return true;
1223
- const isExternalBotMessage = !!msg.bot_id || msg.subtype === "bot_message";
1224
- if (isExternalBotMessage) {
1201
+ const isExternalMessagingBotMessage = !!msg.bot_id || msg.subtype === "bot_message";
1202
+ if (isExternalMessagingBotMessage) {
1225
1203
  if (this.botId && msg.bot_id === this.botId)
1226
1204
  return false;
1227
1205
  if (msg.subtype !== undefined &&
@@ -1247,9 +1225,9 @@ export class SlackBot {
1247
1225
  // Log each message to log.jsonl
1248
1226
  for (const msg of relevantMessages) {
1249
1227
  const isMikanMessage = msg.user === this.botUserId;
1250
- const isExternalBotMessage = !isMikanMessage && (!!msg.bot_id || msg.subtype === "bot_message");
1251
- if (isExternalBotMessage) {
1252
- await this.logExternalBotMessage({ ...msg, channel: channelId, ts: msg.ts });
1228
+ const isExternalMessagingBotMessage = !isMikanMessage && (!!msg.bot_id || msg.subtype === "bot_message");
1229
+ if (isExternalMessagingBotMessage) {
1230
+ await this.logExternalMessagingBotMessage({ ...msg, channel: channelId, ts: msg.ts });
1253
1231
  continue;
1254
1232
  }
1255
1233
  const user = this.users.get(msg.user);
@@ -1266,7 +1244,7 @@ export class SlackBot {
1266
1244
  displayName: isMikanMessage ? undefined : user?.displayName,
1267
1245
  text,
1268
1246
  attachments,
1269
- isBot: isMikanMessage,
1247
+ isMessagingBot: isMikanMessage,
1270
1248
  });
1271
1249
  }
1272
1250
  return relevantMessages.length;