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,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Evidence Model
|
|
4
|
+
* Based on 05_DATA_MODELS.md L39-52
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.EvidenceValidationError = void 0;
|
|
8
|
+
exports.createEvidence = createEvidence;
|
|
9
|
+
exports.validateEvidence = validateEvidence;
|
|
10
|
+
exports.addArtifact = addArtifact;
|
|
11
|
+
exports.markIntegrityValidated = markIntegrityValidated;
|
|
12
|
+
exports.addRawEvidenceRef = addRawEvidenceRef;
|
|
13
|
+
exports.verifyEvidenceHash = verifyEvidenceHash;
|
|
14
|
+
const uuid_1 = require("uuid");
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
/**
|
|
17
|
+
* Evidence validation error
|
|
18
|
+
*/
|
|
19
|
+
class EvidenceValidationError extends Error {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'EvidenceValidationError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.EvidenceValidationError = EvidenceValidationError;
|
|
26
|
+
/**
|
|
27
|
+
* Calculate SHA256 hash from artifacts
|
|
28
|
+
*/
|
|
29
|
+
function calculateHash(artifacts) {
|
|
30
|
+
const hash = (0, crypto_1.createHash)('sha256');
|
|
31
|
+
for (const artifact of artifacts) {
|
|
32
|
+
hash.update(artifact.path);
|
|
33
|
+
if (artifact.content) {
|
|
34
|
+
hash.update(artifact.content);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// If no artifacts, hash empty string
|
|
38
|
+
if (artifacts.length === 0) {
|
|
39
|
+
hash.update('');
|
|
40
|
+
}
|
|
41
|
+
return `sha256:${hash.digest('hex')}`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a new evidence record
|
|
45
|
+
*/
|
|
46
|
+
function createEvidence(operationType, artifacts, executorId, rawLogs) {
|
|
47
|
+
return {
|
|
48
|
+
evidence_id: `evidence-${(0, uuid_1.v4)()}`,
|
|
49
|
+
timestamp: new Date().toISOString(),
|
|
50
|
+
operation_type: operationType,
|
|
51
|
+
executor_id: executorId,
|
|
52
|
+
artifacts,
|
|
53
|
+
hash: calculateHash(artifacts),
|
|
54
|
+
raw_logs: rawLogs || '',
|
|
55
|
+
atomic_operation: true,
|
|
56
|
+
raw_evidence_refs: [],
|
|
57
|
+
integrity_validated: false,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validate an evidence object
|
|
62
|
+
* @throws EvidenceValidationError if validation fails
|
|
63
|
+
*/
|
|
64
|
+
function validateEvidence(evidence) {
|
|
65
|
+
if (!evidence.evidence_id || evidence.evidence_id.length === 0) {
|
|
66
|
+
throw new EvidenceValidationError('evidence_id is required');
|
|
67
|
+
}
|
|
68
|
+
if (!evidence.timestamp || evidence.timestamp.length === 0) {
|
|
69
|
+
throw new EvidenceValidationError('timestamp is required');
|
|
70
|
+
}
|
|
71
|
+
// Validate timestamp format
|
|
72
|
+
const timestamp = new Date(evidence.timestamp);
|
|
73
|
+
if (isNaN(timestamp.getTime())) {
|
|
74
|
+
throw new EvidenceValidationError('timestamp must be a valid ISO 8601 timestamp');
|
|
75
|
+
}
|
|
76
|
+
if (!evidence.operation_type || evidence.operation_type.length === 0) {
|
|
77
|
+
throw new EvidenceValidationError('operation_type is required');
|
|
78
|
+
}
|
|
79
|
+
if (!Array.isArray(evidence.artifacts)) {
|
|
80
|
+
throw new EvidenceValidationError('artifacts must be an array');
|
|
81
|
+
}
|
|
82
|
+
if (!evidence.hash || evidence.hash.length === 0) {
|
|
83
|
+
throw new EvidenceValidationError('hash is required');
|
|
84
|
+
}
|
|
85
|
+
if (!evidence.hash.startsWith('sha256:')) {
|
|
86
|
+
throw new EvidenceValidationError('hash must start with sha256:');
|
|
87
|
+
}
|
|
88
|
+
if (!Array.isArray(evidence.raw_evidence_refs)) {
|
|
89
|
+
throw new EvidenceValidationError('raw_evidence_refs must be an array');
|
|
90
|
+
}
|
|
91
|
+
if (typeof evidence.atomic_operation !== 'boolean') {
|
|
92
|
+
throw new EvidenceValidationError('atomic_operation must be a boolean');
|
|
93
|
+
}
|
|
94
|
+
if (typeof evidence.integrity_validated !== 'boolean') {
|
|
95
|
+
throw new EvidenceValidationError('integrity_validated must be a boolean');
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Add artifact to evidence
|
|
101
|
+
*/
|
|
102
|
+
function addArtifact(evidence, artifact) {
|
|
103
|
+
const newArtifacts = [...evidence.artifacts, artifact];
|
|
104
|
+
return {
|
|
105
|
+
...evidence,
|
|
106
|
+
artifacts: newArtifacts,
|
|
107
|
+
hash: calculateHash(newArtifacts),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Mark evidence as integrity validated
|
|
112
|
+
*/
|
|
113
|
+
function markIntegrityValidated(evidence) {
|
|
114
|
+
return {
|
|
115
|
+
...evidence,
|
|
116
|
+
integrity_validated: true,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Add raw evidence reference
|
|
121
|
+
*/
|
|
122
|
+
function addRawEvidenceRef(evidence, ref) {
|
|
123
|
+
return {
|
|
124
|
+
...evidence,
|
|
125
|
+
raw_evidence_refs: [...evidence.raw_evidence_refs, ref],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Verify evidence hash matches artifacts
|
|
130
|
+
*/
|
|
131
|
+
function verifyEvidenceHash(evidence) {
|
|
132
|
+
const expectedHash = calculateHash(evidence.artifacts);
|
|
133
|
+
return evidence.hash === expectedHash;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/models/evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExecutionResult Model
|
|
3
|
+
* Based on 05_DATA_MODELS.md L65-78
|
|
4
|
+
*/
|
|
5
|
+
import { OverallStatus } from './enums';
|
|
6
|
+
import { Task } from './task';
|
|
7
|
+
/**
|
|
8
|
+
* Evidence summary structure
|
|
9
|
+
*/
|
|
10
|
+
export interface EvidenceSummary {
|
|
11
|
+
total: number;
|
|
12
|
+
collected: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Evidence inventory structure
|
|
16
|
+
*/
|
|
17
|
+
export interface EvidenceInventoryResult {
|
|
18
|
+
total_evidence_items: number;
|
|
19
|
+
missing_evidence_operations: string[];
|
|
20
|
+
integrity_failures: string[];
|
|
21
|
+
raw_evidence_files: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Violation record
|
|
25
|
+
*/
|
|
26
|
+
export interface Violation {
|
|
27
|
+
type: string;
|
|
28
|
+
message: string;
|
|
29
|
+
timestamp: string;
|
|
30
|
+
task_id?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Incomplete task reason
|
|
34
|
+
*/
|
|
35
|
+
export interface IncompleteTaskReason {
|
|
36
|
+
task_id: string;
|
|
37
|
+
reason: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* ExecutionResult data structure
|
|
41
|
+
*/
|
|
42
|
+
export interface ExecutionResult {
|
|
43
|
+
overall_status: OverallStatus;
|
|
44
|
+
tasks: Task[];
|
|
45
|
+
evidence_summary: EvidenceSummary;
|
|
46
|
+
next_action: boolean;
|
|
47
|
+
next_action_reason: string;
|
|
48
|
+
violations: Violation[];
|
|
49
|
+
session_id: string;
|
|
50
|
+
incomplete_task_reasons: IncompleteTaskReason[];
|
|
51
|
+
evidence_inventory: EvidenceInventoryResult;
|
|
52
|
+
speculative_language_detected: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* ExecutionResult validation error
|
|
56
|
+
*/
|
|
57
|
+
export declare class ExecutionResultValidationError extends Error {
|
|
58
|
+
constructor(message: string);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a new execution result
|
|
62
|
+
*/
|
|
63
|
+
export declare function createExecutionResult(sessionId: string, status: OverallStatus, tasks: Task[]): ExecutionResult;
|
|
64
|
+
/**
|
|
65
|
+
* Validate an execution result object
|
|
66
|
+
* @throws ExecutionResultValidationError if validation fails
|
|
67
|
+
*/
|
|
68
|
+
export declare function validateExecutionResult(result: ExecutionResult): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Add violation to execution result
|
|
71
|
+
*/
|
|
72
|
+
export declare function addViolation(result: ExecutionResult, type: string, message: string, taskId?: string): ExecutionResult;
|
|
73
|
+
/**
|
|
74
|
+
* Add incomplete task reason
|
|
75
|
+
*/
|
|
76
|
+
export declare function addIncompleteTaskReason(result: ExecutionResult, taskId: string, reason: string): ExecutionResult;
|
|
77
|
+
/**
|
|
78
|
+
* Update evidence inventory
|
|
79
|
+
*/
|
|
80
|
+
export declare function updateEvidenceInventory(result: ExecutionResult, inventory: Partial<EvidenceInventoryResult>): ExecutionResult;
|
|
81
|
+
/**
|
|
82
|
+
* Mark speculative language detected
|
|
83
|
+
*/
|
|
84
|
+
export declare function markSpeculativeLanguageDetected(result: ExecutionResult): ExecutionResult;
|
|
85
|
+
/**
|
|
86
|
+
* Update next action with explicit approval
|
|
87
|
+
*/
|
|
88
|
+
export declare function approveNextAction(result: ExecutionResult, reason: string): ExecutionResult;
|
|
89
|
+
//# sourceMappingURL=execution-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-result.d.ts","sourceRoot":"","sources":["../../src/models/execution-result.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,2BAA2B,EAAE,MAAM,EAAE,CAAC;IACtC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,aAAa,CAAC;IAC9B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,gBAAgB,EAAE,eAAe,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,oBAAoB,EAAE,CAAC;IAChD,kBAAkB,EAAE,uBAAuB,CAAC;IAC5C,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AAyCD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,IAAI,EAAE,GACZ,eAAe,CAqBjB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAiDxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,eAAe,CAYjB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,eAAe,CAQjB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAC1C,eAAe,CAQjB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAYxF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAW1F"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ExecutionResult Model
|
|
4
|
+
* Based on 05_DATA_MODELS.md L65-78
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ExecutionResultValidationError = void 0;
|
|
8
|
+
exports.createExecutionResult = createExecutionResult;
|
|
9
|
+
exports.validateExecutionResult = validateExecutionResult;
|
|
10
|
+
exports.addViolation = addViolation;
|
|
11
|
+
exports.addIncompleteTaskReason = addIncompleteTaskReason;
|
|
12
|
+
exports.updateEvidenceInventory = updateEvidenceInventory;
|
|
13
|
+
exports.markSpeculativeLanguageDetected = markSpeculativeLanguageDetected;
|
|
14
|
+
exports.approveNextAction = approveNextAction;
|
|
15
|
+
const enums_1 = require("./enums");
|
|
16
|
+
/**
|
|
17
|
+
* ExecutionResult validation error
|
|
18
|
+
*/
|
|
19
|
+
class ExecutionResultValidationError extends Error {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'ExecutionResultValidationError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.ExecutionResultValidationError = ExecutionResultValidationError;
|
|
26
|
+
/**
|
|
27
|
+
* Determine if next action is allowed based on status
|
|
28
|
+
*/
|
|
29
|
+
function determineNextAction(status) {
|
|
30
|
+
switch (status) {
|
|
31
|
+
case enums_1.OverallStatus.COMPLETE:
|
|
32
|
+
return true;
|
|
33
|
+
case enums_1.OverallStatus.INCOMPLETE:
|
|
34
|
+
// Requires explicit continuation approval
|
|
35
|
+
return false;
|
|
36
|
+
case enums_1.OverallStatus.ERROR:
|
|
37
|
+
case enums_1.OverallStatus.INVALID:
|
|
38
|
+
case enums_1.OverallStatus.NO_EVIDENCE:
|
|
39
|
+
return false;
|
|
40
|
+
default:
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate next action reason based on status
|
|
46
|
+
*/
|
|
47
|
+
function generateNextActionReason(status, tasks) {
|
|
48
|
+
switch (status) {
|
|
49
|
+
case enums_1.OverallStatus.COMPLETE:
|
|
50
|
+
return 'All tasks completed successfully';
|
|
51
|
+
case enums_1.OverallStatus.INCOMPLETE:
|
|
52
|
+
return 'Session incomplete - continuation approval required';
|
|
53
|
+
case enums_1.OverallStatus.ERROR:
|
|
54
|
+
return 'Session terminated due to error';
|
|
55
|
+
case enums_1.OverallStatus.INVALID:
|
|
56
|
+
return 'Session invalid - critical validation failure';
|
|
57
|
+
case enums_1.OverallStatus.NO_EVIDENCE:
|
|
58
|
+
return 'Session incomplete - missing required evidence';
|
|
59
|
+
default:
|
|
60
|
+
return 'Unknown status';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a new execution result
|
|
65
|
+
*/
|
|
66
|
+
function createExecutionResult(sessionId, status, tasks) {
|
|
67
|
+
return {
|
|
68
|
+
overall_status: status,
|
|
69
|
+
tasks,
|
|
70
|
+
evidence_summary: {
|
|
71
|
+
total: tasks.reduce((sum, t) => sum + t.evidence_refs.length, 0),
|
|
72
|
+
collected: tasks.reduce((sum, t) => sum + t.evidence_refs.length, 0),
|
|
73
|
+
},
|
|
74
|
+
next_action: determineNextAction(status),
|
|
75
|
+
next_action_reason: generateNextActionReason(status, tasks),
|
|
76
|
+
violations: [],
|
|
77
|
+
session_id: sessionId,
|
|
78
|
+
incomplete_task_reasons: [],
|
|
79
|
+
evidence_inventory: {
|
|
80
|
+
total_evidence_items: 0,
|
|
81
|
+
missing_evidence_operations: [],
|
|
82
|
+
integrity_failures: [],
|
|
83
|
+
raw_evidence_files: [],
|
|
84
|
+
},
|
|
85
|
+
speculative_language_detected: false,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Validate an execution result object
|
|
90
|
+
* @throws ExecutionResultValidationError if validation fails
|
|
91
|
+
*/
|
|
92
|
+
function validateExecutionResult(result) {
|
|
93
|
+
if (!result.session_id || result.session_id.length === 0) {
|
|
94
|
+
throw new ExecutionResultValidationError('session_id is required');
|
|
95
|
+
}
|
|
96
|
+
if (result.overall_status === undefined) {
|
|
97
|
+
throw new ExecutionResultValidationError('overall_status is required');
|
|
98
|
+
}
|
|
99
|
+
if (!Array.isArray(result.tasks)) {
|
|
100
|
+
throw new ExecutionResultValidationError('tasks must be an array');
|
|
101
|
+
}
|
|
102
|
+
if (!result.evidence_summary) {
|
|
103
|
+
throw new ExecutionResultValidationError('evidence_summary is required');
|
|
104
|
+
}
|
|
105
|
+
if (result.next_action === undefined) {
|
|
106
|
+
throw new ExecutionResultValidationError('next_action is required');
|
|
107
|
+
}
|
|
108
|
+
if (!result.next_action_reason || result.next_action_reason.length === 0) {
|
|
109
|
+
throw new ExecutionResultValidationError('next_action_reason is required');
|
|
110
|
+
}
|
|
111
|
+
if (!Array.isArray(result.violations)) {
|
|
112
|
+
throw new ExecutionResultValidationError('violations must be an array');
|
|
113
|
+
}
|
|
114
|
+
if (!Array.isArray(result.incomplete_task_reasons)) {
|
|
115
|
+
throw new ExecutionResultValidationError('incomplete_task_reasons must be an array');
|
|
116
|
+
}
|
|
117
|
+
if (!result.evidence_inventory) {
|
|
118
|
+
throw new ExecutionResultValidationError('evidence_inventory is required');
|
|
119
|
+
}
|
|
120
|
+
if (result.speculative_language_detected === undefined) {
|
|
121
|
+
throw new ExecutionResultValidationError('speculative_language_detected is required');
|
|
122
|
+
}
|
|
123
|
+
// Property 8: Speculative language detection prevents COMPLETE status
|
|
124
|
+
if (result.speculative_language_detected && result.overall_status === enums_1.OverallStatus.COMPLETE) {
|
|
125
|
+
throw new ExecutionResultValidationError('Cannot have COMPLETE status when speculative_language_detected is true');
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Add violation to execution result
|
|
131
|
+
*/
|
|
132
|
+
function addViolation(result, type, message, taskId) {
|
|
133
|
+
const violation = {
|
|
134
|
+
type,
|
|
135
|
+
message,
|
|
136
|
+
timestamp: new Date().toISOString(),
|
|
137
|
+
task_id: taskId,
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
...result,
|
|
141
|
+
violations: [...result.violations, violation],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Add incomplete task reason
|
|
146
|
+
*/
|
|
147
|
+
function addIncompleteTaskReason(result, taskId, reason) {
|
|
148
|
+
return {
|
|
149
|
+
...result,
|
|
150
|
+
incomplete_task_reasons: [
|
|
151
|
+
...result.incomplete_task_reasons,
|
|
152
|
+
{ task_id: taskId, reason },
|
|
153
|
+
],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Update evidence inventory
|
|
158
|
+
*/
|
|
159
|
+
function updateEvidenceInventory(result, inventory) {
|
|
160
|
+
return {
|
|
161
|
+
...result,
|
|
162
|
+
evidence_inventory: {
|
|
163
|
+
...result.evidence_inventory,
|
|
164
|
+
...inventory,
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Mark speculative language detected
|
|
170
|
+
*/
|
|
171
|
+
function markSpeculativeLanguageDetected(result) {
|
|
172
|
+
return {
|
|
173
|
+
...result,
|
|
174
|
+
speculative_language_detected: true,
|
|
175
|
+
// Downgrade status if it was COMPLETE
|
|
176
|
+
overall_status: result.overall_status === enums_1.OverallStatus.COMPLETE
|
|
177
|
+
? enums_1.OverallStatus.INVALID
|
|
178
|
+
: result.overall_status,
|
|
179
|
+
next_action: false,
|
|
180
|
+
next_action_reason: 'Speculative language detected - validation required',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Update next action with explicit approval
|
|
185
|
+
*/
|
|
186
|
+
function approveNextAction(result, reason) {
|
|
187
|
+
// Only allow approval for INCOMPLETE status
|
|
188
|
+
if (result.overall_status !== enums_1.OverallStatus.INCOMPLETE) {
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
...result,
|
|
193
|
+
next_action: true,
|
|
194
|
+
next_action_reason: reason,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=execution-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-result.js","sourceRoot":"","sources":["../../src/models/execution-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileLock Model
|
|
3
|
+
* Based on 05_DATA_MODELS.md L54-63
|
|
4
|
+
*
|
|
5
|
+
* IMPORTANT: expires_at is INFORMATIONAL ONLY
|
|
6
|
+
* Auto-release based on expires_at is forbidden (E405 RESOURCE_RELEASE_FAILURE)
|
|
7
|
+
* Locks must be explicitly released by the holder.
|
|
8
|
+
*/
|
|
9
|
+
import { LockType } from './enums';
|
|
10
|
+
/**
|
|
11
|
+
* FileLock data structure
|
|
12
|
+
*/
|
|
13
|
+
export interface FileLock {
|
|
14
|
+
lock_id: string;
|
|
15
|
+
file_path: string;
|
|
16
|
+
holder_executor_id: string;
|
|
17
|
+
acquired_at: string;
|
|
18
|
+
expires_at: string;
|
|
19
|
+
lock_type: LockType;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* FileLock validation error
|
|
23
|
+
*/
|
|
24
|
+
export declare class FileLockValidationError extends Error {
|
|
25
|
+
constructor(message: string);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a new file lock
|
|
29
|
+
*
|
|
30
|
+
* Note: expires_at is set but is INFORMATIONAL ONLY.
|
|
31
|
+
* The lock manager should NOT automatically release locks based on expires_at.
|
|
32
|
+
* Auto-release attempt triggers E405 RESOURCE_RELEASE_FAILURE.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createFileLock(filePath: string, holderExecutorId: string, lockType: LockType, durationMs?: number): FileLock;
|
|
35
|
+
/**
|
|
36
|
+
* Validate a file lock object
|
|
37
|
+
* @throws FileLockValidationError if validation fails
|
|
38
|
+
*/
|
|
39
|
+
export declare function validateFileLock(lock: FileLock): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Check if a lock is held by a specific executor
|
|
42
|
+
*/
|
|
43
|
+
export declare function isLockHeldBy(lock: FileLock, executorId: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Check if lock type is compatible with requested operation
|
|
46
|
+
* READ locks allow multiple readers
|
|
47
|
+
* WRITE locks are exclusive
|
|
48
|
+
*/
|
|
49
|
+
export declare function isLockCompatible(existingLock: FileLock, requestedType: LockType): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Extend lock expiration (informational only)
|
|
52
|
+
* Note: This does NOT change the behavior of the lock.
|
|
53
|
+
* It only updates the informational expires_at field.
|
|
54
|
+
*/
|
|
55
|
+
export declare function extendLockExpiration(lock: FileLock, additionalMs?: number): FileLock;
|
|
56
|
+
/**
|
|
57
|
+
* Check if expires_at is in the past (informational only)
|
|
58
|
+
* Note: This is informational only and should NOT be used for automatic release.
|
|
59
|
+
* Auto-release based on this would trigger E405 RESOURCE_RELEASE_FAILURE.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isExpired(lock: FileLock): boolean;
|
|
62
|
+
//# sourceMappingURL=file-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/models/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,QAAQ,EAClB,UAAU,GAAE,MAAiC,GAC5C,QAAQ,CAYV;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAuCxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAExE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAG,OAAO,CAYzF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,YAAY,GAAE,MAAiC,GAC9C,QAAQ,CAQV;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAGjD"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FileLock Model
|
|
4
|
+
* Based on 05_DATA_MODELS.md L54-63
|
|
5
|
+
*
|
|
6
|
+
* IMPORTANT: expires_at is INFORMATIONAL ONLY
|
|
7
|
+
* Auto-release based on expires_at is forbidden (E405 RESOURCE_RELEASE_FAILURE)
|
|
8
|
+
* Locks must be explicitly released by the holder.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.FileLockValidationError = void 0;
|
|
12
|
+
exports.createFileLock = createFileLock;
|
|
13
|
+
exports.validateFileLock = validateFileLock;
|
|
14
|
+
exports.isLockHeldBy = isLockHeldBy;
|
|
15
|
+
exports.isLockCompatible = isLockCompatible;
|
|
16
|
+
exports.extendLockExpiration = extendLockExpiration;
|
|
17
|
+
exports.isExpired = isExpired;
|
|
18
|
+
const uuid_1 = require("uuid");
|
|
19
|
+
const enums_1 = require("./enums");
|
|
20
|
+
/**
|
|
21
|
+
* Default lock duration in milliseconds (5 minutes)
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_LOCK_DURATION_MS = 5 * 60 * 1000;
|
|
24
|
+
/**
|
|
25
|
+
* FileLock validation error
|
|
26
|
+
*/
|
|
27
|
+
class FileLockValidationError extends Error {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = 'FileLockValidationError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.FileLockValidationError = FileLockValidationError;
|
|
34
|
+
/**
|
|
35
|
+
* Create a new file lock
|
|
36
|
+
*
|
|
37
|
+
* Note: expires_at is set but is INFORMATIONAL ONLY.
|
|
38
|
+
* The lock manager should NOT automatically release locks based on expires_at.
|
|
39
|
+
* Auto-release attempt triggers E405 RESOURCE_RELEASE_FAILURE.
|
|
40
|
+
*/
|
|
41
|
+
function createFileLock(filePath, holderExecutorId, lockType, durationMs = DEFAULT_LOCK_DURATION_MS) {
|
|
42
|
+
const now = new Date();
|
|
43
|
+
const expiresAt = new Date(now.getTime() + durationMs);
|
|
44
|
+
return {
|
|
45
|
+
lock_id: `lock-${(0, uuid_1.v4)()}`,
|
|
46
|
+
file_path: filePath,
|
|
47
|
+
holder_executor_id: holderExecutorId,
|
|
48
|
+
acquired_at: now.toISOString(),
|
|
49
|
+
expires_at: expiresAt.toISOString(),
|
|
50
|
+
lock_type: lockType,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate a file lock object
|
|
55
|
+
* @throws FileLockValidationError if validation fails
|
|
56
|
+
*/
|
|
57
|
+
function validateFileLock(lock) {
|
|
58
|
+
if (!lock.lock_id || lock.lock_id.length === 0) {
|
|
59
|
+
throw new FileLockValidationError('lock_id is required');
|
|
60
|
+
}
|
|
61
|
+
if (!lock.file_path || lock.file_path.length === 0) {
|
|
62
|
+
throw new FileLockValidationError('file_path is required');
|
|
63
|
+
}
|
|
64
|
+
if (!lock.holder_executor_id || lock.holder_executor_id.length === 0) {
|
|
65
|
+
throw new FileLockValidationError('holder_executor_id is required');
|
|
66
|
+
}
|
|
67
|
+
if (!lock.acquired_at || lock.acquired_at.length === 0) {
|
|
68
|
+
throw new FileLockValidationError('acquired_at is required');
|
|
69
|
+
}
|
|
70
|
+
// Validate acquired_at timestamp format
|
|
71
|
+
const acquiredAt = new Date(lock.acquired_at);
|
|
72
|
+
if (isNaN(acquiredAt.getTime())) {
|
|
73
|
+
throw new FileLockValidationError('acquired_at must be a valid ISO 8601 timestamp');
|
|
74
|
+
}
|
|
75
|
+
if (!lock.expires_at || lock.expires_at.length === 0) {
|
|
76
|
+
throw new FileLockValidationError('expires_at is required');
|
|
77
|
+
}
|
|
78
|
+
// Validate expires_at timestamp format
|
|
79
|
+
const expiresAt = new Date(lock.expires_at);
|
|
80
|
+
if (isNaN(expiresAt.getTime())) {
|
|
81
|
+
throw new FileLockValidationError('expires_at must be a valid ISO 8601 timestamp');
|
|
82
|
+
}
|
|
83
|
+
// Validate lock_type
|
|
84
|
+
if (!Object.values(enums_1.LockType).includes(lock.lock_type)) {
|
|
85
|
+
throw new FileLockValidationError('lock_type must be a valid LockType');
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if a lock is held by a specific executor
|
|
91
|
+
*/
|
|
92
|
+
function isLockHeldBy(lock, executorId) {
|
|
93
|
+
return lock.holder_executor_id === executorId;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if lock type is compatible with requested operation
|
|
97
|
+
* READ locks allow multiple readers
|
|
98
|
+
* WRITE locks are exclusive
|
|
99
|
+
*/
|
|
100
|
+
function isLockCompatible(existingLock, requestedType) {
|
|
101
|
+
// WRITE lock is exclusive
|
|
102
|
+
if (existingLock.lock_type === enums_1.LockType.WRITE) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
// READ lock only allows other READ locks
|
|
106
|
+
if (existingLock.lock_type === enums_1.LockType.READ) {
|
|
107
|
+
return requestedType === enums_1.LockType.READ;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Extend lock expiration (informational only)
|
|
113
|
+
* Note: This does NOT change the behavior of the lock.
|
|
114
|
+
* It only updates the informational expires_at field.
|
|
115
|
+
*/
|
|
116
|
+
function extendLockExpiration(lock, additionalMs = DEFAULT_LOCK_DURATION_MS) {
|
|
117
|
+
const currentExpires = new Date(lock.expires_at);
|
|
118
|
+
const newExpires = new Date(currentExpires.getTime() + additionalMs);
|
|
119
|
+
return {
|
|
120
|
+
...lock,
|
|
121
|
+
expires_at: newExpires.toISOString(),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if expires_at is in the past (informational only)
|
|
126
|
+
* Note: This is informational only and should NOT be used for automatic release.
|
|
127
|
+
* Auto-release based on this would trigger E405 RESOURCE_RELEASE_FAILURE.
|
|
128
|
+
*/
|
|
129
|
+
function isExpired(lock) {
|
|
130
|
+
const expiresAt = new Date(lock.expires_at);
|
|
131
|
+
return expiresAt < new Date();
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=file-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/models/file-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Models Index
|
|
3
|
+
* Re-exports all model definitions for convenient importing
|
|
4
|
+
*/
|
|
5
|
+
export { OverallStatus, TaskStatus, Phase, LifecyclePhase, LockType, EvidenceType, getStatusPriority, aggregateStatus, isTerminalStatus, getNextPhase, isValidPhaseTransition, getPhaseIndex, getAllPhases, isFirstPhase, isLastPhase, BlockedReason, TerminatedBy, } from './enums';
|
|
6
|
+
export { Session, SessionStatus, SessionValidationError, createSession, validateSession, updateSessionPhase, updateSessionStatus, completeSession, failSession, } from './session';
|
|
7
|
+
export { Task, GranularityLimits, TaskValidationError, createTask, validateTask, updateTaskStatus, assignExecutor, addEvidenceRef, addModifiedFile, addTestRun, approveDecomposition, } from './task';
|
|
8
|
+
export { Evidence, Artifact, EvidenceValidationError, createEvidence, validateEvidence, addArtifact, markIntegrityValidated, addRawEvidenceRef, verifyEvidenceHash, } from './evidence';
|
|
9
|
+
export { FileLock, FileLockValidationError, createFileLock, validateFileLock, isLockHeldBy, isLockCompatible, extendLockExpiration, isExpired, } from './file-lock';
|
|
10
|
+
export { ExecutionResult, EvidenceSummary, EvidenceInventoryResult, Violation, IncompleteTaskReason, ExecutionResultValidationError, createExecutionResult, validateExecutionResult, addViolation, addIncompleteTaskReason, updateEvidenceInventory, markSpeculativeLanguageDetected, approveNextAction, } from './execution-result';
|
|
11
|
+
export { TaskLimits, LimitViolation, EvidenceInventory, TaskLimitsValidationError, LimitViolationValidationError, EvidenceInventoryValidationError, createTaskLimits, validateTaskLimits, createLimitViolation, validateLimitViolation, createEvidenceInventory, validateEvidenceInventory, addMissingEvidenceOperation, addIntegrityFailure, addRawEvidenceFile, incrementEvidenceCount, hasInventoryIssues, } from './supporting';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,aAAa,EACb,UAAU,EACV,KAAK,EACL,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,OAAO,EACP,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,IAAI,EACJ,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,eAAe,EACf,UAAU,EACV,oBAAoB,GACrB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,QAAQ,EACR,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,oBAAoB,EACpB,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
|