pm-orchestrator-runner 1.0.7 → 1.0.8
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/README.md +20 -10
- package/dist/cli/index.js +36 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/namespace.d.ts +86 -0
- package/dist/config/namespace.d.ts.map +1 -0
- package/dist/config/namespace.js +150 -0
- package/dist/config/namespace.js.map +1 -0
- package/dist/core/runner-core.d.ts +2 -0
- package/dist/core/runner-core.d.ts.map +1 -1
- package/dist/core/runner-core.js +27 -1
- package/dist/core/runner-core.js.map +1 -1
- package/dist/executor/claude-code-executor.d.ts +28 -0
- package/dist/executor/claude-code-executor.d.ts.map +1 -1
- package/dist/executor/claude-code-executor.js +184 -1
- package/dist/executor/claude-code-executor.js.map +1 -1
- package/dist/executor/deterministic-executor.d.ts +2 -1
- package/dist/executor/deterministic-executor.d.ts.map +1 -1
- package/dist/executor/deterministic-executor.js +7 -0
- package/dist/executor/deterministic-executor.js.map +1 -1
- package/dist/executor/recovery-executor.d.ts +2 -1
- package/dist/executor/recovery-executor.d.ts.map +1 -1
- package/dist/executor/recovery-executor.js +7 -0
- package/dist/executor/recovery-executor.js.map +1 -1
- package/dist/models/enums.d.ts +54 -0
- package/dist/models/enums.d.ts.map +1 -1
- package/dist/models/enums.js +59 -1
- package/dist/models/enums.js.map +1 -1
- package/dist/models/index.d.ts +4 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +50 -2
- package/dist/models/index.js.map +1 -1
- package/dist/models/run.d.ts +82 -0
- package/dist/models/run.d.ts.map +1 -0
- package/dist/models/run.js +161 -0
- package/dist/models/run.js.map +1 -0
- package/dist/models/task-group.d.ts +164 -0
- package/dist/models/task-group.d.ts.map +1 -0
- package/dist/models/task-group.js +246 -0
- package/dist/models/task-group.js.map +1 -0
- package/dist/models/task.d.ts +7 -0
- package/dist/models/task.d.ts.map +1 -1
- package/dist/models/task.js.map +1 -1
- package/dist/models/thread.d.ts +53 -0
- package/dist/models/thread.d.ts.map +1 -0
- package/dist/models/thread.js +92 -0
- package/dist/models/thread.js.map +1 -0
- package/dist/pool/agent-pool.d.ts.map +1 -1
- package/dist/pool/agent-pool.js +2 -3
- package/dist/pool/agent-pool.js.map +1 -1
- package/dist/prompt/index.d.ts +8 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +13 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/prompt-assembler.d.ts +145 -0
- package/dist/prompt/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt/prompt-assembler.js +242 -0
- package/dist/prompt/prompt-assembler.js.map +1 -0
- package/dist/queue/index.d.ts +41 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +42 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue-poller.d.ts +107 -0
- package/dist/queue/queue-poller.d.ts.map +1 -0
- package/dist/queue/queue-poller.js +181 -0
- package/dist/queue/queue-poller.js.map +1 -0
- package/dist/queue/queue-store.d.ts +163 -0
- package/dist/queue/queue-store.d.ts.map +1 -0
- package/dist/queue/queue-store.js +421 -0
- package/dist/queue/queue-store.js.map +1 -0
- package/dist/repl/index.d.ts +1 -0
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +3 -1
- package/dist/repl/index.js.map +1 -1
- package/dist/repl/repl-interface.d.ts +40 -5
- package/dist/repl/repl-interface.d.ts.map +1 -1
- package/dist/repl/repl-interface.js +95 -17
- package/dist/repl/repl-interface.js.map +1 -1
- package/dist/repl/two-pane-renderer.d.ts +148 -0
- package/dist/repl/two-pane-renderer.d.ts.map +1 -0
- package/dist/repl/two-pane-renderer.js +239 -0
- package/dist/repl/two-pane-renderer.js.map +1 -0
- package/dist/web/index.d.ts +45 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +47 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/server.d.ts +71 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +329 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +11 -3
package/README.md
CHANGED
|
@@ -26,20 +26,20 @@ npx pm-orchestrator-runner --help
|
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
28
|
# Start REPL in current directory
|
|
29
|
-
pm repl
|
|
29
|
+
pm-orchestrator repl
|
|
30
30
|
|
|
31
31
|
# Start REPL with specific project
|
|
32
|
-
pm repl --project /path/to/project
|
|
32
|
+
pm-orchestrator repl --project /path/to/project
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
### Non-Interactive Mode (Scripting)
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
# Pipe input
|
|
39
|
-
echo "Create a file called hello.txt with content Hello World" | pm repl --non-interactive --exit-on-eof
|
|
39
|
+
echo "Create a file called hello.txt with content Hello World" | pm-orchestrator repl --non-interactive --exit-on-eof
|
|
40
40
|
|
|
41
41
|
# Heredoc input
|
|
42
|
-
pm repl --non-interactive --exit-on-eof << 'EOF'
|
|
42
|
+
pm-orchestrator repl --non-interactive --exit-on-eof << 'EOF'
|
|
43
43
|
Create README.md with content "# My Project"
|
|
44
44
|
EOF
|
|
45
45
|
```
|
|
@@ -49,18 +49,18 @@ EOF
|
|
|
49
49
|
For persistent verification root (useful for CI/CD):
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
|
-
pm repl --project-mode fixed --project-root /path/to/project
|
|
52
|
+
pm-orchestrator repl --project-mode fixed --project-root /path/to/project
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
## Commands
|
|
56
56
|
|
|
57
57
|
| Command | Description |
|
|
58
58
|
|---------|-------------|
|
|
59
|
-
| `pm repl` | Start interactive REPL mode |
|
|
60
|
-
| `pm start <path>` | Start a new session on a project |
|
|
61
|
-
| `pm continue <id>` | Continue a paused session |
|
|
62
|
-
| `pm status <id>` | Get session status |
|
|
63
|
-
| `pm validate <path>` | Validate project structure |
|
|
59
|
+
| `pm-orchestrator repl` | Start interactive REPL mode |
|
|
60
|
+
| `pm-orchestrator start <path>` | Start a new session on a project |
|
|
61
|
+
| `pm-orchestrator continue <id>` | Continue a paused session |
|
|
62
|
+
| `pm-orchestrator status <id>` | Get session status |
|
|
63
|
+
| `pm-orchestrator validate <path>` | Validate project structure |
|
|
64
64
|
|
|
65
65
|
## REPL Options
|
|
66
66
|
|
|
@@ -99,6 +99,16 @@ Inside the REPL:
|
|
|
99
99
|
- Node.js >= 18.0.0
|
|
100
100
|
- Claude Code CLI (`claude` command) installed
|
|
101
101
|
|
|
102
|
+
## Verify Installation
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Install globally
|
|
106
|
+
npm install -g pm-orchestrator-runner
|
|
107
|
+
|
|
108
|
+
# Verify command is available
|
|
109
|
+
pm-orchestrator repl --help
|
|
110
|
+
```
|
|
111
|
+
|
|
102
112
|
## License
|
|
103
113
|
|
|
104
114
|
MIT
|
package/dist/cli/index.js
CHANGED
|
@@ -47,6 +47,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
47
47
|
const path = __importStar(require("path"));
|
|
48
48
|
const cli_interface_1 = require("./cli-interface");
|
|
49
49
|
const repl_interface_1 = require("../repl/repl-interface");
|
|
50
|
+
const namespace_1 = require("../config/namespace");
|
|
50
51
|
/**
|
|
51
52
|
* Help text
|
|
52
53
|
*/
|
|
@@ -71,6 +72,10 @@ REPL Options:
|
|
|
71
72
|
--project-mode <mode> Project mode: 'temp' (default) or 'fixed'
|
|
72
73
|
--project-root <path> Verification root directory (required if --project-mode=fixed)
|
|
73
74
|
--print-project-path Print PROJECT_PATH=<path> on startup
|
|
75
|
+
--namespace <name> Namespace for state separation (default: 'default')
|
|
76
|
+
Per spec/21_STABLE_DEV.md: separates QueueStore, state dir, Web UI port
|
|
77
|
+
Examples: 'stable', 'dev', 'test-1'
|
|
78
|
+
--port <number> Web UI port (default: 3000 for 'default'/'stable', 3001 for 'dev')
|
|
74
79
|
|
|
75
80
|
Run Options:
|
|
76
81
|
--config <path> Path to config file
|
|
@@ -141,6 +146,27 @@ function parseReplArgs(args) {
|
|
|
141
146
|
else if (arg === '--print-project-path') {
|
|
142
147
|
result.printProjectPath = true;
|
|
143
148
|
}
|
|
149
|
+
// Namespace (per spec/21_STABLE_DEV.md)
|
|
150
|
+
else if (arg === '--namespace' && args[i + 1]) {
|
|
151
|
+
const ns = args[++i];
|
|
152
|
+
// Fail-closed: validate namespace immediately
|
|
153
|
+
const error = (0, namespace_1.validateNamespace)(ns);
|
|
154
|
+
if (error) {
|
|
155
|
+
console.error(`Invalid namespace: ${error}`);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
result.namespace = ns;
|
|
159
|
+
}
|
|
160
|
+
// Port
|
|
161
|
+
else if (arg === '--port' && args[i + 1]) {
|
|
162
|
+
const portStr = args[++i];
|
|
163
|
+
const port = parseInt(portStr, 10);
|
|
164
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
165
|
+
console.error(`Invalid port: ${portStr}. Must be a number between 1 and 65535.`);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
result.port = port;
|
|
169
|
+
}
|
|
144
170
|
}
|
|
145
171
|
return result;
|
|
146
172
|
}
|
|
@@ -168,14 +194,23 @@ async function main() {
|
|
|
168
194
|
// CRITICAL: evidenceDir must use projectPath, not process.cwd()
|
|
169
195
|
// This ensures files are created in the project directory, not where the CLI was invoked
|
|
170
196
|
const projectPath = replArgs.projectPath || process.cwd();
|
|
197
|
+
// Build namespace configuration (per spec/21_STABLE_DEV.md)
|
|
198
|
+
// Fail-closed: buildNamespaceConfig throws on invalid namespace
|
|
199
|
+
const namespaceConfig = (0, namespace_1.buildNamespaceConfig)({
|
|
200
|
+
namespace: replArgs.namespace,
|
|
201
|
+
projectRoot: projectPath,
|
|
202
|
+
port: replArgs.port,
|
|
203
|
+
});
|
|
171
204
|
const repl = new repl_interface_1.REPLInterface({
|
|
172
205
|
projectPath,
|
|
173
|
-
evidenceDir: replArgs.evidenceDir || path.join(
|
|
206
|
+
evidenceDir: replArgs.evidenceDir || path.join(namespaceConfig.stateDir, 'evidence'),
|
|
174
207
|
authMode: 'claude-code',
|
|
175
208
|
forceNonInteractive: replArgs.nonInteractive,
|
|
176
209
|
projectMode: replArgs.projectMode,
|
|
177
210
|
projectRoot: replArgs.projectRoot,
|
|
178
211
|
printProjectPath: replArgs.printProjectPath,
|
|
212
|
+
namespace: namespaceConfig.namespace,
|
|
213
|
+
namespaceConfig,
|
|
179
214
|
});
|
|
180
215
|
// Start REPL and wait for it to complete
|
|
181
216
|
// CRITICAL: Don't use setTimeout to force exit - let REPL handle EOF properly
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,mDAA2D;AAC3D,2DAAoE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Module
|
|
3
|
+
* Per spec/21_STABLE_DEV.md
|
|
4
|
+
*
|
|
5
|
+
* Exports:
|
|
6
|
+
* - Namespace configuration utilities for state separation
|
|
7
|
+
*/
|
|
8
|
+
export { DEFAULT_NAMESPACE, validateNamespace, getTableName, getStateDir, getDefaultPort, buildNamespaceConfig, NamespaceConfig, NamespaceUtils, } from './namespace';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config Module
|
|
4
|
+
* Per spec/21_STABLE_DEV.md
|
|
5
|
+
*
|
|
6
|
+
* Exports:
|
|
7
|
+
* - Namespace configuration utilities for state separation
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.NamespaceUtils = exports.buildNamespaceConfig = exports.getDefaultPort = exports.getStateDir = exports.getTableName = exports.validateNamespace = exports.DEFAULT_NAMESPACE = void 0;
|
|
11
|
+
var namespace_1 = require("./namespace");
|
|
12
|
+
Object.defineProperty(exports, "DEFAULT_NAMESPACE", { enumerable: true, get: function () { return namespace_1.DEFAULT_NAMESPACE; } });
|
|
13
|
+
Object.defineProperty(exports, "validateNamespace", { enumerable: true, get: function () { return namespace_1.validateNamespace; } });
|
|
14
|
+
Object.defineProperty(exports, "getTableName", { enumerable: true, get: function () { return namespace_1.getTableName; } });
|
|
15
|
+
Object.defineProperty(exports, "getStateDir", { enumerable: true, get: function () { return namespace_1.getStateDir; } });
|
|
16
|
+
Object.defineProperty(exports, "getDefaultPort", { enumerable: true, get: function () { return namespace_1.getDefaultPort; } });
|
|
17
|
+
Object.defineProperty(exports, "buildNamespaceConfig", { enumerable: true, get: function () { return namespace_1.buildNamespaceConfig; } });
|
|
18
|
+
Object.defineProperty(exports, "NamespaceUtils", { enumerable: true, get: function () { return namespace_1.NamespaceUtils; } });
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,yCASqB;AARnB,8GAAA,iBAAiB,OAAA;AACjB,8GAAA,iBAAiB,OAAA;AACjB,yGAAA,YAAY,OAAA;AACZ,wGAAA,WAAW,OAAA;AACX,2GAAA,cAAc,OAAA;AACd,iHAAA,oBAAoB,OAAA;AAEpB,2GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Namespace Configuration
|
|
3
|
+
* Per spec/21_STABLE_DEV.md
|
|
4
|
+
*
|
|
5
|
+
* Provides state separation between stable and dev runners:
|
|
6
|
+
* - QueueStore table name: pm-runner-queue-{namespace}
|
|
7
|
+
* - State directory: .claude/state/{namespace}/
|
|
8
|
+
* - Web UI port: configurable via --port
|
|
9
|
+
*
|
|
10
|
+
* Fail-closed: Invalid namespace names cause immediate exit
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default namespace name
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_NAMESPACE = "default";
|
|
16
|
+
/**
|
|
17
|
+
* Namespace configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface NamespaceConfig {
|
|
20
|
+
/** Namespace name (default: 'default') */
|
|
21
|
+
namespace: string;
|
|
22
|
+
/** DynamoDB table name derived from namespace */
|
|
23
|
+
tableName: string;
|
|
24
|
+
/** State directory path derived from namespace */
|
|
25
|
+
stateDir: string;
|
|
26
|
+
/** Web UI port (default: 3000 for default namespace) */
|
|
27
|
+
port: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate namespace name
|
|
31
|
+
* Fail-closed: Returns error message if invalid, undefined if valid
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateNamespace(namespace: string): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Get QueueStore table name for namespace
|
|
36
|
+
*/
|
|
37
|
+
export declare function getTableName(namespace: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Get state directory path for namespace
|
|
40
|
+
* @param projectRoot - The project root directory
|
|
41
|
+
* @param namespace - The namespace
|
|
42
|
+
*/
|
|
43
|
+
export declare function getStateDir(projectRoot: string, namespace: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Get default Web UI port for namespace
|
|
46
|
+
* - default: 3000
|
|
47
|
+
* - stable: 3000
|
|
48
|
+
* - dev: 3001
|
|
49
|
+
* - Others: 3000 + hash(namespace) % 1000
|
|
50
|
+
*/
|
|
51
|
+
export declare function getDefaultPort(namespace: string): number;
|
|
52
|
+
/**
|
|
53
|
+
* Build namespace configuration
|
|
54
|
+
* Fail-closed: Throws on invalid namespace
|
|
55
|
+
*
|
|
56
|
+
* @param options - Configuration options
|
|
57
|
+
* @returns Namespace configuration
|
|
58
|
+
* @throws Error if namespace is invalid
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildNamespaceConfig(options: {
|
|
61
|
+
namespace?: string;
|
|
62
|
+
projectRoot: string;
|
|
63
|
+
port?: number;
|
|
64
|
+
}): NamespaceConfig;
|
|
65
|
+
/**
|
|
66
|
+
* Namespace comparison utilities
|
|
67
|
+
*/
|
|
68
|
+
export declare const NamespaceUtils: {
|
|
69
|
+
/**
|
|
70
|
+
* Check if two namespaces are the same
|
|
71
|
+
*/
|
|
72
|
+
isSameNamespace(ns1: string, ns2: string): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Check if namespace is the default namespace
|
|
75
|
+
*/
|
|
76
|
+
isDefaultNamespace(namespace: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Check if namespace represents stable
|
|
79
|
+
*/
|
|
80
|
+
isStable(namespace: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Check if namespace represents dev
|
|
83
|
+
*/
|
|
84
|
+
isDev(namespace: string): boolean;
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=namespace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/config/namespace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAeH;;GAEG;AACH,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,eAAe,CAelB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;yBACkB,MAAM,OAAO,MAAM,GAAG,OAAO;IAIlD;;OAEG;kCAC2B,MAAM,GAAG,OAAO;IAI9C;;OAEG;wBACiB,MAAM,GAAG,OAAO;IAIpC;;OAEG;qBACc,MAAM,GAAG,OAAO;CAGlC,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Namespace Configuration
|
|
4
|
+
* Per spec/21_STABLE_DEV.md
|
|
5
|
+
*
|
|
6
|
+
* Provides state separation between stable and dev runners:
|
|
7
|
+
* - QueueStore table name: pm-runner-queue-{namespace}
|
|
8
|
+
* - State directory: .claude/state/{namespace}/
|
|
9
|
+
* - Web UI port: configurable via --port
|
|
10
|
+
*
|
|
11
|
+
* Fail-closed: Invalid namespace names cause immediate exit
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.NamespaceUtils = exports.DEFAULT_NAMESPACE = void 0;
|
|
15
|
+
exports.validateNamespace = validateNamespace;
|
|
16
|
+
exports.getTableName = getTableName;
|
|
17
|
+
exports.getStateDir = getStateDir;
|
|
18
|
+
exports.getDefaultPort = getDefaultPort;
|
|
19
|
+
exports.buildNamespaceConfig = buildNamespaceConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Valid namespace pattern
|
|
22
|
+
* - Alphanumeric and hyphens only
|
|
23
|
+
* - 1-32 characters
|
|
24
|
+
* - Cannot start or end with hyphen
|
|
25
|
+
*/
|
|
26
|
+
const NAMESPACE_PATTERN = /^[a-z0-9]([a-z0-9-]{0,30}[a-z0-9])?$/i;
|
|
27
|
+
/**
|
|
28
|
+
* Reserved namespace names that cannot be used
|
|
29
|
+
*/
|
|
30
|
+
const RESERVED_NAMESPACES = ['all', 'none', 'null', 'undefined', 'system'];
|
|
31
|
+
/**
|
|
32
|
+
* Default namespace name
|
|
33
|
+
*/
|
|
34
|
+
exports.DEFAULT_NAMESPACE = 'default';
|
|
35
|
+
/**
|
|
36
|
+
* Validate namespace name
|
|
37
|
+
* Fail-closed: Returns error message if invalid, undefined if valid
|
|
38
|
+
*/
|
|
39
|
+
function validateNamespace(namespace) {
|
|
40
|
+
if (!namespace) {
|
|
41
|
+
return 'Namespace cannot be empty';
|
|
42
|
+
}
|
|
43
|
+
if (namespace.length > 32) {
|
|
44
|
+
return `Namespace too long: ${namespace.length} characters (max 32)`;
|
|
45
|
+
}
|
|
46
|
+
if (!NAMESPACE_PATTERN.test(namespace)) {
|
|
47
|
+
return `Invalid namespace format: "${namespace}". Use alphanumeric and hyphens only (e.g., "stable", "dev", "test-1")`;
|
|
48
|
+
}
|
|
49
|
+
if (RESERVED_NAMESPACES.includes(namespace.toLowerCase())) {
|
|
50
|
+
return `Reserved namespace name: "${namespace}". Cannot use: ${RESERVED_NAMESPACES.join(', ')}`;
|
|
51
|
+
}
|
|
52
|
+
return undefined; // Valid
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get QueueStore table name for namespace
|
|
56
|
+
*/
|
|
57
|
+
function getTableName(namespace) {
|
|
58
|
+
if (namespace === exports.DEFAULT_NAMESPACE) {
|
|
59
|
+
return 'pm-runner-queue';
|
|
60
|
+
}
|
|
61
|
+
return `pm-runner-queue-${namespace}`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get state directory path for namespace
|
|
65
|
+
* @param projectRoot - The project root directory
|
|
66
|
+
* @param namespace - The namespace
|
|
67
|
+
*/
|
|
68
|
+
function getStateDir(projectRoot, namespace) {
|
|
69
|
+
if (namespace === exports.DEFAULT_NAMESPACE) {
|
|
70
|
+
return `${projectRoot}/.claude`;
|
|
71
|
+
}
|
|
72
|
+
return `${projectRoot}/.claude/state/${namespace}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get default Web UI port for namespace
|
|
76
|
+
* - default: 3000
|
|
77
|
+
* - stable: 3000
|
|
78
|
+
* - dev: 3001
|
|
79
|
+
* - Others: 3000 + hash(namespace) % 1000
|
|
80
|
+
*/
|
|
81
|
+
function getDefaultPort(namespace) {
|
|
82
|
+
const basePorts = {
|
|
83
|
+
'default': 3000,
|
|
84
|
+
'stable': 3000,
|
|
85
|
+
'dev': 3001,
|
|
86
|
+
};
|
|
87
|
+
if (basePorts[namespace] !== undefined) {
|
|
88
|
+
return basePorts[namespace];
|
|
89
|
+
}
|
|
90
|
+
// Hash-based port for other namespaces (3002-3999)
|
|
91
|
+
let hash = 0;
|
|
92
|
+
for (let i = 0; i < namespace.length; i++) {
|
|
93
|
+
const char = namespace.charCodeAt(i);
|
|
94
|
+
hash = ((hash << 5) - hash) + char;
|
|
95
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
96
|
+
}
|
|
97
|
+
return 3002 + (Math.abs(hash) % 998);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Build namespace configuration
|
|
101
|
+
* Fail-closed: Throws on invalid namespace
|
|
102
|
+
*
|
|
103
|
+
* @param options - Configuration options
|
|
104
|
+
* @returns Namespace configuration
|
|
105
|
+
* @throws Error if namespace is invalid
|
|
106
|
+
*/
|
|
107
|
+
function buildNamespaceConfig(options) {
|
|
108
|
+
const namespace = options.namespace || process.env.PM_RUNNER_NAMESPACE || exports.DEFAULT_NAMESPACE;
|
|
109
|
+
// Validate namespace (fail-closed)
|
|
110
|
+
const error = validateNamespace(namespace);
|
|
111
|
+
if (error) {
|
|
112
|
+
throw new Error(`Invalid namespace: ${error}`);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
namespace,
|
|
116
|
+
tableName: getTableName(namespace),
|
|
117
|
+
stateDir: getStateDir(options.projectRoot, namespace),
|
|
118
|
+
port: options.port || getDefaultPort(namespace),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Namespace comparison utilities
|
|
123
|
+
*/
|
|
124
|
+
exports.NamespaceUtils = {
|
|
125
|
+
/**
|
|
126
|
+
* Check if two namespaces are the same
|
|
127
|
+
*/
|
|
128
|
+
isSameNamespace(ns1, ns2) {
|
|
129
|
+
return ns1.toLowerCase() === ns2.toLowerCase();
|
|
130
|
+
},
|
|
131
|
+
/**
|
|
132
|
+
* Check if namespace is the default namespace
|
|
133
|
+
*/
|
|
134
|
+
isDefaultNamespace(namespace) {
|
|
135
|
+
return namespace.toLowerCase() === exports.DEFAULT_NAMESPACE;
|
|
136
|
+
},
|
|
137
|
+
/**
|
|
138
|
+
* Check if namespace represents stable
|
|
139
|
+
*/
|
|
140
|
+
isStable(namespace) {
|
|
141
|
+
return namespace.toLowerCase() === 'stable';
|
|
142
|
+
},
|
|
143
|
+
/**
|
|
144
|
+
* Check if namespace represents dev
|
|
145
|
+
*/
|
|
146
|
+
isDev(namespace) {
|
|
147
|
+
return namespace.toLowerCase() === 'dev';
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=namespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/config/namespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-core.d.ts","sourceRoot":"","sources":["../../src/core/runner-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpE,OAAO,EACL,aAAa,EACb,KAAK,EAEL,UAAU,EAMX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAmB,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAsC,SAAS,EAAkB,MAAM,kCAAkC,CAAC;AAGjH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"runner-core.d.ts","sourceRoot":"","sources":["../../src/core/runner-core.ts"],"names":[],"mappings":"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"}
|
package/dist/core/runner-core.js
CHANGED
|
@@ -66,6 +66,7 @@ const error_codes_1 = require("../errors/error-codes");
|
|
|
66
66
|
const claude_code_executor_1 = require("../executor/claude-code-executor");
|
|
67
67
|
const deterministic_executor_1 = require("../executor/deterministic-executor");
|
|
68
68
|
const recovery_executor_1 = require("../executor/recovery-executor");
|
|
69
|
+
const prompt_assembler_1 = require("../prompt/prompt-assembler");
|
|
69
70
|
/**
|
|
70
71
|
* Runner Core Error
|
|
71
72
|
*/
|
|
@@ -131,6 +132,12 @@ class RunnerCore extends events_1.EventEmitter {
|
|
|
131
132
|
// Model selection from REPL (per spec 10_REPL_UX.md L117-118)
|
|
132
133
|
// This is set from ExecutionConfig.selectedModel and passed to executor
|
|
133
134
|
currentSelectedModel = undefined;
|
|
135
|
+
// Prompt Assembler for spec/17_PROMPT_TEMPLATE.md
|
|
136
|
+
// Assembles prompts in fixed order: global prelude → project prelude → task group prelude → user input → output epilogue
|
|
137
|
+
promptAssembler = null;
|
|
138
|
+
// Current task group context for prompt assembly
|
|
139
|
+
// Per spec/16_TASK_GROUP.md: context persists within task group
|
|
140
|
+
currentTaskGroupContext = null;
|
|
134
141
|
/**
|
|
135
142
|
* Create a new RunnerCore
|
|
136
143
|
*/
|
|
@@ -227,6 +234,11 @@ class RunnerCore extends events_1.EventEmitter {
|
|
|
227
234
|
this.currentExecutorMode = 'claude-code';
|
|
228
235
|
}
|
|
229
236
|
}
|
|
237
|
+
// Initialize PromptAssembler for spec/17_PROMPT_TEMPLATE.md
|
|
238
|
+
// Prompt assembly in fixed order, no caching
|
|
239
|
+
this.promptAssembler = new prompt_assembler_1.PromptAssembler({
|
|
240
|
+
projectPath: targetProject,
|
|
241
|
+
});
|
|
230
242
|
// Initialize TaskLogManager for Property 26/27: TaskLog Lifecycle Recording
|
|
231
243
|
// Per spec 06_CORRECTNESS_PROPERTIES.md Property 26: Fail-Closed Logging
|
|
232
244
|
this.taskLogManager = new task_log_manager_1.TaskLogManager(targetProject);
|
|
@@ -462,11 +474,25 @@ class RunnerCore extends events_1.EventEmitter {
|
|
|
462
474
|
// Use Claude Code CLI if available
|
|
463
475
|
if (this.claudeCodeExecutor && this.session?.target_project) {
|
|
464
476
|
executionLog.push(`[${new Date().toISOString()}] Executing via Claude Code CLI...`);
|
|
477
|
+
// Per spec/17_PROMPT_TEMPLATE.md: Assemble prompt in fixed order
|
|
478
|
+
// Order: global prelude → project prelude → task group prelude → user input → output epilogue
|
|
479
|
+
let assembledPrompt = task.naturalLanguageTask;
|
|
480
|
+
if (this.promptAssembler && task.naturalLanguageTask) {
|
|
481
|
+
try {
|
|
482
|
+
const assemblyResult = this.promptAssembler.assemble(task.naturalLanguageTask, this.currentTaskGroupContext || undefined);
|
|
483
|
+
assembledPrompt = assemblyResult.prompt;
|
|
484
|
+
executionLog.push(`[${new Date().toISOString()}] Prompt assembled (5 sections)`);
|
|
485
|
+
}
|
|
486
|
+
catch (assemblyError) {
|
|
487
|
+
// Fail-closed: if assembly fails, use original prompt but log warning
|
|
488
|
+
executionLog.push(`[${new Date().toISOString()}] WARNING: Prompt assembly failed, using raw input`);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
465
491
|
// Per spec 10_REPL_UX.md L117-118: Pass model to executor
|
|
466
492
|
// Model selection is REPL-local; executor passes it to Claude Code CLI
|
|
467
493
|
const executorResult = await this.claudeCodeExecutor.execute({
|
|
468
494
|
id: task.id,
|
|
469
|
-
prompt:
|
|
495
|
+
prompt: assembledPrompt,
|
|
470
496
|
workingDir: this.session.target_project,
|
|
471
497
|
selectedModel: this.currentSelectedModel,
|
|
472
498
|
});
|