@sena-ai/connector-slack 1.4.0 → 1.4.2

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=output.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/output.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { createSlackOutput } from '../connector.js';
3
+ function getText(args) {
4
+ const value = Reflect.get(args, 'text');
5
+ return typeof value === 'string' ? value : '';
6
+ }
7
+ function createSlackMock(overrides) {
8
+ const postCalls = [];
9
+ const updateCalls = [];
10
+ const deleteCalls = [];
11
+ const defaultPostMessage = async (args) => {
12
+ postCalls.push(args);
13
+ return { ok: true, ts: `ts-${postCalls.length}`, channel: 'C0AFW5Y133J' };
14
+ };
15
+ const defaultUpdate = async (args) => {
16
+ updateCalls.push(args);
17
+ return { ok: true, ts: String(args.ts ?? 'ts-1'), channel: 'C0AFW5Y133J' };
18
+ };
19
+ const defaultDelete = async (args) => {
20
+ deleteCalls.push(args);
21
+ return { ok: true };
22
+ };
23
+ const slack = {
24
+ chat: {
25
+ postMessage: overrides?.postMessage ?? defaultPostMessage,
26
+ update: overrides?.update ?? defaultUpdate,
27
+ delete: defaultDelete,
28
+ },
29
+ };
30
+ return { slack, postCalls, updateCalls, deleteCalls };
31
+ }
32
+ describe('createSlackOutput', () => {
33
+ it('keeps oversized live progress in one message instead of posting duplicate thread messages', async () => {
34
+ const { slack, postCalls, updateCalls } = createSlackMock();
35
+ const output = createSlackOutput(slack, { connector: 'slack', conversationId: 'C0AFW5Y133J:1775295864.093159' }, ':loading-dots: 브렌이 생각 중이에요');
36
+ const longA = 'A'.repeat(3200);
37
+ const longB = 'B'.repeat(3600);
38
+ const longC = 'C'.repeat(4000);
39
+ await Promise.all([
40
+ output.showProgress(longA),
41
+ output.showProgress(longB),
42
+ output.showProgress(longC),
43
+ ]);
44
+ expect(postCalls).toHaveLength(1);
45
+ expect(updateCalls).toHaveLength(1);
46
+ expect(getText(updateCalls[0])).toContain('계속 생성 중');
47
+ });
48
+ it('replaces the last growing preview with the final answer instead of duplicating both', async () => {
49
+ const { slack, updateCalls } = createSlackMock();
50
+ const output = createSlackOutput(slack, { connector: 'slack', conversationId: 'C0AFW5Y133J:1775295864.093159' }, ':loading-dots: 브렌이 생각 중이에요');
51
+ await output.showProgress('설정 스펙을 정리하는 중');
52
+ await output.showProgress('설정 스펙을 정리하는 중이고, 중복 전송 원인을 보고 있어요');
53
+ await output.sendResult('설정 스펙을 정리하는 중이고, 중복 전송 원인을 보고 있어요. 이제 같은 내용이 여러 번 나가지 않게 고쳤어요.');
54
+ const lastUpdate = getText(updateCalls[updateCalls.length - 1]);
55
+ expect(lastUpdate).not.toContain('설정 스펙을 정리하는 중이고, 중복 전송 원인을 보고 있어요\n설정 스펙을 정리하는 중이고, 중복 전송 원인을 보고 있어요');
56
+ });
57
+ it('splits a long final answer into non-overlapping continuation messages', async () => {
58
+ const { slack, postCalls, updateCalls } = createSlackMock({
59
+ update: vi.fn(async (args) => {
60
+ updateCalls.push(args);
61
+ const text = String(args.text ?? '');
62
+ if (text.length > 2800) {
63
+ throw new Error('An API error occurred: msg_too_long');
64
+ }
65
+ return { ok: true, ts: String(args.ts ?? 'ts-1'), channel: 'C0AFW5Y133J' };
66
+ }),
67
+ });
68
+ const output = createSlackOutput(slack, { connector: 'slack', conversationId: 'C0AFW5Y133J:1775295864.093159' }, ':loading-dots: 브렌이 생각 중이에요');
69
+ const preview = '설명 '.repeat(850);
70
+ const longText = '설명 '.repeat(1400);
71
+ await output.showProgress(preview);
72
+ await output.sendResult(longText);
73
+ expect(postCalls).toHaveLength(2);
74
+ expect(updateCalls).toHaveLength(2);
75
+ const firstChunk = getText(updateCalls[updateCalls.length - 1]);
76
+ const secondChunk = getText(postCalls[postCalls.length - 1]);
77
+ expect(firstChunk.length).toBeLessThanOrEqual(2600);
78
+ expect(secondChunk.length).toBeLessThanOrEqual(2600);
79
+ expect(firstChunk).not.toBe(secondChunk);
80
+ expect(longText.startsWith(firstChunk)).toBe(true);
81
+ expect(longText.includes(secondChunk)).toBe(true);
82
+ });
83
+ });
84
+ //# sourceMappingURL=output.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.test.js","sourceRoot":"","sources":["../../src/__tests__/output.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=triggers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/triggers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,205 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { mkdtemp, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { WebClient } from '@slack/web-api';
6
+ import { normalizeTriggerConfig, processSlackEvent, resolvePromptSource } from '../connector.js';
7
+ function isRecord(value) {
8
+ return typeof value === 'object' && value !== null;
9
+ }
10
+ function createSlackMock(options) {
11
+ const usersInfo = vi.fn(async ({ user }) => ({
12
+ ok: true,
13
+ user: {
14
+ profile: {
15
+ display_name: `${user}-name`,
16
+ real_name: `${user}-real`,
17
+ },
18
+ },
19
+ }));
20
+ const history = vi.fn(async () => ({
21
+ ok: true,
22
+ messages: options?.historyMessage ? [options.historyMessage] : [],
23
+ }));
24
+ const replies = vi.fn(async () => ({ ok: true, messages: [] }));
25
+ const addReaction = vi.fn(async () => ({ ok: true }));
26
+ const slack = {
27
+ users: { info: usersInfo },
28
+ conversations: { history, replies },
29
+ reactions: { add: addReaction },
30
+ auth: {
31
+ test: vi.fn(async () => ({ ok: true, user_id: 'UBOT' })),
32
+ },
33
+ };
34
+ return { slack, usersInfo, history, replies, addReaction };
35
+ }
36
+ function createEngineMock() {
37
+ const submitTurn = vi.fn(async () => { });
38
+ const abortConversation = vi.fn(() => true);
39
+ return {
40
+ submitTurn,
41
+ abortConversation,
42
+ };
43
+ }
44
+ function firstSubmittedEvent(engine) {
45
+ expect(engine.submitTurn).toHaveBeenCalledOnce();
46
+ const inbound = engine.submitTurn.mock.calls[0]?.[0];
47
+ expect(inbound).toBeDefined();
48
+ return inbound;
49
+ }
50
+ describe('slack trigger config', () => {
51
+ it('uses legacy defaults only when triggers are omitted', () => {
52
+ const legacy = normalizeTriggerConfig(undefined);
53
+ const explicit = normalizeTriggerConfig({ mention: '' });
54
+ expect(legacy.mention).toBe('');
55
+ expect(legacy.thread).toBe('');
56
+ expect(legacy.reactions.x).toEqual({ action: 'abort' });
57
+ expect(explicit.mention).toBe('');
58
+ expect(explicit.thread).toBeUndefined();
59
+ expect(explicit.reactions).toEqual({});
60
+ });
61
+ it('resolves prompt files from the provided base directory', async () => {
62
+ const dir = await mkdtemp(join(tmpdir(), 'sena-slack-trigger-'));
63
+ const promptPath = join(dir, 'mention.md');
64
+ await writeFile(promptPath, '멘션 프롬프트');
65
+ const resolved = await resolvePromptSource({ file: './mention.md' }, dir);
66
+ expect(resolved).toBe('멘션 프롬프트');
67
+ });
68
+ });
69
+ describe('processSlackEvent', () => {
70
+ it('falls through to the next message trigger when a higher-priority filter returns false', async () => {
71
+ const { slack } = createSlackMock();
72
+ const engine = createEngineMock();
73
+ const userNameCache = new Map();
74
+ const activeThreads = new Set();
75
+ const processedEvents = new Set();
76
+ const processingEvents = new Set();
77
+ const mentionFilter = vi.fn(() => false);
78
+ const triggerConfig = normalizeTriggerConfig({
79
+ mention: { text: 'mention prompt', filter: mentionFilter },
80
+ channel: { text: 'channel prompt' },
81
+ });
82
+ await processSlackEvent({
83
+ event: {
84
+ type: 'message',
85
+ channel: 'C1',
86
+ ts: '100.1',
87
+ user: 'U1',
88
+ text: '<@UBOT> hello',
89
+ },
90
+ }, engine, slack, 'xoxb-token', userNameCache, activeThreads, processedEvents, processingEvents, triggerConfig, '/tmp', 'UBOT');
91
+ expect(mentionFilter).toHaveBeenCalledOnce();
92
+ const inbound = firstSubmittedEvent(engine);
93
+ expect(isRecord(inbound.raw) ? inbound.raw.triggerKind : undefined).toBe('channel');
94
+ expect(inbound.text).toContain('channel prompt');
95
+ expect(inbound.userName).toBe('U1-name');
96
+ });
97
+ it('hydrates reaction filter events with actor and target message fields', async () => {
98
+ const filter = vi.fn(() => true);
99
+ const { slack } = createSlackMock({
100
+ historyMessage: {
101
+ ts: '200.2',
102
+ text: '대상 메시지',
103
+ user: 'U_TARGET',
104
+ },
105
+ });
106
+ const engine = createEngineMock();
107
+ await processSlackEvent({
108
+ event: {
109
+ type: 'reaction_added',
110
+ reaction: 'eyes',
111
+ user: 'U_ACTOR',
112
+ event_ts: '300.3',
113
+ item: {
114
+ type: 'message',
115
+ channel: 'C1',
116
+ ts: '200.2',
117
+ },
118
+ },
119
+ }, engine, slack, 'xoxb-token', new Map(), new Set(), new Set(), new Set(), normalizeTriggerConfig({
120
+ reactions: {
121
+ eyes: { text: 'reaction prompt', filter },
122
+ },
123
+ }), '/tmp', 'UBOT');
124
+ expect(filter).toHaveBeenCalledWith(expect.objectContaining({
125
+ kind: 'reaction',
126
+ userId: 'U_ACTOR',
127
+ userName: 'U_ACTOR-name',
128
+ messageUserId: 'U_TARGET',
129
+ messageUserName: 'U_TARGET-name',
130
+ threadTs: '200.2',
131
+ text: '대상 메시지',
132
+ }));
133
+ const inbound = firstSubmittedEvent(engine);
134
+ expect(inbound.conversationId).toBe('C1:200.2');
135
+ expect(inbound.text).toContain('reaction prompt');
136
+ expect(inbound.text).toContain('messageUserId: U_TARGET');
137
+ });
138
+ it('exposes bot-authored reacted messages via messageBotId', async () => {
139
+ const filter = vi.fn(() => true);
140
+ const { slack } = createSlackMock({
141
+ historyMessage: {
142
+ ts: '210.2',
143
+ text: '봇이 쓴 메시지',
144
+ bot_id: 'B_BREN',
145
+ username: '브렌',
146
+ },
147
+ });
148
+ const engine = createEngineMock();
149
+ await processSlackEvent({
150
+ event: {
151
+ type: 'reaction_added',
152
+ reaction: 'eyes',
153
+ user: 'U_ACTOR',
154
+ event_ts: '301.3',
155
+ item: {
156
+ type: 'message',
157
+ channel: 'C1',
158
+ ts: '210.2',
159
+ },
160
+ },
161
+ }, engine, slack, 'xoxb-token', new Map(), new Set(), new Set(), new Set(), normalizeTriggerConfig({
162
+ reactions: {
163
+ eyes: { text: 'reaction prompt', filter },
164
+ },
165
+ }), '/tmp', 'UBOT');
166
+ expect(filter).toHaveBeenCalledWith(expect.objectContaining({
167
+ userId: 'U_ACTOR',
168
+ messageUserId: undefined,
169
+ messageBotId: 'B_BREN',
170
+ threadTs: '210.2',
171
+ }));
172
+ });
173
+ it('aborts the conversation selected by the reacted message thread ts', async () => {
174
+ const { slack, addReaction } = createSlackMock({
175
+ historyMessage: {
176
+ ts: '220.2',
177
+ thread_ts: '220.0',
178
+ text: '스레드 메시지',
179
+ user: 'U_TARGET',
180
+ },
181
+ });
182
+ const engine = createEngineMock();
183
+ await processSlackEvent({
184
+ event: {
185
+ type: 'reaction_added',
186
+ reaction: 'x',
187
+ user: 'U_ACTOR',
188
+ event_ts: '302.3',
189
+ item: {
190
+ type: 'message',
191
+ channel: 'C1',
192
+ ts: '220.2',
193
+ },
194
+ },
195
+ }, engine, slack, 'xoxb-token', new Map(), new Set(), new Set(), new Set(), normalizeTriggerConfig({
196
+ reactions: {
197
+ x: { action: 'abort' },
198
+ },
199
+ }), '/tmp', 'UBOT');
200
+ expect(engine.abortConversation).toHaveBeenCalledWith('C1:220.0');
201
+ expect(addReaction).toHaveBeenCalledWith({ channel: 'C1', name: 'x', timestamp: '220.2' });
202
+ expect(engine.submitTurn).not.toHaveBeenCalled();
203
+ });
204
+ });
205
+ //# sourceMappingURL=triggers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.test.js","sourceRoot":"","sources":["../../src/__tests__/triggers.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,71 @@
1
- import type { Connector } from '@sena-ai/core';
1
+ import type { Connector, ConnectorOutput, ConnectorOutputContext, TurnEngine } from '@sena-ai/core';
2
+ import { WebClient } from '@slack/web-api';
3
+ export type SlackMessageTriggerEvent = {
4
+ kind: 'mention' | 'thread' | 'channel';
5
+ channelId: string;
6
+ userId: string;
7
+ userName?: string;
8
+ text: string;
9
+ ts: string;
10
+ threadTs?: string;
11
+ files?: Array<{
12
+ id?: string;
13
+ name?: string;
14
+ mimeType?: string;
15
+ }>;
16
+ raw: unknown;
17
+ };
18
+ export type SlackReactionTriggerEvent = {
19
+ kind: 'reaction';
20
+ channelId: string;
21
+ userId: string;
22
+ userName?: string;
23
+ messageUserId?: string;
24
+ messageUserName?: string;
25
+ messageBotId?: string;
26
+ text: string;
27
+ ts: string;
28
+ threadTs: string;
29
+ reaction: string;
30
+ files?: Array<{
31
+ id?: string;
32
+ name?: string;
33
+ mimeType?: string;
34
+ }>;
35
+ raw: unknown;
36
+ };
37
+ export type SlackMessageTriggerFilter = (event: SlackMessageTriggerEvent) => boolean | void | Promise<boolean | void>;
38
+ export type SlackReactionTriggerFilter = (event: SlackReactionTriggerEvent) => boolean | void | Promise<boolean | void>;
39
+ export type SlackMessagePromptTrigger = string | {
40
+ text: string;
41
+ filter?: SlackMessageTriggerFilter;
42
+ } | {
43
+ file: string;
44
+ filter?: SlackMessageTriggerFilter;
45
+ };
46
+ export type SlackReactionPromptTrigger = string | {
47
+ text: string;
48
+ filter?: SlackReactionTriggerFilter;
49
+ } | {
50
+ file: string;
51
+ filter?: SlackReactionTriggerFilter;
52
+ };
53
+ export type SlackReactionRule = SlackReactionPromptTrigger | {
54
+ action: 'abort';
55
+ filter?: SlackReactionTriggerFilter;
56
+ };
57
+ export type SlackTriggerConfig = {
58
+ mention?: SlackMessagePromptTrigger;
59
+ thread?: SlackMessagePromptTrigger;
60
+ channel?: SlackMessagePromptTrigger;
61
+ reactions?: Record<string, SlackReactionRule>;
62
+ };
2
63
  export type SlackConnectorOptions = {
3
64
  appId: string;
4
65
  botToken: string;
5
66
  /** Message shown immediately when a turn starts (e.g. ":loading-dots: *세나가 생각중이에요*"). Set to false to disable. */
6
67
  thinkingMessage?: string | false;
68
+ triggers?: SlackTriggerConfig;
7
69
  } & ({
8
70
  /** HTTP Events API mode (default). Requires a public endpoint + signingSecret. */
9
71
  mode?: 'http';
@@ -16,5 +78,59 @@ export type SlackConnectorOptions = {
16
78
  appToken: string;
17
79
  signingSecret?: never;
18
80
  });
81
+ export type SlackChatApi = {
82
+ postMessage: WebClient['chat']['postMessage'];
83
+ update: WebClient['chat']['update'];
84
+ delete: WebClient['chat']['delete'];
85
+ };
86
+ export type SlackClientLike = {
87
+ chat: SlackChatApi;
88
+ };
89
+ type NormalizedSlackTriggerConfig = {
90
+ mention?: SlackMessagePromptTrigger;
91
+ thread?: SlackMessagePromptTrigger;
92
+ channel?: SlackMessagePromptTrigger;
93
+ reactions: Record<string, SlackReactionRule>;
94
+ };
95
+ type ParsedSlackFile = {
96
+ id: string;
97
+ name: string;
98
+ mimetype: string;
99
+ url_private?: string;
100
+ };
101
+ type ParsedSlackMessageEvent = {
102
+ type: 'app_mention' | 'message';
103
+ channel: string;
104
+ ts: string;
105
+ userId: string;
106
+ text: string;
107
+ threadTs?: string;
108
+ files: ParsedSlackFile[];
109
+ subtype?: string;
110
+ botId?: string;
111
+ };
112
+ type MessageTriggerKind = 'mention' | 'thread' | 'channel';
113
+ type MessageCandidate = {
114
+ kind: MessageTriggerKind;
115
+ source: SlackMessagePromptTrigger;
116
+ };
117
+ export declare function normalizeTriggerConfig(triggers?: SlackTriggerConfig): NormalizedSlackTriggerConfig;
118
+ export declare function resolvePromptSource(source: SlackMessagePromptTrigger | SlackReactionPromptTrigger, baseDir: string): Promise<string>;
119
+ export declare function selectMessageCandidates(event: ParsedSlackMessageEvent, triggerConfig: NormalizedSlackTriggerConfig, activeThreads: Set<string>, botUserId: string | undefined): MessageCandidate[];
120
+ export declare function processSlackEvent(body: Record<string, unknown>, engine: TurnEngine, slack: WebClient, botToken: string, userNameCache: Map<string, string>, activeThreads: Set<string>, processedEvents: Set<string>, processingEvents: Set<string>, triggerConfig: NormalizedSlackTriggerConfig, promptBaseDir: string, botUserId?: string): Promise<void>;
19
121
  export declare function slackConnector(options: SlackConnectorOptions): Connector;
122
+ /**
123
+ * Slack Output with step accumulation.
124
+ *
125
+ * Instead of overwriting a single "thinking" message each time, this output
126
+ * detects step boundaries (each Claude assistant message = one step) and
127
+ * accumulates them into a growing Slack message. When Slack block limits
128
+ * are reached, a new overflow message is created automatically.
129
+ *
130
+ * Step detection: when `showProgress(text)` receives text that does NOT
131
+ * start with the previous text, it means a new assistant message has started
132
+ * (= new step). The previous text is flushed to the completed-steps buffer.
133
+ */
134
+ export declare function createSlackOutput(slack: SlackClientLike, context: ConnectorOutputContext, thinkingMessage?: string | false): ConnectorOutput;
135
+ export {};
20
136
  //# sourceMappingURL=connector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAiG,MAAM,eAAe,CAAA;AAS7I,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,kHAAkH;IAClH,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CACjC,GAAG,CACA;IACE,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAA;CACjB,GACD;IACE,qFAAqF;IACrF,IAAI,EAAE,QAAQ,CAAA;IACd,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,KAAK,CAAA;CACtB,CACJ,CAAA;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CA2GxE"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}