cli-jaw 2.2.25 → 2.3.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 (159) hide show
  1. package/README.md +5 -2
  2. package/dist/bin/cli-jaw.js +6 -1
  3. package/dist/bin/cli-jaw.js.map +1 -1
  4. package/dist/bin/commands/doctor.js +39 -18
  5. package/dist/bin/commands/doctor.js.map +1 -1
  6. package/dist/bin/commands/init.js +82 -23
  7. package/dist/bin/commands/init.js.map +1 -1
  8. package/dist/bin/commands/messaging.js +262 -0
  9. package/dist/bin/commands/messaging.js.map +1 -0
  10. package/dist/server.js +30 -6
  11. package/dist/server.js.map +1 -1
  12. package/dist/src/cli/commands.js +6 -2
  13. package/dist/src/cli/commands.js.map +1 -1
  14. package/dist/src/cli/handlers/remote-session-commands.js +94 -0
  15. package/dist/src/cli/handlers/remote-session-commands.js.map +1 -0
  16. package/dist/src/command-contract/catalog.js +1 -1
  17. package/dist/src/command-contract/catalog.js.map +1 -1
  18. package/dist/src/core/chat-sessions.js +4 -0
  19. package/dist/src/core/chat-sessions.js.map +1 -1
  20. package/dist/src/core/config.js +63 -22
  21. package/dist/src/core/config.js.map +1 -1
  22. package/dist/src/core/db.js +6 -0
  23. package/dist/src/core/db.js.map +1 -1
  24. package/dist/src/core/dispatch-approval-ingress.js +45 -3
  25. package/dist/src/core/dispatch-approval-ingress.js.map +1 -1
  26. package/dist/src/core/dispatch-approval.js +46 -0
  27. package/dist/src/core/dispatch-approval.js.map +1 -1
  28. package/dist/src/core/logger.js +67 -0
  29. package/dist/src/core/logger.js.map +1 -1
  30. package/dist/src/core/session-generation.js +74 -0
  31. package/dist/src/core/session-generation.js.map +1 -0
  32. package/dist/src/discord/bot.js +91 -5
  33. package/dist/src/discord/bot.js.map +1 -1
  34. package/dist/src/discord/commands.js +34 -1
  35. package/dist/src/discord/commands.js.map +1 -1
  36. package/dist/src/discord/forwarder.js +4 -1
  37. package/dist/src/discord/forwarder.js.map +1 -1
  38. package/dist/src/discord/send-only-client.js +14 -7
  39. package/dist/src/discord/send-only-client.js.map +1 -1
  40. package/dist/src/messaging/access-policy.js +26 -0
  41. package/dist/src/messaging/access-policy.js.map +1 -0
  42. package/dist/src/messaging/approval-presentation.js +89 -0
  43. package/dist/src/messaging/approval-presentation.js.map +1 -0
  44. package/dist/src/messaging/channel-adapter.js +47 -0
  45. package/dist/src/messaging/channel-adapter.js.map +1 -0
  46. package/dist/src/messaging/channel-capabilities.js +47 -15
  47. package/dist/src/messaging/channel-capabilities.js.map +1 -1
  48. package/dist/src/messaging/channel-health.js +23 -3
  49. package/dist/src/messaging/channel-health.js.map +1 -1
  50. package/dist/src/messaging/delivery-outcome.js +12 -0
  51. package/dist/src/messaging/delivery-outcome.js.map +1 -1
  52. package/dist/src/messaging/durable-ingress.js +458 -0
  53. package/dist/src/messaging/durable-ingress.js.map +1 -0
  54. package/dist/src/messaging/effect-once.js +204 -0
  55. package/dist/src/messaging/effect-once.js.map +1 -0
  56. package/dist/src/messaging/inbound-envelope.js +168 -0
  57. package/dist/src/messaging/inbound-envelope.js.map +1 -0
  58. package/dist/src/messaging/ingress-audit.js +41 -0
  59. package/dist/src/messaging/ingress-audit.js.map +1 -0
  60. package/dist/src/messaging/ingress-generation.js +22 -0
  61. package/dist/src/messaging/ingress-generation.js.map +1 -0
  62. package/dist/src/messaging/metrics.js +69 -0
  63. package/dist/src/messaging/metrics.js.map +1 -0
  64. package/dist/src/messaging/outbound-outbox.js +184 -0
  65. package/dist/src/messaging/outbound-outbox.js.map +1 -0
  66. package/dist/src/messaging/remote-command-context.js +30 -0
  67. package/dist/src/messaging/remote-command-context.js.map +1 -0
  68. package/dist/src/messaging/retry.js +11 -2
  69. package/dist/src/messaging/retry.js.map +1 -1
  70. package/dist/src/messaging/runtime.js +129 -30
  71. package/dist/src/messaging/runtime.js.map +1 -1
  72. package/dist/src/messaging/send.js +31 -6
  73. package/dist/src/messaging/send.js.map +1 -1
  74. package/dist/src/messaging/trace-context.js +56 -0
  75. package/dist/src/messaging/trace-context.js.map +1 -0
  76. package/dist/src/messaging/types.js +39 -1
  77. package/dist/src/messaging/types.js.map +1 -1
  78. package/dist/src/routes/orchestrate.js +10 -3
  79. package/dist/src/routes/orchestrate.js.map +1 -1
  80. package/dist/src/routes/settings.js +26 -1
  81. package/dist/src/routes/settings.js.map +1 -1
  82. package/dist/src/slack/bot.js +182 -70
  83. package/dist/src/slack/bot.js.map +1 -1
  84. package/dist/src/slack/commands.js +16 -1
  85. package/dist/src/slack/commands.js.map +1 -1
  86. package/dist/src/slack/format.js +4 -1
  87. package/dist/src/slack/format.js.map +1 -1
  88. package/dist/src/slack/manifest.js +5 -0
  89. package/dist/src/slack/manifest.js.map +1 -1
  90. package/dist/src/slack/send-handler.js +26 -4
  91. package/dist/src/slack/send-handler.js.map +1 -1
  92. package/dist/src/slack/send-only-client.js +26 -2
  93. package/dist/src/slack/send-only-client.js.map +1 -1
  94. package/dist/src/slack/socket.js +36 -13
  95. package/dist/src/slack/socket.js.map +1 -1
  96. package/dist/src/telegram/bot.js +122 -14
  97. package/dist/src/telegram/bot.js.map +1 -1
  98. package/package.json +4 -1
  99. package/public/dist/assets/ChannelEnablementControl-Da_t_jq6.js +1 -0
  100. package/public/dist/assets/ChannelsDiscord-kNjCCJcA.js +1 -0
  101. package/public/dist/assets/ChannelsSlack-BOuoCfeN.js +1 -0
  102. package/public/dist/assets/ChannelsTelegram-DBIFDz4R.js +1 -0
  103. package/public/dist/assets/{app-DUbf-v7B.js → app-TWwXw3iD.js} +4 -4
  104. package/public/dist/assets/bgtask-badge-BhzSqQHG.js +1 -0
  105. package/public/dist/assets/{bgtask-badge-jIH69Dp3.js → bgtask-badge-DaAUnoKD.js} +1 -1
  106. package/public/dist/assets/{employees-BNy8a6XX.js → employees-BFKkaVAe.js} +1 -1
  107. package/public/dist/assets/iframe-renderer-BxEzdKIA.js +1 -0
  108. package/public/dist/assets/{iframe-renderer-C6Zwg9w4.js → iframe-renderer-CvnKi77F.js} +2 -2
  109. package/public/dist/assets/{manager-DzCR6Pam.js → manager-BTpvAFwX.js} +1 -1
  110. package/public/dist/assets/memory-DHOtCiw5.js +1 -0
  111. package/public/dist/assets/{memory-C4O44HMr.js → memory-db_s-38T.js} +1 -1
  112. package/public/dist/assets/{message-history-DCxD21J1.js → message-history-BX9shNKA.js} +1 -1
  113. package/public/dist/assets/message-history-DaSxkyy0.js +1 -0
  114. package/public/dist/assets/{render-A--hkukv.js → render-DZnFK8Kv.js} +1 -1
  115. package/public/dist/assets/{settings-3ZdoKHIf.js → settings-BuFMKcQ-.js} +1 -1
  116. package/public/dist/assets/settings-DotRDITm.js +1 -0
  117. package/public/dist/assets/{settings-core-CQe1uP6x.js → settings-core-3fj0DVoa.js} +17 -17
  118. package/public/dist/assets/settings-core-DohSnMad.js +1 -0
  119. package/public/dist/assets/{sidebar-DxFp_449.js → sidebar-D5TP7TCO.js} +3 -3
  120. package/public/dist/assets/{skills-BU4q8Q8n.js → skills-CQzHFYJS.js} +1 -1
  121. package/public/dist/assets/skills-DZHEvl1x.js +1 -0
  122. package/public/dist/assets/{slash-commands-BiXOgZ5B.js → slash-commands-BWEWWf-c.js} +1 -1
  123. package/public/dist/assets/slash-commands-CuJdloNC.js +1 -0
  124. package/public/dist/assets/{trace-drawer-2BTQCor6.js → trace-drawer-CBR-PZB4.js} +1 -1
  125. package/public/dist/assets/ui-CWl27eMl.js +1 -0
  126. package/public/dist/assets/{ui-Csy42uNW.js → ui-Ca1Q-VFQ.js} +1 -1
  127. package/public/dist/index.html +1 -1
  128. package/public/dist/manager/index.html +1 -1
  129. package/public/js/features/settings-channel.ts +35 -5
  130. package/public/js/features/settings-types.ts +7 -0
  131. package/public/js/features/transport-status-row.ts +23 -4
  132. package/public/manager/src/settings/pages/ChannelsDiscord.tsx +39 -11
  133. package/public/manager/src/settings/pages/ChannelsSlack.tsx +24 -7
  134. package/public/manager/src/settings/pages/ChannelsTelegram.tsx +38 -10
  135. package/public/manager/src/settings/pages/components/ChannelEnablementControl.tsx +98 -0
  136. package/public/manager/src/settings/pages/components/TransportStatusChips.tsx +23 -2
  137. package/scripts/docs/extract-commands.mts +3 -0
  138. package/scripts/generate-channel-capability-table.mts +161 -0
  139. package/scripts/promote-to-main.sh +175 -0
  140. package/scripts/release-gates.mjs +57 -3
  141. package/scripts/release-preview.sh +19 -0
  142. package/scripts/require-release-evidence.mjs +35 -1
  143. package/scripts/validate-messaging-certification.mts +83 -0
  144. package/scripts/write-messaging-certification.mts +65 -0
  145. package/public/dist/assets/ChannelsDiscord-D4fD-9hP.js +0 -1
  146. package/public/dist/assets/ChannelsSlack-_KBwRonM.js +0 -1
  147. package/public/dist/assets/ChannelsTelegram-tihzSWVE.js +0 -1
  148. package/public/dist/assets/TransportStatusChips-B0NR0ljO.js +0 -1
  149. package/public/dist/assets/bgtask-badge-B8KhuBa7.js +0 -1
  150. package/public/dist/assets/iframe-renderer-DBmV8gCQ.js +0 -1
  151. package/public/dist/assets/memory-Dt_Ji6aP.js +0 -1
  152. package/public/dist/assets/message-history-DyISauiv.js +0 -1
  153. package/public/dist/assets/settings-C6Pku2GC.js +0 -1
  154. package/public/dist/assets/settings-core-DqwLJkgP.js +0 -1
  155. package/public/dist/assets/skills-x2gH-1Ry.js +0 -1
  156. package/public/dist/assets/slash-commands-s8eR7Kd1.js +0 -1
  157. package/public/dist/assets/ui-CB0L33o0.js +0 -1
  158. package/scripts/release.sh +0 -224
  159. /package/public/dist/assets/{HealthBadge-CUaJ1PQH.js → HealthBadge-CiNMS-1k.js} +0 -0
