@cuylabs/channel-slack-agent-core 0.5.1 → 0.7.0

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 (89) hide show
  1. package/README.md +20 -39
  2. package/dist/{adapter.d.ts → adapter/index.d.ts} +7 -5
  3. package/dist/adapter/index.js +9 -0
  4. package/dist/{adapter-Cmd2C90g.d.ts → adapter-B3CI611y.d.ts} +1 -1
  5. package/dist/app-surface.d.ts +13 -3
  6. package/dist/app-surface.js +5 -7
  7. package/dist/app.d.ts +9 -4
  8. package/dist/app.js +6 -9
  9. package/dist/artifacts/index.d.ts +57 -0
  10. package/dist/artifacts/index.js +6 -0
  11. package/dist/{assistant.d.ts → assistant/index.d.ts} +6 -4
  12. package/dist/{assistant.js → assistant/index.js} +3 -5
  13. package/dist/{chunk-CYEBGC6G.js → chunk-76SRS54H.js} +5 -5
  14. package/dist/{chunk-M64Z6TYL.js → chunk-7DUO5BMW.js} +16 -6
  15. package/dist/{chunk-NIPAN4KA.js → chunk-A2PLAVW6.js} +2 -3
  16. package/dist/chunk-C7CHMYV6.js +226 -0
  17. package/dist/chunk-C7VSW4ZM.js +548 -0
  18. package/dist/{chunk-JMLB7A2V.js → chunk-DJPKRKGP.js} +5 -5
  19. package/dist/chunk-ELR6MQD7.js +12 -0
  20. package/dist/{chunk-FDRQOG7Q.js → chunk-FQWFB54C.js} +26 -15
  21. package/dist/{chunk-BFUPAJON.js → chunk-MGBNGG4D.js} +59 -37
  22. package/dist/chunk-NNCVHQC4.js +94 -0
  23. package/dist/chunk-P7PFQ3SQ.js +396 -0
  24. package/dist/{chunk-WO4BJMF3.js → chunk-TCNJY7QA.js} +5 -5
  25. package/dist/{chunk-DHPD4XH5.js → chunk-TMADMHBN.js} +210 -29
  26. package/dist/{chunk-IWUYIAY5.js → chunk-VMVQIDNR.js} +5 -7
  27. package/dist/{chunk-IXY3BXU5.js → chunk-X7ILLZZP.js} +359 -2
  28. package/dist/context-fragments-CQEDcjYR.d.ts +30 -0
  29. package/dist/express-assistant.d.ts +6 -3
  30. package/dist/express-assistant.js +4 -7
  31. package/dist/express.d.ts +7 -3
  32. package/dist/express.js +3 -6
  33. package/dist/feedback/index.d.ts +1 -0
  34. package/dist/feedback/index.js +10 -0
  35. package/dist/history/index.d.ts +61 -0
  36. package/dist/history/index.js +8 -0
  37. package/dist/index.d.ts +23 -16
  38. package/dist/index.js +81 -160
  39. package/dist/interactive/index.d.ts +71 -0
  40. package/dist/{interactive.js → interactive/index.js} +9 -4
  41. package/dist/mcp.js +0 -1
  42. package/dist/{options-C7OYeNR-.d.ts → options-BcDReOJv.d.ts} +48 -0
  43. package/dist/{options-Uf-qmQKN.d.ts → options-CdqBABcM.d.ts} +26 -1
  44. package/dist/{shared.d.ts → shared/index.d.ts} +24 -36
  45. package/dist/{shared.js → shared/index.js} +2 -6
  46. package/dist/socket.d.ts +9 -4
  47. package/dist/socket.js +6 -9
  48. package/dist/source/index.d.ts +154 -0
  49. package/dist/source/index.js +38 -0
  50. package/dist/{types-BqRzb_Cd.d.ts → types-CRWzJB5G.d.ts} +35 -0
  51. package/dist/types-CiwGU6zC.d.ts +56 -0
  52. package/dist/views/index.d.ts +8 -0
  53. package/dist/views/index.js +10 -0
  54. package/docs/README.md +18 -0
  55. package/docs/concepts/final-response-artifacts.md +39 -0
  56. package/docs/concepts/interactive-requests.md +43 -0
  57. package/docs/concepts/tool-task-rendering.md +46 -0
  58. package/docs/concepts/view-workflows.md +52 -0
  59. package/docs/reference/boundary.md +22 -0
  60. package/docs/reference/exports.md +26 -0
  61. package/package.json +36 -50
  62. package/dist/adapter.js +0 -13
  63. package/dist/bolt.d.ts +0 -8
  64. package/dist/bolt.js +0 -10
  65. package/dist/chunk-2SUAW6MV.js +0 -12
  66. package/dist/chunk-645NNJIM.js +0 -12
  67. package/dist/chunk-ANIZ5NT4.js +0 -12
  68. package/dist/chunk-GNXWTKQ6.js +0 -48
  69. package/dist/chunk-HFT2FXJP.js +0 -12
  70. package/dist/chunk-I2KLQ2HA.js +0 -22
  71. package/dist/chunk-K2E6A377.js +0 -12
  72. package/dist/chunk-NDVXBI7Z.js +0 -12
  73. package/dist/chunk-PX4RGO3N.js +0 -12
  74. package/dist/chunk-VHGV66M7.js +0 -12
  75. package/dist/diagnostics.d.ts +0 -1
  76. package/dist/diagnostics.js +0 -10
  77. package/dist/feedback.d.ts +0 -1
  78. package/dist/feedback.js +0 -10
  79. package/dist/history.d.ts +0 -1
  80. package/dist/history.js +0 -10
  81. package/dist/interactive.d.ts +0 -30
  82. package/dist/policy.d.ts +0 -1
  83. package/dist/policy.js +0 -10
  84. package/dist/setup.d.ts +0 -1
  85. package/dist/setup.js +0 -10
  86. package/dist/targets.d.ts +0 -1
  87. package/dist/targets.js +0 -10
  88. package/dist/users.d.ts +0 -1
  89. package/dist/users.js +0 -10
