@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 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,QAAQ;IAChB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,MAAM;IACf,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,YAAiB;IAKrC,QAAQ,CAAC,OAAO,EAAE,OAAO;IAIzB,OAAO,CAAC,aAAa;IAWrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,GAAG;IAY1C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMhC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMhC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMjC;;OAEG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAMrC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Simple logger utility with configurable debug mode
3
+ */
4
+ export var LogLevel;
5
+ (function (LogLevel) {
6
+ LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
7
+ LogLevel[LogLevel["WARN"] = 1] = "WARN";
8
+ LogLevel[LogLevel["INFO"] = 2] = "INFO";
9
+ LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
10
+ })(LogLevel || (LogLevel = {}));
11
+ export class Logger {
12
+ debugEnabled;
13
+ prefix;
14
+ constructor(config = {}) {
15
+ this.debugEnabled = config.debug ?? false;
16
+ this.prefix = config.prefix ?? '[PostHog Agent]';
17
+ }
18
+ setDebug(enabled) {
19
+ this.debugEnabled = enabled;
20
+ }
21
+ formatMessage(level, message, data) {
22
+ const timestamp = new Date().toISOString();
23
+ const base = `${timestamp} ${this.prefix} ${level} ${message}`;
24
+ if (data !== undefined) {
25
+ return `${base} ${JSON.stringify(data, null, 2)}`;
26
+ }
27
+ return base;
28
+ }
29
+ error(message, error) {
30
+ // Always log errors
31
+ if (error instanceof Error) {
32
+ console.error(this.formatMessage('[ERROR]', message, {
33
+ message: error.message,
34
+ stack: error.stack
35
+ }));
36
+ }
37
+ else {
38
+ console.error(this.formatMessage('[ERROR]', message, error));
39
+ }
40
+ }
41
+ warn(message, data) {
42
+ if (this.debugEnabled) {
43
+ console.warn(this.formatMessage('[WARN]', message, data));
44
+ }
45
+ }
46
+ info(message, data) {
47
+ if (this.debugEnabled) {
48
+ console.log(this.formatMessage('[INFO]', message, data));
49
+ }
50
+ }
51
+ debug(message, data) {
52
+ if (this.debugEnabled) {
53
+ console.log(this.formatMessage('[DEBUG]', message, data));
54
+ }
55
+ }
56
+ /**
57
+ * Create a child logger with additional prefix
58
+ */
59
+ child(childPrefix) {
60
+ return new Logger({
61
+ debug: this.debugEnabled,
62
+ prefix: `${this.prefix} [${childPrefix}]`
63
+ });
64
+ }
65
+ }
66
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACb,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAOD,MAAM,OAAO,MAAM;IACP,YAAY,CAAU;IACtB,MAAM,CAAS;IAEvB,YAAY,SAAuB,EAAE;QACjC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC;IACrD,CAAC;IAED,QAAQ,CAAC,OAAgB;QACrB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAChC,CAAC;IAEO,aAAa,CAAC,KAAa,EAAE,OAAe,EAAE,IAAU;QAC5D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QAE/D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAmB;QACtC,oBAAoB;QACpB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE;gBACjD,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;aACrB,CAAC,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC5B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAU;QAC5B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAU;QAC7B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAmB;QACrB,OAAO,IAAI,MAAM,CAAC;YACd,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,GAAG;SAC5C,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1,10 @@
1
+ export declare const POSTHOG_MCP: {
2
+ posthog: {
3
+ command: string;
4
+ args: string[];
5
+ env: {
6
+ POSTHOG_AUTH_HEADER: string;
7
+ };
8
+ };
9
+ };
10
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/utils/mcp.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;CAcvB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export const POSTHOG_MCP = {
2
+ posthog: {
3
+ command: "npx",
4
+ args: [
5
+ "-y",
6
+ "mcp-remote@latest",
7
+ "https://mcp.posthog.com/mcp",
8
+ "--header",
9
+ "Authorization:${POSTHOG_AUTH_HEADER}"
10
+ ],
11
+ env: {
12
+ "POSTHOG_AUTH_HEADER": `Bearer ${process.env.POSTHOG_API_KEY}`
13
+ }
14
+ }
15
+ };
16
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/utils/mcp.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,OAAO,EAAE;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE;YACF,IAAI;YACJ,mBAAmB;YACnB,6BAA6B;YAC7B,UAAU;YACV,sCAAsC;SACzC;QACD,GAAG,EAAE;YACD,qBAAqB,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;SACjE;KACJ;CACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { WorkflowDefinition } from './workflow-types';
2
+ import { PostHogAPIClient } from './posthog-api';
3
+ export declare class WorkflowRegistry {
4
+ private workflowsById;
5
+ private apiClient?;
6
+ constructor(apiClient?: PostHogAPIClient, staticDefinitions?: WorkflowDefinition[]);
7
+ loadWorkflows(): Promise<void>;
8
+ getWorkflow(id: string): WorkflowDefinition | undefined;
9
+ listWorkflows(): WorkflowDefinition[];
10
+ }
11
+ //# sourceMappingURL=workflow-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-registry.d.ts","sourceRoot":"","sources":["../../src/workflow-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,SAAS,CAAC,CAAmB;gBAEzB,SAAS,CAAC,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,EAAE,kBAAkB,EAAE;IAO5E,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIvD,aAAa,IAAI,kBAAkB,EAAE;CAGtC"}
@@ -0,0 +1,26 @@
1
+ import { PostHogAPIClient } from './posthog-api';
2
+ export class WorkflowRegistry {
3
+ workflowsById = new Map();
4
+ apiClient;
5
+ constructor(apiClient, staticDefinitions) {
6
+ this.apiClient = apiClient;
7
+ if (staticDefinitions) {
8
+ for (const w of staticDefinitions)
9
+ this.workflowsById.set(w.id, w);
10
+ }
11
+ }
12
+ async loadWorkflows() {
13
+ if (this.apiClient) {
14
+ const workflows = await this.apiClient.listWorkflows();
15
+ for (const w of workflows)
16
+ this.workflowsById.set(w.id, w);
17
+ }
18
+ }
19
+ getWorkflow(id) {
20
+ return this.workflowsById.get(id);
21
+ }
22
+ listWorkflows() {
23
+ return Array.from(this.workflowsById.values());
24
+ }
25
+ }
26
+ //# sourceMappingURL=workflow-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-registry.js","sourceRoot":"","sources":["../../src/workflow-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,OAAO,gBAAgB;IACnB,aAAa,GAAoC,IAAI,GAAG,EAAE,CAAC;IAC3D,SAAS,CAAoB;IAErC,YAAY,SAA4B,EAAE,iBAAwC;QAChF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,iBAAiB,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,iBAAiB;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,SAAS;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { PermissionMode, AgentEvent } from './types';
2
+ export type AgentType = 'planning' | 'execution' | 'review' | 'testing';
3
+ export interface AgentDefinition {
4
+ id: string;
5
+ name: string;
6
+ agent_type: AgentType;
7
+ description?: string;
8
+ config?: Record<string, any>;
9
+ }
10
+ export interface WorkflowStage {
11
+ id: string;
12
+ key: string;
13
+ name: string;
14
+ position: number;
15
+ agent_name?: string | null;
16
+ is_manual_only?: boolean;
17
+ color?: string;
18
+ }
19
+ export interface WorkflowDefinition {
20
+ id: string;
21
+ name: string;
22
+ description?: string;
23
+ stages: WorkflowStage[];
24
+ }
25
+ export interface StageOverrideOptions {
26
+ permissionMode?: PermissionMode;
27
+ createPlanningBranch?: boolean;
28
+ createImplementationBranch?: boolean;
29
+ openPullRequest?: boolean;
30
+ queryOverrides?: Record<string, any>;
31
+ }
32
+ export interface WorkflowStageExecutionResult {
33
+ plan?: string;
34
+ results?: any[];
35
+ }
36
+ export interface WorkflowExecutionOptions {
37
+ repositoryPath?: string;
38
+ permissionMode?: PermissionMode;
39
+ autoProgress?: boolean;
40
+ resumeFromCurrentStage?: boolean;
41
+ stageOverrides?: Record<string, StageOverrideOptions>;
42
+ onEvent?: (event: AgentEvent) => void;
43
+ queryOverrides?: Record<string, any>;
44
+ }
45
+ //# sourceMappingURL=workflow-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-types.d.ts","sourceRoot":"","sources":["../../src/workflow-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-types.js","sourceRoot":"","sources":["../../src/workflow-types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@posthog/agent",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript agent framework wrapping Claude Agent SDK with Git-based workflow for PostHog tasks",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "type": "module",
15
+ "keywords": [
16
+ "posthog",
17
+ "claude",
18
+ "agent",
19
+ "ai",
20
+ "git",
21
+ "workflow",
22
+ "typescript"
23
+ ],
24
+ "author": "PostHog",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/PostHog/posthog-agent"
29
+ },
30
+ "scripts": {
31
+ "build": "tsc --project tsconfig.build.json",
32
+ "example": "bun run example-usage.ts",
33
+ "dev": "bun run example-usage.ts",
34
+ "changeset": "changeset",
35
+ "version-packages": "changeset version",
36
+ "release": "changeset publish",
37
+ "prepublishOnly": "bun run build"
38
+ },
39
+ "engines": {
40
+ "node": ">=20.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "@changesets/cli": "^2.27.8",
44
+ "@types/bun": "latest",
45
+ "typescript": "^5.5.0"
46
+ },
47
+ "dependencies": {
48
+ "@anthropic-ai/claude-agent-sdk": "^0.1.1",
49
+ "dotenv": "^17.2.3"
50
+ },
51
+ "files": [
52
+ "dist/**/*",
53
+ "src/**/*",
54
+ "README.md",
55
+ "CLAUDE.md"
56
+ ],
57
+ "publishConfig": {
58
+ "access": "public"
59
+ },
60
+ "packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748"
61
+ }
@@ -0,0 +1,60 @@
1
+ import type { AgentDefinition, AgentType } from './workflow-types';
2
+
3
+ export class AgentRegistry {
4
+ private agentsByName: Map<string, AgentDefinition> = new Map();
5
+
6
+ constructor(definitions?: AgentDefinition[]) {
7
+ if (definitions) {
8
+ for (const def of definitions) this.register(def);
9
+ } else {
10
+ for (const def of AgentRegistry.getDefaultAgents()) this.register(def);
11
+ }
12
+ }
13
+
14
+ static getDefaultAgents(): AgentDefinition[] {
15
+ return [
16
+ {
17
+ id: 'planning_basic',
18
+ name: 'planning_basic',
19
+ agent_type: 'planning',
20
+ description: 'Analyze repo and produce implementation plan',
21
+ },
22
+ {
23
+ id: 'code_generation',
24
+ name: 'code_generation',
25
+ agent_type: 'execution',
26
+ description: 'Implements code changes using Claude SDK',
27
+ },
28
+ {
29
+ id: 'review_basic',
30
+ name: 'review_basic',
31
+ agent_type: 'review',
32
+ description: 'Reviews changes and suggests fixes',
33
+ },
34
+ {
35
+ id: 'testing_basic',
36
+ name: 'testing_basic',
37
+ agent_type: 'testing',
38
+ description: 'Runs tests and reports results',
39
+ },
40
+ ];
41
+ }
42
+
43
+ register(def: AgentDefinition): void {
44
+ this.agentsByName.set(def.name, def);
45
+ }
46
+
47
+ getAgent(name: string): AgentDefinition | undefined {
48
+ return this.agentsByName.get(name);
49
+ }
50
+
51
+ listAgents(): AgentDefinition[] {
52
+ return Array.from(this.agentsByName.values());
53
+ }
54
+
55
+ exportForPostHog(): { id: string; name: string; agent_type: AgentType; description?: string }[] {
56
+ return this.listAgents().map(({ id, name, agent_type, description }) => ({ id, name, agent_type, description }));
57
+ }
58
+ }
59
+
60
+