@cuylabs/channel-slack-agent-core 0.9.0 → 0.11.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 (52) hide show
  1. package/README.md +13 -10
  2. package/dist/chunk-U6RC4SXN.js +331 -0
  3. package/dist/history/index.d.ts +7 -17
  4. package/dist/index.d.ts +5 -28
  5. package/dist/index.js +14 -58
  6. package/dist/interactive/index.d.ts +86 -7
  7. package/dist/shared/index.d.ts +144 -19
  8. package/dist/shared/index.js +8 -4
  9. package/docs/README.md +0 -1
  10. package/docs/concepts/final-response-artifacts.md +9 -7
  11. package/docs/concepts/tool-task-rendering.md +2 -0
  12. package/docs/reference/exports.md +10 -20
  13. package/package.json +4 -54
  14. package/dist/adapter/index.d.ts +0 -26
  15. package/dist/adapter/index.js +0 -9
  16. package/dist/adapter-vbqtraAr.d.ts +0 -31
  17. package/dist/app-surface.d.ts +0 -82
  18. package/dist/app-surface.js +0 -10
  19. package/dist/app.d.ts +0 -60
  20. package/dist/app.js +0 -11
  21. package/dist/artifacts/index.d.ts +0 -57
  22. package/dist/artifacts/index.js +0 -6
  23. package/dist/assistant/index.d.ts +0 -22
  24. package/dist/assistant/index.js +0 -14
  25. package/dist/chunk-A2PLAVW6.js +0 -75
  26. package/dist/chunk-C7CHMYV6.js +0 -226
  27. package/dist/chunk-D4CSEAIF.js +0 -82
  28. package/dist/chunk-ELR6MQD7.js +0 -12
  29. package/dist/chunk-FJP6ZFUB.js +0 -921
  30. package/dist/chunk-GKZRDNEB.js +0 -187
  31. package/dist/chunk-HHXAXSG6.js +0 -67
  32. package/dist/chunk-JU5R6JZG.js +0 -85
  33. package/dist/chunk-KAEZPS3U.js +0 -77
  34. package/dist/chunk-NNCVHQC4.js +0 -94
  35. package/dist/chunk-VBGQD6JT.js +0 -1008
  36. package/dist/chunk-XA7U3GRN.js +0 -482
  37. package/dist/express-assistant.d.ts +0 -106
  38. package/dist/express-assistant.js +0 -9
  39. package/dist/express.d.ts +0 -103
  40. package/dist/express.js +0 -8
  41. package/dist/feedback/index.d.ts +0 -1
  42. package/dist/feedback/index.js +0 -10
  43. package/dist/options-ByNm2o89.d.ts +0 -323
  44. package/dist/options-CGUfVStV.d.ts +0 -119
  45. package/dist/socket.d.ts +0 -143
  46. package/dist/socket.js +0 -13
  47. package/dist/types-BeGPexio.d.ts +0 -381
  48. package/dist/types-Bz4OYEAV.d.ts +0 -87
  49. package/dist/types-CiwGU6zC.d.ts +0 -56
  50. package/dist/views/index.d.ts +0 -8
  51. package/dist/views/index.js +0 -10
  52. package/docs/concepts/view-workflows.md +0 -52
