@@ -6,10 +6,10 @@ import * as CrossSpawnSpawner from "../../src/effect/cross-spawn-spawner"
66import { Instance } from "../../src/project/instance"
77import { Session } from "../../src/session"
88import { MessageV2 } from "../../src/session/message-v2"
9- import { SessionPrompt } from "../../src/session/prompt"
9+ import type { SessionPrompt } from "../../src/session/prompt"
1010import { MessageID , PartID } from "../../src/session/schema"
1111import { ModelID , ProviderID } from "../../src/provider/schema"
12- import { TaskTool } from "../../src/tool/task"
12+ import { TaskTool , type TaskPromptOps } from "../../src/tool/task"
1313import { ToolRegistry } from "../../src/tool/registry"
1414import { provideTmpdirInstance } from "../fixture/fixture"
1515import { testEffect } from "../lib/effect"
@@ -180,21 +180,16 @@ describe("tool.task", () => {
180180 const child = yield * sessions . create ( { parentID : chat . id , title : "Existing child" } )
181181 const tool = yield * TaskTool
182182 const def = yield * Effect . promise ( ( ) => tool . init ( ) )
183- const resolve = SessionPrompt . resolvePromptParts
184- const prompt = SessionPrompt . prompt
185- let seen : Parameters < typeof SessionPrompt . prompt > [ 0 ] | undefined
183+ let seen : SessionPrompt . PromptInput | undefined
186184
187- SessionPrompt . resolvePromptParts = async ( template ) => [ { type : "text" , text : template } ]
188- SessionPrompt . prompt = async ( input ) => {
189- seen = input
190- return reply ( input , "resumed" )
185+ const promptOps : TaskPromptOps = {
186+ cancel ( ) { } ,
187+ resolvePromptParts : async ( template ) => [ { type : "text" , text : template } ] ,
188+ prompt : async ( input ) => {
189+ seen = input
190+ return reply ( input , "resumed" )
191+ } ,
191192 }
192- yield * Effect . addFinalizer ( ( ) =>
193- Effect . sync ( ( ) => {
194- SessionPrompt . resolvePromptParts = resolve
195- SessionPrompt . prompt = prompt
196- } ) ,
197- )
198193
199194 const result = yield * Effect . promise ( ( ) =>
200195 def . execute (
@@ -209,6 +204,7 @@ describe("tool.task", () => {
209204 messageID : assistant . id ,
210205 agent : "build" ,
211206 abort : new AbortController ( ) . signal ,
207+ extra : { promptOps } ,
212208 messages : [ ] ,
213209 metadata ( ) { } ,
214210 ask : async ( ) => { } ,
@@ -232,20 +228,15 @@ describe("tool.task", () => {
232228 const { chat, assistant } = yield * seed ( )
233229 const tool = yield * TaskTool
234230 const def = yield * Effect . promise ( ( ) => tool . init ( ) )
235- const resolve = SessionPrompt . resolvePromptParts
236- const prompt = SessionPrompt . prompt
237231 const calls : unknown [ ] = [ ]
238232
239- SessionPrompt . resolvePromptParts = async ( template ) => [ { type : "text" , text : template } ]
240- SessionPrompt . prompt = async ( input ) => reply ( input , "done" )
241- yield * Effect . addFinalizer ( ( ) =>
242- Effect . sync ( ( ) => {
243- SessionPrompt . resolvePromptParts = resolve
244- SessionPrompt . prompt = prompt
245- } ) ,
246- )
233+ const promptOps : TaskPromptOps = {
234+ cancel ( ) { } ,
235+ resolvePromptParts : async ( template ) => [ { type : "text" , text : template } ] ,
236+ prompt : async ( input ) => reply ( input , "done" ) ,
237+ }
247238
248- const exec = ( extra ?: { bypassAgentCheck ?: boolean } ) =>
239+ const exec = ( extra ?: Record < string , any > ) =>
249240 Effect . promise ( ( ) =>
250241 def . execute (
251242 {
@@ -258,7 +249,7 @@ describe("tool.task", () => {
258249 messageID : assistant . id ,
259250 agent : "build" ,
260251 abort : new AbortController ( ) . signal ,
261- extra,
252+ extra : { promptOps , ... extra } ,
262253 messages : [ ] ,
263254 metadata ( ) { } ,
264255 ask : async ( input ) => {
@@ -292,21 +283,16 @@ describe("tool.task", () => {
292283 const { chat, assistant } = yield * seed ( )
293284 const tool = yield * TaskTool
294285 const def = yield * Effect . promise ( ( ) => tool . init ( ) )
295- const resolve = SessionPrompt . resolvePromptParts
296- const prompt = SessionPrompt . prompt
297- let seen : Parameters < typeof SessionPrompt . prompt > [ 0 ] | undefined
286+ let seen : SessionPrompt . PromptInput | undefined
298287
299- SessionPrompt . resolvePromptParts = async ( template ) => [ { type : "text" , text : template } ]
300- SessionPrompt . prompt = async ( input ) => {
301- seen = input
302- return reply ( input , "created" )
288+ const promptOps : TaskPromptOps = {
289+ cancel ( ) { } ,
290+ resolvePromptParts : async ( template ) => [ { type : "text" , text : template } ] ,
291+ prompt : async ( input ) => {
292+ seen = input
293+ return reply ( input , "created" )
294+ } ,
303295 }
304- yield * Effect . addFinalizer ( ( ) =>
305- Effect . sync ( ( ) => {
306- SessionPrompt . resolvePromptParts = resolve
307- SessionPrompt . prompt = prompt
308- } ) ,
309- )
310296
311297 const result = yield * Effect . promise ( ( ) =>
312298 def . execute (
@@ -321,6 +307,7 @@ describe("tool.task", () => {
321307 messageID : assistant . id ,
322308 agent : "build" ,
323309 abort : new AbortController ( ) . signal ,
310+ extra : { promptOps } ,
324311 messages : [ ] ,
325312 metadata ( ) { } ,
326313 ask : async ( ) => { } ,
@@ -346,21 +333,16 @@ describe("tool.task", () => {
346333 const { chat, assistant } = yield * seed ( )
347334 const tool = yield * TaskTool
348335 const def = yield * Effect . promise ( ( ) => tool . init ( ) )
349- const resolve = SessionPrompt . resolvePromptParts
350- const prompt = SessionPrompt . prompt
351- let seen : Parameters < typeof SessionPrompt . prompt > [ 0 ] | undefined
336+ let seen : SessionPrompt . PromptInput | undefined
352337
353- SessionPrompt . resolvePromptParts = async ( template ) => [ { type : "text" , text : template } ]
354- SessionPrompt . prompt = async ( input ) => {
355- seen = input
356- return reply ( input , "done" )
338+ const promptOps : TaskPromptOps = {
339+ cancel ( ) { } ,
340+ resolvePromptParts : async ( template ) => [ { type : "text" , text : template } ] ,
341+ prompt : async ( input ) => {
342+ seen = input
343+ return reply ( input , "done" )
344+ } ,
357345 }
358- yield * Effect . addFinalizer ( ( ) =>
359- Effect . sync ( ( ) => {
360- SessionPrompt . resolvePromptParts = resolve
361- SessionPrompt . prompt = prompt
362- } ) ,
363- )
364346
365347 const result = yield * Effect . promise ( ( ) =>
366348 def . execute (
@@ -374,6 +356,7 @@ describe("tool.task", () => {
374356 messageID : assistant . id ,
375357 agent : "build" ,
376358 abort : new AbortController ( ) . signal ,
359+ extra : { promptOps } ,
377360 messages : [ ] ,
378361 metadata ( ) { } ,
379362 ask : async ( ) => { } ,
0 commit comments