@penclipai/server 2026.508.2 → 2026.511.0-canary.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/adapters/builtin-adapter-types.d.ts.map +1 -1
- package/dist/adapters/builtin-adapter-types.js +1 -0
- package/dist/adapters/builtin-adapter-types.js.map +1 -1
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +17 -0
- package/dist/adapters/registry.js.map +1 -1
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/home-paths.d.ts +8 -11
- package/dist/home-paths.d.ts.map +1 -1
- package/dist/home-paths.js +14 -67
- package/dist/home-paths.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +8 -0
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/environments.d.ts.map +1 -1
- package/dist/routes/environments.js +8 -1
- package/dist/routes/environments.js.map +1 -1
- package/dist/routes/plugins.d.ts.map +1 -1
- package/dist/routes/plugins.js +6 -0
- package/dist/routes/plugins.js.map +1 -1
- package/dist/routes/projects.d.ts.map +1 -1
- package/dist/routes/projects.js +6 -0
- package/dist/routes/projects.js.map +1 -1
- package/dist/routes/secrets.d.ts.map +1 -1
- package/dist/routes/secrets.js +269 -5
- package/dist/routes/secrets.js.map +1 -1
- package/dist/secrets/aws-secrets-manager-provider.d.ts +87 -0
- package/dist/secrets/aws-secrets-manager-provider.d.ts.map +1 -0
- package/dist/secrets/aws-secrets-manager-provider.js +748 -0
- package/dist/secrets/aws-secrets-manager-provider.js.map +1 -0
- package/dist/secrets/configured-provider.d.ts +3 -0
- package/dist/secrets/configured-provider.d.ts.map +1 -0
- package/dist/secrets/configured-provider.js +8 -0
- package/dist/secrets/configured-provider.js.map +1 -0
- package/dist/secrets/external-stub-providers.d.ts.map +1 -1
- package/dist/secrets/external-stub-providers.js +55 -5
- package/dist/secrets/external-stub-providers.js.map +1 -1
- package/dist/secrets/local-encrypted-provider.d.ts.map +1 -1
- package/dist/secrets/local-encrypted-provider.js +140 -12
- package/dist/secrets/local-encrypted-provider.js.map +1 -1
- package/dist/secrets/provider-registry.d.ts +2 -1
- package/dist/secrets/provider-registry.d.ts.map +1 -1
- package/dist/secrets/provider-registry.js +6 -2
- package/dist/secrets/provider-registry.js.map +1 -1
- package/dist/secrets/types.d.ts +117 -8
- package/dist/secrets/types.d.ts.map +1 -1
- package/dist/secrets/types.js +35 -1
- package/dist/secrets/types.js.map +1 -1
- package/dist/services/access.d.ts +27 -27
- package/dist/services/activity.d.ts +8 -8
- package/dist/services/agents.d.ts +9 -9
- package/dist/services/approvals.d.ts +10 -10
- package/dist/services/assets.d.ts +3 -3
- package/dist/services/board-auth.d.ts +24 -24
- package/dist/services/environment-config.d.ts +14 -2
- package/dist/services/environment-config.d.ts.map +1 -1
- package/dist/services/environment-config.js +57 -4
- package/dist/services/environment-config.js.map +1 -1
- package/dist/services/environment-execution-target.d.ts.map +1 -1
- package/dist/services/environment-execution-target.js +2 -0
- package/dist/services/environment-execution-target.js.map +1 -1
- package/dist/services/environment-runtime.d.ts.map +1 -1
- package/dist/services/environment-runtime.js +10 -2
- package/dist/services/environment-runtime.js.map +1 -1
- package/dist/services/feedback.d.ts +4 -4
- package/dist/services/finance.d.ts +8 -8
- package/dist/services/goals.d.ts +20 -20
- package/dist/services/heartbeat.d.ts +24 -19
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +82 -8
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/inbox-dismissals.d.ts +2 -2
- package/dist/services/issue-approvals.d.ts +2 -2
- package/dist/services/issue-continuation-summary.d.ts +2 -0
- package/dist/services/issue-continuation-summary.d.ts.map +1 -1
- package/dist/services/issue-continuation-summary.js +10 -0
- package/dist/services/issue-continuation-summary.js.map +1 -1
- package/dist/services/issues.d.ts +18 -18
- package/dist/services/plugin-environment-driver.d.ts +6 -6
- package/dist/services/plugin-host-services.d.ts.map +1 -1
- package/dist/services/plugin-host-services.js +31 -4
- package/dist/services/plugin-host-services.js.map +1 -1
- package/dist/services/plugin-local-folders.d.ts +1 -0
- package/dist/services/plugin-local-folders.d.ts.map +1 -1
- package/dist/services/plugin-local-folders.js +45 -0
- package/dist/services/plugin-local-folders.js.map +1 -1
- package/dist/services/plugin-managed-agents.d.ts.map +1 -1
- package/dist/services/plugin-managed-agents.js +52 -9
- package/dist/services/plugin-managed-agents.js.map +1 -1
- package/dist/services/plugin-managed-skills.d.ts +14 -0
- package/dist/services/plugin-managed-skills.d.ts.map +1 -0
- package/dist/services/plugin-managed-skills.js +264 -0
- package/dist/services/plugin-managed-skills.js.map +1 -0
- package/dist/services/plugin-registry.d.ts +79 -79
- package/dist/services/plugin-secrets-handler.d.ts +2 -0
- package/dist/services/plugin-secrets-handler.d.ts.map +1 -1
- package/dist/services/plugin-secrets-handler.js +17 -80
- package/dist/services/plugin-secrets-handler.js.map +1 -1
- package/dist/services/recovery/service.d.ts +61 -0
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +63 -17
- package/dist/services/recovery/service.js.map +1 -1
- package/dist/services/routines.d.ts +18 -18
- package/dist/services/routines.d.ts.map +1 -1
- package/dist/services/routines.js +36 -4
- package/dist/services/routines.js.map +1 -1
- package/dist/services/secrets.d.ts +1566 -119
- package/dist/services/secrets.d.ts.map +1 -1
- package/dist/services/secrets.js +1465 -69
- package/dist/services/secrets.js.map +1 -1
- package/package.json +17 -16
- package/ui-dist/assets/{_basePickBy-5H35nb2M.js → _basePickBy-B0S0WJuO.js} +1 -1
- package/ui-dist/assets/{_baseUniq-BqsDtPj4.js → _baseUniq-DPfwHtaX.js} +1 -1
- package/ui-dist/assets/{arc-F3f4deZD.js → arc-dayO-_vQ.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-VXUJARFQ-pBm1fRMv.js → architectureDiagram-VXUJARFQ-B7gjpAgc.js} +1 -1
- package/ui-dist/assets/{blockDiagram-VD42YOAC-CGtc9RP7.js → blockDiagram-VD42YOAC-e0_AbQkY.js} +1 -1
- package/ui-dist/assets/{browser-ponyfill-CkdJVj1i.js → browser-ponyfill-D5A0IJkC.js} +1 -1
- package/ui-dist/assets/{c4Diagram-YG6GDRKO-BXgVj8GH.js → c4Diagram-YG6GDRKO-D5OdXvo8.js} +1 -1
- package/ui-dist/assets/channel-BLi0LFH0.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-Ds1Y5IYA.js → chunk-4BX2VUAB-uWBbpQP3.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-D8GwRmXK.js → chunk-55IACEB6-CFVDvwbd.js} +1 -1
- package/ui-dist/assets/{chunk-B4BG7PRW-R_v5U6_B.js → chunk-B4BG7PRW-Niy3z_vf.js} +1 -1
- package/ui-dist/assets/{chunk-DI55MBZ5-DO4X9EFt.js → chunk-DI55MBZ5-BSFdxpNJ.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-DUu61Scs.js → chunk-FMBD7UC4-Npjz_-5M.js} +1 -1
- package/ui-dist/assets/{chunk-QN33PNHL-Bw2VuHcK.js → chunk-QN33PNHL-C2BptvDe.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-BMGdo5T7.js → chunk-QZHKN3VN-B_lJernK.js} +1 -1
- package/ui-dist/assets/{chunk-TZMSLE5B-Cj_cdifl.js → chunk-TZMSLE5B-CNK1gBxt.js} +1 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-DGtCZCaT.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-DGtCZCaT.js +1 -0
- package/ui-dist/assets/clone-_FFZ0Kkl.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-3YDaxa6o.js → cose-bilkent-S5V4N54A-P5AbZ8TB.js} +1 -1
- package/ui-dist/assets/{dagre-6UL2VRFP-CmLvQKQL.js → dagre-6UL2VRFP-Byky8_ia.js} +1 -1
- package/ui-dist/assets/{diagram-PSM6KHXK-vZK9KPBu.js → diagram-PSM6KHXK-fWgBJ_Sk.js} +1 -1
- package/ui-dist/assets/{diagram-QEK2KX5R-Bu9JBN1e.js → diagram-QEK2KX5R-Di6U-VgU.js} +1 -1
- package/ui-dist/assets/{diagram-S2PKOQOG-gPR1ps4Q.js → diagram-S2PKOQOG--ALJobJP.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q2GNP2WA-BpqETGGN.js → erDiagram-Q2GNP2WA-BPLxxd-8.js} +1 -1
- package/ui-dist/assets/{flowDiagram-NV44I4VS-B0iV5Bcy.js → flowDiagram-NV44I4VS-DsKtnwgY.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-JELNMOA3-BxQL_kP7.js → ganttDiagram-JELNMOA3-D-RgqRnI.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-CSsc-XDT.js → gitGraphDiagram-V2S2FVAM-B9hWxZno.js} +1 -1
- package/ui-dist/assets/{graph-DWnTQd3e.js → graph-BR5K_DHH.js} +1 -1
- package/ui-dist/assets/{index-BEfD-NrI.js → index--jhL8HjG.js} +1 -1
- package/ui-dist/assets/{index-C24lwrRh.js → index-3FxOnh1Q.js} +1 -1
- package/ui-dist/assets/{index-CqFa1_Kx.js → index-B5iG7mfQ.js} +1 -1
- package/ui-dist/assets/{index-DRqmQ4ym.js → index-BC-VyJRT.js} +1 -1
- package/ui-dist/assets/{index-mfdF2CPG.js → index-BKJKSfwf.js} +1 -1
- package/ui-dist/assets/{index-DNyOAFyR.js → index-BP2zDr7N.js} +1 -1
- package/ui-dist/assets/{index-CmZ6XLj-.js → index-BVZZDphv.js} +1 -1
- package/ui-dist/assets/{index-DbsPCpm_.js → index-Bi7Lez4i.js} +1 -1
- package/ui-dist/assets/{index-CpOa4tDv.js → index-C5zaTUz3.js} +1 -1
- package/ui-dist/assets/index-CJyKYByK.js +538 -0
- package/ui-dist/assets/index-COTa6xTk.css +1 -0
- package/ui-dist/assets/{index-Dt3jXp2D.js → index-CP1her1A.js} +1 -1
- package/ui-dist/assets/{index-h9lpZQKL.js → index-CPBqNjLU.js} +1 -1
- package/ui-dist/assets/{index-CxnOSxK9.js → index-CY4Sacam.js} +1 -1
- package/ui-dist/assets/{index-DgU-HHpm.js → index-CrCHtJt9.js} +1 -1
- package/ui-dist/assets/{index-C3xGHm3G.js → index-D-kP_TCS.js} +1 -1
- package/ui-dist/assets/{index-Bw88aPGu.js → index-D0b0bdp9.js} +1 -1
- package/ui-dist/assets/{index-CaFk2kgt.js → index-DDo7a1ad.js} +1 -1
- package/ui-dist/assets/{index-Ckh-TE03.js → index-F8dNHc7L.js} +1 -1
- package/ui-dist/assets/{index-DUerGXI8.js → index-GIT3T29G.js} +1 -1
- package/ui-dist/assets/{index-DiPyhXNL.js → index-Ii2Zu1VC.js} +1 -1
- package/ui-dist/assets/{index-DvOzQrgz.js → index-cAXY17Km.js} +1 -1
- package/ui-dist/assets/{index-CzxxXvnl.js → index-vL5R__U-.js} +1 -1
- package/ui-dist/assets/{index-DNgm4Hx7.js → index-xy3NppqB.js} +1 -1
- package/ui-dist/assets/{infoDiagram-HS3SLOUP-C9a-DRdF.js → infoDiagram-HS3SLOUP-Cw5FMQPy.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-Cu752PhZ.js → journeyDiagram-XKPGCS4Q-qqubogM5.js} +1 -1
- package/ui-dist/assets/{kanban-definition-3W4ZIXB7-PXy7IffE.js → kanban-definition-3W4ZIXB7-BHKa2WJW.js} +1 -1
- package/ui-dist/assets/{layout-Ci-UJJNd.js → layout-n4Wr5yzd.js} +1 -1
- package/ui-dist/assets/{linear-D8Qy6J5I.js → linear-BeRJXNne.js} +1 -1
- package/ui-dist/assets/{mermaid.core-RTrr9erR.js → mermaid.core-DelVCbRr.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-VGOIOE7T-Ad_ky9GS.js → mindmap-definition-VGOIOE7T-DR-YsecJ.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ADFJNKIX-BPWjI8Sm.js → pieDiagram-ADFJNKIX-CZXfqZBG.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-DxY-Cew9.js → quadrantDiagram-AYHSOK5B-BBl26L66.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-BiUlKNuF.js → requirementDiagram-UZGBJVZJ-CvVYsxxA.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-t3mfJhUj.js → sankeyDiagram-TZEHDZUN-BVw2uYFt.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-WL72ISMW-D90qw9a6.js → sequenceDiagram-WL72ISMW--kspLpct.js} +1 -1
- package/ui-dist/assets/{stateDiagram-FKZM4ZOC-DB70vjUm.js → stateDiagram-FKZM4ZOC-DPx02LV8.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-S-NvEffl.js +1 -0
- package/ui-dist/assets/{timeline-definition-IT6M3QCI-CYSOqO3s.js → timeline-definition-IT6M3QCI-CyMnn5_z.js} +1 -1
- package/ui-dist/assets/{treemap-GDKQZRPO-QqfwsQzN.js → treemap-GDKQZRPO-DwLh53A5.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-PRI3JC2R-DZuSZ892.js → xychartDiagram-PRI3JC2R-xX5JJ2_4.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/locales/en/common.json +629 -0
- package/ui-dist/locales/zh-CN/common.json +551 -0
- package/ui-dist/assets/channel-BklDDvhc.js +0 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-gSWbQXsC.js +0 -1
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-gSWbQXsC.js +0 -1
- package/ui-dist/assets/clone-BhrAR33H.js +0 -1
- package/ui-dist/assets/index-GwA57FCP.js +0 -537
- package/ui-dist/assets/index-RH-ttKJp.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-WlT0xb9j.js +0 -1
|
@@ -54,6 +54,67 @@ export declare function recoveryService(db: Db, deps: {
|
|
|
54
54
|
enqueueWakeup: RecoveryWakeup;
|
|
55
55
|
}): {
|
|
56
56
|
buildRunOutputSilence: (run: Pick<typeof heartbeatRuns.$inferSelect, "id" | "companyId" | "status" | "lastOutputAt" | "lastOutputSeq" | "lastOutputStream" | "processStartedAt" | "startedAt" | "createdAt">, now?: Date) => Promise<RunOutputSilenceSummary>;
|
|
57
|
+
escalateStrandedRecoveryIssueInPlace: (input: {
|
|
58
|
+
issue: typeof issues.$inferSelect;
|
|
59
|
+
previousStatus: "todo" | "in_progress";
|
|
60
|
+
latestRun: LatestIssueRun;
|
|
61
|
+
}) => Promise<({
|
|
62
|
+
id: string;
|
|
63
|
+
description: string | null;
|
|
64
|
+
status: string;
|
|
65
|
+
createdAt: Date;
|
|
66
|
+
updatedAt: Date;
|
|
67
|
+
companyId: string;
|
|
68
|
+
title: string;
|
|
69
|
+
createdByAgentId: string | null;
|
|
70
|
+
createdByUserId: string | null;
|
|
71
|
+
identifier: string | null;
|
|
72
|
+
cancelledAt: Date | null;
|
|
73
|
+
startedAt: Date | null;
|
|
74
|
+
projectId: string | null;
|
|
75
|
+
projectWorkspaceId: string | null;
|
|
76
|
+
executionWorkspaceId: string | null;
|
|
77
|
+
goalId: string | null;
|
|
78
|
+
parentId: string | null;
|
|
79
|
+
workMode: string;
|
|
80
|
+
priority: string;
|
|
81
|
+
assigneeAgentId: string | null;
|
|
82
|
+
assigneeUserId: string | null;
|
|
83
|
+
requestDepth: number;
|
|
84
|
+
billingCode: string | null;
|
|
85
|
+
assigneeAdapterOverrides: Record<string, unknown> | null;
|
|
86
|
+
executionPolicy: Record<string, unknown> | null;
|
|
87
|
+
executionWorkspacePreference: string | null;
|
|
88
|
+
executionWorkspaceSettings: Record<string, unknown> | null;
|
|
89
|
+
hiddenAt: Date | null;
|
|
90
|
+
originId: string | null;
|
|
91
|
+
checkoutRunId: string | null;
|
|
92
|
+
executionRunId: string | null;
|
|
93
|
+
executionAgentNameKey: string | null;
|
|
94
|
+
executionLockedAt: Date | null;
|
|
95
|
+
issueNumber: number | null;
|
|
96
|
+
originKind: string;
|
|
97
|
+
originRunId: string | null;
|
|
98
|
+
originFingerprint: string;
|
|
99
|
+
executionState: Record<string, unknown> | null;
|
|
100
|
+
monitorNextCheckAt: Date | null;
|
|
101
|
+
monitorWakeRequestedAt: Date | null;
|
|
102
|
+
monitorLastTriggeredAt: Date | null;
|
|
103
|
+
monitorAttemptCount: number;
|
|
104
|
+
monitorNotes: string | null;
|
|
105
|
+
monitorScheduledBy: string | null;
|
|
106
|
+
completedAt: Date | null;
|
|
107
|
+
} & {
|
|
108
|
+
labels: {
|
|
109
|
+
id: string;
|
|
110
|
+
name: string;
|
|
111
|
+
createdAt: Date;
|
|
112
|
+
updatedAt: Date;
|
|
113
|
+
companyId: string;
|
|
114
|
+
color: string;
|
|
115
|
+
}[];
|
|
116
|
+
labelIds: string[];
|
|
117
|
+
}) | null>;
|
|
57
118
|
escalateStrandedAssignedIssue: (input: {
|
|
58
119
|
issue: typeof issues.$inferSelect;
|
|
59
120
|
previousStatus: "todo" | "in_progress";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/recovery/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/recovery/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,6 +124,20 @@ function formatIssueLinksForComment(relations) {
|
|
|
124
124
|
})
|
|
125
125
|
.join(", ");
|
|
126
126
|
}
|
|
127
|
+
function unwrapDatabaseConflictError(error) {
|
|
128
|
+
if (!error || typeof error !== "object")
|
|
129
|
+
return null;
|
|
130
|
+
const candidate = error;
|
|
131
|
+
if (typeof candidate.code === "string" ||
|
|
132
|
+
typeof candidate.constraint === "string" ||
|
|
133
|
+
typeof candidate.constraint_name === "string") {
|
|
134
|
+
return candidate;
|
|
135
|
+
}
|
|
136
|
+
const cause = candidate.cause;
|
|
137
|
+
if (!cause || typeof cause !== "object")
|
|
138
|
+
return candidate;
|
|
139
|
+
return cause;
|
|
140
|
+
}
|
|
127
141
|
function isAgentInvokable(agent) {
|
|
128
142
|
return Boolean(agent && !["paused", "terminated", "pending_approval"].includes(agent.status));
|
|
129
143
|
}
|
|
@@ -676,19 +690,21 @@ export function recoveryService(db, deps) {
|
|
|
676
690
|
].join("\n");
|
|
677
691
|
}
|
|
678
692
|
function isUniqueStaleRunEvaluationConflict(error) {
|
|
679
|
-
|
|
693
|
+
const maybe = unwrapDatabaseConflictError(error);
|
|
694
|
+
if (!maybe)
|
|
680
695
|
return false;
|
|
681
|
-
const maybe = error;
|
|
682
696
|
return maybe.code === "23505" &&
|
|
683
697
|
(maybe.constraint === "issues_active_stale_run_evaluation_uq" ||
|
|
698
|
+
maybe.constraint_name === "issues_active_stale_run_evaluation_uq" ||
|
|
684
699
|
typeof maybe.message === "string" && maybe.message.includes("issues_active_stale_run_evaluation_uq"));
|
|
685
700
|
}
|
|
686
701
|
function isUniqueStrandedIssueRecoveryConflict(error) {
|
|
687
|
-
|
|
702
|
+
const maybe = unwrapDatabaseConflictError(error);
|
|
703
|
+
if (!maybe)
|
|
688
704
|
return false;
|
|
689
|
-
const maybe = error;
|
|
690
705
|
return maybe.code === "23505" &&
|
|
691
706
|
(maybe.constraint === "issues_active_stranded_issue_recovery_uq" ||
|
|
707
|
+
maybe.constraint_name === "issues_active_stranded_issue_recovery_uq" ||
|
|
692
708
|
typeof maybe.message === "string" && maybe.message.includes("issues_active_stranded_issue_recovery_uq"));
|
|
693
709
|
}
|
|
694
710
|
async function ensureSourceIssueBlockedByStaleEvaluation(input) {
|
|
@@ -1009,6 +1025,30 @@ export function recoveryService(db, deps) {
|
|
|
1009
1025
|
.limit(1)
|
|
1010
1026
|
.then((rows) => rows[0] ?? null);
|
|
1011
1027
|
}
|
|
1028
|
+
function isStrandedIssueRecoveryIssue(issue) {
|
|
1029
|
+
return issue.originKind === STRANDED_ISSUE_RECOVERY_ORIGIN_KIND;
|
|
1030
|
+
}
|
|
1031
|
+
async function buildNestedStrandedRecoveryLine(issue, prefix) {
|
|
1032
|
+
const sourceIssueId = readNonEmptyString(issue.originId);
|
|
1033
|
+
const sourceIssue = sourceIssueId
|
|
1034
|
+
? await db
|
|
1035
|
+
.select({ id: issues.id, identifier: issues.identifier })
|
|
1036
|
+
.from(issues)
|
|
1037
|
+
.where(and(eq(issues.companyId, issue.companyId), eq(issues.id, sourceIssueId)))
|
|
1038
|
+
.then((rows) => rows[0] ?? null)
|
|
1039
|
+
: null;
|
|
1040
|
+
const sourceLine = sourceIssue
|
|
1041
|
+
? `- Original source issue: ${issueUiLink(sourceIssue, prefix)}`
|
|
1042
|
+
: sourceIssueId
|
|
1043
|
+
? `- Original source issue: \`${sourceIssueId}\``
|
|
1044
|
+
: "- Original source issue: unknown";
|
|
1045
|
+
return [
|
|
1046
|
+
"",
|
|
1047
|
+
"- Nested recovery: suppressed because this issue is already a `stranded_issue_recovery` issue.",
|
|
1048
|
+
sourceLine,
|
|
1049
|
+
"- Next action: the assigned recovery owner or board operator should fix the runtime/adapter problem, resolve or reassign the original source issue, then mark this recovery issue done or cancelled.",
|
|
1050
|
+
].join("\n");
|
|
1051
|
+
}
|
|
1012
1052
|
async function resolveStrandedIssueRecoveryOwnerAgentId(issue) {
|
|
1013
1053
|
const candidateIds = [];
|
|
1014
1054
|
if (issue.assigneeAgentId) {
|
|
@@ -1258,20 +1298,17 @@ export function recoveryService(db, deps) {
|
|
|
1258
1298
|
.then((rows) => rows.map((row) => row.blockerIssueId));
|
|
1259
1299
|
}
|
|
1260
1300
|
async function escalateStrandedAssignedIssue(input) {
|
|
1261
|
-
|
|
1262
|
-
|
|
1301
|
+
const nestedRecoverySuppressed = isStrandedIssueRecoveryIssue(input.issue);
|
|
1302
|
+
let recoveryIssue = null;
|
|
1303
|
+
if (!nestedRecoverySuppressed) {
|
|
1304
|
+
recoveryIssue = await ensureStrandedIssueRecoveryIssue({
|
|
1263
1305
|
issue: input.issue,
|
|
1264
1306
|
previousStatus: input.previousStatus,
|
|
1265
1307
|
latestRun: input.latestRun,
|
|
1308
|
+
recoveryCause: input.recoveryCause,
|
|
1309
|
+
successfulRunHandoffEvidence: input.successfulRunHandoffEvidence,
|
|
1266
1310
|
});
|
|
1267
1311
|
}
|
|
1268
|
-
const recoveryIssue = await ensureStrandedIssueRecoveryIssue({
|
|
1269
|
-
issue: input.issue,
|
|
1270
|
-
previousStatus: input.previousStatus,
|
|
1271
|
-
latestRun: input.latestRun,
|
|
1272
|
-
recoveryCause: input.recoveryCause,
|
|
1273
|
-
successfulRunHandoffEvidence: input.successfulRunHandoffEvidence,
|
|
1274
|
-
});
|
|
1275
1312
|
const blockerIds = await existingUnresolvedBlockerIssueIds(input.issue.companyId, input.issue.id);
|
|
1276
1313
|
const nextBlockerIds = recoveryIssue
|
|
1277
1314
|
? [...new Set([...blockerIds, recoveryIssue.id])]
|
|
@@ -1301,18 +1338,25 @@ export function recoveryService(db, deps) {
|
|
|
1301
1338
|
missingDisposition: input.successfulRunHandoffEvidence.missingDisposition,
|
|
1302
1339
|
});
|
|
1303
1340
|
}
|
|
1304
|
-
|
|
1305
|
-
|
|
1341
|
+
let recoveryLine;
|
|
1342
|
+
if (nestedRecoverySuppressed) {
|
|
1343
|
+
recoveryLine = await buildNestedStrandedRecoveryLine(input.issue, prefix);
|
|
1344
|
+
}
|
|
1345
|
+
else if (recoveryIssue) {
|
|
1346
|
+
recoveryLine = [
|
|
1306
1347
|
"",
|
|
1307
1348
|
`- Recovery issue: ${issueUiLink({ identifier: recoveryIssue.identifier, id: recoveryIssue.id }, prefix)}`,
|
|
1308
1349
|
`- Recovery owner: ${agentUiLink(recoveryOwner, prefix)}`,
|
|
1309
1350
|
"- Next action: the recovery owner should either restore a live execution path or record the manual resolution, then mark the recovery issue done.",
|
|
1310
|
-
].join("\n")
|
|
1311
|
-
|
|
1351
|
+
].join("\n");
|
|
1352
|
+
}
|
|
1353
|
+
else {
|
|
1354
|
+
recoveryLine = [
|
|
1312
1355
|
"",
|
|
1313
1356
|
"- Recovery issue: none created because Paperclip could not find an invokable manager, creator, or executive owner with budget available.",
|
|
1314
1357
|
"- Next action: a board operator should assign an invokable recovery owner, fix the agent/runtime state, or record an intentional manual resolution.",
|
|
1315
1358
|
].join("\n");
|
|
1359
|
+
}
|
|
1316
1360
|
if (notice) {
|
|
1317
1361
|
await issuesSvc.addComment(input.issue.id, notice.body, {}, {
|
|
1318
1362
|
authorType: "system",
|
|
@@ -1346,6 +1390,7 @@ export function recoveryService(db, deps) {
|
|
|
1346
1390
|
latestRunStatus: input.latestRun?.status ?? null,
|
|
1347
1391
|
latestRunErrorCode: input.latestRun?.errorCode ?? null,
|
|
1348
1392
|
recoveryIssueId: recoveryIssue?.id ?? null,
|
|
1393
|
+
nestedRecoverySuppressed,
|
|
1349
1394
|
blockerIssueIds: nextBlockerIds,
|
|
1350
1395
|
},
|
|
1351
1396
|
});
|
|
@@ -2221,6 +2266,7 @@ export function recoveryService(db, deps) {
|
|
|
2221
2266
|
}
|
|
2222
2267
|
return {
|
|
2223
2268
|
buildRunOutputSilence,
|
|
2269
|
+
escalateStrandedRecoveryIssueInPlace,
|
|
2224
2270
|
escalateStrandedAssignedIssue,
|
|
2225
2271
|
recordWatchdogDecision,
|
|
2226
2272
|
scanSilentActiveRuns,
|