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.
- package/LICENSE +21 -0
- package/README.md +108 -0
- package/dist/cli/cli-interface.d.ts +150 -0
- package/dist/cli/cli-interface.d.ts.map +1 -0
- package/dist/cli/cli-interface.js +606 -0
- package/dist/cli/cli-interface.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +243 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/llm-sentinel.d.ts +15 -0
- package/dist/cli/llm-sentinel.d.ts.map +1 -0
- package/dist/cli/llm-sentinel.js +184 -0
- package/dist/cli/llm-sentinel.js.map +1 -0
- package/dist/config/configuration-manager.d.ts +149 -0
- package/dist/config/configuration-manager.d.ts.map +1 -0
- package/dist/config/configuration-manager.js +241 -0
- package/dist/config/configuration-manager.js.map +1 -0
- package/dist/continuation/continuation-control-manager.d.ts +154 -0
- package/dist/continuation/continuation-control-manager.d.ts.map +1 -0
- package/dist/continuation/continuation-control-manager.js +303 -0
- package/dist/continuation/continuation-control-manager.js.map +1 -0
- package/dist/core/runner-core.d.ts +474 -0
- package/dist/core/runner-core.d.ts.map +1 -0
- package/dist/core/runner-core.js +1311 -0
- package/dist/core/runner-core.js.map +1 -0
- package/dist/errors/error-codes.d.ts +105 -0
- package/dist/errors/error-codes.d.ts.map +1 -0
- package/dist/errors/error-codes.js +198 -0
- package/dist/errors/error-codes.js.map +1 -0
- package/dist/errors/runner-error.d.ts +14 -0
- package/dist/errors/runner-error.d.ts.map +1 -0
- package/dist/errors/runner-error.js +33 -0
- package/dist/errors/runner-error.js.map +1 -0
- package/dist/evidence/evidence-manager.d.ts +112 -0
- package/dist/evidence/evidence-manager.d.ts.map +1 -0
- package/dist/evidence/evidence-manager.js +337 -0
- package/dist/evidence/evidence-manager.js.map +1 -0
- package/dist/executor/claude-code-executor.d.ts +136 -0
- package/dist/executor/claude-code-executor.d.ts.map +1 -0
- package/dist/executor/claude-code-executor.js +643 -0
- package/dist/executor/claude-code-executor.js.map +1 -0
- package/dist/executor/deterministic-executor.d.ts +40 -0
- package/dist/executor/deterministic-executor.d.ts.map +1 -0
- package/dist/executor/deterministic-executor.js +269 -0
- package/dist/executor/deterministic-executor.js.map +1 -0
- package/dist/lifecycle/lifecycle-controller.d.ts +270 -0
- package/dist/lifecycle/lifecycle-controller.d.ts.map +1 -0
- package/dist/lifecycle/lifecycle-controller.js +596 -0
- package/dist/lifecycle/lifecycle-controller.js.map +1 -0
- package/dist/limits/resource-limit-manager.d.ts +200 -0
- package/dist/limits/resource-limit-manager.d.ts.map +1 -0
- package/dist/limits/resource-limit-manager.js +376 -0
- package/dist/limits/resource-limit-manager.js.map +1 -0
- package/dist/locks/lock-manager.d.ts +116 -0
- package/dist/locks/lock-manager.d.ts.map +1 -0
- package/dist/locks/lock-manager.js +306 -0
- package/dist/locks/lock-manager.js.map +1 -0
- package/dist/logging/index.d.ts +8 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +22 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/sensitive-data-masker.d.ts +90 -0
- package/dist/logging/sensitive-data-masker.d.ts.map +1 -0
- package/dist/logging/sensitive-data-masker.js +228 -0
- package/dist/logging/sensitive-data-masker.js.map +1 -0
- package/dist/logging/task-log-manager.d.ts +215 -0
- package/dist/logging/task-log-manager.d.ts.map +1 -0
- package/dist/logging/task-log-manager.js +743 -0
- package/dist/logging/task-log-manager.js.map +1 -0
- package/dist/mediation/fail-closed-runner.d.ts +131 -0
- package/dist/mediation/fail-closed-runner.d.ts.map +1 -0
- package/dist/mediation/fail-closed-runner.js +245 -0
- package/dist/mediation/fail-closed-runner.js.map +1 -0
- package/dist/mediation/llm-client-with-evidence.d.ts +123 -0
- package/dist/mediation/llm-client-with-evidence.d.ts.map +1 -0
- package/dist/mediation/llm-client-with-evidence.js +245 -0
- package/dist/mediation/llm-client-with-evidence.js.map +1 -0
- package/dist/mediation/llm-client.d.ts +102 -0
- package/dist/mediation/llm-client.d.ts.map +1 -0
- package/dist/mediation/llm-client.js +206 -0
- package/dist/mediation/llm-client.js.map +1 -0
- package/dist/mediation/llm-evidence-manager.d.ts +108 -0
- package/dist/mediation/llm-evidence-manager.d.ts.map +1 -0
- package/dist/mediation/llm-evidence-manager.js +230 -0
- package/dist/mediation/llm-evidence-manager.js.map +1 -0
- package/dist/mediation/llm-mediation-layer.d.ts +175 -0
- package/dist/mediation/llm-mediation-layer.d.ts.map +1 -0
- package/dist/mediation/llm-mediation-layer.js +315 -0
- package/dist/mediation/llm-mediation-layer.js.map +1 -0
- package/dist/mediation/llm-sentinel.d.ts +107 -0
- package/dist/mediation/llm-sentinel.d.ts.map +1 -0
- package/dist/mediation/llm-sentinel.js +187 -0
- package/dist/mediation/llm-sentinel.js.map +1 -0
- package/dist/mediation/real-llm-mediation-layer.d.ts +104 -0
- package/dist/mediation/real-llm-mediation-layer.d.ts.map +1 -0
- package/dist/mediation/real-llm-mediation-layer.js +322 -0
- package/dist/mediation/real-llm-mediation-layer.js.map +1 -0
- package/dist/mediation/verdict-reporter.d.ts +61 -0
- package/dist/mediation/verdict-reporter.d.ts.map +1 -0
- package/dist/mediation/verdict-reporter.js +178 -0
- package/dist/mediation/verdict-reporter.js.map +1 -0
- package/dist/models/enums.d.ts +133 -0
- package/dist/models/enums.d.ts.map +1 -0
- package/dist/models/enums.js +201 -0
- package/dist/models/enums.js.map +1 -0
- package/dist/models/evidence.d.ts +60 -0
- package/dist/models/evidence.d.ts.map +1 -0
- package/dist/models/evidence.js +135 -0
- package/dist/models/evidence.js.map +1 -0
- package/dist/models/execution-result.d.ts +89 -0
- package/dist/models/execution-result.d.ts.map +1 -0
- package/dist/models/execution-result.js +197 -0
- package/dist/models/execution-result.js.map +1 -0
- package/dist/models/file-lock.d.ts +62 -0
- package/dist/models/file-lock.d.ts.map +1 -0
- package/dist/models/file-lock.js +133 -0
- package/dist/models/file-lock.js.map +1 -0
- package/dist/models/index.d.ts +12 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +91 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/repl/index.d.ts +7 -0
- package/dist/models/repl/index.d.ts.map +1 -0
- package/dist/models/repl/index.js +32 -0
- package/dist/models/repl/index.js.map +1 -0
- package/dist/models/repl/model-registry.d.ts +73 -0
- package/dist/models/repl/model-registry.d.ts.map +1 -0
- package/dist/models/repl/model-registry.js +116 -0
- package/dist/models/repl/model-registry.js.map +1 -0
- package/dist/models/repl/repl-state.d.ts +86 -0
- package/dist/models/repl/repl-state.d.ts.map +1 -0
- package/dist/models/repl/repl-state.js +152 -0
- package/dist/models/repl/repl-state.js.map +1 -0
- package/dist/models/repl/task-log.d.ts +247 -0
- package/dist/models/repl/task-log.d.ts.map +1 -0
- package/dist/models/repl/task-log.js +178 -0
- package/dist/models/repl/task-log.js.map +1 -0
- package/dist/models/session.d.ts +71 -0
- package/dist/models/session.d.ts.map +1 -0
- package/dist/models/session.js +140 -0
- package/dist/models/session.js.map +1 -0
- package/dist/models/supporting.d.ts +97 -0
- package/dist/models/supporting.d.ts.map +1 -0
- package/dist/models/supporting.js +208 -0
- package/dist/models/supporting.js.map +1 -0
- package/dist/models/task.d.ts +77 -0
- package/dist/models/task.d.ts.map +1 -0
- package/dist/models/task.js +170 -0
- package/dist/models/task.js.map +1 -0
- package/dist/output/output-control-manager.d.ts +217 -0
- package/dist/output/output-control-manager.d.ts.map +1 -0
- package/dist/output/output-control-manager.js +378 -0
- package/dist/output/output-control-manager.js.map +1 -0
- package/dist/pool/agent-pool.d.ts +284 -0
- package/dist/pool/agent-pool.d.ts.map +1 -0
- package/dist/pool/agent-pool.js +451 -0
- package/dist/pool/agent-pool.js.map +1 -0
- package/dist/repl/commands/index.d.ts +12 -0
- package/dist/repl/commands/index.d.ts.map +1 -0
- package/dist/repl/commands/index.js +26 -0
- package/dist/repl/commands/index.js.map +1 -0
- package/dist/repl/commands/init.d.ts +31 -0
- package/dist/repl/commands/init.d.ts.map +1 -0
- package/dist/repl/commands/init.js +234 -0
- package/dist/repl/commands/init.js.map +1 -0
- package/dist/repl/commands/keys.d.ts +63 -0
- package/dist/repl/commands/keys.d.ts.map +1 -0
- package/dist/repl/commands/keys.js +114 -0
- package/dist/repl/commands/keys.js.map +1 -0
- package/dist/repl/commands/logs.d.ts +91 -0
- package/dist/repl/commands/logs.d.ts.map +1 -0
- package/dist/repl/commands/logs.js +200 -0
- package/dist/repl/commands/logs.js.map +1 -0
- package/dist/repl/commands/model.d.ts +85 -0
- package/dist/repl/commands/model.d.ts.map +1 -0
- package/dist/repl/commands/model.js +225 -0
- package/dist/repl/commands/model.js.map +1 -0
- package/dist/repl/commands/models.d.ts +50 -0
- package/dist/repl/commands/models.d.ts.map +1 -0
- package/dist/repl/commands/models.js +180 -0
- package/dist/repl/commands/models.js.map +1 -0
- package/dist/repl/commands/provider.d.ts +79 -0
- package/dist/repl/commands/provider.d.ts.map +1 -0
- package/dist/repl/commands/provider.js +291 -0
- package/dist/repl/commands/provider.js.map +1 -0
- package/dist/repl/commands/session.d.ts +50 -0
- package/dist/repl/commands/session.d.ts.map +1 -0
- package/dist/repl/commands/session.js +152 -0
- package/dist/repl/commands/session.js.map +1 -0
- package/dist/repl/commands/status.d.ts +55 -0
- package/dist/repl/commands/status.d.ts.map +1 -0
- package/dist/repl/commands/status.js +182 -0
- package/dist/repl/commands/status.js.map +1 -0
- package/dist/repl/index.d.ts +6 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/index.js +25 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/repl-interface.d.ts +371 -0
- package/dist/repl/repl-interface.d.ts.map +1 -0
- package/dist/repl/repl-interface.js +1214 -0
- package/dist/repl/repl-interface.js.map +1 -0
- package/dist/session/session-manager.d.ts +85 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +217 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/supervisor/executor-supervisor.d.ts +90 -0
- package/dist/supervisor/executor-supervisor.d.ts.map +1 -0
- package/dist/supervisor/executor-supervisor.js +223 -0
- package/dist/supervisor/executor-supervisor.js.map +1 -0
- package/dist/supervisor/index.d.ts +5 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +9 -0
- package/dist/supervisor/index.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Continuation Control Manager
|
|
4
|
+
* Based on 04_COMPONENTS.md L156-166
|
|
5
|
+
*
|
|
6
|
+
* Responsible for:
|
|
7
|
+
* - Automatic progression prevention
|
|
8
|
+
* - Explicit approval requirement
|
|
9
|
+
* - Continuation condition validation
|
|
10
|
+
* - Meaningless continuation rejection
|
|
11
|
+
* - next_action determination
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ContinuationControlManager = exports.ContinuationControlError = void 0;
|
|
15
|
+
const enums_1 = require("../models/enums");
|
|
16
|
+
const error_codes_1 = require("../errors/error-codes");
|
|
17
|
+
/**
|
|
18
|
+
* Continuation Control Manager Error
|
|
19
|
+
*/
|
|
20
|
+
class ContinuationControlError extends Error {
|
|
21
|
+
code;
|
|
22
|
+
details;
|
|
23
|
+
constructor(code, message, details) {
|
|
24
|
+
super(message || (0, error_codes_1.getErrorMessage)(code));
|
|
25
|
+
this.name = 'ContinuationControlError';
|
|
26
|
+
this.code = code;
|
|
27
|
+
this.details = details;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.ContinuationControlError = ContinuationControlError;
|
|
31
|
+
/**
|
|
32
|
+
* Continuation Control Manager class
|
|
33
|
+
*/
|
|
34
|
+
class ContinuationControlManager {
|
|
35
|
+
requests;
|
|
36
|
+
requestTimes;
|
|
37
|
+
incompleteReasons;
|
|
38
|
+
approvals;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new ContinuationControlManager
|
|
41
|
+
*/
|
|
42
|
+
constructor() {
|
|
43
|
+
this.requests = new Map();
|
|
44
|
+
this.requestTimes = new Map();
|
|
45
|
+
this.incompleteReasons = [];
|
|
46
|
+
this.approvals = new Map();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if continuation is allowed based on session state
|
|
50
|
+
*/
|
|
51
|
+
canContinue(sessionState) {
|
|
52
|
+
// Block continuation with error statuses
|
|
53
|
+
if (sessionState.overall_status === enums_1.OverallStatus.ERROR) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
if (sessionState.overall_status === enums_1.OverallStatus.NO_EVIDENCE) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
// Require explicit approval for INCOMPLETE status
|
|
60
|
+
if (sessionState.overall_status === enums_1.OverallStatus.INCOMPLETE) {
|
|
61
|
+
return sessionState.has_explicit_approval === true;
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if phase progression is allowed
|
|
67
|
+
*/
|
|
68
|
+
canProgressPhase(sessionState) {
|
|
69
|
+
// Even if all tasks in current phase are complete, require explicit approval
|
|
70
|
+
if (!sessionState.has_explicit_approval) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if approval is required
|
|
77
|
+
*/
|
|
78
|
+
requiresApproval(sessionState) {
|
|
79
|
+
// Approval is required for incomplete sessions
|
|
80
|
+
return sessionState.overall_status === enums_1.OverallStatus.INCOMPLETE &&
|
|
81
|
+
!sessionState.has_explicit_approval;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Record an approval
|
|
85
|
+
* @throws ContinuationControlError with E201 if session ID is missing
|
|
86
|
+
*/
|
|
87
|
+
recordApproval(sessionId, approvedBy) {
|
|
88
|
+
if (!sessionId || sessionId.length === 0) {
|
|
89
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E201_SESSION_ID_MISSING, 'Session ID is required for approval', { sessionId });
|
|
90
|
+
}
|
|
91
|
+
const approval = {
|
|
92
|
+
session_id: sessionId,
|
|
93
|
+
approved_by: approvedBy,
|
|
94
|
+
timestamp: new Date().toISOString(),
|
|
95
|
+
};
|
|
96
|
+
this.approvals.set(sessionId, approval);
|
|
97
|
+
return approval;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validate all continuation conditions
|
|
101
|
+
*/
|
|
102
|
+
validateContinuationConditions(sessionState) {
|
|
103
|
+
const failedConditions = [];
|
|
104
|
+
// Check for minimum task progress
|
|
105
|
+
if (sessionState.tasks_completed === 0) {
|
|
106
|
+
failedConditions.push('minimum_progress');
|
|
107
|
+
}
|
|
108
|
+
// Check evidence validity
|
|
109
|
+
if (sessionState.evidence_valid === false) {
|
|
110
|
+
failedConditions.push('evidence_valid');
|
|
111
|
+
}
|
|
112
|
+
// Check for critical errors
|
|
113
|
+
if (sessionState.no_critical_errors === false) {
|
|
114
|
+
failedConditions.push('no_critical_errors');
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
valid: failedConditions.length === 0,
|
|
118
|
+
failed_conditions: failedConditions,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Request continuation
|
|
123
|
+
* @throws ContinuationControlError with E207 if continuation is meaningless
|
|
124
|
+
*/
|
|
125
|
+
requestContinuation(sessionState) {
|
|
126
|
+
// Reject if all tasks complete
|
|
127
|
+
if (sessionState.overall_status === enums_1.OverallStatus.COMPLETE) {
|
|
128
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E207_CONTINUATION_REJECTED, 'Cannot continue: all tasks already complete', { overall_status: sessionState.overall_status });
|
|
129
|
+
}
|
|
130
|
+
// Reject if no remaining work
|
|
131
|
+
if (sessionState.remaining_work && sessionState.remaining_work.length === 0 &&
|
|
132
|
+
sessionState.tasks_completed >= sessionState.tasks_total) {
|
|
133
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E207_CONTINUATION_REJECTED, 'Cannot continue: no remaining work', { tasks_completed: sessionState.tasks_completed, tasks_total: sessionState.tasks_total });
|
|
134
|
+
}
|
|
135
|
+
// Reject if status is INVALID
|
|
136
|
+
if (sessionState.overall_status === enums_1.OverallStatus.INVALID) {
|
|
137
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E207_CONTINUATION_REJECTED, 'Cannot continue: session status is INVALID', { overall_status: sessionState.overall_status });
|
|
138
|
+
}
|
|
139
|
+
// Reject duplicate continuation requests
|
|
140
|
+
if (sessionState.continuation_in_progress) {
|
|
141
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E207_CONTINUATION_REJECTED, 'Cannot continue: continuation already in progress', { continuation_in_progress: true });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create a continuation request
|
|
146
|
+
*/
|
|
147
|
+
createContinuationRequest(sessionState) {
|
|
148
|
+
const requestId = `req-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
149
|
+
const now = Date.now();
|
|
150
|
+
const request = {
|
|
151
|
+
request_id: requestId,
|
|
152
|
+
session_id: sessionState.session_id,
|
|
153
|
+
status: 'pending',
|
|
154
|
+
requested_at: new Date(now).toISOString(),
|
|
155
|
+
};
|
|
156
|
+
this.requests.set(requestId, request);
|
|
157
|
+
this.requestTimes.set(requestId, now);
|
|
158
|
+
return request;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Approve a continuation request
|
|
162
|
+
*/
|
|
163
|
+
approveContinuationRequest(requestId) {
|
|
164
|
+
const request = this.requests.get(requestId);
|
|
165
|
+
if (!request) {
|
|
166
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E207_CONTINUATION_REJECTED, `Request not found: ${requestId}`, { requestId });
|
|
167
|
+
}
|
|
168
|
+
const approvedRequest = {
|
|
169
|
+
...request,
|
|
170
|
+
status: 'approved',
|
|
171
|
+
approved_at: new Date().toISOString(),
|
|
172
|
+
};
|
|
173
|
+
this.requests.set(requestId, approvedRequest);
|
|
174
|
+
return approvedRequest;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Reject a continuation request
|
|
178
|
+
*/
|
|
179
|
+
rejectContinuationRequest(requestId, reason) {
|
|
180
|
+
const request = this.requests.get(requestId);
|
|
181
|
+
if (!request) {
|
|
182
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E207_CONTINUATION_REJECTED, `Request not found: ${requestId}`, { requestId });
|
|
183
|
+
}
|
|
184
|
+
const rejectedRequest = {
|
|
185
|
+
...request,
|
|
186
|
+
status: 'rejected',
|
|
187
|
+
rejection_reason: reason,
|
|
188
|
+
};
|
|
189
|
+
this.requests.set(requestId, rejectedRequest);
|
|
190
|
+
return rejectedRequest;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Set request time for testing purposes
|
|
194
|
+
*/
|
|
195
|
+
setRequestTimeForTesting(requestId, timestamp) {
|
|
196
|
+
this.requestTimes.set(requestId, timestamp);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Expire old pending requests
|
|
200
|
+
*/
|
|
201
|
+
expireOldRequests(timeoutMs) {
|
|
202
|
+
const now = Date.now();
|
|
203
|
+
for (const [requestId, request] of this.requests) {
|
|
204
|
+
if (request.status === 'pending') {
|
|
205
|
+
const requestTime = this.requestTimes.get(requestId);
|
|
206
|
+
if (requestTime && (now - requestTime) > timeoutMs) {
|
|
207
|
+
const expiredRequest = {
|
|
208
|
+
...request,
|
|
209
|
+
status: 'expired',
|
|
210
|
+
};
|
|
211
|
+
this.requests.set(requestId, expiredRequest);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get a continuation request by ID
|
|
218
|
+
*/
|
|
219
|
+
getContinuationRequest(requestId) {
|
|
220
|
+
const request = this.requests.get(requestId);
|
|
221
|
+
if (!request) {
|
|
222
|
+
throw new ContinuationControlError(error_codes_1.ErrorCode.E207_CONTINUATION_REJECTED, `Request not found: ${requestId}`, { requestId });
|
|
223
|
+
}
|
|
224
|
+
return request;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Determine next action based on session state
|
|
228
|
+
*/
|
|
229
|
+
determineNextAction(sessionState) {
|
|
230
|
+
// COMPLETE status: next_action=true
|
|
231
|
+
if (sessionState.overall_status === enums_1.OverallStatus.COMPLETE) {
|
|
232
|
+
return {
|
|
233
|
+
next_action: true,
|
|
234
|
+
next_action_reason: 'Session complete - ready for next task',
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
// ERROR status: next_action=false
|
|
238
|
+
if (sessionState.overall_status === enums_1.OverallStatus.ERROR) {
|
|
239
|
+
return {
|
|
240
|
+
next_action: false,
|
|
241
|
+
next_action_reason: 'Session has error - cannot proceed',
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
// INVALID status: next_action=false
|
|
245
|
+
if (sessionState.overall_status === enums_1.OverallStatus.INVALID) {
|
|
246
|
+
return {
|
|
247
|
+
next_action: false,
|
|
248
|
+
next_action_reason: 'Session status is invalid',
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
// NO_EVIDENCE status: next_action=false
|
|
252
|
+
if (sessionState.overall_status === enums_1.OverallStatus.NO_EVIDENCE) {
|
|
253
|
+
return {
|
|
254
|
+
next_action: false,
|
|
255
|
+
next_action_reason: 'No evidence collected - cannot proceed',
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
// INCOMPLETE: check for approval and conditions
|
|
259
|
+
if (sessionState.overall_status === enums_1.OverallStatus.INCOMPLETE) {
|
|
260
|
+
if (!sessionState.has_explicit_approval) {
|
|
261
|
+
return {
|
|
262
|
+
next_action: false,
|
|
263
|
+
next_action_reason: 'Explicit approval required for continuation',
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
// With approval and valid conditions
|
|
267
|
+
const validation = this.validateContinuationConditions(sessionState);
|
|
268
|
+
if (validation.valid) {
|
|
269
|
+
return {
|
|
270
|
+
next_action: true,
|
|
271
|
+
next_action_reason: 'Continuation approved - ready to proceed',
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
next_action: false,
|
|
276
|
+
next_action_reason: `Conditions not met: ${validation.failed_conditions.join(', ')}`,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
// Default: false
|
|
280
|
+
return {
|
|
281
|
+
next_action: false,
|
|
282
|
+
next_action_reason: 'Unknown status',
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Record a reason for incomplete task
|
|
287
|
+
*/
|
|
288
|
+
recordIncompleteReason(taskId, reason) {
|
|
289
|
+
this.incompleteReasons.push({
|
|
290
|
+
task_id: taskId,
|
|
291
|
+
reason,
|
|
292
|
+
timestamp: new Date().toISOString(),
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get all incomplete task reasons
|
|
297
|
+
*/
|
|
298
|
+
getIncompleteTaskReasons() {
|
|
299
|
+
return [...this.incompleteReasons];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
exports.ContinuationControlManager = ContinuationControlManager;
|
|
303
|
+
//# sourceMappingURL=continuation-control-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation-control-manager.js","sourceRoot":"","sources":["../../src/continuation/continuation-control-manager.ts"],"names":[],"mappings":"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"}
|