@posthog/agent 1.0.2 → 1.2.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 (61) hide show
  1. package/CLAUDE.md +68 -35
  2. package/README.md +46 -14
  3. package/dist/index.js +4 -5
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/agent-registry.js +4 -2
  6. package/dist/src/agent-registry.js.map +1 -1
  7. package/dist/src/agent.d.ts +4 -1
  8. package/dist/src/agent.d.ts.map +1 -1
  9. package/dist/src/agent.js +45 -14
  10. package/dist/src/agent.js.map +1 -1
  11. package/dist/src/agents/execution.js +4 -2
  12. package/dist/src/agents/execution.js.map +1 -1
  13. package/dist/src/agents/planning.js +4 -2
  14. package/dist/src/agents/planning.js.map +1 -1
  15. package/dist/src/event-transformer.d.ts +2 -0
  16. package/dist/src/event-transformer.d.ts.map +1 -1
  17. package/dist/src/event-transformer.js +57 -7
  18. package/dist/src/event-transformer.js.map +1 -1
  19. package/dist/src/file-manager.js +17 -14
  20. package/dist/src/file-manager.js.map +1 -1
  21. package/dist/src/git-manager.js +5 -2
  22. package/dist/src/git-manager.js.map +1 -1
  23. package/dist/src/posthog-api.d.ts +34 -0
  24. package/dist/src/posthog-api.d.ts.map +1 -1
  25. package/dist/src/posthog-api.js +42 -2
  26. package/dist/src/posthog-api.js.map +1 -1
  27. package/dist/src/prompt-builder.js +5 -2
  28. package/dist/src/prompt-builder.js.map +1 -1
  29. package/dist/src/stage-executor.d.ts +4 -2
  30. package/dist/src/stage-executor.d.ts.map +1 -1
  31. package/dist/src/stage-executor.js +22 -9
  32. package/dist/src/stage-executor.js.map +1 -1
  33. package/dist/src/task-manager.js +5 -2
  34. package/dist/src/task-manager.js.map +1 -1
  35. package/dist/src/task-progress-reporter.d.ts +44 -0
  36. package/dist/src/task-progress-reporter.d.ts.map +1 -0
  37. package/dist/src/task-progress-reporter.js +234 -0
  38. package/dist/src/task-progress-reporter.js.map +1 -0
  39. package/dist/src/template-manager.d.ts.map +1 -1
  40. package/dist/src/template-manager.js +16 -6
  41. package/dist/src/template-manager.js.map +1 -1
  42. package/dist/src/types.js +4 -2
  43. package/dist/src/types.js.map +1 -1
  44. package/dist/src/utils/logger.js +5 -3
  45. package/dist/src/utils/logger.js.map +1 -1
  46. package/dist/src/utils/mcp.js +4 -2
  47. package/dist/src/utils/mcp.js.map +1 -1
  48. package/dist/src/workflow-registry.js +4 -3
  49. package/dist/src/workflow-registry.js.map +1 -1
  50. package/dist/templates/plan-template.md +45 -0
  51. package/package.json +8 -2
  52. package/src/agent.ts +41 -8
  53. package/src/event-transformer.ts +61 -7
  54. package/src/posthog-api.ts +79 -0
  55. package/src/stage-executor.ts +24 -8
  56. package/src/task-progress-reporter.ts +287 -0
  57. package/src/template-manager.ts +11 -3
  58. package/dist/example.js +0 -49
  59. package/dist/example.js.map +0 -1
  60. package/dist/src/workflow-types.js +0 -2
  61. package/dist/src/workflow-types.js.map +0 -1
@@ -26,6 +26,36 @@ interface TaskProgressResponse {
26
26
  message?: string;
27
27
  }
28
28
 
