pm-orchestrator-runner 1.0.7 → 1.0.9
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 +59 -6
- package/dist/cli/index.d.ts +7 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +191 -49
- 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/executor/stepwise-mock-executor.d.ts +76 -0
- package/dist/executor/stepwise-mock-executor.d.ts.map +1 -0
- package/dist/executor/stepwise-mock-executor.js +369 -0
- package/dist/executor/stepwise-mock-executor.js.map +1 -0
- 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 +160 -0
- package/dist/repl/two-pane-renderer.d.ts.map +1 -0
- package/dist/repl/two-pane-renderer.js +276 -0
- package/dist/repl/two-pane-renderer.js.map +1 -0
- package/dist/trace/trace-pack.d.ts +182 -0
- package/dist/trace/trace-pack.d.ts.map +1 -0
- package/dist/trace/trace-pack.js +407 -0
- package/dist/trace/trace-pack.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 +10 -2
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ A CLI tool for orchestrated execution of Claude Code with evidence-based complet
|
|
|
9
9
|
- Two-stage timeout system (soft warning + hard terminate)
|
|
10
10
|
- Session management and persistence
|
|
11
11
|
- Non-interactive mode for scripting and automation
|
|
12
|
+
- Web UI for task queue management
|
|
12
13
|
|
|
13
14
|
## Installation
|
|
14
15
|
|
|
@@ -25,21 +26,34 @@ npx pm-orchestrator-runner --help
|
|
|
25
26
|
### Interactive Mode
|
|
26
27
|
|
|
27
28
|
```bash
|
|
28
|
-
# Start REPL in current directory
|
|
29
|
-
pm
|
|
29
|
+
# Start REPL in current directory (default command)
|
|
30
|
+
pm
|
|
30
31
|
|
|
31
32
|
# Start REPL with specific project
|
|
32
|
-
pm
|
|
33
|
+
pm --project /path/to/project
|
|
34
|
+
|
|
35
|
+
# Explicit repl command
|
|
36
|
+
pm repl --namespace stable
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Web UI Mode
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Start Web UI server
|
|
43
|
+
pm web --port 3000
|
|
44
|
+
|
|
45
|
+
# Verify Web UI
|
|
46
|
+
curl http://localhost:3000/api/health
|
|
33
47
|
```
|
|
34
48
|
|
|
35
49
|
### Non-Interactive Mode (Scripting)
|
|
36
50
|
|
|
37
51
|
```bash
|
|
38
52
|
# Pipe input
|
|
39
|
-
echo "Create a file called hello.txt with content Hello World" | pm
|
|
53
|
+
echo "Create a file called hello.txt with content Hello World" | pm --non-interactive --exit-on-eof
|
|
40
54
|
|
|
41
55
|
# Heredoc input
|
|
42
|
-
pm
|
|
56
|
+
pm --non-interactive --exit-on-eof << 'EOF'
|
|
43
57
|
Create README.md with content "# My Project"
|
|
44
58
|
EOF
|
|
45
59
|
```
|
|
@@ -49,14 +63,16 @@ EOF
|
|
|
49
63
|
For persistent verification root (useful for CI/CD):
|
|
50
64
|
|
|
51
65
|
```bash
|
|
52
|
-
pm
|
|
66
|
+
pm --project-mode fixed --project-root /path/to/project
|
|
53
67
|
```
|
|
54
68
|
|
|
55
69
|
## Commands
|
|
56
70
|
|
|
57
71
|
| Command | Description |
|
|
58
72
|
|---------|-------------|
|
|
73
|
+
| `pm` | Start interactive REPL mode (default) |
|
|
59
74
|
| `pm repl` | Start interactive REPL mode |
|
|
75
|
+
| `pm web` | Start Web UI server |
|
|
60
76
|
| `pm start <path>` | Start a new session on a project |
|
|
61
77
|
| `pm continue <id>` | Continue a paused session |
|
|
62
78
|
| `pm status <id>` | Get session status |
|
|
@@ -72,6 +88,15 @@ pm repl --project-mode fixed --project-root /path/to/project
|
|
|
72
88
|
| `--exit-on-eof` | Exit when EOF is received |
|
|
73
89
|
| `--project-mode <mode>` | `temp` (default) or `fixed` |
|
|
74
90
|
| `--project-root <path>` | Verification root directory |
|
|
91
|
+
| `--namespace <name>` | Namespace for state separation |
|
|
92
|
+
| `--port <number>` | Web UI port |
|
|
93
|
+
|
|
94
|
+
## Web Options
|
|
95
|
+
|
|
96
|
+
| Option | Description |
|
|
97
|
+
|--------|-------------|
|
|
98
|
+
| `--port <number>` | Web UI port (default: 3000) |
|
|
99
|
+
| `--namespace <name>` | Namespace for state separation |
|
|
75
100
|
|
|
76
101
|
## REPL Commands
|
|
77
102
|
|
|
@@ -86,6 +111,24 @@ Inside the REPL:
|
|
|
86
111
|
| `/session` | Show session info |
|
|
87
112
|
| `/quit` | Exit REPL |
|
|
88
113
|
|
|
114
|
+
## Web UI Verification
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 1. Start Web UI
|
|
118
|
+
pm web --port 3000
|
|
119
|
+
|
|
120
|
+
# 2. Health check
|
|
121
|
+
curl http://localhost:3000/api/health
|
|
122
|
+
|
|
123
|
+
# 3. Submit task
|
|
124
|
+
curl -X POST http://localhost:3000/api/tasks \
|
|
125
|
+
-H "Content-Type: application/json" \
|
|
126
|
+
-d '{"task_group_id":"test","prompt":"hello"}'
|
|
127
|
+
|
|
128
|
+
# 4. View tasks
|
|
129
|
+
curl http://localhost:3000/api/task-groups
|
|
130
|
+
```
|
|
131
|
+
|
|
89
132
|
## Environment Variables
|
|
90
133
|
|
|
91
134
|
| Variable | Description |
|
|
@@ -99,6 +142,16 @@ Inside the REPL:
|
|
|
99
142
|
- Node.js >= 18.0.0
|
|
100
143
|
- Claude Code CLI (`claude` command) installed
|
|
101
144
|
|
|
145
|
+
## Verify Installation
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Install globally
|
|
149
|
+
npm install -g pm-orchestrator-runner
|
|
150
|
+
|
|
151
|
+
# Verify command is available
|
|
152
|
+
pm --help
|
|
153
|
+
```
|
|
154
|
+
|
|
102
155
|
## License
|
|
103
156
|
|
|
104
157
|
MIT
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* PM Orchestrator Runner - CLI Entry Point
|
|
4
4
|
*
|
|
5
5
|
* Usage:
|
|
6
|
-
* pm
|
|
7
|
-
* pm
|
|
8
|
-
* pm
|
|
9
|
-
* pm
|
|
10
|
-
* pm
|
|
6
|
+
* pm [options] - Start interactive REPL (default)
|
|
7
|
+
* pm repl [--project <path>] - Start interactive REPL
|
|
8
|
+
* pm web [--port <number>] - Start Web UI server
|
|
9
|
+
* pm start <path> [options] - Start a new session (per spec 05_CLI.md L20)
|
|
10
|
+
* pm continue <session-id> - Continue a session
|
|
11
|
+
* pm status <session-id> - Get session status
|
|
12
|
+
* pm validate <path> - Validate project structure (per spec 05_CLI.md L23)
|
|
11
13
|
*/
|
|
12
14
|
export {};
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
package/dist/cli/index.js
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* PM Orchestrator Runner - CLI Entry Point
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
* pm
|
|
8
|
-
* pm
|
|
9
|
-
* pm
|
|
10
|
-
* pm
|
|
11
|
-
* pm
|
|
7
|
+
* pm [options] - Start interactive REPL (default)
|
|
8
|
+
* pm repl [--project <path>] - Start interactive REPL
|
|
9
|
+
* pm web [--port <number>] - Start Web UI server
|
|
10
|
+
* pm start <path> [options] - Start a new session (per spec 05_CLI.md L20)
|
|
11
|
+
* pm continue <session-id> - Continue a session
|
|
12
|
+
* pm status <session-id> - Get session status
|
|
13
|
+
* pm validate <path> - Validate project structure (per spec 05_CLI.md L23)
|
|
12
14
|
*/
|
|
13
15
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
16
|
if (k2 === undefined) k2 = k;
|
|
@@ -47,6 +49,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
47
49
|
const path = __importStar(require("path"));
|
|
48
50
|
const cli_interface_1 = require("./cli-interface");
|
|
49
51
|
const repl_interface_1 = require("../repl/repl-interface");
|
|
52
|
+
const server_1 = require("../web/server");
|
|
53
|
+
const queue_1 = require("../queue");
|
|
54
|
+
const namespace_1 = require("../config/namespace");
|
|
50
55
|
/**
|
|
51
56
|
* Help text
|
|
52
57
|
*/
|
|
@@ -54,14 +59,16 @@ const HELP_TEXT = `
|
|
|
54
59
|
PM Orchestrator Runner - CLI
|
|
55
60
|
|
|
56
61
|
Usage:
|
|
57
|
-
pm
|
|
62
|
+
pm [options] Start interactive REPL (default)
|
|
63
|
+
pm <command> [options] Run a specific command
|
|
58
64
|
|
|
59
65
|
Commands:
|
|
60
|
-
repl Start interactive REPL mode
|
|
61
|
-
|
|
66
|
+
repl Start interactive REPL mode (default if no command)
|
|
67
|
+
web Start Web UI server for task queue management
|
|
68
|
+
start <path> Start a new session on a project
|
|
62
69
|
continue <session-id> Continue a paused session
|
|
63
70
|
status <session-id> Get session status
|
|
64
|
-
validate <path> Validate project structure
|
|
71
|
+
validate <path> Validate project structure
|
|
65
72
|
|
|
66
73
|
REPL Options:
|
|
67
74
|
--project <path> Project path (default: current directory)
|
|
@@ -71,29 +78,33 @@ REPL Options:
|
|
|
71
78
|
--project-mode <mode> Project mode: 'temp' (default) or 'fixed'
|
|
72
79
|
--project-root <path> Verification root directory (required if --project-mode=fixed)
|
|
73
80
|
--print-project-path Print PROJECT_PATH=<path> on startup
|
|
81
|
+
--namespace <name> Namespace for state separation (default: 'default')
|
|
82
|
+
Examples: 'stable', 'dev', 'test-1'
|
|
83
|
+
--port <number> Web UI port (default: 3000 for 'default'/'stable', 3001 for 'dev')
|
|
74
84
|
|
|
75
|
-
|
|
76
|
-
--
|
|
77
|
-
--
|
|
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
|
+
Web Options:
|
|
86
|
+
--port <number> Web UI port (default: 3000)
|
|
87
|
+
--namespace <name> Namespace for state separation
|
|
85
88
|
|
|
86
89
|
General Options:
|
|
87
90
|
--help, -h Show this help message
|
|
88
91
|
--version, -v Show version
|
|
89
92
|
|
|
90
93
|
Examples:
|
|
91
|
-
pm
|
|
92
|
-
pm
|
|
93
|
-
pm
|
|
94
|
-
pm
|
|
95
|
-
pm
|
|
96
|
-
pm
|
|
94
|
+
pm # Start REPL in current directory
|
|
95
|
+
pm --project ./my-project # Start REPL with specific project
|
|
96
|
+
pm repl --namespace stable # Start REPL with stable namespace
|
|
97
|
+
pm web --port 3000 # Start Web UI on port 3000
|
|
98
|
+
pm start ./my-project --dry-run # Start session with dry-run
|
|
99
|
+
pm continue session-2025-01-15-abc123 # Continue a session
|
|
100
|
+
|
|
101
|
+
Web UI Verification:
|
|
102
|
+
1. Start Web UI: pm web --port 3000
|
|
103
|
+
2. Health check: curl http://localhost:3000/api/health
|
|
104
|
+
3. Submit task: curl -X POST http://localhost:3000/api/tasks \\
|
|
105
|
+
-H "Content-Type: application/json" \\
|
|
106
|
+
-d '{"task_group_id":"test","prompt":"hello"}'
|
|
107
|
+
4. View tasks: curl http://localhost:3000/api/task-groups
|
|
97
108
|
`;
|
|
98
109
|
/**
|
|
99
110
|
* Version
|
|
@@ -141,16 +152,150 @@ function parseReplArgs(args) {
|
|
|
141
152
|
else if (arg === '--print-project-path') {
|
|
142
153
|
result.printProjectPath = true;
|
|
143
154
|
}
|
|
155
|
+
// Namespace (per spec/21_STABLE_DEV.md)
|
|
156
|
+
else if (arg === '--namespace' && args[i + 1]) {
|
|
157
|
+
const ns = args[++i];
|
|
158
|
+
// Fail-closed: validate namespace immediately
|
|
159
|
+
const error = (0, namespace_1.validateNamespace)(ns);
|
|
160
|
+
if (error) {
|
|
161
|
+
console.error(`Invalid namespace: ${error}`);
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
result.namespace = ns;
|
|
165
|
+
}
|
|
166
|
+
// Port
|
|
167
|
+
else if (arg === '--port' && args[i + 1]) {
|
|
168
|
+
const portStr = args[++i];
|
|
169
|
+
const port = parseInt(portStr, 10);
|
|
170
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
171
|
+
console.error(`Invalid port: ${portStr}. Must be a number between 1 and 65535.`);
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
result.port = port;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Start REPL with given arguments
|
|
181
|
+
*/
|
|
182
|
+
async function startRepl(replArgs) {
|
|
183
|
+
// CRITICAL: evidenceDir must use projectPath, not process.cwd()
|
|
184
|
+
// This ensures files are created in the project directory, not where the CLI was invoked
|
|
185
|
+
const projectPath = replArgs.projectPath || process.cwd();
|
|
186
|
+
// Build namespace configuration (per spec/21_STABLE_DEV.md)
|
|
187
|
+
// Fail-closed: buildNamespaceConfig throws on invalid namespace
|
|
188
|
+
const namespaceConfig = (0, namespace_1.buildNamespaceConfig)({
|
|
189
|
+
namespace: replArgs.namespace,
|
|
190
|
+
projectRoot: projectPath,
|
|
191
|
+
port: replArgs.port,
|
|
192
|
+
});
|
|
193
|
+
const repl = new repl_interface_1.REPLInterface({
|
|
194
|
+
projectPath,
|
|
195
|
+
evidenceDir: replArgs.evidenceDir || path.join(namespaceConfig.stateDir, 'evidence'),
|
|
196
|
+
authMode: 'claude-code',
|
|
197
|
+
forceNonInteractive: replArgs.nonInteractive,
|
|
198
|
+
projectMode: replArgs.projectMode,
|
|
199
|
+
projectRoot: replArgs.projectRoot,
|
|
200
|
+
printProjectPath: replArgs.printProjectPath,
|
|
201
|
+
namespace: namespaceConfig.namespace,
|
|
202
|
+
namespaceConfig,
|
|
203
|
+
});
|
|
204
|
+
// Start REPL and wait for it to complete
|
|
205
|
+
// CRITICAL: Don't use setTimeout to force exit - let REPL handle EOF properly
|
|
206
|
+
// The REPL's start() returns a Promise that resolves after queue drain
|
|
207
|
+
await repl.start();
|
|
208
|
+
// After REPL completes, exit with appropriate code
|
|
209
|
+
if (replArgs.exitOnEof || replArgs.nonInteractive) {
|
|
210
|
+
process.exit(repl.getExitCode());
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Parse Web-specific arguments
|
|
215
|
+
*/
|
|
216
|
+
function parseWebArgs(args) {
|
|
217
|
+
const result = {};
|
|
218
|
+
for (let i = 0; i < args.length; i++) {
|
|
219
|
+
const arg = args[i];
|
|
220
|
+
// Port
|
|
221
|
+
if (arg === '--port' && args[i + 1]) {
|
|
222
|
+
const portStr = args[++i];
|
|
223
|
+
const port = parseInt(portStr, 10);
|
|
224
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
225
|
+
console.error(`Invalid port: ${portStr}. Must be a number between 1 and 65535.`);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
result.port = port;
|
|
229
|
+
}
|
|
230
|
+
// Namespace
|
|
231
|
+
else if (arg === '--namespace' && args[i + 1]) {
|
|
232
|
+
const ns = args[++i];
|
|
233
|
+
const error = (0, namespace_1.validateNamespace)(ns);
|
|
234
|
+
if (error) {
|
|
235
|
+
console.error(`Invalid namespace: ${error}`);
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
result.namespace = ns;
|
|
239
|
+
}
|
|
144
240
|
}
|
|
145
241
|
return result;
|
|
146
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Generate a simple session ID for web server
|
|
245
|
+
*/
|
|
246
|
+
function generateWebSessionId() {
|
|
247
|
+
const now = new Date();
|
|
248
|
+
const dateStr = now.toISOString().slice(0, 10);
|
|
249
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
250
|
+
return `web-${dateStr}-${random}`;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Start Web UI server
|
|
254
|
+
*/
|
|
255
|
+
async function startWebServer(webArgs) {
|
|
256
|
+
const projectPath = process.cwd();
|
|
257
|
+
// Build namespace configuration
|
|
258
|
+
const namespaceConfig = (0, namespace_1.buildNamespaceConfig)({
|
|
259
|
+
namespace: webArgs.namespace,
|
|
260
|
+
projectRoot: projectPath,
|
|
261
|
+
port: webArgs.port,
|
|
262
|
+
});
|
|
263
|
+
const port = webArgs.port || namespaceConfig.port;
|
|
264
|
+
const queueStore = (0, queue_1.createNamespacedQueueStore)({
|
|
265
|
+
namespace: namespaceConfig.namespace,
|
|
266
|
+
tableName: namespaceConfig.tableName,
|
|
267
|
+
});
|
|
268
|
+
const server = new server_1.WebServer({
|
|
269
|
+
port,
|
|
270
|
+
queueStore,
|
|
271
|
+
sessionId: generateWebSessionId(),
|
|
272
|
+
});
|
|
273
|
+
console.log(`Starting Web UI server on port ${port}...`);
|
|
274
|
+
console.log(`Namespace: ${namespaceConfig.namespace}`);
|
|
275
|
+
console.log(`State directory: ${namespaceConfig.stateDir}`);
|
|
276
|
+
console.log('');
|
|
277
|
+
console.log('Verification steps:');
|
|
278
|
+
console.log(` 1. Health check: curl http://localhost:${port}/api/health`);
|
|
279
|
+
console.log(` 2. Submit task: curl -X POST http://localhost:${port}/api/tasks \\`);
|
|
280
|
+
console.log(' -H "Content-Type: application/json" \\');
|
|
281
|
+
console.log(' -d \'{"task_group_id":"test","prompt":"hello"}\'');
|
|
282
|
+
console.log(` 3. View tasks: curl http://localhost:${port}/api/task-groups`);
|
|
283
|
+
console.log('');
|
|
284
|
+
await server.start();
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Check if argument looks like an option (starts with -)
|
|
288
|
+
*/
|
|
289
|
+
function isOption(arg) {
|
|
290
|
+
return arg.startsWith('-');
|
|
291
|
+
}
|
|
147
292
|
/**
|
|
148
293
|
* Main entry point
|
|
149
294
|
*/
|
|
150
295
|
async function main() {
|
|
151
296
|
const args = process.argv.slice(2);
|
|
152
|
-
// Check for help
|
|
153
|
-
if (args.includes('--help') || args.includes('-h')
|
|
297
|
+
// Check for help (explicit request only)
|
|
298
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
154
299
|
console.log(HELP_TEXT);
|
|
155
300
|
process.exit(0);
|
|
156
301
|
}
|
|
@@ -159,32 +304,29 @@ async function main() {
|
|
|
159
304
|
console.log(VERSION);
|
|
160
305
|
process.exit(0);
|
|
161
306
|
}
|
|
162
|
-
|
|
163
|
-
|
|
307
|
+
// Determine command and arguments
|
|
308
|
+
// If no args or first arg is an option, default to REPL
|
|
309
|
+
let command;
|
|
310
|
+
let restArgs;
|
|
311
|
+
if (args.length === 0 || isOption(args[0])) {
|
|
312
|
+
// No command specified or first arg is an option -> default to REPL
|
|
313
|
+
command = 'repl';
|
|
314
|
+
restArgs = args;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
command = args[0];
|
|
318
|
+
restArgs = args.slice(1);
|
|
319
|
+
}
|
|
164
320
|
try {
|
|
165
321
|
switch (command) {
|
|
166
322
|
case 'repl': {
|
|
167
323
|
const replArgs = parseReplArgs(restArgs);
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
}
|
|
324
|
+
await startRepl(replArgs);
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
case 'web': {
|
|
328
|
+
const webArgs = parseWebArgs(restArgs);
|
|
329
|
+
await startWebServer(webArgs);
|
|
188
330
|
break;
|
|
189
331
|
}
|
|
190
332
|
case 'start': // Per spec 05_CLI.md L20
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA
|
|
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"}
|