From 2cfe1b9aa59a50828ab6bcacabd7bd33330f7c5d Mon Sep 17 00:00:00 2001 From: chris7iu Date: Mon, 22 Dec 2025 21:24:21 +0800 Subject: [PATCH] Rename max_data_size to max_response_size in API and documentation, and enhance error handling in executeTool function. --- README.md | 4 ++-- package-lock.json | 8 ++++++-- src/api/client.test.ts | 6 +++--- src/index.ts | 10 ++++++++-- src/tools/execute.test.ts | 18 +++++++++--------- src/tools/execute.ts | 6 +++--- src/types.ts | 10 +++++----- 7 files changed, 36 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 6b9afe4..ff46876 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ Execute a discovered tool with specific parameters. | `search_id` | string | ✓ | Search ID from the search that found this tool | | `params_to_tool` | string | ✓ | JSON string of parameters to pass to the tool | | `session_id` | string | | Session identifier (auto-generated if omitted) | -| `max_data_size` | number | | Max response size in bytes (default: 20480) | +| `max_response_size` | number | | Max response size in bytes (default: 20480) | **Example:** @@ -153,7 +153,7 @@ If not provided, the SDK automatically generates and maintains a session ID for ### Large Responses -When tool output exceeds `max_data_size`, you'll receive: +When tool output exceeds `max_response_size`, you'll receive: ```json { diff --git a/package-lock.json b/package-lock.json index b65f02c..3f3a976 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@qverisai/sdk", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@qverisai/sdk", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.0.0", @@ -780,6 +780,7 @@ "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -1328,6 +1329,7 @@ "resolved": "https://registry.npmmirror.com/express/-/express-5.1.0.tgz", "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", @@ -2267,6 +2269,7 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -2453,6 +2456,7 @@ "resolved": "https://registry.npmmirror.com/zod/-/zod-4.1.13.tgz", "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/api/client.test.ts b/src/api/client.test.ts index ffc06ac..95726de 100644 --- a/src/api/client.test.ts +++ b/src/api/client.test.ts @@ -202,7 +202,7 @@ describe('QverisClient', () => { ); }); - it('should include max_data_size when provided', async () => { + it('should include max_response_size when provided', async () => { fetchMock.mockResolvedValueOnce({ ok: true, json: async () => ({ @@ -217,7 +217,7 @@ describe('QverisClient', () => { await client.executeTool('tool-1', { search_id: 'search-123', parameters: {}, - max_data_size: 102400, + max_response_size: 102400, }); expect(fetchMock).toHaveBeenCalledWith( @@ -226,7 +226,7 @@ describe('QverisClient', () => { body: JSON.stringify({ search_id: 'search-123', parameters: {}, - max_data_size: 102400, + max_response_size: 102400, }), }) ); diff --git a/src/index.ts b/src/index.ts index dfb4ac5..a7d2ba9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -224,13 +224,19 @@ async function main(): Promise { }; } - // Handle other errors + // Handle other errors (including fetch network errors) + const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; + const errorCause = error instanceof Error && error.cause instanceof Error + ? error.cause.message + : undefined; + return { content: [ { type: 'text', text: JSON.stringify({ - error: error instanceof Error ? error.message : 'Unknown error occurred', + error: errorMessage, + ...(errorCause && { cause: errorCause }), }), }, ], diff --git a/src/tools/execute.test.ts b/src/tools/execute.test.ts index 00d76ba..7d8562c 100644 --- a/src/tools/execute.test.ts +++ b/src/tools/execute.test.ts @@ -27,9 +27,9 @@ describe('execute_tool', () => { expect(executeToolSchema.properties.params_to_tool.type).toBe('string'); }); - it('should define max_data_size with default', () => { - expect(executeToolSchema.properties.max_data_size.type).toBe('number'); - expect(executeToolSchema.properties.max_data_size.default).toBe(20480); + it('should define max_response_size with default', () => { + expect(executeToolSchema.properties.max_response_size.type).toBe('number'); + expect(executeToolSchema.properties.max_response_size.default).toBe(20480); }); it('should define session_id as optional', () => { @@ -79,7 +79,7 @@ describe('execute_tool', () => { search_id: 'search-123', session_id: 'default-session', parameters: { city: 'Tokyo', units: 'metric' }, - max_data_size: undefined, + max_response_size: undefined, }); expect(result).toEqual(mockResponse); @@ -109,11 +109,11 @@ describe('execute_tool', () => { search_id: 'search-123', session_id: 'custom-session', parameters: {}, - max_data_size: undefined, + max_response_size: undefined, }); }); - it('should pass max_data_size when provided', async () => { + it('should pass max_response_size when provided', async () => { executeToolMock.mockResolvedValueOnce({ execution_id: 'exec-123', tool_id: 'tool-1', @@ -128,7 +128,7 @@ describe('execute_tool', () => { tool_id: 'tool-1', search_id: 'search-123', params_to_tool: '{}', - max_data_size: 102400, + max_response_size: 102400, }, 'default-session' ); @@ -137,7 +137,7 @@ describe('execute_tool', () => { search_id: 'search-123', session_id: 'default-session', parameters: {}, - max_data_size: 102400, + max_response_size: 102400, }); }); @@ -201,7 +201,7 @@ describe('execute_tool', () => { search_id: 'search-123', session_id: 'default-session', parameters: complexParams, - max_data_size: undefined, + max_response_size: undefined, }); }); diff --git a/src/tools/execute.ts b/src/tools/execute.ts index dcec8c4..9317fe6 100644 --- a/src/tools/execute.ts +++ b/src/tools/execute.ts @@ -49,7 +49,7 @@ export interface ExecuteToolInput { * @default 20480 (20KB) * @minimum -1 (-1 means no limit) */ - max_data_size?: number; + max_response_size?: number; } /** @@ -83,7 +83,7 @@ export const executeToolSchema = { 'Session identifier for tracking user sessions. ' + 'If not provided, an auto-generated session ID will be used.', }, - max_data_size: { + max_response_size: { type: 'number', description: 'Maximum size of response data in bytes. ' + @@ -124,7 +124,7 @@ export async function executeExecuteTool( search_id: input.search_id, session_id: input.session_id ?? defaultSessionId, parameters, - max_data_size: input.max_data_size, + max_response_size: input.max_response_size, }); return response; diff --git a/src/types.ts b/src/types.ts index 5105b90..a663dc6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -158,7 +158,7 @@ export interface SearchResponse { * search_id: "abc123", * session_id: "user-session-123", * parameters: { city: "London", units: "metric" }, - * max_data_size: 20480 + * max_response_size: 20480 * }; * ``` */ @@ -188,11 +188,11 @@ export interface ExecuteRequest { * @default 20480 (20KB) * @minimum -1 (-1 means no limit) */ - max_data_size?: number; + max_response_size?: number; } /** - * Result data when the response fits within max_data_size. + * Result data when the response fits within max_response_size. */ export interface ExecuteResultData { /** The actual result data from the tool execution */ @@ -200,7 +200,7 @@ export interface ExecuteResultData { } /** - * Result data when the response exceeds max_data_size. + * Result data when the response exceeds max_response_size. * Provides truncated content and a URL to download the full result. */ export interface ExecuteResultTruncated { @@ -214,7 +214,7 @@ export interface ExecuteResultTruncated { full_content_file_url: string; /** - * The initial portion of the response (max_data_size bytes). + * The initial portion of the response (max_response_size bytes). * Useful for previewing the data structure. */ truncated_content: string;