@posthog/agent 1.7.0 → 1.9.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 (48) hide show
  1. package/dist/index.d.ts +5 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/adapters/claude/claude-adapter.d.ts +17 -0
  6. package/dist/src/adapters/claude/claude-adapter.d.ts.map +1 -0
  7. package/dist/src/{event-transformer.js → adapters/claude/claude-adapter.js} +34 -10
  8. package/dist/src/adapters/claude/claude-adapter.js.map +1 -0
  9. package/dist/src/adapters/claude/tool-mapper.d.ts +19 -0
  10. package/dist/src/adapters/claude/tool-mapper.d.ts.map +1 -0
  11. package/dist/src/adapters/claude/tool-mapper.js +44 -0
  12. package/dist/src/adapters/claude/tool-mapper.js.map +1 -0
  13. package/dist/src/adapters/types.d.ts +28 -0
  14. package/dist/src/adapters/types.d.ts.map +1 -0
  15. package/dist/src/agent.d.ts +1 -1
  16. package/dist/src/agent.d.ts.map +1 -1
  17. package/dist/src/agent.js +18 -17
  18. package/dist/src/agent.js.map +1 -1
  19. package/dist/src/stage-executor.d.ts +1 -1
  20. package/dist/src/stage-executor.d.ts.map +1 -1
  21. package/dist/src/stage-executor.js +7 -7
  22. package/dist/src/stage-executor.js.map +1 -1
  23. package/dist/src/task-progress-reporter.d.ts +0 -2
  24. package/dist/src/task-progress-reporter.d.ts.map +1 -1
  25. package/dist/src/task-progress-reporter.js +0 -16
  26. package/dist/src/task-progress-reporter.js.map +1 -1
  27. package/dist/src/tools/registry.d.ts +25 -0
  28. package/dist/src/tools/registry.d.ts.map +1 -0
  29. package/dist/src/tools/registry.js +120 -0
  30. package/dist/src/tools/registry.js.map +1 -0
  31. package/dist/src/tools/types.d.ts +80 -0
  32. package/dist/src/tools/types.d.ts.map +1 -0
  33. package/dist/src/types.d.ts +41 -12
  34. package/dist/src/types.d.ts.map +1 -1
  35. package/dist/src/types.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/{event-transformer.ts → adapters/claude/claude-adapter.ts} +40 -16
  38. package/src/adapters/claude/tool-mapper.ts +46 -0
  39. package/src/adapters/types.ts +31 -0
  40. package/src/agent.ts +19 -17
  41. package/src/stage-executor.ts +11 -11
  42. package/src/task-progress-reporter.ts +0 -19
  43. package/src/tools/registry.ts +129 -0
  44. package/src/tools/types.ts +127 -0
  45. package/src/types.ts +42 -17
  46. package/dist/src/event-transformer.d.ts +0 -10
  47. package/dist/src/event-transformer.d.ts.map +0 -1
  48. package/dist/src/event-transformer.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,7 +1,11 @@
1
1
  export { Agent, } from './src/agent.js';
2
2
  export { PermissionMode, } from './src/types.js';
3
- export type { Task, SupportingFile, ExecutionResult, AgentConfig, McpServerConfig } from './src/types.js';
3
+ export type { Task, SupportingFile, ExecutionResult, AgentConfig, McpServerConfig, AgentEvent } from './src/types.js';
4
4
  export type { WorkflowDefinition, WorkflowStage, WorkflowExecutionOptions, AgentDefinition } from './src/workflow-types.js';
5
5
  export { Logger, LogLevel, } from './src/utils/logger.js';
6
6
  export type { LoggerConfig } from './src/utils/logger.js';
7
+ export type { ProviderAdapter } from './src/adapters/types.js';
8
+ export { ClaudeAdapter } from './src/adapters/claude/claude-adapter.js';
9
+ 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';
10
+ export { ToolRegistry } from './src/tools/registry.js';
7
11
  //# 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,cAAc,EACd,eAAe,EACf,WAAW,EACX,eAAe,EAClB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACH,MAAM,EACN,QAAQ,GACX,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC"}
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,cAAc,EACd,eAAe,EACf,WAAW,EACX,eAAe,EACf,UAAU,EACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACH,MAAM,EACN,QAAQ,GACX,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;AAG/B,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,4 +1,6 @@
1
1
  export { Agent } from './src/agent.js';
