@open-everywhere/provider-slack 0.4.0 → 0.5.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 (71) hide show
  1. package/agent/app-manifest.ts +48 -7
  2. package/agent/channels/slack-events.ts +12 -0
  3. package/agent/channels/slack-front.ts +201 -2
  4. package/agent/channels/slack-home.ts +511 -0
  5. package/agent/channels/slack-memory-canvas.ts +382 -0
  6. package/agent/channels/slack-offboarding.ts +89 -0
  7. package/agent/channels/slack-origin-codec.ts +8 -0
  8. package/agent/channels/slack-step-label.ts +177 -0
  9. package/agent/channels/slack.ts +29 -16
  10. package/agent/docs-generated.ts +1 -1
  11. package/agent/ops.ts +5 -0
  12. package/agent/provider-events.ts +1 -1
  13. package/agent/register.ts +9 -0
  14. package/agent/setup/page.ts +3 -1
  15. package/agent/slack-as-you.ts +107 -0
  16. package/agent/surface-parity.ts +3 -0
  17. package/dist/agent/app-manifest.d.ts +11 -0
  18. package/dist/agent/app-manifest.d.ts.map +1 -1
  19. package/dist/agent/app-manifest.js +39 -7
  20. package/dist/agent/app-manifest.js.map +1 -1
  21. package/dist/agent/channels/slack-events.d.ts +8 -0
  22. package/dist/agent/channels/slack-events.d.ts.map +1 -1
  23. package/dist/agent/channels/slack-events.js +11 -0
  24. package/dist/agent/channels/slack-events.js.map +1 -1
  25. package/dist/agent/channels/slack-front.d.ts +52 -0
  26. package/dist/agent/channels/slack-front.d.ts.map +1 -1
  27. package/dist/agent/channels/slack-front.js +134 -2
  28. package/dist/agent/channels/slack-front.js.map +1 -1
  29. package/dist/agent/channels/slack-home.d.ts +95 -0
  30. package/dist/agent/channels/slack-home.d.ts.map +1 -0
  31. package/dist/agent/channels/slack-home.js +445 -0
  32. package/dist/agent/channels/slack-home.js.map +1 -0
  33. package/dist/agent/channels/slack-memory-canvas.d.ts +65 -0
  34. package/dist/agent/channels/slack-memory-canvas.d.ts.map +1 -0
  35. package/dist/agent/channels/slack-memory-canvas.js +325 -0
  36. package/dist/agent/channels/slack-memory-canvas.js.map +1 -0
  37. package/dist/agent/channels/slack-offboarding.d.ts +31 -0
  38. package/dist/agent/channels/slack-offboarding.d.ts.map +1 -0
  39. package/dist/agent/channels/slack-offboarding.js +75 -0
  40. package/dist/agent/channels/slack-offboarding.js.map +1 -0
  41. package/dist/agent/channels/slack-origin-codec.d.ts.map +1 -1
  42. package/dist/agent/channels/slack-origin-codec.js +8 -0
  43. package/dist/agent/channels/slack-origin-codec.js.map +1 -1
  44. package/dist/agent/channels/slack-step-label.d.ts +17 -0
  45. package/dist/agent/channels/slack-step-label.d.ts.map +1 -0
  46. package/dist/agent/channels/slack-step-label.js +170 -0
  47. package/dist/agent/channels/slack-step-label.js.map +1 -0
  48. package/dist/agent/channels/slack.d.ts.map +1 -1
  49. package/dist/agent/channels/slack.js +29 -16
  50. package/dist/agent/channels/slack.js.map +1 -1
  51. package/dist/agent/docs-generated.js +1 -1
  52. package/dist/agent/docs-generated.js.map +1 -1
  53. package/dist/agent/ops.d.ts.map +1 -1
  54. package/dist/agent/ops.js +5 -1
  55. package/dist/agent/ops.js.map +1 -1
  56. package/dist/agent/provider-events.js +1 -1
  57. package/dist/agent/provider-events.js.map +1 -1
  58. package/dist/agent/register.d.ts.map +1 -1
  59. package/dist/agent/register.js +9 -1
  60. package/dist/agent/register.js.map +1 -1
  61. package/dist/agent/setup/page.d.ts.map +1 -1
  62. package/dist/agent/setup/page.js +3 -1
  63. package/dist/agent/setup/page.js.map +1 -1
  64. package/dist/agent/slack-as-you.d.ts +38 -0
  65. package/dist/agent/slack-as-you.d.ts.map +1 -0
  66. package/dist/agent/slack-as-you.js +82 -0
  67. package/dist/agent/slack-as-you.js.map +1 -0
  68. package/dist/agent/surface-parity.d.ts.map +1 -1
  69. package/dist/agent/surface-parity.js +3 -0
  70. package/dist/agent/surface-parity.js.map +1 -1
  71. package/package.json +27 -3
