feat: implement OpenClaw process owner and runtime path utilities

- Add OpenClawProcessOwner class to manage the lifecycle of the OpenClaw process.
- Introduce utility functions for managing OpenClaw runtime paths.
- Update session store to normalize agent session keys and migrate existing keys.
- Refactor main process to handle local provider API routing through a new dispatch function.
- Enhance token usage writer to utilize a new session key parsing function.
- Create agents management store to handle agent data and interactions.
- Update chat store to integrate agent selection and session management.
- Introduce AgentsSection component for displaying agent information in the UI.
- Refactor HomePage to support agent selection and display current agent.
- Update routing to reflect new agents page structure.
This commit is contained in:
duanshuwen
2026-04-17 21:32:06 +08:00
parent eca70425cf
commit e9f3a29886
33 changed files with 1526 additions and 2428 deletions

View File

@@ -0,0 +1,49 @@
import type { HostApiContext } from '../context';
import type { NormalizedHostApiRequest } from '../route-utils';
import { fail, ok } from '../route-utils';
export async function handleGatewayRoutes(
request: NormalizedHostApiRequest,
ctx: HostApiContext,
) {
const { pathname, method } = request;
if (pathname === '/api/app/gateway-info' && method === 'GET') {
const status = ctx.gatewayManager.getStatus();
return ok({
transport: 'ipc-bridge',
rpcChannel: 'gateway:rpc',
eventChannel: 'gateway:event',
...status,
});
}
if (pathname === '/api/gateway/status' && method === 'GET') {
return ok(ctx.gatewayManager.getStatus());
}
if (pathname === '/api/gateway/health' && method === 'GET') {
return ok(await ctx.gatewayManager.checkHealth());
}
if (pathname === '/api/gateway/start' && method === 'POST') {
await ctx.gatewayManager.start();
return ok({ success: true });
}
if (pathname === '/api/gateway/stop' && method === 'POST') {
await ctx.gatewayManager.stop();
return ok({ success: true });
}
if (pathname === '/api/gateway/restart' && method === 'POST') {
try {
await ctx.gatewayManager.restart();
return ok({ success: true });
} catch (error) {
return fail(500, error instanceof Error ? error.message : String(error));
}
}
return null;
}