pm-orchestrator-runner 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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +108 -0
  3. package/dist/cli/cli-interface.d.ts +150 -0
  4. package/dist/cli/cli-interface.d.ts.map +1 -0
  5. package/dist/cli/cli-interface.js +606 -0
  6. package/dist/cli/cli-interface.js.map +1 -0
  7. package/dist/cli/index.d.ts +13 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +243 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/llm-sentinel.d.ts +15 -0
  12. package/dist/cli/llm-sentinel.d.ts.map +1 -0
  13. package/dist/cli/llm-sentinel.js +184 -0
  14. package/dist/cli/llm-sentinel.js.map +1 -0
  15. package/dist/config/configuration-manager.d.ts +149 -0
  16. package/dist/config/configuration-manager.d.ts.map +1 -0
  17. package/dist/config/configuration-manager.js +241 -0
  18. package/dist/config/configuration-manager.js.map +1 -0
  19. package/dist/continuation/continuation-control-manager.d.ts +154 -0
  20. package/dist/continuation/continuation-control-manager.d.ts.map +1 -0
  21. package/dist/continuation/continuation-control-manager.js +303 -0
  22. package/dist/continuation/continuation-control-manager.js.map +1 -0
  23. package/dist/core/runner-core.d.ts +474 -0
  24. package/dist/core/runner-core.d.ts.map +1 -0
  25. package/dist/core/runner-core.js +1311 -0
  26. package/dist/core/runner-core.js.map +1 -0
  27. package/dist/errors/error-codes.d.ts +105 -0
  28. package/dist/errors/error-codes.d.ts.map +1 -0
  29. package/dist/errors/error-codes.js +198 -0
  30. package/dist/errors/error-codes.js.map +1 -0
  31. package/dist/errors/runner-error.d.ts +14 -0
  32. package/dist/errors/runner-error.d.ts.map +1 -0
  33. package/dist/errors/runner-error.js +33 -0
  34. package/dist/errors/runner-error.js.map +1 -0
  35. package/dist/evidence/evidence-manager.d.ts +112 -0
  36. package/dist/evidence/evidence-manager.d.ts.map +1 -0
  37. package/dist/evidence/evidence-manager.js +337 -0
  38. package/dist/evidence/evidence-manager.js.map +1 -0
  39. package/dist/executor/claude-code-executor.d.ts +136 -0
  40. package/dist/executor/claude-code-executor.d.ts.map +1 -0
  41. package/dist/executor/claude-code-executor.js +643 -0
  42. package/dist/executor/claude-code-executor.js.map +1 -0
  43. package/dist/executor/deterministic-executor.d.ts +40 -0
  44. package/dist/executor/deterministic-executor.d.ts.map +1 -0
  45. package/dist/executor/deterministic-executor.js +269 -0
  46. package/dist/executor/deterministic-executor.js.map +1 -0
  47. package/dist/lifecycle/lifecycle-controller.d.ts +270 -0
  48. package/dist/lifecycle/lifecycle-controller.d.ts.map +1 -0
  49. package/dist/lifecycle/lifecycle-controller.js +596 -0
  50. package/dist/lifecycle/lifecycle-controller.js.map +1 -0
  51. package/dist/limits/resource-limit-manager.d.ts +200 -0
  52. package/dist/limits/resource-limit-manager.d.ts.map +1 -0
  53. package/dist/limits/resource-limit-manager.js +376 -0
  54. package/dist/limits/resource-limit-manager.js.map +1 -0
  55. package/dist/locks/lock-manager.d.ts +116 -0
  56. package/dist/locks/lock-manager.d.ts.map +1 -0
  57. package/dist/locks/lock-manager.js +306 -0
  58. package/dist/locks/lock-manager.js.map +1 -0
  59. package/dist/logging/index.d.ts +8 -0
  60. package/dist/logging/index.d.ts.map +1 -0
  61. package/dist/logging/index.js +22 -0
  62. package/dist/logging/index.js.map +1 -0
  63. package/dist/logging/sensitive-data-masker.d.ts +90 -0
  64. package/dist/logging/sensitive-data-masker.d.ts.map +1 -0
  65. package/dist/logging/sensitive-data-masker.js +228 -0
  66. package/dist/logging/sensitive-data-masker.js.map +1 -0
  67. package/dist/logging/task-log-manager.d.ts +215 -0
  68. package/dist/logging/task-log-manager.d.ts.map +1 -0
  69. package/dist/logging/task-log-manager.js +743 -0
  70. package/dist/logging/task-log-manager.js.map +1 -0
  71. package/dist/mediation/fail-closed-runner.d.ts +131 -0
  72. package/dist/mediation/fail-closed-runner.d.ts.map +1 -0
  73. package/dist/mediation/fail-closed-runner.js +245 -0
  74. package/dist/mediation/fail-closed-runner.js.map +1 -0
  75. package/dist/mediation/llm-client-with-evidence.d.ts +123 -0
  76. package/dist/mediation/llm-client-with-evidence.d.ts.map +1 -0
  77. package/dist/mediation/llm-client-with-evidence.js +245 -0
  78. package/dist/mediation/llm-client-with-evidence.js.map +1 -0
  79. package/dist/mediation/llm-client.d.ts +102 -0
  80. package/dist/mediation/llm-client.d.ts.map +1 -0
  81. package/dist/mediation/llm-client.js +206 -0
  82. package/dist/mediation/llm-client.js.map +1 -0
  83. package/dist/mediation/llm-evidence-manager.d.ts +108 -0
  84. package/dist/mediation/llm-evidence-manager.d.ts.map +1 -0
  85. package/dist/mediation/llm-evidence-manager.js +230 -0
  86. package/dist/mediation/llm-evidence-manager.js.map +1 -0
  87. package/dist/mediation/llm-mediation-layer.d.ts +175 -0
  88. package/dist/mediation/llm-mediation-layer.d.ts.map +1 -0
  89. package/dist/mediation/llm-mediation-layer.js +315 -0
  90. package/dist/mediation/llm-mediation-layer.js.map +1 -0
  91. package/dist/mediation/llm-sentinel.d.ts +107 -0
  92. package/dist/mediation/llm-sentinel.d.ts.map +1 -0
  93. package/dist/mediation/llm-sentinel.js +187 -0
  94. package/dist/mediation/llm-sentinel.js.map +1 -0
  95. package/dist/mediation/real-llm-mediation-layer.d.ts +104 -0
  96. package/dist/mediation/real-llm-mediation-layer.d.ts.map +1 -0
  97. package/dist/mediation/real-llm-mediation-layer.js +322 -0
  98. package/dist/mediation/real-llm-mediation-layer.js.map +1 -0
  99. package/dist/mediation/verdict-reporter.d.ts +61 -0
  100. package/dist/mediation/verdict-reporter.d.ts.map +1 -0
  101. package/dist/mediation/verdict-reporter.js +178 -0
  102. package/dist/mediation/verdict-reporter.js.map +1 -0
  103. package/dist/models/enums.d.ts +133 -0
  104. package/dist/models/enums.d.ts.map +1 -0
  105. package/dist/models/enums.js +201 -0
  106. package/dist/models/enums.js.map +1 -0
  107. package/dist/models/evidence.d.ts +60 -0
  108. package/dist/models/evidence.d.ts.map +1 -0
  109. package/dist/models/evidence.js +135 -0
  110. package/dist/models/evidence.js.map +1 -0
  111. package/dist/models/execution-result.d.ts +89 -0
  112. package/dist/models/execution-result.d.ts.map +1 -0
  113. package/dist/models/execution-result.js +197 -0
  114. package/dist/models/execution-result.js.map +1 -0
  115. package/dist/models/file-lock.d.ts +62 -0
  116. package/dist/models/file-lock.d.ts.map +1 -0
  117. package/dist/models/file-lock.js +133 -0
  118. package/dist/models/file-lock.js.map +1 -0
  119. package/dist/models/index.d.ts +12 -0
  120. package/dist/models/index.d.ts.map +1 -0
  121. package/dist/models/index.js +91 -0
  122. package/dist/models/index.js.map +1 -0
  123. package/dist/models/repl/index.d.ts +7 -0
  124. package/dist/models/repl/index.d.ts.map +1 -0
  125. package/dist/models/repl/index.js +32 -0
  126. package/dist/models/repl/index.js.map +1 -0
  127. package/dist/models/repl/model-registry.d.ts +73 -0
  128. package/dist/models/repl/model-registry.d.ts.map +1 -0
  129. package/dist/models/repl/model-registry.js +116 -0
  130. package/dist/models/repl/model-registry.js.map +1 -0
  131. package/dist/models/repl/repl-state.d.ts +86 -0
  132. package/dist/models/repl/repl-state.d.ts.map +1 -0
  133. package/dist/models/repl/repl-state.js +152 -0
  134. package/dist/models/repl/repl-state.js.map +1 -0
  135. package/dist/models/repl/task-log.d.ts +247 -0
  136. package/dist/models/repl/task-log.d.ts.map +1 -0
  137. package/dist/models/repl/task-log.js +178 -0
  138. package/dist/models/repl/task-log.js.map +1 -0
  139. package/dist/models/session.d.ts +71 -0
  140. package/dist/models/session.d.ts.map +1 -0
  141. package/dist/models/session.js +140 -0
  142. package/dist/models/session.js.map +1 -0
  143. package/dist/models/supporting.d.ts +97 -0
  144. package/dist/models/supporting.d.ts.map +1 -0
  145. package/dist/models/supporting.js +208 -0
  146. package/dist/models/supporting.js.map +1 -0
  147. package/dist/models/task.d.ts +77 -0
  148. package/dist/models/task.d.ts.map +1 -0
  149. package/dist/models/task.js +170 -0
  150. package/dist/models/task.js.map +1 -0
  151. package/dist/output/output-control-manager.d.ts +217 -0
  152. package/dist/output/output-control-manager.d.ts.map +1 -0
  153. package/dist/output/output-control-manager.js +378 -0
  154. package/dist/output/output-control-manager.js.map +1 -0
  155. package/dist/pool/agent-pool.d.ts +284 -0
  156. package/dist/pool/agent-pool.d.ts.map +1 -0
  157. package/dist/pool/agent-pool.js +451 -0
  158. package/dist/pool/agent-pool.js.map +1 -0
  159. package/dist/repl/commands/index.d.ts +12 -0
  160. package/dist/repl/commands/index.d.ts.map +1 -0
  161. package/dist/repl/commands/index.js +26 -0
  162. package/dist/repl/commands/index.js.map +1 -0
  163. package/dist/repl/commands/init.d.ts +31 -0
  164. package/dist/repl/commands/init.d.ts.map +1 -0
  165. package/dist/repl/commands/init.js +234 -0
  166. package/dist/repl/commands/init.js.map +1 -0
  167. package/dist/repl/commands/keys.d.ts +63 -0
  168. package/dist/repl/commands/keys.d.ts.map +1 -0
  169. package/dist/repl/commands/keys.js +114 -0
  170. package/dist/repl/commands/keys.js.map +1 -0
  171. package/dist/repl/commands/logs.d.ts +91 -0
  172. package/dist/repl/commands/logs.d.ts.map +1 -0
  173. package/dist/repl/commands/logs.js +200 -0
  174. package/dist/repl/commands/logs.js.map +1 -0
  175. package/dist/repl/commands/model.d.ts +85 -0
  176. package/dist/repl/commands/model.d.ts.map +1 -0
  177. package/dist/repl/commands/model.js +225 -0
  178. package/dist/repl/commands/model.js.map +1 -0
  179. package/dist/repl/commands/models.d.ts +50 -0
  180. package/dist/repl/commands/models.d.ts.map +1 -0
  181. package/dist/repl/commands/models.js +180 -0
  182. package/dist/repl/commands/models.js.map +1 -0
  183. package/dist/repl/commands/provider.d.ts +79 -0
  184. package/dist/repl/commands/provider.d.ts.map +1 -0
  185. package/dist/repl/commands/provider.js +291 -0
  186. package/dist/repl/commands/provider.js.map +1 -0
  187. package/dist/repl/commands/session.d.ts +50 -0
  188. package/dist/repl/commands/session.d.ts.map +1 -0
  189. package/dist/repl/commands/session.js +152 -0
  190. package/dist/repl/commands/session.js.map +1 -0
  191. package/dist/repl/commands/status.d.ts +55 -0
  192. package/dist/repl/commands/status.d.ts.map +1 -0
  193. package/dist/repl/commands/status.js +182 -0
  194. package/dist/repl/commands/status.js.map +1 -0
  195. package/dist/repl/index.d.ts +6 -0
  196. package/dist/repl/index.d.ts.map +1 -0
  197. package/dist/repl/index.js +25 -0
  198. package/dist/repl/index.js.map +1 -0
  199. package/dist/repl/repl-interface.d.ts +371 -0
  200. package/dist/repl/repl-interface.d.ts.map +1 -0
  201. package/dist/repl/repl-interface.js +1214 -0
  202. package/dist/repl/repl-interface.js.map +1 -0
  203. package/dist/session/session-manager.d.ts +85 -0
  204. package/dist/session/session-manager.d.ts.map +1 -0
  205. package/dist/session/session-manager.js +217 -0
  206. package/dist/session/session-manager.js.map +1 -0
  207. package/dist/supervisor/executor-supervisor.d.ts +90 -0
  208. package/dist/supervisor/executor-supervisor.d.ts.map +1 -0
  209. package/dist/supervisor/executor-supervisor.js +223 -0
  210. package/dist/supervisor/executor-supervisor.js.map +1 -0
  211. package/dist/supervisor/index.d.ts +5 -0
  212. package/dist/supervisor/index.d.ts.map +1 -0
  213. package/dist/supervisor/index.js +9 -0
  214. package/dist/supervisor/index.js.map +1 -0
  215. package/package.json +57 -0
