@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.
- package/dist/build-info.json +1 -1
- package/dist/modules/agent-lifecycle/__tests__/lifecycle.test.js +36 -0
- package/dist/modules/agent-lifecycle/__tests__/lifecycle.test.js.map +1 -1
- package/dist/routes/attention.d.ts.map +1 -1
- package/dist/routes/attention.js +44 -26
- package/dist/routes/attention.js.map +1 -1
- package/dist/routes/browser-use.d.ts +2 -2
- package/dist/routes/openapi.d.ts.map +1 -1
- package/dist/routes/openapi.js +12 -2
- package/dist/routes/openapi.js.map +1 -1
- package/dist/services/cancelled-native-startup.d.ts.map +1 -1
- package/dist/services/cancelled-native-startup.js +21 -5
- package/dist/services/cancelled-native-startup.js.map +1 -1
- package/dist/services/cancelled-native-startup.test.d.ts +2 -0
- package/dist/services/cancelled-native-startup.test.d.ts.map +1 -0
- package/dist/services/cancelled-native-startup.test.js +243 -0
- package/dist/services/cancelled-native-startup.test.js.map +1 -0
- package/dist/services/chat-action-work.d.ts +1 -0
- package/dist/services/chat-action-work.d.ts.map +1 -1
- package/dist/services/chat-action-work.js +6 -0
- package/dist/services/chat-action-work.js.map +1 -1
- package/dist/services/chat-channels.d.ts +1 -0
- package/dist/services/chat-channels.d.ts.map +1 -1
- package/dist/services/chat-channels.js +2 -0
- package/dist/services/chat-channels.js.map +1 -1
- package/dist/services/chat-work-notifications.d.ts +1 -0
- package/dist/services/chat-work-notifications.d.ts.map +1 -1
- package/dist/services/chat-work-notifications.js +1 -0
- package/dist/services/chat-work-notifications.js.map +1 -1
- package/dist/services/connectors/slack.d.ts +14 -14
- package/dist/services/decision-desk.d.ts +19 -0
- package/dist/services/decision-desk.d.ts.map +1 -0
- package/dist/services/decision-desk.js +135 -0
- package/dist/services/decision-desk.js.map +1 -0
- package/dist/services/delivery-work-notifications.d.ts +1 -0
- package/dist/services/delivery-work-notifications.d.ts.map +1 -1
- package/dist/services/delivery-work-notifications.js +1 -0
- package/dist/services/delivery-work-notifications.js.map +1 -1
- package/dist/services/execution-recovery-attempt.d.ts +3 -0
- package/dist/services/execution-recovery-attempt.d.ts.map +1 -1
- package/dist/services/execution-recovery-attempt.js +7 -0
- package/dist/services/execution-recovery-attempt.js.map +1 -1
- package/dist/services/explicit-native-continuation.test.js +17 -4
- package/dist/services/explicit-native-continuation.test.js.map +1 -1
- package/dist/services/heartbeat/local-cli-admission.d.ts.map +1 -1
- package/dist/services/heartbeat/local-cli-admission.js +15 -1
- package/dist/services/heartbeat/local-cli-admission.js.map +1 -1
- package/dist/services/heartbeat/local-cli-admission.test.js +3 -1
- package/dist/services/heartbeat/local-cli-admission.test.js.map +1 -1
- package/dist/services/heartbeat/local-run-memory-gate.d.ts +41 -0
- package/dist/services/heartbeat/local-run-memory-gate.d.ts.map +1 -0
- package/dist/services/heartbeat/local-run-memory-gate.js +158 -0
- package/dist/services/heartbeat/local-run-memory-gate.js.map +1 -0
- package/dist/services/heartbeat/local-run-memory-gate.test.d.ts +2 -0
- package/dist/services/heartbeat/local-run-memory-gate.test.d.ts.map +1 -0
- package/dist/services/heartbeat/local-run-memory-gate.test.js +152 -0
- package/dist/services/heartbeat/local-run-memory-gate.test.js.map +1 -0
- package/dist/services/heartbeat/queue.d.ts +2 -0
- package/dist/services/heartbeat/queue.d.ts.map +1 -1
- package/dist/services/heartbeat/queue.js +25 -0
- package/dist/services/heartbeat/queue.js.map +1 -1
- package/dist/services/heartbeat/retries.d.ts +29 -22
- package/dist/services/heartbeat/retries.d.ts.map +1 -1
- package/dist/services/heartbeat/retries.js +45 -13
- package/dist/services/heartbeat/retries.js.map +1 -1
- package/dist/services/heartbeat/workspaces.d.ts.map +1 -1
- package/dist/services/heartbeat/workspaces.js +2 -1
- package/dist/services/heartbeat/workspaces.js.map +1 -1
- package/dist/services/heartbeat.d.ts +8 -8
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +3 -5
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/issue-thread-interactions.d.ts.map +1 -1
- package/dist/services/issue-thread-interactions.js +13 -0
- package/dist/services/issue-thread-interactions.js.map +1 -1
- package/dist/services/native-runtime/native-session-executor.d.ts +2 -2
- package/dist/services/native-runtime/native-session-executor.d.ts.map +1 -1
- package/dist/services/native-runtime/native-session-resume.test.js +17 -0
- package/dist/services/native-runtime/native-session-resume.test.js.map +1 -1
- package/dist/services/native-runtime/runner-api-client.d.ts +3 -3
- package/dist/services/native-runtime/runner-api-client.d.ts.map +1 -1
- package/dist/services/openwa/guidance.d.ts +3 -1
- package/dist/services/openwa/guidance.d.ts.map +1 -1
- package/dist/services/openwa/guidance.js +25 -8
- package/dist/services/openwa/guidance.js.map +1 -1
- package/dist/services/openwa/owners.d.ts +1 -0
- package/dist/services/openwa/owners.d.ts.map +1 -1
- package/dist/services/openwa/owners.js +8 -1
- package/dist/services/openwa/owners.js.map +1 -1
- package/dist/services/openwa/pending-cards.d.ts +46 -0
- package/dist/services/openwa/pending-cards.d.ts.map +1 -0
- package/dist/services/openwa/pending-cards.js +307 -0
- package/dist/services/openwa/pending-cards.js.map +1 -0
- package/dist/services/openwa/session-health.d.ts +3 -1
- package/dist/services/openwa/session-health.d.ts.map +1 -1
- package/dist/services/openwa/session-health.js +18 -4
- package/dist/services/openwa/session-health.js.map +1 -1
- package/dist/services/owner-decision-relay.d.ts +12 -2
- package/dist/services/owner-decision-relay.d.ts.map +1 -1
- package/dist/services/owner-decision-relay.js +57 -18
- package/dist/services/owner-decision-relay.js.map +1 -1
- package/dist/services/pre-dispatch-review-wait.d.ts +2 -0
- package/dist/services/pre-dispatch-review-wait.d.ts.map +1 -1
- package/dist/services/pre-dispatch-review-wait.js +11 -7
- package/dist/services/pre-dispatch-review-wait.js.map +1 -1
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +9 -5
- package/dist/services/recovery/service.js.map +1 -1
- package/dist/services/recovery/stranded-notice.d.ts +1 -0
- package/dist/services/recovery/stranded-notice.d.ts.map +1 -1
- package/dist/services/recovery/stranded-notice.js +10 -0
- package/dist/services/recovery/stranded-notice.js.map +1 -1
- package/dist/services/status-card-update-engine.d.ts +4 -4
- package/dist/services/status-card-update-engine.d.ts.map +1 -1
- package/dist/services/task-watchdogs.d.ts +1 -1
- package/dist/services/tool-gateway.d.ts +1 -1
- package/dist/services/tool-gateway.d.ts.map +1 -1
- package/dist/services/voice/voice-inbound-service.d.ts +3 -3
- package/package.json +21 -21
- package/skills/openwa/SKILL.md +8 -2
- package/skills/paperclip/SKILL.md +1 -1
- package/ui-dist/assets/{AgentAvatar-Cy7DadMK.js → AgentAvatar-rZFrG-iC.js} +1 -1
- package/ui-dist/assets/{Agents.production-BJyEbiQk.js → Agents.production-uSJFITvi.js} +2 -2
- package/ui-dist/assets/{BreadcrumbContext-CIC8QOSJ.js → BreadcrumbContext-za5ULJSm.js} +2 -2
- package/ui-dist/assets/{CompanyActivity.production-Dp4ldx4P.js → CompanyActivity.production-fp0biOpS.js} +1 -1
- package/ui-dist/assets/{CompanyExport-BBAKbfHg.js → CompanyExport-IOz8ZA8x.js} +2 -2
- package/ui-dist/assets/{CompanySkills.production-XuOHqAg6.js → CompanySkills.production-CffIe8qr.js} +2 -2
- package/ui-dist/assets/{EmptyState-Dvu_j1Dk.js → EmptyState-BJJPfoYe.js} +1 -1
- package/ui-dist/assets/{MarkdownBody-Dh6kczcO.js → MarkdownBody-C4hEmflc.js} +3 -3
- package/ui-dist/assets/{MarkdownEditor-nPcj3w4g.js → MarkdownEditor-DBC64_fF.js} +1 -1
- package/ui-dist/assets/{OrgChart.production-B-U1K3BO.js → OrgChart.production-CjZIrTL_.js} +1 -1
- package/ui-dist/assets/{PageSkeleton-B858kNMV.js → PageSkeleton-D-vmgL0l.js} +1 -1
- package/ui-dist/assets/{RoutineDetail.production-DR37hdFP.js → RoutineDetail.production-1l07aNMo.js} +1 -1
- package/ui-dist/assets/{RoutineRunVariablesDialog-TmqPj_PL.js → RoutineRunVariablesDialog-B8lrS2FZ.js} +2 -2
- package/ui-dist/assets/{Routines.production-D4Jwvus7.js → Routines.production-D87FWVo9.js} +1 -1
- package/ui-dist/assets/{StatusIcon-PIDWeOS3.js → StatusIcon-t9uPRpE5.js} +1 -1
- package/ui-dist/assets/{ToastContext-B6w8XXdu.js → ToastContext-fIh2QNZJ.js} +1 -1
- package/ui-dist/assets/{agent-avatar-url-Dp-4-Emx.js → agent-avatar-url-BHbCsFus.js} +21 -21
- package/ui-dist/assets/{alert-dialog-Cgn1_GT7.js → alert-dialog-BQZoePYb.js} +1 -1
- package/ui-dist/assets/{arrow-right-Dblp-MTW.js → arrow-right-BzMD-DNO.js} +1 -1
- package/ui-dist/assets/{badge-B6lcLGFG.js → badge-dcpUmKh9.js} +1 -1
- package/ui-dist/assets/{bot-BIsZWSPn.js → bot-DoEo7gOa.js} +1 -1
- package/ui-dist/assets/{card-Byu34cBe.js → card-mNYVrsX_.js} +1 -1
- package/ui-dist/assets/{check-AN9f-5s7.js → check-BkartoVa.js} +1 -1
- package/ui-dist/assets/{checkbox-DVrU8RYw.js → checkbox-JP8qevXt.js} +1 -1
- package/ui-dist/assets/{clipboard-Bj1LrAus.js → clipboard-Bz_p8QHy.js} +1 -1
- package/ui-dist/assets/{company-members-B3Kl56Wi.js → company-members-rOuXjQRg.js} +1 -1
- package/ui-dist/assets/{definition-DSY4nExe.js → definition-dyCYbBA7.js} +1 -1
- package/ui-dist/assets/{dist-qobNlkwf.js → dist-CI0Tr-Id.js} +1 -1
- package/ui-dist/assets/{dist-BoN0lntx.js → dist-CMclhGEN.js} +1 -1
- package/ui-dist/assets/{dist-DNeg6Olm.js → dist-D2Bp7-l0.js} +1 -1
- package/ui-dist/assets/{environments-CnsaRGwX.js → environments-BIMSsOem.js} +1 -1
- package/ui-dist/assets/{external-link-DJ5KXpF5.js → external-link-CUBJORqK.js} +1 -1
- package/ui-dist/assets/{file-text-BqJfYVg5.js → file-text-CTqnIoYc.js} +1 -1
- package/ui-dist/assets/{health-DXJ-aWLi.js → health-DzPZ7RTI.js} +1 -1
- package/ui-dist/assets/{heartbeats-BoD7FLml.js → heartbeats-cR8PFCO4.js} +1 -1
- package/ui-dist/assets/{index-BVwUuuxT.js → index-BQ6k9M0h.js} +159 -159
- package/ui-dist/assets/{input-BGjNwUvf.js → input-DWDEF0_4.js} +1 -1
- package/ui-dist/assets/{label-CKJXPwWx.js → label-D1IFWYWZ.js} +2 -2
- package/ui-dist/assets/{mention-chips-BovBgzq0.js → mention-chips-tvFPtLxM.js} +1 -1
- package/ui-dist/assets/{rotate-ccw-B7ntLtp4.js → rotate-ccw-CIoC0n9j.js} +1 -1
- package/ui-dist/assets/{select-DIma4_VX.js → select-DDOAq1-R.js} +1 -1
- package/ui-dist/assets/{sheet-C9tsiOQC.js → sheet-De2PrRU3.js} +1 -1
- package/ui-dist/assets/skeleton-BBZG3C3Z.js +1 -0
- package/ui-dist/assets/{tabs-nc-7quf8.js → tabs-DNtO_nZK.js} +1 -1
- package/ui-dist/assets/{use-adapter-capabilities-DiUfxjZz.js → use-adapter-capabilities-BHmVN8eS.js} +1 -1
- package/ui-dist/assets/{use-copy-action-RWCAx8p8.js → use-copy-action-CEHlaOnX.js} +1 -1
- package/ui-dist/assets/{useHiddenSettings-Be7MTSIM.js → useHiddenSettings-tTY86zjx.js} +1 -1
- package/ui-dist/index.html +39 -39
- package/ui-dist/sw.js +1 -1
- 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;
|
|
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;
|
|
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", "
|
|
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 === "
|
|
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")
|