@tickernelz/paperclip-pro-server 2026.1017.2 → 2026.1018.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 (171) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/modules/agent-lifecycle/__tests__/lifecycle.test.js +36 -0
  3. package/dist/modules/agent-lifecycle/__tests__/lifecycle.test.js.map +1 -1
  4. package/dist/routes/attention.d.ts.map +1 -1
  5. package/dist/routes/attention.js +44 -26
  6. package/dist/routes/attention.js.map +1 -1
  7. package/dist/routes/browser-use.d.ts +2 -2
  8. package/dist/routes/openapi.d.ts.map +1 -1
  9. package/dist/routes/openapi.js +12 -2
  10. package/dist/routes/openapi.js.map +1 -1
  11. package/dist/services/cancelled-native-startup.d.ts.map +1 -1
  12. package/dist/services/cancelled-native-startup.js +21 -5
  13. package/dist/services/cancelled-native-startup.js.map +1 -1
  14. package/dist/services/cancelled-native-startup.test.d.ts +2 -0
  15. package/dist/services/cancelled-native-startup.test.d.ts.map +1 -0
  16. package/dist/services/cancelled-native-startup.test.js +243 -0
  17. package/dist/services/cancelled-native-startup.test.js.map +1 -0
  18. package/dist/services/chat-action-work.d.ts +1 -0
  19. package/dist/services/chat-action-work.d.ts.map +1 -1
  20. package/dist/services/chat-action-work.js +6 -0
  21. package/dist/services/chat-action-work.js.map +1 -1
  22. package/dist/services/chat-channels.d.ts +1 -0
  23. package/dist/services/chat-channels.d.ts.map +1 -1
  24. package/dist/services/chat-channels.js +2 -0
  25. package/dist/services/chat-channels.js.map +1 -1
  26. package/dist/services/chat-work-notifications.d.ts +1 -0
  27. package/dist/services/chat-work-notifications.d.ts.map +1 -1
  28. package/dist/services/chat-work-notifications.js +1 -0
  29. package/dist/services/chat-work-notifications.js.map +1 -1
  30. package/dist/services/connectors/slack.d.ts +14 -14
  31. package/dist/services/decision-desk.d.ts +19 -0
  32. package/dist/services/decision-desk.d.ts.map +1 -0
  33. package/dist/services/decision-desk.js +135 -0
  34. package/dist/services/decision-desk.js.map +1 -0
  35. package/dist/services/delivery-work-notifications.d.ts +1 -0
  36. package/dist/services/delivery-work-notifications.d.ts.map +1 -1
  37. package/dist/services/delivery-work-notifications.js +1 -0
  38. package/dist/services/delivery-work-notifications.js.map +1 -1
  39. package/dist/services/execution-recovery-attempt.d.ts +3 -0
  40. package/dist/services/execution-recovery-attempt.d.ts.map +1 -1
  41. package/dist/services/execution-recovery-attempt.js +7 -0
  42. package/dist/services/execution-recovery-attempt.js.map +1 -1
  43. package/dist/services/explicit-native-continuation.test.js +17 -4
  44. package/dist/services/explicit-native-continuation.test.js.map +1 -1
  45. package/dist/services/heartbeat/local-cli-admission.d.ts.map +1 -1
  46. package/dist/services/heartbeat/local-cli-admission.js +15 -1
  47. package/dist/services/heartbeat/local-cli-admission.js.map +1 -1
  48. package/dist/services/heartbeat/local-cli-admission.test.js +3 -1
  49. package/dist/services/heartbeat/local-cli-admission.test.js.map +1 -1
  50. package/dist/services/heartbeat/local-run-memory-gate.d.ts +41 -0
  51. package/dist/services/heartbeat/local-run-memory-gate.d.ts.map +1 -0
  52. package/dist/services/heartbeat/local-run-memory-gate.js +158 -0
  53. package/dist/services/heartbeat/local-run-memory-gate.js.map +1 -0
  54. package/dist/services/heartbeat/local-run-memory-gate.test.d.ts +2 -0
  55. package/dist/services/heartbeat/local-run-memory-gate.test.d.ts.map +1 -0
  56. package/dist/services/heartbeat/local-run-memory-gate.test.js +152 -0
  57. package/dist/services/heartbeat/local-run-memory-gate.test.js.map +1 -0
  58. package/dist/services/heartbeat/queue.d.ts +2 -0
  59. package/dist/services/heartbeat/queue.d.ts.map +1 -1
  60. package/dist/services/heartbeat/queue.js +25 -0
  61. package/dist/services/heartbeat/queue.js.map +1 -1
  62. package/dist/services/heartbeat/retries.d.ts +29 -22
  63. package/dist/services/heartbeat/retries.d.ts.map +1 -1
  64. package/dist/services/heartbeat/retries.js +45 -13
  65. package/dist/services/heartbeat/retries.js.map +1 -1
  66. package/dist/services/heartbeat/workspaces.d.ts.map +1 -1
  67. package/dist/services/heartbeat/workspaces.js +2 -1
  68. package/dist/services/heartbeat/workspaces.js.map +1 -1
  69. package/dist/services/heartbeat.d.ts +8 -8
  70. package/dist/services/heartbeat.d.ts.map +1 -1
  71. package/dist/services/heartbeat.js +3 -5
  72. package/dist/services/heartbeat.js.map +1 -1
  73. package/dist/services/issue-thread-interactions.d.ts.map +1 -1
  74. package/dist/services/issue-thread-interactions.js +13 -0
  75. package/dist/services/issue-thread-interactions.js.map +1 -1
  76. package/dist/services/native-runtime/native-session-executor.d.ts +2 -2
  77. package/dist/services/native-runtime/native-session-executor.d.ts.map +1 -1
  78. package/dist/services/native-runtime/native-session-resume.test.js +17 -0
  79. package/dist/services/native-runtime/native-session-resume.test.js.map +1 -1
  80. package/dist/services/native-runtime/runner-api-client.d.ts +3 -3
  81. package/dist/services/native-runtime/runner-api-client.d.ts.map +1 -1
  82. package/dist/services/openwa/guidance.d.ts +3 -1
  83. package/dist/services/openwa/guidance.d.ts.map +1 -1
  84. package/dist/services/openwa/guidance.js +25 -8
  85. package/dist/services/openwa/guidance.js.map +1 -1
  86. package/dist/services/openwa/owners.d.ts +1 -0
  87. package/dist/services/openwa/owners.d.ts.map +1 -1
  88. package/dist/services/openwa/owners.js +8 -1
  89. package/dist/services/openwa/owners.js.map +1 -1
  90. package/dist/services/openwa/pending-cards.d.ts +46 -0
  91. package/dist/services/openwa/pending-cards.d.ts.map +1 -0
  92. package/dist/services/openwa/pending-cards.js +307 -0
  93. package/dist/services/openwa/pending-cards.js.map +1 -0
  94. package/dist/services/openwa/session-health.d.ts +3 -1
  95. package/dist/services/openwa/session-health.d.ts.map +1 -1
  96. package/dist/services/openwa/session-health.js +18 -4
  97. package/dist/services/openwa/session-health.js.map +1 -1
  98. package/dist/services/owner-decision-relay.d.ts +12 -2
  99. package/dist/services/owner-decision-relay.d.ts.map +1 -1
  100. package/dist/services/owner-decision-relay.js +57 -18
  101. package/dist/services/owner-decision-relay.js.map +1 -1
  102. package/dist/services/pre-dispatch-review-wait.d.ts +2 -0
  103. package/dist/services/pre-dispatch-review-wait.d.ts.map +1 -1
  104. package/dist/services/pre-dispatch-review-wait.js +11 -7
  105. package/dist/services/pre-dispatch-review-wait.js.map +1 -1
  106. package/dist/services/recovery/service.d.ts.map +1 -1
  107. package/dist/services/recovery/service.js +9 -5
  108. package/dist/services/recovery/service.js.map +1 -1
  109. package/dist/services/recovery/stranded-notice.d.ts +1 -0
  110. package/dist/services/recovery/stranded-notice.d.ts.map +1 -1
  111. package/dist/services/recovery/stranded-notice.js +10 -0
  112. package/dist/services/recovery/stranded-notice.js.map +1 -1
  113. package/dist/services/status-card-update-engine.d.ts +4 -4
  114. package/dist/services/status-card-update-engine.d.ts.map +1 -1
  115. package/dist/services/task-watchdogs.d.ts +1 -1
  116. package/dist/services/tool-gateway.d.ts +1 -1
  117. package/dist/services/tool-gateway.d.ts.map +1 -1
  118. package/dist/services/voice/voice-inbound-service.d.ts +3 -3
  119. package/package.json +21 -21
  120. package/skills/openwa/SKILL.md +8 -2
  121. package/skills/paperclip/SKILL.md +1 -1
  122. package/ui-dist/assets/{AgentAvatar-Cy7DadMK.js → AgentAvatar-rZFrG-iC.js} +1 -1
  123. package/ui-dist/assets/{Agents.production-BJyEbiQk.js → Agents.production-uSJFITvi.js} +2 -2
  124. package/ui-dist/assets/{BreadcrumbContext-CIC8QOSJ.js → BreadcrumbContext-za5ULJSm.js} +2 -2
  125. package/ui-dist/assets/{CompanyActivity.production-Dp4ldx4P.js → CompanyActivity.production-fp0biOpS.js} +1 -1
  126. package/ui-dist/assets/{CompanyExport-BBAKbfHg.js → CompanyExport-IOz8ZA8x.js} +2 -2
  127. package/ui-dist/assets/{CompanySkills.production-XuOHqAg6.js → CompanySkills.production-CffIe8qr.js} +2 -2
  128. package/ui-dist/assets/{EmptyState-Dvu_j1Dk.js → EmptyState-BJJPfoYe.js} +1 -1
  129. package/ui-dist/assets/{MarkdownBody-Dh6kczcO.js → MarkdownBody-C4hEmflc.js} +3 -3
  130. package/ui-dist/assets/{MarkdownEditor-nPcj3w4g.js → MarkdownEditor-DBC64_fF.js} +1 -1
  131. package/ui-dist/assets/{OrgChart.production-B-U1K3BO.js → OrgChart.production-CjZIrTL_.js} +1 -1
  132. package/ui-dist/assets/{PageSkeleton-B858kNMV.js → PageSkeleton-D-vmgL0l.js} +1 -1
  133. package/ui-dist/assets/{RoutineDetail.production-DR37hdFP.js → RoutineDetail.production-1l07aNMo.js} +1 -1
  134. package/ui-dist/assets/{RoutineRunVariablesDialog-TmqPj_PL.js → RoutineRunVariablesDialog-B8lrS2FZ.js} +2 -2
  135. package/ui-dist/assets/{Routines.production-D4Jwvus7.js → Routines.production-D87FWVo9.js} +1 -1
  136. package/ui-dist/assets/{StatusIcon-PIDWeOS3.js → StatusIcon-t9uPRpE5.js} +1 -1
  137. package/ui-dist/assets/{ToastContext-B6w8XXdu.js → ToastContext-fIh2QNZJ.js} +1 -1
  138. package/ui-dist/assets/{agent-avatar-url-Dp-4-Emx.js → agent-avatar-url-BHbCsFus.js} +21 -21
  139. package/ui-dist/assets/{alert-dialog-Cgn1_GT7.js → alert-dialog-BQZoePYb.js} +1 -1
  140. package/ui-dist/assets/{arrow-right-Dblp-MTW.js → arrow-right-BzMD-DNO.js} +1 -1
  141. package/ui-dist/assets/{badge-B6lcLGFG.js → badge-dcpUmKh9.js} +1 -1
  142. package/ui-dist/assets/{bot-BIsZWSPn.js → bot-DoEo7gOa.js} +1 -1
  143. package/ui-dist/assets/{card-Byu34cBe.js → card-mNYVrsX_.js} +1 -1
  144. package/ui-dist/assets/{check-AN9f-5s7.js → check-BkartoVa.js} +1 -1
  145. package/ui-dist/assets/{checkbox-DVrU8RYw.js → checkbox-JP8qevXt.js} +1 -1
  146. package/ui-dist/assets/{clipboard-Bj1LrAus.js → clipboard-Bz_p8QHy.js} +1 -1
  147. package/ui-dist/assets/{company-members-B3Kl56Wi.js → company-members-rOuXjQRg.js} +1 -1
  148. package/ui-dist/assets/{definition-DSY4nExe.js → definition-dyCYbBA7.js} +1 -1
  149. package/ui-dist/assets/{dist-qobNlkwf.js → dist-CI0Tr-Id.js} +1 -1
  150. package/ui-dist/assets/{dist-BoN0lntx.js → dist-CMclhGEN.js} +1 -1
  151. package/ui-dist/assets/{dist-DNeg6Olm.js → dist-D2Bp7-l0.js} +1 -1
  152. package/ui-dist/assets/{environments-CnsaRGwX.js → environments-BIMSsOem.js} +1 -1
  153. package/ui-dist/assets/{external-link-DJ5KXpF5.js → external-link-CUBJORqK.js} +1 -1
  154. package/ui-dist/assets/{file-text-BqJfYVg5.js → file-text-CTqnIoYc.js} +1 -1
  155. package/ui-dist/assets/{health-DXJ-aWLi.js → health-DzPZ7RTI.js} +1 -1
  156. package/ui-dist/assets/{heartbeats-BoD7FLml.js → heartbeats-cR8PFCO4.js} +1 -1
  157. package/ui-dist/assets/{index-BVwUuuxT.js → index-BQ6k9M0h.js} +159 -159
  158. package/ui-dist/assets/{input-BGjNwUvf.js → input-DWDEF0_4.js} +1 -1
  159. package/ui-dist/assets/{label-CKJXPwWx.js → label-D1IFWYWZ.js} +2 -2
  160. package/ui-dist/assets/{mention-chips-BovBgzq0.js → mention-chips-tvFPtLxM.js} +1 -1
  161. package/ui-dist/assets/{rotate-ccw-B7ntLtp4.js → rotate-ccw-CIoC0n9j.js} +1 -1
  162. package/ui-dist/assets/{select-DIma4_VX.js → select-DDOAq1-R.js} +1 -1
  163. package/ui-dist/assets/{sheet-C9tsiOQC.js → sheet-De2PrRU3.js} +1 -1
  164. package/ui-dist/assets/skeleton-BBZG3C3Z.js +1 -0
  165. package/ui-dist/assets/{tabs-nc-7quf8.js → tabs-DNtO_nZK.js} +1 -1
  166. package/ui-dist/assets/{use-adapter-capabilities-DiUfxjZz.js → use-adapter-capabilities-BHmVN8eS.js} +1 -1
  167. package/ui-dist/assets/{use-copy-action-RWCAx8p8.js → use-copy-action-CEHlaOnX.js} +1 -1
  168. package/ui-dist/assets/{useHiddenSettings-Be7MTSIM.js → useHiddenSettings-tTY86zjx.js} +1 -1
  169. package/ui-dist/index.html +39 -39
  170. package/ui-dist/sw.js +1 -1
  171. package/ui-dist/assets/skeleton-CyS6Uq5n.js +0 -1
