@agent-vm/agent-vm-worker 0.0.20

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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/dist/config/worker-config.d.ts +158 -0
  3. package/dist/config/worker-config.d.ts.map +1 -0
  4. package/dist/config/worker-config.js +280 -0
  5. package/dist/config/worker-config.js.map +1 -0
  6. package/dist/context/gather-context.d.ts +9 -0
  7. package/dist/context/gather-context.d.ts.map +1 -0
  8. package/dist/context/gather-context.js +72 -0
  9. package/dist/context/gather-context.js.map +1 -0
  10. package/dist/coordinator/coordinator-helpers.d.ts +13 -0
  11. package/dist/coordinator/coordinator-helpers.d.ts.map +1 -0
  12. package/dist/coordinator/coordinator-helpers.js +63 -0
  13. package/dist/coordinator/coordinator-helpers.js.map +1 -0
  14. package/dist/coordinator/coordinator-types.d.ts +25 -0
  15. package/dist/coordinator/coordinator-types.d.ts.map +1 -0
  16. package/dist/coordinator/coordinator-types.js +2 -0
  17. package/dist/coordinator/coordinator-types.js.map +1 -0
  18. package/dist/coordinator/coordinator.d.ts +4 -0
  19. package/dist/coordinator/coordinator.d.ts.map +1 -0
  20. package/dist/coordinator/coordinator.js +74 -0
  21. package/dist/coordinator/coordinator.js.map +1 -0
  22. package/dist/coordinator/task-runner.d.ts +5 -0
  23. package/dist/coordinator/task-runner.d.ts.map +1 -0
  24. package/dist/coordinator/task-runner.js +310 -0
  25. package/dist/coordinator/task-runner.js.map +1 -0
  26. package/dist/git/git-operations.d.ts +33 -0
  27. package/dist/git/git-operations.d.ts.map +1 -0
  28. package/dist/git/git-operations.js +109 -0
  29. package/dist/git/git-operations.js.map +1 -0
  30. package/dist/index.d.ts +25 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +23 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/main.d.ts +11 -0
  35. package/dist/main.d.ts.map +1 -0
  36. package/dist/main.js +140 -0
  37. package/dist/main.js.map +1 -0
  38. package/dist/plan-phase/plan-cycle.d.ts +27 -0
  39. package/dist/plan-phase/plan-cycle.d.ts.map +1 -0
  40. package/dist/plan-phase/plan-cycle.js +83 -0
  41. package/dist/plan-phase/plan-cycle.js.map +1 -0
  42. package/dist/prompt/message-builders.d.ts +44 -0
  43. package/dist/prompt/message-builders.d.ts.map +1 -0
  44. package/dist/prompt/message-builders.js +83 -0
  45. package/dist/prompt/message-builders.js.map +1 -0
  46. package/dist/prompt/prompt-assembler.d.ts +11 -0
  47. package/dist/prompt/prompt-assembler.d.ts.map +1 -0
  48. package/dist/prompt/prompt-assembler.js +34 -0
  49. package/dist/prompt/prompt-assembler.js.map +1 -0
  50. package/dist/prompt/prompt-defaults.d.ts +10 -0
  51. package/dist/prompt/prompt-defaults.d.ts.map +1 -0
  52. package/dist/prompt/prompt-defaults.js +200 -0
  53. package/dist/prompt/prompt-defaults.js.map +1 -0
  54. package/dist/server.d.ts +32 -0
  55. package/dist/server.d.ts.map +1 -0
  56. package/dist/server.js +75 -0
  57. package/dist/server.js.map +1 -0
  58. package/dist/shared/phase-names.d.ts +8 -0
  59. package/dist/shared/phase-names.d.ts.map +1 -0
  60. package/dist/shared/phase-names.js +11 -0
  61. package/dist/shared/phase-names.js.map +1 -0
  62. package/dist/shared/repo-location.d.ts +13 -0
  63. package/dist/shared/repo-location.d.ts.map +1 -0
  64. package/dist/shared/repo-location.js +9 -0
  65. package/dist/shared/repo-location.js.map +1 -0
  66. package/dist/shared/review-result.d.ts +17 -0
  67. package/dist/shared/review-result.d.ts.map +1 -0
  68. package/dist/shared/review-result.js +12 -0
  69. package/dist/shared/review-result.js.map +1 -0
  70. package/dist/shared/skill-types.d.ts +7 -0
  71. package/dist/shared/skill-types.d.ts.map +1 -0
  72. package/dist/shared/skill-types.js +6 -0
  73. package/dist/shared/skill-types.js.map +1 -0
  74. package/dist/shared/stderr.d.ts +2 -0
  75. package/dist/shared/stderr.d.ts.map +1 -0
  76. package/dist/shared/stderr.js +4 -0
  77. package/dist/shared/stderr.js.map +1 -0
  78. package/dist/state/event-log.d.ts +4 -0
  79. package/dist/state/event-log.d.ts.map +1 -0
  80. package/dist/state/event-log.js +67 -0
  81. package/dist/state/event-log.js.map +1 -0
  82. package/dist/state/task-event-types.d.ts +280 -0
  83. package/dist/state/task-event-types.d.ts.map +1 -0
  84. package/dist/state/task-event-types.js +106 -0
  85. package/dist/state/task-event-types.js.map +1 -0
  86. package/dist/state/task-state.d.ts +35 -0
  87. package/dist/state/task-state.d.ts.map +1 -0
  88. package/dist/state/task-state.js +191 -0
  89. package/dist/state/task-state.js.map +1 -0
  90. package/dist/validation-runner/verification-runner.d.ts +30 -0
  91. package/dist/validation-runner/verification-runner.d.ts.map +1 -0
  92. package/dist/validation-runner/verification-runner.js +196 -0
  93. package/dist/validation-runner/verification-runner.js.map +1 -0
  94. package/dist/work-executor/codex-executor.d.ts +9 -0
  95. package/dist/work-executor/codex-executor.d.ts.map +1 -0
  96. package/dist/work-executor/codex-executor.js +159 -0
  97. package/dist/work-executor/codex-executor.js.map +1 -0
  98. package/dist/work-executor/executor-factory.d.ts +4 -0
  99. package/dist/work-executor/executor-factory.d.ts.map +1 -0
  100. package/dist/work-executor/executor-factory.js +17 -0
  101. package/dist/work-executor/executor-factory.js.map +1 -0
  102. package/dist/work-executor/executor-interface.d.ts +33 -0
  103. package/dist/work-executor/executor-interface.d.ts.map +1 -0
  104. package/dist/work-executor/executor-interface.js +2 -0
  105. package/dist/work-executor/executor-interface.js.map +1 -0
  106. package/dist/work-executor/local-tool-mcp-server.d.ts +8 -0
  107. package/dist/work-executor/local-tool-mcp-server.d.ts.map +1 -0
  108. package/dist/work-executor/local-tool-mcp-server.js +187 -0
  109. package/dist/work-executor/local-tool-mcp-server.js.map +1 -0
  110. package/dist/work-executor/persistent-thread.d.ts +16 -0
  111. package/dist/work-executor/persistent-thread.d.ts.map +1 -0
  112. package/dist/work-executor/persistent-thread.js +37 -0
  113. package/dist/work-executor/persistent-thread.js.map +1 -0
  114. package/dist/work-phase/controller-tools/controller-tool-support.d.ts +19 -0
  115. package/dist/work-phase/controller-tools/controller-tool-support.d.ts.map +1 -0
  116. package/dist/work-phase/controller-tools/controller-tool-support.js +92 -0
  117. package/dist/work-phase/controller-tools/controller-tool-support.js.map +1 -0
  118. package/dist/work-phase/controller-tools/git-pull-default-tool.d.ts +10 -0
  119. package/dist/work-phase/controller-tools/git-pull-default-tool.d.ts.map +1 -0
  120. package/dist/work-phase/controller-tools/git-pull-default-tool.js +36 -0
  121. package/dist/work-phase/controller-tools/git-pull-default-tool.js.map +1 -0
  122. package/dist/work-phase/controller-tools/git-push-tool.d.ts +10 -0
  123. package/dist/work-phase/controller-tools/git-push-tool.d.ts.map +1 -0
  124. package/dist/work-phase/controller-tools/git-push-tool.js +45 -0
  125. package/dist/work-phase/controller-tools/git-push-tool.js.map +1 -0
  126. package/dist/work-phase/validation-tool.d.ts +11 -0
  127. package/dist/work-phase/validation-tool.d.ts.map +1 -0
  128. package/dist/work-phase/validation-tool.js +25 -0
  129. package/dist/work-phase/validation-tool.js.map +1 -0
  130. package/dist/work-phase/work-cycle.d.ts +28 -0
  131. package/dist/work-phase/work-cycle.d.ts.map +1 -0
  132. package/dist/work-phase/work-cycle.js +122 -0
  133. package/dist/work-phase/work-cycle.js.map +1 -0
  134. package/dist/wrapup-phase/wrapup-runner.d.ts +30 -0
  135. package/dist/wrapup-phase/wrapup-runner.d.ts.map +1 -0
  136. package/dist/wrapup-phase/wrapup-runner.js +91 -0
  137. package/dist/wrapup-phase/wrapup-runner.js.map +1 -0
  138. package/package.json +57 -0
