From 0e9255b122f3bf6ab8093785da8f36c98d8ef7a5 Mon Sep 17 00:00:00 2001 From: "mingholy.lmh" Date: Fri, 5 Dec 2025 21:27:12 +0800 Subject: [PATCH 1/3] fix: integration test scripts --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7fd726c6..563de8f7 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,8 @@ "test:integration:sandbox:none": "cross-env GEMINI_SANDBOX=false vitest run --root ./integration-tests", "test:integration:sandbox:docker": "cross-env GEMINI_SANDBOX=docker npm run build:sandbox && GEMINI_SANDBOX=docker vitest run --root ./integration-tests", "test:integration:sandbox:podman": "cross-env GEMINI_SANDBOX=podman vitest run --root ./integration-tests", - "test:integration:sdk:sandbox:none": "cross-env GEMINI_SANDBOX=false vitest run --root ./integration-tests --dir sdk-typescript", - "test:integration:sdk:sandbox:docker": "cross-env GEMINI_SANDBOX=docker npm run build:sandbox && GEMINI_SANDBOX=docker vitest run --root ./integration-tests --dir sdk-typescript", + "test:integration:sdk:sandbox:none": "cross-env GEMINI_SANDBOX=false vitest run --root ./integration-tests sdk-typescript", + "test:integration:sdk:sandbox:docker": "cross-env GEMINI_SANDBOX=docker npm run build:sandbox && GEMINI_SANDBOX=docker vitest run --root ./integration-tests sdk-typescript", "test:integration:cli:sandbox:none": "cross-env GEMINI_SANDBOX=false vitest run --root ./integration-tests --exclude '**/sdk-typescript/**'", "test:integration:cli:sandbox:docker": "cross-env GEMINI_SANDBOX=docker npm run build:sandbox && GEMINI_SANDBOX=docker vitest run --root ./integration-tests --exclude '**/sdk-typescript/**'", "test:terminal-bench": "cross-env VERBOSE=true KEEP_OUTPUT=true vitest run --config ./vitest.terminal-bench.config.ts --root ./integration-tests", From 96d458fa8c78766809042a39a71b113a872f77f8 Mon Sep 17 00:00:00 2001 From: "mingholy.lmh" Date: Fri, 5 Dec 2025 21:47:26 +0800 Subject: [PATCH 2/3] chore: rename `@qwen-code/sdk-typescript` to `@qwen-code/sdk` --- .github/workflows/release-sdk.yml | 2 +- .../abort-and-lifecycle.test.ts | 2 +- .../configuration-options.test.ts | 2 +- .../sdk-typescript/mcp-server.test.ts | 2 +- .../sdk-typescript/multi-turn.test.ts | 2 +- .../sdk-typescript/permission-control.test.ts | 2 +- .../sdk-typescript/sdk-mcp-server.test.ts | 2 +- .../sdk-typescript/single-turn.test.ts | 2 +- .../sdk-typescript/subagents.test.ts | 2 +- .../sdk-typescript/system-control.test.ts | 2 +- .../sdk-typescript/test-helper.ts | 4 ++-- .../sdk-typescript/tool-control.test.ts | 6 +----- integration-tests/tsconfig.json | 4 +--- integration-tests/vitest.config.ts | 2 +- package-lock.json | 4 ++-- packages/sdk-typescript/README.md | 20 +++++++++---------- packages/sdk-typescript/package.json | 2 +- .../scripts/get-release-version.js | 2 +- .../src/mcp/createSdkMcpServer.ts | 2 +- packages/sdk-typescript/src/mcp/tool.ts | 2 +- 20 files changed, 31 insertions(+), 37 deletions(-) diff --git a/.github/workflows/release-sdk.yml b/.github/workflows/release-sdk.yml index 18d4f13f..69192520 100644 --- a/.github/workflows/release-sdk.yml +++ b/.github/workflows/release-sdk.yml @@ -202,7 +202,7 @@ jobs: registry-url: 'https://registry.npmjs.org' scope: '@qwen-code' - - name: 'Publish @qwen-code/sdk-typescript' + - name: 'Publish @qwen-code/sdk' working-directory: 'packages/sdk-typescript' run: |- npm publish --access public --tag=${{ steps.version.outputs.NPM_TAG }} ${{ steps.vars.outputs.is_dry_run == 'true' && '--dry-run' || '' }} diff --git a/integration-tests/sdk-typescript/abort-and-lifecycle.test.ts b/integration-tests/sdk-typescript/abort-and-lifecycle.test.ts index b0b4c3fd..93005d4b 100644 --- a/integration-tests/sdk-typescript/abort-and-lifecycle.test.ts +++ b/integration-tests/sdk-typescript/abort-and-lifecycle.test.ts @@ -13,7 +13,7 @@ import { isSDKAssistantMessage, type TextBlock, type ContentBlock, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, createSharedTestOptions } from './test-helper.js'; const SHARED_TEST_OPTIONS = createSharedTestOptions(); diff --git a/integration-tests/sdk-typescript/configuration-options.test.ts b/integration-tests/sdk-typescript/configuration-options.test.ts index 9b958a50..bc59cd79 100644 --- a/integration-tests/sdk-typescript/configuration-options.test.ts +++ b/integration-tests/sdk-typescript/configuration-options.test.ts @@ -17,7 +17,7 @@ import { isSDKAssistantMessage, isSDKSystemMessage, type SDKMessage, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, extractText, diff --git a/integration-tests/sdk-typescript/mcp-server.test.ts b/integration-tests/sdk-typescript/mcp-server.test.ts index 110c1924..9b3f2193 100644 --- a/integration-tests/sdk-typescript/mcp-server.test.ts +++ b/integration-tests/sdk-typescript/mcp-server.test.ts @@ -19,7 +19,7 @@ import { type SDKMessage, type ToolUseBlock, type SDKSystemMessage, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, createMCPServer, diff --git a/integration-tests/sdk-typescript/multi-turn.test.ts b/integration-tests/sdk-typescript/multi-turn.test.ts index 17b6f675..c1b96cc7 100644 --- a/integration-tests/sdk-typescript/multi-turn.test.ts +++ b/integration-tests/sdk-typescript/multi-turn.test.ts @@ -21,7 +21,7 @@ import { type SDKMessage, type ControlMessage, type ToolUseBlock, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, createSharedTestOptions } from './test-helper.js'; const SHARED_TEST_OPTIONS = createSharedTestOptions(); diff --git a/integration-tests/sdk-typescript/permission-control.test.ts b/integration-tests/sdk-typescript/permission-control.test.ts index adeb6792..fd096c49 100644 --- a/integration-tests/sdk-typescript/permission-control.test.ts +++ b/integration-tests/sdk-typescript/permission-control.test.ts @@ -22,7 +22,7 @@ import { type SDKUserMessage, type ToolUseBlock, type ContentBlock, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, createSharedTestOptions, diff --git a/integration-tests/sdk-typescript/sdk-mcp-server.test.ts b/integration-tests/sdk-typescript/sdk-mcp-server.test.ts index b389d46a..354c6539 100644 --- a/integration-tests/sdk-typescript/sdk-mcp-server.test.ts +++ b/integration-tests/sdk-typescript/sdk-mcp-server.test.ts @@ -22,7 +22,7 @@ import { isSDKSystemMessage, type SDKMessage, type SDKSystemMessage, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, extractText, diff --git a/integration-tests/sdk-typescript/single-turn.test.ts b/integration-tests/sdk-typescript/single-turn.test.ts index 61bbf7e2..3608e619 100644 --- a/integration-tests/sdk-typescript/single-turn.test.ts +++ b/integration-tests/sdk-typescript/single-turn.test.ts @@ -13,7 +13,7 @@ import { type SDKMessage, type SDKSystemMessage, type SDKAssistantMessage, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, extractText, diff --git a/integration-tests/sdk-typescript/subagents.test.ts b/integration-tests/sdk-typescript/subagents.test.ts index 86516053..c327c96e 100644 --- a/integration-tests/sdk-typescript/subagents.test.ts +++ b/integration-tests/sdk-typescript/subagents.test.ts @@ -17,7 +17,7 @@ import { type SubagentConfig, type ContentBlock, type ToolUseBlock, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, extractText, diff --git a/integration-tests/sdk-typescript/system-control.test.ts b/integration-tests/sdk-typescript/system-control.test.ts index 069eccd9..0b0a74d3 100644 --- a/integration-tests/sdk-typescript/system-control.test.ts +++ b/integration-tests/sdk-typescript/system-control.test.ts @@ -9,7 +9,7 @@ import { isSDKAssistantMessage, isSDKSystemMessage, type SDKUserMessage, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { SDKTestHelper, createSharedTestOptions } from './test-helper.js'; const SHARED_TEST_OPTIONS = createSharedTestOptions(); diff --git a/integration-tests/sdk-typescript/test-helper.ts b/integration-tests/sdk-typescript/test-helper.ts index cd95051f..f3005655 100644 --- a/integration-tests/sdk-typescript/test-helper.ts +++ b/integration-tests/sdk-typescript/test-helper.ts @@ -21,12 +21,12 @@ import type { ContentBlock, TextBlock, ToolUseBlock, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; import { isSDKAssistantMessage, isSDKSystemMessage, isSDKResultMessage, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; // ============================================================================ // Core Test Helper Class diff --git a/integration-tests/sdk-typescript/tool-control.test.ts b/integration-tests/sdk-typescript/tool-control.test.ts index 036d779e..b2b955a6 100644 --- a/integration-tests/sdk-typescript/tool-control.test.ts +++ b/integration-tests/sdk-typescript/tool-control.test.ts @@ -12,11 +12,7 @@ */ import { describe, it, expect, beforeEach, afterEach } from 'vitest'; -import { - query, - isSDKAssistantMessage, - type SDKMessage, -} from '@qwen-code/sdk-typescript'; +import { query, isSDKAssistantMessage, type SDKMessage } from '@qwen-code/sdk'; import { SDKTestHelper, extractText, diff --git a/integration-tests/tsconfig.json b/integration-tests/tsconfig.json index 7f2a010d..0cd24f82 100644 --- a/integration-tests/tsconfig.json +++ b/integration-tests/tsconfig.json @@ -5,9 +5,7 @@ "allowJs": true, "baseUrl": ".", "paths": { - "@qwen-code/sdk-typescript": [ - "../packages/sdk-typescript/dist/index.d.ts" - ] + "@qwen-code/sdk": ["../packages/sdk-typescript/dist/index.d.ts"] } }, "include": ["**/*.ts"], diff --git a/integration-tests/vitest.config.ts b/integration-tests/vitest.config.ts index a452583c..9be72f50 100644 --- a/integration-tests/vitest.config.ts +++ b/integration-tests/vitest.config.ts @@ -31,7 +31,7 @@ export default defineConfig({ resolve: { alias: { // Use built SDK bundle for e2e tests - '@qwen-code/sdk-typescript': resolve( + '@qwen-code/sdk': resolve( __dirname, '../packages/sdk-typescript/dist/index.mjs', ), diff --git a/package-lock.json b/package-lock.json index 53fe9d46..f3bb0cad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2793,7 +2793,7 @@ "resolved": "packages/test-utils", "link": true }, - "node_modules/@qwen-code/sdk-typescript": { + "node_modules/@qwen-code/sdk": { "resolved": "packages/sdk-typescript", "link": true }, @@ -16676,7 +16676,7 @@ } }, "packages/sdk-typescript": { - "name": "@qwen-code/sdk-typescript", + "name": "@qwen-code/sdk", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { diff --git a/packages/sdk-typescript/README.md b/packages/sdk-typescript/README.md index 38f5a375..de161396 100644 --- a/packages/sdk-typescript/README.md +++ b/packages/sdk-typescript/README.md @@ -1,4 +1,4 @@ -# @qwen-code/sdk-typescript +# @qwen-code/sdk A minimum experimental TypeScript SDK for programmatic access to Qwen Code. @@ -7,7 +7,7 @@ Feel free to submit a feature request/issue/PR. ## Installation ```bash -npm install @qwen-code/sdk-typescript +npm install @qwen-code/sdk ``` ## Requirements @@ -20,7 +20,7 @@ npm install @qwen-code/sdk-typescript ## Quick Start ```typescript -import { query } from '@qwen-code/sdk-typescript'; +import { query } from '@qwen-code/sdk'; // Single-turn query const result = query({ @@ -107,7 +107,7 @@ import { isSDKSystemMessage, isSDKResultMessage, isSDKPartialAssistantMessage, -} from '@qwen-code/sdk-typescript'; +} from '@qwen-code/sdk'; for await (const message of result) { if (isSDKAssistantMessage(message)) { @@ -167,7 +167,7 @@ The SDK supports different permission modes for controlling tool execution: ### Multi-turn Conversation ```typescript -import { query, type SDKUserMessage } from '@qwen-code/sdk-typescript'; +import { query, type SDKUserMessage } from '@qwen-code/sdk'; async function* generateMessages(): AsyncIterable { yield { @@ -201,7 +201,7 @@ for await (const message of result) { ### Custom Permission Handler ```typescript -import { query, type CanUseTool } from '@qwen-code/sdk-typescript'; +import { query, type CanUseTool } from '@qwen-code/sdk'; const canUseTool: CanUseTool = async (toolName, input, { signal }) => { // Allow all read operations @@ -230,7 +230,7 @@ const result = query({ ### With External MCP Servers ```typescript -import { query } from '@qwen-code/sdk-typescript'; +import { query } from '@qwen-code/sdk'; const result = query({ prompt: 'Use the custom tool from my MCP server', @@ -290,7 +290,7 @@ Returns a `McpSdkServerConfigWithInstance` object that can be passed directly to ```typescript import { z } from 'zod'; -import { query, tool, createSdkMcpServer } from '@qwen-code/sdk-typescript'; +import { query, tool, createSdkMcpServer } from '@qwen-code/sdk'; // Define a tool with Zod schema const calculatorTool = tool( @@ -327,7 +327,7 @@ for await (const message of result) { ### Abort a Query ```typescript -import { query, isAbortError } from '@qwen-code/sdk-typescript'; +import { query, isAbortError } from '@qwen-code/sdk'; const abortController = new AbortController(); @@ -359,7 +359,7 @@ try { The SDK provides an `AbortError` class for handling aborted queries: ```typescript -import { AbortError, isAbortError } from '@qwen-code/sdk-typescript'; +import { AbortError, isAbortError } from '@qwen-code/sdk'; try { // ... query operations diff --git a/packages/sdk-typescript/package.json b/packages/sdk-typescript/package.json index 0f234603..b0f35709 100644 --- a/packages/sdk-typescript/package.json +++ b/packages/sdk-typescript/package.json @@ -1,5 +1,5 @@ { - "name": "@qwen-code/sdk-typescript", + "name": "@qwen-code/sdk", "version": "0.1.0", "description": "TypeScript SDK for programmatic access to qwen-code CLI", "main": "./dist/index.cjs", diff --git a/packages/sdk-typescript/scripts/get-release-version.js b/packages/sdk-typescript/scripts/get-release-version.js index 349bfd07..c6b1f665 100644 --- a/packages/sdk-typescript/scripts/get-release-version.js +++ b/packages/sdk-typescript/scripts/get-release-version.js @@ -14,7 +14,7 @@ import { dirname, join } from 'node:path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -const PACKAGE_NAME = '@qwen-code/sdk-typescript'; +const PACKAGE_NAME = '@qwen-code/sdk'; const TAG_PREFIX = 'sdk-typescript-v'; function readJson(filePath) { diff --git a/packages/sdk-typescript/src/mcp/createSdkMcpServer.ts b/packages/sdk-typescript/src/mcp/createSdkMcpServer.ts index c202e612..cf2482d6 100644 --- a/packages/sdk-typescript/src/mcp/createSdkMcpServer.ts +++ b/packages/sdk-typescript/src/mcp/createSdkMcpServer.ts @@ -37,7 +37,7 @@ export type McpSdkServerConfigWithInstance = { * @example * ```typescript * import { z } from 'zod'; - * import { tool, createSdkMcpServer } from '@qwen-code/sdk-typescript'; + * import { tool, createSdkMcpServer } from '@qwen-code/sdk'; * * const calculatorTool = tool( * 'calculate_sum', diff --git a/packages/sdk-typescript/src/mcp/tool.ts b/packages/sdk-typescript/src/mcp/tool.ts index 9616dfc8..53e00399 100644 --- a/packages/sdk-typescript/src/mcp/tool.ts +++ b/packages/sdk-typescript/src/mcp/tool.ts @@ -32,7 +32,7 @@ export type SdkMcpToolDefinition = { * @example * ```typescript * import { z } from 'zod'; - * import { tool } from '@qwen-code/sdk-typescript'; + * import { tool } from '@qwen-code/sdk'; * * const calculatorTool = tool( * 'calculate_sum', From 22943b888d84a24e3ae9503f7b1db21f5c7a953d Mon Sep 17 00:00:00 2001 From: "mingholy.lmh" Date: Fri, 5 Dec 2025 22:11:27 +0800 Subject: [PATCH 3/3] test: clean up integration test by removing unnecessary console logs --- integration-tests/sdk-typescript/sdk-mcp-server.test.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/integration-tests/sdk-typescript/sdk-mcp-server.test.ts b/integration-tests/sdk-typescript/sdk-mcp-server.test.ts index 354c6539..1ce8658e 100644 --- a/integration-tests/sdk-typescript/sdk-mcp-server.test.ts +++ b/integration-tests/sdk-typescript/sdk-mcp-server.test.ts @@ -51,12 +51,6 @@ describe('SDK MCP Server Integration (E2E)', () => { describe('Basic SDK MCP Tool Usage', () => { it('should use SDK MCP tool to perform a simple calculation', async () => { // Define a simple calculator tool using the tool() API with Zod schema - console.log( - z.object({ - a: z.number().describe('First number'), - b: z.number().describe('Second number'), - }), - ); const calculatorTool = tool( 'calculate_sum', 'Calculate the sum of two numbers', @@ -82,7 +76,6 @@ describe('SDK MCP Server Integration (E2E)', () => { options: { ...SHARED_TEST_OPTIONS, cwd: testDir, - stderr: (message) => console.error(message), mcpServers: { 'sdk-calculator': serverConfig, }, @@ -96,7 +89,6 @@ describe('SDK MCP Server Integration (E2E)', () => { try { for await (const message of q) { messages.push(message); - console.log(JSON.stringify(message, null, 2)); if (isSDKAssistantMessage(message)) { const toolUseBlocks = findToolUseBlocks(message, 'calculate_sum'); @@ -172,7 +164,6 @@ describe('SDK MCP Server Integration (E2E)', () => { assistantText += extractText(message.message.content); } } - console.log(JSON.stringify(messages, null, 2)); // Validate tool was called expect(foundToolUse).toBe(true);