mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-20 08:41:36 +00:00
fix(ci): stabilize dead-export ratchet (#105945)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
This commit is contained in:
committed by
GitHub
parent
a5883c33d1
commit
ebe69fd238
@@ -132,6 +132,7 @@ const ignoredTestSupportFiles = [
|
||||
const config = {
|
||||
ignoreFiles: [
|
||||
"scripts/**",
|
||||
"dist/**",
|
||||
"packages/*/dist/**",
|
||||
"**/live-*.ts",
|
||||
"src/secrets/credential-matrix.ts",
|
||||
@@ -141,7 +142,7 @@ const config = {
|
||||
],
|
||||
// Knip's `ignoreFiles` only suppresses unused-file findings. Test helpers
|
||||
// belong in `ignore` so they do not inflate unused-export/type findings.
|
||||
ignore: ["packages/*/dist/**", ...ignoredTestSupportFiles],
|
||||
ignore: ["dist/**", "packages/*/dist/**", ...ignoredTestSupportFiles],
|
||||
workspaces: {
|
||||
".": {
|
||||
entry: rootEntries,
|
||||
|
||||
@@ -1450,10 +1450,6 @@ export const KNIP_UNUSED_EXPORT_BASELINE = [
|
||||
"src/agents/modes/interactive/theme/theme.ts: ThemeColor",
|
||||
"src/agents/openai-completions-compat.ts: resolveOpenAICompletionsCompatDefaults",
|
||||
"src/agents/openai-transport-stream.ts: __testing",
|
||||
"src/agents/openai-transport-stream.ts: buildOpenAIResponsesParams",
|
||||
"src/agents/openai-transport-stream.ts: parseTransportChunkUsage",
|
||||
"src/agents/openai-transport-stream.ts: resolveAzureOpenAIApiVersion",
|
||||
"src/agents/openai-transport-stream.ts: sanitizeTransportPayloadText",
|
||||
"src/agents/openai-transport-stream.ts: testing",
|
||||
"src/agents/openclaw-tools.ts: testing",
|
||||
"src/agents/plugin-model-catalog.ts: PLUGIN_MODEL_CATALOG_FILE",
|
||||
|
||||
@@ -591,8 +591,8 @@
|
||||
"src/agents/model-selection-shared.ts": 1673,
|
||||
"src/agents/models-config.providers.implicit.ts": 580,
|
||||
"src/agents/modes/interactive/theme/theme.ts": 857,
|
||||
"src/agents/openai-completions-transport.ts": 1948,
|
||||
"src/agents/openai-responses-transport.ts": 2602,
|
||||
"src/agents/openai-completions-transport.ts": 1946,
|
||||
"src/agents/openai-responses-transport.ts": 2601,
|
||||
"src/agents/openclaw-tools.ts": 712,
|
||||
"src/agents/provider-attribution.ts": 864,
|
||||
"src/agents/provider-local-service.ts": 786,
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
/**
|
||||
* OpenAI Chat Completions streaming transport.
|
||||
*/
|
||||
import { randomUUID } from "node:crypto";
|
||||
import {
|
||||
convertMessages,
|
||||
@@ -1904,7 +1901,7 @@ export function buildOpenAICompletionsParams(
|
||||
return params;
|
||||
}
|
||||
|
||||
export function parseTransportChunkUsage(
|
||||
function parseTransportChunkUsage(
|
||||
rawUsage: NonNullable<ChatCompletionChunk["usage"]> & { cost?: unknown },
|
||||
model: Model,
|
||||
): MutableAssistantOutput["usage"] {
|
||||
@@ -1943,6 +1940,7 @@ export const completionsTesting = {
|
||||
createSseDoneDetector,
|
||||
createOpenAICompletionsClient,
|
||||
buildOpenAICompletionsClientConfig,
|
||||
parseTransportChunkUsage,
|
||||
processOpenAICompletionsStream,
|
||||
shouldEmitOpenAICompletionsReasoningForModel,
|
||||
};
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
/**
|
||||
* OpenAI Responses streaming transport.
|
||||
*
|
||||
* Handles Responses, Azure variants, tool-call replay, reasoning events, and provider-specific
|
||||
* payload policy before converting SDK streams into OpenClaw assistant events.
|
||||
* OpenAI Responses transport for Azure variants, replay, reasoning, and payload policy.
|
||||
*/
|
||||
import { randomUUID } from "node:crypto";
|
||||
import {
|
||||
@@ -858,7 +855,7 @@ async function createResponsesStreamWithEncryptedContentRetry(params: {
|
||||
}
|
||||
}
|
||||
|
||||
export function resolveAzureOpenAIApiVersion(env = process.env): string {
|
||||
function resolveAzureOpenAIApiVersion(env = process.env): string {
|
||||
return env.AZURE_OPENAI_API_VERSION?.trim() || DEFAULT_AZURE_OPENAI_API_VERSION;
|
||||
}
|
||||
|
||||
@@ -2250,7 +2247,7 @@ function resolveOpenAIResponsesTextFormat(
|
||||
return responseFormat as unknown as ResponseFormatTextConfig;
|
||||
}
|
||||
|
||||
export function buildOpenAIResponsesParams(
|
||||
function buildOpenAIResponsesParams(
|
||||
model: Model,
|
||||
context: Context,
|
||||
options: OpenAIResponsesOptions | undefined,
|
||||
@@ -2577,6 +2574,7 @@ type OpenAIResponsesRequestParams = {
|
||||
export const responsesTesting = {
|
||||
getCompat,
|
||||
assertCodeModeResponsesToolSurface,
|
||||
buildOpenAIResponsesParams,
|
||||
buildOpenAIClientHeaders,
|
||||
buildOpenAISdkClientOptions,
|
||||
buildOpenAISdkRequestOptions,
|
||||
@@ -2592,6 +2590,7 @@ export const responsesTesting = {
|
||||
normalizeResponsesFailedEvent,
|
||||
prepareOpenAIResponsesReasoningItemForReplay,
|
||||
createResponsesStreamWithEncryptedContentRetry,
|
||||
resolveAzureOpenAIApiVersion,
|
||||
stripResponsesRequestEncryptedContent,
|
||||
tagOpenAIResponsesReasoningReplayItem,
|
||||
summarizeResponsesFailedNoDetailsObservation,
|
||||
|
||||
@@ -7,10 +7,12 @@ import type { Context, Model } from "../llm/types.js";
|
||||
import { isLiveTestEnabled } from "./live-test-helpers.js";
|
||||
import {
|
||||
buildOpenAICompletionsParams,
|
||||
buildOpenAIResponsesParams,
|
||||
createOpenAIResponsesTransportStreamFn,
|
||||
testing as openAITransportTesting,
|
||||
} from "./openai-transport-stream.js";
|
||||
|
||||
const { buildOpenAIResponsesParams } = openAITransportTesting;
|
||||
|
||||
const OPENAI_KEY = process.env.OPENAI_API_KEY ?? "";
|
||||
const LIVE = isLiveTestEnabled(["OPENAI_LIVE_TEST"]) && Boolean(OPENAI_KEY);
|
||||
const describeLive = LIVE ? describe : describe.skip;
|
||||
|
||||
@@ -11,12 +11,8 @@ import {
|
||||
formatUserFacingAssistantErrorText,
|
||||
} from "./embedded-agent-helpers.js";
|
||||
import {
|
||||
buildOpenAIResponsesParams,
|
||||
buildOpenAICompletionsParams,
|
||||
createOpenAICompletionsTransportStreamFn,
|
||||
parseTransportChunkUsage,
|
||||
resolveAzureOpenAIApiVersion,
|
||||
sanitizeTransportPayloadText,
|
||||
testing,
|
||||
} from "./openai-transport-stream.js";
|
||||
import { attachModelProviderRequestTransport } from "./provider-request-config.js";
|
||||
@@ -29,6 +25,9 @@ import {
|
||||
resolveTransportAwareSimpleApi,
|
||||
} from "./provider-transport-stream.js";
|
||||
|
||||
const { buildOpenAIResponsesParams, parseTransportChunkUsage, resolveAzureOpenAIApiVersion } =
|
||||
testing;
|
||||
|
||||
type OpenAICompletionsOutput = Parameters<typeof testing.processOpenAICompletionsStream>[1];
|
||||
type OpenAIResponsesOutput = Parameters<typeof testing.processResponsesStream>[1];
|
||||
type ResponsesApi = Extract<
|
||||
@@ -1545,15 +1544,6 @@ describe("openai transport stream", () => {
|
||||
expect(buildTransportAwareSimpleStreamFn(model)).toBeTypeOf("function");
|
||||
});
|
||||
|
||||
it("removes unpaired surrogate code units but preserves valid surrogate pairs", () => {
|
||||
const high = String.fromCharCode(0xd83d);
|
||||
const low = String.fromCharCode(0xdc00);
|
||||
|
||||
expect(sanitizeTransportPayloadText(`left${high}right`)).toBe("leftright");
|
||||
expect(sanitizeTransportPayloadText(`left${low}right`)).toBe("leftright");
|
||||
expect(sanitizeTransportPayloadText("emoji 🙈 ok")).toBe("emoji 🙈 ok");
|
||||
});
|
||||
|
||||
it("uses a valid Azure API version default when the environment is unset", () => {
|
||||
expect(resolveAzureOpenAIApiVersion({})).toBe("preview");
|
||||
expect(resolveAzureOpenAIApiVersion({ AZURE_OPENAI_API_VERSION: "2025-01-01-preview" })).toBe(
|
||||
@@ -6827,8 +6817,8 @@ describe("openai transport stream", () => {
|
||||
}));
|
||||
|
||||
try {
|
||||
const { buildOpenAIResponsesParams: isolatedBuildOpenAIResponsesParams } =
|
||||
await import("./openai-transport-stream.js");
|
||||
const { testing: isolatedTesting } = await import("./openai-transport-stream.js");
|
||||
const isolatedBuildOpenAIResponsesParams = isolatedTesting.buildOpenAIResponsesParams;
|
||||
const model = makeResponsesModel({
|
||||
id: "gpt-5.4",
|
||||
name: "GPT-5.4",
|
||||
|
||||
@@ -8,13 +8,8 @@ import type { Context } from "../llm/types.js";
|
||||
import {
|
||||
buildOpenAICompletionsParams as buildOpenAICompletionsParamsImpl,
|
||||
completionsTesting,
|
||||
parseTransportChunkUsage as parseTransportChunkUsageImpl,
|
||||
} from "./openai-completions-transport.js";
|
||||
import {
|
||||
buildOpenAIResponsesParams as buildOpenAIResponsesParamsImpl,
|
||||
resolveAzureOpenAIApiVersion as resolveAzureOpenAIApiVersionImpl,
|
||||
responsesTesting,
|
||||
} from "./openai-responses-transport.js";
|
||||
import { responsesTesting } from "./openai-responses-transport.js";
|
||||
import type { OpenAICompletionsOptions, OpenAIModeModel } from "./openai-transport-shared.js";
|
||||
|
||||
export { createOpenAICompletionsTransportStreamFn } from "./openai-completions-transport.js";
|
||||
@@ -22,23 +17,6 @@ export {
|
||||
createAzureOpenAIResponsesTransportStreamFn,
|
||||
createOpenAIResponsesTransportStreamFn,
|
||||
} from "./openai-responses-transport.js";
|
||||
export { sanitizeTransportPayloadText } from "./transport-stream-shared.js";
|
||||
|
||||
export function parseTransportChunkUsage(
|
||||
...args: Parameters<typeof parseTransportChunkUsageImpl>
|
||||
): ReturnType<typeof parseTransportChunkUsageImpl> {
|
||||
return parseTransportChunkUsageImpl(...args);
|
||||
}
|
||||
|
||||
export function buildOpenAIResponsesParams(
|
||||
...args: Parameters<typeof buildOpenAIResponsesParamsImpl>
|
||||
): ReturnType<typeof buildOpenAIResponsesParamsImpl> {
|
||||
return buildOpenAIResponsesParamsImpl(...args);
|
||||
}
|
||||
|
||||
export function resolveAzureOpenAIApiVersion(env = process.env): string {
|
||||
return resolveAzureOpenAIApiVersionImpl(env);
|
||||
}
|
||||
|
||||
// Keep this SDK-exported declaration anchored to the long-lived facade while the
|
||||
// completions implementation remains independently owned.
|
||||
|
||||
@@ -10,7 +10,9 @@ import {
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { createOpenAIResponsesContextManagementWrapper } from "../llm/providers/stream-wrappers/openai.js";
|
||||
import { buildProviderToolCompatFamilyHooks } from "../plugin-sdk/provider-tools.js";
|
||||
import { buildOpenAIResponsesParams } from "./openai-transport-stream.js";
|
||||
import { testing as openAITransportTesting } from "./openai-transport-stream.js";
|
||||
|
||||
const { buildOpenAIResponsesParams } = openAITransportTesting;
|
||||
|
||||
describe("OpenAI transport schema normalization runtime contract", () => {
|
||||
it("keeps HTTP Responses strict decisions stable for the same tool set", () => {
|
||||
|
||||
@@ -10,10 +10,12 @@ import {
|
||||
|
||||
describe("check-deadcode-exports", () => {
|
||||
it("excludes test support from every Knip issue type", () => {
|
||||
expect(knipConfig.ignore).toContain("dist/**");
|
||||
expect(knipConfig.ignore).toContain("**/test-helpers/**");
|
||||
expect(knipConfig.ignore).toContain("**/*.test-utils.ts");
|
||||
expect(knipConfig.ignoreFiles).not.toContain("**/test-helpers/**");
|
||||
expect(knipConfig.ignoreFiles).toContain("scripts/**");
|
||||
expect(knipConfig.ignoreFiles).toContain("dist/**");
|
||||
expect(knipConfig.ignore).not.toContain("**/live-*.ts");
|
||||
expect(knipConfig.ignoreFiles).toContain("**/live-*.ts");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user