@@ -0,0 +1,38 @@
1
+ import type { McpServerDeclaration } from "@open-everywhere/core/agent/adapter-api.js";
2
+ /** The connection's name, and the grant key the seat sees: `slack-as-you`. */
3
+ export declare const SLACK_AS_YOU_NAME = "slack-as-you";
4
+ /** Slack's hosted MCP endpoint (streamable HTTP). */
5
+ export declare const SLACK_MCP_URL = "https://mcp.slack.com/mcp";
6
+ /** The default credential-store REF of the Slack app's Client Secret. */
7
+ export declare const SLACK_AS_YOU_SECRET_REF = "db:slack:oauth-client-secret";
8
+ /** The bot scope Slack requires on an app that connects to its MCP server. */
9
+ export declare const SLACK_MCP_BOT_SCOPE = "mcp:connect";
10
+ /** The tool groups of Slack's MCP server, and the USER scopes each one needs. */
11
+ export declare const SLACK_AS_YOU_SCOPES: {
12
+ /** Search messages, files and people as the person. */
13
+ readonly search: readonly ["search:read.public", "search:read.private", "search:read.mpim", "search:read.im", "search:read.files", "search:read.users", "files:read"];
14
+ /** Read channels, threads, canvases and profiles as the person. */
15
+ readonly read: readonly ["channels:history", "groups:history", "mpim:history", "im:history", "canvases:read", "users:read"];
16
+ /** Post as the person. Every write takes an approval card first. */
17
+ readonly write: readonly ["chat:write"];
18
+ };
19
+ /** One of Slack's MCP tool groups. */
20
+ export type SlackAsYouToolGroup = keyof typeof SLACK_AS_YOU_SCOPES;
21
+ /** Every user scope the given groups need, in a stable order and with no duplicates. */
22
+ export declare function slackAsYouUserScopes(groups?: readonly SlackAsYouToolGroup[]): readonly string[];
23
+ /** What the admin supplies. */
24
+ export interface SlackAsYouOptions {
25
+ /** The Slack app's Client ID (Basic Information → App Credentials). Public: it rides the authorize URL. */
26
+ readonly clientId: string;
27
+ /** The credential-store REF of the app's Client Secret. Absent ⇒ {@link SLACK_AS_YOU_SECRET_REF}. */
28
+ readonly clientSecretRef?: string;
29
+ /** The broker that ref resolves through. Absent ⇒ "db", the encrypted credential store. */
30
+ readonly clientSecretBroker?: string;
31
+ /** The tool groups a person consents to. Absent ⇒ all three. Leave out `write` for a read-only connection. */
32
+ readonly tools?: readonly SlackAsYouToolGroup[];
33
+ /** Narrow who gets it in their own Slack DM, as in any declared server. Absent ⇒ every person. */
34
+ readonly people?: McpServerDeclaration["people"];
35
+ }
36
+ /** The `agent/access/mcp-servers.ts` entry for "search Slack as you". */
37
+ export declare function slackAsYou(opts: SlackAsYouOptions): McpServerDeclaration;
38
+ //# sourceMappingURL=slack-as-you.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-as-you.d.ts","sourceRoot":"","sources":["../../agent/slack-as-you.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAEvF,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,qDAAqD;AACrD,eAAO,MAAM,aAAa,8BAA8B,CAAC;AAQzD,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AAEtE,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AAEjD,iFAAiF;AACjF,eAAO,MAAM,mBAAmB;IAC9B,uDAAuD;;IAEvD,mEAAmE;;IAEnE,oEAAoE;;CAEhB,CAAC;AAEvD,sCAAsC;AACtC,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAEnE,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,SAAS,mBAAmB,EAAgC,GAAG,SAAS,MAAM,EAAE,CAO5H;AAED,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qGAAqG;IACrG,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,2FAA2F;IAC3F,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,8GAA8G;IAC9G,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAChD,kGAAkG;IAClG,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;CAClD;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,CAwBxE"}
@@ -0,0 +1,82 @@
1
+ // "SEARCH SLACK AS YOU" — Slack's own MCP server on a person's own Slack sign-in (OPE-2421).
2
+ //
3
+ // The bot is the normal Slack route: it sees the channels it is in. This preset lets a person let the agent "see
4
+ // what you see" — the channels and conversations the bot is not in — and post in their name. An admin turns it on
5
+ // by adding ONE entry to the app's `agent/access/mcp-servers.ts`:
6
+ //
7
+ // export const MCP_SERVERS = defineMcpServers([slackAsYou({ clientId: "<your Slack app's Client ID>" })]);
8
+ //
9
+ // WHAT IT REUSES. The org's own Slack app — the one the bot already runs on. Slack opens its MCP server to an
10
+ // internal app (each org's own Open Everywhere app is one) through that app's static OAuth client, with NO dynamic
11
+ // client registration. So the entry names the app's public Client ID, and the app's Client Secret by its
12
+ // credential-store REF (`npx oe secret set db:slack:oauth-client-secret`), never by value.
13
+ //
14
+ // WHAT THE ADMIN CHANGES IN THE SLACK APP: the MCP toggle (the app config's Agents section), the `mcp:connect` bot
15
+ // scope, the user scopes below and the sign-in redirect URL. The manifest this bundle generates carries the scopes
16
+ // and the redirect once the entry is declared (app-manifest.ts `personalMcp`); the toggle stays a click.
17
+ //
18
+ // WHAT CORE DOES WITH IT (connections/mcp-servers.ts `personalSurface`): a Slack 1:1 DM only, the person's own
19
+ // token only, bot first, the offer made in the moment, a card for every write as the person, and the host-side
20
+ // connector plane, never the sandbox egress plane.
21
+ //
22
+ // 🔴 THIS MODULE IMPORTS ONLY TYPES. The app's declaration file loads at `oe build` time with nothing registered,
23
+ // so this file must load with nothing registered too.
24
+ /** The connection's name, and the grant key the seat sees: `slack-as-you`. */
25
+ export const SLACK_AS_YOU_NAME = "slack-as-you";
26
+ /** Slack's hosted MCP endpoint (streamable HTTP). */
27
+ export const SLACK_MCP_URL = "https://mcp.slack.com/mcp";
28
+ /** Where a person consents: Slack's user-only authorize endpoint. */
29
+ const SLACK_USER_AUTHORIZE_URL = "https://slack.com/oauth/v2_user/authorize";
30
+ /** Where the code becomes the person's user token: `oauth.v2.user.access`. */
31
+ const SLACK_USER_ACCESS_URL = "https://slack.com/api/oauth.v2.user.access";
32
+ /** The default credential-store REF of the Slack app's Client Secret. */
33
+ export const SLACK_AS_YOU_SECRET_REF = "db:slack:oauth-client-secret";
34
+ /** The bot scope Slack requires on an app that connects to its MCP server. */
35
+ export const SLACK_MCP_BOT_SCOPE = "mcp:connect";
36
+ /** The tool groups of Slack's MCP server, and the USER scopes each one needs. */
37
+ export const SLACK_AS_YOU_SCOPES = {
38
+ /** Search messages, files and people as the person. */
39
+ search: ["search:read.public", "search:read.private", "search:read.mpim", "search:read.im", "search:read.files", "search:read.users", "files:read"],
40
+ /** Read channels, threads, canvases and profiles as the person. */
41
+ read: ["channels:history", "groups:history", "mpim:history", "im:history", "canvases:read", "users:read"],
42
+ /** Post as the person. Every write takes an approval card first. */
43
+ write: ["chat:write"],
44
+ };
45
+ /** Every user scope the given groups need, in a stable order and with no duplicates. */
46
+ export function slackAsYouUserScopes(groups = ["search", "read", "write"]) {
47
+ const out = [];
48
+ for (const group of ["search", "read", "write"]) {
49
+ if (!groups.includes(group))
50
+ continue;
51
+ for (const scope of SLACK_AS_YOU_SCOPES[group])
52
+ if (!out.includes(scope))
53
+ out.push(scope);
54
+ }
55
+ return out;
56
+ }
57
+ /** The `agent/access/mcp-servers.ts` entry for "search Slack as you". */
58
+ export function slackAsYou(opts) {
59
+ const groups = opts.tools ?? ["search", "read", "write"];
60
+ return {
61
+ name: SLACK_AS_YOU_NAME,
62
+ url: SLACK_MCP_URL,
63
+ description: "Search Slack as you: Slack's own MCP server, signed in as the person in this DM. It reads the channels, threads " +
64
+ "and messages THEY can see, including ones the bot is not in" +
65
+ (groups.includes("write") ? ", and it can post in their name (each post takes an approval card)." : "."),
66
+ personalSurface: { platform: "slack", label: "Slack" },
67
+ signIn: {
68
+ mode: "static-confidential",
69
+ authorizationEndpoint: SLACK_USER_AUTHORIZE_URL,
70
+ tokenEndpoint: SLACK_USER_ACCESS_URL,
71
+ clientId: opts.clientId,
72
+ clientSecretRef: opts.clientSecretRef ?? SLACK_AS_YOU_SECRET_REF,
73
+ ...(opts.clientSecretBroker !== undefined ? { clientSecretBroker: opts.clientSecretBroker } : {}),
74
+ bodyEncoding: "form",
75
+ // 🔴 ONE comma-joined element, on purpose. Slack reads `scope` as a COMMA-separated list, and the OAuth client
76
+ // joins the elements of this array with a space (oe-oauth/oauth-client.ts).
77
+ scopes: [slackAsYouUserScopes(groups).join(",")],
78
+ },
79
+ ...(opts.people !== undefined ? { people: opts.people } : {}),
80
+ };
81
+ }
82
+ //# sourceMappingURL=slack-as-you.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-as-you.js","sourceRoot":"","sources":["../../agent/slack-as-you.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"surface-parity.d.ts","sourceRoot":"","sources":["../../agent/surface-parity.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAE3F,eAAO,MAAM,oBAAoB,EAAE,wBAkFlC,CAAC"}
1
+ {"version":3,"file":"surface-parity.d.ts","sourceRoot":"","sources":["../../agent/surface-parity.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAE3F,eAAO,MAAM,oBAAoB,EAAE,wBAqFlC,CAAC"}
@@ -34,6 +34,9 @@ export const SLACK_SURFACE_PARITY = {
34
34
  // keeps its `threadTs`, so a DM thread can be owned. `scheduleDmWake` ran on the RAW divert until
35
35
  // OPE-1719, which orphaned any seat spawned inside one.
36
36
  "owned-thread-ingress": "supported",
37
+ // A finished thread's done mark (OPE-2430): `threadRootMessage` names the thread's parent ts, and
38
+ // `setSurfaceReaction`'s inline Slack arm places the white_check_mark there.
39
+ "thread-done-reaction": "supported",
37
40
  // The reference wiring for the other five: `slack-wake-backscroll.ts slackSeatCatchUpFetch` reads
38
41
  // `conversations.history` since the seat's own `lastWakeAt`, enriches in-window threads with
39
42
  // `conversations.replies`, and hands the normalized window to core's shared catch-up path.
@@ -1 +1 @@
1
- {"version":3,"file":"surface-parity.js","sourceRoot":"","sources":["../../agent/surface-parity.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,gGAAgG;AAChG,iFAAiF;AACjF,EAAE;AACF,+FAA+F;AAC/F,iGAAiG;AACjG,wEAAwE;AAIxE,MAAM,CAAC,MAAM,oBAAoB,GAA6B;IAC5D,gGAAgG;IAChG,iBAAiB,EAAE,WAAW;IAC9B,qBAAqB,EAAE,WAAW;IAClC,UAAU,EAAE,WAAW;IACvB,mBAAmB,EAAE,WAAW;IAChC,gGAAgG;IAChG,6FAA6F;IAC7F,wBAAwB,EAAE,WAAW;IACrC,cAAc,EAAE,WAAW;IAC3B,0BAA0B,EAAE,WAAW;IACvC,8FAA8F;IAC9F,+FAA+F;IAC/F,8FAA8F;IAC9F,8DAA8D;IAC9D,eAAe,EAAE,EAAE,SAAS,EAAE,kEAAkE,EAAE;IAClG,yBAAyB,EAAE,WAAW;IACtC,kGAAkG;IAClG,gGAAgG;IAChG,kGAAkG;IAClG,oDAAoD;IACpD,uBAAuB,EAAE,EAAE,WAAW,EAAE,2GAA2G,EAAE;IACrJ,kGAAkG;IAClG,mGAAmG;IACnG,oFAAoF;IACpF,mGAAmG;IACnG,kGAAkG;IAClG,wDAAwD;IACxD,sBAAsB,EAAE,WAAW;IACnC,kGAAkG;IAClG,6FAA6F;IAC7F,2FAA2F;IAC3F,eAAe,EAAE,WAAW;IAC5B,kGAAkG;IAClG,kGAAkG;IAClG,mGAAmG;IACnG,wBAAwB,EAAE,WAAW;IACrC,8FAA8F;IAC9F,8EAA8E;IAC9E,kGAAkG;IAClG,8FAA8F;IAC9F,eAAe,EAAE,WAAW;IAC5B,gGAAgG;IAChG,+FAA+F;IAC/F,uCAAuC;IACvC,mBAAmB,EAAE,WAAW;IAEhC,gGAAgG;IAChG,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,iGAAiG;IACjG,iGAAiG;IACjG,8FAA8F;IAC9F,sEAAsE;IACtE,mBAAmB,EAAE,WAAW;IAChC,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,WAAW;IAClB,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,WAAW;IAEjB,gGAAgG;IAChG,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,WAAW;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,WAAW;IACxB,0FAA0F;IAC1F,8FAA8F;IAC9F,4FAA4F;IAC5F,MAAM,EAAE,EAAE,WAAW,EAAE,4EAA4E,EAAE;IACrG,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,WAAW;IAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,yCAAyC,EAAE;IAC9D,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,WAAW;IAC5B,iGAAiG;IACjG,kFAAkF;IAClF,UAAU,EAAE,EAAE,SAAS,EAAE,yEAAyE,EAAE;IACpG,SAAS,EAAE,WAAW;CACvB,CAAC"}
1
+ {"version":3,"file":"surface-parity.js","sourceRoot":"","sources":["../../agent/surface-parity.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,gGAAgG;AAChG,iFAAiF;AACjF,EAAE;AACF,+FAA+F;AAC/F,iGAAiG;AACjG,wEAAwE;AAIxE,MAAM,CAAC,MAAM,oBAAoB,GAA6B;IAC5D,gGAAgG;IAChG,iBAAiB,EAAE,WAAW;IAC9B,qBAAqB,EAAE,WAAW;IAClC,UAAU,EAAE,WAAW;IACvB,mBAAmB,EAAE,WAAW;IAChC,gGAAgG;IAChG,6FAA6F;IAC7F,wBAAwB,EAAE,WAAW;IACrC,cAAc,EAAE,WAAW;IAC3B,0BAA0B,EAAE,WAAW;IACvC,8FAA8F;IAC9F,+FAA+F;IAC/F,8FAA8F;IAC9F,8DAA8D;IAC9D,eAAe,EAAE,EAAE,SAAS,EAAE,kEAAkE,EAAE;IAClG,yBAAyB,EAAE,WAAW;IACtC,kGAAkG;IAClG,gGAAgG;IAChG,kGAAkG;IAClG,oDAAoD;IACpD,uBAAuB,EAAE,EAAE,WAAW,EAAE,2GAA2G,EAAE;IACrJ,kGAAkG;IAClG,mGAAmG;IACnG,oFAAoF;IACpF,mGAAmG;IACnG,kGAAkG;IAClG,wDAAwD;IACxD,sBAAsB,EAAE,WAAW;IACnC,kGAAkG;IAClG,6EAA6E;IAC7E,sBAAsB,EAAE,WAAW;IACnC,kGAAkG;IAClG,6FAA6F;IAC7F,2FAA2F;IAC3F,eAAe,EAAE,WAAW;IAC5B,kGAAkG;IAClG,kGAAkG;IAClG,mGAAmG;IACnG,wBAAwB,EAAE,WAAW;IACrC,8FAA8F;IAC9F,8EAA8E;IAC9E,kGAAkG;IAClG,8FAA8F;IAC9F,eAAe,EAAE,WAAW;IAC5B,gGAAgG;IAChG,+FAA+F;IAC/F,uCAAuC;IACvC,mBAAmB,EAAE,WAAW;IAEhC,gGAAgG;IAChG,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,iGAAiG;IACjG,iGAAiG;IACjG,8FAA8F;IAC9F,sEAAsE;IACtE,mBAAmB,EAAE,WAAW;IAChC,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,WAAW;IAClB,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,WAAW;IAEjB,gGAAgG;IAChG,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,WAAW;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,WAAW;IACxB,0FAA0F;IAC1F,8FAA8F;IAC9F,4FAA4F;IAC5F,MAAM,EAAE,EAAE,WAAW,EAAE,4EAA4E,EAAE;IACrG,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,WAAW;IAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,yCAAyC,EAAE;IAC9D,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,WAAW;IAC5B,iGAAiG;IACjG,kFAAkF;IAClF,UAAU,EAAE,EAAE,SAAS,EAAE,yEAAyE,EAAE;IACpG,SAAS,EAAE,WAAW;CACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-everywhere/provider-slack",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Open Everywhere Slack provider — Slack channel and DM surfaces, identity mapping, approval cards and slash commands.",
5
5
  "keywords": [
6
6
  "agent",
@@ -64,6 +64,10 @@
64
64
  "types": "./dist/agent/channels/slack-front.d.ts",
65
65
  "default": "./dist/agent/channels/slack-front.js"
66
66
  },
67
+ "./agent/channels/slack-home.js": {
68
+ "types": "./dist/agent/channels/slack-home.d.ts",
69
+ "default": "./dist/agent/channels/slack-home.js"
70
+ },
67
71
  "./agent/channels/slack-identity.js": {
68
72
  "types": "./dist/agent/channels/slack-identity.d.ts",
69
73
  "default": "./dist/agent/channels/slack-identity.js"
@@ -72,10 +76,18 @@
72
76
  "types": "./dist/agent/channels/slack-input-response.d.ts",
73
77
  "default": "./dist/agent/channels/slack-input-response.js"
74
78
  },
79
+ "./agent/channels/slack-memory-canvas.js": {
80
+ "types": "./dist/agent/channels/slack-memory-canvas.d.ts",
81
+ "default": "./dist/agent/channels/slack-memory-canvas.js"
82
+ },
75
83
  "./agent/channels/slack-mrkdwn.js": {
76
84
  "types": "./dist/agent/channels/slack-mrkdwn.d.ts",
77
85
  "default": "./dist/agent/channels/slack-mrkdwn.js"
78
86
  },
87
+ "./agent/channels/slack-offboarding.js": {
88
+ "types": "./dist/agent/channels/slack-offboarding.d.ts",
89
+ "default": "./dist/agent/channels/slack-offboarding.js"
90
+ },
79
91
  "./agent/channels/slack-origin-codec.js": {
80
92
  "types": "./dist/agent/channels/slack-origin-codec.d.ts",
81
93
  "default": "./dist/agent/channels/slack-origin-codec.js"
@@ -108,6 +120,10 @@
108
120
  "types": "./dist/agent/channels/slack-spend-gate.d.ts",
109
121
  "default": "./dist/agent/channels/slack-spend-gate.js"
110
122
  },
123
+ "./agent/channels/slack-step-label.js": {
124
+ "types": "./dist/agent/channels/slack-step-label.d.ts",
125
+ "default": "./dist/agent/channels/slack-step-label.js"
126
+ },
111
127
  "./agent/channels/slack-task-card.js": {
112
128
  "types": "./dist/agent/channels/slack-task-card.d.ts",
113
129
  "default": "./dist/agent/channels/slack-task-card.js"
@@ -176,6 +192,10 @@
176
192
  "types": "./dist/agent/setup/slack-api-setup.d.ts",
177
193
  "default": "./dist/agent/setup/slack-api-setup.js"
178
194
  },
195
+ "./agent/slack-as-you.js": {
196
+ "types": "./dist/agent/slack-as-you.d.ts",
197
+ "default": "./dist/agent/slack-as-you.js"
198
+ },
179
199
  "./agent/status.js": {
180
200
  "types": "./dist/agent/status.d.ts",
181
201
  "default": "./dist/agent/status.js"
@@ -195,6 +215,8 @@
195
215
  "test:slack-workspace-roster": "NODE_NO_WARNINGS=1 tsx scripts/slack-workspace-roster-test.ts",
196
216
  "test:slack-scope-audit": "NODE_NO_WARNINGS=1 tsx scripts/slack-scope-audit-test.ts",
197
217
  "test:slack-app-manifest": "NODE_NO_WARNINGS=1 tsx scripts/slack-app-manifest-test.ts",
218
+ "test:slack-offboarding": "NODE_NO_WARNINGS=1 tsx scripts/slack-offboarding-test.ts",
219
+ "test:slack-as-you": "NODE_NO_WARNINGS=1 tsx scripts/slack-as-you-test.ts",
198
220
  "test:slack-commands": "NODE_NO_WARNINGS=1 tsx scripts/slack-commands-test.ts",
199
221
  "test:slack-reaction-ingest": "NODE_NO_WARNINGS=1 tsx scripts/slack-reaction-ingest-test.ts",
200
222
  "test:slack-chat-audit": "NODE_NO_WARNINGS=1 tsx scripts/slack-chat-audit-test.ts",
@@ -215,6 +237,7 @@
215
237
  "test:slack-wake-trust": "NODE_NO_WARNINGS=1 tsx scripts/slack-wake-trust-test.ts",
216
238
  "test:slack-dm-seat": "NODE_NO_WARNINGS=1 tsx scripts/slack-dm-seat-test.ts",
217
239
  "test:slack-reasoning-fence": "NODE_NO_WARNINGS=1 tsx scripts/slack-reasoning-fence-test.ts",
240
+ "test:slack-step-label": "NODE_NO_WARNINGS=1 tsx scripts/slack-step-label-test.ts",
218
241
  "test:slack-dm-divert": "NODE_NO_WARNINGS=1 tsx scripts/slack-dm-divert-test.ts",
219
242
  "test:slack-shortcut": "NODE_NO_WARNINGS=1 tsx scripts/slack-shortcut-test.ts",
220
243
  "test:slack-enterprise-rung": "NODE_NO_WARNINGS=1 tsx scripts/slack-enterprise-rung-test.ts",
@@ -228,10 +251,11 @@
228
251
  "test:slack-web-api-seam": "NODE_NO_WARNINGS=1 tsx scripts/slack-web-api-seam-test.ts",
229
252
  "test:slack-setup": "NODE_NO_WARNINGS=1 tsx scripts/slack-setup-test.ts",
230
253
  "test:slack-wake-drop-hold": "NODE_NO_WARNINGS=1 tsx scripts/slack-wake-drop-hold-test.ts",
231
- "test:slack-surface-evidence": "NODE_NO_WARNINGS=1 tsx scripts/slack-surface-evidence-test.ts"
254
+ "test:slack-surface-evidence": "NODE_NO_WARNINGS=1 tsx scripts/slack-surface-evidence-test.ts",
255
+ "test:slack-home": "NODE_NO_WARNINGS=1 tsx scripts/slack-home-test.ts"
232
256
  },
233
257
  "dependencies": {
234
- "@open-everywhere/core": "0.4.0",
258
+ "@open-everywhere/core": "0.5.0",
235
259
  "undici": "^7.28.0",
236
260
  "zod": "4.5.4"
237
261
  },