PI-MONO
This commit is contained in:
+44
-9
@@ -5,8 +5,8 @@ import { eq } from 'drizzle-orm';
|
||||
import { honoServer } from './servers/hono';
|
||||
import { verify } from './servers/jwt';
|
||||
import { officerdb, TokenBlacklist } from 'officerdb';
|
||||
import { claudeWebsocket } from './servers/api/claude/websocket';
|
||||
import { opencodeWebsocket } from './servers/api/opencode/websocket';
|
||||
// import { claudeWebsocket } from './servers/api/claude/websocket';
|
||||
// import { opencodeWebsocket } from './servers/api/opencode/websocket';
|
||||
import { piMonoWebsocket } from './servers/api/pi-mono/websocket';
|
||||
import { terminalWebsocket, initTerminalSidecars } from './servers/api/terminal/websocket';
|
||||
import officerWeb from './apps/officer-web/index.html';
|
||||
@@ -17,21 +17,21 @@ type WSData = {
|
||||
userId: number;
|
||||
email: string;
|
||||
role: string;
|
||||
provider: 'claude' | 'opencode' | 'pi-mono' | 'terminal';
|
||||
provider: /* 'claude' | 'opencode' | */ 'pi-mono' | 'terminal';
|
||||
sandboxed: boolean;
|
||||
sessionId?: string;
|
||||
cwd?: string;
|
||||
command?: string;
|
||||
};
|
||||
|
||||
const handlers: Record<string, typeof claudeWebsocket> = {
|
||||
claude: claudeWebsocket,
|
||||
opencode: opencodeWebsocket,
|
||||
const handlers: Record<string, typeof piMonoWebsocket> = {
|
||||
// claude: claudeWebsocket,
|
||||
// opencode: opencodeWebsocket,
|
||||
'pi-mono': piMonoWebsocket,
|
||||
terminal: terminalWebsocket,
|
||||
};
|
||||
|
||||
async function upgradeWs(req: Request, server: any, provider: 'claude' | 'opencode' | 'pi-mono' | 'terminal') {
|
||||
async function upgradeWs(req: Request, server: any, provider: /* 'claude' | 'opencode' | */ 'pi-mono' | 'terminal') {
|
||||
const token = new URL(req.url).searchParams.get('token');
|
||||
if (!token) return new Response('Unauthorized', { status: 401 });
|
||||
|
||||
@@ -71,8 +71,8 @@ const server = serve({
|
||||
if (await file.exists()) return new Response(file);
|
||||
return new Response(null, { status: 404 });
|
||||
},
|
||||
'/api/harness/claudecode/ws': (req, server) => upgradeWs(req, server, 'claude'),
|
||||
'/api/harness/opencode/ws': (req, server) => upgradeWs(req, server, 'opencode'),
|
||||
// '/api/harness/claudecode/ws': (req, server) => upgradeWs(req, server, 'claude'),
|
||||
// '/api/harness/opencode/ws': (req, server) => upgradeWs(req, server, 'opencode'),
|
||||
'/api/harness/pi-mono/ws': (req, server) => upgradeWs(req, server, 'pi-mono'),
|
||||
'/api/terminal/ws': (req, server) => upgradeWs(req, server, 'terminal'),
|
||||
'/': officerWeb,
|
||||
@@ -105,3 +105,38 @@ const server = serve({
|
||||
console.log(`🚀 Server running at ${server.url}`);
|
||||
|
||||
void initTerminalSidecars();
|
||||
|
||||
// Ensure pi-mono is installed
|
||||
(async () => {
|
||||
try {
|
||||
const check = Bun.spawn(['pi', '--version'], { stdout: 'pipe', stderr: 'pipe' });
|
||||
const output = await new Response(check.stdout).text();
|
||||
await check.exited;
|
||||
if (check.exitCode === 0) {
|
||||
console.log(`[pi-mono] found: ${output.trim()}`);
|
||||
return;
|
||||
}
|
||||
} catch {
|
||||
// not found
|
||||
}
|
||||
|
||||
console.log('[pi-mono] not found, installing...');
|
||||
try {
|
||||
const install = Bun.spawn(['npm', 'install', '-g', '@mariozechner/pi-coding-agent'], {
|
||||
stdout: 'pipe',
|
||||
stderr: 'pipe',
|
||||
});
|
||||
const stderr = await new Response(install.stderr).text();
|
||||
await install.exited;
|
||||
if (install.exitCode !== 0) {
|
||||
console.error('[pi-mono] install failed:', stderr.trim());
|
||||
return;
|
||||
}
|
||||
const ver = Bun.spawn(['pi', '--version'], { stdout: 'pipe', stderr: 'pipe' });
|
||||
const version = await new Response(ver.stdout).text();
|
||||
await ver.exited;
|
||||
console.log(`[pi-mono] installed: ${version.trim()}`);
|
||||
} catch (err) {
|
||||
console.error('[pi-mono] install failed:', err);
|
||||
}
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user