mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-24 07:01:49 +00:00
126 lines
3.5 KiB
TypeScript
126 lines
3.5 KiB
TypeScript
import { subagentRuns } from "./subagent-registry-memory.js";
|
|
import {
|
|
countActiveDescendantRunsFromRuns,
|
|
listDescendantRunsForRequesterFromRuns,
|
|
listRunsForControllerFromRuns,
|
|
} from "./subagent-registry-queries.js";
|
|
import { getSubagentRunsSnapshotForRead } from "./subagent-registry-state.js";
|
|
import type { SubagentRunRecord } from "./subagent-registry.types.js";
|
|
import {
|
|
getSubagentSessionRuntimeMs,
|
|
getSubagentSessionStartedAt,
|
|
resolveSubagentSessionStatus,
|
|
} from "./subagent-session-metrics.js";
|
|
|
|
export {
|
|
getSubagentSessionRuntimeMs,
|
|
getSubagentSessionStartedAt,
|
|
resolveSubagentSessionStatus,
|
|
} from "./subagent-session-metrics.js";
|
|
|
|
export function listSubagentRunsForController(controllerSessionKey: string): SubagentRunRecord[] {
|
|
return listRunsForControllerFromRuns(
|
|
getSubagentRunsSnapshotForRead(subagentRuns),
|
|
controllerSessionKey,
|
|
);
|
|
}
|
|
|
|
export function countActiveDescendantRuns(rootSessionKey: string): number {
|
|
return countActiveDescendantRunsFromRuns(
|
|
getSubagentRunsSnapshotForRead(subagentRuns),
|
|
rootSessionKey,
|
|
);
|
|
}
|
|
|
|
export function listDescendantRunsForRequester(rootSessionKey: string): SubagentRunRecord[] {
|
|
return listDescendantRunsForRequesterFromRuns(
|
|
getSubagentRunsSnapshotForRead(subagentRuns),
|
|
rootSessionKey,
|
|
);
|
|
}
|
|
|
|
export function getSubagentRunByChildSessionKey(childSessionKey: string): SubagentRunRecord | null {
|
|
const key = childSessionKey.trim();
|
|
if (!key) {
|
|
return null;
|
|
}
|
|
|
|
let latestActive: SubagentRunRecord | null = null;
|
|
let latestEnded: SubagentRunRecord | null = null;
|
|
for (const entry of getSubagentRunsSnapshotForRead(subagentRuns).values()) {
|
|
if (entry.childSessionKey !== key) {
|
|
continue;
|
|
}
|
|
if (typeof entry.endedAt !== "number") {
|
|
if (!latestActive || entry.createdAt > latestActive.createdAt) {
|
|
latestActive = entry;
|
|
}
|
|
continue;
|
|
}
|
|
if (!latestEnded || entry.createdAt > latestEnded.createdAt) {
|
|
latestEnded = entry;
|
|
}
|
|
}
|
|
|
|
return latestActive ?? latestEnded;
|
|
}
|
|
|
|
export function getSessionDisplaySubagentRunByChildSessionKey(
|
|
childSessionKey: string,
|
|
): SubagentRunRecord | null {
|
|
const key = childSessionKey.trim();
|
|
if (!key) {
|
|
return null;
|
|
}
|
|
|
|
let latestInMemoryActive: SubagentRunRecord | null = null;
|
|
let latestInMemoryEnded: SubagentRunRecord | null = null;
|
|
for (const entry of subagentRuns.values()) {
|
|
if (entry.childSessionKey !== key) {
|
|
continue;
|
|
}
|
|
if (typeof entry.endedAt === "number") {
|
|
if (!latestInMemoryEnded || entry.createdAt > latestInMemoryEnded.createdAt) {
|
|
latestInMemoryEnded = entry;
|
|
}
|
|
continue;
|
|
}
|
|
if (!latestInMemoryActive || entry.createdAt > latestInMemoryActive.createdAt) {
|
|
latestInMemoryActive = entry;
|
|
}
|
|
}
|
|
|
|
if (latestInMemoryEnded || latestInMemoryActive) {
|
|
if (
|
|
latestInMemoryEnded &&
|
|
(!latestInMemoryActive || latestInMemoryEnded.createdAt > latestInMemoryActive.createdAt)
|
|
) {
|
|
return latestInMemoryEnded;
|
|
}
|
|
return latestInMemoryActive ?? latestInMemoryEnded;
|
|
}
|
|
|
|
return getSubagentRunByChildSessionKey(key);
|
|
}
|
|
|
|
export function getLatestSubagentRunByChildSessionKey(
|
|
childSessionKey: string,
|
|
): SubagentRunRecord | null {
|
|
const key = childSessionKey.trim();
|
|
if (!key) {
|
|
return null;
|
|
}
|
|
|
|
let latest: SubagentRunRecord | null = null;
|
|
for (const entry of getSubagentRunsSnapshotForRead(subagentRuns).values()) {
|
|
if (entry.childSessionKey !== key) {
|
|
continue;
|
|
}
|
|
if (!latest || entry.createdAt > latest.createdAt) {
|
|
latest = entry;
|
|
}
|
|
}
|
|
|
|
return latest;
|
|
}
|