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,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Limit Manager
|
|
3
|
+
* Based on 04_COMPONENTS.md L167-177
|
|
4
|
+
*
|
|
5
|
+
* Responsible for:
|
|
6
|
+
* - Safe defaults (max_files=5, max_tests=10, max_seconds=300)
|
|
7
|
+
* - Limit application via measurable proxies
|
|
8
|
+
* - Fail-closed on limit violation
|
|
9
|
+
* - Chunk size adjustment
|
|
10
|
+
* - Parallel limits (subagents=9, executors=4)
|
|
11
|
+
*/
|
|
12
|
+
import { TaskLimits, LimitViolation } from '../models/supporting';
|
|
13
|
+
import { ErrorCode } from '../errors/error-codes';
|
|
14
|
+
/**
|
|
15
|
+
* Resource Limit Manager Error
|
|
16
|
+
*/
|
|
17
|
+
export declare class ResourceLimitError extends Error {
|
|
18
|
+
readonly code: ErrorCode;
|
|
19
|
+
readonly details?: Record<string, unknown>;
|
|
20
|
+
constructor(code: ErrorCode, message?: string, details?: Record<string, unknown>);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parallel limits interface
|
|
24
|
+
*/
|
|
25
|
+
interface ParallelLimits {
|
|
26
|
+
subagents: number;
|
|
27
|
+
executors: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check result interface
|
|
31
|
+
*/
|
|
32
|
+
interface CheckResult {
|
|
33
|
+
allowed: boolean;
|
|
34
|
+
violation?: LimitViolation;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Usage statistics interface
|
|
38
|
+
*/
|
|
39
|
+
interface UsageStatistics {
|
|
40
|
+
files_used: number;
|
|
41
|
+
files_limit: number;
|
|
42
|
+
files_remaining: number;
|
|
43
|
+
tests_used: number;
|
|
44
|
+
tests_limit: number;
|
|
45
|
+
tests_remaining: number;
|
|
46
|
+
seconds_elapsed: number;
|
|
47
|
+
seconds_limit: number;
|
|
48
|
+
seconds_remaining: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resource Limit Manager class
|
|
52
|
+
*/
|
|
53
|
+
export declare class ResourceLimitManager {
|
|
54
|
+
private limits;
|
|
55
|
+
private parallelLimits;
|
|
56
|
+
private fileCount;
|
|
57
|
+
private testCount;
|
|
58
|
+
private startTime;
|
|
59
|
+
private elapsedOverride;
|
|
60
|
+
private violations;
|
|
61
|
+
private activeSubagents;
|
|
62
|
+
private activeExecutors;
|
|
63
|
+
/**
|
|
64
|
+
* Create a new ResourceLimitManager
|
|
65
|
+
*/
|
|
66
|
+
constructor();
|
|
67
|
+
/**
|
|
68
|
+
* Get default limits
|
|
69
|
+
*/
|
|
70
|
+
getDefaultLimits(): TaskLimits;
|
|
71
|
+
/**
|
|
72
|
+
* Get parallel limits
|
|
73
|
+
*/
|
|
74
|
+
getParallelLimits(): ParallelLimits;
|
|
75
|
+
/**
|
|
76
|
+
* Set task limits with validation
|
|
77
|
+
* @throws ResourceLimitError if limits are out of valid range
|
|
78
|
+
*/
|
|
79
|
+
setLimits(limits: TaskLimits): void;
|
|
80
|
+
/**
|
|
81
|
+
* Set parallel limits with validation
|
|
82
|
+
* @throws ResourceLimitError if limits are out of valid range
|
|
83
|
+
*/
|
|
84
|
+
setParallelLimits(limits: ParallelLimits): void;
|
|
85
|
+
/**
|
|
86
|
+
* Record a file operation
|
|
87
|
+
*/
|
|
88
|
+
recordFileOperation(_filePath: string): void;
|
|
89
|
+
/**
|
|
90
|
+
* Record a test execution
|
|
91
|
+
*/
|
|
92
|
+
recordTestExecution(_testId: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Start the timer
|
|
95
|
+
*/
|
|
96
|
+
startTimer(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Get elapsed seconds
|
|
99
|
+
*/
|
|
100
|
+
getElapsedSeconds(): number;
|
|
101
|
+
/**
|
|
102
|
+
* Set elapsed time for testing purposes
|
|
103
|
+
*/
|
|
104
|
+
setElapsedForTesting(seconds: number): void;
|
|
105
|
+
/**
|
|
106
|
+
* Get file count
|
|
107
|
+
*/
|
|
108
|
+
getFileCount(): number;
|
|
109
|
+
/**
|
|
110
|
+
* Get test count
|
|
111
|
+
*/
|
|
112
|
+
getTestCount(): number;
|
|
113
|
+
/**
|
|
114
|
+
* Check if file count is exceeded
|
|
115
|
+
*/
|
|
116
|
+
isFileCountExceeded(): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Check if test count is exceeded
|
|
119
|
+
*/
|
|
120
|
+
isTestCountExceeded(): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Check if time is exceeded
|
|
123
|
+
*/
|
|
124
|
+
isTimeExceeded(): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Enforce file limit (fail-closed)
|
|
127
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
128
|
+
*/
|
|
129
|
+
enforceFileLimit(_filePath: string): void;
|
|
130
|
+
/**
|
|
131
|
+
* Enforce test limit (fail-closed)
|
|
132
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
133
|
+
*/
|
|
134
|
+
enforceTestLimit(_testId: string): void;
|
|
135
|
+
/**
|
|
136
|
+
* Enforce time limit (fail-closed)
|
|
137
|
+
* @throws ResourceLimitError if limit is exceeded
|
|
138
|
+
*/
|
|
139
|
+
enforceTimeLimit(): void;
|
|
140
|
+
/**
|
|
141
|
+
* Check and record file operation (fail-closed)
|
|
142
|
+
*/
|
|
143
|
+
checkAndRecordFileOperation(filePath: string): CheckResult;
|
|
144
|
+
/**
|
|
145
|
+
* Check and record test execution (fail-closed)
|
|
146
|
+
*/
|
|
147
|
+
checkAndRecordTestExecution(testId: string): CheckResult;
|
|
148
|
+
/**
|
|
149
|
+
* Check time limit
|
|
150
|
+
*/
|
|
151
|
+
checkTimeLimit(): CheckResult;
|
|
152
|
+
/**
|
|
153
|
+
* Suggest chunk size based on remaining capacity
|
|
154
|
+
*/
|
|
155
|
+
suggestChunkSize(totalFiles: number): number;
|
|
156
|
+
/**
|
|
157
|
+
* Get remaining file capacity
|
|
158
|
+
*/
|
|
159
|
+
getRemainingFileCapacity(): number;
|
|
160
|
+
/**
|
|
161
|
+
* Start a subagent
|
|
162
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
163
|
+
*/
|
|
164
|
+
startSubagent(subagentId: string): void;
|
|
165
|
+
/**
|
|
166
|
+
* End a subagent
|
|
167
|
+
*/
|
|
168
|
+
endSubagent(subagentId: string): void;
|
|
169
|
+
/**
|
|
170
|
+
* Start an executor
|
|
171
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
172
|
+
*/
|
|
173
|
+
startExecutor(executorId: string): void;
|
|
174
|
+
/**
|
|
175
|
+
* Get active subagent count
|
|
176
|
+
*/
|
|
177
|
+
getActiveSubagentCount(): number;
|
|
178
|
+
/**
|
|
179
|
+
* Get active executor count
|
|
180
|
+
*/
|
|
181
|
+
getActiveExecutorCount(): number;
|
|
182
|
+
/**
|
|
183
|
+
* Check if subagent limit is exceeded
|
|
184
|
+
*/
|
|
185
|
+
isSubagentLimitExceeded(): boolean;
|
|
186
|
+
/**
|
|
187
|
+
* Get all violations
|
|
188
|
+
*/
|
|
189
|
+
getAllViolations(): LimitViolation[];
|
|
190
|
+
/**
|
|
191
|
+
* Reset counters for new task
|
|
192
|
+
*/
|
|
193
|
+
reset(): void;
|
|
194
|
+
/**
|
|
195
|
+
* Get usage statistics
|
|
196
|
+
*/
|
|
197
|
+
getUsageStatistics(): UsageStatistics;
|
|
198
|
+
}
|
|
199
|
+
export {};
|
|
200
|
+
//# sourceMappingURL=resource-limit-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-limit-manager.d.ts","sourceRoot":"","sources":["../../src/limits/resource-limit-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Resource Limit Manager
|
|
4
|
+
* Based on 04_COMPONENTS.md L167-177
|
|
5
|
+
*
|
|
6
|
+
* Responsible for:
|
|
7
|
+
* - Safe defaults (max_files=5, max_tests=10, max_seconds=300)
|
|
8
|
+
* - Limit application via measurable proxies
|
|
9
|
+
* - Fail-closed on limit violation
|
|
10
|
+
* - Chunk size adjustment
|
|
11
|
+
* - Parallel limits (subagents=9, executors=4)
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ResourceLimitManager = exports.ResourceLimitError = void 0;
|
|
15
|
+
const supporting_1 = require("../models/supporting");
|
|
16
|
+
const error_codes_1 = require("../errors/error-codes");
|
|
17
|
+
/**
|
|
18
|
+
* Resource Limit Manager Error
|
|
19
|
+
*/
|
|
20
|
+
class ResourceLimitError extends Error {
|
|
21
|
+
code;
|
|
22
|
+
details;
|
|
23
|
+
constructor(code, message, details) {
|
|
24
|
+
super(message || (0, error_codes_1.getErrorMessage)(code));
|
|
25
|
+
this.name = 'ResourceLimitError';
|
|
26
|
+
this.code = code;
|
|
27
|
+
this.details = details;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.ResourceLimitError = ResourceLimitError;
|
|
31
|
+
/**
|
|
32
|
+
* Valid ranges for limits
|
|
33
|
+
*/
|
|
34
|
+
const LIMIT_RANGES = {
|
|
35
|
+
max_files: { min: 1, max: 20 },
|
|
36
|
+
max_tests: { min: 1, max: 50 },
|
|
37
|
+
max_seconds: { min: 30, max: 900 },
|
|
38
|
+
subagents: { min: 1, max: 9 },
|
|
39
|
+
executors: { min: 1, max: 4 },
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Default limits
|
|
43
|
+
*/
|
|
44
|
+
const DEFAULT_LIMITS = {
|
|
45
|
+
max_files: 5,
|
|
46
|
+
max_tests: 10,
|
|
47
|
+
max_seconds: 300,
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Default parallel limits
|
|
51
|
+
*/
|
|
52
|
+
const DEFAULT_PARALLEL_LIMITS = {
|
|
53
|
+
subagents: 9,
|
|
54
|
+
executors: 4,
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Resource Limit Manager class
|
|
58
|
+
*/
|
|
59
|
+
class ResourceLimitManager {
|
|
60
|
+
limits;
|
|
61
|
+
parallelLimits;
|
|
62
|
+
fileCount;
|
|
63
|
+
testCount;
|
|
64
|
+
startTime;
|
|
65
|
+
elapsedOverride;
|
|
66
|
+
violations;
|
|
67
|
+
activeSubagents;
|
|
68
|
+
activeExecutors;
|
|
69
|
+
/**
|
|
70
|
+
* Create a new ResourceLimitManager
|
|
71
|
+
*/
|
|
72
|
+
constructor() {
|
|
73
|
+
this.limits = { ...DEFAULT_LIMITS };
|
|
74
|
+
this.parallelLimits = { ...DEFAULT_PARALLEL_LIMITS };
|
|
75
|
+
this.fileCount = 0;
|
|
76
|
+
this.testCount = 0;
|
|
77
|
+
this.startTime = null;
|
|
78
|
+
this.elapsedOverride = null;
|
|
79
|
+
this.violations = [];
|
|
80
|
+
this.activeSubagents = new Set();
|
|
81
|
+
this.activeExecutors = new Set();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get default limits
|
|
85
|
+
*/
|
|
86
|
+
getDefaultLimits() {
|
|
87
|
+
return { ...DEFAULT_LIMITS };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get parallel limits
|
|
91
|
+
*/
|
|
92
|
+
getParallelLimits() {
|
|
93
|
+
return { ...this.parallelLimits };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Set task limits with validation
|
|
97
|
+
* @throws ResourceLimitError if limits are out of valid range
|
|
98
|
+
*/
|
|
99
|
+
setLimits(limits) {
|
|
100
|
+
// Validate max_files
|
|
101
|
+
if (limits.max_files < LIMIT_RANGES.max_files.min || limits.max_files > LIMIT_RANGES.max_files.max) {
|
|
102
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `max_files must be between ${LIMIT_RANGES.max_files.min} and ${LIMIT_RANGES.max_files.max}`, { max_files: limits.max_files, range: LIMIT_RANGES.max_files });
|
|
103
|
+
}
|
|
104
|
+
// Validate max_tests
|
|
105
|
+
if (limits.max_tests < LIMIT_RANGES.max_tests.min || limits.max_tests > LIMIT_RANGES.max_tests.max) {
|
|
106
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `max_tests must be between ${LIMIT_RANGES.max_tests.min} and ${LIMIT_RANGES.max_tests.max}`, { max_tests: limits.max_tests, range: LIMIT_RANGES.max_tests });
|
|
107
|
+
}
|
|
108
|
+
// Validate max_seconds
|
|
109
|
+
if (limits.max_seconds < LIMIT_RANGES.max_seconds.min || limits.max_seconds > LIMIT_RANGES.max_seconds.max) {
|
|
110
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `max_seconds must be between ${LIMIT_RANGES.max_seconds.min} and ${LIMIT_RANGES.max_seconds.max}`, { max_seconds: limits.max_seconds, range: LIMIT_RANGES.max_seconds });
|
|
111
|
+
}
|
|
112
|
+
this.limits = { ...limits };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Set parallel limits with validation
|
|
116
|
+
* @throws ResourceLimitError if limits are out of valid range
|
|
117
|
+
*/
|
|
118
|
+
setParallelLimits(limits) {
|
|
119
|
+
// Validate subagents
|
|
120
|
+
if (limits.subagents > LIMIT_RANGES.subagents.max) {
|
|
121
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `subagents must be at most ${LIMIT_RANGES.subagents.max}`, { subagents: limits.subagents, max: LIMIT_RANGES.subagents.max });
|
|
122
|
+
}
|
|
123
|
+
// Validate executors
|
|
124
|
+
if (limits.executors > LIMIT_RANGES.executors.max) {
|
|
125
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `executors must be at most ${LIMIT_RANGES.executors.max}`, { executors: limits.executors, max: LIMIT_RANGES.executors.max });
|
|
126
|
+
}
|
|
127
|
+
this.parallelLimits = { ...limits };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Record a file operation
|
|
131
|
+
*/
|
|
132
|
+
recordFileOperation(_filePath) {
|
|
133
|
+
this.fileCount++;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Record a test execution
|
|
137
|
+
*/
|
|
138
|
+
recordTestExecution(_testId) {
|
|
139
|
+
this.testCount++;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Start the timer
|
|
143
|
+
*/
|
|
144
|
+
startTimer() {
|
|
145
|
+
this.startTime = Date.now();
|
|
146
|
+
this.elapsedOverride = null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get elapsed seconds
|
|
150
|
+
*/
|
|
151
|
+
getElapsedSeconds() {
|
|
152
|
+
if (this.elapsedOverride !== null) {
|
|
153
|
+
return this.elapsedOverride;
|
|
154
|
+
}
|
|
155
|
+
if (this.startTime === null) {
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
return Math.floor((Date.now() - this.startTime) / 1000);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Set elapsed time for testing purposes
|
|
162
|
+
*/
|
|
163
|
+
setElapsedForTesting(seconds) {
|
|
164
|
+
this.elapsedOverride = seconds;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get file count
|
|
168
|
+
*/
|
|
169
|
+
getFileCount() {
|
|
170
|
+
return this.fileCount;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get test count
|
|
174
|
+
*/
|
|
175
|
+
getTestCount() {
|
|
176
|
+
return this.testCount;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Check if file count is exceeded
|
|
180
|
+
*/
|
|
181
|
+
isFileCountExceeded() {
|
|
182
|
+
return this.fileCount > this.limits.max_files;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Check if test count is exceeded
|
|
186
|
+
*/
|
|
187
|
+
isTestCountExceeded() {
|
|
188
|
+
return this.testCount > this.limits.max_tests;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Check if time is exceeded
|
|
192
|
+
*/
|
|
193
|
+
isTimeExceeded() {
|
|
194
|
+
return this.getElapsedSeconds() > this.limits.max_seconds;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Enforce file limit (fail-closed)
|
|
198
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
199
|
+
*/
|
|
200
|
+
enforceFileLimit(_filePath) {
|
|
201
|
+
if (this.fileCount >= this.limits.max_files) {
|
|
202
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `File limit exceeded: ${this.fileCount + 1} > ${this.limits.max_files}`, { fileCount: this.fileCount + 1, limit: this.limits.max_files });
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Enforce test limit (fail-closed)
|
|
207
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
208
|
+
*/
|
|
209
|
+
enforceTestLimit(_testId) {
|
|
210
|
+
if (this.testCount >= this.limits.max_tests) {
|
|
211
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `Test limit exceeded: ${this.testCount + 1} > ${this.limits.max_tests}`, { testCount: this.testCount + 1, limit: this.limits.max_tests });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Enforce time limit (fail-closed)
|
|
216
|
+
* @throws ResourceLimitError if limit is exceeded
|
|
217
|
+
*/
|
|
218
|
+
enforceTimeLimit() {
|
|
219
|
+
const elapsed = this.getElapsedSeconds();
|
|
220
|
+
if (elapsed > this.limits.max_seconds) {
|
|
221
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `Time limit exceeded: ${elapsed} > ${this.limits.max_seconds}`, { elapsed, limit: this.limits.max_seconds });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check and record file operation (fail-closed)
|
|
226
|
+
*/
|
|
227
|
+
checkAndRecordFileOperation(filePath) {
|
|
228
|
+
const newCount = this.fileCount + 1;
|
|
229
|
+
if (newCount > this.limits.max_files) {
|
|
230
|
+
const violation = (0, supporting_1.createLimitViolation)('max_files', this.limits.max_files, newCount);
|
|
231
|
+
this.violations.push(violation);
|
|
232
|
+
return {
|
|
233
|
+
allowed: false,
|
|
234
|
+
violation,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
this.recordFileOperation(filePath);
|
|
238
|
+
return { allowed: true };
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Check and record test execution (fail-closed)
|
|
242
|
+
*/
|
|
243
|
+
checkAndRecordTestExecution(testId) {
|
|
244
|
+
const newCount = this.testCount + 1;
|
|
245
|
+
if (newCount > this.limits.max_tests) {
|
|
246
|
+
const violation = (0, supporting_1.createLimitViolation)('max_tests', this.limits.max_tests, newCount);
|
|
247
|
+
this.violations.push(violation);
|
|
248
|
+
return {
|
|
249
|
+
allowed: false,
|
|
250
|
+
violation,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
this.recordTestExecution(testId);
|
|
254
|
+
return { allowed: true };
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Check time limit
|
|
258
|
+
*/
|
|
259
|
+
checkTimeLimit() {
|
|
260
|
+
const elapsed = this.getElapsedSeconds();
|
|
261
|
+
if (elapsed > this.limits.max_seconds) {
|
|
262
|
+
const violation = (0, supporting_1.createLimitViolation)('max_seconds', this.limits.max_seconds, elapsed);
|
|
263
|
+
this.violations.push(violation);
|
|
264
|
+
return {
|
|
265
|
+
allowed: false,
|
|
266
|
+
violation,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
return { allowed: true };
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Suggest chunk size based on remaining capacity
|
|
273
|
+
*/
|
|
274
|
+
suggestChunkSize(totalFiles) {
|
|
275
|
+
const remaining = this.getRemainingFileCapacity();
|
|
276
|
+
if (remaining <= 0) {
|
|
277
|
+
return 0;
|
|
278
|
+
}
|
|
279
|
+
return Math.min(remaining, totalFiles);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Get remaining file capacity
|
|
283
|
+
*/
|
|
284
|
+
getRemainingFileCapacity() {
|
|
285
|
+
return Math.max(0, this.limits.max_files - this.fileCount);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Start a subagent
|
|
289
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
290
|
+
*/
|
|
291
|
+
startSubagent(subagentId) {
|
|
292
|
+
if (this.activeSubagents.size >= this.parallelLimits.subagents) {
|
|
293
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `Subagent limit exceeded: ${this.activeSubagents.size + 1} > ${this.parallelLimits.subagents}`, { activeCount: this.activeSubagents.size, limit: this.parallelLimits.subagents });
|
|
294
|
+
}
|
|
295
|
+
this.activeSubagents.add(subagentId);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* End a subagent
|
|
299
|
+
*/
|
|
300
|
+
endSubagent(subagentId) {
|
|
301
|
+
this.activeSubagents.delete(subagentId);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Start an executor
|
|
305
|
+
* @throws ResourceLimitError if limit would be exceeded
|
|
306
|
+
*/
|
|
307
|
+
startExecutor(executorId) {
|
|
308
|
+
if (this.activeExecutors.size >= this.parallelLimits.executors) {
|
|
309
|
+
throw new ResourceLimitError(error_codes_1.ErrorCode.E206_RESOURCE_LIMIT_EXCEEDED, `Executor limit exceeded: ${this.activeExecutors.size + 1} > ${this.parallelLimits.executors}`, { activeCount: this.activeExecutors.size, limit: this.parallelLimits.executors });
|
|
310
|
+
}
|
|
311
|
+
this.activeExecutors.add(executorId);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Get active subagent count
|
|
315
|
+
*/
|
|
316
|
+
getActiveSubagentCount() {
|
|
317
|
+
return this.activeSubagents.size;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Get active executor count
|
|
321
|
+
*/
|
|
322
|
+
getActiveExecutorCount() {
|
|
323
|
+
return this.activeExecutors.size;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Check if subagent limit is exceeded
|
|
327
|
+
*/
|
|
328
|
+
isSubagentLimitExceeded() {
|
|
329
|
+
return this.activeSubagents.size >= this.parallelLimits.subagents;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Get all violations
|
|
333
|
+
*/
|
|
334
|
+
getAllViolations() {
|
|
335
|
+
// Also check current state for any violations not yet recorded
|
|
336
|
+
const currentViolations = [...this.violations];
|
|
337
|
+
if (this.isFileCountExceeded() && !currentViolations.some(v => v.limit_type === 'max_files')) {
|
|
338
|
+
currentViolations.push((0, supporting_1.createLimitViolation)('max_files', this.limits.max_files, this.fileCount));
|
|
339
|
+
}
|
|
340
|
+
if (this.isTestCountExceeded() && !currentViolations.some(v => v.limit_type === 'max_tests')) {
|
|
341
|
+
currentViolations.push((0, supporting_1.createLimitViolation)('max_tests', this.limits.max_tests, this.testCount));
|
|
342
|
+
}
|
|
343
|
+
return currentViolations;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Reset counters for new task
|
|
347
|
+
*/
|
|
348
|
+
reset() {
|
|
349
|
+
this.fileCount = 0;
|
|
350
|
+
this.testCount = 0;
|
|
351
|
+
this.startTime = null;
|
|
352
|
+
this.elapsedOverride = null;
|
|
353
|
+
this.violations = [];
|
|
354
|
+
this.activeSubagents.clear();
|
|
355
|
+
this.activeExecutors.clear();
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get usage statistics
|
|
359
|
+
*/
|
|
360
|
+
getUsageStatistics() {
|
|
361
|
+
const elapsed = this.getElapsedSeconds();
|
|
362
|
+
return {
|
|
363
|
+
files_used: this.fileCount,
|
|
364
|
+
files_limit: this.limits.max_files,
|
|
365
|
+
files_remaining: Math.max(0, this.limits.max_files - this.fileCount),
|
|
366
|
+
tests_used: this.testCount,
|
|
367
|
+
tests_limit: this.limits.max_tests,
|
|
368
|
+
tests_remaining: Math.max(0, this.limits.max_tests - this.testCount),
|
|
369
|
+
seconds_elapsed: elapsed,
|
|
370
|
+
seconds_limit: this.limits.max_seconds,
|
|
371
|
+
seconds_remaining: Math.max(0, this.limits.max_seconds - elapsed),
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
exports.ResourceLimitManager = ResourceLimitManager;
|
|
376
|
+
//# sourceMappingURL=resource-limit-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-limit-manager.js","sourceRoot":"","sources":["../../src/limits/resource-limit-manager.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,qDAAwF;AACxF,uDAAmE;AAEnE;;GAEG;AACH,MAAa,kBAAmB,SAAQ,KAAK;IAC3B,IAAI,CAAY;IAChB,OAAO,CAA2B;IAElD,YAAY,IAAe,EAAE,OAAgB,EAAE,OAAiC;QAC9E,KAAK,CAAC,OAAO,IAAI,IAAA,6BAAe,EAAC,IAAI,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAVD,gDAUC;AAiCD;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9B,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9B,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IAClC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;IAC7B,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAAe;IACjC,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,GAAG;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,uBAAuB,GAAmB;IAC9C,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,MAAa,oBAAoB;IACvB,MAAM,CAAa;IACnB,cAAc,CAAiB;IAC/B,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,SAAS,CAAgB;IACzB,eAAe,CAAgB;IAC/B,UAAU,CAAmB;IAC7B,eAAe,CAAc;IAC7B,eAAe,CAAc;IAErC;;OAEG;IACH;QACE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,uBAAuB,EAAE,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,MAAkB;QAC1B,qBAAqB;QACrB,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YACnG,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,6BAA6B,YAAY,CAAC,SAAS,CAAC,GAAG,QAAQ,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,EAC3F,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,CAC/D,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YACnG,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,6BAA6B,YAAY,CAAC,SAAS,CAAC,GAAG,QAAQ,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,EAC3F,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,CAC/D,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,IAAI,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YAC3G,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,+BAA+B,YAAY,CAAC,WAAW,CAAC,GAAG,QAAQ,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,EACjG,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,WAAW,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,MAAsB;QACtC,qBAAqB;QACrB,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,6BAA6B,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,EACzD,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CACjE,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,6BAA6B,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,EACzD,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CACjE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,SAAiB;QACnC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,OAAe;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,OAAe;QAClC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,SAAiB;QAChC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,wBAAwB,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EACvE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAe;QAC9B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,wBAAwB,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EACvE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,wBAAwB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAC9D,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,2BAA2B,CAAC,QAAgB;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEpC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAA,iCAAoB,EACpC,WAAW,EACX,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,QAAQ,CACT,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEhC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS;aACV,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,2BAA2B,CAAC,MAAc;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEpC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAA,iCAAoB,EACpC,WAAW,EACX,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,QAAQ,CACT,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEhC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS;aACV,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAA,iCAAoB,EACpC,aAAa,EACb,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB,OAAO,CACR,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEhC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS;aACV,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,UAAkB;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAElD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,wBAAwB;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,UAAkB;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC/D,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,4BAA4B,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAC9F,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,UAAkB;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC/D,MAAM,IAAI,kBAAkB,CAC1B,uBAAS,CAAC,4BAA4B,EACtC,4BAA4B,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAC9F,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,+DAA+D;QAC/D,MAAM,iBAAiB,GAAqB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,EAAE,CAAC;YAC7F,iBAAiB,CAAC,IAAI,CAAC,IAAA,iCAAoB,EAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,EAAE,CAAC;YAC7F,iBAAiB,CAAC,IAAI,CAAC,IAAA,iCAAoB,EAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnG,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzC,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAClC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACpE,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAClC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACpE,eAAe,EAAE,OAAO;YACxB,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACtC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;SAClE,CAAC;IACJ,CAAC;CACF;AAvaD,oDAuaC"}
|