@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.
Files changed (118) hide show
  1. package/CLAUDE.md +3 -3
  2. package/README.md +3 -3
  3. package/dist/index.d.ts +11 -11
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +3 -3
  6. package/dist/src/adapters/claude/claude-adapter.d.ts +3 -3
  7. package/dist/src/adapters/claude/claude-adapter.d.ts.map +1 -1
  8. package/dist/src/adapters/claude/claude-adapter.js +156 -111
  9. package/dist/src/adapters/claude/claude-adapter.js.map +1 -1
  10. package/dist/src/adapters/claude/tool-mapper.d.ts +1 -1
  11. package/dist/src/adapters/claude/tool-mapper.d.ts.map +1 -1
  12. package/dist/src/adapters/claude/tool-mapper.js.map +1 -1
  13. package/dist/src/adapters/types.d.ts +1 -1
  14. package/dist/src/adapters/types.d.ts.map +1 -1
  15. package/dist/src/agent.d.ts +7 -7
  16. package/dist/src/agent.d.ts.map +1 -1
  17. package/dist/src/agent.js +143 -85
  18. package/dist/src/agent.js.map +1 -1
  19. package/dist/src/agents/execution.js.map +1 -1
  20. package/dist/src/agents/planning.js.map +1 -1
  21. package/dist/src/agents/research.js.map +1 -1
  22. package/dist/src/file-manager.d.ts +4 -4
  23. package/dist/src/file-manager.d.ts.map +1 -1
  24. package/dist/src/file-manager.js +59 -58
  25. package/dist/src/file-manager.js.map +1 -1
  26. package/dist/src/git-manager.d.ts +1 -1
  27. package/dist/src/git-manager.d.ts.map +1 -1
  28. package/dist/src/git-manager.js +93 -69
  29. package/dist/src/git-manager.js.map +1 -1
  30. package/dist/src/posthog-api.d.ts +2 -3
  31. package/dist/src/posthog-api.d.ts.map +1 -1
  32. package/dist/src/posthog-api.js +22 -22
  33. package/dist/src/posthog-api.js.map +1 -1
  34. package/dist/src/prompt-builder.d.ts +3 -3
  35. package/dist/src/prompt-builder.d.ts.map +1 -1
  36. package/dist/src/prompt-builder.js +123 -93
  37. package/dist/src/prompt-builder.js.map +1 -1
  38. package/dist/src/task-manager.d.ts +4 -4
  39. package/dist/src/task-manager.d.ts.map +1 -1
  40. package/dist/src/task-manager.js +19 -18
  41. package/dist/src/task-manager.js.map +1 -1
  42. package/dist/src/task-progress-reporter.d.ts +3 -4
  43. package/dist/src/task-progress-reporter.d.ts.map +1 -1
  44. package/dist/src/task-progress-reporter.js +59 -54
  45. package/dist/src/task-progress-reporter.js.map +1 -1
  46. package/dist/src/template-manager.d.ts +1 -1
  47. package/dist/src/template-manager.d.ts.map +1 -1
  48. package/dist/src/template-manager.js +30 -28
  49. package/dist/src/template-manager.js.map +1 -1
  50. package/dist/src/todo-manager.d.ts +3 -3
  51. package/dist/src/todo-manager.d.ts.map +1 -1
  52. package/dist/src/todo-manager.js +29 -24
  53. package/dist/src/todo-manager.js.map +1 -1
  54. package/dist/src/tools/registry.d.ts +1 -1
  55. package/dist/src/tools/registry.js +60 -60
  56. package/dist/src/tools/registry.js.map +1 -1
  57. package/dist/src/tools/types.d.ts +31 -31
  58. package/dist/src/types.d.ts +33 -33
  59. package/dist/src/types.d.ts.map +1 -1
  60. package/dist/src/types.js.map +1 -1
  61. package/dist/src/utils/logger.d.ts +4 -4
  62. package/dist/src/utils/logger.d.ts.map +1 -1
  63. package/dist/src/utils/logger.js +8 -8
  64. package/dist/src/utils/logger.js.map +1 -1
  65. package/dist/src/workflow/config.d.ts +1 -1
  66. package/dist/src/workflow/config.d.ts.map +1 -1
  67. package/dist/src/workflow/config.js +18 -18
  68. package/dist/src/workflow/config.js.map +1 -1
  69. package/dist/src/workflow/steps/build.d.ts +1 -1
  70. package/dist/src/workflow/steps/build.d.ts.map +1 -1
  71. package/dist/src/workflow/steps/build.js +46 -38
  72. package/dist/src/workflow/steps/build.js.map +1 -1
  73. package/dist/src/workflow/steps/finalize.d.ts +1 -1
  74. package/dist/src/workflow/steps/finalize.d.ts.map +1 -1
  75. package/dist/src/workflow/steps/finalize.js +54 -48
  76. package/dist/src/workflow/steps/finalize.js.map +1 -1
  77. package/dist/src/workflow/steps/plan.d.ts +1 -1
  78. package/dist/src/workflow/steps/plan.d.ts.map +1 -1
  79. package/dist/src/workflow/steps/plan.js +58 -46
  80. package/dist/src/workflow/steps/plan.js.map +1 -1
  81. package/dist/src/workflow/steps/research.d.ts +1 -1
  82. package/dist/src/workflow/steps/research.d.ts.map +1 -1
  83. package/dist/src/workflow/steps/research.js +68 -56
  84. package/dist/src/workflow/steps/research.js.map +1 -1
  85. package/dist/src/workflow/types.d.ts +12 -12
  86. package/dist/src/workflow/types.d.ts.map +1 -1
  87. package/dist/src/workflow/utils.d.ts +1 -1
  88. package/dist/src/workflow/utils.d.ts.map +1 -1
  89. package/dist/src/workflow/utils.js +7 -4
  90. package/dist/src/workflow/utils.js.map +1 -1
  91. package/package.json +8 -8
  92. package/src/adapters/claude/claude-adapter.ts +220 -168
  93. package/src/adapters/claude/tool-mapper.ts +2 -2
  94. package/src/adapters/types.ts +1 -1
  95. package/src/agent.ts +579 -444
  96. package/src/agents/execution.ts +1 -1
  97. package/src/agents/planning.ts +1 -1
  98. package/src/agents/research.ts +0 -1
  99. package/src/file-manager.ts +64 -63
  100. package/src/git-manager.ts +152 -87
  101. package/src/posthog-api.ts +122 -82
  102. package/src/prompt-builder.ts +180 -135
  103. package/src/task-manager.ts +38 -30
  104. package/src/task-progress-reporter.ts +70 -59
  105. package/src/template-manager.ts +98 -45
  106. package/src/todo-manager.ts +35 -30
  107. package/src/tools/registry.ts +62 -62
  108. package/src/tools/types.ts +36 -36
  109. package/src/types.ts +93 -71
  110. package/src/utils/logger.ts +62 -56
  111. package/src/workflow/config.ts +48 -48
  112. package/src/workflow/steps/build.ts +122 -113
  113. package/src/workflow/steps/finalize.ts +214 -182
  114. package/src/workflow/steps/plan.ts +151 -131
  115. package/src/workflow/steps/research.ts +205 -186
  116. package/src/workflow/types.ts +38 -36
  117. package/src/workflow/utils.ts +37 -34
  118. 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. The project uses Bun runtime for execution.
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
- bun install
13
+ pnpm install
14
14
 
