fix(atlas): restrict idle-event session append to boulder-owned subagent sessions only

This commit is contained in:
YeonGyu-Kim
2026-03-13 10:53:45 +09:00
parent b356c50285
commit e3f6c12347
5 changed files with 192 additions and 4 deletions
+16 -4
View File
@@ -3,6 +3,7 @@ import { appendSessionId, getPlanProgress, readBoulderState } from "../../featur
import type { BoulderState, PlanProgress } from "../../features/boulder-state"
import { subagentSessions } from "../../features/claude-code-session-state"
import { log } from "../../shared/logger"
import { isSessionInBoulderLineage } from "./boulder-session-lineage"
import { injectBoulderContinuation } from "./boulder-continuation-injector"
import { HOOK_NAME } from "./hook-name"
import type { AtlasHookOptions, SessionState } from "./types"
@@ -18,14 +19,15 @@ function hasRunningBackgroundTasks(sessionID: string, options?: AtlasHookOptions
: false
}
function resolveActiveBoulderSession(input: {
async function resolveActiveBoulderSession(input: {
client: PluginInput["client"]
directory: string
sessionID: string
}): {
}): Promise<{
boulderState: BoulderState
progress: PlanProgress
appendedSession: boolean
} | null {
} | null> {
const boulderState = readBoulderState(input.directory)
if (!boulderState) {
return null
@@ -44,6 +46,15 @@ function resolveActiveBoulderSession(input: {
return null
}
const belongsToActiveBoulder = await isSessionInBoulderLineage({
client: input.client,
sessionID: input.sessionID,
boulderSessionIDs: boulderState.session_ids,
})
if (!belongsToActiveBoulder) {
return null
}
const updatedBoulderState = appendSessionId(input.directory, input.sessionID)
if (!updatedBoulderState?.session_ids.includes(input.sessionID)) {
return null
@@ -136,7 +147,8 @@ export async function handleAtlasSessionIdle(input: {
log(`[${HOOK_NAME}] session.idle`, { sessionID })
const activeBoulderSession = resolveActiveBoulderSession({
const activeBoulderSession = await resolveActiveBoulderSession({
client: ctx.client,
directory: ctx.directory,
sessionID,
})