experimental-ash 0.2.0-alpha.24 → 0.2.0-alpha.25

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 (136) hide show
  1. package/dist/src/channel/slack-channel.d.ts +44 -30
  2. package/dist/src/channel/slack-channel.d.ts.map +1 -1
  3. package/dist/src/channel/slack-channel.js +110 -89
  4. package/dist/src/channel/slack-channel.js.map +1 -1
  5. package/dist/src/channel/slack-render.d.ts +18 -0
  6. package/dist/src/channel/slack-render.d.ts.map +1 -0
  7. package/dist/src/channel/slack-render.js +177 -0
  8. package/dist/src/channel/slack-render.js.map +1 -0
  9. package/dist/src/channel/slack-types.d.ts +208 -0
  10. package/dist/src/channel/slack-types.d.ts.map +1 -0
  11. package/dist/src/channel/slack-types.js +2 -0
  12. package/dist/src/channel/slack-types.js.map +1 -0
  13. package/dist/src/channel/types.d.ts +68 -0
  14. package/dist/src/channel/types.d.ts.map +1 -1
  15. package/dist/src/cli/dev/repl.d.ts +21 -0
  16. package/dist/src/cli/dev/repl.d.ts.map +1 -1
  17. package/dist/src/cli/dev/repl.js +184 -54
  18. package/dist/src/cli/dev/repl.js.map +1 -1
  19. package/dist/src/cli/dev/terminal.d.ts +2 -0
  20. package/dist/src/cli/dev/terminal.d.ts.map +1 -1
  21. package/dist/src/cli/dev/terminal.js +69 -3
  22. package/dist/src/cli/dev/terminal.js.map +1 -1
  23. package/dist/src/client/index.d.ts +1 -1
  24. package/dist/src/client/index.d.ts.map +1 -1
  25. package/dist/src/client/index.js.map +1 -1
  26. package/dist/src/compiler/manifest.d.ts +34 -2
  27. package/dist/src/compiler/manifest.d.ts.map +1 -1
  28. package/dist/src/compiler/manifest.js +12 -1
  29. package/dist/src/compiler/manifest.js.map +1 -1
  30. package/dist/src/compiler/normalize-agent-config.d.ts.map +1 -1
  31. package/dist/src/compiler/normalize-agent-config.js +3 -0
  32. package/dist/src/compiler/normalize-agent-config.js.map +1 -1
  33. package/dist/src/execution/continuous-entry.d.ts +2 -1
  34. package/dist/src/execution/continuous-entry.d.ts.map +1 -1
  35. package/dist/src/execution/continuous-entry.js +7 -1
  36. package/dist/src/execution/continuous-entry.js.map +1 -1
  37. package/dist/src/execution/continuous-runtime.d.ts.map +1 -1
  38. package/dist/src/execution/continuous-runtime.js +19 -2
  39. package/dist/src/execution/continuous-runtime.js.map +1 -1
  40. package/dist/src/execution/node-step.d.ts.map +1 -1
  41. package/dist/src/execution/node-step.js +1 -0
  42. package/dist/src/execution/node-step.js.map +1 -1
  43. package/dist/src/execution/session-snapshot.d.ts +21 -0
  44. package/dist/src/execution/session-snapshot.d.ts.map +1 -0
  45. package/dist/src/execution/session-snapshot.js +58 -0
  46. package/dist/src/execution/session-snapshot.js.map +1 -0
  47. package/dist/src/execution/session.d.ts +3 -4
  48. package/dist/src/execution/session.d.ts.map +1 -1
  49. package/dist/src/execution/session.js +5 -4
  50. package/dist/src/execution/session.js.map +1 -1
  51. package/dist/src/execution/workflow-runtime.d.ts.map +1 -1
  52. package/dist/src/execution/workflow-runtime.js +31 -1
  53. package/dist/src/execution/workflow-runtime.js.map +1 -1
  54. package/dist/src/execution/workflow-steps.d.ts.map +1 -1
  55. package/dist/src/execution/workflow-steps.js +15 -1
  56. package/dist/src/execution/workflow-steps.js.map +1 -1
  57. package/dist/src/harness/compaction.d.ts +31 -10
  58. package/dist/src/harness/compaction.d.ts.map +1 -1
  59. package/dist/src/harness/compaction.js +53 -23
  60. package/dist/src/harness/compaction.js.map +1 -1
  61. package/dist/src/harness/emission.d.ts.map +1 -1
  62. package/dist/src/harness/emission.js +15 -1
  63. package/dist/src/harness/emission.js.map +1 -1
  64. package/dist/src/harness/step-hooks.d.ts +7 -1
  65. package/dist/src/harness/step-hooks.d.ts.map +1 -1
  66. package/dist/src/harness/step-hooks.js +14 -4
  67. package/dist/src/harness/step-hooks.js.map +1 -1
  68. package/dist/src/harness/tool-loop.d.ts +0 -14
  69. package/dist/src/harness/tool-loop.d.ts.map +1 -1
  70. package/dist/src/harness/tool-loop.js +126 -5
  71. package/dist/src/harness/tool-loop.js.map +1 -1
  72. package/dist/src/harness/types.d.ts +15 -0
  73. package/dist/src/harness/types.d.ts.map +1 -1
  74. package/dist/src/internal/application/compiled-artifacts.d.ts +14 -0
  75. package/dist/src/internal/application/compiled-artifacts.d.ts.map +1 -1
  76. package/dist/src/internal/application/compiled-artifacts.js +41 -1
  77. package/dist/src/internal/application/compiled-artifacts.js.map +1 -1
  78. package/dist/src/internal/application/package.js +1 -1
  79. package/dist/src/internal/authored-definition/core.d.ts +7 -0
  80. package/dist/src/internal/authored-definition/core.d.ts.map +1 -1
  81. package/dist/src/internal/authored-definition/core.js +34 -1
  82. package/dist/src/internal/authored-definition/core.js.map +1 -1
  83. package/dist/src/internal/authored-module.d.ts.map +1 -1
  84. package/dist/src/internal/authored-module.js +1 -1
  85. package/dist/src/internal/authored-module.js.map +1 -1
  86. package/dist/src/internal/message/builder.d.ts.map +1 -1
  87. package/dist/src/internal/message/builder.js +73 -29
  88. package/dist/src/internal/message/builder.js.map +1 -1
  89. package/dist/src/internal/message/vercel-workflow-output.d.ts +34 -16
  90. package/dist/src/internal/message/vercel-workflow-output.d.ts.map +1 -1
  91. package/dist/src/internal/message/vercel-workflow-output.js +247 -122
  92. package/dist/src/internal/message/vercel-workflow-output.js.map +1 -1
  93. package/dist/src/internal/nitro/host/create-application-nitro.d.ts.map +1 -1
  94. package/dist/src/internal/nitro/host/create-application-nitro.js +118 -8
  95. package/dist/src/internal/nitro/host/create-application-nitro.js.map +1 -1
  96. package/dist/src/internal/nitro/routes/web-ui/assets/index.js +7 -6
  97. package/dist/src/internal/nitro/routes/web-ui/assets/style.css +1 -1
  98. package/dist/src/protocol/message.d.ts +55 -3
  99. package/dist/src/protocol/message.d.ts.map +1 -1
  100. package/dist/src/protocol/message.js +38 -2
  101. package/dist/src/protocol/message.js.map +1 -1
  102. package/dist/src/public/channels/index.d.ts +1 -1
  103. package/dist/src/public/channels/index.d.ts.map +1 -1
  104. package/dist/src/public/channels/index.js.map +1 -1
  105. package/dist/src/public/channels/slack/index.d.ts +5 -5
  106. package/dist/src/public/channels/slack/index.d.ts.map +1 -1
  107. package/dist/src/public/channels/slack/index.js +10 -73
  108. package/dist/src/public/channels/slack/index.js.map +1 -1
  109. package/dist/src/public/channels/slack/lowlevel.d.ts +1 -0
  110. package/dist/src/public/channels/slack/lowlevel.d.ts.map +1 -1
  111. package/dist/src/public/channels/slack/slack-interaction.d.ts +30 -0
  112. package/dist/src/public/channels/slack/slack-interaction.d.ts.map +1 -0
  113. package/dist/src/public/channels/slack/slack-interaction.js +121 -0
  114. package/dist/src/public/channels/slack/slack-interaction.js.map +1 -0
  115. package/dist/src/public/definitions/agent.d.ts +21 -1
  116. package/dist/src/public/definitions/agent.d.ts.map +1 -1
  117. package/dist/src/public/definitions/agent.js.map +1 -1
  118. package/dist/src/public/definitions/channel.d.ts +17 -1
  119. package/dist/src/public/definitions/channel.d.ts.map +1 -1
  120. package/dist/src/public/definitions/channel.js.map +1 -1
  121. package/dist/src/public/index.d.ts +2 -2
  122. package/dist/src/public/index.d.ts.map +1 -1
  123. package/dist/src/public/index.js.map +1 -1
  124. package/dist/src/runtime/resolve-agent.js +3 -0
  125. package/dist/src/runtime/resolve-agent.js.map +1 -1
  126. package/dist/src/runtime/types.d.ts +11 -0
  127. package/dist/src/runtime/types.d.ts.map +1 -1
  128. package/docs/external-agent-protocol.md +8 -1
  129. package/docs/internals/message-runtime.md +7 -0
  130. package/docs/public/agent-ts.md +61 -0
  131. package/docs/public/channels/README.md +96 -0
  132. package/docs/public/getting-started.md +6 -0
  133. package/docs/public/project-layout.md +3 -1
  134. package/docs/public/runs-and-streaming.md +10 -0
  135. package/docs/public/typescript-api.md +31 -0
  136. package/package.json +15 -11