@@ -0,0 +1,89 @@
1
+ // Approval keyboards for operator DMs.
2
+ // Telegram: inline keyboard callback_data `appr:<uuid>` / `aprd:<uuid>` (64-byte cap).
3
+ // Discord: action-row buttons with the same custom_id prefix (100-byte cap).
4
+ // Slack operator DMs: Block Kit actions with the same action_id prefix.
5
+ // Generic ChannelSendRequest keyboard is still unsupported.
6
+ //
7
+ // Ids never embed jti or digest.
8
+ import { dispatchApprovalStore } from '../core/dispatch-approval.js';
9
+ const APPROVE_PREFIX = 'appr:';
10
+ const DENY_PREFIX = 'aprd:';
11
+ export function parseApprovalCallbackData(data) {
12
+ if (data.startsWith(APPROVE_PREFIX))
13
+ return { action: 'approve', opaqueId: data.slice(APPROVE_PREFIX.length) };
14
+ if (data.startsWith(DENY_PREFIX))
15
+ return { action: 'deny', opaqueId: data.slice(DENY_PREFIX.length) };
16
+ return null;
17
+ }
18
+ function issuePair(record, operator) {
19
+ const sessionGeneration = operator.sessionGeneration ?? 0;
20
+ const approveId = dispatchApprovalStore.issueApprovalCallback(record.jti, {
21
+ actorId: operator.actorId,
22
+ conversationKey: operator.conversationKey,
23
+ sessionGeneration,
24
+ action: 'approve',
25
+ });
26
+ const denyId = dispatchApprovalStore.issueApprovalCallback(record.jti, {
27
+ actorId: operator.actorId,
28
+ conversationKey: operator.conversationKey,
29
+ sessionGeneration,
30
+ action: 'deny',
31
+ });
32
+ if (!approveId || !denyId)
33
+ return null;
34
+ return { approveData: APPROVE_PREFIX + approveId, denyData: DENY_PREFIX + denyId };
35
+ }
36
+ export function presentTelegramApproval(record, operator, text) {
37
+ const pair = issuePair(record, operator);
38
+ if (!pair || pair.approveData.length > 64 || pair.denyData.length > 64) {
39
+ return { text, telegramKeyboard: null, discordComponents: null, slackBlocks: null };
40
+ }
41
+ return {
42
+ text,
43
+ telegramKeyboard: {
44
+ inline_keyboard: [[
45
+ { text: 'Approve', callback_data: pair.approveData },
46
+ { text: 'Deny', callback_data: pair.denyData },
47
+ ]],
48
+ },
49
+ discordComponents: null,
50
+ slackBlocks: null,
51
+ };
52
+ }
53
+ export function presentDiscordApproval(record, operator, text) {
54
+ const pair = issuePair(record, operator);
55
+ if (!pair || pair.approveData.length > 100 || pair.denyData.length > 100) {
56
+ return { text, telegramKeyboard: null, discordComponents: null, slackBlocks: null };
57
+ }
58
+ return {
59
+ text,
60
+ telegramKeyboard: null,
61
+ discordComponents: [{
62
+ type: 1,
63
+ components: [
64
+ { type: 2, style: 3, custom_id: pair.approveData, label: 'Approve' },
65
+ { type: 2, style: 4, custom_id: pair.denyData, label: 'Deny' },
66
+ ],
67
+ }],
68
+ slackBlocks: null,
69
+ };
70
+ }
71
+ export function presentSlackApproval(record, operator, text) {
72
+ const pair = issuePair(record, operator);
73
+ if (!pair || pair.approveData.length > 255 || pair.denyData.length > 255) {
74
+ return { text, telegramKeyboard: null, discordComponents: null, slackBlocks: null };
75
+ }
76
+ return {
77
+ text,
78
+ telegramKeyboard: null,
79
+ discordComponents: null,
80
+ slackBlocks: [{
81
+ type: 'actions',
82
+ elements: [
83
+ { type: 'button', text: { type: 'plain_text', text: 'Approve' }, action_id: pair.approveData, style: 'primary' },
84
+ { type: 'button', text: { type: 'plain_text', text: 'Deny' }, action_id: pair.denyData, style: 'danger' },
85
+ ],
86
+ }],
87
+ };
88
+ }
89
+ //# sourceMappingURL=approval-presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-presentation.js","sourceRoot":"","sources":["../../../src/messaging/approval-presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ // ─── Channel Adapter Contract ────────────────────────
2
+ // The closed port every messaging transport is reached through. It lists the whole
3
+ // callable surface: no method bag, no vendor client handed out, no capability
4
+ // inferred from object shape. A method whose capability is false still exists and
5
+ // answers with an `unsupported` receipt, so a caller can never probe
6
+ // `if (adapter.editText)` and get a different answer than the declaration gives.
7
+ import { unsupportedReceipt } from './delivery-outcome.js';
8
+ /** Capability key -> operation. The key names a feature, the method names an action,
9
+ * and this is the one place that says which pairs with which. The conformance suite
10
+ * walks it, so a new capability without an operation fails there rather than drifting. */
11
+ export const CAPABILITY_OPERATIONS = {
12
+ sendText: 'sendText',
13
+ editText: 'editText',
14
+ deleteMessage: 'deleteMessage',
15
+ reaction: 'reaction',
16
+ typing: 'typing',
17
+ fileUpload: 'fileUpload',
18
+ voice: 'voice',
19
+ interactiveActions: 'interactiveActions',
20
+ };
21
+ /** Capability keys that describe a property rather than a callable operation. */
22
+ export const PROPERTY_CAPABILITY_KEYS = [
23
+ 'threads',
24
+ 'durableIngress',
25
+ 'replayableTransport',
26
+ 'maxMessageChars',
27
+ ];
28
+ /** Adapter method for each operation capability. Lets a test call the real method
29
+ * from the declaration instead of hand-maintaining a second list. */
30
+ export const CAPABILITY_METHODS = {
31
+ sendText: 'sendText',
32
+ editText: 'editText',
33
+ deleteMessage: 'deleteMessage',
34
+ reaction: 'addReaction',
35
+ typing: 'setTyping',
36
+ fileUpload: 'uploadFile',
37
+ voice: 'sendVoice',
38
+ interactiveActions: 'sendInteractive',
39
+ };
40
+ /** Guard an operation against its own declaration. An adapter calls this first so a
41
+ * false capability can never reach a vendor request. */
42
+ export function refuseUndeclared(adapter, key) {
43
+ if (adapter.capabilities[key])
44
+ return null;
45
+ return unsupportedReceipt(adapter.channel, adapter.accountId, CAPABILITY_OPERATIONS[key]);
46
+ }
47
+ //# sourceMappingURL=channel-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-adapter.js","sourceRoot":"","sources":["../../../src/messaging/channel-adapter.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,mFAAmF;AACnF,8EAA8E;AAC9E,kFAAkF;AAClF,qEAAqE;AACrE,iFAAiF;AAIjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA2E3D;;2FAE2F;AAC3F,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;IACd,kBAAkB,EAAE,oBAAoB;CACS,CAAC;AAItD,iFAAiF;AACjF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,SAAS;IACT,gBAAgB;IAChB,qBAAqB;IACrB,iBAAiB;CACX,CAAC;AAEX;sEACsE;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,WAAW;IAClB,kBAAkB,EAAE,iBAAiB;CACgC,CAAC;AAE1E;yDACyD;AACzD,MAAM,UAAU,gBAAgB,CAC5B,OAAuE,EACvE,GAA2B;IAE3B,IAAI,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9F,CAAC"}
@@ -1,30 +1,62 @@
1
+ // Kept as literals rather than imported from the chunkers: this module is
2
+ // dependency-light on purpose, and importing src/discord/forwarder.ts would drag
3
+ // discord.js in behind it. `capability-limits.test.ts` asserts these against the
4
+ // constants the chunkers actually use, so the two cannot drift apart silently.
5
+ export const TELEGRAM_MAX_MESSAGE_CHARS = 32_000;
6
+ export const DISCORD_MAX_MESSAGE_CHARS = 2_000;
7
+ export const SLACK_MAX_MESSAGE_CHARS = 3_900;
1
8
  const CAPABILITIES = {
2
9
  telegram: {
3
- editMessages: true,
4
- threads: true,
5
- interactiveComponents: true,
10
+ sendText: true,
11
+ editText: true,
12
+ deleteMessage: true,
13
+ reaction: false,
14
+ typing: true,
6
15
  fileUpload: true,
7
- durableOffset: false,
8
- maxMessageChars: 32_000,
16
+ voice: true,
17
+ threads: true,
18
+ interactiveActions: true,
19
+ durableIngress: true,
20
+ replayableTransport: true,
21
+ maxMessageChars: TELEGRAM_MAX_MESSAGE_CHARS,
9
22
  },
10
23
  discord: {
11
- editMessages: true,
12
- threads: true,
13
- interactiveComponents: true,
24
+ sendText: true,
25
+ editText: false,
26
+ deleteMessage: false,
27
+ reaction: false,
28
+ typing: true,
14
29
  fileUpload: true,
15
- durableOffset: false,
16
- maxMessageChars: 2_000,
30
+ voice: true,
31
+ threads: true,
32
+ interactiveActions: false,
33
+ durableIngress: true,
34
+ replayableTransport: true,
35
+ maxMessageChars: DISCORD_MAX_MESSAGE_CHARS,
17
36
  },
18
37
  slack: {
19
- editMessages: true,
20
- threads: true,
21
- interactiveComponents: true,
38
+ sendText: true,
39
+ editText: true,
40
+ deleteMessage: true,
41
+ reaction: false,
42
+ typing: false,
22
43
  fileUpload: true,
23
- durableOffset: false,
24
- maxMessageChars: 3_900,
44
+ voice: true,
45
+ threads: true,
46
+ interactiveActions: false,
47
+ durableIngress: true,
48
+ replayableTransport: true,
49
+ maxMessageChars: SLACK_MAX_MESSAGE_CHARS,
25
50
  },
26
51
  };
