summaryrefslogtreecommitdiffhomepage
path: root/packages/core/tests
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-02 20:05:48 +0900
committerAdam Malczewski <[email protected]>2026-06-02 20:05:48 +0900
commit3307fec107fb8d1e7cb063bfdbfadf4b1d4f8c71 (patch)
tree10fc7391ef0cfbbcd62d558991c54b4041b3dac9 /packages/core/tests
parentb3aca3efe9e8cda79db6e2c7fa20482880ed16c3 (diff)
downloaddispatch-3307fec107fb8d1e7cb063bfdbfadf4b1d4f8c71.tar.gz
dispatch-3307fec107fb8d1e7cb063bfdbfadf4b1d4f8c71.zip
fix(wake): resolve probe model dynamically from /v1/models by 'haiku' match
The wake probe was hardcoded to claude-3-5-haiku-20241022, which the endpoint no longer serves (HTTP 404), exhausting the retry loop. Now the probe fetches the live model list via fetchAnthropicModels (falling back to ANTHROPIC_MODELS_FALLBACK if empty) and selects the current Haiku via a new pure selectHaikuModel() helper (first case-insensitive 'haiku' substring match; newest-first ordering). No-match surfaces a clear per-account error instead of crashing.
Diffstat (limited to 'packages/core/tests')
-rw-r--r--packages/core/tests/credentials/wake-probe.test.ts26
1 files changed, 25 insertions, 1 deletions
diff --git a/packages/core/tests/credentials/wake-probe.test.ts b/packages/core/tests/credentials/wake-probe.test.ts
index 253efec..a97a00c 100644
--- a/packages/core/tests/credentials/wake-probe.test.ts
+++ b/packages/core/tests/credentials/wake-probe.test.ts
@@ -9,7 +9,7 @@ vi.mock("../../src/db/index.js", () => ({
}),
}));
-const { buildWakeProbeBody } = await import("../../src/credentials/claude.js");
+const { buildWakeProbeBody, selectHaikuModel } = await import("../../src/credentials/claude.js");
const IDENTITY = "You are Claude Code, Anthropic's official CLI for Claude.";
@@ -47,3 +47,27 @@ describe("buildWakeProbeBody", () => {
expect(a).toEqual(b);
});
});
+describe("selectHaikuModel", () => {
+ it("returns the id whose name contains 'haiku'", () => {
+ const models = ["claude-sonnet-4-20250514", "claude-haiku-4-5-20251001"];
+ expect(selectHaikuModel(models)).toBe("claude-haiku-4-5-20251001");
+ });
+
+ it("matches case-insensitively", () => {
+ expect(selectHaikuModel(["Claude-HAIKU-Latest"])).toBe("Claude-HAIKU-Latest");
+ });
+
+ it("returns the FIRST match when several models contain 'haiku'", () => {
+ // `/v1/models` returns newest-first, so first-match prefers the newest.
+ const models = ["claude-haiku-4-5-20251001", "claude-3-5-haiku-20241022"];
+ expect(selectHaikuModel(models)).toBe("claude-haiku-4-5-20251001");
+ });
+
+ it("returns null when no model contains 'haiku'", () => {
+ expect(selectHaikuModel(["claude-sonnet-4-20250514", "claude-opus-4-20250514"])).toBeNull();
+ });
+
+ it("returns null for an empty list", () => {
+ expect(selectHaikuModel([])).toBeNull();
+ });
+});