@posthog/agent 1.9.0 → 1.11.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 +8 -5
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/src/agent-registry.d.ts.map +1 -1
- package/dist/src/agent-registry.js +6 -0
- package/dist/src/agent-registry.js.map +1 -1
- package/dist/src/agent.d.ts +5 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +370 -29
- package/dist/src/agent.js.map +1 -1
- package/dist/src/agents/research.d.ts +2 -0
- package/dist/src/agents/research.d.ts.map +1 -0
- package/dist/src/agents/research.js +105 -0
- package/dist/src/agents/research.js.map +1 -0
- package/dist/src/file-manager.d.ts +19 -0
- package/dist/src/file-manager.d.ts.map +1 -1
- package/dist/src/file-manager.js +39 -0
- package/dist/src/file-manager.js.map +1 -1
- package/dist/src/git-manager.d.ts +4 -0
- package/dist/src/git-manager.d.ts.map +1 -1
- package/dist/src/git-manager.js +41 -0
- package/dist/src/git-manager.js.map +1 -1
- package/dist/src/posthog-api.d.ts +16 -57
- package/dist/src/posthog-api.d.ts.map +1 -1
- package/dist/src/posthog-api.js +38 -38
- package/dist/src/posthog-api.js.map +1 -1
- package/dist/src/prompt-builder.d.ts +1 -0
- package/dist/src/prompt-builder.d.ts.map +1 -1
- package/dist/src/prompt-builder.js +40 -0
- package/dist/src/prompt-builder.js.map +1 -1
- package/dist/src/stage-executor.d.ts +1 -0
- package/dist/src/stage-executor.d.ts.map +1 -1
- package/dist/src/stage-executor.js +43 -0
- package/dist/src/stage-executor.js.map +1 -1
- package/dist/src/structured-extraction.d.ts +22 -0
- package/dist/src/structured-extraction.d.ts.map +1 -0
- package/dist/src/structured-extraction.js +136 -0
- package/dist/src/structured-extraction.js.map +1 -0
- package/dist/src/task-progress-reporter.d.ts +2 -5
- package/dist/src/task-progress-reporter.d.ts.map +1 -1
- package/dist/src/task-progress-reporter.js +37 -39
- package/dist/src/task-progress-reporter.js.map +1 -1
- package/dist/src/types.d.ts +31 -3
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/workflow-types.d.ts +1 -1
- package/dist/src/workflow-types.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/agent-registry.ts +6 -0
- package/src/agent.ts +409 -26
- package/src/agents/research.ts +103 -0
- package/src/file-manager.ts +64 -0
- package/src/git-manager.ts +52 -0
- package/src/posthog-api.ts +57 -92
- package/src/prompt-builder.ts +53 -0
- package/src/stage-executor.ts +50 -0
- package/src/structured-extraction.ts +167 -0
- package/src/task-progress-reporter.ts +38 -44
- package/src/types.ts +39 -3
- package/src/workflow-types.ts +1 -1
package/dist/src/git-manager.js
CHANGED
|
@@ -275,6 +275,47 @@ Generated by PostHog Agent`;
|
|
|
275
275
|
throw new Error(`Failed to create PR: ${error}`);
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
|
+
async getTaskBranch(taskSlug) {
|
|
279
|
+
try {
|
|
280
|
+
// Get all branches matching the task slug pattern
|
|
281
|
+
const branches = await this.runGitCommand('branch --list --all');
|
|
282
|
+
const branchPattern = `posthog/task-${taskSlug}`;
|
|
283
|
+
// Look for exact match or with counter suffix
|
|
284
|
+
const lines = branches.split('\n').map(l => l.trim().replace(/^\*\s+/, ''));
|
|
285
|
+
for (const line of lines) {
|
|
286
|
+
const cleanBranch = line.replace('remotes/origin/', '');
|
|
287
|
+
if (cleanBranch.startsWith(branchPattern)) {
|
|
288
|
+
return cleanBranch;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
this.logger.debug('Failed to get task branch', { taskSlug, error });
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
async commitAndPush(message, options) {
|
|
299
|
+
const hasChanges = await this.hasStagedChanges();
|
|
300
|
+
if (!hasChanges && !options?.allowEmpty) {
|
|
301
|
+
this.logger.debug('No changes to commit, skipping');
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
let command = `commit -m "${message.replace(/"/g, '\\"')}"`;
|
|
305
|
+
if (options?.allowEmpty) {
|
|
306
|
+
command += ' --allow-empty';
|
|
307
|
+
}
|
|
308
|
+
const authorName = this.authorName;
|
|
309
|
+
const authorEmail = this.authorEmail;
|
|
310
|
+
if (authorName && authorEmail) {
|
|
311
|
+
command += ` --author="${authorName} <${authorEmail}>"`;
|
|
312
|
+
}
|
|
313
|
+
await this.runGitCommand(command);
|
|
314
|
+
// Push to origin
|
|
315
|
+
const currentBranch = await this.getCurrentBranch();
|
|
316
|
+
await this.pushBranch(currentBranch);
|
|
317
|
+
this.logger.info('Committed and pushed changes', { branch: currentBranch, message });
|
|
318
|
+
}
|
|
278
319
|
}
|
|
279
320
|
|
|
280
321
|
export { GitManager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-manager.js","sources":["../../src/git-manager.ts"],"sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { Logger } from './utils/logger.js';\n\nconst execAsync = promisify(exec);\n\nexport interface GitConfig {\n repositoryPath: string;\n authorName?: string;\n authorEmail?: string;\n logger?: Logger;\n}\n\nexport interface BranchInfo {\n name: string;\n exists: boolean;\n isCurrentBranch: boolean;\n}\n\nexport class GitManager {\n private repositoryPath: string;\n private authorName?: string;\n private authorEmail?: string;\n private logger: Logger;\n\n constructor(config: GitConfig) {\n this.repositoryPath = config.repositoryPath;\n this.authorName = config.authorName;\n this.authorEmail = config.authorEmail;\n this.logger = config.logger || new Logger({ debug: false, prefix: '[GitManager]' });\n }\n\n private async runGitCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && git ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Git command failed: ${command}\\n${error}`);\n }\n }\n\n private async runCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Command failed: ${command}\\n${error}`);\n }\n }\n\n async isGitRepository(): Promise<boolean> {\n try {\n await this.runGitCommand('rev-parse --git-dir');\n return true;\n } catch {\n return false;\n }\n }\n\n async getCurrentBranch(): Promise<string> {\n return await this.runGitCommand('branch --show-current');\n }\n\n async getDefaultBranch(): Promise<string> {\n try {\n // Try to get the default branch from remote\n const remoteBranch = await this.runGitCommand('symbolic-ref refs/remotes/origin/HEAD');\n return remoteBranch.replace('refs/remotes/origin/', '');\n } catch {\n // Fallback: check if main exists, otherwise use master\n if (await this.branchExists('main')) {\n return 'main';\n } else if (await this.branchExists('master')) {\n return 'master';\n } else {\n throw new Error('Cannot determine default branch. No main or master branch found.');\n }\n }\n }\n\n async branchExists(branchName: string): Promise<boolean> {\n try {\n await this.runGitCommand(`rev-parse --verify ${branchName}`);\n return true;\n } catch {\n return false;\n }\n }\n\n async createBranch(branchName: string, baseBranch?: string): Promise<void> {\n const base = baseBranch || await this.getCurrentBranch();\n await this.runGitCommand(`checkout -b ${branchName} ${base}`);\n }\n\n async switchToBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`checkout ${branchName}`);\n }\n\n async createOrSwitchToBranch(branchName: string, baseBranch?: string): Promise<void> {\n const exists = await this.branchExists(branchName);\n if (exists) {\n await this.switchToBranch(branchName);\n } else {\n await this.createBranch(branchName, baseBranch);\n }\n }\n\n async addFiles(paths: string[]): Promise<void> {\n const pathList = paths.map(p => `\"${p}\"`).join(' ');\n await this.runGitCommand(`add ${pathList}`);\n }\n\n async addAllPostHogFiles(): Promise<void> {\n await this.runGitCommand('add .posthog/');\n }\n\n async commitChanges(message: string, options?: {\n authorName?: string;\n authorEmail?: string;\n }): Promise<string> {\n let command = 'commit -m \"' + message.replace(/\"/g, '\\\\\"') + '\"';\n\n const authorName = options?.authorName || this.authorName;\n const authorEmail = options?.authorEmail || this.authorEmail;\n\n if (authorName && authorEmail) {\n command += ` --author=\"${authorName} <${authorEmail}>\"`;\n }\n\n return await this.runGitCommand(command);\n }\n\n async hasChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('status --porcelain');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async hasStagedChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('diff --cached --name-only');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async getRemoteUrl(): Promise<string | null> {\n try {\n return await this.runGitCommand('remote get-url origin');\n } catch {\n return null;\n }\n }\n\n async pushBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '--force' : '';\n await this.runGitCommand(`push ${forceFlag} -u origin ${branchName}`);\n }\n\n // Utility methods for PostHog task workflow\n async createTaskPlanningBranch(taskId: string, baseBranch?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-planning`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-planning-${counter}`;\n counter++;\n }\n\n this.logger.debug('Creating unique planning branch', { branchName, taskId });\n\n // If no base branch specified, ensure we're on main/master\n if (!baseBranch) {\n baseBranch = await this.getDefaultBranch();\n await this.switchToBranch(baseBranch);\n\n // Check for uncommitted changes\n if (await this.hasChanges()) {\n throw new Error(`Uncommitted changes detected. Please commit or stash changes before running tasks.`);\n }\n }\n\n await this.createBranch(branchName, baseBranch); // Use createBranch instead of createOrSwitchToBranch for new branches\n return branchName;\n }\n\n async createTaskImplementationBranch(taskId: string, planningBranchName?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-implementation`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-implementation-${counter}`;\n counter++;\n }\n\n const currentBranchBefore = await this.getCurrentBranch();\n this.logger.debug('Creating unique implementation branch', {\n branchName,\n taskId,\n currentBranch: currentBranchBefore\n });\n\n // Implementation branch should branch from the specific planning branch\n let baseBranch = planningBranchName;\n\n if (!baseBranch) {\n // Try to find the corresponding planning branch\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch.includes('-planning')) {\n baseBranch = currentBranch; // Use current planning branch\n this.logger.debug('Using current planning branch', { baseBranch });\n } else {\n // Fallback to default branch\n baseBranch = await this.getDefaultBranch();\n this.logger.debug('No planning branch found, using default', { baseBranch });\n await this.switchToBranch(baseBranch);\n }\n }\n\n this.logger.debug('Creating implementation branch from base', { baseBranch, branchName });\n await this.createBranch(branchName, baseBranch); // Create fresh branch from base\n\n const currentBranchAfter = await this.getCurrentBranch();\n this.logger.info('Implementation branch created', {\n branchName,\n currentBranch: currentBranchAfter\n });\n\n return branchName;\n }\n\n async commitPlan(taskId: string, taskTitle: string): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n this.logger.debug('Committing plan', { taskId, currentBranch });\n\n await this.addAllPostHogFiles();\n\n const hasChanges = await this.hasStagedChanges();\n this.logger.debug('Checking for staged changes', { hasChanges });\n\n if (!hasChanges) {\n this.logger.info('No plan changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n const message = `📋 Add plan for task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent\n\nThis commit contains the implementation plan and supporting documentation\nfor the task. Review the plan before proceeding with implementation.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Plan committed', { taskId, taskTitle });\n return result;\n }\n\n async commitImplementation(taskId: string, taskTitle: string, planSummary?: string): Promise<string> {\n await this.runGitCommand('add .');\n\n const hasChanges = await this.hasStagedChanges();\n if (!hasChanges) {\n this.logger.warn('No implementation changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n let message = `✨ Implement task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent`;\n\n if (planSummary) {\n message += `\\n\\nPlan Summary:\\n${planSummary}`;\n }\n\n message += `\\n\\nThis commit implements the changes described in the task plan.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Implementation committed', { taskId, taskTitle });\n return result;\n }\n\n async deleteBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '-D' : '-d';\n await this.runGitCommand(`branch ${forceFlag} ${branchName}`);\n }\n\n async deleteRemoteBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`push origin --delete ${branchName}`);\n }\n\n async getBranchInfo(branchName: string): Promise<BranchInfo> {\n const exists = await this.branchExists(branchName);\n const currentBranch = await this.getCurrentBranch();\n\n return {\n name: branchName,\n exists,\n isCurrentBranch: branchName === currentBranch\n };\n }\n\n async getCommitSha(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`rev-parse ${ref}`);\n }\n\n async getCommitMessage(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`log -1 --pretty=%B ${ref}`);\n }\n\n async createPullRequest(\n branchName: string,\n title: string,\n body: string,\n baseBranch?: string\n ): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch !== branchName) {\n await this.switchToBranch(branchName);\n }\n\n await this.pushBranch(branchName);\n\n let command = `gh pr create --title \"${title.replace(/\"/g, '\\\\\"')}\" --body \"${body.replace(/\"/g, '\\\\\"')}\"`;\n\n if (baseBranch) {\n command += ` --base ${baseBranch}`;\n }\n\n try {\n const prUrl = await this.runCommand(command);\n return prUrl.trim();\n } catch (error) {\n throw new Error(`Failed to create PR: ${error}`);\n }\n }\n}\n"],"names":[],"mappings":";;;;AAIA,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;MAepB,UAAU,CAAA;AACb,IAAA,cAAc;AACd,IAAA,UAAU;AACV,IAAA,WAAW;AACX,IAAA,MAAM;AAEd,IAAA,WAAA,CAAY,MAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc;AAC3C,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACrF;IAEQ,MAAM,aAAa,CAAC,OAAe,EAAA;AACzC,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,cAAc,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,CAAC;AACnF,YAAA,OAAO,MAAM,CAAC,IAAI,EAAE;QACtB;QAAE,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,OAAO,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;QAC7D;IACF;IAEQ,MAAM,UAAU,CAAC,OAAe,EAAA;AACtC,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,cAAc,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAE,CAAC;AAC/E,YAAA,OAAO,MAAM,CAAC,IAAI,EAAE;QACtB;QAAE,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,CAAA,gBAAA,EAAmB,OAAO,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAC;QACzD;IACF;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC/C,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;IAC1D;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,IAAI;;YAEF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uCAAuC,CAAC;YACtF,OAAO,YAAY,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACzD;AAAE,QAAA,MAAM;;YAEN,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AACnC,gBAAA,OAAO,MAAM;YACf;iBAAO,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AAC5C,gBAAA,OAAO,QAAQ;YACjB;iBAAO;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC;YACrF;QACF;IACF;IAEA,MAAM,YAAY,CAAC,UAAkB,EAAA;AACnC,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,UAAU,CAAA,CAAE,CAAC;AAC5D,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,MAAM,YAAY,CAAC,UAAkB,EAAE,UAAmB,EAAA;QACxD,MAAM,IAAI,GAAG,UAAU,IAAI,MAAM,IAAI,CAAC,gBAAgB,EAAE;QACxD,MAAM,IAAI,CAAC,aAAa,CAAC,CAAA,YAAA,EAAe,UAAU,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;IAC/D;IAEA,MAAM,cAAc,CAAC,UAAkB,EAAA;QACrC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,UAAU,CAAA,CAAE,CAAC;IACpD;AAEA,IAAA,MAAM,sBAAsB,CAAC,UAAkB,EAAE,UAAmB,EAAA;QAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAClD,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;QACvC;aAAO;YACL,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC;QACjD;IACF;IAEA,MAAM,QAAQ,CAAC,KAAe,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACnD,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,QAAQ,CAAA,CAAE,CAAC;IAC7C;AAEA,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;IAC3C;AAEA,IAAA,MAAM,aAAa,CAAC,OAAe,EAAE,OAGpC,EAAA;AACC,QAAA,IAAI,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG;QAEhE,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU;QACzD,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW;AAE5D,QAAA,IAAI,UAAU,IAAI,WAAW,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAA,WAAA,EAAc,UAAU,CAAA,EAAA,EAAK,WAAW,IAAI;QACzD;AAEA,QAAA,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IAC1C;AAEA,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC;AAC7D,YAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;QAC1B;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC;AACpE,YAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;QAC1B;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;QAC1D;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,MAAM,UAAU,CAAC,UAAkB,EAAE,QAAiB,KAAK,EAAA;QACzD,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,EAAE;QACxC,MAAM,IAAI,CAAC,aAAa,CAAC,CAAA,KAAA,EAAQ,SAAS,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAC;IACvE;;AAGA,IAAA,MAAM,wBAAwB,CAAC,MAAc,EAAE,UAAmB,EAAA;AAChE,QAAA,IAAI,UAAU,GAAG,CAAA,aAAA,EAAgB,MAAM,WAAW;QAClD,IAAI,OAAO,GAAG,CAAC;;QAGf,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AAC1C,YAAA,UAAU,GAAG,CAAA,aAAA,EAAgB,MAAM,CAAA,UAAA,EAAa,OAAO,EAAE;AACzD,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;;QAG5E,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;AAC1C,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;;AAGrC,YAAA,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE;AAC3B,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kFAAA,CAAoF,CAAC;YACvG;QACF;QAEA,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAChD,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,MAAM,8BAA8B,CAAC,MAAc,EAAE,kBAA2B,EAAA;AAC9E,QAAA,IAAI,UAAU,GAAG,CAAA,aAAA,EAAgB,MAAM,iBAAiB;QACxD,IAAI,OAAO,GAAG,CAAC;;QAGf,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AAC1C,YAAA,UAAU,GAAG,CAAA,aAAA,EAAgB,MAAM,CAAA,gBAAA,EAAmB,OAAO,EAAE;AAC/D,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;YACzD,UAAU;YACV,MAAM;AACN,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;;QAGF,IAAI,UAAU,GAAG,kBAAkB;QAEnC,IAAI,CAAC,UAAU,EAAE;;AAEf,YAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;AACnD,YAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACvC,gBAAA,UAAU,GAAG,aAAa,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,UAAU,EAAE,CAAC;YACpE;iBAAO;;AAEL,gBAAA,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;gBAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,UAAU,EAAE,CAAC;AAC5E,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;YACvC;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;QACzF,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAEhD,QAAA,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;AACxD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;YAChD,UAAU;AACV,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;AAEF,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,MAAM,UAAU,CAAC,MAAc,EAAE,SAAiB,EAAA;AAChD,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;AACnD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAE/D,QAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AAE/B,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,UAAU,EAAE,CAAC;QAEhE,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,CAAC;AACzD,YAAA,OAAO,sBAAsB;QAC/B;QAEA,MAAM,OAAO,GAAG,CAAA,sBAAA,EAAyB,SAAS;;WAE3C,MAAM;;;;qEAIoD;QAEjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACzD,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,MAAM,oBAAoB,CAAC,MAAc,EAAE,SAAiB,EAAE,WAAoB,EAAA;AAChF,QAAA,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAEjC,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAChD,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,MAAM,EAAE,CAAC;AACnE,YAAA,OAAO,sBAAsB;QAC/B;QAEA,IAAI,OAAO,GAAG,CAAA,kBAAA,EAAqB,SAAS;;WAErC,MAAM;2BACU;QAEvB,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,IAAI,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAE;QAChD;QAEA,OAAO,IAAI,oEAAoE;QAE/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACnE,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,MAAM,YAAY,CAAC,UAAkB,EAAE,QAAiB,KAAK,EAAA;QAC3D,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI;QACrC,MAAM,IAAI,CAAC,aAAa,CAAC,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC;IAC/D;IAEA,MAAM,kBAAkB,CAAC,UAAkB,EAAA;QACzC,MAAM,IAAI,CAAC,aAAa,CAAC,wBAAwB,UAAU,CAAA,CAAE,CAAC;IAChE;IAEA,MAAM,aAAa,CAAC,UAAkB,EAAA;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAEnD,OAAO;AACL,YAAA,IAAI,EAAE,UAAU;YAChB,MAAM;YACN,eAAe,EAAE,UAAU,KAAK;SACjC;IACH;AAEA,IAAA,MAAM,YAAY,CAAC,GAAA,GAAc,MAAM,EAAA;QACrC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,CAAA,UAAA,EAAa,GAAG,CAAA,CAAE,CAAC;IACrD;AAEA,IAAA,MAAM,gBAAgB,CAAC,GAAA,GAAc,MAAM,EAAA;QACzC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,CAAA,mBAAA,EAAsB,GAAG,CAAA,CAAE,CAAC;IAC9D;IAEA,MAAM,iBAAiB,CACrB,UAAkB,EAClB,KAAa,EACb,IAAY,EACZ,UAAmB,EAAA;AAEnB,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;AACnD,QAAA,IAAI,aAAa,KAAK,UAAU,EAAE;AAChC,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;QACvC;AAEA,QAAA,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAEjC,IAAI,OAAO,GAAG,CAAA,sBAAA,EAAyB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA,CAAA,CAAG;QAE1G,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,IAAI,CAAA,QAAA,EAAW,UAAU,CAAA,CAAE;QACpC;AAEA,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC5C,YAAA,OAAO,KAAK,CAAC,IAAI,EAAE;QACrB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAA,CAAE,CAAC;QAClD;IACF;AACD;;;;"}
|
|
1
|
+
{"version":3,"file":"git-manager.js","sources":["../../src/git-manager.ts"],"sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { Logger } from './utils/logger.js';\n\nconst execAsync = promisify(exec);\n\nexport interface GitConfig {\n repositoryPath: string;\n authorName?: string;\n authorEmail?: string;\n logger?: Logger;\n}\n\nexport interface BranchInfo {\n name: string;\n exists: boolean;\n isCurrentBranch: boolean;\n}\n\nexport class GitManager {\n private repositoryPath: string;\n private authorName?: string;\n private authorEmail?: string;\n private logger: Logger;\n\n constructor(config: GitConfig) {\n this.repositoryPath = config.repositoryPath;\n this.authorName = config.authorName;\n this.authorEmail = config.authorEmail;\n this.logger = config.logger || new Logger({ debug: false, prefix: '[GitManager]' });\n }\n\n private async runGitCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && git ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Git command failed: ${command}\\n${error}`);\n }\n }\n\n private async runCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Command failed: ${command}\\n${error}`);\n }\n }\n\n async isGitRepository(): Promise<boolean> {\n try {\n await this.runGitCommand('rev-parse --git-dir');\n return true;\n } catch {\n return false;\n }\n }\n\n async getCurrentBranch(): Promise<string> {\n return await this.runGitCommand('branch --show-current');\n }\n\n async getDefaultBranch(): Promise<string> {\n try {\n // Try to get the default branch from remote\n const remoteBranch = await this.runGitCommand('symbolic-ref refs/remotes/origin/HEAD');\n return remoteBranch.replace('refs/remotes/origin/', '');\n } catch {\n // Fallback: check if main exists, otherwise use master\n if (await this.branchExists('main')) {\n return 'main';\n } else if (await this.branchExists('master')) {\n return 'master';\n } else {\n throw new Error('Cannot determine default branch. No main or master branch found.');\n }\n }\n }\n\n async branchExists(branchName: string): Promise<boolean> {\n try {\n await this.runGitCommand(`rev-parse --verify ${branchName}`);\n return true;\n } catch {\n return false;\n }\n }\n\n async createBranch(branchName: string, baseBranch?: string): Promise<void> {\n const base = baseBranch || await this.getCurrentBranch();\n await this.runGitCommand(`checkout -b ${branchName} ${base}`);\n }\n\n async switchToBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`checkout ${branchName}`);\n }\n\n async createOrSwitchToBranch(branchName: string, baseBranch?: string): Promise<void> {\n const exists = await this.branchExists(branchName);\n if (exists) {\n await this.switchToBranch(branchName);\n } else {\n await this.createBranch(branchName, baseBranch);\n }\n }\n\n async addFiles(paths: string[]): Promise<void> {\n const pathList = paths.map(p => `\"${p}\"`).join(' ');\n await this.runGitCommand(`add ${pathList}`);\n }\n\n async addAllPostHogFiles(): Promise<void> {\n await this.runGitCommand('add .posthog/');\n }\n\n async commitChanges(message: string, options?: {\n authorName?: string;\n authorEmail?: string;\n }): Promise<string> {\n let command = 'commit -m \"' + message.replace(/\"/g, '\\\\\"') + '\"';\n\n const authorName = options?.authorName || this.authorName;\n const authorEmail = options?.authorEmail || this.authorEmail;\n\n if (authorName && authorEmail) {\n command += ` --author=\"${authorName} <${authorEmail}>\"`;\n }\n\n return await this.runGitCommand(command);\n }\n\n async hasChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('status --porcelain');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async hasStagedChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('diff --cached --name-only');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async getRemoteUrl(): Promise<string | null> {\n try {\n return await this.runGitCommand('remote get-url origin');\n } catch {\n return null;\n }\n }\n\n async pushBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '--force' : '';\n await this.runGitCommand(`push ${forceFlag} -u origin ${branchName}`);\n }\n\n // Utility methods for PostHog task workflow\n async createTaskPlanningBranch(taskId: string, baseBranch?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-planning`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-planning-${counter}`;\n counter++;\n }\n\n this.logger.debug('Creating unique planning branch', { branchName, taskId });\n\n // If no base branch specified, ensure we're on main/master\n if (!baseBranch) {\n baseBranch = await this.getDefaultBranch();\n await this.switchToBranch(baseBranch);\n\n // Check for uncommitted changes\n if (await this.hasChanges()) {\n throw new Error(`Uncommitted changes detected. Please commit or stash changes before running tasks.`);\n }\n }\n\n await this.createBranch(branchName, baseBranch); // Use createBranch instead of createOrSwitchToBranch for new branches\n return branchName;\n }\n\n async createTaskImplementationBranch(taskId: string, planningBranchName?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-implementation`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-implementation-${counter}`;\n counter++;\n }\n\n const currentBranchBefore = await this.getCurrentBranch();\n this.logger.debug('Creating unique implementation branch', {\n branchName,\n taskId,\n currentBranch: currentBranchBefore\n });\n\n // Implementation branch should branch from the specific planning branch\n let baseBranch = planningBranchName;\n\n if (!baseBranch) {\n // Try to find the corresponding planning branch\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch.includes('-planning')) {\n baseBranch = currentBranch; // Use current planning branch\n this.logger.debug('Using current planning branch', { baseBranch });\n } else {\n // Fallback to default branch\n baseBranch = await this.getDefaultBranch();\n this.logger.debug('No planning branch found, using default', { baseBranch });\n await this.switchToBranch(baseBranch);\n }\n }\n\n this.logger.debug('Creating implementation branch from base', { baseBranch, branchName });\n await this.createBranch(branchName, baseBranch); // Create fresh branch from base\n\n const currentBranchAfter = await this.getCurrentBranch();\n this.logger.info('Implementation branch created', {\n branchName,\n currentBranch: currentBranchAfter\n });\n\n return branchName;\n }\n\n async commitPlan(taskId: string, taskTitle: string): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n this.logger.debug('Committing plan', { taskId, currentBranch });\n\n await this.addAllPostHogFiles();\n\n const hasChanges = await this.hasStagedChanges();\n this.logger.debug('Checking for staged changes', { hasChanges });\n\n if (!hasChanges) {\n this.logger.info('No plan changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n const message = `📋 Add plan for task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent\n\nThis commit contains the implementation plan and supporting documentation\nfor the task. Review the plan before proceeding with implementation.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Plan committed', { taskId, taskTitle });\n return result;\n }\n\n async commitImplementation(taskId: string, taskTitle: string, planSummary?: string): Promise<string> {\n await this.runGitCommand('add .');\n\n const hasChanges = await this.hasStagedChanges();\n if (!hasChanges) {\n this.logger.warn('No implementation changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n let message = `✨ Implement task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent`;\n\n if (planSummary) {\n message += `\\n\\nPlan Summary:\\n${planSummary}`;\n }\n\n message += `\\n\\nThis commit implements the changes described in the task plan.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Implementation committed', { taskId, taskTitle });\n return result;\n }\n\n async deleteBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '-D' : '-d';\n await this.runGitCommand(`branch ${forceFlag} ${branchName}`);\n }\n\n async deleteRemoteBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`push origin --delete ${branchName}`);\n }\n\n async getBranchInfo(branchName: string): Promise<BranchInfo> {\n const exists = await this.branchExists(branchName);\n const currentBranch = await this.getCurrentBranch();\n\n return {\n name: branchName,\n exists,\n isCurrentBranch: branchName === currentBranch\n };\n }\n\n async getCommitSha(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`rev-parse ${ref}`);\n }\n\n async getCommitMessage(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`log -1 --pretty=%B ${ref}`);\n }\n\n async createPullRequest(\n branchName: string,\n title: string,\n body: string,\n baseBranch?: string\n ): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch !== branchName) {\n await this.switchToBranch(branchName);\n }\n\n await this.pushBranch(branchName);\n\n let command = `gh pr create --title \"${title.replace(/\"/g, '\\\\\"')}\" --body \"${body.replace(/\"/g, '\\\\\"')}\"`;\n\n if (baseBranch) {\n command += ` --base ${baseBranch}`;\n }\n\n try {\n const prUrl = await this.runCommand(command);\n return prUrl.trim();\n } catch (error) {\n throw new Error(`Failed to create PR: ${error}`);\n }\n }\n\n async getTaskBranch(taskSlug: string): Promise<string | null> {\n try {\n // Get all branches matching the task slug pattern\n const branches = await this.runGitCommand('branch --list --all');\n const branchPattern = `posthog/task-${taskSlug}`;\n \n // Look for exact match or with counter suffix\n const lines = branches.split('\\n').map(l => l.trim().replace(/^\\*\\s+/, ''));\n for (const line of lines) {\n const cleanBranch = line.replace('remotes/origin/', '');\n if (cleanBranch.startsWith(branchPattern)) {\n return cleanBranch;\n }\n }\n \n return null;\n } catch (error) {\n this.logger.debug('Failed to get task branch', { taskSlug, error });\n return null;\n }\n }\n\n async commitAndPush(message: string, options?: { allowEmpty?: boolean }): Promise<void> {\n const hasChanges = await this.hasStagedChanges();\n \n if (!hasChanges && !options?.allowEmpty) {\n this.logger.debug('No changes to commit, skipping');\n return;\n }\n\n let command = `commit -m \"${message.replace(/\"/g, '\\\\\"')}\"`;\n \n if (options?.allowEmpty) {\n command += ' --allow-empty';\n }\n\n const authorName = this.authorName;\n const authorEmail = this.authorEmail;\n\n if (authorName && authorEmail) {\n command += ` --author=\"${authorName} <${authorEmail}>\"`;\n }\n\n await this.runGitCommand(command);\n \n // Push to origin\n const currentBranch = await this.getCurrentBranch();\n await this.pushBranch(currentBranch);\n \n this.logger.info('Committed and pushed changes', { branch: currentBranch, message });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +1,13 @@
|
|
|
1
|
-
import type { Task, PostHogAPIConfig, PostHogResource, UrlMention } from './types.js';
|
|
1
|
+
import type { Task, TaskRun, LogEntry, PostHogAPIConfig, PostHogResource, UrlMention } from './types.js';
|
|
2
2
|
import type { WorkflowDefinition, AgentDefinition } from './workflow-types.js';
|
|
3
|
-
interface
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 interface TaskProgressRecord {
|
|
21
|
-
id: string;
|
|
22
|
-
task: string;
|
|
23
|
-
status: "started" | "in_progress" | "completed" | "failed";
|
|
24
|
-
current_step?: string | null;
|
|
25
|
-
completed_steps?: number | null;
|
|
26
|
-
total_steps?: number | null;
|
|
27
|
-
progress_percentage?: number | null;
|
|
28
|
-
output_log?: string | null;
|
|
29
|
-
error_message?: string | null;
|
|
30
|
-
workflow_id?: string | null;
|
|
31
|
-
workflow_run_id?: string | null;
|
|
32
|
-
activity_id?: string | null;
|
|
33
|
-
created_at: string;
|
|
34
|
-
updated_at: string;
|
|
35
|
-
completed_at?: string | null;
|
|
36
|
-
}
|
|
37
|
-
export interface TaskProgressUpdate {
|
|
38
|
-
status?: TaskProgressRecord["status"];
|
|
39
|
-
current_step?: string | null;
|
|
40
|
-
completed_steps?: number | null;
|
|
41
|
-
total_steps?: number | null;
|
|
42
|
-
output_log?: string | null;
|
|
3
|
+
export interface TaskRunUpdate {
|
|
4
|
+
status?: TaskRun["status"];
|
|
5
|
+
branch?: string | null;
|
|
6
|
+
current_stage?: string | null;
|
|
7
|
+
log?: LogEntry[];
|
|
43
8
|
error_message?: string | null;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
activity_id?: string | null;
|
|
9
|
+
output?: Record<string, unknown> | null;
|
|
10
|
+
state?: Record<string, unknown>;
|
|
47
11
|
}
|
|
48
12
|
export declare class PostHogAPIClient {
|
|
49
13
|
private config;
|
|
@@ -65,21 +29,17 @@ export declare class PostHogAPIClient {
|
|
|
65
29
|
current_stage?: string;
|
|
66
30
|
}): Promise<Task[]>;
|
|
67
31
|
updateTask(taskId: string, updates: Partial<Task>): Promise<Task>;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
32
|
+
listTaskRuns(taskId: string): Promise<TaskRun[]>;
|
|
33
|
+
getTaskRun(taskId: string, runId: string): Promise<TaskRun>;
|
|
34
|
+
createTaskRun(taskId: string, payload?: Partial<Omit<TaskRun, 'id' | 'task' | 'team' | 'created_at' | 'updated_at' | 'completed_at'>>): Promise<TaskRun>;
|
|
35
|
+
updateTaskRun(taskId: string, runId: string, payload: TaskRunUpdate): Promise<TaskRun>;
|
|
36
|
+
updateTaskRunStage(taskId: string, runId: string, stageId: string): Promise<TaskRun>;
|
|
37
|
+
progressTaskRun(taskId: string, runId: string, nextStageId?: string): Promise<TaskRun>;
|
|
38
|
+
setTaskRunOutput(taskId: string, runId: string, output: Record<string, unknown>): Promise<TaskRun>;
|
|
39
|
+
appendTaskRunLog(taskId: string, runId: string, entries: LogEntry[]): Promise<TaskRun>;
|
|
76
40
|
fetchWorkflow(workflowId: string): Promise<WorkflowDefinition>;
|
|
77
41
|
listWorkflows(): Promise<WorkflowDefinition[]>;
|
|
78
42
|
listAgents(): Promise<AgentDefinition[]>;
|
|
79
|
-
progressTask(taskId: string, options?: {
|
|
80
|
-
next_stage_id?: string;
|
|
81
|
-
auto?: boolean;
|
|
82
|
-
}): Promise<Task>;
|
|
83
43
|
/**
|
|
84
44
|
* Fetch error details from PostHog error tracking
|
|
85
45
|
*/
|
|
@@ -93,5 +53,4 @@ export declare class PostHogAPIClient {
|
|
|
93
53
|
*/
|
|
94
54
|
private formatErrorContent;
|
|
95
55
|
}
|
|
96
|
-
export {};
|
|
97
56
|
//# sourceMappingURL=posthog-api.d.ts.map
|
|
@@ -1 +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,eAAe,EAAgB,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"posthog-api.d.ts","sourceRoot":"","sources":["../../src/posthog-api.ts"],"names":[],"mappings":"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"}
|
package/dist/src/posthog-api.js
CHANGED
|
@@ -84,53 +84,60 @@ class PostHogAPIClient {
|
|
|
84
84
|
body: JSON.stringify(updates),
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
|
-
|
|
87
|
+
// TaskRun methods
|
|
88
|
+
async listTaskRuns(taskId) {
|
|
88
89
|
const teamId = await this.getTeamId();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
body: JSON.stringify({ current_stage: stageId }),
|
|
92
|
-
});
|
|
90
|
+
const response = await this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/`);
|
|
91
|
+
return response.results || [];
|
|
93
92
|
}
|
|
94
|
-
async
|
|
93
|
+
async getTaskRun(taskId, runId) {
|
|
95
94
|
const teamId = await this.getTeamId();
|
|
96
|
-
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/
|
|
95
|
+
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/`);
|
|
96
|
+
}
|
|
97
|
+
async createTaskRun(taskId, payload) {
|
|
98
|
+
const teamId = await this.getTeamId();
|
|
99
|
+
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/`, {
|
|
97
100
|
method: "POST",
|
|
98
|
-
body: JSON.stringify(
|
|
101
|
+
body: JSON.stringify(payload || {}),
|
|
99
102
|
});
|
|
100
103
|
}
|
|
101
|
-
async
|
|
104
|
+
async updateTaskRun(taskId, runId, payload) {
|
|
102
105
|
const teamId = await this.getTeamId();
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
payload.branch = branch;
|
|
106
|
-
}
|
|
107
|
-
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/attach_pr/`, {
|
|
108
|
-
method: "POST",
|
|
106
|
+
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/`, {
|
|
107
|
+
method: "PATCH",
|
|
109
108
|
body: JSON.stringify(payload),
|
|
110
109
|
});
|
|
111
110
|
}
|
|
112
|
-
async
|
|
111
|
+
async updateTaskRunStage(taskId, runId, stageId) {
|
|
113
112
|
const teamId = await this.getTeamId();
|
|
114
|
-
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/
|
|
113
|
+
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/update_stage/`, {
|
|
114
|
+
method: 'PATCH',
|
|
115
|
+
body: JSON.stringify({ current_stage: stageId }),
|
|
116
|
+
});
|
|
115
117
|
}
|
|
116
|
-
async
|
|
118
|
+
async progressTaskRun(taskId, runId, nextStageId) {
|
|
117
119
|
const teamId = await this.getTeamId();
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
120
|
+
const payload = {};
|
|
121
|
+
if (nextStageId) {
|
|
122
|
+
payload.next_stage_id = nextStageId;
|
|
123
|
+
}
|
|
124
|
+
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/progress_run/`, {
|
|
125
|
+
method: 'POST',
|
|
126
|
+
body: JSON.stringify(payload),
|
|
124
127
|
});
|
|
125
128
|
}
|
|
126
|
-
async
|
|
129
|
+
async setTaskRunOutput(taskId, runId, output) {
|
|
127
130
|
const teamId = await this.getTeamId();
|
|
128
|
-
return this.apiRequest(`/api/projects/${teamId}/
|
|
129
|
-
method:
|
|
130
|
-
body: JSON.stringify({
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/set_output/`, {
|
|
132
|
+
method: 'PATCH',
|
|
133
|
+
body: JSON.stringify({ output }),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
async appendTaskRunLog(taskId, runId, entries) {
|
|
137
|
+
const teamId = await this.getTeamId();
|
|
138
|
+
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/append_log/`, {
|
|
139
|
+
method: 'POST',
|
|
140
|
+
body: JSON.stringify({ entries }),
|
|
134
141
|
});
|
|
135
142
|
}
|
|
136
143
|
// Workflow endpoints
|
|
@@ -147,13 +154,6 @@ class PostHogAPIClient {
|
|
|
147
154
|
async listAgents() {
|
|
148
155
|
return this.apiRequest(`/api/agents/`);
|
|
149
156
|
}
|
|
150
|
-
async progressTask(taskId, options) {
|
|
151
|
-
const teamId = await this.getTeamId();
|
|
152
|
-
return this.apiRequest(`/api/projects/${teamId}/tasks/${taskId}/progress_task/`, {
|
|
153
|
-
method: 'POST',
|
|
154
|
-
body: JSON.stringify(options || {}),
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
157
|
/**
|
|
158
158
|
* Fetch error details from PostHog error tracking
|
|
159
159
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog-api.js","sources":["../../src/posthog-api.ts"],"sourcesContent":["import type { Task, SupportingFile, PostHogAPIConfig, PostHogResource, ResourceType, UrlMention } from './types.js';\nimport type { WorkflowDefinition, AgentDefinition } from './workflow-types.js';\n\ninterface PostHogApiResponse<T> {\n results?: T[];\n count?: number;\n next?: string | null;\n previous?: string | null;\n}\n\ninterface TaskProgressResponse {\n has_progress: boolean;\n id?: string;\n status?: \"started\" | \"in_progress\" | \"completed\" | \"failed\";\n current_step?: string;\n completed_steps?: number;\n total_steps?: number;\n progress_percentage?: number;\n output_log?: string;\n error_message?: string;\n created_at?: string;\n updated_at?: string;\n completed_at?: string;\n workflow_id?: string;\n workflow_run_id?: string;\n message?: string;\n}\n\nexport interface TaskProgressRecord {\n id: string;\n task: string;\n status: \"started\" | \"in_progress\" | \"completed\" | \"failed\";\n current_step?: string | null;\n completed_steps?: number | null;\n total_steps?: number | null;\n progress_percentage?: number | null;\n output_log?: string | null;\n error_message?: string | null;\n workflow_id?: string | null;\n workflow_run_id?: string | null;\n activity_id?: string | null;\n created_at: string;\n updated_at: string;\n completed_at?: string | null;\n}\n\nexport interface TaskProgressUpdate {\n status?: TaskProgressRecord[\"status\"];\n current_step?: string | null;\n completed_steps?: number | null;\n total_steps?: number | null;\n output_log?: string | null;\n error_message?: string | null;\n workflow_id?: string | null;\n workflow_run_id?: string | null;\n activity_id?: string | null;\n}\n\nexport class PostHogAPIClient {\n private config: PostHogAPIConfig;\n private _teamId: number | null = null;\n\n constructor(config: PostHogAPIConfig) {\n this.config = config;\n }\n\n private get baseUrl(): string {\n const host = this.config.apiUrl.endsWith(\"/\") \n ? this.config.apiUrl.slice(0, -1) \n : this.config.apiUrl;\n return host;\n }\n\n private get headers(): Record<string, string> {\n return {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n };\n }\n\n private async apiRequest<T>(\n endpoint: string, \n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n \n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.headers,\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n let errorMessage: string;\n try {\n const errorResponse = await response.json();\n errorMessage = `Failed request: [${response.status}] ${JSON.stringify(errorResponse)}`;\n } catch {\n errorMessage = `Failed request: [${response.status}] ${response.statusText}`;\n }\n throw new Error(errorMessage);\n }\n\n return response.json();\n }\n\n async getTeamId(): Promise<number> {\n if (this._teamId !== null) {\n return this._teamId;\n }\n\n // Fetch user info to get team ID (following Array's pattern)\n const userResponse = await this.apiRequest<any>('/api/users/@me/');\n\n if (!userResponse.team?.id) {\n throw new Error('No team found for user');\n }\n\n const teamId = Number(userResponse.team.id);\n this._teamId = teamId;\n return teamId;\n }\n\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n getApiKey(): string {\n return this.config.apiKey;\n }\n\n async getLlmGatewayUrl(): Promise<string> {\n const teamId = await this.getTeamId();\n return `${this.baseUrl}/api/projects/${teamId}/llm_gateway`;\n }\n\n async fetchTask(taskId: string): Promise<Task> {\n const teamId = await this.getTeamId();\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/`);\n }\n\n async listTasks(filters?: {\n repository?: string;\n organization?: string;\n origin_product?: string;\n workflow?: string;\n current_stage?: string;\n }): Promise<Task[]> {\n const teamId = await this.getTeamId();\n const url = new URL(`${this.baseUrl}/api/projects/${teamId}/tasks/`);\n \n if (filters) {\n Object.entries(filters).forEach(([key, value]) => {\n if (value) url.searchParams.append(key, value);\n });\n }\n\n const response = await this.apiRequest<PostHogApiResponse<Task>>(\n url.pathname + url.search\n );\n \n return response.results || [];\n }\n\n async updateTask(taskId: string, updates: Partial<Task>): Promise<Task> {\n const teamId = await this.getTeamId();\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/`, {\n method: 'PATCH',\n body: JSON.stringify(updates),\n });\n }\n\n async updateTaskStage(taskId: string, stageId: string): Promise<Task> {\n const teamId = await this.getTeamId();\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/update_stage/`, {\n method: 'PATCH',\n body: JSON.stringify({ current_stage: stageId }),\n });\n }\n\n async setTaskBranch(taskId: string, branch: string): Promise<Task> {\n const teamId = await this.getTeamId();\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/set_branch/`, {\n method: \"POST\",\n body: JSON.stringify({ branch }),\n });\n }\n\n async attachTaskPullRequest(taskId: string, prUrl: string, branch?: string): Promise<Task> {\n const teamId = await this.getTeamId();\n const payload: Record<string, string> = { pr_url: prUrl };\n if (branch) {\n payload.branch = branch;\n }\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/attach_pr/`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n }\n\n async getTaskProgress(taskId: string): Promise<TaskProgressResponse> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskProgressResponse>(`/api/projects/${teamId}/tasks/${taskId}/progress/`);\n }\n\n async createTaskProgress(\n taskId: string,\n payload: TaskProgressUpdate & { status: TaskProgressRecord[\"status\"] }\n ): Promise<TaskProgressRecord> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskProgressRecord>(`/api/projects/${teamId}/task_progress/`, {\n method: \"POST\",\n body: JSON.stringify({\n ...payload,\n task: taskId,\n }),\n });\n }\n\n async updateTaskProgress(\n taskId: string,\n progressId: string,\n payload: TaskProgressUpdate\n ): Promise<TaskProgressRecord> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskProgressRecord>(`/api/projects/${teamId}/task_progress/${progressId}/`, {\n method: \"PATCH\",\n body: JSON.stringify({\n ...payload,\n task: taskId,\n }),\n });\n }\n\n // Workflow endpoints\n async fetchWorkflow(workflowId: string): Promise<WorkflowDefinition> {\n const teamId = await this.getTeamId();\n return this.apiRequest<WorkflowDefinition>(`/api/projects/${teamId}/workflows/${workflowId}/`);\n }\n\n async listWorkflows(): Promise<WorkflowDefinition[]> {\n const teamId = await this.getTeamId();\n const response = await this.apiRequest<PostHogApiResponse<WorkflowDefinition>>(`/api/projects/${teamId}/workflows/`);\n return response.results || [];\n }\n\n // Agent catalog exposure\n async listAgents(): Promise<AgentDefinition[]> {\n return this.apiRequest<AgentDefinition[]>(`/api/agents/`);\n }\n\n async progressTask(taskId: string, options?: { next_stage_id?: string; auto?: boolean }): Promise<Task> {\n const teamId = await this.getTeamId();\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/progress_task/`, {\n method: 'POST',\n body: JSON.stringify(options || {}),\n });\n }\n\n /**\n * Fetch error details from PostHog error tracking\n */\n async fetchErrorDetails(errorId: string, projectId?: string): Promise<PostHogResource> {\n const teamId = projectId ? parseInt(projectId) : await this.getTeamId();\n \n try {\n const errorData = await this.apiRequest<any>(`/api/projects/${teamId}/error_tracking/${errorId}/`);\n \n // Format error details for agent consumption\n const content = this.formatErrorContent(errorData);\n \n return {\n type: 'error',\n id: errorId,\n url: `${this.baseUrl}/project/${teamId}/error_tracking/${errorId}`,\n title: errorData.exception_type || 'Unknown Error',\n content,\n metadata: {\n exception_type: errorData.exception_type,\n first_seen: errorData.first_seen,\n last_seen: errorData.last_seen,\n volume: errorData.volume,\n users_affected: errorData.users_affected,\n },\n };\n } catch (error) {\n throw new Error(`Failed to fetch error details for ${errorId}: ${error}`);\n }\n }\n\n /**\n * Generic resource fetcher by URL or ID\n */\n async fetchResourceByUrl(urlMention: UrlMention): Promise<PostHogResource> {\n switch (urlMention.type) {\n case 'error':\n if (!urlMention.id) {\n throw new Error('Error ID is required for error resources');\n }\n // Extract project ID from URL if available, otherwise use default team\n let projectId: string | undefined;\n if (urlMention.url) {\n const projectIdMatch = urlMention.url.match(/\\/project\\/(\\d+)\\//);\n projectId = projectIdMatch ? projectIdMatch[1] : undefined;\n }\n return this.fetchErrorDetails(urlMention.id, projectId);\n \n case 'experiment':\n case 'insight':\n case 'feature_flag':\n throw new Error(`Resource type '${urlMention.type}' not yet implemented`);\n \n case 'generic':\n // Return a minimal resource for generic URLs\n return {\n type: 'generic',\n id: '',\n url: urlMention.url,\n title: 'Generic Resource',\n content: `Generic resource: ${urlMention.url}`,\n metadata: {},\n };\n \n default:\n throw new Error(`Unknown resource type: ${urlMention.type}`);\n }\n }\n\n /**\n * Format error data for agent consumption\n */\n private formatErrorContent(errorData: any): string {\n const sections = [];\n \n if (errorData.exception_type) {\n sections.push(`**Error Type**: ${errorData.exception_type}`);\n }\n \n if (errorData.exception_message) {\n sections.push(`**Message**: ${errorData.exception_message}`);\n }\n \n if (errorData.stack_trace) {\n sections.push(`**Stack Trace**:\\n\\`\\`\\`\\n${errorData.stack_trace}\\n\\`\\`\\``);\n }\n \n if (errorData.volume) {\n sections.push(`**Volume**: ${errorData.volume} occurrences`);\n }\n \n if (errorData.users_affected) {\n sections.push(`**Users Affected**: ${errorData.users_affected}`);\n }\n \n if (errorData.first_seen && errorData.last_seen) {\n sections.push(`**First Seen**: ${errorData.first_seen}`);\n sections.push(`**Last Seen**: ${errorData.last_seen}`);\n }\n \n if (errorData.properties && Object.keys(errorData.properties).length > 0) {\n sections.push(`**Properties**: ${JSON.stringify(errorData.properties, null, 2)}`);\n }\n \n return sections.join('\\n\\n');\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"posthog-api.js","sources":["../../src/posthog-api.ts"],"sourcesContent":["import type { Task, TaskRun, LogEntry, SupportingFile, PostHogAPIConfig, PostHogResource, ResourceType, UrlMention } from './types.js';\nimport type { WorkflowDefinition, AgentDefinition } from './workflow-types.js';\n\ninterface PostHogApiResponse<T> {\n results?: T[];\n count?: number;\n next?: string | null;\n previous?: string | null;\n}\n\nexport interface TaskRunUpdate {\n status?: TaskRun[\"status\"];\n branch?: string | null;\n current_stage?: string | null;\n log?: LogEntry[];\n error_message?: string | null;\n output?: Record<string, unknown> | null;\n state?: Record<string, unknown>;\n}\n\nexport class PostHogAPIClient {\n private config: PostHogAPIConfig;\n private _teamId: number | null = null;\n\n constructor(config: PostHogAPIConfig) {\n this.config = config;\n }\n\n private get baseUrl(): string {\n const host = this.config.apiUrl.endsWith(\"/\") \n ? this.config.apiUrl.slice(0, -1) \n : this.config.apiUrl;\n return host;\n }\n\n private get headers(): Record<string, string> {\n return {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n };\n }\n\n private async apiRequest<T>(\n endpoint: string, \n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n \n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.headers,\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n let errorMessage: string;\n try {\n const errorResponse = await response.json();\n errorMessage = `Failed request: [${response.status}] ${JSON.stringify(errorResponse)}`;\n } catch {\n errorMessage = `Failed request: [${response.status}] ${response.statusText}`;\n }\n throw new Error(errorMessage);\n }\n\n return response.json();\n }\n\n async getTeamId(): Promise<number> {\n if (this._teamId !== null) {\n return this._teamId;\n }\n\n // Fetch user info to get team ID (following Array's pattern)\n const userResponse = await this.apiRequest<any>('/api/users/@me/');\n\n if (!userResponse.team?.id) {\n throw new Error('No team found for user');\n }\n\n const teamId = Number(userResponse.team.id);\n this._teamId = teamId;\n return teamId;\n }\n\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n getApiKey(): string {\n return this.config.apiKey;\n }\n\n async getLlmGatewayUrl(): Promise<string> {\n const teamId = await this.getTeamId();\n return `${this.baseUrl}/api/projects/${teamId}/llm_gateway`;\n }\n\n async fetchTask(taskId: string): Promise<Task> {\n const teamId = await this.getTeamId();\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/`);\n }\n\n async listTasks(filters?: {\n repository?: string;\n organization?: string;\n origin_product?: string;\n workflow?: string;\n current_stage?: string;\n }): Promise<Task[]> {\n const teamId = await this.getTeamId();\n const url = new URL(`${this.baseUrl}/api/projects/${teamId}/tasks/`);\n \n if (filters) {\n Object.entries(filters).forEach(([key, value]) => {\n if (value) url.searchParams.append(key, value);\n });\n }\n\n const response = await this.apiRequest<PostHogApiResponse<Task>>(\n url.pathname + url.search\n );\n \n return response.results || [];\n }\n\n async updateTask(taskId: string, updates: Partial<Task>): Promise<Task> {\n const teamId = await this.getTeamId();\n return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/`, {\n method: 'PATCH',\n body: JSON.stringify(updates),\n });\n }\n\n // TaskRun methods\n async listTaskRuns(taskId: string): Promise<TaskRun[]> {\n const teamId = await this.getTeamId();\n const response = await this.apiRequest<PostHogApiResponse<TaskRun>>(\n `/api/projects/${teamId}/tasks/${taskId}/runs/`\n );\n return response.results || [];\n }\n\n async getTaskRun(taskId: string, runId: string): Promise<TaskRun> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskRun>(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/`);\n }\n\n async createTaskRun(\n taskId: string,\n payload?: Partial<Omit<TaskRun, 'id' | 'task' | 'team' | 'created_at' | 'updated_at' | 'completed_at'>>\n ): Promise<TaskRun> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskRun>(`/api/projects/${teamId}/tasks/${taskId}/runs/`, {\n method: \"POST\",\n body: JSON.stringify(payload || {}),\n });\n }\n\n async updateTaskRun(\n taskId: string,\n runId: string,\n payload: TaskRunUpdate\n ): Promise<TaskRun> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskRun>(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/`, {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n });\n }\n\n async updateTaskRunStage(taskId: string, runId: string, stageId: string): Promise<TaskRun> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskRun>(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/update_stage/`, {\n method: 'PATCH',\n body: JSON.stringify({ current_stage: stageId }),\n });\n }\n\n async progressTaskRun(taskId: string, runId: string, nextStageId?: string): Promise<TaskRun> {\n const teamId = await this.getTeamId();\n const payload: Record<string, string> = {};\n if (nextStageId) {\n payload.next_stage_id = nextStageId;\n }\n return this.apiRequest<TaskRun>(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/progress_run/`, {\n method: 'POST',\n body: JSON.stringify(payload),\n });\n }\n\n async setTaskRunOutput(taskId: string, runId: string, output: Record<string, unknown>): Promise<TaskRun> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskRun>(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/set_output/`, {\n method: 'PATCH',\n body: JSON.stringify({ output }),\n });\n }\n\n async appendTaskRunLog(taskId: string, runId: string, entries: LogEntry[]): Promise<TaskRun> {\n const teamId = await this.getTeamId();\n return this.apiRequest<TaskRun>(`/api/projects/${teamId}/tasks/${taskId}/runs/${runId}/append_log/`, {\n method: 'POST',\n body: JSON.stringify({ entries }),\n });\n }\n\n // Workflow endpoints\n async fetchWorkflow(workflowId: string): Promise<WorkflowDefinition> {\n const teamId = await this.getTeamId();\n return this.apiRequest<WorkflowDefinition>(`/api/projects/${teamId}/workflows/${workflowId}/`);\n }\n\n async listWorkflows(): Promise<WorkflowDefinition[]> {\n const teamId = await this.getTeamId();\n const response = await this.apiRequest<PostHogApiResponse<WorkflowDefinition>>(`/api/projects/${teamId}/workflows/`);\n return response.results || [];\n }\n\n // Agent catalog exposure\n async listAgents(): Promise<AgentDefinition[]> {\n return this.apiRequest<AgentDefinition[]>(`/api/agents/`);\n }\n\n /**\n * Fetch error details from PostHog error tracking\n */\n async fetchErrorDetails(errorId: string, projectId?: string): Promise<PostHogResource> {\n const teamId = projectId ? parseInt(projectId) : await this.getTeamId();\n \n try {\n const errorData = await this.apiRequest<any>(`/api/projects/${teamId}/error_tracking/${errorId}/`);\n \n // Format error details for agent consumption\n const content = this.formatErrorContent(errorData);\n \n return {\n type: 'error',\n id: errorId,\n url: `${this.baseUrl}/project/${teamId}/error_tracking/${errorId}`,\n title: errorData.exception_type || 'Unknown Error',\n content,\n metadata: {\n exception_type: errorData.exception_type,\n first_seen: errorData.first_seen,\n last_seen: errorData.last_seen,\n volume: errorData.volume,\n users_affected: errorData.users_affected,\n },\n };\n } catch (error) {\n throw new Error(`Failed to fetch error details for ${errorId}: ${error}`);\n }\n }\n\n /**\n * Generic resource fetcher by URL or ID\n */\n async fetchResourceByUrl(urlMention: UrlMention): Promise<PostHogResource> {\n switch (urlMention.type) {\n case 'error':\n if (!urlMention.id) {\n throw new Error('Error ID is required for error resources');\n }\n // Extract project ID from URL if available, otherwise use default team\n let projectId: string | undefined;\n if (urlMention.url) {\n const projectIdMatch = urlMention.url.match(/\\/project\\/(\\d+)\\//);\n projectId = projectIdMatch ? projectIdMatch[1] : undefined;\n }\n return this.fetchErrorDetails(urlMention.id, projectId);\n \n case 'experiment':\n case 'insight':\n case 'feature_flag':\n throw new Error(`Resource type '${urlMention.type}' not yet implemented`);\n \n case 'generic':\n // Return a minimal resource for generic URLs\n return {\n type: 'generic',\n id: '',\n url: urlMention.url,\n title: 'Generic Resource',\n content: `Generic resource: ${urlMention.url}`,\n metadata: {},\n };\n \n default:\n throw new Error(`Unknown resource type: ${urlMention.type}`);\n }\n }\n\n /**\n * Format error data for agent consumption\n */\n private formatErrorContent(errorData: any): string {\n const sections = [];\n \n if (errorData.exception_type) {\n sections.push(`**Error Type**: ${errorData.exception_type}`);\n }\n \n if (errorData.exception_message) {\n sections.push(`**Message**: ${errorData.exception_message}`);\n }\n \n if (errorData.stack_trace) {\n sections.push(`**Stack Trace**:\\n\\`\\`\\`\\n${errorData.stack_trace}\\n\\`\\`\\``);\n }\n \n if (errorData.volume) {\n sections.push(`**Volume**: ${errorData.volume} occurrences`);\n }\n \n if (errorData.users_affected) {\n sections.push(`**Users Affected**: ${errorData.users_affected}`);\n }\n \n if (errorData.first_seen && errorData.last_seen) {\n sections.push(`**First Seen**: ${errorData.first_seen}`);\n sections.push(`**Last Seen**: ${errorData.last_seen}`);\n }\n \n if (errorData.properties && Object.keys(errorData.properties).length > 0) {\n sections.push(`**Properties**: ${JSON.stringify(errorData.properties, null, 2)}`);\n }\n \n return sections.join('\\n\\n');\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,7 @@ export declare class PromptBuilder {
|
|
|
42
42
|
* Returns processed description and referenced file contents
|
|
43
43
|
*/
|
|
44
44
|
private processFileReferences;
|
|
45
|
+
buildResearchPrompt(task: Task, repositoryPath?: string): Promise<string>;
|
|
45
46
|
buildPlanningPrompt(task: Task, repositoryPath?: string): Promise<string>;
|
|
46
47
|
buildExecutionPrompt(task: Task, repositoryPath?: string): Promise<string>;
|
|
47
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,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,aAAa,CAAC,EAAE;QAAE,kBAAkB,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;KAAE,CAAC;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,aAAa,CAAC,CAAqC;IAC3D,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,iBAAiB;IAOnC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;YACW,eAAe;IAW7B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;YACW,oBAAoB;IAqDlC;;;OAGG;YACW,qBAAqB;IAgC7B,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+DzE,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2DjF"}
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,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,aAAa,CAAC,EAAE;QAAE,kBAAkB,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;KAAE,CAAC;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,aAAa,CAAC,CAAqC;IAC3D,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,iBAAiB;IAOnC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;YACW,eAAe;IAW7B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;YACW,oBAAoB;IAqDlC;;;OAGG;YACW,qBAAqB;IAgC7B,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqDzE,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+DzE,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2DjF"}
|
|
@@ -165,6 +165,46 @@ class PromptBuilder {
|
|
|
165
165
|
}
|
|
166
166
|
return { description: processedDescription, referencedFiles };
|
|
167
167
|
}
|
|
168
|
+
async buildResearchPrompt(task, repositoryPath) {
|
|
169
|
+
// Process file references in description
|
|
170
|
+
const { description: descriptionAfterFiles, referencedFiles } = await this.processFileReferences(task.description, repositoryPath);
|
|
171
|
+
// Process URL references in description
|
|
172
|
+
const { description: processedDescription, referencedResources } = await this.processUrlReferences(descriptionAfterFiles);
|
|
173
|
+
let prompt = '';
|
|
174
|
+
prompt += `## Current Task\n\n**Task**: ${task.title}\n**Description**: ${processedDescription}`;
|
|
175
|
+
if (task.primary_repository) {
|
|
176
|
+
prompt += `\n**Repository**: ${task.primary_repository}`;
|
|
177
|
+
}
|
|
178
|
+
// Add referenced files from @ mentions
|
|
179
|
+
if (referencedFiles.length > 0) {
|
|
180
|
+
prompt += `\n\n## Referenced Files\n\n`;
|
|
181
|
+
for (const file of referencedFiles) {
|
|
182
|
+
prompt += `### ${file.path}\n\`\`\`\n${file.content}\n\`\`\`\n\n`;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Add referenced resources from URL mentions
|
|
186
|
+
if (referencedResources.length > 0) {
|
|
187
|
+
prompt += `\n\n## Referenced Resources\n\n`;
|
|
188
|
+
for (const resource of referencedResources) {
|
|
189
|
+
prompt += `### ${resource.title} (${resource.type})\n**URL**: ${resource.url}\n\n${resource.content}\n\n`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
const taskFiles = await this.getTaskFiles(task.id);
|
|
194
|
+
const contextFiles = taskFiles.filter((f) => f.type === 'context' || f.type === 'reference');
|
|
195
|
+
if (contextFiles.length > 0) {
|
|
196
|
+
prompt += `\n\n## Supporting Files`;
|
|
197
|
+
for (const file of contextFiles) {
|
|
198
|
+
prompt += `\n\n### ${file.name} (${file.type})\n${file.content}`;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
this.logger.debug('No existing task files found for research', { taskId: task.id });
|
|
204
|
+
}
|
|
205
|
+
prompt += `\n\nPlease explore the codebase thoroughly and generate 3-5 clarifying questions that will help guide the implementation of this task. Use the \`create_plan\` tool to create a research.md artifact with your questions in the markdown format specified in your system prompt.`;
|
|
206
|
+
return prompt;
|
|
207
|
+
}
|
|
168
208
|
async buildPlanningPrompt(task, repositoryPath) {
|
|
169
209
|
// Process file references in description
|
|
170
210
|
const { description: descriptionAfterFiles, referencedFiles } = await this.processFileReferences(task.description, repositoryPath);
|