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