@vellumai/vellum-gateway 0.4.53 → 0.4.55

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/ARCHITECTURE.md CHANGED
@@ -583,11 +583,11 @@ Entry points:
583
583
 
584
584
  Both paths converge at:
585
585
  → Daemon handler validates token via Telegram getMe API
586
- setSecureKey("credential/telegram/bot_token", token)
586
+ setSecureKeyAsync("credential/telegram/bot_token", token)
587
587
  → upsertCredentialMetadata("telegram", "bot_token", {})
588
588
  → Stores bot username in config at telegram.botUsername
589
589
  → Auto-generates webhook secret if missing
590
- setSecureKey("credential/telegram/webhook_secret", secret)
590
+ setSecureKeyAsync("credential/telegram/webhook_secret", secret)
591
591
  → upsertCredentialMetadata("telegram", "webhook_secret", {})
592
592
  → On storage failure: rolls back bot_token + metadata, returns error
593
593
  → If webhook secret already exists: upserts metadata anyway (self-heal)
@@ -641,7 +641,7 @@ The Slack channel enables inbound and outbound messaging via Slack's Socket Mode
641
641
  3. Events are deduplicated by `event_id` using an in-memory `Map<string, number>` with a 24-hour TTL. A periodic cleanup sweep runs every hour to evict expired entries.
642
642
  4. The `normalizeSlackAppMention()` function strips leading bot-mention tokens (`<@U...>`) from the message text and produces a `GatewayInboundEvent` with `sourceChannel: "slack"`, using the Slack channel ID as `conversationExternalId` and the sender's user ID as `actorExternalId`.
643
643
  5. Routing uses the standard `resolveAssistant()` chain (conversation_id -> actor_id -> default/reject). Events that cannot be routed are dropped.
644
- 6. The normalized event is forwarded to the runtime via `POST /v1/channels/inbound` with Slack-specific transport hints and a `replyCallbackUrl` pointing to `/deliver/slack`.
644
+ 6. The normalized event is forwarded to the runtime via `POST /v1/channels/inbound` with a `replyCallbackUrl` pointing to `/deliver/slack`.
645
645
 
646
646
  **Egress** (`POST /deliver/slack`):
647
647
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/vellum-gateway",
3
- "version": "0.4.53",
3
+ "version": "0.4.55",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./twilio/verify": "./src/twilio/verify.ts",
@@ -16,16 +16,6 @@ export function buildTelegramTransportMetadata(): {
16
16
  };
17
17
  }
18
18
 
19
- export const SLACK_CHANNEL_TRANSPORT_HINTS = [
20
- "chat-first-medium",
21
- "threaded-channel",
22
- "mention-triggered",
23
- "defer-dashboard-only-tasks",
24
- ] as const;
25
-
26
- export const SLACK_CHANNEL_TRANSPORT_UX_BRIEF =
27
- "Slack is a threaded channel medium. Replies should stay in-thread when a thread_ts is present. Use plain text or Slack mrkdwn formatting; avoid markdown tables and complex block layouts.";
28
-
29
19
  export const WHATSAPP_CHANNEL_TRANSPORT_HINTS = [
30
20
  "chat-first-medium",
31
21
  "channel-safe-onboarding",
@@ -25,20 +25,12 @@
25
25
  "description": "Enable browser skill prerequisites section in the system prompt",
26
26
  "defaultEnabled": true
27
27
  },
28
- {
29
- "id": "messaging",
30
- "scope": "assistant",
31
- "key": "feature_flags.messaging.enabled",
32
- "label": "Messaging",
33
- "description": "Enable messaging skill section in the system prompt",
34
- "defaultEnabled": true
35
- },
36
28
  {
37
29
  "id": "collect-usage-data",
38
30
  "scope": "assistant",
39
31
  "key": "feature_flags.collect-usage-data.enabled",
40
32
  "label": "Collect usage data",
41
- "description": "Send crash reports and error diagnostics to help improve the app",
33
+ "description": "Send crash reports, error diagnostics, and anonymized usage telemetry to help improve the app",
42
34
  "defaultEnabled": true
43
35
  },
