fix(ci): align strict nullable typing across channels and ui

This commit is contained in:
Peter Steinberger
2026-03-02 09:56:07 +00:00
parent fc692d82fd
commit c1a46301b6
7 changed files with 25 additions and 18 deletions

View File

@@ -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 };
},

View File

@@ -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 };

View File

@@ -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,

View File

@@ -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";

View File

@@ -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", () => {

View File

@@ -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;

View File

@@ -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,