@@ -0,0 +1,596 @@
1
+ "use strict";
2
+ /**
3
+ * Lifecycle Controller
4
+ * Based on 04_COMPONENTS.md L34-81
5
+ *
6
+ * Responsible for:
7
+ * - 7-phase lifecycle management
8
+ * - Phase transitions with gate validation
9
+ * - Fail-closed behavior
10
+ * - Overall status determination
11
+ * - Event emission (observable pattern)
12
+ * - State persistence
13
+ * - Parallel execution control
14
+ * - Error recovery with retry
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.LifecycleController = exports.LifecycleError = void 0;
18
+ const events_1 = require("events");
19
+ const enums_1 = require("../models/enums");
20
+ const error_codes_1 = require("../errors/error-codes");
21
+ /**
22
+ * Lifecycle Controller Error
23
+ */
24
+ class LifecycleError extends Error {
25
+ code;
26
+ details;
27
+ constructor(code, message, details) {
28
+ super(message || (0, error_codes_1.getErrorMessage)(code));
29
+ this.name = 'LifecycleError';
30
+ this.code = code;
31
+ this.details = details;
32
+ }
33
+ }
34
+ exports.LifecycleError = LifecycleError;
35
+ /**
36
+ * Default executor limit for parallel tasks
37
+ */
38
+ const DEFAULT_EXECUTOR_LIMIT = 4;
39
+ /**
40
+ * Default max retries for recoverable errors
41
+ */
42
+ const DEFAULT_MAX_RETRIES = 3;
43
+ /**
44
+ * Lifecycle Controller class
45
+ */
46
+ class LifecycleController extends events_1.EventEmitter {
47
+ sessionId = '';
48
+ currentPhase = enums_1.LifecyclePhase.REQUIREMENT_ANALYSIS;
49
+ phases = new Map();
50
+ tasks = new Map();
51
+ registeredTasks = [];
52
+ parallelTasks = new Set();
53
+ phaseTimeouts = new Map();
54
+ phaseStartTimes = new Map();
55
+ executorLimit = DEFAULT_EXECUTOR_LIMIT;
56
+ maxRetries = DEFAULT_MAX_RETRIES;
57
+ // Status flags (for priority-based status determination)
58
+ isError = false;
59
+ isIncomplete = false;
60
+ isNoEvidence = false;
61
+ isInvalid = false;
62
+ isCompleted = false;
63
+ /**
64
+ * Create a new LifecycleController
65
+ */
66
+ constructor() {
67
+ super();
68
+ }
69
+ /**
70
+ * Get all lifecycle phases
71
+ */
72
+ getAllPhases() {
73
+ return (0, enums_1.getAllPhases)();
74
+ }
75
+ /**
76
+ * Initialize the lifecycle with a session ID
77
+ */
78
+ initialize(sessionId) {
79
+ this.sessionId = sessionId;
80
+ this.currentPhase = enums_1.LifecyclePhase.REQUIREMENT_ANALYSIS;
81
+ this.phases.clear();
82
+ this.tasks.clear();
83
+ this.registeredTasks = [];
84
+ this.parallelTasks.clear();
85
+ this.isError = false;
86
+ this.isIncomplete = false;
87
+ this.isNoEvidence = false;
88
+ this.isInvalid = false;
89
+ this.isCompleted = false;
90
+ // Initialize all phases as pending
91
+ for (const phase of this.getAllPhases()) {
92
+ this.phases.set(phase, {
93
+ phase,
94
+ status: enums_1.PhaseStatus.PENDING,
95
+ duration_seconds: 0,
96
+ retry_count: 0,
97
+ });
98
+ }
99
+ // Start the first phase
100
+ const firstPhase = this.phases.get(enums_1.LifecyclePhase.REQUIREMENT_ANALYSIS);
101
+ firstPhase.status = enums_1.PhaseStatus.IN_PROGRESS;
102
+ firstPhase.started_at = new Date().toISOString();
103
+ this.phaseStartTimes.set(enums_1.LifecyclePhase.REQUIREMENT_ANALYSIS, Date.now());
104
+ this.emit('phase_started', {
105
+ phase: enums_1.LifecyclePhase.REQUIREMENT_ANALYSIS,
106
+ session_id: sessionId,
107
+ });
108
+ }
109
+ /**
110
+ * Get current phase
111
+ */
112
+ getCurrentPhase() {
113
+ return this.currentPhase;
114
+ }
115
+ /**
116
+ * Get phase status
117
+ */
118
+ getPhaseStatus(phase) {
119
+ const phaseInfo = this.phases.get(phase);
120
+ return phaseInfo?.status ?? enums_1.PhaseStatus.PENDING;
121
+ }
122
+ /**
123
+ * Get phase info
124
+ */
125
+ getPhaseInfo(phase) {
126
+ const phaseInfo = this.phases.get(phase);
127
+ if (!phaseInfo) {
128
+ return {
129
+ phase,
130
+ status: enums_1.PhaseStatus.PENDING,
131
+ duration_seconds: 0,
132
+ retry_count: 0,
133
+ };
134
+ }
135
+ return { ...phaseInfo };
136
+ }
137
+ /**
138
+ * Complete current phase and transition to next
139
+ * @throws LifecycleError if evidence is missing or invalid
140
+ */
141
+ completeCurrentPhase(input) {
142
+ // Check if in error state
143
+ if (this.isError || this.isInvalid) {
144
+ throw new LifecycleError(error_codes_1.ErrorCode.E204_LIFECYCLE_VIOLATION, 'Cannot complete phase: lifecycle is in error or invalid state', { current_status: this.getOverallStatus() });
145
+ }
146
+ // Validate evidence
147
+ if (input.evidence === null || input.evidence === undefined) {
148
+ throw new LifecycleError(error_codes_1.ErrorCode.E301_EVIDENCE_MISSING, 'Cannot complete phase: evidence is required', { phase: this.currentPhase });
149
+ }
150
+ // Validate gate conditions
151
+ const gateResult = this.validateGate(this.currentPhase, { evidence: input.evidence });
152
+ if (!gateResult.passed) {
153
+ throw new LifecycleError(error_codes_1.ErrorCode.E302_EVIDENCE_VALIDATION_FAILURE, `Gate validation failed: ${gateResult.failures.join(', ')}`, { phase: this.currentPhase, failures: gateResult.failures });
154
+ }
155
+ // For EXECUTION phase, check all tasks are complete
156
+ if (this.currentPhase === enums_1.LifecyclePhase.EXECUTION) {
157
+ const incompleteTasks = this.getIncompleteTasks();
158
+ if (incompleteTasks.length > 0) {
159
+ throw new LifecycleError(error_codes_1.ErrorCode.E204_LIFECYCLE_VIOLATION, 'Cannot complete EXECUTION phase: tasks are not complete', { incomplete_tasks: incompleteTasks });
160
+ }
161
+ }
162
+ // Mark current phase as completed
163
+ const currentPhaseInfo = this.phases.get(this.currentPhase);
164
+ currentPhaseInfo.status = enums_1.PhaseStatus.COMPLETED;
165
+ currentPhaseInfo.completed_at = new Date().toISOString();
166
+ currentPhaseInfo.evidence = input.evidence;
167
+ // Calculate duration
168
+ const startTime = this.phaseStartTimes.get(this.currentPhase);
169
+ if (startTime) {
170
+ currentPhaseInfo.duration_seconds = Math.round((Date.now() - startTime) / 1000);
171
+ }
172
+ this.emit('phase_completed', {
173
+ phase: this.currentPhase,
174
+ evidence: input.evidence,
175
+ session_id: this.sessionId,
176
+ });
177
+ // Check if this was the last phase
178
+ if ((0, enums_1.isLastPhase)(this.currentPhase)) {
179
+ this.isCompleted = true;
180
+ this.emit('lifecycle_completed', {
181
+ status: enums_1.OverallStatus.COMPLETE,
182
+ session_id: this.sessionId,
183
+ });
184
+ return;
185
+ }
186
+ // Transition to next phase
187
+ const nextPhase = (0, enums_1.getNextPhase)(this.currentPhase);
188
+ if (nextPhase) {
189
+ this.currentPhase = nextPhase;
190
+ const nextPhaseInfo = this.phases.get(this.currentPhase);
191
+ nextPhaseInfo.status = enums_1.PhaseStatus.IN_PROGRESS;
192
+ nextPhaseInfo.started_at = new Date().toISOString();
193
+ this.phaseStartTimes.set(this.currentPhase, Date.now());
194
+ this.emit('phase_started', {
195
+ phase: this.currentPhase,
196
+ session_id: this.sessionId,
197
+ });
198
+ }
199
+ }
200
+ /**
201
+ * Transition to a specific phase
202
+ * @throws LifecycleError if transition is invalid
203
+ */
204
+ transitionTo(targetPhase) {
205
+ // Check if transition is valid (must be next phase)
206
+ if (!(0, enums_1.isValidPhaseTransition)(this.currentPhase, targetPhase)) {
207
+ const currentIndex = (0, enums_1.getPhaseIndex)(this.currentPhase);
208
+ const targetIndex = (0, enums_1.getPhaseIndex)(targetPhase);
209
+ if (targetIndex < currentIndex) {
210
+ throw new LifecycleError(error_codes_1.ErrorCode.E202_PHASE_TRANSITION_INVALID, 'Backward transitions are not allowed', { from: this.currentPhase, to: targetPhase });
211
+ }
212
+ throw new LifecycleError(error_codes_1.ErrorCode.E202_PHASE_TRANSITION_INVALID, 'Cannot skip phases - must transition to immediate next phase', { from: this.currentPhase, to: targetPhase });
213
+ }
214
+ // Perform transition
215
+ this.currentPhase = targetPhase;
216
+ const phaseInfo = this.phases.get(targetPhase);
217
+ phaseInfo.status = enums_1.PhaseStatus.IN_PROGRESS;
218
+ phaseInfo.started_at = new Date().toISOString();
219
+ this.phaseStartTimes.set(targetPhase, Date.now());
220
+ this.emit('phase_started', {
221
+ phase: targetPhase,
222
+ session_id: this.sessionId,
223
+ });
224
+ }
225
+ /**
226
+ * Validate gate conditions for a phase
227
+ */
228
+ validateGate(phase, input) {
229
+ const failures = [];
230
+ switch (phase) {
231
+ case enums_1.LifecyclePhase.REQUIREMENT_ANALYSIS:
232
+ if (!input.evidence.requirements ||
233
+ (Array.isArray(input.evidence.requirements) &&
234
+ input.evidence.requirements.length === 0)) {
235
+ failures.push('requirements are required');
236
+ }
237
+ break;
238
+ case enums_1.LifecyclePhase.TASK_DECOMPOSITION:
239
+ if (!input.evidence.tasks ||
240
+ (Array.isArray(input.evidence.tasks) &&
241
+ input.evidence.tasks.length === 0)) {
242
+ failures.push('tasks are required');
243
+ }
244
+ break;
245
+ case enums_1.LifecyclePhase.PLANNING:
246
+ if (!input.evidence.plan) {
247
+ failures.push('plan is required');
248
+ }
249
+ break;
250
+ case enums_1.LifecyclePhase.EXECUTION:
251
+ if (!input.evidence.execution_results) {
252
+ failures.push('execution_results are required');
253
+ }
254
+ break;
255
+ case enums_1.LifecyclePhase.QA:
256
+ const qaResults = input.evidence.qa_results;
257
+ if (!qaResults) {
258
+ failures.push('qa_results are required');
259
+ }
260
+ else {
261
+ if (!qaResults.lint_passed)
262
+ failures.push('lint check failed');
263
+ if (!qaResults.tests_passed)
264
+ failures.push('tests failed');
265
+ if (!qaResults.type_check_passed)
266
+ failures.push('type check failed');
267
+ if (!qaResults.build_passed)
268
+ failures.push('build failed');
269
+ }
270
+ break;
271
+ case enums_1.LifecyclePhase.COMPLETION_VALIDATION:
272
+ const evidenceInventory = input.evidence.evidence_inventory;
273
+ if (!evidenceInventory) {
274
+ failures.push('evidence_inventory is required');
275
+ }
276
+ else if (!evidenceInventory.verified) {
277
+ failures.push('evidence not verified');
278
+ }
279
+ break;
280
+ case enums_1.LifecyclePhase.REPORT:
281
+ if (!input.evidence.report_generated) {
282
+ failures.push('report_generated is required');
283
+ }
284
+ break;
285
+ }
286
+ return {
287
+ passed: failures.length === 0,
288
+ failures,
289
+ };
290
+ }
291
+ /**
292
+ * Handle critical error
293
+ */
294
+ handleCriticalError(error) {
295
+ this.isError = true;
296
+ // Mark current phase as failed
297
+ const currentPhaseInfo = this.phases.get(this.currentPhase);
298
+ if (currentPhaseInfo) {
299
+ currentPhaseInfo.status = enums_1.PhaseStatus.FAILED;
300
+ }
301
+ // Only emit error if there are listeners (avoid unhandled error exception)
302
+ if (this.listenerCount('error') > 0) {
303
+ this.emit('error', {
304
+ error,
305
+ phase: this.currentPhase,
306
+ session_id: this.sessionId,
307
+ });
308
+ }
309
+ }
310
+ /**
311
+ * Handle recoverable error (with retry)
312
+ * @throws LifecycleError if max retries exceeded
313
+ */
314
+ handleRecoverableError(phase, error) {
315
+ const phaseInfo = this.phases.get(phase);
316
+ if (!phaseInfo) {
317
+ throw new LifecycleError(error_codes_1.ErrorCode.E204_LIFECYCLE_VIOLATION, 'Phase not found', { phase });
318
+ }
319
+ phaseInfo.retry_count++;
320
+ if (phaseInfo.retry_count > this.maxRetries) {
321
+ this.isError = true;
322
+ throw new LifecycleError(error_codes_1.ErrorCode.E201_PHASE_EXECUTION_FAILURE, `Max retries (${this.maxRetries}) exceeded for phase ${phase}`, { phase, retry_count: phaseInfo.retry_count, error: error.message });
323
+ }
324
+ this.emit('phase_retry', {
325
+ phase,
326
+ retry_count: phaseInfo.retry_count,
327
+ error,
328
+ session_id: this.sessionId,
329
+ });
330
+ }
331
+ /**
332
+ * Set max retries for recoverable errors
333
+ */
334
+ setMaxRetries(count) {
335
+ this.maxRetries = count;
336
+ }
337
+ /**
338
+ * Get overall status
339
+ */
340
+ getOverallStatus() {
341
+ // Priority: INVALID > ERROR > NO_EVIDENCE > INCOMPLETE > COMPLETE
342
+ if (this.isInvalid)
343
+ return enums_1.OverallStatus.INVALID;
344
+ if (this.isError)
345
+ return enums_1.OverallStatus.ERROR;
346
+ if (this.isNoEvidence)
347
+ return enums_1.OverallStatus.NO_EVIDENCE;
348
+ if (this.isIncomplete)
349
+ return enums_1.OverallStatus.INCOMPLETE;
350
+ if (this.isCompleted)
351
+ return enums_1.OverallStatus.COMPLETE;
352
+ // Default to INCOMPLETE if not explicitly completed
353
+ return enums_1.OverallStatus.INCOMPLETE;
354
+ }
355
+ /**
356
+ * Check if lifecycle is complete
357
+ */
358
+ isComplete() {
359
+ return this.isCompleted;
360
+ }
361
+ /**
362
+ * Mark lifecycle as incomplete
363
+ */
364
+ markIncomplete(reason) {
365
+ this.isIncomplete = true;
366
+ this.emit('lifecycle_incomplete', {
367
+ reason,
368
+ session_id: this.sessionId,
369
+ });
370
+ }
371
+ /**
372
+ * Mark lifecycle as no evidence
373
+ */
374
+ markNoEvidence(reason) {
375
+ this.isNoEvidence = true;
376
+ this.emit('lifecycle_no_evidence', {
377
+ reason,
378
+ session_id: this.sessionId,
379
+ });
380
+ }
381
+ /**
382
+ * Mark lifecycle as invalid
383
+ */
384
+ markInvalid(reason) {
385
+ this.isInvalid = true;
386
+ this.emit('lifecycle_invalid', {
387
+ reason,
388
+ session_id: this.sessionId,
389
+ });
390
+ }
391
+ /**
392
+ * Update task status (for EXECUTION phase)
393
+ */
394
+ updateTaskStatus(update) {
395
+ let taskInfo = this.tasks.get(update.task_id);
396
+ if (!taskInfo) {
397
+ taskInfo = {
398
+ task_id: update.task_id,
399
+ status: update.status,
400
+ started_at: update.started_at,
401
+ };
402
+ this.tasks.set(update.task_id, taskInfo);
403
+ // Register task if not already registered
404
+ if (!this.registeredTasks.includes(update.task_id)) {
405
+ this.registeredTasks.push(update.task_id);
406
+ }
407
+ }
408
+ taskInfo.status = update.status;
409
+ if (update.started_at)
410
+ taskInfo.started_at = update.started_at;
411
+ if (update.completed_at)
412
+ taskInfo.completed_at = update.completed_at;
413
+ if (update.evidence)
414
+ taskInfo.evidence = update.evidence;
415
+ this.emit('task_updated', {
416
+ task_id: update.task_id,
417
+ status: update.status,
418
+ session_id: this.sessionId,
419
+ });
420
+ }
421
+ /**
422
+ * Get task info
423
+ */
424
+ getTaskInfo(taskId) {
425
+ const taskInfo = this.tasks.get(taskId);
426
+ if (!taskInfo) {
427
+ return {
428
+ task_id: taskId,
429
+ status: enums_1.TaskStatus.PENDING,
430
+ };
431
+ }
432
+ return { ...taskInfo };
433
+ }
434
+ /**
435
+ * Get incomplete tasks
436
+ */
437
+ getIncompleteTasks() {
438
+ const incomplete = [];
439
+ for (const [taskId, taskInfo] of this.tasks) {
440
+ if (taskInfo.status !== enums_1.TaskStatus.COMPLETED &&
441
+ taskInfo.status !== enums_1.TaskStatus.COMPLETE) {
442
+ incomplete.push(taskId);
443
+ }
444
+ }
445
+ return incomplete;
446
+ }
447
+ /**
448
+ * Generate final report
449
+ */
450
+ generateFinalReport() {
451
+ const phases = this.getAllPhases().map(phase => {
452
+ const info = this.getPhaseInfo(phase);
453
+ return {
454
+ name: phase,
455
+ status: info.status,
456
+ started_at: info.started_at,
457
+ completed_at: info.completed_at,
458
+ duration_seconds: info.duration_seconds,
459
+ };
460
+ });
461
+ return {
462
+ session_id: this.sessionId,
463
+ phases,
464
+ overall_status: this.getOverallStatus(),
465
+ completed_at: new Date().toISOString(),
466
+ };
467
+ }
468
+ /**
469
+ * Set phase timeout
470
+ */
471
+ setPhaseTimeout(phase, seconds) {
472
+ this.phaseTimeouts.set(phase, seconds * 1000);
473
+ }
474
+ /**
475
+ * Set phase start time (for testing)
476
+ */
477
+ setPhaseStartTimeForTesting(phase, timestamp) {
478
+ this.phaseStartTimes.set(phase, timestamp);
479
+ }
480
+ /**
481
+ * Check if phase is timed out
482
+ */
483
+ isPhaseTimedOut(phase) {
484
+ const timeout = this.phaseTimeouts.get(phase);
485
+ const startTime = this.phaseStartTimes.get(phase);
486
+ if (!timeout || !startTime) {
487
+ return false;
488
+ }
489
+ return Date.now() - startTime > timeout;
490
+ }
491
+ /**
492
+ * Check and handle timeout
493
+ */
494
+ checkAndHandleTimeout() {
495
+ if (this.isPhaseTimedOut(this.currentPhase)) {
496
+ this.markIncomplete(`Phase ${this.currentPhase} timed out`);
497
+ }
498
+ }
499
+ /**
500
+ * Start parallel tasks
501
+ */
502
+ startParallelTasks(taskIds) {
503
+ for (const taskId of taskIds) {
504
+ this.startParallelTask(taskId);
505
+ }
506
+ }
507
+ /**
508
+ * Start a single parallel task
509
+ * @throws LifecycleError if executor limit exceeded
510
+ */
511
+ startParallelTask(taskId) {
512
+ if (this.parallelTasks.size >= this.executorLimit) {
513
+ throw new LifecycleError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `Executor limit (${this.executorLimit}) exceeded`, { current: this.parallelTasks.size, limit: this.executorLimit });
514
+ }
515
+ this.parallelTasks.add(taskId);
516
+ // Update task status
517
+ this.updateTaskStatus({
518
+ task_id: taskId,
519
+ status: enums_1.TaskStatus.IN_PROGRESS,
520
+ started_at: new Date().toISOString(),
521
+ });
522
+ }
523
+ /**
524
+ * Complete a parallel task
525
+ */
526
+ completeParallelTask(taskId, completion) {
527
+ this.parallelTasks.delete(taskId);
528
+ this.updateTaskStatus({
529
+ task_id: taskId,
530
+ status: completion.status,
531
+ completed_at: new Date().toISOString(),
532
+ evidence: completion.evidence,
533
+ });
534
+ }
535
+ /**
536
+ * Get parallel execution info
537
+ */
538
+ getParallelExecutionInfo() {
539
+ return {
540
+ active_count: this.parallelTasks.size,
541
+ active_tasks: Array.from(this.parallelTasks),
542
+ max_parallel: this.executorLimit,
543
+ };
544
+ }
545
+ /**
546
+ * Serialize lifecycle state
547
+ */
548
+ serialize() {
549
+ const phasesRecord = {};
550
+ for (const [phase, info] of this.phases) {
551
+ phasesRecord[phase] = info;
552
+ }
553
+ const tasksRecord = {};
554
+ for (const [taskId, info] of this.tasks) {
555
+ tasksRecord[taskId] = info;
556
+ }
557
+ return {
558
+ session_id: this.sessionId,
559
+ current_phase: this.currentPhase,
560
+ phases: phasesRecord,
561
+ overall_status: this.getOverallStatus(),
562
+ tasks: tasksRecord,
563
+ parallel_tasks: Array.from(this.parallelTasks),
564
+ status_flags: {
565
+ is_error: this.isError,
566
+ is_incomplete: this.isIncomplete,
567
+ is_no_evidence: this.isNoEvidence,
568
+ is_invalid: this.isInvalid,
569
+ },
570
+ };
571
+ }
572
+ /**
573
+ * Deserialize lifecycle state
574
+ */
575
+ static deserialize(state) {
576
+ const controller = new LifecycleController();
577
+ controller.sessionId = state.session_id;
578
+ controller.currentPhase = state.current_phase;
579
+ controller.phases.clear();
580
+ for (const [phase, info] of Object.entries(state.phases)) {
581
+ controller.phases.set(phase, info);
582
+ }
583
+ controller.tasks.clear();
584
+ for (const [taskId, info] of Object.entries(state.tasks)) {
585
+ controller.tasks.set(taskId, info);
586
+ }
587
+ controller.parallelTasks = new Set(state.parallel_tasks);
588
+ controller.isError = state.status_flags.is_error;
589
+ controller.isIncomplete = state.status_flags.is_incomplete;
590
+ controller.isNoEvidence = state.status_flags.is_no_evidence;
591
+ controller.isInvalid = state.status_flags.is_invalid;
592
+ return controller;
593
+ }
594
+ }
595
+ exports.LifecycleController = LifecycleController;
596
+ //# sourceMappingURL=lifecycle-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-controller.js","sourceRoot":"","sources":["../../src/lifecycle/lifecycle-controller.ts"],"names":[],"mappings":"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"}