29
+ export interface TaskProgressRecord {
30
+ id: string;
31
+ task: string;
32
+ status: "started" | "in_progress" | "completed" | "failed";
33
+ current_step?: string | null;
34
+ completed_steps?: number | null;
35
+ total_steps?: number | null;
36
+ progress_percentage?: number | null;
37
+ output_log?: string | null;
38
+ error_message?: string | null;
39
+ workflow_id?: string | null;
40
+ workflow_run_id?: string | null;
41
+ activity_id?: string | null;
42
+ created_at: string;
43
+ updated_at: string;
44
+ completed_at?: string | null;
45
+ }
46
+
47
+ export interface TaskProgressUpdate {
48
+ status?: TaskProgressRecord["status"];
49
+ current_step?: string | null;
50
+ completed_steps?: number | null;
51
+ total_steps?: number | null;
52
+ output_log?: string | null;
53
+ error_message?: string | null;
54
+ workflow_id?: string | null;
55
+ workflow_run_id?: string | null;
56
+ activity_id?: string | null;
57
+ }
58
+
29
59
  export class PostHogAPIClient {
30
60
  private config: PostHogAPIConfig;
31
61
  private _teamId: number | null = null;
@@ -137,11 +167,60 @@ export class PostHogAPIClient {
137
167
  });
138
168
  }
139
169
 