@@ -8,6 +8,7 @@ export declare const CHAT_ACTION_QUEUES: {
8
8
  readonly slash_task_start: "chat-task-starts";
9
9
  readonly receipt_reaction: "chat-receipt-reactions";
10
10
  readonly slack_session_stop: "chat-session-stops";
11
+ readonly openwa_pending_card: "chat-openwa-pending-cards";
11
12
  };
12
13
  export type ScheduledChatAction = keyof typeof CHAT_ACTION_QUEUES;
13
14
  export declare function notifyChatActionWork(tx: object, kind: ScheduledChatAction): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"chat-work-notifications.d.ts","sourceRoot":"","sources":["../../src/services/chat-work-notifications.ts"],"names":[],"mappings":"AAEA,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE;AAED,eAAO,MAAM,kBAAkB;aAC7B,eAAe;aACf,sBAAsB;aACtB,kBAAkB;aAClB,mBAAmB;aACnB,gBAAgB;aAChB,gBAAgB;aAChB,kBAAkB;CACV,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAElE,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/F;AAED,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE"}
1
+ {"version":3,"file":"chat-work-notifications.d.ts","sourceRoot":"","sources":["../../src/services/chat-work-notifications.ts"],"names":[],"mappings":"AAEA,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE;AAED,eAAO,MAAM,kBAAkB;aAC7B,eAAe;aACf,sBAAsB;aACtB,kBAAkB;aAClB,mBAAmB;aACnB,gBAAgB;aAChB,gBAAgB;aAChB,kBAAkB;aAClB,mBAAmB;CACX,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAElE,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/F;AAED,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE"}
@@ -15,6 +15,7 @@ export const CHAT_ACTION_QUEUES = {
15
15
  slash_task_start: DELIVERY_QUEUES.chatTaskStarts,
16
16
  receipt_reaction: DELIVERY_QUEUES.chatReceiptReactions,
17
17
  slack_session_stop: DELIVERY_QUEUES.chatSessionStops,
18
+ openwa_pending_card: DELIVERY_QUEUES.chatOpenwaPendingCards,
18
19
  };