@@ -1,7 +1,9 @@
1
- import type { Actions, Button, Card, CardText, Select, SelectOption, SerializedThread } from "chat";
1
+ import type { AdapterPostableMessage, SerializedThread, Thread } from "chat";
2
2
  import type { StepInput } from "../harness/types.js";
3
3
  import type { HandleMessageStreamEvent } from "../protocol/message.js";
4
4
  import type { InputRequest } from "../runtime/input/types.js";
5
+ import { createSlackCardKit } from "./slack-render.js";
6
+ import type { InteractionDelivery, SlackInteraction, SlackInteractionContext, SlackRenderable, SlackThreadHandle } from "./slack-types.js";
5
7
  import { Channel, type ContextAccessor, type DeliverPayload } from "./types.js";
6
8
  /**
7
9
  * User context for the Slack message sender, stored in channel state so
@@ -40,25 +42,6 @@ export interface SlackChannelState {
40
42
  */
41
43
  readonly userContext?: SlackUserContext;
42
44
  }
43
- interface RehydratedThread {
44
- post(message: string | {
45
- readonly markdown: string;
46
- } | unknown): Promise<unknown>;
47
- startTyping(status?: string): Promise<void>;
48
- }
49
- /**
50
- * Dynamically imported Chat SDK card element constructors.
51
- * Loaded lazily alongside the adapter to avoid bundling `chat`
52
- * in workflow VMs.
53
- */
54
- interface CardKit {
55
- Actions: typeof Actions;
56
- Button: typeof Button;
57
- Card: typeof Card;
58
- CardText: typeof CardText;
59
- Select: typeof Select;
60
- SelectOption: typeof SelectOption;
61
- }
62
45
  /**
63
46
  * Channel that rehydrates a Chat SDK `Thread` from serialized state and
64
47
  * uses `thread.startTyping()` to show typing status with tool names while
@@ -78,9 +61,9 @@ interface CardKit {
78
61
  export declare class SlackChannel<TState extends SlackChannelState = SlackChannelState> extends Channel {
79
62
  static readonly kind: string;
80
63
  private _state;
81
- private _cardKit;
64
+ private _cardKitPromise;
82
65
  private _pendingToolCallMessage;
83
- private _thread;
66
+ private _threadPromise;
84
67
  constructor(state: TState);
85
68
  /**
86
69
  * Typed serializable state for this channel instance.
@@ -94,6 +77,22 @@ export declare class SlackChannel<TState extends SlackChannelState = SlackChanne
94
77
  get botToken(): string | undefined;
95
78
  get serializedThread(): SerializedThread;
96
79
  serialize(): Record<string, unknown>;
80
+ /**
81
+ * Interaction hook for Slack `block_actions`.
82
+ *
83
+ * Called when the route can rehydrate the channel from the last durable
84
+ * session snapshot. The return value controls what happens next:
85
+ *
86
+ * - `{ inputResponses }` — deliver structured HITL responses.
87
+ * - `{ message }` — wake the agent with a text message.
88
+ * - bare `return` (void) — nothing to deliver (handled inline or no-op).
89
+ *
90
+ * The default implementation calls `ctx.resolveInputResponses()` which
91
+ * maps button clicks and select menus to HITL input responses.
92
+ * Subclasses override to handle custom actions and call
93
+ * `ctx.resolveInputResponses()` for the explicit HITL path.
94
+ */
95
+ onInteraction(_interaction: SlackInteraction, ctx: SlackInteractionContext): Promise<InteractionDelivery | void>;
97
96
  onDeliver(_ctx: ContextAccessor, payload: DeliverPayload): Promise<StepInput>;
