@posthog/agent 1.0.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 (97) hide show
  1. package/CLAUDE.md +296 -0
  2. package/README.md +142 -0
  3. package/dist/example.d.ts +3 -0
  4. package/dist/example.d.ts.map +1 -0
  5. package/dist/example.js +49 -0
  6. package/dist/example.js.map +1 -0
  7. package/dist/index.d.ts +7 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +5 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/src/agent-registry.d.ts +16 -0
  12. package/dist/src/agent-registry.d.ts.map +1 -0
  13. package/dist/src/agent-registry.js +54 -0
  14. package/dist/src/agent-registry.js.map +1 -0
  15. package/dist/src/agent.d.ts +60 -0
  16. package/dist/src/agent.d.ts.map +1 -0
  17. package/dist/src/agent.js +371 -0
  18. package/dist/src/agent.js.map +1 -0
  19. package/dist/src/agents/execution.d.ts +2 -0
  20. package/dist/src/agents/execution.d.ts.map +1 -0
  21. package/dist/src/agents/execution.js +54 -0
  22. package/dist/src/agents/execution.js.map +1 -0
  23. package/dist/src/agents/planning.d.ts +2 -0
  24. package/dist/src/agents/planning.d.ts.map +1 -0
  25. package/dist/src/agents/planning.js +68 -0
  26. package/dist/src/agents/planning.js.map +1 -0
  27. package/dist/src/event-transformer.d.ts +7 -0
  28. package/dist/src/event-transformer.d.ts.map +1 -0
  29. package/dist/src/event-transformer.js +174 -0
  30. package/dist/src/event-transformer.js.map +1 -0
  31. package/dist/src/file-manager.d.ts +30 -0
  32. package/dist/src/file-manager.d.ts.map +1 -0
  33. package/dist/src/file-manager.js +181 -0
  34. package/dist/src/file-manager.js.map +1 -0
  35. package/dist/src/git-manager.d.ts +49 -0
  36. package/dist/src/git-manager.d.ts.map +1 -0
  37. package/dist/src/git-manager.js +278 -0
  38. package/dist/src/git-manager.js.map +1 -0
  39. package/dist/src/posthog-api.d.ts +48 -0
  40. package/dist/src/posthog-api.d.ts.map +1 -0
  41. package/dist/src/posthog-api.js +110 -0
  42. package/dist/src/posthog-api.js.map +1 -0
  43. package/dist/src/prompt-builder.d.ts +17 -0
  44. package/dist/src/prompt-builder.d.ts.map +1 -0
  45. package/dist/src/prompt-builder.js +75 -0
  46. package/dist/src/prompt-builder.js.map +1 -0
  47. package/dist/src/stage-executor.d.ts +16 -0
  48. package/dist/src/stage-executor.d.ts.map +1 -0
  49. package/dist/src/stage-executor.js +119 -0
  50. package/dist/src/stage-executor.js.map +1 -0
  51. package/dist/src/task-manager.d.ts +25 -0
  52. package/dist/src/task-manager.d.ts.map +1 -0
  53. package/dist/src/task-manager.js +119 -0
  54. package/dist/src/task-manager.js.map +1 -0
  55. package/dist/src/template-manager.d.ts +30 -0
  56. package/dist/src/template-manager.d.ts.map +1 -0
  57. package/dist/src/template-manager.js +118 -0
  58. package/dist/src/template-manager.js.map +1 -0
  59. package/dist/src/types.d.ts +163 -0
  60. package/dist/src/types.d.ts.map +1 -0
  61. package/dist/src/types.js +9 -0
  62. package/dist/src/types.js.map +1 -0
  63. package/dist/src/utils/logger.d.ts +29 -0
  64. package/dist/src/utils/logger.d.ts.map +1 -0
  65. package/dist/src/utils/logger.js +66 -0
  66. package/dist/src/utils/logger.js.map +1 -0
  67. package/dist/src/utils/mcp.d.ts +10 -0
  68. package/dist/src/utils/mcp.d.ts.map +1 -0
  69. package/dist/src/utils/mcp.js +16 -0
  70. package/dist/src/utils/mcp.js.map +1 -0
  71. package/dist/src/workflow-registry.d.ts +11 -0
  72. package/dist/src/workflow-registry.d.ts.map +1 -0
  73. package/dist/src/workflow-registry.js +26 -0
  74. package/dist/src/workflow-registry.js.map +1 -0
  75. package/dist/src/workflow-types.d.ts +45 -0
  76. package/dist/src/workflow-types.d.ts.map +1 -0
  77. package/dist/src/workflow-types.js +2 -0
  78. package/dist/src/workflow-types.js.map +1 -0
  79. package/package.json +61 -0
  80. package/src/agent-registry.ts +60 -0
  81. package/src/agent.ts +428 -0
  82. package/src/agents/execution.ts +53 -0
  83. package/src/agents/planning.ts +67 -0
  84. package/src/event-transformer.ts +189 -0
  85. package/src/file-manager.ts +204 -0
  86. package/src/git-manager.ts +344 -0
  87. package/src/posthog-api.ts +169 -0
  88. package/src/prompt-builder.ts +93 -0
  89. package/src/stage-executor.ts +137 -0
  90. package/src/task-manager.ts +155 -0
  91. package/src/template-manager.ts +149 -0
  92. package/src/templates/plan-template.md +45 -0
  93. package/src/types.ts +223 -0
  94. package/src/utils/logger.ts +79 -0
  95. package/src/utils/mcp.ts +15 -0
  96. package/src/workflow-registry.ts +31 -0
  97. package/src/workflow-types.ts +53 -0
