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.
Files changed (223) hide show
  1. package/README.md +13 -2
  2. package/dist/bin/commands/slack.js +73 -7
  3. package/dist/bin/commands/slack.js.map +1 -1
  4. package/dist/server.js +46 -1
  5. package/dist/server.js.map +1 -1
  6. package/dist/src/agent/calendar-context.js +23 -0
  7. package/dist/src/agent/calendar-context.js.map +1 -0
  8. package/dist/src/agent/claude-runtime-run.js +10 -1
  9. package/dist/src/agent/claude-runtime-run.js.map +1 -1
  10. package/dist/src/agent/cursor-acp-models.js +139 -0
  11. package/dist/src/agent/cursor-acp-models.js.map +1 -0
  12. package/dist/src/agent/events/cursor.js +28 -4
  13. package/dist/src/agent/events/cursor.js.map +1 -1
  14. package/dist/src/agent/lifecycle-handler.js +8 -2
  15. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  16. package/dist/src/agent/native-runtime-run.js +22 -1
  17. package/dist/src/agent/native-runtime-run.js.map +1 -1
  18. package/dist/src/agent/runtime/acp/config.js +76 -11
  19. package/dist/src/agent/runtime/acp/config.js.map +1 -1
  20. package/dist/src/agent/runtime/acp/cursor-session.js +6 -1
  21. package/dist/src/agent/runtime/acp/cursor-session.js.map +1 -1
  22. package/dist/src/agent/runtime/liveness.js +24 -0
  23. package/dist/src/agent/runtime/liveness.js.map +1 -0
  24. package/dist/src/agent/runtime/start-failure.js +61 -0
  25. package/dist/src/agent/runtime/start-failure.js.map +1 -0
  26. package/dist/src/agent/spawn/queue.js +11 -6
  27. package/dist/src/agent/spawn/queue.js.map +1 -1
  28. package/dist/src/agent/spawn.js +59 -17
  29. package/dist/src/agent/spawn.js.map +1 -1
  30. package/dist/src/cli/api-auth.js +6 -0
  31. package/dist/src/cli/api-auth.js.map +1 -1
  32. package/dist/src/manager/design/watcher.js +10 -2
  33. package/dist/src/manager/design/watcher.js.map +1 -1
  34. package/dist/src/memory/heartbeat.js +6 -0
  35. package/dist/src/memory/heartbeat.js.map +1 -1
  36. package/dist/src/messaging/channel-validate.js +5 -3
  37. package/dist/src/messaging/channel-validate.js.map +1 -1
  38. package/dist/src/messaging/redact.js +30 -8
  39. package/dist/src/messaging/redact.js.map +1 -1
  40. package/dist/src/messaging/send.js +7 -0
  41. package/dist/src/messaging/send.js.map +1 -1
  42. package/dist/src/orchestrator/collect.js +5 -3
  43. package/dist/src/orchestrator/collect.js.map +1 -1
  44. package/dist/src/orchestrator/gateway.js +10 -3
  45. package/dist/src/orchestrator/gateway.js.map +1 -1
  46. package/dist/src/orchestrator/pipeline.js +21 -9
  47. package/dist/src/orchestrator/pipeline.js.map +1 -1
  48. package/dist/src/orchestrator/request-registry.js +2 -0
  49. package/dist/src/orchestrator/request-registry.js.map +1 -1
  50. package/dist/src/prompt/builder.js +74 -6
  51. package/dist/src/prompt/builder.js.map +1 -1
  52. package/dist/src/prompt/templates/a1-system.md +22 -5
  53. package/dist/src/routes/messaging.js +105 -27
  54. package/dist/src/routes/messaging.js.map +1 -1
  55. package/dist/src/routes/settings.js +20 -8
  56. package/dist/src/routes/settings.js.map +1 -1
  57. package/dist/src/routes/slack-tools.js +176 -0
  58. package/dist/src/routes/slack-tools.js.map +1 -0
  59. package/dist/src/slack/action-rate.js +43 -0
  60. package/dist/src/slack/action-rate.js.map +1 -0
  61. package/dist/src/slack/action-runtime.js +243 -0
  62. package/dist/src/slack/action-runtime.js.map +1 -0
  63. package/dist/src/slack/action-store.js +84 -0
  64. package/dist/src/slack/action-store.js.map +1 -0
  65. package/dist/src/slack/action-types.js +6 -0
  66. package/dist/src/slack/action-types.js.map +1 -0
  67. package/dist/src/slack/actions-canvas.js +108 -0
  68. package/dist/src/slack/actions-canvas.js.map +1 -0
  69. package/dist/src/slack/actions-channel.js +88 -0
  70. package/dist/src/slack/actions-channel.js.map +1 -0
  71. package/dist/src/slack/actions-interactions.js +204 -0
  72. package/dist/src/slack/actions-interactions.js.map +1 -0
  73. package/dist/src/slack/actions-lists.js +308 -0
  74. package/dist/src/slack/actions-lists.js.map +1 -0
  75. package/dist/src/slack/actions-message.js +117 -0
  76. package/dist/src/slack/actions-message.js.map +1 -0
  77. package/dist/src/slack/actions-resources.js +62 -0
  78. package/dist/src/slack/actions-resources.js.map +1 -0
  79. package/dist/src/slack/actions-rts.js +88 -0
  80. package/dist/src/slack/actions-rts.js.map +1 -0
  81. package/dist/src/slack/actions-schedule.js +214 -0
  82. package/dist/src/slack/actions-schedule.js.map +1 -0
  83. package/dist/src/slack/actions.js +17 -0
  84. package/dist/src/slack/actions.js.map +1 -0
  85. package/dist/src/slack/api.js +56 -9
  86. package/dist/src/slack/api.js.map +1 -1
  87. package/dist/src/slack/blocks.js +162 -0
  88. package/dist/src/slack/blocks.js.map +1 -0
  89. package/dist/src/slack/bot.js +562 -378
  90. package/dist/src/slack/bot.js.map +1 -1
  91. package/dist/src/slack/commands.js +24 -5
  92. package/dist/src/slack/commands.js.map +1 -1
  93. package/dist/src/slack/context.js +15 -4
  94. package/dist/src/slack/context.js.map +1 -1
  95. package/dist/src/slack/conversation.js +135 -33
  96. package/dist/src/slack/conversation.js.map +1 -1
  97. package/dist/src/slack/events.js +41 -17
  98. package/dist/src/slack/events.js.map +1 -1
  99. package/dist/src/slack/format.js +181 -0
  100. package/dist/src/slack/format.js.map +1 -1
  101. package/dist/src/slack/history.js +133 -8
  102. package/dist/src/slack/history.js.map +1 -1
  103. package/dist/src/slack/ingress.js +26 -9
  104. package/dist/src/slack/ingress.js.map +1 -1
  105. package/dist/src/slack/interaction-store.js +56 -0
  106. package/dist/src/slack/interaction-store.js.map +1 -0
  107. package/dist/src/slack/manifest.js +3 -0
  108. package/dist/src/slack/manifest.js.map +1 -1
  109. package/dist/src/slack/message-content.js +132 -0
  110. package/dist/src/slack/message-content.js.map +1 -0
  111. package/dist/src/slack/message.js +58 -0
  112. package/dist/src/slack/message.js.map +1 -0
  113. package/dist/src/slack/notice-transport.js +49 -19
  114. package/dist/src/slack/notice-transport.js.map +1 -1
  115. package/dist/src/slack/operator-auth.js +62 -0
  116. package/dist/src/slack/operator-auth.js.map +1 -0
  117. package/dist/src/slack/progress-activity.js +210 -0
  118. package/dist/src/slack/progress-activity.js.map +1 -0
  119. package/dist/src/slack/progress-detail.js +473 -0
  120. package/dist/src/slack/progress-detail.js.map +1 -0
  121. package/dist/src/slack/progress-files.js +70 -0
  122. package/dist/src/slack/progress-files.js.map +1 -0
  123. package/dist/src/slack/progress-lifecycle.js +223 -0
  124. package/dist/src/slack/progress-lifecycle.js.map +1 -0
  125. package/dist/src/slack/progress-restore.js +81 -0
  126. package/dist/src/slack/progress-restore.js.map +1 -0
  127. package/dist/src/slack/progress.js +325 -143
  128. package/dist/src/slack/progress.js.map +1 -1
  129. package/dist/src/slack/quote.js +227 -0
  130. package/dist/src/slack/quote.js.map +1 -0
  131. package/dist/src/slack/render-features.js +105 -0
  132. package/dist/src/slack/render-features.js.map +1 -0
  133. package/dist/src/slack/reply-delivery.js +110 -0
  134. package/dist/src/slack/reply-delivery.js.map +1 -0
  135. package/dist/src/slack/rts-output-store.js +143 -0
  136. package/dist/src/slack/rts-output-store.js.map +1 -0
  137. package/dist/src/slack/scope-status.js +17 -3
  138. package/dist/src/slack/scope-status.js.map +1 -1
  139. package/dist/src/slack/search-quote.js +70 -0
  140. package/dist/src/slack/search-quote.js.map +1 -0
  141. package/dist/src/slack/search.js +54 -0
  142. package/dist/src/slack/search.js.map +1 -0
  143. package/dist/src/slack/send-handler.js +11 -7
  144. package/dist/src/slack/send-handler.js.map +1 -1
  145. package/dist/src/slack/send-only-client.js +116 -79
  146. package/dist/src/slack/send-only-client.js.map +1 -1
  147. package/dist/src/slack/table-content.js +253 -0
  148. package/dist/src/slack/table-content.js.map +1 -0
  149. package/dist/src/slack/table-verification.js +64 -0
  150. package/dist/src/slack/table-verification.js.map +1 -0
  151. package/dist/src/slack/task-input.js +55 -0
  152. package/dist/src/slack/task-input.js.map +1 -0
  153. package/dist/src/slack/tool-access.js +127 -0
  154. package/dist/src/slack/tool-access.js.map +1 -0
  155. package/dist/src/slack/tool-capabilities.js +47 -0
  156. package/dist/src/slack/tool-capabilities.js.map +1 -0
  157. package/dist/src/slack/tool-context.js +91 -0
  158. package/dist/src/slack/tool-context.js.map +1 -0
  159. package/dist/src/slack/verified-workspace.js +17 -6
  160. package/dist/src/slack/verified-workspace.js.map +1 -1
  161. package/dist/src/trace/redact.js +2 -1
  162. package/dist/src/trace/redact.js.map +1 -1
  163. package/package.json +1 -1
  164. package/public/dist/.vite/manifest.json +102 -102
  165. package/public/dist/assets/{Agent-CQ4EBgY8.js → Agent-CNad_A6t.js} +1 -1
  166. package/public/dist/assets/{ChannelEnablementControl-JsYvNMlM.js → ChannelEnablementControl-DwUDKjX9.js} +4 -4
  167. package/public/dist/assets/{ChannelSetupEntry-BpyRWEUE.js → ChannelSetupEntry-DH0AuNNX.js} +1 -1
  168. package/public/dist/assets/{ChannelsDiscord-DNfvz1jn.js → ChannelsDiscord-7NmoTjR7.js} +1 -1
  169. package/public/dist/assets/{ChannelsSlack-DzpxIdgW.js → ChannelsSlack-Ba0ax6iT.js} +1 -1
  170. package/public/dist/assets/{ChannelsTelegram-CUhFc5s6.js → ChannelsTelegram-DKA9atf2.js} +1 -1
  171. package/public/dist/assets/{app-Q0prKOFx.js → app-9OQNfmqw.js} +4 -4
  172. package/public/dist/assets/{bgtask-badge-DAcWaUfS.js → bgtask-badge-BvxHqMGi.js} +1 -1
  173. package/public/dist/assets/bgtask-badge-DeSZJGNN.js +1 -0
  174. package/public/dist/assets/{employees-CWS3Juca.js → employees-CkUqN4oh.js} +1 -1
  175. package/public/dist/assets/{iframe-renderer-DCDKBMb7.js → iframe-renderer-C2gchtOj.js} +2 -2
  176. package/public/dist/assets/iframe-renderer-DfvACXIn.js +1 -0
  177. package/public/dist/assets/{manager-v6GYfoPB.js → manager-rb5X-4DJ.js} +1 -1
  178. package/public/dist/assets/{memory-DhNdKZLO.js → memory-BiWzpoBq.js} +1 -1
  179. package/public/dist/assets/memory-Ckp1Eq5a.js +1 -0
  180. package/public/dist/assets/message-history-Bv0l_t7O.js +1 -0
  181. package/public/dist/assets/{message-history-DbRTl1P0.js → message-history-CuFefS02.js} +1 -1
  182. package/public/dist/assets/{render-DP8SJtdZ.js → render-DUGqq9Mu.js} +1 -1
  183. package/public/dist/assets/{settings-85n9NjvX.js → settings-BqUHavbH.js} +1 -1
  184. package/public/dist/assets/settings-C81Kf9uX.js +1 -0
  185. package/public/dist/assets/{settings-C9_D-pn0.js → settings-DQ1fLygB.js} +31 -30
  186. package/public/dist/assets/{settings-core-BcVD2FgV.js → settings-core-CzdXfoOK.js} +1 -1
  187. package/public/dist/assets/settings-core-DO_5M7Lv.js +1 -0
  188. package/public/dist/assets/{settings-embedding-BSpq785l.js → settings-embedding-BAKFrVLV.js} +1 -1
  189. package/public/dist/assets/{settings-types-B09BmpYe.js → settings-types-D3cd6SWy.js} +1 -1
  190. package/public/dist/assets/{sidebar-BVhLb5Ft.js → sidebar-CvGbp9x5.js} +3 -3
  191. package/public/dist/assets/skills-DFpPmMUR.js +1 -0
  192. package/public/dist/assets/{skills-X7qxmHka.js → skills-abLMqY5_.js} +1 -1
  193. package/public/dist/assets/slash-commands-BU58xYih.js +1 -0
  194. package/public/dist/assets/{slash-commands-BnDH4IU_.js → slash-commands-D8o9pqOS.js} +1 -1
  195. package/public/dist/assets/{trace-drawer-DasaS1z4.js → trace-drawer-C6RvkUAd.js} +1 -1
  196. package/public/dist/assets/{ui-BtiBTXng.js → ui-Bxapl_Eu.js} +1 -1
  197. package/public/dist/assets/ui-CUB4iwz3.js +1 -0
  198. package/public/dist/index.html +1 -1
  199. package/public/dist/manager/index.html +1 -1
  200. package/public/dist/settings/index.html +1 -1
  201. package/public/js/features/settings-cli-status.ts +11 -1
  202. package/public/js/features/settings-types.ts +21 -0
  203. package/public/locales/en.json +34 -1
  204. package/public/locales/ja.json +34 -1
  205. package/public/locales/ko.json +34 -1
  206. package/public/locales/zh.json +34 -1
  207. package/scripts/check-native-load.cjs +17 -4
  208. package/scripts/release-gates.mjs +84 -3
  209. package/scripts/service-artifact.mjs +157 -0
  210. package/scripts/service-shell/zsh/.zlogin +23 -0
  211. package/scripts/service-shell/zsh/.zlogout +23 -0
  212. package/scripts/service-shell/zsh/.zprofile +23 -0
  213. package/scripts/service-shell/zsh/.zshenv +23 -0
  214. package/scripts/service-shell/zsh/.zshrc +23 -0
  215. package/public/dist/assets/bgtask-badge-DHA2OQm8.js +0 -1
  216. package/public/dist/assets/iframe-renderer-RpvBly2x.js +0 -1
  217. package/public/dist/assets/memory-4YH8sz0L.js +0 -1
  218. package/public/dist/assets/message-history-lVcLpAw8.js +0 -1
  219. package/public/dist/assets/settings--EGy3_B9.js +0 -1
  220. package/public/dist/assets/settings-core-8wBl1mg-.js +0 -1
  221. package/public/dist/assets/skills-6GFkHTlQ.js +0 -1
  222. package/public/dist/assets/slash-commands-qu8fPAZ3.js +0 -1
  223. 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, replyCount: 0, participants: [], resolved: false };
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
- let fetchedReplyCount = 0;
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
- ...(opts.signal ? { signal: opts.signal } : {}),
256
+ signal,
206
257
  });