@@ -0,0 +1,280 @@
1
+ import { z } from 'zod';
2
+ export declare const phaseNameSchema: z.ZodEnum<{
3
+ plan: "plan";
4
+ work: "work";
5
+ wrapup: "wrapup";
6
+ }>;
7
+ export type PhaseName = z.infer<typeof phaseNameSchema>;
8
+ export declare const taskStatusValues: readonly ["pending", "plan-agent", "plan-reviewer", "work-agent", "work-reviewer", "wrapup", "completed", "closed", "failed"];
9
+ export declare const taskStatusSchema: z.ZodEnum<{
10
+ wrapup: "wrapup";
11
+ pending: "pending";
12
+ "plan-agent": "plan-agent";
13
+ "plan-reviewer": "plan-reviewer";
14
+ "work-agent": "work-agent";
15
+ "work-reviewer": "work-reviewer";
16
+ completed: "completed";
17
+ closed: "closed";
18
+ failed: "failed";
19
+ }>;
20
+ export type TaskStatus = z.infer<typeof taskStatusSchema>;
21
+ export declare const TERMINAL_STATUSES: readonly ["completed", "closed", "failed"];
22
+ export declare const taskConfigSchema: z.ZodObject<{
23
+ taskId: z.ZodString;
24
+ prompt: z.ZodString;
25
+ repos: z.ZodArray<z.ZodObject<{
26
+ repoUrl: z.ZodString;
27
+ baseBranch: z.ZodString;
28
+ workspacePath: z.ZodString;
29
+ }, z.core.$strip>>;
30
+ context: z.ZodRecord<z.ZodString, z.ZodUnknown>;
31
+ effectiveConfig: z.ZodObject<{
32
+ instructions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>;
33
+ defaults: z.ZodDefault<z.ZodObject<{
34
+ provider: z.ZodDefault<z.ZodString>;
35
+ model: z.ZodDefault<z.ZodString>;
36
+ }, z.core.$strip>>;
37
+ phases: z.ZodObject<{
38
+ plan: z.ZodObject<{
39
+ cycle: z.ZodDiscriminatedUnion<[z.ZodObject<{
40
+ kind: z.ZodLiteral<"noReview">;
41
+ }, z.core.$strip>, z.ZodObject<{
42
+ kind: z.ZodLiteral<"review">;
43
+ cycleCount: z.ZodNumber;
44
+ }, z.core.$strip>], "kind">;
45
+ agentInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
46
+ reviewerInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
47
+ agentTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
48
+ reviewerTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
49
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
50
+ name: z.ZodString;
51
+ path: z.ZodString;
52
+ }, z.core.$strip>>>;
53
+ provider: z.ZodOptional<z.ZodString>;
54
+ model: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strip>;
56
+ work: z.ZodObject<{
57
+ cycle: z.ZodObject<{
58
+ kind: z.ZodLiteral<"review">;
59
+ cycleCount: z.ZodNumber;
60
+ }, z.core.$strip>;
61
+ agentInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
62
+ reviewerInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
63
+ agentTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
64
+ reviewerTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
65
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
66
+ name: z.ZodString;
67
+ path: z.ZodString;
68
+ }, z.core.$strip>>>;
69
+ provider: z.ZodOptional<z.ZodString>;
70
+ model: z.ZodOptional<z.ZodString>;
71
+ }, z.core.$strip>;
72
+ wrapup: z.ZodObject<{
73
+ instructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
74
+ turnTimeoutMs: z.ZodDefault<z.ZodNumber>;
75
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
76
+ name: z.ZodString;
77
+ path: z.ZodString;
78
+ }, z.core.$strip>>>;
79
+ provider: z.ZodOptional<z.ZodString>;
80
+ model: z.ZodOptional<z.ZodString>;
81
+ }, z.core.$strip>;
82
+ }, z.core.$strict>;
83
+ mcpServers: z.ZodDefault<z.ZodArray<z.ZodObject<{
84
+ name: z.ZodString;
85
+ url: z.ZodString;
86
+ }, z.core.$strip>>>;
87
+ verification: z.ZodDefault<z.ZodArray<z.ZodObject<{
88
+ name: z.ZodString;
89
+ command: z.ZodString;
90
+ }, z.core.$strip>>>;
91
+ verificationTimeoutMs: z.ZodDefault<z.ZodNumber>;
92
+ branchPrefix: z.ZodDefault<z.ZodString>;
93
+ stateDir: z.ZodDefault<z.ZodString>;
94
+ }, z.core.$strict>;
95
+ }, z.core.$strip>;
96
+ export type TaskConfig = z.infer<typeof taskConfigSchema>;
97
+ export declare const verificationCommandResultSchema: z.ZodObject<{
98
+ name: z.ZodString;
99
+ passed: z.ZodBoolean;
100
+ exitCode: z.ZodNumber;
101
+ output: z.ZodString;
102
+ logPath: z.ZodOptional<z.ZodString>;
103
+ }, z.core.$strip>;
104
+ export type VerificationCommandResult = z.infer<typeof verificationCommandResultSchema>;
105
+ export declare const taskEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
106
+ event: z.ZodLiteral<"task-accepted">;
107
+ taskId: z.ZodString;
108
+ config: z.ZodObject<{
109
+ taskId: z.ZodString;
110
+ prompt: z.ZodString;
111
+ repos: z.ZodArray<z.ZodObject<{
112
+ repoUrl: z.ZodString;
113
+ baseBranch: z.ZodString;
114
+ workspacePath: z.ZodString;
115
+ }, z.core.$strip>>;
116
+ context: z.ZodRecord<z.ZodString, z.ZodUnknown>;
117
+ effectiveConfig: z.ZodObject<{
118
+ instructions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>;
119
+ defaults: z.ZodDefault<z.ZodObject<{
120
+ provider: z.ZodDefault<z.ZodString>;
121
+ model: z.ZodDefault<z.ZodString>;
122
+ }, z.core.$strip>>;
123
+ phases: z.ZodObject<{
124
+ plan: z.ZodObject<{
125
+ cycle: z.ZodDiscriminatedUnion<[z.ZodObject<{
126
+ kind: z.ZodLiteral<"noReview">;
127
+ }, z.core.$strip>, z.ZodObject<{
128
+ kind: z.ZodLiteral<"review">;
129
+ cycleCount: z.ZodNumber;
130
+ }, z.core.$strip>], "kind">;
131
+ agentInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
132
+ reviewerInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
133
+ agentTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
134
+ reviewerTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
135
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
136
+ name: z.ZodString;
137
+ path: z.ZodString;
138
+ }, z.core.$strip>>>;
139
+ provider: z.ZodOptional<z.ZodString>;
140
+ model: z.ZodOptional<z.ZodString>;
141
+ }, z.core.$strip>;
142
+ work: z.ZodObject<{
143
+ cycle: z.ZodObject<{
144
+ kind: z.ZodLiteral<"review">;
145
+ cycleCount: z.ZodNumber;
146
+ }, z.core.$strip>;
147
+ agentInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
148
+ reviewerInstructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
149
+ agentTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
150
+ reviewerTurnTimeoutMs: z.ZodDefault<z.ZodNumber>;
151
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
152
+ name: z.ZodString;
153
+ path: z.ZodString;
154
+ }, z.core.$strip>>>;
155
+ provider: z.ZodOptional<z.ZodString>;
156
+ model: z.ZodOptional<z.ZodString>;
157
+ }, z.core.$strip>;
158
+ wrapup: z.ZodObject<{
159
+ instructions: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
160
+ turnTimeoutMs: z.ZodDefault<z.ZodNumber>;
161
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
162
+ name: z.ZodString;
163
+ path: z.ZodString;
164
+ }, z.core.$strip>>>;
165
+ provider: z.ZodOptional<z.ZodString>;
166
+ model: z.ZodOptional<z.ZodString>;
167
+ }, z.core.$strip>;
168
+ }, z.core.$strict>;
169
+ mcpServers: z.ZodDefault<z.ZodArray<z.ZodObject<{
170
+ name: z.ZodString;
171
+ url: z.ZodString;
172
+ }, z.core.$strip>>>;
173
+ verification: z.ZodDefault<z.ZodArray<z.ZodObject<{
174
+ name: z.ZodString;
175
+ command: z.ZodString;
176
+ }, z.core.$strip>>>;
177
+ verificationTimeoutMs: z.ZodDefault<z.ZodNumber>;
178
+ branchPrefix: z.ZodDefault<z.ZodString>;
179
+ stateDir: z.ZodDefault<z.ZodString>;
180
+ }, z.core.$strict>;
181
+ }, z.core.$strip>;
182
+ }, z.core.$strip>, z.ZodObject<{
183
+ event: z.ZodLiteral<"context-gather-failed">;
184
+ reason: z.ZodString;
185
+ }, z.core.$strip>, z.ZodObject<{
186
+ event: z.ZodLiteral<"phase-started">;
187
+ phase: z.ZodEnum<{
188
+ plan: "plan";
189
+ work: "work";
190
+ wrapup: "wrapup";
191
+ }>;
192
+ }, z.core.$strip>, z.ZodObject<{
193
+ event: z.ZodLiteral<"phase-completed">;
194
+ phase: z.ZodEnum<{
195
+ plan: "plan";
196
+ work: "work";
197
+ wrapup: "wrapup";
198
+ }>;
199
+ }, z.core.$strip>, z.ZodObject<{
200
+ event: z.ZodLiteral<"plan-agent-turn">;
201
+ cycle: z.ZodNumber;
202
+ threadId: z.ZodString;
203
+ tokenCount: z.ZodNumber;
204
+ }, z.core.$strip>, z.ZodObject<{
205
+ event: z.ZodLiteral<"plan-reviewer-turn">;
206
+ cycle: z.ZodNumber;
207
+ threadId: z.ZodString;
208
+ tokenCount: z.ZodNumber;
209
+ review: z.ZodObject<{
210
+ approved: z.ZodBoolean;
211
+ comments: z.ZodArray<z.ZodObject<{
212
+ file: z.ZodString;
213
+ line: z.ZodOptional<z.ZodNumber>;
214
+ severity: z.ZodEnum<{
215
+ critical: "critical";
216
+ suggestion: "suggestion";
217
+ nitpick: "nitpick";
218
+ }>;
219
+ comment: z.ZodString;
220
+ }, z.core.$strip>>;
221
+ summary: z.ZodString;
222
+ }, z.core.$strip>;
223
+ }, z.core.$strip>, z.ZodObject<{
224
+ event: z.ZodLiteral<"plan-finalized">;
225
+ plan: z.ZodString;
226
+ }, z.core.$strip>, z.ZodObject<{
227
+ event: z.ZodLiteral<"work-agent-turn">;
228
+ cycle: z.ZodNumber;
229
+ threadId: z.ZodString;
230
+ tokenCount: z.ZodNumber;
231
+ }, z.core.$strip>, z.ZodObject<{
232
+ event: z.ZodLiteral<"work-reviewer-turn">;
233
+ cycle: z.ZodNumber;
234
+ threadId: z.ZodString;
235
+ tokenCount: z.ZodNumber;
236
+ review: z.ZodObject<{
237
+ approved: z.ZodBoolean;
238
+ comments: z.ZodArray<z.ZodObject<{
239
+ file: z.ZodString;
240
+ line: z.ZodOptional<z.ZodNumber>;
241
+ severity: z.ZodEnum<{
242
+ critical: "critical";
243
+ suggestion: "suggestion";
244
+ nitpick: "nitpick";
245
+ }>;
246
+ comment: z.ZodString;
247
+ }, z.core.$strip>>;
248
+ summary: z.ZodString;
249
+ }, z.core.$strip>;
250
+ validationResults: z.ZodArray<z.ZodObject<{
251
+ name: z.ZodString;
252
+ passed: z.ZodBoolean;
253
+ exitCode: z.ZodNumber;
254
+ output: z.ZodString;
255
+ logPath: z.ZodOptional<z.ZodString>;
256
+ }, z.core.$strip>>;
257
+ validationSkipped: z.ZodDefault<z.ZodBoolean>;
258
+ }, z.core.$strip>, z.ZodObject<{
259
+ event: z.ZodLiteral<"wrapup-turn">;
260
+ threadId: z.ZodString;
261
+ tokenCount: z.ZodNumber;
262
+ }, z.core.$strip>, z.ZodObject<{
263
+ event: z.ZodLiteral<"wrapup-result">;
264
+ prUrl: z.ZodNullable<z.ZodString>;
265
+ branchName: z.ZodNullable<z.ZodString>;
266
+ pushedCommits: z.ZodArray<z.ZodString>;
267
+ }, z.core.$strip>, z.ZodObject<{
268
+ event: z.ZodLiteral<"task-completed">;
269
+ }, z.core.$strip>, z.ZodObject<{
270
+ event: z.ZodLiteral<"task-failed">;
271
+ reason: z.ZodString;
272
+ }, z.core.$strip>, z.ZodObject<{
273
+ event: z.ZodLiteral<"task-closed">;
274
+ }, z.core.$strip>], "event">;
275
+ export type TaskEvent = z.infer<typeof taskEventSchema>;
276
+ export interface TimestampedEvent {
277
+ readonly ts: string;
278
+ readonly data: TaskEvent;
279
+ }
280
+ //# sourceMappingURL=task-event-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-event-types.d.ts","sourceRoot":"","sources":["../../src/state/task-event-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,eAAe;;;;EAAqB,CAAC;AAClD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB,+HAUS,CAAC;AAEvC,eAAO,MAAM,gBAAgB;;;;;;;;;;EAA2B,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,iBAAiB,4CAA6C,CAAC;AAE5E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,+BAA+B;;;;;;iBAM1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAuE1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CACzB"}
@@ -0,0 +1,106 @@
1
+ import { z } from 'zod';
2
+ import { workerConfigSchema } from '../config/worker-config.js';
3
+ import { phaseNames } from '../shared/phase-names.js';
4
+ import { repoLocationSchema } from '../shared/repo-location.js';
5
+ import { reviewResultSchema } from '../shared/review-result.js';
6
+ export const phaseNameSchema = z.enum(phaseNames);
7
+ export const taskStatusValues = [
8
+ 'pending',
9
+ 'plan-agent',
10
+ 'plan-reviewer',
11
+ 'work-agent',
12
+ 'work-reviewer',
13
+ 'wrapup',
14
+ 'completed',
15
+ 'closed',
16
+ 'failed',
17
+ ];
18
+ export const taskStatusSchema = z.enum(taskStatusValues);
19
+ export const TERMINAL_STATUSES = ['completed', 'closed', 'failed'];
20
+ export const taskConfigSchema = z.object({
21
+ taskId: z.string().min(1),
22
+ prompt: z.string().min(1),
23
+ repos: z.array(repoLocationSchema),
24
+ context: z.record(z.string(), z.unknown()),
25
+ effectiveConfig: workerConfigSchema,
26
+ });
27
+ export const verificationCommandResultSchema = z.object({
28
+ name: z.string(),
29
+ passed: z.boolean(),
30
+ exitCode: z.number().int(),
31
+ output: z.string(),
32
+ logPath: z.string().optional(),
33
+ });
34
+ export const taskEventSchema = z.discriminatedUnion('event', [
35
+ z.object({
36
+ event: z.literal('task-accepted'),
37
+ taskId: z.string().min(1),
38
+ config: taskConfigSchema,
39
+ }),
40
+ z.object({
41
+ event: z.literal('context-gather-failed'),
42
+ reason: z.string(),
43
+ }),
44
+ z.object({
45
+ event: z.literal('phase-started'),
46
+ phase: phaseNameSchema,
47
+ }),
48
+ z.object({
49
+ event: z.literal('phase-completed'),
50
+ phase: phaseNameSchema,
51
+ }),
52
+ z.object({
53
+ event: z.literal('plan-agent-turn'),
54
+ cycle: z.number().int().nonnegative(),
55
+ threadId: z.string(),
56
+ tokenCount: z.number().int().nonnegative(),
57
+ }),
58
+ z.object({
59
+ event: z.literal('plan-reviewer-turn'),
60
+ cycle: z.number().int().positive(),
61
+ threadId: z.string(),
62
+ tokenCount: z.number().int().nonnegative(),
63
+ review: reviewResultSchema,
64
+ }),
65
+ z.object({
66
+ event: z.literal('plan-finalized'),
67
+ plan: z.string(),
68
+ }),
69
+ z.object({
70
+ event: z.literal('work-agent-turn'),
71
+ cycle: z.number().int().nonnegative(),
72
+ threadId: z.string(),
73
+ tokenCount: z.number().int().nonnegative(),
74
+ }),
75
+ z.object({
76
+ event: z.literal('work-reviewer-turn'),
77
+ cycle: z.number().int().positive(),
78
+ threadId: z.string(),
79
+ tokenCount: z.number().int().nonnegative(),
80
+ review: reviewResultSchema,
81
+ validationResults: z.array(verificationCommandResultSchema),
82
+ validationSkipped: z.boolean().default(false),
83
+ }),
84
+ z.object({
85
+ event: z.literal('wrapup-turn'),
86
+ threadId: z.string(),
87
+ tokenCount: z.number().int().nonnegative(),
88
+ }),
89
+ z.object({
90
+ event: z.literal('wrapup-result'),
91
+ prUrl: z.string().url().nullable(),
92
+ branchName: z.string().nullable(),
93
+ pushedCommits: z.array(z.string()),
94
+ }),
95
+ z.object({
96
+ event: z.literal('task-completed'),
97
+ }),
98
+ z.object({
99
+ event: z.literal('task-failed'),
100
+ reason: z.string(),
101
+ }),
102
+ z.object({
103
+ event: z.literal('task-closed'),
104
+ }),
105
+ ]);
106
+ //# sourceMappingURL=task-event-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-event-types.js","sourceRoot":"","sources":["../../src/state/task-event-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ReviewResult } from '../shared/review-result.js';
2
+ import type { TaskConfig, TaskEvent, TaskStatus, VerificationCommandResult } from './task-event-types.js';
3
+ export interface TaskState {
4
+ readonly taskId: string;
5
+ readonly status: TaskStatus;
6
+ readonly config: TaskConfig;
7
+ readonly failureReason: string | null;
8
+ readonly plan: string | null;
9
+ readonly lastContextError: string | null;
10
+ readonly planAgentThreadId: string | null;
11
+ readonly planReviewerThreadId: string | null;
12
+ readonly workAgentThreadId: string | null;
13
+ readonly workReviewerThreadId: string | null;
14
+ readonly wrapupThreadId: string | null;
15
+ readonly planReviewCycle: number;
16
+ readonly workReviewCycle: number;
17
+ readonly currentCycle: number;
18
+ readonly currentMaxCycles: number;
19
+ readonly lastPlanReview: ReviewResult | null;
20
+ readonly lastWorkReview: ReviewResult | null;
21
+ readonly lastValidationResults: readonly VerificationCommandResult[] | null;
22
+ readonly wrapupResult: {
23
+ readonly prUrl: string | null;
24
+ readonly branchName: string | null;
25
+ readonly pushedCommits: readonly string[];
26
+ } | null;
27
+ readonly createdAt: string;
28
+ readonly updatedAt: string;
29
+ }
30
+ export declare function createInitialState(taskId: string, config: TaskConfig): TaskState;
31
+ export declare function applyEvent(state: TaskState, event: TaskEvent): TaskState;
32
+ export declare function isTerminal(state: TaskState): boolean;
33
+ export declare function loadTaskStateFromLog(filePath: string): Promise<TaskState | null>;
34
+ export declare function hydrateTaskStates(stateDir: string): Promise<Map<string, TaskState>>;
35
+ //# sourceMappingURL=task-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-state.d.ts","sourceRoot":"","sources":["../../src/state/task-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG/D,OAAO,KAAK,EAEX,UAAU,EACV,SAAS,EACT,UAAU,EACV,yBAAyB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,qBAAqB,EAAE,SAAS,yBAAyB,EAAE,GAAG,IAAI,CAAC;IAC5E,QAAQ,CAAC,YAAY,EAAE;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;KAC1C,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAUD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CA0BhF;AAiBD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,CAsFxE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEpD;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0BtF;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAyBzF"}
@@ -0,0 +1,191 @@
1
+ import fs from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { writeStderr } from '../shared/stderr.js';
4
+ import { replayEvents } from './event-log.js';
5
+ import { TERMINAL_STATUSES } from './task-event-types.js';
6
+ const terminalStatusSet = new Set(TERMINAL_STATUSES);
7
+ const phaseStatusMap = {
8
+ plan: 'plan-agent',
9
+ work: 'work-agent',
10
+ wrapup: 'wrapup',
11
+ };
12
+ export function createInitialState(taskId, config) {
13
+ const now = new Date().toISOString();
14
+ return {
15
+ taskId,
16
+ status: 'pending',
17
+ config,
18
+ failureReason: null,
19
+ plan: null,
20
+ lastContextError: null,
21
+ planAgentThreadId: null,
22
+ planReviewerThreadId: null,
23
+ workAgentThreadId: null,
24
+ workReviewerThreadId: null,
25
+ wrapupThreadId: null,
26
+ planReviewCycle: 0,
27
+ workReviewCycle: 0,
28
+ currentCycle: 0,
29
+ currentMaxCycles: 0,
30
+ lastPlanReview: null,
31
+ lastWorkReview: null,
32
+ lastValidationResults: null,
33
+ wrapupResult: null,
34
+ createdAt: now,
35
+ updatedAt: now,
36
+ };
37
+ }
38
+ function maxCyclesForPhase(state, phase) {
39
+ switch (phase) {
40
+ case 'plan': {
41
+ const planCycle = state.config.effectiveConfig.phases.plan.cycle;
42
+ return planCycle.kind === 'review' ? planCycle.cycleCount : 0;
43
+ }
44
+ case 'work':
45
+ return state.config.effectiveConfig.phases.work.cycle.cycleCount;
46
+ case 'wrapup':
47
+ return 0;
48
+ }
49
+ const exhaustivePhase = phase;
50
+ throw new Error(`Unhandled phase '${String(exhaustivePhase)}'.`);
51
+ }
52
+ export function applyEvent(state, event) {
53
+ const updatedAt = new Date().toISOString();
54
+ switch (event.event) {
55
+ case 'task-accepted':
56
+ // Controller may persist this before VM boot, and the worker may replay it when accepted.
57
+ return { ...state, status: 'pending', updatedAt };
58
+ case 'context-gather-failed':
59
+ return { ...state, lastContextError: event.reason, updatedAt };
60
+ case 'phase-started':
61
+ return {
62
+ ...state,
63
+ status: phaseStatusMap[event.phase],
64
+ currentCycle: 0,
65
+ currentMaxCycles: maxCyclesForPhase(state, event.phase),
66
+ updatedAt,
67
+ };
68
+ case 'phase-completed':
69
+ return { ...state, updatedAt };
70
+ case 'plan-agent-turn':
71
+ return {
72
+ ...state,
73
+ status: 'plan-agent',
74
+ planAgentThreadId: event.threadId,
75
+ currentCycle: event.cycle,
76
+ updatedAt,
77
+ };
78
+ case 'plan-reviewer-turn':
79
+ return {
80
+ ...state,
81
+ status: 'plan-reviewer',
82
+ planReviewerThreadId: event.threadId,
83
+ planReviewCycle: event.cycle,
84
+ currentCycle: event.cycle,
85
+ lastPlanReview: event.review,
86
+ updatedAt,
87
+ };
88
+ case 'plan-finalized':
89
+ return { ...state, plan: event.plan, updatedAt };
90
+ case 'work-agent-turn':
91
+ return {
92
+ ...state,
93
+ status: 'work-agent',
94
+ workAgentThreadId: event.threadId,
95
+ currentCycle: event.cycle,
96
+ updatedAt,
97
+ };
98
+ case 'work-reviewer-turn':
99
+ return {
100
+ ...state,
101
+ status: 'work-reviewer',
102
+ workReviewerThreadId: event.threadId,
103
+ workReviewCycle: event.cycle,
104
+ currentCycle: event.cycle,
105
+ lastWorkReview: event.review,
106
+ lastValidationResults: event.validationResults,
107
+ updatedAt,
108
+ };
109
+ case 'wrapup-turn':
110
+ return {
111
+ ...state,
112
+ status: 'wrapup',
113
+ wrapupThreadId: event.threadId,
114
+ updatedAt,
115
+ };
116
+ case 'wrapup-result':
117
+ return {
118
+ ...state,
119
+ wrapupResult: {
120
+ prUrl: event.prUrl,
121
+ branchName: event.branchName,
122
+ pushedCommits: event.pushedCommits,
123
+ },
124
+ updatedAt,
125
+ };
126
+ case 'task-completed':
127
+ return { ...state, status: 'completed', updatedAt };
128
+ case 'task-failed':
129
+ return { ...state, status: 'failed', failureReason: event.reason, updatedAt };
130
+ case 'task-closed':
131
+ return { ...state, status: 'closed', updatedAt };
132
+ default: {
133
+ const exhaustiveCheck = event;
134
+ throw new Error(`Unhandled task event: ${JSON.stringify(exhaustiveCheck)}`);
135
+ }
136
+ }
137
+ }
138
+ export function isTerminal(state) {
139
+ return terminalStatusSet.has(state.status);
140
+ }
141
+ export async function loadTaskStateFromLog(filePath) {
142
+ const events = await replayEvents(filePath);
143
+ if (events.length === 0) {
144
+ return null;
145
+ }
146
+ const firstEvent = events[0];
147
+ if (!firstEvent || firstEvent.data.event !== 'task-accepted') {
148
+ writeStderr(`Skipping ${filePath}: first event is not task-accepted`);
149
+ return null;
150
+ }
151
+ let state = createInitialState(firstEvent.data.taskId, firstEvent.data.config);
152
+ state = {
153
+ ...state,
154
+ createdAt: firstEvent.ts,
155
+ updatedAt: firstEvent.ts,
156
+ };
157
+ for (let index = 1; index < events.length; index += 1) {
158
+ const event = events[index];
159
+ if (!event)
160
+ continue;
161
+ state = applyEvent(state, event.data);
162
+ }
163
+ return state;
164
+ }
165
+ export async function hydrateTaskStates(stateDir) {
166
+ const tasksDir = join(stateDir, 'tasks');
167
+ const taskStates = new Map();
168
+ try {
169
+ const files = await fs.readdir(tasksDir);
170
+ for (const file of files) {
171
+ if (!file.endsWith('.jsonl')) {
172
+ continue;
173
+ }
174
+ const filePath = join(tasksDir, file);
175
+ // Replay stays sequential so stderr warnings and corruption errors point at one file at a time.
176
+ // oxlint-disable-next-line eslint/no-await-in-loop
177
+ const state = await loadTaskStateFromLog(filePath);
178
+ if (state) {
179
+ taskStates.set(state.taskId, state);
180
+ }
181
+ }
182
+ return taskStates;
183
+ }
184
+ catch (error) {
185
+ if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT') {
186
+ return new Map();
187
+ }
188
+ throw error;
189
+ }
190
+ }
191
+ //# sourceMappingURL=task-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-state.js","sourceRoot":"","sources":["../../src/state/task-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export type CommandStatus = 'passed' | 'failed' | 'timeout';
2
+ export interface VerificationCommand {
3
+ readonly name: string;
4
+ readonly command: string;
5
+ }
6
+ export interface VerificationCommandResult {
7
+ readonly name: string;
8
+ readonly passed: boolean;
9
+ readonly exitCode: number;
10
+ readonly output: string;
11
+ readonly logPath?: string;
12
+ }
13
+ export interface RunVerificationOptions {
14
+ readonly commands: readonly VerificationCommand[];
15
+ readonly cwd: string;
16
+ readonly attemptLabel?: string;
17
+ readonly rawLogDir?: string;
18
+ readonly timeoutMs: number;
19
+ }
20
+ export declare function parseCommand(command: string): readonly [string, ...string[]];
21
+ export declare function runCommandWithTimeout(command: string, cwd: string, timeoutMs: number): Promise<{
22
+ readonly status: CommandStatus;
23
+ readonly output: string;
24
+ readonly rawOutput: string;
25
+ readonly exitCode: number;
26
+ }>;
27
+ export declare function runVerification(options: RunVerificationOptions): Promise<readonly VerificationCommandResult[]>;
28
+ export declare function allVerificationsPassed(results: readonly VerificationCommandResult[]): boolean;
29
+ export declare function buildVerificationFailureSummary(results: readonly VerificationCommandResult[]): string;
30
+ //# sourceMappingURL=verification-runner.d.ts.map