@open-everywhere/provider-slack 0.6.0 → 0.8.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 (141) hide show
  1. package/agent/access/slack-attachment-fetch.ts +2 -1
  2. package/agent/app-manifest.ts +15 -1
  3. package/agent/channels/slack-agent-session.ts +249 -0
  4. package/agent/channels/slack-attachments.ts +20 -11
  5. package/agent/channels/slack-bot-ask.ts +101 -0
  6. package/agent/channels/slack-commands.ts +178 -17
  7. package/agent/channels/slack-context.ts +0 -5
  8. package/agent/channels/slack-events.ts +110 -33
  9. package/agent/channels/slack-follow-ups.ts +148 -0
  10. package/agent/channels/slack-friendly-names.ts +55 -0
  11. package/agent/channels/slack-front.ts +262 -27
  12. package/agent/channels/slack-home.ts +9 -3
  13. package/agent/channels/slack-identity.ts +9 -1
  14. package/agent/channels/slack-memory-canvas.ts +197 -54
  15. package/agent/channels/slack-origin-codec.ts +9 -0
  16. package/agent/channels/slack-post-arm.ts +68 -11
  17. package/agent/channels/slack-read.ts +27 -2
  18. package/agent/channels/slack-reply-blocks.ts +180 -0
  19. package/agent/channels/slack-reply-feedback.ts +75 -0
  20. package/agent/channels/slack-shortcut.ts +1 -1
  21. package/agent/channels/slack-voice-clips.ts +82 -0
  22. package/agent/channels/slack-wake-backscroll.ts +0 -5
  23. package/agent/channels/slack-web-api.ts +4 -2
  24. package/agent/channels/slack.ts +81 -19
  25. package/agent/docs-generated.ts +1282 -2
  26. package/agent/ops.ts +14 -21
  27. package/agent/register.ts +25 -0
  28. package/agent/setup/credentials.ts +17 -0
  29. package/agent/setup/page.ts +6 -3
  30. package/agent/surface-parity.ts +2 -0
  31. package/dist/agent/access/slack-attachment-fetch.d.ts.map +1 -1
  32. package/dist/agent/access/slack-attachment-fetch.js.map +1 -1
  33. package/dist/agent/app-manifest.d.ts.map +1 -1
  34. package/dist/agent/app-manifest.js +15 -1
  35. package/dist/agent/app-manifest.js.map +1 -1
  36. package/dist/agent/channels/slack-agent-session.d.ts +81 -0
  37. package/dist/agent/channels/slack-agent-session.d.ts.map +1 -0
  38. package/dist/agent/channels/slack-agent-session.js +198 -0
  39. package/dist/agent/channels/slack-agent-session.js.map +1 -0
  40. package/dist/agent/channels/slack-attachments.d.ts +11 -0
  41. package/dist/agent/channels/slack-attachments.d.ts.map +1 -1
  42. package/dist/agent/channels/slack-attachments.js +21 -14
  43. package/dist/agent/channels/slack-attachments.js.map +1 -1
  44. package/dist/agent/channels/slack-bot-ask.d.ts +30 -0
  45. package/dist/agent/channels/slack-bot-ask.d.ts.map +1 -0
  46. package/dist/agent/channels/slack-bot-ask.js +91 -0
  47. package/dist/agent/channels/slack-bot-ask.js.map +1 -0
  48. package/dist/agent/channels/slack-commands.d.ts +113 -10
  49. package/dist/agent/channels/slack-commands.d.ts.map +1 -1
  50. package/dist/agent/channels/slack-commands.js +151 -18
  51. package/dist/agent/channels/slack-commands.js.map +1 -1
  52. package/dist/agent/channels/slack-context.d.ts +1 -2
  53. package/dist/agent/channels/slack-context.d.ts.map +1 -1
  54. package/dist/agent/channels/slack-context.js +0 -4
  55. package/dist/agent/channels/slack-context.js.map +1 -1
  56. package/dist/agent/channels/slack-events.d.ts +47 -97
  57. package/dist/agent/channels/slack-events.d.ts.map +1 -1
  58. package/dist/agent/channels/slack-events.js +90 -22
  59. package/dist/agent/channels/slack-events.js.map +1 -1
  60. package/dist/agent/channels/slack-follow-ups.d.ts +44 -0
  61. package/dist/agent/channels/slack-follow-ups.d.ts.map +1 -0
  62. package/dist/agent/channels/slack-follow-ups.js +129 -0
  63. package/dist/agent/channels/slack-follow-ups.js.map +1 -0
  64. package/dist/agent/channels/slack-friendly-names.d.ts +10 -0
  65. package/dist/agent/channels/slack-friendly-names.d.ts.map +1 -0
  66. package/dist/agent/channels/slack-friendly-names.js +45 -0
  67. package/dist/agent/channels/slack-friendly-names.js.map +1 -0
  68. package/dist/agent/channels/slack-front.d.ts +38 -46
  69. package/dist/agent/channels/slack-front.d.ts.map +1 -1
  70. package/dist/agent/channels/slack-front.js +230 -23
  71. package/dist/agent/channels/slack-front.js.map +1 -1
  72. package/dist/agent/channels/slack-home.d.ts.map +1 -1
  73. package/dist/agent/channels/slack-home.js +10 -3
  74. package/dist/agent/channels/slack-home.js.map +1 -1
  75. package/dist/agent/channels/slack-identity.d.ts +7 -21
  76. package/dist/agent/channels/slack-identity.d.ts.map +1 -1
  77. package/dist/agent/channels/slack-identity.js +3 -1
  78. package/dist/agent/channels/slack-identity.js.map +1 -1
  79. package/dist/agent/channels/slack-memory-canvas.d.ts +21 -5
  80. package/dist/agent/channels/slack-memory-canvas.d.ts.map +1 -1
  81. package/dist/agent/channels/slack-memory-canvas.js +166 -55
  82. package/dist/agent/channels/slack-memory-canvas.js.map +1 -1
  83. package/dist/agent/channels/slack-origin-codec.d.ts.map +1 -1
  84. package/dist/agent/channels/slack-origin-codec.js +10 -0
  85. package/dist/agent/channels/slack-origin-codec.js.map +1 -1
  86. package/dist/agent/channels/slack-post-arm.d.ts +21 -1
  87. package/dist/agent/channels/slack-post-arm.d.ts.map +1 -1
  88. package/dist/agent/channels/slack-post-arm.js +57 -10
  89. package/dist/agent/channels/slack-post-arm.js.map +1 -1
  90. package/dist/agent/channels/slack-read.d.ts +11 -1
  91. package/dist/agent/channels/slack-read.d.ts.map +1 -1
  92. package/dist/agent/channels/slack-read.js +27 -3
  93. package/dist/agent/channels/slack-read.js.map +1 -1
  94. package/dist/agent/channels/slack-reply-blocks.d.ts +29 -0
  95. package/dist/agent/channels/slack-reply-blocks.d.ts.map +1 -0
  96. package/dist/agent/channels/slack-reply-blocks.js +172 -0
  97. package/dist/agent/channels/slack-reply-blocks.js.map +1 -0
  98. package/dist/agent/channels/slack-reply-feedback.d.ts +23 -0
  99. package/dist/agent/channels/slack-reply-feedback.d.ts.map +1 -0
  100. package/dist/agent/channels/slack-reply-feedback.js +63 -0
  101. package/dist/agent/channels/slack-reply-feedback.js.map +1 -0
  102. package/dist/agent/channels/slack-shortcut.d.ts +10 -0
  103. package/dist/agent/channels/slack-shortcut.d.ts.map +1 -1
  104. package/dist/agent/channels/slack-shortcut.js +1 -1
  105. package/dist/agent/channels/slack-shortcut.js.map +1 -1
  106. package/dist/agent/channels/slack-voice-clips.d.ts +16 -0
  107. package/dist/agent/channels/slack-voice-clips.d.ts.map +1 -0
  108. package/dist/agent/channels/slack-voice-clips.js +80 -0
  109. package/dist/agent/channels/slack-voice-clips.js.map +1 -0
  110. package/dist/agent/channels/slack-wake-backscroll.d.ts +0 -2
  111. package/dist/agent/channels/slack-wake-backscroll.d.ts.map +1 -1
  112. package/dist/agent/channels/slack-wake-backscroll.js +0 -4
  113. package/dist/agent/channels/slack-wake-backscroll.js.map +1 -1
  114. package/dist/agent/channels/slack-web-api.d.ts.map +1 -1
  115. package/dist/agent/channels/slack-web-api.js +4 -2
  116. package/dist/agent/channels/slack-web-api.js.map +1 -1
  117. package/dist/agent/channels/slack.d.ts +22 -1
  118. package/dist/agent/channels/slack.d.ts.map +1 -1
  119. package/dist/agent/channels/slack.js +70 -16
  120. package/dist/agent/channels/slack.js.map +1 -1
  121. package/dist/agent/docs-generated.d.ts.map +1 -1
  122. package/dist/agent/docs-generated.js +1282 -2
  123. package/dist/agent/docs-generated.js.map +1 -1
  124. package/dist/agent/ops.d.ts +1 -1
  125. package/dist/agent/ops.d.ts.map +1 -1
  126. package/dist/agent/ops.js +15 -21
  127. package/dist/agent/ops.js.map +1 -1
  128. package/dist/agent/register.d.ts.map +1 -1
  129. package/dist/agent/register.js +22 -1
  130. package/dist/agent/register.js.map +1 -1
  131. package/dist/agent/setup/credentials.d.ts +12 -0
  132. package/dist/agent/setup/credentials.d.ts.map +1 -1
  133. package/dist/agent/setup/credentials.js +17 -0
  134. package/dist/agent/setup/credentials.js.map +1 -1
  135. package/dist/agent/setup/page.d.ts.map +1 -1
  136. package/dist/agent/setup/page.js +6 -3
  137. package/dist/agent/setup/page.js.map +1 -1
  138. package/dist/agent/surface-parity.d.ts.map +1 -1
  139. package/dist/agent/surface-parity.js +2 -0
  140. package/dist/agent/surface-parity.js.map +1 -1
  141. package/package.json +40 -3