2
2
  export { PermissionMode } from './src/types.js';
3
3
  export { LogLevel, Logger } from './src/utils/logger.js';
4
+ export { ClaudeAdapter } from './src/adapters/claude/claude-adapter.js';
5
+ export { ToolRegistry } from './src/tools/registry.js';
4
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,17 @@
1
+ import type { AgentEvent } from '../../types.js';
2
+ import type { SDKMessage } from '@anthropic-ai/claude-agent-sdk';
3
+ import type { ProviderAdapter } from '../types.js';
4
+ /**
5
+ * Claude provider adapter.
6
+ * Transforms Claude SDK messages into our standardized AgentEvent format.
7
+ */
8
+ export declare class ClaudeAdapter implements ProviderAdapter {
9
+ readonly name = "claude";
10
+ private toolMapper;
11
+ createRawSDKEvent(sdkMessage: any): AgentEvent;
12
+ transform(sdkMessage: SDKMessage): AgentEvent | null;
13
+ createStatusEvent(phase: string, additionalData?: any): import('../../types.js').StatusEvent;
14
+ private extractUserContent;
15
+ private extractFromObject;
16
+ }
17
+ //# sourceMappingURL=claude-adapter.d.ts.map
@@ -0,0 +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,gBAAgB,CAAC;AACjD,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,GAAG,IAAI;IA2OpD,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,GAAG,OAAO,gBAAgB,EAAE,WAAW;IAS5F,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,iBAAiB;CAoB1B"}
@@ -1,4 +1,12 @@
1
- class EventTransformer {
1
+ import { ClaudeToolMapper } from './tool-mapper.js';
2
+
3
+ /**
4
+ * Claude provider adapter.
5
+ * Transforms Claude SDK messages into our standardized AgentEvent format.
6
+ */
7
+ class ClaudeAdapter {
8
+ name = 'claude';
9
+ toolMapper = new ClaudeToolMapper();
2
10
  createRawSDKEvent(sdkMessage) {
3
11
  return {
4
12
  type: 'raw_sdk_event',
@@ -108,14 +116,17 @@ class EventTransformer {
108
116
  if (message.content && Array.isArray(message.content)) {
109
117
  for (const block of message.content) {
110
118
  if (block.type === 'tool_use') {
111
- // Return first tool_call event found
112
- return {
119
+ // Create tool_call event and enrich with metadata
120
+ const toolCallEvent = {
113
121
  ...baseEvent,
114
122
  type: 'tool_call',
115
123
  toolName: block.name,
116
124
  callId: block.id,
117
- args: block.input || {}
125
+ args: block.input || {},
126
+ parentToolUseId: sdkMessage.parent_tool_use_id
118
127
  };
128
+ // Enrich with tool metadata
129
+ return this.toolMapper.enrichToolCall(toolCallEvent);
119
130
  }
120
131
  }
121
132
  }
@@ -135,13 +146,18 @@ class EventTransformer {
135
146
  if (message?.content && Array.isArray(message.content)) {
136
147
  for (const block of message.content) {
137
148
  if (block.type === 'tool_result') {
138
- return {
149
+ // Create tool_result event and enrich with metadata
150
+ const toolResultEvent = {
139
151
  ...baseEvent,
140
152
  type: 'tool_result',
141
153
  toolName: block.tool_name || 'unknown',
142
154
  callId: block.tool_use_id || '',
143
- result: block.content
155
+ result: block.content,
156
+ isError: block.is_error,
157
+ parentToolUseId: sdkMessage.parent_tool_use_id
144
158
  };
159
+ // Enrich with tool metadata
160
+ return this.toolMapper.enrichToolResult(toolResultEvent);
145
161
  }
146
162
  }
147
163
  }
@@ -163,10 +179,14 @@ class EventTransformer {
163
179
  return {
164
180
  ...baseEvent,
165
181
  type: 'done',
182
+ result: sdkMessage.result,
166
183
  durationMs: sdkMessage.duration_ms,
184
+ durationApiMs: sdkMessage.duration_api_ms,
167
185
  numTurns: sdkMessage.num_turns,
168
186
  totalCostUsd: sdkMessage.total_cost_usd,
169
- usage: sdkMessage.usage
187
+ usage: sdkMessage.usage,
188
+ modelUsage: sdkMessage.modelUsage,
189
+ permissionDenials: sdkMessage.permission_denials
170
190
  };
171
191
  }
172
192
  else {
@@ -195,7 +215,11 @@ class EventTransformer {
195
215
  tools: sdkMessage.tools,
196
216
  permissionMode: sdkMessage.permissionMode,
197
217
  cwd: sdkMessage.cwd,
198
- apiKeySource: sdkMessage.apiKeySource
218
+ apiKeySource: sdkMessage.apiKeySource,
219
+ agents: sdkMessage.agents,
220
+ slashCommands: sdkMessage.slash_commands,
221
+ outputStyle: sdkMessage.output_style,
222
+ mcpServers: sdkMessage.mcp_servers
199
223
  };
200
224
  }
201
225
  else if (sdkMessage.subtype === 'compact_boundary') {
@@ -267,5 +291,5 @@ class EventTransformer {
267
291
  }
268
292
  }
269
293
 
270
- export { EventTransformer };
271
- //# sourceMappingURL=event-transformer.js.map
294
+ export { ClaudeAdapter };
295
+ //# sourceMappingURL=claude-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-adapter.js","sources":["../../../../src/adapters/claude/claude-adapter.ts"],"sourcesContent":["import type { AgentEvent } 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 | null {\n const baseEvent = { ts: Date.now() };\n\n // Handle stream events\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 null;\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 null;\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 null;\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 null;\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 null;\n }\n }\n\n // Handle assistant messages (full message, not streaming)\n if (sdkMessage.type === 'assistant') {\n const message = sdkMessage.message;\n\n // Extract tool calls from content 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\n return this.toolMapper.enrichToolCall(toolCallEvent);\n }\n }\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\n // Check for tool results in content blocks\n if (message?.content && Array.isArray(message.content)) {\n for (const block of message.content) {\n if (block.type === 'tool_result') {\n // Create tool_result event and enrich with metadata\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 // Enrich with tool metadata\n return this.toolMapper.enrichToolResult(toolResultEvent);\n }\n }\n }\n\n // Otherwise extract text content\n const textContent = this.extractUserContent(message?.content);\n if (!textContent) {\n return null;\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 null;\n }\n \n createStatusEvent(phase: string, additionalData?: any): import('../../types.js').StatusEvent {\n return {\n type: 'status',\n ts: Date.now(),\n phase,\n ...additionalData\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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"}
@@ -0,0 +1,19 @@
1
+ import type { ToolCallEvent, ToolResultEvent } from '../../types.js';
2
+ /**
3
+ * Maps Claude tool names to our tool type system.
4
+ * Enriches tool events with metadata for better UI consumption.
5
+ */
6
+ export declare class ClaudeToolMapper {
7
+ private registry;
8
+ /**
9
+ * Enrich a tool call event with tool metadata.
10
+ * Looks up the tool definition and adds it to the event.
11
+ */
12
+ enrichToolCall(event: ToolCallEvent): ToolCallEvent;
13
+ /**
14
+ * Enrich a tool result event with tool metadata.
15
+ * Looks up the tool definition and adds it to the event.
16
+ */
17
+ enrichToolResult(event: ToolResultEvent): ToolResultEvent;
18
+ }
19
+ //# sourceMappingURL=tool-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-mapper.d.ts","sourceRoot":"","sources":["../../../../src/adapters/claude/tool-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGrE;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAsB;IAEtC;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa;IAcnD;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe;CAa1D"}
@@ -0,0 +1,44 @@
1
+ import { ToolRegistry } from '../../tools/registry.js';
2
+
3
+ /**
4
+ * Maps Claude tool names to our tool type system.
5
+ * Enriches tool events with metadata for better UI consumption.
6
+ */
7
+ class ClaudeToolMapper {
8
+ registry = new ToolRegistry();
9
+ /**
10
+ * Enrich a tool call event with tool metadata.
11
+ * Looks up the tool definition and adds it to the event.
12
+ */
13
+ enrichToolCall(event) {
14
+ const tool = this.registry.get(event.toolName);
15
+ if (!tool) {
16
+ // Tool not recognized, return as-is
17
+ return event;
18
+ }
19
+ return {
20
+ ...event,
21
+ tool,
22
+ category: tool.category,
23
+ };
24
+ }
25
+ /**
26
+ * Enrich a tool result event with tool metadata.
27
+ * Looks up the tool definition and adds it to the event.
28
+ */
29
+ enrichToolResult(event) {
30
+ const tool = this.registry.get(event.toolName);
31
+ if (!tool) {
32
+ // Tool not recognized, return as-is
33
+ return event;
34
+ }
35
+ return {
36
+ ...event,
37
+ tool,
38
+ category: tool.category,
39
+ };
40
+ }
41
+ }
42
+
43
+ export { ClaudeToolMapper };
44
+ //# sourceMappingURL=tool-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-mapper.js","sources":["../../../../src/adapters/claude/tool-mapper.ts"],"sourcesContent":["import type { ToolCallEvent, ToolResultEvent } from '../../types.js';\nimport { ToolRegistry } from '../../tools/registry.js';\n\n/**\n * Maps Claude tool names to our tool type system.\n * Enriches tool events with metadata for better UI consumption.\n */\nexport class ClaudeToolMapper {\n private registry = new ToolRegistry();\n\n /**\n * Enrich a tool call event with tool metadata.\n * Looks up the tool definition and adds it to the event.\n */\n enrichToolCall(event: ToolCallEvent): ToolCallEvent {\n const tool = this.registry.get(event.toolName);\n if (!tool) {\n // Tool not recognized, return as-is\n return event;\n }\n\n return {\n ...event,\n tool,\n category: tool.category,\n };\n }\n\n /**\n * Enrich a tool result event with tool metadata.\n * Looks up the tool definition and adds it to the event.\n */\n enrichToolResult(event: ToolResultEvent): ToolResultEvent {\n const tool = this.registry.get(event.toolName);\n if (!tool) {\n // Tool not recognized, return as-is\n return event;\n }\n\n return {\n ...event,\n tool,\n category: tool.category,\n };\n }\n}\n"],"names":[],"mappings":";;AAGA;;;AAGG;MACU,gBAAgB,CAAA;AACnB,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAE;AAErC;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE;;AAET,YAAA,OAAO,KAAK;QACd;QAEA,OAAO;AACL,YAAA,GAAG,KAAK;YACR,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;IACH;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,KAAsB,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE;;AAET,YAAA,OAAO,KAAK;QACd;QAEA,OAAO;AACL,YAAA,GAAG,KAAK;YACR,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;IACH;AACD;;;;"}
@@ -0,0 +1,28 @@
1
+ import type { AgentEvent, StatusEvent } from '../types.js';
2
+ /**
3
+ * Provider adapter interface for transforming provider-specific messages
4
+ * into our standardized AgentEvent format.
5
+ *
6
+ * This allows us to support multiple AI providers (Claude, Gemini, OpenAI, etc.)
7
+ * while maintaining a consistent event interface for consumers.
8
+ */
9
+ export interface ProviderAdapter {
10
+ /** Provider name (e.g., 'claude', 'gemini') */
11
+ name: string;
12
+ /**
13
+ * Transform a provider-specific SDK message into an AgentEvent.
14
+ * Returns null if the message should be ignored.
15
+ */
16
+ transform(sdkMessage: unknown): AgentEvent | null;
17
+ /**
18
+ * Create a standardized status event.
19
+ * Used for workflow stage transitions and other status updates.
20
+ */
21
+ createStatusEvent(phase: string, additionalData?: any): StatusEvent;
22
+ /**
23
+ * Create a raw SDK event for debugging purposes.
24
+ * Wraps the original SDK message in a raw_sdk_event.
25
+ */
26
+ createRawSDKEvent(sdkMessage: any): AgentEvent;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC;IAElD;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC;IAEpE;;;OAGG;IACH,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,UAAU,CAAC;CAChD"}
@@ -9,7 +9,7 @@ export declare class Agent {
9
9
  private fileManager;
10
10
  private gitManager;
11
11
  private templateManager;
12
- private eventTransformer;
12
+ private adapter;
13
13
  private logger;
14
14
  private agentRegistry;
15
15
  private workflowRegistry;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/src/agent.js CHANGED
@@ -4,7 +4,7 @@ import { PostHogAPIClient } from './posthog-api.js';
4
4
  import { PostHogFileManager } from './file-manager.js';
5
5
  import { GitManager } from './git-manager.js';
6
6
  import { TemplateManager } from './template-manager.js';
7
- import { EventTransformer } from './event-transformer.js';
7
+ import { ClaudeAdapter } from './adapters/claude/claude-adapter.js';
8
8
  import { Logger } from './utils/logger.js';
9
9
  import { AgentRegistry } from './agent-registry.js';
10
10
  import { WorkflowRegistry } from './workflow-registry.js';
@@ -21,7 +21,7 @@ class Agent {
21
21
  fileManager;
22
22
  gitManager;
23
23
  templateManager;
24
- eventTransformer;
24
+ adapter;
25
25
  logger;
26
26
  agentRegistry;
27
27
  workflowRegistry;
@@ -56,7 +56,8 @@ class Agent {
56
56
  };
57
57
  this.logger = new Logger({ debug: this.debug, prefix: '[PostHog Agent]' });
58
58
  this.taskManager = new TaskManager();
59
- this.eventTransformer = new EventTransformer();
59
+ // Hardcode Claude adapter for now - extensible for other providers later
60
+ this.adapter = new ClaudeAdapter();
60
61
  this.fileManager = new PostHogFileManager(this.workingDirectory, this.logger.child('FileManager'));
61
62
  this.gitManager = new GitManager({
62
63
  repositoryPath: this.workingDirectory,
@@ -156,7 +157,7 @@ class Agent {
156
157
  const atLastStage = currIdx >= 0 && currIdx === orderedStages.length - 1;
157
158
  if (atLastStage) {
158
159
  const finalStageKey = orderedStages[currIdx]?.key;
159
- this.emitEvent(this.eventTransformer.createStatusEvent('no_next_stage', { stage: finalStageKey }));
160
+ this.emitEvent(this.adapter.createStatusEvent('no_next_stage', { stage: finalStageKey }));
160
161
  await this.progressReporter.noNextStage(finalStageKey);
161
162
  await this.progressReporter.complete();
162
163
  this.taskManager.completeExecution(executionId, { task, workflow });
@@ -202,7 +203,7 @@ class Agent {
202
203
  }
203
204
  }
204
205
  async executeStage(task, stage, options = {}) {
205
- this.emitEvent(this.eventTransformer.createStatusEvent('stage_start', { stage: stage.key }));
206
+ this.emitEvent(this.adapter.createStatusEvent('stage_start', { stage: stage.key }));
206
207
  const overrides = options.stageOverrides?.[stage.key];
207
208
  const agentName = stage.agent_name || 'code_generation';
208
209
  const agentDef = this.agentRegistry.getAgent(agentName);
@@ -215,20 +216,20 @@ class Agent {
215
216
  if (isPlanning && shouldCreatePlanningBranch) {
216
217
  const planningBranch = await this.createPlanningBranch(task.id);
217
218
  await this.updateTaskBranch(task.id, planningBranch);
218
- this.emitEvent(this.eventTransformer.createStatusEvent('branch_created', { stage: stage.key, branch: planningBranch }));
219
+ this.emitEvent(this.adapter.createStatusEvent('branch_created', { stage: stage.key, branch: planningBranch }));
219
220
  await this.progressReporter.branchCreated(stage.key, planningBranch);
220
221
  }
221
222
  else if (!isPlanning && !isManual && shouldCreateImplBranch) {
222
223
  const implBranch = await this.createImplementationBranch(task.id);
223
224
  await this.updateTaskBranch(task.id, implBranch);
224
- this.emitEvent(this.eventTransformer.createStatusEvent('branch_created', { stage: stage.key, branch: implBranch }));
225
+ this.emitEvent(this.adapter.createStatusEvent('branch_created', { stage: stage.key, branch: implBranch }));
225
226
  await this.progressReporter.branchCreated(stage.key, implBranch);
226
227
  }
227
228
  const result = await this.stageExecutor.execute(task, stage, options);
228
229
  if (result.plan) {
229
230
  await this.writePlan(task.id, result.plan);
230
231
  await this.commitPlan(task.id, task.title);
231
- this.emitEvent(this.eventTransformer.createStatusEvent('commit_made', { stage: stage.key, kind: 'plan' }));
232
+ this.emitEvent(this.adapter.createStatusEvent('commit_made', { stage: stage.key, kind: 'plan' }));
232
233
  await this.progressReporter.commitMade(stage.key, 'plan');
233
234
  }
234
235
  if (isManual) {
@@ -242,27 +243,27 @@ class Agent {
242
243
  const implBranch = await this.createImplementationBranch(task.id);
243
244
  await this.updateTaskBranch(task.id, implBranch);
244
245
  branchName = implBranch;
245
- this.emitEvent(this.eventTransformer.createStatusEvent('branch_created', { stage: stage.key, branch: implBranch }));
246
+ this.emitEvent(this.adapter.createStatusEvent('branch_created', { stage: stage.key, branch: implBranch }));
246
247
  await this.progressReporter.branchCreated(stage.key, implBranch);
247
248
  }
248
249
  try {
249
250
  const prUrl = await this.createPullRequest(task.id, branchName, task.title, task.description);
250
251
  await this.updateTaskBranch(task.id, branchName);
251
252
  await this.attachPullRequestToTask(task.id, prUrl, branchName);
252
- this.emitEvent(this.eventTransformer.createStatusEvent('pr_created', { stage: stage.key, prUrl }));
253
+ this.emitEvent(this.adapter.createStatusEvent('pr_created', { stage: stage.key, prUrl }));
253
254
  await this.progressReporter.pullRequestCreated(stage.key, prUrl);
254
255
  }
255
256
  catch { }
256
257
  }
257
258
  // Do not auto-progress on manual stages
258
- this.emitEvent(this.eventTransformer.createStatusEvent('stage_complete', { stage: stage.key }));
259
+ this.emitEvent(this.adapter.createStatusEvent('stage_complete', { stage: stage.key }));
259
260
  return;
260
261
  }
261
262
  if (result.results) {
262
263
  const existingPlan = await this.readPlan(task.id);
263
264
  const planSummary = existingPlan ? existingPlan.split('\n')[0] : undefined;
264
265
  await this.commitImplementation(task.id, task.title, planSummary);
265
- this.emitEvent(this.eventTransformer.createStatusEvent('commit_made', { stage: stage.key, kind: 'implementation' }));
266
+ this.emitEvent(this.adapter.createStatusEvent('commit_made', { stage: stage.key, kind: 'implementation' }));
266
267
  await this.progressReporter.commitMade(stage.key, 'implementation');
267
268
  }
268
269
  // PR creation on complete stage (or if explicitly requested), regardless of whether edits occurred
@@ -275,13 +276,13 @@ class Agent {
275
276
  const prUrl = await this.createPullRequest(task.id, branchName, task.title, task.description);
276
277
  await this.updateTaskBranch(task.id, branchName);
277
278
  await this.attachPullRequestToTask(task.id, prUrl, branchName);
278
- this.emitEvent(this.eventTransformer.createStatusEvent('pr_created', { stage: stage.key, prUrl }));
279
+ this.emitEvent(this.adapter.createStatusEvent('pr_created', { stage: stage.key, prUrl }));
279
280
  await this.progressReporter.pullRequestCreated(stage.key, prUrl);
280
281
  }
281
282
  catch { }
282
283
  }
283
284
  }
284
- this.emitEvent(this.eventTransformer.createStatusEvent('stage_complete', { stage: stage.key }));
285
+ this.emitEvent(this.adapter.createStatusEvent('stage_complete', { stage: stage.key }));
285
286
  }
286
287
  async progressToNextStage(taskId, currentStageKey) {
287
288
  if (!this.posthogAPI)
@@ -296,7 +297,7 @@ class Agent {
296
297
  stage: currentStageKey,
297
298
  error: error.message,
298
299
  });
299
- this.emitEvent(this.eventTransformer.createStatusEvent('no_next_stage', { stage: currentStageKey }));
300
+ this.emitEvent(this.adapter.createStatusEvent('no_next_stage', { stage: currentStageKey }));
300
301
  await this.progressReporter.noNextStage(currentStageKey);
301
302
  return;
302
303
  }
@@ -321,9 +322,9 @@ class Agent {
321
322
  for await (const message of response) {
322
323
  this.logger.debug('Received message in direct run', message);
323
324
  // Emit raw SDK event
324
- this.emitEvent(this.eventTransformer.createRawSDKEvent(message));
325
+ this.emitEvent(this.adapter.createRawSDKEvent(message));
325
326
  // Emit transformed event
326
- const transformedEvent = this.eventTransformer.transform(message);
327
+ const transformedEvent = this.adapter.transform(message);
327
328
  if (transformedEvent) {
328
329
  this.emitEvent(transformedEvent);
329
330
  }