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,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic Executor for CLI_TEST_MODE
|
|
3
|
+
*
|
|
4
|
+
* Per spec 10_REPL_UX.md Section 11 and spec 06_CORRECTNESS_PROPERTIES.md Property 37:
|
|
5
|
+
* When CLI_TEST_MODE=1, use deterministic stub instead of Claude Code CLI.
|
|
6
|
+
*
|
|
7
|
+
* This executor:
|
|
8
|
+
* - Parses natural language prompts for file creation patterns
|
|
9
|
+
* - Creates actual files on disk (verified_files exists=true)
|
|
10
|
+
* - Performs filesBefore/filesAfter 2-scan (Property 31)
|
|
11
|
+
* - Returns immediately without spawning subprocess
|
|
12
|
+
*/
|
|
13
|
+
import type { IExecutor, ExecutorTask, ExecutorResult } from './claude-code-executor';
|
|
14
|
+
/**
|
|
15
|
+
* DeterministicExecutor - For CLI_TEST_MODE=1
|
|
16
|
+
*
|
|
17
|
+
* Creates actual files on disk without spawning Claude Code CLI.
|
|
18
|
+
* Performs proper filesBefore/filesAfter 2-scan per Property 31.
|
|
19
|
+
*/
|
|
20
|
+
export declare class DeterministicExecutor implements IExecutor {
|
|
21
|
+
isClaudeCodeAvailable(): Promise<boolean>;
|
|
22
|
+
execute(task: ExecutorTask): Promise<ExecutorResult>;
|
|
23
|
+
/**
|
|
24
|
+
* List all files in a directory (recursively)
|
|
25
|
+
*/
|
|
26
|
+
private listFiles;
|
|
27
|
+
/**
|
|
28
|
+
* Detect files that were modified or created
|
|
29
|
+
*/
|
|
30
|
+
private detectModifiedFiles;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if deterministic mode is enabled
|
|
34
|
+
*/
|
|
35
|
+
export declare function isDeterministicMode(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Create appropriate executor based on environment
|
|
38
|
+
*/
|
|
39
|
+
export declare function createExecutorForEnvironment(): IExecutor | null;
|
|
40
|
+
//# sourceMappingURL=deterministic-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deterministic-executor.d.ts","sourceRoot":"","sources":["../../src/executor/deterministic-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,cAAc,EAEf,MAAM,wBAAwB,CAAC;AA8DhC;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IAC/C,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAKzC,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IA0F1D;;OAEG;YACW,SAAS;IAsCvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAwB5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,SAAS,GAAG,IAAI,CAK/D"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic Executor for CLI_TEST_MODE
|
|
4
|
+
*
|
|
5
|
+
* Per spec 10_REPL_UX.md Section 11 and spec 06_CORRECTNESS_PROPERTIES.md Property 37:
|
|
6
|
+
* When CLI_TEST_MODE=1, use deterministic stub instead of Claude Code CLI.
|
|
7
|
+
*
|
|
8
|
+
* This executor:
|
|
9
|
+
* - Parses natural language prompts for file creation patterns
|
|
10
|
+
* - Creates actual files on disk (verified_files exists=true)
|
|
11
|
+
* - Performs filesBefore/filesAfter 2-scan (Property 31)
|
|
12
|
+
* - Returns immediately without spawning subprocess
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.DeterministicExecutor = void 0;
|
|
49
|
+
exports.isDeterministicMode = isDeterministicMode;
|
|
50
|
+
exports.createExecutorForEnvironment = createExecutorForEnvironment;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
/**
|
|
54
|
+
* File creation patterns detected from natural language
|
|
55
|
+
*/
|
|
56
|
+
const FILE_CREATION_PATTERNS = [
|
|
57
|
+
// README patterns
|
|
58
|
+
/readme/i,
|
|
59
|
+
/create\s+readme/i,
|
|
60
|
+
/作.*readme/i,
|
|
61
|
+
// General file creation
|
|
62
|
+
/create\s+(?:a\s+)?(?:file\s+)?(?:named?\s+)?(\S+\.\w+)/i,
|
|
63
|
+
/make\s+(?:a\s+)?(?:file\s+)?(?:named?\s+)?(\S+\.\w+)/i,
|
|
64
|
+
/write\s+(?:a\s+)?(?:file\s+)?(?:named?\s+)?(\S+\.\w+)/i,
|
|
65
|
+
/生成\s*(\S+\.\w+)/i,
|
|
66
|
+
/作成\s*(\S+\.\w+)/i,
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Extract filename from prompt
|
|
70
|
+
*/
|
|
71
|
+
function extractFilename(prompt) {
|
|
72
|
+
const lowerPrompt = prompt.toLowerCase();
|
|
73
|
+
// README detection
|
|
74
|
+
if (lowerPrompt.includes('readme')) {
|
|
75
|
+
return 'README.md';
|
|
76
|
+
}
|
|
77
|
+
// Generic file pattern matching
|
|
78
|
+
for (const pattern of FILE_CREATION_PATTERNS) {
|
|
79
|
+
const match = prompt.match(pattern);
|
|
80
|
+
if (match && match[1]) {
|
|
81
|
+
return match[1];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generate default content based on filename
|
|
88
|
+
*/
|
|
89
|
+
function generateContent(filename, prompt) {
|
|
90
|
+
const basename = path.basename(filename, path.extname(filename));
|
|
91
|
+
const ext = path.extname(filename).toLowerCase();
|
|
92
|
+
switch (ext) {
|
|
93
|
+
case '.md':
|
|
94
|
+
return `# ${basename}\n\nGenerated by deterministic executor.\n\nTask: ${prompt}\n`;
|
|
95
|
+
case '.json':
|
|
96
|
+
return JSON.stringify({ name: basename, generated: true }, null, 2);
|
|
97
|
+
case '.txt':
|
|
98
|
+
return `${basename}\n\nGenerated by deterministic executor.\nTask: ${prompt}\n`;
|
|
99
|
+
case '.ts':
|
|
100
|
+
case '.js':
|
|
101
|
+
return `// ${basename}\n// Generated by deterministic executor\n\nexport const generated = true;\n`;
|
|
102
|
+
default:
|
|
103
|
+
return `Generated file: ${filename}\nTask: ${prompt}\n`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* DeterministicExecutor - For CLI_TEST_MODE=1
|
|
108
|
+
*
|
|
109
|
+
* Creates actual files on disk without spawning Claude Code CLI.
|
|
110
|
+
* Performs proper filesBefore/filesAfter 2-scan per Property 31.
|
|
111
|
+
*/
|
|
112
|
+
class DeterministicExecutor {
|
|
113
|
+
async isClaudeCodeAvailable() {
|
|
114
|
+
// In deterministic mode, we don't need Claude Code CLI
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
async execute(task) {
|
|
118
|
+
const startTime = Date.now();
|
|
119
|
+
const cwd = task.workingDir;
|
|
120
|
+
// Step 1: filesBefore scan (Property 31)
|
|
121
|
+
const filesBefore = await this.listFiles(cwd);
|
|
122
|
+
// Step 2: Detect file creation from prompt
|
|
123
|
+
const filename = extractFilename(task.prompt);
|
|
124
|
+
// Step 3: Create file if detected
|
|
125
|
+
const filesCreated = [];
|
|
126
|
+
if (filename) {
|
|
127
|
+
const fullPath = path.join(cwd, filename);
|
|
128
|
+
const content = generateContent(filename, task.prompt);
|
|
129
|
+
// Ensure parent directory exists
|
|
130
|
+
const dir = path.dirname(fullPath);
|
|
131
|
+
if (!fs.existsSync(dir)) {
|
|
132
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
133
|
+
}
|
|
134
|
+
// Write file
|
|
135
|
+
fs.writeFileSync(fullPath, content, 'utf-8');
|
|
136
|
+
filesCreated.push(filename);
|
|
137
|
+
}
|
|
138
|
+
// Step 4: filesAfter scan (Property 31)
|
|
139
|
+
const filesAfter = await this.listFiles(cwd);
|
|
140
|
+
// Step 5: Detect modified/created files via diff
|
|
141
|
+
const files_modified = this.detectModifiedFiles(filesBefore, filesAfter, cwd);
|
|
142
|
+
// Step 6: Build verified_files with actual disk verification
|
|
143
|
+
const verified_files = [];
|
|
144
|
+
const detectedAt = new Date().toISOString();
|
|
145
|
+
// Verify all detected files
|
|
146
|
+
for (const relPath of files_modified) {
|
|
147
|
+
const fullPath = path.join(cwd, relPath);
|
|
148
|
+
try {
|
|
149
|
+
if (fs.existsSync(fullPath)) {
|
|
150
|
+
const stat = fs.statSync(fullPath);
|
|
151
|
+
let content_preview;
|
|
152
|
+
if (stat.size < 10000) {
|
|
153
|
+
try {
|
|
154
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
155
|
+
content_preview = content.substring(0, 100);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Binary or encoding issue
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
verified_files.push({
|
|
162
|
+
path: relPath,
|
|
163
|
+
exists: true,
|
|
164
|
+
size: stat.size,
|
|
165
|
+
content_preview,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// File access error - skip
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Step 7: Determine status
|
|
174
|
+
const hasVerifiedFiles = verified_files.some((vf) => vf.exists);
|
|
175
|
+
let status = hasVerifiedFiles ? 'COMPLETE' : 'NO_EVIDENCE';
|
|
176
|
+
// If no file creation was detected but prompt was processed, still mark as complete
|
|
177
|
+
if (!filename && !hasVerifiedFiles) {
|
|
178
|
+
// No file creation detected - informational response only
|
|
179
|
+
status = 'COMPLETE';
|
|
180
|
+
}
|
|
181
|
+
const duration_ms = Date.now() - startTime;
|
|
182
|
+
return {
|
|
183
|
+
executed: true,
|
|
184
|
+
output: filename
|
|
185
|
+
? `Created ${filename} successfully (deterministic mode)`
|
|
186
|
+
: 'No file creation detected in prompt (deterministic mode)',
|
|
187
|
+
files_modified,
|
|
188
|
+
duration_ms,
|
|
189
|
+
status,
|
|
190
|
+
cwd,
|
|
191
|
+
verified_files,
|
|
192
|
+
unverified_files: [],
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* List all files in a directory (recursively)
|
|
197
|
+
*/
|
|
198
|
+
async listFiles(dir) {
|
|
199
|
+
const files = new Map();
|
|
200
|
+
try {
|
|
201
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
202
|
+
for (const entry of entries) {
|
|
203
|
+
const fullPath = path.join(dir, entry.name);
|
|
204
|
+
// Skip hidden files and node_modules
|
|
205
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules') {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (entry.isFile()) {
|
|
209
|
+
try {
|
|
210
|
+
const stat = fs.statSync(fullPath);
|
|
211
|
+
files.set(fullPath, {
|
|
212
|
+
mtime: stat.mtimeMs,
|
|
213
|
+
size: stat.size,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// File may have been deleted during scan
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else if (entry.isDirectory()) {
|
|
221
|
+
const subFiles = await this.listFiles(fullPath);
|
|
222
|
+
for (const [key, value] of subFiles) {
|
|
223
|
+
files.set(key, value);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// Directory may not exist or be inaccessible
|
|
230
|
+
}
|
|
231
|
+
return files;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Detect files that were modified or created
|
|
235
|
+
*/
|
|
236
|
+
detectModifiedFiles(before, after, baseDir) {
|
|
237
|
+
const modified = [];
|
|
238
|
+
for (const [filePath, afterStat] of after) {
|
|
239
|
+
const beforeStat = before.get(filePath);
|
|
240
|
+
// New file
|
|
241
|
+
if (!beforeStat) {
|
|
242
|
+
modified.push(path.relative(baseDir, filePath));
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// Modified file (mtime or size changed)
|
|
246
|
+
if (beforeStat.mtime !== afterStat.mtime || beforeStat.size !== afterStat.size) {
|
|
247
|
+
modified.push(path.relative(baseDir, filePath));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return modified;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
exports.DeterministicExecutor = DeterministicExecutor;
|
|
254
|
+
/**
|
|
255
|
+
* Check if deterministic mode is enabled
|
|
256
|
+
*/
|
|
257
|
+
function isDeterministicMode() {
|
|
258
|
+
return process.env.CLI_TEST_MODE === '1';
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Create appropriate executor based on environment
|
|
262
|
+
*/
|
|
263
|
+
function createExecutorForEnvironment() {
|
|
264
|
+
if (isDeterministicMode()) {
|
|
265
|
+
return new DeterministicExecutor();
|
|
266
|
+
}
|
|
267
|
+
return null; // Let caller use default ClaudeCodeExecutor
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=deterministic-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deterministic-executor.js","sourceRoot":"","sources":["../../src/executor/deterministic-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifecycle Controller
|
|
3
|
+
* Based on 04_COMPONENTS.md L34-81
|
|
4
|
+
*
|
|
5
|
+
* Responsible for:
|
|
6
|
+
* - 7-phase lifecycle management
|
|
7
|
+
* - Phase transitions with gate validation
|
|
8
|
+
* - Fail-closed behavior
|
|
9
|
+
* - Overall status determination
|
|
10
|
+
* - Event emission (observable pattern)
|
|
11
|
+
* - State persistence
|
|
12
|
+
* - Parallel execution control
|
|
13
|
+
* - Error recovery with retry
|
|
14
|
+
*/
|
|
15
|
+
import { EventEmitter } from 'events';
|
|
16
|
+
import { LifecyclePhase, PhaseStatus, OverallStatus, TaskStatus } from '../models/enums';
|
|
17
|
+
import { ErrorCode } from '../errors/error-codes';
|
|
18
|
+
/**
|
|
19
|
+
* Lifecycle Controller Error
|
|
20
|
+
*/
|
|
21
|
+
export declare class LifecycleError extends Error {
|
|
22
|
+
readonly code: ErrorCode;
|
|
23
|
+
readonly details?: Record<string, unknown>;
|
|
24
|
+
constructor(code: ErrorCode, message?: string, details?: Record<string, unknown>);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Phase completion input
|
|
28
|
+
*/
|
|
29
|
+
interface PhaseCompletionInput {
|
|
30
|
+
evidence: Record<string, unknown> | null;
|
|
31
|
+
status: PhaseStatus;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Phase info
|
|
35
|
+
*/
|
|
36
|
+
interface PhaseInfo {
|
|
37
|
+
phase: LifecyclePhase;
|
|
38
|
+
status: PhaseStatus;
|
|
39
|
+
started_at?: string;
|
|
40
|
+
completed_at?: string;
|
|
41
|
+
duration_seconds: number;
|
|
42
|
+
retry_count: number;
|
|
43
|
+
evidence?: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Gate validation result
|
|
47
|
+
*/
|
|
48
|
+
interface GateResult {
|
|
49
|
+
passed: boolean;
|
|
50
|
+
failures: string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Task update input
|
|
54
|
+
*/
|
|
55
|
+
interface TaskUpdate {
|
|
56
|
+
task_id: string;
|
|
57
|
+
status: TaskStatus;
|
|
58
|
+
started_at?: string;
|
|
59
|
+
completed_at?: string;
|
|
60
|
+
evidence?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Task info
|
|
64
|
+
*/
|
|
65
|
+
interface TaskInfo {
|
|
66
|
+
task_id: string;
|
|
67
|
+
status: TaskStatus;
|
|
68
|
+
started_at?: string;
|
|
69
|
+
completed_at?: string;
|
|
70
|
+
evidence?: Record<string, unknown>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parallel task completion input
|
|
74
|
+
*/
|
|
75
|
+
interface ParallelTaskCompletion {
|
|
76
|
+
status: TaskStatus;
|
|
77
|
+
evidence: Record<string, unknown>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parallel execution info
|
|
81
|
+
*/
|
|
82
|
+
interface ParallelExecutionInfo {
|
|
83
|
+
active_count: number;
|
|
84
|
+
active_tasks: string[];
|
|
85
|
+
max_parallel: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Final report structure
|
|
89
|
+
*/
|
|
90
|
+
interface FinalReport {
|
|
91
|
+
session_id: string;
|
|
92
|
+
phases: Array<{
|
|
93
|
+
name: string;
|
|
94
|
+
status: PhaseStatus;
|
|
95
|
+
started_at?: string;
|
|
96
|
+
completed_at?: string;
|
|
97
|
+
duration_seconds: number;
|
|
98
|
+
}>;
|
|
99
|
+
overall_status: OverallStatus;
|
|
100
|
+
completed_at: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Serialized lifecycle state
|
|
104
|
+
*/
|
|
105
|
+
interface SerializedState {
|
|
106
|
+
session_id: string;
|
|
107
|
+
current_phase: LifecyclePhase;
|
|
108
|
+
phases: Record<string, PhaseInfo>;
|
|
109
|
+
overall_status: OverallStatus;
|
|
110
|
+
tasks: Record<string, TaskInfo>;
|
|
111
|
+
parallel_tasks: string[];
|
|
112
|
+
status_flags: {
|
|
113
|
+
is_error: boolean;
|
|
114
|
+
is_incomplete: boolean;
|
|
115
|
+
is_no_evidence: boolean;
|
|
116
|
+
is_invalid: boolean;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Lifecycle Controller class
|
|
121
|
+
*/
|
|
122
|
+
export declare class LifecycleController extends EventEmitter {
|
|
123
|
+
private sessionId;
|
|
124
|
+
private currentPhase;
|
|
125
|
+
private phases;
|
|
126
|
+
private tasks;
|
|
127
|
+
private registeredTasks;
|
|
128
|
+
private parallelTasks;
|
|
129
|
+
private phaseTimeouts;
|
|
130
|
+
private phaseStartTimes;
|
|
131
|
+
private executorLimit;
|
|
132
|
+
private maxRetries;
|
|
133
|
+
private isError;
|
|
134
|
+
private isIncomplete;
|
|
135
|
+
private isNoEvidence;
|
|
136
|
+
private isInvalid;
|
|
137
|
+
private isCompleted;
|
|
138
|
+
/**
|
|
139
|
+
* Create a new LifecycleController
|
|
140
|
+
*/
|
|
141
|
+
constructor();
|
|
142
|
+
/**
|
|
143
|
+
* Get all lifecycle phases
|
|
144
|
+
*/
|
|
145
|
+
getAllPhases(): LifecyclePhase[];
|
|
146
|
+
/**
|
|
147
|
+
* Initialize the lifecycle with a session ID
|
|
148
|
+
*/
|
|
149
|
+
initialize(sessionId: string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Get current phase
|
|
152
|
+
*/
|
|
153
|
+
getCurrentPhase(): LifecyclePhase;
|
|
154
|
+
/**
|
|
155
|
+
* Get phase status
|
|
156
|
+
*/
|
|
157
|
+
getPhaseStatus(phase: LifecyclePhase): PhaseStatus;
|
|
158
|
+
/**
|
|
159
|
+
* Get phase info
|
|
160
|
+
*/
|
|
161
|
+
getPhaseInfo(phase: LifecyclePhase): PhaseInfo;
|
|
162
|
+
/**
|
|
163
|
+
* Complete current phase and transition to next
|
|
164
|
+
* @throws LifecycleError if evidence is missing or invalid
|
|
165
|
+
*/
|
|
166
|
+
completeCurrentPhase(input: PhaseCompletionInput): void;
|
|
167
|
+
/**
|
|
168
|
+
* Transition to a specific phase
|
|
169
|
+
* @throws LifecycleError if transition is invalid
|
|
170
|
+
*/
|
|
171
|
+
transitionTo(targetPhase: LifecyclePhase): void;
|
|
172
|
+
/**
|
|
173
|
+
* Validate gate conditions for a phase
|
|
174
|
+
*/
|
|
175
|
+
validateGate(phase: LifecyclePhase, input: {
|
|
176
|
+
evidence: Record<string, unknown>;
|
|
177
|
+
}): GateResult;
|
|
178
|
+
/**
|
|
179
|
+
* Handle critical error
|
|
180
|
+
*/
|
|
181
|
+
handleCriticalError(error: Error): void;
|
|
182
|
+
/**
|
|
183
|
+
* Handle recoverable error (with retry)
|
|
184
|
+
* @throws LifecycleError if max retries exceeded
|
|
185
|
+
*/
|
|
186
|
+
handleRecoverableError(phase: LifecyclePhase, error: Error): void;
|
|
187
|
+
/**
|
|
188
|
+
* Set max retries for recoverable errors
|
|
189
|
+
*/
|
|
190
|
+
setMaxRetries(count: number): void;
|
|
191
|
+
/**
|
|
192
|
+
* Get overall status
|
|
193
|
+
*/
|
|
194
|
+
getOverallStatus(): OverallStatus;
|
|
195
|
+
/**
|
|
196
|
+
* Check if lifecycle is complete
|
|
197
|
+
*/
|
|
198
|
+
isComplete(): boolean;
|
|
199
|
+
/**
|
|
200
|
+
* Mark lifecycle as incomplete
|
|
201
|
+
*/
|
|
202
|
+
markIncomplete(reason: string): void;
|
|
203
|
+
/**
|
|
204
|
+
* Mark lifecycle as no evidence
|
|
205
|
+
*/
|
|
206
|
+
markNoEvidence(reason: string): void;
|
|
207
|
+
/**
|
|
208
|
+
* Mark lifecycle as invalid
|
|
209
|
+
*/
|
|
210
|
+
markInvalid(reason: string): void;
|
|
211
|
+
/**
|
|
212
|
+
* Update task status (for EXECUTION phase)
|
|
213
|
+
*/
|
|
214
|
+
updateTaskStatus(update: TaskUpdate): void;
|
|
215
|
+
/**
|
|
216
|
+
* Get task info
|
|
217
|
+
*/
|
|
218
|
+
getTaskInfo(taskId: string): TaskInfo;
|
|
219
|
+
/**
|
|
220
|
+
* Get incomplete tasks
|
|
221
|
+
*/
|
|
222
|
+
private getIncompleteTasks;
|
|
223
|
+
/**
|
|
224
|
+
* Generate final report
|
|
225
|
+
*/
|
|
226
|
+
generateFinalReport(): FinalReport;
|
|
227
|
+
/**
|
|
228
|
+
* Set phase timeout
|
|
229
|
+
*/
|
|
230
|
+
setPhaseTimeout(phase: LifecyclePhase, seconds: number): void;
|
|
231
|
+
/**
|
|
232
|
+
* Set phase start time (for testing)
|
|
233
|
+
*/
|
|
234
|
+
setPhaseStartTimeForTesting(phase: LifecyclePhase, timestamp: number): void;
|
|
235
|
+
/**
|
|
236
|
+
* Check if phase is timed out
|
|
237
|
+
*/
|
|
238
|
+
isPhaseTimedOut(phase: LifecyclePhase): boolean;
|
|
239
|
+
/**
|
|
240
|
+
* Check and handle timeout
|
|
241
|
+
*/
|
|
242
|
+
checkAndHandleTimeout(): void;
|
|
243
|
+
/**
|
|
244
|
+
* Start parallel tasks
|
|
245
|
+
*/
|
|
246
|
+
startParallelTasks(taskIds: string[]): void;
|
|
247
|
+
/**
|
|
248
|
+
* Start a single parallel task
|
|
249
|
+
* @throws LifecycleError if executor limit exceeded
|
|
250
|
+
*/
|
|
251
|
+
startParallelTask(taskId: string): void;
|
|
252
|
+
/**
|
|
253
|
+
* Complete a parallel task
|
|
254
|
+
*/
|
|
255
|
+
completeParallelTask(taskId: string, completion: ParallelTaskCompletion): void;
|
|
256
|
+
/**
|
|
257
|
+
* Get parallel execution info
|
|
258
|
+
*/
|
|
259
|
+
getParallelExecutionInfo(): ParallelExecutionInfo;
|
|
260
|
+
/**
|
|
261
|
+
* Serialize lifecycle state
|
|
262
|
+
*/
|
|
263
|
+
serialize(): SerializedState;
|
|
264
|
+
/**
|
|
265
|
+
* Deserialize lifecycle state
|
|
266
|
+
*/
|
|
267
|
+
static deserialize(state: SerializedState): LifecycleController;
|
|
268
|
+
}
|
|
269
|
+
export {};
|
|
270
|
+
//# sourceMappingURL=lifecycle-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-controller.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lifecycle-controller.ts"],"names":[],"mappings":"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"}
|