15
15
  # Run example usage (demonstrates all features)
16
- bun run example-usage.ts
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
- bun install
9
- bun run example
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
- - Bun runtime
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 { 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';
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
@@ -1 +1 @@
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"}
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 { AgentEvent, ArtifactEvent, StatusEvent } from '../../types.js';
2
- import type { SDKMessage } from '@anthropic-ai/claude-agent-sdk';
3
- import type { ProviderAdapter } from '../types.js';
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,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"}
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 = 'claude';
8
+ name = "claude";
9
9
  toolMapper = new ClaudeToolMapper();
10
10
  createRawSDKEvent(sdkMessage) {
11
11
  return {
12
- type: 'raw_sdk_event',
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 === 'stream_event') {
19
+ if (sdkMessage.type === "stream_event") {
20
20
  const event = sdkMessage.event;
21
21
  switch (event.type) {
22
- case 'message_start':
23
- return [{
22
+ case "message_start":
23
+ return [
24
+ {
24
25
  ...baseEvent,
25
- type: 'message_start',
26
+ type: "message_start",
26
27
  messageId: event.message?.id,
27
- model: event.message?.model
28
- }];
29
- case 'content_block_start':
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: 'content_block_start',
38
+ type: "content_block_start",
36
39
  index: event.index,
37
40
  contentType: contentBlock.type,
38
- toolName: contentBlock.type === 'tool_use' ? contentBlock.name : undefined,
39
- toolId: contentBlock.type === 'tool_use' ? contentBlock.id : undefined
40
- }];
41
- case 'content_block_delta':
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 === 'text_delta') {
46
- return [{
52
+ if (delta.type === "text_delta") {
53
+ return [
54
+ {
47
55
  ...baseEvent,
48
- type: 'token',
56
+ type: "token",
49
57
  content: delta.text,
50
- contentType: 'text'
51
- }];
58
+ contentType: "text",
59
+ },
60
+ ];
52
61
  }
53
- else if (delta.type === 'input_json_delta') {
54
- return [{
62
+ else if (delta.type === "input_json_delta") {
63
+ return [
64
+ {
55
65
  ...baseEvent,
56
- type: 'token',
66
+ type: "token",
57
67
  content: delta.partial_json,
58
- contentType: 'tool_input'
59
- }];
68
+ contentType: "tool_input",
69
+ },
70
+ ];
60
71
  }
61
- else if (delta.type === 'thinking_delta') {
62
- return [{
72
+ else if (delta.type === "thinking_delta") {
73
+ return [
74
+ {
63
75
  ...baseEvent,
64
- type: 'token',
76
+ type: "token",
65
77
  content: delta.thinking,
66
- contentType: 'thinking'
67
- }];
78
+ contentType: "thinking",
79
+ },
80
+ ];
68
81
  }
69
82
  return [];
70
- case 'content_block_stop':
71
- return [{
83
+ }
84
+ case "content_block_stop":
85
+ return [
86
+ {
72
87
  ...baseEvent,
73
- type: 'content_block_stop',
74
- index: event.index
75
- }];
76
- case 'message_delta':
77
- return [{
88
+ type: "content_block_stop",
89
+ index: event.index,
90
+ },
91
+ ];
92
+ case "message_delta":
93
+ return [
94
+ {
78
95
  ...baseEvent,
79
- type: 'message_delta',
96
+ type: "message_delta",
80
97
  stopReason: event.delta?.stop_reason,
81
98
  stopSequence: event.delta?.stop_sequence,
82
- usage: event.usage ? {
83
- outputTokens: event.usage.output_tokens
84
- } : undefined
85
- }];
86
- case 'message_stop':
87
- return [{
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: 'message_stop'
90
- }];
91
- case 'ping':
110
+ type: "message_stop",
111
+ },
112
+ ];
113
+ case "ping":
92
114
  // Ignore ping events
93
115
  return [];
94
- case 'error':
95
- return [{
116
+ case "error":
117
+ return [
118
+ {
96
119
  ...baseEvent,
97
- type: 'error',
98
- message: event.error?.message || 'Unknown error',
120
+ type: "error",
121
+ message: event.error?.message || "Unknown error",
99
122
  error: event.error,
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
- }];
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 === 'assistant') {
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 === 'tool_use') {
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: 'tool_call',
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: 'status',
142
- phase: 'assistant_message',
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 === 'user') {
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 === 'tool_result') {
182
+ if (block.type === "tool_result") {
155
183
  const toolResultEvent = {
156
184
  ...baseEvent,
157
- type: 'tool_result',
158
- toolName: block.tool_name || 'unknown',
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: 'user_message',
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 === 'result') {
186
- if (sdkMessage.subtype === 'success') {
187
- return [{
215
+ if (sdkMessage.type === "result") {
216
+ if (sdkMessage.subtype === "success") {
217
+ return [
218
+ {
188
219
  ...baseEvent,
189
- type: 'done',
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: 'error',
236
+ type: "error",
204
237
  message: `Execution failed: ${sdkMessage.subtype}`,
205
238
  error: { subtype: sdkMessage.subtype },
206
- errorType: sdkMessage.subtype || 'result_error',
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 === 'system') {
218
- if (sdkMessage.subtype === 'init') {
219
- return [{
251
+ if (sdkMessage.type === "system") {
252
+ if (sdkMessage.subtype === "init") {
253
+ return [
254
+ {
220
255
  ...baseEvent,
221
- type: 'init',
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 === 'compact_boundary') {
234
- return [{
269
+ else if (sdkMessage.subtype === "compact_boundary") {
270
+ return [
271
+ {
235
272
  ...baseEvent,
236
- type: 'compact_boundary',
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: 'status',
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: 'artifact',
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 === 'string') {
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 === 'object') {
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('\n').trim();
320
+ const text = parts.join("\n").trim();
283
321
  return text.length > 0 ? text : null;
284
322
  }
285
- if (typeof content === 'object') {
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 = ['text', 'input_text', 'input', 'markdown', 'content', 'message'];
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] === 'string') {
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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"}