@vellumai/assistant 0.10.2-dev.202606242135.63f618e → 0.10.2-dev.202606242332.3fa9b2b
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/bun.lock +20 -0
- package/node_modules/@vellumai/service-contracts/package.json +1 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +28 -0
- package/node_modules/@vellumai/service-contracts/src/channels.ts +41 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +1 -0
- package/openapi.yaml +34 -0
- package/package.json +4 -1
- package/src/__tests__/code-search-tool.test.ts +585 -0
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +29 -0
- package/src/__tests__/exploration-drift-hook.test.ts +3 -2
- package/src/__tests__/guardian-expiry-notifier.test.ts +282 -0
- package/src/__tests__/mcp-health-check.test.ts +2 -1
- package/src/__tests__/registry.test.ts +1 -1
- package/src/__tests__/subagent-role-registry.test.ts +7 -2
- package/src/__tests__/ui-file-upload-surface.test.ts +86 -0
- package/src/api/index.ts +6 -1
- package/src/api/surfaces.ts +39 -3
- package/src/approvals/guardian-channel-delivery.ts +30 -0
- package/src/approvals/guardian-expiry-notifier.ts +148 -0
- package/src/approvals/guardian-request-resolvers.ts +1 -11
- package/src/channels/types.ts +10 -20
- package/src/config/bundled-skills/subagent/SKILL.md +1 -1
- package/src/config/bundled-skills/subagent/TOOLS.json +1 -1
- package/src/daemon/conversation-surfaces.ts +26 -2
- package/src/daemon/conversation-tool-setup.ts +1 -0
- package/src/daemon/message-types/surfaces.ts +12 -12
- package/src/mcp/mcp-oauth-provider.ts +19 -8
- package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +2 -1
- package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +13 -5
- package/src/runtime/routes/mcp-auth-routes.ts +65 -3
- package/src/subagent/types.ts +3 -3
- package/src/tools/filesystem/search.ts +543 -0
- package/src/tools/shared/filesystem/path-policy.ts +12 -5
- package/src/tools/tool-manifest.ts +3 -0
- package/src/workflows/library.test.ts +140 -0
- package/src/workflows/library.ts +82 -28
package/bun.lock
CHANGED
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"playwright": "1.58.2",
|
|
39
39
|
"postgres": "3.4.8",
|
|
40
40
|
"quickjs-emscripten": "0.32.0",
|
|
41
|
+
"re2js": "2.8.3",
|
|
41
42
|
"rrule": "2.8.1",
|
|
42
43
|
"semver": "7.8.0",
|
|
43
44
|
"stemmer": "2.0.1",
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"@types/node": "25.5.0",
|
|
55
56
|
"@types/semver": "7.5.8",
|
|
56
57
|
"@types/uuid": "10.0.0",
|
|
58
|
+
"@typescript/native-preview": "7.0.0-dev.20260624.1",
|
|
57
59
|
"ajv": "8.18.0",
|
|
58
60
|
"drizzle-kit": "0.31.10",
|
|
59
61
|
"eslint": "10.0.3",
|
|
@@ -454,6 +456,22 @@
|
|
|
454
456
|
|
|
455
457
|
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.57.0", "", { "dependencies": { "@typescript-eslint/types": "8.57.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg=="],
|
|
456
458
|
|
|
459
|
+
"@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260624.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260624.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260624.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260624.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260624.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260624.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260624.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260624.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-ogwfNo1xuAutOF8RbTCo3Ut0q/65u2ucOeHizi6O14q+3vnelNS+u8qVC2QWXubMcwtuN5E9cbfPslvGC4kdwA=="],
|
|
460
|
+
|
|
461
|
+
"@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260624.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-g8CqDkYCHTCYdhBHXs5cMraBurOS+KrcMFxE0SsaKZoI6Tnp+le1aWvxUBbzNKJYyThHJqb/1mLopzEJxJCuKA=="],
|
|
462
|
+
|
|
463
|
+
"@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260624.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-P00JVvSV90eioYDuINAKmOSA8yhFTWLq6RvS5lrCfUuDlcgr2kSOgZAfFHIksHBVz6ZXpAXpa0dHPmc5SJ3Ymw=="],
|
|
464
|
+
|
|
465
|
+
"@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260624.1", "", { "os": "linux", "cpu": "arm" }, "sha512-eWHELvfQMkVRjafMd+3ATgM9p9yAergJaM4AOY8AekCNWnHFwUrp/ohh+ryyMUIqque5jjb/kuTiOiGj728I2Q=="],
|
|
466
|
+
|
|
467
|
+
"@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260624.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-cppM2yTZ/Gd1hOXy8NEJcUBxJ0O0zl9CU3OU1ZWZ/OHWWX/ukEzCCr94SUwJhjIWOylBCpIYkrvYoTwxNa94XQ=="],
|
|
468
|
+
|
|
469
|
+
"@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260624.1", "", { "os": "linux", "cpu": "x64" }, "sha512-FaB8rS+rKYz4nDrEsHsF3b4cn7eCKCYroMJReA375OuQ6PHcmCNQ6QlVetA0dfFBxTTgejmoKyfw9xgAA5P4Yw=="],
|
|
470
|
+
|
|
471
|
+
"@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260624.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-BgkqbCmSHDb5UxqWaFlFFJ/DHNT3lEUO4W8627ap6+QthJZuXk2imiHAX3PgYXC6en9fLLyR6jjcseAa4CCshg=="],
|
|
472
|
+
|
|
473
|
+
"@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260624.1", "", { "os": "win32", "cpu": "x64" }, "sha512-WaZ+ue63NgB2j/lqjirfevh/TqcsCxSqnKhGGiRnlxHyYIBcoq+x7KngyEnyGIaywJE1PcFeXA+2EMSIPlSEiQ=="],
|
|
474
|
+
|
|
457
475
|
"@vellumai/ces-client": ["@vellumai/ces-client@file:../packages/ces-client", { "dependencies": { "@vellumai/service-contracts": "file:../service-contracts" }, "devDependencies": { "@types/bun": "1.2.4", "typescript": "5.7.3" } }],
|
|
458
476
|
|
|
459
477
|
"@vellumai/credential-storage": ["@vellumai/credential-storage@file:../packages/credential-storage", { "devDependencies": { "@types/bun": "1.3.10", "typescript": "5.9.3" } }],
|
|
@@ -1040,6 +1058,8 @@
|
|
|
1040
1058
|
|
|
1041
1059
|
"rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="],
|
|
1042
1060
|
|
|
1061
|
+
"re2js": ["re2js@2.8.3", "", {}, "sha512-lUKeXVwMqU302DM/WaOm33XF2hhzjGUZ8CbLg4zSAMpW2PPkJ2+is25AROevNiw+DytFmKU5gsQ92cB1Kxy+fA=="],
|
|
1062
|
+
|
|
1043
1063
|
"readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="],
|
|
1044
1064
|
|
|
1045
1065
|
"real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="],
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
|
|
3
|
+
import { CHANNEL_IDS, isChannelId } from "../channels.js";
|
|
4
|
+
|
|
5
|
+
describe("isChannelId", () => {
|
|
6
|
+
test("accepts every canonical channel id", () => {
|
|
7
|
+
for (const id of CHANNEL_IDS) {
|
|
8
|
+
expect(isChannelId(id)).toBe(true);
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("includes the internal channels no external surface ingresses", () => {
|
|
13
|
+
// `platform` (control plane) and `vellum` (native app) are part of the
|
|
14
|
+
// canonical vocabulary even though the gateway never ingresses them. The
|
|
15
|
+
// gateway's narrower list is a compile-time-asserted subset of this set,
|
|
16
|
+
// so these must remain canonical for that assertion to mean anything.
|
|
17
|
+
expect(isChannelId("platform")).toBe(true);
|
|
18
|
+
expect(isChannelId("vellum")).toBe(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test("rejects unknown strings and non-string values", () => {
|
|
22
|
+
expect(isChannelId("discord")).toBe(false);
|
|
23
|
+
expect(isChannelId("")).toBe(false);
|
|
24
|
+
expect(isChannelId(undefined)).toBe(false);
|
|
25
|
+
expect(isChannelId(null)).toBe(false);
|
|
26
|
+
expect(isChannelId(42)).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical channel-id vocabulary shared between the assistant daemon and the
|
|
3
|
+
* gateway.
|
|
4
|
+
*
|
|
5
|
+
* A "channel" is an external messaging surface an actor can reach the
|
|
6
|
+
* assistant through (Slack, Telegram, WhatsApp, phone, …) plus a couple of
|
|
7
|
+
* internal ids (`vellum` for native app conversations, `platform` for the
|
|
8
|
+
* internal control plane). This is the single source of truth for that set:
|
|
9
|
+
* the assistant adopts it wholesale as its `ChannelId`, and the gateway
|
|
10
|
+
* asserts its own (narrower) inbound list is a subset of it so the two sides
|
|
11
|
+
* cannot silently drift.
|
|
12
|
+
*
|
|
13
|
+
* Both packages depend on `@vellumai/service-contracts`, so hoisting the set
|
|
14
|
+
* here (rather than maintaining a copy on each side) means adding or renaming
|
|
15
|
+
* a channel happens in exactly one place.
|
|
16
|
+
*
|
|
17
|
+
* Note that a consumer may legitimately handle only a *subset* of these — the
|
|
18
|
+
* gateway, for example, never ingresses `platform`. Use a local list guarded
|
|
19
|
+
* by `satisfies readonly ChannelId[]` for those cases rather than redefining
|
|
20
|
+
* the union.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export const CHANNEL_IDS = [
|
|
24
|
+
"telegram",
|
|
25
|
+
"phone",
|
|
26
|
+
"vellum",
|
|
27
|
+
"whatsapp",
|
|
28
|
+
"slack",
|
|
29
|
+
"email",
|
|
30
|
+
"platform",
|
|
31
|
+
"a2a",
|
|
32
|
+
] as const;
|
|
33
|
+
|
|
34
|
+
export type ChannelId = (typeof CHANNEL_IDS)[number];
|
|
35
|
+
|
|
36
|
+
export function isChannelId(value: unknown): value is ChannelId {
|
|
37
|
+
return (
|
|
38
|
+
typeof value === "string" &&
|
|
39
|
+
(CHANNEL_IDS as readonly string[]).includes(value)
|
|
40
|
+
);
|
|
41
|
+
}
|
package/openapi.yaml
CHANGED
|
@@ -14739,6 +14739,37 @@ paths:
|
|
|
14739
14739
|
responses:
|
|
14740
14740
|
"200":
|
|
14741
14741
|
description: Successful response
|
|
14742
|
+
/v1/internal/mcp/auth/revoke:
|
|
14743
|
+
post:
|
|
14744
|
+
operationId: internal_mcp_auth_revoke_post
|
|
14745
|
+
summary: Revoke MCP OAuth credentials
|
|
14746
|
+
description: Deletes stored OAuth tokens for an MCP server and triggers a reload.
|
|
14747
|
+
tags:
|
|
14748
|
+
- internal
|
|
14749
|
+
requestBody:
|
|
14750
|
+
required: true
|
|
14751
|
+
content:
|
|
14752
|
+
application/json:
|
|
14753
|
+
schema:
|
|
14754
|
+
type: object
|
|
14755
|
+
properties:
|
|
14756
|
+
serverId:
|
|
14757
|
+
type: string
|
|
14758
|
+
required:
|
|
14759
|
+
- serverId
|
|
14760
|
+
responses:
|
|
14761
|
+
"200":
|
|
14762
|
+
description: Successful response
|
|
14763
|
+
content:
|
|
14764
|
+
application/json:
|
|
14765
|
+
schema:
|
|
14766
|
+
type: object
|
|
14767
|
+
properties:
|
|
14768
|
+
revoked:
|
|
14769
|
+
type: boolean
|
|
14770
|
+
required:
|
|
14771
|
+
- revoked
|
|
14772
|
+
additionalProperties: false
|
|
14742
14773
|
/v1/internal/mcp/auth/start:
|
|
14743
14774
|
post:
|
|
14744
14775
|
operationId: internal_mcp_auth_start_post
|
|
@@ -14818,6 +14849,8 @@ paths:
|
|
|
14818
14849
|
type: boolean
|
|
14819
14850
|
defaultRiskLevel:
|
|
14820
14851
|
type: string
|
|
14852
|
+
hasOAuth:
|
|
14853
|
+
type: boolean
|
|
14821
14854
|
allowedTools:
|
|
14822
14855
|
type: array
|
|
14823
14856
|
items:
|
|
@@ -14832,6 +14865,7 @@ paths:
|
|
|
14832
14865
|
- transport
|
|
14833
14866
|
- enabled
|
|
14834
14867
|
- defaultRiskLevel
|
|
14868
|
+
- hasOAuth
|
|
14835
14869
|
additionalProperties: false
|
|
14836
14870
|
required:
|
|
14837
14871
|
- servers
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vellumai/assistant",
|
|
3
|
-
"version": "0.10.2-dev.
|
|
3
|
+
"version": "0.10.2-dev.202606242332.3fa9b2b",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"lint:circular": "bun run scripts/check-circular-deps.ts",
|
|
25
25
|
"lint:unused:production": "knip --production --include exports",
|
|
26
26
|
"typecheck": "bunx tsc --noEmit",
|
|
27
|
+
"typecheck:fast": "bunx tsgo --noEmit",
|
|
27
28
|
"test": "bash scripts/test.sh",
|
|
28
29
|
"test:coverage": "COVERAGE=true bash scripts/test.sh",
|
|
29
30
|
"test:stable": "EXCLUDE_EXPERIMENTAL=true bash scripts/test.sh",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"playwright": "1.58.2",
|
|
67
68
|
"postgres": "3.4.8",
|
|
68
69
|
"quickjs-emscripten": "0.32.0",
|
|
70
|
+
"re2js": "2.8.3",
|
|
69
71
|
"rrule": "2.8.1",
|
|
70
72
|
"semver": "7.8.0",
|
|
71
73
|
"stemmer": "2.0.1",
|
|
@@ -105,6 +107,7 @@
|
|
|
105
107
|
"@types/node": "25.5.0",
|
|
106
108
|
"@types/semver": "7.5.8",
|
|
107
109
|
"@types/uuid": "10.0.0",
|
|
110
|
+
"@typescript/native-preview": "7.0.0-dev.20260624.1",
|
|
108
111
|
"ajv": "8.18.0",
|
|
109
112
|
"drizzle-kit": "0.31.10",
|
|
110
113
|
"eslint": "10.0.3",
|