@juspay/neurolink 9.63.1 → 9.64.0

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/adapters/video/vertexVideoHandler.js +9 -2
  3. package/dist/browser/neurolink.min.js +1014 -1018
  4. package/dist/cli/factories/commandFactory.d.ts +14 -0
  5. package/dist/cli/factories/commandFactory.js +50 -25
  6. package/dist/cli/loop/optionsSchema.d.ts +1 -1
  7. package/dist/cli/loop/optionsSchema.js +12 -0
  8. package/dist/core/baseProvider.d.ts +1 -1
  9. package/dist/core/modules/MessageBuilder.js +20 -0
  10. package/dist/factories/providerRegistry.js +5 -1
  11. package/dist/lib/adapters/video/vertexVideoHandler.js +9 -2
  12. package/dist/lib/core/baseProvider.d.ts +1 -1
  13. package/dist/lib/core/modules/MessageBuilder.js +20 -0
  14. package/dist/lib/factories/providerRegistry.js +5 -1
  15. package/dist/lib/memory/hippocampusInitializer.d.ts +2 -2
  16. package/dist/lib/memory/hippocampusInitializer.js +32 -2
  17. package/dist/lib/middleware/builtin/lifecycle.js +19 -48
  18. package/dist/lib/neurolink.js +49 -2
  19. package/dist/lib/providers/googleAiStudio.d.ts +11 -3
  20. package/dist/lib/providers/googleAiStudio.js +292 -339
  21. package/dist/lib/providers/googleNativeGemini3.d.ts +83 -1
  22. package/dist/lib/providers/googleNativeGemini3.js +208 -4
  23. package/dist/lib/providers/googleVertex.d.ts +116 -129
  24. package/dist/lib/providers/googleVertex.js +2826 -1968
  25. package/dist/lib/providers/openRouter.js +7 -3
  26. package/dist/lib/types/aliases.d.ts +14 -0
  27. package/dist/lib/types/common.d.ts +0 -3
  28. package/dist/lib/types/conversation.d.ts +10 -3
  29. package/dist/lib/types/generate.d.ts +14 -0
  30. package/dist/lib/types/index.d.ts +1 -0
  31. package/dist/lib/types/index.js +1 -0
  32. package/dist/lib/types/memory.d.ts +96 -0
  33. package/dist/lib/types/memory.js +23 -0
  34. package/dist/lib/types/providers.d.ts +140 -2
  35. package/dist/lib/types/stream.d.ts +6 -0
  36. package/dist/lib/utils/lifecycleCallbacks.d.ts +13 -0
  37. package/dist/lib/utils/lifecycleCallbacks.js +44 -0
  38. package/dist/lib/utils/messageBuilder.d.ts +10 -0
  39. package/dist/lib/utils/messageBuilder.js +40 -5
  40. package/dist/lib/utils/modelDetection.d.ts +11 -0
  41. package/dist/lib/utils/modelDetection.js +27 -0
  42. package/dist/lib/utils/providerHealth.js +7 -7
  43. package/dist/lib/utils/schemaConversion.d.ts +1 -1
  44. package/dist/lib/utils/schemaConversion.js +59 -4
  45. package/dist/lib/utils/tokenLimits.js +23 -32
  46. package/dist/memory/hippocampusInitializer.d.ts +2 -2
  47. package/dist/memory/hippocampusInitializer.js +32 -2
  48. package/dist/middleware/builtin/lifecycle.js +19 -48
  49. package/dist/neurolink.js +49 -2
  50. package/dist/providers/googleAiStudio.d.ts +11 -3
  51. package/dist/providers/googleAiStudio.js +291 -339
  52. package/dist/providers/googleNativeGemini3.d.ts +83 -1
  53. package/dist/providers/googleNativeGemini3.js +208 -4
  54. package/dist/providers/googleVertex.d.ts +116 -129
  55. package/dist/providers/googleVertex.js +2824 -1967
  56. package/dist/providers/openRouter.js +7 -3
  57. package/dist/types/aliases.d.ts +14 -0
  58. package/dist/types/common.d.ts +0 -3
  59. package/dist/types/conversation.d.ts +10 -3
  60. package/dist/types/generate.d.ts +14 -0
  61. package/dist/types/index.d.ts +1 -0
  62. package/dist/types/index.js +1 -0
  63. package/dist/types/memory.d.ts +96 -0
  64. package/dist/types/memory.js +22 -0
  65. package/dist/types/providers.d.ts +140 -2
  66. package/dist/types/stream.d.ts +6 -0
  67. package/dist/utils/lifecycleCallbacks.d.ts +13 -0
  68. package/dist/utils/lifecycleCallbacks.js +43 -0
  69. package/dist/utils/messageBuilder.d.ts +10 -0
  70. package/dist/utils/messageBuilder.js +40 -5
  71. package/dist/utils/modelDetection.d.ts +11 -0
  72. package/dist/utils/modelDetection.js +27 -0
  73. package/dist/utils/providerHealth.js +7 -7
  74. package/dist/utils/schemaConversion.d.ts +1 -1
  75. package/dist/utils/schemaConversion.js +59 -4
  76. package/dist/utils/tokenLimits.js +23 -32
  77. package/package.json +11 -4
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Model detection utilities for capability checking
3
3
  */
