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.
Files changed (104) hide show
  1. package/README.md +59 -6
  2. package/dist/cli/index.d.ts +7 -5
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +191 -49
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/config/index.d.ts +9 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js +19 -0
  9. package/dist/config/index.js.map +1 -0
  10. package/dist/config/namespace.d.ts +86 -0
  11. package/dist/config/namespace.d.ts.map +1 -0
  12. package/dist/config/namespace.js +150 -0
  13. package/dist/config/namespace.js.map +1 -0
  14. package/dist/core/runner-core.d.ts +2 -0
  15. package/dist/core/runner-core.d.ts.map +1 -1
  16. package/dist/core/runner-core.js +27 -1
  17. package/dist/core/runner-core.js.map +1 -1
  18. package/dist/executor/claude-code-executor.d.ts +28 -0
  19. package/dist/executor/claude-code-executor.d.ts.map +1 -1
  20. package/dist/executor/claude-code-executor.js +184 -1
  21. package/dist/executor/claude-code-executor.js.map +1 -1
  22. package/dist/executor/deterministic-executor.d.ts +2 -1
  23. package/dist/executor/deterministic-executor.d.ts.map +1 -1
  24. package/dist/executor/deterministic-executor.js +7 -0
  25. package/dist/executor/deterministic-executor.js.map +1 -1
  26. package/dist/executor/recovery-executor.d.ts +2 -1
  27. package/dist/executor/recovery-executor.d.ts.map +1 -1
  28. package/dist/executor/recovery-executor.js +7 -0
  29. package/dist/executor/recovery-executor.js.map +1 -1
  30. package/dist/executor/stepwise-mock-executor.d.ts +76 -0
  31. package/dist/executor/stepwise-mock-executor.d.ts.map +1 -0
  32. package/dist/executor/stepwise-mock-executor.js +369 -0
  33. package/dist/executor/stepwise-mock-executor.js.map +1 -0
  34. package/dist/models/enums.d.ts +54 -0
  35. package/dist/models/enums.d.ts.map +1 -1
  36. package/dist/models/enums.js +59 -1
  37. package/dist/models/enums.js.map +1 -1
  38. package/dist/models/index.d.ts +4 -1
  39. package/dist/models/index.d.ts.map +1 -1
  40. package/dist/models/index.js +50 -2
  41. package/dist/models/index.js.map +1 -1
  42. package/dist/models/run.d.ts +82 -0
  43. package/dist/models/run.d.ts.map +1 -0
  44. package/dist/models/run.js +161 -0
  45. package/dist/models/run.js.map +1 -0
  46. package/dist/models/task-group.d.ts +164 -0
  47. package/dist/models/task-group.d.ts.map +1 -0
  48. package/dist/models/task-group.js +246 -0
  49. package/dist/models/task-group.js.map +1 -0
  50. package/dist/models/task.d.ts +7 -0
  51. package/dist/models/task.d.ts.map +1 -1
  52. package/dist/models/task.js.map +1 -1
  53. package/dist/models/thread.d.ts +53 -0
  54. package/dist/models/thread.d.ts.map +1 -0
  55. package/dist/models/thread.js +92 -0
  56. package/dist/models/thread.js.map +1 -0
  57. package/dist/pool/agent-pool.d.ts.map +1 -1
  58. package/dist/pool/agent-pool.js +2 -3
  59. package/dist/pool/agent-pool.js.map +1 -1
  60. package/dist/prompt/index.d.ts +8 -0
  61. package/dist/prompt/index.d.ts.map +1 -0
  62. package/dist/prompt/index.js +13 -0
  63. package/dist/prompt/index.js.map +1 -0
  64. package/dist/prompt/prompt-assembler.d.ts +145 -0
  65. package/dist/prompt/prompt-assembler.d.ts.map +1 -0
  66. package/dist/prompt/prompt-assembler.js +242 -0
  67. package/dist/prompt/prompt-assembler.js.map +1 -0
  68. package/dist/queue/index.d.ts +41 -0
  69. package/dist/queue/index.d.ts.map +1 -0
  70. package/dist/queue/index.js +42 -0
  71. package/dist/queue/index.js.map +1 -0
  72. package/dist/queue/queue-poller.d.ts +107 -0
  73. package/dist/queue/queue-poller.d.ts.map +1 -0
  74. package/dist/queue/queue-poller.js +181 -0
  75. package/dist/queue/queue-poller.js.map +1 -0
  76. package/dist/queue/queue-store.d.ts +163 -0
  77. package/dist/queue/queue-store.d.ts.map +1 -0
  78. package/dist/queue/queue-store.js +421 -0
  79. package/dist/queue/queue-store.js.map +1 -0
  80. package/dist/repl/index.d.ts +1 -0
  81. package/dist/repl/index.d.ts.map +1 -1
  82. package/dist/repl/index.js +3 -1
  83. package/dist/repl/index.js.map +1 -1
  84. package/dist/repl/repl-interface.d.ts +40 -5
  85. package/dist/repl/repl-interface.d.ts.map +1 -1
  86. package/dist/repl/repl-interface.js +95 -17
  87. package/dist/repl/repl-interface.js.map +1 -1
  88. package/dist/repl/two-pane-renderer.d.ts +160 -0
  89. package/dist/repl/two-pane-renderer.d.ts.map +1 -0
  90. package/dist/repl/two-pane-renderer.js +276 -0
  91. package/dist/repl/two-pane-renderer.js.map +1 -0
  92. package/dist/trace/trace-pack.d.ts +182 -0
  93. package/dist/trace/trace-pack.d.ts.map +1 -0
  94. package/dist/trace/trace-pack.js +407 -0
  95. package/dist/trace/trace-pack.js.map +1 -0
  96. package/dist/web/index.d.ts +45 -0
  97. package/dist/web/index.d.ts.map +1 -0
  98. package/dist/web/index.js +47 -0
  99. package/dist/web/index.js.map +1 -0
  100. package/dist/web/server.d.ts +71 -0
  101. package/dist/web/server.d.ts.map +1 -0
  102. package/dist/web/server.js +329 -0
  103. package/dist/web/server.js.map +1 -0
  104. 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 repl