207
- if (!result.ok)
208
- return { ok: false, error: result.error };
209
- for (const message of result.messages) {
210
- if (message.ts === threadTs) {
211
- parent ??= message;
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
- fetchedReplyCount += 1;
215
- newestReplies.push(message);
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
- if (newestReplies.length > THREAD_FETCH_LIMIT) {
218
- newestReplies.splice(0, newestReplies.length - THREAD_FETCH_LIMIT);
287
+ cursor = result.nextCursor;
288
+ if (cursor && cursor.length > 4096) {
289
+ cursor = undefined;
290
+ omitted = true;
291
+ progress = snapshot();
292
+ break;
219
293
  }
220
- const nextCursor = result.nextCursor;
221
- if (!nextCursor || nextCursor === cursor || opts.signal?.aborted)
294
+ progress = snapshot();
295
+ if (!result.hasMore) {
296
+ complete = true;
222
297
  break;
223
- cursor = nextCursor;
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
- threadTs,
253
- replyCount,
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
- // Retain only what the prefetch renders, with bounded text: a
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 value;
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":"AAAA,wDAAwD;AACxD,+EAA+E;AAC/E,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,qEAAqE;AACrE,8EAA8E;AAC9E,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AAGF,OAAO,EAAE,QAAQ,EAAmB,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,cAAc,CAAC;AAC3E,OAAO,EACH,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAoB,MAAM,uBAAuB,CAAC;AAkD1E,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC;AAChC,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,iFAAiF;AACjF,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,iEAAiE;AACjE,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9B,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC;;;GAGG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAC9B,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB;IACjE,eAAe,EAAE,eAAe,EAAE,wBAAwB;IAC1D,yBAAyB;CAC5B,CAAC,CAAC;AAIH;;;;;GAKG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAwD;IACjG,UAAU,EAAE;QACR,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE,SAAS,EAAE;QAClE,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE;KACzD;IACD,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,CAAC,KAAK,EAAE,GAAG,EAAe,EAAE,CAAC,CAC1C,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;QACtE,iEAAiE;QACjE,uBAAuB;QACvB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CACvE;CACJ,CAAC,CAAC;AAEH,2FAA2F;AAC3F,SAAS,aAAa,CAAC,MAAc;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,GAAG,GAAG,QAAQ,GAAG,qBAAqB;QAAE,OAAO,KAAK,CAAC;IACzD,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC7B,OAAO,aAAa,CAAC,uBAAuB,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,MAAc;IACpC,OAAO,2BAA2B,MAAM,EAAE,CAAC;AAC/C,CAAC;AAUD;;;;GAIG;AACH,SAAS,cAAc,CAAC,EAAU;IAC9B,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAoB,EAAE,EAAU;IAC1D,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACrD,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAU;IACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,GAAW;IAClC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;AACjF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,KAAa,EAAE,OAAe,EAAE,IAAsB;IAEtD,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;QAAE,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC;QAC1C,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,UAAU,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC;QACrD,QAAQ,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAC7C,IAAI,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,QAAQ,CACzB,KAAK,EAAE,oBAAoB,EAC3B,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,EACtC;gBACI,IAAI,EAAE,IAAI;gBACV,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD,CACJ,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrB,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC;YAC1E,CAAC;YACD,MAAM,IAAI,GAA0B;gBAChC,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO;gBACrB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;gBAClE,IAAI,EAAE,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC;gBACxC,QAAQ,EAAE,IAAI;aACjB,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACvC,gEAAgE;YAChE,+DAA+D;YAC/D,IAAI,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YACxE,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;gBAAE,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YAC5E,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC9C,CAAC;KACJ,CAAC,CAAC;IACH,OAAO,KAA8B,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACpC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,KAAa,EAAE,OAAe,EAAE,QAAgB,EAAE,IAAsB;IAExE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC;QAC1C,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,gBAAgB,CAAC,uBAAuB,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,UAAU,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,uBAAuB,CAAC;QACxD,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;QACxC,IAAI,EAAE,KAAK,IAAI,EAAE;YACb,IAAI,MAA0B,CAAC;YAC/B,IAAI,MAAuC,CAAC;YAC5C,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,MAAM,aAAa,GAA0B,EAAE,CAAC;YAChD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,sBAAsB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE;oBAC7D,KAAK,EAAE,kBAAkB;oBACzB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,kBAAkB,EAAE,IAAI;oBACxB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClD,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,EAAE;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;gBACnE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpC,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;wBAC1B,MAAM,KAAK,OAAO,CAAC;wBACnB,SAAS;oBACb,CAAC;oBACD,iBAAiB,IAAI,CAAC,CAAC;oBACvB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC;gBACD,IAAI,aAAa,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;oBAC5C,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,kBAAkB,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBACrC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;oBAAE,MAAM;gBACxE,MAAM,GAAG,UAAU,CAAC;YACxB,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAErE,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;YAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,yDAAyD;gBACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,MAAM,EAAE,GAAG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACvC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClC,gEAAgE;gBAChE,+CAA+C;gBAC/C,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI;oBAAE,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACb,IAAI,GAAG,CAAC,MAAM,IAAI,gBAAgB;oBAAE,MAAM;YAC9C,CAAC;YACD,kEAAkE;YAClE,kEAAkE;YAClE,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzD,gEAAgE;YAChE,+DAA+D;YAC/D,gBAAgB;YAChB,MAAM,UAAU,GAAG,OAAO,MAAM,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAClG,MAAM,IAAI,GAAoB;gBAC1B,QAAQ;gBACR,UAAU;gBACV,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACvB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAClC,OAAO;wBACH,EAAE;wBACF,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,EAAE;wBAC/B,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI;wBACjC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChC,CAAC;gBACN,CAAC,CAAC;gBACF,8DAA8D;gBAC9D,0DAA0D;gBAC1D,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC/B,GAAG,OAAO;oBACV,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC;oBAC1C,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C,CAAC,CAAC;gBACH,QAAQ,EAAE,IAAI;aACjB,CAAC;YACF,IAAI,MAAM,EAAE,IAAI;gBAAE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACtE,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC9C,CAAC;KACJ,CAAC,CAAC;IACH,OAAO,KAAwB,CAAC;AACpC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,GAAsB;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B;IACvC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC1B,WAAW,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,2BAA2B;IACvC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACxC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACxF,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,iCAAiC;IAC7C,WAAW,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/slack/conversation.ts"],"names":[],"mappings":"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"}
@@ -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
- if (!dm && event.type !== 'app_mention' && config.selfUserId
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 extractTextFromBlocks(blocks, maxChars = 6000) {
180
+ export function extractTextFromBlocksDetailed(blocks, maxChars = 6000) {
177
181
  const out = [];
178
182
  const seen = new Set();
179
- const stack = [...blocks];
180
- let budget = maxChars;
181
- while (stack.length > 0 && budget > 0) {
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
- if (!node || typeof node !== 'object')
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
- if (typeof text === 'string') {
191
- out.push(text);
192
- budget -= text.length;
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
- for (let i = value.length - 1; i >= 0; i--)
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":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/slack/events.ts"],"names":[],"mappings":"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"}
@@ -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