mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
fix(ci): align strict nullable typing across channels and ui
This commit is contained in:
@@ -182,13 +182,14 @@ export const imessagePlugin: ChannelPlugin<ResolvedIMessageAccount> = {
|
||||
accountId,
|
||||
name: input.name,
|
||||
});
|
||||
const next =
|
||||
const next = (
|
||||
accountId !== DEFAULT_ACCOUNT_ID
|
||||
? migrateBaseNameToDefaultAccount({
|
||||
cfg: namedConfig,
|
||||
channelKey: "imessage",
|
||||
})
|
||||
: namedConfig;
|
||||
: namedConfig
|
||||
) as typeof cfg;
|
||||
if (accountId === DEFAULT_ACCOUNT_ID) {
|
||||
return {
|
||||
...next,
|
||||
@@ -200,7 +201,7 @@ export const imessagePlugin: ChannelPlugin<ResolvedIMessageAccount> = {
|
||||
...buildIMessageSetupPatch(input),
|
||||
},
|
||||
},
|
||||
};
|
||||
} as typeof cfg;
|
||||
}
|
||||
return {
|
||||
...next,
|
||||
@@ -219,7 +220,7 @@ export const imessagePlugin: ChannelPlugin<ResolvedIMessageAccount> = {
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
} as typeof cfg;
|
||||
},
|
||||
},
|
||||
outbound: {
|
||||
@@ -232,9 +233,9 @@ export const imessagePlugin: ChannelPlugin<ResolvedIMessageAccount> = {
|
||||
cfg,
|
||||
to,
|
||||
text,
|
||||
accountId,
|
||||
accountId: accountId ?? undefined,
|
||||
deps,
|
||||
replyToId,
|
||||
replyToId: replyToId ?? undefined,
|
||||
});
|
||||
return { channel: "imessage", ...result };
|
||||
},
|
||||
@@ -244,9 +245,9 @@ export const imessagePlugin: ChannelPlugin<ResolvedIMessageAccount> = {
|
||||
to,
|
||||
text,
|
||||
mediaUrl,
|
||||
accountId,
|
||||
accountId: accountId ?? undefined,
|
||||
deps,
|
||||
replyToId,
|
||||
replyToId: replyToId ?? undefined,
|
||||
});
|
||||
return { channel: "imessage", ...result };
|
||||
},
|
||||
|
||||
@@ -265,7 +265,7 @@ export const signalPlugin: ChannelPlugin<ResolvedSignalAccount> = {
|
||||
cfg,
|
||||
to,
|
||||
text,
|
||||
accountId,
|
||||
accountId: accountId ?? undefined,
|
||||
deps,
|
||||
});
|
||||
return { channel: "signal", ...result };
|
||||
@@ -276,7 +276,7 @@ export const signalPlugin: ChannelPlugin<ResolvedSignalAccount> = {
|
||||
to,
|
||||
text,
|
||||
mediaUrl,
|
||||
accountId,
|
||||
accountId: accountId ?? undefined,
|
||||
deps,
|
||||
});
|
||||
return { channel: "signal", ...result };
|
||||
|
||||
@@ -69,8 +69,8 @@ function resolveSlackSendContext(params: {
|
||||
cfg: Parameters<typeof resolveSlackAccount>[0]["cfg"];
|
||||
accountId?: string;
|
||||
deps?: { sendSlack?: SlackSendFn };
|
||||
replyToId?: string | null;
|
||||
threadId?: string | null;
|
||||
replyToId?: string | number | null;
|
||||
threadId?: string | number | null;
|
||||
}) {
|
||||
const send = params.deps?.sendSlack ?? getSlackRuntime().channel.slack.sendMessageSlack;
|
||||
const account = resolveSlackAccount({ cfg: params.cfg, accountId: params.accountId });
|
||||
@@ -359,7 +359,7 @@ export const slackPlugin: ChannelPlugin<ResolvedSlackAccount> = {
|
||||
sendText: async ({ to, text, accountId, deps, replyToId, threadId, cfg }) => {
|
||||
const { send, threadTsValue, tokenOverride } = resolveSlackSendContext({
|
||||
cfg,
|
||||
accountId,
|
||||
accountId: accountId ?? undefined,
|
||||
deps,
|
||||
replyToId,
|
||||
threadId,
|
||||
@@ -374,7 +374,7 @@ export const slackPlugin: ChannelPlugin<ResolvedSlackAccount> = {
|
||||
sendMedia: async ({ to, text, mediaUrl, accountId, deps, replyToId, threadId, cfg }) => {
|
||||
const { send, threadTsValue, tokenOverride } = resolveSlackSendContext({
|
||||
cfg,
|
||||
accountId,
|
||||
accountId: accountId ?? undefined,
|
||||
deps,
|
||||
replyToId,
|
||||
threadId,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import type { IncomingMessage, ServerResponse } from "node:http";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { makeFormBody, makeReq, makeRes } from "./test-http-utils.js";
|
||||
|
||||
|
||||
@@ -110,10 +110,11 @@ describe("form-utils preserves numeric types", () => {
|
||||
const raw = serializeConfigForm(form);
|
||||
const parsed = JSON.parse(raw);
|
||||
const model = parsed.models.providers.xai.models[0] as Record<string, unknown>;
|
||||
const cost = model.cost as Record<string, unknown>;
|
||||
|
||||
expectNumericModelCore(model);
|
||||
expect(typeof model.cost.input).toBe("number");
|
||||
expect(model.cost.input).toBe(0.5);
|
||||
expect(typeof cost.input).toBe("number");
|
||||
expect(cost.input).toBe(0.5);
|
||||
});
|
||||
|
||||
it("cloneConfigObject + setPathValue preserves unrelated numeric fields", () => {
|
||||
|
||||
@@ -218,10 +218,10 @@ function renderTokenRow(deviceId: string, token: DeviceTokenSummary, props: Node
|
||||
|
||||
type BindingAgent = {
|
||||
id: string;
|
||||
name?: string;
|
||||
name: string | undefined;
|
||||
index: number;
|
||||
isDefault: boolean;
|
||||
binding?: string | null;
|
||||
binding: string | null;
|
||||
};
|
||||
|
||||
type BindingNode = NodeTargetOption;
|
||||
|
||||
@@ -28,6 +28,10 @@ const baseUsage = {
|
||||
output: 400,
|
||||
cacheRead: 200,
|
||||
cacheWrite: 100,
|
||||
inputCost: 0.3,
|
||||
outputCost: 0.4,
|
||||
cacheReadCost: 0.2,
|
||||
cacheWriteCost: 0.1,
|
||||
durationMs: 60000,
|
||||
firstActivity: 0,
|
||||
lastActivity: 60000,
|
||||
|
||||
Reference in New Issue
Block a user