@vellumai/assistant 0.4.29 → 0.4.30
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 +39 -37
- package/README.md +5 -6
- package/docs/runbook-trusted-contacts.md +79 -43
- package/package.json +1 -1
- package/scripts/ipc/check-swift-decoder-drift.ts +2 -3
- package/scripts/test.sh +1 -1
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +4 -37
- package/src/__tests__/actor-token-service.test.ts +4 -3
- package/src/__tests__/app-executors.test.ts +7 -17
- package/src/__tests__/assistant-feature-flags-integration.test.ts +18 -10
- package/src/__tests__/browser-skill-endstate.test.ts +10 -1
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +1 -0
- package/src/__tests__/channel-approval-routes.test.ts +44 -44
- package/src/__tests__/channel-approval.test.ts +8 -0
- package/src/__tests__/channel-approvals.test.ts +39 -1
- package/src/__tests__/channel-guardian.test.ts +15 -5
- package/src/__tests__/channel-reply-delivery.test.ts +31 -0
- package/src/__tests__/commit-message-enrichment-service.test.ts +4 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +9 -0
- package/src/__tests__/gateway-only-guard.test.ts +1 -0
- package/src/__tests__/gemini-image-service.test.ts +2 -2
- package/src/__tests__/guardian-grant-minting.test.ts +6 -6
- package/src/__tests__/guardian-routing-invariants.test.ts +34 -11
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +4 -6
- package/src/__tests__/inbound-invite-redemption.test.ts +1 -1
- package/src/__tests__/integrations-cli.test.ts +3 -27
- package/src/__tests__/intent-routing.test.ts +3 -0
- package/src/__tests__/invite-redemption-service.test.ts +1 -1
- package/src/__tests__/{ingress-routes-http.test.ts → invite-routes-http.test.ts} +40 -320
- package/src/__tests__/ipc-snapshot.test.ts +4 -31
- package/src/__tests__/nl-approval-parser.test.ts +305 -0
- package/src/__tests__/oauth-provider-profiles.test.ts +34 -0
- package/src/__tests__/provider-error-scenarios.test.ts +68 -0
- package/src/__tests__/relay-server.test.ts +1 -1
- package/src/__tests__/retry-after-extraction.test.ts +111 -0
- package/src/__tests__/script-proxy-profile-template-fallback.test.ts +127 -0
- package/src/__tests__/session-media-retry.test.ts +147 -0
- package/src/__tests__/skill-feature-flags-integration.test.ts +9 -5
- package/src/__tests__/skill-feature-flags.test.ts +18 -12
- package/src/__tests__/skill-load-feature-flag.test.ts +4 -3
- package/src/__tests__/slack-block-formatting.test.ts +100 -0
- package/src/__tests__/slack-inbound-verification.test.ts +346 -0
- package/src/__tests__/slack-reaction-approvals.test.ts +77 -0
- package/src/__tests__/slack-skill.test.ts +3 -2
- package/src/__tests__/starter-task-flow.test.ts +0 -1
- package/src/__tests__/trusted-contact-verification.test.ts +3 -1
- package/src/__tests__/voice-invite-redemption.test.ts +1 -1
- package/src/amazon/client.ts +7 -24
- package/src/calls/relay-server.ts +39 -11
- package/src/channels/config.ts +1 -1
- package/src/cli/integrations.ts +10 -66
- package/src/config/bundled-skills/app-builder/SKILL.md +193 -1500
- package/src/config/bundled-skills/app-builder/TOOLS.json +70 -18
- package/src/config/bundled-skills/browser/TOOLS.json +59 -2
- package/src/config/bundled-skills/chatgpt-import/TOOLS.json +4 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +50 -2
- package/src/config/bundled-skills/contacts/SKILL.md +42 -35
- package/src/config/bundled-skills/contacts/TOOLS.json +22 -2
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +38 -58
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +11 -31
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +19 -37
- package/src/config/bundled-skills/document/TOOLS.json +8 -0
- package/src/config/bundled-skills/email-setup/SKILL.md +10 -7
- package/src/config/bundled-skills/followups/TOOLS.json +12 -0
- package/src/config/bundled-skills/google-calendar/TOOLS.json +124 -26
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +54 -21
- package/src/config/bundled-skills/image-studio/TOOLS.json +12 -2
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +14 -8
- package/src/config/bundled-skills/knowledge-graph/TOOLS.json +13 -3
- package/src/config/bundled-skills/media-processing/SKILL.md +1 -1
- package/src/config/bundled-skills/media-processing/TOOLS.json +28 -0
- package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +26 -6
- package/src/config/bundled-skills/messaging/TOOLS.json +228 -182
- package/src/config/bundled-skills/notifications/SKILL.md +3 -2
- package/src/config/bundled-skills/notifications/TOOLS.json +7 -13
- package/src/config/bundled-skills/phone-calls/TOOLS.json +13 -1
- package/src/config/bundled-skills/playbooks/TOOLS.json +16 -0
- package/src/config/bundled-skills/reminder/TOOLS.json +15 -2
- package/src/config/bundled-skills/schedule/SKILL.md +33 -15
- package/src/config/bundled-skills/schedule/TOOLS.json +17 -1
- package/src/config/bundled-skills/slack/SKILL.md +30 -1
- package/src/config/bundled-skills/slack/TOOLS.json +89 -2
- package/src/config/bundled-skills/slack/tools/slack-channel-permissions.ts +146 -0
- package/src/config/bundled-skills/slack/tools/slack-scan-digest.ts +120 -0
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +200 -0
- package/src/config/bundled-skills/subagent/TOOLS.json +22 -2
- package/src/config/bundled-skills/tasks/TOOLS.json +86 -14
- package/src/config/bundled-skills/transcribe/TOOLS.json +4 -0
- package/src/config/bundled-skills/watcher/TOOLS.json +20 -0
- package/src/config/bundled-skills/weather/TOOLS.json +4 -0
- package/src/config/bundled-tool-registry.ts +2 -0
- package/src/config/channel-permission-profiles.ts +155 -0
- package/src/config/env.ts +4 -1
- package/src/contacts/contact-store.ts +195 -4
- package/src/contacts/types.ts +26 -0
- package/src/daemon/assistant-attachments.ts +23 -3
- package/src/daemon/guardian-verification-intent.ts +7 -4
- package/src/daemon/handlers/apps.ts +1 -2
- package/src/daemon/handlers/config-inbox.ts +16 -134
- package/src/daemon/handlers/guardian-actions.ts +20 -87
- package/src/daemon/handlers/sessions.ts +0 -1
- package/src/daemon/ipc-contract/apps.ts +0 -1
- package/src/daemon/ipc-contract/inbox.ts +7 -66
- package/src/daemon/ipc-contract/sessions.ts +1 -0
- package/src/daemon/ipc-contract/surfaces.ts +0 -1
- package/src/daemon/ipc-contract-inventory.json +2 -4
- package/src/daemon/lifecycle.ts +14 -2
- package/src/daemon/session-agent-loop-handlers.ts +9 -0
- package/src/daemon/session-agent-loop.ts +1 -0
- package/src/daemon/session-attachments.ts +5 -1
- package/src/daemon/session-error.ts +18 -0
- package/src/daemon/session-lifecycle.ts +4 -5
- package/src/daemon/session-media-retry.ts +15 -1
- package/src/daemon/session-surfaces.ts +0 -1
- package/src/daemon/session-tool-setup.ts +7 -4
- package/src/events/domain-events.ts +2 -1
- package/src/home-base/prebuilt/seed.ts +0 -1
- package/src/influencer/client.ts +7 -24
- package/src/media/gemini-image-service.ts +48 -3
- package/src/memory/app-store.ts +0 -4
- package/src/memory/conversation-attention-store.ts +3 -1
- package/src/memory/db-init.ts +4 -0
- package/src/memory/migrations/133-assistant-contact-metadata.ts +21 -0
- package/src/memory/migrations/index.ts +1 -0
- package/src/memory/schema.ts +12 -0
- package/src/memory/slack-thread-store.ts +187 -0
- package/src/messaging/providers/slack/client.ts +84 -26
- package/src/messaging/providers/slack/types.ts +4 -0
- package/src/notifications/adapters/slack.ts +90 -0
- package/src/notifications/destination-resolver.ts +42 -1
- package/src/notifications/emit-signal.ts +17 -1
- package/src/oauth/provider-profiles.ts +22 -0
- package/src/providers/anthropic/client.ts +3 -0
- package/src/providers/openai/client.ts +3 -0
- package/src/providers/retry.ts +9 -1
- package/src/runtime/actor-trust-resolver.ts +8 -0
- package/src/runtime/auth/require-bound-guardian.ts +44 -0
- package/src/runtime/auth/route-policy.ts +4 -8
- package/src/runtime/channel-approval-types.ts +18 -0
- package/src/runtime/channel-approvals.ts +8 -0
- package/src/runtime/channel-invite-transport.ts +1 -1
- package/src/runtime/channel-reply-delivery.ts +62 -3
- package/src/runtime/gateway-client.ts +36 -2
- package/src/runtime/gateway-internal-client.ts +86 -0
- package/src/runtime/guardian-action-service.ts +127 -0
- package/src/runtime/guardian-verification-templates.ts +16 -1
- package/src/runtime/http-server.ts +20 -49
- package/src/runtime/invite-redemption-service.ts +1 -1
- package/src/runtime/{ingress-service.ts → invite-service.ts} +5 -157
- package/src/runtime/nl-approval-parser.ts +138 -0
- package/src/runtime/routes/approval-routes.ts +1 -40
- package/src/runtime/routes/channel-route-shared.ts +35 -1
- package/src/runtime/routes/contact-routes.ts +196 -28
- package/src/runtime/routes/guardian-action-routes.ts +19 -111
- package/src/runtime/routes/guardian-approval-interception.ts +76 -0
- package/src/runtime/routes/inbound-message-handler.ts +40 -12
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +222 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +108 -0
- package/src/runtime/routes/{ingress-routes.ts → invite-routes.ts} +10 -110
- package/src/runtime/slack-block-formatting.ts +176 -0
- package/src/schedule/scheduler.ts +11 -2
- package/src/tools/apps/executors.ts +16 -15
- package/src/tools/calls/call-end.ts +1 -1
- package/src/tools/computer-use/definitions.ts +16 -0
- package/src/tools/credentials/vault.ts +86 -2
- package/src/tools/network/script-proxy/session-manager.ts +28 -3
- package/src/tools/permission-checker.ts +18 -0
- package/src/tools/terminal/shell.ts +15 -5
- package/src/tools/tool-approval-handler.ts +48 -4
- package/src/tools/types.ts +38 -1
- package/src/util/errors.ts +5 -1
- package/src/util/retry.ts +21 -0
- package/src/watcher/providers/slack.ts +33 -3
- /package/src/memory/{ingress-invite-store.ts → invite-store.ts} +0 -0
package/src/cli/integrations.ts
CHANGED
|
@@ -58,14 +58,6 @@ function toQueryString(params: Record<string, string | undefined>): string {
|
|
|
58
58
|
return encoded ? `?${encoded}` : "";
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
function resolveGatewayBaseUrl(): string {
|
|
62
|
-
const injectedGatewayBase = process.env.INTERNAL_GATEWAY_BASE_URL?.trim();
|
|
63
|
-
if (injectedGatewayBase && injectedGatewayBase.length > 0) {
|
|
64
|
-
return injectedGatewayBase.replace(/\/+$/, "");
|
|
65
|
-
}
|
|
66
|
-
return getGatewayInternalBaseUrl();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
61
|
function readIngressConfig(): {
|
|
70
62
|
success: true;
|
|
71
63
|
enabled: boolean;
|
|
@@ -86,7 +78,7 @@ function readIngressConfig(): {
|
|
|
86
78
|
success: true,
|
|
87
79
|
enabled,
|
|
88
80
|
publicBaseUrl: configuredUrl || undefined,
|
|
89
|
-
localGatewayTarget:
|
|
81
|
+
localGatewayTarget: getGatewayInternalBaseUrl(),
|
|
90
82
|
};
|
|
91
83
|
}
|
|
92
84
|
|
|
@@ -112,8 +104,11 @@ function readVoiceConfig(): {
|
|
|
112
104
|
};
|
|
113
105
|
}
|
|
114
106
|
|
|
107
|
+
// CLI-specific gateway helper — uses GATEWAY_AUTH_TOKEN env var for out-of-process
|
|
108
|
+
// access. See runtime/gateway-internal-client.ts for daemon-internal usage which
|
|
109
|
+
// mints fresh tokens.
|
|
115
110
|
async function gatewayGet(path: string): Promise<unknown> {
|
|
116
|
-
const gatewayBase =
|
|
111
|
+
const gatewayBase = getGatewayInternalBaseUrl();
|
|
117
112
|
const token = getGatewayToken();
|
|
118
113
|
|
|
119
114
|
const response = await fetch(`${gatewayBase}${path}`, {
|
|
@@ -169,7 +164,7 @@ export function registerContactsCommand(program: Command): void {
|
|
|
169
164
|
contacts
|
|
170
165
|
.command("list")
|
|
171
166
|
.description("List contacts (calls /v1/contacts)")
|
|
172
|
-
.option("--role <role>", "Filter by role")
|
|
167
|
+
.option("--role <role>", "Filter by role (default: contact)", "contact")
|
|
173
168
|
.option("--limit <limit>", "Maximum number of contacts to return")
|
|
174
169
|
.option("--query <query>", "Search query to filter contacts")
|
|
175
170
|
.action(
|
|
@@ -192,7 +187,7 @@ export function registerContactsCommand(program: Command): void {
|
|
|
192
187
|
|
|
193
188
|
contacts
|
|
194
189
|
.command("invites")
|
|
195
|
-
.description("List
|
|
190
|
+
.description("List contact invites")
|
|
196
191
|
.option("--source-channel <sourceChannel>", "Filter by source channel")
|
|
197
192
|
.option("--status <status>", "Filter by invite status")
|
|
198
193
|
.action(
|
|
@@ -205,7 +200,7 @@ export function registerContactsCommand(program: Command): void {
|
|
|
205
200
|
status: opts.status,
|
|
206
201
|
});
|
|
207
202
|
await runRead(cmd, async () =>
|
|
208
|
-
gatewayGet(`/v1/
|
|
203
|
+
gatewayGet(`/v1/contacts/invites${query}`),
|
|
209
204
|
);
|
|
210
205
|
},
|
|
211
206
|
);
|
|
@@ -237,9 +232,9 @@ export function registerIntegrationsCommand(program: Command): void {
|
|
|
237
232
|
guardian
|
|
238
233
|
.command("status")
|
|
239
234
|
.description("Get guardian status for a channel")
|
|
240
|
-
.option("--channel <channel>", "Channel: telegram|voice|sms", "
|
|
235
|
+
.option("--channel <channel>", "Channel: telegram|voice|sms", "telegram")
|
|
241
236
|
.action(async (opts: { channel?: GuardianChannel }, cmd: Command) => {
|
|
242
|
-
const channel = opts.channel ?? "
|
|
237
|
+
const channel = opts.channel ?? "telegram";
|
|
243
238
|
await runRead(cmd, async () =>
|
|
244
239
|
gatewayGet(
|
|
245
240
|
`/v1/integrations/guardian/status${toQueryString({ channel })}`,
|
|
@@ -300,57 +295,6 @@ export function registerIntegrationsCommand(program: Command): void {
|
|
|
300
295
|
await runRead(cmd, async () => readIngressConfig());
|
|
301
296
|
});
|
|
302
297
|
|
|
303
|
-
ingress
|
|
304
|
-
.command("members")
|
|
305
|
-
.description(
|
|
306
|
-
"[Deprecated: use 'vellum contacts list'] List trusted contacts",
|
|
307
|
-
)
|
|
308
|
-
.option("--limit <limit>", "Maximum number of contacts to return")
|
|
309
|
-
.option("--role <role>", "Filter by role (default: contact)")
|
|
310
|
-
.action(
|
|
311
|
-
async (
|
|
312
|
-
opts: {
|
|
313
|
-
limit?: string;
|
|
314
|
-
role?: string;
|
|
315
|
-
},
|
|
316
|
-
cmd: Command,
|
|
317
|
-
) => {
|
|
318
|
-
process.stderr.write(
|
|
319
|
-
"⚠️ 'vellum integrations ingress members' is deprecated. Use 'vellum contacts list' instead.\n",
|
|
320
|
-
);
|
|
321
|
-
const query = toQueryString({
|
|
322
|
-
role: opts.role ?? "contact",
|
|
323
|
-
limit: opts.limit,
|
|
324
|
-
});
|
|
325
|
-
await runRead(cmd, async () => gatewayGet(`/v1/contacts${query}`));
|
|
326
|
-
},
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
ingress
|
|
330
|
-
.command("invites")
|
|
331
|
-
.description(
|
|
332
|
-
"[Deprecated: use 'vellum contacts invites'] List trusted ingress invites",
|
|
333
|
-
)
|
|
334
|
-
.option("--source-channel <sourceChannel>", "Filter by source channel")
|
|
335
|
-
.option("--status <status>", "Filter by invite status")
|
|
336
|
-
.action(
|
|
337
|
-
async (
|
|
338
|
-
opts: { sourceChannel?: IngressChannel; status?: string },
|
|
339
|
-
cmd: Command,
|
|
340
|
-
) => {
|
|
341
|
-
process.stderr.write(
|
|
342
|
-
"⚠️ 'vellum integrations ingress invites' is deprecated. Use 'vellum contacts invites' instead.\n",
|
|
343
|
-
);
|
|
344
|
-
const query = toQueryString({
|
|
345
|
-
sourceChannel: opts.sourceChannel,
|
|
346
|
-
status: opts.status,
|
|
347
|
-
});
|
|
348
|
-
await runRead(cmd, async () =>
|
|
349
|
-
gatewayGet(`/v1/ingress/invites${query}`),
|
|
350
|
-
);
|
|
351
|
-
},
|
|
352
|
-
);
|
|
353
|
-
|
|
354
298
|
const voice = integrations.command("voice").description("Voice setup status");
|
|
355
299
|
|
|
356
300
|
voice
|