@@ -1,4 +1,4 @@
1
- import { type MemoryWriteEvent } from "@open-everywhere/core/agent/adapter-api.js";
1
+ import { type MemoryWriteEvent, type OperationalStore } from "@open-everywhere/core/agent/adapter-api.js";
2
2
  export type CanvasOutcome = "created" | "updated" | "unchanged" | "skipped-external" | "skipped-guest" | "skipped-foreign" | "skipped-disabled" | "cleared-external" | "cleared-guest" | "cleared-disabled" | "clear-failed" | "failed";
3
3
  export interface MemoryCanvasDeps {
4
4
  /** One Slack Web API call; undefined on any failure. */
@@ -10,6 +10,8 @@ export interface MemoryCanvasDeps {
10
10
  * `users.info` probe (slack-events.ts `slackAuthorIsMember`). */
11
11
  readonly authorIsMember: (userId: string, teamId: string | undefined) => Promise<boolean | undefined>;
12
12
  readonly now?: () => Date;
13
+ /** The `memory_canvas` row (OPE-2587). The live dep is the operational store. */
14
+ readonly store?: Pick<OperationalStore, "getMemoryCanvas" | "setMemoryCanvas">;
13
15
  }
14
16
  /** The live deps: every call through `slackForm` (the one Web API seam, fail-soft), the room verdict
15
17
  * read FRESH, and the shared per-person membership probe. */
@@ -20,21 +22,35 @@ export declare function liveMemoryCanvasDeps(): MemoryCanvasDeps;
20
22
  * on some clients. A memory view must never notify anyone, so both forms are defused. PURE.
21
23
  */
22
24
  export declare function defuseCanvasText(markdown: string): string;
25
+ /** The channel one canvas decision is about, and the org and team its `memory_canvas` row is keyed by. */
26
+ export interface CanvasRoom {
27
+ readonly org: string;
28
+ readonly teamId: string;
29
+ readonly channelId: string;
30
+ }
23
31
  /**
24
32
  * Write one channel's canvas — or, with `markdown: null`, only RECHECK it. Never throws.
25
33
  *
26
- * 🔴 THE GATE RUNS BEFORE EVERY DECISION, AND A FAILED GATE TAKES THE APP'S OWN CANVAS DOWN (OPE-2451,
34
+ * 🔴 THE GATE RUNS BEFORE EVERY DECISION, AND A FAILED GATE TAKES THE MEMORY CANVAS DOWN (OPE-2451,
27
35
  * the brain's security review). A canvas the app wrote while the channel passed outlives the room's
28
36
  * trust otherwise: once the channel is shared, or a guest joins, a refresh that merely SKIPS leaves
29
37
  * every line of the domain's memory on screen for the new audience. So on either refusal the app
30
- * replaces its own canvas with {@link withdrawnCanvasMarkdown} ({@link withdrawIfOurs}). A canvas a
31
- * PERSON made is never touched, in either direction.
38
+ * replaces the memory canvas with {@link withdrawnCanvasMarkdown} ({@link withdrawIfOurs}).
39
+ *
40
+ * 🔴 ONLY THE MEMORY CANVAS IS WRITTEN (OPE-2587). Slack shows a channel's canvases as tabs, and the
41
+ * canvas a person approves through `write_canvas` has the app's bot user as its creator too. So the app
42
+ * rewrites only the canvas core's {@link memoryCanvasAmong} finds: the id its `memory_canvas` row
43
+ * holds, or, for a canvas made before the row existed, the rule that function names. A channel with no
44
+ * memory canvas gets one, and the row records its id. A person's canvas and a `write_canvas` canvas are
45
+ * not touched, in either direction, unless a person typed the memory canvas footer line into one by
46
+ * hand ({@link memoryCanvasAmong} rule 3). A lookup that leaves the answer open writes nothing (`failed`),
47
+ * because a new canvas could then duplicate the memory canvas.
32
48
  *
33
49
  * `null` markdown is the recheck the trust EVENTS run: it takes the canvas down on a failed gate and
34
50
  * writes nothing on a passing one (`unchanged`). `joinedUserId` is the person a join event named: they
35
51
  * are probed DIRECTLY, because Slack's member list may not carry them yet when the event arrives.
36
52
  */
37
- export declare function publishChannelCanvas(channelId: string, markdown: string | null, botUserId: string | undefined, deps: MemoryCanvasDeps, teamId?: string, joinedUserId?: string): Promise<CanvasOutcome>;
53
+ export declare function publishChannelCanvas(room: CanvasRoom, markdown: string | null, botUserId: string | undefined, deps: MemoryCanvasDeps, joinedUserId?: string): Promise<CanvasOutcome>;
38
54
  /** What woke a canvas decision: a memory write, or one of the two trust events. */
39
55
  export type CanvasTrigger = "memory-write" | "member-joined" | "channel-shared";
40
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"slack-memory-canvas.d.ts","sourceRoot":"","sources":["../../../agent/channels/slack-memory-canvas.ts"],"names":[],"mappings":"AAmCA,OAAO,EASL,KAAK,gBAAgB,EACtB,MAAM,4CAA4C,CAAC;AAcpD,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,WAAW,GACX,kBAAkB,GAClB,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,eAAe,GACf,kBAAkB,GAClB,cAAc,GACd,QAAQ,CAAC;AAMb,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/G;wGACoG;IACpG,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE;sEACkE;IAClE,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACtG,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;8DAC8D;AAC9D,wBAAgB,oBAAoB,IAAI,gBAAgB,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAmHD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,gBAAgB,EACtB,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,aAAa,CAAC,CAsBxB;AAED,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAEhF;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE;IACL,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,EACD,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,aAAa,CAAC,CAsBxB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC1G;AAMD,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/F"}
1
+ {"version":3,"file":"slack-memory-canvas.d.ts","sourceRoot":"","sources":["../../../agent/channels/slack-memory-canvas.ts"],"names":[],"mappings":"AA4CA,OAAO,EAkBL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAEtB,MAAM,4CAA4C,CAAC;AAcpD,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,WAAW,GACX,kBAAkB,GAClB,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,eAAe,GACf,kBAAkB,GAClB,cAAc,GACd,QAAQ,CAAC;AAMb,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/G;wGACoG;IACpG,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE;sEACkE;IAClE,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACtG,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;CAChF;AA8DD;8DAC8D;AAC9D,wBAAgB,oBAAoB,IAAI,gBAAgB,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAyFD,0GAA0G;AAC1G,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAqDD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,gBAAgB,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,aAAa,CAAC,CAwBxB;AAOD,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAEhF;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE;IACL,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,EACD,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,aAAa,CAAC,CA8BxB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C1G;AAMD,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/F"}
@@ -24,15 +24,24 @@
24
24
  // reports, until the next memory write or trust event re-runs it (docs/capabilities/memory.md lists