170
+ async setTaskBranch(taskId: string, branch: string): Promise<Task> {
171
+ const teamId = await this.getTeamId();
172
+ return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/set_branch/`, {
173
+ method: "POST",
174
+ body: JSON.stringify({ branch }),
175
+ });
176
+ }
177
+
178
+ async attachTaskPullRequest(taskId: string, prUrl: string, branch?: string): Promise<Task> {
179
+ const teamId = await this.getTeamId();
180
+ const payload: Record<string, string> = { pr_url: prUrl };
181
+ if (branch) {
182
+ payload.branch = branch;
183
+ }
184
+ return this.apiRequest<Task>(`/api/projects/${teamId}/tasks/${taskId}/attach_pr/`, {
185
+ method: "POST",
186
+ body: JSON.stringify(payload),
187
+ });
188
+ }
189
+
140
190
  async getTaskProgress(taskId: string): Promise<TaskProgressResponse> {
141
191
  const teamId = await this.getTeamId();
142
192
  return this.apiRequest<TaskProgressResponse>(`/api/projects/${teamId}/tasks/${taskId}/progress/`);
143
193
  }
144
194
 
195
+ async createTaskProgress(
196
+ taskId: string,
197
+ payload: TaskProgressUpdate & { status: TaskProgressRecord["status"] }
198
+ ): Promise<TaskProgressRecord> {
199
+ const teamId = await this.getTeamId();
200
+ return this.apiRequest<TaskProgressRecord>(`/api/projects/${teamId}/task_progress/`, {
201
+ method: "POST",
202
+ body: JSON.stringify({
203
+ ...payload,
204
+ task: taskId,
205
+ }),
206
+ });
207
+ }
208
+
209
+ async updateTaskProgress(
210
+ taskId: string,
211
+ progressId: string,
212
+ payload: TaskProgressUpdate
213
+ ): Promise<TaskProgressRecord> {
214
+ const teamId = await this.getTeamId();
215
+ return this.apiRequest<TaskProgressRecord>(`/api/projects/${teamId}/task_progress/${progressId}/`, {
216
+ method: "PATCH",
217
+ body: JSON.stringify({
218
+ ...payload,
219
+ task: taskId,
220
+ }),
221
+ });
222
+ }
223
+
145
224
  // Workflow endpoints
146
225
  async fetchWorkflow(workflowId: string): Promise<WorkflowDefinition> {
147
226
  const teamId = await this.getTeamId();
@@ -2,7 +2,7 @@ import { query } from '@anthropic-ai/claude-agent-sdk';
2
2
  import { Logger } from './utils/logger.js';
3
3
  import { EventTransformer } from './event-transformer.js';
4
4
  import { AgentRegistry } from './agent-registry.js';
5
- import type { Task } from './types.js';
5
+ import type { AgentEvent, Task } from './types.js';
6
6
  import type { WorkflowStage, WorkflowStageExecutionResult, WorkflowExecutionOptions } from './workflow-types.js';
7
7
  import { PLANNING_SYSTEM_PROMPT } from './agents/planning.js';
8
8
  import { EXECUTION_SYSTEM_PROMPT } from './agents/execution.js';
@@ -14,8 +14,14 @@ export class StageExecutor {
14
14
  private logger: Logger;
15
15
  private eventTransformer: EventTransformer;
16
16
  private promptBuilder: PromptBuilder;
17
-
18
- constructor(registry: AgentRegistry, logger: Logger, promptBuilder?: PromptBuilder) {
17
+ private eventHandler?: (event: AgentEvent) => void;
18
+
19
+ constructor(
20
+ registry: AgentRegistry,
21
+ logger: Logger,
22
+ promptBuilder?: PromptBuilder,
23
+ eventHandler?: (event: AgentEvent) => void,
24
+ ) {
19
25
  this.registry = registry;
20
26
  this.logger = logger.child('StageExecutor');
21
27
  this.eventTransformer = new EventTransformer();
@@ -24,6 +30,11 @@ export class StageExecutor {
24
30
  generatePlanTemplate: async () => '',
25
31
  logger,
26
32
  });
33
+ this.eventHandler = eventHandler;
34
+ }
35
+
36
+ setEventHandler(handler?: (event: AgentEvent) => void): void {
37
+ this.eventHandler = handler;
27
38
  }
28
39
 
29
40
  async execute(task: Task, stage: WorkflowStage, options: WorkflowExecutionOptions): Promise<WorkflowStageExecutionResult> {
@@ -85,8 +96,11 @@ export class StageExecutor {
85
96
  let plan = '';
86
97
  for await (const message of response) {
87
98
  const transformed = this.eventTransformer.transform(message);
88
- if (transformed && transformed.type !== 'token') {
89
- this.logger.debug('Planning event', { type: transformed.type });
99
+ if (transformed) {
100
+ if (transformed.type !== 'token') {
101
+ this.logger.debug('Planning event', { type: transformed.type });
102
+ }
103
+ this.eventHandler?.(transformed);
90
104
  }
91
105
  if (message.type === 'assistant' && message.message?.content) {
92
106
  for (const c of message.message.content) {
@@ -125,12 +139,14 @@ export class StageExecutor {
125
139
  const results: any[] = [];
126
140
  for await (const message of response) {
127
141
  const transformed = this.eventTransformer.transform(message);
128
- if (transformed && transformed.type !== 'token') {
129
- this.logger.debug('Execution event', { type: transformed.type });
142
+ if (transformed) {
143
+ if (transformed.type !== 'token') {
144
+ this.logger.debug('Execution event', { type: transformed.type });
145
+ }
146
+ this.eventHandler?.(transformed);
130
147
  }
131
148
  results.push(message);
132
149
  }
133
150
  return { results };
134
151
  }
135
152
  }
136
-
@@ -0,0 +1,287 @@
1
+ import type { Logger } from './utils/logger.js';
2
+ import type { PostHogAPIClient, TaskProgressRecord, TaskProgressUpdate } from './posthog-api.js';
3
+ import type { AgentEvent } from './types.js';
4
+
5
+ interface ProgressMetadata {
6
+ workflowId?: string;
7
+ workflowRunId?: string;
8
+ activityId?: string;
9
+ totalSteps?: number;
10
+ }
11
+
12
+ /**
13
+ * Persists task execution progress to PostHog so clients can poll for updates.
14
+ *
15
+ * The reporter is intentionally best-effort – failures are logged but never
16
+ * allowed to break the agent execution flow.
17
+ */
18
+ export class TaskProgressReporter {
19
+ private posthogAPI?: PostHogAPIClient;
20
+ private logger: Logger;
21
+ private progressRecord?: TaskProgressRecord;
22
+ private taskId?: string;
23
+ private outputLog: string[] = [];
24
+ private totalSteps?: number;
25
+ private lastLogEntry?: string;
26
+
27
+ constructor(posthogAPI: PostHogAPIClient | undefined, logger: Logger) {
28
+ this.posthogAPI = posthogAPI;
29
+ this.logger = logger.child('TaskProgressReporter');
30
+ }
31
+
32
+ get progressId(): string | undefined {
33
+ return this.progressRecord?.id;
34
+ }
35
+
36
+ async start(taskId: string, metadata: ProgressMetadata = {}): Promise<void> {
37
+ if (!this.posthogAPI) {
38
+ return;
39
+ }
40
+
41
+ this.taskId = taskId;
42
+ this.totalSteps = metadata.totalSteps;
43
+
44
+ try {
45
+ const record = await this.posthogAPI.createTaskProgress(taskId, {
46
+ status: 'started',
47
+ current_step: 'initializing',
48
+ total_steps: metadata.totalSteps ?? 0,
49
+ completed_steps: 0,
50
+ workflow_id: metadata.workflowId,
51
+ workflow_run_id: metadata.workflowRunId,
52
+ activity_id: metadata.activityId,
53
+ output_log: '',
54
+ });
55
+ this.progressRecord = record;
56
+ this.outputLog = record.output_log ? record.output_log.split('\n') : [];
57
+ this.logger.debug('Created task progress record', { taskId, progressId: record.id });
58
+ } catch (error) {
59
+ this.logger.warn('Failed to create task progress record', { taskId, error: (error as Error).message });
60
+ }
61
+ }
62
+
63
+ async stageStarted(stageKey: string, stageIndex: number): Promise<void> {
64
+ await this.update({
65
+ status: 'in_progress',
66
+ current_step: stageKey,
67
+ completed_steps: Math.min(stageIndex, this.totalSteps ?? stageIndex),
68
+ }, `Stage started: ${stageKey}`);
69
+ }
70
+
71
+ async stageCompleted(stageKey: string, completedStages: number): Promise<void> {
72
+ await this.update({
73
+ status: 'in_progress',
74
+ current_step: stageKey,
75
+ completed_steps: Math.min(completedStages, this.totalSteps ?? completedStages),
76
+ }, `Stage completed: ${stageKey}`);
77
+ }
78
+
79
+ async branchCreated(stageKey: string, branchName: string): Promise<void> {
80
+ await this.appendLog(`Branch created (${stageKey}): ${branchName}`);
81
+ }
82
+
83
+ async commitMade(stageKey: string, kind: 'plan' | 'implementation'): Promise<void> {
84
+ await this.appendLog(`Commit made (${stageKey}, ${kind})`);
85
+ }
86
+
87
+ async pullRequestCreated(stageKey: string, prUrl: string): Promise<void> {
88
+ await this.appendLog(`Pull request created (${stageKey}): ${prUrl}`);
89
+ }
90
+
91
+ async noNextStage(stageKey?: string): Promise<void> {
92
+ await this.appendLog(
93
+ stageKey
94
+ ? `No next stage available after '${stageKey}'. Execution halted.`
95
+ : 'No next stage available. Execution halted.'
96
+ );
97
+ }
98
+
99
+ async complete(): Promise<void> {
100
+ await this.update({ status: 'completed', completed_steps: this.totalSteps }, 'Workflow execution completed');
101
+ }
102
+
103
+ async fail(error: Error | string): Promise<void> {
104
+ const message = typeof error === 'string' ? error : error.message;
105
+ await this.update({ status: 'failed', error_message: message }, `Workflow execution failed: ${message}`);
106
+ }
107
+
108
+ async appendLog(line: string): Promise<void> {
109
+ await this.update({}, line);
110
+ }
111
+
112
+ async recordEvent(event: AgentEvent): Promise<void> {
113
+ if (!this.posthogAPI || !this.progressId || !this.taskId) {
114
+ return;
115
+ }
116
+
117
+ switch (event.type) {
118
+ case 'token':
119
+ case 'message_delta':
120
+ case 'content_block_start':
121
+ case 'content_block_stop':
122
+ case 'compact_boundary':
123
+ case 'tool_call':
124
+ case 'tool_result':
125
+ case 'message_start':
126
+ case 'message_stop':
127
+ case 'metric':
128
+ case 'artifact':
129
+ // Skip verbose streaming artifacts from persistence
130
+ return;
131
+
132
+ case 'file_write':
133
+ await this.appendLog(this.formatFileWriteEvent(event));
134
+ return;
135
+
136
+ case 'diff':
137
+ await this.appendLog(this.formatDiffEvent(event));
138
+ return;
139
+
140
+ case 'status':
141
+ // Status events are covered by dedicated progress updates
142
+ return;
143
+
144
+ case 'error':
145
+ await this.appendLog(`[error] ${event.message}`);
146
+ return;
147
+
148
+ case 'done': {
149
+ const cost = event.totalCostUsd !== undefined ? ` cost=$${event.totalCostUsd.toFixed(2)}` : '';
150
+ await this.appendLog(
151
+ `[done] duration=${event.durationMs ?? 'unknown'}ms turns=${event.numTurns ?? 'unknown'}${cost}`
152
+ );
153
+ return;
154
+ }
155
+
156
+ case 'init':
157
+ // Omit verbose init messages from persisted log
158
+ return;
159
+
160
+ case 'user_message': {
161
+ const summary = this.summarizeUserMessage(event.content);
162
+ if (summary) {
163
+ await this.appendLog(summary);
164
+ }
165
+ return;
166
+ }
167
+
168
+ default:
169
+ // For any unfamiliar event types, avoid spamming the log.
170
+ return;
171
+ }
172
+ }
173
+
174
+ private async update(update: TaskProgressUpdate, logLine?: string): Promise<void> {
175
+ if (!this.posthogAPI || !this.progressId || !this.taskId) {
176
+ return;
177
+ }
178
+
179
+ if (logLine) {
180
+ if (logLine !== this.lastLogEntry) {
181
+ this.outputLog.push(logLine);
182
+ this.lastLogEntry = logLine;
183
+ }
184
+ update.output_log = this.outputLog.join('\n');
185
+ }
186
+
187
+ try {
188
+ const record = await this.posthogAPI.updateTaskProgress(this.taskId, this.progressId, update);
189
+ // Sync local cache with server response to avoid drift if server modifies values
190
+ this.progressRecord = record;
191
+ if (record.output_log !== undefined && record.output_log !== null) {
192
+ this.outputLog = record.output_log ? record.output_log.split('\n') : [];
193
+ }
194
+ } catch (error) {
195
+ this.logger.warn('Failed to update task progress record', {
196
+ taskId: this.taskId,
197
+ progressId: this.progressId,
198
+ error: (error as Error).message,
199
+ });
200
+ }
201
+ }
202
+
203
+ private summarizeUserMessage(content?: string): string | null {
204
+ if (!content) {
205
+ return null;
206
+ }
207
+ const trimmed = content.trim();
208
+ if (!trimmed) {
209
+ return null;
210
+ }
211
+
212
+ const fileUpdateMatch = trimmed.match(/The file\s+([^\s]+)\s+has been updated/i);
213
+ if (fileUpdateMatch) {
214
+ return `[user] file updated: ${fileUpdateMatch[1]}`;
215
+ }
216
+
217
+ if (/Todos have been modified/i.test(trimmed)) {
218
+ return '[todo] list updated';
219
+ }
220
+
221
+ const diffMatch = trimmed.match(/diff --git a\/([^\s]+) b\/([^\s]+)/);
222
+ if (diffMatch) {
223
+ return `[diff] ${diffMatch[2] ?? diffMatch[1]}`;
224
+ }
225
+
226
+ const gitStatusMatch = trimmed.match(/^On branch ([^\n]+)/);
227
+ if (gitStatusMatch) {
228
+ return `[git] status ${gitStatusMatch[1]}`;
229
+ }
230
+
231
+ if (/This Bash command contains multiple operations/i.test(trimmed)) {
232
+ return '[approval] multi-step command pending';
233
+ }
234
+
235
+ if (/This command requires approval/i.test(trimmed)) {
236
+ return '[approval] command awaiting approval';
237
+ }
238
+
239
+ if (/^Exit plan mode\?/i.test(trimmed)) {
240
+ return null;
241
+ }
242
+
243
+ if (trimmed.includes('node_modules')) {
244
+ return null;
245
+ }
246
+
247
+ if (trimmed.includes('total ') && trimmed.includes('drwx')) {
248
+ return null;
249
+ }
250
+
251
+ if (trimmed.includes('→')) {
252
+ return null;
253
+ }
254
+
255
+ if (trimmed.split('\n').length > 2) {
256
+ return null;
257
+ }
258
+
259
+ const normalized = trimmed.replace(/\s+/g, ' ');
260
+ const maxLen = 120;
261
+ if (!normalized) {
262
+ return null;
263
+ }
264
+ const preview = normalized.length > maxLen ? `${normalized.slice(0, maxLen)}…` : normalized;
265
+ return `[user] ${preview}`;
266
+ }
267
+
268
+ private formatFileWriteEvent(event: Extract<AgentEvent, { type: 'file_write' }>): string {
269
+ const size = event.bytes !== undefined ? ` (${event.bytes} bytes)` : '';
270
+ return `[file] wrote ${event.path}${size}`;
271
+ }
272
+
273
+ private formatDiffEvent(event: Extract<AgentEvent, { type: 'diff' }>): string {
274
+ const summary = event.summary
275
+ ? event.summary.trim()
276
+ : this.truncateMultiline(event.patch ?? '', 160);
277
+ return `[diff] ${event.file}${summary ? ` | ${summary}` : ''}`;
278
+ }
279
+
280
+ private truncateMultiline(text: string, max = 160): string {
281
+ if (!text) {
282
+ return '';
283
+ }
284
+ const compact = text.replace(/\s+/g, ' ').trim();
285
+ return compact.length > max ? `${compact.slice(0, max)}…` : compact;
286
+ }
287
+ }
@@ -1,4 +1,4 @@
1
- import { promises as fs } from 'fs';
1
+ import { promises as fs, existsSync } from 'fs';
2
2
  import { join, dirname } from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
 
@@ -17,7 +17,15 @@ export class TemplateManager {
17
17
  constructor() {
18
18
  const __filename = fileURLToPath(import.meta.url);
19
19
  const __dirname = dirname(__filename);
20
- this.templatesDir = join(__dirname, 'templates');
20
+ const candidateDirs = [
21
+ join(__dirname, 'templates'),
22
+ join(__dirname, '..', 'templates'),
23
+ join(__dirname, '..', '..', 'templates'),
24
+ join(__dirname, '..', '..', 'src', 'templates')
25
+ ];
26
+
27
+ const resolvedDir = candidateDirs.find((dir) => existsSync(dir));
28
+ this.templatesDir = resolvedDir ?? candidateDirs[0];
21
29
  }
22
30
 
23
31
  private async loadTemplate(templateName: string): Promise<string> {
@@ -146,4 +154,4 @@ Customize \`.posthog/.gitignore\` to control which files are committed:
146
154
  *Generated by PostHog Agent*
147
155
  `;
148
156
  }
