reorder prompt sections: task-first with dynamic TOC (#513)

* reorder prompt sections: task-first with dynamic TOC

put the actual task at the top of the prompt for primacy, add a
dynamic table of contents, and push system/runtime metadata to the end.

new section order: TOC → YOUR TASK → PROCEDURE → EVENT CONTEXT →
SYSTEM → LEARNINGS → RUNTIME

Made-with: Cursor

* enforce clean working tree: continue session if agent leaves uncommitted changes

after each agent run, check `git status --porcelain`. if dirty, resume
the same session with instructions to commit on a new branch, push, and
open a PR. retries up to 3 times before giving up.

- claude code: capture session_id from result event, use --resume <id>
- opencode: use --continue to resume the last session
- remove --no-session-persistence from claude (needed for --resume)
- update Task mode to clarify branch/push/PR is the default finalize step

Made-with: Cursor

* log full prompt in collapsible group for debugging

Made-with: Cursor

* fix: format tool refs in buildCommitPrompt via formatMcpToolRef

* enforce clean git status: general instructions, stop hook, and Task mode

Made-with: Cursor

* fix: rename stale titleBody references after body leak fix

Made-with: Cursor

---------

Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
This commit is contained in:
Colin McDonnell
2026-04-04 19:37:44 +00:00
committed by pullfrog[bot]
parent 6b93e6b368
commit b9b6503315
16 changed files with 677 additions and 413 deletions
+20 -1
View File
@@ -5,7 +5,26 @@
*/
// mcp name constant
export const ghPullfrogMcpName = "gh_pullfrog";
export const pullfrogMcpName = "pullfrog";
/** @see {@link file://./agents/shared.ts} Agent interface that uses this type */
export type AgentId = "claude" | "opentoad";
/**
* format a tool name the way each agent's MCP client presents it to the model.
* claude code: mcp__pullfrog__select_mode
* opencode: pullfrog_select_mode
*/
export function formatMcpToolRef(agentId: AgentId, toolName: string): string {
switch (agentId) {
case "claude":
return `mcp__${pullfrogMcpName}__${toolName}`;
case "opentoad":
return `${pullfrogMcpName}_${toolName}`;
default:
return agentId satisfies never;
}
}
// model alias registry lives in models.ts — re-exported here for shared access
export type { ModelAlias, ModelProvider, ProviderConfig } from "./models.ts";