25
25
  // every limit).
26
26
  //
27
- // 🔴 A CANVAS THE APP DID NOT CREATE IS NEVER TOUCHED. A channel has at most one channel canvas, and
28
- // people write their own. When the channel already has one, the app rewrites it only when
29
- // `files.info` names the app's own bot user as its creator. A person's canvas stays theirs, and the
30
- // refusal is logged and audited so an operator can see why a channel shows no memory.
27
+ // 🔴 ONLY THE MEMORY CANVAS IS EVER TOUCHED (OPE-2587). A channel can show more than one canvas (the
28
+ // channel canvas and its canvas tabs). People write their own, and the agent creates canvases for
29
+ // people through `write_canvas`, with the app's own bot user as the creator. So the creator does not
30
+ // mark the memory canvas. The app records the id `conversations.canvases.create` answers in the
31
+ // `memory_canvas` row and rewrites only that canvas (core `memoryCanvasAmong` names the rule, and how
32
+ // a canvas made before the row existed is adopted). Every other canvas stays as its owner left it,
33
+ // unless a person types the memory canvas footer line into it by hand (core `memoryCanvasAmong` rule
34
+ // 3). A channel whose canvas slot another canvas holds gets no memory canvas, and the refusal is logged
35
+ // and audited so an operator can see why a channel shows no memory.
31
36
  //
