Short description
Failing to compact to locate an non-existing sub-agent file in oh-my-openagent
What happened?
My magic-context in OpenCode (which uses oh-my-openagent) never finishes compacting. When OpenCode terminated, it shows the following error often:
2059 | NOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.
2060 | ,synthetic:!0});return C.parts.push(ho),Y.messages}),b=n.fn("SessionPrompt.resolveTools")(function*(Y){let ho=[];try{const C=xh(ho,bt.time("resolveTools"),0);let H={};let Yo=yield*Z();let oo=yield*V();let So=(fo,Oo)=>({sessionID:Y.session.id,abort:Oo.abortSignal,messageID:Y.processor.message.id,callID:Oo.toolCallId,extra:{model:Y.model,bypassAgentCheck:Y.bypassAgentCheck,promptOps:oo},agent:Y.agent.name,messages:Y.messages,metadata:(no)=>Y.processor.updateToolCall(Oo.toolCallId,(qo)=>{if(!["running","pending"].includes(qo.state.status))return qo;return{...qo,state:{title:no.title,metadata:no.metadata,status:"running",input:fo,time:{start:Date.now()}}}}),ask:(no)=>w.ask({...no,sessionID:Y.session.id,tool:{messageID:Y.processor.message.id,callID:Oo.toolCallId},ruleset:po.merge(Y.agent.permission,Y.session.permission??[])}).pipe(n.orDie)});for(let fo of yield*u.tools({modelID:Mt.make(Y.model.api.id),providerID:Y.model.providerID,agent:Y.agent})){let Oo=je.schema(Y.model,fl(fo.parameters));H[fo | ... truncated 2061 | 2062 | ),{},Y.agent),Do={title:"",metadata:{...ie.metadata,truncated:to.truncated,...to.truncated&&{outputPath:to.outputPath}},output:to.content,attachments:v.map((Go)=>({...Go,id:Mo.ascending(),sessionID:x.sessionID,messageID:Y.processor.message.id})),content:ie.content};if(yo.abortSignal?.aborted)yieldY.processor.completeToolCall(yo.toolCallId,Do);return Do})),H[fo]=Oo}return H}catch(F){var Vo=F,_o=1}finally{Mh(ho,Vo,_o)}}),X=n.fn("SessionPrompt.handleSubtask")(function(Y){let{task:C,model:H,lastUser:Yo,sessionID:oo,session:So,msgs:ho}=Y,F=yield*_.context,Vo=yieldV(),{task:_o}=yieldu.named(),fo=C.model?yieldL(C.model.providerID,C.model.modelID,oo):H,Oo=yields.updateMessage({id:re.ascending(),role:"assistant",parentID:Yo.id,sessionID:oo,mode:C.agent,agent:C.agent,variant:Yo.model.variant,path:{cwd:F.directory,root:F.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:fo.id,providerID:fo.providerID,time:{created:Date.now()}}),no=yields.updatePart({id:Mo.ascending(),messageID | ... truncated
2063 |
2064 | `);let J=Date.now();if(ao.run(se.Shell.Ended.Sync,{sessionID:Y.sessionID,timestamp:ye(J),callID:So.callID,output:fo}),!oo.time.completed)oo.time.completed=J,yields.updateMessage(oo);if(So.state.status==="running")So.state={status:"completed",time:{...So.state.time,end:J},input:So.state.input,title:"",metadata:{output:fo,description:""},output:fo},yields.updatePart(So)})),qo=yieldH(n.gen(function*(){let J=yieldd.trigger("shell.env",{cwd:ho,sessionID:Y.sessionID,callID:So.callID},{env:{}}),E=qr.make(Vo,_o,{cwd:ho,extendEnv:!0,env:{...J.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),yo=yieldW.spawn(E);yieldhl(nl(yo.all),(x)=>n.gen(function(){if(fo+=x,So.state.status==="running")So.state.metadata={output:fo,description:""},yields.updatePart(So)})),yieldyo.exitCode}).pipe(n.scoped,n.orDie)).pipe(n.exit);if(Ys.isFailure(qo)&&me.hasInterrupts(qo.cause)&&!me.hasDies(qo.cause))Oo=!0;if(yieldno,Ys.isFailure(qo)&&!Oo&&!me.hasInterruptsOnly(qo.cause))return yieldn.failCause(qo.cause);return{info: | ... truncated
UnknownError: UnknownError
data: {
message: "Agent not found: "Sisyphus - Ultraworker". Available agents: build, doc-updater, explore, general, historian, plan, planner, python-reviewer, security-reviewer, translator",
},
It seems that it's trying to locate the agent file of oh-my-openagent that doesn't exist, and thus failing to finish the compaction.
Diagnostics
2059 | NOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.
2060 | </system-reminder>`,synthetic:!0});return C.parts.push(ho),Y.messages}),b=n.fn("SessionPrompt.resolveTools")(function*(Y){let ho=[];try{const C=xh(ho,bt.time("resolveTools"),0);let H={};let Yo=yield*Z();let oo=yield*V();let So=(fo,Oo)=>({sessionID:Y.session.id,abort:Oo.abortSignal,messageID:Y.processor.message.id,callID:Oo.toolCallId,extra:{model:Y.model,bypassAgentCheck:Y.bypassAgentCheck,promptOps:oo},agent:Y.agent.name,messages:Y.messages,metadata:(no)=>Y.processor.updateToolCall(Oo.toolCallId,(qo)=>{if(!["running","pending"].includes(qo.state.status))return qo;return{...qo,state:{title:no.title,metadata:no.metadata,status:"running",input:fo,time:{start:Date.now()}}}}),ask:(no)=>w.ask({...no,sessionID:Y.session.id,tool:{messageID:Y.processor.message.id,callID:Oo.toolCallId},ruleset:po.merge(Y.agent.permission,Y.session.permission??[])}).pipe(n.orDie)});for(let fo of yield*u.tools({modelID:Mt.make(Y.model.api.id),providerID:Y.model.providerID,agent:Y.agent})){let Oo=je.schema(Y.model,fl(fo.parameters));H[fo | ... truncated
2061 |
2062 | `),{},Y.agent),Do={title:"",metadata:{...ie.metadata,truncated:to.truncated,...to.truncated&&{outputPath:to.outputPath}},output:to.content,attachments:v.map((Go)=>({...Go,id:Mo.ascending(),sessionID:x.sessionID,messageID:Y.processor.message.id})),content:ie.content};if(yo.abortSignal?.aborted)yield*Y.processor.completeToolCall(yo.toolCallId,Do);return Do})),H[fo]=Oo}return H}catch(F){var Vo=F,_o=1}finally{Mh(ho,Vo,_o)}}),X=n.fn("SessionPrompt.handleSubtask")(function*(Y){let{task:C,model:H,lastUser:Yo,sessionID:oo,session:So,msgs:ho}=Y,F=yield*_.context,Vo=yield*V(),{task:_o}=yield*u.named(),fo=C.model?yield*L(C.model.providerID,C.model.modelID,oo):H,Oo=yield*s.updateMessage({id:re.ascending(),role:"assistant",parentID:Yo.id,sessionID:oo,mode:C.agent,agent:C.agent,variant:Yo.model.variant,path:{cwd:F.directory,root:F.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:fo.id,providerID:fo.providerID,time:{created:Date.now()}}),no=yield*s.updatePart({id:Mo.ascending(),messageID | ... truncated
2063 |
2064 | `);let J=Date.now();if(ao.run(se.Shell.Ended.Sync,{sessionID:Y.sessionID,timestamp:ye(J),callID:So.callID,output:fo}),!oo.time.completed)oo.time.completed=J,yield*s.updateMessage(oo);if(So.state.status==="running")So.state={status:"completed",time:{...So.state.time,end:J},input:So.state.input,title:"",metadata:{output:fo,description:""},output:fo},yield*s.updatePart(So)})),qo=yield*H(n.gen(function*(){let J=yield*d.trigger("shell.env",{cwd:ho,sessionID:Y.sessionID,callID:So.callID},{env:{}}),E=qr.make(Vo,_o,{cwd:ho,extendEnv:!0,env:{...J.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),yo=yield*W.spawn(E);yield*hl(nl(yo.all),(x)=>n.gen(function*(){if(fo+=x,So.state.status==="running")So.state.metadata={output:fo,description:""},yield*s.updatePart(So)})),yield*yo.exitCode}).pipe(n.scoped,n.orDie)).pipe(n.exit);if(Ys.isFailure(qo)&&me.hasInterrupts(qo.cause)&&!me.hasDies(qo.cause))Oo=!0;if(yield*no,Ys.isFailure(qo)&&!Oo&&!me.hasInterruptsOnly(qo.cause))return yield*n.failCause(qo.cause);return{info: | ... truncated
UnknownError: UnknownError
data: {
message: "Agent not found: \"Sisyphus - Ultraworker\". Available agents: build, doc-updater, explore, general, historian, plan, planner, python-reviewer, security-reviewer, translator",
},
Plugin version
0.14.1
OpenCode version
1.14.39
Platform
WSL in Windows
Client
OpenCode TUI (CLI)
Log output (optional)
Short description
Failing to compact to locate an non-existing sub-agent file in oh-my-openagent
What happened?
My magic-context in OpenCode (which uses oh-my-openagent) never finishes compacting. When OpenCode terminated, it shows the following error often:
2059 | NOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.
2060 |
,synthetic:!0});return C.parts.push(ho),Y.messages}),b=n.fn("SessionPrompt.resolveTools")(function*(Y){let ho=[];try{const C=xh(ho,bt.time("resolveTools"),0);let H={};let Yo=yield*Z();let oo=yield*V();let So=(fo,Oo)=>({sessionID:Y.session.id,abort:Oo.abortSignal,messageID:Y.processor.message.id,callID:Oo.toolCallId,extra:{model:Y.model,bypassAgentCheck:Y.bypassAgentCheck,promptOps:oo},agent:Y.agent.name,messages:Y.messages,metadata:(no)=>Y.processor.updateToolCall(Oo.toolCallId,(qo)=>{if(!["running","pending"].includes(qo.state.status))return qo;return{...qo,state:{title:no.title,metadata:no.metadata,status:"running",input:fo,time:{start:Date.now()}}}}),ask:(no)=>w.ask({...no,sessionID:Y.session.id,tool:{messageID:Y.processor.message.id,callID:Oo.toolCallId},ruleset:po.merge(Y.agent.permission,Y.session.permission??[])}).pipe(n.orDie)});for(let fo of yield*u.tools({modelID:Mt.make(Y.model.api.id),providerID:Y.model.providerID,agent:Y.agent})){let Oo=je.schema(Y.model,fl(fo.parameters));H[fo | ... truncated 2061 | 2062 |),{},Y.agent),Do={title:"",metadata:{...ie.metadata,truncated:to.truncated,...to.truncated&&{outputPath:to.outputPath}},output:to.content,attachments:v.map((Go)=>({...Go,id:Mo.ascending(),sessionID:x.sessionID,messageID:Y.processor.message.id})),content:ie.content};if(yo.abortSignal?.aborted)yieldY.processor.completeToolCall(yo.toolCallId,Do);return Do})),H[fo]=Oo}return H}catch(F){var Vo=F,_o=1}finally{Mh(ho,Vo,_o)}}),X=n.fn("SessionPrompt.handleSubtask")(function(Y){let{task:C,model:H,lastUser:Yo,sessionID:oo,session:So,msgs:ho}=Y,F=yield*_.context,Vo=yieldV(),{task:_o}=yieldu.named(),fo=C.model?yieldL(C.model.providerID,C.model.modelID,oo):H,Oo=yields.updateMessage({id:re.ascending(),role:"assistant",parentID:Yo.id,sessionID:oo,mode:C.agent,agent:C.agent,variant:Yo.model.variant,path:{cwd:F.directory,root:F.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:fo.id,providerID:fo.providerID,time:{created:Date.now()}}),no=yields.updatePart({id:Mo.ascending(),messageID | ... truncated2063 |
2064 | `);let J=Date.now();if(ao.run(se.Shell.Ended.Sync,{sessionID:Y.sessionID,timestamp:ye(J),callID:So.callID,output:fo}),!oo.time.completed)oo.time.completed=J,yields.updateMessage(oo);if(So.state.status==="running")So.state={status:"completed",time:{...So.state.time,end:J},input:So.state.input,title:"",metadata:{output:fo,description:""},output:fo},yields.updatePart(So)})),qo=yieldH(n.gen(function*(){let J=yieldd.trigger("shell.env",{cwd:ho,sessionID:Y.sessionID,callID:So.callID},{env:{}}),E=qr.make(Vo,_o,{cwd:ho,extendEnv:!0,env:{...J.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),yo=yieldW.spawn(E);yieldhl(nl(yo.all),(x)=>n.gen(function(){if(fo+=x,So.state.status==="running")So.state.metadata={output:fo,description:""},yields.updatePart(So)})),yieldyo.exitCode}).pipe(n.scoped,n.orDie)).pipe(n.exit);if(Ys.isFailure(qo)&&me.hasInterrupts(qo.cause)&&!me.hasDies(qo.cause))Oo=!0;if(yieldno,Ys.isFailure(qo)&&!Oo&&!me.hasInterruptsOnly(qo.cause))return yieldn.failCause(qo.cause);return{info: | ... truncated
UnknownError: UnknownError
data: {
message: "Agent not found: "Sisyphus - Ultraworker". Available agents: build, doc-updater, explore, general, historian, plan, planner, python-reviewer, security-reviewer, translator",
},
It seems that it's trying to locate the agent file of oh-my-openagent that doesn't exist, and thus failing to finish the compaction.
Diagnostics
2059 | NOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins. 2060 | </system-reminder>`,synthetic:!0});return C.parts.push(ho),Y.messages}),b=n.fn("SessionPrompt.resolveTools")(function*(Y){let ho=[];try{const C=xh(ho,bt.time("resolveTools"),0);let H={};let Yo=yield*Z();let oo=yield*V();let So=(fo,Oo)=>({sessionID:Y.session.id,abort:Oo.abortSignal,messageID:Y.processor.message.id,callID:Oo.toolCallId,extra:{model:Y.model,bypassAgentCheck:Y.bypassAgentCheck,promptOps:oo},agent:Y.agent.name,messages:Y.messages,metadata:(no)=>Y.processor.updateToolCall(Oo.toolCallId,(qo)=>{if(!["running","pending"].includes(qo.state.status))return qo;return{...qo,state:{title:no.title,metadata:no.metadata,status:"running",input:fo,time:{start:Date.now()}}}}),ask:(no)=>w.ask({...no,sessionID:Y.session.id,tool:{messageID:Y.processor.message.id,callID:Oo.toolCallId},ruleset:po.merge(Y.agent.permission,Y.session.permission??[])}).pipe(n.orDie)});for(let fo of yield*u.tools({modelID:Mt.make(Y.model.api.id),providerID:Y.model.providerID,agent:Y.agent})){let Oo=je.schema(Y.model,fl(fo.parameters));H[fo | ... truncated 2061 | 2062 | `),{},Y.agent),Do={title:"",metadata:{...ie.metadata,truncated:to.truncated,...to.truncated&&{outputPath:to.outputPath}},output:to.content,attachments:v.map((Go)=>({...Go,id:Mo.ascending(),sessionID:x.sessionID,messageID:Y.processor.message.id})),content:ie.content};if(yo.abortSignal?.aborted)yield*Y.processor.completeToolCall(yo.toolCallId,Do);return Do})),H[fo]=Oo}return H}catch(F){var Vo=F,_o=1}finally{Mh(ho,Vo,_o)}}),X=n.fn("SessionPrompt.handleSubtask")(function*(Y){let{task:C,model:H,lastUser:Yo,sessionID:oo,session:So,msgs:ho}=Y,F=yield*_.context,Vo=yield*V(),{task:_o}=yield*u.named(),fo=C.model?yield*L(C.model.providerID,C.model.modelID,oo):H,Oo=yield*s.updateMessage({id:re.ascending(),role:"assistant",parentID:Yo.id,sessionID:oo,mode:C.agent,agent:C.agent,variant:Yo.model.variant,path:{cwd:F.directory,root:F.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}},modelID:fo.id,providerID:fo.providerID,time:{created:Date.now()}}),no=yield*s.updatePart({id:Mo.ascending(),messageID | ... truncated 2063 | 2064 | `);let J=Date.now();if(ao.run(se.Shell.Ended.Sync,{sessionID:Y.sessionID,timestamp:ye(J),callID:So.callID,output:fo}),!oo.time.completed)oo.time.completed=J,yield*s.updateMessage(oo);if(So.state.status==="running")So.state={status:"completed",time:{...So.state.time,end:J},input:So.state.input,title:"",metadata:{output:fo,description:""},output:fo},yield*s.updatePart(So)})),qo=yield*H(n.gen(function*(){let J=yield*d.trigger("shell.env",{cwd:ho,sessionID:Y.sessionID,callID:So.callID},{env:{}}),E=qr.make(Vo,_o,{cwd:ho,extendEnv:!0,env:{...J.env,TERM:"dumb"},stdin:"ignore",forceKillAfter:"3 seconds"}),yo=yield*W.spawn(E);yield*hl(nl(yo.all),(x)=>n.gen(function*(){if(fo+=x,So.state.status==="running")So.state.metadata={output:fo,description:""},yield*s.updatePart(So)})),yield*yo.exitCode}).pipe(n.scoped,n.orDie)).pipe(n.exit);if(Ys.isFailure(qo)&&me.hasInterrupts(qo.cause)&&!me.hasDies(qo.cause))Oo=!0;if(yield*no,Ys.isFailure(qo)&&!Oo&&!me.hasInterruptsOnly(qo.cause))return yield*n.failCause(qo.cause);return{info: | ... truncated UnknownError: UnknownError data: { message: "Agent not found: \"Sisyphus - Ultraworker\". Available agents: build, doc-updater, explore, general, historian, plan, planner, python-reviewer, security-reviewer, translator", },Plugin version
0.14.1
OpenCode version
1.14.39
Platform
WSL in Windows
Client
OpenCode TUI (CLI)
Log output (optional)