@geminixiang/mikan 1.0.0-beta.85 → 1.0.0-beta.86
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 +36 -0
- package/README.md +8 -8
- package/dist/adapters/commands/session-view.js +1 -1
- package/dist/adapters/commands/session-view.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +1 -8
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/github/activity.d.ts +3 -0
- package/dist/adapters/github/activity.d.ts.map +1 -0
- package/dist/adapters/github/activity.js +154 -0
- package/dist/adapters/github/activity.js.map +1 -0
- package/dist/adapters/github/bot.d.ts +10 -20
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +119 -342
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.d.ts +9 -19
- package/dist/adapters/github/client.d.ts.map +1 -1
- package/dist/adapters/github/client.js +28 -104
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +29 -20
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +2 -10
- package/dist/adapters/github/github-ops.d.ts.map +1 -1
- package/dist/adapters/github/github-ops.js +28 -91
- package/dist/adapters/github/github-ops.js.map +1 -1
- package/dist/adapters/github/policy.d.ts +19 -0
- package/dist/adapters/github/policy.d.ts.map +1 -0
- package/dist/adapters/github/policy.js +79 -0
- package/dist/adapters/github/policy.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +2 -2
- package/dist/adapters/github/tool-pack.d.ts.map +1 -1
- package/dist/adapters/github/tool-pack.js +4 -9
- package/dist/adapters/github/tool-pack.js.map +1 -1
- package/dist/adapters/github/tools/checks.d.ts.map +1 -1
- package/dist/adapters/github/tools/checks.js +6 -8
- package/dist/adapters/github/tools/checks.js.map +1 -1
- package/dist/adapters/github/tools/pr.d.ts.map +1 -1
- package/dist/adapters/github/tools/pr.js +7 -9
- package/dist/adapters/github/tools/pr.js.map +1 -1
- package/dist/adapters/github/types.d.ts +66 -67
- package/dist/adapters/github/types.d.ts.map +1 -1
- package/dist/adapters/github/types.js.map +1 -1
- package/dist/adapters/github/webhook.d.ts +2 -1
- package/dist/adapters/github/webhook.d.ts.map +1 -1
- package/dist/adapters/github/webhook.js +46 -4
- package/dist/adapters/github/webhook.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +3 -0
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/shared.d.ts +3 -1
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +45 -23
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/blocks.d.ts.map +1 -1
- package/dist/adapters/slack/blocks.js +65 -2
- package/dist/adapters/slack/blocks.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +3 -0
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +76 -34
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/jev-context.js +2 -2
- package/dist/adapters/slack/jev-context.js.map +1 -1
- package/dist/adapters/slack/task-status.d.ts +3 -2
- package/dist/adapters/slack/task-status.d.ts.map +1 -1
- package/dist/adapters/slack/task-status.js +12 -15
- package/dist/adapters/slack/task-status.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +1 -8
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/web/admin/portal.js +1 -1
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -1
- package/dist/adapters/web/admin/provider-models.js +10 -3
- package/dist/adapters/web/admin/provider-models.js.map +1 -1
- package/dist/adapters/web/login/portal.js +6 -1
- package/dist/adapters/web/login/portal.js.map +1 -1
- package/dist/adapters/web/server.d.ts.map +1 -1
- package/dist/adapters/web/server.js +5 -3
- package/dist/adapters/web/server.js.map +1 -1
- package/dist/adapters/web/session-view/portal.d.ts +2 -1
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
- package/dist/adapters/web/session-view/portal.js +18 -27
- package/dist/adapters/web/session-view/portal.js.map +1 -1
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +1 -2
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/onboard.d.ts +0 -1
- package/dist/cli/onboard.d.ts.map +1 -1
- package/dist/cli/onboard.js +1 -7
- package/dist/cli/onboard.js.map +1 -1
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js +24 -22
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +1 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +11 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/scheduler.d.ts.map +1 -1
- package/dist/events/scheduler.js +3 -0
- package/dist/events/scheduler.js.map +1 -1
- package/dist/file-guards.d.ts +7 -0
- package/dist/file-guards.d.ts.map +1 -1
- package/dist/file-guards.js +63 -1
- package/dist/file-guards.js.map +1 -1
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +75 -31
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/models.js +2 -2
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts.map +1 -1
- package/dist/harness/open-connector.js +14 -7
- package/dist/harness/open-connector.js.map +1 -1
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +2 -0
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +1 -1
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +13 -31
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +6 -9
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +6 -0
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +19 -2
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/tools/generate-image.d.ts.map +1 -1
- package/dist/harness/tools/generate-image.js +17 -3
- package/dist/harness/tools/generate-image.js.map +1 -1
- package/dist/harness/tools/jev-browser.d.ts +1 -2
- package/dist/harness/tools/jev-browser.d.ts.map +1 -1
- package/dist/harness/tools/jev-browser.js +75 -50
- package/dist/harness/tools/jev-browser.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main.js +34 -45
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts.map +1 -1
- package/dist/memory-capture/index.js +3 -3
- package/dist/memory-capture/index.js.map +1 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +2 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/office-sessions.d.ts +3 -0
- package/dist/migrations/office-sessions.d.ts.map +1 -0
- package/dist/migrations/office-sessions.js +70 -0
- package/dist/migrations/office-sessions.js.map +1 -0
- package/dist/office/index.d.ts +0 -1
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +3 -5
- package/dist/office/index.js.map +1 -1
- package/dist/runtime/conversation-runtime.js +12 -12
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +1 -1
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js +20 -5
- package/dist/sandbox/provisioner.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +28 -40
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/store.d.ts +2 -3
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +8 -14
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +6 -5
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +8 -6
- package/dist/adapters/github/repo.d.ts +0 -8
- package/dist/adapters/github/repo.d.ts.map +0 -1
- package/dist/adapters/github/repo.js +0 -92
- package/dist/adapters/github/repo.js.map +0 -1
- package/dist/adapters/github/tools/sync.d.ts +0 -13
- package/dist/adapters/github/tools/sync.d.ts.map +0 -1
- package/dist/adapters/github/tools/sync.js +0 -29
- package/dist/adapters/github/tools/sync.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { SocketModeClient } from "@slack/socket-mode";
|
|
2
2
|
import { WebAPIRateLimitedError, WebClient } from "@slack/web-api";
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
|
-
import { readFile } from "node:fs/promises";
|
|
5
4
|
import { basename } from "node:path";
|
|
6
5
|
import { createConversationEvent, createConversationMessage, createOfficeAddress, listRegisteredOffices, } from "../../office/index.js";
|
|
7
6
|
import { COMMAND_MANIFEST } from "../commands/manifest.js";
|
|
8
7
|
import { slackConversationAutoReplyMode, resolveConversationSettings, } from "../../settings/index.js";
|
|
9
8
|
import { evaluateWithJev, JevNotConfiguredError } from "../../harness/jev.js";
|
|
10
9
|
import * as log from "../../log.js";
|
|
11
|
-
import {
|
|
10
|
+
import { readTextFileNoFollowIfExists } from "../../file-guards.js";
|
|
12
11
|
import { PRODUCT_NAME, formatForceStopped } from "../messages.js";
|
|
13
12
|
import { appendBotResponseLog, appendChannelLog, MessagingEventQueue, MessagingIntakeTracker, AttachmentRejectedError, saveIncomingAttachments, writeResponseToFile, withRetry, } from "../shared.js";
|
|
14
13
|
import { matchMagicWord, processMessageIntake } from "../intake.js";
|
|
@@ -48,6 +47,11 @@ export function chunkStreamText(text, limit = MAX_STREAM_TEXT_CHARS) {
|
|
|
48
47
|
}
|
|
49
48
|
return chunks;
|
|
50
49
|
}
|
|
50
|
+
function slackErrorCode(error) {
|
|
51
|
+
if (!isRecord(error) || !isRecord(error.data))
|
|
52
|
+
return undefined;
|
|
53
|
+
return typeof error.data.error === "string" ? error.data.error : undefined;
|
|
54
|
+
}
|
|
51
55
|
function slackIsRateLimited(err) {
|
|
52
56
|
if (err instanceof WebAPIRateLimitedError)
|
|
53
57
|
return true;
|
|
@@ -98,6 +102,15 @@ export function italicizeLines(text) {
|
|
|
98
102
|
.map((line) => (line.trim() ? `_${line}_` : line))
|
|
99
103
|
.join("\n");
|
|
100
104
|
}
|
|
105
|
+
const RECENT_MESSAGE_KEYS = 2000;
|
|
106
|
+
function withLoggedAck(event, payload) {
|
|
107
|
+
return {
|
|
108
|
+
...payload,
|
|
109
|
+
ack: () => payload.ack().catch((error) => {
|
|
110
|
+
log.logWarning(`Slack ack failed for ${event}; Slack may redeliver it`, errorMessage(error));
|
|
111
|
+
}),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
101
114
|
const MRKDWN_CONTEXT_TEXT_LIMIT = 3000;
|
|
102
115
|
export function buildMrkdwnContextBlock(text) {
|
|
103
116
|
const blockText = text.length > MRKDWN_CONTEXT_TEXT_LIMIT
|
|
@@ -139,7 +152,7 @@ export class SlackMessagingBot {
|
|
|
139
152
|
replyMode: this.resolveReplyMode(event.address),
|
|
140
153
|
});
|
|
141
154
|
if (event.conversationKind === "direct") {
|
|
142
|
-
context.responder.getTaskStatus = (key) => querySlackTasks(this.
|
|
155
|
+
context.responder.getTaskStatus = (key) => querySlackTasks(this.office(event.channel), event.channel, this.handler
|
|
143
156
|
.getRunningSessions()
|
|
144
157
|
.filter((s) => s.address.platform === "slack" && s.address.conversationId === event.channel), key);
|
|
145
158
|
}
|
|
@@ -173,7 +186,7 @@ export class SlackMessagingBot {
|
|
|
173
186
|
const sessionKey = resolveSlackSessionKey(event.channel, root);
|
|
174
187
|
try {
|
|
175
188
|
registerThreadSession({
|
|
176
|
-
|
|
189
|
+
office: this.office(event.channel),
|
|
177
190
|
sessionKey,
|
|
178
191
|
});
|
|
179
192
|
const child = {
|
|
@@ -231,6 +244,8 @@ export class SlackMessagingBot {
|
|
|
231
244
|
this.stopped = false;
|
|
232
245
|
this.queues = new Map();
|
|
233
246
|
this.intake = new MessagingIntakeTracker("Slack");
|
|
247
|
+
this.recentMessageKeys = new Set();
|
|
248
|
+
this.agentSurfaceUnavailable = false;
|
|
234
249
|
this.eventScheduler = null;
|
|
235
250
|
this.handler = handler;
|
|
236
251
|
this.workspace = config.workspace;
|
|
@@ -513,13 +528,23 @@ export class SlackMessagingBot {
|
|
|
513
528
|
}
|
|
514
529
|
}
|
|
515
530
|
async setAssistantSuggestedPrompts(channel, threadTs, prompts) {
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
531
|
+
if (this.agentSurfaceUnavailable)
|
|
532
|
+
return;
|
|
533
|
+
try {
|
|
534
|
+
await slackRetry(async () => {
|
|
535
|
+
await this.webClient.assistant.threads.setSuggestedPrompts({
|
|
536
|
+
channel_id: channel,
|
|
537
|
+
thread_ts: threadTs || undefined,
|
|
538
|
+
prompts,
|
|
539
|
+
});
|
|
521
540
|
});
|
|
522
|
-
}
|
|
541
|
+
}
|
|
542
|
+
catch (error) {
|
|
543
|
+
if (slackErrorCode(error) !== "not_agent_app")
|
|
544
|
+
throw error;
|
|
545
|
+
this.agentSurfaceUnavailable = true;
|
|
546
|
+
log.logInfo("Slack app is not an agent app; suggested prompts are disabled");
|
|
547
|
+
}
|
|
523
548
|
}
|
|
524
549
|
async setAssistantTitle(channel, threadTs, title) {
|
|
525
550
|
return slackRetry(async () => {
|
|
@@ -591,7 +616,7 @@ export class SlackMessagingBot {
|
|
|
591
616
|
});
|
|
592
617
|
}
|
|
593
618
|
ownsBlockKitMessage(channel, ts, threadTs) {
|
|
594
|
-
const content =
|
|
619
|
+
const content = readTextFileNoFollowIfExists(this.office(channel).logPath);
|
|
595
620
|
if (content === undefined)
|
|
596
621
|
return false;
|
|
597
622
|
for (const line of content.trim().split("\n").toReversed()) {
|
|
@@ -631,13 +656,7 @@ export class SlackMessagingBot {
|
|
|
631
656
|
if (this.stopped)
|
|
632
657
|
return false;
|
|
633
658
|
const conversationId = event.address.conversationId;
|
|
634
|
-
|
|
635
|
-
if (queue.size() >= 5) {
|
|
636
|
-
log.logWarning(`Event queue full for ${conversationId}, discarding: ${event.text.substring(0, 50)}`);
|
|
637
|
-
return false;
|
|
638
|
-
}
|
|
639
|
-
log.logInfo(`Enqueueing event for ${conversationId}: ${event.text.substring(0, 50)}`);
|
|
640
|
-
return queue.enqueue(async () => {
|
|
659
|
+
return this.getQueue(conversationId).offerEvent(event, async () => {
|
|
641
660
|
let anchorTs;
|
|
642
661
|
if (!event.thread_ts) {
|
|
643
662
|
try {
|
|
@@ -665,7 +684,7 @@ export class SlackMessagingBot {
|
|
|
665
684
|
const eventForRun = eventPlan.event;
|
|
666
685
|
if (eventPlan.initialMessageTs && eventForRun.sessionKey) {
|
|
667
686
|
registerThreadSession({
|
|
668
|
-
|
|
687
|
+
office: this.office(conversationId),
|
|
669
688
|
sessionKey: eventForRun.sessionKey,
|
|
670
689
|
});
|
|
671
690
|
}
|
|
@@ -719,10 +738,10 @@ export class SlackMessagingBot {
|
|
|
719
738
|
return this.hasKnownThreadSession(conversationId, sessionKey) ? sessionKey : conversationId;
|
|
720
739
|
}
|
|
721
740
|
isTaskThread(channel, root) {
|
|
722
|
-
return readTaskRoots(this.
|
|
741
|
+
return readTaskRoots(this.office(channel)).has(root);
|
|
723
742
|
}
|
|
724
743
|
hasRunningTaskThread(channel) {
|
|
725
|
-
const roots = readTaskRoots(this.
|
|
744
|
+
const roots = readTaskRoots(this.office(channel));
|
|
726
745
|
if (!roots.size)
|
|
727
746
|
return false;
|
|
728
747
|
return this.handler
|
|
@@ -733,7 +752,7 @@ export class SlackMessagingBot {
|
|
|
733
752
|
}
|
|
734
753
|
hasKnownThreadSession(conversationId, sessionKey) {
|
|
735
754
|
return hasMaterializedChatSession({
|
|
736
|
-
|
|
755
|
+
office: this.office(conversationId),
|
|
737
756
|
sessionKey,
|
|
738
757
|
});
|
|
739
758
|
}
|
|
@@ -1054,16 +1073,29 @@ export class SlackMessagingBot {
|
|
|
1054
1073
|
this.socketClient.on("unable_to_socket_mode_start", (err) => {
|
|
1055
1074
|
log.logWarning("Slack socket unable_to_start", err ? String(err) : "");
|
|
1056
1075
|
});
|
|
1057
|
-
this.socketClient.on(
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
this.
|
|
1066
|
-
|
|
1076
|
+
const on = (event, handle) => this.socketClient.on(event, (payload) => this.intake.run(() => handle(withLoggedAck(event, payload))));
|
|
1077
|
+
on("app_mention", (payload) => this.handleAppMention(payload));
|
|
1078
|
+
on("message", (payload) => this.handleMessageEvent(payload));
|
|
1079
|
+
on("slash_commands", (payload) => this.handleSlashCommand(payload));
|
|
1080
|
+
on("app_home_opened", (payload) => this.handleAppHomeOpened(payload));
|
|
1081
|
+
on("assistant_thread_started", (payload) => this.handleAssistantThreadStarted(payload));
|
|
1082
|
+
on("assistant_thread_context_changed", (payload) => this.handleAgentContextChangedEvent(payload));
|
|
1083
|
+
on("app_context_changed", (payload) => this.handleAgentContextChangedEvent(payload));
|
|
1084
|
+
const blockAction = ({ body, ack }) => this.handleBlockAction({ body: body, ack });
|
|
1085
|
+
on("block_actions", blockAction);
|
|
1086
|
+
on("interactive", blockAction);
|
|
1087
|
+
}
|
|
1088
|
+
isRedelivery(kind, channel, ts) {
|
|
1089
|
+
const key = `${kind}:${channel}:${ts}`;
|
|
1090
|
+
if (this.recentMessageKeys.has(key))
|
|
1091
|
+
return true;
|
|
1092
|
+
this.recentMessageKeys.add(key);
|
|
1093
|
+
if (this.recentMessageKeys.size > RECENT_MESSAGE_KEYS) {
|
|
1094
|
+
const oldest = this.recentMessageKeys.values().next().value;
|
|
1095
|
+
if (oldest !== undefined)
|
|
1096
|
+
this.recentMessageKeys.delete(oldest);
|
|
1097
|
+
}
|
|
1098
|
+
return false;
|
|
1067
1099
|
}
|
|
1068
1100
|
async handleAppMention({ event, ack }) {
|
|
1069
1101
|
const e = event;
|
|
@@ -1071,6 +1103,11 @@ export class SlackMessagingBot {
|
|
|
1071
1103
|
ack();
|
|
1072
1104
|
return;
|
|
1073
1105
|
}
|
|
1106
|
+
if (this.isRedelivery("app_mention", e.channel, e.ts)) {
|
|
1107
|
+
log.logInfo(`[${e.channel}] Ignoring redelivered mention ${e.ts}`);
|
|
1108
|
+
await ack();
|
|
1109
|
+
return;
|
|
1110
|
+
}
|
|
1074
1111
|
const sessionKey = resolveSlackSessionKey(e.channel, e.thread_ts);
|
|
1075
1112
|
const mentionText = this.stripOwnMention(e.text);
|
|
1076
1113
|
const slackEvent = createConversationEvent({
|
|
@@ -1220,6 +1257,11 @@ export class SlackMessagingBot {
|
|
|
1220
1257
|
const e = event;
|
|
1221
1258
|
if (!this.admitHumanMessage(e, ack))
|
|
1222
1259
|
return;
|
|
1260
|
+
if (this.isRedelivery("message", e.channel, e.ts)) {
|
|
1261
|
+
log.logInfo(`[${e.channel}] Ignoring redelivered message ${e.ts}`);
|
|
1262
|
+
await ack();
|
|
1263
|
+
return;
|
|
1264
|
+
}
|
|
1223
1265
|
const isDM = e.channel_type === "im" || e.channel.startsWith("D");
|
|
1224
1266
|
const conversationKind = isDM ? "direct" : "shared";
|
|
1225
1267
|
const isMessagingBotMention = e.text?.includes(`<@${this.botUserId}>`);
|
|
@@ -1523,9 +1565,9 @@ export class SlackMessagingBot {
|
|
|
1523
1565
|
async getExistingTimestamps(channelId) {
|
|
1524
1566
|
const { logPath } = this.office(channelId);
|
|
1525
1567
|
const timestamps = new Set();
|
|
1526
|
-
|
|
1568
|
+
const content = readTextFileNoFollowIfExists(logPath);
|
|
1569
|
+
if (content === undefined)
|
|
1527
1570
|
return timestamps;
|
|
1528
|
-
const content = await readFile(logPath, "utf-8");
|
|
1529
1571
|
const lines = content.trim().split("\n").filter(Boolean);
|
|
1530
1572
|
for (let i = 0; i < lines.length; i++) {
|
|
1531
1573
|
try {
|