eve 0.26.1 → 0.26.2

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 (67) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/src/chunks/{use-eve-agent-CruinZmd.js → use-eve-agent-AeQLLhu9.js} +118 -92
  3. package/dist/src/chunks/{use-eve-agent-BkztZA0v.js → use-eve-agent-PMY2WkAt.js} +118 -92
  4. package/dist/src/cli/commands/info.d.ts +2 -0
  5. package/dist/src/cli/commands/info.js +1 -1
  6. package/dist/src/client/message-action-parts.d.ts +43 -0
  7. package/dist/src/client/message-action-parts.js +1 -0
  8. package/dist/src/client/message-reducer.js +1 -1
  9. package/dist/src/compiled/.vendor-stamp.json +4 -4
  10. package/dist/src/compiled/@chat-adapter/slack/blocks.d.ts +47 -2
  11. package/dist/src/compiled/@chat-adapter/slack/blocks.js +10 -8
  12. package/dist/src/compiled/@chat-adapter/slack/index.d.ts +168 -8
  13. package/dist/src/compiled/@chat-adapter/slack/index.js +28 -28
  14. package/dist/src/compiled/@chat-adapter/slack/{types-AntsVifS.d.ts → types-CdGmMyOr.d.ts} +1 -1
  15. package/dist/src/compiled/@chat-adapter/slack/webhook.d.ts +2 -2
  16. package/dist/src/compiled/@chat-adapter/twilio/index.d.ts +1 -1
  17. package/dist/src/compiled/@chat-adapter/twilio/index.js +1 -1
  18. package/dist/src/compiled/@chat-adapter/twilio/webhook.d.ts +2 -2
  19. package/dist/src/compiled/@vercel/sandbox/index.js +12 -12
  20. package/dist/src/compiled/_chunks/node/{auth-Cuszvn7l.js → auth-BuQkq4Gr.js} +2 -2
  21. package/dist/src/compiled/_chunks/node/{dist-CdH_Yoxt.js → dist-BweCayKF.js} +42 -35
  22. package/dist/src/compiled/_chunks/node/{dist-Drt-_JVK.js → dist-DvkWiagq.js} +6 -4
  23. package/dist/src/compiled/chat/index.d.ts +17 -6
  24. package/dist/src/compiled/chat/index.js +1 -1
  25. package/dist/src/compiled/chat/{jsx-runtime-CzthIo1o.d.ts → jsx-runtime-_JEEAotp.d.ts} +125 -5
  26. package/dist/src/compiler/model-catalog.js +1 -1
  27. package/dist/src/evals/autoevals-client.js +1 -1
  28. package/dist/src/execution/sandbox/bindings/vercel-credentials.js +1 -1
  29. package/dist/src/execution/sandbox/bindings/vercel-lookup.js +1 -1
  30. package/dist/src/execution/session.d.ts +0 -2
  31. package/dist/src/execution/session.js +1 -1
  32. package/dist/src/execution/skills/instructions.d.ts +3 -3
  33. package/dist/src/execution/skills/instructions.js +2 -2
  34. package/dist/src/execution/workflow-steps.js +1 -1
  35. package/dist/src/harness/messages.d.ts +7 -0
  36. package/dist/src/harness/messages.js +1 -1
  37. package/dist/src/harness/stale-input-responses.js +2 -2
  38. package/dist/src/harness/tool-loop.js +2 -2
  39. package/dist/src/internal/application/compiled-artifacts.js +9 -3
  40. package/dist/src/internal/application/package.js +1 -1
  41. package/dist/src/internal/gateway.d.ts +19 -0
  42. package/dist/src/internal/gateway.js +1 -0
  43. package/dist/src/internal/user-agent.d.ts +11 -0
  44. package/dist/src/internal/user-agent.js +1 -0
  45. package/dist/src/public/tools/defaults.d.ts +3 -3
  46. package/dist/src/runtime/framework-tools/index.d.ts +3 -2
  47. package/dist/src/runtime/framework-tools/index.js +1 -1
  48. package/dist/src/runtime/framework-tools/skill.d.ts +6 -1
  49. package/dist/src/runtime/framework-tools/skill.js +1 -1
  50. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  51. package/dist/src/setup/boxes/select-model.js +1 -1
  52. package/dist/src/setup/gateway-models.js +1 -1
  53. package/dist/src/setup/scaffold/create/project.js +1 -1
  54. package/dist/src/setup/validate-gateway-key.js +1 -1
  55. package/dist/src/svelte/index.js +1 -1
  56. package/dist/src/svelte/use-eve-agent.js +1 -1
  57. package/dist/src/vue/index.js +1 -1
  58. package/dist/src/vue/use-eve-agent.js +1 -1
  59. package/docs/concepts/sessions-runs-and-streaming.md +7 -7
  60. package/docs/reference/cli.md +1 -1
  61. package/docs/schedules.mdx +1 -1
  62. package/docs/skills.mdx +1 -1
  63. package/package.json +5 -5
  64. package/dist/src/execution/sandbox/bindings/vercel-user-agent.d.ts +0 -6
  65. package/dist/src/execution/sandbox/bindings/vercel-user-agent.js +0 -1
  66. package/dist/src/execution/workflow-skill-root.d.ts +0 -6
  67. package/dist/src/execution/workflow-skill-root.js +0 -1
@@ -8,7 +8,7 @@ interface SlackCardElement {
8
8
  title?: string;
9
9
  type: "card";
10
10
  }