44
36
  {
@@ -49,14 +41,6 @@
49
41
  "description": "Enable user-hosted onboarding flow",
50
42
  "defaultEnabled": false
51
43
  },
52
- {
53
- "id": "command-palette",
54
- "scope": "assistant",
55
- "key": "feature_flags.command-palette.enabled",
56
- "label": "Command Palette",
57
- "description": "Enable the CMD+K command palette for unified search across conversations, memories, schedules, and contacts",
58
- "defaultEnabled": false
59
- },
60
44
  {
61
45
  "id": "contacts",
62
46
  "scope": "assistant",
@@ -73,14 +57,6 @@
73
57
  "description": "Show the Email channel card on the Contacts page and enable the email-setup skill",
74
58
  "defaultEnabled": false
75
59
  },
76
- {
77
- "id": "outbound-proxy-sidecar",
78
- "scope": "assistant",
79
- "key": "feature_flags.outbound-proxy-sidecar.enabled",
80
- "label": "Outbound Proxy Sidecar",
81
- "description": "Route proxy session management through the sidecar process instead of running in-process",
82
- "defaultEnabled": false
83
- },
84
60
  {
85
61
  "id": "app-builder-multifile",
86
62
  "scope": "assistant",
@@ -105,22 +81,6 @@
105
81
  "description": "Show the Mobile (iOS) pairing card in Settings > Account",
106
82
  "defaultEnabled": false
107
83
  },
108
- {
109
- "id": "gmail",
110
- "scope": "assistant",
111
- "key": "feature_flags.gmail.enabled",
112
- "label": "Gmail",
113
- "description": "Enable Gmail management skill (archive, label, declutter)",
114
- "defaultEnabled": true
115
- },
116
- {
117
- "id": "sequences",
118
- "scope": "assistant",
119
- "key": "feature_flags.sequences.enabled",
120
- "label": "Email Sequences",
121
- "description": "Enable email sequence management skill",
122
- "defaultEnabled": true
123
- },
124
84
  {
125
85
  "id": "settings-developer-nav",
126
86
  "scope": "assistant",
@@ -129,6 +89,14 @@
129
89
  "description": "Control Developer nav visibility in macOS settings",
130
90
  "defaultEnabled": true
131
91
  },
92
+ {
93
+ "id": "developer-menu-items",
94
+ "scope": "macos",
95
+ "key": "developer_menu_items_enabled",
96
+ "label": "Developer Menu Items",
97
+ "description": "Show Component Gallery and Replay Onboarding in the menu bar",
98
+ "defaultEnabled": false
99
+ },
132
100
  {
133
101
  "id": "logfire",
134
102
  "scope": "assistant",
@@ -10,7 +10,7 @@ const log = getLogger("browser-relay-ws");
10
10
  // Cap buffered messages to prevent unbounded memory growth if upstream stalls
11
11
  const MAX_PENDING_MESSAGES = 100;
12
12
 
13
- export function isPrivateAddress(addr: string): boolean {
13
+ function isPrivateAddress(addr: string): boolean {
14
14
  const v4Mapped = addr.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i);
15
15
  const normalized = v4Mapped ? v4Mapped[1] : addr;
16
16
 
@@ -39,7 +39,7 @@ export function isPrivateAddress(addr: string): boolean {
39
39
  return false;
40
40
  }
41
41
 
42
- export function isPrivateNetworkPeer(
42
+ function isPrivateNetworkPeer(
43
43
  server: import("bun").Server<unknown>,
44
44
  req: Request,
45
45
  ): boolean {
@@ -53,7 +53,7 @@ export function isPrivateNetworkPeer(
53
53
  * Use this instead of isPrivateNetworkPeer for endpoints that must be
54
54
  * restricted to the local machine (e.g. token minting).
55
55
  */
56
- export function isLoopbackAddress(addr: string): boolean {
56
+ function isLoopbackAddress(addr: string): boolean {
57
57
  const v4Mapped = addr.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i);
58
58
  const normalized = v4Mapped ? v4Mapped[1] : addr;
59
59