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