pm-orchestrator-runner 1.0.6 → 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 +19 -0
- package/dist/core/runner-core.d.ts.map +1 -1
- package/dist/core/runner-core.js +67 -4
- 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/logging/task-log-manager.d.ts +17 -2
- package/dist/logging/task-log-manager.d.ts.map +1 -1
- package/dist/logging/task-log-manager.js +153 -63
- package/dist/logging/task-log-manager.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/repl/task-log.d.ts +9 -0
- package/dist/models/repl/task-log.d.ts.map +1 -1
- package/dist/models/repl/task-log.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/commands/logs.d.ts +3 -1
- package/dist/repl/commands/logs.d.ts.map +1 -1
- package/dist/repl/commands/logs.js +23 -3
- package/dist/repl/commands/logs.js.map +1 -1
- 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 +94 -6
- package/dist/repl/repl-interface.d.ts.map +1 -1
- package/dist/repl/repl-interface.js +350 -54
- 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 +12 -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":";;AACA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,mDAA2D;AAC3D,2DAAoE;AACpE,mDAI6B;AAE7B;;GAEG;AACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDjB,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,GAAG,OAAO,CAAC;AAiBxB;;GAEG;AACH,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,eAAe;QACf,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,qBAAqB;aAChB,IAAI,CAAC,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,uBAAuB;aAClB,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;YACrC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,cAAc;aACT,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YACjC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,eAAe;aACV,IAAI,GAAG,KAAK,gBAAgB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACxC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,0BAA0B,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,eAAe;aACV,IAAI,GAAG,KAAK,gBAAgB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,qBAAqB;aAChB,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YACxC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,wCAAwC;aACnC,IAAI,GAAG,KAAK,aAAa,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,8CAA8C;YAC9C,MAAM,KAAK,GAAG,IAAA,6BAAiB,EAAC,EAAE,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,OAAO;aACF,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,yCAAyC,CAAC,CAAC;gBACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/B,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACzC,gEAAgE;gBAChE,yFAAyF;gBACzF,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAE1D,4DAA4D;gBAC5D,gEAAgE;gBAChE,MAAM,eAAe,GAAG,IAAA,gCAAoB,EAAC;oBAC3C,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACpB,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,IAAI,8BAAa,CAAC;oBAC7B,WAAW;oBACX,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC;oBACpF,QAAQ,EAAE,aAAa;oBACvB,mBAAmB,EAAE,QAAQ,CAAC,cAAc;oBAC5C,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;oBAC3C,SAAS,EAAE,eAAe,CAAC,SAAS;oBACpC,eAAe;iBAChB,CAAC,CAAC;gBAEH,yCAAyC;gBACzC,8EAA8E;gBAC9E,uEAAuE;gBACvE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBAEnB,mDAAmD;gBACnD,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAClD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,OAAO,CAAC,CAAE,yBAAyB;YACxC,KAAK,UAAU,CAAC;YAChB,KAAK,QAAQ,CAAC;YACd,KAAK,UAAU,CAAC,CAAC,CAAC,CAAE,yBAAyB;gBAC3C,gDAAgD;gBAChD,MAAM,GAAG,GAAG,IAAI,mBAAG,CAAC;oBAClB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;iBAC7D,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEnC,gBAAgB;gBAChB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;qBAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBAED,gCAAgC;gBAChC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;gBAChE,CAAC;gBACD,MAAM;YACR,CAAC;YAED;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,wBAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC3B,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED,WAAW;AACX,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -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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"}
|
|
@@ -104,6 +104,11 @@ interface ExecutionConfig {
|
|
|
104
104
|
/**
|
|
105
105
|
* Execution result
|
|
106
106
|
*/
|
|
107
|
+
/**
|
|
108
|
+
* Executor mode for visibility
|
|
109
|
+
* Per redesign: Users need to see which executor is being used
|
|
110
|
+
*/
|
|
111
|
+
type ExecutorMode = 'claude-code' | 'api' | 'stub' | 'recovery-stub' | 'deterministic' | 'none';
|
|
107
112
|
interface ExecutionResult {
|
|
108
113
|
session_id: string;
|
|
109
114
|
overall_status: OverallStatus;
|
|
@@ -121,6 +126,14 @@ interface ExecutionResult {
|
|
|
121
126
|
task_id: string;
|
|
122
127
|
reason: string;
|
|
123
128
|
}>;
|
|
129
|
+
/** Executor mode used for this execution (visibility) */
|
|
130
|
+
executor_mode?: ExecutorMode;
|
|
131
|
+
/** Summary of executor output (visibility) */
|
|
132
|
+
executor_output_summary?: string;
|
|
133
|
+
/** Files modified during execution (visibility) */
|
|
134
|
+
files_modified?: string[];
|
|
135
|
+
/** Execution duration in ms */
|
|
136
|
+
duration_ms?: number;
|
|
124
137
|
}
|
|
125
138
|
/**
|
|
126
139
|
* Check result for resource limits
|
|
@@ -226,10 +239,16 @@ export declare class RunnerCore extends EventEmitter {
|
|
|
226
239
|
private elapsedTimeOverride;
|
|
227
240
|
private initialized;
|
|
228
241
|
private claudeCodeExecutor;
|
|
242
|
+
private currentExecutorMode;
|
|
243
|
+
private lastExecutorOutput;
|
|
244
|
+
private lastFilesModified;
|
|
245
|
+
private lastExecutionDurationMs;
|
|
229
246
|
private taskLogManager;
|
|
230
247
|
private taskLogThread;
|
|
231
248
|
private taskLogRun;
|
|
232
249
|
private currentSelectedModel;
|
|
250
|
+
private promptAssembler;
|
|
251
|
+
private currentTaskGroupContext;
|
|
233
252
|
/**
|
|
234
253
|
* Create a new RunnerCore
|
|
235
254
|
*/
|
|
@@ -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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"}
|