@@ -1,187 +0,0 @@
1
- import {
2
- createSlackAssistantBridge
3
- } from "./chunk-FJP6ZFUB.js";
4
- import {
5
- createSlackFeedbackBlock
6
- } from "./chunk-ELR6MQD7.js";
7
- import {
8
- createSlackChannelAdapter
9
- } from "./chunk-XA7U3GRN.js";
10
-
11
- // src/app-surface.ts
12
- var DEFAULT_TIMEOUT_MS = 12e4;
13
- var DEFAULT_STREAM_ERROR_MESSAGE = "I ran into an error while preparing this answer. Please try again.";
14
- function installSlackAgentAppSurface(boltApp, options) {
15
- const {
16
- respondToMentions,
17
- respondToMessages,
18
- respondToChannelMessages,
19
- resolveMessage,
20
- feedback: feedbackOption,
21
- onFeedback,
22
- timeoutMs,
23
- logger,
24
- source,
25
- prepareTurn,
26
- resolveSession,
27
- interactive,
28
- viewWorkflows,
29
- ...assistantBridgeOptions
30
- } = options;
31
- const feedbackConfig = feedbackOption === false ? void 0 : feedbackOption ?? (onFeedback ? { onFeedback } : {});
32
- const assistantFeedback = feedbackOption === false ? false : feedbackConfig;
33
- const feedbackBlock = feedbackConfig ? createSlackFeedbackBlock(feedbackConfig) : void 0;
34
- const formatStreamError = assistantBridgeOptions.formatStreamError ?? (() => DEFAULT_STREAM_ERROR_MESSAGE);
35
- const formatting = assistantBridgeOptions.formatChatMarkdown;
36
- const channelSource = createErrorTranslatingSource(source, formatStreamError);
37
- const channelFinalArgs = mergeChatStreamFinalArgs(
38
- assistantBridgeOptions.chatStreamFinalArgs,
39
- feedbackBlock
40
- );
41
- const bridge = createSlackAssistantBridge({
42
- ...assistantBridgeOptions,
43
- source,
44
- ...assistantFeedback !== void 0 ? { feedback: assistantFeedback } : {},
45
- ...timeoutMs !== void 0 ? { timeoutMs } : {},
46
- ...logger ? { logger } : {},
47
- ...prepareTurn ? { prepareTurn: toAssistantPrepareTurn(prepareTurn) } : {},
48
- ...resolveSession ? { resolveSession: toAssistantResolveSession(resolveSession) } : {},
49
- ...interactive ? { handleInteractiveRequest: interactive.handleInteractiveRequest } : {}
50
- });
51
- bridge.install(boltApp);
52
- const channelAdapter = createSlackChannelAdapter({
53
- source: channelSource,
54
- sessionStrategy: assistantBridgeOptions.sessionStrategy,
55
- ...resolveSession ? { resolveSession } : {},
56
- ...prepareTurn ? { prepareTurn } : {},
57
- ...interactive ? { handleInteractiveRequest: interactive.handleInteractiveRequest } : {},
58
- streamingMode: "chat-stream",
59
- showReasoning: assistantBridgeOptions.showReasoning,
60
- showToolUsage: assistantBridgeOptions.showToolUsage,
61
- showSubagentToolUsage: assistantBridgeOptions.showSubagentToolUsage,
62
- showSubagentResultInTask: assistantBridgeOptions.showSubagentResultInTask,
63
- formatToolTitle: assistantBridgeOptions.formatToolTitle,
64
- formatToolUpdate: assistantBridgeOptions.formatToolUpdate,
65
- formatToolDetails: assistantBridgeOptions.formatToolDetails,
66
- formatToolResultOutput: assistantBridgeOptions.formatToolResultOutput,
67
- formatToolError: assistantBridgeOptions.formatToolError,
68
- formatReasoningUpdate: assistantBridgeOptions.formatReasoningUpdate,
69
- chatStreamBufferSize: assistantBridgeOptions.chatStreamBufferSize,
70
- chatStreamStartArgs: {
71
- ...assistantBridgeOptions.chatStreamStartArgs ?? {},
72
- task_display_mode: assistantBridgeOptions.taskDisplayMode ?? "timeline"
73
- },
74
- publishFinalResponseArtifact: assistantBridgeOptions.publishFinalResponseArtifact,
75
- finalResponseArtifactMode: assistantBridgeOptions.finalResponseArtifactMode,
76
- finalResponseArtifactStreamThreshold: assistantBridgeOptions.finalResponseArtifactStreamThreshold,
77
- formatFinalResponseArtifactContinuationNotice: assistantBridgeOptions.formatFinalResponseArtifactContinuationNotice,
78
- formatFinalResponseArtifactMessage: assistantBridgeOptions.formatFinalResponseArtifactMessage,
79
- onFinalResponseArtifactError: assistantBridgeOptions.onFinalResponseArtifactError,
80
- ...typeof assistantBridgeOptions.initialStatus === "object" && assistantBridgeOptions.initialStatus !== null ? { initialStatus: assistantBridgeOptions.initialStatus } : {},
81
- ...formatting?.formatChatMarkdown !== void 0 ? { formatChatMarkdown: formatting.formatChatMarkdown } : {},
82
- ...formatting?.formatMessageText ? { formatMessageText: formatting.formatMessageText } : {},
83
- timeout: timeoutMs ?? DEFAULT_TIMEOUT_MS,
84
- respondToMentions: respondToMentions !== false,
85
- respondToMessages: respondToMessages !== false,
86
- respondToChannelMessages: respondToChannelMessages === true,
87
- ...resolveMessage ? { resolveMessage } : {},
88
- chatStreamFinalArgs: channelFinalArgs,
89
- ...logger ? { logger } : {},
90
- ...logger ? {
91
- onError: async (error, info) => {
92
- logger.warn?.("slack channel turn failed", {
93
- error: formatErrorForLog(error),
94
- channelId: info.channelId,
95
- userId: info.userId
96
- });
97
- }
98
- } : {}
99
- });
100
- channelAdapter.mount(boltApp);
101
- interactive?.install(boltApp);
102
- viewWorkflows?.install(boltApp);
103
- return { bridge };
104
- }
105
- function mergeChatStreamFinalArgs(base, feedbackBlock) {
106
- if (!base && !feedbackBlock) {
107
- return void 0;
108
- }
109
- const configuredBlocks = Array.isArray(base?.blocks) ? base.blocks : [];
110
- const blocks = feedbackBlock ? [...configuredBlocks, feedbackBlock] : configuredBlocks;
111
- return {
112
- ...base ?? {},
113
- ...blocks.length > 0 ? { blocks } : {}
114
- };
115
- }
116
- function toAssistantPrepareTurn(prepareTurn) {
117
- return (request) => prepareTurn(toAppTurnRequest(request));
118
- }
119
- function toAssistantResolveSession(resolveSession) {
120
- return (request) => resolveSession(toAppTurnRequest(request));
121
- }
122
- function toAppTurnRequest(request) {
123
- const user = {
124
- userId: request.message.userId,
125
- channelId: request.message.channelId,
126
- teamId: request.message.teamId ?? request.auth.teamId,
127
- threadTs: request.message.threadTs,
128
- messageTs: request.message.messageTs
129
- };
130
- return {
131
- slackActivity: request.message,
132
- user,
133
- sessionId: request.sessionId,
134
- message: request.message.text,
135
- auth: request.auth,
136
- threadContext: request.threadContext,
137
- assistant: request.assistant,
138
- client: request.client,
139
- rawArgs: request.rawArgs
140
- };
141
- }
142
- function createErrorTranslatingSource(source, formatStreamError) {
143
- return {
144
- chat(sessionId, message, options) {
145
- const events = source.chat(sessionId, message, options);
146
- return translateErrors(events, formatStreamError);
147
- }
148
- };
149
- }
150
- async function* translateErrors(events, formatStreamError) {
151
- try {
152
- for await (const event of events) {
153
- if (event.type === "error") {
154
- yield {
155
- type: "text-delta",
156
- text: `
157
-
158
- ${formatStreamError(toError(event.error))}`
159
- };
160
- yield { type: "complete" };
161
- return;
162
- }
163
- yield event;
164
- }
165
- } catch (error) {
166
- yield {
167
- type: "text-delta",
168
- text: `
169
-
170
- ${formatStreamError(toError(error))}`
171
- };
172
- yield { type: "complete" };
173
- }
174
- }
175
- function toError(value) {
176
- return value instanceof Error ? value : new Error(String(value));
177
- }
178
- function formatErrorForLog(error) {
179
- if (error instanceof Error) {
180
- return error.stack ?? error.message;
181
- }
182
- return String(error);
183
- }
184
-
185
- export {
186
- installSlackAgentAppSurface
187
- };
@@ -1,67 +0,0 @@
1
- import {
2
- installSlackAgentAppSurface
3
- } from "./chunk-GKZRDNEB.js";
4
- import {
5
- createSlackAssistantBridge
6
- } from "./chunk-FJP6ZFUB.js";
7
-
8
- // src/socket.ts
9
- import { createSlackSocketBoltApp } from "@cuylabs/channel-slack/transports/socket";
10
- async function mountSlackAssistantAgentSocket(options) {
11
- const {
12
- appToken: appTokenOption,
13
- botToken: botTokenOption,
14
- auth,
15
- boltAppOptions,
16
- socketModeReceiverOptions,
17
- feedback: feedbackOption,
18
- onFeedback,
19
- start,
20
- ...bridgeOptions
21
- } = options;
22
- const { boltApp, authMode } = await createSlackSocketBoltApp({
23
- appToken: appTokenOption,
24
- botToken: botTokenOption,
25
- auth,
26
- boltAppOptions,
27
- socketModeReceiverOptions
28
- });
29
- const feedback = feedbackOption !== void 0 ? feedbackOption : onFeedback ? { onFeedback } : void 0;
30
- const bridge = createSlackAssistantBridge({
31
- ...bridgeOptions,
32
- ...feedback !== void 0 ? { feedback } : {}
33
- });
34
- bridge.install(boltApp);
35
- if (start !== false) {
36
- await boltApp.start();
37
- }
38
- return { boltApp, bridge, authMode };
39
- }
40
- async function mountSlackAgentAppSocket(options) {
41
- const {
42
- appToken: appTokenOption,
43
- botToken: botTokenOption,
44
- auth,
45
- boltAppOptions,
46
- socketModeReceiverOptions,
47
- start,
48
- ...surfaceOptions
49
- } = options;
50
- const { boltApp, authMode } = await createSlackSocketBoltApp({
51
- appToken: appTokenOption,
52
- botToken: botTokenOption,
53
- auth,
54
- boltAppOptions,
55
- socketModeReceiverOptions
56
- });
57
- const { bridge } = installSlackAgentAppSurface(boltApp, surfaceOptions);
58
- if (start !== false) {
59
- await boltApp.start();
60
- }
61
- return { boltApp, bridge, authMode };
62
- }
63
-
64
- export {
65
- mountSlackAssistantAgentSocket,
66
- mountSlackAgentAppSocket
67
- };
@@ -1,85 +0,0 @@
1
- import {
2
- createSlackAssistantBridge
3
- } from "./chunk-FJP6ZFUB.js";
4
-
5
- // src/express-assistant.ts
6
- import {
7
- createSlackBoltApp
8
- } from "@cuylabs/channel-slack/transports/http";
9
- async function mountSlackAssistantAgent(options) {
10
- const {
11
- botToken,
12
- signingSecret,
13
- auth,
14
- path,
15
- processBeforeResponse,
16
- signatureVerification,
17
- boltAppOptions,
18
- receiverOptions,
19
- port: portOption,
20
- host,
21
- app: providedApp,
22
- feedback: feedbackOption,
23
- onFeedback,
24
- ...bridgeOptions
25
- } = options;
26
- const {
27
- boltApp,
28
- receiver,
29
- app: expressApp,
30
- authMode,
31
- routePath
32
- } = await createSlackBoltApp({
33
- signingSecret,
34
- path,
35
- botToken,
36
- auth,
37
- app: providedApp,
38
- processBeforeResponse,
39
- signatureVerification,
40
- boltAppOptions,
41
- receiverOptions
42
- });
43
- const feedback = feedbackOption !== void 0 ? feedbackOption : onFeedback ? { onFeedback } : void 0;
44
- const bridge = createSlackAssistantBridge({
45
- ...bridgeOptions,
46
- ...feedback !== void 0 ? { feedback } : {}
47
- });
48
- bridge.install(boltApp);
49
- mountReceiverRouter(expressApp, receiver);
50
- const port = portOption === void 0 ? resolvePort(process.env.PORT) : portOption;
51
- let server;
52
- if (!providedApp && port !== null) {
53
- const onListen = () => {
54
- process.stdout.write(
55
- `Slack assistant listening on port ${port} at ${routePath}
56
- `
57
- );
58
- };
59
- server = host ? expressApp.listen(port, host, onListen) : expressApp.listen(port, onListen);
60
- }
61
- return {
62
- app: expressApp,
63
- boltApp,
64
- receiver,
65
- authMode,
66
- routePath,
67
- bridge,
68
- ...server ? { server } : {}
69
- };
70
- }
71
- function resolvePort(port) {
72
- if (!port) return 3e3;
73
- const parsed = Number(port);
74
- if (!Number.isInteger(parsed) || parsed < 0) {
75
- throw new Error(`Invalid PORT value: ${port}`);
76
- }
77
- return parsed;
78
- }
79
- function mountReceiverRouter(app, receiver) {
80
- app.use(receiver.router);
81
- }
82
-
83
- export {
84
- mountSlackAssistantAgent
85
- };
@@ -1,77 +0,0 @@
1
- import {
2
- installSlackAgentAppSurface
3
- } from "./chunk-GKZRDNEB.js";
4
-
5
- // src/app.ts
6
- import {
7
- createSlackBoltApp
8
- } from "@cuylabs/channel-slack/transports/http";
9
- async function mountSlackAgentApp(options) {
10
- const {
11
- botToken,
12
- signingSecret,
13
- auth,
14
- path,
15
- processBeforeResponse,
16
- signatureVerification,
17
- boltAppOptions,
18
- receiverOptions,
19
- port: portOption,
20
- host,
21
- app: providedApp,
22
- ...surfaceOptions
23
- } = options;
24
- const {
25
- boltApp,
26
- receiver,
27
- app: expressApp,
28
- authMode,
29
- routePath
30
- } = await createSlackBoltApp({
31
- signingSecret,
32
- path,
33
- botToken,
34
- auth,
35
- app: providedApp,
36
- processBeforeResponse,
37
- signatureVerification,
38
- boltAppOptions,
39
- receiverOptions
40
- });
41
- const { bridge } = installSlackAgentAppSurface(boltApp, surfaceOptions);
42
- expressApp.use(
43
- receiver.router
44
- );
45
- const port = portOption === void 0 ? resolvePort(process.env.PORT) : portOption;
46
- let server;
47
- if (!providedApp && port !== null) {
48
- const onListen = () => {
49
- process.stdout.write(
50
- `Slack agent app listening on port ${port} at ${routePath}
51
- `
52
- );
53
- };
54
- server = host ? expressApp.listen(port, host, onListen) : expressApp.listen(port, onListen);
55
- }
56
- return {
57
- app: expressApp,
58
- boltApp,
59
- receiver,
60
- authMode,
61
- routePath,
62
- bridge,
63
- ...server ? { server } : {}
64
- };
65
- }
66
- function resolvePort(port) {
67
- if (!port) return 3e3;
68
- const parsed = Number(port);
69
- if (!Number.isInteger(parsed) || parsed < 0) {
70
- throw new Error(`Invalid PORT value: ${port}`);
71
- }
72
- return parsed;
73
- }
74
-
75
- export {
76
- mountSlackAgentApp
77
- };
@@ -1,94 +0,0 @@
1
- // src/artifacts/final-response.ts
2
- import {
3
- publishSlackCanvasArtifact,
4
- publishSlackTextArtifact
5
- } from "@cuylabs/channel-slack/artifacts";
6
- var DEFAULT_MIN_CHARACTERS = 4e3;
7
- var DEFAULT_TITLE = "Agent response";
8
- function createSlackFinalResponseArtifactPublisher({
9
- minCharacters = DEFAULT_MIN_CHARACTERS,
10
- title = DEFAULT_TITLE,
11
- summary,
12
- channelCanvas = true,
13
- fallback = "file",
14
- onPublished,
15
- onError
16
- } = {}) {
17
- const configuredThreshold = Math.floor(minCharacters);
18
- const threshold = Number.isFinite(configuredThreshold) && configuredThreshold > 0 ? configuredThreshold : DEFAULT_MIN_CHARACTERS;
19
- return async (context) => {
20
- const text = context.text.trim();
21
- if (text.length < threshold) {
22
- return void 0;
23
- }
24
- const resolvedTitle = normalizeText(await resolveValue(title, context)) ?? DEFAULT_TITLE;
25
- const resolvedSummary = normalizeText(await resolveValue(summary, context));
26
- let lastError;
27
- try {
28
- const publication = await publishSlackCanvasArtifact({
29
- client: context.client,
30
- channelId: context.channelId,
31
- ...context.threadTs ? { threadTs: context.threadTs } : {},
32
- artifact: {
33
- kind: "canvas",
34
- title: resolvedTitle,
35
- markdown: text,
36
- channelCanvas,
37
- ...resolvedSummary ? { summary: resolvedSummary } : {},
38
- metadata: {
39
- source: "slack-final-response",
40
- characterCount: text.length
41
- }
42
- }
43
- });
44
- const result = { publication };
45
- await onPublished?.(result, context);
46
- return result;
47
- } catch (error) {
48
- lastError = error;
49
- }
50
- if (fallback === "file") {
51
- try {
52
- const publication = await publishSlackTextArtifact({
53
- client: context.client,
54
- channelId: context.channelId,
55
- ...context.threadTs ? { threadTs: context.threadTs } : {},
56
- artifact: {
57
- kind: "text",
58
- title: resolvedTitle,
59
- text,
60
- filename: filenameFromTitle(resolvedTitle),
61
- ...resolvedSummary ? { summary: resolvedSummary } : {},
62
- metadata: {
63
- source: "slack-final-response",
64
- characterCount: text.length,
65
- canvasFallback: true
66
- }
67
- }
68
- });
69
- const result = { publication };
70
- await onPublished?.(result, context);
71
- return result;
72
- } catch (error) {
73
- lastError = error;
74
- }
75
- }
76
- await onError?.(lastError, context);
77
- return void 0;
78
- };
79
- }
80
- async function resolveValue(value, context) {
81
- return typeof value === "function" ? await value(context) : value;
82
- }
83
- function normalizeText(value) {
84
- const trimmed = value?.trim();
85
- return trimmed ? trimmed : void 0;
86
- }
87
- function filenameFromTitle(title) {
88
- const slug = title.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
89
- return `${slug || "agent-response"}.txt`;
90
- }
91
-
92
- export {
93
- createSlackFinalResponseArtifactPublisher
94
- };