19
20
  export async function notifyChatActionWork(tx, kind) {
20
21
  await notifyDeliveryWork(tx, CHAT_ACTION_QUEUES[kind]);
@@ -1 +1 @@
1
- {"version":3,"file":"chat-work-notifications.js","sourceRoot":"","sources":["../../src/services/chat-work-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAU;IACrD,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAAU;IACxD,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC/D,yEAAyE;IACzE,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,eAAe,EAAE,eAAe,CAAC,mBAAmB;IACpD,sBAAsB,EAAE,eAAe,CAAC,iBAAiB;IACzD,kBAAkB,EAAE,eAAe,CAAC,gBAAgB;IACpD,mBAAmB,EAAE,eAAe,CAAC,iBAAiB;IACtD,gBAAgB,EAAE,eAAe,CAAC,cAAc;IAChD,gBAAgB,EAAE,eAAe,CAAC,oBAAoB;IACtD,kBAAkB,EAAE,eAAe,CAAC,gBAAgB;CAC5C,CAAC;AAGX,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAU,EAAE,IAAyB;IAC9E,MAAM,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAU;IACzD,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAU;IACrD,MAAM,sBAAsB,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,yBAAyB,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAAE,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3F,MAAM,0BAA0B,CAAC,EAAE,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"chat-work-notifications.js","sourceRoot":"","sources":["../../src/services/chat-work-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAU;IACrD,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAAU;IACxD,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC/D,yEAAyE;IACzE,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,eAAe,EAAE,eAAe,CAAC,mBAAmB;IACpD,sBAAsB,EAAE,eAAe,CAAC,iBAAiB;IACzD,kBAAkB,EAAE,eAAe,CAAC,gBAAgB;IACpD,mBAAmB,EAAE,eAAe,CAAC,iBAAiB;IACtD,gBAAgB,EAAE,eAAe,CAAC,cAAc;IAChD,gBAAgB,EAAE,eAAe,CAAC,oBAAoB;IACtD,kBAAkB,EAAE,eAAe,CAAC,gBAAgB;IACpD,mBAAmB,EAAE,eAAe,CAAC,sBAAsB;CACnD,CAAC;AAGX,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAU,EAAE,IAAyB;IAC9E,MAAM,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAU;IACzD,MAAM,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAU;IACrD,MAAM,sBAAsB,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,yBAAyB,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAAE,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3F,MAAM,0BAA0B,CAAC,EAAE,CAAC,CAAC;AACvC,CAAC"}
@@ -21,18 +21,18 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
21
21
  receipt: Record<string, unknown> | null;
22
22
  instruction?: string | undefined;
23
23
  } | {
24
- instruction?: undefined;
25
24
  actionId: string;
26
25
  state: string;
26
+ instruction?: undefined;
27
27
  } | {
28
28
  actionId: string;
29
29
  state: string;
30
30
  instruction: string;
31
31
  } | {
32
- id?: undefined;
33
32
  channels: SlackObject[];
34
33
  nextCursor: string;
35
34
  coverage: string;
35
+ id?: undefined;
36
36
  name?: undefined;
37
37
  displayName?: undefined;
38
38
  realName?: undefined;
@@ -87,8 +87,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
87
87
  pins?: undefined;
88
88
  bookmarks?: undefined;
89
89
  } | {
90
- id?: undefined;
91
90
  channels?: undefined;
91
+ id?: undefined;
92
92
  name?: undefined;
93
93
  displayName?: undefined;
94
94
  realName?: undefined;
@@ -116,8 +116,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
116
116
  pins?: undefined;
117
117
  bookmarks?: undefined;
118
118
  } | {
119
- id?: undefined;
120
119
  channels?: undefined;
120
+ id?: undefined;
121
121
  name?: undefined;
122
122
  displayName?: undefined;
123
123
  realName?: undefined;
@@ -145,8 +145,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
145
145
  pins?: undefined;
146
146
  bookmarks?: undefined;
147
147
  } | {
148
- id?: undefined;
149
148
  channels?: undefined;
149
+ id?: undefined;
150
150
  name?: undefined;
151
151
  displayName?: undefined;
152
152
  realName?: undefined;
@@ -182,8 +182,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
182
182
  pins?: undefined;
183
183
  bookmarks?: undefined;
184
184
  } | {
185
- id?: undefined;
186
185
  channels?: undefined;
186
+ id?: undefined;
187
187
  name?: undefined;
188
188
  displayName?: undefined;
189
189
  realName?: undefined;
@@ -211,8 +211,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
211
211
  pins?: undefined;
212
212
  bookmarks?: undefined;
213
213
  } | {
214
- id?: undefined;
215
214
  channels?: undefined;
215
+ id?: undefined;
216
216
  name?: undefined;
217
217
  displayName?: undefined;
218
218
  realName?: undefined;
@@ -254,8 +254,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
254
254
  pins?: undefined;
255
255
  bookmarks?: undefined;
256
256
  } | {
257
- id?: undefined;
258
257
  channels?: undefined;
258
+ id?: undefined;
259
259
  name?: undefined;
260
260
  displayName?: undefined;
261
261
  realName?: undefined;
@@ -283,8 +283,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
283
283
  pins?: undefined;
284
284
  bookmarks?: undefined;
285
285
  } | {
286
- id?: undefined;
287
286
  channels?: undefined;
287
+ id?: undefined;
288
288
  name?: undefined;
289
289
  displayName?: undefined;
290
290
  realName?: undefined;
@@ -312,8 +312,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
312
312
  pins?: undefined;
313
313
  bookmarks?: undefined;
314
314
  } | {
315
- id?: undefined;
316
315
  channels?: undefined;
316
+ id?: undefined;
317
317
  name?: undefined;
318
318
  displayName?: undefined;
319
319
  realName?: undefined;
@@ -341,8 +341,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
341
341
  pins?: undefined;
342
342
  bookmarks?: undefined;
343
343
  } | {
344
- id?: undefined;
345
344
  channels?: undefined;
345
+ id?: undefined;
346
346
  name?: undefined;
347
347
  displayName?: undefined;
348
348
  realName?: undefined;
@@ -377,8 +377,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
377
377
  pins?: undefined;
378
378
  bookmarks?: undefined;
379
379
  } | {
380
- id?: undefined;
381
380
  channels?: undefined;
381
+ id?: undefined;
382
382
  name?: undefined;
383
383
  displayName?: undefined;
384
384
  realName?: undefined;
@@ -406,8 +406,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
406
406
  pins?: undefined;
407
407
  bookmarks?: undefined;
408
408
  } | {
409
- id?: undefined;
410
409
  channels?: undefined;
410
+ id?: undefined;
411
411
  name?: undefined;
412
412
  displayName?: undefined;
413
413
  realName?: undefined;
@@ -452,8 +452,8 @@ export declare function executeSlackTool(db: Db, binding: SlackTaskBinding, name
452
452
  }[];
453
453
  bookmarks?: undefined;
454
454
  } | {
455
- id?: undefined;
456
455
  channels?: undefined;
456
+ id?: undefined;
457
457
  name?: undefined;
458
458
  displayName?: undefined;
459
459
  realName?: undefined;
@@ -0,0 +1,19 @@
1
+ import type { Request } from "express";
2
+ import { type Db } from "@tickernelz/paperclip-pro-db";
3
+ import type { AttentionFeedQuery, DeskDecisionList } from "@tickernelz/paperclip-pro-shared";
4
+ export declare const DECISIONS_DESK_FORBIDDEN_CODE = "decisions_desk_forbidden";
5
+ export declare function resolveDeskReader(db: Db, input: {
6
+ companyId: string;
7
+ actor: Request["actor"];
8
+ }): Promise<string>;
9
+ export declare function canReadDesk(db: Db, input: {
10
+ companyId: string;
11
+ actor: Request["actor"];
12
+ }): Promise<boolean>;
13
+ export declare function listDeskDecisions(db: Db, input: {
14
+ companyId: string;
15
+ actor: Request["actor"];
16
+ userId: string;
17
+ query: AttentionFeedQuery;
18
+ }): Promise<DeskDecisionList>;
19
+ //# sourceMappingURL=decision-desk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-desk.d.ts","sourceRoot":"","sources":["../../src/services/decision-desk.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAgC,KAAK,EAAE,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAA+B,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAQ1H,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AA+CxE,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BtH;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjH;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GAC/F,OAAO,CAAC,gBAAgB,CAAC,CA6C3B"}
@@ -0,0 +1,135 @@
1
+ import { and, eq, inArray } from "drizzle-orm";
2
+ import { heartbeatRuns, issueComments } from "@tickernelz/paperclip-pro-db";
3
+ import { isCompanyOwnerAgent } from "@tickernelz/paperclip-pro-shared";
4
+ import { forbidden, HttpError } from "../errors.js";
5
+ import { attentionService } from "./attention.js";
6
+ import { boardAuthService } from "./board-auth.js";
7
+ import { openwaRunProfile, readOpenwaRunContext } from "./openwa/authority.js";
8
+ import { isOpenAttentionItem, relayStateByItem } from "./owner-decision-relay.js";
9
+ export const DECISIONS_DESK_FORBIDDEN_CODE = "decisions_desk_forbidden";
10
+ function denied(reason, message) {
11
+ return forbidden(message, { code: DECISIONS_DESK_FORBIDDEN_CODE, reason });
12
+ }
13
+ function record(value) {
14
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
15
+ }
16
+ function wakeCommentIds(context) {
17
+ const ids = Array.isArray(context.wakeCommentIds) ? context.wakeCommentIds : [];
18
+ return [...ids, context.wakeCommentId].filter((id) => typeof id === "string" && id.trim().length > 0);
19
+ }
20
+ async function wokenByOwnComment(db, input) {
21
+ if (input.commentIds.length === 0)
22
+ return false;
23
+ const comments = await db
24
+ .select({
25
+ authorType: issueComments.authorType,
26
+ authorUserId: issueComments.authorUserId,
27
+ authorAgentId: issueComments.authorAgentId,
28
+ createdByRunId: issueComments.createdByRunId,
29
+ deletedAt: issueComments.deletedAt,
30
+ sourceTrust: issueComments.sourceTrust,
31
+ })
32
+ .from(issueComments)
33
+ .where(and(eq(issueComments.companyId, input.companyId), inArray(issueComments.id, input.commentIds)));
34
+ return comments.some((comment) => !comment.deletedAt &&
35
+ comment.authorType === "user" &&
36
+ comment.authorUserId === input.userId &&
37
+ !comment.authorAgentId &&
38
+ !comment.createdByRunId &&
39
+ comment.sourceTrust?.disposition !== "quarantined");
40
+ }
41
+ export async function resolveDeskReader(db, input) {
42
+ const { actor, companyId } = input;
43
+ if (actor.type === "board") {
44
+ if (!actor.userId)
45
+ throw denied("board_user_required", "Board user context required");
46
+ return actor.userId;
47
+ }
48
+ if (actor.type !== "agent")
49
+ throw denied("owner_context_required", "The Decisions desk is read on behalf of an owner");
50
+ const userId = actor.onBehalfOfUserId?.trim();
51
+ if (!userId)
52
+ throw denied("owner_context_required", "The Decisions desk is read on behalf of an owner; this agent has no responsible user");
53
+ if (!actor.runId)
54
+ throw denied("run_required", "The Decisions desk is read from an owner's run, not from a bare agent key");
55
+ const [run] = await db
56
+ .select({ id: heartbeatRuns.id, companyId: heartbeatRuns.companyId, agentId: heartbeatRuns.agentId, status: heartbeatRuns.status, contextSnapshot: heartbeatRuns.contextSnapshot })
57
+ .from(heartbeatRuns)
58
+ .where(and(eq(heartbeatRuns.id, actor.runId), eq(heartbeatRuns.companyId, companyId)))
59
+ .limit(1);
60
+ if (!run || run.agentId !== actor.agentId || run.status !== "running") {
61
+ throw denied("run_not_active", "Only the agent's own active run can read the Decisions desk");
62
+ }
63
+ const context = record(run.contextSnapshot);
64
+ const openwa = readOpenwaRunContext(context);
65
+ const profile = await openwaRunProfile(db, { id: run.id, companyId: run.companyId, contextSnapshot: context });
66
+ const notOwnerRun = () => denied("not_owner_run", "Only a full-profile run started by the owner's own message can read the Decisions desk");
67
+ if (profile !== "full" || (openwa && openwa.triggerClass !== "owner"))
68
+ throw notOwnerRun();
69
+ if (!openwa && !isCompanyOwnerAgent(actor) && !(await wokenByOwnComment(db, { companyId, userId, commentIds: wakeCommentIds(context) }))) {
70
+ throw notOwnerRun();
71
+ }
72
+ const access = await boardAuthService(db).resolveBoardAccess(userId);
73
+ if (!access.user || (!access.isInstanceAdmin && !access.companyIds.includes(companyId))) {
74
+ throw denied("owner_not_member", "The responsible user is not an active board member of this company");
75
+ }
76
+ return userId;
77
+ }
78
+ export async function canReadDesk(db, input) {
79
+ try {
80
+ await resolveDeskReader(db, input);
81
+ return true;
82
+ }
83
+ catch (error) {
84
+ if (error instanceof HttpError && error.status === 403)
85
+ return false;
86
+ throw error;
87
+ }
88
+ }
89
+ export async function listDeskDecisions(db, input) {
90
+ const feed = await attentionService(db).list(input.companyId, {
91
+ ...input.query,
92
+ userId: input.userId,
93
+ actor: input.actor,
94
+ allowUnscopedAll: input.query.all,
95
+ });
96
+ const relay = await relayStateByItem(db, input.companyId, feed.items);
97
+ const generatedAt = Date.parse(feed.generatedAt);
98
+ const items = feed.items.map((item) => {
99
+ const issue = item.relatedIssue ?? (item.subject.kind === "issue" ? item.subject : null);
100
+ const state = relay.get(item.id);
101
+ return {
102
+ sourceKind: item.sourceKind,
103
+ id: item.subject.id,
104
+ severity: item.severity,
105
+ rank: item.rank,
106
+ issueId: issue?.id ?? null,
107
+ issueIdentifier: issue?.identifier ?? null,
108
+ issueTitle: issue?.title ?? null,
109
+ title: item.subject.title,
110
+ whyNow: item.whyNow,
111
+ createdAt: item.createdAt,
112
+ activityAt: item.activityAt,
113
+ ageSeconds: Math.max(0, Math.floor((generatedAt - Date.parse(item.createdAt)) / 1000)),
114
+ decideBy: item.decideBy,
115
+ entryRule: item.entryRule,
116
+ exitRule: item.exitRule,
117
+ href: item.subject.href,
118
+ open: isOpenAttentionItem(item, generatedAt),
119
+ snoozedUntil: item.snoozedUntil,
120
+ archivedAt: item.archivedAt,
121
+ relayable: state?.relayable ?? false,
122
+ relayBlockedReason: state?.relayBlockedReason ?? null,
123
+ };
124
+ });
125
+ return {
126
+ companyId: feed.companyId,
127
+ scope: "desk",
128
+ generatedAt: feed.generatedAt,
129
+ totalCount: feed.totalCount,
130
+ countsBySourceKind: feed.countsBySourceKind,
131
+ nextCursor: feed.nextCursor,
132
+ items,
133
+ };
134
+ }
135
+ //# sourceMappingURL=decision-desk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-desk.js","sourceRoot":"","sources":["../../src/services/decision-desk.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export declare const DELIVERY_QUEUES: {
8
8
  readonly chatGitHubIngress: "chat-github-ingress";
9
9
  readonly chatSessionSyncs: "chat-session-syncs";
10
10
  readonly chatVerification: "chat-verification";
11
+ readonly chatOpenwaPendingCards: "chat-openwa-pending-cards";
11
12
  readonly chatInbound: "chat-inbound";
12
13
  readonly chatPublications: "chat-publications";
13
14
  readonly chatReceipts: "chat-slack-receipts";
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-work-notifications.d.ts","sourceRoot":"","sources":["../../src/services/delivery-work-notifications.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,eAAO,MAAM,eAAe;aAC1B,iBAAiB,EAAE,qBAAqB;aACxC,cAAc,EAAE,kBAAkB;aAClC,oBAAoB,EAAE,wBAAwB;aAC9C,gBAAgB,EAAE,oBAAoB;aACtC,mBAAmB,EAAE,uBAAuB;aAC5C,iBAAiB,EAAE,qBAAqB;aACxC,gBAAgB,EAAE,oBAAoB;aACtC,gBAAgB,EAAE,mBAAmB;aACrC,WAAW,EAAE,cAAc;aAC3B,gBAAgB,EAAE,mBAAmB;aACrC,YAAY,EAAE,qBAAqB;aACnC,OAAO,EAAE,aAAa;aACtB,KAAK,EAAE,gBAAgB;aACvB,YAAY,EAAE,gBAAgB;aAC9B,QAAQ,EAAE,kBAAkB;aAC5B,cAAc,EAAE,kBAAkB;aAClC,UAAU,EAAE,0BAA0B;aACtC,QAAQ,EAAE,oBAAoB;aAC9B,UAAU,EAAE,sBAAsB;CAC1B,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEjF,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAGD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAIvG"}
1
+ {"version":3,"file":"delivery-work-notifications.d.ts","sourceRoot":"","sources":["../../src/services/delivery-work-notifications.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,eAAO,MAAM,eAAe;aAC1B,iBAAiB,EAAE,qBAAqB;aACxC,cAAc,EAAE,kBAAkB;aAClC,oBAAoB,EAAE,wBAAwB;aAC9C,gBAAgB,EAAE,oBAAoB;aACtC,mBAAmB,EAAE,uBAAuB;aAC5C,iBAAiB,EAAE,qBAAqB;aACxC,gBAAgB,EAAE,oBAAoB;aACtC,gBAAgB,EAAE,mBAAmB;aACrC,sBAAsB,EAAE,2BAA2B;aACnD,WAAW,EAAE,cAAc;aAC3B,gBAAgB,EAAE,mBAAmB;aACrC,YAAY,EAAE,qBAAqB;aACnC,OAAO,EAAE,aAAa;aACtB,KAAK,EAAE,gBAAgB;aACvB,YAAY,EAAE,gBAAgB;aAC9B,QAAQ,EAAE,kBAAkB;aAC5B,cAAc,EAAE,kBAAkB;aAClC,UAAU,EAAE,0BAA0B;aACtC,QAAQ,EAAE,oBAAoB;aAC9B,UAAU,EAAE,sBAAsB;CAC1B,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEjF,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAGD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAIvG"}
@@ -9,6 +9,7 @@ export const DELIVERY_QUEUES = {
9
9
  chatGitHubIngress: "chat-github-ingress",
10
10
  chatSessionSyncs: "chat-session-syncs",
11
11
  chatVerification: "chat-verification",
12
+ chatOpenwaPendingCards: "chat-openwa-pending-cards",
12
13
  chatInbound: "chat-inbound",
13
14
  chatPublications: "chat-publications",
14
15
  chatReceipts: "chat-slack-receipts",
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-work-notifications.js","sourceRoot":"","sources":["../../src/services/delivery-work-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAEzF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iBAAiB,EAAE,qBAAqB;IACxC,cAAc,EAAE,kBAAkB;IAClC,oBAAoB,EAAE,wBAAwB;IAC9C,gBAAgB,EAAE,oBAAoB;IACtC,mBAAmB,EAAE,uBAAuB;IAC5C,iBAAiB,EAAE,qBAAqB;IACxC,gBAAgB,EAAE,oBAAoB;IACtC,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,cAAc;IAC3B,gBAAgB,EAAE,mBAAmB;IACrC,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,gBAAgB;IACvB,YAAY,EAAE,gBAAgB;IAC9B,QAAQ,EAAE,kBAAkB;IAC5B,cAAc,EAAE,kBAAkB;IAClC,UAAU,EAAE,0BAA0B;IACtC,QAAQ,EAAE,oBAAoB;IAC9B,UAAU,EAAE,sBAAsB;CAC1B,CAAC;AAGX,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,KAAoB;IAChF,MAAM,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AACD,gFAAgF;AAChF,8EAA8E;AAC9E,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,KAAoB,EAAE,IAAgB;IACzF,OAAO,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;QACjD,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"delivery-work-notifications.js","sourceRoot":"","sources":["../../src/services/delivery-work-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAEzF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iBAAiB,EAAE,qBAAqB;IACxC,cAAc,EAAE,kBAAkB;IAClC,oBAAoB,EAAE,wBAAwB;IAC9C,gBAAgB,EAAE,oBAAoB;IACtC,mBAAmB,EAAE,uBAAuB;IAC5C,iBAAiB,EAAE,qBAAqB;IACxC,gBAAgB,EAAE,oBAAoB;IACtC,gBAAgB,EAAE,mBAAmB;IACrC,sBAAsB,EAAE,2BAA2B;IACnD,WAAW,EAAE,cAAc;IAC3B,gBAAgB,EAAE,mBAAmB;IACrC,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,gBAAgB;IACvB,YAAY,EAAE,gBAAgB;IAC9B,QAAQ,EAAE,kBAAkB;IAC5B,cAAc,EAAE,kBAAkB;IAClC,UAAU,EAAE,0BAA0B;IACtC,QAAQ,EAAE,oBAAoB;IAC9B,UAAU,EAAE,sBAAsB;CAC1B,CAAC;AAGX,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,KAAoB;IAChF,MAAM,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AACD,gFAAgF;AAChF,8EAA8E;AAC9E,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,KAAoB,EAAE,IAAgB;IACzF,OAAO,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;QACjD,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -15,6 +15,9 @@ export declare function executionRetryAccounting(run: RetryRun): ExecutionRetryA
15
15
  export declare function executionFailureRetryCount(run: RetryRun): number;
16
16
  export declare function executionRetryAttemptCount(run: RetryRun, reason: string): number;
17
17
  export declare function accountingForScheduledRetry(run: RetryRun, reason: string, attempt: number): ExecutionRetryAccounting;
18
+ export declare function isServerInterruptionRun(run: {
19
+ errorCode?: string | null;
20
+ }): boolean;
18
21
  export declare function processLossContinuationCount(run: {
19
22
  contextSnapshot?: Record<string, unknown> | null;
20
23
  }): number;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-recovery-attempt.d.ts","sourceRoot":"","sources":["../../src/services/execution-recovery-attempt.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG;IACd,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF;+EAC+E;AAC/E,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAkCD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,GAAG,wBAAwB,CAShF;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMhF;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,wBAAwB,CAKpH;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClD,GAAG,MAAM,CAGT"}
1
+ {"version":3,"file":"execution-recovery-attempt.d.ts","sourceRoot":"","sources":["../../src/services/execution-recovery-attempt.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG;IACd,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF;+EAC+E;AAC/E,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,CAAC,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAkCD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,GAAG,wBAAwB,CAShF;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMhF;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,wBAAwB,CAKpH;AAOD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAEnF;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClD,GAAG,MAAM,CAGT"}
@@ -61,6 +61,13 @@ export function accountingForScheduledRetry(run, reason, attempt) {
61
61
  accounting.failureRetries = attempt;
62
62
  return accounting;
63
63
  }
64
+ const SERVER_INTERRUPTION_ERROR_CODES = {
65
+ orphaned_running_run: true,
66
+ server_shutdown_interrupted: true,
67
+ };
68
+ export function isServerInterruptionRun(run) {
69
+ return SERVER_INTERRUPTION_ERROR_CODES[run.errorCode ?? ""] === true;
70
+ }
64
71
  export function processLossContinuationCount(run) {
65
72
  const count = run.contextSnapshot?.processLossContinuations;
66
73
  return typeof count === "number" && Number.isInteger(count) && count >= 0 ? count : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-recovery-attempt.js","sourceRoot":"","sources":["../../src/services/execution-recovery-attempt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution-recovery-attempt.js","sourceRoot":"","sources":["../../src/services/execution-recovery-attempt.ts"],"names":[],"mappings":"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"}
@@ -1024,16 +1024,15 @@ const support = await getEmbeddedPostgresTestSupport();
1024
1024
  expect(queueReceipt).toMatchObject({ status: "coalesced", runId: successors[0].id });
1025
1025
  expect(await getExecutionBlocker(db, f.companyId, f.issueId)).toBeNull();
1026
1026
  });
1027
- it.each([false, true].flatMap(receipt => ["resolved", "dispatching", "adapter", "missing_boot", "current_boot", "missing_lease", "live_lease", "receipt", "launch", "invoked", "coordinator", "cleanup", "remote"].map(kind => ({ receipt, kind }))))("holds historical native preparation with contradictory or incomplete $kind evidence (receipt: $receipt)", async ({ receipt, kind }) => {
1027
+ it.each([false, true].flatMap(receipt => ["resolved", "dispatching", "missing_stage", "missing_boot", "current_boot", "missing_lease", "live_lease", "launch", "invoked", "coordinator", "cleanup", "remote"].map(kind => ({ receipt, kind }))))("holds historical native preparation with contradictory or incomplete $kind evidence (receipt: $receipt)", async ({ receipt, kind }) => {
1028
1028
  const f = await seedHistoricalCancelledPreparation(receipt);
1029
1029
  const patch = kind === "resolved" ? { runtimeModeResolvedAt: new Date() }
1030
1030
  : kind === "dispatching" ? { executionStage: "dispatching" }
1031
- : kind === "adapter" ? { runnerProfileJson: { adapterDispatch: { adapterType: "process" } } }
1031
+ : kind === "missing_stage" ? { executionStage: null }
1032
1032
  : kind === "missing_boot" ? { controllerBootId: null }
1033
1033
  : kind === "current_boot" ? { controllerBootId: legacyControllerBootId }
1034
1034
  : kind === "missing_lease" ? { controllerLeaseExpiresAt: null }
1035
- : kind === "live_lease" ? { controllerLeaseExpiresAt: new Date(Date.now() + 60_000) }
1036
- : kind === "receipt" ? { resultJson: { startupCancellation: { beforeNativeSelection: false } } } : {};
1035
+ : kind === "live_lease" ? { controllerLeaseExpiresAt: new Date(Date.now() + 60_000) } : {};
1037
1036
  if (Object.keys(patch).length)
1038
1037
  await db.update(heartbeatRuns).set(patch).where(eq(heartbeatRuns.id, f.sourceRunId));
1039
1038
  if (kind === "launch" || kind === "invoked")
@@ -1056,6 +1055,20 @@ const support = await getEmbeddedPostgresTestSupport();
1056
1055
  // counters. Do not leave this negative fixture as another cleanup target.
1057
1056
  await db.delete(environmentLeases).where(eq(environmentLeases.heartbeatRunId, f.sourceRunId));
1058
1057
  });
1058
+ it.each([
1059
+ ["paperclip_runner", true],
1060
+ ["omp_local", false],
1061
+ ["process", false],
1062
+ ["hermes_gateway", false],
1063
+ ])("admits the pre-dispatch cancellation of a %s run regardless of its receipt", async (adapterType, receipt) => {
1064
+ const f = await seedHistoricalCancelledPreparation(receipt);
1065
+ await db.update(heartbeatRuns).set({
1066
+ runnerProfileJson: { adapterDispatch: { adapterType } },
1067
+ resultJson: { startupCancellation: { beforeNativeSelection: receipt } },
1068
+ }).where(eq(heartbeatRuns.id, f.sourceRunId));
1069
+ expect(await getExecutionBlocker(db, f.companyId, f.issueId)).toMatchObject({ canRetry: true });
1070
+ expect(await admit(f)).toMatchObject({ previousRunId: f.sourceRunId });
1071
+ });
1059
1072
  it.each(["attempt", "generation", "controller", "lease", "process", "launch", "provider", "cleanup", "remote", "preparing", "closed", "reassigned"])("retains cancellation safeguards with %s evidence", async (kind) => {
1060
1073
  const f = await seedCancelledStartup();
1061
1074
  if (kind === "attempt")