mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 06:50:41 +00:00
Merged via squash.
Prepared head SHA: 790418b93b
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
97 lines
2.3 KiB
TypeScript
97 lines
2.3 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { liveTurnTimeoutMs } from "./suite-runtime-agent-common.js";
|
|
import type {
|
|
QaRawSessionStoreEntry,
|
|
QaSkillStatusEntry,
|
|
QaSuiteRuntimeEnv,
|
|
} from "./suite-runtime-types.js";
|
|
|
|
async function createSession(
|
|
env: Pick<QaSuiteRuntimeEnv, "gateway" | "primaryModel" | "alternateModel" | "providerMode">,
|
|
label: string,
|
|
key?: string,
|
|
) {
|
|
const created = (await env.gateway.call(
|
|
"sessions.create",
|
|
{
|
|
label,
|
|
...(key ? { key } : {}),
|
|
},
|
|
{
|
|
timeoutMs: liveTurnTimeoutMs(env, 60_000),
|
|
},
|
|
)) as { key?: string };
|
|
const sessionKey = created.key?.trim();
|
|
if (!sessionKey) {
|
|
throw new Error("sessions.create returned no key");
|
|
}
|
|
return sessionKey;
|
|
}
|
|
|
|
async function readEffectiveTools(
|
|
env: Pick<QaSuiteRuntimeEnv, "gateway" | "primaryModel" | "alternateModel" | "providerMode">,
|
|
sessionKey: string,
|
|
) {
|
|
const payload = (await env.gateway.call(
|
|
"tools.effective",
|
|
{
|
|
sessionKey,
|
|
},
|
|
{
|
|
timeoutMs: liveTurnTimeoutMs(env, 90_000),
|
|
},
|
|
)) as {
|
|
groups?: Array<{ tools?: Array<{ id?: string }> }>;
|
|
};
|
|
const ids = new Set<string>();
|
|
for (const group of payload.groups ?? []) {
|
|
for (const tool of group.tools ?? []) {
|
|
if (tool.id?.trim()) {
|
|
ids.add(tool.id.trim());
|
|
}
|
|
}
|
|
}
|
|
return ids;
|
|
}
|
|
|
|
async function readSkillStatus(
|
|
env: Pick<QaSuiteRuntimeEnv, "gateway" | "primaryModel" | "alternateModel" | "providerMode">,
|
|
agentId = "qa",
|
|
) {
|
|
const payload = (await env.gateway.call(
|
|
"skills.status",
|
|
{
|
|
agentId,
|
|
},
|
|
{
|
|
timeoutMs: liveTurnTimeoutMs(env, 45_000),
|
|
},
|
|
)) as {
|
|
skills?: QaSkillStatusEntry[];
|
|
};
|
|
return payload.skills ?? [];
|
|
}
|
|
|
|
async function readRawQaSessionStore(env: Pick<QaSuiteRuntimeEnv, "gateway">) {
|
|
const storePath = path.join(
|
|
env.gateway.tempRoot,
|
|
"state",
|
|
"agents",
|
|
"qa",
|
|
"sessions",
|
|
"sessions.json",
|
|
);
|
|
try {
|
|
const raw = await fs.readFile(storePath, "utf8");
|
|
return JSON.parse(raw) as Record<string, QaRawSessionStoreEntry>;
|
|
} catch (error) {
|
|
if ((error as NodeJS.ErrnoException).code === "ENOENT") {
|
|
return {};
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
export { createSession, readEffectiveTools, readRawQaSessionStore, readSkillStatus };
|