@tickernelz/paperclip-pro-server 2026.930.5 → 2026.1001.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/build-info.json +1 -1
- package/dist/services/execution-projection.d.ts.map +1 -1
- package/dist/services/execution-projection.js +2 -1
- package/dist/services/execution-projection.js.map +1 -1
- package/dist/services/execution-recovery-attempt.d.ts +3 -0
- package/dist/services/execution-recovery-attempt.d.ts.map +1 -1
- package/dist/services/execution-recovery-attempt.js +9 -0
- package/dist/services/execution-recovery-attempt.js.map +1 -1
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +51 -21
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/recovery/service.d.ts +1 -8
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +10 -4
- package/dist/services/recovery/service.js.map +1 -1
- package/package.json +21 -21
- package/ui-dist/assets/{Agents.production-CznvSxPb.js → Agents.production-fNeT2seP.js} +2 -2
- package/ui-dist/assets/{CompanyActivity.production-DGPmuiMK.js → CompanyActivity.production-CEF0hx9W.js} +1 -1
- package/ui-dist/assets/{CompanyExport-B2_MyBAa.js → CompanyExport-DT63ZLv6.js} +1 -1
- package/ui-dist/assets/{CompanySkills.production-CbLMWon3.js → CompanySkills.production-74w4FgIl.js} +1 -1
- package/ui-dist/assets/{Costs.production-CXw68OcC.js → Costs.production-B0j-0g6E.js} +1 -1
- package/ui-dist/assets/{OrgChart.production-DO92Tc-H.js → OrgChart.production-BdkDUcmQ.js} +1 -1
- package/ui-dist/assets/{RoutineDetail.production-BGIyenmz.js → RoutineDetail.production-grakkTMs.js} +1 -1
- package/ui-dist/assets/{Routines.production-1FAJghn4.js → Routines.production-qCZmmUZQ.js} +1 -1
- package/ui-dist/assets/{definition-nDpkq-TP.js → definition-6ehunDEH.js} +1 -1
- package/ui-dist/assets/{index-9OR5EiR3.js → index-DrB9-JGQ.js} +4 -4
- package/ui-dist/index.html +1 -1
- package/ui-dist/sw.js +1 -1
|
@@ -62,14 +62,7 @@ export declare function classifyContinuationFailure(latestRun: LatestIssueRun):
|
|
|
62
62
|
export declare function recoveryService(db: Db, deps: {
|
|
63
63
|
enqueueWakeup: RecoveryWakeup;
|
|
64
64
|
scheduleRecoveryRetry?: (runId: string) => Promise<typeof heartbeatRuns.$inferSelect | null>;
|
|
65
|
-
|
|
66
|
-
* Whether a failed or interrupted run has consumed every bounded
|
|
67
|
-
* transient retry, so `scheduleRecoveryRetry` can no longer produce a
|
|
68
|
-
* successor for it. Lets the sweeper tell "no retry because the budget
|
|
69
|
-
* is spent" (escalate) from "no retry because something else owns the
|
|
70
|
-
* run" (leave alone).
|
|
71
|
-
*/
|
|
72
|
-
transientRetryBudgetSpent?: (run: typeof heartbeatRuns.$inferSelect) => boolean;
|
|
65
|
+
retryBudgetSpent?: (run: typeof heartbeatRuns.$inferSelect) => boolean;
|
|
73
66
|
liveRunExecutions?: Readonly<{
|
|
74
67
|
has(id: string): boolean;
|
|
75
68
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/recovery/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/recovery/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { externalConversationStateSql } from "../slack-conversation-state.js";
|
|
|
4
4
|
import { hasLiveLegacyController } from "../legacy-controller-lease.js";
|
|
5
5
|
import { instanceSettingsService } from "../instance-settings.js";
|
|
6
6
|
import { isWaitingConversation, settleConversationTurn, deliverConversationComments } from "../agent-conversations.js";
|
|
7
|
-
import { and, asc, desc, eq, exists, gt, gte, inArray, isNull, not, notInArray, or, sql, } from "drizzle-orm";
|
|
7
|
+
import { and, asc, desc, eq, exists, gt, gte, inArray, isNull, not, notInArray, notExists, or, sql, } from "drizzle-orm";
|
|
8
8
|
import { executionBlockerPredicate } from "../execution-blocker.js";
|
|
9
9
|
import { releaseDependencyGateRecoveryHold } from "../dependency-gate-recovery-hold.js";
|
|
10
10
|
import { hasCommittedNativeBoardResponseWait, readNativeBoardResponseWaitSource, } from "../native-runtime/native-board-response-wait.js";
|
|
@@ -1097,7 +1097,7 @@ export function recoveryService(db, deps) {
|
|
|
1097
1097
|
// it reports the exhaustion instead of leaving the issue with no
|
|
1098
1098
|
// live path (2026-09-25: three deploy restarts in a row spent the
|
|
1099
1099
|
// budget and the issue sat in_progress with no run, unescalated).
|
|
1100
|
-
if (input.outcome && deps.
|
|
1100
|
+
if (input.outcome && deps.retryBudgetSpent?.(predecessor)) {
|
|
1101
1101
|
input.outcome.retryExhausted = true;
|
|
1102
1102
|
}
|
|
1103
1103
|
return null;
|
|
@@ -1766,11 +1766,17 @@ export function recoveryService(db, deps) {
|
|
|
1766
1766
|
async function existingUnresolvedBlockerIssueIds(companyId, issueId) {
|
|
1767
1767
|
return existingUnresolvedBlockerIssues(companyId, issueId).then((rows) => rows.map((row) => row.id));
|
|
1768
1768
|
}
|
|
1769
|
+
function childNotBlockedByParentCondition(parent) {
|
|
1770
|
+
return notExists(db
|
|
1771
|
+
.select({ id: issueRelations.id })
|
|
1772
|
+
.from(issueRelations)
|
|
1773
|
+
.where(and(eq(issueRelations.companyId, parent.companyId), eq(issueRelations.issueId, parent.id), eq(issueRelations.relatedIssueId, issues.id), eq(issueRelations.type, "blocks"))));
|
|
1774
|
+
}
|
|
1769
1775
|
async function openChildIssues(issue) {
|
|
1770
1776
|
return db
|
|
1771
1777
|
.select({ id: issues.id, identifier: issues.identifier })
|
|
1772
1778
|
.from(issues)
|
|
1773
|
-
.where(and(eq(issues.companyId, issue.companyId), eq(issues.parentId, issue.id), visibleIssueCondition(), notInArray(issues.status, ["done", "cancelled"])));
|
|
1779
|
+
.where(and(eq(issues.companyId, issue.companyId), eq(issues.parentId, issue.id), visibleIssueCondition(), notInArray(issues.status, ["done", "cancelled"]), childNotBlockedByParentCondition(issue)));
|
|
1774
1780
|
}
|
|
1775
1781
|
async function healthyOpenChildIssues(issue, sameWorkspaceOnly = false) {
|
|
1776
1782
|
if (sameWorkspaceOnly && !issue.projectWorkspaceId)
|
|
@@ -1778,7 +1784,7 @@ export function recoveryService(db, deps) {
|
|
|
1778
1784
|
const childCandidates = await db
|
|
1779
1785
|
.select()
|
|
1780
1786
|
.from(issues)
|
|
1781
|
-
.where(and(eq(issues.companyId, issue.companyId), eq(issues.parentId, issue.id), ...(sameWorkspaceOnly ? [eq(issues.projectWorkspaceId, issue.projectWorkspaceId)] : []), visibleIssueCondition(), notInArray(issues.status, ["done", "cancelled"])));
|
|
1787
|
+
.where(and(eq(issues.companyId, issue.companyId), eq(issues.parentId, issue.id), ...(sameWorkspaceOnly ? [eq(issues.projectWorkspaceId, issue.projectWorkspaceId)] : []), visibleIssueCondition(), notInArray(issues.status, ["done", "cancelled"]), childNotBlockedByParentCondition(issue)));
|
|
1782
1788
|
const openChildren = [];
|
|
1783
1789
|
for (const child of childCandidates) {
|
|
1784
1790
|
const childState = await collectDispositionRepairSourceState(db, {
|