98
97
  /**
99
98
  * Prepends the Slack user context XML block to a message if user context
@@ -109,24 +108,39 @@ export declare class SlackChannel<TState extends SlackChannelState = SlackChanne
109
108
  protected post(text: string): Promise<void>;
110
109
  protected startTyping(status: string): Promise<void>;
111
110
  /**
112
- * Renders each pending input request as a rich Card element with
113
- * interactive buttons or select menus, posted to the Slack thread.
111
+ * Exposes an Ash-owned Slack thread surface for subclasses.
114
112
  */
115
- private renderInputRequests;
113
+ protected getSlackThread(): Promise<SlackThreadHandle>;
116
114
  /**
117
115
  * Lazily imports the Chat SDK card element constructors.
118
116
  */
119
- protected getCardKit(): Promise<CardKit>;
117
+ protected getCardKit(): Promise<ReturnType<typeof createSlackCardKit>>;
118
+ protected toPostableMessage(renderable: SlackRenderable): Promise<AdapterPostableMessage>;
119
+ /**
120
+ * Renders each pending input request as a rich Slack card with
121
+ * interactive buttons or select menus, posted to the thread.
122
+ */
123
+ private renderInputRequests;
120
124
  /**
121
125
  * Lazily rehydrates the Chat SDK Thread from serialized state.
122
126
  *
123
127
  * `@chat-adapter/slack` and `chat` are listed in
124
128
  * `WORKFLOW_BUILDER_DEFERRED_PACKAGES` so the initial
125
129
  * `@workflow/builders` pass externalizes them (avoiding `node:*`
126
- * errors in the workflow VM). esbuild's final Vercel-function
127
- * re-bundle resolves and inlines them with `platform: "node"`.
130
+ * errors in the workflow VM). Nitro's hosted-function bundle pass
131
+ * then traces and resolves them for deployment output.
128
132
  */
