@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.
- package/CHANGELOG.md +72 -2
- package/README.md +13 -13
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +9 -6
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +22 -22
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/context.d.ts +6 -6
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +3 -3
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/types.d.ts +2 -2
- package/dist/adapters/discord/types.d.ts.map +1 -1
- package/dist/adapters/discord/types.js.map +1 -1
- package/dist/adapters/intake.d.ts +2 -2
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +4 -4
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/shared.d.ts +3 -3
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +2 -2
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/blocks.d.ts +6 -0
- package/dist/adapters/slack/blocks.d.ts.map +1 -0
- package/dist/adapters/slack/blocks.js +176 -0
- package/dist/adapters/slack/blocks.js.map +1 -0
- package/dist/adapters/slack/bot.d.ts +10 -8
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +58 -80
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +6 -6
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +2 -2
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts +6 -6
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +8 -33
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/tools/attach.d.ts.map +1 -1
- package/dist/adapters/slack/types.d.ts +1 -1
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/streaming.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +10 -7
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +21 -21
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +6 -6
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +3 -3
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/telegram/html.d.ts.map +1 -1
- package/dist/adapters/telegram/types.d.ts +2 -2
- package/dist/adapters/telegram/types.d.ts.map +1 -1
- package/dist/adapters/telegram/types.js.map +1 -1
- package/dist/adapters/types.d.ts +6 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent-events.d.ts +5 -0
- package/dist/agent-events.d.ts.map +1 -0
- package/dist/agent-events.js +26 -0
- package/dist/agent-events.js.map +1 -0
- package/dist/agent.d.ts +7 -7
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +117 -82
- package/dist/agent.js.map +1 -1
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +1 -1
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +3 -3
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +5 -5
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +2 -2
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/parse.d.ts.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +5 -5
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/commands/session-view.d.ts.map +1 -1
- package/dist/commands/session-view.js +1 -1
- package/dist/commands/session-view.js.map +1 -1
- package/dist/commands/types.d.ts +5 -5
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/commands/utils.d.ts +3 -3
- package/dist/commands/utils.d.ts.map +1 -1
- package/dist/commands/utils.js +6 -6
- package/dist/commands/utils.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/download.d.ts.map +1 -1
- package/dist/events.d.ts +2 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +35 -27
- package/dist/main.js.map +1 -1
- package/dist/model-registry.d.ts.map +1 -1
- package/dist/observability/instrument.d.ts.map +1 -1
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +27 -9
- package/dist/observability/sentry.js.map +1 -1
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/platform-messages.d.ts +2 -2
- package/dist/platform-messages.d.ts.map +1 -1
- package/dist/platform-messages.js +2 -2
- package/dist/platform-messages.js.map +1 -1
- package/dist/portal-shell.d.ts.map +1 -1
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +6 -0
- package/dist/provisioner.js.map +1 -1
- package/dist/runtime/{conversation-orchestrator.d.ts → agent-run-controller.d.ts} +7 -5
- package/dist/runtime/agent-run-controller.d.ts.map +1 -0
- package/dist/runtime/{conversation-orchestrator.js → agent-run-controller.js} +18 -17
- package/dist/runtime/agent-run-controller.js.map +1 -0
- package/dist/runtime/conversation-runtime.d.ts +4 -0
- package/dist/runtime/conversation-runtime.d.ts.map +1 -0
- package/dist/runtime/{session-runtime.js → conversation-runtime.js} +19 -15
- package/dist/runtime/conversation-runtime.js.map +1 -0
- package/dist/runtime/types.d.ts +11 -9
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +2 -4
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +43 -10
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/errors.d.ts.map +1 -1
- package/dist/sandbox/firecracker.d.ts.map +1 -1
- package/dist/sandbox/firecracker.js +2 -4
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/image.d.ts.map +1 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/path-context.d.ts.map +1 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sessions/agent-memory-file-manager.d.ts +19 -0
- package/dist/sessions/agent-memory-file-manager.d.ts.map +1 -0
- package/dist/sessions/{chat-session-manager.js → agent-memory-file-manager.js} +107 -34
- package/dist/sessions/agent-memory-file-manager.js.map +1 -0
- package/dist/sessions/metadata.d.ts.map +1 -1
- package/dist/sessions/policy.d.ts.map +1 -1
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +4 -4
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +5 -3
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/store.d.ts +3 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +1 -1
- package/dist/store.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/event.d.ts.map +1 -1
- package/dist/tools/index.d.ts +1 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/truncate.d.ts.map +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/trigger.d.ts +2 -2
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +1 -1
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +47 -29
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/date.d.ts +1 -1
- package/dist/utils/date.d.ts.map +1 -1
- package/dist/utils/date.js +1 -1
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/file-guards.d.ts.map +1 -1
- package/dist/utils/fs-atomic.d.ts.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/http-body.d.ts.map +1 -1
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/routing.d.ts.map +1 -1
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +1 -1
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/provider-models.d.ts.map +1 -1
- package/dist/web/admin/store.d.ts.map +1 -1
- package/dist/web/admin/types.d.ts +1 -1
- package/dist/web/admin/types.d.ts.map +1 -1
- package/dist/web/admin/types.js.map +1 -1
- package/dist/web/agent-events/portal.d.ts +3 -0
- package/dist/web/agent-events/portal.d.ts.map +1 -0
- package/dist/web/agent-events/portal.js +18 -0
- package/dist/web/agent-events/portal.js.map +1 -0
- package/dist/web/login/oauth.d.ts.map +1 -1
- package/dist/web/login/oauth.js.map +1 -1
- package/dist/web/login/portal.d.ts +2 -14
- package/dist/web/login/portal.d.ts.map +1 -1
- package/dist/web/login/portal.js +53 -130
- package/dist/web/login/portal.js.map +1 -1
- package/dist/web/login/store.d.ts.map +1 -1
- package/dist/web/login/types.d.ts.map +1 -1
- package/dist/web/request.d.ts +3 -0
- package/dist/web/request.d.ts.map +1 -0
- package/dist/web/request.js +13 -0
- package/dist/web/request.js.map +1 -0
- package/dist/web/server.d.ts +28 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +66 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/session-view/command.d.ts.map +1 -1
- package/dist/web/session-view/portal.d.ts.map +1 -1
- package/dist/web/session-view/portal.js +8 -8
- package/dist/web/session-view/portal.js.map +1 -1
- package/dist/web/session-view/service.d.ts.map +1 -1
- package/dist/web/session-view/store.d.ts.map +1 -1
- package/dist/web/session-view/types.d.ts +4 -4
- package/dist/web/session-view/types.d.ts.map +1 -1
- package/dist/web/session-view/types.js.map +1 -1
- package/dist/web/token-store.d.ts.map +1 -1
- package/dist/web/types.d.ts.map +1 -1
- package/package.json +44 -20
- package/dist/adapters/slack/tools/block-kit.d.ts +0 -16
- package/dist/adapters/slack/tools/block-kit.d.ts.map +0 -1
- package/dist/adapters/slack/tools/block-kit.js +0 -105
- package/dist/adapters/slack/tools/block-kit.js.map +0 -1
- package/dist/runtime/conversation-orchestrator.d.ts.map +0 -1
- package/dist/runtime/conversation-orchestrator.js.map +0 -1
- package/dist/runtime/session-runtime.d.ts +0 -4
- package/dist/runtime/session-runtime.d.ts.map +0 -1
- package/dist/runtime/session-runtime.js.map +0 -1
- package/dist/sandbox/credential-policy.d.ts +0 -2
- package/dist/sandbox/credential-policy.d.ts.map +0 -1
- package/dist/sandbox/credential-policy.js +0 -77
- package/dist/sandbox/credential-policy.js.map +0 -1
- package/dist/sessions/chat-session-manager.d.ts +0 -18
- package/dist/sessions/chat-session-manager.d.ts.map +0 -1
- package/dist/sessions/chat-session-manager.js.map +0 -1
- package/dist/tool-diagnostics.d.ts +0 -2
- package/dist/tool-diagnostics.d.ts.map +0 -1
- package/dist/tool-diagnostics.js +0 -7
- 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,
|
|
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/
|
|
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
|
-
//
|
|
73
|
+
// SlackMessagingBot
|
|
73
74
|
// ============================================================================
|
|
74
|
-
export class
|
|
75
|
-
|
|
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
|
|
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
|
|
177
|
-
|
|
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
|
-
|
|
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
|
-
|
|
259
|
-
const
|
|
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
|
|
265
|
+
const payload = {
|
|
279
266
|
channel,
|
|
280
267
|
thread_ts: threadTs,
|
|
281
268
|
text, // fallback for notifications
|
|
282
269
|
blocks: blocks,
|
|
283
|
-
}
|
|
284
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
651
|
-
platform: this.
|
|
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
|
-
|
|
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
|
|
688
|
-
return { event,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
691
|
+
isMessagingBot: false,
|
|
714
692
|
});
|
|
715
|
-
const
|
|
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
|
-
|
|
698
|
+
getMessagingInfo: () => this.getMessagingInfo(),
|
|
721
699
|
};
|
|
722
|
-
await this.handler.handleNewCommand(conversationId, conversationId,
|
|
700
|
+
await this.handler.handleNewCommand(conversationId, conversationId, commandMessagingBot);
|
|
723
701
|
}
|
|
724
702
|
async routeSlashModelCommand(payload) {
|
|
725
|
-
const { event,
|
|
726
|
-
await this.handler.handleEvent(event, this,
|
|
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,
|
|
730
|
-
await this.handler.handleEvent(event, this,
|
|
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,
|
|
734
|
-
await this.handler.handleEvent(event, this,
|
|
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
|
|
814
|
-
if (
|
|
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
|
|
819
|
-
if (
|
|
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.
|
|
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
|
|
826
|
+
const isMessagingBotMention = e.text?.includes(`<@${this.botUserId}>`);
|
|
849
827
|
// Skip channel @mentions - already handled by app_mention event
|
|
850
|
-
if (!isDM &&
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
1119
|
+
isMessagingBot: false,
|
|
1142
1120
|
});
|
|
1143
1121
|
if (attachmentError)
|
|
1144
1122
|
throw attachmentError;
|
|
1145
1123
|
return attachments;
|
|
1146
1124
|
}
|
|
1147
|
-
async
|
|
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
|
-
|
|
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
|
|
1224
|
-
if (
|
|
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
|
|
1251
|
-
if (
|
|
1252
|
-
await this.
|
|
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
|
-
|
|
1247
|
+
isMessagingBot: isMikanMessage,
|
|
1270
1248
|
});
|
|
1271
1249
|
}
|
|
1272
1250
|
return relevantMessages.length;
|