veryfront 0.1.1240 → 0.1.1242
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/esm/cli/commands/build/handler.d.ts +31 -0
- package/esm/cli/commands/build/handler.d.ts.map +1 -1
- package/esm/cli/commands/build/handler.js +24 -18
- package/esm/deno.d.ts +1 -0
- package/esm/deno.js +4 -3
- package/esm/extensions/ext-llm-google/src/google-provider.d.ts.map +1 -1
- package/esm/extensions/ext-llm-google/src/google-provider.js +4 -1
- package/esm/extensions/ext-llm-google/src/google-request-builder.d.ts.map +1 -1
- package/esm/extensions/ext-llm-google/src/google-request-builder.js +9 -9
- package/esm/extensions/ext-llm-google/src/google-thought-signatures.d.ts +14 -1
- package/esm/extensions/ext-llm-google/src/google-thought-signatures.d.ts.map +1 -1
- package/esm/extensions/ext-llm-google/src/google-thought-signatures.js +128 -9
- package/esm/extensions/ext-llm-openai/src/openai-chat-stream.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-chat-stream.js +22 -9
- package/esm/extensions/ext-llm-openai/src/openai-provider.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-provider.js +35 -2
- package/esm/src/agent/hosted/durable-chat-run-start.d.ts +2 -1
- package/esm/src/agent/hosted/durable-chat-run-start.d.ts.map +1 -1
- package/esm/src/agent/hosted/durable-chat-run-start.js +29 -4
- package/esm/src/agent/runtime/chat-stream-handler.d.ts +1 -0
- package/esm/src/agent/runtime/chat-stream-handler.d.ts.map +1 -1
- package/esm/src/agent/runtime/chat-stream-handler.js +1 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +29 -2
- package/esm/src/agent/runtime/provider-metadata.d.ts +6 -0
- package/esm/src/agent/runtime/provider-metadata.d.ts.map +1 -0
- package/esm/src/agent/runtime/provider-metadata.js +12 -0
- package/esm/src/agent/runtime/runtime-tool-types.d.ts +2 -0
- package/esm/src/agent/runtime/runtime-tool-types.d.ts.map +1 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.d.ts.map +1 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.js +19 -0
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts +1 -0
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts.map +1 -1
- package/esm/src/agent/service/routes.d.ts +1 -0
- package/esm/src/agent/service/routes.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/live-adapter.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/live-adapter.js +1 -0
- package/esm/src/agent/streaming/lifecycle/reducer.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/reducer.js +3 -0
- package/esm/src/agent/streaming/lifecycle/runtime-provider-adapter.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/runtime-provider-adapter.js +3 -0
- package/esm/src/agent/streaming/lifecycle/types.d.ts +2 -0
- package/esm/src/agent/streaming/lifecycle/types.d.ts.map +1 -1
- package/esm/src/build/embedded/preset.d.ts +4 -0
- package/esm/src/build/embedded/preset.d.ts.map +1 -1
- package/esm/src/build/embedded/preset.js +84 -15
- package/esm/src/cache/request-cache-batcher.d.ts +1 -0
- package/esm/src/cache/request-cache-batcher.d.ts.map +1 -1
- package/esm/src/cache/request-cache-batcher.js +21 -7
- package/esm/src/html/html-injection.d.ts +2 -0
- package/esm/src/html/html-injection.d.ts.map +1 -1
- package/esm/src/html/html-injection.js +4 -1
- package/esm/src/html/html-shell-generator.d.ts.map +1 -1
- package/esm/src/html/html-shell-generator.js +11 -3
- package/esm/src/html/hydration-script-builder/hydration-runtime.generated.js +1 -1
- package/esm/src/html/hydration-script-builder/prod-runtime-selection.d.ts +23 -0
- package/esm/src/html/hydration-script-builder/prod-runtime-selection.d.ts.map +1 -0
- package/esm/src/html/hydration-script-builder/prod-runtime-selection.js +55 -0
- package/esm/src/html/hydration-script-builder/prod-scripts.d.ts +2 -0
- package/esm/src/html/hydration-script-builder/prod-scripts.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/prod-scripts.js +12 -3
- package/esm/src/html/schemas/html.schema.d.ts +2 -0
- package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
- package/esm/src/html/schemas/html.schema.js +2 -0
- package/esm/src/platform/adapters/fs/cache/file-cache.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/cache/file-cache.js +5 -0
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts +39 -0
- package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/adapter.js +209 -40
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.js +9 -1
- package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts +2 -1
- package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/websocket-manager.js +78 -32
- package/esm/src/platform/compat/http/pinned-fetch.d.ts +1 -1
- package/esm/src/provider/veryfront-cloud/model-catalog.d.ts +2 -0
- package/esm/src/provider/veryfront-cloud/model-catalog.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/model-catalog.js +6 -0
- package/esm/src/provider/veryfront-cloud/openai.d.ts +1 -0
- package/esm/src/provider/veryfront-cloud/openai.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/openai.js +1 -0
- package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/provider.js +7 -1
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +2 -0
- package/esm/src/proxy/project-metadata-client.d.ts +6 -1
- package/esm/src/proxy/project-metadata-client.d.ts.map +1 -1
- package/esm/src/proxy/project-metadata-client.js +8 -3
- package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/html.js +23 -8
- package/esm/src/rendering/page-renderer.d.ts +2 -0
- package/esm/src/rendering/page-renderer.d.ts.map +1 -1
- package/esm/src/rendering/page-renderer.js +1 -0
- package/esm/src/rendering/renderer.d.ts.map +1 -1
- package/esm/src/rendering/renderer.js +1 -0
- package/esm/src/rendering/script-page-handling.d.ts +2 -0
- package/esm/src/rendering/script-page-handling.d.ts.map +1 -1
- package/esm/src/rendering/script-page-handling.js +17 -1
- package/esm/src/rendering/snippet-renderer.d.ts +10 -0
- package/esm/src/rendering/snippet-renderer.d.ts.map +1 -1
- package/esm/src/rendering/snippet-renderer.js +40 -18
- package/esm/src/runtime/runtime-bridge.d.ts.map +1 -1
- package/esm/src/runtime/runtime-bridge.js +13 -0
- package/esm/src/server/handlers/request/snippet.handler.d.ts +6 -0
- package/esm/src/server/handlers/request/snippet.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/snippet.handler.js +8 -1
- package/esm/src/server/handlers/request/static.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/static.handler.js +1 -0
- package/esm/src/server/services/static/static-file.service.d.ts +4 -1
- package/esm/src/server/services/static/static-file.service.d.ts.map +1 -1
- package/esm/src/server/services/static/static-file.service.js +48 -22
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +8 -8
|
@@ -70,4 +70,35 @@ export declare const parseBuildArgs: (args: ParsedArgs) => import("../../shared/
|
|
|
70
70
|
*/
|
|
71
71
|
export declare function assertEmbeddedPresetFlags(args: ParsedArgs, preset: string | undefined): void;
|
|
72
72
|
export declare function handleBuildCommand(args: ParsedArgs): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Total bytes of the artifacts the embedded manifest declares.
|
|
75
|
+
*
|
|
76
|
+
* The production build reports the size of what it emitted, so the embedded
|
|
77
|
+
* preset reports the same thing rather than leaving the field at zero. The
|
|
78
|
+
* manifest is the artifact list, so it cannot drift from what was written.
|
|
79
|
+
* A missing file is skipped because `buildEmbeddedPreset` only warns when an
|
|
80
|
+
* RSC bundle or route fails. Other filesystem errors still fail the build so
|
|
81
|
+
* JSON output cannot report a partial size as a successful result.
|
|
82
|
+
*
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
export declare function sumEmbeddedOutputSize(outDir: string, manifest: {
|
|
86
|
+
routes: ReadonlyArray<{
|
|
87
|
+
file: string;
|
|
88
|
+
}>;
|
|
89
|
+
assets: ReadonlyArray<{
|
|
90
|
+
file: string;
|
|
91
|
+
}>;
|
|
92
|
+
}, fileSystem?: {
|
|
93
|
+
stat(path: string): Promise<{
|
|
94
|
+
size: number;
|
|
95
|
+
}>;
|
|
96
|
+
}): Promise<number>;
|
|
97
|
+
/** @internal */
|
|
98
|
+
export declare function countEmbeddedPages(manifest: {
|
|
99
|
+
routes: ReadonlyArray<{
|
|
100
|
+
type: string;
|
|
101
|
+
file: string;
|
|
102
|
+
}>;
|
|
103
|
+
}, pagesIndexIsShell: boolean): number;
|
|
73
104
|
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAO3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;GAe9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;GAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;GAaA,CAAC;AA6B5B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,IAAI,CAYN;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCxE"}
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAO3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;GAe9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;GAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;GAaA,CAAC;AA6B5B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,IAAI,CAYN;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EAC9F,UAAU,CAAC,EAAE;IAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC7D,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EACnE,iBAAiB,EAAE,OAAO,GACzB,MAAM,CAKR"}
|
|
@@ -125,22 +125,22 @@ export async function handleBuildCommand(args) {
|
|
|
125
125
|
dryRun: opts.dryRun,
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
|
-
/** The synthetic shell route `buildEmbeddedPreset` prepends to every manifest. */
|
|
129
|
-
const EMBEDDED_APP_SHELL_FILE = "embedded/app.js";
|
|
130
128
|
/**
|
|
131
129
|
* Total bytes of the artifacts the embedded manifest declares.
|
|
132
130
|
*
|
|
133
131
|
* The production build reports the size of what it emitted, so the embedded
|
|
134
132
|
* preset reports the same thing rather than leaving the field at zero. The
|
|
135
133
|
* manifest is the artifact list, so it cannot drift from what was written.
|
|
136
|
-
* A file
|
|
137
|
-
*
|
|
138
|
-
*
|
|
134
|
+
* A missing file is skipped because `buildEmbeddedPreset` only warns when an
|
|
135
|
+
* RSC bundle or route fails. Other filesystem errors still fail the build so
|
|
136
|
+
* JSON output cannot report a partial size as a successful result.
|
|
137
|
+
*
|
|
138
|
+
* @internal
|
|
139
139
|
*/
|
|
140
|
-
async function sumEmbeddedOutputSize(outDir, manifest) {
|
|
140
|
+
export async function sumEmbeddedOutputSize(outDir, manifest, fileSystem) {
|
|
141
141
|
const { join } = await import("../../../src/platform/compat/path/index.js");
|
|
142
|
-
const { createFileSystem } = await import("../../../src/platform/index.js");
|
|
143
|
-
const fs = createFileSystem();
|
|
142
|
+
const { createFileSystem, isNotFoundError } = await import("../../../src/platform/index.js");
|
|
143
|
+
const fs = fileSystem ?? createFileSystem();
|
|
144
144
|
const files = new Set(["embedded/manifest.json"]);
|
|
145
145
|
for (const route of manifest.routes)
|
|
146
146
|
files.add(route.file);
|
|
@@ -151,12 +151,19 @@ async function sumEmbeddedOutputSize(outDir, manifest) {
|
|
|
151
151
|
try {
|
|
152
152
|
total += (await fs.stat(join(outDir, file))).size;
|
|
153
153
|
}
|
|
154
|
-
catch {
|
|
155
|
-
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (!isNotFoundError(error))
|
|
156
|
+
throw error;
|
|
157
|
+
// Not emitted, already reported by the preset as a warning.
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
160
|
return total;
|
|
159
161
|
}
|
|
162
|
+
/** @internal */
|
|
163
|
+
export function countEmbeddedPages(manifest, pagesIndexIsShell) {
|
|
164
|
+
return manifest.routes.filter((route) => route.type === "page" &&
|
|
165
|
+
(!pagesIndexIsShell || route.file !== "embedded/pages/index.js")).length;
|
|
166
|
+
}
|
|
160
167
|
/**
|
|
161
168
|
* Run the embedded build, terminating the NDJSON stream ourselves in JSON mode.
|
|
162
169
|
*
|
|
@@ -220,13 +227,14 @@ async function runEmbeddedBuild(projectDir, outputDir) {
|
|
|
220
227
|
cliLogger.info(` ${dim("Output:")} ${finalOutput}`);
|
|
221
228
|
}
|
|
222
229
|
}
|
|
223
|
-
const { manifest } = await buildEmbeddedPreset({
|
|
230
|
+
const { manifest, pagesIndexIsShell } = await buildEmbeddedPreset({
|
|
224
231
|
projectDir,
|
|
225
232
|
outDir: finalOutput,
|
|
226
233
|
runtime: "deno",
|
|
227
234
|
config,
|
|
228
235
|
});
|
|
229
236
|
if (json) {
|
|
237
|
+
const totalSize = await sumEmbeddedOutputSize(finalOutput, manifest);
|
|
230
238
|
const elapsed = Date.now() - startTime;
|
|
231
239
|
streamJsonLine({
|
|
232
240
|
type: "step",
|
|
@@ -240,19 +248,17 @@ async function runEmbeddedBuild(projectDir, outputDir) {
|
|
|
240
248
|
type: "result",
|
|
241
249
|
success: true,
|
|
242
250
|
data: {
|
|
243
|
-
//
|
|
244
|
-
//
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
// the naive count says 3.
|
|
248
|
-
pages: manifest.routes.filter((route) => route.type === "page" && route.file !== EMBEDDED_APP_SHELL_FILE).length,
|
|
251
|
+
// The shell serves `/` and is itself a page. Exclude a discovered Pages
|
|
252
|
+
// index only when that same source supplied the shell. If the App Router
|
|
253
|
+
// supplied the shell, `/index` is a distinct emitted page and still counts.
|
|
254
|
+
pages: countEmbeddedPages(manifest, pagesIndexIsShell),
|
|
249
255
|
// The default path reports 0 for a build with no splitting stage, and
|
|
250
256
|
// the embedded preset has none — which is why `--split` is rejected for
|
|
251
257
|
// it above. Reporting 1 here would answer the same field differently
|
|
252
258
|
// from the command this is supposed to match.
|
|
253
259
|
chunks: 0,
|
|
254
260
|
assets: manifest.assets.length,
|
|
255
|
-
totalSize
|
|
261
|
+
totalSize,
|
|
256
262
|
duration_ms: elapsed,
|
|
257
263
|
outputDir: finalOutput,
|
|
258
264
|
// `--dry-run` is rejected for this preset, so a build that got here ran.
|
package/esm/deno.d.ts
CHANGED
|
@@ -472,6 +472,7 @@ declare namespace _default {
|
|
|
472
472
|
"lint:barrel-jsdoc": string;
|
|
473
473
|
"lint:ban-test-only": string;
|
|
474
474
|
"lint:sanitizer-baseline": string;
|
|
475
|
+
"lint:secret-scanning-config": string;
|
|
475
476
|
"lint:skipped-tests": string;
|
|
476
477
|
"lint:cwd-relative-test-reads": string;
|
|
477
478
|
"lint:anti-slop": string;
|
package/esm/deno.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1242",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"nodeModulesDir": "auto",
|
|
6
6
|
"minimumDependencyAge": {
|
|
@@ -499,7 +499,7 @@ export default {
|
|
|
499
499
|
"build:storybook": "npm --prefix storybook run build-storybook",
|
|
500
500
|
"storybook:check": "deno test --no-lock --config=scripts/test.deno.json --no-check --allow-read scripts/storybook/storybook-workbench.test.ts",
|
|
501
501
|
"lint": "DENO_NO_PACKAGE_JSON=1 deno lint && deno lint --config=scripts/test.deno.json scripts/test/ scripts/build/dnt-meta-property-safety.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.ts scripts/build/dnt-polyfill.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/prepare-framework-sources.test.ts && deno lint --config=scripts/codemods/deno.json scripts/codemods/",
|
|
502
|
-
"lint:ci": "deno task lint && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:client-bundle && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:skipped-tests && deno task lint:chat-ratchets && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:esm-sh-codemod && deno task lint:test-typecheck && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:dnt-meta-properties && deno task storybook:check && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:public:check && deno test --frozen --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run=bash scripts/ci/setup-deno-workflow.test.ts scripts/ci/prepare-rc-build.test.ts scripts/build/generated-artifact-checks.test.ts scripts/release.test.ts",
|
|
502
|
+
"lint:ci": "deno task lint && deno task lint:core-deps && deno task lint:cross-runtime-jsr && deno task lint:dependency-boundaries && deno task lint:module-boundaries && deno task lint:client-bundle && deno task lint:extension-contracts && deno task lint:extension-capabilities && deno task lint:ban-test-only && deno task lint:sanitizer-baseline && deno task lint:secret-scanning-config && deno task lint:skipped-tests && deno task lint:chat-ratchets && deno task lint:chat-composability && deno task lint:rfc-status && deno task lint:esm-sh-codemod && deno task lint:test-typecheck && deno task lint:cwd-relative-test-reads && deno task lint:anti-slop && deno task lint:dnt-meta-properties && deno task storybook:check && deno task docs:api-reference:check && deno task docs:errors:check && deno task docs:public:check && deno test --frozen --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run=bash scripts/ci/setup-deno-workflow.test.ts scripts/ci/prepare-rc-build.test.ts scripts/build/generated-artifact-checks.test.ts scripts/release.test.ts",
|
|
503
503
|
"fmt": "deno fmt src/ cli/ react/ templates/ && deno fmt --config=scripts/test.deno.json scripts/test/ scripts/build/dnt-meta-property-safety.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.ts scripts/build/dnt-polyfill.test.ts scripts/build/prepare-framework-sources.test.ts && deno fmt --config=scripts/codemods/deno.json scripts/codemods/",
|
|
504
504
|
"fmt:check": "deno fmt --check src/ cli/ react/ templates/ && deno fmt --check --config=scripts/test.deno.json scripts/test/ scripts/build/dnt-meta-property-safety.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.ts scripts/build/dnt-polyfill.test.ts scripts/build/prepare-framework-sources.test.ts && deno fmt --check --config=scripts/codemods/deno.json scripts/codemods/",
|
|
505
505
|
"typecheck": "deno task generate:manifests:check && deno check src/index.ts cli/main.ts src/server/index.ts src/routing/api/index.ts src/rendering/index.ts src/platform/index.ts src/platform/adapters/index.ts src/build/index.ts src/build/production-build/index.ts src/transforms/index.ts src/config/index.ts src/utils/index.ts src/data/index.ts src/security/index.ts src/middleware/index.ts src/server/handlers/dev/index.ts src/server/handlers/request/api/index.ts src/rendering/cache/index.ts src/rendering/cache/stores/index.ts src/rendering/rsc/actions/index.ts src/html/index.ts src/html/hydration-script-builder/runtime/main.ts src/modules/index.ts src/proxy/main.ts src/react/components/ui/index.ts src/chat/index.ts src/markdown/index.ts src/mdx/index.ts src/fs/index.ts src/oauth/index.ts src/agent/index.ts src/agent/service/route-export.check.ts src/eval/index.ts src/tool/index.ts src/workflow/index.ts src/prompt/index.ts src/resource/index.ts src/runs/index.ts src/mcp/index.ts src/provider/index.ts",
|
|
@@ -548,11 +548,12 @@ export default {
|
|
|
548
548
|
"lint:barrel-jsdoc": "deno run --allow-read scripts/lint/check-barrel-jsdoc.ts",
|
|
549
549
|
"lint:ban-test-only": "deno run --allow-read scripts/lint/ban-test-only.ts",
|
|
550
550
|
"lint:sanitizer-baseline": "deno run --allow-read scripts/lint/check-sanitizer-baseline.ts",
|
|
551
|
+
"lint:secret-scanning-config": "deno test --frozen --config=scripts/test.deno.json --no-check --allow-read scripts/security/secret-scanning-config.test.ts",
|
|
551
552
|
"lint:skipped-tests": "deno run --allow-read scripts/lint/check-skipped-tests-baseline.ts",
|
|
552
553
|
"lint:cwd-relative-test-reads": "deno run --allow-read scripts/lint/audit-cwd-relative-test-reads.ts",
|
|
553
554
|
"lint:anti-slop": "deno run --allow-read scripts/lint/audit-anti-slop.ts",
|
|
554
555
|
"lint:dnt-meta-properties": "deno run --config=scripts/test.deno.json --frozen --allow-read scripts/build/dnt-meta-property-safety.ts",
|
|
555
|
-
"test:scripts": "deno test --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run scripts/ci/prepare-rc-build.test.ts scripts/ci/publish-npm-packages.test.ts scripts/ci/setup-deno-workflow.test.ts scripts/build/compile-binary.test.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.test.ts scripts/build/generate-sbom.test.ts scripts/build/generated-artifact-checks.test.ts scripts/build/npm-dependency-sources.test.ts scripts/build/npm-extension-package-metadata.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/npm-react-shims.test.ts scripts/build/npm-runtime-helper-contract.test.ts scripts/build/prepare-framework-sources.test.ts scripts/build/report-artifact-sizes.test.ts scripts/build/run-generate.test.ts scripts/docs/docs-coverage.test.ts scripts/docs/generate-api-reference.test.ts scripts/docs/guide-validation.test.ts scripts/lint/audit-chat-composability.test.ts scripts/lint/audit-rfc-status.test.ts scripts/lint/audit-core-deps.test.ts scripts/lint/audit-cwd-relative-test-reads.test.ts scripts/lint/audit-cross-runtime-jsr.test.ts scripts/lint/audit-dependency-boundaries.test.ts scripts/lint/audit-extension-capabilities.test.ts scripts/lint/audit-extension-contracts.test.ts scripts/lint/audit-deps.test.ts scripts/lint/check-module-boundaries.test.ts scripts/lint/lint-config.test.ts scripts/lint/ban-test-only.test.ts scripts/lint/check-sanitizer-baseline.test.ts scripts/lint/check-skipped-tests-baseline.test.ts scripts/lint/audit-anti-slop.test.ts scripts/lint/check-test-typecheck-baseline.test.ts scripts/lint/check-coverage.test.ts scripts/security/audit-npm.test.ts scripts/security/submit-dependency-snapshot.test.ts scripts/test/template-runtime-e2e.test.ts && deno task test:tool-search-live",
|
|
556
|
+
"test:scripts": "deno test --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run scripts/build/feature-files-detection.test.ts scripts/ci/prepare-rc-build.test.ts scripts/ci/publish-npm-packages.test.ts scripts/ci/setup-deno-workflow.test.ts scripts/build/compile-binary.test.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.test.ts scripts/build/generate-sbom.test.ts scripts/build/generated-artifact-checks.test.ts scripts/build/npm-dependency-sources.test.ts scripts/build/npm-extension-package-metadata.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/npm-react-shims.test.ts scripts/build/npm-runtime-helper-contract.test.ts scripts/build/prepare-framework-sources.test.ts scripts/build/report-artifact-sizes.test.ts scripts/build/run-generate.test.ts scripts/docs/docs-coverage.test.ts scripts/docs/generate-api-reference.test.ts scripts/docs/guide-validation.test.ts scripts/lint/audit-chat-composability.test.ts scripts/lint/audit-rfc-status.test.ts scripts/lint/audit-core-deps.test.ts scripts/lint/audit-cwd-relative-test-reads.test.ts scripts/lint/audit-cross-runtime-jsr.test.ts scripts/lint/audit-dependency-boundaries.test.ts scripts/lint/audit-extension-capabilities.test.ts scripts/lint/audit-extension-contracts.test.ts scripts/lint/audit-deps.test.ts scripts/lint/check-module-boundaries.test.ts scripts/lint/lint-config.test.ts scripts/lint/ban-test-only.test.ts scripts/lint/check-sanitizer-baseline.test.ts scripts/lint/check-skipped-tests-baseline.test.ts scripts/lint/audit-anti-slop.test.ts scripts/lint/check-test-typecheck-baseline.test.ts scripts/lint/check-coverage.test.ts scripts/security/audit-npm.test.ts scripts/security/secret-scanning-config.test.ts scripts/security/submit-dependency-snapshot.test.ts scripts/test/template-runtime-e2e.test.ts && deno task test:tool-search-live",
|
|
556
557
|
"test:sentry-runtime-packages": "deno test --config=scripts/test.deno.json --no-check --no-lock --allow-read --allow-write --allow-run --allow-env=DENO_DIR,HOME,XDG_CACHE_HOME,LOCALAPPDATA,USERPROFILE scripts/build/sentry-runtime-packages.test.ts",
|
|
557
558
|
"test:tool-search-live": "VF_DISABLE_LRU_INTERVAL=1 deno test --no-check -A tests/agent/verify-tool-search-live.test.ts",
|
|
558
559
|
"test:cross-runtime": "deno run --allow-all src/platform/compat/cross-runtime.test.ts",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAKpB,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAKpB,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,6BAA6B,CAAC;AAyBrC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,qBAAqB,GACtB,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAmdD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAsF5E;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CAiFlB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IAY7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;CAW9E"}
|
|
@@ -10,7 +10,7 @@ import { buildProviderError, createGoogleRequestInit, createWarningCollector, ge
|
|
|
10
10
|
import { buildGoogleGenerateContentRequest, } from "./google-request-builder.js";
|
|
11
11
|
import { createGoogleToolCallCorrelationRegistry, GOOGLE_CODE_EXECUTION_TOOL_NAME, googleCodeExecutionInput, googleCodeExecutionOutput, readGoogleCodeExecutionResult, readGoogleExecutableCode, readGooglePartDataField, } from "./google-content-parts.js";
|
|
12
12
|
import { readGoogleGroundingMetadata } from "./google-grounding-metadata.js";
|
|
13
|
-
import { createGoogleProviderMetadata, readGoogleThoughtSignature, } from "./google-thought-signatures.js";
|
|
13
|
+
import { createGoogleProviderMetadata, readGoogleThoughtSignature, reconcileGoogleProviderMetadata, } from "./google-thought-signatures.js";
|
|
14
14
|
import { extractGoogleCandidateParts, extractGoogleUsage, normalizeGoogleFinishReason, streamGoogleCompatibleParts, } from "./google-stream.js";
|
|
15
15
|
// Re-export error classes so extension tests can import them from this module
|
|
16
16
|
// and from `veryfront/provider/shared` interchangeably.
|
|
@@ -371,6 +371,9 @@ export function createGoogleModelRuntime(config, modelId) {
|
|
|
371
371
|
modelId,
|
|
372
372
|
specificationVersion: "v3",
|
|
373
373
|
supportedUrls: {},
|
|
374
|
+
_reconcileProviderMetadata(input) {
|
|
375
|
+
return reconcileGoogleProviderMetadata(input.providerMetadata, input.suppressedToolCalls);
|
|
376
|
+
},
|
|
374
377
|
doGenerate(options) {
|
|
375
378
|
const url = getGoogleGenerateContentUrl(config.baseURL, modelId);
|
|
376
379
|
const warnings = createWarningCollector();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAY/C,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChC,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE;QACX,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChD,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"google-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAY/C,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChC,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE;QACX,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChD,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAmzBF,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,QAAQ,EAAE,gBAAgB,GACzB,uBAAuB,CAqDzB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsonValuesEqual, readProviderOptions, readRecord, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
|
|
2
2
|
import { createGoogleToolCallCorrelationRegistry, GOOGLE_CODE_EXECUTION_TOOL_NAME, googleCodeExecutionInput, googleCodeExecutionOutput, readGoogleCodeExecutionResult, readGoogleExecutableCode, readGooglePartDataField, } from "./google-content-parts.js";
|
|
3
|
-
import {
|
|
3
|
+
import { readGoogleRawAssistantReplay } from "./google-thought-signatures.js";
|
|
4
4
|
function invalidGoogleProviderHistory() {
|
|
5
5
|
return new TypeError("Google raw assistant metadata did not match canonical provider tool history");
|
|
6
6
|
}
|
|
7
|
-
function readGoogleRawToolHistory(rawAssistantParts) {
|
|
7
|
+
function readGoogleRawToolHistory(rawAssistantParts, rawAssistantPartIndexes) {
|
|
8
8
|
const registry = createGoogleToolCallCorrelationRegistry();
|
|
9
9
|
const ordinaryCalls = [];
|
|
10
10
|
const legacyOrdinaryCalls = [];
|
|
@@ -30,7 +30,7 @@ function readGoogleRawToolHistory(rawAssistantParts) {
|
|
|
30
30
|
throw invalidGoogleProviderHistory();
|
|
31
31
|
}
|
|
32
32
|
const providerId = typeof functionCall.id === "string" ? functionCall.id : undefined;
|
|
33
|
-
const id = registry.registerFunctionCall(partIndex, providerId);
|
|
33
|
+
const id = registry.registerFunctionCall(rawAssistantPartIndexes[partIndex] ?? partIndex, providerId);
|
|
34
34
|
// Histories persisted before raw-position ids used the anonymous-call
|
|
35
35
|
// occurrence instead. Build both complete projections so validation
|
|
36
36
|
// cannot accept a mixture that no implementation ever emitted.
|
|
@@ -125,7 +125,7 @@ function survivingToolEvents(events, activeKinds) {
|
|
|
125
125
|
}
|
|
126
126
|
return surviving;
|
|
127
127
|
}
|
|
128
|
-
function validateGoogleToolReplay(message, rawAssistantParts) {
|
|
128
|
+
function validateGoogleToolReplay(message, rawAssistantParts, rawAssistantPartIndexes) {
|
|
129
129
|
const providerToolCalls = (message.providerToolCalls ?? []).map((call) => ({
|
|
130
130
|
id: call.toolCallId,
|
|
131
131
|
name: call.toolName,
|
|
@@ -189,7 +189,7 @@ function validateGoogleToolReplay(message, rawAssistantParts) {
|
|
|
189
189
|
rejectDuplicateIds([...ordinaryCalls, ...canonicalProviderCalls]);
|
|
190
190
|
let rawHistory;
|
|
191
191
|
try {
|
|
192
|
-
rawHistory = readGoogleRawToolHistory(rawAssistantParts);
|
|
192
|
+
rawHistory = readGoogleRawToolHistory(rawAssistantParts, rawAssistantPartIndexes);
|
|
193
193
|
}
|
|
194
194
|
catch {
|
|
195
195
|
throw invalidGoogleProviderHistory();
|
|
@@ -246,10 +246,10 @@ function toGoogleContents(prompt) {
|
|
|
246
246
|
});
|
|
247
247
|
break;
|
|
248
248
|
case "assistant": {
|
|
249
|
-
const
|
|
250
|
-
if (
|
|
251
|
-
validateGoogleToolReplay(message,
|
|
252
|
-
contents.push({ role: "model", parts:
|
|
249
|
+
const rawAssistantReplay = readGoogleRawAssistantReplay(message.providerMetadata);
|
|
250
|
+
if (rawAssistantReplay) {
|
|
251
|
+
validateGoogleToolReplay(message, rawAssistantReplay.parts, rawAssistantReplay.partIndexes);
|
|
252
|
+
contents.push({ role: "model", parts: rawAssistantReplay.parts });
|
|
253
253
|
break;
|
|
254
254
|
}
|
|
255
255
|
const parts = [];
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
export declare const MAX_GOOGLE_PROVIDER_METADATA_BYTES: number;
|
|
2
2
|
export declare function readGoogleThoughtSignature(part: Record<string, unknown>): string | undefined;
|
|
3
|
-
export declare function createGoogleProviderMetadata(parts: Array<Record<string, unknown>>, groundingMetadata?: Record<string, unknown
|
|
3
|
+
export declare function createGoogleProviderMetadata(parts: Array<Record<string, unknown>>, groundingMetadata?: Record<string, unknown>, rawAssistantPartIndexes?: readonly number[]): Record<string, unknown> | undefined;
|
|
4
|
+
export type GoogleRawAssistantReplay = {
|
|
5
|
+
parts: readonly Record<string, unknown>[];
|
|
6
|
+
partIndexes: readonly number[];
|
|
7
|
+
};
|
|
8
|
+
export declare function readGoogleRawAssistantReplay(providerMetadata: Record<string, unknown> | undefined): GoogleRawAssistantReplay | undefined;
|
|
4
9
|
export declare function readGoogleRawAssistantParts(providerMetadata: Record<string, unknown> | undefined): readonly Record<string, unknown>[] | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Remove provider tool parts that the runtime deliberately suppressed while
|
|
12
|
+
* preserving the exact signed parts for every surviving Google tool call.
|
|
13
|
+
*/
|
|
14
|
+
export declare function reconcileGoogleProviderMetadata(providerMetadata: Record<string, unknown>, suppressedToolCalls: readonly {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
}[]): Record<string, unknown> | undefined;
|
|
5
18
|
//# sourceMappingURL=google-thought-signatures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-thought-signatures.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-thought-signatures.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"google-thought-signatures.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-thought-signatures.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AA6OlE,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,SAAS,CASpB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA2CrC;AAuGD,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACpD,wBAAwB,GAAG,SAAS,CAiCtC;AAED,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACpD,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAEhD;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,mBAAmB,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAC3D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAqErC"}
|
|
@@ -2,6 +2,7 @@ import { readRecord, snapshotProviderJsonValue, } from "../../../src/provider/sh
|
|
|
2
2
|
import { createGoogleToolCallCorrelationRegistry, readGoogleCodeExecutionResult, readGoogleExecutableCode, readGooglePartDataField, } from "./google-content-parts.js";
|
|
3
3
|
const GOOGLE_METADATA_KEY = "google";
|
|
4
4
|
const RAW_ASSISTANT_PARTS_KEY = "rawAssistantParts";
|
|
5
|
+
const RAW_ASSISTANT_PART_INDEXES_KEY = "rawAssistantPartIndexes";
|
|
5
6
|
const GROUNDING_METADATA_KEY = "groundingMetadata";
|
|
6
7
|
const MAX_GOOGLE_RAW_ASSISTANT_PARTS = 4_096;
|
|
7
8
|
export const MAX_GOOGLE_PROVIDER_METADATA_BYTES = 8 * 1024 * 1024;
|
|
@@ -57,6 +58,28 @@ function readGoogleRawPartsValue(googleMetadata) {
|
|
|
57
58
|
}
|
|
58
59
|
return descriptor.value;
|
|
59
60
|
}
|
|
61
|
+
function readGoogleRawPartIndexesValue(googleMetadata) {
|
|
62
|
+
if (googleMetadata === null ||
|
|
63
|
+
typeof googleMetadata !== "object" ||
|
|
64
|
+
Array.isArray(googleMetadata)) {
|
|
65
|
+
throw new TypeError("Google provider metadata must be an object");
|
|
66
|
+
}
|
|
67
|
+
let descriptor;
|
|
68
|
+
try {
|
|
69
|
+
descriptor = Object.getOwnPropertyDescriptor(googleMetadata, RAW_ASSISTANT_PART_INDEXES_KEY);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new TypeError("Google provider metadata could not be inspected");
|
|
73
|
+
}
|
|
74
|
+
if (descriptor === undefined) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
if (descriptor.enumerable !== true ||
|
|
78
|
+
!Object.hasOwn(descriptor, "value")) {
|
|
79
|
+
throw new TypeError("Google raw assistant part indexes must be an enumerable data property");
|
|
80
|
+
}
|
|
81
|
+
return descriptor.value;
|
|
82
|
+
}
|
|
60
83
|
function hasGoogleReplayTriggerProperty(part, key) {
|
|
61
84
|
let descriptor;
|
|
62
85
|
try {
|
|
@@ -176,7 +199,7 @@ export function readGoogleThoughtSignature(part) {
|
|
|
176
199
|
}
|
|
177
200
|
return signature;
|
|
178
201
|
}
|
|
179
|
-
export function createGoogleProviderMetadata(parts, groundingMetadata) {
|
|
202
|
+
export function createGoogleProviderMetadata(parts, groundingMetadata, rawAssistantPartIndexes) {
|
|
180
203
|
const needsExactReplay = needsGoogleExactReplay(parts);
|
|
181
204
|
if (!needsExactReplay && groundingMetadata === undefined) {
|
|
182
205
|
return undefined;
|
|
@@ -190,11 +213,18 @@ export function createGoogleProviderMetadata(parts, groundingMetadata) {
|
|
|
190
213
|
if (partsSnapshot.length > MAX_GOOGLE_RAW_ASSISTANT_PARTS) {
|
|
191
214
|
throw new TypeError(`Google raw assistant parts exceeded ${MAX_GOOGLE_RAW_ASSISTANT_PARTS} entries`);
|
|
192
215
|
}
|
|
193
|
-
|
|
216
|
+
const ownedPartIndexes = rawAssistantPartIndexes === undefined
|
|
217
|
+
? undefined
|
|
218
|
+
: validateGoogleRawAssistantPartIndexes(snapshotGoogleProviderMetadata(rawAssistantPartIndexes), partsSnapshot.length);
|
|
219
|
+
ownedParts = validateGoogleRawAssistantParts(partsSnapshot, ownedPartIndexes);
|
|
220
|
+
rawAssistantPartIndexes = ownedPartIndexes;
|
|
194
221
|
}
|
|
195
222
|
const metadata = snapshotGoogleProviderMetadata({
|
|
196
223
|
[GOOGLE_METADATA_KEY]: {
|
|
197
224
|
...(needsExactReplay ? { [RAW_ASSISTANT_PARTS_KEY]: ownedParts } : {}),
|
|
225
|
+
...(needsExactReplay && rawAssistantPartIndexes !== undefined
|
|
226
|
+
? { [RAW_ASSISTANT_PART_INDEXES_KEY]: rawAssistantPartIndexes }
|
|
227
|
+
: {}),
|
|
198
228
|
...(groundingMetadata !== undefined ? { [GROUNDING_METADATA_KEY]: groundingMetadata } : {}),
|
|
199
229
|
},
|
|
200
230
|
});
|
|
@@ -204,7 +234,7 @@ export function createGoogleProviderMetadata(parts, groundingMetadata) {
|
|
|
204
234
|
}
|
|
205
235
|
return metadataRecord;
|
|
206
236
|
}
|
|
207
|
-
function validateGoogleRawAssistantParts(rawParts) {
|
|
237
|
+
function validateGoogleRawAssistantParts(rawParts, rawPartIndexes) {
|
|
208
238
|
if (rawParts.length === 0) {
|
|
209
239
|
throw new TypeError("Google raw assistant parts must be a non-empty array");
|
|
210
240
|
}
|
|
@@ -231,7 +261,7 @@ function validateGoogleRawAssistantParts(rawParts) {
|
|
|
231
261
|
const functionCall = readRecord(part.functionCall);
|
|
232
262
|
const functionCallId = typeof functionCall?.id === "string" ? functionCall.id : undefined;
|
|
233
263
|
try {
|
|
234
|
-
toolCallRegistry.registerFunctionCall(partIndex, functionCallId);
|
|
264
|
+
toolCallRegistry.registerFunctionCall(rawPartIndexes?.[partIndex] ?? partIndex, functionCallId);
|
|
235
265
|
}
|
|
236
266
|
catch {
|
|
237
267
|
throw new TypeError("Google raw assistant tool call id was duplicated");
|
|
@@ -273,7 +303,24 @@ function validateGoogleRawAssistantParts(rawParts) {
|
|
|
273
303
|
// a shallow collection whose contents could diverge before serialization.
|
|
274
304
|
return rawParts;
|
|
275
305
|
}
|
|
276
|
-
|
|
306
|
+
function validateGoogleRawAssistantPartIndexes(value, partCount) {
|
|
307
|
+
if (!Array.isArray(value) || value.length !== partCount) {
|
|
308
|
+
throw new TypeError("Google raw assistant part indexes must match the raw parts");
|
|
309
|
+
}
|
|
310
|
+
let previous = -1;
|
|
311
|
+
for (const index of value) {
|
|
312
|
+
if (typeof index !== "number" ||
|
|
313
|
+
!Number.isSafeInteger(index) ||
|
|
314
|
+
index <= previous ||
|
|
315
|
+
index < 0 ||
|
|
316
|
+
index >= MAX_GOOGLE_RAW_ASSISTANT_PARTS) {
|
|
317
|
+
throw new TypeError("Google raw assistant part indexes must be increasing safe integers");
|
|
318
|
+
}
|
|
319
|
+
previous = index;
|
|
320
|
+
}
|
|
321
|
+
return value;
|
|
322
|
+
}
|
|
323
|
+
export function readGoogleRawAssistantReplay(providerMetadata) {
|
|
277
324
|
if (providerMetadata === undefined) {
|
|
278
325
|
return undefined;
|
|
279
326
|
}
|
|
@@ -282,15 +329,87 @@ export function readGoogleRawAssistantParts(providerMetadata) {
|
|
|
282
329
|
return undefined;
|
|
283
330
|
}
|
|
284
331
|
const rawParts = readGoogleRawPartsValue(rawGoogleMetadata);
|
|
332
|
+
const rawPartIndexes = readGoogleRawPartIndexesValue(rawGoogleMetadata);
|
|
285
333
|
if (rawParts === undefined) {
|
|
334
|
+
if (rawPartIndexes !== undefined) {
|
|
335
|
+
throw new TypeError("Google raw assistant part indexes require raw parts");
|
|
336
|
+
}
|
|
286
337
|
return undefined;
|
|
287
338
|
}
|
|
288
|
-
// Grounding and future Google metadata fields are not replayed. Snapshot
|
|
289
|
-
// only the exact wire value that will be validated and transmitted so those
|
|
290
|
-
// independent fields cannot consume replay budgets or invoke accessors.
|
|
291
339
|
const rawPartsSnapshot = snapshotGoogleProviderMetadata(rawParts);
|
|
292
340
|
if (!Array.isArray(rawPartsSnapshot)) {
|
|
293
341
|
throw new TypeError("Google raw assistant parts must be a non-empty array");
|
|
294
342
|
}
|
|
295
|
-
|
|
343
|
+
const partIndexes = rawPartIndexes === undefined
|
|
344
|
+
? rawPartsSnapshot.map((_part, index) => index)
|
|
345
|
+
: validateGoogleRawAssistantPartIndexes(snapshotGoogleProviderMetadata(rawPartIndexes), rawPartsSnapshot.length);
|
|
346
|
+
return {
|
|
347
|
+
parts: validateGoogleRawAssistantParts(rawPartsSnapshot, partIndexes),
|
|
348
|
+
partIndexes,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
export function readGoogleRawAssistantParts(providerMetadata) {
|
|
352
|
+
return readGoogleRawAssistantReplay(providerMetadata)?.parts;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Remove provider tool parts that the runtime deliberately suppressed while
|
|
356
|
+
* preserving the exact signed parts for every surviving Google tool call.
|
|
357
|
+
*/
|
|
358
|
+
export function reconcileGoogleProviderMetadata(providerMetadata, suppressedToolCalls) {
|
|
359
|
+
if (suppressedToolCalls.length === 0) {
|
|
360
|
+
return providerMetadata;
|
|
361
|
+
}
|
|
362
|
+
const replay = readGoogleRawAssistantReplay(providerMetadata);
|
|
363
|
+
if (replay === undefined) {
|
|
364
|
+
return providerMetadata;
|
|
365
|
+
}
|
|
366
|
+
const { partIndexes, parts: rawAssistantParts } = replay;
|
|
367
|
+
const suppressedIds = new Set(suppressedToolCalls.map((toolCall) => toolCall.id));
|
|
368
|
+
const matchedSuppressedIds = new Set();
|
|
369
|
+
const retainedParts = [];
|
|
370
|
+
const retainedPartIndexes = [];
|
|
371
|
+
const registry = createGoogleToolCallCorrelationRegistry();
|
|
372
|
+
let retainedToolPart = false;
|
|
373
|
+
for (let partIndex = 0; partIndex < rawAssistantParts.length; partIndex += 1) {
|
|
374
|
+
const part = rawAssistantParts[partIndex];
|
|
375
|
+
if (part === undefined) {
|
|
376
|
+
throw new TypeError("Google raw assistant parts must be dense");
|
|
377
|
+
}
|
|
378
|
+
const dataField = readGooglePartDataField(part);
|
|
379
|
+
let toolCallId;
|
|
380
|
+
if (dataField === "functionCall") {
|
|
381
|
+
const functionCall = readRecord(part.functionCall);
|
|
382
|
+
const providerId = typeof functionCall?.id === "string" ? functionCall.id : undefined;
|
|
383
|
+
toolCallId = registry.registerFunctionCall(partIndexes[partIndex] ?? partIndex, providerId);
|
|
384
|
+
}
|
|
385
|
+
else if (dataField === "executableCode") {
|
|
386
|
+
const executableCode = readGoogleExecutableCode(part.executableCode);
|
|
387
|
+
toolCallId = registry.registerCodeExecution(executableCode.providerId);
|
|
388
|
+
}
|
|
389
|
+
else if (dataField === "codeExecutionResult") {
|
|
390
|
+
const result = readGoogleCodeExecutionResult(part.codeExecutionResult);
|
|
391
|
+
toolCallId = registry.resolveCodeExecutionResult(result.providerId);
|
|
392
|
+
}
|
|
393
|
+
if (toolCallId !== undefined && suppressedIds.has(toolCallId)) {
|
|
394
|
+
matchedSuppressedIds.add(toolCallId);
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
retainedParts.push(part);
|
|
398
|
+
retainedPartIndexes.push(partIndexes[partIndex] ?? partIndex);
|
|
399
|
+
retainedToolPart ||= dataField === "functionCall" ||
|
|
400
|
+
dataField === "executableCode" ||
|
|
401
|
+
dataField === "codeExecutionResult";
|
|
402
|
+
}
|
|
403
|
+
registry.assertSettled();
|
|
404
|
+
if (matchedSuppressedIds.size === 0) {
|
|
405
|
+
return providerMetadata;
|
|
406
|
+
}
|
|
407
|
+
if (retainedParts.length === 0) {
|
|
408
|
+
return undefined;
|
|
409
|
+
}
|
|
410
|
+
const reconciled = createGoogleProviderMetadata(retainedParts, undefined, retainedPartIndexes);
|
|
411
|
+
if (reconciled === undefined && retainedToolPart) {
|
|
412
|
+
throw new TypeError("Google provider metadata could not preserve a surviving signed tool call");
|
|
413
|
+
}
|
|
414
|
+
return reconciled;
|
|
296
415
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-chat-stream.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-stream.ts"],"names":[],"mappings":"AA2BA,KAAK,4BAA4B,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAExE,KAAK,uBAAuB,GAAG;IAC7B,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AASF,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AA4KlD,wBAAuB,2BAA2B,CAChD,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,OAAO,GAAE,uBAA4B,GACpC,aAAa,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"openai-chat-stream.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-stream.ts"],"names":[],"mappings":"AA2BA,KAAK,4BAA4B,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAExE,KAAK,uBAAuB,GAAG;IAC7B,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AASF,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AA4KlD,wBAAuB,2BAA2B,CAChD,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,OAAO,GAAE,uBAA4B,GACpC,aAAa,CAAC,OAAO,CAAC,CAyVxB"}
|
|
@@ -186,10 +186,13 @@ export async function* streamOpenAICompatibleParts(stream, context = {}) {
|
|
|
186
186
|
if (!Array.isArray(record.choices)) {
|
|
187
187
|
throw invalidOpenAIStream(context, "choices was not an array");
|
|
188
188
|
}
|
|
189
|
+
// An empty `choices` array carries no content. Usage-only frames use this
|
|
190
|
+
// shape, and so does Azure OpenAI's `prompt_filter_results` preamble, which
|
|
191
|
+
// arrives before the first content chunk with neither choices nor usage.
|
|
192
|
+
// Both are informational, so skip the frame instead of failing the stream.
|
|
193
|
+
// The `choices` key being absent entirely is still rejected above — that is
|
|
194
|
+
// a malformed event rather than a content-free one.
|
|
189
195
|
if (record.choices.length === 0) {
|
|
190
|
-
if (!usageRecord) {
|
|
191
|
-
throw invalidOpenAIStream(context, "empty choices event had no usage");
|
|
192
|
-
}
|
|
193
196
|
return;
|
|
194
197
|
}
|
|
195
198
|
if (sawFinishReason) {
|
|
@@ -219,11 +222,16 @@ export async function* streamOpenAICompatibleParts(stream, context = {}) {
|
|
|
219
222
|
}
|
|
220
223
|
delta = deltaRecord;
|
|
221
224
|
}
|
|
222
|
-
|
|
225
|
+
// Optional delta fields are `null` rather than absent on many
|
|
226
|
+
// OpenAI-compatible gateways (Moonshot/Kimi sends `reasoning_content: null`
|
|
227
|
+
// on both the opening and the finish chunk). Treat `null` as "not present
|
|
228
|
+
// on this chunk", matching how `content`, `refusal`, `tool_calls`, and
|
|
229
|
+
// `finish_reason` are already handled below.
|
|
230
|
+
if (delta.role !== undefined && delta.role !== null &&
|
|
223
231
|
delta.role !== "assistant") {
|
|
224
232
|
throw invalidOpenAIStream(context, "choice delta role was not assistant");
|
|
225
233
|
}
|
|
226
|
-
if (delta.reasoning_content !== undefined &&
|
|
234
|
+
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null &&
|
|
227
235
|
typeof delta.reasoning_content !== "string") {
|
|
228
236
|
throw invalidOpenAIStream(context, "reasoning delta was malformed");
|
|
229
237
|
}
|
|
@@ -272,11 +280,15 @@ export async function* streamOpenAICompatibleParts(stream, context = {}) {
|
|
|
272
280
|
throw invalidOpenAIStream(context, "tool call index was malformed");
|
|
273
281
|
}
|
|
274
282
|
const toolCallIndex = index;
|
|
275
|
-
|
|
283
|
+
// As with the reasoning delta above, gateways repeat `id`, `type`, and
|
|
284
|
+
// `function.name` as `null` on continuation fragments instead of omitting
|
|
285
|
+
// them; only the opening fragment carries real values. Treat `null` as
|
|
286
|
+
// absent so the fragment merges into the call already being assembled.
|
|
287
|
+
if (toolCallRecord.id !== undefined && toolCallRecord.id !== null &&
|
|
276
288
|
!isBoundedOpenAIStreamString(toolCallRecord.id, MAX_OPENAI_STREAM_IDENTIFIER_BYTES)) {
|
|
277
289
|
throw invalidOpenAIStream(context, "tool call id was malformed");
|
|
278
290
|
}
|
|
279
|
-
if (toolCallRecord.type !== undefined &&
|
|
291
|
+
if (toolCallRecord.type !== undefined && toolCallRecord.type !== null &&
|
|
280
292
|
toolCallRecord.type !== "function") {
|
|
281
293
|
throw invalidOpenAIStream(context, "tool call type was not function");
|
|
282
294
|
}
|
|
@@ -306,7 +318,7 @@ export async function* streamOpenAICompatibleParts(stream, context = {}) {
|
|
|
306
318
|
if (!fn) {
|
|
307
319
|
throw invalidOpenAIStream(context, "tool call function was not an object");
|
|
308
320
|
}
|
|
309
|
-
if (fn.name !== undefined &&
|
|
321
|
+
if (fn.name !== undefined && fn.name !== null &&
|
|
310
322
|
!isBoundedOpenAIStreamString(fn.name, MAX_OPENAI_STREAM_TOOL_NAME_BYTES)) {
|
|
311
323
|
throw invalidOpenAIStream(context, "tool call function name was malformed");
|
|
312
324
|
}
|
|
@@ -324,7 +336,8 @@ export async function* streamOpenAICompatibleParts(stream, context = {}) {
|
|
|
324
336
|
toolName: current.name,
|
|
325
337
|
};
|
|
326
338
|
}
|
|
327
|
-
if (fn.arguments !== undefined &&
|
|
339
|
+
if (fn.arguments !== undefined && fn.arguments !== null &&
|
|
340
|
+
typeof fn.arguments !== "string") {
|
|
328
341
|
throw invalidOpenAIStream(context, "tool call arguments delta was malformed");
|
|
329
342
|
}
|
|
330
343
|
if (typeof fn.arguments === "string") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAOpB,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,kCAAkC,CAAC;AA2B1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,GAChC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAOpB,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,kCAAkC,CAAC;AA2B1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,GAChC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAs7BD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAgF5E;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CA0F5E;AAwDD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CA2ClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IAgC7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAa7E,eAAe,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;CAY9E"}
|