129
- protected getThread(): Promise<RehydratedThread>;
133
+ protected getThread(): Promise<Thread<Record<string, unknown>, unknown>>;
130
134
  }
131
- export {};
135
+ /**
136
+ * Maps Slack button clicks and select menus to HITL input responses.
137
+ *
138
+ * Buttons encode `requestId` as the button `value` and `optionId` as the
139
+ * `actionId`. Selects encode `requestId` as the `actionId` (prefixed with
140
+ * `select_`) and `optionId` as the `selectedOptionId`.
141
+ *
142
+ * Returns an {@link InteractionDelivery} with the mapped responses, or
143
+ * `null` when no actions could be mapped.
144
+ */
145
+ export declare function deriveInputResponsesFromInteraction(interaction: SlackInteraction): InteractionDelivery | undefined;
132
146
  //# sourceMappingURL=slack-channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/slack-channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/slack-channel.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { resolveTextToResponses } from "./resolve-text.js";
2
+ import { buildSlackInputRequestRenderable, createSlackCardKit, toSlackPostableMessage, toSlackThreadMessage, } from "./slack-render.js";
2
3
  import { Channel } from "./types.js";
3
4
  const SLACK_MAX_TYPING_STATUS_LENGTH = 50;
4
5
  function labelForAction(action) {
@@ -68,9 +69,9 @@ function formatUserContextBlock(ctx) {
68
69
  export class SlackChannel extends Channel {
69
70
  static kind = "slack";
70
71
  _state;
71
- _cardKit = null;
72
+ _cardKitPromise = null;
72
73
  _pendingToolCallMessage = null;
73
- _thread = null;
74
+ _threadPromise = null;
74
75
  constructor(state) {
75
76
  super();
76
77
  this._state = state;
@@ -95,12 +96,25 @@ export class SlackChannel extends Channel {
95
96
  return this._state.serializedThread;
96
97
  }
97
98
  serialize() {
98
- return {
99
- ...this._state,
100
- botToken: this._state.botToken,
101
- pendingRequests: this._state.pendingRequests,
102
- serializedThread: this._state.serializedThread,
103
- };
99
+ return { ...this._state };
100
+ }
101
+ /**
102
+ * Interaction hook for Slack `block_actions`.
103
+ *
104
+ * Called when the route can rehydrate the channel from the last durable
105
+ * session snapshot. The return value controls what happens next:
106
+ *
107
+ * - `{ inputResponses }` — deliver structured HITL responses.
108
+ * - `{ message }` — wake the agent with a text message.
109
+ * - bare `return` (void) — nothing to deliver (handled inline or no-op).
110
+ *
111
+ * The default implementation calls `ctx.resolveInputResponses()` which
112
+ * maps button clicks and select menus to HITL input responses.
113
+ * Subclasses override to handle custom actions and call
114
+ * `ctx.resolveInputResponses()` for the explicit HITL path.
115
+ */
116
+ async onInteraction(_interaction, ctx) {
117
+ return ctx.resolveInputResponses();
104
118
  }
105
119
  // ── Inbound: transform delivered input ─────────────────
106
120
  async onDeliver(_ctx, payload) {
@@ -202,10 +216,11 @@ export class SlackChannel extends Channel {
202
216
  }
203
217
  async post(text) {
204
218
  try {
205
- const thread = await this.getThread();
206
- // Route assistant output through the chat SDK's markdown renderer so
207
- // Slack-native mrkdwn and table blocks are used when available.
208
- await thread.post({ markdown: text });
219
+ const thread = await this.getSlackThread();
220
+ await thread.post({
221
+ kind: "markdown",
222
+ markdown: text,
223
+ });
209
224
  }
210
225
  catch (error) {
211
226
  console.error("[ash] Slack message delivery failed.", error);
@@ -221,110 +236,116 @@ export class SlackChannel extends Channel {
221
236
  }
222
237
  }
223
238
  /**
224
- * Renders each pending input request as a rich Card element with
225
- * interactive buttons or select menus, posted to the Slack thread.
239
+ * Exposes an Ash-owned Slack thread surface for subclasses.
226
240
  */
227
- async renderInputRequests(requests) {
241
+ async getSlackThread() {
242
+ const thread = await this.getThread();
243
+ const userContext = this.state.userContext;
244
+ return {
245
+ channelId: userContext?.channelId ?? this.serializedThread.channelId,
246
+ listRecentMessages: async () => (thread.recentMessages ?? []).map((message) => toSlackThreadMessage(message)),
247
+ post: async (renderable) => {
248
+ await thread.post(await this.toPostableMessage(renderable));
249
+ },
250
+ refresh: async () => {
251
+ await thread.refresh();
252
+ },
253
+ teamId: userContext?.teamId,
254
+ threadId: this.serializedThread.id,
255
+ threadTs: userContext?.threadTs ?? parseSlackThreadTs(this.serializedThread),
256
+ };
257
+ }
258
+ /**
259
+ * Lazily imports the Chat SDK card element constructors.
260
+ */
261
+ async getCardKit() {
262
+ if (this._cardKitPromise !== null) {
263
+ return this._cardKitPromise;
264
+ }
265
+ this._cardKitPromise = import("chat").then((chatModule) => createSlackCardKit(chatModule));
266
+ return this._cardKitPromise;
267
+ }
268
+ async toPostableMessage(renderable) {
228
269
  const kit = await this.getCardKit();
270
+ return toSlackPostableMessage(renderable, kit);
271
+ }
272
+ /**
273
+ * Renders each pending input request as a rich Slack card with
274
+ * interactive buttons or select menus, posted to the thread.
275
+ */
276
+ async renderInputRequests(requests) {
229
277
  for (const request of requests) {
230
278
  try {
231
- const card = buildInputRequestCard(kit, request);
232
- const thread = await this.getThread();
233
- await thread.post(card);
279
+ const thread = await this.getSlackThread();
280
+ await thread.post(buildSlackInputRequestRenderable(request));
234
281
  }
235
282
  catch (error) {
236
283
  console.error("[ash] Slack input request render failed.", error);
237
284
  }
238
285
  }
239
286
  }
240
- /**
241
- * Lazily imports the Chat SDK card element constructors.
242
- */
243
- async getCardKit() {
244
- if (this._cardKit !== null) {
245
- return this._cardKit;
246
- }
247
- const chatModule = (await import("chat"));
248
- this._cardKit = {
249
- Actions: chatModule.Actions,
250
- Button: chatModule.Button,
251
- Card: chatModule.Card,
252
- CardText: chatModule.CardText,
253
- Select: chatModule.Select,
254
- SelectOption: chatModule.SelectOption,
255
- };
256
- return this._cardKit;
257
- }
258
287
  /**
259
288
  * Lazily rehydrates the Chat SDK Thread from serialized state.
260
289
  *
261
290
  * `@chat-adapter/slack` and `chat` are listed in
262
291
  * `WORKFLOW_BUILDER_DEFERRED_PACKAGES` so the initial
263
292
  * `@workflow/builders` pass externalizes them (avoiding `node:*`
264
- * errors in the workflow VM). esbuild's final Vercel-function
265
- * re-bundle resolves and inlines them with `platform: "node"`.
293
+ * errors in the workflow VM). Nitro's hosted-function bundle pass
294
+ * then traces and resolves them for deployment output.
266
295
  */
267
296
  async getThread() {
268
- if (this._thread !== null) {
269
- return this._thread;
297
+ if (this._threadPromise !== null) {
298
+ return this._threadPromise;
270
299
  }
271
- const [slackModule, chatModule] = (await Promise.all([
300
+ this._threadPromise = Promise.all([
272
301
  import("@chat-adapter/slack"),
273
302
  import("chat"),
274
- ]));
275
- const adapter = slackModule.createSlackAdapter({ botToken: this.botToken });
276
- const thread = chatModule.ThreadImpl.fromJSON(this.serializedThread, adapter);
277
- this._thread = thread;
278
- return thread;
303
+ ]).then(([slackModule, chatModule]) => {
304
+ const adapter = slackModule.createSlackAdapter({ botToken: this.botToken });
305
+ return chatModule.ThreadImpl.fromJSON(this.serializedThread, adapter);
306
+ });
307
+ return this._threadPromise;
279
308
  }
280
309
  }
281
- const INPUT_OPTION_STYLE_TO_BUTTON_STYLE = {
282
- danger: "danger",
283
- default: undefined,
284
- primary: "primary",
285
- };
286
310
  /**
287
- * Builds a Chat SDK Card element for one input request.
311
+ * Maps Slack button clicks and select menus to HITL input responses.
312
+ *
313
+ * Buttons encode `requestId` as the button `value` and `optionId` as the
314
+ * `actionId`. Selects encode `requestId` as the `actionId` (prefixed with
315
+ * `select_`) and `optionId` as the `selectedOptionId`.
288
316
  *
289
- * - `confirmation` buttons (one per option)
290
- * - `select` static select menu
291
- * - `text` → prompt text only (user replies in thread)
317
+ * Returns an {@link InteractionDelivery} with the mapped responses, or
318
+ * `null` when no actions could be mapped.
292
319
  */
293
- function buildInputRequestCard(kit, request) {
294
- if (request.display === "confirmation" && request.options !== undefined) {
295
- return kit.Card({
296
- children: [
297
- kit.CardText(request.prompt),
298
- kit.Actions(request.options.map((opt) => kit.Button({
299
- id: opt.id,
300
- label: opt.label,
301
- style: INPUT_OPTION_STYLE_TO_BUTTON_STYLE[opt.style ?? "default"],
302
- value: request.requestId,
303
- }))),
304
- ],
305
- });
320
+ export function deriveInputResponsesFromInteraction(interaction) {
321
+ const inputResponses = [];
322
+ for (const action of interaction.actions) {
323
+ if (action.kind === "button") {
324
+ if (action.value === undefined) {
325
+ continue;
326
+ }
327
+ inputResponses.push({ optionId: action.actionId, requestId: action.value });
328
+ continue;
329
+ }
330
+ if (action.kind === "static_select" || action.kind === "external_select") {
331
+ if (action.selectedOptionId === undefined) {
332
+ continue;
333
+ }
334
+ const requestId = action.actionId.startsWith("select_")
335
+ ? action.actionId.slice(7)
336
+ : action.actionId;
337
+ inputResponses.push({ optionId: action.selectedOptionId, requestId });
338
+ }
306
339
  }
307
- if (request.display === "select" && request.options !== undefined && request.options.length > 0) {
308
- return kit.Card({
309
- children: [
310
- kit.CardText(request.prompt),
311
- kit.Actions([
312
- kit.Select({
313
- id: `select_${request.requestId}`,
314
- label: "Choose an option",
315
- options: request.options.map((opt) => kit.SelectOption({
316
- description: opt.description,
317
- label: opt.label,
318
- value: opt.id,
319
- })),
320
- }),
321
- ]),
322
- ],
323
- });
340
+ if (inputResponses.length > 0) {
341
+ return { inputResponses };
342
+ }
343
+ }
344
+ function parseSlackThreadTs(serializedThread) {
345
+ const parts = serializedThread.id.split(":");
346
+ if (parts.length === 3 && parts[0] === "slack" && parts[2] !== undefined && parts[2] !== "") {
347
+ return parts[2];
324
348
  }
325
- // Freeform text — just post the prompt. User replies in thread.
326
- return kit.Card({
327
- children: [kit.CardText(request.prompt)],
328
- });
349
+ return undefined;
329
350
  }
330
351
  //# sourceMappingURL=slack-channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slack-channel.js","sourceRoot":"","sources":["../../../src/channel/slack-channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-channel.js","sourceRoot":"","sources":["../../../src/channel/slack-channel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Actions, AdapterPostableMessage, Button, Card, CardText, Message, Select, SelectOption, Table } from "chat";
2
+ import type { InputRequest } from "../runtime/input/types.js";
3
+ import type { SlackRenderable, SlackThreadMessage } from "./slack-types.js";
4
+ interface SlackCardKit {
5
+ Actions: typeof Actions;
6
+ Button: typeof Button;
7
+ Card: typeof Card;
8
+ CardText: typeof CardText;
9
+ Select: typeof Select;
10
+ SelectOption: typeof SelectOption;
11
+ Table: typeof Table;
12
+ }
13
+ export declare function createSlackCardKit(chatModule: typeof import("chat")): SlackCardKit;
14
+ export declare function buildSlackInputRequestRenderable(request: InputRequest): SlackRenderable;
15
+ export declare function toSlackPostableMessage(renderable: SlackRenderable, kit: SlackCardKit): AdapterPostableMessage;
16
+ export declare function toSlackThreadMessage(message: Message): SlackThreadMessage;
17
+ export {};
18
+ //# sourceMappingURL=slack-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-render.d.ts","sourceRoot":"","sources":["../../../src/channel/slack-render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,sBAAsB,EACtB,MAAM,EACN,IAAI,EAEJ,QAAQ,EAER,OAAO,EACP,MAAM,EACN,YAAY,EACZ,KAAK,EACN,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAKV,eAAe,EAGf,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAE1B,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,KAAK,EAAE,OAAO,KAAK,CAAC;CACrB;AAWD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,cAAc,MAAM,CAAC,GAAG,YAAY,CAUlF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,CAiDvF;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,eAAe,EAC3B,GAAG,EAAE,YAAY,GAChB,sBAAsB,CAmBxB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,CAazE"}
@@ -0,0 +1,177 @@
1
+ import { Buffer } from "node:buffer";
2
+ const INPUT_OPTION_STYLE_TO_BUTTON_STYLE = {
3
+ danger: "danger",
4
+ default: undefined,
5
+ primary: "primary",
6
+ };
7
+ export function createSlackCardKit(chatModule) {
8
+ return {
9
+ Actions: chatModule.Actions,
10
+ Button: chatModule.Button,
11
+ Card: chatModule.Card,
12
+ CardText: chatModule.CardText,
13
+ Select: chatModule.Select,
14
+ SelectOption: chatModule.SelectOption,
15
+ Table: chatModule.Table,
16
+ };
17
+ }
18
+ export function buildSlackInputRequestRenderable(request) {
19
+ if (request.display === "confirmation" && request.options !== undefined) {
20
+ return {
21
+ blocks: [
22
+ { kind: "text", text: request.prompt },
23
+ {
24
+ actions: request.options.map((opt) => ({
25
+ actionId: opt.id,
26
+ kind: "button",
27
+ label: opt.label,
28
+ style: opt.style ?? "default",
29
+ value: request.requestId,
30
+ })),
31
+ kind: "actions",
32
+ },
33
+ ],
34
+ kind: "card",
35
+ };
36
+ }
37
+ if (request.display === "select" && request.options !== undefined && request.options.length > 0) {
38
+ return {
39
+ blocks: [
40
+ { kind: "text", text: request.prompt },
41
+ {
42
+ actions: [
43
+ {
44
+ actionId: `select_${request.requestId}`,
45
+ kind: "select",
46
+ label: "Choose an option",
47
+ options: request.options.map((opt) => ({
48
+ description: opt.description,
49
+ label: opt.label,
50
+ value: opt.id,
51
+ })),
52
+ source: "static",
53
+ },
54
+ ],
55
+ kind: "actions",
56
+ },
57
+ ],
58
+ kind: "card",
59
+ };
60
+ }
61
+ return {
62
+ blocks: [{ kind: "text", text: request.prompt }],
63
+ kind: "card",
64
+ };
65
+ }
66
+ export function toSlackPostableMessage(renderable, kit) {
67
+ const files = toSlackFileUploads(renderable.files);
68
+ if (renderable.kind === "markdown") {
69
+ const message = { markdown: renderable.markdown };
70
+ if (files.length > 0) {
71
+ message.files = files;
72
+ }
73
+ return message;
74
+ }
75
+ const card = kit.Card({
76
+ children: renderable.blocks.map((block) => toSlackCardChild(block, kit)),
77
+ });
78
+ const message = { card, fallbackText: renderable.fallbackText };
79
+ if (files.length > 0) {
80
+ message.files = files;
81
+ }
82
+ return message;
83
+ }
84
+ export function toSlackThreadMessage(message) {
85
+ return {
86
+ attachments: message.attachments.map((attachment) => toSlackThreadAttachment(attachment)),
87
+ author: toSlackThreadMessageAuthor(message.author),
88
+ id: message.id,
89
+ metadata: {
90
+ dateSent: message.metadata.dateSent?.toISOString(),
91
+ edited: message.metadata.edited,
92
+ editedAt: message.metadata.editedAt?.toISOString(),
93
+ },
94
+ text: message.text,
95
+ threadId: message.threadId,
96
+ };
97
+ }
98
+ /**
99
+ * Converts a Slack card block definition into the corresponding Chat SDK
100
+ * card element. The return type uses the Chat SDK's own element union so
101
+ * callers receive accurate type information.
102
+ */
103
+ function toSlackCardChild(block, kit) {
104
+ switch (block.kind) {
105
+ case "text":
106
+ return kit.CardText(block.text, block.style === "bold" ? { style: "bold" } : undefined);
107
+ case "table":
108
+ return kit.Table({
109
+ headers: [...block.headers],
110
+ rows: block.rows.map((row) => [...row]),
111
+ });
112
+ case "actions":
113
+ return kit.Actions({
114
+ children: block.actions.map((action) => toSlackActionElement(action, kit)),
115
+ });
116
+ }
117
+ }
118
+ function toSlackActionElement(action, kit) {
119
+ if (action.kind === "button") {
120
+ return kit.Button({
121
+ id: action.actionId,
122
+ label: action.label,
123
+ style: INPUT_OPTION_STYLE_TO_BUTTON_STYLE[action.style ?? "default"],
124
+ value: action.value,
125
+ });
126
+ }
127
+ return kit.Select({
128
+ id: action.actionId,
129
+ label: action.label,
130
+ options: action.options.map((option) => kit.SelectOption({
131
+ description: option.description,
132
+ label: option.label,
133
+ value: option.value,
134
+ })),
135
+ });
136
+ }
137
+ function toSlackFileUploads(files) {
138
+ if (files === undefined || files.length === 0) {
139
+ return [];
140
+ }
141
+ return files.map((file) => ({
142
+ data: Buffer.from(file.data),
143
+ filename: file.filename,
144
+ mimeType: file.mimeType,
145
+ }));
146
+ }
147
+ function toSlackThreadAttachment(attachment) {
148
+ return {
149
+ async getBytes() {
150
+ if (Buffer.isBuffer(attachment.data)) {
151
+ return attachment.data;
152
+ }
153
+ if (attachment.data instanceof Blob) {
154
+ return new Uint8Array(await attachment.data.arrayBuffer());
155
+ }
156
+ if (typeof attachment.fetchData === "function") {
157
+ return await attachment.fetchData();
158
+ }
159
+ return null;
160
+ },
161
+ mimeType: attachment.mimeType,
162
+ name: attachment.name,
163
+ size: attachment.size,
164
+ type: attachment.type,
165
+ url: attachment.url,
166
+ };
167
+ }
168
+ function toSlackThreadMessageAuthor(author) {
169
+ return {
170
+ fullName: author.fullName,
171
+ isBot: author.isBot,
172
+ isMe: author.isMe,
173
+ userId: author.userId,
174
+ userName: author.userName,
175
+ };
176
+ }
177
+ //# sourceMappingURL=slack-render.js.map