@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.
Files changed (192) hide show
  1. package/dist/adapters/builtin-adapter-types.d.ts.map +1 -1
  2. package/dist/adapters/builtin-adapter-types.js +1 -0
  3. package/dist/adapters/builtin-adapter-types.js.map +1 -1
  4. package/dist/adapters/registry.d.ts.map +1 -1
  5. package/dist/adapters/registry.js +17 -0
  6. package/dist/adapters/registry.js.map +1 -1
  7. package/dist/config.js +4 -4
  8. package/dist/config.js.map +1 -1
  9. package/dist/home-paths.d.ts +8 -11
  10. package/dist/home-paths.d.ts.map +1 -1
  11. package/dist/home-paths.js +14 -67
  12. package/dist/home-paths.js.map +1 -1
  13. package/dist/routes/agents.d.ts.map +1 -1
  14. package/dist/routes/agents.js +8 -0
  15. package/dist/routes/agents.js.map +1 -1
  16. package/dist/routes/environments.d.ts.map +1 -1
  17. package/dist/routes/environments.js +8 -1
  18. package/dist/routes/environments.js.map +1 -1
  19. package/dist/routes/plugins.d.ts.map +1 -1
  20. package/dist/routes/plugins.js +6 -0
  21. package/dist/routes/plugins.js.map +1 -1
  22. package/dist/routes/projects.d.ts.map +1 -1
  23. package/dist/routes/projects.js +6 -0
  24. package/dist/routes/projects.js.map +1 -1
  25. package/dist/routes/secrets.d.ts.map +1 -1
  26. package/dist/routes/secrets.js +269 -5
  27. package/dist/routes/secrets.js.map +1 -1
  28. package/dist/secrets/aws-secrets-manager-provider.d.ts +87 -0
  29. package/dist/secrets/aws-secrets-manager-provider.d.ts.map +1 -0
  30. package/dist/secrets/aws-secrets-manager-provider.js +748 -0
  31. package/dist/secrets/aws-secrets-manager-provider.js.map +1 -0
  32. package/dist/secrets/configured-provider.d.ts +3 -0
  33. package/dist/secrets/configured-provider.d.ts.map +1 -0
  34. package/dist/secrets/configured-provider.js +8 -0
  35. package/dist/secrets/configured-provider.js.map +1 -0
  36. package/dist/secrets/external-stub-providers.d.ts.map +1 -1
  37. package/dist/secrets/external-stub-providers.js +55 -5
  38. package/dist/secrets/external-stub-providers.js.map +1 -1
  39. package/dist/secrets/local-encrypted-provider.d.ts.map +1 -1
  40. package/dist/secrets/local-encrypted-provider.js +140 -12
  41. package/dist/secrets/local-encrypted-provider.js.map +1 -1
  42. package/dist/secrets/provider-registry.d.ts +2 -1
  43. package/dist/secrets/provider-registry.d.ts.map +1 -1
  44. package/dist/secrets/provider-registry.js +6 -2
  45. package/dist/secrets/provider-registry.js.map +1 -1
  46. package/dist/secrets/types.d.ts +117 -8
  47. package/dist/secrets/types.d.ts.map +1 -1
  48. package/dist/secrets/types.js +35 -1
  49. package/dist/secrets/types.js.map +1 -1
  50. package/dist/services/access.d.ts +27 -27
  51. package/dist/services/activity.d.ts +8 -8
  52. package/dist/services/agents.d.ts +9 -9
  53. package/dist/services/approvals.d.ts +10 -10
  54. package/dist/services/assets.d.ts +3 -3
  55. package/dist/services/board-auth.d.ts +24 -24
  56. package/dist/services/environment-config.d.ts +14 -2
  57. package/dist/services/environment-config.d.ts.map +1 -1
  58. package/dist/services/environment-config.js +57 -4
  59. package/dist/services/environment-config.js.map +1 -1
  60. package/dist/services/environment-execution-target.d.ts.map +1 -1
  61. package/dist/services/environment-execution-target.js +2 -0
  62. package/dist/services/environment-execution-target.js.map +1 -1
  63. package/dist/services/environment-runtime.d.ts.map +1 -1
  64. package/dist/services/environment-runtime.js +10 -2
  65. package/dist/services/environment-runtime.js.map +1 -1
  66. package/dist/services/feedback.d.ts +4 -4
  67. package/dist/services/finance.d.ts +8 -8
  68. package/dist/services/goals.d.ts +20 -20
  69. package/dist/services/heartbeat.d.ts +24 -19
  70. package/dist/services/heartbeat.d.ts.map +1 -1
  71. package/dist/services/heartbeat.js +82 -8
  72. package/dist/services/heartbeat.js.map +1 -1
  73. package/dist/services/inbox-dismissals.d.ts +2 -2
  74. package/dist/services/issue-approvals.d.ts +2 -2
  75. package/dist/services/issue-continuation-summary.d.ts +2 -0
  76. package/dist/services/issue-continuation-summary.d.ts.map +1 -1
  77. package/dist/services/issue-continuation-summary.js +10 -0
  78. package/dist/services/issue-continuation-summary.js.map +1 -1
  79. package/dist/services/issues.d.ts +18 -18
  80. package/dist/services/plugin-environment-driver.d.ts +6 -6
  81. package/dist/services/plugin-host-services.d.ts.map +1 -1
  82. package/dist/services/plugin-host-services.js +31 -4
  83. package/dist/services/plugin-host-services.js.map +1 -1
  84. package/dist/services/plugin-local-folders.d.ts +1 -0
  85. package/dist/services/plugin-local-folders.d.ts.map +1 -1
  86. package/dist/services/plugin-local-folders.js +45 -0
  87. package/dist/services/plugin-local-folders.js.map +1 -1
  88. package/dist/services/plugin-managed-agents.d.ts.map +1 -1
  89. package/dist/services/plugin-managed-agents.js +52 -9
  90. package/dist/services/plugin-managed-agents.js.map +1 -1
  91. package/dist/services/plugin-managed-skills.d.ts +14 -0
  92. package/dist/services/plugin-managed-skills.d.ts.map +1 -0
  93. package/dist/services/plugin-managed-skills.js +264 -0
  94. package/dist/services/plugin-managed-skills.js.map +1 -0
  95. package/dist/services/plugin-registry.d.ts +79 -79
  96. package/dist/services/plugin-secrets-handler.d.ts +2 -0
  97. package/dist/services/plugin-secrets-handler.d.ts.map +1 -1
  98. package/dist/services/plugin-secrets-handler.js +17 -80
  99. package/dist/services/plugin-secrets-handler.js.map +1 -1
  100. package/dist/services/recovery/service.d.ts +61 -0
  101. package/dist/services/recovery/service.d.ts.map +1 -1
  102. package/dist/services/recovery/service.js +63 -17
  103. package/dist/services/recovery/service.js.map +1 -1
  104. package/dist/services/routines.d.ts +18 -18
  105. package/dist/services/routines.d.ts.map +1 -1
  106. package/dist/services/routines.js +36 -4
  107. package/dist/services/routines.js.map +1 -1
  108. package/dist/services/secrets.d.ts +1566 -119
  109. package/dist/services/secrets.d.ts.map +1 -1
  110. package/dist/services/secrets.js +1465 -69
  111. package/dist/services/secrets.js.map +1 -1
  112. package/package.json +17 -16
  113. package/ui-dist/assets/{_basePickBy-5H35nb2M.js → _basePickBy-B0S0WJuO.js} +1 -1
  114. package/ui-dist/assets/{_baseUniq-BqsDtPj4.js → _baseUniq-DPfwHtaX.js} +1 -1
  115. package/ui-dist/assets/{arc-F3f4deZD.js → arc-dayO-_vQ.js} +1 -1
  116. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-pBm1fRMv.js → architectureDiagram-VXUJARFQ-B7gjpAgc.js} +1 -1
  117. package/ui-dist/assets/{blockDiagram-VD42YOAC-CGtc9RP7.js → blockDiagram-VD42YOAC-e0_AbQkY.js} +1 -1
  118. package/ui-dist/assets/{browser-ponyfill-CkdJVj1i.js → browser-ponyfill-D5A0IJkC.js} +1 -1
  119. package/ui-dist/assets/{c4Diagram-YG6GDRKO-BXgVj8GH.js → c4Diagram-YG6GDRKO-D5OdXvo8.js} +1 -1
  120. package/ui-dist/assets/channel-BLi0LFH0.js +1 -0
  121. package/ui-dist/assets/{chunk-4BX2VUAB-Ds1Y5IYA.js → chunk-4BX2VUAB-uWBbpQP3.js} +1 -1
  122. package/ui-dist/assets/{chunk-55IACEB6-D8GwRmXK.js → chunk-55IACEB6-CFVDvwbd.js} +1 -1
  123. package/ui-dist/assets/{chunk-B4BG7PRW-R_v5U6_B.js → chunk-B4BG7PRW-Niy3z_vf.js} +1 -1
  124. package/ui-dist/assets/{chunk-DI55MBZ5-DO4X9EFt.js → chunk-DI55MBZ5-BSFdxpNJ.js} +1 -1
  125. package/ui-dist/assets/{chunk-FMBD7UC4-DUu61Scs.js → chunk-FMBD7UC4-Npjz_-5M.js} +1 -1
  126. package/ui-dist/assets/{chunk-QN33PNHL-Bw2VuHcK.js → chunk-QN33PNHL-C2BptvDe.js} +1 -1
  127. package/ui-dist/assets/{chunk-QZHKN3VN-BMGdo5T7.js → chunk-QZHKN3VN-B_lJernK.js} +1 -1
  128. package/ui-dist/assets/{chunk-TZMSLE5B-Cj_cdifl.js → chunk-TZMSLE5B-CNK1gBxt.js} +1 -1
  129. package/ui-dist/assets/classDiagram-2ON5EDUG-DGtCZCaT.js +1 -0
  130. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-DGtCZCaT.js +1 -0
  131. package/ui-dist/assets/clone-_FFZ0Kkl.js +1 -0
  132. package/ui-dist/assets/{cose-bilkent-S5V4N54A-3YDaxa6o.js → cose-bilkent-S5V4N54A-P5AbZ8TB.js} +1 -1
  133. package/ui-dist/assets/{dagre-6UL2VRFP-CmLvQKQL.js → dagre-6UL2VRFP-Byky8_ia.js} +1 -1
  134. package/ui-dist/assets/{diagram-PSM6KHXK-vZK9KPBu.js → diagram-PSM6KHXK-fWgBJ_Sk.js} +1 -1
  135. package/ui-dist/assets/{diagram-QEK2KX5R-Bu9JBN1e.js → diagram-QEK2KX5R-Di6U-VgU.js} +1 -1
  136. package/ui-dist/assets/{diagram-S2PKOQOG-gPR1ps4Q.js → diagram-S2PKOQOG--ALJobJP.js} +1 -1
  137. package/ui-dist/assets/{erDiagram-Q2GNP2WA-BpqETGGN.js → erDiagram-Q2GNP2WA-BPLxxd-8.js} +1 -1
  138. package/ui-dist/assets/{flowDiagram-NV44I4VS-B0iV5Bcy.js → flowDiagram-NV44I4VS-DsKtnwgY.js} +1 -1
  139. package/ui-dist/assets/{ganttDiagram-JELNMOA3-BxQL_kP7.js → ganttDiagram-JELNMOA3-D-RgqRnI.js} +1 -1
  140. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-CSsc-XDT.js → gitGraphDiagram-V2S2FVAM-B9hWxZno.js} +1 -1
  141. package/ui-dist/assets/{graph-DWnTQd3e.js → graph-BR5K_DHH.js} +1 -1
  142. package/ui-dist/assets/{index-BEfD-NrI.js → index--jhL8HjG.js} +1 -1
  143. package/ui-dist/assets/{index-C24lwrRh.js → index-3FxOnh1Q.js} +1 -1
  144. package/ui-dist/assets/{index-CqFa1_Kx.js → index-B5iG7mfQ.js} +1 -1
  145. package/ui-dist/assets/{index-DRqmQ4ym.js → index-BC-VyJRT.js} +1 -1
  146. package/ui-dist/assets/{index-mfdF2CPG.js → index-BKJKSfwf.js} +1 -1
  147. package/ui-dist/assets/{index-DNyOAFyR.js → index-BP2zDr7N.js} +1 -1
  148. package/ui-dist/assets/{index-CmZ6XLj-.js → index-BVZZDphv.js} +1 -1
  149. package/ui-dist/assets/{index-DbsPCpm_.js → index-Bi7Lez4i.js} +1 -1
  150. package/ui-dist/assets/{index-CpOa4tDv.js → index-C5zaTUz3.js} +1 -1
  151. package/ui-dist/assets/index-CJyKYByK.js +538 -0
  152. package/ui-dist/assets/index-COTa6xTk.css +1 -0
  153. package/ui-dist/assets/{index-Dt3jXp2D.js → index-CP1her1A.js} +1 -1
  154. package/ui-dist/assets/{index-h9lpZQKL.js → index-CPBqNjLU.js} +1 -1
  155. package/ui-dist/assets/{index-CxnOSxK9.js → index-CY4Sacam.js} +1 -1
  156. package/ui-dist/assets/{index-DgU-HHpm.js → index-CrCHtJt9.js} +1 -1
  157. package/ui-dist/assets/{index-C3xGHm3G.js → index-D-kP_TCS.js} +1 -1
  158. package/ui-dist/assets/{index-Bw88aPGu.js → index-D0b0bdp9.js} +1 -1
  159. package/ui-dist/assets/{index-CaFk2kgt.js → index-DDo7a1ad.js} +1 -1
  160. package/ui-dist/assets/{index-Ckh-TE03.js → index-F8dNHc7L.js} +1 -1
  161. package/ui-dist/assets/{index-DUerGXI8.js → index-GIT3T29G.js} +1 -1
  162. package/ui-dist/assets/{index-DiPyhXNL.js → index-Ii2Zu1VC.js} +1 -1
  163. package/ui-dist/assets/{index-DvOzQrgz.js → index-cAXY17Km.js} +1 -1
  164. package/ui-dist/assets/{index-CzxxXvnl.js → index-vL5R__U-.js} +1 -1
  165. package/ui-dist/assets/{index-DNgm4Hx7.js → index-xy3NppqB.js} +1 -1
  166. package/ui-dist/assets/{infoDiagram-HS3SLOUP-C9a-DRdF.js → infoDiagram-HS3SLOUP-Cw5FMQPy.js} +1 -1
  167. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-Cu752PhZ.js → journeyDiagram-XKPGCS4Q-qqubogM5.js} +1 -1
  168. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-PXy7IffE.js → kanban-definition-3W4ZIXB7-BHKa2WJW.js} +1 -1
  169. package/ui-dist/assets/{layout-Ci-UJJNd.js → layout-n4Wr5yzd.js} +1 -1
  170. package/ui-dist/assets/{linear-D8Qy6J5I.js → linear-BeRJXNne.js} +1 -1
  171. package/ui-dist/assets/{mermaid.core-RTrr9erR.js → mermaid.core-DelVCbRr.js} +4 -4
  172. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-Ad_ky9GS.js → mindmap-definition-VGOIOE7T-DR-YsecJ.js} +1 -1
  173. package/ui-dist/assets/{pieDiagram-ADFJNKIX-BPWjI8Sm.js → pieDiagram-ADFJNKIX-CZXfqZBG.js} +1 -1
  174. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-DxY-Cew9.js → quadrantDiagram-AYHSOK5B-BBl26L66.js} +1 -1
  175. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-BiUlKNuF.js → requirementDiagram-UZGBJVZJ-CvVYsxxA.js} +1 -1
  176. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-t3mfJhUj.js → sankeyDiagram-TZEHDZUN-BVw2uYFt.js} +1 -1
  177. package/ui-dist/assets/{sequenceDiagram-WL72ISMW-D90qw9a6.js → sequenceDiagram-WL72ISMW--kspLpct.js} +1 -1
  178. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-DB70vjUm.js → stateDiagram-FKZM4ZOC-DPx02LV8.js} +1 -1
  179. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-S-NvEffl.js +1 -0
  180. package/ui-dist/assets/{timeline-definition-IT6M3QCI-CYSOqO3s.js → timeline-definition-IT6M3QCI-CyMnn5_z.js} +1 -1
  181. package/ui-dist/assets/{treemap-GDKQZRPO-QqfwsQzN.js → treemap-GDKQZRPO-DwLh53A5.js} +1 -1
  182. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-DZuSZ892.js → xychartDiagram-PRI3JC2R-xX5JJ2_4.js} +1 -1
  183. package/ui-dist/index.html +2 -2
  184. package/ui-dist/locales/en/common.json +629 -0
  185. package/ui-dist/locales/zh-CN/common.json +551 -0
  186. package/ui-dist/assets/channel-BklDDvhc.js +0 -1
  187. package/ui-dist/assets/classDiagram-2ON5EDUG-gSWbQXsC.js +0 -1
  188. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-gSWbQXsC.js +0 -1
  189. package/ui-dist/assets/clone-BhrAR33H.js +0 -1
  190. package/ui-dist/assets/index-GwA57FCP.js +0 -537
  191. package/ui-dist/assets/index-RH-ttKJp.css +0 -1
  192. 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
- if (!error || typeof error !== "object")
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
- if (!error || typeof error !== "object")
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
- if (isStrandedIssueRecoveryIssue(input.issue)) {
1262
- return escalateStrandedRecoveryIssueInPlace({
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
- const recoveryLine = recoveryIssue
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,