@tickernelz/paperclip-pro-server 2026.1017.1 → 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
@@ -0,0 +1,46 @@
1
+ import { issueThreadInteractions, type Db } from "@tickernelz/paperclip-pro-db";
2
+ type DbTransaction = Parameters<Parameters<Db["transaction"]>[0]>[0];
3
+ type CardRow = typeof issueThreadInteractions.$inferSelect;
4
+ export declare const OPENWA_PENDING_CARD_ACTION_KIND = "openwa_pending_card";
5
+ export declare const OPENWA_PENDING_CARD_WAKE_ACTOR_ID = "openwa:pending-card";
6
+ export declare const OPENWA_PENDING_CARD_BATCH_MS = 60000;
7
+ /** True for a pending agent-created human_only card an owner may answer from WhatsApp. */
8
+ export declare function openwaOwnerCard(card: Pick<CardRow, "id" | "kind" | "status" | "payload" | "createdByAgentId" | "effectiveResolverPolicy">): boolean;
9
+ /** Queues one owner-chat wake per active OpenWA endpoint for a new owner card, inside the card's transaction. */
10
+ export declare function stageOpenwaPendingCardWakes(tx: DbTransaction, card: CardRow): Promise<string[]>;
11
+ /** Wakes the endpoint agent in the owner chat for one staged card; settles a resolved card without waking. */
12
+ export declare function dispatchOpenwaPendingCardWake(db: Db, actionId: string): Promise<boolean>;
13
+ export declare function processPendingOpenwaPendingCardWakes(db: Db, limit?: number): Promise<number>;
14
+ export interface OpenwaPendingCard {
15
+ interactionId: string;
16
+ card: string;
17
+ kind: string;
18
+ issue: string;
19
+ issueTitle: string;
20
+ url: string;
21
+ requestedBy: string | null;
22
+ title: string | null;
23
+ prompt: string | null;
24
+ options: Array<{
25
+ id: string;
26
+ label: string;
27
+ }>;
28
+ questions: Array<{
29
+ id: string;
30
+ prompt: string;
31
+ selectionMode: "single" | "multi";
32
+ options: Array<{
33
+ id: string;
34
+ label: string;
35
+ }>;
36
+ }>;
37
+ }
38
+ /** Still-pending owner cards named by a wake; titles, prompts and labels are worker-authored data. */
39
+ export declare function openwaPendingCardsForWake(db: Db, input: {
40
+ companyId: string;
41
+ endpointId: string;
42
+ chatKey: string;
43
+ interactionIds: string[];
44
+ }): Promise<OpenwaPendingCard[]>;
45
+ export {};
46
+ //# sourceMappingURL=pending-cards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-cards.d.ts","sourceRoot":"","sources":["../../../src/services/openwa/pending-cards.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,uBAAuB,EAAU,KAAK,EAAE,EAAE,MAAM,8BAA8B,CAAC;AAgB5H,KAAK,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAGrE,KAAK,OAAO,GAAG,OAAO,uBAAuB,CAAC,YAAY,CAAC;AAE3D,eAAO,MAAM,+BAA+B,wBAAwB,CAAC;AACrE,eAAO,MAAM,iCAAiC,wBAAwB,CAAC;AAGvE,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAmBnD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,kBAAkB,GAAG,yBAAyB,CAAC,GAAG,OAAO,CASnJ;AA4BD,iHAAiH;AACjH,wBAAsB,2BAA2B,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0FrG;AAED,8GAA8G;AAC9G,wBAAsB,6BAA6B,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoG9F;AAED,wBAAsB,oCAAoC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9F;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACpI;AAWD,sGAAsG;AACtG,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1F,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4C9B"}
@@ -0,0 +1,307 @@
1
+ import { and, asc, desc, eq, inArray, isNotNull } from "drizzle-orm";
2
+ import { agents, chatActions, chatEndpoints, issueThreadInteractions, issues } from "@tickernelz/paperclip-pro-db";
3
+ import { openwaEndpointPolicySchema } from "@tickernelz/paperclip-pro-shared";
4
+ import { canActorReadIssuePrivacy, issuePrivacyMode } from "../authorization.js";
5
+ import { forbidden } from "../../errors.js";
6
+ import { logger } from "../../middleware/logger.js";
7
+ import { dueChatAction } from "../chat-action-work.js";
8
+ import { notifyChatActionWork } from "../chat-work-notifications.js";
9
+ import { createDurableChatWakeupRequest } from "../durable-chat-wakeup.js";
10
+ import { issueService } from "../issues.js";
11
+ import { publicChatTaskUrl } from "../chat-task-url.js";
12
+ import { ownerRelayBlockedReason, pendingDecisionCardShape } from "../owner-decision-relay.js";
13
+ import { openwaWakeRuntime } from "./approvals.js";
14
+ import { openwaChatKey } from "./outbound.js";
15
+ import { openwaCurrentOwners } from "./owners.js";
16
+ import { openwaOwnerApprovalConversation } from "./session-health.js";
17
+ export const OPENWA_PENDING_CARD_ACTION_KIND = "openwa_pending_card";
18
+ export const OPENWA_PENDING_CARD_WAKE_ACTOR_ID = "openwa:pending-card";
19
+ const WAKE_MAX_ATTEMPTS = 5;
20
+ const WAKE_RETRY_MS = 30_000;
21
+ export const OPENWA_PENDING_CARD_BATCH_MS = 60_000;
22
+ const MAX_CARDS_PER_ACTION = 10;
23
+ const CARD_MAX_PER_WAKE = 10;
24
+ const CARD_MAX_OPTIONS = 10;
25
+ const CARD_TITLE_LIMIT = 200;
26
+ const CARD_PROMPT_LIMIT = 600;
27
+ const CARD_LABEL_LIMIT = 120;
28
+ const RELAYED_KINDS = new Set([
29
+ "ask_user_questions",
30
+ "request_confirmation",
31
+ "request_checkbox_confirmation",
32
+ "suggest_tasks",
33
+ "request_item_verdicts",
34
+ ]);
35
+ function record(value) {
36
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
37
+ }
38
+ /** True for a pending agent-created human_only card an owner may answer from WhatsApp. */
39
+ export function openwaOwnerCard(card) {
40
+ return (card.status === "pending" &&
41
+ card.effectiveResolverPolicy === "human_only" &&
42
+ Boolean(card.createdByAgentId) &&
43
+ RELAYED_KINDS.has(card.kind) &&
44
+ record(card.payload).destructive !== true &&
45
+ ownerRelayBlockedReason(card) === null);
46
+ }
47
+ /** Owners who read the chat a card is sent to: the chat's own owner in a DM, every current owner in owner_number mode. */
48
+ async function chatRecipients(db, endpoint, chatKey) {
49
+ const owners = await openwaCurrentOwners(db, endpoint);
50
+ const policy = openwaEndpointPolicySchema.parse(endpoint.policy ?? {});
51
+ const readers = policy.numberMode === "owner_number" ? owners : owners.filter((owner) => owner.jids.map(openwaChatKey).includes(chatKey));
52
+ return [...new Set(readers.map((owner) => owner.userId))];
53
+ }
54
+ /** True when the endpoint agent, acting for each recipient, may read the issue; fails closed without recipients. */
55
+ async function recipientsMayRead(db, endpoint, issueId, recipients) {
56
+ if (issuePrivacyMode() !== "enforce")
57
+ return true;
58
+ if (!endpoint.assignedAgentId || recipients.length === 0)
59
+ return false;
60
+ const [issue] = await db.select().from(issues).where(and(eq(issues.id, issueId), eq(issues.companyId, endpoint.companyId))).limit(1);
61
+ if (!issue)
62
+ return false;
63
+ for (const userId of recipients) {
64
+ const actor = { type: "agent", agentId: endpoint.assignedAgentId, companyId: endpoint.companyId, onBehalfOfUserId: userId };
65
+ if (!(await canActorReadIssuePrivacy(db, actor, issue)))
66
+ return false;
67
+ }
68
+ return true;
69
+ }
70
+ /** Queues one owner-chat wake per active OpenWA endpoint for a new owner card, inside the card's transaction. */
71
+ export async function stageOpenwaPendingCardWakes(tx, card) {
72
+ if (!openwaOwnerCard(card))
73
+ return [];
74
+ const endpoints = await tx
75
+ .select()
76
+ .from(chatEndpoints)
77
+ .where(and(eq(chatEndpoints.companyId, card.companyId), eq(chatEndpoints.provider, "openwa"), eq(chatEndpoints.status, "active"), isNotNull(chatEndpoints.assignedAgentId)));
78
+ if (!endpoints.length)
79
+ return [];
80
+ const [issue] = await tx
81
+ .select({ identifier: issues.identifier })
82
+ .from(issues)
83
+ .where(and(eq(issues.companyId, card.companyId), eq(issues.id, card.issueId)))
84
+ .limit(1);
85
+ const staged = [];
86
+ for (const endpoint of endpoints) {
87
+ const account = endpoint.providerAccountId ?? "";
88
+ if (!account.includes("#"))
89
+ continue;
90
+ const target = await openwaOwnerApprovalConversation(tx, endpoint, {
91
+ sessionId: account.slice(account.lastIndexOf("#") + 1),
92
+ selfChatKey: (endpoint.botExternalId ?? "").replace(/\D/g, "") + "@c.us",
93
+ ...(card.addresseeUserId ? { onlyUserId: card.addresseeUserId } : {}),
94
+ });
95
+ if (!target) {
96
+ logger.warn({ endpointId: endpoint.id, interactionId: card.id }, "OpenWA owner card has no owner conversation");
97
+ continue;
98
+ }
99
+ if (!(await recipientsMayRead(tx, endpoint, card.issueId, await chatRecipients(tx, endpoint, target.chatKey))))
100
+ continue;
101
+ const [open] = await tx
102
+ .select()
103
+ .from(chatActions)
104
+ .where(and(eq(chatActions.companyId, card.companyId), eq(chatActions.endpointId, endpoint.id), eq(chatActions.conversationId, target.conversationId), eq(chatActions.kind, OPENWA_PENDING_CARD_ACTION_KIND), eq(chatActions.status, "received")))
105
+ .orderBy(desc(chatActions.createdAt))
106
+ .limit(1)
107
+ .for("update");
108
+ const openIds = open ? (record(record(open.payload).openwa).pendingCardIds ?? []) : [];
109
+ if (open && openIds.length < MAX_CARDS_PER_ACTION && !openIds.includes(card.id)) {
110
+ const openwa = { ...record(open.payload.openwa), pendingCardIds: [...openIds, card.id] };
111
+ await tx.update(chatActions).set({ payload: { ...open.payload, openwa }, updatedAt: new Date() }).where(eq(chatActions.id, open.id));
112
+ staged.push(open.id);
113
+ continue;
114
+ }
115
+ const payload = {
116
+ version: 1,
117
+ issueId: target.issueId,
118
+ agentId: target.agentId,
119
+ interactionId: card.id,
120
+ chatKey: target.chatKey,
121
+ openwa: { event: "pending_card", triggerClass: "other", deliveryIds: [], pendingCardIds: [card.id] },
122
+ };
123
+ const [action] = await tx
124
+ .insert(chatActions)
125
+ .values({
126
+ companyId: card.companyId,
127
+ endpointId: endpoint.id,
128
+ conversationId: target.conversationId,
129
+ kind: OPENWA_PENDING_CARD_ACTION_KIND,
130
+ providerActionId: "openwa-pending-card:" + card.id,
131
+ status: "received",
132
+ payload,
133
+ result: { retryAt: new Date(Date.now() + OPENWA_PENDING_CARD_BATCH_MS).toISOString() },
134
+ })
135
+ .onConflictDoNothing()
136
+ .returning({ id: chatActions.id });
137
+ if (!action)
138
+ continue;
139
+ const comment = await issueService(tx).addComment(target.issueId, "Paperclip card " + card.id.slice(0, 8) + " on " + (issue?.identifier ?? card.issueId) + " waits for an owner decision.", {}, { authorType: "system" }, tx);
140
+ await tx.update(chatActions).set({ payload: { ...payload, commentId: comment.id } }).where(eq(chatActions.id, action.id));
141
+ staged.push(action.id);
142
+ }
143
+ if (staged.length)
144
+ await notifyChatActionWork(tx, OPENWA_PENDING_CARD_ACTION_KIND);
145
+ return staged;
146
+ }
147
+ /** Wakes the endpoint agent in the owner chat for one staged card; settles a resolved card without waking. */
148
+ export async function dispatchOpenwaPendingCardWake(db, actionId) {
149
+ const runtime = openwaWakeRuntime(db);
150
+ if (!runtime)
151
+ return false;
152
+ const now = new Date();
153
+ const [claimed] = await db
154
+ .update(chatActions)
155
+ .set({ status: "processing", updatedAt: now })
156
+ .where(and(eq(chatActions.id, actionId), dueChatAction(OPENWA_PENDING_CARD_ACTION_KIND, now.getTime())))
157
+ .returning();
158
+ if (!claimed)
159
+ return false;
160
+ const payload = claimed.payload;
161
+ const attemptCount = Number(record(claimed.result).attemptCount ?? 0) + 1;
162
+ const settle = (status, result) => db
163
+ .update(chatActions)
164
+ .set({ status, result: { ...result, attemptCount }, updatedAt: new Date() })
165
+ .where(and(eq(chatActions.id, claimed.id), eq(chatActions.status, "processing")));
166
+ try {
167
+ const issueId = String(payload.issueId);
168
+ const agentId = String(payload.agentId);
169
+ const commentId = String(payload.commentId);
170
+ const openwa = record(payload.openwa);
171
+ const cardIds = Array.isArray(openwa.pendingCardIds) ? openwa.pendingCardIds.filter((id) => typeof id === "string") : [];
172
+ const pendingCards = cardIds.length
173
+ ? await db
174
+ .select({ id: issueThreadInteractions.id, issueId: issueThreadInteractions.issueId })
175
+ .from(issueThreadInteractions)
176
+ .where(and(eq(issueThreadInteractions.companyId, claimed.companyId), inArray(issueThreadInteractions.id, cardIds), eq(issueThreadInteractions.status, "pending")))
177
+ : [];
178
+ if (pendingCards.length === 0) {
179
+ await settle("processed", { code: "openwa_pending_card_resolved" });
180
+ return false;
181
+ }
182
+ const [issue] = await db
183
+ .select({ identifier: issues.identifier, assigneeAgentId: issues.assigneeAgentId, status: issues.status })
184
+ .from(issues)
185
+ .where(and(eq(issues.companyId, claimed.companyId), eq(issues.id, issueId)))
186
+ .limit(1);
187
+ if (!issue || issue.assigneeAgentId !== agentId || ["backlog", "done", "cancelled"].includes(issue.status)) {
188
+ await settle("failed", { code: "openwa_pending_card_target_changed" });
189
+ return false;
190
+ }
191
+ const [endpoint] = await db.select().from(chatEndpoints).where(and(eq(chatEndpoints.companyId, claimed.companyId), eq(chatEndpoints.id, claimed.endpointId))).limit(1);
192
+ const recipients = endpoint ? await chatRecipients(db, endpoint, String(payload.chatKey ?? "")) : [];
193
+ const readable = endpoint
194
+ ? await Promise.all(pendingCards.map((pending) => recipientsMayRead(db, endpoint, pending.issueId, recipients)))
195
+ : [];
196
+ if (!readable.some(Boolean)) {
197
+ await settle("processed", { code: "openwa_pending_card_unreadable" });
198
+ return false;
199
+ }
200
+ const request = createDurableChatWakeupRequest({
201
+ id: claimed.id,
202
+ companyId: claimed.companyId,
203
+ agentId,
204
+ issueId,
205
+ commentId,
206
+ requestedByActorType: "system",
207
+ requestedByActorId: OPENWA_PENDING_CARD_WAKE_ACTOR_ID,
208
+ requestedAt: claimed.createdAt,
209
+ authorize: async (tx) => {
210
+ const [endpoint] = await tx
211
+ .select({ status: chatEndpoints.status, assignedAgentId: chatEndpoints.assignedAgentId })
212
+ .from(chatEndpoints)
213
+ .where(and(eq(chatEndpoints.companyId, claimed.companyId), eq(chatEndpoints.id, claimed.endpointId), eq(chatEndpoints.provider, "openwa")))
214
+ .limit(1);
215
+ if (!endpoint || endpoint.status === "archived" || endpoint.assignedAgentId !== agentId)
216
+ throw forbidden("The OpenWA endpoint changed", { code: "chat_action_authorization_changed" });
217
+ },
218
+ });
219
+ const context = { issueId, taskKey: issue.identifier, wakeCommentId: commentId, openwa };
220
+ await runtime.wakeup(agentId, {
221
+ source: "assignment",
222
+ triggerDetail: "system",
223
+ reason: "Paperclip card waits for an owner",
224
+ payload: { ...context, mutation: "openwa_pending_card" },
225
+ contextSnapshot: { ...context, source: "chat:openwa" },
226
+ allowRunCoalescing: false,
227
+ requestedByActorType: "system",
228
+ requestedByActorId: OPENWA_PENDING_CARD_WAKE_ACTOR_ID,
229
+ durableChatRequest: request,
230
+ });
231
+ await settle("processed", { code: "openwa_pending_card_wake_dispatched", wakeupRequestId: claimed.id });
232
+ return true;
233
+ }
234
+ catch (error) {
235
+ logger.warn({ err: error, actionId: claimed.id }, "failed to dispatch OpenWA pending card wake");
236
+ await settle("failed", {
237
+ code: "openwa_pending_card_wake_failed",
238
+ error: error instanceof Error ? error.message : String(error),
239
+ retryable: attemptCount < WAKE_MAX_ATTEMPTS,
240
+ retryAt: new Date(Date.now() + WAKE_RETRY_MS * attemptCount).toISOString(),
241
+ });
242
+ return false;
243
+ }
244
+ }
245
+ export async function processPendingOpenwaPendingCardWakes(db, limit = 25) {
246
+ if (!openwaWakeRuntime(db))
247
+ return 0;
248
+ const rows = await db
249
+ .select({ id: chatActions.id })
250
+ .from(chatActions)
251
+ .where(dueChatAction(OPENWA_PENDING_CARD_ACTION_KIND))
252
+ .orderBy(chatActions.createdAt)
253
+ .limit(limit);
254
+ let dispatched = 0;
255
+ for (const row of rows)
256
+ if (await dispatchOpenwaPendingCardWake(db, row.id))
257
+ dispatched++;
258
+ return dispatched;
259
+ }
260
+ function clip(value, max) {
261
+ const text = value.replace(/\s+/g, " ").trim();
262
+ return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
263
+ }
264
+ function clipOptions(options) {
265
+ return options.slice(0, CARD_MAX_OPTIONS).map((option) => ({ id: option.id, label: clip(option.label, CARD_LABEL_LIMIT) }));
266
+ }
267
+ /** Still-pending owner cards named by a wake; titles, prompts and labels are worker-authored data. */
268
+ export async function openwaPendingCardsForWake(db, input) {
269
+ const { companyId, interactionIds } = input;
270
+ if (!interactionIds.length)
271
+ return [];
272
+ const [endpoint] = await db.select().from(chatEndpoints).where(and(eq(chatEndpoints.companyId, companyId), eq(chatEndpoints.id, input.endpointId))).limit(1);
273
+ if (!endpoint)
274
+ return [];
275
+ const recipients = await chatRecipients(db, endpoint, input.chatKey);
276
+ const rows = await db
277
+ .select({ card: issueThreadInteractions, identifier: issues.identifier, issueTitle: issues.title, requestedBy: agents.name })
278
+ .from(issueThreadInteractions)
279
+ .innerJoin(issues, and(eq(issues.companyId, issueThreadInteractions.companyId), eq(issues.id, issueThreadInteractions.issueId)))
280
+ .leftJoin(agents, and(eq(agents.companyId, issueThreadInteractions.companyId), eq(agents.id, issueThreadInteractions.createdByAgentId)))
281
+ .where(and(eq(issueThreadInteractions.companyId, companyId), inArray(issueThreadInteractions.id, interactionIds.slice(0, CARD_MAX_PER_WAKE)), eq(issueThreadInteractions.status, "pending")))
282
+ .orderBy(asc(issueThreadInteractions.createdAt));
283
+ const readable = await Promise.all(rows.map(async (row) => openwaOwnerCard(row.card) && (await recipientsMayRead(db, endpoint, row.card.issueId, recipients))));
284
+ return rows.filter((_, index) => readable[index]).map(({ card, identifier, issueTitle, requestedBy }) => {
285
+ const shape = pendingDecisionCardShape(card.kind, record(card.payload));
286
+ const reference = identifier ?? card.issueId;
287
+ return {
288
+ interactionId: card.id,
289
+ card: card.id.slice(0, 8),
290
+ kind: card.kind,
291
+ issue: reference,
292
+ issueTitle: clip(issueTitle, CARD_TITLE_LIMIT),
293
+ url: publicChatTaskUrl(reference) ?? "/issues/" + reference,
294
+ requestedBy,
295
+ title: card.title ? clip(card.title, CARD_TITLE_LIMIT) : null,
296
+ prompt: shape.prompt ? clip(shape.prompt, CARD_PROMPT_LIMIT) : null,
297
+ options: clipOptions(shape.options),
298
+ questions: shape.questions.slice(0, CARD_MAX_OPTIONS).map((question) => ({
299
+ id: question.id,
300
+ prompt: clip(question.prompt, CARD_PROMPT_LIMIT),
301
+ selectionMode: question.selectionMode,
302
+ options: clipOptions(question.options),
303
+ })),
304
+ };
305
+ });
306
+ }
307
+ //# sourceMappingURL=pending-cards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-cards.js","sourceRoot":"","sources":["../../../src/services/openwa/pending-cards.ts"],"names":[],"mappings":"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"}
@@ -23,14 +23,16 @@ export type OpenwaSessionHealthWakeStage = {
23
23
  staged: false;
24
24
  reason: "no_assigned_agent" | "no_owner_conversation";
25
25
  };
