@posthog/agent 1.24.0 → 1.24.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/LICENSE +33 -0
- package/dist/index.d.ts +11 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/src/adapters/claude/claude-adapter.d.ts +3 -3
- package/dist/src/adapters/claude/claude-adapter.d.ts.map +1 -1
- package/dist/src/adapters/claude/claude-adapter.js +111 -156
- package/dist/src/adapters/claude/claude-adapter.js.map +1 -1
- package/dist/src/adapters/claude/tool-mapper.d.ts +1 -1
- package/dist/src/adapters/claude/tool-mapper.d.ts.map +1 -1
- package/dist/src/adapters/claude/tool-mapper.js.map +1 -1
- package/dist/src/adapters/types.d.ts +1 -1
- package/dist/src/adapters/types.d.ts.map +1 -1
- package/dist/src/agent.d.ts +7 -7
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +85 -143
- package/dist/src/agent.js.map +1 -1
- package/dist/src/agents/execution.js.map +1 -1
- package/dist/src/agents/planning.js.map +1 -1
- package/dist/src/agents/research.js.map +1 -1
- package/dist/src/file-manager.d.ts +4 -4
- package/dist/src/file-manager.d.ts.map +1 -1
- package/dist/src/file-manager.js +58 -59
- package/dist/src/file-manager.js.map +1 -1
- package/dist/src/git-manager.d.ts +1 -1
- package/dist/src/git-manager.d.ts.map +1 -1
- package/dist/src/git-manager.js +70 -87
- package/dist/src/git-manager.js.map +1 -1
- package/dist/src/posthog-api.d.ts +3 -2
- package/dist/src/posthog-api.d.ts.map +1 -1
- package/dist/src/posthog-api.js +22 -22
- package/dist/src/posthog-api.js.map +1 -1
- package/dist/src/prompt-builder.d.ts +3 -3
- package/dist/src/prompt-builder.d.ts.map +1 -1
- package/dist/src/prompt-builder.js +93 -123
- package/dist/src/prompt-builder.js.map +1 -1
- package/dist/src/task-manager.d.ts +4 -4
- package/dist/src/task-manager.d.ts.map +1 -1
- package/dist/src/task-manager.js +18 -19
- package/dist/src/task-manager.js.map +1 -1
- package/dist/src/task-progress-reporter.d.ts +4 -3
- package/dist/src/task-progress-reporter.d.ts.map +1 -1
- package/dist/src/task-progress-reporter.js +54 -59
- package/dist/src/task-progress-reporter.js.map +1 -1
- package/dist/src/template-manager.d.ts +1 -1
- package/dist/src/template-manager.d.ts.map +1 -1
- package/dist/src/template-manager.js +28 -30
- package/dist/src/template-manager.js.map +1 -1
- package/dist/src/todo-manager.d.ts +3 -3
- package/dist/src/todo-manager.d.ts.map +1 -1
- package/dist/src/todo-manager.js +24 -29
- package/dist/src/todo-manager.js.map +1 -1
- package/dist/src/tools/registry.d.ts +1 -1
- package/dist/src/tools/registry.js +60 -60
- package/dist/src/tools/registry.js.map +1 -1
- package/dist/src/tools/types.d.ts +31 -31
- package/dist/src/types.d.ts +33 -33
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.d.ts.map +1 -1
- package/dist/src/utils/logger.js +8 -8
- package/dist/src/utils/logger.js.map +1 -1
- package/dist/src/workflow/config.d.ts +1 -1
- package/dist/src/workflow/config.d.ts.map +1 -1
- package/dist/src/workflow/config.js +18 -18
- package/dist/src/workflow/config.js.map +1 -1
- package/dist/src/workflow/steps/build.d.ts +1 -1
- package/dist/src/workflow/steps/build.d.ts.map +1 -1
- package/dist/src/workflow/steps/build.js +38 -46
- package/dist/src/workflow/steps/build.js.map +1 -1
- package/dist/src/workflow/steps/finalize.d.ts +1 -1
- package/dist/src/workflow/steps/finalize.d.ts.map +1 -1
- package/dist/src/workflow/steps/finalize.js +48 -54
- package/dist/src/workflow/steps/finalize.js.map +1 -1
- package/dist/src/workflow/steps/plan.d.ts +1 -1
- package/dist/src/workflow/steps/plan.d.ts.map +1 -1
- package/dist/src/workflow/steps/plan.js +46 -58
- package/dist/src/workflow/steps/plan.js.map +1 -1
- package/dist/src/workflow/steps/research.d.ts +1 -1
- package/dist/src/workflow/steps/research.d.ts.map +1 -1
- package/dist/src/workflow/steps/research.js +56 -68
- package/dist/src/workflow/steps/research.js.map +1 -1
- package/dist/src/workflow/types.d.ts +12 -12
- package/dist/src/workflow/types.d.ts.map +1 -1
- package/dist/src/workflow/utils.d.ts +1 -1
- package/dist/src/workflow/utils.d.ts.map +1 -1
- package/dist/src/workflow/utils.js +4 -7
- package/dist/src/workflow/utils.js.map +1 -1
- package/package.json +6 -6
- package/src/adapters/claude/claude-adapter.ts +168 -220
- package/src/adapters/claude/tool-mapper.ts +2 -2
- package/src/adapters/types.ts +1 -1
- package/src/agent.ts +444 -579
- package/src/agents/execution.ts +1 -1
- package/src/agents/planning.ts +1 -1
- package/src/agents/research.ts +1 -0
- package/src/file-manager.ts +63 -64
- package/src/git-manager.ts +88 -144
- package/src/posthog-api.ts +82 -122
- package/src/prompt-builder.ts +135 -180
- package/src/task-manager.ts +30 -38
- package/src/task-progress-reporter.ts +59 -70
- package/src/template-manager.ts +45 -98
- package/src/todo-manager.ts +30 -35
- package/src/tools/registry.ts +62 -62
- package/src/tools/types.ts +36 -36
- package/src/types.ts +71 -93
- package/src/utils/logger.ts +56 -62
- package/src/workflow/config.ts +48 -48
- package/src/workflow/steps/build.ts +113 -122
- package/src/workflow/steps/finalize.ts +182 -214
- package/src/workflow/steps/plan.ts +131 -151
- package/src/workflow/steps/research.ts +186 -205
- package/src/workflow/types.ts +36 -38
- package/src/workflow/utils.ts +34 -37
package/LICENSE
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
Business Source License 1.1
|
|
2
|
+
|
|
3
|
+
Parameters
|
|
4
|
+
|
|
5
|
+
Licensor: PostHog Inc.
|
|
6
|
+
Licensed Work: Array & Posthog Agent package
|
|
7
|
+
The Licensed Work is © 2025 PostHog Inc.
|
|
8
|
+
|
|
9
|
+
Change Date: None (the Licensed Work will remain under this License indefinitely unless Licensor specifies otherwise)
|
|
10
|
+
Change License: At Licensor's discretion
|
|
11
|
+
|
|
12
|
+
Additional Use Grant:
|
|
13
|
+
You may use, modify, and self-host this software for personal purposes.
|
|
14
|
+
You may also submit contributions (e.g., pull requests) to the Licensed Work under this License.
|
|
15
|
+
Commercial redistribution, resale, or offering as a managed/hosted service requires a separate commercial agreement with the Licensor.
|
|
16
|
+
Using the Licensed Work to build or offer a competing product or service is prohibited without explicit written permission from the Licensor.
|
|
17
|
+
|
|
18
|
+
Terms
|
|
19
|
+
|
|
20
|
+
The Licensor hereby grants you the right to copy, modify, create derivative works, redistribute, and make use of the Licensed Work for personal purposes. The Licensor may make an Additional Use Grant, above, permitting limited production use.
|
|
21
|
+
|
|
22
|
+
Effective on the Change Date (if one is ever designated by the Licensor), the Change License will apply to the Licensed Work.
|
|
23
|
+
|
|
24
|
+
Any use of the Licensed Work not explicitly permitted by this License is prohibited.
|
|
25
|
+
This License applies separately to each version of the Licensed Work released by the Licensor.
|
|
26
|
+
|
|
27
|
+
THE LICENSED WORK IS PROVIDED "AS IS". THE LICENSOR MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
28
|
+
|
|
29
|
+
This License does not grant trademark rights, and no license is granted for use of the Licensor's trademarks, trade names, or logos.
|
|
30
|
+
|
|
31
|
+
License text copyright (c) 2020 MariaDB Corporation Ab, All Rights Reserved.
|
|
32
|
+
|
|
33
|
+
"Business Source License" is a trademark of MariaDB Corporation Ab.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export
|
|
3
|
-
export {
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export type {
|
|
8
|
-
export type {
|
|
9
|
-
export {
|
|
10
|
-
export type {
|
|
11
|
-
export {
|
|
1
|
+
export { Agent, } from './src/agent.js';
|
|
2
|
+
export { PermissionMode, } from './src/types.js';
|
|
3
|
+
export type { Task, TaskRun, SupportingFile, ExecutionResult, AgentConfig, McpServerConfig, AgentEvent, ResearchEvaluation } from './src/types.js';
|
|
4
|
+
export { Logger, LogLevel, } from './src/utils/logger.js';
|
|
5
|
+
export type { LoggerConfig } from './src/utils/logger.js';
|
|
6
|
+
export { TodoManager } from './src/todo-manager.js';
|
|
7
|
+
export type { TodoItem, TodoList } from './src/todo-manager.js';
|
|
8
|
+
export type { ProviderAdapter } from './src/adapters/types.js';
|
|
9
|
+
export { ClaudeAdapter } from './src/adapters/claude/claude-adapter.js';
|
|
10
|
+
export type { Tool, ToolCategory, KnownTool, ReadTool, WriteTool, EditTool, GlobTool, NotebookEditTool, BashTool, BashOutputTool, KillShellTool, WebFetchTool, WebSearchTool, GrepTool, TaskTool, TodoWriteTool, ExitPlanModeTool, SlashCommandTool, } from './src/tools/types.js';
|
|
11
|
+
export { ToolRegistry } from './src/tools/registry.js';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,GACR,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACH,cAAc,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACR,IAAI,EACJ,OAAO,EACP,cAAc,EACd,eAAe,EACf,WAAW,EACX,eAAe,EACf,UAAU,EACV,kBAAkB,EACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACH,MAAM,EACN,QAAQ,GACX,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGhE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAGxE,YAAY,EACR,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { ClaudeAdapter } from './src/adapters/claude/claude-adapter.js';
|
|
2
1
|
export { Agent } from './src/agent.js';
|
|
3
|
-
export { TodoManager } from './src/todo-manager.js';
|
|
4
|
-
export { ToolRegistry } from './src/tools/registry.js';
|
|
5
2
|
export { PermissionMode } from './src/types.js';
|
|
6
3
|
export { LogLevel, Logger } from './src/utils/logger.js';
|
|
4
|
+
export { TodoManager } from './src/todo-manager.js';
|
|
5
|
+
export { ClaudeAdapter } from './src/adapters/claude/claude-adapter.js';
|
|
6
|
+
export { ToolRegistry } from './src/tools/registry.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type { ProviderAdapter } from
|
|
1
|
+
import type { AgentEvent, ArtifactEvent, StatusEvent } from '../../types.js';
|
|
2
|
+
import type { SDKMessage } from '@anthropic-ai/claude-agent-sdk';
|
|
3
|
+
import type { ProviderAdapter } from '../types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Claude provider adapter.
|
|
6
6
|
* Transforms Claude SDK messages into our standardized AgentEvent format.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/claude/claude-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/claude/claude-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;;GAGG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,UAAU,CAA0B;IAC5C,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,UAAU;IAQ9C,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE;IAqP/C,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,GAAG,WAAW;IASnE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,aAAa;IAS9D,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,iBAAiB;CAoB1B"}
|
|
@@ -5,152 +5,126 @@ import { ClaudeToolMapper } from './tool-mapper.js';
|
|
|
5
5
|
* Transforms Claude SDK messages into our standardized AgentEvent format.
|
|
6
6
|
*/
|
|
7
7
|
class ClaudeAdapter {
|
|
8
|
-
name =
|
|
8
|
+
name = 'claude';
|
|
9
9
|
toolMapper = new ClaudeToolMapper();
|
|
10
10
|
createRawSDKEvent(sdkMessage) {
|
|
11
11
|
return {
|
|
12
|
-
type:
|
|
12
|
+
type: 'raw_sdk_event',
|
|
13
13
|
ts: Date.now(),
|
|
14
|
-
sdkMessage
|
|
14
|
+
sdkMessage
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
transform(sdkMessage) {
|
|
18
18
|
const baseEvent = { ts: Date.now() };
|
|
19
|
-
if (sdkMessage.type ===
|
|
19
|
+
if (sdkMessage.type === 'stream_event') {
|
|
20
20
|
const event = sdkMessage.event;
|
|
21
21
|
switch (event.type) {
|
|
22
|
-
case
|
|
23
|
-
return [
|
|
24
|
-
{
|
|
22
|
+
case 'message_start':
|
|
23
|
+
return [{
|
|
25
24
|
...baseEvent,
|
|
26
|
-
type:
|
|
25
|
+
type: 'message_start',
|
|
27
26
|
messageId: event.message?.id,
|
|
28
|
-
model: event.message?.model
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
case "content_block_start": {
|
|
27
|
+
model: event.message?.model
|
|
28
|
+
}];
|
|
29
|
+
case 'content_block_start':
|
|
32
30
|
const contentBlock = event.content_block;
|
|
33
31
|
if (!contentBlock)
|
|
34
32
|
return [];
|
|
35
|
-
return [
|
|
36
|
-
{
|
|
33
|
+
return [{
|
|
37
34
|
...baseEvent,
|
|
38
|
-
type:
|
|
35
|
+
type: 'content_block_start',
|
|
39
36
|
index: event.index,
|
|
40
37
|
contentType: contentBlock.type,
|
|
41
|
-
toolName: contentBlock.type ===
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
},
|
|
46
|
-
];
|
|
47
|
-
}
|
|
48
|
-
case "content_block_delta": {
|
|
38
|
+
toolName: contentBlock.type === 'tool_use' ? contentBlock.name : undefined,
|
|
39
|
+
toolId: contentBlock.type === 'tool_use' ? contentBlock.id : undefined
|
|
40
|
+
}];
|
|
41
|
+
case 'content_block_delta':
|
|
49
42
|
const delta = event.delta;
|
|
50
43
|
if (!delta)
|
|
51
44
|
return [];
|
|
52
|
-
if (delta.type ===
|
|
53
|
-
return [
|
|
54
|
-
{
|
|
45
|
+
if (delta.type === 'text_delta') {
|
|
46
|
+
return [{
|
|
55
47
|
...baseEvent,
|
|
56
|
-
type:
|
|
48
|
+
type: 'token',
|
|
57
49
|
content: delta.text,
|
|
58
|
-
contentType:
|
|
59
|
-
}
|
|
60
|
-
];
|
|
50
|
+
contentType: 'text'
|
|
51
|
+
}];
|
|
61
52
|
}
|
|
62
|
-
else if (delta.type ===
|
|
63
|
-
return [
|
|
64
|
-
{
|
|
53
|
+
else if (delta.type === 'input_json_delta') {
|
|
54
|
+
return [{
|
|
65
55
|
...baseEvent,
|
|
66
|
-
type:
|
|
56
|
+
type: 'token',
|
|
67
57
|
content: delta.partial_json,
|
|
68
|
-
contentType:
|
|
69
|
-
}
|
|
70
|
-
];
|
|
58
|
+
contentType: 'tool_input'
|
|
59
|
+
}];
|
|
71
60
|
}
|
|
72
|
-
else if (delta.type ===
|
|
73
|
-
return [
|
|
74
|
-
{
|
|
61
|
+
else if (delta.type === 'thinking_delta') {
|
|
62
|
+
return [{
|
|
75
63
|
...baseEvent,
|
|
76
|
-
type:
|
|
64
|
+
type: 'token',
|
|
77
65
|
content: delta.thinking,
|
|
78
|
-
contentType:
|
|
79
|
-
}
|
|
80
|
-
];
|
|
66
|
+
contentType: 'thinking'
|
|
67
|
+
}];
|
|
81
68
|
}
|
|
82
69
|
return [];
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return [
|
|
86
|
-
{
|
|
70
|
+
case 'content_block_stop':
|
|
71
|
+
return [{
|
|
87
72
|
...baseEvent,
|
|
88
|
-
type:
|
|
89
|
-
index: event.index
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
return [
|
|
94
|
-
{
|
|
73
|
+
type: 'content_block_stop',
|
|
74
|
+
index: event.index
|
|
75
|
+
}];
|
|
76
|
+
case 'message_delta':
|
|
77
|
+
return [{
|
|
95
78
|
...baseEvent,
|
|
96
|
-
type:
|
|
79
|
+
type: 'message_delta',
|
|
97
80
|
stopReason: event.delta?.stop_reason,
|
|
98
81
|
stopSequence: event.delta?.stop_sequence,
|
|
99
|
-
usage: event.usage
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
];
|
|
106
|
-
case "message_stop":
|
|
107
|
-
return [
|
|
108
|
-
{
|
|
82
|
+
usage: event.usage ? {
|
|
83
|
+
outputTokens: event.usage.output_tokens
|
|
84
|
+
} : undefined
|
|
85
|
+
}];
|
|
86
|
+
case 'message_stop':
|
|
87
|
+
return [{
|
|
109
88
|
...baseEvent,
|
|
110
|
-
type:
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
case "ping":
|
|
89
|
+
type: 'message_stop'
|
|
90
|
+
}];
|
|
91
|
+
case 'ping':
|
|
114
92
|
// Ignore ping events
|
|
115
93
|
return [];
|
|
116
|
-
case
|
|
117
|
-
return [
|
|
118
|
-
{
|
|
94
|
+
case 'error':
|
|
95
|
+
return [{
|
|
119
96
|
...baseEvent,
|
|
120
|
-
type:
|
|
121
|
-
message: event.error?.message ||
|
|
97
|
+
type: 'error',
|
|
98
|
+
message: event.error?.message || 'Unknown error',
|
|
122
99
|
error: event.error,
|
|
123
|
-
errorType: event.error?.type ||
|
|
124
|
-
context: event.error
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
sdkError: event.error,
|
|
131
|
-
},
|
|
132
|
-
];
|
|
100
|
+
errorType: event.error?.type || 'stream_error',
|
|
101
|
+
context: event.error ? {
|
|
102
|
+
type: event.error.type,
|
|
103
|
+
code: event.error.code,
|
|
104
|
+
} : undefined,
|
|
105
|
+
sdkError: event.error
|
|
106
|
+
}];
|
|
133
107
|
default:
|
|
134
108
|
return [];
|
|
135
109
|
}
|
|
136
110
|
}
|
|
137
111
|
// Handle assistant messages (full message, not streaming)
|
|
138
|
-
if (sdkMessage.type ===
|
|
112
|
+
if (sdkMessage.type === 'assistant') {
|
|
139
113
|
const message = sdkMessage.message;
|
|
140
114
|
const events = [];
|
|
141
115
|
// Extract tool calls from content blocks
|
|
142
116
|
// A single assistant message can contain multiple tool_use blocks
|
|
143
117
|
if (message.content && Array.isArray(message.content)) {
|
|
144
118
|
for (const block of message.content) {
|
|
145
|
-
if (block.type ===
|
|
119
|
+
if (block.type === 'tool_use') {
|
|
146
120
|
// Create tool_call event and enrich with metadata
|
|
147
121
|
const toolCallEvent = {
|
|
148
122
|
...baseEvent,
|
|
149
|
-
type:
|
|
123
|
+
type: 'tool_call',
|
|
150
124
|
toolName: block.name,
|
|
151
125
|
callId: block.id,
|
|
152
126
|
args: block.input || {},
|
|
153
|
-
parentToolUseId: sdkMessage.parent_tool_use_id
|
|
127
|
+
parentToolUseId: sdkMessage.parent_tool_use_id
|
|
154
128
|
};
|
|
155
129
|
// Enrich with tool metadata and add to events array
|
|
156
130
|
events.push(this.toolMapper.enrichToolCall(toolCallEvent));
|
|
@@ -162,32 +136,30 @@ class ClaudeAdapter {
|
|
|
162
136
|
return events;
|
|
163
137
|
}
|
|
164
138
|
// If no tool calls, emit status event
|
|
165
|
-
return [
|
|
166
|
-
{
|
|
139
|
+
return [{
|
|
167
140
|
...baseEvent,
|
|
168
|
-
type:
|
|
169
|
-
phase:
|
|
141
|
+
type: 'status',
|
|
142
|
+
phase: 'assistant_message',
|
|
170
143
|
messageId: message.id,
|
|
171
|
-
model: message.model
|
|
172
|
-
}
|
|
173
|
-
];
|
|
144
|
+
model: message.model
|
|
145
|
+
}];
|
|
174
146
|
}
|
|
175
147
|
// Handle user messages
|
|
176
|
-
if (sdkMessage.type ===
|
|
148
|
+
if (sdkMessage.type === 'user') {
|
|
177
149
|
const message = sdkMessage.message;
|
|
178
150
|
const events = [];
|
|
179
151
|
// Check for tool results in content blocks, A single user message can contain multiple tool_result blocks
|
|
180
152
|
if (message?.content && Array.isArray(message.content)) {
|
|
181
153
|
for (const block of message.content) {
|
|
182
|
-
if (block.type ===
|
|
154
|
+
if (block.type === 'tool_result') {
|
|
183
155
|
const toolResultEvent = {
|
|
184
156
|
...baseEvent,
|
|
185
|
-
type:
|
|
186
|
-
toolName: block.tool_name ||
|
|
187
|
-
callId: block.tool_use_id ||
|
|
157
|
+
type: 'tool_result',
|
|
158
|
+
toolName: block.tool_name || 'unknown',
|
|
159
|
+
callId: block.tool_use_id || '',
|
|
188
160
|
result: block.content,
|
|
189
161
|
isError: block.is_error,
|
|
190
|
-
parentToolUseId: sdkMessage.parent_tool_use_id
|
|
162
|
+
parentToolUseId: sdkMessage.parent_tool_use_id
|
|
191
163
|
};
|
|
192
164
|
events.push(this.toolMapper.enrichToolResult(toolResultEvent));
|
|
193
165
|
}
|
|
@@ -202,22 +174,19 @@ class ClaudeAdapter {
|
|
|
202
174
|
if (!textContent) {
|
|
203
175
|
return [];
|
|
204
176
|
}
|
|
205
|
-
return [
|
|
206
|
-
{
|
|
177
|
+
return [{
|
|
207
178
|
...baseEvent,
|
|
208
|
-
type:
|
|
179
|
+
type: 'user_message',
|
|
209
180
|
content: textContent,
|
|
210
|
-
isSynthetic: sdkMessage.isSynthetic
|
|
211
|
-
}
|
|
212
|
-
];
|
|
181
|
+
isSynthetic: sdkMessage.isSynthetic
|
|
182
|
+
}];
|
|
213
183
|
}
|
|
214
184
|
// Handle result messages
|
|
215
|
-
if (sdkMessage.type ===
|
|
216
|
-
if (sdkMessage.subtype ===
|
|
217
|
-
return [
|
|
218
|
-
{
|
|
185
|
+
if (sdkMessage.type === 'result') {
|
|
186
|
+
if (sdkMessage.subtype === 'success') {
|
|
187
|
+
return [{
|
|
219
188
|
...baseEvent,
|
|
220
|
-
type:
|
|
189
|
+
type: 'done',
|
|
221
190
|
result: sdkMessage.result,
|
|
222
191
|
durationMs: sdkMessage.duration_ms,
|
|
223
192
|
durationApiMs: sdkMessage.duration_api_ms,
|
|
@@ -225,35 +194,31 @@ class ClaudeAdapter {
|
|
|
225
194
|
totalCostUsd: sdkMessage.total_cost_usd,
|
|
226
195
|
usage: sdkMessage.usage,
|
|
227
196
|
modelUsage: sdkMessage.modelUsage,
|
|
228
|
-
permissionDenials: sdkMessage.permission_denials
|
|
229
|
-
}
|
|
230
|
-
];
|
|
197
|
+
permissionDenials: sdkMessage.permission_denials
|
|
198
|
+
}];
|
|
231
199
|
}
|
|
232
200
|
else {
|
|
233
|
-
return [
|
|
234
|
-
{
|
|
201
|
+
return [{
|
|
235
202
|
...baseEvent,
|
|
236
|
-
type:
|
|
203
|
+
type: 'error',
|
|
237
204
|
message: `Execution failed: ${sdkMessage.subtype}`,
|
|
238
205
|
error: { subtype: sdkMessage.subtype },
|
|
239
|
-
errorType: sdkMessage.subtype ||
|
|
206
|
+
errorType: sdkMessage.subtype || 'result_error',
|
|
240
207
|
context: {
|
|
241
208
|
subtype: sdkMessage.subtype,
|
|
242
209
|
duration_ms: sdkMessage.duration_ms,
|
|
243
|
-
num_turns: sdkMessage.num_turns
|
|
210
|
+
num_turns: sdkMessage.num_turns
|
|
244
211
|
},
|
|
245
|
-
sdkError: sdkMessage
|
|
246
|
-
}
|
|
247
|
-
];
|
|
212
|
+
sdkError: sdkMessage
|
|
213
|
+
}];
|
|
248
214
|
}
|
|
249
215
|
}
|
|
250
216
|
// Handle system messages
|
|
251
|
-
if (sdkMessage.type ===
|
|
252
|
-
if (sdkMessage.subtype ===
|
|
253
|
-
return [
|
|
254
|
-
{
|
|
217
|
+
if (sdkMessage.type === 'system') {
|
|
218
|
+
if (sdkMessage.subtype === 'init') {
|
|
219
|
+
return [{
|
|
255
220
|
...baseEvent,
|
|
256
|
-
type:
|
|
221
|
+
type: 'init',
|
|
257
222
|
model: sdkMessage.model,
|
|
258
223
|
tools: sdkMessage.tools,
|
|
259
224
|
permissionMode: sdkMessage.permissionMode,
|
|
@@ -262,44 +227,41 @@ class ClaudeAdapter {
|
|
|
262
227
|
agents: sdkMessage.agents,
|
|
263
228
|
slashCommands: sdkMessage.slash_commands,
|
|
264
229
|
outputStyle: sdkMessage.output_style,
|
|
265
|
-
mcpServers: sdkMessage.mcp_servers
|
|
266
|
-
}
|
|
267
|
-
];
|
|
230
|
+
mcpServers: sdkMessage.mcp_servers
|
|
231
|
+
}];
|
|
268
232
|
}
|
|
269
|
-
else if (sdkMessage.subtype ===
|
|
270
|
-
return [
|
|
271
|
-
{
|
|
233
|
+
else if (sdkMessage.subtype === 'compact_boundary') {
|
|
234
|
+
return [{
|
|
272
235
|
...baseEvent,
|
|
273
|
-
type:
|
|
236
|
+
type: 'compact_boundary',
|
|
274
237
|
trigger: sdkMessage.compact_metadata.trigger,
|
|
275
|
-
preTokens: sdkMessage.compact_metadata.pre_tokens
|
|
276
|
-
}
|
|
277
|
-
];
|
|
238
|
+
preTokens: sdkMessage.compact_metadata.pre_tokens
|
|
239
|
+
}];
|
|
278
240
|
}
|
|
279
241
|
}
|
|
280
242
|
return [];
|
|
281
243
|
}
|
|
282
244
|
createStatusEvent(phase, additionalData) {
|
|
283
245
|
return {
|
|
284
|
-
type:
|
|
246
|
+
type: 'status',
|
|
285
247
|
ts: Date.now(),
|
|
286
248
|
phase,
|
|
287
|
-
...additionalData
|
|
249
|
+
...additionalData
|
|
288
250
|
};
|
|
289
251
|
}
|
|
290
252
|
createArtifactEvent(kind, content) {
|
|
291
253
|
return {
|
|
292
|
-
type:
|
|
254
|
+
type: 'artifact',
|
|
293
255
|
ts: Date.now(),
|
|
294
256
|
kind,
|
|
295
|
-
content
|
|
257
|
+
content
|
|
296
258
|
};
|
|
297
259
|
}
|
|
298
260
|
extractUserContent(content) {
|
|
299
261
|
if (!content) {
|
|
300
262
|
return null;
|
|
301
263
|
}
|
|
302
|
-
if (typeof content ===
|
|
264
|
+
if (typeof content === 'string') {
|
|
303
265
|
const trimmed = content.trim();
|
|
304
266
|
return trimmed.length > 0 ? trimmed : null;
|
|
305
267
|
}
|
|
@@ -310,32 +272,25 @@ class ClaudeAdapter {
|
|
|
310
272
|
if (extracted) {
|
|
311
273
|
parts.push(extracted);
|
|
312
274
|
}
|
|
313
|
-
else if (block && typeof block ===
|
|
275
|
+
else if (block && typeof block === 'object') {
|
|
314
276
|
const candidate = this.extractFromObject(block);
|
|
315
277
|
if (candidate) {
|
|
316
278
|
parts.push(candidate);
|
|
317
279
|
}
|
|
318
280
|
}
|
|
319
281
|
}
|
|
320
|
-
const text = parts.join(
|
|
282
|
+
const text = parts.join('\n').trim();
|
|
321
283
|
return text.length > 0 ? text : null;
|
|
322
284
|
}
|
|
323
|
-
if (typeof content ===
|
|
285
|
+
if (typeof content === 'object') {
|
|
324
286
|
return this.extractFromObject(content);
|
|
325
287
|
}
|
|
326
288
|
return null;
|
|
327
289
|
}
|
|
328
290
|
extractFromObject(value) {
|
|
329
|
-
const preferredKeys = [
|
|
330
|
-
"text",
|
|
331
|
-
"input_text",
|
|
332
|
-
"input",
|
|
333
|
-
"markdown",
|
|
334
|
-
"content",
|
|
335
|
-
"message",
|
|
336
|
-
];
|
|
291
|
+
const preferredKeys = ['text', 'input_text', 'input', 'markdown', 'content', 'message'];
|
|
337
292
|
for (const key of preferredKeys) {
|
|
338
|
-
if (typeof value[key] ===
|
|
293
|
+
if (typeof value[key] === 'string') {
|
|
339
294
|
const trimmed = value[key].trim();
|
|
340
295
|
if (trimmed.length > 0) {
|
|
341
296
|
return trimmed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-adapter.js","sources":["../../../../src/adapters/claude/claude-adapter.ts"],"sourcesContent":["import type { SDKMessage } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { AgentEvent, ArtifactEvent, StatusEvent } from \"../../types.js\";\nimport type { ProviderAdapter } from \"../types.js\";\nimport { ClaudeToolMapper } from \"./tool-mapper.js\";\n\n/**\n * Claude provider adapter.\n * Transforms Claude SDK messages into our standardized AgentEvent format.\n */\nexport class ClaudeAdapter implements ProviderAdapter {\n readonly name = \"claude\";\n private toolMapper = new ClaudeToolMapper();\n createRawSDKEvent(sdkMessage: any): AgentEvent {\n return {\n type: \"raw_sdk_event\",\n ts: Date.now(),\n sdkMessage,\n };\n }\n\n transform(sdkMessage: SDKMessage): AgentEvent[] {\n const baseEvent = { ts: Date.now() };\n\n if (sdkMessage.type === \"stream_event\") {\n const event = sdkMessage.event;\n\n switch (event.type) {\n case \"message_start\":\n return [\n {\n ...baseEvent,\n type: \"message_start\",\n messageId: event.message?.id,\n model: event.message?.model,\n },\n ];\n\n case \"content_block_start\": {\n const contentBlock = event.content_block;\n if (!contentBlock) return [];\n\n return [\n {\n ...baseEvent,\n type: \"content_block_start\",\n index: event.index,\n contentType: contentBlock.type as\n | \"text\"\n | \"tool_use\"\n | \"thinking\",\n toolName:\n contentBlock.type === \"tool_use\"\n ? contentBlock.name\n : undefined,\n toolId:\n contentBlock.type === \"tool_use\" ? contentBlock.id : undefined,\n },\n ];\n }\n\n case \"content_block_delta\": {\n const delta = event.delta;\n if (!delta) return [];\n\n if (delta.type === \"text_delta\") {\n return [\n {\n ...baseEvent,\n type: \"token\",\n content: delta.text,\n contentType: \"text\",\n },\n ];\n } else if (delta.type === \"input_json_delta\") {\n return [\n {\n ...baseEvent,\n type: \"token\",\n content: delta.partial_json,\n contentType: \"tool_input\",\n },\n ];\n } else if (delta.type === \"thinking_delta\") {\n return [\n {\n ...baseEvent,\n type: \"token\",\n content: delta.thinking,\n contentType: \"thinking\",\n },\n ];\n }\n return [];\n }\n\n case \"content_block_stop\":\n return [\n {\n ...baseEvent,\n type: \"content_block_stop\",\n index: event.index,\n },\n ];\n\n case \"message_delta\":\n return [\n {\n ...baseEvent,\n type: \"message_delta\",\n stopReason: event.delta?.stop_reason,\n stopSequence: event.delta?.stop_sequence,\n usage: event.usage\n ? {\n outputTokens: event.usage.output_tokens,\n }\n : undefined,\n },\n ];\n\n case \"message_stop\":\n return [\n {\n ...baseEvent,\n type: \"message_stop\",\n },\n ];\n\n case \"ping\":\n // Ignore ping events\n return [];\n\n case \"error\":\n return [\n {\n ...baseEvent,\n type: \"error\",\n message: event.error?.message || \"Unknown error\",\n error: event.error,\n errorType: event.error?.type || \"stream_error\",\n context: event.error\n ? {\n type: event.error.type,\n code: event.error.code,\n }\n : undefined,\n sdkError: event.error,\n },\n ];\n\n default:\n return [];\n }\n }\n\n // Handle assistant messages (full message, not streaming)\n if (sdkMessage.type === \"assistant\") {\n const message = sdkMessage.message;\n const events: AgentEvent[] = [];\n\n // Extract tool calls from content blocks\n // A single assistant message can contain multiple tool_use blocks\n if (message.content && Array.isArray(message.content)) {\n for (const block of message.content) {\n if (block.type === \"tool_use\") {\n // Create tool_call event and enrich with metadata\n const toolCallEvent = {\n ...baseEvent,\n type: \"tool_call\" as const,\n toolName: block.name,\n callId: block.id,\n args: block.input || {},\n parentToolUseId: sdkMessage.parent_tool_use_id,\n };\n // Enrich with tool metadata and add to events array\n events.push(this.toolMapper.enrichToolCall(toolCallEvent));\n }\n }\n }\n\n // If we found tool calls, return them\n if (events.length > 0) {\n return events;\n }\n\n // If no tool calls, emit status event\n return [\n {\n ...baseEvent,\n type: \"status\",\n phase: \"assistant_message\",\n messageId: message.id,\n model: message.model,\n },\n ];\n }\n\n // Handle user messages\n if (sdkMessage.type === \"user\") {\n const message = sdkMessage.message;\n const events: AgentEvent[] = [];\n\n // Check for tool results in content blocks, A single user message can contain multiple tool_result blocks\n if (message?.content && Array.isArray(message.content)) {\n for (const block of message.content) {\n if (block.type === \"tool_result\") {\n const toolResultEvent = {\n ...baseEvent,\n type: \"tool_result\" as const,\n toolName: block.tool_name || \"unknown\",\n callId: block.tool_use_id || \"\",\n result: block.content,\n isError: block.is_error,\n parentToolUseId: sdkMessage.parent_tool_use_id,\n };\n events.push(this.toolMapper.enrichToolResult(toolResultEvent));\n }\n }\n }\n\n // If we found tool results, return them\n if (events.length > 0) {\n return events;\n }\n\n // Otherwise extract text content\n const textContent = this.extractUserContent(message?.content);\n if (!textContent) {\n return [];\n }\n return [\n {\n ...baseEvent,\n type: \"user_message\",\n content: textContent,\n isSynthetic: sdkMessage.isSynthetic,\n },\n ];\n }\n\n // Handle result messages\n if (sdkMessage.type === \"result\") {\n if (sdkMessage.subtype === \"success\") {\n return [\n {\n ...baseEvent,\n type: \"done\",\n result: sdkMessage.result,\n durationMs: sdkMessage.duration_ms,\n durationApiMs: sdkMessage.duration_api_ms,\n numTurns: sdkMessage.num_turns,\n totalCostUsd: sdkMessage.total_cost_usd,\n usage: sdkMessage.usage,\n modelUsage: sdkMessage.modelUsage,\n permissionDenials: sdkMessage.permission_denials,\n },\n ];\n } else {\n return [\n {\n ...baseEvent,\n type: \"error\",\n message: `Execution failed: ${sdkMessage.subtype}`,\n error: { subtype: sdkMessage.subtype },\n errorType: sdkMessage.subtype || \"result_error\",\n context: {\n subtype: sdkMessage.subtype,\n duration_ms: sdkMessage.duration_ms,\n num_turns: sdkMessage.num_turns,\n },\n sdkError: sdkMessage,\n },\n ];\n }\n }\n\n // Handle system messages\n if (sdkMessage.type === \"system\") {\n if (sdkMessage.subtype === \"init\") {\n return [\n {\n ...baseEvent,\n type: \"init\",\n model: sdkMessage.model,\n tools: sdkMessage.tools,\n permissionMode: sdkMessage.permissionMode,\n cwd: sdkMessage.cwd,\n apiKeySource: sdkMessage.apiKeySource,\n agents: sdkMessage.agents,\n slashCommands: sdkMessage.slash_commands,\n outputStyle: sdkMessage.output_style,\n mcpServers: sdkMessage.mcp_servers,\n },\n ];\n } else if (sdkMessage.subtype === \"compact_boundary\") {\n return [\n {\n ...baseEvent,\n type: \"compact_boundary\",\n trigger: sdkMessage.compact_metadata.trigger,\n preTokens: sdkMessage.compact_metadata.pre_tokens,\n },\n ];\n }\n }\n\n return [];\n }\n\n createStatusEvent(phase: string, additionalData?: any): StatusEvent {\n return {\n type: \"status\",\n ts: Date.now(),\n phase,\n ...additionalData,\n };\n }\n\n createArtifactEvent(kind: string, content: any): ArtifactEvent {\n return {\n type: \"artifact\",\n ts: Date.now(),\n kind,\n content,\n };\n }\n\n private extractUserContent(content: unknown): string | null {\n if (!content) {\n return null;\n }\n\n if (typeof content === \"string\") {\n const trimmed = content.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n const extracted = this.extractUserContent(block);\n if (extracted) {\n parts.push(extracted);\n } else if (block && typeof block === \"object\") {\n const candidate = this.extractFromObject(\n block as Record<string, unknown>,\n );\n if (candidate) {\n parts.push(candidate);\n }\n }\n }\n const text = parts.join(\"\\n\").trim();\n return text.length > 0 ? text : null;\n }\n\n if (typeof content === \"object\") {\n return this.extractFromObject(content as Record<string, unknown>);\n }\n\n return null;\n }\n\n private extractFromObject(value: Record<string, unknown>): string | null {\n const preferredKeys = [\n \"text\",\n \"input_text\",\n \"input\",\n \"markdown\",\n \"content\",\n \"message\",\n ];\n for (const key of preferredKeys) {\n if (typeof value[key] === \"string\") {\n const trimmed = (value[key] as string).trim();\n if (trimmed.length > 0) {\n return trimmed;\n }\n }\n }\n\n for (const entry of Object.values(value)) {\n const extracted = this.extractUserContent(entry);\n if (extracted) {\n return extracted;\n }\n }\n\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude-adapter.js","sources":["../../../../src/adapters/claude/claude-adapter.ts"],"sourcesContent":["import type { AgentEvent, ArtifactEvent, StatusEvent } from '../../types.js';\nimport type { SDKMessage } from '@anthropic-ai/claude-agent-sdk';\nimport type { ProviderAdapter } from '../types.js';\nimport { ClaudeToolMapper } from './tool-mapper.js';\n\n/**\n * Claude provider adapter.\n * Transforms Claude SDK messages into our standardized AgentEvent format.\n */\nexport class ClaudeAdapter implements ProviderAdapter {\n readonly name = 'claude';\n private toolMapper = new ClaudeToolMapper();\n createRawSDKEvent(sdkMessage: any): AgentEvent {\n return {\n type: 'raw_sdk_event',\n ts: Date.now(),\n sdkMessage\n };\n }\n\n transform(sdkMessage: SDKMessage): AgentEvent[] {\n const baseEvent = { ts: Date.now() };\n\n if (sdkMessage.type === 'stream_event') {\n const event = sdkMessage.event;\n\n switch (event.type) {\n case 'message_start':\n return [{\n ...baseEvent,\n type: 'message_start',\n messageId: event.message?.id,\n model: event.message?.model\n }];\n\n case 'content_block_start':\n const contentBlock = event.content_block;\n if (!contentBlock) return [];\n\n return [{\n ...baseEvent,\n type: 'content_block_start',\n index: event.index,\n contentType: contentBlock.type as 'text' | 'tool_use' | 'thinking',\n toolName: contentBlock.type === 'tool_use' ? contentBlock.name : undefined,\n toolId: contentBlock.type === 'tool_use' ? contentBlock.id : undefined\n }];\n\n case 'content_block_delta':\n const delta = event.delta;\n if (!delta) return [];\n\n if (delta.type === 'text_delta') {\n return [{\n ...baseEvent,\n type: 'token',\n content: delta.text,\n contentType: 'text'\n }];\n } else if (delta.type === 'input_json_delta') {\n return [{\n ...baseEvent,\n type: 'token',\n content: delta.partial_json,\n contentType: 'tool_input'\n }];\n } else if (delta.type === 'thinking_delta') {\n return [{\n ...baseEvent,\n type: 'token',\n content: delta.thinking,\n contentType: 'thinking'\n }];\n }\n return [];\n\n case 'content_block_stop':\n return [{\n ...baseEvent,\n type: 'content_block_stop',\n index: event.index\n }];\n\n case 'message_delta':\n return [{\n ...baseEvent,\n type: 'message_delta',\n stopReason: event.delta?.stop_reason,\n stopSequence: event.delta?.stop_sequence,\n usage: event.usage ? {\n outputTokens: event.usage.output_tokens\n } : undefined\n }];\n\n case 'message_stop':\n return [{\n ...baseEvent,\n type: 'message_stop'\n }];\n\n case 'ping':\n // Ignore ping events\n return [];\n\n case 'error':\n return [{\n ...baseEvent,\n type: 'error',\n message: event.error?.message || 'Unknown error',\n error: event.error,\n errorType: event.error?.type || 'stream_error',\n context: event.error ? {\n type: event.error.type,\n code: event.error.code,\n } : undefined,\n sdkError: event.error\n }];\n\n default:\n return [];\n }\n }\n\n // Handle assistant messages (full message, not streaming)\n if (sdkMessage.type === 'assistant') {\n const message = sdkMessage.message;\n const events: AgentEvent[] = [];\n\n // Extract tool calls from content blocks\n // A single assistant message can contain multiple tool_use blocks\n if (message.content && Array.isArray(message.content)) {\n for (const block of message.content) {\n if (block.type === 'tool_use') {\n // Create tool_call event and enrich with metadata\n const toolCallEvent = {\n ...baseEvent,\n type: 'tool_call' as const,\n toolName: block.name,\n callId: block.id,\n args: block.input || {},\n parentToolUseId: sdkMessage.parent_tool_use_id\n };\n // Enrich with tool metadata and add to events array\n events.push(this.toolMapper.enrichToolCall(toolCallEvent));\n }\n }\n }\n\n // If we found tool calls, return them\n if (events.length > 0) {\n return events;\n }\n\n // If no tool calls, emit status event\n return [{\n ...baseEvent,\n type: 'status',\n phase: 'assistant_message',\n messageId: message.id,\n model: message.model\n }];\n }\n\n // Handle user messages\n if (sdkMessage.type === 'user') {\n const message = sdkMessage.message;\n const events: AgentEvent[] = [];\n\n // Check for tool results in content blocks, A single user message can contain multiple tool_result blocks\n if (message?.content && Array.isArray(message.content)) { \n for (const block of message.content) {\n if (block.type === 'tool_result') {\n const toolResultEvent = {\n ...baseEvent,\n type: 'tool_result' as const,\n toolName: block.tool_name || 'unknown',\n callId: block.tool_use_id || '',\n result: block.content,\n isError: block.is_error,\n parentToolUseId: sdkMessage.parent_tool_use_id\n };\n events.push(this.toolMapper.enrichToolResult(toolResultEvent));\n }\n }\n }\n\n // If we found tool results, return them\n if (events.length > 0) {\n return events;\n }\n\n // Otherwise extract text content\n const textContent = this.extractUserContent(message?.content);\n if (!textContent) {\n return [];\n }\n return [{\n ...baseEvent,\n type: 'user_message',\n content: textContent,\n isSynthetic: sdkMessage.isSynthetic\n }];\n }\n\n // Handle result messages\n if (sdkMessage.type === 'result') {\n if (sdkMessage.subtype === 'success') {\n return [{\n ...baseEvent,\n type: 'done',\n result: sdkMessage.result,\n durationMs: sdkMessage.duration_ms,\n durationApiMs: sdkMessage.duration_api_ms,\n numTurns: sdkMessage.num_turns,\n totalCostUsd: sdkMessage.total_cost_usd,\n usage: sdkMessage.usage,\n modelUsage: sdkMessage.modelUsage,\n permissionDenials: sdkMessage.permission_denials\n }];\n } else {\n return [{\n ...baseEvent,\n type: 'error',\n message: `Execution failed: ${sdkMessage.subtype}`,\n error: { subtype: sdkMessage.subtype },\n errorType: sdkMessage.subtype || 'result_error',\n context: {\n subtype: sdkMessage.subtype,\n duration_ms: sdkMessage.duration_ms,\n num_turns: sdkMessage.num_turns\n },\n sdkError: sdkMessage\n }];\n }\n }\n\n // Handle system messages\n if (sdkMessage.type === 'system') {\n if (sdkMessage.subtype === 'init') {\n return [{\n ...baseEvent,\n type: 'init',\n model: sdkMessage.model,\n tools: sdkMessage.tools,\n permissionMode: sdkMessage.permissionMode,\n cwd: sdkMessage.cwd,\n apiKeySource: sdkMessage.apiKeySource,\n agents: sdkMessage.agents,\n slashCommands: sdkMessage.slash_commands,\n outputStyle: sdkMessage.output_style,\n mcpServers: sdkMessage.mcp_servers\n }];\n } else if (sdkMessage.subtype === 'compact_boundary') {\n return [{\n ...baseEvent,\n type: 'compact_boundary',\n trigger: sdkMessage.compact_metadata.trigger,\n preTokens: sdkMessage.compact_metadata.pre_tokens\n }];\n }\n }\n\n return [];\n }\n \n createStatusEvent(phase: string, additionalData?: any): StatusEvent {\n return {\n type: 'status',\n ts: Date.now(),\n phase,\n ...additionalData\n };\n }\n\n createArtifactEvent(kind: string, content: any): ArtifactEvent {\n return {\n type: 'artifact',\n ts: Date.now(),\n kind,\n content\n };\n }\n\n private extractUserContent(content: unknown): string | null {\n if (!content) {\n return null;\n }\n\n if (typeof content === 'string') {\n const trimmed = content.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n const extracted = this.extractUserContent(block);\n if (extracted) {\n parts.push(extracted);\n } else if (block && typeof block === 'object') {\n const candidate = this.extractFromObject(block as Record<string, unknown>);\n if (candidate) {\n parts.push(candidate);\n }\n }\n }\n const text = parts.join('\\n').trim();\n return text.length > 0 ? text : null;\n }\n\n if (typeof content === 'object') {\n return this.extractFromObject(content as Record<string, unknown>);\n }\n\n return null;\n }\n\n private extractFromObject(value: Record<string, unknown>): string | null {\n const preferredKeys = ['text', 'input_text', 'input', 'markdown', 'content', 'message'];\n for (const key of preferredKeys) {\n if (typeof value[key] === 'string') {\n const trimmed = (value[key] as string).trim();\n if (trimmed.length > 0) {\n return trimmed;\n }\n }\n }\n\n for (const entry of Object.values(value)) {\n const extracted = this.extractUserContent(entry);\n if (extracted) {\n return extracted;\n }\n }\n\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
|