@@ -29,27 +29,6 @@ export const TaskTool = Tool.defineEffect(
2929 const agent = yield * Agent . Service
3030 const config = yield * Config . Service
3131
32- const list = Effect . fn ( "TaskTool.list" ) ( function * ( caller ?: Tool . InitContext [ "agent" ] ) {
33- const items = yield * agent . list ( ) . pipe ( Effect . map ( ( items ) => items . filter ( ( item ) => item . mode !== "primary" ) ) )
34- const filtered = caller
35- ? items . filter ( ( item ) => Permission . evaluate ( "task" , item . name , caller . permission ) . action !== "deny" )
36- : items
37- return filtered . toSorted ( ( a , b ) => a . name . localeCompare ( b . name ) )
38- } )
39-
40- const desc = Effect . fn ( "TaskTool.desc" ) ( function * ( caller ?: Tool . InitContext [ "agent" ] ) {
41- const items = yield * list ( caller )
42- return DESCRIPTION . replace (
43- "{agents}" ,
44- items
45- . map (
46- ( item ) =>
47- `- ${ item . name } : ${ item . description ?? "This subagent should only be called manually by the user." } ` ,
48- )
49- . join ( "\n" ) ,
50- )
51- } )
52-
5332 const run = Effect . fn ( "TaskTool.execute" ) ( function * ( params : z . infer < typeof parameters > , ctx : Tool . Context ) {
5433 const cfg = yield * config . get ( )
5534
@@ -184,7 +163,26 @@ export const TaskTool = Tool.defineEffect(
184163 } )
185164
186165 return async ( ctx ) => {
187- const description = await Effect . runPromise ( desc ( ctx ?. agent ) )
166+ const caller = ctx ?. agent
167+ const description = await Effect . runPromise (
168+ Effect . gen ( function * ( ) {
169+ const items = yield * agent . list ( ) . pipe ( Effect . map ( ( items ) => items . filter ( ( item ) => item . mode !== "primary" ) ) )
170+ const filtered = caller
171+ ? items . filter ( ( item ) => Permission . evaluate ( "task" , item . name , caller . permission ) . action !== "deny" )
172+ : items
173+
174+ return DESCRIPTION . replace (
175+ "{agents}" ,
176+ filtered
177+ . toSorted ( ( a , b ) => a . name . localeCompare ( b . name ) )
178+ . map (
179+ ( item ) =>
180+ `- ${ item . name } : ${ item . description ?? "This subagent should only be called manually by the user." } ` ,
181+ )
182+ . join ( "\n" ) ,
183+ )
184+ } ) ,
185+ )
188186
189187 return {
190188 description,
0 commit comments