@posthog/agent 1.22.0 → 1.24.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/CLAUDE.md +3 -3
- package/README.md +3 -3
- 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 +156 -111
- 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 +143 -85
- 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 +59 -58
- 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 +93 -69
- package/dist/src/git-manager.js.map +1 -1
- package/dist/src/posthog-api.d.ts +2 -3
- 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 +123 -93
- 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 +19 -18
- package/dist/src/task-manager.js.map +1 -1
- package/dist/src/task-progress-reporter.d.ts +3 -4
- package/dist/src/task-progress-reporter.d.ts.map +1 -1
- package/dist/src/task-progress-reporter.js +59 -54
- 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 +30 -28
- 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 +29 -24
- 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 +46 -38
- 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 +54 -48
- 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 +58 -46
- 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 +68 -56
- 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 +7 -4
- package/dist/src/workflow/utils.js.map +1 -1
- package/package.json +8 -8
- package/src/adapters/claude/claude-adapter.ts +220 -168
- package/src/adapters/claude/tool-mapper.ts +2 -2
- package/src/adapters/types.ts +1 -1
- package/src/agent.ts +579 -444
- package/src/agents/execution.ts +1 -1
- package/src/agents/planning.ts +1 -1
- package/src/agents/research.ts +0 -1
- package/src/file-manager.ts +64 -63
- package/src/git-manager.ts +152 -87
- package/src/posthog-api.ts +122 -82
- package/src/prompt-builder.ts +180 -135
- package/src/task-manager.ts +38 -30
- package/src/task-progress-reporter.ts +70 -59
- package/src/template-manager.ts +98 -45
- package/src/todo-manager.ts +35 -30
- package/src/tools/registry.ts +62 -62
- package/src/tools/types.ts +36 -36
- package/src/types.ts +93 -71
- package/src/utils/logger.ts +62 -56
- package/src/workflow/config.ts +48 -48
- package/src/workflow/steps/build.ts +122 -113
- package/src/workflow/steps/finalize.ts +214 -182
- package/src/workflow/steps/plan.ts +151 -131
- package/src/workflow/steps/research.ts +205 -186
- package/src/workflow/types.ts +38 -36
- package/src/workflow/utils.ts +37 -34
- package/LICENSE +0 -33
package/CLAUDE.md
CHANGED
|
@@ -4,16 +4,16 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
This is a TypeScript-based agent framework that wraps the Anthropic Claude Agent SDK, providing plan-and-execute capabilities for PostHog's Array desktop app and future backend services. It uses a Git-based workflow with file system storage for task artifacts.
|
|
7
|
+
This is a TypeScript-based agent framework that wraps the Anthropic Claude Agent SDK, providing plan-and-execute capabilities for PostHog's Array desktop app and future backend services. It uses a Git-based workflow with file system storage for task artifacts.
|
|
8
8
|
|
|
9
9
|
## Essential Commands
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
# Install dependencies
|
|
13
|
-
|
|
13
|
+
pnpm install
|
|
14
14
|
|
|
15
15
|
# Run example usage (demonstrates all features)
|
|
16
|
-
|
|
16
|
+
pnpm run example-usage.ts
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Note: No test, lint, or build scripts are currently defined in package.json.
|
package/README.md
CHANGED
|
@@ -5,8 +5,8 @@ TypeScript agent framework that wraps the Claude Agent SDK for PostHog's Array d
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
pnpm install
|
|
9
|
+
pnpm run example
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
## Key Features
|
|
@@ -131,7 +131,7 @@ function handleLiveEvent(event: AgentEvent) {
|
|
|
131
131
|
|
|
132
132
|
## Requirements
|
|
133
133
|
|
|
134
|
-
-
|
|
134
|
+
- PNPM
|
|
135
135
|
- Git repository
|
|
136
136
|
- PostHog API access
|
|
137
137
|
- Claude API access via `@anthropic-ai/claude-agent-sdk`
|
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 { ClaudeAdapter } from "./src/adapters/claude/claude-adapter.js";
|
|
2
|
+
export type { ProviderAdapter } from "./src/adapters/types.js";
|
|
3
|
+
export { Agent } from "./src/agent.js";
|
|
4
|
+
export type { TodoItem, TodoList } from "./src/todo-manager.js";
|
|
5
|
+
export { TodoManager } from "./src/todo-manager.js";
|
|
6
|
+
export { ToolRegistry } from "./src/tools/registry.js";
|
|
7
|
+
export type { BashOutputTool, BashTool, EditTool, ExitPlanModeTool, GlobTool, GrepTool, KillShellTool, KnownTool, NotebookEditTool, ReadTool, SlashCommandTool, TaskTool, TodoWriteTool, Tool, ToolCategory, WebFetchTool, WebSearchTool, WriteTool, } from "./src/tools/types.js";
|
|
8
|
+
export type { AgentConfig, AgentEvent, ExecutionResult, McpServerConfig, ResearchEvaluation, SupportingFile, Task, TaskRun, } from "./src/types.js";
|
|
9
|
+
export { PermissionMode } from "./src/types.js";
|
|
10
|
+
export type { LoggerConfig } from "./src/utils/logger.js";
|
|
11
|
+
export { Logger, LogLevel, } from "./src/utils/logger.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":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,YAAY,EACV,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,IAAI,EACJ,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,MAAM,EACN,QAAQ,GACT,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
export { ClaudeAdapter } from './src/adapters/claude/claude-adapter.js';
|
|
1
2
|
export { Agent } from './src/agent.js';
|
|
2
|
-
export { PermissionMode } from './src/types.js';
|
|
3
|
-
export { LogLevel, Logger } from './src/utils/logger.js';
|
|
4
3
|
export { TodoManager } from './src/todo-manager.js';
|
|
5
|
-
export { ClaudeAdapter } from './src/adapters/claude/claude-adapter.js';
|
|
6
4
|
export { ToolRegistry } from './src/tools/registry.js';
|
|
5
|
+
export { PermissionMode } from './src/types.js';
|
|
6
|
+
export { LogLevel, Logger } from './src/utils/logger.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 { SDKMessage } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
+
import type { AgentEvent, ArtifactEvent, StatusEvent } from "../../types.js";
|
|
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,
|
|
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,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7E,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;IAgS/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;IAoC1B,OAAO,CAAC,iBAAiB;CA2B1B"}
|
|
@@ -5,126 +5,152 @@ 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 [
|
|
22
|
+
case "message_start":
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
24
25
|
...baseEvent,
|
|
25
|
-
type:
|
|
26
|
+
type: "message_start",
|
|
26
27
|
messageId: event.message?.id,
|
|
27
|
-
model: event.message?.model
|
|
28
|
-
}
|
|
29
|
-
|
|
28
|
+
model: event.message?.model,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
case "content_block_start": {
|
|
30
32
|
const contentBlock = event.content_block;
|
|
31
33
|
if (!contentBlock)
|
|
32
34
|
return [];
|
|
33
|
-
return [
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
34
37
|
...baseEvent,
|
|
35
|
-
type:
|
|
38
|
+
type: "content_block_start",
|
|
36
39
|
index: event.index,
|
|
37
40
|
contentType: contentBlock.type,
|
|
38
|
-
toolName: contentBlock.type ===
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
toolName: contentBlock.type === "tool_use"
|
|
42
|
+
? contentBlock.name
|
|
43
|
+
: undefined,
|
|
44
|
+
toolId: contentBlock.type === "tool_use" ? contentBlock.id : undefined,
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
case "content_block_delta": {
|
|
42
49
|
const delta = event.delta;
|
|
43
50
|
if (!delta)
|
|
44
51
|
return [];
|
|
45
|
-
if (delta.type ===
|
|
46
|
-
return [
|
|
52
|
+
if (delta.type === "text_delta") {
|
|
53
|
+
return [
|
|
54
|
+
{
|
|
47
55
|
...baseEvent,
|
|
48
|
-
type:
|
|
56
|
+
type: "token",
|
|
49
57
|
content: delta.text,
|
|
50
|
-
contentType:
|
|
51
|
-
}
|
|
58
|
+
contentType: "text",
|
|
59
|
+
},
|
|
60
|
+
];
|
|
52
61
|
}
|
|
53
|
-
else if (delta.type ===
|
|
54
|
-
return [
|
|
62
|
+
else if (delta.type === "input_json_delta") {
|
|
63
|
+
return [
|
|
64
|
+
{
|
|
55
65
|
...baseEvent,
|
|
56
|
-
type:
|
|
66
|
+
type: "token",
|
|
57
67
|
content: delta.partial_json,
|
|
58
|
-
contentType:
|
|
59
|
-
}
|
|
68
|
+
contentType: "tool_input",
|
|
69
|
+
},
|
|
70
|
+
];
|
|
60
71
|
}
|
|
61
|
-
else if (delta.type ===
|
|
62
|
-
return [
|
|
72
|
+
else if (delta.type === "thinking_delta") {
|
|
73
|
+
return [
|
|
74
|
+
{
|
|
63
75
|
...baseEvent,
|
|
64
|
-
type:
|
|
76
|
+
type: "token",
|
|
65
77
|
content: delta.thinking,
|
|
66
|
-
contentType:
|
|
67
|
-
}
|
|
78
|
+
contentType: "thinking",
|
|
79
|
+
},
|
|
80
|
+
];
|
|
68
81
|
}
|
|
69
82
|
return [];
|
|
70
|
-
|
|
71
|
-
|
|
83
|
+
}
|
|
84
|
+
case "content_block_stop":
|
|
85
|
+
return [
|
|
86
|
+
{
|
|
72
87
|
...baseEvent,
|
|
73
|
-
type:
|
|
74
|
-
index: event.index
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
88
|
+
type: "content_block_stop",
|
|
89
|
+
index: event.index,
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
case "message_delta":
|
|
93
|
+
return [
|
|
94
|
+
{
|
|
78
95
|
...baseEvent,
|
|
79
|
-
type:
|
|
96
|
+
type: "message_delta",
|
|
80
97
|
stopReason: event.delta?.stop_reason,
|
|
81
98
|
stopSequence: event.delta?.stop_sequence,
|
|
82
|
-
usage: event.usage
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
99
|
+
usage: event.usage
|
|
100
|
+
? {
|
|
101
|
+
outputTokens: event.usage.output_tokens,
|
|
102
|
+
}
|
|
103
|
+
: undefined,
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
case "message_stop":
|
|
107
|
+
return [
|
|
108
|
+
{
|
|
88
109
|
...baseEvent,
|
|
89
|
-
type:
|
|
90
|
-
}
|
|
91
|
-
|
|
110
|
+
type: "message_stop",
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
case "ping":
|
|
92
114
|
// Ignore ping events
|
|
93
115
|
return [];
|
|
94
|
-
case
|
|
95
|
-
return [
|
|
116
|
+
case "error":
|
|
117
|
+
return [
|
|
118
|
+
{
|
|
96
119
|
...baseEvent,
|
|
97
|
-
type:
|
|
98
|
-
message: event.error?.message ||
|
|
120
|
+
type: "error",
|
|
121
|
+
message: event.error?.message || "Unknown error",
|
|
99
122
|
error: event.error,
|
|
100
|
-
errorType: event.error?.type ||
|
|
101
|
-
context: event.error
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
123
|
+
errorType: event.error?.type || "stream_error",
|
|
124
|
+
context: event.error
|
|
125
|
+
? {
|
|
126
|
+
type: event.error.type,
|
|
127
|
+
code: event.error.code,
|
|
128
|
+
}
|
|
129
|
+
: undefined,
|
|
130
|
+
sdkError: event.error,
|
|
131
|
+
},
|
|
132
|
+
];
|
|
107
133
|
default:
|
|
108
134
|
return [];
|
|
109
135
|
}
|
|
110
136
|
}
|
|
111
137
|
// Handle assistant messages (full message, not streaming)
|
|
112
|
-
if (sdkMessage.type ===
|
|
138
|
+
if (sdkMessage.type === "assistant") {
|
|
113
139
|
const message = sdkMessage.message;
|
|
114
140
|
const events = [];
|
|
115
141
|
// Extract tool calls from content blocks
|
|
116
142
|
// A single assistant message can contain multiple tool_use blocks
|
|
117
143
|
if (message.content && Array.isArray(message.content)) {
|
|
118
144
|
for (const block of message.content) {
|
|
119
|
-
if (block.type ===
|
|
145
|
+
if (block.type === "tool_use") {
|
|
120
146
|
// Create tool_call event and enrich with metadata
|
|
121
147
|
const toolCallEvent = {
|
|
122
148
|
...baseEvent,
|
|
123
|
-
type:
|
|
149
|
+
type: "tool_call",
|
|
124
150
|
toolName: block.name,
|
|
125
151
|
callId: block.id,
|
|
126
152
|
args: block.input || {},
|
|
127
|
-
parentToolUseId: sdkMessage.parent_tool_use_id
|
|
153
|
+
parentToolUseId: sdkMessage.parent_tool_use_id,
|
|
128
154
|
};
|
|
129
155
|
// Enrich with tool metadata and add to events array
|
|
130
156
|
events.push(this.toolMapper.enrichToolCall(toolCallEvent));
|
|
@@ -136,30 +162,32 @@ class ClaudeAdapter {
|
|
|
136
162
|
return events;
|
|
137
163
|
}
|
|
138
164
|
// If no tool calls, emit status event
|
|
139
|
-
return [
|
|
165
|
+
return [
|
|
166
|
+
{
|
|
140
167
|
...baseEvent,
|
|
141
|
-
type:
|
|
142
|
-
phase:
|
|
168
|
+
type: "status",
|
|
169
|
+
phase: "assistant_message",
|
|
143
170
|
messageId: message.id,
|
|
144
|
-
model: message.model
|
|
145
|
-
}
|
|
171
|
+
model: message.model,
|
|
172
|
+
},
|
|
173
|
+
];
|
|
146
174
|
}
|
|
147
175
|
// Handle user messages
|
|
148
|
-
if (sdkMessage.type ===
|
|
176
|
+
if (sdkMessage.type === "user") {
|
|
149
177
|
const message = sdkMessage.message;
|
|
150
178
|
const events = [];
|
|
151
179
|
// Check for tool results in content blocks, A single user message can contain multiple tool_result blocks
|
|
152
180
|
if (message?.content && Array.isArray(message.content)) {
|
|
153
181
|
for (const block of message.content) {
|
|
154
|
-
if (block.type ===
|
|
182
|
+
if (block.type === "tool_result") {
|
|
155
183
|
const toolResultEvent = {
|
|
156
184
|
...baseEvent,
|
|
157
|
-
type:
|
|
158
|
-
toolName: block.tool_name ||
|
|
159
|
-
callId: block.tool_use_id ||
|
|
185
|
+
type: "tool_result",
|
|
186
|
+
toolName: block.tool_name || "unknown",
|
|
187
|
+
callId: block.tool_use_id || "",
|
|
160
188
|
result: block.content,
|
|
161
189
|
isError: block.is_error,
|
|
162
|
-
parentToolUseId: sdkMessage.parent_tool_use_id
|
|
190
|
+
parentToolUseId: sdkMessage.parent_tool_use_id,
|
|
163
191
|
};
|
|
164
192
|
events.push(this.toolMapper.enrichToolResult(toolResultEvent));
|
|
165
193
|
}
|
|
@@ -174,19 +202,22 @@ class ClaudeAdapter {
|
|
|
174
202
|
if (!textContent) {
|
|
175
203
|
return [];
|
|
176
204
|
}
|
|
177
|
-
return [
|
|
205
|
+
return [
|
|
206
|
+
{
|
|
178
207
|
...baseEvent,
|
|
179
|
-
type:
|
|
208
|
+
type: "user_message",
|
|
180
209
|
content: textContent,
|
|
181
|
-
isSynthetic: sdkMessage.isSynthetic
|
|
182
|
-
}
|
|
210
|
+
isSynthetic: sdkMessage.isSynthetic,
|
|
211
|
+
},
|
|
212
|
+
];
|
|
183
213
|
}
|
|
184
214
|
// Handle result messages
|
|
185
|
-
if (sdkMessage.type ===
|
|
186
|
-
if (sdkMessage.subtype ===
|
|
187
|
-
return [
|
|
215
|
+
if (sdkMessage.type === "result") {
|
|
216
|
+
if (sdkMessage.subtype === "success") {
|
|
217
|
+
return [
|
|
218
|
+
{
|
|
188
219
|
...baseEvent,
|
|
189
|
-
type:
|
|
220
|
+
type: "done",
|
|
190
221
|
result: sdkMessage.result,
|
|
191
222
|
durationMs: sdkMessage.duration_ms,
|
|
192
223
|
durationApiMs: sdkMessage.duration_api_ms,
|
|
@@ -194,31 +225,35 @@ class ClaudeAdapter {
|
|
|
194
225
|
totalCostUsd: sdkMessage.total_cost_usd,
|
|
195
226
|
usage: sdkMessage.usage,
|
|
196
227
|
modelUsage: sdkMessage.modelUsage,
|
|
197
|
-
permissionDenials: sdkMessage.permission_denials
|
|
198
|
-
}
|
|
228
|
+
permissionDenials: sdkMessage.permission_denials,
|
|
229
|
+
},
|
|
230
|
+
];
|
|
199
231
|
}
|
|
200
232
|
else {
|
|
201
|
-
return [
|
|
233
|
+
return [
|
|
234
|
+
{
|
|
202
235
|
...baseEvent,
|
|
203
|
-
type:
|
|
236
|
+
type: "error",
|
|
204
237
|
message: `Execution failed: ${sdkMessage.subtype}`,
|
|
205
238
|
error: { subtype: sdkMessage.subtype },
|
|
206
|
-
errorType: sdkMessage.subtype ||
|
|
239
|
+
errorType: sdkMessage.subtype || "result_error",
|
|
207
240
|
context: {
|
|
208
241
|
subtype: sdkMessage.subtype,
|
|
209
242
|
duration_ms: sdkMessage.duration_ms,
|
|
210
|
-
num_turns: sdkMessage.num_turns
|
|
243
|
+
num_turns: sdkMessage.num_turns,
|
|
211
244
|
},
|
|
212
|
-
sdkError: sdkMessage
|
|
213
|
-
}
|
|
245
|
+
sdkError: sdkMessage,
|
|
246
|
+
},
|
|
247
|
+
];
|
|
214
248
|
}
|
|
215
249
|
}
|
|
216
250
|
// Handle system messages
|
|
217
|
-
if (sdkMessage.type ===
|
|
218
|
-
if (sdkMessage.subtype ===
|
|
219
|
-
return [
|
|
251
|
+
if (sdkMessage.type === "system") {
|
|
252
|
+
if (sdkMessage.subtype === "init") {
|
|
253
|
+
return [
|
|
254
|
+
{
|
|
220
255
|
...baseEvent,
|
|
221
|
-
type:
|
|
256
|
+
type: "init",
|
|
222
257
|
model: sdkMessage.model,
|
|
223
258
|
tools: sdkMessage.tools,
|
|
224
259
|
permissionMode: sdkMessage.permissionMode,
|
|
@@ -227,41 +262,44 @@ class ClaudeAdapter {
|
|
|
227
262
|
agents: sdkMessage.agents,
|
|
228
263
|
slashCommands: sdkMessage.slash_commands,
|
|
229
264
|
outputStyle: sdkMessage.output_style,
|
|
230
|
-
mcpServers: sdkMessage.mcp_servers
|
|
231
|
-
}
|
|
265
|
+
mcpServers: sdkMessage.mcp_servers,
|
|
266
|
+
},
|
|
267
|
+
];
|
|
232
268
|
}
|
|
233
|
-
else if (sdkMessage.subtype ===
|
|
234
|
-
return [
|
|
269
|
+
else if (sdkMessage.subtype === "compact_boundary") {
|
|
270
|
+
return [
|
|
271
|
+
{
|
|
235
272
|
...baseEvent,
|
|
236
|
-
type:
|
|
273
|
+
type: "compact_boundary",
|
|
237
274
|
trigger: sdkMessage.compact_metadata.trigger,
|
|
238
|
-
preTokens: sdkMessage.compact_metadata.pre_tokens
|
|
239
|
-
}
|
|
275
|
+
preTokens: sdkMessage.compact_metadata.pre_tokens,
|
|
276
|
+
},
|
|
277
|
+
];
|
|
240
278
|
}
|
|
241
279
|
}
|
|
242
280
|
return [];
|
|
243
281
|
}
|
|
244
282
|
createStatusEvent(phase, additionalData) {
|
|
245
283
|
return {
|
|
246
|
-
type:
|
|
284
|
+
type: "status",
|
|
247
285
|
ts: Date.now(),
|
|
248
286
|
phase,
|
|
249
|
-
...additionalData
|
|
287
|
+
...additionalData,
|
|
250
288
|
};
|
|
251
289
|
}
|
|
252
290
|
createArtifactEvent(kind, content) {
|
|
253
291
|
return {
|
|
254
|
-
type:
|
|
292
|
+
type: "artifact",
|
|
255
293
|
ts: Date.now(),
|
|
256
294
|
kind,
|
|
257
|
-
content
|
|
295
|
+
content,
|
|
258
296
|
};
|
|
259
297
|
}
|
|
260
298
|
extractUserContent(content) {
|
|
261
299
|
if (!content) {
|
|
262
300
|
return null;
|
|
263
301
|
}
|
|
264
|
-
if (typeof content ===
|
|
302
|
+
if (typeof content === "string") {
|
|
265
303
|
const trimmed = content.trim();
|
|
266
304
|
return trimmed.length > 0 ? trimmed : null;
|
|
267
305
|
}
|
|
@@ -272,25 +310,32 @@ class ClaudeAdapter {
|
|
|
272
310
|
if (extracted) {
|
|
273
311
|
parts.push(extracted);
|
|
274
312
|
}
|
|
275
|
-
else if (block && typeof block ===
|
|
313
|
+
else if (block && typeof block === "object") {
|
|
276
314
|
const candidate = this.extractFromObject(block);
|
|
277
315
|
if (candidate) {
|
|
278
316
|
parts.push(candidate);
|
|
279
317
|
}
|
|
280
318
|
}
|
|
281
319
|
}
|
|
282
|
-
const text = parts.join(
|
|
320
|
+
const text = parts.join("\n").trim();
|
|
283
321
|
return text.length > 0 ? text : null;
|
|
284
322
|
}
|
|
285
|
-
if (typeof content ===
|
|
323
|
+
if (typeof content === "object") {
|
|
286
324
|
return this.extractFromObject(content);
|
|
287
325
|
}
|
|
288
326
|
return null;
|
|
289
327
|
}
|
|
290
328
|
extractFromObject(value) {
|
|
291
|
-
const preferredKeys = [
|
|
329
|
+
const preferredKeys = [
|
|
330
|
+
"text",
|
|
331
|
+
"input_text",
|
|
332
|
+
"input",
|
|
333
|
+
"markdown",
|
|
334
|
+
"content",
|
|
335
|
+
"message",
|
|
336
|
+
];
|
|
292
337
|
for (const key of preferredKeys) {
|
|
293
|
-
if (typeof value[key] ===
|
|
338
|
+
if (typeof value[key] === "string") {
|
|
294
339
|
const trimmed = value[key].trim();
|
|
295
340
|
if (trimmed.length > 0) {
|
|
296
341
|
return trimmed;
|
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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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"}
|