diff --git a/apps/open-swe/src/utils/github/issue-task.ts b/apps/open-swe/src/utils/github/issue-task.ts index 2dc3501a..9690a4e7 100644 --- a/apps/open-swe/src/utils/github/issue-task.ts +++ b/apps/open-swe/src/utils/github/issue-task.ts @@ -15,6 +15,10 @@ export const TASK_CLOSE_TAG = ""; export const PROPOSED_PLAN_OPEN_TAG = ""; export const PROPOSED_PLAN_CLOSE_TAG = ""; +const DETAILS_OPEN_TAG = "
"; +const DETAILS_CLOSE_TAG = "
"; +const AGENT_CONTEXT_DETAILS_SUMMARY = "Agent Context"; + function typeNarrowTaskPlan(taskPlan: unknown): taskPlan is TaskPlan { return !!( typeof taskPlan === "object" && @@ -126,8 +130,6 @@ function insertPlanToIssueBody( ${planString} ${closingPlanTag}`; - let newBody = ""; - if ( !issueBody.includes(openingPlanTag) && !issueBody.includes(closingPlanTag) @@ -136,7 +138,7 @@ ${closingPlanTag}`; !issueBody.includes(DETAILS_OPEN_TAG) && !issueBody.includes(DETAILS_CLOSE_TAG) ) { - newBody = `${issueBody} + return `${issueBody} ${DETAILS_OPEN_TAG} ${AGENT_CONTEXT_DETAILS_SUMMARY} ${wrappedPlan} @@ -144,22 +146,34 @@ ${DETAILS_CLOSE_TAG}`; } else { // No plan present yet, but details already exists. const contentBeforeDetailsTag = issueBody.split(DETAILS_OPEN_TAG)?.[0]; - const contentAfterDetailsTag = issueBody.split(DETAILS_CLOSE_TAG)?.[0]; + const contentAfterDetailsOpenTag = + issueBody.split(DETAILS_OPEN_TAG)?.[1] || ""; + const contentAfterSummary = contentAfterDetailsOpenTag.includes( + AGENT_CONTEXT_DETAILS_SUMMARY, + ) + ? contentAfterDetailsOpenTag.split(AGENT_CONTEXT_DETAILS_SUMMARY)[1] + : contentAfterDetailsOpenTag; + const contentAfterDetailsCloseTag = + issueBody.split(DETAILS_CLOSE_TAG)?.[1] || ""; - newBody = `${contentBeforeDetailsTag} -${wrappedPlan} -${contentAfterDetailsTag}`; + return `${contentBeforeDetailsTag}${DETAILS_OPEN_TAG} +${AGENT_CONTEXT_DETAILS_SUMMARY} +${wrappedPlan}${ + contentAfterSummary.trim() + ? ` +${contentAfterSummary.trim()}` + : "" + } +${DETAILS_CLOSE_TAG}${contentAfterDetailsCloseTag}`; } } else { const contentBeforeOpenTag = issueBody.split(openingPlanTag)?.[0]; const contentAfterCloseTag = issueBody.split(closingPlanTag)?.[1]; - newBody = `${contentBeforeOpenTag} + return `${contentBeforeOpenTag} ${wrappedPlan} ${contentAfterCloseTag}`; } - - return newBody; } export async function addProposedPlanToIssue( @@ -197,10 +211,6 @@ export async function addProposedPlanToIssue( }); } -const DETAILS_OPEN_TAG = "
"; -const DETAILS_CLOSE_TAG = "
"; -const AGENT_CONTEXT_DETAILS_SUMMARY = "Agent Context"; - export async function addTaskPlanToIssue( input: GetIssueTaskPlanInput, config: GraphConfig,