149
- }
157
+ }
package/dist/example.js DELETED
@@ -1,49 +0,0 @@
1
- #!/usr/bin/env bun
2
- import { config } from "dotenv";
3
- config();
4
- import { Agent, PermissionMode } from './src/agent.js';
5
- async function testAgent() {
6
- const REPO_PATH = process.argv[2] || process.cwd();
7
- const TASK_ID = process.argv[3];
8
- if (!process.env.POSTHOG_API_KEY) {
9
- console.error("❌ POSTHOG_API_KEY required");
10
- process.exit(1);
11
- }
12
- console.log(`📁 Working in: ${REPO_PATH}`);
13
- const agent = new Agent({
14
- workingDirectory: REPO_PATH,
15
- posthogApiUrl: process.env.POSTHOG_API_URL || "http://localhost:8010",
16
- posthogApiKey: process.env.POSTHOG_API_KEY,
17
- onEvent: (event) => {
18
- console.log(`[${event.type}]`, event);
19
- },
20
- debug: true,
21
- });
22
- if (TASK_ID) {
23
- console.log(`🎯 Running task: ${TASK_ID}`);
24
- try {
25
- // Example: list and run a workflow
26
- await agent['workflowRegistry'].loadWorkflows();
27
- const workflows = agent['workflowRegistry'].listWorkflows();
28
- if (workflows.length === 0) {
29
- throw new Error('No workflows available');
30
- }
31
- const selectedWorkflow = workflows[0];
32
- const options = {
33
- repositoryPath: REPO_PATH,
34
- permissionMode: PermissionMode.ACCEPT_EDITS,
35
- autoProgress: true,
36
- };
37
- const result = await agent.runWorkflow(TASK_ID, selectedWorkflow.id, options);
38
- console.log("✅ Done!");
39
- console.log(`📁 Plan stored in: .posthog/${TASK_ID}/plan.md`);
40
- }
41
- finally {
42
- }
43
- }
44
- else {
45
- console.log("❌ Please provide a task ID");
46
- }
47
- }
48
- testAgent().catch(console.error);
49
- //# sourceMappingURL=example.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.js","sourceRoot":"","sources":["../example.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,MAAM,EAAE,CAAC;AAET,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGvD,KAAK,UAAU,SAAS;IACpB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACpB,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;QACrE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QAC1C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC;YACD,mCAAmC;YACnC,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,aAAa,EAAE,CAAC;YAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,OAAO,GAA6B;gBACtC,cAAc,EAAE,SAAS;gBACzB,cAAc,EAAE,cAAc,CAAC,YAAY;gBAC3C,YAAY,EAAE,IAAI;aACrB,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,UAAU,CAAC,CAAC;QAClE,CAAC;gBAAS,CAAC;QACX,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC9C,CAAC;AACL,CAAC;AAED,SAAS,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=workflow-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-types.js","sourceRoot":"","sources":["../../src/workflow-types.ts"],"names":[],"mappings":""}