eve 0.17.1 → 0.18.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.
- package/CHANGELOG.md +27 -0
- package/dist/src/channel/types.d.ts +11 -0
- package/dist/src/cli/dev/tui/status-line.d.ts +1 -1
- package/dist/src/compiled/.vendor-stamp.json +2 -2
- package/dist/src/compiled/@chat-adapter/slack/api.d.ts +132 -0
- package/dist/src/compiled/@chat-adapter/slack/api.js +1 -0
- package/dist/src/compiled/@chat-adapter/slack/blocks.js +1 -1
- package/dist/src/compiled/@chat-adapter/slack/format.d.ts +33 -0
- package/dist/src/compiled/@chat-adapter/slack/format.js +1 -0
- package/dist/src/compiled/@chat-adapter/slack/index.js +28 -28
- package/dist/src/compiled/@chat-adapter/slack/types-AntsVifS.d.ts +187 -0
- package/dist/src/compiled/@chat-adapter/slack/webhook.d.ts +10 -0
- package/dist/src/compiled/@chat-adapter/slack/webhook.js +1 -0
- package/dist/src/compiled/@vercel/sandbox/api-client/api-client.d.ts +19 -16
- package/dist/src/compiled/@vercel/sandbox/api-client/index.d.ts +1 -1
- package/dist/src/compiled/@vercel/sandbox/api-client/validators.d.ts +37 -23
- package/dist/src/compiled/@vercel/sandbox/command.d.ts +2 -8
- package/dist/src/compiled/@vercel/sandbox/index.js +5 -5
- package/dist/src/compiled/@vercel/sandbox/sandbox.d.ts +43 -16
- package/dist/src/compiled/@vercel/sandbox/snapshot.d.ts +5 -5
- package/dist/src/compiled/_chunks/node/{auth-DF_ft5ea.js → auth-CWHn3Yve.js} +1 -1
- package/dist/src/compiled/_chunks/node/chunk-AYN7QRWH-B__hKQV7.js +1 -0
- package/dist/src/compiled/_chunks/node/chunk-HFKBBKCJ-CWaVIQuL.js +1 -0
- package/dist/src/compiled/_chunks/node/{version-TugPKZua.js → version-DD-FX9rK.js} +1 -1
- package/dist/src/compiler/manifest.d.ts +2 -2
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/context/keys.d.ts +2 -0
- package/dist/src/context/keys.js +1 -1
- package/dist/src/evals/assertions/run.js +2 -2
- package/dist/src/execution/create-session-step.d.ts +2 -0
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
- package/dist/src/execution/durable-session-store.d.ts +3 -0
- package/dist/src/execution/runtime-context.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-create-sdk.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/session.d.ts +6 -1
- package/dist/src/execution/session.js +3 -3
- package/dist/src/execution/subagent-tool.js +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/harness/advertised-tools.d.ts +33 -0
- package/dist/src/harness/advertised-tools.js +1 -0
- package/dist/src/harness/subagent-depth.d.ts +17 -0
- package/dist/src/harness/subagent-depth.js +1 -0
- package/dist/src/harness/tool-loop.js +1 -1
- package/dist/src/harness/turn-tag-state.d.ts +30 -22
- package/dist/src/harness/turn-tag-state.js +1 -1
- package/dist/src/harness/types.d.ts +28 -0
- package/dist/src/harness/workflow-continuation-security.d.ts +1 -0
- package/dist/src/harness/workflow-continuation-security.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/core.js +1 -1
- package/dist/src/internal/nitro/dev-runtime-source-snapshot-copy.js +1 -1
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +2 -2
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/internal/nitro/routes/channel-route-context.d.ts +5 -0
- package/dist/src/internal/nitro/routes/channel-route-context.js +1 -0
- package/dist/src/internal/nitro/routes/info.d.ts +2 -6
- package/dist/src/internal/nitro/routes/info.js +1 -1
- package/dist/src/protocol/routes.d.ts +2 -4
- package/dist/src/public/channels/auth.d.ts +2 -2
- package/dist/src/public/channels/eve.d.ts +5 -4
- package/dist/src/public/channels/eve.js +1 -1
- package/dist/src/public/channels/slack/api.d.ts +3 -6
- package/dist/src/public/channels/slack/api.js +1 -1
- package/dist/src/public/channels/slack/inbound.d.ts +11 -9
- package/dist/src/public/channels/slack/inbound.js +1 -1
- package/dist/src/public/channels/slack/interactions.d.ts +2 -1
- package/dist/src/public/channels/slack/interactions.js +1 -1
- package/dist/src/public/channels/slack/mrkdwn.d.ts +3 -35
- package/dist/src/public/channels/slack/mrkdwn.js +1 -1
- package/dist/src/public/channels/slack/slackChannel.js +1 -1
- package/dist/src/public/channels/slack/verify.d.ts +4 -42
- package/dist/src/public/channels/slack/verify.js +1 -1
- package/dist/src/public/definitions/agent.d.ts +1 -1
- package/dist/src/public/index.d.ts +1 -1
- package/dist/src/public/sandbox/vercel-sandbox.d.ts +4 -1
- package/dist/src/runtime/governance/auth/oidc.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/setup/boxes/link-project.d.ts +7 -3
- package/dist/src/setup/boxes/link-project.js +1 -1
- package/dist/src/setup/boxes/preflight.js +1 -1
- package/dist/src/setup/boxes/select-model.js +1 -1
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/onboarding.js +1 -1
- package/dist/src/setup/scaffold/create/project.d.ts +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/scaffold/create/web-template.d.ts +3 -0
- package/dist/src/setup/scaffold/create/web-template.js +1 -1
- package/dist/src/setup/vercel-project-framework.d.ts +10 -0
- package/dist/src/setup/vercel-project-framework.js +1 -0
- package/dist/src/setup/vercel-project.d.ts +8 -3
- package/dist/src/setup/vercel-project.js +0 -0
- package/dist/src/shared/agent-definition.d.ts +37 -0
- package/dist/src/shared/default-agent-model.d.ts +1 -1
- package/dist/src/shared/default-agent-model.js +1 -1
- package/docs/agent-config.md +35 -8
- package/docs/channels/eve.mdx +3 -2
- package/docs/concepts/sessions-runs-and-streaming.md +2 -2
- package/docs/getting-started.mdx +5 -5
- package/docs/reference/typescript-api.md +1 -1
- package/docs/sandbox.mdx +1 -1
- package/docs/subagents.mdx +19 -0
- package/package.json +3 -31
- package/dist/src/compiled/_chunks/node/chunk-AYN7QRWH-Csu8sG38.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# eve
|
|
2
2
|
|
|
3
|
+
## 0.18.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- a75dd47: Vercel sandbox: drop the `runtime` option. eve now always boots its hosted sandboxes from the published eve image.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- afc7ded: Allow `eve dev` to start from a package-less flat agent that only has `instructions.md`. Development runtime snapshots now generate private package metadata when the authored app has none.
|
|
12
|
+
- 7d1084d: fix(eve): remove unnecessary preview deployment check that prevented production access from `eve dev`
|
|
13
|
+
- 63f94f0: Remove optional framework peer dependencies from the published package metadata so installs no longer resolve unused framework packages.
|
|
14
|
+
- ba2e0ce: Create new Vercel projects through `vercel link` instead of posting directly to the projects API. This lets the Vercel CLI apply its framework and local config handling while eve reads the resulting link metadata, keeps framework-specific eve host integrations when detected, and otherwise ensures new projects use the eve framework preset.
|
|
15
|
+
|
|
16
|
+
## 0.17.2
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- afa22f8: Cap recursive subagent delegation at three child-session levels by default, configurable with `defineAgent({ limits: { maxSubagentDepth } })`. At the limit, eve no longer advertises subagent tools and blocks stale delegated calls before starting another child session.
|
|
21
|
+
- 55e9ad5: Update the scaffold's default agent model to `anthropic/claude-sonnet-5`. New agents created with `eve init` (and the setup model picker's pre-selected default) now use Claude Sonnet 5 instead of Claude Sonnet 4.6.
|
|
22
|
+
- f26d600: use Chat SDK Slack format primitives for Slack mrkdwn conversion
|
|
23
|
+
- 087d6fd: use chat sdk slack api primitives for slack channel api helpers
|
|
24
|
+
- 70ebe69: use Chat SDK Slack webhook primitives for Slack channel parsing and verification
|
|
25
|
+
- ed8a935: Keep the `Workflow` orchestration tool root-only. Delegated subagent sessions can still call visible subagent tools directly until the configured depth cap, but eve no longer advertises `Workflow` from those child sessions.
|
|
26
|
+
- 37bd2bb: Use authored `eveChannel()` auth for `GET /eve/v1/info` so remote `eve dev` can authenticate with the same policy as the session routes.
|
|
27
|
+
- 2fdc561: Add `limits.maxInputTokensPerSession` and `limits.maxOutputTokensPerSession` to stop a durable session from starting more model calls after its accumulated provider-reported input or output token usage reaches the configured cap. Root sessions default to a 40M input-token budget, delegated subagent sessions default to 5M, and authored input limits override those defaults.
|
|
28
|
+
- 39c90de: Add explicit `dev:eve`, `build:eve`, and `start:eve` scripts to generated Web Chat projects so users can run the embedded eve app directly when needed.
|
|
29
|
+
|
|
3
30
|
## 0.17.1
|
|
4
31
|
|
|
5
32
|
### Patch Changes
|
|
@@ -229,6 +229,17 @@ export interface RunInput {
|
|
|
229
229
|
};
|
|
230
230
|
readonly mode: RunMode;
|
|
231
231
|
readonly parent?: SessionParent;
|
|
232
|
+
/**
|
|
233
|
+
* Framework-owned depth of delegated local subagent sessions. Root sessions
|
|
234
|
+
* omit this and are treated as depth 0; each local child receives
|
|
235
|
+
* parent depth + 1.
|
|
236
|
+
*/
|
|
237
|
+
readonly subagentDepth?: number;
|
|
238
|
+
/**
|
|
239
|
+
* Optional maximum delegated subagent depth inherited by this run. When
|
|
240
|
+
* omitted, the session uses its resolved agent config or eve's default.
|
|
241
|
+
*/
|
|
242
|
+
readonly subagentMaxDepth?: number;
|
|
232
243
|
}
|
|
233
244
|
export interface DeliverInput {
|
|
234
245
|
/**
|
|
@@ -6,7 +6,7 @@ import type { ModelEndpointStatus } from "#shared/model-endpoint-status.js";
|
|
|
6
6
|
export interface StatusLineInput {
|
|
7
7
|
/** Port of the connected local development server; omitted for remote sessions. */
|
|
8
8
|
serverPort?: string;
|
|
9
|
-
/** Resolved model slug, e.g. "anthropic/claude-sonnet-
|
|
9
|
+
/** Resolved model slug, e.g. "anthropic/claude-sonnet-5"; absent when `/eve/v1/info` failed. */
|
|
10
10
|
model?: string;
|
|
11
11
|
/** Preformatted token-flow segment (formatTokenFlow output), e.g. `↑ 394.4K ↓ 4.3K`. */
|
|
12
12
|
tokens?: string;
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"turndown": "7.2.4",
|
|
26
26
|
"@vercel/detect-agent": "1.2.3",
|
|
27
27
|
"@vercel/oidc": "3.5.0",
|
|
28
|
-
"@vercel/sandbox": "2.
|
|
28
|
+
"@vercel/sandbox": "2.3.0",
|
|
29
29
|
"@workflow/core": "5.0.0-beta.26",
|
|
30
30
|
"@workflow/errors": "5.0.0-beta.8",
|
|
31
31
|
"@workflow/serde": "5.0.0-beta.2",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"zod": "4.4.3",
|
|
34
34
|
"zod-validation-error": "5.0.0"
|
|
35
35
|
},
|
|
36
|
-
"scriptHash": "
|
|
36
|
+
"scriptHash": "a8edd88e1dd67dde83d0116e7c80df8e0cb793c5db5da47508924651a427e821"
|
|
37
37
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
type SlackBotToken = string | (() => Promise<string> | string);
|
|
2
|
+
type SlackFetch = typeof fetch;
|
|
3
|
+
interface SlackApiResponse {
|
|
4
|
+
error?: string;
|
|
5
|
+
needed?: string;
|
|
6
|
+
ok: boolean;
|
|
7
|
+
provided?: string;
|
|
8
|
+
response_metadata?: {
|
|
9
|
+
messages?: string[];
|
|
10
|
+
next_cursor?: string;
|
|
11
|
+
warnings?: string[];
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
interface SlackApiOptions {
|
|
17
|
+
apiUrl?: string;
|
|
18
|
+
fetch?: SlackFetch;
|
|
19
|
+
token: SlackBotToken;
|
|
20
|
+
}
|
|
21
|
+
interface SlackApiCallOptions extends SlackApiOptions {
|
|
22
|
+
contentType?: "form" | "json";
|
|
23
|
+
}
|
|
24
|
+
interface SlackMessageOptions extends SlackApiOptions {
|
|
25
|
+
blocks?: unknown[];
|
|
26
|
+
channel: string;
|
|
27
|
+
markdownText?: string;
|
|
28
|
+
metadata?: unknown;
|
|
29
|
+
replyBroadcast?: boolean;
|
|
30
|
+
text?: string;
|
|
31
|
+
threadTs?: string;
|
|
32
|
+
unfurlLinks?: boolean;
|
|
33
|
+
unfurlMedia?: boolean;
|
|
34
|
+
}
|
|
35
|
+
interface SlackEphemeralOptions extends SlackMessageOptions {
|
|
36
|
+
user: string;
|
|
37
|
+
}
|
|
38
|
+
interface SlackUpdateOptions extends SlackMessageOptions {
|
|
39
|
+
ts: string;
|
|
40
|
+
}
|
|
41
|
+
interface SlackDeleteOptions extends SlackApiOptions {
|
|
42
|
+
channel: string;
|
|
43
|
+
ts: string;
|
|
44
|
+
}
|
|
45
|
+
interface SlackPostedMessage {
|
|
46
|
+
channel?: string;
|
|
47
|
+
id: string;
|
|
48
|
+
raw: SlackApiResponse;
|
|
49
|
+
}
|
|
50
|
+
interface SlackResponseUrlPayload {
|
|
51
|
+
blocks?: unknown[];
|
|
52
|
+
deleteOriginal?: boolean;
|
|
53
|
+
replaceOriginal?: boolean;
|
|
54
|
+
responseType?: "ephemeral" | "in_channel";
|
|
55
|
+
text?: string;
|
|
56
|
+
threadTs?: string;
|
|
57
|
+
}
|
|
58
|
+
interface SlackResponseUrlOptions {
|
|
59
|
+
fetch?: SlackFetch;
|
|
60
|
+
}
|
|
61
|
+
interface SlackFileUpload {
|
|
62
|
+
altText?: string;
|
|
63
|
+
data: ArrayBuffer | Blob | Uint8Array;
|
|
64
|
+
filename: string;
|
|
65
|
+
snippetType?: string;
|
|
66
|
+
title?: string;
|
|
67
|
+
}
|
|
68
|
+
interface SlackUploadOptions extends SlackApiOptions {
|
|
69
|
+
channelId?: string;
|
|
70
|
+
initialComment?: string;
|
|
71
|
+
threadTs?: string;
|
|
72
|
+
}
|
|
73
|
+
interface SlackUploadResult {
|
|
74
|
+
fileIds: string[];
|
|
75
|
+
raw: SlackApiResponse;
|
|
76
|
+
}
|
|
77
|
+
interface SlackFileFetchOptions extends SlackApiOptions {
|
|
78
|
+
url: string;
|
|
79
|
+
}
|
|
80
|
+
declare class SlackApiError extends Error {
|
|
81
|
+
method: string;
|
|
82
|
+
response?: SlackApiResponse;
|
|
83
|
+
status?: number;
|
|
84
|
+
constructor(message: string, options: {
|
|
85
|
+
method: string;
|
|
86
|
+
response?: SlackApiResponse;
|
|
87
|
+
status?: number;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
declare function resolveSlackBotToken(token: SlackBotToken): Promise<string>;
|
|
91
|
+
declare function callSlackApi<TResponse extends SlackApiResponse = SlackApiResponse>(method: string, body: Record<string, unknown>, options: SlackApiCallOptions): Promise<TResponse>;
|
|
92
|
+
declare function postSlackMessage(options: SlackMessageOptions): Promise<SlackPostedMessage>;
|
|
93
|
+
declare function postSlackEphemeral(options: SlackEphemeralOptions): Promise<SlackPostedMessage>;
|
|
94
|
+
declare function updateSlackMessage(options: SlackUpdateOptions): Promise<SlackPostedMessage>;
|
|
95
|
+
declare function deleteSlackMessage(options: SlackDeleteOptions): Promise<SlackApiResponse>;
|
|
96
|
+
declare function sendSlackResponseUrl(url: string, payload: SlackResponseUrlPayload, options?: SlackResponseUrlOptions): Promise<void>;
|
|
97
|
+
declare function uploadSlackFiles(files: readonly SlackFileUpload[], options: SlackUploadOptions): Promise<SlackUploadResult>;
|
|
98
|
+
declare function fetchSlackFile(options: SlackFileFetchOptions): Promise<Response>;
|
|
99
|
+
declare function encodeSlackApiBody(body: Record<string, unknown>, contentType?: "form" | "json"): {
|
|
100
|
+
body: string;
|
|
101
|
+
contentType: string;
|
|
102
|
+
};
|
|
103
|
+
declare function assertSlackOk(method: string, response: SlackApiResponse): void;
|
|
104
|
+
|
|
105
|
+
interface SlackThreadRepliesOptions extends SlackApiOptions {
|
|
106
|
+
channel: string;
|
|
107
|
+
cursor?: string;
|
|
108
|
+
includeAllMetadata?: boolean;
|
|
109
|
+
inclusive?: boolean;
|
|
110
|
+
latest?: string;
|
|
111
|
+
limit?: number;
|
|
112
|
+
oldest?: string;
|
|
113
|
+
ts: string;
|
|
114
|
+
}
|
|
115
|
+
interface SlackThreadRepliesResult {
|
|
116
|
+
messages: unknown[];
|
|
117
|
+
nextCursor?: string;
|
|
118
|
+
raw: SlackApiResponse;
|
|
119
|
+
}
|
|
120
|
+
interface SlackOpenViewOptions extends SlackApiOptions {
|
|
121
|
+
interactivityPointer?: string;
|
|
122
|
+
triggerId?: string;
|
|
123
|
+
view: unknown;
|
|
124
|
+
}
|
|
125
|
+
interface SlackOpenViewResult {
|
|
126
|
+
raw: SlackApiResponse;
|
|
127
|
+
view?: unknown;
|
|
128
|
+
}
|
|
129
|
+
declare function fetchSlackThreadReplies(options: SlackThreadRepliesOptions): Promise<SlackThreadRepliesResult>;
|
|
130
|
+
declare function openSlackView(options: SlackOpenViewOptions): Promise<SlackOpenViewResult>;
|
|
131
|
+
|
|
132
|
+
export { type SlackApiCallOptions, SlackApiError, type SlackApiOptions, type SlackApiResponse, type SlackBotToken, type SlackDeleteOptions, type SlackEphemeralOptions, type SlackFetch, type SlackFileFetchOptions, type SlackFileUpload, type SlackMessageOptions, type SlackOpenViewOptions, type SlackOpenViewResult, type SlackPostedMessage, type SlackResponseUrlOptions, type SlackResponseUrlPayload, type SlackThreadRepliesOptions, type SlackThreadRepliesResult, type SlackUpdateOptions, type SlackUploadOptions, type SlackUploadResult, assertSlackOk, callSlackApi, deleteSlackMessage, encodeSlackApiBody, fetchSlackFile, fetchSlackThreadReplies, openSlackView, postSlackEphemeral, postSlackMessage, resolveSlackBotToken, sendSlackResponseUrl, updateSlackMessage, uploadSlackFiles };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class extends Error{method;response;status;constructor(e,t){super(e),this.name=`SlackApiError`,this.method=t.method,this.response=t.response,this.status=t.status}},t=`https://slack.com/api/`;async function n(e){return typeof e==`function`?await e():e}async function r(r,i,a){let o=await n(a.token),s=d(i,a.contentType??`form`),c=await(a.fetch??fetch)(new URL(r,a.apiUrl??t),{body:s.body,headers:{authorization:`Bearer ${o}`,"content-type":s.contentType},method:`POST`}),l=await c.json();if(!c.ok)throw new e(`Slack ${r} returned HTTP ${c.status}`,{method:r,response:l,status:c.status});return l}async function i(e){let t=await r(`chat.postMessage`,p(e),e);return f(`chat.postMessage`,t),{channel:b(t.channel),id:y(t.ts),raw:t}}async function a(e){let t=await r(`chat.postEphemeral`,{...p(e),user:e.user},e);return f(`chat.postEphemeral`,t),{channel:b(t.channel),id:y(t.message_ts),raw:t}}async function o(e){let t=await r(`chat.update`,{...p(e),ts:e.ts},e);return f(`chat.update`,t),{channel:b(t.channel),id:y(t.ts),raw:t}}async function s(e){let t=await r(`chat.delete`,{channel:e.channel,ts:e.ts},e);return f(`chat.delete`,t),t}async function c(t,n,r={}){let i=await(r.fetch??fetch)(t,{body:JSON.stringify(m(n)),headers:{"content-type":`application/json`},method:`POST`});if(!i.ok)throw new e(`Slack response_url returned HTTP ${i.status}`,{method:`response_url`,status:i.status})}async function l(t,i){if(t.length===0)return{fileIds:[],raw:{ok:!0}};let a=await n(i.token),o=i.fetch??fetch,s=[];for(let n of t){let t=await v(n.data),c=await r(`files.getUploadURLExternal`,{alt_txt:n.altText,filename:n.filename,length:t.byteLength,snippet_type:n.snippetType},i);f(`files.getUploadURLExternal`,c);let l=y(c.upload_url),u=y(c.file_id);if(!(l&&u))throw new e(`Slack files.getUploadURLExternal returned no upload URL`,{method:`files.getUploadURLExternal`,response:c});let d=await o(l,{body:t,headers:{authorization:`Bearer ${a}`,"content-type":`application/octet-stream`},method:`POST`});if(!d.ok)throw new e(`Slack file upload returned HTTP ${d.status}`,{method:`files.upload`,status:d.status});s.push(u)}let c=await r(`files.completeUploadExternal`,{channel_id:i.channelId,files:t.map((e,t)=>({id:s[t],title:e.title??e.filename})),initial_comment:i.initialComment,thread_ts:i.threadTs},i);return f(`files.completeUploadExternal`,c),{fileIds:s,raw:c}}async function u(t){let r=await n(t.token),i=await(t.fetch??fetch)(t.url,{headers:{authorization:`Bearer ${r}`}});if(!i.ok)throw new e(`Slack file fetch returned HTTP ${i.status}`,{method:`files.fetch`,status:i.status});return i}function d(e,t=`form`){if(t===`json`)return{body:JSON.stringify(_(e)),contentType:`application/json`};let n=new URLSearchParams;for(let[t,r]of Object.entries(e))r!=null&&n.set(t,g(r));return{body:n.toString(),contentType:`application/x-www-form-urlencoded`}}function f(t,n){if(n.ok!==!0)throw new e(`Slack ${t} failed: ${n.error??`unknown_error`}`,{method:t,response:n})}function p(e){return h(e),{blocks:e.blocks,channel:e.channel,markdown_text:e.markdownText,metadata:e.metadata,reply_broadcast:e.replyBroadcast,text:e.text,thread_ts:e.threadTs,unfurl_links:e.unfurlLinks,unfurl_media:e.unfurlMedia}}function m(e){return{blocks:e.blocks,delete_original:e.deleteOriginal,replace_original:e.replaceOriginal,response_type:e.responseType,text:e.text,thread_ts:e.threadTs}}function h(e){if(e.markdownText!==void 0&&(e.text!==void 0||e.blocks!==void 0))throw TypeError(`markdownText cannot be used with text or blocks`)}function g(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function _(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}async function v(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(await e.arrayBuffer())}function y(e){return typeof e==`string`?e:``}function b(e){return typeof e==`string`?e:void 0}async function x(e){let t=await r(`conversations.replies`,{channel:e.channel,cursor:e.cursor,include_all_metadata:e.includeAllMetadata,inclusive:e.inclusive,latest:e.latest,limit:e.limit,oldest:e.oldest,ts:e.ts},e);return f(`conversations.replies`,t),{messages:Array.isArray(t.messages)?t.messages:[],nextCursor:C(t),raw:t}}async function S(e){if(!(e.triggerId||e.interactivityPointer))throw TypeError(`triggerId or interactivityPointer is required`);let t=await r(`views.open`,{interactivity_pointer:e.interactivityPointer,trigger_id:e.triggerId,view:e.view},e);return f(`views.open`,t),{raw:t,view:t.view}}function C(e){let t=e.response_metadata?.next_cursor;return typeof t==`string`&&t.length>0?t:void 0}export{e as SlackApiError,f as assertSlackOk,r as callSlackApi,s as deleteSlackMessage,d as encodeSlackApiBody,u as fetchSlackFile,x as fetchSlackThreadReplies,S as openSlackView,a as postSlackEphemeral,i as postSlackMessage,n as resolveSlackBotToken,c as sendSlackResponseUrl,o as updateSlackMessage,l as uploadSlackFiles};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
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
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
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
4
|
${X(e)}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
interface SlackPlainTextObject {
|
|
2
|
+
emoji?: boolean;
|
|
3
|
+
text: string;
|
|
4
|
+
type: "plain_text";
|
|
5
|
+
}
|
|
6
|
+
interface SlackMrkdwnTextObject {
|
|
7
|
+
text: string;
|
|
8
|
+
type: "mrkdwn";
|
|
9
|
+
verbatim?: boolean;
|
|
10
|
+
}
|
|
11
|
+
type SlackTextObject = SlackMrkdwnTextObject | SlackPlainTextObject;
|
|
12
|
+
interface SlackTextOptions {
|
|
13
|
+
emoji?: boolean;
|
|
14
|
+
verbatim?: boolean;
|
|
15
|
+
}
|
|
16
|
+
interface SlackDateOptions {
|
|
17
|
+
link?: string;
|
|
18
|
+
}
|
|
19
|
+
declare function escapeSlackText(text: string): string;
|
|
20
|
+
declare function unescapeSlackText(text: string): string;
|
|
21
|
+
declare function createSlackPlainText(text: string, options?: SlackTextOptions): SlackPlainTextObject;
|
|
22
|
+
declare function createSlackMrkdwn(text: string, options?: SlackTextOptions): SlackMrkdwnTextObject;
|
|
23
|
+
declare function formatSlackUser(userId: string): string;
|
|
24
|
+
declare function formatSlackChannel(channelId: string): string;
|
|
25
|
+
declare function formatSlackUserGroup(userGroupId: string): string;
|
|
26
|
+
declare function formatSlackSpecialMention(mention: "channel" | "everyone" | "here"): string;
|
|
27
|
+
declare function formatSlackLink(url: string, label?: string): string;
|
|
28
|
+
declare function formatSlackDate(timestamp: Date | number, token: string, fallback: string, options?: SlackDateOptions): string;
|
|
29
|
+
declare function slackMrkdwnToMarkdown(mrkdwn: string): string;
|
|
30
|
+
declare function markdownBoldToSlackMrkdwn(markdown: string): string;
|
|
31
|
+
declare function linkBareSlackMentions(text: string): string;
|
|
32
|
+
|
|
33
|
+
export { type SlackDateOptions, type SlackMrkdwnTextObject, type SlackPlainTextObject, type SlackTextObject, type SlackTextOptions, createSlackMrkdwn, createSlackPlainText, escapeSlackText, formatSlackChannel, formatSlackDate, formatSlackLink, formatSlackSpecialMention, formatSlackUser, formatSlackUserGroup, linkBareSlackMentions, markdownBoldToSlackMrkdwn, slackMrkdwnToMarkdown, unescapeSlackText };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,c as t,d as n,f as r,i,l as a,n as o,o as s,p as c,r as l,s as u,t as d,u as f}from"../../_chunks/node/chunk-AYN7QRWH-B__hKQV7.js";export{d as createSlackMrkdwn,o as createSlackPlainText,l as escapeSlackText,i as formatSlackChannel,e as formatSlackDate,s as formatSlackLink,u as formatSlackSpecialMention,t as formatSlackUser,a as formatSlackUserGroup,f as linkBareSlackMentions,n as markdownBoldToSlackMrkdwn,r as slackMrkdwnToMarkdown,c as unescapeSlackText};
|