




























@@ -166,7 +166,7 @@ function configuredTextModel(id: string, name: string) {
166166167167type MockCallSource = {
168168mock: {
169-calls: ArrayLike<ReadonlyArray<unknown>>;
169+calls: ReadonlyArray<ReadonlyArray<unknown>>;
170170};
171171};
172172@@ -178,7 +178,7 @@ function requireRecord(value: unknown, label: string): Record<string, unknown> {
178178}
179179180180function mockArg(source: MockCallSource, callIndex: number, argIndex: number, label: string) {
181-const call = source.mock.calls[callIndex];
181+const call = source.mock.calls.at(callIndex);
182182if (!call) {
183183throw new Error(`expected mock call: ${label}`);
184184}
@@ -285,7 +285,7 @@ describe("promptDefaultModel", () => {
285285ignoreAllowlist: true,
286286});
287287288-const values = (select.mock.calls[0]?.[0]?.options ?? []).map(
288+const values = (select.mock.calls.at(0)?.[0]?.options ?? []).map(
289289(option: { value: string }) => option.value,
290290);
291291expect(values).toEqual(["anthropic/claude-sonnet-4-6"]);
@@ -309,7 +309,7 @@ describe("promptDefaultModel", () => {
309309ignoreAllowlist: true,
310310});
311311312-const values = (select.mock.calls[0]?.[0]?.options ?? []).map(
312+const values = (select.mock.calls.at(0)?.[0]?.options ?? []).map(
313313(option: { value: string }) => option.value,
314314);
315315expect(values).toEqual(["amazon-bedrock/us.anthropic.claude-sonnet-4-5"]);
@@ -338,7 +338,7 @@ describe("promptDefaultModel", () => {
338338ignoreAllowlist: true,
339339});
340340341-const optionValues = (select.mock.calls[0]?.[0]?.options ?? []).map(
341+const optionValues = (select.mock.calls.at(0)?.[0]?.options ?? []).map(
342342(option: { value: string }) => option.value,
343343);
344344expect(optionValues).toEqual([
@@ -448,11 +448,11 @@ describe("promptDefaultModel", () => {
448448preferredProvider: "byteplus",
449449});
450450451-const options = select.mock.calls[0]?.[0]?.options ?? [];
451+const options = select.mock.calls.at(0)?.[0]?.options ?? [];
452452const optionValues = options.map((opt: { value: string }) => opt.value);
453453expect(optionValues).toContain("byteplus-plan/ark-code-latest");
454454expect(optionValues[1]).toBe("byteplus-plan/ark-code-latest");
455-expect(select.mock.calls[0]?.[0]?.initialValue).toBe("byteplus-plan/ark-code-latest");
455+expect(select.mock.calls.at(0)?.[0]?.initialValue).toBe("byteplus-plan/ark-code-latest");
456456expect(result.model).toBe("byteplus-plan/ark-code-latest");
457457expect(providerCallProviders()).toContain("byteplus");
458458expect(providerCallProviders()).toContain("byteplus-plan");
@@ -617,7 +617,7 @@ describe("promptDefaultModel", () => {
617617expect(result.model).toBe("openai-codex/gpt-5.5-pro");
618618expect(loadModelCatalog).toHaveBeenCalledOnce();
619619expect(select).toHaveBeenCalledTimes(2);
620-expect(select.mock.calls[1]?.[0]?.searchable).toBe(true);
620+expect(select.mock.calls.at(1)?.[0]?.searchable).toBe(true);
621621});
622622623623it("supports configuring vLLM during setup", async () => {
@@ -857,7 +857,7 @@ describe("promptModelAllowlist", () => {
857857allowedKeys: ["anthropic/claude-opus-4-6"],
858858});
859859860-const options = multiselect.mock.calls[0]?.[0]?.options ?? [];
860+const options = multiselect.mock.calls.at(0)?.[0]?.options ?? [];
861861expect(options.map((opt: { value: string }) => opt.value)).toEqual([
862862"anthropic/claude-opus-4-6",
863863]);
@@ -895,7 +895,7 @@ describe("promptModelAllowlist", () => {
895895});
896896expect(loadModelCatalog).not.toHaveBeenCalled();
897897expect(
898-multiselect.mock.calls[0]?.[0]?.options.map((option: { value: string }) => option.value),
898+multiselect.mock.calls.at(0)?.[0]?.options.map((option: { value: string }) => option.value),
899899).toEqual(["github-copilot/gpt-5.4"]);
900900});
901901@@ -931,7 +931,7 @@ describe("promptModelAllowlist", () => {
931931932932expect(loadModelCatalog).not.toHaveBeenCalled();
933933expect(
934-multiselect.mock.calls[0]?.[0]?.options.map((option: { value: string }) => option.value),
934+multiselect.mock.calls.at(0)?.[0]?.options.map((option: { value: string }) => option.value),
935935).toEqual(["minimax/MiniMax-M2.7-highspeed", "zhipu/glm-4.5-air"]);
936936expect(result.models).toEqual(["minimax/MiniMax-M2.7-highspeed", "zhipu/glm-4.5-air"]);
937937});
@@ -965,7 +965,7 @@ describe("promptModelAllowlist", () => {
965965preferredProvider: "openai",
966966});
967967968-const options = multiselect.mock.calls[0]?.[0]?.options ?? [];
968+const options = multiselect.mock.calls.at(0)?.[0]?.options ?? [];
969969expect(options.map((opt: { value: string }) => opt.value)).toEqual([
970970"openai/gpt-5.5",
971971"openai/gpt-5.4-mini",
@@ -1003,7 +1003,7 @@ describe("promptModelAllowlist", () => {
1003100310041004expect(text).not.toHaveBeenCalled();
10051005expect(
1006-multiselect.mock.calls[0]?.[0]?.options.map((option: { value: string }) => option.value),
1006+multiselect.mock.calls.at(0)?.[0]?.options.map((option: { value: string }) => option.value),
10071007).toEqual(["ollama/kimi-k2.5:cloud", "ollama/gpt-oss:20b-cloud"]);
10081008expect(result).toEqual({
10091009models: ["ollama/kimi-k2.5:cloud", "ollama/gpt-oss:20b-cloud"],
@@ -1044,7 +1044,7 @@ describe("promptModelAllowlist", () => {
10441044const result = await promptModelAllowlist({ config, prompter });
1045104510461046expect(
1047-multiselect.mock.calls[0]?.[0]?.options.map((option: { value: string }) => option.value),
1047+multiselect.mock.calls.at(0)?.[0]?.options.map((option: { value: string }) => option.value),
10481048).toEqual(["vllm/meta-llama/Meta-Llama-3-8B-Instruct"]);
10491049expect(result.models).toEqual(["vllm/meta-llama/Meta-Llama-3-8B-Instruct"]);
10501050});
@@ -1075,7 +1075,7 @@ describe("promptModelAllowlist", () => {
10751075} as OpenClawConfig;
1076107610771077const result = await promptModelAllowlist({ config, prompter });
1078-const call = multiselect.mock.calls[0]?.[0];
1078+const call = multiselect.mock.calls.at(0)?.[0];
10791079expect(call?.options.map((option: { value: string }) => option.value)).toEqual([
10801080"openai/gpt-5.5",
10811081"anthropic/claude-sonnet-4-6",
@@ -1117,7 +1117,7 @@ describe("promptModelAllowlist", () => {
11171117} as OpenClawConfig;
1118111811191119const result = await promptModelAllowlist({ config, prompter });
1120-const call = multiselect.mock.calls[0]?.[0];
1120+const call = multiselect.mock.calls.at(0)?.[0];
1121112111221122expect(call?.initialValues).toEqual([
11231123"anthropic/claude-opus-4-6",
@@ -1141,7 +1141,7 @@ describe("promptModelAllowlist", () => {
1141114111421142const result = await promptModelAllowlist({ config, prompter });
114311431144-expect(text.mock.calls[0]?.[0]?.initialValue).toBe("");
1144+expect(text.mock.calls.at(0)?.[0]?.initialValue).toBe("");
11451145expect(result).toStrictEqual({});
11461146});
11471147@@ -1166,7 +1166,7 @@ describe("promptModelAllowlist", () => {
1166116611671167const result = await promptModelAllowlist({ config, prompter });
116811681169-expect(text.mock.calls[0]?.[0]?.initialValue).toBe(
1169+expect(text.mock.calls.at(0)?.[0]?.initialValue).toBe(
11701170"openai/gpt-5.5, anthropic/claude-sonnet-4-6",
11711171);
11721172expect(result.models).toEqual(["openai/gpt-5.5", "anthropic/claude-sonnet-4-6"]);
@@ -1210,7 +1210,7 @@ describe("promptModelAllowlist", () => {
12101210preferredProvider: "openai",
12111211});
121212121213-const call = multiselect.mock.calls[0]?.[0];
1213+const call = multiselect.mock.calls.at(0)?.[0];
12141214expect(call?.options.map((option: { value: string }) => option.value)).toEqual([
12151215"openai/gpt-5.5",
12161216"openai/gpt-5.4",
@@ -1244,7 +1244,7 @@ describe("promptModelAllowlist", () => {
12441244expect(optionValues(pickerOptions(multiselect as MockCallSource))).toEqual([
12451245"openai-codex/gpt-5.5",
12461246]);
1247-expect(multiselect.mock.calls[0]?.[0]?.initialValues).toEqual(["openai-codex/gpt-5.5"]);
1247+expect(multiselect.mock.calls.at(0)?.[0]?.initialValues).toEqual(["openai-codex/gpt-5.5"]);
12481248expect(result).toEqual({
12491249models: ["openai-codex/gpt-5.5"],
12501250scopeKeys: ["openai-codex/gpt-5.5"],
@@ -1271,9 +1271,9 @@ describe("promptModelAllowlist", () => {
1271127112721272expect(loadModelCatalog).not.toHaveBeenCalled();
12731273expect(
1274-multiselect.mock.calls[0]?.[0]?.options.map((option: { value: string }) => option.value),
1274+multiselect.mock.calls.at(0)?.[0]?.options.map((option: { value: string }) => option.value),
12751275).toEqual(["openai-codex/gpt-5.5", "openai-codex/gpt-5.4"]);
1276-expect(multiselect.mock.calls[0]?.[0]?.initialValues).toEqual(["openai-codex/gpt-5.5"]);
1276+expect(multiselect.mock.calls.at(0)?.[0]?.initialValues).toEqual(["openai-codex/gpt-5.5"]);
12771277expect(result).toEqual({
12781278models: ["openai-codex/gpt-5.5", "openai-codex/gpt-5.4"],
12791279scopeKeys: ["openai-codex/gpt-5.5", "openai-codex/gpt-5.4"],
@@ -1309,7 +1309,7 @@ describe("runtime model picker visibility", () => {
1309130913101310await promptModelAllowlist({ config, prompter });
131113111312-const call = multiselect.mock.calls[0]?.[0];
1312+const call = multiselect.mock.calls.at(0)?.[0];
13131313const optionValues = (call?.options ?? []).map((option: { value: string }) => option.value);
13141314expect(optionValues).toEqual([
13151315"openai/gpt-5.5",
@@ -1342,10 +1342,10 @@ describe("router model filtering", () => {
13421342});
13431343await promptModelAllowlist({ config, prompter: allowlistPrompter });
134413441345-const defaultOptions = select.mock.calls[0]?.[0]?.options ?? [];
1345+const defaultOptions = select.mock.calls.at(0)?.[0]?.options ?? [];
13461346expectRouterModelFiltering(defaultOptions);
134713471348-const allowlistCall = multiselect.mock.calls[0]?.[0];
1348+const allowlistCall = multiselect.mock.calls.at(0)?.[0];
13491349expectRouterModelFiltering(allowlistCall?.options as Array<{ value: string }>);
13501350expect(allowlistCall?.searchable).toBe(true);
13511351expect(runProviderPluginAuthMethod).not.toHaveBeenCalled();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。