cli-jaw 2.17.43 → 2.17.44
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/README.md +13 -2
- package/dist/bin/commands/slack.js +73 -7
- package/dist/bin/commands/slack.js.map +1 -1
- package/dist/server.js +46 -1
- package/dist/server.js.map +1 -1
- package/dist/src/agent/calendar-context.js +23 -0
- package/dist/src/agent/calendar-context.js.map +1 -0
- package/dist/src/agent/claude-runtime-run.js +10 -1
- package/dist/src/agent/claude-runtime-run.js.map +1 -1
- package/dist/src/agent/cursor-acp-models.js +139 -0
- package/dist/src/agent/cursor-acp-models.js.map +1 -0
- package/dist/src/agent/events/cursor.js +28 -4
- package/dist/src/agent/events/cursor.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +8 -2
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/native-runtime-run.js +22 -1
- package/dist/src/agent/native-runtime-run.js.map +1 -1
- package/dist/src/agent/runtime/acp/config.js +76 -11
- package/dist/src/agent/runtime/acp/config.js.map +1 -1
- package/dist/src/agent/runtime/acp/cursor-session.js +6 -1
- package/dist/src/agent/runtime/acp/cursor-session.js.map +1 -1
- package/dist/src/agent/runtime/liveness.js +24 -0
- package/dist/src/agent/runtime/liveness.js.map +1 -0
- package/dist/src/agent/runtime/start-failure.js +61 -0
- package/dist/src/agent/runtime/start-failure.js.map +1 -0
- package/dist/src/agent/spawn/queue.js +11 -6
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn.js +59 -17
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/api-auth.js +6 -0
- package/dist/src/cli/api-auth.js.map +1 -1
- package/dist/src/manager/design/watcher.js +10 -2
- package/dist/src/manager/design/watcher.js.map +1 -1
- package/dist/src/memory/heartbeat.js +6 -0
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/messaging/channel-validate.js +5 -3
- package/dist/src/messaging/channel-validate.js.map +1 -1
- package/dist/src/messaging/redact.js +30 -8
- package/dist/src/messaging/redact.js.map +1 -1
- package/dist/src/messaging/send.js +7 -0
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/orchestrator/collect.js +5 -3
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +10 -3
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +21 -9
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/request-registry.js +2 -0
- package/dist/src/orchestrator/request-registry.js.map +1 -1
- package/dist/src/prompt/builder.js +74 -6
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +22 -5
- package/dist/src/routes/messaging.js +105 -27
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/settings.js +20 -8
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/slack-tools.js +176 -0
- package/dist/src/routes/slack-tools.js.map +1 -0
- package/dist/src/slack/action-rate.js +43 -0
- package/dist/src/slack/action-rate.js.map +1 -0
- package/dist/src/slack/action-runtime.js +243 -0
- package/dist/src/slack/action-runtime.js.map +1 -0
- package/dist/src/slack/action-store.js +84 -0
- package/dist/src/slack/action-store.js.map +1 -0
- package/dist/src/slack/action-types.js +6 -0
- package/dist/src/slack/action-types.js.map +1 -0
- package/dist/src/slack/actions-canvas.js +108 -0
- package/dist/src/slack/actions-canvas.js.map +1 -0
- package/dist/src/slack/actions-channel.js +88 -0
- package/dist/src/slack/actions-channel.js.map +1 -0
- package/dist/src/slack/actions-interactions.js +204 -0
- package/dist/src/slack/actions-interactions.js.map +1 -0
- package/dist/src/slack/actions-lists.js +308 -0
- package/dist/src/slack/actions-lists.js.map +1 -0
- package/dist/src/slack/actions-message.js +117 -0
- package/dist/src/slack/actions-message.js.map +1 -0
- package/dist/src/slack/actions-resources.js +62 -0
- package/dist/src/slack/actions-resources.js.map +1 -0
- package/dist/src/slack/actions-rts.js +88 -0
- package/dist/src/slack/actions-rts.js.map +1 -0
- package/dist/src/slack/actions-schedule.js +214 -0
- package/dist/src/slack/actions-schedule.js.map +1 -0
- package/dist/src/slack/actions.js +17 -0
- package/dist/src/slack/actions.js.map +1 -0
- package/dist/src/slack/api.js +56 -9
- package/dist/src/slack/api.js.map +1 -1
- package/dist/src/slack/blocks.js +162 -0
- package/dist/src/slack/blocks.js.map +1 -0
- package/dist/src/slack/bot.js +562 -378
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/commands.js +24 -5
- package/dist/src/slack/commands.js.map +1 -1
- package/dist/src/slack/context.js +15 -4
- package/dist/src/slack/context.js.map +1 -1
- package/dist/src/slack/conversation.js +135 -33
- package/dist/src/slack/conversation.js.map +1 -1
- package/dist/src/slack/events.js +41 -17
- package/dist/src/slack/events.js.map +1 -1
- package/dist/src/slack/format.js +181 -0
- package/dist/src/slack/format.js.map +1 -1
- package/dist/src/slack/history.js +133 -8
- package/dist/src/slack/history.js.map +1 -1
- package/dist/src/slack/ingress.js +26 -9
- package/dist/src/slack/ingress.js.map +1 -1
- package/dist/src/slack/interaction-store.js +56 -0
- package/dist/src/slack/interaction-store.js.map +1 -0
- package/dist/src/slack/manifest.js +3 -0
- package/dist/src/slack/manifest.js.map +1 -1
- package/dist/src/slack/message-content.js +132 -0
- package/dist/src/slack/message-content.js.map +1 -0
- package/dist/src/slack/message.js +58 -0
- package/dist/src/slack/message.js.map +1 -0
- package/dist/src/slack/notice-transport.js +49 -19
- package/dist/src/slack/notice-transport.js.map +1 -1
- package/dist/src/slack/operator-auth.js +62 -0
- package/dist/src/slack/operator-auth.js.map +1 -0
- package/dist/src/slack/progress-activity.js +210 -0
- package/dist/src/slack/progress-activity.js.map +1 -0
- package/dist/src/slack/progress-detail.js +473 -0
- package/dist/src/slack/progress-detail.js.map +1 -0
- package/dist/src/slack/progress-files.js +70 -0
- package/dist/src/slack/progress-files.js.map +1 -0
- package/dist/src/slack/progress-lifecycle.js +223 -0
- package/dist/src/slack/progress-lifecycle.js.map +1 -0
- package/dist/src/slack/progress-restore.js +81 -0
- package/dist/src/slack/progress-restore.js.map +1 -0
- package/dist/src/slack/progress.js +325 -143
- package/dist/src/slack/progress.js.map +1 -1
- package/dist/src/slack/quote.js +227 -0
- package/dist/src/slack/quote.js.map +1 -0
- package/dist/src/slack/render-features.js +105 -0
- package/dist/src/slack/render-features.js.map +1 -0
- package/dist/src/slack/reply-delivery.js +110 -0
- package/dist/src/slack/reply-delivery.js.map +1 -0
- package/dist/src/slack/rts-output-store.js +143 -0
- package/dist/src/slack/rts-output-store.js.map +1 -0
- package/dist/src/slack/scope-status.js +17 -3
- package/dist/src/slack/scope-status.js.map +1 -1
- package/dist/src/slack/search-quote.js +70 -0
- package/dist/src/slack/search-quote.js.map +1 -0
- package/dist/src/slack/search.js +54 -0
- package/dist/src/slack/search.js.map +1 -0
- package/dist/src/slack/send-handler.js +11 -7
- package/dist/src/slack/send-handler.js.map +1 -1
- package/dist/src/slack/send-only-client.js +116 -79
- package/dist/src/slack/send-only-client.js.map +1 -1
- package/dist/src/slack/table-content.js +253 -0
- package/dist/src/slack/table-content.js.map +1 -0
- package/dist/src/slack/table-verification.js +64 -0
- package/dist/src/slack/table-verification.js.map +1 -0
- package/dist/src/slack/task-input.js +55 -0
- package/dist/src/slack/task-input.js.map +1 -0
- package/dist/src/slack/tool-access.js +127 -0
- package/dist/src/slack/tool-access.js.map +1 -0
- package/dist/src/slack/tool-capabilities.js +47 -0
- package/dist/src/slack/tool-capabilities.js.map +1 -0
- package/dist/src/slack/tool-context.js +91 -0
- package/dist/src/slack/tool-context.js.map +1 -0
- package/dist/src/slack/verified-workspace.js +17 -6
- package/dist/src/slack/verified-workspace.js.map +1 -1
- package/dist/src/trace/redact.js +2 -1
- package/dist/src/trace/redact.js.map +1 -1
- package/package.json +1 -1
- package/public/dist/.vite/manifest.json +102 -102
- package/public/dist/assets/{Agent-CQ4EBgY8.js → Agent-CNad_A6t.js} +1 -1
- package/public/dist/assets/{ChannelEnablementControl-JsYvNMlM.js → ChannelEnablementControl-DwUDKjX9.js} +4 -4
- package/public/dist/assets/{ChannelSetupEntry-BpyRWEUE.js → ChannelSetupEntry-DH0AuNNX.js} +1 -1
- package/public/dist/assets/{ChannelsDiscord-DNfvz1jn.js → ChannelsDiscord-7NmoTjR7.js} +1 -1
- package/public/dist/assets/{ChannelsSlack-DzpxIdgW.js → ChannelsSlack-Ba0ax6iT.js} +1 -1
- package/public/dist/assets/{ChannelsTelegram-CUhFc5s6.js → ChannelsTelegram-DKA9atf2.js} +1 -1
- package/public/dist/assets/{app-Q0prKOFx.js → app-9OQNfmqw.js} +4 -4
- package/public/dist/assets/{bgtask-badge-DAcWaUfS.js → bgtask-badge-BvxHqMGi.js} +1 -1
- package/public/dist/assets/bgtask-badge-DeSZJGNN.js +1 -0
- package/public/dist/assets/{employees-CWS3Juca.js → employees-CkUqN4oh.js} +1 -1
- package/public/dist/assets/{iframe-renderer-DCDKBMb7.js → iframe-renderer-C2gchtOj.js} +2 -2
- package/public/dist/assets/iframe-renderer-DfvACXIn.js +1 -0
- package/public/dist/assets/{manager-v6GYfoPB.js → manager-rb5X-4DJ.js} +1 -1
- package/public/dist/assets/{memory-DhNdKZLO.js → memory-BiWzpoBq.js} +1 -1
- package/public/dist/assets/memory-Ckp1Eq5a.js +1 -0
- package/public/dist/assets/message-history-Bv0l_t7O.js +1 -0
- package/public/dist/assets/{message-history-DbRTl1P0.js → message-history-CuFefS02.js} +1 -1
- package/public/dist/assets/{render-DP8SJtdZ.js → render-DUGqq9Mu.js} +1 -1
- package/public/dist/assets/{settings-85n9NjvX.js → settings-BqUHavbH.js} +1 -1
- package/public/dist/assets/settings-C81Kf9uX.js +1 -0
- package/public/dist/assets/{settings-C9_D-pn0.js → settings-DQ1fLygB.js} +31 -30
- package/public/dist/assets/{settings-core-BcVD2FgV.js → settings-core-CzdXfoOK.js} +1 -1
- package/public/dist/assets/settings-core-DO_5M7Lv.js +1 -0
- package/public/dist/assets/{settings-embedding-BSpq785l.js → settings-embedding-BAKFrVLV.js} +1 -1
- package/public/dist/assets/{settings-types-B09BmpYe.js → settings-types-D3cd6SWy.js} +1 -1
- package/public/dist/assets/{sidebar-BVhLb5Ft.js → sidebar-CvGbp9x5.js} +3 -3
- package/public/dist/assets/skills-DFpPmMUR.js +1 -0
- package/public/dist/assets/{skills-X7qxmHka.js → skills-abLMqY5_.js} +1 -1
- package/public/dist/assets/slash-commands-BU58xYih.js +1 -0
- package/public/dist/assets/{slash-commands-BnDH4IU_.js → slash-commands-D8o9pqOS.js} +1 -1
- package/public/dist/assets/{trace-drawer-DasaS1z4.js → trace-drawer-C6RvkUAd.js} +1 -1
- package/public/dist/assets/{ui-BtiBTXng.js → ui-Bxapl_Eu.js} +1 -1
- package/public/dist/assets/ui-CUB4iwz3.js +1 -0
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +1 -1
- package/public/dist/settings/index.html +1 -1
- package/public/js/features/settings-cli-status.ts +11 -1
- package/public/js/features/settings-types.ts +21 -0
- package/public/locales/en.json +34 -1
- package/public/locales/ja.json +34 -1
- package/public/locales/ko.json +34 -1
- package/public/locales/zh.json +34 -1
- package/scripts/check-native-load.cjs +17 -4
- package/scripts/release-gates.mjs +84 -3
- package/scripts/service-artifact.mjs +157 -0
- package/scripts/service-shell/zsh/.zlogin +23 -0
- package/scripts/service-shell/zsh/.zlogout +23 -0
- package/scripts/service-shell/zsh/.zprofile +23 -0
- package/scripts/service-shell/zsh/.zshenv +23 -0
- package/scripts/service-shell/zsh/.zshrc +23 -0
- package/public/dist/assets/bgtask-badge-DHA2OQm8.js +0 -1
- package/public/dist/assets/iframe-renderer-RpvBly2x.js +0 -1
- package/public/dist/assets/memory-4YH8sz0L.js +0 -1
- package/public/dist/assets/message-history-lVcLpAw8.js +0 -1
- package/public/dist/assets/settings--EGy3_B9.js +0 -1
- package/public/dist/assets/settings-core-8wBl1mg-.js +0 -1
- package/public/dist/assets/skills-6GFkHTlQ.js +0 -1
- package/public/dist/assets/slash-commands-qu8fPAZ3.js +0 -1
- package/public/dist/assets/ui-BucJ1zMA.js +0 -1
|
@@ -12,6 +12,7 @@ import { slackApi } from './api.js';
|
|
|
12
12
|
import { fetchSlackReplies } from './history.js';
|
|
13
13
|
import { sanitizeIdentityName, getCachedSlackIdentities, } from './identity.js';
|
|
14
14
|
import { EnrichmentCache } from './enrichment-cache.js';
|
|
15
|
+
import { getSlackScopeStatus } from './scope-status.js';
|
|
15
16
|
const CONVERSATION_TTL_MS = 10 * 60 * 1000;
|
|
16
17
|
const THREAD_TTL_MS = 60 * 1000;
|
|
17
18
|
const CACHE_CAP = 500;
|
|
@@ -92,6 +93,26 @@ export function admitHistoryStart() {
|
|
|
92
93
|
function capabilityKeyFor(method) {
|
|
93
94
|
return `conversation:capability:${method}`;
|
|
94
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* A missing_scope from an MPIM proves only that an mpim:* scope is absent —
|
|
98
|
+
* it says nothing about channels:read/groups:read. Treating it as a
|
|
99
|
+
* workspace-wide capability failure would blind every channel and DM name
|
|
100
|
+
* lookup for 30 minutes on installs that receive message.mpim without ever
|
|
101
|
+
* being reinstalled for the new scopes. Scope it down: when Slack names an
|
|
102
|
+
* mpim:* scope in needed, or the install is already known to lack the MPIM
|
|
103
|
+
* scope, degrade per resource instead of locking the method.
|
|
104
|
+
*/
|
|
105
|
+
function mpimScopeError(methodScope, channel, error, needed) {
|
|
106
|
+
if (error !== 'missing_scope')
|
|
107
|
+
return error;
|
|
108
|
+
if (kindFromPrefix(channel) !== 'group_dm')
|
|
109
|
+
return error;
|
|
110
|
+
if (typeof needed === 'string' && needed.startsWith('mpim:'))
|
|
111
|
+
return 'mpim_scope_missing';
|
|
112
|
+
if (getSlackScopeStatus().missingCapabilities.includes(methodScope))
|
|
113
|
+
return 'mpim_scope_missing';
|
|
114
|
+
return error;
|
|
115
|
+
}
|
|
95
116
|
/**
|
|
96
117
|
* Prefix classification. Deliberately NOT slackPeerKind from slack-target.ts:
|
|
97
118
|
* that is a 3-value delivery classification which folds `U` into direct, while
|
|
@@ -133,6 +154,12 @@ function cap(text, max) {
|
|
|
133
154
|
export async function resolveConversationInfo(token, channel, opts) {
|
|
134
155
|
if (!token || !channel)
|
|
135
156
|
return degradedConversation(channel);
|
|
157
|
+
// An install known to lack mpim:read cannot resolve an MPIM; skip the call
|
|
158
|
+
// entirely so the failure can never escalate into a method-wide lock.
|
|
159
|
+
if (kindFromPrefix(channel) === 'group_dm'
|
|
160
|
+
&& getSlackScopeStatus().missingCapabilities.includes('mpim:read')) {
|
|
161
|
+
return degradedConversation(channel);
|
|
162
|
+
}
|
|
136
163
|
const key = `${opts.teamId || 'unknown'}:${channel}`;
|
|
137
164
|
const value = await conversationCache.resolve({
|
|
138
165
|
partition: 'conversation',
|
|
@@ -149,7 +176,7 @@ export async function resolveConversationInfo(token, channel, opts) {
|
|
|
149
176
|
});
|
|
150
177
|
const raw = result.data?.channel;
|
|
151
178
|
if (!result.ok || !raw) {
|
|
152
|
-
return { ok: false, error: result.error || 'unknown_error' };
|
|
179
|
+
return { ok: false, error: mpimScopeError('mpim:read', channel, result.error, result.data?.['needed']) || 'unknown_error' };
|
|
153
180
|
}
|
|
154
181
|
const info = {
|
|
155
182
|
id: raw.id || channel,
|
|
@@ -170,7 +197,7 @@ export async function resolveConversationInfo(token, channel, opts) {
|
|
|
170
197
|
return value;
|
|
171
198
|
}
|
|
172
199
|
function degradedThread(threadTs) {
|
|
173
|
-
return { threadTs,
|
|
200
|
+
return { threadTs, fetchedCount: 0, retainedCount: 0, partial: true, participants: [], resolved: false };
|
|
174
201
|
}
|
|
175
202
|
/**
|
|
176
203
|
* Thread participants and prior messages.
|
|
@@ -181,8 +208,16 @@ function degradedThread(threadTs) {
|
|
|
181
208
|
* app message carries both.
|
|
182
209
|
*/
|
|
183
210
|
export async function resolveThreadInfo(token, channel, threadTs, opts) {
|
|
184
|
-
if (!token || !channel || !threadTs)
|
|
211
|
+
if (!token || !channel || !threadTs || opts.signal?.aborted)
|
|
212
|
+
return degradedThread(threadTs);
|
|
213
|
+
// Symmetric with resolveConversationInfo: an install known to lack
|
|
214
|
+
// mpim:history cannot page an MPIM thread; degrade without calling.
|
|
215
|
+
if (kindFromPrefix(channel) === 'group_dm'
|
|
216
|
+
&& getSlackScopeStatus().missingCapabilities.includes('mpim:history')) {
|
|
185
217
|
return degradedThread(threadTs);
|
|
218
|
+
}
|
|
219
|
+
const generation = conversationCache.currentGeneration();
|
|
220
|
+
let progress = degradedThread(threadTs);
|
|
186
221
|
const key = `${opts.teamId || 'unknown'}:${channel}:${threadTs}`;
|
|
187
222
|
const value = await conversationCache.resolve({
|
|
188
223
|
partition: 'thread',
|
|
@@ -190,38 +225,83 @@ export async function resolveThreadInfo(token, channel, threadTs, opts) {
|
|
|
190
225
|
capabilityKey: capabilityKeyFor('conversations.replies'),
|
|
191
226
|
...(opts.signal ? { signal: opts.signal } : {}),
|
|
192
227
|
admitStart: () => admitStartFor('conversations.replies'),
|
|
193
|
-
degraded: () => degradedThread(threadTs),
|
|
194
|
-
load: async () => {
|
|
228
|
+
degraded: () => generation === conversationCache.currentGeneration() ? progress : degradedThread(threadTs),
|
|
229
|
+
load: async ({ signal }) => {
|
|
195
230
|
let cursor;
|
|
196
231
|
let parent;
|
|
197
|
-
|
|
232
|
+
const seen = new Set();
|
|
233
|
+
const cursors = new Set();
|
|
234
|
+
let complete = false;
|
|
235
|
+
let omitted = false;
|
|
198
236
|
const newestReplies = [];
|
|
237
|
+
const snapshot = () => ({
|
|
238
|
+
threadTs,
|
|
239
|
+
...(parent?.replyCount !== undefined ? { replyCount: parent.replyCount } : {}),
|
|
240
|
+
fetchedCount: seen.size,
|
|
241
|
+
retainedCount: newestReplies.length + (parent ? 1 : 0),
|
|
242
|
+
partial: true,
|
|
243
|
+
...(cursor ? { nextCursor: cursor } : {}),
|
|
244
|
+
participants: [],
|
|
245
|
+
messages: parent ? [parent, ...newestReplies] : [...newestReplies],
|
|
246
|
+
resolved: seen.size > 0,
|
|
247
|
+
});
|
|
199
248
|
for (let page = 0; page < THREAD_FETCH_MAX_PAGES; page += 1) {
|
|
249
|
+
if (signal.aborted)
|
|
250
|
+
break;
|
|
200
251
|
const result = await fetchSlackReplies(token, channel, threadTs, {
|
|
201
252
|
limit: THREAD_FETCH_LIMIT,
|
|
202
253
|
...(cursor ? { cursor } : {}),
|
|
203
254
|
noRetryOnRateLimit: true,
|
|
204
255
|
...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
|
|
205
|
-
|
|
256
|
+
signal,
|
|
206
257
|
});
|
|
207
|
-
if (
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (
|
|
211
|
-
|
|
258
|
+
if (signal.aborted)
|
|
259
|
+
break;
|
|
260
|
+
if (!result.ok) {
|
|
261
|
+
if (!seen.size)
|
|
262
|
+
return { ok: false, error: result.code || result.error };
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
// Keep at most 500 identifiers and 51 projected bodies, even if
|
|
266
|
+
// an upstream response ignores the requested page limit.
|
|
267
|
+
omitted ||= result.messages.length > THREAD_FETCH_LIMIT;
|
|
268
|
+
for (const message of result.messages.slice(0, THREAD_FETCH_LIMIT)) {
|
|
269
|
+
if (message.ts.length > 32 || !/^\d+\.\d+$/.test(message.ts)) {
|
|
270
|
+
omitted = true;
|
|
212
271
|
continue;
|
|
213
272
|
}
|
|
214
|
-
|
|
215
|
-
|
|
273
|
+
if (seen.has(message.ts))
|
|
274
|
+
continue;
|
|
275
|
+
seen.add(message.ts);
|
|
276
|
+
const projected = projectThreadMessage(message);
|
|
277
|
+
if (message.ts === threadTs) {
|
|
278
|
+
parent = projected;
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
newestReplies.push(projected);
|
|
282
|
+
newestReplies.sort((a, b) => compareThreadTs(a.ts, b.ts));
|
|
283
|
+
if (newestReplies.length > THREAD_FETCH_LIMIT)
|
|
284
|
+
newestReplies.shift();
|
|
285
|
+
}
|
|
216
286
|
}
|
|
217
|
-
|
|
218
|
-
|
|
287
|
+
cursor = result.nextCursor;
|
|
288
|
+
if (cursor && cursor.length > 4096) {
|
|
289
|
+
cursor = undefined;
|
|
290
|
+
omitted = true;
|
|
291
|
+
progress = snapshot();
|
|
292
|
+
break;
|
|
219
293
|
}
|
|
220
|
-
|
|
221
|
-
if (!
|
|
294
|
+
progress = snapshot();
|
|
295
|
+
if (!result.hasMore) {
|
|
296
|
+
complete = true;
|
|
222
297
|
break;
|
|
223
|
-
|
|
298
|
+
}
|
|
299
|
+
if (!cursor || cursors.has(cursor))
|
|
300
|
+
break;
|
|
301
|
+
cursors.add(cursor);
|
|
224
302
|
}
|
|
303
|
+
if (signal.aborted)
|
|
304
|
+
return { ok: false, error: 'aborted' };
|
|
225
305
|
const messages = parent ? [parent, ...newestReplies] : newestReplies;
|
|
226
306
|
const ids = [];
|
|
227
307
|
const isBotById = new Map();
|
|
@@ -244,13 +324,11 @@ export async function resolveThreadInfo(token, channel, threadTs, opts) {
|
|
|
244
324
|
// Cache-only name resolution: this is an inbound hot path, and an
|
|
245
325
|
// unresolved participant shown by id is better than a round trip.
|
|
246
326
|
const names = getCachedSlackIdentities(opts.teamId, ids);
|
|
247
|
-
// Slack's own count on the parent is authoritative. The fetched
|
|
248
|
-
// window is capped at 50, so length-1 would report a 500-reply
|
|
249
|
-
// thread as 49.
|
|
250
|
-
const replyCount = typeof parent?.replyCount === 'number' ? parent.replyCount : fetchedReplyCount;
|
|
251
327
|
const info = {
|
|
252
|
-
|
|
253
|
-
|
|
328
|
+
...snapshot(),
|
|
329
|
+
partial: !complete || omitted || seen.size > messages.length
|
|
330
|
+
|| messages.some(message => message.contentTruncated)
|
|
331
|
+
|| (parent?.replyCount !== undefined && parent.replyCount > seen.size - (parent ? 1 : 0)),
|
|
254
332
|
participants: ids.map(id => {
|
|
255
333
|
const userId = userIdById.get(id);
|
|
256
334
|
return {
|
|
@@ -260,13 +338,7 @@ export async function resolveThreadInfo(token, channel, threadTs, opts) {
|
|
|
260
338
|
...(userId ? { userId } : {}),
|
|
261
339
|
};
|
|
262
340
|
}),
|
|
263
|
-
|
|
264
|
-
// cached thread must not pin megabytes of message bodies.
|
|
265
|
-
messages: messages.map(message => ({
|
|
266
|
-
...message,
|
|
267
|
-
text: cap(message.text, PREFETCH_TEXT_MAX),
|
|
268
|
-
...(message.files ? { files: [] } : {}),
|
|
269
|
-
})),
|
|
341
|
+
messages,
|
|
270
342
|
resolved: true,
|
|
271
343
|
};
|
|
272
344
|
if (parent?.text)
|
|
@@ -274,7 +346,37 @@ export async function resolveThreadInfo(token, channel, threadTs, opts) {
|
|
|
274
346
|
return { ok: true, value: info };
|
|
275
347
|
},
|
|
276
348
|
});
|
|
277
|
-
return
|
|
349
|
+
return opts.signal?.aborted
|
|
350
|
+
? (generation === conversationCache.currentGeneration() ? progress : degradedThread(threadTs))
|
|
351
|
+
: value;
|
|
352
|
+
}
|
|
353
|
+
/** Decimal comparison avoids precision loss for adjacent Slack microseconds. */
|
|
354
|
+
function compareThreadTs(a, b) {
|
|
355
|
+
const [as = '0', af = ''] = a.split('.');
|
|
356
|
+
const [bs = '0', bf = ''] = b.split('.');
|
|
357
|
+
const seconds = BigInt(as) - BigInt(bs);
|
|
358
|
+
if (seconds !== 0n)
|
|
359
|
+
return seconds < 0n ? -1 : 1;
|
|
360
|
+
const width = Math.max(af.length, bf.length);
|
|
361
|
+
const left = af.padEnd(width, '0');
|
|
362
|
+
const right = bf.padEnd(width, '0');
|
|
363
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
364
|
+
}
|
|
365
|
+
function projectThreadMessage(message) {
|
|
366
|
+
return {
|
|
367
|
+
ts: message.ts,
|
|
368
|
+
...(message.contentExcluded ? { contentExcluded: true } : {}),
|
|
369
|
+
...(message.textFromBlocks ? { textFromBlocks: true } : {}),
|
|
370
|
+
...(message.threadTs ? { threadTs: message.threadTs.slice(0, 32) } : {}),
|
|
371
|
+
...(message.user ? { user: message.user.slice(0, 64) } : {}),
|
|
372
|
+
...(message.botId ? { botId: message.botId.slice(0, 64) } : {}),
|
|
373
|
+
...(message.replyCount !== undefined ? { replyCount: message.replyCount } : {}),
|
|
374
|
+
...(message.subtype ? { subtype: message.subtype.slice(0, 64) } : {}),
|
|
375
|
+
...(message.edited ? { edited: { ts: message.edited.ts.slice(0, 32),
|
|
376
|
+
...(message.edited.user ? { user: message.edited.user.slice(0, 64) } : {}) } } : {}),
|
|
377
|
+
text: cap(message.text, PREFETCH_TEXT_MAX),
|
|
378
|
+
...(message.contentTruncated || [...message.text].length > PREFETCH_TEXT_MAX ? { contentTruncated: true } : {}),
|
|
379
|
+
};
|
|
278
380
|
}
|
|
279
381
|
/** Names for ids, from cache only. Misses are simply absent. */
|
|
280
382
|
export function cachedNameMap(teamId, ids) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/slack/conversation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/slack/conversation.ts"],"names":[],"mappings":"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"}
|
package/dist/src/slack/events.js
CHANGED
|
@@ -15,6 +15,9 @@ const IGNORED_SUBTYPES = new Set([
|
|
|
15
15
|
export function isDirectMessage(event) {
|
|
16
16
|
return event.channel_type === 'im' || (event.channel || '').toUpperCase().startsWith('D');
|
|
17
17
|
}
|
|
18
|
+
export function isSlackMention(event, selfUserId) {
|
|
19
|
+
return event.type === 'app_mention' || (event.channel_type === 'mpim' && !!selfUserId && mentionsUser(event.text || '', selfUserId));
|
|
20
|
+
}
|
|
18
21
|
export function mentionsUser(text, userId) {
|
|
19
22
|
return new RegExp(`<@${userId}(?:\\|[^>]*)?>`).test(text);
|
|
20
23
|
}
|
|
@@ -134,7 +137,8 @@ export function shouldProcessSlackEvent(event, config, envelopeType) {
|
|
|
134
137
|
// milliseconds and the gateway dedup slams the second with a public
|
|
135
138
|
// "❌ duplicate". The app_mention copy is the canonical path; DMs never
|
|
136
139
|
// produce app_mention envelopes, so they are unaffected.
|
|
137
|
-
|
|
140
|
+
// MPIM message events must stand alone; do not wait for an app_mention twin.
|
|
141
|
+
if (!dm && event.channel_type !== 'mpim' && event.type !== 'app_mention' && config.selfUserId
|
|
138
142
|
&& mentionsUser(event.text || '', config.selfUserId)) {
|
|
139
143
|
return { process: false, reason: 'mention_via_app_mention' };
|
|
140
144
|
}
|
|
@@ -173,37 +177,57 @@ export function shouldProcessSlackEvent(event, config, envelopeType) {
|
|
|
173
177
|
* Traversal is ITERATIVE: a deeply nested payload would blow the call stack
|
|
174
178
|
* in a recursive walk, and inbound block structures are attacker-influenced.
|
|
175
179
|
*/
|
|
176
|
-
export function
|
|
180
|
+
export function extractTextFromBlocksDetailed(blocks, maxChars = 6000) {
|
|
177
181
|
const out = [];
|
|
178
182
|
const seen = new Set();
|
|
179
|
-
const stack =
|
|
180
|
-
let budget = maxChars;
|
|
181
|
-
|
|
183
|
+
const stack = blocks.slice(0, 10000).reverse();
|
|
184
|
+
let budget = Math.max(0, maxChars);
|
|
185
|
+
let visited = 0;
|
|
186
|
+
let truncated = blocks.length > 10000;
|
|
187
|
+
while (stack.length > 0 && budget > 0 && visited < 10000) {
|
|
182
188
|
const node = stack.pop();
|
|
183
|
-
|
|
189
|
+
visited += 1;
|
|
190
|
+
if (!node || typeof node !== 'object' || seen.has(node))
|
|
184
191
|
continue;
|
|
185
|
-
if (seen.has(node))
|
|
186
|
-
continue; // guard against cyclic payloads
|
|
187
192
|
seen.add(node);
|
|
193
|
+
if (Array.isArray(node)) {
|
|
194
|
+
const remaining = Math.max(0, 10000 - stack.length);
|
|
195
|
+
for (let i = Math.min(node.length, remaining) - 1; i >= 0; i--)
|
|
196
|
+
stack.push(node[i]);
|
|
197
|
+
if (node.length > remaining)
|
|
198
|
+
truncated = true;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
188
201
|
const obj = node;
|
|
189
202
|
const text = obj['text'];
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
203
|
+
const leaf = typeof text === 'string' ? text
|
|
204
|
+
: obj['type'] === 'link' && typeof obj['url'] === 'string' ? obj['url']
|
|
205
|
+
: obj['type'] === 'user' && typeof obj['user_id'] === 'string' ? `<@${obj['user_id']}>`
|
|
206
|
+
: obj['type'] === 'channel' && typeof obj['channel_id'] === 'string' ? `<#${obj['channel_id']}>`
|
|
207
|
+
: obj['type'] === 'emoji' && typeof obj['name'] === 'string' ? `:${obj['name']}:` : '';
|
|
208
|
+
if (leaf) {
|
|
209
|
+
if (leaf.length > budget)
|
|
210
|
+
truncated = true;
|
|
211
|
+
out.push(leaf.slice(0, budget));
|
|
212
|
+
budget -= Math.min(leaf.length, budget) + 1;
|
|
193
213
|
}
|
|
194
|
-
else if (text)
|
|
214
|
+
else if (text && typeof text === 'object')
|
|
195
215
|
stack.push(text);
|
|
196
|
-
|
|
197
|
-
for (const key of ['elements', 'fields', 'blocks']) {
|
|
216
|
+
for (const key of ['rows', 'elements', 'fields', 'blocks']) {
|
|
198
217
|
const value = obj[key];
|
|
199
|
-
// Push in reverse so popping preserves document order.
|
|
200
218
|
if (Array.isArray(value)) {
|
|
201
|
-
|
|
219
|
+
const remaining = Math.max(0, 10000 - stack.length);
|
|
220
|
+
for (let i = Math.min(value.length, remaining) - 1; i >= 0; i--)
|
|
202
221
|
stack.push(value[i]);
|
|
222
|
+
if (value.length > remaining)
|
|
223
|
+
truncated = true;
|
|
203
224
|
}
|
|
204
225
|
}
|
|
205
226
|
}
|
|
206
|
-
return out.join('\n').slice(0, maxChars).trim();
|
|
227
|
+
return { text: out.join('\n').slice(0, maxChars).trim(), truncated: truncated || stack.length > 0 };
|
|
228
|
+
}
|
|
229
|
+
export function extractTextFromBlocks(blocks, maxChars = 6000) {
|
|
230
|
+
return extractTextFromBlocksDetailed(blocks, maxChars).text;
|
|
207
231
|
}
|
|
208
232
|
/** The prompt text an agent should receive for this event. */
|
|
209
233
|
export function resolveEventText(event, selfUserId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/slack/events.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,2EAA2E;AAC3E,0DAA0D;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/slack/events.ts"],"names":[],"mappings":"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"}
|
package/dist/src/slack/format.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// '**x**' contains '*x*' as a substring.
|
|
6
6
|
import { chunkFenceAware } from '../messaging/chunk.js';
|
|
7
7
|
import { redactOutboundText } from '../messaging/redact.js';
|
|
8
|
+
import { marked } from 'marked';
|
|
8
9
|
const CODE_FENCE = /```[\s\S]*?```/g;
|
|
9
10
|
const INLINE_CODE = /`[^`\n]+`/g;
|
|
10
11
|
// Sentinel for stashed code spans. It must not occur in the input, so any
|
|
@@ -58,4 +59,184 @@ export const SLACK_MESSAGE_LIMIT = 3900;
|
|
|
58
59
|
export function chunkSlackMessage(text, limit = SLACK_MESSAGE_LIMIT) {
|
|
59
60
|
return chunkFenceAware(redactOutboundText(text), limit);
|
|
60
61
|
}
|
|
62
|
+
const TABLE_ROWS_LIMIT = 100; // Includes the repeated header.
|
|
63
|
+
const TABLE_COLUMNS_LIMIT = 20;
|
|
64
|
+
// Below both Slack's 10,000 table-cell and 12,000 markdown character budgets.
|
|
65
|
+
const TABLE_MARKDOWN_LIMIT = 9000;
|
|
66
|
+
function tablePayloads(table) {
|
|
67
|
+
if (table.header.length > TABLE_COLUMNS_LIMIT) {
|
|
68
|
+
throw new RangeError('slack_table_too_wide: maximum 20 columns; split the table without dropping columns');
|
|
69
|
+
}
|
|
70
|
+
// Preserve original GFM, including escaped pipes, links and inline styling.
|
|
71
|
+
// Rebuilding from cell.text would remove pipe escapes and alter cell boundaries.
|
|
72
|
+
const [header, separator, ...rows] = table.raw.trimEnd().split('\n');
|
|
73
|
+
const prefix = `${header}\n${separator}`;
|
|
74
|
+
if (prefix.length > TABLE_MARKDOWN_LIMIT) {
|
|
75
|
+
throw new RangeError('slack_table_header_too_long');
|
|
76
|
+
}
|
|
77
|
+
const payloads = [];
|
|
78
|
+
let markdown = prefix;
|
|
79
|
+
let rowCount = 1;
|
|
80
|
+
const flush = () => {
|
|
81
|
+
payloads.push({ text: markdown, blocks: [{ type: 'markdown', text: markdown }] });
|
|
82
|
+
};
|
|
83
|
+
for (const row of rows) {
|
|
84
|
+
if (prefix.length + row.length + 1 > TABLE_MARKDOWN_LIMIT) {
|
|
85
|
+
throw new RangeError('slack_table_row_too_long: shorten the row or attach the full data');
|
|
86
|
+
}
|
|
87
|
+
if (rowCount === TABLE_ROWS_LIMIT || markdown.length + row.length + 1 > TABLE_MARKDOWN_LIMIT) {
|
|
88
|
+
flush();
|
|
89
|
+
markdown = prefix;
|
|
90
|
+
rowCount = 1;
|
|
91
|
+
}
|
|
92
|
+
markdown += `\n${row}`;
|
|
93
|
+
rowCount++;
|
|
94
|
+
}
|
|
95
|
+
flush();
|
|
96
|
+
return payloads;
|
|
97
|
+
}
|
|
98
|
+
function remoteImage(href) {
|
|
99
|
+
try {
|
|
100
|
+
const url = new URL(href);
|
|
101
|
+
return url.protocol === 'https:' && !url.username && !url.password;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** Local image bytes are sent by the existing file relay. Keep their labels in
|
|
108
|
+
* the body, without exposing filesystem paths or editing literal code samples. */
|
|
109
|
+
function localImageLabels(token) {
|
|
110
|
+
if (token.type === 'image' && !remoteImage(token.href))
|
|
111
|
+
return token.text || '이미지';
|
|
112
|
+
if (token.type === 'code' || token.type === 'codespan')
|
|
113
|
+
return token.raw;
|
|
114
|
+
const children = token.type === 'list' ? token.items : 'tokens' in token ? token.tokens : undefined;
|
|
115
|
+
if (!Array.isArray(children))
|
|
116
|
+
return token.raw;
|
|
117
|
+
let result = '';
|
|
118
|
+
let cursor = 0;
|
|
119
|
+
for (const child of children) {
|
|
120
|
+
const start = token.raw.indexOf(child.raw, cursor);
|
|
121
|
+
if (start < 0)
|
|
122
|
+
continue;
|
|
123
|
+
result += token.raw.slice(cursor, start) + localImageLabels(child);
|
|
124
|
+
cursor = start + child.raw.length;
|
|
125
|
+
}
|
|
126
|
+
return result + token.raw.slice(cursor);
|
|
127
|
+
}
|
|
128
|
+
/** Keep Markdown semantics for all rich replies. Plain one-line replies retain
|
|
129
|
+
* the lightweight text path. Packing is based on whole Markdown constructs,
|
|
130
|
+
* with at most one table and bounded server-side expansion per message. */
|
|
131
|
+
export function buildSlackTextPayloads(text) {
|
|
132
|
+
// A credential-bearing/private image URL cannot become a usable preview
|
|
133
|
+
// after masking. Refuse before posting rather than silently turn a requested
|
|
134
|
+
// image into broken Markdown and report a successful rich reply.
|
|
135
|
+
marked.walkTokens(marked.lexer(text, { gfm: true }), token => {
|
|
136
|
+
if (token.type === 'image') {
|
|
137
|
+
const href = token.href;
|
|
138
|
+
if (remoteImage(href) && redactOutboundText(href) !== href) {
|
|
139
|
+
throw new RangeError('slack_image_url_redacted: use a safe public image URL or a local file attachment');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
const redacted = redactOutboundText(text);
|
|
144
|
+
const safeText = marked.lexer(redacted, { gfm: true }).map(localImageLabels).join('');
|
|
145
|
+
const tokens = marked.lexer(safeText, { gfm: true });
|
|
146
|
+
let rich = false;
|
|
147
|
+
marked.walkTokens(tokens, token => {
|
|
148
|
+
if (['heading', 'list', 'blockquote', 'code', 'hr', 'table', 'strong', 'em', 'del', 'codespan', 'link', 'image'].includes(token.type))
|
|
149
|
+
rich = true;
|
|
150
|
+
});
|
|
151
|
+
if (!rich)
|
|
152
|
+
return chunkSlackMessage(toMrkdwn(safeText)).map(chunk => ({ text: chunk }));
|
|
153
|
+
const atoms = [];
|
|
154
|
+
for (const token of tokens) {
|
|
155
|
+
if (token.type === 'space')
|
|
156
|
+
continue;
|
|
157
|
+
if (token.type === 'table') {
|
|
158
|
+
atoms.push(...tablePayloads(token).map(p => ({ markdown: p.text, table: true })));
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (token.type === 'heading' && token.tokens.some(t => !['text', 'escape'].includes(t.type))) {
|
|
162
|
+
// Slack headers are plain_text: links/code inside a heading would
|
|
163
|
+
// otherwise lose their semantics. Use a bold rich-text title.
|
|
164
|
+
const title = token.text;
|
|
165
|
+
const marker = !title.includes('**') ? '**' : !title.includes('__') ? '__' : '';
|
|
166
|
+
atoms.push({ markdown: `${marker}${title}${marker}` });
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
// Only standalone remote image Markdown becomes an image block. Local
|
|
170
|
+
// images remain owned by the existing guarded file relay, never a URL.
|
|
171
|
+
const inline = token.type === 'paragraph' ? token.tokens : [];
|
|
172
|
+
if (inline.length === 1 && inline[0]?.type === 'image') {
|
|
173
|
+
const image = inline[0];
|
|
174
|
+
if (remoteImage(image.href))
|
|
175
|
+
atoms.push({ image: { type: 'image', image_url: image.href, alt_text: image.text || '이미지' } });
|
|
176
|
+
else if (image.text)
|
|
177
|
+
atoms.push({ markdown: image.text });
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (token.raw.length <= TABLE_MARKDOWN_LIMIT) {
|
|
181
|
+
atoms.push({ markdown: token.raw.trimEnd() });
|
|
182
|
+
}
|
|
183
|
+
else if (token.type === 'list') {
|
|
184
|
+
for (const item of token.items) {
|
|
185
|
+
if (item.raw.length > TABLE_MARKDOWN_LIMIT)
|
|
186
|
+
throw new RangeError('slack_list_item_too_long: split the item without dropping content');
|
|
187
|
+
atoms.push({ markdown: item.raw.trimEnd() });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else if (token.type === 'code' || token.type === 'paragraph' || token.type === 'text') {
|
|
191
|
+
// Never cut a rich inline span/link in half. Very long plain prose
|
|
192
|
+
// and fenced code use the existing code-point/fence-aware splitter.
|
|
193
|
+
const nested = 'tokens' in token ? token.tokens : undefined;
|
|
194
|
+
if (Array.isArray(nested) && nested.some(t => t.type !== 'text' && t.type !== 'br')) {
|
|
195
|
+
throw new RangeError('slack_rich_span_too_long: split the paragraph at a formatting boundary');
|
|
196
|
+
}
|
|
197
|
+
atoms.push(...chunkFenceAware(token.raw, TABLE_MARKDOWN_LIMIT).map(markdown => ({ markdown })));
|
|
198
|
+
}
|
|
199
|
+
else
|
|
200
|
+
throw new RangeError('slack_rich_block_too_long: split the block without dropping content');
|
|
201
|
+
}
|
|
202
|
+
const payloads = [];
|
|
203
|
+
let current = [];
|
|
204
|
+
let chars = 0;
|
|
205
|
+
let hasTable = false;
|
|
206
|
+
const flush = () => {
|
|
207
|
+
if (!current.length)
|
|
208
|
+
return;
|
|
209
|
+
const blocks = [];
|
|
210
|
+
let markdown = [];
|
|
211
|
+
const flushMarkdown = () => {
|
|
212
|
+
if (markdown.length)
|
|
213
|
+
blocks.push({ type: 'markdown', text: markdown.join('\n\n') });
|
|
214
|
+
markdown = [];
|
|
215
|
+
};
|
|
216
|
+
for (const atom of current) {
|
|
217
|
+
if (atom.image) {
|
|
218
|
+
flushMarkdown();
|
|
219
|
+
blocks.push(atom.image);
|
|
220
|
+
}
|
|
221
|
+
else if (atom.markdown)
|
|
222
|
+
markdown.push(atom.markdown);
|
|
223
|
+
}
|
|
224
|
+
flushMarkdown();
|
|
225
|
+
const fallback = current.map(a => a.markdown ?? a.image?.alt_text ?? '').join('\n\n');
|
|
226
|
+
payloads.push({ text: fallback, blocks });
|
|
227
|
+
current = [];
|
|
228
|
+
chars = 0;
|
|
229
|
+
hasTable = false;
|
|
230
|
+
};
|
|
231
|
+
for (const atom of atoms) {
|
|
232
|
+
const size = atom.markdown?.length ?? atom.image?.alt_text.length ?? 0;
|
|
233
|
+
if (current.length >= 30 || chars + size + 2 > TABLE_MARKDOWN_LIMIT || (hasTable && atom.table))
|
|
234
|
+
flush();
|
|
235
|
+
current.push(atom);
|
|
236
|
+
chars += size + 2;
|
|
237
|
+
hasTable ||= atom.table === true;
|
|
238
|
+
}
|
|
239
|
+
flush();
|
|
240
|
+
return payloads;
|
|
241
|
+
}
|
|
61
242
|
//# sourceMappingURL=format.js.map
|