@posthog/agent 1.11.0 → 1.12.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/README.md +26 -65
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/src/adapters/types.d.ts +1 -1
- package/dist/src/agent.d.ts +0 -13
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +2 -214
- package/dist/src/agent.js.map +1 -1
- package/dist/src/agents/execution.d.ts +1 -1
- package/dist/src/agents/execution.js +2 -2
- package/dist/src/agents/execution.js.map +1 -1
- package/dist/src/git-manager.js +1 -1
- package/dist/src/git-manager.js.map +1 -1
- package/dist/src/posthog-api.d.ts +0 -8
- package/dist/src/posthog-api.d.ts.map +1 -1
- package/dist/src/posthog-api.js +0 -32
- package/dist/src/posthog-api.js.map +1 -1
- package/dist/src/task-progress-reporter.d.ts +0 -6
- package/dist/src/task-progress-reporter.d.ts.map +1 -1
- package/dist/src/task-progress-reporter.js +2 -26
- package/dist/src/task-progress-reporter.js.map +1 -1
- package/dist/src/template-manager.d.ts.map +1 -1
- package/dist/src/template-manager.js +26 -4
- package/dist/src/template-manager.js.map +1 -1
- package/dist/src/types.d.ts +0 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +0 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +2 -3
- package/src/adapters/types.ts +1 -1
- package/src/agent.ts +3 -234
- package/src/agents/execution.ts +2 -2
- package/src/git-manager.ts +1 -1
- package/src/posthog-api.ts +0 -40
- package/src/task-progress-reporter.ts +2 -34
- package/src/template-manager.ts +35 -5
- package/src/types.ts +0 -7
- package/dist/src/agent-registry.d.ts +0 -16
- package/dist/src/agent-registry.d.ts.map +0 -1
- package/dist/src/agent-registry.js +0 -62
- package/dist/src/agent-registry.js.map +0 -1
- package/dist/src/stage-executor.d.ts +0 -20
- package/dist/src/stage-executor.d.ts.map +0 -1
- package/dist/src/stage-executor.js +0 -178
- package/dist/src/stage-executor.js.map +0 -1
- package/dist/src/workflow-registry.d.ts +0 -11
- package/dist/src/workflow-registry.d.ts.map +0 -1
- package/dist/src/workflow-registry.js +0 -27
- package/dist/src/workflow-registry.js.map +0 -1
- package/dist/src/workflow-types.d.ts +0 -45
- package/dist/src/workflow-types.d.ts.map +0 -1
- package/src/agent-registry.ts +0 -65
- package/src/stage-executor.ts +0 -210
- package/src/workflow-registry.ts +0 -30
- package/src/workflow-types.ts +0 -52
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Logger } from './utils/logger.js';
|
|
2
|
-
import { AgentRegistry } from './agent-registry.js';
|
|
3
|
-
import type { AgentEvent, Task, McpServerConfig } from './types.js';
|
|
4
|
-
import type { WorkflowStage, WorkflowStageExecutionResult, WorkflowExecutionOptions } from './workflow-types.js';
|
|
5
|
-
import { PromptBuilder } from './prompt-builder.js';
|
|
6
|
-
export declare class StageExecutor {
|
|
7
|
-
private registry;
|
|
8
|
-
private logger;
|
|
9
|
-
private adapter;
|
|
10
|
-
private promptBuilder;
|
|
11
|
-
private eventHandler?;
|
|
12
|
-
private mcpServers?;
|
|
13
|
-
constructor(registry: AgentRegistry, logger: Logger, promptBuilder?: PromptBuilder, eventHandler?: (event: AgentEvent) => void, mcpServers?: Record<string, McpServerConfig>);
|
|
14
|
-
setEventHandler(handler?: (event: AgentEvent) => void): void;
|
|
15
|
-
execute(task: Task, stage: WorkflowStage, options: WorkflowExecutionOptions): Promise<WorkflowStageExecutionResult>;
|
|
16
|
-
private runResearch;
|
|
17
|
-
private runPlanning;
|
|
18
|
-
private runExecution;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=stage-executor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stage-executor.d.ts","sourceRoot":"","sources":["../../src/stage-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAIjH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAC,CAA8B;IACnD,OAAO,CAAC,UAAU,CAAC,CAAkC;gBAGnD,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,aAAa,EAC7B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EAC1C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAc9C,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAItD,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,4BAA4B,CAAC;YAiC3G,WAAW;YA+CX,WAAW;YA+CX,YAAY;CAwC3B"}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
2
|
-
import './utils/logger.js';
|
|
3
|
-
import { ClaudeAdapter } from './adapters/claude/claude-adapter.js';
|
|
4
|
-
import { RESEARCH_SYSTEM_PROMPT } from './agents/research.js';
|
|
5
|
-
import { PLANNING_SYSTEM_PROMPT } from './agents/planning.js';
|
|
6
|
-
import { EXECUTION_SYSTEM_PROMPT } from './agents/execution.js';
|
|
7
|
-
import { PromptBuilder } from './prompt-builder.js';
|
|
8
|
-
|
|
9
|
-
class StageExecutor {
|
|
10
|
-
registry;
|
|
11
|
-
logger;
|
|
12
|
-
adapter;
|
|
13
|
-
promptBuilder;
|
|
14
|
-
eventHandler;
|
|
15
|
-
mcpServers;
|
|
16
|
-
constructor(registry, logger, promptBuilder, eventHandler, mcpServers) {
|
|
17
|
-
this.registry = registry;
|
|
18
|
-
this.logger = logger.child('StageExecutor');
|
|
19
|
-
this.adapter = new ClaudeAdapter();
|
|
20
|
-
this.promptBuilder = promptBuilder || new PromptBuilder({
|
|
21
|
-
getTaskFiles: async () => [],
|
|
22
|
-
generatePlanTemplate: async () => '',
|
|
23
|
-
logger,
|
|
24
|
-
});
|
|
25
|
-
this.eventHandler = eventHandler;
|
|
26
|
-
this.mcpServers = mcpServers;
|
|
27
|
-
}
|
|
28
|
-
setEventHandler(handler) {
|
|
29
|
-
this.eventHandler = handler;
|
|
30
|
-
}
|
|
31
|
-
async execute(task, stage, options) {
|
|
32
|
-
const isManual = stage.is_manual_only === true;
|
|
33
|
-
if (isManual) {
|
|
34
|
-
this.logger.info('Manual stage detected; skipping agent execution', { stage: stage.key });
|
|
35
|
-
return { results: [] };
|
|
36
|
-
}
|
|
37
|
-
const inferredAgent = stage.key.toLowerCase().includes('plan') ? 'planning_basic' : 'code_generation';
|
|
38
|
-
const agentName = stage.agent_name || inferredAgent;
|
|
39
|
-
const agent = this.registry.getAgent(agentName);
|
|
40
|
-
if (!agent) {
|
|
41
|
-
throw new Error(`Unknown agent '${agentName}' for stage '${stage.key}'`);
|
|
42
|
-
}
|
|
43
|
-
const permissionMode = options.permissionMode || 'acceptEdits';
|
|
44
|
-
const cwd = options.repositoryPath || process.cwd();
|
|
45
|
-
switch (agent.agent_type) {
|
|
46
|
-
case 'research':
|
|
47
|
-
return this.runResearch(task, cwd, options, stage.key);
|
|
48
|
-
case 'planning':
|
|
49
|
-
return this.runPlanning(task, cwd, options, stage.key);
|
|
50
|
-
case 'execution':
|
|
51
|
-
return this.runExecution(task, cwd, permissionMode, options, stage.key);
|
|
52
|
-
case 'review': // TODO: Implement review
|
|
53
|
-
case 'testing': // TODO: Implement testing
|
|
54
|
-
default:
|
|
55
|
-
// throw new Error(`Unsupported agent type: ${agent.agent_type}`);
|
|
56
|
-
console.warn(`Unsupported agent type: ${agent.agent_type}`);
|
|
57
|
-
return { results: [] };
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
async runResearch(task, cwd, options, stageKey) {
|
|
61
|
-
const contextPrompt = await this.promptBuilder.buildResearchPrompt(task, cwd);
|
|
62
|
-
let prompt = RESEARCH_SYSTEM_PROMPT + '\n\n' + contextPrompt;
|
|
63
|
-
const stageOverrides = options.stageOverrides?.[stageKey] || options.stageOverrides?.['research'];
|
|
64
|
-
const mergedOverrides = {
|
|
65
|
-
...(options.queryOverrides || {}),
|
|
66
|
-
...(stageOverrides?.queryOverrides || {}),
|
|
67
|
-
};
|
|
68
|
-
const baseOptions = {
|
|
69
|
-
model: 'claude-sonnet-4-5-20250929',
|
|
70
|
-
cwd,
|
|
71
|
-
permissionMode: 'plan',
|
|
72
|
-
settingSources: ['local'],
|
|
73
|
-
mcpServers: this.mcpServers
|
|
74
|
-
};
|
|
75
|
-
const response = query({
|
|
76
|
-
prompt,
|
|
77
|
-
options: { ...baseOptions, ...mergedOverrides },
|
|
78
|
-
});
|
|
79
|
-
let research = '';
|
|
80
|
-
for await (const message of response) {
|
|
81
|
-
// Emit raw SDK event first
|
|
82
|
-
this.eventHandler?.(this.adapter.createRawSDKEvent(message));
|
|
83
|
-
// Then emit transformed event
|
|
84
|
-
const transformed = this.adapter.transform(message);
|
|
85
|
-
if (transformed) {
|
|
86
|
-
if (transformed.type !== 'token') {
|
|
87
|
-
this.logger.debug('Research event', { type: transformed.type });
|
|
88
|
-
}
|
|
89
|
-
this.eventHandler?.(transformed);
|
|
90
|
-
}
|
|
91
|
-
if (message.type === 'assistant' && message.message?.content) {
|
|
92
|
-
for (const c of message.message.content) {
|
|
93
|
-
if (c.type === 'text' && c.text)
|
|
94
|
-
research += c.text + '\n';
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return { plan: research.trim() }; // Return as 'plan' field to match existing interface
|
|
99
|
-
}
|
|
100
|
-
async runPlanning(task, cwd, options, stageKey) {
|
|
101
|
-
const contextPrompt = await this.promptBuilder.buildPlanningPrompt(task, cwd);
|
|
102
|
-
let prompt = PLANNING_SYSTEM_PROMPT + '\n\n' + contextPrompt;
|
|
103
|
-
const stageOverrides = options.stageOverrides?.[stageKey] || options.stageOverrides?.['plan'];
|
|
104
|
-
const mergedOverrides = {
|
|
105
|
-
...(options.queryOverrides || {}),
|
|
106
|
-
...(stageOverrides?.queryOverrides || {}),
|
|
107
|
-
};
|
|
108
|
-
const baseOptions = {
|
|
109
|
-
model: 'claude-sonnet-4-5-20250929',
|
|
110
|
-
cwd,
|
|
111
|
-
permissionMode: 'plan',
|
|
112
|
-
settingSources: ['local'],
|
|
113
|
-
mcpServers: this.mcpServers
|
|
114
|
-
};
|
|
115
|
-
const response = query({
|
|
116
|
-
prompt,
|
|
117
|
-
options: { ...baseOptions, ...mergedOverrides },
|
|
118
|
-
});
|
|
119
|
-
let plan = '';
|
|
120
|
-
for await (const message of response) {
|
|
121
|
-
// Emit raw SDK event first
|
|
122
|
-
this.eventHandler?.(this.adapter.createRawSDKEvent(message));
|
|
123
|
-
// Then emit transformed event
|
|
124
|
-
const transformed = this.adapter.transform(message);
|
|
125
|
-
if (transformed) {
|
|
126
|
-
if (transformed.type !== 'token') {
|
|
127
|
-
this.logger.debug('Planning event', { type: transformed.type });
|
|
128
|
-
}
|
|
129
|
-
this.eventHandler?.(transformed);
|
|
130
|
-
}
|
|
131
|
-
if (message.type === 'assistant' && message.message?.content) {
|
|
132
|
-
for (const c of message.message.content) {
|
|
133
|
-
if (c.type === 'text' && c.text)
|
|
134
|
-
plan += c.text + '\n';
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return { plan: plan.trim() };
|
|
139
|
-
}
|
|
140
|
-
async runExecution(task, cwd, permissionMode, options, stageKey) {
|
|
141
|
-
const contextPrompt = await this.promptBuilder.buildExecutionPrompt(task, cwd);
|
|
142
|
-
let prompt = EXECUTION_SYSTEM_PROMPT + '\n\n' + contextPrompt;
|
|
143
|
-
const stageOverrides = options.stageOverrides?.[stageKey];
|
|
144
|
-
const mergedOverrides = {
|
|
145
|
-
...(options.queryOverrides || {}),
|
|
146
|
-
...(stageOverrides?.queryOverrides || {}),
|
|
147
|
-
};
|
|
148
|
-
const baseOptions = {
|
|
149
|
-
model: 'claude-sonnet-4-5-20250929',
|
|
150
|
-
cwd,
|
|
151
|
-
permissionMode,
|
|
152
|
-
settingSources: ['local'],
|
|
153
|
-
mcpServers: this.mcpServers
|
|
154
|
-
};
|
|
155
|
-
const response = query({
|
|
156
|
-
prompt,
|
|
157
|
-
options: { ...baseOptions, ...mergedOverrides },
|
|
158
|
-
});
|
|
159
|
-
const results = [];
|
|
160
|
-
for await (const message of response) {
|
|
161
|
-
// Emit raw SDK event first
|
|
162
|
-
this.eventHandler?.(this.adapter.createRawSDKEvent(message));
|
|
163
|
-
// Then emit transformed event
|
|
164
|
-
const transformed = this.adapter.transform(message);
|
|
165
|
-
if (transformed) {
|
|
166
|
-
if (transformed.type !== 'token') {
|
|
167
|
-
this.logger.debug('Execution event', { type: transformed.type });
|
|
168
|
-
}
|
|
169
|
-
this.eventHandler?.(transformed);
|
|
170
|
-
}
|
|
171
|
-
results.push(message);
|
|
172
|
-
}
|
|
173
|
-
return { results };
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export { StageExecutor };
|
|
178
|
-
//# sourceMappingURL=stage-executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stage-executor.js","sources":["../../src/stage-executor.ts"],"sourcesContent":["import { query } from '@anthropic-ai/claude-agent-sdk';\nimport { Logger } from './utils/logger.js';\nimport { ClaudeAdapter } from './adapters/claude/claude-adapter.js';\nimport { AgentRegistry } from './agent-registry.js';\nimport type { AgentEvent, Task, McpServerConfig } from './types.js';\nimport type { WorkflowStage, WorkflowStageExecutionResult, WorkflowExecutionOptions } from './workflow-types.js';\nimport { RESEARCH_SYSTEM_PROMPT } from './agents/research.js';\nimport { PLANNING_SYSTEM_PROMPT } from './agents/planning.js';\nimport { EXECUTION_SYSTEM_PROMPT } from './agents/execution.js';\nimport { PromptBuilder } from './prompt-builder.js';\n\nexport class StageExecutor {\n private registry: AgentRegistry;\n private logger: Logger;\n private adapter: ClaudeAdapter;\n private promptBuilder: PromptBuilder;\n private eventHandler?: (event: AgentEvent) => void;\n private mcpServers?: Record<string, McpServerConfig>;\n\n constructor(\n registry: AgentRegistry,\n logger: Logger,\n promptBuilder?: PromptBuilder,\n eventHandler?: (event: AgentEvent) => void,\n mcpServers?: Record<string, McpServerConfig>,\n ) {\n this.registry = registry;\n this.logger = logger.child('StageExecutor');\n this.adapter = new ClaudeAdapter();\n this.promptBuilder = promptBuilder || new PromptBuilder({\n getTaskFiles: async () => [],\n generatePlanTemplate: async () => '',\n logger,\n });\n this.eventHandler = eventHandler;\n this.mcpServers = mcpServers;\n }\n\n setEventHandler(handler?: (event: AgentEvent) => void): void {\n this.eventHandler = handler;\n }\n\n async execute(task: Task, stage: WorkflowStage, options: WorkflowExecutionOptions): Promise<WorkflowStageExecutionResult> {\n const isManual = stage.is_manual_only === true;\n if (isManual) {\n this.logger.info('Manual stage detected; skipping agent execution', { stage: stage.key });\n return { results: [] };\n }\n\n const inferredAgent = stage.key.toLowerCase().includes('plan') ? 'planning_basic' : 'code_generation';\n const agentName = stage.agent_name || inferredAgent;\n const agent = this.registry.getAgent(agentName);\n if (!agent) {\n throw new Error(`Unknown agent '${agentName}' for stage '${stage.key}'`);\n }\n\n const permissionMode = (options.permissionMode as any) || 'acceptEdits';\n const cwd = options.repositoryPath || process.cwd();\n\n switch (agent.agent_type) {\n case 'research':\n return this.runResearch(task, cwd, options, stage.key);\n case 'planning':\n return this.runPlanning(task, cwd, options, stage.key);\n case 'execution':\n return this.runExecution(task, cwd, permissionMode, options, stage.key);\n case 'review': // TODO: Implement review\n case 'testing': // TODO: Implement testing\n default:\n // throw new Error(`Unsupported agent type: ${agent.agent_type}`);\n console.warn(`Unsupported agent type: ${agent.agent_type}`);\n return { results: [] };\n }\n }\n\n private async runResearch(task: Task, cwd: string, options: WorkflowExecutionOptions, stageKey: string): Promise<WorkflowStageExecutionResult> {\n const contextPrompt = await this.promptBuilder.buildResearchPrompt(task, cwd);\n let prompt = RESEARCH_SYSTEM_PROMPT + '\\n\\n' + contextPrompt;\n\n const stageOverrides = options.stageOverrides?.[stageKey] || options.stageOverrides?.['research'];\n const mergedOverrides = {\n ...(options.queryOverrides || {}),\n ...(stageOverrides?.queryOverrides || {}),\n } as Record<string, any>;\n\n const baseOptions: Record<string, any> = {\n model: 'claude-sonnet-4-5-20250929',\n cwd,\n permissionMode: 'plan',\n settingSources: ['local'],\n mcpServers: this.mcpServers\n };\n\n const response = query({\n prompt,\n options: { ...baseOptions, ...mergedOverrides },\n });\n\n let research = '';\n for await (const message of response) {\n // Emit raw SDK event first\n this.eventHandler?.(this.adapter.createRawSDKEvent(message));\n\n // Then emit transformed event\n const transformed = this.adapter.transform(message);\n if (transformed) {\n if (transformed.type !== 'token') {\n this.logger.debug('Research event', { type: transformed.type });\n }\n this.eventHandler?.(transformed);\n }\n\n if (message.type === 'assistant' && message.message?.content) {\n for (const c of message.message.content) {\n if (c.type === 'text' && c.text) research += c.text + '\\n';\n }\n }\n }\n\n return { plan: research.trim() }; // Return as 'plan' field to match existing interface\n }\n\n private async runPlanning(task: Task, cwd: string, options: WorkflowExecutionOptions, stageKey: string): Promise<WorkflowStageExecutionResult> {\n const contextPrompt = await this.promptBuilder.buildPlanningPrompt(task, cwd);\n let prompt = PLANNING_SYSTEM_PROMPT + '\\n\\n' + contextPrompt;\n\n const stageOverrides = options.stageOverrides?.[stageKey] || options.stageOverrides?.['plan'];\n const mergedOverrides = {\n ...(options.queryOverrides || {}),\n ...(stageOverrides?.queryOverrides || {}),\n } as Record<string, any>;\n\n const baseOptions: Record<string, any> = {\n model: 'claude-sonnet-4-5-20250929',\n cwd,\n permissionMode: 'plan',\n settingSources: ['local'],\n mcpServers: this.mcpServers\n };\n\n const response = query({\n prompt,\n options: { ...baseOptions, ...mergedOverrides },\n });\n\n let plan = '';\n for await (const message of response) {\n // Emit raw SDK event first\n this.eventHandler?.(this.adapter.createRawSDKEvent(message));\n\n // Then emit transformed event\n const transformed = this.adapter.transform(message);\n if (transformed) {\n if (transformed.type !== 'token') {\n this.logger.debug('Planning event', { type: transformed.type });\n }\n this.eventHandler?.(transformed);\n }\n\n if (message.type === 'assistant' && message.message?.content) {\n for (const c of message.message.content) {\n if (c.type === 'text' && c.text) plan += c.text + '\\n';\n }\n }\n }\n\n return { plan: plan.trim() };\n }\n\n private async runExecution(task: Task, cwd: string, permissionMode: WorkflowExecutionOptions['permissionMode'], options: WorkflowExecutionOptions, stageKey: string): Promise<WorkflowStageExecutionResult> {\n const contextPrompt = await this.promptBuilder.buildExecutionPrompt(task, cwd);\n let prompt = EXECUTION_SYSTEM_PROMPT + '\\n\\n' + contextPrompt;\n\n const stageOverrides = options.stageOverrides?.[stageKey];\n const mergedOverrides = {\n ...(options.queryOverrides || {}),\n ...(stageOverrides?.queryOverrides || {}),\n } as Record<string, any>;\n\n const baseOptions: Record<string, any> = {\n model: 'claude-sonnet-4-5-20250929',\n cwd,\n permissionMode,\n settingSources: ['local'],\n mcpServers: this.mcpServers\n };\n\n const response = query({\n prompt,\n options: { ...baseOptions, ...mergedOverrides },\n });\n const results: any[] = [];\n for await (const message of response) {\n // Emit raw SDK event first\n this.eventHandler?.(this.adapter.createRawSDKEvent(message));\n\n // Then emit transformed event\n const transformed = this.adapter.transform(message);\n if (transformed) {\n if (transformed.type !== 'token') {\n this.logger.debug('Execution event', { type: transformed.type });\n }\n this.eventHandler?.(transformed);\n }\n\n results.push(message);\n }\n return { results };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { WorkflowDefinition } from './workflow-types.js';
|
|
2
|
-
import { PostHogAPIClient } from './posthog-api.js';
|
|
3
|
-
export declare class WorkflowRegistry {
|
|
4
|
-
private workflowsById;
|
|
5
|
-
private apiClient?;
|
|
6
|
-
constructor(apiClient?: PostHogAPIClient, staticDefinitions?: WorkflowDefinition[]);
|
|
7
|
-
loadWorkflows(): Promise<void>;
|
|
8
|
-
getWorkflow(id: string): WorkflowDefinition | undefined;
|
|
9
|
-
listWorkflows(): WorkflowDefinition[];
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=workflow-registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-registry.d.ts","sourceRoot":"","sources":["../../src/workflow-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,SAAS,CAAC,CAAmB;gBAEzB,SAAS,CAAC,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,EAAE,kBAAkB,EAAE;IAO5E,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIvD,aAAa,IAAI,kBAAkB,EAAE;CAGtC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
class WorkflowRegistry {
|
|
2
|
-
workflowsById = new Map();
|
|
3
|
-
apiClient;
|
|
4
|
-
constructor(apiClient, staticDefinitions) {
|
|
5
|
-
this.apiClient = apiClient;
|
|
6
|
-
if (staticDefinitions) {
|
|
7
|
-
for (const w of staticDefinitions)
|
|
8
|
-
this.workflowsById.set(w.id, w);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
async loadWorkflows() {
|
|
12
|
-
if (this.apiClient) {
|
|
13
|
-
const workflows = await this.apiClient.listWorkflows();
|
|
14
|
-
for (const w of workflows)
|
|
15
|
-
this.workflowsById.set(w.id, w);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
getWorkflow(id) {
|
|
19
|
-
return this.workflowsById.get(id);
|
|
20
|
-
}
|
|
21
|
-
listWorkflows() {
|
|
22
|
-
return Array.from(this.workflowsById.values());
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export { WorkflowRegistry };
|
|
27
|
-
//# sourceMappingURL=workflow-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-registry.js","sources":["../../src/workflow-registry.ts"],"sourcesContent":["import type { WorkflowDefinition } from './workflow-types.js';\nimport { PostHogAPIClient } from './posthog-api.js';\n\nexport class WorkflowRegistry {\n private workflowsById: Map<string, WorkflowDefinition> = new Map();\n private apiClient?: PostHogAPIClient;\n\n constructor(apiClient?: PostHogAPIClient, staticDefinitions?: WorkflowDefinition[]) {\n this.apiClient = apiClient;\n if (staticDefinitions) {\n for (const w of staticDefinitions) this.workflowsById.set(w.id, w);\n }\n }\n\n async loadWorkflows(): Promise<void> {\n if (this.apiClient) {\n const workflows = await this.apiClient.listWorkflows();\n for (const w of workflows) this.workflowsById.set(w.id, w);\n }\n }\n\n getWorkflow(id: string): WorkflowDefinition | undefined {\n return this.workflowsById.get(id);\n }\n\n listWorkflows(): WorkflowDefinition[] {\n return Array.from(this.workflowsById.values());\n }\n}\n\n"],"names":[],"mappings":"MAGa,gBAAgB,CAAA;AACnB,IAAA,aAAa,GAAoC,IAAI,GAAG,EAAE;AAC1D,IAAA,SAAS;IAEjB,WAAA,CAAY,SAA4B,EAAE,iBAAwC,EAAA;AAChF,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,iBAAiB,EAAE;YACrB,KAAK,MAAM,CAAC,IAAI,iBAAiB;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE;IACF;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;YACtD,KAAK,MAAM,CAAC,IAAI,SAAS;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5D;IACF;AAEA,IAAA,WAAW,CAAC,EAAU,EAAA;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IACnC;IAEA,aAAa,GAAA;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IAChD;AACD;;;;"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { PermissionMode, AgentEvent } from './types.js';
|
|
2
|
-
export type AgentType = 'research' | 'planning' | 'execution' | 'review' | 'testing';
|
|
3
|
-
export interface AgentDefinition {
|
|
4
|
-
id: string;
|
|
5
|
-
name: string;
|
|
6
|
-
agent_type: AgentType;
|
|
7
|
-
description?: string;
|
|
8
|
-
config?: Record<string, any>;
|
|
9
|
-
}
|
|
10
|
-
export interface WorkflowStage {
|
|
11
|
-
id: string;
|
|
12
|
-
key: string;
|
|
13
|
-
name: string;
|
|
14
|
-
position: number;
|
|
15
|
-
agent_name?: string | null;
|
|
16
|
-
is_manual_only?: boolean;
|
|
17
|
-
color?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface WorkflowDefinition {
|
|
20
|
-
id: string;
|
|
21
|
-
name: string;
|
|
22
|
-
description?: string;
|
|
23
|
-
stages: WorkflowStage[];
|
|
24
|
-
}
|
|
25
|
-
export interface StageOverrideOptions {
|
|
26
|
-
permissionMode?: PermissionMode;
|
|
27
|
-
createPlanningBranch?: boolean;
|
|
28
|
-
createImplementationBranch?: boolean;
|
|
29
|
-
openPullRequest?: boolean;
|
|
30
|
-
queryOverrides?: Record<string, any>;
|
|
31
|
-
}
|
|
32
|
-
export interface WorkflowStageExecutionResult {
|
|
33
|
-
plan?: string;
|
|
34
|
-
results?: any[];
|
|
35
|
-
}
|
|
36
|
-
export interface WorkflowExecutionOptions {
|
|
37
|
-
repositoryPath?: string;
|
|
38
|
-
permissionMode?: PermissionMode;
|
|
39
|
-
autoProgress?: boolean;
|
|
40
|
-
resumeFromCurrentStage?: boolean;
|
|
41
|
-
stageOverrides?: Record<string, StageOverrideOptions>;
|
|
42
|
-
onEvent?: (event: AgentEvent) => void;
|
|
43
|
-
queryOverrides?: Record<string, any>;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=workflow-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-types.d.ts","sourceRoot":"","sources":["../../src/workflow-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC"}
|
package/src/agent-registry.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { AgentDefinition, AgentType } from './workflow-types.js';
|
|
2
|
-
|
|
3
|
-
export class AgentRegistry {
|
|
4
|
-
private agentsByName: Map<string, AgentDefinition> = new Map();
|
|
5
|
-
|
|
6
|
-
constructor(definitions?: AgentDefinition[]) {
|
|
7
|
-
if (definitions) {
|
|
8
|
-
for (const def of definitions) this.register(def);
|
|
9
|
-
} else {
|
|
10
|
-
for (const def of AgentRegistry.getDefaultAgents()) this.register(def);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
static getDefaultAgents(): AgentDefinition[] {
|
|
15
|
-
return [
|
|
16
|
-
{
|
|
17
|
-
id: 'research',
|
|
18
|
-
name: 'research',
|
|
19
|
-
agent_type: 'research',
|
|
20
|
-
description: 'Explore codebase and generate clarifying questions',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
id: 'planning',
|
|
24
|
-
name: 'planning',
|
|
25
|
-
agent_type: 'planning',
|
|
26
|
-
description: 'Analyze repo and produce implementation plan',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
id: 'code_generation',
|
|
30
|
-
name: 'code_generation',
|
|
31
|
-
agent_type: 'execution',
|
|
32
|
-
description: 'Implements code changes using Claude SDK',
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
id: 'review',
|
|
36
|
-
name: 'review',
|
|
37
|
-
agent_type: 'review',
|
|
38
|
-
description: 'Reviews changes and suggests fixes',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
id: 'testing',
|
|
42
|
-
name: 'testing',
|
|
43
|
-
agent_type: 'testing',
|
|
44
|
-
description: 'Runs tests and reports results',
|
|
45
|
-
},
|
|
46
|
-
];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
register(def: AgentDefinition): void {
|
|
50
|
-
this.agentsByName.set(def.name, def);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
getAgent(name: string): AgentDefinition | undefined {
|
|
54
|
-
return this.agentsByName.get(name);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
listAgents(): AgentDefinition[] {
|
|
58
|
-
return Array.from(this.agentsByName.values());
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
exportForPostHog(): { id: string; name: string; agent_type: AgentType; description?: string }[] {
|
|
62
|
-
return this.listAgents().map(({ id, name, agent_type, description }) => ({ id, name, agent_type, description }));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
package/src/stage-executor.ts
DELETED
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
2
|
-
import { Logger } from './utils/logger.js';
|
|
3
|
-
import { ClaudeAdapter } from './adapters/claude/claude-adapter.js';
|
|
4
|
-
import { AgentRegistry } from './agent-registry.js';
|
|
5
|
-
import type { AgentEvent, Task, McpServerConfig } from './types.js';
|
|
6
|
-
import type { WorkflowStage, WorkflowStageExecutionResult, WorkflowExecutionOptions } from './workflow-types.js';
|
|
7
|
-
import { RESEARCH_SYSTEM_PROMPT } from './agents/research.js';
|
|
8
|
-
import { PLANNING_SYSTEM_PROMPT } from './agents/planning.js';
|
|
9
|
-
import { EXECUTION_SYSTEM_PROMPT } from './agents/execution.js';
|
|
10
|
-
import { PromptBuilder } from './prompt-builder.js';
|
|
11
|
-
|
|
12
|
-
export class StageExecutor {
|
|
13
|
-
private registry: AgentRegistry;
|
|
14
|
-
private logger: Logger;
|
|
15
|
-
private adapter: ClaudeAdapter;
|
|
16
|
-
private promptBuilder: PromptBuilder;
|
|
17
|
-
private eventHandler?: (event: AgentEvent) => void;
|
|
18
|
-
private mcpServers?: Record<string, McpServerConfig>;
|
|
19
|
-
|
|
20
|
-
constructor(
|
|
21
|
-
registry: AgentRegistry,
|
|
22
|
-
logger: Logger,
|
|
23
|
-
promptBuilder?: PromptBuilder,
|
|
24
|
-
eventHandler?: (event: AgentEvent) => void,
|
|
25
|
-
mcpServers?: Record<string, McpServerConfig>,
|
|
26
|
-
) {
|
|
27
|
-
this.registry = registry;
|
|
28
|
-
this.logger = logger.child('StageExecutor');
|
|
29
|
-
this.adapter = new ClaudeAdapter();
|
|
30
|
-
this.promptBuilder = promptBuilder || new PromptBuilder({
|
|
31
|
-
getTaskFiles: async () => [],
|
|
32
|
-
generatePlanTemplate: async () => '',
|
|
33
|
-
logger,
|
|
34
|
-
});
|
|
35
|
-
this.eventHandler = eventHandler;
|
|
36
|
-
this.mcpServers = mcpServers;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
setEventHandler(handler?: (event: AgentEvent) => void): void {
|
|
40
|
-
this.eventHandler = handler;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async execute(task: Task, stage: WorkflowStage, options: WorkflowExecutionOptions): Promise<WorkflowStageExecutionResult> {
|
|
44
|
-
const isManual = stage.is_manual_only === true;
|
|
45
|
-
if (isManual) {
|
|
46
|
-
this.logger.info('Manual stage detected; skipping agent execution', { stage: stage.key });
|
|
47
|
-
return { results: [] };
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const inferredAgent = stage.key.toLowerCase().includes('plan') ? 'planning_basic' : 'code_generation';
|
|
51
|
-
const agentName = stage.agent_name || inferredAgent;
|
|
52
|
-
const agent = this.registry.getAgent(agentName);
|
|
53
|
-
if (!agent) {
|
|
54
|
-
throw new Error(`Unknown agent '${agentName}' for stage '${stage.key}'`);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const permissionMode = (options.permissionMode as any) || 'acceptEdits';
|
|
58
|
-
const cwd = options.repositoryPath || process.cwd();
|
|
59
|
-
|
|
60
|
-
switch (agent.agent_type) {
|
|
61
|
-
case 'research':
|
|
62
|
-
return this.runResearch(task, cwd, options, stage.key);
|
|
63
|
-
case 'planning':
|
|
64
|
-
return this.runPlanning(task, cwd, options, stage.key);
|
|
65
|
-
case 'execution':
|
|
66
|
-
return this.runExecution(task, cwd, permissionMode, options, stage.key);
|
|
67
|
-
case 'review': // TODO: Implement review
|
|
68
|
-
case 'testing': // TODO: Implement testing
|
|
69
|
-
default:
|
|
70
|
-
// throw new Error(`Unsupported agent type: ${agent.agent_type}`);
|
|
71
|
-
console.warn(`Unsupported agent type: ${agent.agent_type}`);
|
|
72
|
-
return { results: [] };
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
private async runResearch(task: Task, cwd: string, options: WorkflowExecutionOptions, stageKey: string): Promise<WorkflowStageExecutionResult> {
|
|
77
|
-
const contextPrompt = await this.promptBuilder.buildResearchPrompt(task, cwd);
|
|
78
|
-
let prompt = RESEARCH_SYSTEM_PROMPT + '\n\n' + contextPrompt;
|
|
79
|
-
|
|
80
|
-
const stageOverrides = options.stageOverrides?.[stageKey] || options.stageOverrides?.['research'];
|
|
81
|
-
const mergedOverrides = {
|
|
82
|
-
...(options.queryOverrides || {}),
|
|
83
|
-
...(stageOverrides?.queryOverrides || {}),
|
|
84
|
-
} as Record<string, any>;
|
|
85
|
-
|
|
86
|
-
const baseOptions: Record<string, any> = {
|
|
87
|
-
model: 'claude-sonnet-4-5-20250929',
|
|
88
|
-
cwd,
|
|
89
|
-
permissionMode: 'plan',
|
|
90
|
-
settingSources: ['local'],
|
|
91
|
-
mcpServers: this.mcpServers
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const response = query({
|
|
95
|
-
prompt,
|
|
96
|
-
options: { ...baseOptions, ...mergedOverrides },
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
let research = '';
|
|
100
|
-
for await (const message of response) {
|
|
101
|
-
// Emit raw SDK event first
|
|
102
|
-
this.eventHandler?.(this.adapter.createRawSDKEvent(message));
|
|
103
|
-
|
|
104
|
-
// Then emit transformed event
|
|
105
|
-
const transformed = this.adapter.transform(message);
|
|
106
|
-
if (transformed) {
|
|
107
|
-
if (transformed.type !== 'token') {
|
|
108
|
-
this.logger.debug('Research event', { type: transformed.type });
|
|
109
|
-
}
|
|
110
|
-
this.eventHandler?.(transformed);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (message.type === 'assistant' && message.message?.content) {
|
|
114
|
-
for (const c of message.message.content) {
|
|
115
|
-
if (c.type === 'text' && c.text) research += c.text + '\n';
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return { plan: research.trim() }; // Return as 'plan' field to match existing interface
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
private async runPlanning(task: Task, cwd: string, options: WorkflowExecutionOptions, stageKey: string): Promise<WorkflowStageExecutionResult> {
|
|
124
|
-
const contextPrompt = await this.promptBuilder.buildPlanningPrompt(task, cwd);
|
|
125
|
-
let prompt = PLANNING_SYSTEM_PROMPT + '\n\n' + contextPrompt;
|
|
126
|
-
|
|
127
|
-
const stageOverrides = options.stageOverrides?.[stageKey] || options.stageOverrides?.['plan'];
|
|
128
|
-
const mergedOverrides = {
|
|
129
|
-
...(options.queryOverrides || {}),
|
|
130
|
-
...(stageOverrides?.queryOverrides || {}),
|
|
131
|
-
} as Record<string, any>;
|
|
132
|
-
|
|
133
|
-
const baseOptions: Record<string, any> = {
|
|
134
|
-
model: 'claude-sonnet-4-5-20250929',
|
|
135
|
-
cwd,
|
|
136
|
-
permissionMode: 'plan',
|
|
137
|
-
settingSources: ['local'],
|
|
138
|
-
mcpServers: this.mcpServers
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const response = query({
|
|
142
|
-
prompt,
|
|
143
|
-
options: { ...baseOptions, ...mergedOverrides },
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
let plan = '';
|
|
147
|
-
for await (const message of response) {
|
|
148
|
-
// Emit raw SDK event first
|
|
149
|
-
this.eventHandler?.(this.adapter.createRawSDKEvent(message));
|
|
150
|
-
|
|
151
|
-
// Then emit transformed event
|
|
152
|
-
const transformed = this.adapter.transform(message);
|
|
153
|
-
if (transformed) {
|
|
154
|
-
if (transformed.type !== 'token') {
|
|
155
|
-
this.logger.debug('Planning event', { type: transformed.type });
|
|
156
|
-
}
|
|
157
|
-
this.eventHandler?.(transformed);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (message.type === 'assistant' && message.message?.content) {
|
|
161
|
-
for (const c of message.message.content) {
|
|
162
|
-
if (c.type === 'text' && c.text) plan += c.text + '\n';
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return { plan: plan.trim() };
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
private async runExecution(task: Task, cwd: string, permissionMode: WorkflowExecutionOptions['permissionMode'], options: WorkflowExecutionOptions, stageKey: string): Promise<WorkflowStageExecutionResult> {
|
|
171
|
-
const contextPrompt = await this.promptBuilder.buildExecutionPrompt(task, cwd);
|
|
172
|
-
let prompt = EXECUTION_SYSTEM_PROMPT + '\n\n' + contextPrompt;
|
|
173
|
-
|
|
174
|
-
const stageOverrides = options.stageOverrides?.[stageKey];
|
|
175
|
-
const mergedOverrides = {
|
|
176
|
-
...(options.queryOverrides || {}),
|
|
177
|
-
...(stageOverrides?.queryOverrides || {}),
|
|
178
|
-
} as Record<string, any>;
|
|
179
|
-
|
|
180
|
-
const baseOptions: Record<string, any> = {
|
|
181
|
-
model: 'claude-sonnet-4-5-20250929',
|
|
182
|
-
cwd,
|
|
183
|
-
permissionMode,
|
|
184
|
-
settingSources: ['local'],
|
|
185
|
-
mcpServers: this.mcpServers
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
const response = query({
|
|
189
|
-
prompt,
|
|
190
|
-
options: { ...baseOptions, ...mergedOverrides },
|
|
191
|
-
});
|
|
192
|
-
const results: any[] = [];
|
|
193
|
-
for await (const message of response) {
|
|
194
|
-
// Emit raw SDK event first
|
|
195
|
-
this.eventHandler?.(this.adapter.createRawSDKEvent(message));
|
|
196
|
-
|
|
197
|
-
// Then emit transformed event
|
|
198
|
-
const transformed = this.adapter.transform(message);
|
|
199
|
-
if (transformed) {
|
|
200
|
-
if (transformed.type !== 'token') {
|
|
201
|
-
this.logger.debug('Execution event', { type: transformed.type });
|
|
202
|
-
}
|
|
203
|
-
this.eventHandler?.(transformed);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
results.push(message);
|
|
207
|
-
}
|
|
208
|
-
return { results };
|
|
209
|
-
}
|
|
210
|
-
}
|
package/src/workflow-registry.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { WorkflowDefinition } from './workflow-types.js';
|
|
2
|
-
import { PostHogAPIClient } from './posthog-api.js';
|
|
3
|
-
|
|
4
|
-
export class WorkflowRegistry {
|
|
5
|
-
private workflowsById: Map<string, WorkflowDefinition> = new Map();
|
|
6
|
-
private apiClient?: PostHogAPIClient;
|
|
7
|
-
|
|
8
|
-
constructor(apiClient?: PostHogAPIClient, staticDefinitions?: WorkflowDefinition[]) {
|
|
9
|
-
this.apiClient = apiClient;
|
|
10
|
-
if (staticDefinitions) {
|
|
11
|
-
for (const w of staticDefinitions) this.workflowsById.set(w.id, w);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
async loadWorkflows(): Promise<void> {
|
|
16
|
-
if (this.apiClient) {
|
|
17
|
-
const workflows = await this.apiClient.listWorkflows();
|
|
18
|
-
for (const w of workflows) this.workflowsById.set(w.id, w);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
getWorkflow(id: string): WorkflowDefinition | undefined {
|
|
23
|
-
return this.workflowsById.get(id);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
listWorkflows(): WorkflowDefinition[] {
|
|
27
|
-
return Array.from(this.workflowsById.values());
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|