Autoapply edits if env variable configured

This commit is contained in:
khalid@traclabs.com
2026-04-23 07:58:35 -05:00
parent fdf6124fa1
commit 233fb6d003
4 changed files with 75 additions and 14 deletions

View File

@@ -12,6 +12,7 @@ import { SMS_TEMPLATES } from '../sms/templates.js';
import { logger } from '../logger.js';
const REPO_ROOT = process.env.REPO_ROOT || '.';
const AUTO_APPLY = process.env.AUTO_APPLY_EDITS === 'true';
/** Get a friendly display name for a manifest entry. */
function sectionDisplayName(m: ManifestEntry): string {
@@ -136,6 +137,7 @@ async function handlePropose(job: Extract<EditJobPayload, { kind: 'propose' }>)
after: editedJson,
repoRelativePath,
userMessage: job.message,
autoApply: AUTO_APPLY,
});
// Step 5: Store proposal
@@ -154,9 +156,26 @@ async function handlePropose(job: Extract<EditJobPayload, { kind: 'propose' }>)
log.info({ event: 'proposal.created', proposalId, path: repoRelativePath }, 'Proposal created');
// Step 6: Notify user
if (job.smsReplyMeta) {
await sendSms(job.smsReplyMeta.from, job.smsReplyMeta.to, SMS_TEMPLATES.PROPOSAL_SUMMARY(summary, proposalId));
// Step 6: Auto-apply or ask for confirmation
if (AUTO_APPLY) {
const validation = schema.safeParse(editedJson);
if (!validation.success) {
log.error({ event: 'auto_apply.validation_failed', errors: validation.error.message }, 'Auto-apply validation failed');
updateProposalStatus(proposalId, 'rejected');
return;
}
writeContentFile(repoRelativePath, validation.data, { proposalId, source: job.source });
updateProposalStatus(proposalId, 'applied');
log.info({ event: 'proposal.auto_applied', proposalId, path: repoRelativePath }, 'Proposal auto-applied');
if (job.smsReplyMeta) {
await sendSms(job.smsReplyMeta.from, job.smsReplyMeta.to, SMS_TEMPLATES.AUTO_APPLIED(summary));
}
} else {
if (job.smsReplyMeta) {
await sendSms(job.smsReplyMeta.from, job.smsReplyMeta.to, SMS_TEMPLATES.PROPOSAL_SUMMARY(summary, proposalId));
}
}
} catch (err) {