@paperclipai/server 2026.529.0-canary.3 → 2026.529.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/services/heartbeat.d.ts +1 -1
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +124 -16
- package/dist/services/recovery/service.js.map +1 -1
- package/package.json +15 -15
- package/ui-dist/assets/{_basePickBy-C0PPL3f7.js → _basePickBy-CatIksFQ.js} +1 -1
- package/ui-dist/assets/{_baseUniq-CZCMD1kA.js → _baseUniq-dJHPUSv0.js} +1 -1
- package/ui-dist/assets/{arc-bfdqau9G.js → arc-CtH2CgKF.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-VXUJARFQ-Svb7tcu-.js → architectureDiagram-VXUJARFQ-DCrIA2M9.js} +1 -1
- package/ui-dist/assets/{blockDiagram-VD42YOAC-CxJo3Rzq.js → blockDiagram-VD42YOAC-DwGQlH4Q.js} +1 -1
- package/ui-dist/assets/{c4Diagram-YG6GDRKO-Cf9m1S5T.js → c4Diagram-YG6GDRKO-CxQ57CU2.js} +1 -1
- package/ui-dist/assets/channel-ocvDhfob.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-BLalIoTO.js → chunk-4BX2VUAB-x5ilG5bS.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-txgRHfAZ.js → chunk-55IACEB6-m4-ZL8HW.js} +1 -1
- package/ui-dist/assets/{chunk-B4BG7PRW-t3kQ5Ura.js → chunk-B4BG7PRW-CkhS1aBD.js} +1 -1
- package/ui-dist/assets/{chunk-DI55MBZ5-DeWGm9gt.js → chunk-DI55MBZ5-CIvY-YNj.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-BoMrZ2iV.js → chunk-FMBD7UC4-BmrTL91i.js} +1 -1
- package/ui-dist/assets/{chunk-QN33PNHL-C6IjB1l6.js → chunk-QN33PNHL-DR0iwv29.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-ChVV05mk.js → chunk-QZHKN3VN-DbrKL9B9.js} +1 -1
- package/ui-dist/assets/{chunk-TZMSLE5B-BzwZejIZ.js → chunk-TZMSLE5B-C2poxbQn.js} +1 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-CB95w61j.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-CB95w61j.js +1 -0
- package/ui-dist/assets/clone-jb5ZaBdh.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-bdqTQOLc.js → cose-bilkent-S5V4N54A-D84ykvZH.js} +1 -1
- package/ui-dist/assets/{dagre-6UL2VRFP-CCzfa2k1.js → dagre-6UL2VRFP-DRyzorVF.js} +1 -1
- package/ui-dist/assets/{diagram-PSM6KHXK-B_qKINV6.js → diagram-PSM6KHXK-C5wAgyx6.js} +1 -1
- package/ui-dist/assets/{diagram-QEK2KX5R-CoROGmQc.js → diagram-QEK2KX5R-CsvnTkVp.js} +1 -1
- package/ui-dist/assets/{diagram-S2PKOQOG-BYHf9S7Q.js → diagram-S2PKOQOG-Br9wqTRd.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q2GNP2WA-BM2ZwXiE.js → erDiagram-Q2GNP2WA-De9pfq6t.js} +1 -1
- package/ui-dist/assets/{flowDiagram-NV44I4VS-Bvo96MkV.js → flowDiagram-NV44I4VS-DvpUOaBO.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-JELNMOA3-C60UU2Dp.js → ganttDiagram-JELNMOA3-DEN8e2N4.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-BoOgDcMP.js → gitGraphDiagram-V2S2FVAM-B6ykMCWZ.js} +1 -1
- package/ui-dist/assets/{graph-ClwWvx1q.js → graph-CIjNMTg5.js} +1 -1
- package/ui-dist/assets/{index-x54OUiGf.js → index-B-7NLaC_.js} +1 -1
- package/ui-dist/assets/{index-BQqXsDOu.js → index-B7tc1Gsm.js} +1 -1
- package/ui-dist/assets/{index-k0YB50y5.js → index-BBoy4rd8.js} +1 -1
- package/ui-dist/assets/{index-D2GVLFm5.js → index-BJTuScfN.js} +1 -1
- package/ui-dist/assets/{index-BewquaVX.js → index-BPHfp057.js} +1 -1
- package/ui-dist/assets/{index-BPKSkPS0.js → index-BQG3y5iX.js} +1 -1
- package/ui-dist/assets/{index-CaKT511O.js → index-BVrF5LCL.js} +1 -1
- package/ui-dist/assets/{index-DjoB0qym.js → index-BW8cVFID.js} +1 -1
- package/ui-dist/assets/{index-BDNLnOqE.js → index-C2ybdFaK.js} +1 -1
- package/ui-dist/assets/{index-rQT_Rb1F.js → index-C5IuP2_1.js} +1 -1
- package/ui-dist/assets/{index-iJZ9TbSz.js → index-CBgD2e-L.js} +1 -1
- package/ui-dist/assets/{index-IlhRkaGD.js → index-CP_aXt53.js} +1 -1
- package/ui-dist/assets/{index-PuSj4nor.js → index-CjbsnQEI.js} +1 -1
- package/ui-dist/assets/{index-_RBYo8Sb.js → index-CuxdjvHM.js} +1 -1
- package/ui-dist/assets/{index-K2a4vV0T.js → index-D4-4-4PT.js} +1 -1
- package/ui-dist/assets/{index-CiPJkx9z.js → index-DbkwKO1Z.js} +1 -1
- package/ui-dist/assets/{index-LzAO_4cT.js → index-Dim4Fhke.js} +1 -1
- package/ui-dist/assets/{index-CUwCHG_e.js → index-Dm_8JsFk.js} +1 -1
- package/ui-dist/assets/{index--2lVWXG1.js → index-LZBbo_xD.js} +1 -1
- package/ui-dist/assets/{index-Bph57_Cz.js → index-Tn2KzsEq.js} +1 -1
- package/ui-dist/assets/{index-myc1DDxe.js → index-Ws6WWOnQ.js} +1 -1
- package/ui-dist/assets/{index-CCYrWJDo.js → index-XeITbZPL.js} +1 -1
- package/ui-dist/assets/{index-BlRedVpY.js → index-lmXzxmTa.js} +34 -34
- package/ui-dist/assets/{infoDiagram-HS3SLOUP-BFt3LDgG.js → infoDiagram-HS3SLOUP-BRRFAGiB.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-MdBNCsFv.js → journeyDiagram-XKPGCS4Q-DY36NDPF.js} +1 -1
- package/ui-dist/assets/{kanban-definition-3W4ZIXB7-DA3DDn3p.js → kanban-definition-3W4ZIXB7-CYbMkFCf.js} +1 -1
- package/ui-dist/assets/{layout-D2INyHEm.js → layout-CDBT31XH.js} +1 -1
- package/ui-dist/assets/{linear-B2Z9caew.js → linear-CqB19941.js} +1 -1
- package/ui-dist/assets/{mermaid.core-C6pOAIVw.js → mermaid.core-Bc2eS_zN.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-VGOIOE7T-Bb0mx1yf.js → mindmap-definition-VGOIOE7T-DYJLwXd1.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ADFJNKIX-DS2355BD.js → pieDiagram-ADFJNKIX-nJIUXYcD.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-DhCjhBGt.js → quadrantDiagram-AYHSOK5B-DfuqSIrq.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-Dhdt-9jn.js → requirementDiagram-UZGBJVZJ-uGKVNEde.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-BDIYHXoX.js → sankeyDiagram-TZEHDZUN-D0o0SvBR.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-WL72ISMW-ukbOp2zL.js → sequenceDiagram-WL72ISMW-D0txPBf9.js} +1 -1
- package/ui-dist/assets/{stateDiagram-FKZM4ZOC-CTvMmtos.js → stateDiagram-FKZM4ZOC-Dcs3VNuE.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-B300Yqmh.js +1 -0
- package/ui-dist/assets/{timeline-definition-IT6M3QCI-D2_lavUk.js → timeline-definition-IT6M3QCI-Cv8FNUsa.js} +1 -1
- package/ui-dist/assets/{treemap-GDKQZRPO-BgKOOJTs.js → treemap-GDKQZRPO-C9RzZ78j.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-PRI3JC2R-BlZt7-Bo.js → xychartDiagram-PRI3JC2R-Blrq3PpH.js} +1 -1
- package/ui-dist/index.html +1 -1
- package/ui-dist/assets/channel-DM-HbU51.js +0 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-HxBi2jTQ.js +0 -1
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-HxBi2jTQ.js +0 -1
- package/ui-dist/assets/clone-B1YzKp4p.js +0 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-BvIavg8V.js +0 -1
|
@@ -1197,7 +1197,7 @@ export declare function heartbeatService(db: Db, options?: HeartbeatServiceOptio
|
|
|
1197
1197
|
} | {
|
|
1198
1198
|
outcome: "not_scheduled";
|
|
1199
1199
|
reason: string;
|
|
1200
|
-
errorCode: "agent_not_invokable" | "budget_blocked" | "
|
|
1200
|
+
errorCode: "agent_not_invokable" | "budget_blocked" | "issue_paused" | "issue_dependencies_blocked" | "issue_not_found" | "issue_reassigned" | "issue_cancelled" | "issue_terminal_status" | "issue_not_in_progress" | "issue_execution_lock_changed" | "issue_review_participant_changed";
|
|
1201
1201
|
issueId: string | null;
|
|
1202
1202
|
attempt?: undefined;
|
|
1203
1203
|
maxAttempts?: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/recovery/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAIL,KAAK,qCAAqC,EAE3C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAQL,aAAa,EAMb,MAAM,EACP,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAGL,mCAAmC,EAIpC,MAAM,6BAA6B,CAAC;AAmBrC,eAAO,MAAM,wCAAwC,QAAiB,CAAC;AACvE,eAAO,MAAM,uCAAuC,QAAqB,CAAC;AAC1E,eAAO,MAAM,mCAAmC,QAAiB,CAAC;AAelE,KAAK,qBAAqB,GAAG;IAC3B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IAC7D,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACnD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,KAAK,cAAc,GAAG,CACpB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,qBAAqB,KACzB,OAAO,CAAC,OAAO,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAEvD,KAAK,cAAc,GAAG,IAAI,CACxB,OAAO,aAAa,CAAC,YAAY,EACjC,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAC1F,GAAG,IAAI,CAAC;AAGT,KAAK,qBAAqB,GAAG,yBAAyB,GAAG,OAAO,mCAAmC,CAAC;AAEpG,KAAK,oCAAoC,GAAG;IAC1C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,qBAAqB,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC7C,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;IACvE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/recovery/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,43 @@ function didAutomaticRecoveryFail(latestRun, expectedRetryReason) {
|
|
|
57
57
|
return latestRetryReason === expectedRetryReason &&
|
|
58
58
|
UNSUCCESSFUL_HEARTBEAT_RUN_TERMINAL_STATUSES.includes(latestRun.status);
|
|
59
59
|
}
|
|
60
|
+
const TRANSIENT_INFRA_CONTINUATION_ERROR_CODES = new Set([
|
|
61
|
+
"adapter_failed",
|
|
62
|
+
"codex_transient_upstream",
|
|
63
|
+
"claude_transient_upstream",
|
|
64
|
+
"timeout",
|
|
65
|
+
]);
|
|
66
|
+
const NON_RETRYABLE_CONTINUATION_ERROR_CODES = new Set([
|
|
67
|
+
"agent_not_invokable",
|
|
68
|
+
"agent_not_found",
|
|
69
|
+
"budget_blocked",
|
|
70
|
+
"budget_exhausted",
|
|
71
|
+
"issue_paused",
|
|
72
|
+
"issue_dependencies_blocked",
|
|
73
|
+
]);
|
|
74
|
+
const CONTINUATION_RECOVERY_TRANSIENT_MAX_ATTEMPTS = 3;
|
|
75
|
+
const CONTINUATION_RECOVERY_DEFAULT_MAX_ATTEMPTS = 1;
|
|
76
|
+
const CONTINUATION_RECOVERY_TRANSIENT_BASE_BACKOFF_MS = 60_000;
|
|
77
|
+
function classifyContinuationFailure(latestRun) {
|
|
78
|
+
const errorCode = readNonEmptyString(latestRun?.errorCode);
|
|
79
|
+
if (errorCode && NON_RETRYABLE_CONTINUATION_ERROR_CODES.has(errorCode)) {
|
|
80
|
+
return { kind: "non_retryable", maxAttempts: 0, baseBackoffMs: 0, errorCode };
|
|
81
|
+
}
|
|
82
|
+
if (errorCode && TRANSIENT_INFRA_CONTINUATION_ERROR_CODES.has(errorCode)) {
|
|
83
|
+
return {
|
|
84
|
+
kind: "transient_infra",
|
|
85
|
+
maxAttempts: CONTINUATION_RECOVERY_TRANSIENT_MAX_ATTEMPTS,
|
|
86
|
+
baseBackoffMs: CONTINUATION_RECOVERY_TRANSIENT_BASE_BACKOFF_MS,
|
|
87
|
+
errorCode,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
kind: "default",
|
|
92
|
+
maxAttempts: CONTINUATION_RECOVERY_DEFAULT_MAX_ATTEMPTS,
|
|
93
|
+
baseBackoffMs: 0,
|
|
94
|
+
errorCode,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
60
97
|
function successfulRunHandoffRecoveryEvidence(latestRun) {
|
|
61
98
|
if (!latestRun)
|
|
62
99
|
return null;
|
|
@@ -281,6 +318,39 @@ export function recoveryService(db, deps) {
|
|
|
281
318
|
.limit(1)
|
|
282
319
|
.then((rows) => rows[0] ?? null);
|
|
283
320
|
}
|
|
321
|
+
async function summarizeRecentContinuationRetries(companyId, issueId, errorCodeToMatch) {
|
|
322
|
+
const rows = await db
|
|
323
|
+
.select({
|
|
324
|
+
id: heartbeatRuns.id,
|
|
325
|
+
status: heartbeatRuns.status,
|
|
326
|
+
errorCode: heartbeatRuns.errorCode,
|
|
327
|
+
contextSnapshot: heartbeatRuns.contextSnapshot,
|
|
328
|
+
finishedAt: heartbeatRuns.finishedAt,
|
|
329
|
+
})
|
|
330
|
+
.from(heartbeatRuns)
|
|
331
|
+
.where(and(eq(heartbeatRuns.companyId, companyId), sql `${heartbeatRuns.contextSnapshot} ->> 'issueId' = ${issueId}`))
|
|
332
|
+
.orderBy(desc(heartbeatRuns.createdAt), desc(heartbeatRuns.id))
|
|
333
|
+
.limit(10);
|
|
334
|
+
let consecutive = 0;
|
|
335
|
+
let latestFinishedAt = null;
|
|
336
|
+
for (const row of rows) {
|
|
337
|
+
const ctx = parseObject(row.contextSnapshot);
|
|
338
|
+
const retryReason = readNonEmptyString(ctx.retryReason);
|
|
339
|
+
if (retryReason !== "issue_continuation_needed")
|
|
340
|
+
break;
|
|
341
|
+
if (!UNSUCCESSFUL_HEARTBEAT_RUN_TERMINAL_STATUSES.includes(row.status)) {
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
const rowErrorCode = readNonEmptyString(row.errorCode);
|
|
345
|
+
if (errorCodeToMatch !== rowErrorCode) {
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
consecutive += 1;
|
|
349
|
+
if (latestFinishedAt === null)
|
|
350
|
+
latestFinishedAt = row.finishedAt ?? null;
|
|
351
|
+
}
|
|
352
|
+
return { consecutive, latestFinishedAt };
|
|
353
|
+
}
|
|
284
354
|
async function hasActiveExecutionPath(companyId, issueId) {
|
|
285
355
|
const [run, deferredWake] = await Promise.all([
|
|
286
356
|
db
|
|
@@ -2046,24 +2116,62 @@ export function recoveryService(db, deps) {
|
|
|
2046
2116
|
}
|
|
2047
2117
|
continue;
|
|
2048
2118
|
}
|
|
2049
|
-
if (
|
|
2050
|
-
const
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
"
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2119
|
+
if (isUnsuccessfulTerminalIssueRun(latestRun)) {
|
|
2120
|
+
const classification = classifyContinuationFailure(latestRun);
|
|
2121
|
+
if (classification.kind === "non_retryable") {
|
|
2122
|
+
const failureSummary = summarizeRunFailureForIssueComment(latestRun);
|
|
2123
|
+
const updated = await escalateStrandedAssignedIssue({
|
|
2124
|
+
issue,
|
|
2125
|
+
previousStatus: "in_progress",
|
|
2126
|
+
latestRun,
|
|
2127
|
+
comment: "Paperclip detected a non-retryable failure on this issue's continuation run " +
|
|
2128
|
+
`(\`${classification.errorCode}\`). Skipping automatic retries and moving it to \`blocked\` ` +
|
|
2129
|
+
`so it is visible for intervention.${failureSummary ?? ""}`,
|
|
2130
|
+
});
|
|
2131
|
+
if (updated) {
|
|
2132
|
+
result.escalated += 1;
|
|
2133
|
+
result.issueIds.push(issue.id);
|
|
2134
|
+
}
|
|
2135
|
+
else {
|
|
2136
|
+
result.skipped += 1;
|
|
2137
|
+
}
|
|
2138
|
+
continue;
|
|
2062
2139
|
}
|
|
2063
|
-
|
|
2064
|
-
|
|
2140
|
+
if (didAutomaticRecoveryFail(latestRun, "issue_continuation_needed")) {
|
|
2141
|
+
const { consecutive, latestFinishedAt } = await summarizeRecentContinuationRetries(issue.companyId, issue.id, classification.errorCode);
|
|
2142
|
+
if (consecutive >= classification.maxAttempts) {
|
|
2143
|
+
const failureSummary = summarizeRunFailureForIssueComment(latestRun);
|
|
2144
|
+
const attemptCopy = consecutive <= 1 ? "" : ` (${consecutive}× attempts)`;
|
|
2145
|
+
const causeCopy = classification.errorCode
|
|
2146
|
+
? ` Latest cause: \`${classification.errorCode}\`.`
|
|
2147
|
+
: "";
|
|
2148
|
+
const updated = await escalateStrandedAssignedIssue({
|
|
2149
|
+
issue,
|
|
2150
|
+
previousStatus: "in_progress",
|
|
2151
|
+
latestRun,
|
|
2152
|
+
comment: "Paperclip automatically retried continuation for this assigned `in_progress` issue after its live " +
|
|
2153
|
+
`execution disappeared, but it still has no live execution path${attemptCopy}.${causeCopy}${failureSummary ?? ""} ` +
|
|
2154
|
+
"Moving it to `blocked` so it is visible for intervention.",
|
|
2155
|
+
});
|
|
2156
|
+
if (updated) {
|
|
2157
|
+
result.escalated += 1;
|
|
2158
|
+
result.issueIds.push(issue.id);
|
|
2159
|
+
}
|
|
2160
|
+
else {
|
|
2161
|
+
result.skipped += 1;
|
|
2162
|
+
}
|
|
2163
|
+
continue;
|
|
2164
|
+
}
|
|
2165
|
+
if (classification.baseBackoffMs > 0 && latestFinishedAt) {
|
|
2166
|
+
const elapsed = Date.now() - latestFinishedAt.getTime();
|
|
2167
|
+
const requiredDelay = classification.baseBackoffMs *
|
|
2168
|
+
Math.pow(2, Math.max(0, consecutive - 1));
|
|
2169
|
+
if (elapsed < requiredDelay) {
|
|
2170
|
+
result.skipped += 1;
|
|
2171
|
+
continue;
|
|
2172
|
+
}
|
|
2173
|
+
}
|
|
2065
2174
|
}
|
|
2066
|
-
continue;
|
|
2067
2175
|
}
|
|
2068
2176
|
if (await isInvocationBudgetBlocked(issue, agentId)) {
|
|
2069
2177
|
result.skipped += 1;
|