oh-my-claude-sisyphus 3.6.0 → 3.6.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.
- package/commands/omc-setup.md +3 -3
- package/commands/psm.md +180 -0
- package/commands/release.md +1 -1
- package/dist/__tests__/analytics/transcript-scanner.test.js +69 -27
- package/dist/__tests__/analytics/transcript-scanner.test.js.map +1 -1
- package/dist/__tests__/installer.test.js +2 -1
- package/dist/__tests__/installer.test.js.map +1 -1
- package/dist/analytics/session-manager.d.ts +24 -0
- package/dist/analytics/session-manager.d.ts.map +1 -1
- package/dist/analytics/session-manager.js +98 -9
- package/dist/analytics/session-manager.js.map +1 -1
- package/dist/analytics/transcript-scanner.d.ts +9 -8
- package/dist/analytics/transcript-scanner.d.ts.map +1 -1
- package/dist/analytics/transcript-scanner.js +146 -16
- package/dist/analytics/transcript-scanner.js.map +1 -1
- package/dist/hooks/empty-message-sanitizer/__tests__/index.test.d.ts +2 -0
- package/dist/hooks/empty-message-sanitizer/__tests__/index.test.d.ts.map +1 -0
- package/dist/hooks/empty-message-sanitizer/__tests__/index.test.js +416 -0
- package/dist/hooks/empty-message-sanitizer/__tests__/index.test.js.map +1 -0
- package/dist/hooks/keyword-detector/__tests__/index.test.d.ts +2 -0
- package/dist/hooks/keyword-detector/__tests__/index.test.d.ts.map +1 -0
- package/dist/hooks/keyword-detector/__tests__/index.test.js +427 -0
- package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -0
- package/dist/hooks/subagent-tracker/index.d.ts +83 -0
- package/dist/hooks/subagent-tracker/index.d.ts.map +1 -0
- package/dist/hooks/subagent-tracker/index.js +207 -0
- package/dist/hooks/subagent-tracker/index.js.map +1 -0
- package/dist/hooks/think-mode/__tests__/index.test.d.ts +2 -0
- package/dist/hooks/think-mode/__tests__/index.test.d.ts.map +1 -0
- package/dist/hooks/think-mode/__tests__/index.test.js +556 -0
- package/dist/hooks/think-mode/__tests__/index.test.js.map +1 -0
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +8 -0
- package/dist/installer/index.js.map +1 -1
- package/docs/design/project-session-manager.md +1033 -0
- package/package.json +1 -1
- package/skills/omc-setup/SKILL.md +27 -3
- package/skills/project-session-manager/SKILL.md +410 -0
- package/skills/project-session-manager/lib/config.sh +86 -0
- package/skills/project-session-manager/lib/parse.sh +121 -0
- package/skills/project-session-manager/lib/session.sh +132 -0
- package/skills/project-session-manager/lib/tmux.sh +103 -0
- package/skills/project-session-manager/lib/worktree.sh +171 -0
- package/skills/project-session-manager/psm.sh +629 -0
- package/skills/project-session-manager/templates/feature.md +56 -0
- package/skills/project-session-manager/templates/issue-fix.md +57 -0
- package/skills/project-session-manager/templates/pr-review.md +65 -0
- package/skills/project-session-manager/templates/projects.json +19 -0
- package/skills/release/SKILL.md +1 -1
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { hasTextContent, isToolPart, hasValidContent, sanitizeMessage, sanitizeMessages, createEmptyMessageSanitizerHook, PLACEHOLDER_TEXT, TOOL_PART_TYPES, HOOK_NAME, } from '../index.js';
|
|
3
|
+
// Helper to create message parts
|
|
4
|
+
function createTextPart(text, id) {
|
|
5
|
+
return {
|
|
6
|
+
id: id || `part-${Date.now()}`,
|
|
7
|
+
type: 'text',
|
|
8
|
+
text,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function createToolPart(type, id) {
|
|
12
|
+
return {
|
|
13
|
+
id: id || `part-${Date.now()}`,
|
|
14
|
+
type,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
// Helper to create messages
|
|
18
|
+
function createMessage(role, parts, id) {
|
|
19
|
+
return {
|
|
20
|
+
info: {
|
|
21
|
+
id: id || `msg-${Date.now()}`,
|
|
22
|
+
role,
|
|
23
|
+
sessionID: 'test-session',
|
|
24
|
+
},
|
|
25
|
+
parts,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
describe('empty-message-sanitizer', () => {
|
|
29
|
+
describe('hasTextContent', () => {
|
|
30
|
+
it('should return true for part with non-empty text', () => {
|
|
31
|
+
const part = createTextPart('Hello');
|
|
32
|
+
expect(hasTextContent(part)).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
it('should return false for part with empty text', () => {
|
|
35
|
+
const part = createTextPart('');
|
|
36
|
+
expect(hasTextContent(part)).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
it('should return false for part with whitespace only', () => {
|
|
39
|
+
const part = createTextPart(' \n\t ');
|
|
40
|
+
expect(hasTextContent(part)).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
it('should return false for part with undefined text', () => {
|
|
43
|
+
const part = createTextPart(undefined);
|
|
44
|
+
expect(hasTextContent(part)).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
it('should return false for non-text part types', () => {
|
|
47
|
+
const part = createToolPart('tool_use');
|
|
48
|
+
expect(hasTextContent(part)).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
it('should return true for text with only newlines but also content', () => {
|
|
51
|
+
const part = createTextPart('\nHello\n');
|
|
52
|
+
expect(hasTextContent(part)).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
it('should return false for null-like text value', () => {
|
|
55
|
+
const part = { type: 'text', text: null };
|
|
56
|
+
expect(hasTextContent(part)).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe('isToolPart', () => {
|
|
60
|
+
it('should return true for tool part type', () => {
|
|
61
|
+
const part = createToolPart('tool');
|
|
62
|
+
expect(isToolPart(part)).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
it('should return true for tool_use part type', () => {
|
|
65
|
+
const part = createToolPart('tool_use');
|
|
66
|
+
expect(isToolPart(part)).toBe(true);
|
|
67
|
+
});
|
|
68
|
+
it('should return true for tool_result part type', () => {
|
|
69
|
+
const part = createToolPart('tool_result');
|
|
70
|
+
expect(isToolPart(part)).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it('should return false for text part type', () => {
|
|
73
|
+
const part = createTextPart('text content');
|
|
74
|
+
expect(isToolPart(part)).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('should return false for image part type', () => {
|
|
77
|
+
const part = { type: 'image' };
|
|
78
|
+
expect(isToolPart(part)).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
it('should return false for unknown part type', () => {
|
|
81
|
+
const part = { type: 'unknown_type' };
|
|
82
|
+
expect(isToolPart(part)).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it('should use TOOL_PART_TYPES constant', () => {
|
|
85
|
+
expect(TOOL_PART_TYPES.has('tool')).toBe(true);
|
|
86
|
+
expect(TOOL_PART_TYPES.has('tool_use')).toBe(true);
|
|
87
|
+
expect(TOOL_PART_TYPES.has('tool_result')).toBe(true);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe('hasValidContent', () => {
|
|
91
|
+
it('should return true for parts with non-empty text', () => {
|
|
92
|
+
const parts = [createTextPart('Hello')];
|
|
93
|
+
expect(hasValidContent(parts)).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
it('should return true for parts with tool part', () => {
|
|
96
|
+
const parts = [createToolPart('tool_use')];
|
|
97
|
+
expect(hasValidContent(parts)).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
it('should return true for parts with both text and tool', () => {
|
|
100
|
+
const parts = [
|
|
101
|
+
createTextPart('Hello'),
|
|
102
|
+
createToolPart('tool_use'),
|
|
103
|
+
];
|
|
104
|
+
expect(hasValidContent(parts)).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
it('should return false for empty parts array', () => {
|
|
107
|
+
expect(hasValidContent([])).toBe(false);
|
|
108
|
+
});
|
|
109
|
+
it('should return false for parts with only empty text', () => {
|
|
110
|
+
const parts = [createTextPart(''), createTextPart(' ')];
|
|
111
|
+
expect(hasValidContent(parts)).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
it('should return false for parts with undefined text', () => {
|
|
114
|
+
const parts = [createTextPart(undefined)];
|
|
115
|
+
expect(hasValidContent(parts)).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
it('should return true when one part has valid text among empties', () => {
|
|
118
|
+
const parts = [
|
|
119
|
+
createTextPart(''),
|
|
120
|
+
createTextPart('Valid'),
|
|
121
|
+
createTextPart(' '),
|
|
122
|
+
];
|
|
123
|
+
expect(hasValidContent(parts)).toBe(true);
|
|
124
|
+
});
|
|
125
|
+
it('should return true when tool part exists among empty text parts', () => {
|
|
126
|
+
const parts = [
|
|
127
|
+
createTextPart(''),
|
|
128
|
+
createToolPart('tool_result'),
|
|
129
|
+
];
|
|
130
|
+
expect(hasValidContent(parts)).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe('sanitizeMessage', () => {
|
|
134
|
+
it('should not modify message with valid text content', () => {
|
|
135
|
+
const message = createMessage('user', [createTextPart('Hello')]);
|
|
136
|
+
const result = sanitizeMessage(message, false);
|
|
137
|
+
expect(result).toBe(false);
|
|
138
|
+
expect(message.parts[0].text).toBe('Hello');
|
|
139
|
+
});
|
|
140
|
+
it('should not modify message with tool part', () => {
|
|
141
|
+
const message = createMessage('assistant', [createToolPart('tool_use')]);
|
|
142
|
+
const result = sanitizeMessage(message, false);
|
|
143
|
+
expect(result).toBe(false);
|
|
144
|
+
});
|
|
145
|
+
it('should skip final assistant message', () => {
|
|
146
|
+
const message = createMessage('assistant', []);
|
|
147
|
+
const result = sanitizeMessage(message, true);
|
|
148
|
+
expect(result).toBe(false);
|
|
149
|
+
expect(message.parts.length).toBe(0);
|
|
150
|
+
});
|
|
151
|
+
it('should sanitize non-final assistant message with empty content', () => {
|
|
152
|
+
const message = createMessage('assistant', []);
|
|
153
|
+
const result = sanitizeMessage(message, false);
|
|
154
|
+
expect(result).toBe(true);
|
|
155
|
+
expect(message.parts.length).toBe(1);
|
|
156
|
+
expect(message.parts[0].text).toBe(PLACEHOLDER_TEXT);
|
|
157
|
+
expect(message.parts[0].synthetic).toBe(true);
|
|
158
|
+
});
|
|
159
|
+
it('should sanitize user message with empty parts array', () => {
|
|
160
|
+
const message = createMessage('user', []);
|
|
161
|
+
const result = sanitizeMessage(message, false);
|
|
162
|
+
expect(result).toBe(true);
|
|
163
|
+
expect(message.parts.length).toBe(1);
|
|
164
|
+
expect(message.parts[0].text).toBe(PLACEHOLDER_TEXT);
|
|
165
|
+
});
|
|
166
|
+
it('should replace existing empty text part', () => {
|
|
167
|
+
const message = createMessage('user', [createTextPart('')]);
|
|
168
|
+
const result = sanitizeMessage(message, false);
|
|
169
|
+
expect(result).toBe(true);
|
|
170
|
+
expect(message.parts.length).toBe(1);
|
|
171
|
+
expect(message.parts[0].text).toBe(PLACEHOLDER_TEXT);
|
|
172
|
+
expect(message.parts[0].synthetic).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
it('should replace whitespace-only text part', () => {
|
|
175
|
+
const message = createMessage('user', [createTextPart(' \n ')]);
|
|
176
|
+
const result = sanitizeMessage(message, false);
|
|
177
|
+
expect(result).toBe(true);
|
|
178
|
+
expect(message.parts[0].text).toBe(PLACEHOLDER_TEXT);
|
|
179
|
+
});
|
|
180
|
+
it('should insert text part before tool part when no text exists', () => {
|
|
181
|
+
const message = createMessage('user', [createToolPart('tool_use')]);
|
|
182
|
+
const originalLength = message.parts.length;
|
|
183
|
+
const result = sanitizeMessage(message, false);
|
|
184
|
+
expect(result).toBe(false); // Tool part counts as valid content
|
|
185
|
+
});
|
|
186
|
+
it('should append text part when no tool parts exist', () => {
|
|
187
|
+
const message = createMessage('user', []);
|
|
188
|
+
sanitizeMessage(message, false);
|
|
189
|
+
expect(message.parts.length).toBe(1);
|
|
190
|
+
expect(message.parts[0].type).toBe('text');
|
|
191
|
+
});
|
|
192
|
+
it('should use custom placeholder text', () => {
|
|
193
|
+
const message = createMessage('user', []);
|
|
194
|
+
const customPlaceholder = '[custom placeholder]';
|
|
195
|
+
sanitizeMessage(message, false, customPlaceholder);
|
|
196
|
+
expect(message.parts[0].text).toBe(customPlaceholder);
|
|
197
|
+
});
|
|
198
|
+
it('should set synthetic flag on injected parts', () => {
|
|
199
|
+
const message = createMessage('user', []);
|
|
200
|
+
sanitizeMessage(message, false);
|
|
201
|
+
expect(message.parts[0].synthetic).toBe(true);
|
|
202
|
+
});
|
|
203
|
+
it('should sanitize empty text parts alongside valid content', () => {
|
|
204
|
+
const message = createMessage('user', [
|
|
205
|
+
createTextPart('Valid'),
|
|
206
|
+
createTextPart(''),
|
|
207
|
+
]);
|
|
208
|
+
const result = sanitizeMessage(message, false);
|
|
209
|
+
expect(result).toBe(true);
|
|
210
|
+
expect(message.parts[1].text).toBe(PLACEHOLDER_TEXT);
|
|
211
|
+
expect(message.parts[1].synthetic).toBe(true);
|
|
212
|
+
});
|
|
213
|
+
it('should not modify non-empty text alongside empty text', () => {
|
|
214
|
+
const message = createMessage('user', [
|
|
215
|
+
createTextPart('Valid'),
|
|
216
|
+
createTextPart(''),
|
|
217
|
+
]);
|
|
218
|
+
sanitizeMessage(message, false);
|
|
219
|
+
expect(message.parts[0].text).toBe('Valid');
|
|
220
|
+
expect(message.parts[0].synthetic).toBeUndefined();
|
|
221
|
+
});
|
|
222
|
+
it('should handle message with multiple empty text parts', () => {
|
|
223
|
+
const message = createMessage('user', [
|
|
224
|
+
createTextPart(''),
|
|
225
|
+
createTextPart(' '),
|
|
226
|
+
]);
|
|
227
|
+
sanitizeMessage(message, false);
|
|
228
|
+
// First empty text part should be replaced
|
|
229
|
+
expect(message.parts[0].text).toBe(PLACEHOLDER_TEXT);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
describe('sanitizeMessages', () => {
|
|
233
|
+
it('should sanitize all messages in input', () => {
|
|
234
|
+
const input = {
|
|
235
|
+
messages: [
|
|
236
|
+
createMessage('user', []),
|
|
237
|
+
createMessage('assistant', [createTextPart('')]),
|
|
238
|
+
createMessage('user', [createTextPart('Valid')]),
|
|
239
|
+
],
|
|
240
|
+
};
|
|
241
|
+
const result = sanitizeMessages(input);
|
|
242
|
+
expect(result.sanitizedCount).toBe(2);
|
|
243
|
+
expect(result.modified).toBe(true);
|
|
244
|
+
});
|
|
245
|
+
it('should return modified false when no sanitization needed', () => {
|
|
246
|
+
const input = {
|
|
247
|
+
messages: [
|
|
248
|
+
createMessage('user', [createTextPart('Hello')]),
|
|
249
|
+
createMessage('assistant', [createTextPart('World')]),
|
|
250
|
+
],
|
|
251
|
+
};
|
|
252
|
+
const result = sanitizeMessages(input);
|
|
253
|
+
expect(result.sanitizedCount).toBe(0);
|
|
254
|
+
expect(result.modified).toBe(false);
|
|
255
|
+
});
|
|
256
|
+
it('should skip final assistant message', () => {
|
|
257
|
+
const input = {
|
|
258
|
+
messages: [
|
|
259
|
+
createMessage('user', [createTextPart('Hello')]),
|
|
260
|
+
createMessage('assistant', []), // Last message, assistant with empty content
|
|
261
|
+
],
|
|
262
|
+
};
|
|
263
|
+
const result = sanitizeMessages(input);
|
|
264
|
+
expect(result.sanitizedCount).toBe(0);
|
|
265
|
+
expect(input.messages[1].parts.length).toBe(0);
|
|
266
|
+
});
|
|
267
|
+
it('should use custom placeholder text from config', () => {
|
|
268
|
+
const input = {
|
|
269
|
+
messages: [createMessage('user', [])],
|
|
270
|
+
};
|
|
271
|
+
const result = sanitizeMessages(input, { placeholderText: '[custom]' });
|
|
272
|
+
expect(input.messages[0].parts[0].text).toBe('[custom]');
|
|
273
|
+
});
|
|
274
|
+
it('should return messages array in output', () => {
|
|
275
|
+
const input = {
|
|
276
|
+
messages: [createMessage('user', [createTextPart('Test')])],
|
|
277
|
+
};
|
|
278
|
+
const result = sanitizeMessages(input);
|
|
279
|
+
expect(result.messages).toBe(input.messages);
|
|
280
|
+
});
|
|
281
|
+
it('should handle empty messages array', () => {
|
|
282
|
+
const input = {
|
|
283
|
+
messages: [],
|
|
284
|
+
};
|
|
285
|
+
const result = sanitizeMessages(input);
|
|
286
|
+
expect(result.sanitizedCount).toBe(0);
|
|
287
|
+
expect(result.modified).toBe(false);
|
|
288
|
+
});
|
|
289
|
+
it('should sanitize non-final assistant message in the middle', () => {
|
|
290
|
+
const input = {
|
|
291
|
+
messages: [
|
|
292
|
+
createMessage('user', [createTextPart('Hello')]),
|
|
293
|
+
createMessage('assistant', []), // Not last, should be sanitized
|
|
294
|
+
createMessage('user', [createTextPart('Follow up')]),
|
|
295
|
+
],
|
|
296
|
+
};
|
|
297
|
+
const result = sanitizeMessages(input);
|
|
298
|
+
expect(result.sanitizedCount).toBe(1);
|
|
299
|
+
expect(input.messages[1].parts[0].text).toBe(PLACEHOLDER_TEXT);
|
|
300
|
+
});
|
|
301
|
+
it('should handle single message array', () => {
|
|
302
|
+
const input = {
|
|
303
|
+
messages: [createMessage('user', [])],
|
|
304
|
+
};
|
|
305
|
+
const result = sanitizeMessages(input);
|
|
306
|
+
// Single user message is not the "last assistant", so should be sanitized
|
|
307
|
+
expect(result.sanitizedCount).toBe(1);
|
|
308
|
+
});
|
|
309
|
+
it('should preserve sessionId in input', () => {
|
|
310
|
+
const input = {
|
|
311
|
+
messages: [createMessage('user', [createTextPart('Test')])],
|
|
312
|
+
sessionId: 'test-session-123',
|
|
313
|
+
};
|
|
314
|
+
const result = sanitizeMessages(input);
|
|
315
|
+
expect(result.messages).toBe(input.messages);
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
describe('createEmptyMessageSanitizerHook', () => {
|
|
319
|
+
it('should create hook with sanitize method', () => {
|
|
320
|
+
const hook = createEmptyMessageSanitizerHook();
|
|
321
|
+
expect(typeof hook.sanitize).toBe('function');
|
|
322
|
+
});
|
|
323
|
+
it('should create hook with getName method', () => {
|
|
324
|
+
const hook = createEmptyMessageSanitizerHook();
|
|
325
|
+
expect(typeof hook.getName).toBe('function');
|
|
326
|
+
expect(hook.getName()).toBe(HOOK_NAME);
|
|
327
|
+
});
|
|
328
|
+
it('should sanitize messages via hook sanitize method', () => {
|
|
329
|
+
const hook = createEmptyMessageSanitizerHook();
|
|
330
|
+
const input = {
|
|
331
|
+
messages: [createMessage('user', [])],
|
|
332
|
+
};
|
|
333
|
+
const result = hook.sanitize(input);
|
|
334
|
+
expect(result.sanitizedCount).toBe(1);
|
|
335
|
+
expect(result.modified).toBe(true);
|
|
336
|
+
});
|
|
337
|
+
it('should use custom placeholder from config', () => {
|
|
338
|
+
const hook = createEmptyMessageSanitizerHook({ placeholderText: '[hook custom]' });
|
|
339
|
+
const input = {
|
|
340
|
+
messages: [createMessage('user', [])],
|
|
341
|
+
};
|
|
342
|
+
hook.sanitize(input);
|
|
343
|
+
expect(input.messages[0].parts[0].text).toBe('[hook custom]');
|
|
344
|
+
});
|
|
345
|
+
it('should use default placeholder when no config', () => {
|
|
346
|
+
const hook = createEmptyMessageSanitizerHook();
|
|
347
|
+
const input = {
|
|
348
|
+
messages: [createMessage('user', [])],
|
|
349
|
+
};
|
|
350
|
+
hook.sanitize(input);
|
|
351
|
+
expect(input.messages[0].parts[0].text).toBe(PLACEHOLDER_TEXT);
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
describe('constants', () => {
|
|
355
|
+
it('should export PLACEHOLDER_TEXT', () => {
|
|
356
|
+
expect(PLACEHOLDER_TEXT).toBe('[user interrupted]');
|
|
357
|
+
});
|
|
358
|
+
it('should export HOOK_NAME', () => {
|
|
359
|
+
expect(HOOK_NAME).toBe('empty-message-sanitizer');
|
|
360
|
+
});
|
|
361
|
+
it('should export TOOL_PART_TYPES with correct values', () => {
|
|
362
|
+
expect(TOOL_PART_TYPES.size).toBe(3);
|
|
363
|
+
expect(TOOL_PART_TYPES.has('tool')).toBe(true);
|
|
364
|
+
expect(TOOL_PART_TYPES.has('tool_use')).toBe(true);
|
|
365
|
+
expect(TOOL_PART_TYPES.has('tool_result')).toBe(true);
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
describe('edge cases', () => {
|
|
369
|
+
it('should handle message with mixed valid and invalid parts', () => {
|
|
370
|
+
const message = createMessage('user', [
|
|
371
|
+
createTextPart(''),
|
|
372
|
+
createToolPart('tool_use'),
|
|
373
|
+
createTextPart(' '),
|
|
374
|
+
createTextPart('Valid'),
|
|
375
|
+
]);
|
|
376
|
+
const result = sanitizeMessage(message, false);
|
|
377
|
+
// Empty text parts should be sanitized
|
|
378
|
+
expect(result).toBe(true);
|
|
379
|
+
});
|
|
380
|
+
it('should handle very long placeholder text', () => {
|
|
381
|
+
const longPlaceholder = 'x'.repeat(1000);
|
|
382
|
+
const message = createMessage('user', []);
|
|
383
|
+
sanitizeMessage(message, false, longPlaceholder);
|
|
384
|
+
expect(message.parts[0].text).toBe(longPlaceholder);
|
|
385
|
+
});
|
|
386
|
+
it('should handle special characters in text', () => {
|
|
387
|
+
const message = createMessage('user', [createTextPart('!@#$%^&*()')]);
|
|
388
|
+
const result = sanitizeMessage(message, false);
|
|
389
|
+
expect(result).toBe(false);
|
|
390
|
+
expect(message.parts[0].text).toBe('!@#$%^&*()');
|
|
391
|
+
});
|
|
392
|
+
it('should handle unicode text', () => {
|
|
393
|
+
const message = createMessage('user', [createTextPart('한글 テスト 中文')]);
|
|
394
|
+
const result = sanitizeMessage(message, false);
|
|
395
|
+
expect(result).toBe(false);
|
|
396
|
+
expect(message.parts[0].text).toBe('한글 テスト 中文');
|
|
397
|
+
});
|
|
398
|
+
it('should handle emoji text', () => {
|
|
399
|
+
const message = createMessage('user', [createTextPart('Hello 👋 World 🌍')]);
|
|
400
|
+
const result = sanitizeMessage(message, false);
|
|
401
|
+
expect(result).toBe(false);
|
|
402
|
+
});
|
|
403
|
+
it('should preserve message info when sanitizing', () => {
|
|
404
|
+
const message = createMessage('user', [], 'my-custom-id');
|
|
405
|
+
sanitizeMessage(message, false);
|
|
406
|
+
expect(message.info.id).toBe('my-custom-id');
|
|
407
|
+
expect(message.info.role).toBe('user');
|
|
408
|
+
});
|
|
409
|
+
it('should set correct messageID on synthetic part', () => {
|
|
410
|
+
const message = createMessage('user', [], 'test-msg-id');
|
|
411
|
+
sanitizeMessage(message, false);
|
|
412
|
+
expect(message.parts[0].messageID).toBe('test-msg-id');
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/hooks/empty-message-sanitizer/__tests__/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/keyword-detector/__tests__/index.test.ts"],"names":[],"mappings":""}
|