32
37
  // 🔴 WHAT A CANVAS DOES NOT DO. It is a READ view. Members correct or forget a line by asking the
33
38
  // agent in the channel, which goes through the tools and the approval card like any other change.
34
39
  // An edit made directly in the canvas is overwritten on the next memory write — the canvas says so.
35
- import { agentDisplayName, appendAudit, domainForChannel, domainsNamingSilo, getConfig, readDomainMemory, renderMemoryMarkdown, } from "@open-everywhere/core/agent/adapter-api.js";
40
+ // The agent's own `write_canvas` refuses this canvas for the same reason (core
41
+ // channels/slack-canvas-list.ts `refuseMemoryCanvasWrite`, OPE-2585): both sides find the memory
42
+ // canvas through the one core rule, `memoryCanvasAmong`. It reads the `properties.canvas` field AND
43
+ // every canvas tab (`properties.tabs[]`, OPE-2587), because Slack can hold a channel canvas only as a tab.
44
+ import { agentDisplayName, appendAudit, domainForChannel, domainsNamingSilo, getConfig, getOperationalStore, MEMORY_CANVAS_MARKER, memoryCanvasAmong, memoryCanvasSurfaceKey, readDomainMemory, storedMemoryCanvas, memoryLineForReader, renderMemoryMarkdown, scrubAuditText, } from "@open-everywhere/core/agent/adapter-api.js";
36
45
  import { confirmChannelInternalFresh, slackAuthorIsMember, slackForm } from "./slack-events.js";
37
46
  import { encodeSlackForm } from "./slack-web-api.js";
38
47
  /** The audit action every refresh attempt writes, one row per channel. Declared in core's registry. */
@@ -46,6 +55,53 @@ const CANVAS_MARKDOWN_MAX = 90_000;
46
55
  /** The most members a canvas channel may have and still be checked person by person (one page of
47
56
  * `conversations.members`). A larger channel is refused rather than half-checked. */
48
57
  const MEMBER_CHECK_MAX = 200;
58
+ /** The longest Slack-supplied string the audit row keeps. Slack's codes and scope lists are far shorter. */
59
+ const SLACK_ERROR_TEXT_MAX = 120;
60
+ /** Slack's own text, kept only when it is a short code or scope list: never a free-text blob. */
61
+ function slackCode(v) {
62
+ return typeof v === "string" && v.length > 0 && v.length <= SLACK_ERROR_TEXT_MAX && /^[A-Za-z0-9_.:,-]+$/.test(v) ? v : undefined;
63
+ }
64
+ /**
65
+ * Wrap the deps of ONE canvas decision so the decision's last Slack refusal is kept (OPE-2600). Every
66
+ * lookup on the canvas path is fail-soft, and core's {@link memoryCanvasAmong} reads only `ok`, so
67
+ * without this a scope gap and a product defect both reach the audit row as a bare `failed`. The
68
+ * LAST refusal of the decision is kept. On most paths that is the call that decided the outcome. An
69
+ * earlier refusal can also have only shaped the path: a refused `auth.test` leaves the bot unknown, and
70
+ * a refused `conversations.members` sends the decision to the take-down. A throw is never a Slack
71
+ * refusal, so the callers drop the refusal on their throw path.
72
+ */
73
+ function recordSlackRefusals(deps) {
74
+ let last;
75
+ return {
76
+ deps: {
77
+ ...deps,
78
+ call: async (method, body) => {
79
+ const res = await deps.call(method, body);
80
+ if (res === undefined)
81
+ last = { method, error: "no_response" };
82
+ else if (res.ok !== true) {
83
+ const needed = slackCode(res.needed);
84
+ last = { method, error: slackCode(res.error) ?? "unknown", ...(needed ? { needed } : {}) };
85
+ }
86
+ return res;
87
+ },
88
+ },
89
+ refusal: () => last,
90
+ };
91
+ }
92
+ /** The Slack refusal behind an outcome, when it has one: present only on `failed` and `clear-failed`,
93
+ * and only when a Slack call was refused. A failure with no Slack refusal (a store read, a throw)
94
+ * answers undefined. */
95
+ function refusalFor(outcome, refusal) {
96
+ return outcome === "failed" || outcome === "clear-failed" ? refusal : undefined;
97
+ }
98
+ /** The audit detail fields for a refusal: `slackError` (Slack's code, through the audit scrub, as every
99
+ * error-named key must be), `slackMethod`, and `slackNeeded` when Slack names a scope. */
100
+ function slackErrorDetail(e) {
101
+ if (!e)
102
+ return {};
103
+ return { slackError: scrubAuditText(e.error), slackMethod: e.method, ...(e.needed ? { slackNeeded: scrubAuditText(e.needed) } : {}) };
104
+ }
49
105
  /** The live deps: every call through `slackForm` (the one Web API seam, fail-soft), the room verdict
50
106
  * read FRESH, and the shared per-person membership probe. */
