@vellumai/vellum-gateway 0.4.53 → 0.4.54
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
|
-
→
|
|
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
|
-
→
|
|
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
|
|
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
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|