mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-10 12:37:55 +01:00
Deduplicate recovery notices by metadata
This commit is contained in:
1 parent
5b3d30ed1d
commit
53aa1b9045
3 files changed
+22
-2
No files matched your search
@@ -40,6 +40,7 @@ import {
|
||||
FINISH_SUCCESSFUL_RUN_HANDOFF_REASON,
|
||||
SUCCESSFUL_RUN_MISSING_STATE_REASON,
|
||||
buildSuccessfulRunHandoffExhaustedNotice,
|
||||
noticeMetadataReferencesRecoveryAction,
|
||||
type SuccessfulRunHandoffNotice,
|
||||
} from "./successful-run-handoff.js";
|
||||
import {
|
||||
@@ -1846,7 +1847,7 @@ export function recoveryService(db: Db, deps: { enqueueWakeup: RecoveryWakeup })
|
||||
const escalationCommentMarker = `Recovery action: \`${recoveryAction.id}\``;
|
||||
|
||||
const hasEscalationComment = await db
|
||||
.select({ id: issueComments.id, body: issueComments.body })
|
||||
.select({ id: issueComments.id, body: issueComments.body, metadata: issueComments.metadata })
|
||||
.from(issueComments)
|
||||
.where(
|
||||
and(
|
||||
@@ -1856,7 +1857,10 @@ export function recoveryService(db: Db, deps: { enqueueWakeup: RecoveryWakeup })
|
||||
)
|
||||
.orderBy(desc(issueComments.createdAt))
|
||||
.limit(50)
|
||||
.then((rows) => rows.some((row) => (row.body ?? "").includes(escalationCommentMarker)));
|
||||
.then((rows) => rows.some((row) =>
|
||||
(row.body ?? "").includes(escalationCommentMarker) ||
|
||||
noticeMetadataReferencesRecoveryAction(row.metadata, recoveryAction.id),
|
||||
));
|
||||
|
||||
if (!hasEscalationComment) {
|
||||
if (notice) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
decideSuccessfulRunHandoff,
|
||||
isIdempotentFinishSuccessfulRunHandoffWakeStatus,
|
||||
isSuccessfulRunHandoffRequiredNoticeBody,
|
||||
noticeMetadataReferencesRecoveryAction,
|
||||
} from "./successful-run-handoff.js";
|
||||
|
||||
const run = {
|
||||
@@ -287,6 +288,8 @@ describe("successful run handoff decision", () => {
|
||||
]),
|
||||
}),
|
||||
]));
|
||||
expect(noticeMetadataReferencesRecoveryAction(notice.metadata, "77777777-7777-4777-8777-777777777777")).toBe(true);
|
||||
expect(noticeMetadataReferencesRecoveryAction(notice.metadata, "88888888-8888-4888-8888-888888888888")).toBe(false);
|
||||
});
|
||||
|
||||
it("recognizes new notices and legacy markdown headings for fallback deduplication", () => {
|
||||
|
||||
@@ -61,6 +61,19 @@ export type SuccessfulRunHandoffNotice = {
|
||||
metadata: IssueCommentMetadata;
|
||||
};
|
||||
|
||||
export function noticeMetadataReferencesRecoveryAction(
|
||||
metadata: IssueCommentMetadata | null | undefined,
|
||||
recoveryActionId: string,
|
||||
) {
|
||||
return (metadata?.sections ?? []).some((section) =>
|
||||
section.rows.some((row) =>
|
||||
row.type === "key_value" &&
|
||||
row.label === "Recovery action" &&
|
||||
row.value === recoveryActionId,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
export type SuccessfulRunHandoffDecision =
|
||||
| {
|
||||
kind: "enqueue";
|
||||
|
||||
Reference in new issue
Block a user