52
+ /** Every key of the closed set, in declaration order. The conformance suite uses
53
+ * this to prove a channel declares all of them and nothing else. */
54
+ export const CHANNEL_CAPABILITY_KEYS = Object.keys(CAPABILITIES.telegram);
27
55
  export function capabilitiesFor(channel) {
28
56
  return CAPABILITIES[channel];
29
57
  }
58
+ /** Read-only view for the matrix generator, which must not reach into module state. */
59
+ export function allChannelCapabilities() {
60
+ return CAPABILITIES;
61
+ }
30
62
  //# sourceMappingURL=channel-capabilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel-capabilities.js","sourceRoot":"","sources":["../../../src/messaging/channel-capabilities.ts"],"names":[],"mappings":"AAWA,MAAM,YAAY,GAAG;IACjB,QAAQ,EAAE;QACN,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,qBAAqB,EAAE,IAAI;QAC3B,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,MAAM;KAC1B;IACD,OAAO,EAAE;QACL,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,qBAAqB,EAAE,IAAI;QAC3B,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,KAAK;KACzB;IACD,KAAK,EAAE;QACH,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,qBAAqB,EAAE,IAAI;QAC3B,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,KAAK;KACzB;CAC6D,CAAC;AAEnE,MAAM,UAAU,eAAe,CAAC,OAAyB;IACrD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"channel-capabilities.js","sourceRoot":"","sources":["../../../src/messaging/channel-capabilities.ts"],"names":[],"mappings":"AA8BA,0EAA0E;AAC1E,iFAAiF;AACjF,iFAAiF;AACjF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C,MAAM,YAAY,GAAG;IACjB,QAAQ,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,IAAI;QACxB,cAAc,EAAE,IAAI;QACpB,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,0BAA0B;KAC9C;IACD,OAAO,EAAE;QACL,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,KAAK;QACzB,cAAc,EAAE,IAAI;QACpB,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,yBAAyB;KAC7C;IACD,KAAK,EAAE;QACH,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,KAAK;QACzB,cAAc,EAAE,IAAI;QACpB,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,uBAAuB;KAC3C;CAC6D,CAAC;AAEnE;qEACqE;AACrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAA6C,CAAC;AAEtH,MAAM,UAAU,eAAe,CAAC,OAAyB;IACrD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB;IAClC,OAAO,YAAY,CAAC;AACxB,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { settings } from '../core/config.js';
