commandmate 0.1.10 → 0.1.11
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/.env.example +8 -3
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +11 -11
- package/.next/app-path-routes-manifest.json +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/config.json +3 -3
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/1.pack +0 -0
- package/.next/cache/webpack/client-production/2.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js +11 -12
- package/.next/server/app/api/external-apps/[id]/route.js +14 -15
- package/.next/server/app/api/external-apps/route.js +12 -13
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/slash-commands.body +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +7 -7
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js +12 -13
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +3 -3
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/simple-terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +10 -10
- package/.next/server/chunks/1318.js +4 -4
- package/.next/server/chunks/1528.js +1 -1
- package/.next/server/chunks/7425.js +97 -48
- package/.next/server/chunks/9723.js +1 -1
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js +2 -2
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-720605c2fb074444.js +1 -0
- package/.next/trace +5 -5
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +6 -4
- package/dist/cli/commands/start.d.ts +2 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +64 -17
- package/dist/cli/commands/status.d.ts +4 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +95 -6
- package/dist/cli/commands/stop.d.ts +2 -0
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +27 -10
- package/dist/cli/index.js +16 -2
- package/dist/cli/types/index.d.ts +20 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/daemon-factory.d.ts +105 -0
- package/dist/cli/utils/daemon-factory.d.ts.map +1 -0
- package/dist/cli/utils/daemon-factory.js +117 -0
- package/dist/cli/utils/daemon.d.ts.map +1 -1
- package/dist/cli/utils/daemon.js +4 -0
- package/dist/cli/utils/env-setup.d.ts +24 -12
- package/dist/cli/utils/env-setup.d.ts.map +1 -1
- package/dist/cli/utils/env-setup.js +64 -43
- package/dist/cli/utils/input-validators.d.ts +103 -0
- package/dist/cli/utils/input-validators.d.ts.map +1 -0
- package/dist/cli/utils/input-validators.js +163 -0
- package/dist/cli/utils/install-context.d.ts +53 -0
- package/dist/cli/utils/install-context.d.ts.map +1 -0
- package/dist/cli/utils/install-context.js +96 -0
- package/dist/cli/utils/pid-manager.d.ts +34 -0
- package/dist/cli/utils/pid-manager.d.ts.map +1 -1
- package/dist/cli/utils/pid-manager.js +43 -0
- package/dist/cli/utils/port-allocator.d.ts +108 -0
- package/dist/cli/utils/port-allocator.d.ts.map +1 -0
- package/dist/cli/utils/port-allocator.js +166 -0
- package/dist/cli/utils/resource-resolvers.d.ts +92 -0
- package/dist/cli/utils/resource-resolvers.d.ts.map +1 -0
- package/dist/cli/utils/resource-resolvers.js +175 -0
- package/dist/cli/utils/worktree-detector.d.ts +82 -0
- package/dist/cli/utils/worktree-detector.d.ts.map +1 -0
- package/dist/cli/utils/worktree-detector.js +221 -0
- package/dist/lib/errors.d.ts +111 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +153 -0
- package/dist/server/server.js +3 -0
- package/dist/server/src/cli/utils/install-context.js +96 -0
- package/dist/server/src/config/system-directories.js +40 -0
- package/dist/server/src/lib/auto-yes-manager.js +325 -0
- package/dist/server/src/lib/auto-yes-resolver.js +34 -0
- package/dist/server/src/lib/cli-patterns.js +6 -1
- package/dist/server/src/lib/db-instance.js +12 -2
- package/dist/server/src/lib/db-migrations.js +68 -1
- package/dist/server/src/lib/db-path-resolver.js +99 -0
- package/dist/server/src/lib/db.js +21 -0
- package/dist/server/src/lib/env.js +52 -3
- package/dist/server/src/lib/worktrees.js +36 -1
- package/dist/server/src/types/external-apps.js +20 -0
- package/package.json +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-aea2d5e7e28955be.js +0 -1
- /package/.next/static/chunks/app/{page-96a8aa2ec30a44e9.js → page-fe35d61f14b90a51.js} +0 -0
- /package/.next/static/{8o5rUyZun0GklIHWDgkmv → gRNW5YXY43KqCKbCdaJoJ}/_buildManifest.js +0 -0
- /package/.next/static/{8o5rUyZun0GklIHWDgkmv → gRNW5YXY43KqCKbCdaJoJ}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AA0I5D;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyIrE"}
|
|
@@ -18,13 +18,14 @@ const security_logger_1 = require("../utils/security-logger");
|
|
|
18
18
|
const logger = new logger_1.CLILogger();
|
|
19
19
|
/**
|
|
20
20
|
* Create default configuration (non-interactive mode)
|
|
21
|
+
* Issue #135: Use getDefaultDbPath() for dynamic DB path resolution
|
|
21
22
|
*/
|
|
22
23
|
function createDefaultConfig() {
|
|
23
24
|
return {
|
|
24
25
|
CM_ROOT_DIR: (0, env_setup_1.sanitizePath)(process.env.CM_ROOT_DIR || env_setup_1.DEFAULT_ROOT_DIR),
|
|
25
26
|
CM_PORT: env_setup_1.ENV_DEFAULTS.CM_PORT,
|
|
26
27
|
CM_BIND: env_setup_1.ENV_DEFAULTS.CM_BIND,
|
|
27
|
-
CM_DB_PATH: env_setup_1.
|
|
28
|
+
CM_DB_PATH: (0, env_setup_1.getDefaultDbPath)(), // Issue #135: Use absolute path
|
|
28
29
|
CM_LOG_LEVEL: env_setup_1.ENV_DEFAULTS.CM_LOG_LEVEL,
|
|
29
30
|
CM_LOG_FORMAT: env_setup_1.ENV_DEFAULTS.CM_LOG_FORMAT,
|
|
30
31
|
};
|
|
@@ -75,11 +76,12 @@ async function promptForConfig() {
|
|
|
75
76
|
logger.info(` Bind address: 0.0.0.0`);
|
|
76
77
|
logger.info(` Auth token generated: ${authToken.substring(0, 8)}...`);
|
|
77
78
|
}
|
|
78
|
-
// CM_DB_PATH
|
|
79
|
+
// CM_DB_PATH - Issue #135: Use getDefaultDbPath() for absolute path
|
|
80
|
+
const defaultDbPath = (0, env_setup_1.getDefaultDbPath)();
|
|
79
81
|
const dbPathInput = await (0, prompt_1.prompt)('Database path (CM_DB_PATH)', {
|
|
80
|
-
default:
|
|
82
|
+
default: defaultDbPath,
|
|
81
83
|
});
|
|
82
|
-
const dbPath = dbPathInput ||
|
|
84
|
+
const dbPath = dbPathInput || defaultDbPath;
|
|
83
85
|
return {
|
|
84
86
|
CM_ROOT_DIR: rootDir,
|
|
85
87
|
CM_PORT: port,
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
* Start Command
|
|
3
3
|
* Issue #96: npm install CLI support
|
|
4
4
|
* Issue #125: Use getEnvPath and getPidFilePath for correct path resolution
|
|
5
|
+
* Issue #136: Add --issue and --auto-port flags for worktree support
|
|
5
6
|
* Start CommandMate server
|
|
6
7
|
*/
|
|
7
8
|
import { StartOptions } from '../types';
|
|
8
9
|
/**
|
|
9
10
|
* Execute start command
|
|
10
11
|
* Issue #125: Use getEnvPath and getPidFilePath for correct path resolution
|
|
12
|
+
* Issue #136: Support --issue and --auto-port flags for worktree servers
|
|
11
13
|
*/
|
|
12
14
|
export declare function startCommand(options: StartOptions): Promise<void>;
|
|
13
15
|
//# sourceMappingURL=start.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,YAAY,EAA6B,MAAM,UAAU,CAAC;AAYnE;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoMvE"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Start Command
|
|
4
4
|
* Issue #96: npm install CLI support
|
|
5
5
|
* Issue #125: Use getEnvPath and getPidFilePath for correct path resolution
|
|
6
|
+
* Issue #136: Add --issue and --auto-port flags for worktree support
|
|
6
7
|
* Start CommandMate server
|
|
7
8
|
*/
|
|
8
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -16,48 +17,84 @@ const daemon_1 = require("../utils/daemon");
|
|
|
16
17
|
const security_logger_1 = require("../utils/security-logger");
|
|
17
18
|
const paths_1 = require("../utils/paths");
|
|
18
19
|
const env_setup_1 = require("../utils/env-setup");
|
|
20
|
+
const input_validators_1 = require("../utils/input-validators");
|
|
21
|
+
const port_allocator_1 = require("../utils/port-allocator");
|
|
22
|
+
const resource_resolvers_1 = require("../utils/resource-resolvers");
|
|
19
23
|
const logger = new logger_1.CLILogger();
|
|
20
24
|
/**
|
|
21
25
|
* Execute start command
|
|
22
26
|
* Issue #125: Use getEnvPath and getPidFilePath for correct path resolution
|
|
27
|
+
* Issue #136: Support --issue and --auto-port flags for worktree servers
|
|
23
28
|
*/
|
|
24
29
|
async function startCommand(options) {
|
|
25
30
|
try {
|
|
31
|
+
// Issue #136: Validate issue number if provided
|
|
32
|
+
if (options.issue !== undefined) {
|
|
33
|
+
const validation = (0, input_validators_1.validateIssueNoResult)(options.issue);
|
|
34
|
+
if (!validation.valid) {
|
|
35
|
+
logger.error(`Invalid issue number: ${validation.error}`);
|
|
36
|
+
process.exit(types_1.ExitCode.START_FAILED);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
26
40
|
// Issue #125: Check for .env file at correct location
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
41
|
+
// Issue #136: Use issue number for worktree-specific paths
|
|
42
|
+
const envPath = (0, env_setup_1.getEnvPath)(options.issue);
|
|
43
|
+
const pidFilePath = (0, env_setup_1.getPidFilePath)(options.issue);
|
|
44
|
+
// Issue #136: Worktree-specific server label
|
|
45
|
+
const serverLabel = options.issue !== undefined
|
|
46
|
+
? `Issue #${options.issue} server`
|
|
47
|
+
: 'Main server';
|
|
48
|
+
// Issue #136: For worktree servers, main .env must exist but worktree-specific .env is optional
|
|
49
|
+
const mainEnvPath = (0, env_setup_1.getEnvPath)();
|
|
50
|
+
if (!(0, fs_1.existsSync)(mainEnvPath)) {
|
|
51
|
+
logger.error(`.env file not found at ${mainEnvPath}`);
|
|
31
52
|
logger.info('Run "commandmate init" to create a configuration file');
|
|
32
53
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
33
54
|
return;
|
|
34
55
|
}
|
|
35
56
|
const daemonManager = new daemon_1.DaemonManager(pidFilePath);
|
|
57
|
+
// Issue #136: Handle auto-port allocation for worktree servers
|
|
58
|
+
let port = options.port;
|
|
59
|
+
if (options.autoPort && options.issue !== undefined) {
|
|
60
|
+
const portAllocator = port_allocator_1.PortAllocator.getInstance();
|
|
61
|
+
port = portAllocator.allocate(options.issue);
|
|
62
|
+
logger.info(`Auto-allocated port ${port} for Issue #${options.issue}`);
|
|
63
|
+
}
|
|
64
|
+
// Issue #136: Set worktree-specific DB path
|
|
65
|
+
let dbPath;
|
|
66
|
+
if (options.issue !== undefined) {
|
|
67
|
+
const dbResolver = new resource_resolvers_1.DbPathResolver();
|
|
68
|
+
dbPath = dbResolver.resolve(options.issue);
|
|
69
|
+
logger.info(`Using database: ${dbPath}`);
|
|
70
|
+
}
|
|
36
71
|
// Daemon mode
|
|
37
72
|
if (options.daemon) {
|
|
38
73
|
// Check if already running
|
|
39
74
|
if (await daemonManager.isRunning()) {
|
|
40
75
|
const status = await daemonManager.getStatus();
|
|
41
|
-
logger.error(
|
|
76
|
+
logger.error(`${serverLabel} is already running (PID: ${status?.pid})`);
|
|
42
77
|
process.exit(types_1.ExitCode.START_FAILED);
|
|
43
78
|
return;
|
|
44
79
|
}
|
|
45
|
-
logger.info(
|
|
80
|
+
logger.info(`Starting ${serverLabel} in background...`);
|
|
46
81
|
try {
|
|
47
82
|
const pid = await daemonManager.start({
|
|
48
83
|
dev: options.dev,
|
|
49
|
-
port:
|
|
84
|
+
port: port,
|
|
85
|
+
// Issue #136: Pass DB path for worktree servers
|
|
86
|
+
dbPath: dbPath,
|
|
50
87
|
});
|
|
51
|
-
logger.success(
|
|
52
|
-
const
|
|
88
|
+
logger.success(`${serverLabel} started in background (PID: ${pid})`);
|
|
89
|
+
const actualPort = port || parseInt(process.env.CM_PORT || '3000', 10);
|
|
53
90
|
const bind = process.env.CM_BIND || '127.0.0.1';
|
|
54
|
-
const url = `http://${bind === '0.0.0.0' ? '127.0.0.1' : bind}:${
|
|
91
|
+
const url = `http://${bind === '0.0.0.0' ? '127.0.0.1' : bind}:${actualPort}`;
|
|
55
92
|
logger.info(`URL: ${url}`);
|
|
56
93
|
(0, security_logger_1.logSecurityEvent)({
|
|
57
94
|
timestamp: new Date().toISOString(),
|
|
58
95
|
command: 'start',
|
|
59
96
|
action: 'success',
|
|
60
|
-
details: `Daemon started (PID: ${pid})`,
|
|
97
|
+
details: `Daemon started (PID: ${pid})${options.issue !== undefined ? ` (Issue #${options.issue})` : ''}`,
|
|
61
98
|
});
|
|
62
99
|
process.exit(types_1.ExitCode.SUCCESS);
|
|
63
100
|
}
|
|
@@ -76,21 +113,31 @@ async function startCommand(options) {
|
|
|
76
113
|
}
|
|
77
114
|
// Foreground mode (default)
|
|
78
115
|
const npmScript = options.dev ? 'dev' : 'start';
|
|
79
|
-
logger.info(`Starting
|
|
116
|
+
logger.info(`Starting ${serverLabel} in foreground (${options.dev ? 'development' : 'production'} mode)...`);
|
|
80
117
|
// Issue #125: Load .env file from correct location (same as daemon mode)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
118
|
+
// Issue #136: Load main .env first, then overlay worktree-specific .env if exists
|
|
119
|
+
const mainEnvResult = (0, dotenv_1.config)({ path: mainEnvPath });
|
|
120
|
+
let envResult = mainEnvResult;
|
|
121
|
+
if (options.issue !== undefined && (0, fs_1.existsSync)(envPath) && envPath !== mainEnvPath) {
|
|
122
|
+
envResult = (0, dotenv_1.config)({ path: envPath, override: true });
|
|
123
|
+
}
|
|
124
|
+
if (mainEnvResult.error) {
|
|
125
|
+
logger.warn(`Failed to load .env file at ${mainEnvPath}: ${mainEnvResult.error.message}`);
|
|
84
126
|
logger.info('Continuing with existing environment variables');
|
|
85
127
|
}
|
|
86
128
|
// Build environment by merging process.env with .env values
|
|
87
129
|
const env = {
|
|
88
130
|
...process.env,
|
|
131
|
+
...(mainEnvResult.parsed || {}),
|
|
89
132
|
...(envResult.parsed || {}),
|
|
90
133
|
};
|
|
91
134
|
// Command line options override .env values
|
|
92
|
-
if (
|
|
93
|
-
env.CM_PORT = String(
|
|
135
|
+
if (port) {
|
|
136
|
+
env.CM_PORT = String(port);
|
|
137
|
+
}
|
|
138
|
+
// Issue #136: Set DB path for worktree servers
|
|
139
|
+
if (dbPath) {
|
|
140
|
+
env.CM_DB_PATH = dbPath;
|
|
94
141
|
}
|
|
95
142
|
// Issue #125: Security warnings for external access
|
|
96
143
|
const bindAddress = env.CM_BIND || '127.0.0.1';
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
* Status Command
|
|
3
3
|
* Issue #96: npm install CLI support
|
|
4
4
|
* Issue #125: Use getPidFilePath and load .env for correct settings display
|
|
5
|
+
* Issue #136: Add --issue and --all flags for worktree-specific status
|
|
5
6
|
* Display CommandMate server status
|
|
6
7
|
*/
|
|
8
|
+
import { StatusOptions } from '../types';
|
|
7
9
|
/**
|
|
8
10
|
* Execute status command
|
|
9
11
|
* Issue #125: Use getPidFilePath and load .env for correct settings display
|
|
12
|
+
* Issue #136: Support --issue and --all flags
|
|
10
13
|
*/
|
|
11
|
-
export declare function statusCommand(): Promise<void>;
|
|
14
|
+
export declare function statusCommand(options?: StatusOptions): Promise<void>;
|
|
12
15
|
//# sourceMappingURL=status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAA6B,aAAa,EAAE,MAAM,UAAU,CAAC;AAqFpE;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6E9E"}
|
|
@@ -3,32 +3,118 @@
|
|
|
3
3
|
* Status Command
|
|
4
4
|
* Issue #96: npm install CLI support
|
|
5
5
|
* Issue #125: Use getPidFilePath and load .env for correct settings display
|
|
6
|
+
* Issue #136: Add --issue and --all flags for worktree-specific status
|
|
6
7
|
* Display CommandMate server status
|
|
7
8
|
*/
|
|
8
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
10
|
exports.statusCommand = statusCommand;
|
|
10
11
|
const dotenv_1 = require("dotenv");
|
|
12
|
+
const fs_1 = require("fs");
|
|
11
13
|
const types_1 = require("../types");
|
|
12
14
|
const logger_1 = require("../utils/logger");
|
|
13
15
|
const daemon_1 = require("../utils/daemon");
|
|
14
16
|
const env_setup_1 = require("../utils/env-setup");
|
|
17
|
+
const input_validators_1 = require("../utils/input-validators");
|
|
15
18
|
const logger = new logger_1.CLILogger();
|
|
19
|
+
/**
|
|
20
|
+
* Show status for a single server (main or issue-specific)
|
|
21
|
+
*/
|
|
22
|
+
async function showSingleStatus(issueNo) {
|
|
23
|
+
const pidFilePath = (0, env_setup_1.getPidFilePath)(issueNo);
|
|
24
|
+
const envPath = (0, env_setup_1.getEnvPath)(issueNo);
|
|
25
|
+
// Load .env so getStatus() can access correct CM_PORT and CM_BIND values
|
|
26
|
+
(0, dotenv_1.config)({ path: envPath });
|
|
27
|
+
const daemonManager = new daemon_1.DaemonManager(pidFilePath);
|
|
28
|
+
const status = await daemonManager.getStatus();
|
|
29
|
+
const serverLabel = issueNo !== undefined
|
|
30
|
+
? `Issue #${issueNo}`
|
|
31
|
+
: 'Main Server';
|
|
32
|
+
console.log('');
|
|
33
|
+
console.log(`CommandMate Status - ${serverLabel}`);
|
|
34
|
+
console.log('='.repeat(40));
|
|
35
|
+
if (status === null) {
|
|
36
|
+
console.log('Status: Stopped (no PID file)');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!status.running) {
|
|
40
|
+
console.log('Status: Not running (stale PID file)');
|
|
41
|
+
console.log('');
|
|
42
|
+
const startCmd = issueNo !== undefined
|
|
43
|
+
? `commandmate start --issue ${issueNo}`
|
|
44
|
+
: 'commandmate start';
|
|
45
|
+
console.log(`Run "${startCmd}" to start the server`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
console.log(`Status: Running (PID: ${status.pid})`);
|
|
49
|
+
if (status.port) {
|
|
50
|
+
console.log(`Port: ${status.port}`);
|
|
51
|
+
}
|
|
52
|
+
if (status.uptime !== undefined) {
|
|
53
|
+
console.log(`Uptime: ${logger_1.CLILogger.formatDuration(status.uptime)}`);
|
|
54
|
+
}
|
|
55
|
+
if (status.url) {
|
|
56
|
+
console.log(`URL: ${status.url}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Show status for all servers (main + all worktrees)
|
|
61
|
+
* Issue #136: --all flag support
|
|
62
|
+
*/
|
|
63
|
+
async function showAllStatus() {
|
|
64
|
+
// Show main server status
|
|
65
|
+
await showSingleStatus();
|
|
66
|
+
// Check for worktree PID files
|
|
67
|
+
try {
|
|
68
|
+
const pidsDir = (0, env_setup_1.getPidsDir)();
|
|
69
|
+
const files = (0, fs_1.readdirSync)(pidsDir).filter(f => f.endsWith('.pid'));
|
|
70
|
+
for (const file of files) {
|
|
71
|
+
const issueNo = parseInt(file.replace('.pid', ''), 10);
|
|
72
|
+
if (!isNaN(issueNo)) {
|
|
73
|
+
await showSingleStatus(issueNo);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// pids directory may not exist yet
|
|
79
|
+
}
|
|
80
|
+
console.log('');
|
|
81
|
+
}
|
|
16
82
|
/**
|
|
17
83
|
* Execute status command
|
|
18
84
|
* Issue #125: Use getPidFilePath and load .env for correct settings display
|
|
85
|
+
* Issue #136: Support --issue and --all flags
|
|
19
86
|
*/
|
|
20
|
-
async function statusCommand() {
|
|
87
|
+
async function statusCommand(options = {}) {
|
|
21
88
|
try {
|
|
89
|
+
// Issue #136: Handle --all flag
|
|
90
|
+
if (options.all) {
|
|
91
|
+
await showAllStatus();
|
|
92
|
+
process.exit(types_1.ExitCode.SUCCESS);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Issue #136: Validate issue number if provided
|
|
96
|
+
if (options.issue !== undefined) {
|
|
97
|
+
const validation = (0, input_validators_1.validateIssueNoResult)(options.issue);
|
|
98
|
+
if (!validation.valid) {
|
|
99
|
+
logger.error(`Invalid issue number: ${validation.error}`);
|
|
100
|
+
process.exit(types_1.ExitCode.UNEXPECTED_ERROR);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
22
104
|
// Issue #125: Get PID file path and load .env for correct settings
|
|
23
|
-
|
|
24
|
-
const
|
|
105
|
+
// Issue #136: Use issue number for worktree-specific PID file
|
|
106
|
+
const pidFilePath = (0, env_setup_1.getPidFilePath)(options.issue);
|
|
107
|
+
const envPath = (0, env_setup_1.getEnvPath)(options.issue);
|
|
25
108
|
// Load .env so getStatus() can access correct CM_PORT and CM_BIND values
|
|
26
109
|
(0, dotenv_1.config)({ path: envPath });
|
|
27
110
|
const daemonManager = new daemon_1.DaemonManager(pidFilePath);
|
|
28
111
|
const status = await daemonManager.getStatus();
|
|
112
|
+
const serverLabel = options.issue !== undefined
|
|
113
|
+
? `Issue #${options.issue}`
|
|
114
|
+
: 'Main Server';
|
|
29
115
|
console.log('');
|
|
30
|
-
console.log(
|
|
31
|
-
console.log('
|
|
116
|
+
console.log(`CommandMate Status - ${serverLabel}`);
|
|
117
|
+
console.log('='.repeat(40));
|
|
32
118
|
if (status === null) {
|
|
33
119
|
console.log('Status: Stopped (no PID file)');
|
|
34
120
|
process.exit(types_1.ExitCode.SUCCESS);
|
|
@@ -37,7 +123,10 @@ async function statusCommand() {
|
|
|
37
123
|
if (!status.running) {
|
|
38
124
|
console.log('Status: Not running (stale PID file)');
|
|
39
125
|
console.log('');
|
|
40
|
-
|
|
126
|
+
const startCmd = options.issue !== undefined
|
|
127
|
+
? `commandmate start --issue ${options.issue}`
|
|
128
|
+
: 'commandmate start';
|
|
129
|
+
console.log(`Run "${startCmd}" to start the server`);
|
|
41
130
|
process.exit(types_1.ExitCode.SUCCESS);
|
|
42
131
|
return;
|
|
43
132
|
}
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
* Stop Command
|
|
3
3
|
* Issue #96: npm install CLI support
|
|
4
4
|
* Issue #125: Use getPidFilePath for correct path resolution
|
|
5
|
+
* Issue #136: Add --issue flag for worktree-specific server stop
|
|
5
6
|
* Stop CommandMate server
|
|
6
7
|
*/
|
|
7
8
|
import { StopOptions } from '../types';
|
|
8
9
|
/**
|
|
9
10
|
* Execute stop command
|
|
10
11
|
* Issue #125: Use getPidFilePath for correct path resolution
|
|
12
|
+
* Issue #136: Support --issue flag for worktree-specific server stop
|
|
11
13
|
*/
|
|
12
14
|
export declare function stopCommand(options: StopOptions): Promise<void>;
|
|
13
15
|
//# sourceMappingURL=stop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAA6B,MAAM,UAAU,CAAC;AASlE;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFrE"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Stop Command
|
|
4
4
|
* Issue #96: npm install CLI support
|
|
5
5
|
* Issue #125: Use getPidFilePath for correct path resolution
|
|
6
|
+
* Issue #136: Add --issue flag for worktree-specific server stop
|
|
6
7
|
* Stop CommandMate server
|
|
7
8
|
*/
|
|
8
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -12,25 +13,41 @@ const logger_1 = require("../utils/logger");
|
|
|
12
13
|
const daemon_1 = require("../utils/daemon");
|
|
13
14
|
const security_logger_1 = require("../utils/security-logger");
|
|
14
15
|
const env_setup_1 = require("../utils/env-setup");
|
|
16
|
+
const input_validators_1 = require("../utils/input-validators");
|
|
15
17
|
const logger = new logger_1.CLILogger();
|
|
16
18
|
/**
|
|
17
19
|
* Execute stop command
|
|
18
20
|
* Issue #125: Use getPidFilePath for correct path resolution
|
|
21
|
+
* Issue #136: Support --issue flag for worktree-specific server stop
|
|
19
22
|
*/
|
|
20
23
|
async function stopCommand(options) {
|
|
21
24
|
try {
|
|
25
|
+
// Issue #136: Validate issue number if provided
|
|
26
|
+
if (options.issue !== undefined) {
|
|
27
|
+
const validation = (0, input_validators_1.validateIssueNoResult)(options.issue);
|
|
28
|
+
if (!validation.valid) {
|
|
29
|
+
logger.error(`Invalid issue number: ${validation.error}`);
|
|
30
|
+
process.exit(types_1.ExitCode.STOP_FAILED);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
22
34
|
// Issue #125: Get PID file path from correct location
|
|
23
|
-
|
|
35
|
+
// Issue #136: Use issue number for worktree-specific PID file
|
|
36
|
+
const pidFilePath = (0, env_setup_1.getPidFilePath)(options.issue);
|
|
24
37
|
const daemonManager = new daemon_1.DaemonManager(pidFilePath);
|
|
38
|
+
// Issue #136: Show which server we're stopping
|
|
39
|
+
const serverLabel = options.issue !== undefined
|
|
40
|
+
? `Issue #${options.issue} server`
|
|
41
|
+
: 'Main server';
|
|
25
42
|
// Check if running
|
|
26
43
|
if (!(await daemonManager.isRunning())) {
|
|
27
44
|
const status = await daemonManager.getStatus();
|
|
28
45
|
if (status === null) {
|
|
29
|
-
logger.info(
|
|
46
|
+
logger.info(`${serverLabel} is not running (no PID file found)`);
|
|
30
47
|
logger.info('Status: Stopped');
|
|
31
48
|
}
|
|
32
49
|
else {
|
|
33
|
-
logger.info(
|
|
50
|
+
logger.info(`${serverLabel} is not running (stale PID file)`);
|
|
34
51
|
}
|
|
35
52
|
process.exit(types_1.ExitCode.SUCCESS);
|
|
36
53
|
return;
|
|
@@ -38,35 +55,35 @@ async function stopCommand(options) {
|
|
|
38
55
|
const status = await daemonManager.getStatus();
|
|
39
56
|
const pid = status?.pid;
|
|
40
57
|
if (options.force) {
|
|
41
|
-
logger.warn(`Force stopping
|
|
58
|
+
logger.warn(`Force stopping ${serverLabel} (PID: ${pid})...`);
|
|
42
59
|
(0, security_logger_1.logSecurityEvent)({
|
|
43
60
|
timestamp: new Date().toISOString(),
|
|
44
61
|
command: 'stop',
|
|
45
62
|
action: 'warning',
|
|
46
|
-
details: `--force flag used (SIGKILL) on PID ${pid}`,
|
|
63
|
+
details: `--force flag used (SIGKILL) on PID ${pid}${options.issue !== undefined ? ` (Issue #${options.issue})` : ''}`,
|
|
47
64
|
});
|
|
48
65
|
}
|
|
49
66
|
else {
|
|
50
|
-
logger.info(`Stopping
|
|
67
|
+
logger.info(`Stopping ${serverLabel} (PID: ${pid})...`);
|
|
51
68
|
}
|
|
52
69
|
const result = await daemonManager.stop(options.force);
|
|
53
70
|
if (result) {
|
|
54
|
-
logger.success(
|
|
71
|
+
logger.success(`${serverLabel} stopped`);
|
|
55
72
|
(0, security_logger_1.logSecurityEvent)({
|
|
56
73
|
timestamp: new Date().toISOString(),
|
|
57
74
|
command: 'stop',
|
|
58
75
|
action: 'success',
|
|
59
|
-
details: `Server stopped (PID: ${pid})`,
|
|
76
|
+
details: `Server stopped (PID: ${pid})${options.issue !== undefined ? ` (Issue #${options.issue})` : ''}`,
|
|
60
77
|
});
|
|
61
78
|
process.exit(types_1.ExitCode.SUCCESS);
|
|
62
79
|
}
|
|
63
80
|
else {
|
|
64
|
-
logger.error(
|
|
81
|
+
logger.error(`Failed to stop ${serverLabel}`);
|
|
65
82
|
(0, security_logger_1.logSecurityEvent)({
|
|
66
83
|
timestamp: new Date().toISOString(),
|
|
67
84
|
command: 'stop',
|
|
68
85
|
action: 'failure',
|
|
69
|
-
details: `Failed to stop PID ${pid}`,
|
|
86
|
+
details: `Failed to stop PID ${pid}${options.issue !== undefined ? ` (Issue #${options.issue})` : ''}`,
|
|
70
87
|
});
|
|
71
88
|
process.exit(types_1.ExitCode.STOP_FAILED);
|
|
72
89
|
}
|
package/dist/cli/index.js
CHANGED
|
@@ -30,35 +30,49 @@ program
|
|
|
30
30
|
});
|
|
31
31
|
});
|
|
32
32
|
// Start command
|
|
33
|
+
// Issue #136: Add --issue and --auto-port flags for worktree support
|
|
33
34
|
program
|
|
34
35
|
.command('start')
|
|
35
36
|
.description('Start the CommandMate server')
|
|
36
37
|
.option('--dev', 'Start in development mode')
|
|
37
38
|
.option('--daemon', 'Run in background')
|
|
38
39
|
.option('-p, --port <number>', 'Override port number', parseInt)
|
|
40
|
+
.option('-i, --issue <number>', 'Start worktree server for specific issue', parseInt)
|
|
41
|
+
.option('--auto-port', 'Automatically allocate port for worktree server')
|
|
39
42
|
.action(async (options) => {
|
|
40
43
|
await (0, start_1.startCommand)({
|
|
41
44
|
dev: options.dev,
|
|
42
45
|
daemon: options.daemon,
|
|
43
46
|
port: options.port,
|
|
47
|
+
issue: options.issue,
|
|
48
|
+
autoPort: options.autoPort,
|
|
44
49
|
});
|
|
45
50
|
});
|
|
46
51
|
// Stop command
|
|
52
|
+
// Issue #136: Add --issue flag for worktree-specific server stop
|
|
47
53
|
program
|
|
48
54
|
.command('stop')
|
|
49
55
|
.description('Stop the CommandMate server')
|
|
50
56
|
.option('-f, --force', 'Force stop (SIGKILL)')
|
|
57
|
+
.option('-i, --issue <number>', 'Stop worktree server for specific issue', parseInt)
|
|
51
58
|
.action(async (options) => {
|
|
52
59
|
await (0, stop_1.stopCommand)({
|
|
53
60
|
force: options.force,
|
|
61
|
+
issue: options.issue,
|
|
54
62
|
});
|
|
55
63
|
});
|
|
56
64
|
// Status command
|
|
65
|
+
// Issue #136: Add --issue and --all flags for worktree-specific status
|
|
57
66
|
program
|
|
58
67
|
.command('status')
|
|
59
68
|
.description('Show server status')
|
|
60
|
-
.
|
|
61
|
-
|
|
69
|
+
.option('-i, --issue <number>', 'Show status for specific issue worktree', parseInt)
|
|
70
|
+
.option('-a, --all', 'Show status for all servers (main + worktrees)')
|
|
71
|
+
.action(async (options) => {
|
|
72
|
+
await (0, status_1.statusCommand)({
|
|
73
|
+
issue: options.issue,
|
|
74
|
+
all: options.all,
|
|
75
|
+
});
|
|
62
76
|
});
|
|
63
77
|
// Parse and execute
|
|
64
78
|
program.parse();
|
|
@@ -25,6 +25,7 @@ export interface InitOptions {
|
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Options for start command
|
|
28
|
+
* Issue #136: Added issue and autoPort for worktree support
|
|
28
29
|
*/
|
|
29
30
|
export interface StartOptions {
|
|
30
31
|
/** Start in development mode */
|
|
@@ -33,13 +34,32 @@ export interface StartOptions {
|
|
|
33
34
|
daemon?: boolean;
|
|
34
35
|
/** Override port number */
|
|
35
36
|
port?: number;
|
|
37
|
+
/** Issue number for worktree-specific server (Issue #136) */
|
|
38
|
+
issue?: number;
|
|
39
|
+
/** Automatically allocate an available port (Issue #136) */
|
|
40
|
+
autoPort?: boolean;
|
|
41
|
+
/** Override database path for worktree server (Issue #136) */
|
|
42
|
+
dbPath?: string;
|
|
36
43
|
}
|
|
37
44
|
/**
|
|
38
45
|
* Options for stop command
|
|
46
|
+
* Issue #136: Added issue for worktree support
|
|
39
47
|
*/
|
|
40
48
|
export interface StopOptions {
|
|
41
49
|
/** Force stop (SIGKILL) */
|
|
42
50
|
force?: boolean;
|
|
51
|
+
/** Issue number for worktree-specific server (Issue #136) */
|
|
52
|
+
issue?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Options for status command
|
|
56
|
+
* Issue #136: New interface for worktree support
|
|
57
|
+
*/
|
|
58
|
+
export interface StatusOptions {
|
|
59
|
+
/** Issue number for worktree-specific status (Issue #136) */
|
|
60
|
+
issue?: number;
|
|
61
|
+
/** Show status for all running servers (Issue #136) */
|
|
62
|
+
all?: boolean;
|
|
43
63
|
}
|
|
44
64
|
/**
|
|
45
65
|
* Daemon process status
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,oBAAY,QAAQ;IAClB,OAAO,IAAI;IACX,gBAAgB,IAAI;IACpB,YAAY,IAAI;IAChB,YAAY,IAAI;IAChB,WAAW,IAAI;IACf,gBAAgB,KAAK;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/types/index.ts"],"names":[],"mappings":"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"}
|