4
+ import { IMAGE_GENERATION_MODELS } from "../core/constants.js";
4
5
  /**
5
6
  * Check if model name is valid for detection functions
6
7
  */
@@ -78,3 +79,29 @@ export function getModelFamily(modelName) {
78
79
  }
79
80
  return "unknown";
80
81
  }
82
+ // Compiled once at module load — hasRestrictedOutputLimit() is called per
83
+ // request and previously rebuilt this array on every call.
84
+ const IMAGE_MODEL_PATTERNS = IMAGE_GENERATION_MODELS.map((m) => new RegExp(`^${m.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i"));
85
+ /**
86
+ * Check if a model has restricted output token limit (32768 max)
87
+ * This applies to:
88
+ * - All Gemini 3 models (gemini-3-flash, gemini-3-pro, etc.)
89
+ * - Image generation models (gemini-2.5-flash-image, gemini-3-pro-image-preview)
90
+ */
91
+ export function hasRestrictedOutputLimit(modelName) {
92
+ if (!isValidModelName(modelName)) {
93
+ return false;
94
+ }
95
+ // Check for Gemini 3 models (anchored regex for consistency)
96
+ if (/^gemini-3/i.test(modelName)) {
97
+ return true;
98
+ }
99
+ if (IMAGE_MODEL_PATTERNS.some((pattern) => pattern.test(modelName))) {
100
+ return true;
101
+ }
102
+ return false;
103
+ }
104
+ /**
105
+ * Get the max output tokens for a model (32768 for restricted models)
106
+ */
107
+ export const RESTRICTED_OUTPUT_TOKEN_LIMIT = 32768;
@@ -349,7 +349,7 @@ export class ProviderHealthChecker {
349
349
  ` • claude-sonnet-4@20250514, claude-opus-4@20250514\n` +
350
350
  ` • claude-3-5-sonnet-20241022, claude-3-5-haiku-20241022\n` +
351
351
  ` • claude-3-sonnet-20240229, claude-3-haiku-20240307, claude-3-opus-20240229\n` +
352
- ` Implementation: Uses @ai-sdk/google-vertex with dual provider setup\n` +
352
+ ` Implementation: Uses native SDKs (@google/genai for Gemini, @anthropic-ai/vertex-sdk for Claude)\n` +
353
353
  ` Authentication: Requires Google Cloud project with Vertex AI API enabled\n` +
354
354
  ` Note: Anthropic models require Anthropic integration in your Google Cloud project`);
355
355
  }
@@ -969,13 +969,13 @@ export class ProviderHealthChecker {
969
969
  logger.debug("Starting comprehensive Vertex Anthropic support verification");
970
970
  try {
971
971
  // 1. Check SDK module availability
972
- logger.debug("Checking @ai-sdk/google-vertex/anthropic module availability");
973
- const anthropicModule = await import("@ai-sdk/google-vertex/anthropic");
972
+ logger.debug("Checking @anthropic-ai/vertex-sdk module availability");
973
+ const anthropicModule = await import("@anthropic-ai/vertex-sdk");
974
974
  result.hasCreateVertexAnthropic =
975
- typeof anthropicModule.createVertexAnthropic === "function";
976
- result.hasCorrectTypes = true; // Types are bundled with the function
975
+ typeof anthropicModule.AnthropicVertex === "function";
976
+ result.hasCorrectTypes = true; // Types are bundled with the class
977
977
  if (!result.hasCreateVertexAnthropic) {
978
- result.troubleshooting.push("📦 Update @ai-sdk/google-vertex to latest version with Anthropic support", "🔄 Run: npm install @ai-sdk/google-vertex@latest", "📖 See: https://sdk.vercel.ai/providers/ai-sdk-providers/google-vertex#anthropic-models");
978
+ result.troubleshooting.push("📦 Install @anthropic-ai/vertex-sdk for Claude on Vertex AI support", "🔄 Run: npm install @anthropic-ai/vertex-sdk", "📖 See: https://docs.anthropic.com/en/api/claude-on-vertex-ai");
979
979
  return result;
980
980
  }
981
981
  logger.debug("SDK module verified successfully");
@@ -1065,7 +1065,7 @@ export class ProviderHealthChecker {
1065
1065
  error: error instanceof Error ? error.message : String(error),
1066
1066
  stack: error instanceof Error ? error.stack : undefined,
1067
1067
  });
1068
- result.recommendations.push("❌ Comprehensive Anthropic support check failed", `🐛 Error: ${error instanceof Error ? error.message : String(error)}`, "", "🔧 Troubleshooting steps:", "1. Update @ai-sdk/google-vertex to latest version", "2. Verify Google Cloud authentication setup", "3. Check project ID and region configuration", "4. Enable Vertex AI API in Google Cloud Console", "5. Enable Anthropic integration in Vertex AI Model Garden");
1068
+ result.recommendations.push("❌ Comprehensive Anthropic support check failed", `🐛 Error: ${error instanceof Error ? error.message : String(error)}`, "", "🔧 Troubleshooting steps:", "1. Verify @google-cloud/vertexai and @anthropic-ai/vertex-sdk are properly installed", "2. Verify Google Cloud authentication setup", "3. Check project ID and region configuration", "4. Enable Vertex AI API in Google Cloud Console", "5. Enable Anthropic integration in Vertex AI Model Garden");
1069
1069
  }
1070
1070
  return result;
1071
1071
  }
@@ -27,7 +27,7 @@ export declare function ensureNestedSchemaTypes(schema: Record<string, unknown>)
27
27
  * 2. AI SDK `jsonSchema()` wrappers (have `.jsonSchema` property) -- extracted directly
28
28
  * 3. Plain JSON Schema objects (have `type`/`properties` but no `_def`) -- returned as-is
29
29
  */
30
- export declare function convertZodToJsonSchema(zodSchema: ZodUnknownSchema): object;
30
+ export declare function convertZodToJsonSchema(zodSchema: ZodUnknownSchema, target?: "jsonSchema7" | "openApi3"): object;
31
31
  export declare function normalizeJsonSchemaObject(schema: Record<string, unknown> | undefined | null): Record<string, unknown>;
32
32
  /**
33
33
  * Check if a value is a Zod schema
@@ -1,7 +1,25 @@
1
1
  import { zodToJsonSchema } from "zod-to-json-schema";
2
2
  import { jsonSchemaToZod } from "json-schema-to-zod";
3
+ import * as zodModule from "zod";
3
4
  import { z } from "zod";
4
5
  import { logger } from "./logger.js";
6
+ // Zod 4 ships a built-in `z.toJSONSchema(...)`. Zod 3 does not — it returned
7
+ // nothing of the sort and we relied entirely on `zod-to-json-schema`. The
8
+ // `zod-to-json-schema` package only understands Zod 3's internal `_def`
9
+ // shape, so feeding it a Zod 4 schema yields an empty `{}` (it silently
10
+ // produces `definitions: { ToolParameters: {} }`). When this happens
11
+ // downstream callers send an empty `responseSchema` to the model and get
12
+ // back arbitrary JSON, which is exactly how the Vertex Structured-Output
13
+ // regressions surfaced. Detect the Zod 4 helper at module load and prefer
14
+ // it for actual Zod schemas.
15
+ // Zod 4 spells the OpenAPI target as "openapi-3.0" (with a dot) while the
16
+ // third-party zod-to-json-schema package uses "openApi3". Internally we use
17
+ // the latter for backwards compatibility with existing call sites; this map
18
+ // translates to the dialect Zod 4 actually accepts. The Zod4Native* types
19
+ // live in src/lib/types/aliases.ts per project rule 2.
20
+ const zodToJsonSchemaV4 = typeof zodModule.toJSONSchema === "function"
21
+ ? zodModule.toJSONSchema
22
+ : undefined;
5
23
  /**
6
24
  * Resolve a deep JSON pointer path within a schema.
7
25
  * Handles paths like "#/definitions/ToolParameters/properties/foo/properties/bar"
@@ -96,7 +114,12 @@ export function inlineJsonSchema(schema, definitions, visited = new Set(), rootS
96
114
  visited.delete(refPath);
97
115
  return inlined;
98
116
  }
99
- logger.debug(`[SCHEMA-INLINE] Could not resolve $ref: ${refPath}`);
117
+ // Unresolved $ref: warn and preserve the original node verbatim. Falling
118
+ // through to the copy loop below would strip the $ref key and silently
119
+ // turn a ref-only node into an empty {}, which broadens validation
120
+ // instead of failing closed.
121
+ logger.warn(`[SCHEMA-INLINE] Could not resolve $ref: ${refPath}`);
122
+ return { ...schema };
100
123
  }
101
124
  // Create result without $ref and definitions
102
125
  const result = {};
@@ -279,7 +302,12 @@ export function ensureNestedSchemaTypes(schema) {
279
302
  * 2. AI SDK `jsonSchema()` wrappers (have `.jsonSchema` property) -- extracted directly
280
303
  * 3. Plain JSON Schema objects (have `type`/`properties` but no `_def`) -- returned as-is
281
304
  */
282
- export function convertZodToJsonSchema(zodSchema) {
305
+ export function convertZodToJsonSchema(zodSchema,
306
+ // Default to JSON Schema draft-07 so non-Vertex consumers (Bedrock, MCP
307
+ // tool registration, etc.) keep their pre-migration dialect. Vertex/Gemini
308
+ // callers opt into "openApi3" explicitly to get `nullable: true` instead
309
+ // of `anyOf: [..., {type: "null"}]`.
310
+ target = "jsonSchema7") {
283
311
  const schema = zodSchema;
284
312
  if (!schema || typeof schema !== "object") {
285
313
  return { type: "object", properties: {} };
@@ -295,14 +323,41 @@ export function convertZodToJsonSchema(zodSchema) {
295
323
  if (!isZodSchema(schema)) {
296
324
  return ensureNestedSchemaTypes(ensureTypeField(schema));
297
325
  }
298
- // Actual Zod schema — convert via zod-to-json-schema
326
+ // Actual Zod schema — prefer Zod 4's native `z.toJSONSchema` when
327
+ // available (the runtime version of `zod` here is Zod 4), then fall
328
+ // back to `zod-to-json-schema` for Zod 3 schemas that external callers
329
+ // might still pass in.
330
+ //
331
+ // Translate our `target` to Zod 4's native dialect identifier so the
332
+ // openApi3 path emits the OpenAPI 3 schema shape Vertex/Gemini expect
333
+ // (and not the default draft-07 anyOf/null union).
334
+ if (zodToJsonSchemaV4) {
335
+ const nativeTarget = target === "openApi3" ? "openapi-3.0" : "draft-07";
336
+ try {
337
+ const native = zodToJsonSchemaV4(zodSchema, {
338
+ target: nativeTarget,
339
+ });
340
+ // Drop the $schema metadata Vertex/Gemini doesn't need, then walk to
341
+ // backfill any missing nested types (Zod 4's output is already flat
342
+ // — no $defs/$ref by default — but the helper is cheap and matches
343
+ // the Zod 3 path's contract).
344
+ const flat = { ...native };
345
+ delete flat.$schema;
346
+ const inlined = inlineJsonSchema(flat);
347
+ return ensureNestedSchemaTypes(ensureTypeField(inlined));
348
+ }
349
+ catch (error) {
350
+ logger.warn("Native z.toJSONSchema failed; falling back to zod-to-json-schema", { error: error instanceof Error ? error.message : String(error) });
351
+ }
352
+ }
353
+ // Zod 3 fallback path
299
354
  try {
300
355
  // Zod 4→3 boundary: zodToJsonSchema types reference Zod 3's ZodSchema via zod/v3.
301
356
  // Runtime compatible — cast through unknown at this third-party boundary only.
302
357
  const zodV3Schema = zodSchema;
303
358
  const jsonSchema = zodToJsonSchema(zodV3Schema, {
304
359
  name: "ToolParameters",
305
- target: "openApi3", // Use OpenAPI 3.0 for nullable: true instead of anyOf with null (required for Vertex AI)
360
+ target,
306
361
  errorMessages: true,
307
362
  });
308
363
  // zodToJsonSchema with 'name' produces { $ref: "#/definitions/ToolParameters", definitions: {...} }
@@ -2,30 +2,14 @@
2
2
  * Provider-specific token limit utilities
3
3
  * Provides safe maxTokens values based on provider and model capabilities
4
4
  */
5
- import { PROVIDER_MAX_TOKENS, IMAGE_GENERATION_MODELS, } from "../core/constants.js";
5
+ import { PROVIDER_MAX_TOKENS } from "../core/constants.js";
6
6
  import { logger } from "./logger.js";
7
- // Gemini 3 models and Gemini 2.5 image models have a hard limit of 32768 output tokens
8
- const GEMINI_RESTRICTED_MAX_OUTPUT_TOKENS = 32768;
9
- /**
10
- * Check if a model has the restricted 32768 output token limit
11
- * This applies to:
12
- * - All Gemini 3 models (gemini-3-flash, gemini-3-pro, etc.)
13
- * - All Gemini 2.5 image generation models (gemini-2.5-flash-image)
14
- */
15
- function hasRestrictedOutputLimit(model) {
16
- if (!model) {
17
- return false;
18
- }
19
- // Check for Gemini 3 models
20
- if (model.includes("gemini-3")) {
21
- return true;
22
- }
23
- // Check for image generation models (includes gemini-2.5-flash-image)
24
- if (IMAGE_GENERATION_MODELS.some((m) => model.includes(m))) {
25
- return true;
26
- }
27
- return false;
28
- }
7
+ import { hasRestrictedOutputLimit, RESTRICTED_OUTPUT_TOKEN_LIMIT, } from "./modelDetection.js";
8
+ // Restricted-model detection (Gemini 3.x + image-gen models capped at 32768
9
+ // output tokens) lives in modelDetection.ts. Importing the canonical helper
10
+ // keeps both call sites on one definition; the previous local copy used
11
+ // case-sensitive substring matches and could miss identifiers like
12
+ // "Gemini-3-Pro" which the canonical anchored, case-insensitive regex matches.
29
13
  /**
30
14
  * Get the safe maximum tokens for a provider and model
31
15
  */
@@ -33,19 +17,19 @@ export function getSafeMaxTokens(provider, model, requestedMaxTokens) {
33
17
  // CRITICAL: Gemini 3 models AND image generation models have a hard limit of 32768 output tokens
34
18
  // This check must happen FIRST, before any other logic, because these models
35
19
  // will reject requests with maxOutputTokens > 32768
36
- const isRestrictedModel = hasRestrictedOutputLimit(model);
20
+ const isRestrictedModel = model ? hasRestrictedOutputLimit(model) : false;
37
21
  if (isRestrictedModel) {
38
22
  // Explicit undefined/null check so a caller-supplied 0 is preserved
39
- // (truthy checks would treat 0 as "unset" and silently fall back to the cap).
23
+ // (truthy guards would treat 0 as "unset" and silently fall back to the cap).
40
24
  if (requestedMaxTokens !== undefined &&
41
25
  requestedMaxTokens !== null &&
42
- requestedMaxTokens > GEMINI_RESTRICTED_MAX_OUTPUT_TOKENS) {
43
- logger.warn(`Requested maxTokens ${requestedMaxTokens} exceeds ${model} limit of ${GEMINI_RESTRICTED_MAX_OUTPUT_TOKENS}. Using ${GEMINI_RESTRICTED_MAX_OUTPUT_TOKENS} instead.`);
44
- return GEMINI_RESTRICTED_MAX_OUTPUT_TOKENS;
26
+ requestedMaxTokens > RESTRICTED_OUTPUT_TOKEN_LIMIT) {
27
+ logger.warn(`Requested maxTokens ${requestedMaxTokens} exceeds ${model} limit of ${RESTRICTED_OUTPUT_TOKEN_LIMIT}. Using ${RESTRICTED_OUTPUT_TOKEN_LIMIT} instead.`);
28
+ return RESTRICTED_OUTPUT_TOKEN_LIMIT;
45
29
  }
46
30
  // If no maxTokens specified, use the restricted limit as default
47
31
  if (requestedMaxTokens === undefined || requestedMaxTokens === null) {
48
- return GEMINI_RESTRICTED_MAX_OUTPUT_TOKENS;
32
+ return RESTRICTED_OUTPUT_TOKEN_LIMIT;
49
33
  }
50
34
  // Otherwise, use the requested value (it's within limits, including 0)
51
35
  return requestedMaxTokens;
@@ -54,7 +38,12 @@ export function getSafeMaxTokens(provider, model, requestedMaxTokens) {
54
38
  const providerLimits = PROVIDER_MAX_TOKENS[provider];
55
39
  if (!providerLimits) {
56
40
  logger.warn(`Unknown provider ${provider}, no token limits enforced`);
57
- return requestedMaxTokens || undefined; // No default limit for unknown providers
41
+ // Explicit undefined/null check so a caller-supplied 0 is preserved
42
+ // (truthy guard would silently drop 0 here as it does in the restricted branch).
43
+ if (requestedMaxTokens === undefined || requestedMaxTokens === null) {
44
+ return undefined;
45
+ }
46
+ return requestedMaxTokens;
58
47
  }
59
48
  // Get model-specific limit or provider default
60
49
  let maxLimit;
@@ -73,8 +62,10 @@ export function getSafeMaxTokens(provider, model, requestedMaxTokens) {
73
62
  else {
74
63
  maxLimit = PROVIDER_MAX_TOKENS.default;
75
64
  }
76
- // If no specific maxTokens requested, return the provider limit
77
- if (!requestedMaxTokens) {
65
+ // If no specific maxTokens requested, return the provider limit.
66
+ // Use explicit undefined/null so a caller-supplied 0 is preserved
67
+ // (matches the restricted-model branch above).
68
+ if (requestedMaxTokens === undefined || requestedMaxTokens === null) {
78
69
  return maxLimit;
79
70
  }
80
71
  // If requested maxTokens exceeds the limit, use the limit and warn
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/neurolink",
3
- "version": "9.63.1",
3
+ "version": "9.64.0",
4
4
  "packageManager": "pnpm@10.15.1",
5
5
  "description": "Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applications with 21+ providers: OpenAI, Anthropic, Google AI Studio, Google Vertex, AWS Bedrock, Azure OpenAI, Mistral, LiteLLM, SageMaker, Hugging Face, Ollama, OpenAI-compatible, OpenRouter, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus voice (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech).",
6
6
  "author": {
@@ -36,6 +36,7 @@
36
36
  "build:cli:bundle:minify": "node scripts/bundle-cli.mjs --minify",
37
37
  "build:action": "ncc build src/action/index.ts -o action-dist --source-map",
38
38
  "build:cli:link": "pnpm run build:cli && pnpm link --global",
39
+ "check:deps": "tsx scripts/check-banned-deps.ts",
39
40
  "cli": "node dist/cli/index.js",
40
41
  "preview": "vite preview",
41
42
  "prepare": "git rev-parse --git-dir > /dev/null 2>&1 && husky install || echo 'Skipping husky in non-git environment'",
@@ -82,6 +83,7 @@
82
83
  "test:rag": "npx tsx test/continuous-test-suite-rag.ts",
83
84
  "test:servers": "npx tsx test/continuous-test-suite-servers.ts",
84
85
  "test:tool-reliability": "npx tsx test/continuous-test-suite-tool-reliability.ts",
86
+ "test:google-native": "npx tsx test/continuous-test-suite-google-native.ts",
85
87
  "test:tracing": "npx tsx test/continuous-test-suite-tracing.ts",
86
88
  "test:tts": "npx tsx test/continuous-test-suite-tts.ts",
87
89
  "test:voice": "npx tsx test/continuous-test-suite-voice.ts",
@@ -207,19 +209,19 @@
207
209
  "dependencies": {
208
210
  "@ai-sdk/anthropic": "^3.0.50",
209
211
  "@ai-sdk/azure": "^3.0.38",
210
- "@ai-sdk/google": "^3.0.34",
211
- "@ai-sdk/google-vertex": "^4.0.68",
212
212
  "@ai-sdk/mistral": "^3.0.21",
213
213
  "@ai-sdk/openai": "^3.0.37",
214
214
  "@ai-sdk/provider": "^3.0.8",
215
+ "@anthropic-ai/vertex-sdk": "^0.16.0",
215
216
  "@aws-sdk/client-bedrock": "^3.1000.0",
216
217
  "@aws-sdk/client-bedrock-runtime": "^3.1000.0",
217
218
  "@aws-sdk/client-sagemaker-runtime": "^3.1000.0",
219
+ "@aws-sdk/credential-provider-node": "^3.886.0",
220
+ "@aws-sdk/types": "^3.862.0",
218
221
  "@google-cloud/text-to-speech": "^6.4.0",
219
222
  "@google-cloud/vertexai": "^1.10.0",
220
223
  "@google/genai": "^1.43.0",
221
224
  "@huggingface/inference": "^4.13.14",
222
- "@juspay/hippocampus": "^0.1.4",
223
225
  "@modelcontextprotocol/sdk": "^1.27.1",
224
226
  "@openrouter/ai-sdk-provider": "^2.2.3",
225
227
  "@opentelemetry/api-logs": "^0.214.0",
@@ -258,12 +260,16 @@
258
260
  "zod-to-json-schema": "^3.25.1"
259
261
  },
260
262
  "peerDependencies": {
263
+ "@juspay/hippocampus": ">=0.1.4",
261
264
  "@opentelemetry/api": "^1.9.0",
262
265
  "@opentelemetry/sdk-trace-node": "^2.0.0",
263
266
  "react": ">=18.0.0",
264
267
  "react-dom": ">=18.0.0"
265
268
  },
266
269
  "peerDependenciesMeta": {
270
+ "@juspay/hippocampus": {
271
+ "optional": true
272
+ },
267
273
  "react": {
268
274
  "optional": true
269
275
  },
@@ -324,6 +330,7 @@
324
330
  "@types/cors": "^2.8.19",
325
331
  "@types/express": "^5.0.6",
326
332
  "@types/fluent-ffmpeg": "^2.1.28",
333
+ "@juspay/hippocampus": "^0.1.6",
327
334
  "@types/inquirer": "^9.0.9",
328
335
  "@types/js-yaml": "^4.0.9",
329
336
  "@types/koa": "^3.0.1",