fix(cli): improve project metadata loading and normalize CLI error handling

This commit is contained in:
2026-05-09 12:34:58 +00:00
parent c7c1bbb460
commit adb13b027d
13 changed files with 3328 additions and 5222 deletions
+17 -15
View File
@@ -3,6 +3,7 @@ import * as paths from '../paths.js';
import { toProcessId } from '../shared/protocol/id.js';
import type { ProcessId } from '../shared/protocol/id.js';
import { ProcessManager } from './processmanager.js';
import { handleError } from '../shared/common/utils.errorhandler.js';
import type {
IpcMethodMap,
RequestForMethod,
@@ -17,7 +18,7 @@ import { LogPersistence } from './logpersistence.js';
*/
export class TspmDaemon {
private tspmInstance: ProcessManager;
private ipcServer: plugins.smartipc.IpcServer;
private ipcServer!: plugins.smartipc.IpcServer;
private startTime: number;
private isShuttingDown: boolean = false;
private socketPath: string;
@@ -30,13 +31,7 @@ export class TspmDaemon {
this.socketPath = plugins.path.join(paths.tspmDir, 'tspm.sock');
this.daemonPidFile = plugins.path.join(paths.tspmDir, 'daemon.pid');
this.startTime = Date.now();
// Determine daemon version from package metadata
try {
const proj = new plugins.projectinfo.ProjectInfo(paths.packageDir);
this.version = proj.npm.version || 'unknown';
} catch {
this.version = 'unknown';
}
this.version = 'unknown';
}
/**
@@ -45,6 +40,13 @@ export class TspmDaemon {
public async start(): Promise<void> {
console.log('Starting TSPM daemon...');
try {
const proj = await plugins.projectinfo.ProjectInfo.create(paths.packageDir);
this.version = proj.npm.version || 'unknown';
} catch {
this.version = 'unknown';
}
// Ensure the TSPM directory exists
const fs = await import('fs/promises');
await fs.mkdir(paths.tspmDir, { recursive: true });
@@ -150,7 +152,7 @@ export class TspmDaemon {
status: processInfo?.status || 'stopped',
};
} catch (error) {
throw new Error(`Failed to start process: ${error.message}`);
throw new Error(`Failed to start process: ${handleError(error).message}`);
}
},
);
@@ -194,7 +196,7 @@ export class TspmDaemon {
status: processInfo?.status || 'stopped',
};
} catch (error) {
throw new Error(`Failed to start process: ${error.message}`);
throw new Error(`Failed to start process: ${handleError(error).message}`);
}
},
);
@@ -211,7 +213,7 @@ export class TspmDaemon {
message: `Process ${id} stopped successfully`,
};
} catch (error) {
throw new Error(`Failed to stop process: ${error.message}`);
throw new Error(`Failed to stop process: ${handleError(error).message}`);
}
},
);
@@ -230,7 +232,7 @@ export class TspmDaemon {
status: processInfo?.status || 'stopped',
};
} catch (error) {
throw new Error(`Failed to restart process: ${error.message}`);
throw new Error(`Failed to restart process: ${handleError(error).message}`);
}
},
);
@@ -248,7 +250,7 @@ export class TspmDaemon {
message: `Process ${id} deleted successfully`,
};
} catch (error) {
throw new Error(`Failed to delete process: ${error.message}`);
throw new Error(`Failed to delete process: ${handleError(error).message}`);
}
},
);
@@ -262,7 +264,7 @@ export class TspmDaemon {
const config = this.tspmInstance.processConfigs.get(id)!;
return { id, config };
} catch (error) {
throw new Error(`Failed to add process: ${error.message}`);
throw new Error(`Failed to add process: ${handleError(error).message}`);
}
},
);
@@ -275,7 +277,7 @@ export class TspmDaemon {
const updated = await this.tspmInstance.update(id, request.updates as any);
return { id, config: updated };
} catch (error) {
throw new Error(`Failed to update process: ${error.message}`);
throw new Error(`Failed to update process: ${handleError(error).message}`);
}
},
);