26
- /** Owner approval chat of the endpoint: self-chat in owner_number mode, else the most recent active owner DM. */
26
+ /** Owner approval chat of the endpoint: self-chat in owner_number mode, else the most recent active owner DM (phone or LID). */
27
27
  export declare function openwaOwnerApprovalConversation(tx: DbTransaction, endpoint: EndpointRow, input: {
28
28
  sessionId: string;
29
29
  selfChatKey: string;
30
+ onlyUserId?: string;
30
31
  }): Promise<{
31
32
  conversationId: string;
32
33
  issueId: string;
33
34
  agentId: string;
35
+ chatKey: string;
34
36
  } | null>;
35
37
  /** Writes the system comment and queued wake action for one session health transition inside its transaction. */
36
38
  export declare function stageOpenwaSessionHealthWake(tx: DbTransaction, endpoint: EndpointRow, input: {
@@ -1 +1 @@
1
- {"version":3,"file":"session-health.d.ts","sourceRoot":"","sources":["../../../src/services/openwa/session-health.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,aAAa,EAAU,KAAK,EAAE,EAAE,MAAM,8BAA8B,CAAC;AAS9G,KAAK,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,KAAK,WAAW,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAErD,eAAO,MAAM,sCAAsC,iCAAiC,CAAC;AACrF,eAAO,MAAM,mCAAmC,0BAA0B,CAAC;AAK3E,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAC7G;AAED,MAAM,MAAM,4BAA4B,GACpC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,GAAG,uBAAuB,CAAA;CAAE,CAAC;AAqB7E,iHAAiH;AACjH,wBAAsB,+BAA+B,CACnD,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgC9E;AAED,iHAAiH;AACjH,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACjF,OAAO,CAAC,4BAA4B,CAAC,CA8BvC;AAED,wBAAsB,+BAA+B,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiFhG;AAED,wBAAsB,sCAAsC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBhG"}
1
+ {"version":3,"file":"session-health.d.ts","sourceRoot":"","sources":["../../../src/services/openwa/session-health.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,aAAa,EAAU,KAAK,EAAE,EAAE,MAAM,8BAA8B,CAAC;AAU9G,KAAK,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,KAAK,WAAW,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAErD,eAAO,MAAM,sCAAsC,iCAAiC,CAAC;AACrF,eAAO,MAAM,mCAAmC,0BAA0B,CAAC;AAK3E,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAC7G;AAED,MAAM,MAAM,4BAA4B,GACpC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,GAAG,uBAAuB,CAAA;CAAE,CAAC;AAqB7E,gIAAgI;AAChI,wBAAsB,+BAA+B,CACnD,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA2C/F;AAED,iHAAiH;AACjH,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACjF,OAAO,CAAC,4BAA4B,CAAC,CA8BvC;AAED,wBAAsB,+BAA+B,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiFhG;AAED,wBAAsB,sCAAsC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBhG"}
@@ -7,6 +7,7 @@ import { logger } from "../../middleware/logger.js";
7
7
  import { createDurableChatWakeupRequest } from "../durable-chat-wakeup.js";
8
8
  import { issueService } from "../issues.js";
9
9
  import { openwaWakeRuntime } from "./approvals.js";
10
+ import { openwaChatKey } from "./outbound.js";
10
11
  import { openwaCurrentOwners } from "./owners.js";
11
12
  export const OPENWA_SESSION_HEALTH_WAKE_ACTION_KIND = "openwa_session_health_wakeup";
12
13
  export const OPENWA_SESSION_HEALTH_WAKE_ACTOR_ID = "openwa:session-health";
@@ -29,26 +30,39 @@ function healthComment(facts) {
29
30
  (restriction?.expiresAt ? " until " + restriction.expiresAt : "") +
30
31
  ".");
31
32
  }
32
- /** Owner approval chat of the endpoint: self-chat in owner_number mode, else the most recent active owner DM. */
33
+ /** Owner approval chat of the endpoint: self-chat in owner_number mode, else the most recent active owner DM (phone or LID). */
33
34
  export async function openwaOwnerApprovalConversation(tx, endpoint, input) {
34
35
  if (!endpoint.assignedAgentId)
35
36
  return null;
36
37
  const policy = openwaEndpointPolicySchema.parse(endpoint.policy ?? {});
38
+ const owners = (await openwaCurrentOwners(tx, endpoint)).filter((owner) => !input.onlyUserId || owner.userId === input.onlyUserId);
39
+ if (input.onlyUserId && owners.length === 0)
40
+ return null;
37
41
  const chatKeys = policy.numberMode === "owner_number"
38
42
  ? [input.selfChatKey]
39
43
  : [
40
- ...new Set((await openwaCurrentOwners(tx, endpoint)).flatMap((owner) => (owner.digits ? [owner.digits + "@c.us"] : []))),
44
+ ...new Set(owners.flatMap((owner) => [
45
+ ...(owner.digits ? [owner.digits + "@c.us"] : []),
46
+ ...owner.jids.filter((jid) => jid.endsWith("@lid")).map(openwaChatKey),
47
+ ])),
41
48
  ];
42
49
  if (!chatKeys.length)
43
50
  return null;
44
51
  const [row] = await tx
45
- .select({ conversationId: chatConversations.id, issueId: issues.id })
52
+ .select({ conversationId: chatConversations.id, issueId: issues.id, externalConversationId: chatConversations.externalConversationId })
46
53
  .from(chatConversations)
47
54
  .innerJoin(issues, and(eq(issues.companyId, chatConversations.companyId), eq(issues.id, chatConversations.issueId)))
48
55
  .where(and(eq(chatConversations.companyId, endpoint.companyId), eq(chatConversations.endpointId, endpoint.id), inArray(chatConversations.externalConversationId, chatKeys.map((chatKey) => "openwa:" + input.sessionId + ":" + chatKey)), inArray(chatConversations.state, ["active", "waiting"]), eq(issues.assigneeAgentId, endpoint.assignedAgentId), notInArray(issues.status, INELIGIBLE_ISSUE_STATUSES)))
49
56
  .orderBy(sql `${chatConversations.lastActivityAt} desc nulls last`, desc(chatConversations.createdAt))
50
57
  .limit(1);
51
- return row ? { ...row, agentId: endpoint.assignedAgentId } : null;
58
+ if (!row)
59
+ return null;
60
+ return {
61
+ conversationId: row.conversationId,
62
+ issueId: row.issueId,
63
+ agentId: endpoint.assignedAgentId,
64
+ chatKey: row.externalConversationId.slice(("openwa:" + input.sessionId + ":").length),
65
+ };
52
66
  }
53
67
  /** Writes the system comment and queued wake action for one session health transition inside its transaction. */
54
68
  export async function stageOpenwaSessionHealthWake(tx, endpoint, input) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-health.js","sourceRoot":"","sources":["../../../src/services/openwa/session-health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-health.js","sourceRoot":"","sources":["../../../src/services/openwa/session-health.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Request, RequestHandler } from "express";
2
2
  import { type Db } from "@tickernelz/paperclip-pro-db";
3
- import type { AnswerDecisionForOwner, IssueThreadInteractionOwnerRelay, IssueThreadInteractionOwnerRelayChannel, PendingDecision } from "@tickernelz/paperclip-pro-shared";
3
+ import type { AnswerDecisionForOwner, AttentionItem, IssueThreadInteractionOwnerRelay, IssueThreadInteractionOwnerRelayChannel, PendingDecision } from "@tickernelz/paperclip-pro-shared";
4
4
  export declare const OWNER_CONFIRMATION_REQUIRED_CODE = "owner_confirmation_required";
5
5
  export interface OwnerRelayAuthority {
6
6
  channel: IssueThreadInteractionOwnerRelayChannel;
@@ -60,10 +60,20 @@ export declare function dispatchAsOwner(handle: RequestHandler, req: Request, in
60
60
  status: number;
61
61
  body: unknown;
62
62
  }>;
63
+ /** Prompt, options and questions of a card as the owner sees them. */
64
+ export declare function pendingDecisionCardShape(kind: string, payload: Record<string, unknown>): Pick<PendingDecision, "prompt" | "options" | "questions">;
65
+ export declare function isOpenAttentionItem(item: AttentionItem, now: number): boolean;
66
+ export declare function relayStateByItem(db: Db, companyId: string, items: AttentionItem[]): Promise<Map<string, {
67
+ relayable: boolean;
68
+ relayBlockedReason: string | null;
69
+ }>>;
63
70
  export declare function listPendingDecisions(db: Db, input: {
64
71
  companyId: string;
65
72
  actor: Request["actor"];
66
73
  userId: string | null;
67
- }): Promise<PendingDecision[]>;
74
+ }): Promise<{
75
+ items: PendingDecision[];
76
+ omittedCount: number;
77
+ }>;
68
78
  export {};
69
79
  //# sourceMappingURL=owner-decision-relay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"owner-decision-relay.d.ts","sourceRoot":"","sources":["../../src/services/owner-decision-relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owner-decision-relay.d.ts","sourceRoot":"","sources":["../../src/services/owner-decision-relay.ts"],"names":[],"mappings":"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"}