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,243 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * PM Orchestrator Runner - CLI Entry Point
5
+ *
6
+ * Usage:
7
+ * pm-orchestrator repl [--project <path>] - Start interactive REPL
8
+ * pm-orchestrator start <path> [options] - Start a new session (per spec 05_CLI.md L20)
9
+ * pm-orchestrator continue <session-id> - Continue a session
10
+ * pm-orchestrator status <session-id> - Get session status
11
+ * pm-orchestrator validate <path> - Validate project structure (per spec 05_CLI.md L23)
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ const path = __importStar(require("path"));
48
+ const cli_interface_1 = require("./cli-interface");
49
+ const repl_interface_1 = require("../repl/repl-interface");
50
+ /**
51
+ * Help text
52
+ */
53
+ const HELP_TEXT = `
54
+ PM Orchestrator Runner - CLI
55
+
56
+ Usage:
57
+ pm-orchestrator <command> [options]
58
+
59
+ Commands:
60
+ repl Start interactive REPL mode
61
+ start <path> Start a new session on a project (per spec 05_CLI.md L20)
62
+ continue <session-id> Continue a paused session
63
+ status <session-id> Get session status
64
+ validate <path> Validate project structure (per spec 05_CLI.md L23)
65
+
66
+ REPL Options:
67
+ --project <path> Project path (default: current directory)
68
+ --evidence <path> Evidence directory
69
+ --non-interactive Force non-interactive mode (no TTY prompts)
70
+ --exit-on-eof Exit when EOF is received (for piped input)
71
+ --project-mode <mode> Project mode: 'temp' (default) or 'fixed'
72
+ --project-root <path> Verification root directory (required if --project-mode=fixed)
73
+ --print-project-path Print PROJECT_PATH=<path> on startup
74
+
75
+ Run Options:
76
+ --config <path> Path to config file
77
+ --dry-run Validate without executing
78
+ --max-files <n> Maximum files limit
79
+ --max-tests <n> Maximum tests limit
80
+ --max-seconds <n> Maximum seconds limit
81
+ --verbose Verbose output
82
+ --quiet Minimal output
83
+ --stream Stream progress events
84
+ --format <type> Output format (json, compact)
85
+
86
+ General Options:
87
+ --help, -h Show this help message
88
+ --version, -v Show version
89
+
90
+ Examples:
91
+ pm-orchestrator repl
92
+ pm-orchestrator repl --project ./my-project
93
+ pm-orchestrator repl --non-interactive --exit-on-eof
94
+ pm-orchestrator repl --project-mode fixed --project-root /path/to/project
95
+ pm-orchestrator start ./my-project --dry-run
96
+ pm-orchestrator continue session-2025-01-15-abc123
97
+ `;
98
+ /**
99
+ * Version
100
+ */
101
+ const VERSION = '0.1.0';
102
+ /**
103
+ * Parse REPL-specific arguments
104
+ */
105
+ function parseReplArgs(args) {
106
+ const result = {};
107
+ for (let i = 0; i < args.length; i++) {
108
+ const arg = args[i];
109
+ // Project path
110
+ if ((arg === '--project' || arg === '-p') && args[i + 1]) {
111
+ result.projectPath = args[++i];
112
+ }
113
+ // Evidence directory
114
+ else if ((arg === '--evidence' || arg === '-e') && args[i + 1]) {
115
+ result.evidenceDir = args[++i];
116
+ }
117
+ // Non-interactive mode
118
+ else if (arg === '--non-interactive') {
119
+ result.nonInteractive = true;
120
+ }
121
+ // Exit on EOF
122
+ else if (arg === '--exit-on-eof') {
123
+ result.exitOnEof = true;
124
+ }
125
+ // Project mode
126
+ else if (arg === '--project-mode' && args[i + 1]) {
127
+ const mode = args[++i];
128
+ if (mode === 'temp' || mode === 'fixed') {
129
+ result.projectMode = mode;
130
+ }
131
+ else {
132
+ console.error(`Invalid project mode: ${mode}. Use 'temp' or 'fixed'.`);
133
+ process.exit(1);
134
+ }
135
+ }
136
+ // Project root
137
+ else if (arg === '--project-root' && args[i + 1]) {
138
+ result.projectRoot = args[++i];
139
+ }
140
+ // Print project path
141
+ else if (arg === '--print-project-path') {
142
+ result.printProjectPath = true;
143
+ }
144
+ }
145
+ return result;
146
+ }
147
+ /**
148
+ * Main entry point
149
+ */
150
+ async function main() {
151
+ const args = process.argv.slice(2);
152
+ // Check for help
153
+ if (args.includes('--help') || args.includes('-h') || args.length === 0) {
154
+ console.log(HELP_TEXT);
155
+ process.exit(0);
156
+ }
157
+ // Check for version
158
+ if (args.includes('--version') || args.includes('-v')) {
159
+ console.log(VERSION);
160
+ process.exit(0);
161
+ }
162
+ const command = args[0];
163
+ const restArgs = args.slice(1);
164
+ try {
165
+ switch (command) {
166
+ case 'repl': {
167
+ const replArgs = parseReplArgs(restArgs);
168
+ // CRITICAL: evidenceDir must use projectPath, not process.cwd()
169
+ // This ensures files are created in the project directory, not where the CLI was invoked
170
+ const projectPath = replArgs.projectPath || process.cwd();
171
+ const repl = new repl_interface_1.REPLInterface({
172
+ projectPath,
173
+ evidenceDir: replArgs.evidenceDir || path.join(projectPath, '.claude', 'evidence'),
174
+ authMode: 'claude-code',
175
+ forceNonInteractive: replArgs.nonInteractive,
176
+ projectMode: replArgs.projectMode,
177
+ projectRoot: replArgs.projectRoot,
178
+ printProjectPath: replArgs.printProjectPath,
179
+ });
180
+ // Start REPL and wait for it to complete
181
+ // CRITICAL: Don't use setTimeout to force exit - let REPL handle EOF properly
182
+ // The REPL's start() returns a Promise that resolves after queue drain
183
+ await repl.start();
184
+ // After REPL completes, exit with appropriate code
185
+ if (replArgs.exitOnEof || replArgs.nonInteractive) {
186
+ process.exit(repl.getExitCode());
187
+ }
188
+ break;
189
+ }
190
+ case 'start': // Per spec 05_CLI.md L20
191
+ case 'continue':
192
+ case 'status':
193
+ case 'validate': { // Per spec 05_CLI.md L23
194
+ // Use existing CLI interface for these commands
195
+ const cli = new cli_interface_1.CLI({
196
+ evidenceDir: path.join(process.cwd(), '.claude', 'evidence'),
197
+ });
198
+ const result = await cli.run(args);
199
+ // Output result
200
+ if (result.help) {
201
+ console.log(result.help);
202
+ }
203
+ else if (result.version) {
204
+ console.log(result.version);
205
+ }
206
+ else {
207
+ console.log(JSON.stringify(result, null, 2));
208
+ }
209
+ // Set exit code based on status
210
+ if (result.overall_status) {
211
+ process.exit(cli.getExitCodeForStatus(result.overall_status));
212
+ }
213
+ break;
214
+ }
215
+ default:
216
+ console.error(`Unknown command: ${command}`);
217
+ console.log(HELP_TEXT);
218
+ process.exit(1);
219
+ }
220
+ }
221
+ catch (err) {
222
+ if (err instanceof cli_interface_1.CLIError) {
223
+ console.error(JSON.stringify({
224
+ error: {
225
+ code: err.code,
226
+ message: err.message,
227
+ details: err.details,
228
+ },
229
+ }, null, 2));
230
+ process.exit(1);
231
+ }
232
+ else {
233
+ console.error(`Error: ${err.message}`);
234
+ process.exit(1);
235
+ }
236
+ }
237
+ }
238
+ // Run main
239
+ main().catch((err) => {
240
+ console.error(`Fatal error: ${err.message}`);
241
+ process.exit(1);
242
+ });
243
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * LLM Sentinel CLI
4
+ *
5
+ * Verifies Real LLM test execution gate and evidence status.
6
+ * Usage:
7
+ * npx ts-node src/cli/llm-sentinel.ts [--evidence-dir <path>]
8
+ *
9
+ * Output:
10
+ * - Gate status (OPEN/CLOSED)
11
+ * - Evidence count and verification
12
+ * - Combined verdict (REPL + Real LLM)
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=llm-sentinel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-sentinel.d.ts","sourceRoot":"","sources":["../../src/cli/llm-sentinel.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * LLM Sentinel CLI
5
+ *
6
+ * Verifies Real LLM test execution gate and evidence status.
7
+ * Usage:
8
+ * npx ts-node src/cli/llm-sentinel.ts [--evidence-dir <path>]
9
+ *
10
+ * Output:
11
+ * - Gate status (OPEN/CLOSED)
12
+ * - Evidence count and verification
13
+ * - Combined verdict (REPL + Real LLM)
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const crypto = __importStar(require("crypto"));
52
+ const verdict_reporter_1 = require("../mediation/verdict-reporter");
53
+ function findEvidenceDir() {
54
+ // Default evidence locations (in priority order)
55
+ const candidates = [
56
+ path.join(process.cwd(), '.claude', 'evidence'), // Main location
57
+ path.join(process.cwd(), '.llm-evidence'),
58
+ path.join(process.cwd(), 'llm-evidence'),
59
+ path.join(process.cwd(), 'evidence'),
60
+ '/tmp/llm-evidence',
61
+ ];
62
+ for (const dir of candidates) {
63
+ if (fs.existsSync(dir)) {
64
+ return dir;
65
+ }
66
+ }
67
+ return null;
68
+ }
69
+ function verifyEvidence(evidencePath) {
70
+ try {
71
+ const content = fs.readFileSync(evidencePath, 'utf-8');
72
+ const evidence = JSON.parse(content);
73
+ // Verify integrity hash
74
+ const dataToHash = JSON.stringify(evidence.evidence);
75
+ const computedHash = crypto.createHash('sha256').update(dataToHash).digest('hex');
76
+ if (computedHash !== evidence.integrity_hash) {
77
+ return { valid: false, error: 'Integrity hash mismatch' };
78
+ }
79
+ // Verify required fields
80
+ if (!evidence.evidence.call_id || !evidence.evidence.provider || !evidence.evidence.success) {
81
+ return { valid: false, error: 'Missing required fields' };
82
+ }
83
+ return { valid: true };
84
+ }
85
+ catch (err) {
86
+ return { valid: false, error: `Parse error: ${err.message}` };
87
+ }
88
+ }
89
+ function collectEvidence(evidenceDir) {
90
+ const files = [];
91
+ let verified = 0;
92
+ try {
93
+ const entries = fs.readdirSync(evidenceDir, { recursive: true });
94
+ for (const entry of entries) {
95
+ const fullPath = path.join(evidenceDir, entry);
96
+ if (fs.statSync(fullPath).isFile() && fullPath.endsWith('.json')) {
97
+ files.push(fullPath);
98
+ const result = verifyEvidence(fullPath);
99
+ if (result.valid) {
100
+ verified++;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ catch {
106
+ // Directory might not exist or be empty
107
+ }
108
+ return { count: files.length, verified, files };
109
+ }
110
+ function main() {
111
+ const args = process.argv.slice(2);
112
+ let evidenceDir = null;
113
+ // Parse args
114
+ for (let i = 0; i < args.length; i++) {
115
+ if (args[i] === '--evidence-dir' && args[i + 1]) {
116
+ evidenceDir = args[i + 1];
117
+ i++;
118
+ }
119
+ }
120
+ console.log('');
121
+ console.log('='.repeat(70));
122
+ console.log('[LLM Sentinel] Real LLM Test Verification');
123
+ console.log('='.repeat(70));
124
+ console.log('');
125
+ // Check gate
126
+ const gate = (0, verdict_reporter_1.checkExecutionGate)();
127
+ console.log('[Gate Status]');
128
+ console.log(` LLM_TEST_MODE: ${process.env.LLM_TEST_MODE || '(not set)'}`);
129
+ console.log(` Provider: ${gate.provider || 'openai (default)'}`);
130
+ console.log(` API Key Env: ${gate.envVar || 'OPENAI_API_KEY'}`);
131
+ console.log(` API Key Present: ${gate.canExecute ? 'YES' : 'NO'}`);
132
+ console.log(` Gate: ${gate.canExecute ? 'OPEN' : 'CLOSED'}`);
133
+ if (gate.skipReason) {
134
+ console.log(` Skip Reason: ${gate.skipReason}`);
135
+ }
136
+ console.log('');
137
+ // Find and collect evidence
138
+ if (!evidenceDir) {
139
+ evidenceDir = findEvidenceDir();
140
+ }
141
+ console.log('[Evidence Status]');
142
+ if (evidenceDir && fs.existsSync(evidenceDir)) {
143
+ console.log(` Directory: ${evidenceDir}`);
144
+ const evidence = collectEvidence(evidenceDir);
145
+ console.log(` Files Found: ${evidence.count}`);
146
+ console.log(` Verified: ${evidence.verified}/${evidence.count}`);
147
+ if (evidence.files.length > 0) {
148
+ console.log(' Files:');
149
+ for (const f of evidence.files.slice(0, 5)) {
150
+ console.log(` - ${path.basename(f)}`);
151
+ }
152
+ if (evidence.files.length > 5) {
153
+ console.log(` ... and ${evidence.files.length - 5} more`);
154
+ }
155
+ }
156
+ // Generate verdict
157
+ const coreTestsPassed = true; // Assume REPL tests passed if we're running sentinel
158
+ const verdict = (0, verdict_reporter_1.generateCombinedVerdict)(coreTestsPassed, evidence.verified, evidence.verified > 0);
159
+ (0, verdict_reporter_1.printVerdict)(verdict);
160
+ }
161
+ else {
162
+ console.log(' Directory: (not found)');
163
+ console.log(' Files Found: 0');
164
+ console.log(' Verified: 0');
165
+ // Generate verdict without evidence
166
+ const verdict = (0, verdict_reporter_1.generateCombinedVerdict)(true, 0, false);
167
+ (0, verdict_reporter_1.printVerdict)(verdict);
168
+ }
169
+ console.log('');
170
+ console.log('[Reproduction Commands]');
171
+ console.log(' # Gate CLOSED (no API key):');
172
+ console.log(' unset OPENAI_API_KEY && unset LLM_TEST_MODE && npm run llm:sentinel');
173
+ console.log('');
174
+ console.log(' # Gate OPEN (with API key):');
175
+ console.log(' export LLM_TEST_MODE=1');
176
+ console.log(' export OPENAI_API_KEY=sk-...');
177
+ console.log(' npm run llm:sentinel');
178
+ console.log('');
179
+ console.log(' # Run Real LLM tests (Gate must be OPEN):');
180
+ console.log(' npm run llm:test:real');
181
+ console.log('');
182
+ }
183
+ main();
184
+ //# sourceMappingURL=llm-sentinel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-sentinel.js","sourceRoot":"","sources":["../../src/cli/llm-sentinel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Configuration Manager
3
+ * Based on 04_COMPONENTS.md L52-82
4
+ *
5
+ * Responsible for:
6
+ * - Loading and validating project configuration
7
+ * - Enforcing configuration schema
8
+ * - Applying default values
9
+ */
10
+ import { ErrorCode } from '../errors/error-codes';
11
+ /**
12
+ * Task limits configuration
13
+ */
14
+ export interface TaskLimitsConfig {
15
+ files: number;
16
+ tests: number;
17
+ seconds: number;
18
+ }
19
+ /**
20
+ * Parallel limits configuration
21
+ */
22
+ export interface ParallelLimitsConfig {
23
+ subagents: number;
24
+ executors: number;
25
+ }
26
+ /**
27
+ * Timeouts configuration
28
+ */
29
+ export interface TimeoutsConfig {
30
+ deadlock_timeout_seconds: number;
31
+ operation_timeout_seconds: number;
32
+ }
33
+ /**
34
+ * Evidence settings configuration
35
+ */
36
+ export interface EvidenceSettingsConfig {
37
+ retention_days: number;
38
+ compression_enabled: boolean;
39
+ }
40
+ /**
41
+ * Full configuration structure
42
+ */
43
+ export interface Configuration {
44
+ task_limits: TaskLimitsConfig;
45
+ parallel_limits: ParallelLimitsConfig;
46
+ timeouts: TimeoutsConfig;
47
+ evidence_settings: EvidenceSettingsConfig;
48
+ project_path: string;
49
+ claude_dir: string;
50
+ }
51
+ /**
52
+ * Configuration error
53
+ */
54
+ export declare class ConfigurationError extends Error {
55
+ readonly code: ErrorCode;
56
+ readonly details?: Record<string, unknown>;
57
+ constructor(code: ErrorCode, message?: string, details?: Record<string, unknown>);
58
+ }
59
+ /**
60
+ * Default configuration values
61
+ */
62
+ declare const DEFAULTS: {
63
+ task_limits: {
64
+ files: number;
65
+ tests: number;
66
+ seconds: number;
67
+ };
68
+ parallel_limits: {
69
+ subagents: number;
70
+ executors: number;
71
+ };
72
+ timeouts: {
73
+ deadlock_timeout_seconds: number;
74
+ operation_timeout_seconds: number;
75
+ };
76
+ evidence_settings: {
77
+ retention_days: number;
78
+ compression_enabled: boolean;
79
+ };
80
+ };
81
+ /**
82
+ * Validation ranges
83
+ */
84
+ declare const RANGES: {
85
+ task_limits: {
86
+ files: {
87
+ min: number;
88
+ max: number;
89
+ };
90
+ tests: {
91
+ min: number;
92
+ max: number;
93
+ };
94
+ seconds: {
95
+ min: number;
96
+ max: number;
97
+ };
98
+ };
99
+ parallel_limits: {
100
+ subagents: {
101
+ min: number;
102
+ max: number;
103
+ };
104
+ executors: {
105
+ min: number;
106
+ max: number;
107
+ };
108
+ };
109
+ };
110
+ /**
111
+ * Configuration Manager class
112
+ */
113
+ export declare class ConfigurationManager {
114
+ /**
115
+ * Load configuration from project path
116
+ * @throws ConfigurationError if configuration is invalid
117
+ */
118
+ loadConfiguration(projectPath: string): Configuration;
119
+ /**
120
+ * Validate required project structure
121
+ */
122
+ private validateRequiredStructure;
123
+ /**
124
+ * Load and parse settings.json
125
+ */
126
+ private loadSettingsJson;
127
+ /**
128
+ * Build and validate configuration
129
+ */
130
+ private buildConfiguration;
131
+ /**
132
+ * Validate task limits are within range
133
+ */
134
+ private validateTaskLimits;
135
+ /**
136
+ * Validate parallel limits are within range
137
+ */
138
+ private validateParallelLimits;
139
+ /**
140
+ * Get default configuration
141
+ */
142
+ getDefaults(): typeof DEFAULTS;
143
+ /**
144
+ * Get validation ranges
145
+ */
146
+ getRanges(): typeof RANGES;
147
+ }
148
+ export {};
149
+ //# sourceMappingURL=configuration-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-manager.d.ts","sourceRoot":"","sources":["../../src/config/configuration-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,SAAS,EAAmB,MAAM,uBAAuB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,eAAe,EAAE,oBAAoB,CAAC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEtC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMjF;AAED;;GAEG;AACH,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;CAkBb,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;CAUX,CAAC;AAEF;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;;OAGG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;IAiCrD;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2BjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiD1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,WAAW,IAAI,OAAO,QAAQ;IAI9B;;OAEG;IACH,SAAS,IAAI,OAAO,MAAM;CAG3B"}