@herdctl/chat 0.2.5 → 0.3.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.
- package/dist/__tests__/index.test.js +8 -1
- package/dist/__tests__/index.test.js.map +1 -1
- package/dist/__tests__/tool-parsing.test.d.ts +5 -0
- package/dist/__tests__/tool-parsing.test.d.ts.map +1 -0
- package/dist/__tests__/tool-parsing.test.js +319 -0
- package/dist/__tests__/tool-parsing.test.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/tool-parsing.d.ts +88 -0
- package/dist/tool-parsing.d.ts.map +1 -0
- package/dist/tool-parsing.js +201 -0
- package/dist/tool-parsing.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { ChatSessionManager, ChatSessionStateSchema, ChannelSessionSchema, SessionErrorCode, SessionManagerError, SessionStateReadError, SessionStateWriteError, SessionDirectoryCreateError, isSessionManagerError, createInitialSessionState, createChannelSession, } from "../index.js";
|
|
2
|
+
import { ChatSessionManager, ChatSessionStateSchema, ChannelSessionSchema, SessionErrorCode, SessionManagerError, SessionStateReadError, SessionStateWriteError, SessionDirectoryCreateError, isSessionManagerError, createInitialSessionState, createChannelSession, extractToolUseBlocks, extractToolResults, extractToolResultContent, getToolInputSummary, TOOL_EMOJIS, } from "../index.js";
|
|
3
3
|
describe("@herdctl/chat", () => {
|
|
4
4
|
it("exports ChatSessionManager class", () => {
|
|
5
5
|
expect(ChatSessionManager).toBeDefined();
|
|
@@ -21,5 +21,12 @@ describe("@herdctl/chat", () => {
|
|
|
21
21
|
expect(createInitialSessionState).toBeDefined();
|
|
22
22
|
expect(createChannelSession).toBeDefined();
|
|
23
23
|
});
|
|
24
|
+
it("exports tool parsing utilities", () => {
|
|
25
|
+
expect(extractToolUseBlocks).toBeDefined();
|
|
26
|
+
expect(extractToolResults).toBeDefined();
|
|
27
|
+
expect(extractToolResultContent).toBeDefined();
|
|
28
|
+
expect(getToolInputSummary).toBeDefined();
|
|
29
|
+
expect(TOOL_EMOJIS).toBeDefined();
|
|
30
|
+
});
|
|
24
31
|
});
|
|
25
32
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,sBAAsB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,2BAA2B,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,yBAAyB,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,wBAAwB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-parsing.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tool-parsing.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for tool parsing utilities
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from "vitest";
|
|
5
|
+
import { extractToolUseBlocks, extractToolResults, extractToolResultContent, getToolInputSummary, TOOL_EMOJIS, } from "../tool-parsing.js";
|
|
6
|
+
describe("tool-parsing", () => {
|
|
7
|
+
// ===========================================================================
|
|
8
|
+
// extractToolUseBlocks
|
|
9
|
+
// ===========================================================================
|
|
10
|
+
describe("extractToolUseBlocks", () => {
|
|
11
|
+
it("returns empty array for non-array content", () => {
|
|
12
|
+
expect(extractToolUseBlocks({ type: "assistant" })).toEqual([]);
|
|
13
|
+
expect(extractToolUseBlocks({
|
|
14
|
+
type: "assistant",
|
|
15
|
+
message: { content: "just text" },
|
|
16
|
+
})).toEqual([]);
|
|
17
|
+
});
|
|
18
|
+
it("extracts tool_use blocks from content array", () => {
|
|
19
|
+
const message = {
|
|
20
|
+
type: "assistant",
|
|
21
|
+
message: {
|
|
22
|
+
content: [
|
|
23
|
+
{ type: "text", text: "Let me read that file." },
|
|
24
|
+
{
|
|
25
|
+
type: "tool_use",
|
|
26
|
+
id: "toolu_123",
|
|
27
|
+
name: "Read",
|
|
28
|
+
input: { file_path: "/foo/bar.ts" },
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const blocks = extractToolUseBlocks(message);
|
|
34
|
+
expect(blocks).toHaveLength(1);
|
|
35
|
+
expect(blocks[0]).toEqual({
|
|
36
|
+
id: "toolu_123",
|
|
37
|
+
name: "Read",
|
|
38
|
+
input: { file_path: "/foo/bar.ts" },
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
it("extracts multiple tool_use blocks", () => {
|
|
42
|
+
const message = {
|
|
43
|
+
type: "assistant",
|
|
44
|
+
message: {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: "tool_use",
|
|
48
|
+
id: "toolu_1",
|
|
49
|
+
name: "Bash",
|
|
50
|
+
input: { command: "ls" },
|
|
51
|
+
},
|
|
52
|
+
{ type: "text", text: "Some text" },
|
|
53
|
+
{
|
|
54
|
+
type: "tool_use",
|
|
55
|
+
id: "toolu_2",
|
|
56
|
+
name: "Read",
|
|
57
|
+
input: { file_path: "/a.ts" },
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
const blocks = extractToolUseBlocks(message);
|
|
63
|
+
expect(blocks).toHaveLength(2);
|
|
64
|
+
expect(blocks[0].name).toBe("Bash");
|
|
65
|
+
expect(blocks[1].name).toBe("Read");
|
|
66
|
+
});
|
|
67
|
+
it("handles blocks without id", () => {
|
|
68
|
+
const message = {
|
|
69
|
+
type: "assistant",
|
|
70
|
+
message: {
|
|
71
|
+
content: [
|
|
72
|
+
{ type: "tool_use", name: "Bash", input: { command: "ls" } },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
const blocks = extractToolUseBlocks(message);
|
|
77
|
+
expect(blocks).toHaveLength(1);
|
|
78
|
+
expect(blocks[0].id).toBeUndefined();
|
|
79
|
+
});
|
|
80
|
+
it("skips non-tool_use blocks", () => {
|
|
81
|
+
const message = {
|
|
82
|
+
type: "assistant",
|
|
83
|
+
message: {
|
|
84
|
+
content: [
|
|
85
|
+
{ type: "text", text: "Hello" },
|
|
86
|
+
{ type: "image", source: {} },
|
|
87
|
+
{ type: "tool_use", id: "toolu_1", name: "Bash" },
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
const blocks = extractToolUseBlocks(message);
|
|
92
|
+
expect(blocks).toHaveLength(1);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
// ===========================================================================
|
|
96
|
+
// getToolInputSummary
|
|
97
|
+
// ===========================================================================
|
|
98
|
+
describe("getToolInputSummary", () => {
|
|
99
|
+
it("returns command for Bash", () => {
|
|
100
|
+
expect(getToolInputSummary("Bash", { command: "ls -la" })).toBe("ls -la");
|
|
101
|
+
});
|
|
102
|
+
it("truncates long Bash commands", () => {
|
|
103
|
+
const longCommand = "a".repeat(250);
|
|
104
|
+
const result = getToolInputSummary("Bash", { command: longCommand });
|
|
105
|
+
expect(result).toBe("a".repeat(200) + "...");
|
|
106
|
+
});
|
|
107
|
+
it("returns file_path for Read", () => {
|
|
108
|
+
expect(getToolInputSummary("Read", { file_path: "/foo/bar.ts" })).toBe("/foo/bar.ts");
|
|
109
|
+
});
|
|
110
|
+
it("returns file_path for Write", () => {
|
|
111
|
+
expect(getToolInputSummary("Write", { file_path: "/foo/bar.ts" })).toBe("/foo/bar.ts");
|
|
112
|
+
});
|
|
113
|
+
it("returns file_path for Edit", () => {
|
|
114
|
+
expect(getToolInputSummary("Edit", { file_path: "/foo/bar.ts" })).toBe("/foo/bar.ts");
|
|
115
|
+
});
|
|
116
|
+
it("returns pattern for Glob", () => {
|
|
117
|
+
expect(getToolInputSummary("Glob", { pattern: "**/*.ts" })).toBe("**/*.ts");
|
|
118
|
+
});
|
|
119
|
+
it("returns pattern for Grep", () => {
|
|
120
|
+
expect(getToolInputSummary("Grep", { pattern: "function foo" })).toBe("function foo");
|
|
121
|
+
});
|
|
122
|
+
it("returns url for WebFetch", () => {
|
|
123
|
+
expect(getToolInputSummary("WebFetch", { url: "https://example.com" })).toBe("https://example.com");
|
|
124
|
+
});
|
|
125
|
+
it("returns query for WebSearch", () => {
|
|
126
|
+
expect(getToolInputSummary("WebSearch", { query: "how to test" })).toBe("how to test");
|
|
127
|
+
});
|
|
128
|
+
it("returns undefined for unknown tools", () => {
|
|
129
|
+
expect(getToolInputSummary("UnknownTool", { data: "test" })).toBeUndefined();
|
|
130
|
+
});
|
|
131
|
+
it("returns undefined when input is undefined", () => {
|
|
132
|
+
expect(getToolInputSummary("Bash")).toBeUndefined();
|
|
133
|
+
});
|
|
134
|
+
it("handles bash (lowercase)", () => {
|
|
135
|
+
expect(getToolInputSummary("bash", { command: "ls" })).toBe("ls");
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
// ===========================================================================
|
|
139
|
+
// extractToolResults
|
|
140
|
+
// ===========================================================================
|
|
141
|
+
describe("extractToolResults", () => {
|
|
142
|
+
it("returns empty array for non-user messages", () => {
|
|
143
|
+
expect(extractToolResults({ type: "assistant" })).toEqual([]);
|
|
144
|
+
});
|
|
145
|
+
it("extracts from top-level tool_use_result string", () => {
|
|
146
|
+
const message = {
|
|
147
|
+
type: "user",
|
|
148
|
+
tool_use_result: "command output here",
|
|
149
|
+
};
|
|
150
|
+
const results = extractToolResults(message);
|
|
151
|
+
expect(results).toHaveLength(1);
|
|
152
|
+
expect(results[0]).toEqual({
|
|
153
|
+
output: "command output here",
|
|
154
|
+
isError: false,
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
it("extracts from content blocks with tool_result type", () => {
|
|
158
|
+
const message = {
|
|
159
|
+
type: "user",
|
|
160
|
+
message: {
|
|
161
|
+
content: [
|
|
162
|
+
{
|
|
163
|
+
type: "tool_result",
|
|
164
|
+
tool_use_id: "toolu_123",
|
|
165
|
+
content: "file contents here",
|
|
166
|
+
is_error: false,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
const results = extractToolResults(message);
|
|
172
|
+
expect(results).toHaveLength(1);
|
|
173
|
+
expect(results[0]).toEqual({
|
|
174
|
+
output: "file contents here",
|
|
175
|
+
isError: false,
|
|
176
|
+
toolUseId: "toolu_123",
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
it("extracts error tool results", () => {
|
|
180
|
+
const message = {
|
|
181
|
+
type: "user",
|
|
182
|
+
message: {
|
|
183
|
+
content: [
|
|
184
|
+
{
|
|
185
|
+
type: "tool_result",
|
|
186
|
+
tool_use_id: "toolu_456",
|
|
187
|
+
content: "command failed: exit code 1",
|
|
188
|
+
is_error: true,
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
const results = extractToolResults(message);
|
|
194
|
+
expect(results).toHaveLength(1);
|
|
195
|
+
expect(results[0].isError).toBe(true);
|
|
196
|
+
expect(results[0].toolUseId).toBe("toolu_456");
|
|
197
|
+
});
|
|
198
|
+
it("extracts from content blocks array inside tool_result", () => {
|
|
199
|
+
const message = {
|
|
200
|
+
type: "user",
|
|
201
|
+
message: {
|
|
202
|
+
content: [
|
|
203
|
+
{
|
|
204
|
+
type: "tool_result",
|
|
205
|
+
tool_use_id: "toolu_789",
|
|
206
|
+
content: [
|
|
207
|
+
{ type: "text", text: "line 1\n" },
|
|
208
|
+
{ type: "text", text: "line 2" },
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
const results = extractToolResults(message);
|
|
215
|
+
expect(results).toHaveLength(1);
|
|
216
|
+
expect(results[0].output).toBe("line 1\n\nline 2");
|
|
217
|
+
});
|
|
218
|
+
it("extracts multiple tool results", () => {
|
|
219
|
+
const message = {
|
|
220
|
+
type: "user",
|
|
221
|
+
message: {
|
|
222
|
+
content: [
|
|
223
|
+
{
|
|
224
|
+
type: "tool_result",
|
|
225
|
+
tool_use_id: "toolu_1",
|
|
226
|
+
content: "result 1",
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
type: "tool_result",
|
|
230
|
+
tool_use_id: "toolu_2",
|
|
231
|
+
content: "result 2",
|
|
232
|
+
is_error: true,
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
const results = extractToolResults(message);
|
|
238
|
+
expect(results).toHaveLength(2);
|
|
239
|
+
expect(results[0].output).toBe("result 1");
|
|
240
|
+
expect(results[1].output).toBe("result 2");
|
|
241
|
+
expect(results[1].isError).toBe(true);
|
|
242
|
+
});
|
|
243
|
+
it("skips empty content", () => {
|
|
244
|
+
const message = {
|
|
245
|
+
type: "user",
|
|
246
|
+
message: {
|
|
247
|
+
content: [
|
|
248
|
+
{ type: "tool_result", content: "" },
|
|
249
|
+
],
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
expect(extractToolResults(message)).toEqual([]);
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
// ===========================================================================
|
|
256
|
+
// extractToolResultContent
|
|
257
|
+
// ===========================================================================
|
|
258
|
+
describe("extractToolResultContent", () => {
|
|
259
|
+
it("extracts from plain string", () => {
|
|
260
|
+
const result = extractToolResultContent("hello world");
|
|
261
|
+
expect(result).toEqual({ output: "hello world", isError: false });
|
|
262
|
+
});
|
|
263
|
+
it("returns undefined for empty string", () => {
|
|
264
|
+
expect(extractToolResultContent("")).toBeUndefined();
|
|
265
|
+
});
|
|
266
|
+
it("extracts from object with content string", () => {
|
|
267
|
+
const result = extractToolResultContent({
|
|
268
|
+
content: "file data",
|
|
269
|
+
is_error: false,
|
|
270
|
+
tool_use_id: "toolu_abc",
|
|
271
|
+
});
|
|
272
|
+
expect(result).toEqual({
|
|
273
|
+
output: "file data",
|
|
274
|
+
isError: false,
|
|
275
|
+
toolUseId: "toolu_abc",
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
it("extracts from object with error flag", () => {
|
|
279
|
+
const result = extractToolResultContent({
|
|
280
|
+
content: "error occurred",
|
|
281
|
+
is_error: true,
|
|
282
|
+
});
|
|
283
|
+
expect(result?.isError).toBe(true);
|
|
284
|
+
});
|
|
285
|
+
it("extracts from object with content blocks array", () => {
|
|
286
|
+
const result = extractToolResultContent({
|
|
287
|
+
content: [
|
|
288
|
+
{ type: "text", text: "part 1" },
|
|
289
|
+
{ type: "text", text: "part 2" },
|
|
290
|
+
],
|
|
291
|
+
});
|
|
292
|
+
expect(result?.output).toBe("part 1\npart 2");
|
|
293
|
+
});
|
|
294
|
+
it("returns undefined for null", () => {
|
|
295
|
+
expect(extractToolResultContent(null)).toBeUndefined();
|
|
296
|
+
});
|
|
297
|
+
it("returns undefined for number", () => {
|
|
298
|
+
expect(extractToolResultContent(42)).toBeUndefined();
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
// ===========================================================================
|
|
302
|
+
// TOOL_EMOJIS
|
|
303
|
+
// ===========================================================================
|
|
304
|
+
describe("TOOL_EMOJIS", () => {
|
|
305
|
+
it("has emoji for common tools", () => {
|
|
306
|
+
expect(TOOL_EMOJIS["Bash"]).toBeDefined();
|
|
307
|
+
expect(TOOL_EMOJIS["Read"]).toBeDefined();
|
|
308
|
+
expect(TOOL_EMOJIS["Write"]).toBeDefined();
|
|
309
|
+
expect(TOOL_EMOJIS["Glob"]).toBeDefined();
|
|
310
|
+
expect(TOOL_EMOJIS["Grep"]).toBeDefined();
|
|
311
|
+
expect(TOOL_EMOJIS["WebFetch"]).toBeDefined();
|
|
312
|
+
expect(TOOL_EMOJIS["WebSearch"]).toBeDefined();
|
|
313
|
+
});
|
|
314
|
+
it("has lowercase bash variant", () => {
|
|
315
|
+
expect(TOOL_EMOJIS["bash"]).toBe(TOOL_EMOJIS["Bash"]);
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
//# sourceMappingURL=tool-parsing.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-parsing.test.js","sourceRoot":"","sources":["../../src/__tests__/tool-parsing.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export { type ChatConnectionStatus, type ChatConnectorState, type IChatConnector
|
|
|
15
15
|
export { findSplitPoint, splitMessage, needsSplit, truncateMessage, formatCodeBlock, type MessageSplitOptions, type SplitResult, DEFAULT_MESSAGE_DELAY_MS, MIN_CHUNK_SIZE, DEFAULT_SPLIT_POINTS, } from "./message-splitting.js";
|
|
16
16
|
export { StreamingResponder, type StreamingResponderOptions, } from "./streaming-responder.js";
|
|
17
17
|
export { extractMessageContent, isTextContentBlock, hasTextContent, type TextContentBlock, type ContentBlock, type SDKMessage, } from "./message-extraction.js";
|
|
18
|
+
export { extractToolUseBlocks, extractToolResults, extractToolResultContent, getToolInputSummary, type ToolUseBlock, type ToolResult, TOOL_EMOJIS, } from "./tool-parsing.js";
|
|
18
19
|
export { isDMEnabled, getDMMode, checkDMUserFilter, shouldProcessInMode, type DMFilterResult, type DMConfig, } from "./dm-filter.js";
|
|
19
20
|
export { ChatErrorCode, ChatConnectorError, ChatConnectionError, AlreadyConnectedError, InvalidTokenError, MissingTokenError, isChatConnectorError, isChatConnectionError, isAlreadyConnectedError, isInvalidTokenError, isMissingTokenError, } from "./errors.js";
|
|
20
21
|
export { ErrorCategory, type ClassifiedError, type RetryOptions, type RetryResult, type UserErrorMessageKey, USER_ERROR_MESSAGES, withRetry, isTransientError, isRateLimitError, isAuthError, safeExecute, safeExecuteWithReply, } from "./error-handler.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAEL,kBAAkB,EAElB,oBAAoB,EACpB,sBAAsB,EAEtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAExB,yBAAyB,EACzB,oBAAoB,EAEpB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACnB,KAAK,mBAAmB,IAAI,4BAA4B,EACxD,KAAK,mBAAmB,EAExB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAErB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC;AAMpB,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EAEf,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAEhB,wBAAwB,EACxB,cAAc,EACd,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,GACd,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAEL,aAAa,EAEb,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAEjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEL,aAAa,EAEb,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,mBAAmB,EAEnB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,UAAU,GACX,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAEL,kBAAkB,EAElB,oBAAoB,EACpB,sBAAsB,EAEtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAExB,yBAAyB,EACzB,oBAAoB,EAEpB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACnB,KAAK,mBAAmB,IAAI,4BAA4B,EACxD,KAAK,mBAAmB,EAExB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAErB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC;AAMpB,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EAEf,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAEhB,wBAAwB,EACxB,cAAc,EACd,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAEL,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EAEnB,KAAK,YAAY,EACjB,KAAK,UAAU,EAEf,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,GACd,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAEL,aAAa,EAEb,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAEjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEL,aAAa,EAEb,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,mBAAmB,EAEnB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,UAAU,GACX,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -39,6 +39,14 @@ export { StreamingResponder, } from "./streaming-responder.js";
|
|
|
39
39
|
// =============================================================================
|
|
40
40
|
export { extractMessageContent, isTextContentBlock, hasTextContent, } from "./message-extraction.js";
|
|
41
41
|
// =============================================================================
|
|
42
|
+
// Tool Parsing
|
|
43
|
+
// =============================================================================
|
|
44
|
+
export {
|
|
45
|
+
// Functions
|
|
46
|
+
extractToolUseBlocks, extractToolResults, extractToolResultContent, getToolInputSummary,
|
|
47
|
+
// Constants
|
|
48
|
+
TOOL_EMOJIS, } from "./tool-parsing.js";
|
|
49
|
+
// =============================================================================
|
|
42
50
|
// DM Filtering
|
|
43
51
|
// =============================================================================
|
|
44
52
|
export { isDMEnabled, getDMMode, checkDMUserFilter, shouldProcessInMode, } from "./dm-filter.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,OAAO;AACL,QAAQ;AACR,kBAAkB;AAClB,UAAU;AACV,oBAAoB,EACpB,sBAAsB;AAQtB,oBAAoB;AACpB,yBAAyB,EACzB,oBAAoB;AACpB,SAAS;AACT,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAyBpC,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO;AACL,YAAY;AACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe;AAIf,YAAY;AACZ,wBAAwB,EACxB,cAAc,EACd,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EACL,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAElC,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,GAIf,MAAM,yBAAyB,CAAC;AAEjC,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,gBAAgB,CAAC;AAExB,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO;AACL,cAAc;AACd,aAAa;AACb,gBAAgB;AAChB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB;AACjB,cAAc;AACd,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,OAAO;AACL,aAAa;AACb,aAAa;AAMb,YAAY;AACZ,mBAAmB;AACnB,YAAY;AACZ,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,UAAU,GACX,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,OAAO;AACL,QAAQ;AACR,kBAAkB;AAClB,UAAU;AACV,oBAAoB,EACpB,sBAAsB;AAQtB,oBAAoB;AACpB,yBAAyB,EACzB,oBAAoB;AACpB,SAAS;AACT,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAyBpC,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO;AACL,YAAY;AACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe;AAIf,YAAY;AACZ,wBAAwB,EACxB,cAAc,EACd,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF,OAAO,EACL,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAElC,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,GAIf,MAAM,yBAAyB,CAAC;AAEjC,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,OAAO;AACL,YAAY;AACZ,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB;AAInB,YAAY;AACZ,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,gBAAgB,CAAC;AAExB,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO;AACL,cAAc;AACd,aAAa;AACb,gBAAgB;AAChB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB;AACjB,cAAc;AACd,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,OAAO;AACL,aAAa;AACb,aAAa;AAMb,YAAY;AACZ,mBAAmB;AACnB,YAAY;AACZ,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,UAAU,GACX,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool call/result parsing utilities
|
|
3
|
+
*
|
|
4
|
+
* Extracts tool_use and tool_result blocks from Claude SDK messages.
|
|
5
|
+
* These were originally private methods on the Discord manager but are
|
|
6
|
+
* shared across Discord, Slack, and Web connectors.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* A parsed tool_use block from an assistant message
|
|
10
|
+
*/
|
|
11
|
+
export interface ToolUseBlock {
|
|
12
|
+
/** Tool use ID for pairing with results */
|
|
13
|
+
id?: string;
|
|
14
|
+
/** Tool name (e.g., "Bash", "Read", "Write") */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Tool input object */
|
|
17
|
+
input?: unknown;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A parsed tool_result from a user message
|
|
21
|
+
*/
|
|
22
|
+
export interface ToolResult {
|
|
23
|
+
/** Tool output text */
|
|
24
|
+
output: string;
|
|
25
|
+
/** Whether the tool returned an error */
|
|
26
|
+
isError: boolean;
|
|
27
|
+
/** ID of the tool_use this result corresponds to */
|
|
28
|
+
toolUseId?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Emoji mapping for common tool names
|
|
32
|
+
*/
|
|
33
|
+
export declare const TOOL_EMOJIS: Record<string, string>;
|
|
34
|
+
/**
|
|
35
|
+
* Extract tool_use blocks from an assistant message's content blocks
|
|
36
|
+
*
|
|
37
|
+
* Returns id, name, and input for each tool_use block so callers can
|
|
38
|
+
* track pending calls and pair them with results.
|
|
39
|
+
*
|
|
40
|
+
* @param message - SDK message object (assistant type)
|
|
41
|
+
* @returns Array of parsed tool use blocks
|
|
42
|
+
*/
|
|
43
|
+
export declare function extractToolUseBlocks(message: {
|
|
44
|
+
type: string;
|
|
45
|
+
message?: {
|
|
46
|
+
content?: unknown;
|
|
47
|
+
};
|
|
48
|
+
}): ToolUseBlock[];
|
|
49
|
+
/**
|
|
50
|
+
* Get a human-readable summary of tool input
|
|
51
|
+
*
|
|
52
|
+
* Produces a short description based on the tool name and its input,
|
|
53
|
+
* e.g. the command for Bash, the file path for Read/Write, etc.
|
|
54
|
+
*
|
|
55
|
+
* @param name - Tool name
|
|
56
|
+
* @param input - Tool input object
|
|
57
|
+
* @returns Human-readable summary, or undefined if no summary available
|
|
58
|
+
*/
|
|
59
|
+
export declare function getToolInputSummary(name: string, input?: unknown): string | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Extract tool results from a user message
|
|
62
|
+
*
|
|
63
|
+
* Returns output, error status, and the tool_use_id for matching
|
|
64
|
+
* to the pending tool_use that produced this result.
|
|
65
|
+
*
|
|
66
|
+
* @param message - SDK message object (user type with tool results)
|
|
67
|
+
* @returns Array of parsed tool results
|
|
68
|
+
*/
|
|
69
|
+
export declare function extractToolResults(message: {
|
|
70
|
+
type: string;
|
|
71
|
+
message?: {
|
|
72
|
+
content?: unknown;
|
|
73
|
+
};
|
|
74
|
+
tool_use_result?: unknown;
|
|
75
|
+
}): ToolResult[];
|
|
76
|
+
/**
|
|
77
|
+
* Extract content from a top-level tool_use_result value
|
|
78
|
+
*
|
|
79
|
+
* Handles the various formats that a tool result value can take:
|
|
80
|
+
* - Plain string
|
|
81
|
+
* - Object with `content` string
|
|
82
|
+
* - Object with `content` array of text blocks
|
|
83
|
+
*
|
|
84
|
+
* @param result - Raw tool_use_result value from SDK
|
|
85
|
+
* @returns Parsed tool result, or undefined if content could not be extracted
|
|
86
|
+
*/
|
|
87
|
+
export declare function extractToolResultContent(result: unknown): ToolResult | undefined;
|
|
88
|
+
//# sourceMappingURL=tool-parsing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-parsing.d.ts","sourceRoot":"","sources":["../src/tool-parsing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU9C,CAAC;AAMF;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACjC,GAAG,YAAY,EAAE,CAwBjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CA4BrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,UAAU,EAAE,CA0Df;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,GACd,UAAU,GAAG,SAAS,CA2CxB"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool call/result parsing utilities
|
|
3
|
+
*
|
|
4
|
+
* Extracts tool_use and tool_result blocks from Claude SDK messages.
|
|
5
|
+
* These were originally private methods on the Discord manager but are
|
|
6
|
+
* shared across Discord, Slack, and Web connectors.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Emoji mapping for common tool names
|
|
10
|
+
*/
|
|
11
|
+
export const TOOL_EMOJIS = {
|
|
12
|
+
Bash: "\u{1F4BB}", // laptop
|
|
13
|
+
bash: "\u{1F4BB}",
|
|
14
|
+
Read: "\u{1F4C4}", // page
|
|
15
|
+
Write: "\u{270F}\u{FE0F}", // pencil
|
|
16
|
+
Edit: "\u{270F}\u{FE0F}",
|
|
17
|
+
Glob: "\u{1F50D}", // magnifying glass
|
|
18
|
+
Grep: "\u{1F50D}",
|
|
19
|
+
WebFetch: "\u{1F310}", // globe
|
|
20
|
+
WebSearch: "\u{1F310}",
|
|
21
|
+
};
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Extraction Functions
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Extract tool_use blocks from an assistant message's content blocks
|
|
27
|
+
*
|
|
28
|
+
* Returns id, name, and input for each tool_use block so callers can
|
|
29
|
+
* track pending calls and pair them with results.
|
|
30
|
+
*
|
|
31
|
+
* @param message - SDK message object (assistant type)
|
|
32
|
+
* @returns Array of parsed tool use blocks
|
|
33
|
+
*/
|
|
34
|
+
export function extractToolUseBlocks(message) {
|
|
35
|
+
const apiMessage = message.message;
|
|
36
|
+
const content = apiMessage?.content;
|
|
37
|
+
if (!Array.isArray(content))
|
|
38
|
+
return [];
|
|
39
|
+
const blocks = [];
|
|
40
|
+
for (const block of content) {
|
|
41
|
+
if (block &&
|
|
42
|
+
typeof block === "object" &&
|
|
43
|
+
"type" in block &&
|
|
44
|
+
block.type === "tool_use" &&
|
|
45
|
+
"name" in block &&
|
|
46
|
+
typeof block.name === "string") {
|
|
47
|
+
blocks.push({
|
|
48
|
+
id: "id" in block && typeof block.id === "string" ? block.id : undefined,
|
|
49
|
+
name: block.name,
|
|
50
|
+
input: "input" in block ? block.input : undefined,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return blocks;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get a human-readable summary of tool input
|
|
58
|
+
*
|
|
59
|
+
* Produces a short description based on the tool name and its input,
|
|
60
|
+
* e.g. the command for Bash, the file path for Read/Write, etc.
|
|
61
|
+
*
|
|
62
|
+
* @param name - Tool name
|
|
63
|
+
* @param input - Tool input object
|
|
64
|
+
* @returns Human-readable summary, or undefined if no summary available
|
|
65
|
+
*/
|
|
66
|
+
export function getToolInputSummary(name, input) {
|
|
67
|
+
const inputObj = input;
|
|
68
|
+
if (name === "Bash" || name === "bash") {
|
|
69
|
+
const command = inputObj?.command;
|
|
70
|
+
if (typeof command === "string" && command.length > 0) {
|
|
71
|
+
return command.length > 200 ? command.substring(0, 200) + "..." : command;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (name === "Read" || name === "Write" || name === "Edit") {
|
|
75
|
+
const path = inputObj?.file_path ?? inputObj?.path;
|
|
76
|
+
if (typeof path === "string")
|
|
77
|
+
return path;
|
|
78
|
+
}
|
|
79
|
+
if (name === "Glob" || name === "Grep") {
|
|
80
|
+
const pattern = inputObj?.pattern;
|
|
81
|
+
if (typeof pattern === "string")
|
|
82
|
+
return pattern;
|
|
83
|
+
}
|
|
84
|
+
if (name === "WebFetch" || name === "WebSearch") {
|
|
85
|
+
const url = inputObj?.url;
|
|
86
|
+
const query = inputObj?.query;
|
|
87
|
+
if (typeof url === "string")
|
|
88
|
+
return url;
|
|
89
|
+
if (typeof query === "string")
|
|
90
|
+
return query;
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract tool results from a user message
|
|
96
|
+
*
|
|
97
|
+
* Returns output, error status, and the tool_use_id for matching
|
|
98
|
+
* to the pending tool_use that produced this result.
|
|
99
|
+
*
|
|
100
|
+
* @param message - SDK message object (user type with tool results)
|
|
101
|
+
* @returns Array of parsed tool results
|
|
102
|
+
*/
|
|
103
|
+
export function extractToolResults(message) {
|
|
104
|
+
const results = [];
|
|
105
|
+
// Check for top-level tool_use_result (direct SDK format)
|
|
106
|
+
if (message.tool_use_result !== undefined) {
|
|
107
|
+
const extracted = extractToolResultContent(message.tool_use_result);
|
|
108
|
+
if (extracted) {
|
|
109
|
+
results.push(extracted);
|
|
110
|
+
}
|
|
111
|
+
return results;
|
|
112
|
+
}
|
|
113
|
+
// Check for content blocks in nested message
|
|
114
|
+
const apiMessage = message.message;
|
|
115
|
+
const content = apiMessage?.content;
|
|
116
|
+
if (!Array.isArray(content))
|
|
117
|
+
return results;
|
|
118
|
+
for (const block of content) {
|
|
119
|
+
if (!block || typeof block !== "object" || !("type" in block))
|
|
120
|
+
continue;
|
|
121
|
+
if (block.type === "tool_result") {
|
|
122
|
+
const toolResultBlock = block;
|
|
123
|
+
const isError = toolResultBlock.is_error === true;
|
|
124
|
+
const toolUseId = typeof toolResultBlock.tool_use_id === "string"
|
|
125
|
+
? toolResultBlock.tool_use_id
|
|
126
|
+
: undefined;
|
|
127
|
+
// Content can be a string or an array of content blocks
|
|
128
|
+
const blockContent = toolResultBlock.content;
|
|
129
|
+
if (typeof blockContent === "string" && blockContent.length > 0) {
|
|
130
|
+
results.push({ output: blockContent, isError, toolUseId });
|
|
131
|
+
}
|
|
132
|
+
else if (Array.isArray(blockContent)) {
|
|
133
|
+
const textParts = [];
|
|
134
|
+
for (const part of blockContent) {
|
|
135
|
+
if (part &&
|
|
136
|
+
typeof part === "object" &&
|
|
137
|
+
"type" in part &&
|
|
138
|
+
part.type === "text" &&
|
|
139
|
+
"text" in part &&
|
|
140
|
+
typeof part.text === "string") {
|
|
141
|
+
textParts.push(part.text);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (textParts.length > 0) {
|
|
145
|
+
results.push({ output: textParts.join("\n"), isError, toolUseId });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return results;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Extract content from a top-level tool_use_result value
|
|
154
|
+
*
|
|
155
|
+
* Handles the various formats that a tool result value can take:
|
|
156
|
+
* - Plain string
|
|
157
|
+
* - Object with `content` string
|
|
158
|
+
* - Object with `content` array of text blocks
|
|
159
|
+
*
|
|
160
|
+
* @param result - Raw tool_use_result value from SDK
|
|
161
|
+
* @returns Parsed tool result, or undefined if content could not be extracted
|
|
162
|
+
*/
|
|
163
|
+
export function extractToolResultContent(result) {
|
|
164
|
+
if (typeof result === "string" && result.length > 0) {
|
|
165
|
+
return { output: result, isError: false };
|
|
166
|
+
}
|
|
167
|
+
if (result && typeof result === "object") {
|
|
168
|
+
const obj = result;
|
|
169
|
+
// Check for content field
|
|
170
|
+
if (typeof obj.content === "string" && obj.content.length > 0) {
|
|
171
|
+
return {
|
|
172
|
+
output: obj.content,
|
|
173
|
+
isError: obj.is_error === true,
|
|
174
|
+
toolUseId: typeof obj.tool_use_id === "string" ? obj.tool_use_id : undefined,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// Check for content blocks array
|
|
178
|
+
if (Array.isArray(obj.content)) {
|
|
179
|
+
const textParts = [];
|
|
180
|
+
for (const block of obj.content) {
|
|
181
|
+
if (block &&
|
|
182
|
+
typeof block === "object" &&
|
|
183
|
+
"type" in block &&
|
|
184
|
+
block.type === "text" &&
|
|
185
|
+
"text" in block &&
|
|
186
|
+
typeof block.text === "string") {
|
|
187
|
+
textParts.push(block.text);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (textParts.length > 0) {
|
|
191
|
+
return {
|
|
192
|
+
output: textParts.join("\n"),
|
|
193
|
+
isError: obj.is_error === true,
|
|
194
|
+
toolUseId: typeof obj.tool_use_id === "string" ? obj.tool_use_id : undefined,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=tool-parsing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-parsing.js","sourceRoot":"","sources":["../src/tool-parsing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herdctl/chat",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Shared chat infrastructure for herdctl connectors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"yaml": "^2.3.0",
|
|
14
14
|
"zod": "^3.22.0",
|
|
15
|
-
"@herdctl/core": "5.
|
|
15
|
+
"@herdctl/core": "5.4.0"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@vitest/coverage-v8": "^4.0.17",
|