mirror of
https://github.com/TencentCloud/TencentDB-Agent-Memory
synced 2026-07-10 12:34:27 +00:00
feat: release v0.3.3 — Hermes adapter, context offload, core refactor
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
/**
|
||||
* OpenClawHostAdapter — translates OpenClaw's plugin API into TDAI Core's
|
||||
* unified HostAdapter interface.
|
||||
*
|
||||
* This is the "thin shell" that keeps OpenClaw-specific dependencies
|
||||
* (OpenClawPluginApi, pluginConfig, resolveStateDir, event system)
|
||||
* confined to the adapter layer while TDAI Core remains host-neutral.
|
||||
*
|
||||
* Usage (in index.ts):
|
||||
* const adapter = new OpenClawHostAdapter({ api, pluginDataDir, config });
|
||||
* const core = new TdaiCore({ hostAdapter: adapter, config: parsedConfig });
|
||||
*/
|
||||
|
||||
import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
|
||||
import { OpenClawLLMRunnerFactory } from "./llm-runner.js";
|
||||
import type {
|
||||
HostAdapter,
|
||||
RuntimeContext,
|
||||
Logger,
|
||||
LLMRunnerFactory,
|
||||
} from "../../core/types.js";
|
||||
|
||||
// ============================
|
||||
// Options
|
||||
// ============================
|
||||
|
||||
export interface OpenClawHostAdapterOptions {
|
||||
/** OpenClaw plugin API instance. */
|
||||
api: OpenClawPluginApi;
|
||||
/** Resolved plugin data directory (e.g. ~/.openclaw/state/memory-tdai). */
|
||||
pluginDataDir: string;
|
||||
/** Parsed OpenClaw config (for LLM model resolution). */
|
||||
openclawConfig: unknown;
|
||||
}
|
||||
|
||||
// ============================
|
||||
// OpenClawHostAdapter
|
||||
// ============================
|
||||
|
||||
export class OpenClawHostAdapter implements HostAdapter {
|
||||
readonly hostType = "openclaw" as const;
|
||||
|
||||
private api: OpenClawPluginApi;
|
||||
private pluginDataDir: string;
|
||||
private openclawConfig: unknown;
|
||||
private runnerFactory: OpenClawLLMRunnerFactory;
|
||||
|
||||
constructor(opts: OpenClawHostAdapterOptions) {
|
||||
this.api = opts.api;
|
||||
this.pluginDataDir = opts.pluginDataDir;
|
||||
this.openclawConfig = opts.openclawConfig;
|
||||
|
||||
this.runnerFactory = new OpenClawLLMRunnerFactory({
|
||||
config: opts.openclawConfig,
|
||||
agentRuntime: opts.api.runtime.agent,
|
||||
logger: opts.api.logger,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a RuntimeContext from the current OpenClaw session.
|
||||
*
|
||||
* In OpenClaw, sessionKey and sessionId come from the event/ctx objects
|
||||
* passed to hooks. This method returns a context with sensible defaults;
|
||||
* callers can override sessionKey/sessionId per-hook invocation using
|
||||
* `buildRuntimeContextForSession()`.
|
||||
*/
|
||||
getRuntimeContext(): RuntimeContext {
|
||||
return {
|
||||
userId: "default_user",
|
||||
sessionId: "",
|
||||
sessionKey: "",
|
||||
platform: "openclaw",
|
||||
workspaceDir: process.cwd(),
|
||||
dataDir: this.pluginDataDir,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a RuntimeContext for a specific session (used per-hook).
|
||||
*
|
||||
* This is an OpenClaw-specific convenience that merges session-level
|
||||
* identifiers from hook ctx into the base context.
|
||||
*/
|
||||
buildRuntimeContextForSession(sessionKey: string, sessionId?: string): RuntimeContext {
|
||||
return {
|
||||
...this.getRuntimeContext(),
|
||||
sessionKey,
|
||||
sessionId: sessionId ?? "",
|
||||
};
|
||||
}
|
||||
|
||||
getLogger(): Logger {
|
||||
return this.api.logger;
|
||||
}
|
||||
|
||||
getLLMRunnerFactory(): LLMRunnerFactory {
|
||||
return this.runnerFactory;
|
||||
}
|
||||
|
||||
// -- OpenClaw-specific accessors (for index.ts bridge) --------------------
|
||||
|
||||
/** Get the raw OpenClaw plugin API (for legacy callers during migration). */
|
||||
getPluginApi(): OpenClawPluginApi {
|
||||
return this.api;
|
||||
}
|
||||
|
||||
/** Get the OpenClaw config object (for legacy callers during migration). */
|
||||
getOpenClawConfig(): unknown {
|
||||
return this.openclawConfig;
|
||||
}
|
||||
|
||||
/** Get the resolved plugin data directory. */
|
||||
getPluginDataDir(): string {
|
||||
return this.pluginDataDir;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user