This commit is contained in:
Mateusz Tymek
2026-01-11 14:24:47 +01:00
parent 8345fff6e9
commit f2a12a24c8
4 changed files with 65 additions and 78 deletions

View File

@@ -39,9 +39,8 @@ export class ProcessManager {
}
getUrl(): string {
const baseUrl = `http://${this.settings.hostname}:${this.settings.port}`;
const encodedPath = btoa(this.projectDirectory);
return `${baseUrl}/${encodedPath}`;
return `http://${this.settings.hostname}:${this.settings.port}/${encodedPath}`;
}
async start(): Promise<boolean> {
@@ -57,7 +56,6 @@ export class ProcessManager {
return this.setError("Project directory (vault) not configured");
}
// Check if server is already running on this port
if (await this.checkServerHealth()) {
console.log("[OpenCode] Server already running on port", this.settings.port);
this.setState("running");
@@ -125,19 +123,16 @@ export class ProcessManager {
}
});
// Wait for server to be ready
const ready = await this.waitForServerOrExit(this.settings.startupTimeout);
if (ready) {
this.setState("running");
return true;
}
// If already in error state from spawn error event, don't overwrite
if (this.state === "error") {
return false;
}
// Determine appropriate error message based on what happened
this.stop();
if (this.earlyExitCode !== null) {
return this.setError(`Process exited unexpectedly (exit code ${this.earlyExitCode})`);

View File

@@ -94,20 +94,17 @@ export default class OpenCodePlugin extends Plugin {
this.processManager.updateProjectDirectory(this.getProjectDirectory());
// Restart server if it's currently running
if (this.getProcessState() === "running") {
this.stopServer();
await this.startServer();
}
}
// Get existing view leaf if any
private getExistingLeaf(): WorkspaceLeaf | null {
const leaves = this.app.workspace.getLeavesOfType(OPENCODE_VIEW_TYPE);
return leaves.length > 0 ? leaves[0] : null;
}
// Activate or create the view
async activateView(): Promise<void> {
const existingLeaf = this.getExistingLeaf();
@@ -133,7 +130,6 @@ export default class OpenCodePlugin extends Plugin {
}
}
// Toggle view visibility
async toggleView(): Promise<void> {
const existingLeaf = this.getExistingLeaf();