29
+ # Start REPL in current directory (default command)
30
+ pm
30
31
 
31
32
  # Start REPL with specific project
32
- pm repl --project /path/to/project
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 repl --non-interactive --exit-on-eof
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 repl --non-interactive --exit-on-eof << 'EOF'
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 repl --project-mode fixed --project-root /path/to/project
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
@@ -3,11 +3,13 @@
3
3
  * PM Orchestrator Runner - CLI Entry Point
4
4
  *
5
5
  * Usage:
6
- * pm-orchestrator repl [--project <path>] - Start interactive REPL
7
- * pm-orchestrator start <path> [options] - Start a new session (per spec 05_CLI.md L20)
8
- * pm-orchestrator continue <session-id> - Continue a session
9
- * pm-orchestrator status <session-id> - Get session status
10
- * pm-orchestrator validate <path> - Validate project structure (per spec 05_CLI.md L23)
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
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-orchestrator repl [--project <path>] - Start interactive REPL
8
- * pm-orchestrator start <path> [options] - Start a new session (per spec 05_CLI.md L20)
9
- * pm-orchestrator continue <session-id> - Continue a session
10
- * pm-orchestrator status <session-id> - Get session status
11
- * pm-orchestrator validate <path> - Validate project structure (per spec 05_CLI.md L23)
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-orchestrator <command> [options]
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
- start <path> Start a new session on a project (per spec 05_CLI.md L20)
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 (per spec 05_CLI.md L23)
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
- Run Options:
76
- --config <path> Path to config file
77
- --dry-run Validate without executing
78
- --max-files <n> Maximum files limit
79
- --max-tests <n> Maximum tests limit
80
- --max-seconds <n> Maximum seconds limit
81
- --verbose Verbose output
82
- --quiet Minimal output
83
- --stream Stream progress events
84
- --format <type> Output format (json, compact)
85
+ 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-orchestrator repl
92
- pm-orchestrator repl --project ./my-project
93
- pm-orchestrator repl --non-interactive --exit-on-eof
94
- pm-orchestrator repl --project-mode fixed --project-root /path/to/project
95
- pm-orchestrator start ./my-project --dry-run
96
- pm-orchestrator continue session-2025-01-15-abc123
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') || args.length === 0) {
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
- const command = args[0];
163
- const restArgs = args.slice(1);
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
- // CRITICAL: evidenceDir must use projectPath, not process.cwd()
169
- // This ensures files are created in the project directory, not where the CLI was invoked
170
- const projectPath = replArgs.projectPath || process.cwd();
171
- const repl = new repl_interface_1.REPLInterface({
172
- projectPath,
173
- evidenceDir: replArgs.evidenceDir || path.join(projectPath, '.claude', 'evidence'),
174
- authMode: 'claude-code',
175
- forceNonInteractive: replArgs.nonInteractive,
176
- projectMode: replArgs.projectMode,
177
- projectRoot: replArgs.projectRoot,
178
- printProjectPath: replArgs.printProjectPath,
179
- });
180
- // Start REPL and wait for it to complete
181
- // CRITICAL: Don't use setTimeout to force exit - let REPL handle EOF properly
182
- // The REPL's start() returns a Promise that resolves after queue drain
183
- await repl.start();
184
- // After REPL completes, exit with appropriate code
185
- if (replArgs.exitOnEof || replArgs.nonInteractive) {
186
- process.exit(repl.getExitCode());
187
- }
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,mDAA2D;AAC3D,2DAAoE;AACpE,0CAA0C;AAC1C,oCAAsD;AACtD,mDAI6B;AAE7B;;GAEG;AACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDjB,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,SAAS,CAAC,QAAuB;IAC9C,gEAAgE;IAChE,yFAAyF;IACzF,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1D,4DAA4D;IAC5D,gEAAgE;IAChE,MAAM,eAAe,GAAG,IAAA,gCAAoB,EAAC;QAC3C,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,8BAAa,CAAC;QAC7B,WAAW;QACX,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC;QACpF,QAAQ,EAAE,aAAa;QACvB,mBAAmB,EAAE,QAAQ,CAAC,cAAc;QAC5C,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,eAAe;KAChB,CAAC,CAAC;IAEH,yCAAyC;IACzC,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAEnB,mDAAmD;IACnD,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAUD;;GAEG;AACH,SAAS,YAAY,CAAC,IAAc;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,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,OAAO;QACP,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpC,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;QACD,YAAY;aACP,IAAI,GAAG,KAAK,aAAa,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,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;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB;IAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,OAAO,IAAI,MAAM,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAqB;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,gCAAgC;IAChC,MAAM,eAAe,GAAG,IAAA,gCAAoB,EAAC;QAC3C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC;IAClD,MAAM,UAAU,GAAG,IAAA,kCAA0B,EAAC;QAC5C,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,SAAS,EAAE,eAAe,CAAC,SAAS;KACrC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI;QACJ,UAAU;QACV,SAAS,EAAE,oBAAoB,EAAE;KAClC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,cAAc,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,oBAAoB,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,aAAa,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,qDAAqD,IAAI,eAAe,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,kBAAkB,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,yCAAyC;IACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,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,kCAAkC;IAClC,wDAAwD;IACxD,IAAI,OAAe,CAAC;IACpB,IAAI,QAAkB,CAAC;IAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,oEAAoE;QACpE,OAAO,GAAG,MAAM,CAAC;QACjB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1B,MAAM;YACR,CAAC;YAED,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC9B,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"}