mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-03-19 22:53:08 +00:00
feat: Add GPT-5 model variants and improve Codex execution logic. Addressed code review comments
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
* invokes this service, streams lifecycle events, and sends the response.
|
||||
*/
|
||||
|
||||
import { execGitCommand } from '../routes/worktree/common.js';
|
||||
import { execGitCommand } from '../lib/git.js';
|
||||
|
||||
// ============================================================================
|
||||
// Types
|
||||
@@ -68,8 +68,18 @@ export async function getBranchCommitLog(
|
||||
// parent), so we deduplicate by hash below and merge their file lists.
|
||||
// We over-fetch (2× the limit) to compensate for -m duplicating merge
|
||||
// commit entries, then trim the result to the requested limit.
|
||||
const COMMIT_SEP = '---COMMIT---';
|
||||
const META_END = '---META_END---';
|
||||
// Use ASCII control characters as record separators – these cannot appear in
|
||||
// git commit messages, so these delimiters are safe regardless of commit
|
||||
// body content. %x00 and %x01 in git's format string emit literal NUL /
|
||||
// SOH bytes respectively.
|
||||
//
|
||||
// COMMIT_SEP (\x00) – marks the start of each commit record.
|
||||
// META_END (\x01) – separates commit metadata from the --name-only file list.
|
||||
//
|
||||
// Full per-commit layout emitted by git:
|
||||
// \x00\n<hash>\n<shorthash>\n...\n<subject>\n<body>\x01<files...>
|
||||
const COMMIT_SEP = '\x00';
|
||||
const META_END = '\x01';
|
||||
const fetchLimit = commitLimit * 2;
|
||||
|
||||
const logOutput = await execGitCommand(
|
||||
@@ -79,13 +89,13 @@ export async function getBranchCommitLog(
|
||||
`--max-count=${fetchLimit}`,
|
||||
'-m',
|
||||
'--name-only',
|
||||
`--format=${COMMIT_SEP}%n%H%n%h%n%an%n%ae%n%aI%n%s%n%b${META_END}`,
|
||||
`--format=%x00%n%H%n%h%n%an%n%ae%n%aI%n%s%n%b%x01`,
|
||||
],
|
||||
worktreePath
|
||||
);
|
||||
|
||||
// Split output into per-commit blocks and drop the empty first chunk
|
||||
// (the output starts with ---COMMIT---).
|
||||
// (the output starts with a NUL commit separator).
|
||||
const commitBlocks = logOutput.split(COMMIT_SEP).filter((block) => block.trim());
|
||||
|
||||
// Use a Map to deduplicate merge commit entries (which appear once per
|
||||
@@ -96,7 +106,7 @@ export async function getBranchCommitLog(
|
||||
const metaEndIdx = block.indexOf(META_END);
|
||||
if (metaEndIdx === -1) continue; // malformed block, skip
|
||||
|
||||
// --- Parse metadata (everything before ---META_END---) ---
|
||||
// --- Parse metadata (everything before the META_END delimiter) ---
|
||||
const metaRaw = block.substring(0, metaEndIdx);
|
||||
const metaLines = metaRaw.split('\n');
|
||||
|
||||
@@ -108,14 +118,15 @@ export async function getBranchCommitLog(
|
||||
if (fields.length < 6) continue; // need at least hash..subject
|
||||
|
||||
const hash = fields[0].trim();
|
||||
const shortHash = fields[1].trim();
|
||||
const author = fields[2].trim();
|
||||
const authorEmail = fields[3].trim();
|
||||
const date = fields[4].trim();
|
||||
const subject = fields[5].trim();
|
||||
if (!hash) continue; // defensive: skip if hash is empty
|
||||
const shortHash = fields[1]?.trim() ?? '';
|
||||
const author = fields[2]?.trim() ?? '';
|
||||
const authorEmail = fields[3]?.trim() ?? '';
|
||||
const date = fields[4]?.trim() ?? '';
|
||||
const subject = fields[5]?.trim() ?? '';
|
||||
const body = fields.slice(6).join('\n').trim();
|
||||
|
||||
// --- Parse file list (everything after ---META_END---) ---
|
||||
// --- Parse file list (everything after the META_END delimiter) ---
|
||||
const filesRaw = block.substring(metaEndIdx + META_END.length);
|
||||
const blockFiles = filesRaw
|
||||
.trim()
|
||||
|
||||
Reference in New Issue
Block a user