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,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"}