11
- type SlackCardChild = SlackActionsElement | SlackDividerElement | SlackFieldsElement | SlackImageElement | SlackLinkElement | SlackSectionElement | SlackTableElement | SlackTextElement;
11
+ type SlackCardChild = SlackActionsElement | SlackChartElement | SlackDividerElement | SlackFieldsElement | SlackImageElement | SlackLinkElement | SlackSectionElement | SlackTableElement | SlackTextElement;
12
12
  interface SlackTextElement {
13
13
  content: string;
14
14
  style?: SlackTextStyle;
@@ -82,10 +82,55 @@ interface SlackFieldsElement {
82
82
  }
83
83
  interface SlackTableElement {
84
84
  align?: SlackTableAlignment[];
85
+ /** Accessible table caption for the data table block */
86
+ caption?: string;
85
87
  headers: string[];
88
+ /** Rows per page (1-100; Slack defaults to 5) */
89
+ pageSize?: number;
86
90
  rows: string[][];
87
91
  type: "table";
88
92
  }
93
+ interface SlackChartSegment {
94
+ /** Legend label (max 20 characters) */
95
+ label: string;
96
+ /** Segment value; must be greater than 0 */
97
+ value: number;
98
+ }
99
+ interface SlackChartDataPoint {
100
+ /** Category label; must match an entry in the chart's `categories` */
101
+ label: string;
102
+ /** Y-axis value (negative values are permitted) */
103
+ value: number;
104
+ }
105
+ interface SlackChartSeries {
106
+ /** One data point per category */
107
+ data: SlackChartDataPoint[];
108
+ /** Legend label; unique within the chart (max 20 characters) */
109
+ name: string;
110
+ }
111
+ interface SlackPieChartDefinition {
112
+ /** Pie segments (1-12) */
113
+ segments: SlackChartSegment[];
114
+ type: "pie";
115
+ }
116
+ interface SlackSeriesChartDefinition {
117
+ /** X-axis category labels in display order (max 20 characters each) */
118
+ categories: string[];
119
+ /** Data series (1-12); each series needs one point per category */
120
+ series: SlackChartSeries[];
121
+ type: "area" | "bar" | "line";
122
+ /** X-axis title (max 50 characters) */
123
+ xLabel?: string;
124
+ /** Y-axis title (max 50 characters) */
125
+ yLabel?: string;
126
+ }
127
+ type SlackChartDefinition = SlackPieChartDefinition | SlackSeriesChartDefinition;
128
+ interface SlackChartElement {
129
+ chart: SlackChartDefinition;
130
+ /** Chart title (max 50 characters) */
131
+ title: string;
132
+ type: "chart";
133
+ }
89
134
  interface SlackTextObject {
90
135
  emoji?: boolean;
91
136
  text: string;
@@ -157,4 +202,4 @@ declare function cardToSlackFallbackText(card: SlackCardElement, options?: Pick<
157
202
  declare const cardToFallbackText: typeof cardToSlackFallbackText;
158
203
  declare function convertSlackEmojiPlaceholders(text: string): string;
159
204
 
160
- export { SLACK_FREEFORM_ACTION_ID, SLACK_FREEFORM_ACTION_PREFIX, SLACK_FREEFORM_BLOCK_ID, SLACK_FREEFORM_CALLBACK_ID, SLACK_INPUT_ACTION_PREFIX, type SlackActionsElement, type SlackBlock, SlackBlockError, type SlackBlocksOptions, type SlackButtonElement, type SlackButtonStyle, type SlackCardChild, type SlackCardElement, type SlackDividerElement, type SlackFieldElement, type SlackFieldsElement, type SlackFreeformViewOptions, type SlackImageElement, type SlackInputAction, type SlackInputOption, type SlackInputRequest, type SlackInputResponse, type SlackLinkButtonElement, type SlackLinkElement, type SlackRadioSelectElement, type SlackSectionElement, type SlackSelectElement, type SlackSelectOptionElement, type SlackTableAlignment, type SlackTableElement, type SlackTextElement, type SlackTextObject, type SlackTextStyle, answeredSlackInputBlocks, buildSlackFreeformView, cardToBlockKit, cardToFallbackText, cardToSlackBlocks, cardToSlackFallbackText, convertSlackEmojiPlaceholders, inputRequestToSlackBlocks, parseSlackFreeformValue, parseSlackInputResponse };
205
+ export { SLACK_FREEFORM_ACTION_ID, SLACK_FREEFORM_ACTION_PREFIX, SLACK_FREEFORM_BLOCK_ID, SLACK_FREEFORM_CALLBACK_ID, SLACK_INPUT_ACTION_PREFIX, type SlackActionsElement, type SlackBlock, SlackBlockError, type SlackBlocksOptions, type SlackButtonElement, type SlackButtonStyle, type SlackCardChild, type SlackCardElement, type SlackChartDataPoint, type SlackChartDefinition, type SlackChartElement, type SlackChartSegment, type SlackChartSeries, type SlackDividerElement, type SlackFieldElement, type SlackFieldsElement, type SlackFreeformViewOptions, type SlackImageElement, type SlackInputAction, type SlackInputOption, type SlackInputRequest, type SlackInputResponse, type SlackLinkButtonElement, type SlackLinkElement, type SlackPieChartDefinition, type SlackRadioSelectElement, type SlackSectionElement, type SlackSelectElement, type SlackSelectOptionElement, type SlackSeriesChartDefinition, type SlackTableAlignment, type SlackTableElement, type SlackTextElement, type SlackTextObject, type SlackTextStyle, answeredSlackInputBlocks, buildSlackFreeformView, cardToBlockKit, cardToFallbackText, cardToSlackBlocks, cardToSlackFallbackText, convertSlackEmojiPlaceholders, inputRequestToSlackBlocks, parseSlackFreeformValue, parseSlackInputResponse };
@@ -1,8 +1,10 @@
1
- import{d as e}from"../../_chunks/node/chunk-AYN7QRWH-B__hKQV7.js";var t=class extends Error{constructor(e){super(e),this.name=`SlackBlockError`}},n={actionId:255,actionsElements:25,blockId:255,blocks:50,buttonText:75,buttonUrl:3e3,buttonValue:2e3,fields:10,fieldText:2e3,headerText:150,imageAlt:2e3,imageUrl:3e3,optionDescription:75,optionText:75,optionValue:150,options:100,placeholder:150,radioOptions:10,sectionText:3e3,tableColumns:20,tableRows:100,textObject:3e3},r=`input:`,i=`input-freeform:`,a=`input-freeform-submit`,o=`input-freeform-block`,s=`input-freeform-text`,c=/^(?<requestId>.+):button:\d+$/u;function l(e){let t={text:{text:v(e.prompt,n.sectionText),type:`mrkdwn`},type:`section`},r=e.options??[];if(r.length===0)return[t,{elements:[m(e.requestId)],type:`actions`}];let i=e.allowFreeform?[m(e.requestId)]:[];if(e.display===`radio`)return[t,{elements:[_(e),...i],type:`actions`}];if(e.display===`select`)return[t,{elements:[g(e),...i],type:`actions`}];let a=i.length>0?n.actionsElements-1:n.actionsElements;return[t,{elements:r.slice(0,a).map((t,n)=>h(e.requestId,t,n)).concat(i),type:`actions`}]}function u(e){if(!e.actionId.startsWith(`input:`))return null;let t=e.actionId.slice(r.length);if(e.selectedOptionValue!==void 0)return t?{optionId:e.selectedOptionValue,requestId:t}:null;let n=c.exec(t)?.groups?.requestId;return n&&e.value!==void 0?{optionId:e.value,requestId:n}:null}function d(e){let t=v(e.title??e.prompt??`Your answer`,24),r=[];return e.prompt&&r.push({text:{text:v(e.prompt,n.sectionText),type:`mrkdwn`},type:`section`}),r.push({block_id:o,element:{action_id:s,multiline:!0,type:`plain_text_input`},label:{text:`Answer`,type:`plain_text`},type:`input`}),{blocks:r,callback_id:a,close:{text:`Cancel`,type:`plain_text`},private_metadata:typeof e.metadata==`string`?e.metadata:JSON.stringify(e.metadata),submit:{text:`Submit`,type:`plain_text`},title:{text:t,type:`plain_text`},type:`modal`}}function f(e){return e.find(e=>e.blockId===`input-freeform-block`&&e.actionId===`input-freeform-text`)?.value}function p(e){let t=[];return e.promptBlock&&typeof e.promptBlock==`object`&&t.push(e.promptBlock),t.push({text:{text:`:white_check_mark: *${e.answer}*`,type:`mrkdwn`},type:`section`}),e.userId&&t.push({elements:[{text:`Answered by <@${e.userId}>`,type:`mrkdwn`}],type:`context`}),t}function m(e){return{action_id:`${i}${e}`,style:`primary`,text:{text:`Type your answer`,type:`plain_text`},type:`button`,value:e}}function h(e,t,i){return y({action_id:`${r}${e}:button:${i}`,style:t.style===`primary`||t.style===`danger`?t.style:void 0,text:{text:v(t.label,n.buttonText),type:`plain_text`},type:`button`,value:v(t.id,n.buttonValue)})}function g(e){let t=(e.options??[]).map(e=>({text:{text:v(e.label,n.optionText),type:`plain_text`},value:v(e.id,n.optionValue)}));return{action_id:`${r}${e.requestId}`,options:t.slice(0,n.options),placeholder:{text:`Choose an option`,type:`plain_text`},type:`static_select`}}function _(e){let t=(e.options??[]).map(e=>({text:{text:v(e.label,n.optionText),type:`plain_text`},value:v(e.id,n.optionValue)}));return t.length>n.radioOptions?g(e):{action_id:`${r}${e.requestId}`,options:t,type:`radio_buttons`}}function v(e,t){return e.length>t?e.slice(0,t):e}function y(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}var b=` `,x=/\{\{emoji:([a-zA-Z0-9_+-]+)\}\}/g;function S(e,t={}){let r=[],i={convertEmoji:t.convertEmoji??E,maxBlocks:t.maxBlocks??n.blocks,usedTable:!1};e.title&&r.push({text:U(e.title,i.convertEmoji,n.headerText),type:`header`}),e.subtitle&&r.push({elements:[H(e.subtitle,i.convertEmoji,n.textObject)],type:`context`}),e.imageUrl&&r.push({alt_text:K(i.convertEmoji(e.title||`Card image`),n.imageAlt),image_url:K(e.imageUrl,n.imageUrl),type:`image`});for(let t of e.children)r.push(...D(t,i));return r.slice(0,i.maxBlocks)}var C=S;function w(e,t={}){let n=t.convertEmoji??E,r=[];e.title&&r.push(`*${n(e.title)}*`),e.subtitle&&r.push(n(e.subtitle));for(let t of e.children){let e=V(t,n);e&&r.push(e)}return r.join(`
2
- `)}var T=w;function E(e){return e.replace(x,`:$1:`)}function D(e,t){switch(e.type){case`actions`:return[j(e,t.convertEmoji)];case`divider`:return[{type:`divider`}];case`fields`:return[z(e,t.convertEmoji)];case`image`:return[k(e,t.convertEmoji)];case`link`:return[A(e,t.convertEmoji)];case`section`:return e.children.flatMap(e=>D(e,t));case`table`:return B(e,t);case`text`:return[O(e,t.convertEmoji)];default:return J(e)}}function O(t,r){let i=e(r(t.content));return t.style===`muted`?{elements:[H(i,e=>e,n.textObject)],type:`context`}:{text:H(t.style===`bold`?`*${i}*`:i,e=>e,n.sectionText),type:`section`}}function k(e,t){return{alt_text:K(t(e.alt||`Image`),n.imageAlt),image_url:K(e.url,n.imageUrl),type:`image`}}function A(e,t){return{text:H(`<${e.url}|${t(e.label)}>`,e=>e,n.sectionText),type:`section`}}function j(e,t){return{elements:e.children.slice(0,n.actionsElements).map(e=>M(e,t)),type:`actions`}}function M(e,t){switch(e.type){case`button`:return N(e,t);case`link-button`:return P(e,t);case`radio_select`:return I(e,t);case`select`:return F(e,t);default:return J(e)}}function N(e,t){return Y({action_id:K(e.id,n.actionId),style:G(e.style),text:U(e.label,t,n.buttonText),type:`button`,value:e.value===void 0?void 0:K(e.value,n.buttonValue)})}function P(e,t){return Y({action_id:K(e.id??`link-${e.url}`,n.actionId),style:G(e.style),text:U(e.label,t,n.buttonText),type:`button`,url:K(e.url,n.buttonUrl)})}function F(e,t){let r=e.options.slice(0,n.options).map(e=>R(e,t,`plain_text`));return Y({action_id:K(e.id,n.actionId),initial_option:L(r,e.initialOption),options:r,placeholder:e.placeholder?U(e.placeholder,t,n.placeholder):void 0,type:`static_select`})}function I(e,t){let r=e.options.slice(0,n.radioOptions).map(e=>R(e,t,`mrkdwn`));return Y({action_id:K(e.id,n.actionId),initial_option:L(r,e.initialOption),options:r,type:`radio_buttons`})}function L(e,t){if(t===void 0)return;let r=K(t,n.optionValue);return e.find(e=>e.value===r)}function R(e,t,r){return Y({description:e.description?{text:K(t(e.description),n.optionDescription),type:r}:void 0,text:{text:K(t(e.label),n.optionText),type:r},value:K(e.value,n.optionValue)})}function z(t,r){return{fields:t.children.slice(0,n.fields).map(t=>H(`*${e(r(t.label))}*
3
- ${e(r(t.value))}`,e=>e,n.fieldText)),type:`section`}}function B(e,t){return t.usedTable||e.rows.length+1>n.tableRows||e.headers.length>n.tableColumns?[{text:H(`\`\`\`
4
- ${X(e)}
5
- \`\`\``,e=>e,n.sectionText),type:`section`}]:(t.usedTable=!0,[Y({column_settings:e.align?.slice(0,n.tableColumns).map(e=>e?{align:e}:null),rows:[e.headers.map(e=>W(e,t.convertEmoji)),...e.rows.map(e=>e.map(e=>W(e,t.convertEmoji)))],type:`table`})])}function V(e,t){switch(e.type){case`actions`:return;case`divider`:return`---`;case`fields`:return e.children.map(e=>`${t(e.label)}: ${t(e.value)}`).join(`
6
- `);case`image`:return e.alt?t(e.alt):void 0;case`link`:return`${t(e.label)} (${e.url})`;case`section`:return e.children.map(e=>V(e,t)).filter(e=>!!e).join(`
7
- `);case`table`:return X(e);case`text`:return t(e.content);default:return J(e)}}function H(e,t,n){return{text:q(K(t(e),n)),type:`mrkdwn`}}function U(e,t,n){return{emoji:!0,text:q(K(t(e),n)),type:`plain_text`}}function W(e,t){return{text:q(t(e)),type:`raw_text`}}function G(e){return e===`danger`||e===`primary`?e:void 0}function K(e,t){return e.length>t?e.slice(0,t):e}function q(e){return e.length>0?e:b}function J(e){throw new t(`Unsupported Slack card element: ${String(e)}`)}function Y(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}function X(e){let t=[e.headers,...e.rows],n=e.headers.map((e,n)=>Math.max(...t.map(e=>e[n]?.length??0)));return t.map(e=>e.map((e,t)=>(e??``).padEnd(n[t]??0)).join(` | `).trimEnd()).join(`
8
- `)}export{s as SLACK_FREEFORM_ACTION_ID,i as SLACK_FREEFORM_ACTION_PREFIX,o as SLACK_FREEFORM_BLOCK_ID,a as SLACK_FREEFORM_CALLBACK_ID,r as SLACK_INPUT_ACTION_PREFIX,t as SlackBlockError,p as answeredSlackInputBlocks,d as buildSlackFreeformView,C as cardToBlockKit,T as cardToFallbackText,S as cardToSlackBlocks,w as cardToSlackFallbackText,E as convertSlackEmojiPlaceholders,l as inputRequestToSlackBlocks,f as parseSlackFreeformValue,u as parseSlackInputResponse};
1
+ import{d as e}from"../../_chunks/node/chunk-AYN7QRWH-B__hKQV7.js";var t=class extends Error{constructor(e){super(e),this.name=`SlackBlockError`}},n={actionId:255,actionsElements:25,blockId:255,blocks:50,buttonText:75,buttonUrl:3e3,buttonValue:2e3,chartDataPoints:20,chartLabel:20,chartsPerMessage:2,chartSegments:12,chartSeries:12,chartTitle:50,fields:10,fieldText:2e3,headerText:150,imageAlt:2e3,imageUrl:3e3,optionDescription:75,optionText:75,optionValue:150,options:100,placeholder:150,radioOptions:10,sectionText:3e3,tableChars:1e4,tableColumns:20,tablePageSize:100,tableRows:100,textObject:3e3},r=`input:`,i=`input-freeform:`,a=`input-freeform-submit`,o=`input-freeform-block`,s=`input-freeform-text`,ee=/^(?<requestId>.+):button:\d+$/u;function c(e){let t={text:{text:g(e.prompt,n.sectionText),type:`mrkdwn`},type:`section`},r=e.options??[];if(r.length===0)return[t,{elements:[p(e.requestId)],type:`actions`}];let i=e.allowFreeform?[p(e.requestId)]:[];if(e.display===`radio`)return[t,{elements:[te(e),...i],type:`actions`}];if(e.display===`select`)return[t,{elements:[h(e),...i],type:`actions`}];let a=i.length>0?n.actionsElements-1:n.actionsElements;return[t,{elements:r.slice(0,a).map((t,n)=>m(e.requestId,t,n)).concat(i),type:`actions`}]}function l(e){if(!e.actionId.startsWith(`input:`))return null;let t=e.actionId.slice(r.length);if(e.selectedOptionValue!==void 0)return t?{optionId:e.selectedOptionValue,requestId:t}:null;let n=ee.exec(t)?.groups?.requestId;return n&&e.value!==void 0?{optionId:e.value,requestId:n}:null}function u(e){let t=g(e.title??e.prompt??`Your answer`,24),r=[];return e.prompt&&r.push({text:{text:g(e.prompt,n.sectionText),type:`mrkdwn`},type:`section`}),r.push({block_id:o,element:{action_id:s,multiline:!0,type:`plain_text_input`},label:{text:`Answer`,type:`plain_text`},type:`input`}),{blocks:r,callback_id:a,close:{text:`Cancel`,type:`plain_text`},private_metadata:typeof e.metadata==`string`?e.metadata:JSON.stringify(e.metadata),submit:{text:`Submit`,type:`plain_text`},title:{text:t,type:`plain_text`},type:`modal`}}function d(e){return e.find(e=>e.blockId===`input-freeform-block`&&e.actionId===`input-freeform-text`)?.value}function f(e){let t=[];return e.promptBlock&&typeof e.promptBlock==`object`&&t.push(e.promptBlock),t.push({text:{text:`:white_check_mark: *${e.answer}*`,type:`mrkdwn`},type:`section`}),e.userId&&t.push({elements:[{text:`Answered by <@${e.userId}>`,type:`mrkdwn`}],type:`context`}),t}function p(e){return{action_id:`${i}${e}`,style:`primary`,text:{text:`Type your answer`,type:`plain_text`},type:`button`,value:e}}function m(e,t,i){return _({action_id:`${r}${e}:button:${i}`,style:t.style===`primary`||t.style===`danger`?t.style:void 0,text:{text:g(t.label,n.buttonText),type:`plain_text`},type:`button`,value:g(t.id,n.buttonValue)})}function h(e){let t=(e.options??[]).map(e=>({text:{text:g(e.label,n.optionText),type:`plain_text`},value:g(e.id,n.optionValue)}));return{action_id:`${r}${e.requestId}`,options:t.slice(0,n.options),placeholder:{text:`Choose an option`,type:`plain_text`},type:`static_select`}}function te(e){let t=(e.options??[]).map(e=>({text:{text:g(e.label,n.optionText),type:`plain_text`},value:g(e.id,n.optionValue)}));return t.length>n.radioOptions?h(e):{action_id:`${r}${e.requestId}`,options:t,type:`radio_buttons`}}function g(e,t){return e.length>t?e.slice(0,t):e}function _(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}var v=` `,y=/\{\{emoji:([a-zA-Z0-9_+-]+)\}\}/g;function b(e,t={}){let r=[],i={chartCount:0,convertEmoji:t.convertEmoji??w,maxBlocks:t.maxBlocks??n.blocks,usedTable:!1};e.title&&r.push({text:K(e.title,i.convertEmoji,n.headerText),type:`header`}),e.subtitle&&r.push({elements:[G(e.subtitle,i.convertEmoji,n.textObject)],type:`context`}),e.imageUrl&&r.push({alt_text:Y(i.convertEmoji(e.title||`Card image`),n.imageAlt),image_url:Y(e.imageUrl,n.imageUrl),type:`image`});for(let t of e.children)r.push(...T(t,i));return r.slice(0,i.maxBlocks)}var x=b;function S(e,t={}){let n=t.convertEmoji??w,r=[];e.title&&r.push(`*${n(e.title)}*`),e.subtitle&&r.push(n(e.subtitle));for(let t of e.children){let e=W(t,n);e&&r.push(e)}return r.join(`
2
+ `)}var C=S;function w(e){return e.replace(y,`:$1:`)}function T(e,t){switch(e.type){case`actions`:return[k(e,t.convertEmoji)];case`chart`:return[z(e,t)];case`divider`:return[{type:`divider`}];case`fields`:return[L(e,t.convertEmoji)];case`image`:return[D(e,t.convertEmoji)];case`link`:return[O(e,t.convertEmoji)];case`section`:return e.children.flatMap(e=>T(e,t));case`table`:return R(e,t);case`text`:return[E(e,t.convertEmoji)];default:return Z(e)}}function E(t,r){let i=e(r(t.content));return t.style===`muted`?{elements:[G(i,e=>e,n.textObject)],type:`context`}:{text:G(t.style===`bold`?`*${i}*`:i,e=>e,n.sectionText),type:`section`}}function D(e,t){return{alt_text:Y(t(e.alt||`Image`),n.imageAlt),image_url:Y(e.url,n.imageUrl),type:`image`}}function O(e,t){return{text:G(`<${e.url}|${t(e.label)}>`,e=>e,n.sectionText),type:`section`}}function k(e,t){return{elements:e.children.slice(0,n.actionsElements).map(e=>A(e,t)),type:`actions`}}function A(e,t){switch(e.type){case`button`:return j(e,t);case`link-button`:return M(e,t);case`radio_select`:return P(e,t);case`select`:return N(e,t);default:return Z(e)}}function j(e,t){return Q({action_id:Y(e.id,n.actionId),style:J(e.style),text:K(e.label,t,n.buttonText),type:`button`,value:e.value===void 0?void 0:Y(e.value,n.buttonValue)})}function M(e,t){return Q({action_id:Y(e.id??`link-${e.url}`,n.actionId),style:J(e.style),text:K(e.label,t,n.buttonText),type:`button`,url:Y(e.url,n.buttonUrl)})}function N(e,t){let r=e.options.slice(0,n.options).map(e=>I(e,t,`plain_text`));return Q({action_id:Y(e.id,n.actionId),initial_option:F(r,e.initialOption),options:r,placeholder:e.placeholder?K(e.placeholder,t,n.placeholder):void 0,type:`static_select`})}function P(e,t){let r=e.options.slice(0,n.radioOptions).map(e=>I(e,t,`mrkdwn`));return Q({action_id:Y(e.id,n.actionId),initial_option:F(r,e.initialOption),options:r,type:`radio_buttons`})}function F(e,t){if(t===void 0)return;let r=Y(t,n.optionValue);return e.find(e=>e.value===r)}function I(e,t,r){return Q({description:e.description?{text:Y(t(e.description),n.optionDescription),type:r}:void 0,text:{text:Y(t(e.label),n.optionText),type:r},value:Y(e.value,n.optionValue)})}function L(t,r){return{fields:t.children.slice(0,n.fields).map(t=>G(`*${e(r(t.label))}*
3
+ ${e(r(t.value))}`,e=>e,n.fieldText)),type:`section`}}function R(e,t){let r=[e.headers,...e.rows].flat().reduce((e,t)=>e+t.length,0);if(t.usedTable||e.rows.length+1>n.tableRows||e.headers.length>n.tableColumns||r>n.tableChars)return[{text:B($(e)),type:`section`}];t.usedTable=!0;let i=[e.headers.map(e=>q(e,t.convertEmoji)),...e.rows.map(e=>e.map(e=>q(e,t.convertEmoji)))];return e.rows.length===0?[Q({column_settings:e.align?.slice(0,n.tableColumns).map(e=>e?{align:e}:null),rows:i,type:`table`})]:[Q({caption:t.convertEmoji(e.caption||`Table`),page_size:e.pageSize===void 0?void 0:Math.min(n.tablePageSize,Math.max(1,Math.floor(e.pageSize))),rows:i,type:`data_table`})]}function z(e,t){let r=t.chartCount<n.chartsPerMessage?V(e,t.convertEmoji):null;return r?(t.chartCount+=1,r):{text:B(U(e)),type:`section`}}function B(e){let t=e=>`\`\`\`
4
+ ${e}
5
+ \`\`\``,r=n.sectionText-t(``).length;return{text:e.length>r?t(`${e.slice(0,r-1)}\u2026`):t(e),type:`mrkdwn`}}function V(e,t){let r=t(e.title);if(r.length===0||r.length>n.chartTitle)return null;let{chart:i}=e;if(i.type===`pie`)return i.segments.length>=1&&i.segments.length<=n.chartSegments&&i.segments.every(e=>H(e.label)&&e.value>0)?{chart:{segments:i.segments.map(e=>({label:e.label,value:e.value})),type:`pie`},title:r,type:`data_visualization`}:null;let{categories:a,series:o}=i;if(!(a.length>=1&&a.length<=n.chartDataPoints&&a.every(e=>H(e))&&new Set(a).size===a.length&&o.length>=1&&o.length<=n.chartSeries&&o.every(e=>H(e.name))&&new Set(o.map(e=>e.name)).size===o.length&&(i.xLabel===void 0||i.xLabel.length<=n.chartTitle)&&(i.yLabel===void 0||i.yLabel.length<=n.chartTitle)))return null;let s=[];for(let e of o){if(e.data.length!==a.length)return null;let t=new Map(e.data.map(e=>[e.label,e])),n=[];for(let e of a){let r=t.get(e);if(!r)return null;n.push({label:e,value:r.value})}s.push({data:n,name:e.name})}return{chart:{axis_config:Q({categories:a,x_label:i.xLabel,y_label:i.yLabel}),series:s,type:i.type},title:r,type:`data_visualization`}}function H(e){return e.length>=1&&e.length<=n.chartLabel}function U(e){let{chart:t,title:n}=e;return t.type===`pie`?`${n}
6
+ ${$({headers:[`Label`,`Value`],rows:t.segments.map(e=>[e.label,String(e.value)]),type:`table`})}`:`${n}
7
+ ${$({headers:[t.xLabel??``,...t.series.map(e=>e.name)],rows:t.categories.map(e=>[e,...t.series.map(t=>{let n=t.data.find(t=>t.label===e);return n?String(n.value):``})]),type:`table`})}`}function W(e,t){switch(e.type){case`actions`:return;case`chart`:return U(e);case`divider`:return`---`;case`fields`:return e.children.map(e=>`${t(e.label)}: ${t(e.value)}`).join(`
8
+ `);case`image`:return e.alt?t(e.alt):void 0;case`link`:return`${t(e.label)} (${e.url})`;case`section`:return e.children.map(e=>W(e,t)).filter(e=>!!e).join(`
9
+ `);case`table`:return $(e);case`text`:return t(e.content);default:return Z(e)}}function G(e,t,n){return{text:X(Y(t(e),n)),type:`mrkdwn`}}function K(e,t,n){return{emoji:!0,text:X(Y(t(e),n)),type:`plain_text`}}function q(e,t){return{text:X(t(e)),type:`raw_text`}}function J(e){return e===`danger`||e===`primary`?e:void 0}function Y(e,t){return e.length>t?e.slice(0,t):e}function X(e){return e.length>0?e:v}function Z(e){throw new t(`Unsupported Slack card element: ${String(e)}`)}function Q(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}function $(e){let t=[e.headers,...e.rows],n=e.headers.map((e,n)=>Math.max(...t.map(e=>e[n]?.length??0)));return t.map(e=>e.map((e,t)=>(e??``).padEnd(n[t]??0)).join(` | `).trimEnd()).join(`
10
+ `)}export{s as SLACK_FREEFORM_ACTION_ID,i as SLACK_FREEFORM_ACTION_PREFIX,o as SLACK_FREEFORM_BLOCK_ID,a as SLACK_FREEFORM_CALLBACK_ID,r as SLACK_INPUT_ACTION_PREFIX,t as SlackBlockError,f as answeredSlackInputBlocks,u as buildSlackFreeformView,x as cardToBlockKit,C as cardToFallbackText,b as cardToSlackBlocks,S as cardToSlackFallbackText,w as convertSlackEmojiPlaceholders,c as inputRequestToSlackBlocks,d as parseSlackFreeformValue,l as parseSlackInputResponse};
@@ -1,9 +1,43 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import { WebClientOptions, WebClient } from './_slack-web-api.js';
3
- import { BaseFormatConverter, Root, AdapterPostableMessage, CardElement, Logger, Adapter, ChatInstance, UserInfo, WebhookOptions, OptionsLoadResult, ModalResponse, ModalElement, LinkPreview, Message, Attachment, RawMessage, EphemeralMessage, ScheduledMessage, FileUpload, PlanModel, PlanContent, EmojiValue, StreamChunk, StreamOptions, FetchOptions, FetchResult, ThreadInfo, ChannelVisibility, ListThreadsOptions, ListThreadsResult, ChannelInfo, FormattedContent } from '#compiled/chat/index.js';
4
- import { y as SlackWebhookVerifier } from './types-AntsVifS.js';
3
+ import { Message, AppContextEntity, BaseFormatConverter, Root, AdapterPostableMessage, CardElement, Logger, Adapter, ChatInstance, UserInfo, WebhookOptions, OptionsLoadResult, ModalResponse, ModalElement, LinkPreview, Attachment, RawMessage, EphemeralMessage, ScheduledMessage, FileUpload, PlanModel, PlanContent, EmojiValue, StreamChunk, StreamOptions, FetchOptions, FetchResult, ThreadInfo, ChannelVisibility, ListThreadsOptions, ListThreadsResult, ChannelInfo, FormattedContent } from '#compiled/chat/index.js';
4
+ import { S as SlackWebhookVerifier } from './types-CdGmMyOr.js';
5
5
  export { EncryptedTokenData, decodeKey } from './_chat-adapter-shared.js';
6
6
 
7
+ /** A single entity in a Slack active-view context (wire shape). */
8
+ interface SlackAppContextEntity {
9
+ enterprise_id?: string;
10
+ team_id?: string;
11
+ type: string;
12
+ value: unknown;
13
+ }
14
+ /** Slack active-view context object (`app_context` on messages, `context` elsewhere). */
15
+ interface SlackAppContext {
16
+ entities?: SlackAppContextEntity[];
17
+ }
18
+ /** Slack `app_context_changed` event payload (wire shape, agent_view only). */
19
+ interface SlackAppContextChangedEvent {
20
+ channel: string;
21
+ context: SlackAppContext;
22
+ event_ts: string;
23
+ type: "app_context_changed";
24
+ user: string;
25
+ }
26
+ /**
27
+ * Normalize Slack active-view context entities into the core `AppContextEntity` union.
28
+ * Unrecognized entity types map to `{ kind: "unknown" }` for forward-compatibility.
29
+ * @param context - The Slack context object; tolerates a missing/malformed one.
30
+ * @returns Relevance-ordered normalized entities; empty when the context has none.
31
+ */
32
+ declare function normalizeAppContextEntities(context: SlackAppContext | undefined): AppContextEntity[];
33
+ /**
34
+ * Read the folded active-view context Slack attaches to a DM message
35
+ * (`message.im`'s `app_context` field), normalized to core entities.
36
+ * @param message - The incoming message whose raw payload may carry `app_context`.
37
+ * @returns Normalized entities; empty when no folded context is present.
38
+ */
39
+ declare function getAppContext(message: Message): AppContextEntity[];
40
+
7
41
  /**
8
42
  * Slack format conversion.
9
43
  *
@@ -125,7 +159,65 @@ interface SlackInstallation {
125
159
  botUserId?: string;
126
160
  teamName?: string;
127
161
  }
162
+ /** Options for the feedback buttons appended to streamed replies. */
163
+ interface SlackFeedbackButtonsOptions {
164
+ /**
165
+ * `action_id` dispatched to `bot.onAction` when a button is clicked.
166
+ * Defaults to "message_feedback".
167
+ */
168
+ actionId?: string;
169
+ /** Label for the negative button. Defaults to "Bad response". */
170
+ negativeLabel?: string;
171
+ /** Action value dispatched for negative clicks. Defaults to "negative". */
172
+ negativeValue?: string;
173
+ /** Label for the positive button. Defaults to "Good response". */
174
+ positiveLabel?: string;
175
+ /** Action value dispatched for positive clicks. Defaults to "positive". */
176
+ positiveValue?: string;
177
+ }
178
+ /** A single suggested prompt shown in an assistant/agent thread. */
179
+ interface SlackSuggestedPrompt {
180
+ /** Full prompt text sent as the user's message when the prompt is clicked. */
181
+ message: string;
182
+ /** Short label shown on the prompt button. */
183
+ title: string;
184
+ }
185
+ /** Suggested prompts payload applied when an assistant/agent thread opens. */
186
+ interface SlackSuggestedPromptsOptions {
187
+ /** The prompts to display. Slack shows at most 4. */
188
+ prompts: SlackSuggestedPrompt[];
189
+ /** Optional heading shown above the prompts. */
190
+ title?: string;
191
+ }
192
+ /** Context passed to a dynamic `suggestedPrompts` resolver. */
193
+ interface SlackSuggestedPromptsContext {
194
+ /** The DM channel the assistant/agent thread lives in. */
195
+ channelId: string;
196
+ /** Enterprise the user opened the thread from (legacy assistant_view). */
197
+ enterpriseId?: string;
198
+ /** Active-view context entities (agent_view, when Slack folds context in). */
199
+ entities?: AppContextEntity[];
200
+ /** Team the user opened the thread from (legacy assistant_view). */
201
+ teamId?: string;
202
+ /** Assistant thread root (legacy assistant_view; absent under agent_view). */
203
+ threadTs?: string;
204
+ /** The user who opened the thread. */
205
+ userId: string;
206
+ }
207
+ /**
208
+ * Suggested prompts configuration: a static payload, or a resolver invoked
209
+ * each time an assistant/agent thread opens. Return null/undefined from the
210
+ * resolver to skip setting prompts for that thread.
211
+ */
212
+ type SlackSuggestedPrompts = SlackSuggestedPromptsOptions | ((context: SlackSuggestedPromptsContext) => SlackSuggestedPromptsOptions | null | undefined | Promise<SlackSuggestedPromptsOptions | null | undefined>);
128
213
  interface SlackAdapterConfig {
214
+ /**
215
+ * Enable Slack's Agent messaging experience (`agent_view` manifest mode).
216
+ * When true, `app_home_opened` is treated as the DM-open signal regardless of
217
+ * tab and folded active-view context is surfaced. Defaults to false (legacy
218
+ * `assistant_view`).
219
+ */
220
+ agentView?: boolean;
129
221
  /** Override the Slack API base URL (e.g. "https://slack-gov.com/api/" for GovSlack). Defaults to SLACK_API_URL env var. */
130
222
  apiUrl?: string;
131
223
  /** App-level token (xapp-...). Required for socket mode. */
@@ -147,6 +239,15 @@ interface SlackAdapterConfig {
147
239
  * If provided, bot tokens stored via setInstallation() will be encrypted at rest.
148
240
  */
149
241
  encryptionKey?: string;
242
+ /**
243
+ * Append Slack's native feedback buttons (a `context_actions` block with a
244
+ * `feedback_buttons` element) to every streamed reply, attached when the
245
+ * stream finishes. Clicks dispatch to `bot.onAction` with the configured
246
+ * `actionId` and a positive/negative value. Pass `true` for defaults, or an
247
+ * options object to customize labels, values, and the action id. Skipped
248
+ * when a stream falls back to post-and-edit.
249
+ */
250
+ feedbackButtons?: boolean | SlackFeedbackButtonsOptions;
150
251
  /**
151
252
  * Prefix for the state key used to store workspace installations.
152
253
  * Defaults to `slack:installation`. The full key will be `{prefix}:{teamId}`.
@@ -163,14 +264,37 @@ interface SlackAdapterConfig {
163
264
  installationProvider?: {
164
265
  getInstallation: (installationId: string, isEnterpriseInstall: boolean) => Promise<SlackInstallation | null>;
165
266
  };
267
+ /**
268
+ * Default rotating loading messages for the assistant thinking indicator
269
+ * (`assistant.threads.setStatus` `loading_messages`). Used by `startTyping`
270
+ * and `setAssistantStatus` when no explicit status/messages are passed.
271
+ */
272
+ loadingMessages?: string[];
166
273
  /** Logger instance for error reporting. Defaults to ConsoleLogger. */
167
274
  logger?: Logger;
168
275
  /** Connection mode: "webhook" (default) or "socket" */
169
276
  mode?: SlackAdapterMode;
277
+ /**
278
+ * Use Slack's native streaming API (`chat.startStream` / `chat.appendStream`
279
+ * / `chat.stopStream`) for streamed posts. Defaults to true. Set false on
280
+ * Slack flavours without the streaming methods (e.g. GovSlack) to always
281
+ * stream via post-and-edit; the adapter also falls back automatically when
282
+ * the workspace rejects the first native call.
283
+ */
284
+ nativeStreaming?: boolean;
170
285
  /** Signing secret for webhook verification. Defaults to SLACK_SIGNING_SECRET env var. */
171
286
  signingSecret?: string;
172
287
  /** Shared secret for authenticating forwarded socket mode events. Auto-detected from SLACK_SOCKET_FORWARDING_SECRET. Falls back to appToken if not set. */
173
288
  socketForwardingSecret?: string;
289
+ /**
290
+ * Suggested prompts to pin automatically when an assistant/agent thread
291
+ * opens. Applied on `assistant_thread_started` (legacy `assistant_view`)
292
+ * and on Messages-tab `app_home_opened` (with `agentView` enabled, where
293
+ * prompts sit at the top of the agent conversation). Pass a static payload
294
+ * or a resolver that receives the thread context (user, channel,
295
+ * active-view entities) and returns prompts per thread.
296
+ */
297
+ suggestedPrompts?: SlackSuggestedPrompts;
174
298
  /** Override bot username (optional) */
175
299
  userName?: string;
176
300
  /**
@@ -219,6 +343,13 @@ interface SlackAdapterConfig {
219
343
  webhookVerifier?: SlackWebhookVerifier;
220
344
  }
221
345
 
346
+ /**
347
+ * Build a `context_actions` block with Slack's native feedback buttons
348
+ * (thumbs up/down on agent replies). The adapter appends this automatically
349
+ * to streamed replies when the `feedbackButtons` config is set; use this
350
+ * helper to attach the same block to non-streamed messages via raw blocks.
351
+ */
352
+ declare function buildFeedbackButtonsBlock(options?: SlackFeedbackButtonsOptions): Record<string, unknown>;
222
353
  /** Envelope for events forwarded from a socket mode listener via HTTP POST */
223
354
  interface SlackForwardedSocketEvent {
224
355
  body: Record<string, unknown>;
@@ -346,6 +477,7 @@ interface SlackAssistantContextChangedEvent {
346
477
  /** Slack app_home_opened event payload */
347
478
  interface SlackAppHomeOpenedEvent {
348
479
  channel: string;
480
+ context?: SlackAppContext;
349
481
  event_ts: string;
350
482
  tab: string;
351
483
  type: "app_home_opened";
@@ -508,6 +640,18 @@ declare class SlackAdapter implements Adapter<SlackThreadId, unknown> {
508
640
  */
509
641
  private readonly _externalChannels;
510
642
  protected readonly appToken: string | undefined;
643
+ protected readonly agentView: boolean;
644
+ protected readonly suggestedPrompts?: SlackSuggestedPrompts;
645
+ protected readonly loadingMessages?: string[];
646
+ /** Normalized feedbackButtons config (`true` becomes `{}`). */
647
+ protected readonly feedbackButtons?: SlackFeedbackButtonsOptions;
648
+ protected readonly nativeStreaming: boolean;
649
+ /**
650
+ * Latched when the workspace rejects native streaming with an error that
651
+ * won't heal (e.g. `unknown_method` on GovSlack) so later streams skip the
652
+ * doomed native attempt and go straight to post-and-edit.
653
+ */
654
+ protected nativeStreamingBroken: boolean;
511
655
  protected readonly mode: SlackAdapterMode;
512
656
  protected readonly socketForwardingSecret: string | undefined;
513
657
  private socketClient;
@@ -722,6 +866,11 @@ declare class SlackAdapter implements Adapter<SlackThreadId, unknown> {
722
866
  * Fires when a user opens the bot's Home tab.
723
867
  */
724
868
  protected handleAppHomeOpened(event: SlackAppHomeOpenedEvent, options?: WebhookOptions): void;
869
+ /**
870
+ * Handle app_context_changed events (Slack Agent messaging experience).
871
+ * Reports the user's current active view via normalized entities.
872
+ */
873
+ protected handleAppContextChanged(event: SlackAppContextChangedEvent, options?: WebhookOptions): void;
725
874
  /**
726
875
  * Handle member_joined_channel events from Slack.
727
876
  * Fires when a user (including the bot) joins a channel.
@@ -734,16 +883,27 @@ declare class SlackAdapter implements Adapter<SlackThreadId, unknown> {
734
883
  */
735
884
  publishHomeView(userId: string, view: Record<string, unknown>): Promise<void>;
736
885
  /**
737
- * Set suggested prompts for an assistant thread.
738
- * Slack Assistants API: assistant.threads.setSuggestedPrompts
886
+ * Set suggested prompts for an assistant/agent thread.
887
+ * Slack Assistants API: assistant.threads.setSuggestedPrompts.
888
+ * `threadTs` is optional under the Agent messaging experience (agent_view),
889
+ * where prompts can sit at the top of the agent conversation without a thread.
739
890
  */
740
- setSuggestedPrompts(channelId: string, threadTs: string, prompts: Array<{
891
+ setSuggestedPrompts(channelId: string, threadTs: string | undefined, prompts: Array<{
741
892
  title: string;
742
893
  message: string;
743
894
  }>, title?: string): Promise<void>;
895
+ /**
896
+ * Resolve and apply the configured `suggestedPrompts` for a newly opened
897
+ * assistant/agent thread. Errors are logged, never thrown — this runs on
898
+ * the webhook path where a failure must not turn into a 500.
899
+ */
900
+ protected applyConfiguredSuggestedPrompts(context: SlackSuggestedPromptsContext): Promise<void>;
744
901
  /**
745
902
  * Set status/thinking indicator for an assistant thread.
746
903
  * Slack Assistants API: assistant.threads.setStatus
904
+ *
905
+ * When `loadingMessages` is omitted, falls back to the adapter-level
906
+ * `loadingMessages` config.
747
907
  */
748
908
  setAssistantStatus(channelId: string, threadTs: string, status: string, loadingMessages?: string[]): Promise<void>;
749
909
  /**
@@ -857,9 +1017,9 @@ declare class SlackAdapter implements Adapter<SlackThreadId, unknown> {
857
1017
  * streaming API as chunk payloads, enabling native task progress cards
858
1018
  * and plan displays in the Slack AI Assistant UI.
859
1019
  *
860
- * Requires `recipientUserId` and `recipientTeamId` in options.
1020
+ * Falls back to post-and-edit when the thread lacks native stream context.
861
1021
  */
862
- stream(threadId: string, textStream: AsyncIterable<string | StreamChunk>, options?: StreamOptions): Promise<RawMessage<unknown>>;
1022
+ stream(threadId: string, textStream: AsyncIterable<string | StreamChunk>, options?: StreamOptions): Promise<RawMessage<unknown> | null>;
863
1023
  /**
864
1024
  * Open a direct message conversation with a user.
865
1025
  * Returns a thread ID that can be used to post messages.
@@ -972,4 +1132,4 @@ declare class SlackAdapter implements Adapter<SlackThreadId, unknown> {
972
1132
  }
973
1133
  declare function createSlackAdapter(config?: SlackAdapterConfig): SlackAdapter;
974
1134
 
975
- export { SlackAdapter, type SlackAdapterConfig, type SlackAdapterMode, type SlackBotToken, type SlackEvent, SlackFormatConverter, type SlackInstallation, SlackFormatConverter as SlackMarkdownConverter, type SlackOAuthCallbackOptions, type SlackReactionEvent, type SlackThreadId, cardToBlockKit, cardToFallbackText, createSlackAdapter };
1135
+ export { SlackAdapter, type SlackAdapterConfig, type SlackAdapterMode, type SlackAppContext, type SlackAppContextChangedEvent, type SlackAppContextEntity, type SlackBotToken, type SlackEvent, type SlackFeedbackButtonsOptions, SlackFormatConverter, type SlackInstallation, SlackFormatConverter as SlackMarkdownConverter, type SlackOAuthCallbackOptions, type SlackReactionEvent, type SlackSuggestedPrompt, type SlackSuggestedPrompts, type SlackSuggestedPromptsContext, type SlackSuggestedPromptsOptions, type SlackThreadId, buildFeedbackButtonsBlock, cardToBlockKit, cardToFallbackText, createSlackAdapter, getAppContext, normalizeAppContextEntities };