@memberjunction/messaging-adapters 6.1.0-edge.4 → 6.1.0-edge.6
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 +2 -1
- package/dist/base/BaseMessagingAdapter.d.ts +82 -1
- package/dist/base/BaseMessagingAdapter.d.ts.map +1 -1
- package/dist/base/BaseMessagingAdapter.js +222 -14
- package/dist/base/BaseMessagingAdapter.js.map +1 -1
- package/dist/base/message-formatter.d.ts +31 -1
- package/dist/base/message-formatter.d.ts.map +1 -1
- package/dist/base/message-formatter.js +66 -1
- package/dist/base/message-formatter.js.map +1 -1
- package/dist/base/types.d.ts +14 -0
- package/dist/base/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/slack/SlackAdapter.d.ts +60 -4
- package/dist/slack/SlackAdapter.d.ts.map +1 -1
- package/dist/slack/SlackAdapter.js +141 -8
- package/dist/slack/SlackAdapter.js.map +1 -1
- package/dist/slack/SlackMessagingExtension.d.ts.map +1 -1
- package/dist/slack/SlackMessagingExtension.js +35 -0
- package/dist/slack/SlackMessagingExtension.js.map +1 -1
- package/dist/slack/slack-block-builder.d.ts.map +1 -1
- package/dist/slack/slack-block-builder.js +129 -38
- package/dist/slack/slack-block-builder.js.map +1 -1
- package/dist/teams/TeamsAdapter.d.ts +7 -0
- package/dist/teams/TeamsAdapter.d.ts.map +1 -1
- package/dist/teams/TeamsAdapter.js +33 -0
- package/dist/teams/TeamsAdapter.js.map +1 -1
- package/dist/teams/teams-card-builder.d.ts +9 -1
- package/dist/teams/teams-card-builder.d.ts.map +1 -1
- package/dist/teams/teams-card-builder.js +41 -28
- package/dist/teams/teams-card-builder.js.map +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-formatter.d.ts","sourceRoot":"","sources":["../../src/base/message-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAiD7E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAiC7E"}
|
|
1
|
+
{"version":3,"file":"message-formatter.d.ts","sourceRoot":"","sources":["../../src/base/message-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAiD7E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAiC7E;AAiDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQnD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,mBAAmB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBvG"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module @memberjunction/messaging-adapters
|
|
3
|
-
* @description Shared
|
|
3
|
+
* @description Shared formatting utilities used by all platform-specific formatters.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Split Markdown text into typed sections for platform-specific formatting.
|
|
@@ -198,4 +198,69 @@ function forceChunkByLength(text, maxLength) {
|
|
|
198
198
|
}
|
|
199
199
|
return chunks;
|
|
200
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Can this URI be opened from a chat client at all?
|
|
203
|
+
*
|
|
204
|
+
* An ALLOW-list of `http:`/`https:`, deliberately, because the answer has to hold for a hostile
|
|
205
|
+
* URL as well as a broken one. Two separate problems:
|
|
206
|
+
*
|
|
207
|
+
* - `data:` (and `blob:`/`file:`) URIs are inert: Slack rejects the whole message and Adaptive
|
|
208
|
+
* Cards silently do nothing, so a button over one is indistinguishable from a broken bot. Agents
|
|
209
|
+
* do emit them — MJ's document actions inline a whole generated file as `data:<mime>;base64,...`
|
|
210
|
+
* whenever no file storage account is configured, which is the normal local-dev state.
|
|
211
|
+
* - `javascript:`, `vbscript:` and OS handler schemes such as `ms-msdt:` are *worse* than inert.
|
|
212
|
+
* Teams desktop hands an unknown scheme to the operating system's URI handler, so a deny-list
|
|
213
|
+
* naming only the inert schemes would turn an agent-authored URL into a local code-execution
|
|
214
|
+
* surface. An allow-list cannot be outflanked by a scheme nobody thought to enumerate.
|
|
215
|
+
*
|
|
216
|
+
* Localhost stays allowed: dev "View in MJ Explorer" links depend on it, and Teams opens it.
|
|
217
|
+
* Whether a platform will additionally refuse an openable URL — Slack rejects non-public http(s)
|
|
218
|
+
* — is a separate screen; see `isButtonSafeURL` in the Slack builder.
|
|
219
|
+
*/
|
|
220
|
+
export function isOpenableURI(url) {
|
|
221
|
+
if (typeof url !== 'string')
|
|
222
|
+
return false;
|
|
223
|
+
try {
|
|
224
|
+
const { protocol } = new URL(url.trim());
|
|
225
|
+
return protocol === 'http:' || protocol === 'https:';
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Build an MJ Explorer deep link for an `open:resource` command.
|
|
233
|
+
*
|
|
234
|
+
* Returns `null` when there is nothing safe to link to — no configured Explorer base URL, or a
|
|
235
|
+
* resource kind whose identifier is absent. `resourceId` is optional on the shared `UICommand`
|
|
236
|
+
* type (a Record can be addressed by `keys` instead), so every branch checks it rather than
|
|
237
|
+
* emitting a `/resource/dashboard/undefined` URL that 404s on click.
|
|
238
|
+
*/
|
|
239
|
+
export function buildExplorerDeepLink(cmd, explorerBaseURL) {
|
|
240
|
+
if (!explorerBaseURL)
|
|
241
|
+
return null;
|
|
242
|
+
const base = explorerBaseURL.replace(/\/+$/, '');
|
|
243
|
+
switch (cmd.resourceType) {
|
|
244
|
+
case 'Record':
|
|
245
|
+
if (cmd.entityName && cmd.resourceId) {
|
|
246
|
+
const entity = encodeURIComponent(cmd.entityName);
|
|
247
|
+
const id = encodeURIComponent(cmd.resourceId);
|
|
248
|
+
return `${base}/resource/record/${entity}/${id}`;
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
case 'Dashboard':
|
|
252
|
+
if (!cmd.resourceId)
|
|
253
|
+
break;
|
|
254
|
+
return `${base}/resource/dashboard/${encodeURIComponent(cmd.resourceId)}`;
|
|
255
|
+
case 'Report':
|
|
256
|
+
if (!cmd.resourceId)
|
|
257
|
+
break;
|
|
258
|
+
return `${base}/resource/report/${encodeURIComponent(cmd.resourceId)}`;
|
|
259
|
+
case 'View':
|
|
260
|
+
if (!cmd.resourceId)
|
|
261
|
+
break;
|
|
262
|
+
return `${base}/resource/view/${encodeURIComponent(cmd.resourceId)}`;
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
201
266
|
//# sourceMappingURL=message-formatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-formatter.js","sourceRoot":"","sources":["../../src/base/message-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"message-formatter.js","sourceRoot":"","sources":["../../src/base/message-formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/base/types.d.ts
CHANGED
|
@@ -78,6 +78,20 @@ export interface MessagingAdapterSettings {
|
|
|
78
78
|
* Without this, `open:resource` commands render as informational context blocks.
|
|
79
79
|
*/
|
|
80
80
|
ExplorerBaseURL?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Disable automatic agent-to-agent delegation for this extension instance.
|
|
83
|
+
*
|
|
84
|
+
* Delegation is detected three ways (see `detectDelegation`), the third of which SCANS THE
|
|
85
|
+
* REPLY TEXT for delegation phrases plus any known agent name. That makes an orchestrator
|
|
86
|
+
* agent's own self-description ("I can route you to ... Betty") trigger a real handoff, so
|
|
87
|
+
* the user gets a different agent's answer under this bot's identity — with no attribution.
|
|
88
|
+
*
|
|
89
|
+
* Set this on a bot that is pinned to one agent (the one-app-per-agent deployment, where each
|
|
90
|
+
* platform app has its own `DefaultAgentName`): the pinned agent's reply is always what posts.
|
|
91
|
+
*
|
|
92
|
+
* @default false
|
|
93
|
+
*/
|
|
94
|
+
DisableDelegation?: boolean;
|
|
81
95
|
/**
|
|
82
96
|
* Slash command to agent name mapping for Slack.
|
|
83
97
|
* Keys are command names (e.g., `/research`), values are MJ Agent names.
|
package/dist/base/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;;;GAIG;AACH,MAAM,WAAW,kBAAmB,SAAQ,OAAO;IAC/C,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,wBAAwB;IACrC;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAEnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC5B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IAEb,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IAEjB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IAEnB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAElB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAC;IAEzB,gEAAgE;IAChE,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,gCAAgC;IAChC,SAAS,EAAE,IAAI,CAAC;IAEhB,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC1B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErC,wDAAwD;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IAErB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,oDAAoD;IACpD,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAEjC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
* @see {@link TeamsMessagingExtension} for Teams integration
|
|
41
41
|
*/
|
|
42
42
|
export { BaseMessagingAdapter } from './base/BaseMessagingAdapter.js';
|
|
43
|
+
export type { UploadableFile } from './base/BaseMessagingAdapter.js';
|
|
43
44
|
export { MessagingAdapterSettings, IncomingMessage, FormattedResponse, AgentIdentity, ThreadHistoryResult, MarkdownSection, RequestWithRawBody, } from './base/types.js';
|
|
44
45
|
export { splitMarkdownIntoSections, convertToSlackMrkdwn, convertBoldToSlackFormat, convertLinksToSlackFormat, truncateText, splitTextIntoChunks, } from './base/message-formatter.js';
|
|
45
46
|
export { SlackMessagingExtension } from './slack/SlackMessagingExtension.js';
|
|
@@ -52,7 +53,7 @@ export type { BuildRichResponseOptions } from './slack/slack-block-builder.js';
|
|
|
52
53
|
export { TeamsMessagingExtension } from './teams/TeamsMessagingExtension.js';
|
|
53
54
|
export { TeamsAdapter } from './teams/TeamsAdapter.js';
|
|
54
55
|
export { markdownToAdaptiveCard } from './teams/teams-formatter.js';
|
|
55
|
-
export { buildRichAdaptiveCard, buildAgentHeader as buildTeamsAgentHeader, buildTextBody as buildTeamsTextBody, buildArtifactCard as buildTeamsArtifactCard, buildActionButtons as buildTeamsActionButtons, buildExplorerLink as buildTeamsExplorerLink, buildMetadataFooter as buildTeamsMetadataFooter, buildErrorCard as buildTeamsErrorCard, buildResponseFormElements as buildTeamsResponseFormElements, } from './teams/teams-card-builder.js';
|
|
56
|
+
export { buildRichAdaptiveCard, buildAgentHeader as buildTeamsAgentHeader, buildTextBody as buildTeamsTextBody, buildArtifactCard as buildTeamsArtifactCard, buildActionButtons as buildTeamsActionButtons, buildExplorerLink as buildTeamsExplorerLink, buildMetadataFooter as buildTeamsMetadataFooter, buildErrorCard as buildTeamsErrorCard, buildResponseFormElements as buildTeamsResponseFormElements, buildUnopenableResourceNotes as buildTeamsUnopenableResourceNotes, } from './teams/teams-card-builder.js';
|
|
56
57
|
export type { BuildRichCardOptions } from './teams/teams-card-builder.js';
|
|
57
58
|
/**
|
|
58
59
|
* Tree-shaking prevention function.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACH,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACH,qBAAqB,EACrB,gBAAgB,IAAI,qBAAqB,EACzC,aAAa,IAAI,kBAAkB,EACnC,iBAAiB,IAAI,sBAAsB,EAC3C,kBAAkB,IAAI,uBAAuB,EAC7C,iBAAiB,IAAI,sBAAsB,EAC3C,mBAAmB,IAAI,wBAAwB,EAC/C,cAAc,IAAI,mBAAmB,EACrC,yBAAyB,IAAI,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACH,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACH,qBAAqB,EACrB,gBAAgB,IAAI,qBAAqB,EACzC,aAAa,IAAI,kBAAkB,EACnC,iBAAiB,IAAI,sBAAsB,EAC3C,kBAAkB,IAAI,uBAAuB,EAC7C,iBAAiB,IAAI,sBAAsB,EAC3C,mBAAmB,IAAI,wBAAwB,EAC/C,cAAc,IAAI,mBAAmB,EACrC,yBAAyB,IAAI,8BAA8B,EAC3D,4BAA4B,IAAI,iCAAiC,GACpE,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
|
package/dist/index.js
CHANGED
|
@@ -53,7 +53,7 @@ export { buildRichResponse, buildAgentContextBlock, buildTextBlocks, buildArtifa
|
|
|
53
53
|
export { TeamsMessagingExtension } from './teams/TeamsMessagingExtension.js';
|
|
54
54
|
export { TeamsAdapter } from './teams/TeamsAdapter.js';
|
|
55
55
|
export { markdownToAdaptiveCard } from './teams/teams-formatter.js';
|
|
56
|
-
export { buildRichAdaptiveCard, buildAgentHeader as buildTeamsAgentHeader, buildTextBody as buildTeamsTextBody, buildArtifactCard as buildTeamsArtifactCard, buildActionButtons as buildTeamsActionButtons, buildExplorerLink as buildTeamsExplorerLink, buildMetadataFooter as buildTeamsMetadataFooter, buildErrorCard as buildTeamsErrorCard, buildResponseFormElements as buildTeamsResponseFormElements, } from './teams/teams-card-builder.js';
|
|
56
|
+
export { buildRichAdaptiveCard, buildAgentHeader as buildTeamsAgentHeader, buildTextBody as buildTeamsTextBody, buildArtifactCard as buildTeamsArtifactCard, buildActionButtons as buildTeamsActionButtons, buildExplorerLink as buildTeamsExplorerLink, buildMetadataFooter as buildTeamsMetadataFooter, buildErrorCard as buildTeamsErrorCard, buildResponseFormElements as buildTeamsResponseFormElements, buildUnopenableResourceNotes as buildTeamsUnopenableResourceNotes, } from './teams/teams-card-builder.js';
|
|
57
57
|
/**
|
|
58
58
|
* Tree-shaking prevention function.
|
|
59
59
|
*
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAWtE,OAAO,EACH,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAErC,gBAAgB;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC5F,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,gCAAgC,CAAC;AAGxC,gBAAgB;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACH,qBAAqB,EACrB,gBAAgB,IAAI,qBAAqB,EACzC,aAAa,IAAI,kBAAkB,EACnC,iBAAiB,IAAI,sBAAsB,EAC3C,kBAAkB,IAAI,uBAAuB,EAC7C,iBAAiB,IAAI,sBAAsB,EAC3C,mBAAmB,IAAI,wBAAwB,EAC/C,cAAc,IAAI,mBAAmB,EACrC,yBAAyB,IAAI,8BAA8B,EAC3D,4BAA4B,IAAI,iCAAiC,GACpE,MAAM,+BAA+B,CAAC;AAGvC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB;IACjC,gEAAgE;IAChE,qEAAqE;IACrE,gEAAgE;AACpE,CAAC"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - Stripping bot @mentions from message text
|
|
12
12
|
*/
|
|
13
13
|
import { ExecuteAgentResult, MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';
|
|
14
|
-
import { BaseMessagingAdapter } from '../base/BaseMessagingAdapter.js';
|
|
14
|
+
import { BaseMessagingAdapter, type UploadableFile } from '../base/BaseMessagingAdapter.js';
|
|
15
15
|
import { IncomingMessage, FormattedResponse, MessagingAdapterSettings, AgentResponseMetadata } from '../base/types.js';
|
|
16
16
|
/**
|
|
17
17
|
* Slack-specific adapter that implements all platform operations
|
|
@@ -39,15 +39,24 @@ export declare class SlackAdapter extends BaseMessagingAdapter {
|
|
|
39
39
|
private client;
|
|
40
40
|
/** The bot's own Slack user ID (e.g., `U0123456`). */
|
|
41
41
|
private botUserID;
|
|
42
|
+
/** The `B…` id Slack reports for posts made with a username/icon override. */
|
|
43
|
+
private botID;
|
|
42
44
|
/**
|
|
43
45
|
* Message IDs of "Thinking..." indicators, keyed by `channelId:threadTs`.
|
|
44
46
|
* Per-thread keying prevents concurrent messages from overwriting each other's indicator.
|
|
45
47
|
*/
|
|
46
48
|
private thinkingMessageIds;
|
|
47
49
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
50
|
+
* Maximum length of a message's `text` field.
|
|
51
|
+
*
|
|
52
|
+
* Slack rejects `chat.postMessage`/`chat.update` with `msg_too_long` past roughly 4,000
|
|
53
|
+
* characters — NOT the ~40,000 that applies to a message's total block payload. The higher
|
|
54
|
+
* figure meant this limit never engaged before Slack refused the call, so streaming updates
|
|
55
|
+
* failed continuously for any long output: the model streams its raw envelope (which can
|
|
56
|
+
* include base64 file data), every progress update was rejected, and the placeholder sat
|
|
57
|
+
* frozen mid-flight while the log filled with `msg_too_long`.
|
|
58
|
+
*
|
|
59
|
+
* 3,900 leaves room for the truncation notice appended below.
|
|
51
60
|
*/
|
|
52
61
|
private static readonly MAX_TEXT_LENGTH;
|
|
53
62
|
protected get PlatformName(): string;
|
|
@@ -67,6 +76,25 @@ export declare class SlackAdapter extends BaseMessagingAdapter {
|
|
|
67
76
|
* This is needed to identify bot messages in thread history.
|
|
68
77
|
*/
|
|
69
78
|
protected onInitialize(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Was this history message written by ANY bot, not just this one?
|
|
81
|
+
*
|
|
82
|
+
* Slack's Events API marks them three different ways depending on how the message was posted:
|
|
83
|
+
* a `bot_id`, a `bot_profile`, or the `bot_message` subtype. Kept here rather than on the base
|
|
84
|
+
* class because these are Slack payload fields; other platforms answer the question their own
|
|
85
|
+
* way.
|
|
86
|
+
*/
|
|
87
|
+
protected isBotAuthored(message: IncomingMessage): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Either identifier counts as this bot.
|
|
90
|
+
*
|
|
91
|
+
* `chat:write.customize` is required for per-agent identity, and a post made with it comes
|
|
92
|
+
* back as `subtype: 'bot_message'` with a `bot_id` and no `user`. Comparing only against
|
|
93
|
+
* `user_id` therefore never matched this adapter's own replies — which silently made the
|
|
94
|
+
* multi-bot thread gate decline threads this bot was actively holding, and dropped the
|
|
95
|
+
* agent's own turns from its context.
|
|
96
|
+
*/
|
|
97
|
+
protected isSelf(senderId: string | null | undefined): boolean;
|
|
70
98
|
protected getBotUserId(): string;
|
|
71
99
|
/**
|
|
72
100
|
* Post a "Thinking..." message as the typing indicator.
|
|
@@ -83,6 +111,34 @@ export declare class SlackAdapter extends BaseMessagingAdapter {
|
|
|
83
111
|
* Shows the agent's identity on new messages.
|
|
84
112
|
*/
|
|
85
113
|
protected sendOrUpdateStreamingMessage(originalMessage: IncomingMessage, currentContent: string, existingMessageId: string | null, agent?: MJAIAgentEntityExtended): Promise<string>;
|
|
114
|
+
/**
|
|
115
|
+
* Extensions for MIME types whose subtype is not a usable file extension.
|
|
116
|
+
*
|
|
117
|
+
* `mimeType.split('/')[1]` yields "vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
118
|
+
* for a .docx, which Slack shows as an unopenable blob.
|
|
119
|
+
*/
|
|
120
|
+
private static readonly EXTENSION_BY_MIME_TYPE;
|
|
121
|
+
/** A reply delivers files, it does not become a file dump. Mirrors the media-block limit. */
|
|
122
|
+
private static readonly MAX_UPLOADS_PER_REPLY;
|
|
123
|
+
/**
|
|
124
|
+
* Extensions recognised as already present on a filename.
|
|
125
|
+
*
|
|
126
|
+
* Derived from the map above so the two cannot drift, plus common types an agent may name
|
|
127
|
+
* directly without our having a MIME mapping for them.
|
|
128
|
+
*/
|
|
129
|
+
private static readonly KNOWN_FILE_EXTENSIONS;
|
|
130
|
+
/**
|
|
131
|
+
* Upload an agent's binary output as real Slack files, threaded under the reply.
|
|
132
|
+
*
|
|
133
|
+
* Slack's `image` blocks can only reference a public https URL, so base64 media — every
|
|
134
|
+
* generated image, and any file inlined as a `data:` URI — could not be rendered and was
|
|
135
|
+
* silently dropped: the agent did the work, the artifact existed, and the user saw nothing.
|
|
136
|
+
* Uploading makes it an ordinary attachment the user can open or download.
|
|
137
|
+
*
|
|
138
|
+
* Requires the `files:write` bot scope; without it Slack answers `missing_scope`, which the
|
|
139
|
+
* caller logs (the text reply has already posted by then).
|
|
140
|
+
*/
|
|
141
|
+
protected uploadMediaOutputs(originalMessage: IncomingMessage, files: readonly UploadableFile[]): Promise<void>;
|
|
86
142
|
/**
|
|
87
143
|
* Send the final formatted response. If a "Thinking..." message exists
|
|
88
144
|
* (no streaming occurred), update it in-place instead of posting a new message.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackAdapter.d.ts","sourceRoot":"","sources":["../../src/slack/SlackAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"SlackAdapter.d.ts","sourceRoot":"","sources":["../../src/slack/SlackAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAIvH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,YAAa,SAAQ,oBAAoB;IAClD,4BAA4B;IAC5B,OAAO,CAAC,MAAM,CAAY;IAE1B,sDAAsD;IACtD,OAAO,CAAC,SAAS,CAAc;IAC/B,8EAA8E;IAC9E,OAAO,CAAC,KAAK,CAAc;IAE3B;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAA6B;IAEvD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEhD,SAAS,KAAK,YAAY,IAAI,MAAM,CAAoB;gBAE5C,QAAQ,EAAE,wBAAwB;IAK9C;;;;;;;;OAQG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe;IAiBrE;;;OAGG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7C;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;IAS1D;;;;;;;;OAQG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAK9D,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC;;;;OAIG;cACa,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7G;;OAEG;cACa,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAqBnG;;;OAGG;cACa,4BAA4B,CACxC,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,KAAK,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,MAAM,CAAC;IA2BlB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAc5C;IAEF,6FAA6F;IAC7F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAK;IAElD;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAG1C;IAEH;;;;;;;;;;OAUG;cACa,kBAAkB,CAAC,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CrH;;;OAGG;cACa,gBAAgB,CAAC,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9G;;OAEG;cACa,kBAAkB,CAC9B,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAShB;;;;;;OAMG;cACa,cAAc,CAC1B,MAAM,EAAE,kBAAkB,GAAG,IAAI,EACjC,KAAK,EAAE,uBAAuB,EAC9B,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,qBAAqB,GACjC,OAAO,CAAC,iBAAiB,CAAC;IAiB7B;;;OAGG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/C;;;;;;;OAOG;cACa,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY/E,oEAAoE;IACpE,OAAO,CAAC,SAAS;IAIjB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAS3B,kDAAkD;IAClD,OAAO,CAAC,wBAAwB;IAIhC,0DAA0D;IAC1D,OAAO,CAAC,oCAAoC;CAG/C"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - Stripping bot @mentions from message text
|
|
12
12
|
*/
|
|
13
13
|
import { WebClient } from '@slack/web-api';
|
|
14
|
-
import { LogStatus } from '@memberjunction/core';
|
|
14
|
+
import { LogError, LogStatus } from '@memberjunction/core';
|
|
15
15
|
import { BaseMessagingAdapter } from '../base/BaseMessagingAdapter.js';
|
|
16
16
|
import { buildRichResponse } from './slack-block-builder.js';
|
|
17
17
|
/**
|
|
@@ -37,16 +37,25 @@ import { buildRichResponse } from './slack-block-builder.js';
|
|
|
37
37
|
*/
|
|
38
38
|
export class SlackAdapter extends BaseMessagingAdapter {
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* Maximum length of a message's `text` field.
|
|
41
|
+
*
|
|
42
|
+
* Slack rejects `chat.postMessage`/`chat.update` with `msg_too_long` past roughly 4,000
|
|
43
|
+
* characters — NOT the ~40,000 that applies to a message's total block payload. The higher
|
|
44
|
+
* figure meant this limit never engaged before Slack refused the call, so streaming updates
|
|
45
|
+
* failed continuously for any long output: the model streams its raw envelope (which can
|
|
46
|
+
* include base64 file data), every progress update was rejected, and the placeholder sat
|
|
47
|
+
* frozen mid-flight while the log filled with `msg_too_long`.
|
|
48
|
+
*
|
|
49
|
+
* 3,900 leaves room for the truncation notice appended below.
|
|
43
50
|
*/
|
|
44
|
-
static { this.MAX_TEXT_LENGTH =
|
|
51
|
+
static { this.MAX_TEXT_LENGTH = 3_900; }
|
|
45
52
|
get PlatformName() { return 'Slack'; }
|
|
46
53
|
constructor(settings) {
|
|
47
54
|
super(settings);
|
|
48
55
|
/** The bot's own Slack user ID (e.g., `U0123456`). */
|
|
49
56
|
this.botUserID = '';
|
|
57
|
+
/** The `B…` id Slack reports for posts made with a username/icon override. */
|
|
58
|
+
this.botID = '';
|
|
50
59
|
/**
|
|
51
60
|
* Message IDs of "Thinking..." indicators, keyed by `channelId:threadTs`.
|
|
52
61
|
* Per-thread keying prevents concurrent messages from overwriting each other's indicator.
|
|
@@ -86,6 +95,42 @@ export class SlackAdapter extends BaseMessagingAdapter {
|
|
|
86
95
|
async onInitialize() {
|
|
87
96
|
const authResult = await this.client.auth.test();
|
|
88
97
|
this.botUserID = authResult.user_id;
|
|
98
|
+
// Captured alongside user_id because they are NOT interchangeable in history: a reply
|
|
99
|
+
// posted with a username override (which every agent reply uses) returns `bot_id` and no
|
|
100
|
+
// `user`, so fetchThreadHistory records the B… id while auth.test() reports the U… one.
|
|
101
|
+
this.botID = authResult.bot_id ?? '';
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Was this history message written by ANY bot, not just this one?
|
|
105
|
+
*
|
|
106
|
+
* Slack's Events API marks them three different ways depending on how the message was posted:
|
|
107
|
+
* a `bot_id`, a `bot_profile`, or the `bot_message` subtype. Kept here rather than on the base
|
|
108
|
+
* class because these are Slack payload fields; other platforms answer the question their own
|
|
109
|
+
* way.
|
|
110
|
+
*/
|
|
111
|
+
isBotAuthored(message) {
|
|
112
|
+
const raw = message.RawEvent;
|
|
113
|
+
if (raw && typeof raw === 'object') {
|
|
114
|
+
if (raw['bot_id'] || raw['bot_profile'])
|
|
115
|
+
return true;
|
|
116
|
+
if (raw['subtype'] === 'bot_message')
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Either identifier counts as this bot.
|
|
123
|
+
*
|
|
124
|
+
* `chat:write.customize` is required for per-agent identity, and a post made with it comes
|
|
125
|
+
* back as `subtype: 'bot_message'` with a `bot_id` and no `user`. Comparing only against
|
|
126
|
+
* `user_id` therefore never matched this adapter's own replies — which silently made the
|
|
127
|
+
* multi-bot thread gate decline threads this bot was actively holding, and dropped the
|
|
128
|
+
* agent's own turns from its context.
|
|
129
|
+
*/
|
|
130
|
+
isSelf(senderId) {
|
|
131
|
+
if (!senderId)
|
|
132
|
+
return false;
|
|
133
|
+
return senderId === this.botUserID || (!!this.botID && senderId === this.botID);
|
|
89
134
|
}
|
|
90
135
|
getBotUserId() {
|
|
91
136
|
return this.botUserID;
|
|
@@ -159,6 +204,93 @@ export class SlackAdapter extends BaseMessagingAdapter {
|
|
|
159
204
|
return result.ts;
|
|
160
205
|
}
|
|
161
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Extensions for MIME types whose subtype is not a usable file extension.
|
|
209
|
+
*
|
|
210
|
+
* `mimeType.split('/')[1]` yields "vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
211
|
+
* for a .docx, which Slack shows as an unopenable blob.
|
|
212
|
+
*/
|
|
213
|
+
static { this.EXTENSION_BY_MIME_TYPE = {
|
|
214
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',
|
|
215
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',
|
|
216
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',
|
|
217
|
+
'application/msword': 'doc',
|
|
218
|
+
'application/vnd.ms-excel': 'xls',
|
|
219
|
+
'application/vnd.ms-powerpoint': 'ppt',
|
|
220
|
+
'application/pdf': 'pdf',
|
|
221
|
+
'application/json': 'json',
|
|
222
|
+
'text/markdown': 'md',
|
|
223
|
+
'text/plain': 'txt',
|
|
224
|
+
'text/csv': 'csv',
|
|
225
|
+
'image/jpeg': 'jpg',
|
|
226
|
+
'image/svg+xml': 'svg',
|
|
227
|
+
}; }
|
|
228
|
+
/** A reply delivers files, it does not become a file dump. Mirrors the media-block limit. */
|
|
229
|
+
static { this.MAX_UPLOADS_PER_REPLY = 5; }
|
|
230
|
+
/**
|
|
231
|
+
* Extensions recognised as already present on a filename.
|
|
232
|
+
*
|
|
233
|
+
* Derived from the map above so the two cannot drift, plus common types an agent may name
|
|
234
|
+
* directly without our having a MIME mapping for them.
|
|
235
|
+
*/
|
|
236
|
+
static { this.KNOWN_FILE_EXTENSIONS = new Set([
|
|
237
|
+
...Object.values(SlackAdapter.EXTENSION_BY_MIME_TYPE),
|
|
238
|
+
'jpeg', 'png', 'gif', 'webp', 'html', 'zip', 'mp3', 'mp4', 'wav', 'xml', 'yaml',
|
|
239
|
+
]); }
|
|
240
|
+
/**
|
|
241
|
+
* Upload an agent's binary output as real Slack files, threaded under the reply.
|
|
242
|
+
*
|
|
243
|
+
* Slack's `image` blocks can only reference a public https URL, so base64 media — every
|
|
244
|
+
* generated image, and any file inlined as a `data:` URI — could not be rendered and was
|
|
245
|
+
* silently dropped: the agent did the work, the artifact existed, and the user saw nothing.
|
|
246
|
+
* Uploading makes it an ordinary attachment the user can open or download.
|
|
247
|
+
*
|
|
248
|
+
* Requires the `files:write` bot scope; without it Slack answers `missing_scope`, which the
|
|
249
|
+
* caller logs (the text reply has already posted by then).
|
|
250
|
+
*/
|
|
251
|
+
async uploadMediaOutputs(originalMessage, files) {
|
|
252
|
+
const threadTs = originalMessage.ThreadID ?? originalMessage.MessageID;
|
|
253
|
+
// Capped to mirror the media-block limit — a reply should not become a file dump.
|
|
254
|
+
// Filtered BEFORE the cap, not inside the loop: an entry carrying only a URL has no bytes
|
|
255
|
+
// to upload, and counting it against the budget silently shrank how many real files got
|
|
256
|
+
// through.
|
|
257
|
+
const deliverable = files.filter((f) => !!f && typeof f.data === 'string' && f.data.length > 0);
|
|
258
|
+
const batch = deliverable.slice(0, SlackAdapter.MAX_UPLOADS_PER_REPLY);
|
|
259
|
+
if (deliverable.length > batch.length) {
|
|
260
|
+
LogStatus(`Slack: delivering ${batch.length} of ${deliverable.length} generated files (per-reply cap)`);
|
|
261
|
+
}
|
|
262
|
+
for (const file of batch) {
|
|
263
|
+
const mimeType = (file.mimeType ?? 'image/png').toLowerCase();
|
|
264
|
+
const extension = (Object.hasOwn(SlackAdapter.EXTENSION_BY_MIME_TYPE, mimeType)
|
|
265
|
+
? SlackAdapter.EXTENSION_BY_MIME_TYPE[mimeType]
|
|
266
|
+
: undefined)
|
|
267
|
+
?? (mimeType.split('/')[1] ?? 'bin').split('+')[0];
|
|
268
|
+
const preferredName = (file.fileName?.trim() || file.label || `generated-${file.modality ?? 'media'}`)
|
|
269
|
+
.replace(/[^\w.-]+/g, '_')
|
|
270
|
+
.slice(0, 80) || 'generated-file';
|
|
271
|
+
// Only treat a trailing token as an extension if it IS one: a bare
|
|
272
|
+
// /\.[A-Za-z0-9]{1,5}$/ reads "Q3 Report v1.2" as already-extensioned and uploads it
|
|
273
|
+
// without .docx — the unopenable blob the mapping above exists to prevent.
|
|
274
|
+
const trailing = /\.([A-Za-z0-9]{1,5})$/.exec(preferredName)?.[1]?.toLowerCase();
|
|
275
|
+
const filename = trailing && SlackAdapter.KNOWN_FILE_EXTENSIONS.has(trailing)
|
|
276
|
+
? preferredName
|
|
277
|
+
: `${preferredName}.${extension}`;
|
|
278
|
+
try {
|
|
279
|
+
await this.client.files.uploadV2({
|
|
280
|
+
channel_id: originalMessage.ChannelID,
|
|
281
|
+
thread_ts: threadTs,
|
|
282
|
+
file: Buffer.from(file.data, 'base64'),
|
|
283
|
+
filename,
|
|
284
|
+
title: file.label ?? file.fileName ?? undefined,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
// Per file: one rejected upload (a bad MIME type, a size cap) must not cost the
|
|
289
|
+
// user the other files in the same reply.
|
|
290
|
+
LogError(`Failed to upload ${filename} to Slack:`, undefined, error);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
162
294
|
/**
|
|
163
295
|
* Send the final formatted response. If a "Thinking..." message exists
|
|
164
296
|
* (no streaming occurred), update it in-place instead of posting a new message.
|
|
@@ -260,10 +392,11 @@ export class SlackAdapter extends BaseMessagingAdapter {
|
|
|
260
392
|
* the rich content. Keeping it short avoids `msg_too_long` when blocks are large.
|
|
261
393
|
*/
|
|
262
394
|
truncateForSlackFallback(text) {
|
|
263
|
-
|
|
264
|
-
|
|
395
|
+
// Same ceiling as the primary path: Slack refuses a `text` field past ~4,000, and this
|
|
396
|
+
// fallback is what sendFinalMessage/updateFinalMessage actually post.
|
|
397
|
+
if (text.length <= SlackAdapter.MAX_TEXT_LENGTH)
|
|
265
398
|
return text;
|
|
266
|
-
return text.slice(0,
|
|
399
|
+
return text.slice(0, SlackAdapter.MAX_TEXT_LENGTH - 30) + '\n\n(See full response above)';
|
|
267
400
|
}
|
|
268
401
|
/**
|
|
269
402
|
* Build Slack API params for per-agent identity.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackAdapter.js","sourceRoot":"","sources":["../../src/slack/SlackAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"SlackAdapter.js","sourceRoot":"","sources":["../../src/slack/SlackAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackMessagingExtension.d.ts","sourceRoot":"","sources":["../../src/slack/SlackMessagingExtension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAgB,EAAE,WAAW,EAA6B,MAAM,SAAS,CAAC;AAK1E,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,wCAAwC,CAAC;AAMhD;;;;;;;;;;;;;;GAcG;AACH,qBACa,uBAAwB,SAAQ,mBAAmB;IAC5D,qDAAqD;IACrD,OAAO,CAAC,OAAO,CAA6B;IAE5C,iEAAiE;IACjE,OAAO,CAAC,cAAc,CAA0B;IAEhD,mDAAmD;IACnD,OAAO,CAAC,aAAa,CAAc;IAEnC,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAA8B;IAEnD,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAAiC;IAEzD,uDAAuD;IACvD,OAAO,CAAC,cAAc,CAA6B;IAEnD;;;;;;OAMG;IACG,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0C/F;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAenD;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA0C1B;;;;;;;OAOG;YACW,aAAa;IAsB3B;;;;;OAKG;YACW,oBAAoB;
|
|
1
|
+
{"version":3,"file":"SlackMessagingExtension.d.ts","sourceRoot":"","sources":["../../src/slack/SlackMessagingExtension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAgB,EAAE,WAAW,EAA6B,MAAM,SAAS,CAAC;AAK1E,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,wCAAwC,CAAC;AAMhD;;;;;;;;;;;;;;GAcG;AACH,qBACa,uBAAwB,SAAQ,mBAAmB;IAC5D,qDAAqD;IACrD,OAAO,CAAC,OAAO,CAA6B;IAE5C,iEAAiE;IACjE,OAAO,CAAC,cAAc,CAA0B;IAEhD,mDAAmD;IACnD,OAAO,CAAC,aAAa,CAAc;IAEnC,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAA8B;IAEnD,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAAiC;IAEzD,uDAAuD;IACvD,OAAO,CAAC,cAAc,CAA6B;IAEnD;;;;;;OAMG;IACG,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0C/F;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAenD;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA0C1B;;;;;;;OAOG;YACW,aAAa;IAsB3B;;;;;OAKG;YACW,oBAAoB;IAqElC;;;OAGG;YACW,iBAAiB;IAwB/B;;;;;;;;OAQG;YACW,kBAAkB;IA2BhC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAe5B,gEAAgE;IAChE,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;YACW,wBAAwB;IAwDtC;;OAEG;YACW,iBAAiB;CAiClC"}
|
|
@@ -268,6 +268,41 @@ let SlackMessagingExtension = class SlackMessagingExtension extends BaseServerEx
|
|
|
268
268
|
await ack();
|
|
269
269
|
await this.processSlackEvent(event);
|
|
270
270
|
});
|
|
271
|
+
// Interactivity. Only 'message' and 'app_mention' were subscribed, so in Socket Mode every
|
|
272
|
+
// interactive element the block builder renders — the "Fill Out Form" button, choice
|
|
273
|
+
// buttons, action buttons — was inert: the click produced an event nothing listened for,
|
|
274
|
+
// and a human-in-the-loop agent could not be answered at all. `handleSlackInteraction`
|
|
275
|
+
// (with its full modal build/submit path) was wired only to the HTTP route, which
|
|
276
|
+
// additionally needs a SigningSecret that Socket Mode deployments have no reason to set.
|
|
277
|
+
//
|
|
278
|
+
// Only the envelope type is subscribed. @slack/socket-mode emits the INNER event type for
|
|
279
|
+
// an `events_api` envelope and the ENVELOPE type for everything else, and Slack labels
|
|
280
|
+
// every block action and view submission `interactive` — so 'block_actions' and
|
|
281
|
+
// 'view_submission' subscriptions never fire, and had they fired, a view submission would
|
|
282
|
+
// have run the agent twice.
|
|
283
|
+
const handleInteractiveEnvelope = async ({ body, ack }) => {
|
|
284
|
+
await ack();
|
|
285
|
+
if (!this.interactClient || !this.adapter) {
|
|
286
|
+
LogStatus('Slack interact: extension not fully initialized');
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
try {
|
|
290
|
+
// handleSlackInteraction parses a JSON string (its HTTP contract); Socket Mode
|
|
291
|
+
// hands us the payload already parsed.
|
|
292
|
+
const payload = body?.['payload'];
|
|
293
|
+
const raw = typeof payload === 'string' ? payload : JSON.stringify(payload ?? body ?? {});
|
|
294
|
+
await handleSlackInteraction(raw, this.interactClient, this.adapter);
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
LogError('Error handling Slack interaction (Socket Mode):', undefined, error);
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
// Only 'interactive'. For an events_api envelope the SDK emits the INNER event type
|
|
301
|
+
// (`message`, `app_mention`); for every other envelope it emits the envelope type itself,
|
|
302
|
+
// and Slack labels all block actions and view submissions `interactive`. Subscribing to
|
|
303
|
+
// 'block_actions'/'view_submission' as well never fired — and had it fired, a view
|
|
304
|
+
// submission would have run the agent twice.
|
|
305
|
+
this.socketModeClient.on('interactive', handleInteractiveEnvelope);
|
|
271
306
|
await this.socketModeClient.start();
|
|
272
307
|
LogStatus('Slack Socket Mode connected');
|
|
273
308
|
return {
|