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:
@@ -3,6 +3,7 @@ import { createProvider } from '@electron/providers';
|
||||
import type { BaseProvider } from '@electron/providers/BaseProvider';
|
||||
import { providerApiService } from '@electron/service/provider-api-service';
|
||||
import logManager from '@electron/service/logger';
|
||||
import { normalizeAgentSessionKey } from '@runtime/lib/agents';
|
||||
import type { RawMessage } from '@runtime/shared/chat-model';
|
||||
import { sessionStore } from '../session-store';
|
||||
import type { GatewayEvent, GatewayRpcParams, GatewayRpcReturns } from '../types';
|
||||
@@ -110,7 +111,8 @@ export function handleChatSend(
|
||||
params: GatewayRpcParams['chat.send'],
|
||||
broadcast: (event: GatewayEvent) => void
|
||||
): GatewayRpcReturns['chat.send'] {
|
||||
const { sessionKey, message, options } = params;
|
||||
const sessionKey = normalizeAgentSessionKey(params.sessionKey);
|
||||
const { message, options } = params;
|
||||
const runId = randomUUID();
|
||||
|
||||
// 1. Append user message
|
||||
@@ -175,20 +177,21 @@ export function handleChatSend(
|
||||
export function handleChatHistory(
|
||||
params: GatewayRpcParams['chat.history']
|
||||
): GatewayRpcReturns['chat.history'] {
|
||||
return sessionStore.getMessages(params.sessionKey, params.limit ?? 50);
|
||||
return sessionStore.getMessages(normalizeAgentSessionKey(params.sessionKey), params.limit ?? 50);
|
||||
}
|
||||
|
||||
export function handleChatAbort(
|
||||
params: GatewayRpcParams['chat.abort'],
|
||||
broadcast: (event: GatewayEvent) => void
|
||||
): GatewayRpcReturns['chat.abort'] {
|
||||
const activeRun = sessionStore.getActiveRun(params.sessionKey);
|
||||
const sessionKey = normalizeAgentSessionKey(params.sessionKey);
|
||||
const activeRun = sessionStore.getActiveRun(sessionKey);
|
||||
if (activeRun) {
|
||||
activeRun.abortController.abort();
|
||||
sessionStore.clearActiveRun(params.sessionKey);
|
||||
sessionStore.clearActiveRun(sessionKey);
|
||||
broadcast({
|
||||
type: 'chat:aborted',
|
||||
sessionKey: params.sessionKey,
|
||||
sessionKey,
|
||||
runId: activeRun.runId,
|
||||
});
|
||||
}
|
||||
@@ -201,6 +204,6 @@ export function handleSessionList(): GatewayRpcReturns['session.list'] {
|
||||
export function handleSessionDelete(
|
||||
params: GatewayRpcParams['session.delete']
|
||||
): GatewayRpcReturns['session.delete'] {
|
||||
sessionStore.deleteSession(params.sessionKey);
|
||||
sessionStore.deleteSession(normalizeAgentSessionKey(params.sessionKey));
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user