@@ -0,0 +1,278 @@
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { Logger } from './utils/logger';
4
+ const execAsync = promisify(exec);
5
+ export class GitManager {
6
+ repositoryPath;
7
+ authorName;
8
+ authorEmail;
9
+ logger;
10
+ constructor(config) {
11
+ this.repositoryPath = config.repositoryPath;
12
+ this.authorName = config.authorName;
13
+ this.authorEmail = config.authorEmail;
14
+ this.logger = config.logger || new Logger({ debug: false, prefix: '[GitManager]' });
15
+ }
16
+ async runGitCommand(command) {
17
+ try {
18
+ const { stdout } = await execAsync(`cd "${this.repositoryPath}" && git ${command}`);
19
+ return stdout.trim();
20
+ }
21
+ catch (error) {
22
+ throw new Error(`Git command failed: ${command}\n${error}`);
23
+ }
24
+ }
25
+ async runCommand(command) {
26
+ try {
27
+ const { stdout } = await execAsync(`cd "${this.repositoryPath}" && ${command}`);
28
+ return stdout.trim();
29
+ }
30
+ catch (error) {
31
+ throw new Error(`Command failed: ${command}\n${error}`);
32
+ }
33
+ }
34
+ async isGitRepository() {
35
+ try {
36
+ await this.runGitCommand('rev-parse --git-dir');
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ async getCurrentBranch() {
44
+ return await this.runGitCommand('branch --show-current');
45
+ }
46
+ async getDefaultBranch() {
47
+ try {
48
+ // Try to get the default branch from remote
49
+ const remoteBranch = await this.runGitCommand('symbolic-ref refs/remotes/origin/HEAD');
50
+ return remoteBranch.replace('refs/remotes/origin/', '');
51
+ }
52
+ catch {
53
+ // Fallback: check if main exists, otherwise use master
54
+ if (await this.branchExists('main')) {
55
+ return 'main';
56
+ }
57
+ else if (await this.branchExists('master')) {
58
+ return 'master';
59
+ }
60
+ else {
61
+ throw new Error('Cannot determine default branch. No main or master branch found.');
62
+ }
63
+ }
64
+ }
65
+ async branchExists(branchName) {
66
+ try {
67
+ await this.runGitCommand(`rev-parse --verify ${branchName}`);
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ async createBranch(branchName, baseBranch) {
75
+ const base = baseBranch || await this.getCurrentBranch();
76
+ await this.runGitCommand(`checkout -b ${branchName} ${base}`);
77
+ }
78
+ async switchToBranch(branchName) {
79
+ await this.runGitCommand(`checkout ${branchName}`);
80
+ }
81
+ async createOrSwitchToBranch(branchName, baseBranch) {
82
+ const exists = await this.branchExists(branchName);
83
+ if (exists) {
84
+ await this.switchToBranch(branchName);
85
+ }
86
+ else {
87
+ await this.createBranch(branchName, baseBranch);
88
+ }
89
+ }
90
+ async addFiles(paths) {
91
+ const pathList = paths.map(p => `"${p}"`).join(' ');
92
+ await this.runGitCommand(`add ${pathList}`);
93
+ }
94
+ async addAllPostHogFiles() {
95
+ await this.runGitCommand('add .posthog/');
96
+ }
97
+ async commitChanges(message, options) {
98
+ let command = 'commit -m "' + message.replace(/"/g, '\\"') + '"';
99
+ const authorName = options?.authorName || this.authorName;
100
+ const authorEmail = options?.authorEmail || this.authorEmail;
101
+ if (authorName && authorEmail) {
102
+ command += ` --author="${authorName} <${authorEmail}>"`;
103
+ }
104
+ return await this.runGitCommand(command);
105
+ }
106
+ async hasChanges() {
107
+ try {
108
+ const status = await this.runGitCommand('status --porcelain');
109
+ return status.length > 0;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ async hasStagedChanges() {
116
+ try {
117
+ const status = await this.runGitCommand('diff --cached --name-only');
118
+ return status.length > 0;
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
124
+ async getRemoteUrl() {
125
+ try {
126
+ return await this.runGitCommand('remote get-url origin');
127
+ }
128
+ catch {
129
+ return null;
130
+ }
131
+ }
132
+ async pushBranch(branchName, force = false) {
133
+ const forceFlag = force ? '--force' : '';
134
+ await this.runGitCommand(`push ${forceFlag} -u origin ${branchName}`);
135
+ }
136
+ // Utility methods for PostHog task workflow
137
+ async createTaskPlanningBranch(taskId, baseBranch) {
138
+ let branchName = `posthog/task-${taskId}-planning`;
139
+ let counter = 1;
140
+ // Find a unique branch name if the base name already exists
141
+ while (await this.branchExists(branchName)) {
142
+ branchName = `posthog/task-${taskId}-planning-${counter}`;
143
+ counter++;
144
+ }
145
+ this.logger.debug('Creating unique planning branch', { branchName, taskId });
146
+ // If no base branch specified, ensure we're on main/master
147
+ if (!baseBranch) {
148
+ baseBranch = await this.getDefaultBranch();
149
+ await this.switchToBranch(baseBranch);
150
+ // Check for uncommitted changes
151
+ if (await this.hasChanges()) {
152
+ throw new Error(`Uncommitted changes detected. Please commit or stash changes before running tasks.`);
153
+ }
154
+ }
155
+ await this.createBranch(branchName, baseBranch); // Use createBranch instead of createOrSwitchToBranch for new branches
156
+ return branchName;
157
+ }
158
+ async createTaskImplementationBranch(taskId, planningBranchName) {
159
+ let branchName = `posthog/task-${taskId}-implementation`;
160
+ let counter = 1;
161
+ // Find a unique branch name if the base name already exists
162
+ while (await this.branchExists(branchName)) {
163
+ branchName = `posthog/task-${taskId}-implementation-${counter}`;
164
+ counter++;
165
+ }
166
+ const currentBranchBefore = await this.getCurrentBranch();
167
+ this.logger.debug('Creating unique implementation branch', {
168
+ branchName,
169
+ taskId,
170
+ currentBranch: currentBranchBefore
171
+ });
172
+ // Implementation branch should branch from the specific planning branch
173
+ let baseBranch = planningBranchName;
174
+ if (!baseBranch) {
175
+ // Try to find the corresponding planning branch
176
+ const currentBranch = await this.getCurrentBranch();
177
+ if (currentBranch.includes('-planning')) {
178
+ baseBranch = currentBranch; // Use current planning branch
179
+ this.logger.debug('Using current planning branch', { baseBranch });
180
+ }
181
+ else {
182
+ // Fallback to default branch
183
+ baseBranch = await this.getDefaultBranch();
184
+ this.logger.debug('No planning branch found, using default', { baseBranch });
185
+ await this.switchToBranch(baseBranch);
186
+ }
187
+ }
188
+ this.logger.debug('Creating implementation branch from base', { baseBranch, branchName });
189
+ await this.createBranch(branchName, baseBranch); // Create fresh branch from base
190
+ const currentBranchAfter = await this.getCurrentBranch();
191
+ this.logger.info('Implementation branch created', {
192
+ branchName,
193
+ currentBranch: currentBranchAfter
194
+ });
195
+ return branchName;
196
+ }
197
+ async commitPlan(taskId, taskTitle) {
198
+ const currentBranch = await this.getCurrentBranch();
199
+ this.logger.debug('Committing plan', { taskId, currentBranch });
200
+ await this.addAllPostHogFiles();
201
+ const hasChanges = await this.hasStagedChanges();
202
+ this.logger.debug('Checking for staged changes', { hasChanges });
203
+ if (!hasChanges) {
204
+ this.logger.info('No plan changes to commit', { taskId });
205
+ return 'No changes to commit';
206
+ }
207
+ const message = `📋 Add plan for task: ${taskTitle}
208
+
209
+ Task ID: ${taskId}
210
+ Generated by PostHog Agent
211
+
212
+ This commit contains the implementation plan and supporting documentation
213
+ for the task. Review the plan before proceeding with implementation.`;
214
+ const result = await this.commitChanges(message);
215
+ this.logger.info('Plan committed', { taskId, taskTitle });
216
+ return result;
217
+ }
218
+ async commitImplementation(taskId, taskTitle, planSummary) {
219
+ await this.runGitCommand('add .');
220
+ const hasChanges = await this.hasStagedChanges();
221
+ if (!hasChanges) {
222
+ this.logger.warn('No implementation changes to commit', { taskId });
223
+ return 'No changes to commit';
224
+ }
225
+ let message = `✨ Implement task: ${taskTitle}
226
+
227
+ Task ID: ${taskId}
228
+ Generated by PostHog Agent`;
229
+ if (planSummary) {
230
+ message += `\n\nPlan Summary:\n${planSummary}`;
231
+ }
232
+ message += `\n\nThis commit implements the changes described in the task plan.`;
233
+ const result = await this.commitChanges(message);
234
+ this.logger.info('Implementation committed', { taskId, taskTitle });
235
+ return result;
236
+ }
237
+ async deleteBranch(branchName, force = false) {
238
+ const forceFlag = force ? '-D' : '-d';
239
+ await this.runGitCommand(`branch ${forceFlag} ${branchName}`);
240
+ }
241
+ async deleteRemoteBranch(branchName) {
242
+ await this.runGitCommand(`push origin --delete ${branchName}`);
243
+ }
244
+ async getBranchInfo(branchName) {
245
+ const exists = await this.branchExists(branchName);
246
+ const currentBranch = await this.getCurrentBranch();
247
+ return {
248
+ name: branchName,
249
+ exists,
250
+ isCurrentBranch: branchName === currentBranch
251
+ };
252
+ }
253
+ async getCommitSha(ref = 'HEAD') {
254
+ return await this.runGitCommand(`rev-parse ${ref}`);
255
+ }
256
+ async getCommitMessage(ref = 'HEAD') {
257
+ return await this.runGitCommand(`log -1 --pretty=%B ${ref}`);
258
+ }
259
+ async createPullRequest(branchName, title, body, baseBranch) {
260
+ const currentBranch = await this.getCurrentBranch();
261
+ if (currentBranch !== branchName) {
262
+ await this.switchToBranch(branchName);
263
+ }
264
+ await this.pushBranch(branchName);
265
+ let command = `gh pr create --title "${title.replace(/"/g, '\\"')}" --body "${body.replace(/"/g, '\\"')}"`;
266
+ if (baseBranch) {
267
+ command += ` --base ${baseBranch}`;
268
+ }
269
+ try {
270
+ const prUrl = await this.runCommand(command);
271
+ return prUrl.trim();
272
+ }
273
+ catch (error) {
274
+ throw new Error(`Failed to create PR: ${error}`);
275
+ }
276
+ }
277
+ }
278
+ //# sourceMappingURL=git-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-manager.js","sourceRoot":"","sources":["../../src/git-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Task, PostHogAPIConfig } from './types';
2
+ import type { WorkflowDefinition, AgentDefinition } from './workflow-types';
3
+ interface TaskProgressResponse {
4
+ has_progress: boolean;
5
+ id?: string;
6
+ status?: "started" | "in_progress" | "completed" | "failed";
7
+ current_step?: string;
8
+ completed_steps?: number;
9
+ total_steps?: number;
10
+ progress_percentage?: number;
11
+ output_log?: string;
12
+ error_message?: string;
13
+ created_at?: string;
14
+ updated_at?: string;
15
+ completed_at?: string;
16
+ workflow_id?: string;
17
+ workflow_run_id?: string;
18
+ message?: string;
19
+ }
20
+ export declare class PostHogAPIClient {
21
+ private config;
22
+ private _teamId;
23
+ constructor(config: PostHogAPIConfig);
24
+ private get baseUrl();
25
+ private get headers();
26
+ private apiRequest;
27
+ private getTeamId;
28
+ fetchTask(taskId: string): Promise<Task>;
29
+ listTasks(filters?: {
30
+ repository?: string;
31
+ organization?: string;
32
+ origin_product?: string;
33
+ workflow?: string;
34
+ current_stage?: string;
35
+ }): Promise<Task[]>;
36
+ updateTask(taskId: string, updates: Partial<Task>): Promise<Task>;
37
+ updateTaskStage(taskId: string, stageId: string): Promise<Task>;
38
+ getTaskProgress(taskId: string): Promise<TaskProgressResponse>;
39
+ fetchWorkflow(workflowId: string): Promise<WorkflowDefinition>;
40
+ listWorkflows(): Promise<WorkflowDefinition[]>;
41
+ listAgents(): Promise<AgentDefinition[]>;
42
+ progressTask(taskId: string, options?: {
43
+ next_stage_id?: string;
44
+ auto?: boolean;
45
+ }): Promise<Task>;
46
+ }
47
+ export {};
48
+ //# sourceMappingURL=posthog-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog-api.d.ts","sourceRoot":"","sources":["../../src/posthog-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAkB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAS5E,UAAU,oBAAoB;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAuB;gBAE1B,MAAM,EAAE,gBAAgB;IAIpC,OAAO,KAAK,OAAO,GAKlB;IAED,OAAO,KAAK,OAAO,GAKlB;YAEa,UAAU;YA4BV,SAAS;IAiBjB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,SAAS,CAAC,OAAO,CAAC,EAAE;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAiBb,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAM9D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAK9D,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAO9C,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAOxG"}
@@ -0,0 +1,110 @@
1
+ export class PostHogAPIClient {
2
+ config;
3
+ _teamId = null;
4
+ constructor(config) {
5
+ this.config = config;
6
+ }
7
+ get baseUrl() {
8
+ const host = this.config.apiUrl.endsWith("/")
9
+ ? this.config.apiUrl.slice(0, -1)
10
+ : this.config.apiUrl;
11
+ return host;
12
+ }
13
+ get headers() {
14
+ return {
15
+ 'Authorization': `Bearer ${this.config.apiKey}`,
16
+ 'Content-Type': 'application/json',
17
+ };
18
+ }
19
+ async apiRequest(endpoint, options = {}) {
20
+ const url = `${this.baseUrl}${endpoint}`;
21
+ const response = await fetch(url, {
22
+ ...options,
23
+ headers: {
24
+ ...this.headers,
25
+ ...options.headers,
26
+ },
27
+ });
28
+ if (!response.ok) {
29
+ let errorMessage;
30
+ try {
31
+ const errorResponse = await response.json();
32
+ errorMessage = `Failed request: [${response.status}] ${JSON.stringify(errorResponse)}`;
33
+ }
34
+ catch {
35
+ errorMessage = `Failed request: [${response.status}] ${response.statusText}`;
36
+ }
37
+ throw new Error(errorMessage);
38
+ }
39
+ return response.json();
40
+ }
41
+ async getTeamId() {
42
+ if (this._teamId !== null) {
43
+ return this._teamId;
44
+ }
45
+ // Fetch user info to get team ID (following Array's pattern)
46
+ const userResponse = await this.apiRequest('/api/users/@me/');
47
+ if (!userResponse.team?.id) {
48
+ throw new Error('No team found for user');
49
+ }
50
+ const teamId = Number(userResponse.team.id);
51
+ this._teamId = teamId;
52
+ return teamId;
53
+ }
54
+ async fetchTask(taskId) {
55
+ const teamId = await this.getTeamId();
56
+ return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/`);
57
+ }
58
+ async listTasks(filters) {
59
+ const teamId = await this.getTeamId();
60
+ const url = new URL(`${this.baseUrl}/api/projects/${teamId}/tasks/`);
61
+ if (filters) {
62
+ Object.entries(filters).forEach(([key, value]) => {
63
+ if (value)
64
+ url.searchParams.append(key, value);
65
+ });
66
+ }
67
+ const response = await this.apiRequest(url.pathname + url.search);
68
+ return response.results || [];
69
+ }
70
+ async updateTask(taskId, updates) {
71
+ const teamId = await this.getTeamId();
72
+ return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/`, {
73
+ method: 'PATCH',
74
+ body: JSON.stringify(updates),
75
+ });
76
+ }
77
+ async updateTaskStage(taskId, stageId) {
78
+ const teamId = await this.getTeamId();
79
+ return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/update_stage/`, {
80
+ method: 'PATCH',
81
+ body: JSON.stringify({ current_stage: stageId }),
82
+ });
83
+ }
84
+ async getTaskProgress(taskId) {
85
+ const teamId = await this.getTeamId();
86
+ return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/progress/`);
87
+ }
88
+ // Workflow endpoints
89
+ async fetchWorkflow(workflowId) {
90
+ const teamId = await this.getTeamId();
91
+ return this.apiRequest(`/api/projects/${teamId}/task_workflows/${workflowId}/`);
92
+ }
93
+ async listWorkflows() {
94
+ const teamId = await this.getTeamId();
95
+ const response = await this.apiRequest(`/api/projects/${teamId}/task_workflows/`);
96
+ return response.results || [];
97
+ }
98
+ // Agent catalog exposure
99
+ async listAgents() {
100
+ return this.apiRequest(`/api/agents/`);
101
+ }
102
+ async progressTask(taskId, options) {
103
+ const teamId = await this.getTeamId();
104
+ return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/progress_task/`, {
105
+ method: 'POST',
106
+ body: JSON.stringify(options || {}),
107
+ });
108
+ }
109
+ }
110
+ //# sourceMappingURL=posthog-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog-api.js","sourceRoot":"","sources":["../../src/posthog-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Task } from './types';
2
+ import type { TemplateVariables } from './template-manager';
3
+ import { Logger } from './utils/logger';
4
+ export interface PromptBuilderDeps {
5
+ getTaskFiles: (taskId: string) => Promise<any[]>;
6
+ generatePlanTemplate: (vars: TemplateVariables) => Promise<string>;
7
+ logger?: Logger;
8
+ }
9
+ export declare class PromptBuilder {
10
+ private getTaskFiles;
11
+ private generatePlanTemplate;
12
+ private logger;
13
+ constructor(deps: PromptBuilderDeps);
14
+ buildPlanningPrompt(task: Task): Promise<string>;
15
+ buildExecutionPrompt(task: Task): Promise<string>;
16
+ }
17
+ //# sourceMappingURL=prompt-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,oBAAoB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,iBAAiB;IAM7B,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAoChD,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAgCxD"}
@@ -0,0 +1,75 @@
1
+ import { Logger } from './utils/logger';
2
+ export class PromptBuilder {
3
+ getTaskFiles;
4
+ generatePlanTemplate;
5
+ logger;
6
+ constructor(deps) {
7
+ this.getTaskFiles = deps.getTaskFiles;
8
+ this.generatePlanTemplate = deps.generatePlanTemplate;
9
+ this.logger = deps.logger || new Logger({ debug: false, prefix: '[PromptBuilder]' });
10
+ }
11
+ async buildPlanningPrompt(task) {
12
+ let prompt = '';
13
+ prompt += `## Current Task\n\n**Task**: ${task.title}\n**Description**: ${task.description}`;
14
+ if (task.primary_repository) {
15
+ prompt += `\n**Repository**: ${task.primary_repository}`;
16
+ }
17
+ try {
18
+ const taskFiles = await this.getTaskFiles(task.id);
19
+ const contextFiles = taskFiles.filter((f) => f.type === 'context' || f.type === 'reference');
20
+ if (contextFiles.length > 0) {
21
+ prompt += `\n\n## Supporting Files`;
22
+ for (const file of contextFiles) {
23
+ prompt += `\n\n### ${file.name} (${file.type})\n${file.content}`;
24
+ }
25
+ }
26
+ }
27
+ catch (error) {
28
+ this.logger.debug('No existing task files found for planning', { taskId: task.id });
29
+ }
30
+ const templateVariables = {
31
+ task_id: task.id,
32
+ task_title: task.title,
33
+ task_description: task.description,
34
+ date: new Date().toISOString().split('T')[0],
35
+ repository: (task.primary_repository || ''),
36
+ };
37
+ const planTemplate = await this.generatePlanTemplate(templateVariables);
38
+ prompt += `\n\nPlease analyze the codebase and create a detailed implementation plan for this task. Use the following template structure for your plan:\n\n${planTemplate}\n\nFill in each section with specific, actionable information based on your analysis. Replace all placeholder content with actual details about this task.`;
39
+ return prompt;
40
+ }
41
+ async buildExecutionPrompt(task) {
42
+ let prompt = '';
43
+ prompt += `## Current Task\n\n**Task**: ${task.title}\n**Description**: ${task.description}`;
44
+ if (task.primary_repository) {
45
+ prompt += `\n**Repository**: ${task.primary_repository}`;
46
+ }
47
+ try {
48
+ const taskFiles = await this.getTaskFiles(task.id);
49
+ const hasPlan = taskFiles.some((f) => f.type === 'plan');
50
+ if (taskFiles.length > 0) {
51
+ prompt += `\n\n## Context and Supporting Information`;
52
+ for (const file of taskFiles) {
53
+ if (file.type === 'plan') {
54
+ prompt += `\n\n### Execution Plan\n${file.content}`;
55
+ }
56
+ else {
57
+ prompt += `\n\n### ${file.name} (${file.type})\n${file.content}`;
58
+ }
59
+ }
60
+ }
61
+ if (hasPlan) {
62
+ prompt += `\n\nPlease implement the changes described in the execution plan above. Follow the plan step-by-step and make the necessary file modifications. You must actually edit files and make changes - do not just analyze or review.`;
63
+ }
64
+ else {
65
+ prompt += `\n\nPlease implement the changes described in the task above. You must actually edit files and make changes - do not just analyze or review.`;
66
+ }
67
+ }
68
+ catch (error) {
69
+ this.logger.debug('No supporting files found for execution', { taskId: task.id });
70
+ prompt += `\n\nPlease implement the changes described in the task above.`;
71
+ }
72
+ return prompt;
73
+ }
74
+ }
75
+ //# sourceMappingURL=prompt-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Logger } from './utils/logger';
2
+ import { AgentRegistry } from './agent-registry';
3
+ import type { Task } from './types';
4
+ import type { WorkflowStage, WorkflowStageExecutionResult, WorkflowExecutionOptions } from './workflow-types';
5
+ import { PromptBuilder } from './prompt-builder';
6
+ export declare class StageExecutor {
7
+ private registry;
8
+ private logger;
9
+ private eventTransformer;
10
+ private promptBuilder;
11
+ constructor(registry: AgentRegistry, logger: Logger, promptBuilder?: PromptBuilder);
12
+ execute(task: Task, stage: WorkflowStage, options: WorkflowExecutionOptions): Promise<WorkflowStageExecutionResult>;
13
+ private runPlanning;
14
+ private runExecution;
15
+ }
16
+ //# sourceMappingURL=stage-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-executor.d.ts","sourceRoot":"","sources":["../../src/stage-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG9G,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAgB;gBAEzB,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;IAW5E,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,4BAA4B,CAAC;YA+B3G,WAAW;YAyCX,YAAY;CAkC3B"}