4da3005797
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import type { PluginInput } from "@opencode-ai/plugin"
|
|
import { extractTaskLink } from "../../features/tool-metadata-store"
|
|
import { log } from "../../shared/logger"
|
|
import { isSessionInBoulderLineage } from "./boulder-session-lineage"
|
|
import { HOOK_NAME } from "./hook-name"
|
|
|
|
export function extractSessionIdFromMetadata(metadata: unknown): string | undefined {
|
|
const sessionId = extractTaskLink(metadata, "").sessionId
|
|
if (typeof sessionId === "string" && sessionId.startsWith("ses_")) {
|
|
return sessionId
|
|
}
|
|
|
|
return undefined
|
|
}
|
|
|
|
export function extractSessionIdFromOutput(output: string): string | undefined {
|
|
return extractTaskLink(undefined, output).sessionId
|
|
}
|
|
|
|
export async function validateSubagentSessionId(input: {
|
|
client: PluginInput["client"]
|
|
sessionID?: string
|
|
lineageSessionIDs: string[]
|
|
}): Promise<string | undefined> {
|
|
if (!input.sessionID || input.lineageSessionIDs.length === 0) {
|
|
return undefined
|
|
}
|
|
|
|
const belongsToLineage = await isSessionInBoulderLineage({
|
|
client: input.client,
|
|
sessionID: input.sessionID,
|
|
boulderSessionIDs: input.lineageSessionIDs,
|
|
})
|
|
|
|
if (!belongsToLineage) {
|
|
log(`[${HOOK_NAME}] Ignoring extracted session id outside active lineage`, {
|
|
sessionID: input.sessionID,
|
|
lineageSessionIDs: input.lineageSessionIDs,
|
|
})
|
|
return undefined
|
|
}
|
|
|
|
return input.sessionID
|
|
}
|