51
107
  export function liveMemoryCanvasDeps() {
@@ -67,9 +123,10 @@ export function defuseCanvasText(markdown) {
67
123
  function memoryCanvasMarkdown(domain, groups, nowIso) {
68
124
  const name = agentDisplayName();
69
125
  const body = renderMemoryMarkdown(`What ${name} knows — ${domain.title ?? domain.name}`, groups, nowIso);
70
- const footer = `\n---\n${name} keeps this canvas up to date from this domain's memory. ` +
71
- `To correct or forget a line, ask ${name} in this channel. A direct edit to this canvas is replaced on the next memory change.\n`;
72
- const text = defuseCanvasText(body);
126
+ const footer = `\n---\n${name} keeps this canvas up to date. To correct or forget a line, ask ${name} in this channel. ` +
127
+ `${MEMORY_CANVAS_MARKER}\n`;
128
+ // OPE-2486 — the memory provenance carriers read as plain words on a canvas a whole channel reads.
129
+ const text = defuseCanvasText(memoryLineForReader(body));
73
130
  const cut = text.length > CANVAS_MARKDOWN_MAX ? text.slice(0, CANVAS_MARKDOWN_MAX) + "\n\n_This canvas is full. Ask in this channel for the rest._\n" : text;
74
131
  return cut + footer;
75
132
  }
@@ -143,56 +200,86 @@ async function everyMemberIsFull(channelId, teamId, botUserId, deps) {
143
200
  function withdrawnCanvasMarkdown() {
144
201
  const name = agentDisplayName();
145
202
  return (`# ${name}'s memory canvas was withdrawn\n\n` +
146
- `This channel is shared outside the workspace, or one of its members is not a full member, so ${name} no longer shows a domain's memory here. ` +
147
- `The memory itself is unchanged. Members can still ask ${name} about it where the domain's memory is readable.\n`);
203
+ `This channel includes guests or people from outside your organisation, so ${name} no longer shows its memory here. ` +
204
+ `The memory itself is unchanged. Members can still ask ${name} about it in an internal channel. ` +
205
+ // The marker keeps the withdrawn canvas the memory canvas, so a later refresh rewrites it in place.
206
+ `${MEMORY_CANVAS_MARKER}\n`);
207
+ }
208
+ /** Slack's answer when it answered `ok`, else undefined: the read shape core's rule takes. */
209
+ function readOk(deps) {
210
+ return async (method, params) => {
211
+ const res = await deps.call(method, params);
212
+ return res?.ok === true ? res : undefined;
213
+ };
214
+ }
215
+ /** The memory canvas among the channel's canvases, by core's one rule (OPE-2587). */
216
+ async function findMemoryCanvas(room, info, botUserId, deps) {
217
+ const stored = await storedMemoryCanvas(deps.store ?? getOperationalStore(), room.org, memoryCanvasSurfaceKey(room.teamId, room.channelId));
218
+ return memoryCanvasAmong(readOk(deps), info, stored, botUserId);
219
+ }
220
+ /** Record the room's memory canvas id. A failed write is not an outcome: the row then names an older id
221
+ * or none, the canvas carries {@link MEMORY_CANVAS_MARKER}, and core's rule scans for the marker
222
+ * whenever the row's id is not on screen. So the next decision finds this canvas again. */
223
+ async function recordMemoryCanvas(room, canvasId, deps) {
224
+ const at = (deps.now?.() ?? new Date()).toISOString();
225
+ await (deps.store ?? getOperationalStore()).setMemoryCanvas(room.org, memoryCanvasSurfaceKey(room.teamId, room.channelId), canvasId, at).catch(() => undefined);
148
226
  }
149
227
  /**
150
- * Take the app's OWN canvas down in one channel, if it has one. FAIL-CLOSED ON EVERY LOOKUP: a failed
151
- * `conversations.info`, a failed `files.info`, or an unknown bot identity answers `clear-failed`, never
152
- * a skip — the caller cannot rule out that the app's canvas is still on screen, and the audit row must
153
- * say so. `skipped-*` is kept for the two answers that PROVE nothing of ours is there: no channel
154
- * canvas at all, or a canvas whose creator is somebody else.
228
+ * Take the memory canvas down in one channel, if it has one. FAIL-CLOSED ON EVERY LOOKUP: a failed
229
+ * `conversations.info`, store read, `files.info` or section lookup, or an unknown bot identity, answers
230
+ * `clear-failed`, never a skip — the caller cannot rule out that the memory canvas is still on screen,
231
+ * and the audit row must say so. `skipped-*` is kept for the answer that PROVES no memory canvas is on
232
+ * screen ({@link memoryCanvasAmong} answers `none`). Only the memory canvas is cleared: a person's
233
+ * canvas, and a canvas the agent made for a person through `write_canvas`, are not touched (OPE-2587),
234
+ * unless a person typed the memory canvas footer line into one by hand ({@link memoryCanvasAmong} rule 3).
155
235
  */
156
- async function withdrawIfOurs(channelId, reason, botUserId, deps) {
157
- const info = await deps.call("conversations.info", { channel: channelId });
236
+ async function withdrawIfOurs(room, reason, botUserId, deps) {
237
+ const info = await deps.call("conversations.info", { channel: room.channelId });
158
238
  if (info?.ok !== true)
159
239
  return "clear-failed";
160
- const existing = canvasIdOf(info);
161
- if (!existing)
162
- return `skipped-${reason}`;
163
- const file = await deps.call("files.info", { file: existing });
164
- if (file?.ok !== true)
165
- return "clear-failed";
166
- const creator = file.file?.user;
167
- if (botUserId === undefined)
240
+ const match = await findMemoryCanvas(room, info, botUserId, deps);
241
+ if (match.kind === "unsure")
168
242
  return "clear-failed";
169
- if (creator !== botUserId)
243
+ if (match.kind === "none")
170
244
  return `skipped-${reason}`;
171
245
  const cleared = await deps.call("canvases.edit", {
172
- canvas_id: existing,
246
+ canvas_id: match.canvasId,
173
247
  changes: [{ operation: "replace", document_content: { type: "markdown", markdown: withdrawnCanvasMarkdown() } }],
174
248
  });
175
- return cleared?.ok === true ? `cleared-${reason}` : "clear-failed";
176
- }
177
- function canvasIdOf(info) {
178
- const props = info.channel?.properties;
179
- return typeof props?.canvas?.file_id === "string" ? props.canvas.file_id : undefined;
249
+ if (cleared?.ok !== true)
250
+ return "clear-failed";
251
+ if (match.adopt)
252
+ await recordMemoryCanvas(room, match.canvasId, deps);
253
+ return `cleared-${reason}`;
180
254
  }
255
+ /** Slack's refusals of `conversations.canvases.create` that mean the channel's canvas slot holds a
256
+ * canvas that is not the memory canvas: a person's channel canvas, or the one tab a free plan allows,
257
+ * which a person's canvas or a canvas the agent made through `write_canvas` can hold. */
258
+ const CANVAS_SLOT_TAKEN = new Set(["channel_canvas_already_exists", "free_team_canvas_tab_already_exists"]);
181
259
  /**
182
260
  * Write one channel's canvas — or, with `markdown: null`, only RECHECK it. Never throws.
183
261
  *
184
- * 🔴 THE GATE RUNS BEFORE EVERY DECISION, AND A FAILED GATE TAKES THE APP'S OWN CANVAS DOWN (OPE-2451,
262
+ * 🔴 THE GATE RUNS BEFORE EVERY DECISION, AND A FAILED GATE TAKES THE MEMORY CANVAS DOWN (OPE-2451,
185
263
  * the brain's security review). A canvas the app wrote while the channel passed outlives the room's
186
264
  * trust otherwise: once the channel is shared, or a guest joins, a refresh that merely SKIPS leaves
187
265
  * every line of the domain's memory on screen for the new audience. So on either refusal the app
188
- * replaces its own canvas with {@link withdrawnCanvasMarkdown} ({@link withdrawIfOurs}). A canvas a
189
- * PERSON made is never touched, in either direction.
266
+ * replaces the memory canvas with {@link withdrawnCanvasMarkdown} ({@link withdrawIfOurs}).
267
+ *
268
+ * 🔴 ONLY THE MEMORY CANVAS IS WRITTEN (OPE-2587). Slack shows a channel's canvases as tabs, and the
269
+ * canvas a person approves through `write_canvas` has the app's bot user as its creator too. So the app
270
+ * rewrites only the canvas core's {@link memoryCanvasAmong} finds: the id its `memory_canvas` row
271
+ * holds, or, for a canvas made before the row existed, the rule that function names. A channel with no
272
+ * memory canvas gets one, and the row records its id. A person's canvas and a `write_canvas` canvas are
273
+ * not touched, in either direction, unless a person typed the memory canvas footer line into one by
274
+ * hand ({@link memoryCanvasAmong} rule 3). A lookup that leaves the answer open writes nothing (`failed`),
275
+ * because a new canvas could then duplicate the memory canvas.
190
276
  *
191
277
  * `null` markdown is the recheck the trust EVENTS run: it takes the canvas down on a failed gate and
192
278
  * writes nothing on a passing one (`unchanged`). `joinedUserId` is the person a join event named: they
193
279
  * are probed DIRECTLY, because Slack's member list may not carry them yet when the event arrives.
194
280
  */
195
- export async function publishChannelCanvas(channelId, markdown, botUserId, deps, teamId, joinedUserId) {
281
+ export async function publishChannelCanvas(room, markdown, botUserId, deps, joinedUserId) {
282
+ const { channelId, teamId } = room;
196
283
  const blocked = !(await deps.channelInternal(channelId))
197
284
  ? "external"
198
285
  : (joinedUserId !== undefined && joinedUserId !== botUserId && (await deps.authorIsMember(joinedUserId, teamId)) !== true) ||
@@ -200,24 +287,33 @@ export async function publishChannelCanvas(channelId, markdown, botUserId, deps,
200
287
  ? "guest"
201
288
  : undefined;
202
289
  if (blocked)
203
- return withdrawIfOurs(channelId, blocked, botUserId, deps);
290
+ return withdrawIfOurs(room, blocked, botUserId, deps);
204
291
  if (markdown === null)
205
292
  return "unchanged";
206
293
  const info = await deps.call("conversations.info", { channel: channelId });
207
294
  if (info?.ok !== true)
208
295
  return "failed";
209
- const existing = canvasIdOf(info);
210
- if (!existing) {
296
+ const match = await findMemoryCanvas(room, info, botUserId, deps);
297
+ if (match.kind === "unsure")
298
+ return "failed";
299
+ if (match.kind === "none") {
211
300
  const created = await deps.call("conversations.canvases.create", { channel_id: channelId, document_content: { type: "markdown", markdown } });
212
- return created?.ok === true ? "created" : "failed";
301
+ if (created?.ok !== true)
302
+ return typeof created?.error === "string" && CANVAS_SLOT_TAKEN.has(created.error) ? "skipped-foreign" : "failed";
303
+ if (typeof created.canvas_id === "string" && created.canvas_id.length > 0)
304
+ await recordMemoryCanvas(room, created.canvas_id, deps);
305
+ return "created";
213
306
  }
214
- // Ownership before any write: only a canvas the app's own bot user created is the app's to replace.
215
- const file = await deps.call("files.info", { file: existing });
216
- const creator = file?.ok === true ? file.file?.user : undefined;
217
- if (botUserId === undefined || creator !== botUserId)
218
- return "skipped-foreign";
219
- const edited = await deps.call("canvases.edit", { canvas_id: existing, changes: [{ operation: "replace", document_content: { type: "markdown", markdown } }] });
220
- return edited?.ok === true ? "updated" : "failed";
307
+ const edited = await deps.call("canvases.edit", { canvas_id: match.canvasId, changes: [{ operation: "replace", document_content: { type: "markdown", markdown } }] });
308
+ if (edited?.ok !== true)
309
+ return "failed";
310
+ if (match.adopt)
311
+ await recordMemoryCanvas(room, match.canvasId, deps);
312
+ return "updated";
313
+ }
314
+ /** The deploy-log tail for a Slack refusal: the method and code, and the scope Slack names. */
315
+ function slackErrorLog(e) {
316
+ return e ? ` (${e.method}: ${e.error}${e.needed ? `, needs ${e.needed}` : ""})` : "";
221
317
  }
222
318
  /**
223
319
  * Recheck ONE channel's canvas after a trust event (a person joined it, or it was shared). The front
@@ -231,15 +327,23 @@ export async function publishChannelCanvas(channelId, markdown, botUserId, deps,
231
327
  */
232
328
  export async function recheckChannelCanvas(input, deps) {
233
329
  const surfaceKey = `slack/${input.teamId}/${input.channelId}`;
330
+ const room = { org: input.org, teamId: input.teamId, channelId: input.channelId };
234
331
  const domain = domainForChannel(surfaceKey, getConfig().loadDomains());
235
332
  const shows = domain !== undefined && domain.memory !== undefined && domain.memoryCanvas !== false;
236
- const auth = await deps.call("auth.test", {});
333
+ // The recorder starts before `auth.test`: an unknown bot identity is a refusal the row should name.
334
+ const recorded = recordSlackRefusals(deps);
335
+ const auth = await recorded.deps.call("auth.test", {});
237
336
  const botUserId = auth?.ok === true && typeof auth.user_id === "string" ? auth.user_id : undefined;
337
+ let threw = false;
238
338
  const outcome = await (shows
239
- ? publishChannelCanvas(input.channelId, null, botUserId, deps, input.teamId, input.joinedUserId)
240
- : withdrawIfOurs(input.channelId, "disabled", botUserId, deps)).catch(() => "clear-failed");
339
+ ? publishChannelCanvas(room, null, botUserId, recorded.deps, input.joinedUserId)
340
+ : withdrawIfOurs(room, "disabled", botUserId, recorded.deps)).catch(() => {
341
+ threw = true;
342
+ return "clear-failed";
343
+ });
344
+ const refusal = threw ? undefined : refusalFor(outcome, recorded.refusal());
241
345
  if (outcome !== "unchanged" && outcome !== "skipped-disabled") {
242
- console.log(`[open-everywhere:slack-canvas] ${input.trigger} recheck, channel ${input.channelId}: ${outcome}`);
346
+ console.log(`[open-everywhere:slack-canvas] ${input.trigger} recheck, channel ${input.channelId}: ${outcome}${slackErrorLog(refusal)}`);
243
347
  }
244
348
  await appendAudit({
245
349
  org: input.org,
@@ -247,7 +351,7 @@ export async function recheckChannelCanvas(input, deps) {
247
351
  workspace: input.teamId,
248
352
  surface: input.channelId,
249
353
  action: MEMORY_CANVAS_ACTION,
250
- detail: { domain: domain?.name ?? null, trigger: input.trigger, outcome },
354
+ detail: { domain: domain?.name ?? null, trigger: input.trigger, outcome, ...slackErrorDetail(refusal) },
251
355
  }).catch(() => undefined);
252
356
  return outcome;
253
357
  }
@@ -280,9 +384,16 @@ export async function refreshMemoryCanvases(event, deps) {
280
384
  const markdown = shows ? memoryCanvasMarkdown(domain, await readDomainMemory(event.org, domain), nowIso) : "";
281
385
  for (const room of rooms) {
282
386
  // A throw on the clear-only path cannot rule out that the old canvas is still up, so it says so.
283
- const outcome = await (shows ? publishChannelCanvas(room.channelId, markdown, botUserId, deps, teamId) : withdrawIfOurs(room.channelId, "disabled", botUserId, deps)).catch(() => (shows ? "failed" : "clear-failed"));
387
+ const canvasRoom = { org: event.org, teamId, channelId: room.channelId };
388
+ const recorded = recordSlackRefusals(deps);
389
+ let threw = false;
390
+ const outcome = await (shows ? publishChannelCanvas(canvasRoom, markdown, botUserId, recorded.deps) : withdrawIfOurs(canvasRoom, "disabled", botUserId, recorded.deps)).catch(() => {
391
+ threw = true;
392
+ return shows ? "failed" : "clear-failed";
393
+ });
394
+ const refusal = threw ? undefined : refusalFor(outcome, recorded.refusal());
284
395
  if (outcome !== "created" && outcome !== "updated") {
285
- console.log(`[open-everywhere:slack-canvas] domain "${domain.name}" channel ${room.channelId}: ${outcome}`);
396
+ console.log(`[open-everywhere:slack-canvas] domain "${domain.name}" channel ${room.channelId}: ${outcome}${slackErrorLog(refusal)}`);
286
397
  }
287
398
  const [platform, workspace, surface] = room.surfaceKey.split("/");
288
399
  await appendAudit({
@@ -291,7 +402,7 @@ export async function refreshMemoryCanvases(event, deps) {
291
402
  workspace: workspace,
292
403
  surface: surface,
293
404
  action: MEMORY_CANVAS_ACTION,
294
- detail: { domain: domain.name, trigger: "memory-write", silo: event.silo, outcome, chars: markdown.length },
405
+ detail: { domain: domain.name, trigger: "memory-write", silo: event.silo, outcome, chars: markdown.length, ...slackErrorDetail(refusal) },
295
406
  }).catch(() => undefined);
296
407
  }
297
408
  }
@@ -1 +1 @@
1
- {"version":3,"file":"slack-memory-canvas.js","sourceRoot":"","sources":["../../../agent/channels/slack-memory-canvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-memory-canvas.js","sourceRoot":"","sources":["../../../agent/channels/slack-memory-canvas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"slack-origin-codec.d.ts","sourceRoot":"","sources":["../../../agent/channels/slack-origin-codec.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAErG,KAAK,WAAW,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAMrE,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,WAAW,CAgD7D,CAAC"}
1
+ {"version":3,"file":"slack-origin-codec.d.ts","sourceRoot":"","sources":["../../../agent/channels/slack-origin-codec.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAErG,KAAK,WAAW,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAMrE,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,WAAW,CAyD7D,CAAC"}
@@ -55,6 +55,16 @@ export const slackWakeOriginCodec = {
55
55
  const ts = typeof origin.threadTs === "string" && origin.threadTs.length > 0 ? origin.threadTs : typeof origin.replyAnchorTs === "string" && origin.replyAnchorTs.length > 0 ? origin.replyAnchorTs : undefined;
56
56
  return ts === undefined ? undefined : { channelId: origin.channelId, messageId: ts };
57
57
  },
58
+ // THE THREAD A REPLY OPENS (OPE-2532). A post that is already in a thread answers undefined, because its
59
+ // own `threadTs` is the key. A post placed under an anchor lands in the anchor's thread (the post arm
60
+ // reads `threadTs ?? replyAnchorTs`), and Slack threads do not nest, so a reply carries the anchor. A
61
+ // top-level post opens a thread under its own ts.
62
+ replyThreadUnder: (origin, messageId) => {
63
+ if (typeof origin.threadTs === "string" && origin.threadTs.length > 0)
64
+ return undefined;
65
+ const anchor = typeof origin.replyAnchorTs === "string" && origin.replyAnchorTs.length > 0 ? origin.replyAnchorTs : messageId;
66
+ return { platform: "slack", channelId: origin.channelId, threadTs: anchor };
67
+ },
58
68
  // A `dmOrigin` arm lived here (OPE-306) to mint a DM delegation anchor's reply origin from the
59
69
  // binding. OPE-368 deleted the anchor and the interface member with it — a Slack 1:1 or group DM
60
70
  // now diverts into its own first-class window (OPE-351 stages 2 + 4), so its origin is minted and
@@ -1 +1 @@
1
- {"version":3,"file":"slack-origin-codec.js","sourceRoot":"","sources":["../../../agent/channels/slack-origin-codec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-origin-codec.js","sourceRoot":"","sources":["../../../agent/channels/slack-origin-codec.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { PostArm, ReplierLabel, UnifiedWakeOrigin } from "@open-everywhere/core/agent/adapter-api.js";
1
+ import type { PostArm, PostIntent, ReplierLabel, EditLocus, UnifiedWakeOrigin } from "@open-everywhere/core/agent/adapter-api.js";
2
2
  type SlackOrigin = Extract<UnifiedWakeOrigin, {
3
3
  platform: "slack";
4
4
  }>;
@@ -30,6 +30,14 @@ export type SlackPostFn = (body: URLSearchParams) => Promise<SlackPostResult | u
30
30
  * double can't reach — see slack-replier-label-test.ts).
31
31
  */
32
32
  export declare function postSlackMessage(base: URLSearchParams, replier: ReplierLabel | undefined, errPrefix: string, post?: SlackPostFn, resolveDisplayName?: () => Promise<string | undefined>): Promise<string>;
33
+ /**
34
+ * Post an ANSWER (OPE-2520): `base` carries the channel, the thread and the mrkdwn `text`; when the
35
+ * intent asks for source links or the native thumbs, the first attempt adds the answer's `blocks`
36
+ * (slack-reply-blocks.ts). A post Slack refuses FOR ITS BLOCKS is retried once without them, so a
37
+ * workspace that rejects a block still gets the answer. Only that refusal retries: Slack answered
38
+ * `ok:false`, so nothing posted and the plain retry cannot double the message.
39
+ */
40
+ export declare function postSlackAnswer(base: URLSearchParams, intent: PostIntent | undefined, replier: ReplierLabel | undefined, errPrefix: string, post?: SlackPostFn, resolveDisplayName?: () => Promise<string | undefined>): Promise<string>;
33
41
  /**
34
42
  * The `thread_ts` a unified reply posts under, or undefined for a top-level post. PURE, and the ONE
35
43
  * statement of Slack's reply placement:
@@ -42,6 +50,18 @@ export declare function postSlackMessage(base: URLSearchParams, replier: Replier
42
50
  * un-injectable network call (scripts/slack-replier-label-test.ts).
43
51
  */
44
52
  export declare function slackThreadTarget(origin: Pick<SlackOrigin, "threadTs" | "replyAnchorTs">): string | undefined;
53
+ /**
54
+ * EDIT (OPE-793): rewrite one of our own posted messages via `chat.update` (channel + ts + text).
55
+ * Slack renders an "(edited)" marker on the message, so the room sees that it changed.
56
+ *
57
+ * Ownership is NOT decided here — channels/reply-edit.ts already refused anything outside the
58
+ * own-post ledger before this runs. Slack's own rule (an app may only update a message its own token
59
+ * posted) is the backstop under that, and its refusal arrives as a token-free throw the model reads.
60
+ * `chat.update` needs the same `chat:write` scope the post path already has.
61
+ */
62
+ export declare function editSlackMessage(locus: EditLocus, messageId: string, text: string, intent?: PostIntent,
63
+ /** The `chat.update` write — the live `slackForm` client; a test supplies a scripted one. */
64
+ form?: (method: string, body: string) => Promise<Record<string, unknown> | undefined>): Promise<void>;
45
65
  export declare const slackPostArm: PostArm;
46
66
  export {};
47
67
  //# sourceMappingURL=slack-post-arm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slack-post-arm.d.ts","sourceRoot":"","sources":["../../../agent/channels/slack-post-arm.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,OAAO,EAGP,YAAY,EAEZ,iBAAiB,EAKlB,MAAM,4CAA4C,CAAC;AAGpD,KAAK,WAAW,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAyBrE;;;;qCAIqC;AACrC,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG3H;AAED;kGACkG;AAClG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;0DAC0D;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;AAI1F;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAsB,EAC5B,kBAAkB,GAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAkB,GACrE,OAAO,CAAC,MAAM,CAAC,CAuBjB;AA4BD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,eAAe,CAAC,GAAG,MAAM,GAAG,SAAS,CAG7G;AAoGD,eAAO,MAAM,YAAY,EAAE,OAkB1B,CAAC"}
1
+ {"version":3,"file":"slack-post-arm.d.ts","sourceRoot":"","sources":["../../../agent/channels/slack-post-arm.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EAGV,YAAY,EACZ,SAAS,EACT,iBAAiB,EAKlB,MAAM,4CAA4C,CAAC;AAGpD,KAAK,WAAW,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAyBrE;;;;qCAIqC;AACrC,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG3H;AAED;kGACkG;AAClG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;0DAC0D;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;AAI1F;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAsB,EAC5B,kBAAkB,GAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAkB,GACrE,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAqBD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAsB,EAC5B,kBAAkB,GAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAkB,GACrE,OAAO,CAAC,MAAM,CAAC,CAYjB;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,eAAe,CAAC,GAAG,MAAM,GAAG,SAAS,CAG7G;AA6ED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,UAAU;AACnB,6FAA6F;AAC7F,IAAI,GAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAa,GAC/F,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,eAAO,MAAM,YAAY,EAAE,OAyB1B,CAAC"}