@@ -15,6 +15,7 @@ const baseInputs: HandlerConfig = {
1515 coderUsername : "coder-agent" ,
1616 coderTaskNamePrefix : "gh" ,
1717 coderTemplateName : "task-template" ,
18+ coderTemplateNameCodex : "task-template-codex" ,
1819 coderOrganization : "default" ,
1920 agentGithubUsername : "xmtp-coder-agent" ,
2021} ;
@@ -24,6 +25,8 @@ const issueContext = {
2425 repo : "libxmtp" ,
2526 issueNumber : 42 ,
2627 issueUrl : "https://github.com/xmtp/libxmtp/issues/42" ,
28+ issueTitle : "Fix some bug" ,
29+ issueLabels : [ ] ,
2730 senderLogin : "human-dev" ,
2831} ;
2932
@@ -185,6 +188,94 @@ describe("CreateTaskHandler", () => {
185188 expect ( String ( taskNameArg ) ) . toBe ( "gh-libxmtp-42" ) ;
186189 } ) ;
187190
191+ test ( "uses codex template when issue title contains codex" , async ( ) => {
192+ github . checkActorPermission . mockResolvedValue ( true ) ;
193+ coder . getTask . mockResolvedValue ( null ) ;
194+ coder . createTask . mockResolvedValue ( mockTask ) ;
195+
196+ const ctx = {
197+ ...issueContext ,
198+ issueTitle : "Add Codex Support" ,
199+ } ;
200+ const handler = new CreateTaskHandler (
201+ coder ,
202+ github as unknown as import ( "../github-client" ) . GitHubClient ,
203+ baseInputs ,
204+ ctx ,
205+ logger ,
206+ ) ;
207+ await handler . run ( ) ;
208+
209+ const templateCall = coder . getTemplateByOrganizationAndName . mock
210+ . calls [ 0 ] as unknown as [ string , string ] ;
211+ expect ( templateCall [ 1 ] ) . toBe ( "task-template-codex" ) ;
212+ } ) ;
213+
214+ test ( "uses codex template when issue has codex label" , async ( ) => {
215+ github . checkActorPermission . mockResolvedValue ( true ) ;
216+ coder . getTask . mockResolvedValue ( null ) ;
217+ coder . createTask . mockResolvedValue ( mockTask ) ;
218+
219+ const ctx = {
220+ ...issueContext ,
221+ issueLabels : [ "enhancement" , "codex" ] ,
222+ } ;
223+ const handler = new CreateTaskHandler (
224+ coder ,
225+ github as unknown as import ( "../github-client" ) . GitHubClient ,
226+ baseInputs ,
227+ ctx ,
228+ logger ,
229+ ) ;
230+ await handler . run ( ) ;
231+
232+ const templateCall = coder . getTemplateByOrganizationAndName . mock
233+ . calls [ 0 ] as unknown as [ string , string ] ;
234+ expect ( templateCall [ 1 ] ) . toBe ( "task-template-codex" ) ;
235+ } ) ;
236+
237+ test ( "uses default template when no codex indicator" , async ( ) => {
238+ github . checkActorPermission . mockResolvedValue ( true ) ;
239+ coder . getTask . mockResolvedValue ( null ) ;
240+ coder . createTask . mockResolvedValue ( mockTask ) ;
241+
242+ const handler = new CreateTaskHandler (
243+ coder ,
244+ github as unknown as import ( "../github-client" ) . GitHubClient ,
245+ baseInputs ,
246+ issueContext ,
247+ logger ,
248+ ) ;
249+ await handler . run ( ) ;
250+
251+ const templateCall = coder . getTemplateByOrganizationAndName . mock
252+ . calls [ 0 ] as unknown as [ string , string ] ;
253+ expect ( templateCall [ 1 ] ) . toBe ( "task-template" ) ;
254+ } ) ;
255+
256+ test ( "codex match in title is case insensitive" , async ( ) => {
257+ github . checkActorPermission . mockResolvedValue ( true ) ;
258+ coder . getTask . mockResolvedValue ( null ) ;
259+ coder . createTask . mockResolvedValue ( mockTask ) ;
260+
261+ const ctx = {
262+ ...issueContext ,
263+ issueTitle : "Use CODEX for processing" ,
264+ } ;
265+ const handler = new CreateTaskHandler (
266+ coder ,
267+ github as unknown as import ( "../github-client" ) . GitHubClient ,
268+ baseInputs ,
269+ ctx ,
270+ logger ,
271+ ) ;
272+ await handler . run ( ) ;
273+
274+ const templateCall = coder . getTemplateByOrganizationAndName . mock
275+ . calls [ 0 ] as unknown as [ string , string ] ;
276+ expect ( templateCall [ 1 ] ) . toBe ( "task-template-codex" ) ;
277+ } ) ;
278+
188279 test ( "logs task name via injected logger" , async ( ) => {
189280 github . checkActorPermission . mockResolvedValue ( true ) ;
190281 coder . getTask . mockResolvedValue ( null ) ;
0 commit comments