@vellumai/assistant 0.4.1 → 0.4.2
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 +0 -83
- package/package.json +2 -3
- package/src/__tests__/channel-approval-routes.test.ts +55 -5
- package/src/__tests__/daemon-server-session-init.test.ts +54 -1
- package/src/__tests__/guardian-decision-primitive-canonical.test.ts +4 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +50 -9
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +161 -2
- package/src/__tests__/send-endpoint-busy.test.ts +129 -3
- package/src/approvals/guardian-decision-primitive.ts +22 -1
- package/src/daemon/handlers/sessions.ts +125 -11
- package/src/daemon/server.ts +17 -2
- package/src/daemon/session-agent-loop.ts +33 -22
- package/src/memory/app-store.ts +6 -0
- package/src/memory/embedding-local.ts +25 -13
- package/src/memory/embedding-runtime-manager.ts +24 -6
- package/src/runtime/guardian-context-resolver.ts +5 -1
- package/src/runtime/guardian-reply-router.ts +12 -0
- package/src/runtime/http-server.ts +1 -0
- package/src/runtime/routes/conversation-routes.ts +31 -10
- package/src/runtime/routes/inbound-message-handler.ts +12 -1
- package/src/tools/apps/executors.ts +15 -0
package/bun.lock
CHANGED
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
"zod": "^4.3.6",
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@huggingface/transformers": "^3.8.1",
|
|
38
37
|
"@pydantic/logfire-node": "^0.13.0",
|
|
39
38
|
"@types/archiver": "^7.0.0",
|
|
40
39
|
"@types/bun": "^1.2.4",
|
|
@@ -149,10 +148,6 @@
|
|
|
149
148
|
|
|
150
149
|
"@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="],
|
|
151
150
|
|
|
152
|
-
"@huggingface/jinja": ["@huggingface/jinja@0.5.5", "", {}, "sha512-xRlzazC+QZwr6z4ixEqYHo9fgwhTZ3xNSdljlKfUFGZSdlvt166DljRELFUfFytlYOYvo3vTisA/AFOuOAzFQQ=="],
|
|
153
|
-
|
|
154
|
-
"@huggingface/transformers": ["@huggingface/transformers@3.8.1", "", { "dependencies": { "@huggingface/jinja": "^0.5.3", "onnxruntime-node": "1.21.0", "onnxruntime-web": "1.22.0-dev.20250409-89f8206ba4", "sharp": "^0.34.1" } }, "sha512-tsTk4zVjImqdqjS8/AOZg2yNLd1z9S5v+7oUPpXaasDRwEDhB+xnglK1k5cad26lL5/ZIaeREgWWy0bs9y9pPA=="],
|
|
155
|
-
|
|
156
151
|
"@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
|
|
157
152
|
|
|
158
153
|
"@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="],
|
|
@@ -161,8 +156,6 @@
|
|
|
161
156
|
|
|
162
157
|
"@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
|
|
163
158
|
|
|
164
|
-
"@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="],
|
|
165
|
-
|
|
166
159
|
"@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="],
|
|
167
160
|
|
|
168
161
|
"@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="],
|
|
@@ -175,12 +168,6 @@
|
|
|
175
168
|
|
|
176
169
|
"@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="],
|
|
177
170
|
|
|
178
|
-
"@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="],
|
|
179
|
-
|
|
180
|
-
"@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="],
|
|
181
|
-
|
|
182
|
-
"@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="],
|
|
183
|
-
|
|
184
171
|
"@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="],
|
|
185
172
|
|
|
186
173
|
"@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="],
|
|
@@ -191,30 +178,18 @@
|
|
|
191
178
|
|
|
192
179
|
"@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="],
|
|
193
180
|
|
|
194
|
-
"@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="],
|
|
195
|
-
|
|
196
|
-
"@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="],
|
|
197
|
-
|
|
198
|
-
"@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="],
|
|
199
|
-
|
|
200
181
|
"@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="],
|
|
201
182
|
|
|
202
183
|
"@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="],
|
|
203
184
|
|
|
204
185
|
"@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="],
|
|
205
186
|
|
|
206
|
-
"@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="],
|
|
207
|
-
|
|
208
187
|
"@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="],
|
|
209
188
|
|
|
210
|
-
"@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="],
|
|
211
|
-
|
|
212
189
|
"@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="],
|
|
213
190
|
|
|
214
191
|
"@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
|
|
215
192
|
|
|
216
|
-
"@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="],
|
|
217
|
-
|
|
218
193
|
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
|
|
219
194
|
|
|
220
195
|
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
|
|
@@ -597,8 +572,6 @@
|
|
|
597
572
|
|
|
598
573
|
"body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="],
|
|
599
574
|
|
|
600
|
-
"boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="],
|
|
601
|
-
|
|
602
575
|
"brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="],
|
|
603
576
|
|
|
604
577
|
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
|
@@ -623,8 +596,6 @@
|
|
|
623
596
|
|
|
624
597
|
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
|
|
625
598
|
|
|
626
|
-
"chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="],
|
|
627
|
-
|
|
628
599
|
"cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="],
|
|
629
600
|
|
|
630
601
|
"cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="],
|
|
@@ -689,18 +660,10 @@
|
|
|
689
660
|
|
|
690
661
|
"deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
|
|
691
662
|
|
|
692
|
-
"define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="],
|
|
693
|
-
|
|
694
|
-
"define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="],
|
|
695
|
-
|
|
696
663
|
"delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
|
|
697
664
|
|
|
698
665
|
"depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="],
|
|
699
666
|
|
|
700
|
-
"detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
|
|
701
|
-
|
|
702
|
-
"detect-node": ["detect-node@2.1.0", "", {}, "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="],
|
|
703
|
-
|
|
704
667
|
"diff": ["diff@4.0.4", "", {}, "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ=="],
|
|
705
668
|
|
|
706
669
|
"dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="],
|
|
@@ -737,8 +700,6 @@
|
|
|
737
700
|
|
|
738
701
|
"es-toolkit": ["es-toolkit@1.44.0", "", {}, "sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg=="],
|
|
739
702
|
|
|
740
|
-
"es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="],
|
|
741
|
-
|
|
742
703
|
"esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="],
|
|
743
704
|
|
|
744
705
|
"esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="],
|
|
@@ -821,8 +782,6 @@
|
|
|
821
782
|
|
|
822
783
|
"flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
|
|
823
784
|
|
|
824
|
-
"flatbuffers": ["flatbuffers@25.9.23", "", {}, "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ=="],
|
|
825
|
-
|
|
826
785
|
"flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="],
|
|
827
786
|
|
|
828
787
|
"foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="],
|
|
@@ -869,10 +828,6 @@
|
|
|
869
828
|
|
|
870
829
|
"glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
|
|
871
830
|
|
|
872
|
-
"global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="],
|
|
873
|
-
|
|
874
|
-
"globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
|
|
875
|
-
|
|
876
831
|
"google-auth-library": ["google-auth-library@10.5.0", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^7.0.0", "gcp-metadata": "^8.0.0", "google-logging-utils": "^1.0.0", "gtoken": "^8.0.0", "jws": "^4.0.0" } }, "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w=="],
|
|
877
832
|
|
|
878
833
|
"google-logging-utils": ["google-logging-utils@1.1.3", "", {}, "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA=="],
|
|
@@ -883,10 +838,6 @@
|
|
|
883
838
|
|
|
884
839
|
"gtoken": ["gtoken@8.0.0", "", { "dependencies": { "gaxios": "^7.0.0", "jws": "^4.0.0" } }, "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw=="],
|
|
885
840
|
|
|
886
|
-
"guid-typescript": ["guid-typescript@1.0.9", "", {}, "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ=="],
|
|
887
|
-
|
|
888
|
-
"has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="],
|
|
889
|
-
|
|
890
841
|
"has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
|
|
891
842
|
|
|
892
843
|
"has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="],
|
|
@@ -969,8 +920,6 @@
|
|
|
969
920
|
|
|
970
921
|
"json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="],
|
|
971
922
|
|
|
972
|
-
"json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="],
|
|
973
|
-
|
|
974
923
|
"jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="],
|
|
975
924
|
|
|
976
925
|
"jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="],
|
|
@@ -1001,8 +950,6 @@
|
|
|
1001
950
|
|
|
1002
951
|
"make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="],
|
|
1003
952
|
|
|
1004
|
-
"matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="],
|
|
1005
|
-
|
|
1006
953
|
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
|
|
1007
954
|
|
|
1008
955
|
"media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="],
|
|
@@ -1025,8 +972,6 @@
|
|
|
1025
972
|
|
|
1026
973
|
"minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
|
|
1027
974
|
|
|
1028
|
-
"minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="],
|
|
1029
|
-
|
|
1030
975
|
"module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="],
|
|
1031
976
|
|
|
1032
977
|
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
|
@@ -1049,8 +994,6 @@
|
|
|
1049
994
|
|
|
1050
995
|
"object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="],
|
|
1051
996
|
|
|
1052
|
-
"object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="],
|
|
1053
|
-
|
|
1054
997
|
"on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="],
|
|
1055
998
|
|
|
1056
999
|
"on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="],
|
|
@@ -1059,12 +1002,6 @@
|
|
|
1059
1002
|
|
|
1060
1003
|
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
|
|
1061
1004
|
|
|
1062
|
-
"onnxruntime-common": ["onnxruntime-common@1.21.0", "", {}, "sha512-Q632iLLrtCAVOTO65dh2+mNbQir/QNTVBG3h/QdZBpns7mZ0RYbLRBgGABPbpU9351AgYy7SJf1WaeVwMrBFPQ=="],
|
|
1063
|
-
|
|
1064
|
-
"onnxruntime-node": ["onnxruntime-node@1.21.0", "", { "dependencies": { "global-agent": "^3.0.0", "onnxruntime-common": "1.21.0", "tar": "^7.0.1" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-NeaCX6WW2L8cRCSqy3bInlo5ojjQqu2fD3D+9W5qb5irwxhEyWKXeH2vZ8W9r6VxaMPUan+4/7NDwZMtouZxEw=="],
|
|
1065
|
-
|
|
1066
|
-
"onnxruntime-web": ["onnxruntime-web@1.22.0-dev.20250409-89f8206ba4", "", { "dependencies": { "flatbuffers": "^25.1.24", "guid-typescript": "^1.0.9", "long": "^5.2.3", "onnxruntime-common": "1.22.0-dev.20250409-89f8206ba4", "platform": "^1.3.6", "protobufjs": "^7.2.4" } }, "sha512-0uS76OPgH0hWCPrFKlL8kYVV7ckM7t/36HfbgoFw6Nd0CZVVbQC4PkrR8mBX8LtNUFZO25IQBqV2Hx2ho3FlbQ=="],
|
|
1067
|
-
|
|
1068
1005
|
"openai": ["openai@6.22.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-7Yvy17F33Bi9RutWbsaYt5hJEEJ/krRPOrwan+f9aCPuMat1WVsb2VNSII5W1EksKT6fF69TG/xj4XzodK3JZw=="],
|
|
1069
1006
|
|
|
1070
1007
|
"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
|
|
@@ -1117,8 +1054,6 @@
|
|
|
1117
1054
|
|
|
1118
1055
|
"pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="],
|
|
1119
1056
|
|
|
1120
|
-
"platform": ["platform@1.3.6", "", {}, "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="],
|
|
1121
|
-
|
|
1122
1057
|
"playwright": ["playwright@1.58.2", "", { "dependencies": { "playwright-core": "1.58.2" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A=="],
|
|
1123
1058
|
|
|
1124
1059
|
"playwright-core": ["playwright-core@1.58.2", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg=="],
|
|
@@ -1195,8 +1130,6 @@
|
|
|
1195
1130
|
|
|
1196
1131
|
"rimraf": ["rimraf@5.0.10", "", { "dependencies": { "glob": "^10.3.7" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ=="],
|
|
1197
1132
|
|
|
1198
|
-
"roarr": ["roarr@2.15.4", "", { "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" } }, "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A=="],
|
|
1199
|
-
|
|
1200
1133
|
"router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="],
|
|
1201
1134
|
|
|
1202
1135
|
"rrule": ["rrule@2.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw=="],
|
|
@@ -1215,20 +1148,14 @@
|
|
|
1215
1148
|
|
|
1216
1149
|
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
|
1217
1150
|
|
|
1218
|
-
"semver-compare": ["semver-compare@1.0.0", "", {}, "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="],
|
|
1219
|
-
|
|
1220
1151
|
"send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="],
|
|
1221
1152
|
|
|
1222
|
-
"serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="],
|
|
1223
|
-
|
|
1224
1153
|
"serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="],
|
|
1225
1154
|
|
|
1226
1155
|
"setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="],
|
|
1227
1156
|
|
|
1228
1157
|
"setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="],
|
|
1229
1158
|
|
|
1230
|
-
"sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
|
|
1231
|
-
|
|
1232
1159
|
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
|
|
1233
1160
|
|
|
1234
1161
|
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
|
|
@@ -1257,8 +1184,6 @@
|
|
|
1257
1184
|
|
|
1258
1185
|
"split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="],
|
|
1259
1186
|
|
|
1260
|
-
"sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="],
|
|
1261
|
-
|
|
1262
1187
|
"stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="],
|
|
1263
1188
|
|
|
1264
1189
|
"statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="],
|
|
@@ -1279,8 +1204,6 @@
|
|
|
1279
1204
|
|
|
1280
1205
|
"tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="],
|
|
1281
1206
|
|
|
1282
|
-
"tar": ["tar@7.5.9", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg=="],
|
|
1283
|
-
|
|
1284
1207
|
"tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="],
|
|
1285
1208
|
|
|
1286
1209
|
"terminal-size": ["terminal-size@4.0.1", "", {}, "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ=="],
|
|
@@ -1377,8 +1300,6 @@
|
|
|
1377
1300
|
|
|
1378
1301
|
"y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
|
|
1379
1302
|
|
|
1380
|
-
"yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
|
|
1381
|
-
|
|
1382
1303
|
"yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="],
|
|
1383
1304
|
|
|
1384
1305
|
"yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
|
|
@@ -1669,8 +1590,6 @@
|
|
|
1669
1590
|
|
|
1670
1591
|
"micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
|
1671
1592
|
|
|
1672
|
-
"onnxruntime-web/onnxruntime-common": ["onnxruntime-common@1.22.0-dev.20250409-89f8206ba4", "", {}, "sha512-vDJMkfCfb0b1A836rgHj+ORuZf4B4+cc2bASQtpeoJLueuFc5DuYwjIZUBrSvx/fO5IrLjLz+oTrB3pcGlhovQ=="],
|
|
1673
|
-
|
|
1674
1593
|
"pino-pretty/pino-abstract-transport": ["pino-abstract-transport@3.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg=="],
|
|
1675
1594
|
|
|
1676
1595
|
"react-devtools-core/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="],
|
|
@@ -1679,8 +1598,6 @@
|
|
|
1679
1598
|
|
|
1680
1599
|
"rimraf/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="],
|
|
1681
1600
|
|
|
1682
|
-
"serialize-error/type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="],
|
|
1683
|
-
|
|
1684
1601
|
"stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="],
|
|
1685
1602
|
|
|
1686
1603
|
"string-width-cjs/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vellumai/assistant",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"vellum": "./src/index.ts"
|
|
@@ -70,7 +70,6 @@
|
|
|
70
70
|
"quicktype-core": "^23.2.6",
|
|
71
71
|
"typescript": "^5.7.3",
|
|
72
72
|
"typescript-eslint": "^8.54.0",
|
|
73
|
-
"typescript-json-schema": "^0.67.1"
|
|
74
|
-
"@huggingface/transformers": "^3.8.1"
|
|
73
|
+
"typescript-json-schema": "^0.67.1"
|
|
75
74
|
}
|
|
76
75
|
}
|
|
@@ -2615,6 +2615,56 @@ describe('background channel processing approval prompts', () => {
|
|
|
2615
2615
|
deliverPromptSpy.mockRestore();
|
|
2616
2616
|
});
|
|
2617
2617
|
|
|
2618
|
+
test('guardian prompt delivery still works when binding ID formatting differs from sender ID', async () => {
|
|
2619
|
+
// Guardian binding includes extra whitespace; trust resolution canonicalizes
|
|
2620
|
+
// identity and prompt delivery should still treat this sender as the guardian.
|
|
2621
|
+
createBinding({
|
|
2622
|
+
assistantId: 'self',
|
|
2623
|
+
channel: 'telegram',
|
|
2624
|
+
guardianExternalUserId: ' telegram-user-default ',
|
|
2625
|
+
guardianDeliveryChatId: 'chat-123',
|
|
2626
|
+
});
|
|
2627
|
+
|
|
2628
|
+
const deliverPromptSpy = spyOn(gatewayClient, 'deliverApprovalPrompt').mockResolvedValue(undefined);
|
|
2629
|
+
const processCalls: Array<{ options?: Record<string, unknown> }> = [];
|
|
2630
|
+
|
|
2631
|
+
const processMessage = mock(async (
|
|
2632
|
+
conversationId: string,
|
|
2633
|
+
_content: string,
|
|
2634
|
+
_attachmentIds?: string[],
|
|
2635
|
+
options?: Record<string, unknown>,
|
|
2636
|
+
) => {
|
|
2637
|
+
processCalls.push({ options });
|
|
2638
|
+
|
|
2639
|
+
registerPendingInteraction('req-bg-format-1', conversationId, 'host_bash', {
|
|
2640
|
+
input: { command: 'ls -la' },
|
|
2641
|
+
riskLevel: 'medium',
|
|
2642
|
+
});
|
|
2643
|
+
|
|
2644
|
+
await new Promise((resolve) => setTimeout(resolve, 350));
|
|
2645
|
+
return { messageId: 'msg-bg-format-1' };
|
|
2646
|
+
});
|
|
2647
|
+
|
|
2648
|
+
const req = makeInboundRequest({
|
|
2649
|
+
content: 'run ls',
|
|
2650
|
+
sourceChannel: 'telegram',
|
|
2651
|
+
replyCallbackUrl: 'https://gateway.test/deliver/telegram',
|
|
2652
|
+
externalMessageId: 'msg-bg-format-1',
|
|
2653
|
+
});
|
|
2654
|
+
|
|
2655
|
+
const res = await handleChannelInbound(req, processMessage as unknown as typeof noopProcessMessage, 'token');
|
|
2656
|
+
const body = await res.json() as Record<string, unknown>;
|
|
2657
|
+
expect(body.accepted).toBe(true);
|
|
2658
|
+
|
|
2659
|
+
await new Promise((resolve) => setTimeout(resolve, 700));
|
|
2660
|
+
|
|
2661
|
+
expect(processCalls.length).toBeGreaterThan(0);
|
|
2662
|
+
expect(processCalls[0].options?.isInteractive).toBe(true);
|
|
2663
|
+
expect(deliverPromptSpy).toHaveBeenCalled();
|
|
2664
|
+
|
|
2665
|
+
deliverPromptSpy.mockRestore();
|
|
2666
|
+
});
|
|
2667
|
+
|
|
2618
2668
|
test('non-guardian channel turns are not interactive to prevent self-approval', async () => {
|
|
2619
2669
|
// Set up a guardian binding for a DIFFERENT user so the sender is non-guardian
|
|
2620
2670
|
createBinding({
|
|
@@ -2709,8 +2759,8 @@ describe('NL approval routing via destination-scoped canonical requests', () =>
|
|
|
2709
2759
|
noopProcessMessage.mockClear();
|
|
2710
2760
|
});
|
|
2711
2761
|
|
|
2712
|
-
test('guardian plain-text "yes"
|
|
2713
|
-
// Simulate a voice-originated
|
|
2762
|
+
test('guardian plain-text "yes" fails closed for tool_approval with no guardianExternalUserId', async () => {
|
|
2763
|
+
// Simulate a voice-originated tool approval without guardianExternalUserId
|
|
2714
2764
|
const guardianChatId = 'guardian-chat-nl-1';
|
|
2715
2765
|
const guardianUserId = 'guardian-user-nl-1';
|
|
2716
2766
|
|
|
@@ -2759,12 +2809,12 @@ describe('NL approval routing via destination-scoped canonical requests', () =>
|
|
|
2759
2809
|
const body = await res.json() as Record<string, unknown>;
|
|
2760
2810
|
|
|
2761
2811
|
expect(body.accepted).toBe(true);
|
|
2762
|
-
expect(body.canonicalRouter).toBe('
|
|
2812
|
+
expect(body.canonicalRouter).toBe('canonical_decision_stale');
|
|
2763
2813
|
|
|
2764
|
-
// Verify the request
|
|
2814
|
+
// Verify the request remains pending (identity-bound fail-closed).
|
|
2765
2815
|
const resolved = getCanonicalGuardianRequest(canonicalReq.id);
|
|
2766
2816
|
expect(resolved).not.toBeNull();
|
|
2767
|
-
expect(resolved!.status).toBe('
|
|
2817
|
+
expect(resolved!.status).toBe('pending');
|
|
2768
2818
|
});
|
|
2769
2819
|
|
|
2770
2820
|
test('inbound from different chat ID does not auto-match delivery-scoped canonical request', async () => {
|
|
@@ -36,6 +36,7 @@ let lastCreateConversationArgs: unknown;
|
|
|
36
36
|
// field declarations create own-properties that mask prototype assignments.
|
|
37
37
|
let mockConfirmationToEmitDuringLoop: Record<string, unknown> | undefined;
|
|
38
38
|
let mockMidLoopCallback: ((session: MockSession) => void) | undefined;
|
|
39
|
+
let lastCanonicalGuardianCreateParams: Record<string, unknown> | undefined;
|
|
39
40
|
|
|
40
41
|
class MockSession {
|
|
41
42
|
public readonly conversationId: string;
|
|
@@ -253,7 +254,10 @@ mock.module('../memory/conversation-attention-store.js', () => ({
|
|
|
253
254
|
|
|
254
255
|
mock.module('../memory/canonical-guardian-store.js', () => ({
|
|
255
256
|
generateCanonicalRequestCode: () => 'mock-code-0000',
|
|
256
|
-
createCanonicalGuardianRequest: (
|
|
257
|
+
createCanonicalGuardianRequest: (params: Record<string, unknown>) => {
|
|
258
|
+
lastCanonicalGuardianCreateParams = params;
|
|
259
|
+
return { requestCode: 'mock-code-0000', status: 'pending' };
|
|
260
|
+
},
|
|
257
261
|
submitCanonicalRequest: () => ({ requestCode: 'mock-code-0000', status: 'pending' }),
|
|
258
262
|
getCanonicalRequest: () => null,
|
|
259
263
|
resolveCanonicalRequest: () => false,
|
|
@@ -342,6 +346,7 @@ describe('DaemonServer initial session hydration', () => {
|
|
|
342
346
|
lastCreatedWorkingDir = undefined;
|
|
343
347
|
lastCreatedMemoryPolicy = undefined;
|
|
344
348
|
lastCreateConversationArgs = undefined;
|
|
349
|
+
lastCanonicalGuardianCreateParams = undefined;
|
|
345
350
|
mockConfirmationToEmitDuringLoop = undefined;
|
|
346
351
|
mockMidLoopCallback = undefined;
|
|
347
352
|
pendingInteractions.clear();
|
|
@@ -686,6 +691,54 @@ describe('DaemonServer initial session hydration', () => {
|
|
|
686
691
|
expect(interaction?.conversationId).toBe(conversation.id);
|
|
687
692
|
});
|
|
688
693
|
|
|
694
|
+
test('confirmation_request canonical records include bound guardian identity context', async () => {
|
|
695
|
+
const server = new DaemonServer();
|
|
696
|
+
|
|
697
|
+
mockConfirmationToEmitDuringLoop = {
|
|
698
|
+
type: 'confirmation_request',
|
|
699
|
+
requestId: 'req-bound-1',
|
|
700
|
+
toolName: 'host_bash',
|
|
701
|
+
input: { command: 'ls' },
|
|
702
|
+
riskLevel: 'high',
|
|
703
|
+
allowlistOptions: [{ label: 'host_bash:*', description: 'host_bash:*', pattern: 'host_bash:*' }],
|
|
704
|
+
scopeOptions: [{ label: 'everywhere', scope: 'everywhere' }],
|
|
705
|
+
persistentDecisionsAllowed: true,
|
|
706
|
+
};
|
|
707
|
+
|
|
708
|
+
await server.processMessage(
|
|
709
|
+
conversation.id,
|
|
710
|
+
'run ls',
|
|
711
|
+
undefined,
|
|
712
|
+
{
|
|
713
|
+
isInteractive: false,
|
|
714
|
+
guardianContext: {
|
|
715
|
+
sourceChannel: 'telegram',
|
|
716
|
+
trustClass: 'trusted_contact',
|
|
717
|
+
guardianExternalUserId: 'guardian-123',
|
|
718
|
+
requesterExternalUserId: 'trusted-456',
|
|
719
|
+
requesterChatId: 'chat-789',
|
|
720
|
+
},
|
|
721
|
+
},
|
|
722
|
+
'telegram',
|
|
723
|
+
'telegram',
|
|
724
|
+
);
|
|
725
|
+
|
|
726
|
+
expect(lastCanonicalGuardianCreateParams).toBeDefined();
|
|
727
|
+
expect(lastCanonicalGuardianCreateParams).toMatchObject({
|
|
728
|
+
id: 'req-bound-1',
|
|
729
|
+
kind: 'tool_approval',
|
|
730
|
+
sourceType: 'channel',
|
|
731
|
+
sourceChannel: 'telegram',
|
|
732
|
+
conversationId: conversation.id,
|
|
733
|
+
guardianExternalUserId: 'guardian-123',
|
|
734
|
+
requesterExternalUserId: 'trusted-456',
|
|
735
|
+
requesterChatId: 'chat-789',
|
|
736
|
+
toolName: 'host_bash',
|
|
737
|
+
status: 'pending',
|
|
738
|
+
requestCode: 'mock-code-0000',
|
|
739
|
+
});
|
|
740
|
+
});
|
|
741
|
+
|
|
689
742
|
test('finally block does not overwrite IPC client that connected during interactive agent loop (processMessage)', async () => {
|
|
690
743
|
const server = new DaemonServer();
|
|
691
744
|
const internal = asDaemonServerTestAccess(server);
|
|
@@ -248,7 +248,7 @@ describe('applyCanonicalGuardianDecision', () => {
|
|
|
248
248
|
expect(result.grantMinted).toBe(false);
|
|
249
249
|
});
|
|
250
250
|
|
|
251
|
-
test('
|
|
251
|
+
test('rejects non-trusted decision when tool approval has no guardian binding', async () => {
|
|
252
252
|
const req = createCanonicalGuardianRequest({
|
|
253
253
|
kind: 'tool_approval',
|
|
254
254
|
sourceType: 'channel',
|
|
@@ -263,7 +263,9 @@ describe('applyCanonicalGuardianDecision', () => {
|
|
|
263
263
|
actorContext: guardianActor({ externalUserId: 'anyone' }),
|
|
264
264
|
});
|
|
265
265
|
|
|
266
|
-
expect(result.applied).toBe(
|
|
266
|
+
expect(result.applied).toBe(false);
|
|
267
|
+
if (result.applied) return;
|
|
268
|
+
expect(result.reason).toBe('identity_mismatch');
|
|
267
269
|
});
|
|
268
270
|
|
|
269
271
|
// ── Stale / already-resolved (race condition) ──────────────────────
|
|
@@ -271,7 +271,7 @@ describe('routing invariant: identity checks enforced before decisions', () => {
|
|
|
271
271
|
expect(result.applied).toBe(true);
|
|
272
272
|
});
|
|
273
273
|
|
|
274
|
-
test('request with no guardian binding
|
|
274
|
+
test('request with no guardian binding rejects non-trusted actor', async () => {
|
|
275
275
|
const req = createCanonicalGuardianRequest({
|
|
276
276
|
kind: 'tool_approval',
|
|
277
277
|
sourceType: 'channel',
|
|
@@ -286,7 +286,9 @@ describe('routing invariant: identity checks enforced before decisions', () => {
|
|
|
286
286
|
actorContext: guardianActor({ externalUserId: 'anyone' }),
|
|
287
287
|
});
|
|
288
288
|
|
|
289
|
-
expect(result.applied).toBe(
|
|
289
|
+
expect(result.applied).toBe(false);
|
|
290
|
+
if (result.applied) return;
|
|
291
|
+
expect(result.reason).toBe('identity_mismatch');
|
|
290
292
|
});
|
|
291
293
|
|
|
292
294
|
test('identity mismatch on code-only message blocks detail leakage', async () => {
|
|
@@ -759,6 +761,45 @@ describe('routing invariant: disambiguation stays fail-closed', () => {
|
|
|
759
761
|
const resolved = getCanonicalGuardianRequest(req.id);
|
|
760
762
|
expect(resolved!.status).toBe('approved');
|
|
761
763
|
});
|
|
764
|
+
|
|
765
|
+
test('code-based routing is constrained to caller-provided pendingRequestIds scope', async () => {
|
|
766
|
+
const inScope = createCanonicalGuardianRequest({
|
|
767
|
+
kind: 'tool_approval',
|
|
768
|
+
sourceType: 'channel',
|
|
769
|
+
conversationId: 'conv-1',
|
|
770
|
+
guardianExternalUserId: 'guardian-1',
|
|
771
|
+
requestCode: '111AAA',
|
|
772
|
+
toolName: 'shell',
|
|
773
|
+
expiresAt: new Date(Date.now() + 60_000).toISOString(),
|
|
774
|
+
});
|
|
775
|
+
const outOfScope = createCanonicalGuardianRequest({
|
|
776
|
+
kind: 'tool_approval',
|
|
777
|
+
sourceType: 'channel',
|
|
778
|
+
conversationId: 'conv-2',
|
|
779
|
+
guardianExternalUserId: 'guardian-1',
|
|
780
|
+
requestCode: '222BBB',
|
|
781
|
+
toolName: 'shell',
|
|
782
|
+
expiresAt: new Date(Date.now() + 60_000).toISOString(),
|
|
783
|
+
});
|
|
784
|
+
registerPendingToolApprovalInteraction(inScope.id, 'conv-1', 'shell');
|
|
785
|
+
registerPendingToolApprovalInteraction(outOfScope.id, 'conv-2', 'shell');
|
|
786
|
+
|
|
787
|
+
const result = await routeGuardianReply(replyCtx({
|
|
788
|
+
messageText: '222BBB approve',
|
|
789
|
+
conversationId: 'conv-guardian-thread',
|
|
790
|
+
pendingRequestIds: [inScope.id],
|
|
791
|
+
approvalConversationGenerator: undefined,
|
|
792
|
+
}));
|
|
793
|
+
|
|
794
|
+
expect(result.consumed).toBe(false);
|
|
795
|
+
expect(result.type).toBe('not_consumed');
|
|
796
|
+
expect(result.decisionApplied).toBe(false);
|
|
797
|
+
|
|
798
|
+
const inScopeAfter = getCanonicalGuardianRequest(inScope.id);
|
|
799
|
+
const outOfScopeAfter = getCanonicalGuardianRequest(outOfScope.id);
|
|
800
|
+
expect(inScopeAfter!.status).toBe('pending');
|
|
801
|
+
expect(outOfScopeAfter!.status).toBe('pending');
|
|
802
|
+
});
|
|
762
803
|
});
|
|
763
804
|
|
|
764
805
|
// ===========================================================================
|
|
@@ -907,14 +948,14 @@ describe('routing invariant: callback buttons route through canonical primitive'
|
|
|
907
948
|
});
|
|
908
949
|
|
|
909
950
|
// ===========================================================================
|
|
910
|
-
// SECTION 9: Destination
|
|
951
|
+
// SECTION 9: Destination hints do not bypass identity binding for tool_approval
|
|
911
952
|
// ===========================================================================
|
|
912
953
|
|
|
913
|
-
describe('routing invariant: destination hints
|
|
954
|
+
describe('routing invariant: destination hints do not bypass tool_approval identity binding', () => {
|
|
914
955
|
beforeEach(() => resetTables());
|
|
915
956
|
|
|
916
|
-
test('explicit pendingRequestIds
|
|
917
|
-
// Voice-originated
|
|
957
|
+
test('explicit pendingRequestIds still fail closed when guardianExternalUserId is missing', async () => {
|
|
958
|
+
// Voice-originated tool approval with missing guardian identity binding.
|
|
918
959
|
const req = createCanonicalGuardianRequest({
|
|
919
960
|
kind: 'tool_approval',
|
|
920
961
|
sourceType: 'voice',
|
|
@@ -939,11 +980,11 @@ describe('routing invariant: destination hints enable NL approval without guardi
|
|
|
939
980
|
}));
|
|
940
981
|
|
|
941
982
|
expect(result.consumed).toBe(true);
|
|
942
|
-
expect(result.type).toBe('
|
|
943
|
-
expect(result.decisionApplied).toBe(
|
|
983
|
+
expect(result.type).toBe('canonical_decision_stale');
|
|
984
|
+
expect(result.decisionApplied).toBe(false);
|
|
944
985
|
|
|
945
986
|
const resolved = getCanonicalGuardianRequest(req.id);
|
|
946
|
-
expect(resolved!.status).toBe('
|
|
987
|
+
expect(resolved!.status).toBe('pending');
|
|
947
988
|
});
|
|
948
989
|
|
|
949
990
|
test('without destination hints, missing guardianExternalUserId means no pending requests found', async () => {
|