package/dist/index.js CHANGED
@@ -1,16 +1,10 @@
1
1
  import {
2
- mountSlackAgentAppSocket,
3
- mountSlackAssistantAgentSocket
4
- } from "./chunk-IWUYIAY5.js";
5
- import {
6
- targets_exports
7
- } from "./chunk-K2E6A377.js";
8
- import {
9
- users_exports
10
- } from "./chunk-HFT2FXJP.js";
2
+ createSlackFinalResponseArtifactPublisher
3
+ } from "./chunk-NNCVHQC4.js";
11
4
  import {
12
- history_exports
13
- } from "./chunk-PX4RGO3N.js";
5
+ emptySlackAgentTurnHistoryContextResult,
6
+ loadSlackAgentTurnHistoryContext
7
+ } from "./chunk-P7PFQ3SQ.js";
14
8
  import {
15
9
  buildApprovalRequestMessage,
16
10
  buildHumanInputModal,
@@ -18,152 +12,76 @@ import {
18
12
  buildResolvedMessage,
19
13
  cloneRecord,
20
14
  createInMemorySlackInteractiveRequestStore,
15
+ createPostgresSlackInteractiveRequestStore,
21
16
  createSlackInteractiveController,
22
17
  decodeActionValue,
23
18
  encodeActionValue,
24
- nowIso
25
- } from "./chunk-IXY3BXU5.js";
26
- import {
27
- SLACK_MCP_URL,
28
- createSlackMcpServerConfig
29
- } from "./chunk-RFHXERNL.js";
30
- import {
31
- policy_exports
32
- } from "./chunk-2SUAW6MV.js";
33
- import {
34
- setup_exports
35
- } from "./chunk-645NNJIM.js";
19
+ initializePostgresSlackInteractiveRequestStore,
20
+ nowIso,
21
+ prunePostgresSlackInteractiveRequestStore
22
+ } from "./chunk-X7ILLZZP.js";
36
23
  import {
37
24
  DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY,
38
25
  createSlackContextFragmentMiddleware
39
- } from "./chunk-NIPAN4KA.js";
26
+ } from "./chunk-A2PLAVW6.js";
27
+ import {
28
+ coalesceSlackAgentEvents,
29
+ createSlackSubagentCompletionNotifier,
30
+ formatDefaultSlackSubagentCompletionMessage,
31
+ immediateSlackTextResponse,
32
+ inspectSlackTurnStatusVisibility,
33
+ isAbortLikeError,
34
+ isRunningAgentTurnError,
35
+ isSlackCancelMessage,
36
+ isSlackSubagentTerminalEvent,
37
+ isSlackTerminalTurnPhase,
38
+ isSlackWaitingForHumanTurnPhase,
39
+ recordSlackTurnActivity,
40
+ resolveSlackTurnStatusVisibilityOptions,
41
+ resolveSlackTypedApprovalAction,
42
+ routeSlackAgentEvent,
43
+ shouldInspectSlackTurnStatusVisibility,
44
+ shouldQueueSlackAgentEvent
45
+ } from "./chunk-C7VSW4ZM.js";
46
+ import {
47
+ createSlackAgentViewWorkflowController,
48
+ extractSlackAgentViewStateValues,
49
+ readSlackAgentViewStateValue
50
+ } from "./chunk-C7CHMYV6.js";
40
51
  import {
41
52
  mountSlackAgentApp
42
- } from "./chunk-CYEBGC6G.js";
43
- import "./chunk-M64Z6TYL.js";
44
- import {
45
- diagnostics_exports
46
- } from "./chunk-NDVXBI7Z.js";
53
+ } from "./chunk-76SRS54H.js";
47
54
  import {
48
55
  mountSlackAssistantAgent
49
- } from "./chunk-JMLB7A2V.js";
56
+ } from "./chunk-DJPKRKGP.js";
57
+ import {
58
+ mountSlackAgent
59
+ } from "./chunk-TCNJY7QA.js";
60
+ import {
61
+ SLACK_MCP_URL,
62
+ createSlackMcpServerConfig
63
+ } from "./chunk-RFHXERNL.js";
64
+ import {
65
+ mountSlackAgentAppSocket,
66
+ mountSlackAssistantAgentSocket
67
+ } from "./chunk-VMVQIDNR.js";
68
+ import "./chunk-7DUO5BMW.js";
50
69
  import {
51
70
  createSlackAssistantBridge,
52
71
  createSlackAssistantThreadContextStore,
53
72
  parseSlackMessageActivityFromMessageEvent,
54
73
  resolveAssistantSessionId
55
- } from "./chunk-BFUPAJON.js";
56
- import "./chunk-VHGV66M7.js";
57
- import {
58
- mountSlackAgent
59
- } from "./chunk-WO4BJMF3.js";
74
+ } from "./chunk-MGBNGG4D.js";
75
+ import "./chunk-ELR6MQD7.js";
60
76
  import {
61
77
  createSlackChannelAdapter,
62
- createSlackSessionMap,
63
- resolveThreadAwareSlackSessionId
64
- } from "./chunk-FDRQOG7Q.js";
65
- import {
66
- extractSlackActionToken,
67
- extractSlackAttachmentsText,
68
- extractSlackAuthContext,
69
- extractSlackBlocksText,
70
- extractSlackMessageText,
71
- extractSlackUserIdentity,
72
- isProcessableMessage,
73
- markdownToSlackMrkdwn,
74
- parseSlackMentionActivity,
75
- parseSlackMessageActivity,
76
- resolveSlackChannelType,
77
- resolveSlackMessageFormatter,
78
- stripLeadingMentions
79
- } from "./chunk-GNXWTKQ6.js";
78
+ createSlackSessionMap
79
+ } from "./chunk-FQWFB54C.js";
80
80
  import {
81
81
  UnsupportedSlackInteractiveRequestError,
82
82
  bridgeAgentEventsToSlack,
83
- currentSlackTurnContext,
84
- resolveSlackEventBridgeOptions,
85
- runWithSlackTurnContext
86
- } from "./chunk-DHPD4XH5.js";
87
- import {
88
- bolt_exports
89
- } from "./chunk-ANIZ5NT4.js";
90
- import {
91
- __export,
92
- __reExport
93
- } from "./chunk-I2KLQ2HA.js";
94
-
95
- // src/index.ts
96
- var index_exports = {};
97
- __export(index_exports, {
98
- DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY: () => DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY,
99
- SLACK_MCP_URL: () => SLACK_MCP_URL,
100
- UnsupportedSlackInteractiveRequestError: () => UnsupportedSlackInteractiveRequestError,
101
- bridgeAgentEventsToSlack: () => bridgeAgentEventsToSlack,
102
- buildApprovalRequestMessage: () => buildApprovalRequestMessage,
103
- buildHumanInputModal: () => buildHumanInputModal,
104
- buildHumanInputRequestMessage: () => buildHumanInputRequestMessage,
105
- buildResolvedMessage: () => buildResolvedMessage,
106
- cloneRecord: () => cloneRecord,
107
- createInMemorySlackInteractiveRequestStore: () => createInMemorySlackInteractiveRequestStore,
108
- createSlackAssistantBridge: () => createSlackAssistantBridge,
109
- createSlackAssistantThreadContextStore: () => createSlackAssistantThreadContextStore,
110
- createSlackChannelAdapter: () => createSlackChannelAdapter,
111
- createSlackContextFragmentMiddleware: () => createSlackContextFragmentMiddleware,
112
- createSlackInteractiveController: () => createSlackInteractiveController,
113
- createSlackMcpServerConfig: () => createSlackMcpServerConfig,
114
- createSlackSessionMap: () => createSlackSessionMap,
115
- createSlackSupplementalHistoryPolicy: () => history_exports.createSlackSupplementalHistoryPolicy,
116
- createSlackSupplementalHistoryVisibilityPolicy: () => history_exports.createSlackSupplementalHistoryVisibilityPolicy,
117
- currentSlackTurnContext: () => currentSlackTurnContext,
118
- decodeActionValue: () => decodeActionValue,
119
- encodeActionValue: () => encodeActionValue,
120
- extractSlackActionToken: () => extractSlackActionToken,
121
- extractSlackAttachmentsText: () => extractSlackAttachmentsText,
122
- extractSlackAuthContext: () => extractSlackAuthContext,
123
- extractSlackBlocksText: () => extractSlackBlocksText,
124
- extractSlackMessageText: () => extractSlackMessageText,
125
- extractSlackUserIdentity: () => extractSlackUserIdentity,
126
- formatSlackAttributedFollowUp: () => formatSlackAttributedFollowUp,
127
- formatSlackHistoryForPrompt: () => history_exports.formatSlackHistoryForPrompt,
128
- isProcessableMessage: () => isProcessableMessage,
129
- loadSlackTurnHistoryContext: () => history_exports.loadSlackTurnHistoryContext,
130
- markdownToSlackMrkdwn: () => markdownToSlackMrkdwn,
131
- mountSlackAgent: () => mountSlackAgent,
132
- mountSlackAgentApp: () => mountSlackAgentApp,
133
- mountSlackAgentAppSocket: () => mountSlackAgentAppSocket,
134
- mountSlackAssistantAgent: () => mountSlackAssistantAgent,
135
- mountSlackAssistantAgentSocket: () => mountSlackAssistantAgentSocket,
136
- nowIso: () => nowIso,
137
- parseSlackMentionActivity: () => parseSlackMentionActivity,
138
- parseSlackMessageActivity: () => parseSlackMessageActivity,
139
- parseSlackMessageActivityFromMessageEvent: () => parseSlackMessageActivityFromMessageEvent,
140
- readSlackChannelHistory: () => history_exports.readSlackChannelHistory,
141
- readSlackThreadHistory: () => history_exports.readSlackThreadHistory,
142
- resolveAssistantSessionId: () => resolveAssistantSessionId,
143
- resolveSlackChannelType: () => resolveSlackChannelType,
144
- resolveSlackEventBridgeOptions: () => resolveSlackEventBridgeOptions,
145
- resolveSlackMessageFormatter: () => resolveSlackMessageFormatter,
146
- resolveThreadAwareSlackSessionId: () => resolveThreadAwareSlackSessionId,
147
- runWithSlackTurnContext: () => runWithSlackTurnContext,
148
- stripLeadingMentions: () => stripLeadingMentions
149
- });
150
-
151
- // src/shared/follow-up.ts
152
- import { formatSlackAttributedFollowUp } from "@cuylabs/channel-slack/core";
153
-
154
- // src/index.ts
155
- __reExport(index_exports, bolt_exports);
156
- __reExport(index_exports, policy_exports);
157
- __reExport(index_exports, users_exports);
158
- __reExport(index_exports, diagnostics_exports);
159
- __reExport(index_exports, setup_exports);
160
- __reExport(index_exports, targets_exports);
161
- var export_createSlackSupplementalHistoryPolicy = history_exports.createSlackSupplementalHistoryPolicy;
162
- var export_createSlackSupplementalHistoryVisibilityPolicy = history_exports.createSlackSupplementalHistoryVisibilityPolicy;
163
- var export_formatSlackHistoryForPrompt = history_exports.formatSlackHistoryForPrompt;
164
- var export_loadSlackTurnHistoryContext = history_exports.loadSlackTurnHistoryContext;
165
- var export_readSlackChannelHistory = history_exports.readSlackChannelHistory;
166
- var export_readSlackThreadHistory = history_exports.readSlackThreadHistory;
83
+ resolveSlackEventBridgeOptions
84
+ } from "./chunk-TMADMHBN.js";
167
85
  export {
168
86
  DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY,
169
87
  SLACK_MCP_URL,
@@ -174,46 +92,49 @@ export {
174
92
  buildHumanInputRequestMessage,
175
93
  buildResolvedMessage,
176
94
  cloneRecord,
95
+ coalesceSlackAgentEvents,
177
96
  createInMemorySlackInteractiveRequestStore,
97
+ createPostgresSlackInteractiveRequestStore,
98
+ createSlackAgentViewWorkflowController,
178
99
  createSlackAssistantBridge,
179
100
  createSlackAssistantThreadContextStore,
180
101
  createSlackChannelAdapter,
181
102
  createSlackContextFragmentMiddleware,
103
+ createSlackFinalResponseArtifactPublisher,
182
104
  createSlackInteractiveController,
183
105
  createSlackMcpServerConfig,
184
106
  createSlackSessionMap,
185
- export_createSlackSupplementalHistoryPolicy as createSlackSupplementalHistoryPolicy,
186
- export_createSlackSupplementalHistoryVisibilityPolicy as createSlackSupplementalHistoryVisibilityPolicy,
187
- currentSlackTurnContext,
107
+ createSlackSubagentCompletionNotifier,
188
108
  decodeActionValue,
109
+ emptySlackAgentTurnHistoryContextResult,
189
110
  encodeActionValue,
190
- extractSlackActionToken,
191
- extractSlackAttachmentsText,
192
- extractSlackAuthContext,
193
- extractSlackBlocksText,
194
- extractSlackMessageText,
195
- extractSlackUserIdentity,
196
- formatSlackAttributedFollowUp,
197
- export_formatSlackHistoryForPrompt as formatSlackHistoryForPrompt,
198
- isProcessableMessage,
199
- export_loadSlackTurnHistoryContext as loadSlackTurnHistoryContext,
200
- markdownToSlackMrkdwn,
111
+ extractSlackAgentViewStateValues,
112
+ formatDefaultSlackSubagentCompletionMessage,
113
+ immediateSlackTextResponse,
114
+ initializePostgresSlackInteractiveRequestStore,
115
+ inspectSlackTurnStatusVisibility,
116
+ isAbortLikeError,
117
+ isRunningAgentTurnError,
118
+ isSlackCancelMessage,
119
+ isSlackSubagentTerminalEvent,
120
+ isSlackTerminalTurnPhase,
121
+ isSlackWaitingForHumanTurnPhase,
122
+ loadSlackAgentTurnHistoryContext,
201
123
  mountSlackAgent,
202
124
  mountSlackAgentApp,
203
125
  mountSlackAgentAppSocket,
204
126
  mountSlackAssistantAgent,
205
127
  mountSlackAssistantAgentSocket,
206
128
  nowIso,
207
- parseSlackMentionActivity,
208
- parseSlackMessageActivity,
209
129
  parseSlackMessageActivityFromMessageEvent,
210
- export_readSlackChannelHistory as readSlackChannelHistory,
211
- export_readSlackThreadHistory as readSlackThreadHistory,
130
+ prunePostgresSlackInteractiveRequestStore,
131
+ readSlackAgentViewStateValue,
132
+ recordSlackTurnActivity,
212
133
  resolveAssistantSessionId,
213
- resolveSlackChannelType,
214
134
  resolveSlackEventBridgeOptions,
215
- resolveSlackMessageFormatter,
216
- resolveThreadAwareSlackSessionId,
217
- runWithSlackTurnContext,
218
- stripLeadingMentions
135
+ resolveSlackTurnStatusVisibilityOptions,
136
+ resolveSlackTypedApprovalAction,
137
+ routeSlackAgentEvent,
138
+ shouldInspectSlackTurnStatusVisibility,
139
+ shouldQueueSlackAgentEvent
219
140
  };
@@ -0,0 +1,71 @@
1
+ import { i as SlackInteractiveRequestRecord, k as SlackInteractiveRequestStore, b as SlackInteractiveApprovalRequest, S as SlackInteractiveActionIds, e as SlackInteractiveHumanInputRequest, m as SlackInteractiveResolution, d as SlackInteractiveControllerOptions, c as SlackInteractiveController } from '../types-Crpil4kb.js';
2
+ export { a as SlackInteractiveActor, f as SlackInteractiveMessageTarget, g as SlackInteractivePendingWaiter, h as SlackInteractivePostedMessage, j as SlackInteractiveRequestStatus, l as SlackInteractiveRequestWaitOptions, n as SlackInteractiveStoredRequest } from '../types-Crpil4kb.js';
3
+ import { View } from '@slack/types';
4
+ import '@cuylabs/agent-core';
5
+ import '@slack/bolt';
6
+ import '../interactive-o_NZb-Xg.js';
7
+ import '@cuylabs/channel-slack/core';
8
+
9
+ declare function createInMemorySlackInteractiveRequestStore(): SlackInteractiveRequestStore;
10
+ declare function nowIso(): string;
11
+ declare function cloneRecord(record: SlackInteractiveRequestRecord): SlackInteractiveRequestRecord;
12
+
13
+ interface SlackInteractivePostgresClient {
14
+ end?: () => Promise<void>;
15
+ query<T = unknown>(sql: string, values?: readonly unknown[]): Promise<{
16
+ rows: T[];
17
+ rowCount?: number | null;
18
+ }>;
19
+ }
20
+ interface PostgresSlackInteractiveRequestStoreOptions {
21
+ client?: SlackInteractivePostgresClient;
22
+ connectionString?: string;
23
+ ensureSchema?: boolean;
24
+ onPruneError?: (error: unknown) => void;
25
+ pruneBatchSize?: number;
26
+ pruneIntervalMs?: number;
27
+ retentionMs?: number;
28
+ schema?: string;
29
+ tableName?: string;
30
+ }
31
+ interface PostgresSlackInteractiveRequestStore extends SlackInteractiveRequestStore {
32
+ close(): Promise<void>;
33
+ prune(): Promise<PostgresSlackInteractiveRequestPruneResult>;
34
+ }
35
+ interface PostgresSlackInteractiveRequestPruneResult {
36
+ deleted: number;
37
+ }
38
+ declare function createPostgresSlackInteractiveRequestStore({ client, connectionString, ensureSchema, onPruneError, pruneBatchSize, pruneIntervalMs, retentionMs, schema, tableName, }: PostgresSlackInteractiveRequestStoreOptions): PostgresSlackInteractiveRequestStore;
39
+ declare function initializePostgresSlackInteractiveRequestStore({ client, ensureSchema, schema, tableName, }: {
40
+ client: SlackInteractivePostgresClient;
41
+ ensureSchema?: boolean;
42
+ schema?: string;
43
+ tableName?: string;
44
+ }): Promise<void>;
45
+ declare function prunePostgresSlackInteractiveRequestStore({ client, pruneBatchSize, retentionMs, schema, tableName, }: {
46
+ client: SlackInteractivePostgresClient;
47
+ pruneBatchSize?: number;
48
+ retentionMs?: number;
49
+ schema?: string;
50
+ tableName?: string;
51
+ }): Promise<PostgresSlackInteractiveRequestPruneResult>;
52
+
53
+ declare function buildApprovalRequestMessage(request: SlackInteractiveApprovalRequest, actionIds: SlackInteractiveActionIds): {
54
+ text: string;
55
+ blocks: unknown[];
56
+ };
57
+ declare function buildHumanInputRequestMessage(request: SlackInteractiveHumanInputRequest, actionIds: SlackInteractiveActionIds): {
58
+ text: string;
59
+ blocks: unknown[];
60
+ };
61
+ declare function buildResolvedMessage(label: string, resolution: SlackInteractiveResolution): {
62
+ text: string;
63
+ blocks: unknown[];
64
+ };
65
+ declare function buildHumanInputModal(request: SlackInteractiveHumanInputRequest, actionIds: SlackInteractiveActionIds): View;
66
+ declare function encodeActionValue(payload: Record<string, unknown>): string;
67
+ declare function decodeActionValue(value: unknown): Record<string, unknown>;
68
+
69
+ declare function createSlackInteractiveController(options?: SlackInteractiveControllerOptions): SlackInteractiveController;
70
+
71
+ export { type PostgresSlackInteractiveRequestPruneResult, type PostgresSlackInteractiveRequestStore, type PostgresSlackInteractiveRequestStoreOptions, SlackInteractiveActionIds, SlackInteractiveApprovalRequest, SlackInteractiveController, SlackInteractiveControllerOptions, SlackInteractiveHumanInputRequest, type SlackInteractivePostgresClient, SlackInteractiveRequestRecord, SlackInteractiveRequestStore, SlackInteractiveResolution, buildApprovalRequestMessage, buildHumanInputModal, buildHumanInputRequestMessage, buildResolvedMessage, cloneRecord, createInMemorySlackInteractiveRequestStore, createPostgresSlackInteractiveRequestStore, createSlackInteractiveController, decodeActionValue, encodeActionValue, initializePostgresSlackInteractiveRequestStore, nowIso, prunePostgresSlackInteractiveRequestStore };
@@ -5,12 +5,14 @@ import {
5
5
  buildResolvedMessage,
6
6
  cloneRecord,
7
7
  createInMemorySlackInteractiveRequestStore,
8
+ createPostgresSlackInteractiveRequestStore,
8
9
  createSlackInteractiveController,
9
10
  decodeActionValue,
10
11
  encodeActionValue,
11
- nowIso
12
- } from "./chunk-IXY3BXU5.js";
13
- import "./chunk-I2KLQ2HA.js";
12
+ initializePostgresSlackInteractiveRequestStore,
13
+ nowIso,
14
+ prunePostgresSlackInteractiveRequestStore
15
+ } from "../chunk-X7ILLZZP.js";
14
16
  export {
15
17
  buildApprovalRequestMessage,
16
18
  buildHumanInputModal,
@@ -18,8 +20,11 @@ export {
18
20
  buildResolvedMessage,
19
21
  cloneRecord,
20
22
  createInMemorySlackInteractiveRequestStore,
23
+ createPostgresSlackInteractiveRequestStore,
21
24
  createSlackInteractiveController,
22
25
  decodeActionValue,
23
26
  encodeActionValue,
24
- nowIso
27
+ initializePostgresSlackInteractiveRequestStore,
28
+ nowIso,
29
+ prunePostgresSlackInteractiveRequestStore
25
30
  };
package/dist/mcp.js CHANGED
@@ -2,7 +2,6 @@ import {
2
2
  SLACK_MCP_URL,
3
3
  createSlackMcpServerConfig
4
4
  } from "./chunk-RFHXERNL.js";
5
- import "./chunk-I2KLQ2HA.js";
6
5
  export {
7
6
  SLACK_MCP_URL,
8
7
  createSlackMcpServerConfig
@@ -1,4 +1,5 @@
1
1
  import { AgentEvent, ApprovalEvent } from '@cuylabs/agent-core';
2
+ import { SlackFinalResponseArtifactPublisher, SlackFinalResponseArtifactDeliveryMode, SlackFinalResponseArtifactContext, SlackFinalResponseArtifactResult } from './artifacts/index.js';
2
3
  import { a as SlackEventInteractiveRequestHandler } from './interactive-o_NZb-Xg.js';
3
4
 
4
5
  /**
@@ -13,6 +14,9 @@ type HumanInputEvent = Extract<AgentEvent, {
13
14
  type ToolStartEvent = Extract<AgentEvent, {
14
15
  type: "tool-start";
15
16
  }>;
17
+ type ToolResultEvent = Extract<AgentEvent, {
18
+ type: "tool-result";
19
+ }>;
16
20
  interface SlackEventBridgeOptions {
17
21
  showReasoning: boolean;
18
22
  /** Render root-agent tool rows/status updates. */
@@ -24,6 +28,13 @@ interface SlackEventBridgeOptions {
24
28
  formatToolTitle?: (toolName: string) => string;
25
29
  formatToolUpdate: (toolName: string) => string;
26
30
  formatToolDetails?: (event: ToolStartEvent) => string | undefined;
31
+ /**
32
+ * Format the completed tool output shown in Slack task rows.
33
+ *
34
+ * Return `undefined` to use the default generic formatter. Return `null` to
35
+ * intentionally omit task-row output for this tool result.
36
+ */
37
+ formatToolResultOutput?: (event: ToolResultEvent) => string | null | undefined;
27
38
  formatToolError: (toolName: string, error: string) => string;
28
39
  formatReasoningUpdate: () => string;
29
40
  formatMessageText: (text: string) => string;
@@ -65,6 +76,43 @@ interface SlackEventBridgeOptions {
65
76
  chatStreamFinalArgs?: {
66
77
  blocks?: unknown[];
67
78
  } & Record<string, unknown>;
79
+ /**
80
+ * Optional post-processing hook for publishing a rich artifact from the final
81
+ * accumulated response, such as a Slack Canvas for long answers.
82
+ */
83
+ publishFinalResponseArtifact?: SlackFinalResponseArtifactPublisher;
84
+ /**
85
+ * Controls whether artifact publication is additive or becomes the primary
86
+ * final-answer surface.
87
+ *
88
+ * - `supplemental`: finalize the Slack text normally, then publish artifact.
89
+ * - `replace`: publish artifact first and use a compact Slack final message.
90
+ *
91
+ * @default "supplemental"
92
+ */
93
+ finalResponseArtifactMode?: SlackFinalResponseArtifactDeliveryMode;
94
+ /**
95
+ * When replacement mode is active, continue streaming text up to this many
96
+ * raw characters, then suppress further text deltas and publish the full
97
+ * answer as an artifact at completion. This preserves normal short-answer
98
+ * streaming without flooding Slack for long answers.
99
+ *
100
+ * @default 4000
101
+ */
102
+ finalResponseArtifactStreamThreshold?: number;
103
+ /**
104
+ * Notice appended when replacement mode suppresses the remaining text stream.
105
+ */
106
+ formatFinalResponseArtifactContinuationNotice?: (context: Pick<SlackFinalResponseArtifactContext, "text" | "formattedText">) => string;
107
+ /**
108
+ * Final compact message used when an artifact replaces the full Slack text.
109
+ */
110
+ formatFinalResponseArtifactMessage?: (result: SlackFinalResponseArtifactResult, context: SlackFinalResponseArtifactContext) => string;
111
+ /**
112
+ * Called when `publishFinalResponseArtifact` throws. Errors from this hook
113
+ * are swallowed so artifact publication cannot break a completed turn.
114
+ */
115
+ onFinalResponseArtifactError?: (error: unknown, context: SlackFinalResponseArtifactContext) => void | Promise<void>;
68
116
  }
69
117
  declare function resolveSlackEventBridgeOptions(partial: Partial<SlackEventBridgeOptions>): SlackEventBridgeOptions;
70
118
 
@@ -3,7 +3,7 @@ import { AssistantUserMessageMiddleware, AssistantThreadStartedMiddleware, Assis
3
3
  import { WebClient } from '@slack/web-api';
4
4
  import { SlackAuthContext, SlackAssistantThreadContext, SlackAssistantUtilities, SlackTurnPreparation, SlackAssistantTaskDisplayMode, SlackAssistantStatusUpdate, SlackAssistantSuggestedPrompts, SlackChatStreamStartArgs, SlackMessageFormattingOptions } from '@cuylabs/channel-slack/core';
5
5
  import { h as SlackInteractiveRequestHandler } from './interactive-o_NZb-Xg.js';
6
- import { S as SlackEventBridgeOptions } from './options-C7OYeNR-.js';
6
+ import { S as SlackEventBridgeOptions } from './options-BcDReOJv.js';
7
7
  import { SlackFeedbackBlockOptions, SlackFeedbackHandler } from '@cuylabs/channel-slack/feedback';
8
8
  import { ParsedAssistantUserMessage } from '@cuylabs/channel-slack/assistant';
9
9
 
@@ -201,6 +201,7 @@ interface CreateSlackAssistantBridgeOptions {
201
201
  formatToolTitle?: (toolName: string) => string;
202
202
  formatToolUpdate?: (toolName: string) => string;
203
203
  formatToolDetails?: SlackEventBridgeOptions["formatToolDetails"];
204
+ formatToolResultOutput?: SlackEventBridgeOptions["formatToolResultOutput"];
204
205
  formatToolError?: (toolName: string, error: string) => string;
205
206
  formatReasoningUpdate?: () => string;
206
207
  chatStreamBufferSize?: number;
@@ -223,6 +224,30 @@ interface CreateSlackAssistantBridgeOptions {
223
224
  * blocks.
224
225
  */
225
226
  chatStreamFinalArgs?: SlackEventBridgeOptions["chatStreamFinalArgs"];
227
+ /**
228
+ * Optional publisher for rich artifacts derived from the final accumulated
229
+ * answer, such as creating a Slack Canvas for long responses.
230
+ */
231
+ publishFinalResponseArtifact?: SlackEventBridgeOptions["publishFinalResponseArtifact"];
232
+ /**
233
+ * Controls whether final-response artifacts are supplemental or replace long
234
+ * Slack text with a compact artifact pointer.
235
+ *
236
+ * @default "supplemental"
237
+ */
238
+ finalResponseArtifactMode?: SlackEventBridgeOptions["finalResponseArtifactMode"];
239
+ /**
240
+ * Raw-character threshold for replacement-mode streaming suppression.
241
+ *
242
+ * @default 4000
243
+ */
244
+ finalResponseArtifactStreamThreshold?: SlackEventBridgeOptions["finalResponseArtifactStreamThreshold"];
245
+ /** Notice emitted when replacement mode moves the remaining response to an artifact. */
246
+ formatFinalResponseArtifactContinuationNotice?: SlackEventBridgeOptions["formatFinalResponseArtifactContinuationNotice"];
247
+ /** Compact final Slack message emitted after artifact publication succeeds. */
248
+ formatFinalResponseArtifactMessage?: SlackEventBridgeOptions["formatFinalResponseArtifactMessage"];
249
+ /** Diagnostics hook for final-response artifact publishing failures. */
250
+ onFinalResponseArtifactError?: SlackEventBridgeOptions["onFinalResponseArtifactError"];
226
251
  formatChatMarkdown?: SlackMessageFormattingOptions;
227
252
  formatStreamError?: (error: Error) => string;
228
253
  /**
@@ -1,9 +1,11 @@
1
- import { SlackAmbientTurnContext } from '@cuylabs/channel-slack/core';
2
- export * from '@cuylabs/channel-slack/core';
3
- import { AgentEvent, AgentContextFragmentBuildContext, AgentContextFragmentInput, AgentContextFragmentKind, AgentContextFragmentRole, AgentContextFragmentPlacement, AgentContextFragmentLifetime, AgentContextFragmentBudgetBehavior, AgentMiddleware } from '@cuylabs/agent-core';
4
- import { S as SlackEventBridgeOptions } from './options-C7OYeNR-.js';
5
- export { r as resolveSlackEventBridgeOptions } from './options-C7OYeNR-.js';
6
- import './interactive-o_NZb-Xg.js';
1
+ export { D as DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY, S as SlackContextFragmentMiddlewareOptions, a as SlackContextFragmentPayload, b as SlackContextFragmentResolver, c as SlackContextFragmentResolverContext, d as createSlackContextFragmentMiddleware } from '../context-fragments-CQEDcjYR.js';
2
+ import { AgentEvent } from '@cuylabs/agent-core';
3
+ import { S as SlackEventBridgeOptions } from '../options-BcDReOJv.js';
4
+ export { r as resolveSlackEventBridgeOptions } from '../options-BcDReOJv.js';
5
+ import { SlackArtifactClient } from '@cuylabs/channel-slack/artifacts';
6
+ export { S as SlackApprovalRequest, a as SlackEventInteractiveRequestHandler, b as SlackHumanInputRequest, c as SlackInteractiveMessage, d as SlackInteractiveMessageRef, e as SlackInteractiveRequest, f as SlackInteractiveRequestBaseContext, g as SlackInteractiveRequestContext, h as SlackInteractiveRequestHandler, i as SlackInteractiveRequestKind, j as SlackInteractiveResponder } from '../interactive-o_NZb-Xg.js';
7
+ import '@cuylabs/channel-slack/core';
8
+ import '../artifacts/index.js';
7
9
 
8
10
  /**
9
11
  * Slack response-sink contracts consumed by the event bridge.
@@ -13,6 +15,7 @@ import './interactive-o_NZb-Xg.js';
13
15
  * interface separate makes the bridge testable without a live Slack
14
16
  * connection.
15
17
  */
18
+
16
19
  type SlackStreamTaskStatus = "pending" | "in_progress" | "complete" | "error";
17
20
  type SlackStreamChunk = {
18
21
  type: "markdown_text";
@@ -41,7 +44,19 @@ interface SlackChatStream {
41
44
  /**
42
45
  * Minimal Slack posting interface consumed by the event bridge.
43
46
  */
47
+ interface SlackArtifactPublicationTarget {
48
+ channelId: string;
49
+ threadTs?: string;
50
+ }
44
51
  interface SlackResponseSink {
52
+ /**
53
+ * Slack Web API surface used by optional artifact publishers.
54
+ */
55
+ artifactClient?: SlackArtifactClient;
56
+ /**
57
+ * Channel/thread target used by optional artifact publishers.
58
+ */
59
+ artifactTarget?: SlackArtifactPublicationTarget;
45
60
  /**
46
61
  * Post a new message to the channel / thread.
47
62
  * Returns the channel ID and message timestamp needed for updates.
@@ -90,9 +105,8 @@ declare function bridgeAgentEventsToSlack(events: AsyncGenerator<AgentEvent>, si
90
105
  * `human-input-request` event reaches the Slack transport in a mode that
91
106
  * does not support in-channel resolution.
92
107
  *
93
- * Hosts can catch this error to fall back to message-and-error mode or to
94
- * route the request through a custom block / view flow. Future work will
95
- * add a first-class Slack rendering path here.
108
+ * Hosts can catch this error to fall back to message-and-error mode, or install
109
+ * `createSlackInteractiveController` to render and resolve requests in Slack.
96
110
  */
97
111
  declare class UnsupportedSlackInteractiveRequestError extends Error {
98
112
  readonly kind: "approval" | "human-input";
@@ -100,30 +114,4 @@ declare class UnsupportedSlackInteractiveRequestError extends Error {
100
114
  constructor(kind: "approval" | "human-input", requestId: string, message: string);
101
115
  }
102
116
 
103
- declare const DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY = "slackContextFragment";
104
- interface SlackContextFragmentPayload extends Partial<Pick<AgentContextFragmentInput, "budgetBehavior" | "dedupeKey" | "kind" | "lifetime" | "maxChars" | "metadata" | "placement" | "role" | "source" | "title">> {
105
- content: string;
106
- }
107
- interface SlackContextFragmentResolverContext {
108
- slack: Readonly<SlackAmbientTurnContext>;
109
- step: AgentContextFragmentBuildContext;
110
- }
111
- type SlackContextFragmentResolver = (context: SlackContextFragmentResolverContext) => AgentContextFragmentInput | SlackContextFragmentPayload | string | undefined | Promise<AgentContextFragmentInput | SlackContextFragmentPayload | string | undefined>;
112
- interface SlackContextFragmentMiddlewareOptions {
113
- name?: string;
114
- contextKey?: string;
115
- resolve?: SlackContextFragmentResolver;
116
- kind?: AgentContextFragmentKind;
117
- role?: AgentContextFragmentRole;
118
- placement?: AgentContextFragmentPlacement;
119
- lifetime?: AgentContextFragmentLifetime;
120
- title?: string;
121
- source?: string;
122
- budgetBehavior?: AgentContextFragmentBudgetBehavior;
123
- maxChars?: number;
124
- dedupeKey?: string | ((context: SlackContextFragmentResolverContext) => string | undefined);
125
- metadata?: Record<string, unknown> | ((context: SlackContextFragmentResolverContext) => Record<string, unknown> | undefined);
126
- }
127
- declare function createSlackContextFragmentMiddleware(options?: SlackContextFragmentMiddlewareOptions): AgentMiddleware;
128
-
129
- export { DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY, type SlackChatStream, type SlackContextFragmentMiddlewareOptions, type SlackContextFragmentPayload, type SlackContextFragmentResolver, type SlackContextFragmentResolverContext, SlackEventBridgeOptions, type SlackResponseSink, type SlackStreamChunk, type SlackStreamTaskStatus, UnsupportedSlackInteractiveRequestError, bridgeAgentEventsToSlack, createSlackContextFragmentMiddleware };
117
+ export { type SlackArtifactPublicationTarget, type SlackChatStream, SlackEventBridgeOptions, type SlackResponseSink, type SlackStreamChunk, type SlackStreamTaskStatus, UnsupportedSlackInteractiveRequestError, bridgeAgentEventsToSlack };
@@ -1,16 +1,12 @@
1
1
  import {
2
2
  DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY,
3
3
  createSlackContextFragmentMiddleware
4
- } from "./chunk-NIPAN4KA.js";
4
+ } from "../chunk-A2PLAVW6.js";
5
5
  import {
6
6
  UnsupportedSlackInteractiveRequestError,
7
7
  bridgeAgentEventsToSlack,
8
8
  resolveSlackEventBridgeOptions
9
- } from "./chunk-DHPD4XH5.js";
10
- import "./chunk-I2KLQ2HA.js";
11
-
12
- // src/shared.ts
13
- export * from "@cuylabs/channel-slack/core";
9
+ } from "../chunk-TMADMHBN.js";
14
10
  export {
15
11
  DEFAULT_SLACK_CONTEXT_FRAGMENT_KEY,
16
12
  UnsupportedSlackInteractiveRequestError,
package/dist/socket.d.ts CHANGED
@@ -1,16 +1,21 @@
1
1
  import { App } from '@slack/bolt';
2
- import { SlackDirectAuthOptions, CreateSlackSocketBoltAppOptions, SlackDirectAuthMode } from '@cuylabs/channel-slack/bolt';
3
- import { S as SlackAssistantBridge, C as CreateSlackAssistantBridgeOptions, b as SlackAssistantFeedbackConfig } from './options-Uf-qmQKN.js';
2
+ import { CreateSlackSocketBoltAppOptions } from '@cuylabs/channel-slack/transports/socket';
3
+ import { SlackDirectAuthOptions, SlackDirectAuthMode } from '@cuylabs/channel-slack/auth';
4
+ import { S as SlackAssistantBridge, C as CreateSlackAssistantBridgeOptions, b as SlackAssistantFeedbackConfig } from './options-CdqBABcM.js';
4
5
  import { SlackAgentAppSurfaceOptions } from './app-surface.js';
5
6
  import { SlackFeedbackHandler } from '@cuylabs/channel-slack/feedback';
6
7
  import '@cuylabs/agent-core';
7
8
  import '@slack/web-api';
8
9
  import '@cuylabs/channel-slack/core';
9
10
  import './interactive-o_NZb-Xg.js';
10
- import './options-C7OYeNR-.js';
11
+ import './options-BcDReOJv.js';
12
+ import './artifacts/index.js';
13
+ import '@cuylabs/channel-slack/artifacts';
11
14
  import '@cuylabs/channel-slack/assistant';
12
- import './types-BqRzb_Cd.js';
15
+ import './types-CRWzJB5G.js';
13
16
  import './types-Crpil4kb.js';
17
+ import './types-CiwGU6zC.js';
18
+ import '@cuylabs/channel-slack/views';
14
19
 
15
20
  /**
16
21
  * Socket Mode helpers for direct Slack.