diff --git a/src/features/background-agent/manager.ts b/src/features/background-agent/manager.ts index 0dea79cb9..e44e26bbe 100644 --- a/src/features/background-agent/manager.ts +++ b/src/features/background-agent/manager.ts @@ -75,11 +75,23 @@ export class BackgroundManager { await this.concurrencyManager.acquire(concurrencyKey) + const parentSession = await this.client.session.get({ + path: { id: input.parentSessionID }, + }).catch((err) => { + log(`[background-agent] Failed to get parent session: ${err}`) + return null + }) + const parentDirectory = parentSession?.data?.directory ?? this.directory + log(`[background-agent] Parent dir: ${parentSession?.data?.directory}, using: ${parentDirectory}`) + const createResult = await this.client.session.create({ body: { parentID: input.parentSessionID, title: `Background: ${input.description}`, }, + query: { + directory: parentDirectory, + }, }).catch((error) => { this.concurrencyManager.release(concurrencyKey) throw error diff --git a/src/index.ts b/src/index.ts index 995c5ea48..92c4fb539 100644 --- a/src/index.ts +++ b/src/index.ts @@ -238,6 +238,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { const sisyphusTask = createSisyphusTask({ manager: backgroundManager, client: ctx.client, + directory: ctx.directory, userCategories: pluginConfig.categories, gitMasterConfig: pluginConfig.git_master, }); diff --git a/src/tools/call-omo-agent/tools.ts b/src/tools/call-omo-agent/tools.ts index c9ea38144..43cd42cf0 100644 --- a/src/tools/call-omo-agent/tools.ts +++ b/src/tools/call-omo-agent/tools.ts @@ -145,11 +145,23 @@ async function executeSync( sessionID = args.session_id } else { log(`[call_omo_agent] Creating new session with parent: ${toolContext.sessionID}`) + const parentSession = await ctx.client.session.get({ + path: { id: toolContext.sessionID }, + }).catch((err) => { + log(`[call_omo_agent] Failed to get parent session:`, err) + return null + }) + log(`[call_omo_agent] Parent session dir: ${parentSession?.data?.directory}, fallback: ${ctx.directory}`) + const parentDirectory = parentSession?.data?.directory ?? ctx.directory + const createResult = await ctx.client.session.create({ body: { parentID: toolContext.sessionID, title: `${args.description} (@${args.subagent_type} subagent)`, }, + query: { + directory: parentDirectory, + }, }) if (createResult.error) { diff --git a/src/tools/look-at/tools.ts b/src/tools/look-at/tools.ts index 606e5457f..1f92ef748 100644 --- a/src/tools/look-at/tools.ts +++ b/src/tools/look-at/tools.ts @@ -65,11 +65,19 @@ Be thorough on what was requested, concise on everything else. If the requested information is not found, clearly state what is missing.` log(`[look_at] Creating session with parent: ${toolContext.sessionID}`) + const parentSession = await ctx.client.session.get({ + path: { id: toolContext.sessionID }, + }).catch(() => null) + const parentDirectory = parentSession?.data?.directory ?? ctx.directory + const createResult = await ctx.client.session.create({ body: { parentID: toolContext.sessionID, title: `look_at: ${args.goal.substring(0, 50)}`, }, + query: { + directory: parentDirectory, + }, }) if (createResult.error) { diff --git a/src/tools/sisyphus-task/tools.ts b/src/tools/sisyphus-task/tools.ts index c082f8b1b..b76be69ef 100644 --- a/src/tools/sisyphus-task/tools.ts +++ b/src/tools/sisyphus-task/tools.ts @@ -89,6 +89,7 @@ function resolveCategoryConfig( export interface SisyphusTaskToolOptions { manager: BackgroundManager client: OpencodeClient + directory: string userCategories?: CategoriesConfig gitMasterConfig?: GitMasterConfig } @@ -113,7 +114,7 @@ export function buildSystemContent(input: BuildSystemContentInput): string | und } export function createSisyphusTask(options: SisyphusTaskToolOptions): ToolDefinition { - const { manager, client, userCategories, gitMasterConfig } = options + const { manager, client, directory, userCategories, gitMasterConfig } = options return tool({ description: SISYPHUS_TASK_DESCRIPTION, @@ -400,11 +401,19 @@ System notifies on completion. Use \`background_output\` with task_id="${task.id let syncSessionID: string | undefined try { + const parentSession = await client.session.get({ + path: { id: ctx.sessionID }, + }).catch(() => null) + const parentDirectory = parentSession?.data?.directory ?? directory + const createResult = await client.session.create({ body: { parentID: ctx.sessionID, title: `Task: ${args.description}`, }, + query: { + directory: parentDirectory, + }, }) if (createResult.error) {