2
2
  import { shouldAttachSlack } from '../slack/events.js';
3
- import { getActiveChannel } from './runtime.js';
3
+ import { getHomeChannel, getRunningMessagingTransports, isMessagingTransportRunning, } from './runtime.js';
4
+ import { getIngressJournal } from './durable-ingress.js';
5
+ import { snapshotMetrics } from './metrics.js';
4
6
  function telegramHasSendTarget() {
5
7
  const tg = settings["telegram"];
6
8
  if (tg?.allowedChatIds?.length)
@@ -29,7 +31,7 @@ function slackHasSendTarget() {
29
31
  return Boolean(slackLast?.targetId);
30
32
  }
31
33
  export function getTransportCapability(channel) {
32
- const activeInbound = getActiveChannel() === channel;
34
+ const activeInbound = isMessagingTransportRunning(channel);
33
35
  if (channel === 'telegram') {
34
36
  const tg = settings["telegram"];
35
37
  const token = typeof tg?.token === 'string' ? tg.token.trim() : '';
@@ -81,12 +83,30 @@ export function getTransportCapability(channel) {
81
83
  }
82
84
  return { configured: true, activeInbound, sendCapable: true };
83
85
  }
86
+ const EMPTY_INGRESS = {
87
+ received: 0, processing: 0, completed: 0, dead_letter: 0, oldestOpenReceivedAt: null,
88
+ };
89
+ export function buildIngressHealthSnapshot(journal = getIngressJournal()) {
90
+ if (!journal)
91
+ return { ...EMPTY_INGRESS };
92
+ const counts = journal.counts();
93
+ return {
94
+ received: counts.received,
95
+ processing: counts.processing,
96
+ completed: counts.completed,
97
+ dead_letter: counts.dead_letter,
98
+ oldestOpenReceivedAt: journal.oldestOpenReceivedAt(),
99
+ };
100
+ }
84
101
  export function buildChannelHealthSnapshot() {
85
102
  return {
86
- activeInbound: getActiveChannel(),
103
+ activeInbound: getHomeChannel(),
104
+ activeInboundChannels: getRunningMessagingTransports(),
87
105
  telegram: getTransportCapability('telegram'),
88
106
  discord: getTransportCapability('discord'),
89
107
  slack: getTransportCapability('slack'),
108
+ ingress: buildIngressHealthSnapshot(),
109
+ metrics: snapshotMetrics(),
90
110
  };
91
111
  }
92
112
  //# sourceMappingURL=channel-health.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel-health.js","sourceRoot":"","sources":["../../../src/messaging/channel-health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel-health.js","sourceRoot":"","sources":["../../../src/messaging/channel-health.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,16 @@
1
1
  import { classifySendFailure, retryAfterMs, } from './retry.js';
2
+ /** A refusal issued before any vendor call. Not a delivery failure: nothing was
3
+ * dispatched, so `ambiguous` is false and no `DeliveryFailure` is attached. */
4
+ export function unsupportedReceipt(channel, accountId, operation, reason = 'capability_not_declared') {
5
+ return {
6
+ channel,
7
+ accountId,
8
+ platformMessageId: null,
9
+ status: 'unsupported',
10
+ ambiguous: false,
11
+ unsupported: { operation, reason },
12
+ };
13
+ }
2
14
  function errorInput(err, channel) {
3
15
  const record = err && typeof err === 'object'
4
16
  ? err
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-outcome.js","sourceRoot":"","sources":["../../../src/messaging/delivery-outcome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-outcome.js","sourceRoot":"","sources":["../../../src/messaging/delivery-outcome.ts"],"names":[],"mappings":"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"}