@stigmer/react 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/index.d.ts +2 -2
  2. package/index.d.ts.map +1 -1
  3. package/index.js +1 -1
  4. package/index.js.map +1 -1
  5. package/models/ModelRegistryContext.d.ts +21 -0
  6. package/models/ModelRegistryContext.d.ts.map +1 -0
  7. package/models/ModelRegistryContext.js +22 -0
  8. package/models/ModelRegistryContext.js.map +1 -0
  9. package/models/ModelSelector.js +3 -3
  10. package/models/ModelSelector.js.map +1 -1
  11. package/models/__tests__/useModelRegistry.test.js +127 -32
  12. package/models/__tests__/useModelRegistry.test.js.map +1 -1
  13. package/models/index.d.ts +3 -1
  14. package/models/index.d.ts.map +1 -1
  15. package/models/index.js +2 -1
  16. package/models/index.js.map +1 -1
  17. package/models/registry.d.ts +20 -12
  18. package/models/registry.d.ts.map +1 -1
  19. package/models/registry.js +51 -27
  20. package/models/registry.js.map +1 -1
  21. package/models/useModelRegistry.d.ts +11 -3
  22. package/models/useModelRegistry.d.ts.map +1 -1
  23. package/models/useModelRegistry.js +13 -5
  24. package/models/useModelRegistry.js.map +1 -1
  25. package/package.json +4 -4
  26. package/provider.d.ts.map +1 -1
  27. package/provider.js +42 -1
  28. package/provider.js.map +1 -1
  29. package/session/__tests__/useNewSessionFlow.test.js +32 -18
  30. package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
  31. package/session/__tests__/usePersistedModel.test.js +26 -12
  32. package/session/__tests__/usePersistedModel.test.js.map +1 -1
  33. package/src/index.ts +4 -1
  34. package/src/models/ModelRegistryContext.ts +32 -0
  35. package/src/models/ModelSelector.tsx +4 -4
  36. package/src/models/__tests__/useModelRegistry.test.tsx +150 -41
  37. package/src/models/index.ts +3 -1
  38. package/src/models/registry.ts +51 -30
  39. package/src/models/useModelRegistry.ts +18 -7
  40. package/src/provider.tsx +58 -8
  41. package/src/session/__tests__/useNewSessionFlow.test.tsx +39 -18
  42. package/src/session/__tests__/usePersistedModel.test.tsx +33 -12
@@ -1 +1 @@
1
- {"version":3,"file":"useNewSessionFlow.test.js","sourceRoot":"","sources":["../../../src/session/__tests__/useNewSessionFlow.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useNewSessionFlow.test.js","sourceRoot":"","sources":["../../../src/session/__tests__/useNewSessionFlow.test.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
3
  import { renderHook, act } from "@testing-library/react";
3
4
  import { usePersistedModel } from "../usePersistedModel";
4
- import { DEFAULT_MODEL_ID, DEFAULT_CURSOR_MODEL_ID } from "../../models/registry";
5
+ import { DEFAULT_MODEL_ID, DEFAULT_CURSOR_MODEL_ID, parseRegistryJson } from "../../models/registry";
6
+ import { ModelRegistryContext } from "../../models/ModelRegistryContext";
7
+ const TEST_MODELS = parseRegistryJson({
8
+ models: [
9
+ { id: "claude-sonnet-4.6", displayName: "Claude Sonnet 4.6", shortDescription: "", speedTier: "fast", provider: "anthropic", harness: "native", costTier: "standard", featured: true, pricing: { inputPricePerMillion: 3, outputPricePerMillion: 15, cacheWritePricePerMillion: 3.75, cacheReadPricePerMillion: 0.3 } },
10
+ { id: "default", displayName: "Cursor Auto", shortDescription: "", speedTier: "fast", provider: "cursor", harness: "cursor", costTier: "standard", featured: true, pricing: { inputPricePerMillion: 1.25, outputPricePerMillion: 6, cacheWritePricePerMillion: 1.25, cacheReadPricePerMillion: 0.25 } },
11
+ ],
12
+ });
13
+ function createWrapper() {
14
+ const state = { models: TEST_MODELS, isLoading: false, error: null };
15
+ return function Wrapper({ children }) {
16
+ return (_jsx(ModelRegistryContext.Provider, { value: state, children: children }));
17
+ };
18
+ }
5
19
  const STORAGE_KEY_NATIVE = "stigmer:session:model";
6
20
  const STORAGE_KEY_CURSOR = "stigmer:session:model:cursor";
7
21
  describe("usePersistedModel", () => {
@@ -13,45 +27,45 @@ describe("usePersistedModel", () => {
13
27
  });
14
28
  describe("basic persistence", () => {
15
29
  it("returns undefined when localStorage is empty", () => {
16
- const { result } = renderHook(() => usePersistedModel({ harness: "native" }));
30
+ const { result } = renderHook(() => usePersistedModel({ harness: "native" }), { wrapper: createWrapper() });
17
31
  expect(result.current[0]).toBeUndefined();
18
32
  });
19
33
  it("restores a valid model from localStorage", () => {
20
34
  localStorage.setItem(STORAGE_KEY_NATIVE, DEFAULT_MODEL_ID);
21
- const { result } = renderHook(() => usePersistedModel({ harness: "native" }));
35
+ const { result } = renderHook(() => usePersistedModel({ harness: "native" }), { wrapper: createWrapper() });
22
36
  expect(result.current[0]).toBe(DEFAULT_MODEL_ID);
23
37
  });
24
38
  it("returns undefined for an invalid model in localStorage", () => {
25
39
  localStorage.setItem(STORAGE_KEY_NATIVE, "nonexistent-model-xyz");
26
- const { result } = renderHook(() => usePersistedModel({ harness: "native" }));
40
+ const { result } = renderHook(() => usePersistedModel({ harness: "native" }), { wrapper: createWrapper() });
27
41
  expect(result.current[0]).toBeUndefined();
28
42
  });
29
43
  it("persists model on change", () => {
30
- const { result } = renderHook(() => usePersistedModel({ harness: "native" }));
44
+ const { result } = renderHook(() => usePersistedModel({ harness: "native" }), { wrapper: createWrapper() });
31
45
  act(() => result.current[1](DEFAULT_MODEL_ID));
32
46
  expect(localStorage.getItem(STORAGE_KEY_NATIVE)).toBe(DEFAULT_MODEL_ID);
33
47
  expect(result.current[0]).toBe(DEFAULT_MODEL_ID);
34
48
  });
35
49
  it("uses cursor-specific key for cursor harness", () => {
36
50
  localStorage.setItem(STORAGE_KEY_CURSOR, DEFAULT_CURSOR_MODEL_ID);
37
- const { result } = renderHook(() => usePersistedModel({ harness: "cursor" }));
51
+ const { result } = renderHook(() => usePersistedModel({ harness: "cursor" }), { wrapper: createWrapper() });
38
52
  expect(result.current[0]).toBe(DEFAULT_CURSOR_MODEL_ID);
39
53
  });
40
54
  });
41
55
  describe("compound key handling", () => {
42
56
  it("extracts plain modelId from compound key in localStorage", () => {
43
57
  localStorage.setItem(STORAGE_KEY_CURSOR, "cursor/default");
44
- const { result } = renderHook(() => usePersistedModel({ harness: "cursor" }));
58
+ const { result } = renderHook(() => usePersistedModel({ harness: "cursor" }), { wrapper: createWrapper() });
45
59
  expect(result.current[0]).toBe(DEFAULT_CURSOR_MODEL_ID);
46
60
  });
47
61
  it("extracts plain modelId from native compound key", () => {
48
62
  localStorage.setItem(STORAGE_KEY_NATIVE, `native/${DEFAULT_MODEL_ID}`);
49
- const { result } = renderHook(() => usePersistedModel({ harness: "native" }));
63
+ const { result } = renderHook(() => usePersistedModel({ harness: "native" }), { wrapper: createWrapper() });
50
64
  expect(result.current[0]).toBe(DEFAULT_MODEL_ID);
51
65
  });
52
66
  it("handles non-compound values unchanged", () => {
53
67
  localStorage.setItem(STORAGE_KEY_CURSOR, DEFAULT_CURSOR_MODEL_ID);
54
- const { result } = renderHook(() => usePersistedModel({ harness: "cursor" }));
68
+ const { result } = renderHook(() => usePersistedModel({ harness: "cursor" }), { wrapper: createWrapper() });
55
69
  expect(result.current[0]).toBe(DEFAULT_CURSOR_MODEL_ID);
56
70
  });
57
71
  });
@@ -59,21 +73,21 @@ describe("usePersistedModel", () => {
59
73
  it("re-reads from new localStorage key when harness changes", () => {
60
74
  localStorage.setItem(STORAGE_KEY_NATIVE, DEFAULT_MODEL_ID);
61
75
  localStorage.setItem(STORAGE_KEY_CURSOR, DEFAULT_CURSOR_MODEL_ID);
62
- const { result, rerender } = renderHook(({ harness }) => usePersistedModel({ harness }), { initialProps: { harness: "native" } });
76
+ const { result, rerender } = renderHook(({ harness }) => usePersistedModel({ harness }), { initialProps: { harness: "native" }, wrapper: createWrapper() });
63
77
  expect(result.current[0]).toBe(DEFAULT_MODEL_ID);
64
78
  rerender({ harness: "cursor" });
65
79
  expect(result.current[0]).toBe(DEFAULT_CURSOR_MODEL_ID);
66
80
  });
67
81
  it("returns undefined after harness change when new key has no stored value", () => {
68
82
  localStorage.setItem(STORAGE_KEY_NATIVE, DEFAULT_MODEL_ID);
69
- const { result, rerender } = renderHook(({ harness }) => usePersistedModel({ harness }), { initialProps: { harness: "native" } });
83
+ const { result, rerender } = renderHook(({ harness }) => usePersistedModel({ harness }), { initialProps: { harness: "native" }, wrapper: createWrapper() });
70
84
  expect(result.current[0]).toBe(DEFAULT_MODEL_ID);
71
85
  rerender({ harness: "cursor" });
72
86
  expect(result.current[0]).toBeUndefined();
73
87
  });
74
88
  it("handles compound key in new storage key after harness transition", () => {
75
89
  localStorage.setItem(STORAGE_KEY_CURSOR, "cursor/default");
76
- const { result, rerender } = renderHook(({ harness }) => usePersistedModel({ harness }), { initialProps: { harness: "native" } });
90
+ const { result, rerender } = renderHook(({ harness }) => usePersistedModel({ harness }), { initialProps: { harness: "native" }, wrapper: createWrapper() });
77
91
  rerender({ harness: "cursor" });
78
92
  expect(result.current[0]).toBe(DEFAULT_CURSOR_MODEL_ID);
79
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"usePersistedModel.test.js","sourceRoot":"","sources":["../../../src/session/__tests__/usePersistedModel.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAElF,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AACnD,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAE1D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;YAClE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAE9E,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAE/C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;YAClE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,gBAAgB,EAAE,CAAC,CAAC;YACvE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;YAClE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACvD,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YAC3D,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;YAElE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CACrC,CAAC,EAAE,OAAO,EAAoC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EACjF,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CACxC,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEjD,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YAE3D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CACrC,CAAC,EAAE,OAAO,EAAoC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EACjF,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CACxC,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEjD,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YAE3D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CACrC,CAAC,EAAE,OAAO,EAAoC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EACjF,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CACxC,CAAC;YAEF,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"usePersistedModel.test.js","sourceRoot":"","sources":["../../../src/session/__tests__/usePersistedModel.test.tsx"],"names":[],"mappings":"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"}
package/src/index.ts CHANGED
@@ -27,13 +27,15 @@ export { CloudFeatureNotice, type CloudFeatureNoticeProps } from "./internal/Clo
27
27
 
28
28
  // Models — data hook, styled components, and registry data
29
29
  export {
30
- MODEL_REGISTRY,
31
30
  DEFAULT_MODEL_ID,
32
31
  DEFAULT_CURSOR_MODEL_ID,
33
32
  DISABLED_PROVIDERS,
34
33
  modelKey,
35
34
  parseModelKey,
35
+ fetchModelRegistry,
36
+ parseRegistryJson,
36
37
  useModelRegistry,
38
+ ModelRegistryContext,
37
39
  ModelSelector,
38
40
  HarnessSelector,
39
41
  DEFAULT_HARNESS,
@@ -43,6 +45,7 @@ export {
43
45
  } from "./models";
44
46
  export type {
45
47
  ModelInfo,
48
+ ModelRegistryState,
46
49
  ParsedModelKey,
47
50
  Provider,
48
51
  CostTier,
@@ -0,0 +1,32 @@
1
+ "use client";
2
+
3
+ import { createContext, useContext } from "react";
4
+ import type { ModelInfo } from "./registry";
5
+
6
+ /** Internal state held by the model registry context provider. */
7
+ export interface ModelRegistryState {
8
+ readonly models: readonly ModelInfo[];
9
+ readonly isLoading: boolean;
10
+ readonly error: Error | null;
11
+ }
12
+
13
+ /**
14
+ * React context that holds the model registry fetched from the public API.
15
+ *
16
+ * Populated by {@link StigmerProvider} on mount. Consumer hooks read from
17
+ * this context instead of a static JSON import, enabling always-fresh
18
+ * model data without npm package updates.
19
+ */
20
+ export const ModelRegistryContext = createContext<ModelRegistryState>({
21
+ models: [],
22
+ isLoading: true,
23
+ error: null,
24
+ });
25
+
26
+ /**
27
+ * Internal hook to read the model registry from context.
28
+ * Throws if called outside a StigmerProvider.
29
+ */
30
+ export function useModelRegistryContext(): ModelRegistryState {
31
+ return useContext(ModelRegistryContext);
32
+ }
@@ -122,7 +122,7 @@ export function ModelSelector({
122
122
  return HARNESS_OPTIONS.filter((h) => h === "native" || h === "cursor");
123
123
  }, [availableHarnesses]);
124
124
 
125
- const selectedModel = (value ? getModel(value) : undefined) ?? defaultModel;
125
+ const selectedModel = (value ? getModel(value) : undefined) ?? defaultModel ?? undefined;
126
126
 
127
127
  const isSearching = searchQuery.length > 0;
128
128
  const lowerQuery = searchQuery.toLowerCase();
@@ -248,7 +248,7 @@ export function ModelSelector({
248
248
 
249
249
  const showShowAllButton = !isSearching && !showAll && featuredModels.length > 0 && featuredModels.length < models.length;
250
250
 
251
- const triggerLabel = selectedModel.displayName;
251
+ const triggerLabel = selectedModel?.displayName ?? "Select model";
252
252
  const triggerHarness = !isHarnessLocked ? HARNESS_META[activeHarness].label : undefined;
253
253
 
254
254
  return (
@@ -393,7 +393,7 @@ export function ModelSelector({
393
393
  <ModelRow
394
394
  key={model.modelId}
395
395
  model={model}
396
- isSelected={model.modelId === selectedModel.modelId}
396
+ isSelected={model.modelId === selectedModel?.modelId}
397
397
  showDescription={false}
398
398
  showSpeedBadge={showSpeedBadge}
399
399
  onClick={() => selectModel(model)}
@@ -406,7 +406,7 @@ export function ModelSelector({
406
406
  <ModelRow
407
407
  key={model.modelId}
408
408
  model={model}
409
- isSelected={model.modelId === selectedModel.modelId}
409
+ isSelected={model.modelId === selectedModel?.modelId}
410
410
  isHighlighted={idx === highlightIdx}
411
411
  showDescription={showDescriptions && !compact && !isSearching && !showAll}
412
412
  showSpeedBadge={showSpeedBadge}
@@ -1,45 +1,137 @@
1
- import { describe, it, expect } from "vitest";
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
2
  import { renderHook } from "@testing-library/react";
3
+ import { type ReactNode } from "react";
3
4
  import { useModelRegistry } from "../useModelRegistry";
4
5
  import {
5
- MODEL_REGISTRY,
6
6
  DEFAULT_MODEL_ID,
7
7
  DEFAULT_CURSOR_MODEL_ID,
8
8
  DISABLED_PROVIDERS,
9
9
  modelKey,
10
+ parseRegistryJson,
10
11
  } from "../registry";
12
+ import { ModelRegistryContext } from "../ModelRegistryContext";
13
+ import type { ModelRegistryState } from "../ModelRegistryContext";
14
+ import type { ModelInfo } from "../registry";
15
+
16
+ /**
17
+ * Minimal inline registry data for tests. Mirrors the shape of the
18
+ * API response without depending on a static JSON file.
19
+ */
20
+ const TEST_REGISTRY_JSON = {
21
+ models: [
22
+ {
23
+ id: "claude-sonnet-4.6",
24
+ displayName: "Claude Sonnet 4.6",
25
+ shortDescription: "Balanced capability",
26
+ speedTier: "fast",
27
+ provider: "anthropic",
28
+ harness: "native",
29
+ costTier: "standard",
30
+ featured: true,
31
+ pricing: { inputPricePerMillion: 3, outputPricePerMillion: 15, cacheWritePricePerMillion: 3.75, cacheReadPricePerMillion: 0.3 },
32
+ },
33
+ {
34
+ id: "claude-opus-4.6",
35
+ displayName: "Claude Opus 4.6",
36
+ shortDescription: "Complex reasoning",
37
+ speedTier: "slow",
38
+ provider: "anthropic",
39
+ harness: "native",
40
+ costTier: "premium",
41
+ featured: true,
42
+ pricing: { inputPricePerMillion: 5, outputPricePerMillion: 25, cacheWritePricePerMillion: 6.25, cacheReadPricePerMillion: 0.5 },
43
+ },
44
+ {
45
+ id: "gpt-4o",
46
+ displayName: "GPT-4o",
47
+ shortDescription: "Fast reasoning",
48
+ speedTier: "fast",
49
+ provider: "openai",
50
+ harness: "native",
51
+ costTier: "standard",
52
+ featured: true,
53
+ pricing: { inputPricePerMillion: 2.5, outputPricePerMillion: 10, cacheWritePricePerMillion: 2.5, cacheReadPricePerMillion: 1.25 },
54
+ },
55
+ {
56
+ id: "default",
57
+ displayName: "Cursor Auto",
58
+ shortDescription: "Automatic model selection",
59
+ speedTier: "fast",
60
+ provider: "cursor",
61
+ harness: "cursor",
62
+ costTier: "standard",
63
+ featured: true,
64
+ pricing: { inputPricePerMillion: 1.25, outputPricePerMillion: 6, cacheWritePricePerMillion: 1.25, cacheReadPricePerMillion: 0.25 },
65
+ },
66
+ {
67
+ id: "claude-4.6-sonnet",
68
+ displayName: "Claude 4.6 Sonnet",
69
+ shortDescription: "Balanced Cursor model",
70
+ speedTier: "fast",
71
+ provider: "anthropic",
72
+ harness: "cursor",
73
+ costTier: "standard",
74
+ featured: false,
75
+ pricing: { inputPricePerMillion: 3, outputPricePerMillion: 15, cacheWritePricePerMillion: 3.75, cacheReadPricePerMillion: 0.3 },
76
+ },
77
+ {
78
+ id: "ollama-local",
79
+ displayName: "Ollama Local",
80
+ shortDescription: "Local model",
81
+ speedTier: "fast",
82
+ provider: "ollama",
83
+ harness: "native",
84
+ costTier: "economy",
85
+ featured: false,
86
+ pricing: { inputPricePerMillion: 0, outputPricePerMillion: 0, cacheWritePricePerMillion: 0, cacheReadPricePerMillion: 0 },
87
+ },
88
+ ],
89
+ };
90
+
91
+ const TEST_MODELS: readonly ModelInfo[] = parseRegistryJson(TEST_REGISTRY_JSON);
92
+
93
+ function createWrapper(models: readonly ModelInfo[] = TEST_MODELS) {
94
+ const state: ModelRegistryState = { models, isLoading: false, error: null };
95
+ return function Wrapper({ children }: { children: ReactNode }) {
96
+ return (
97
+ <ModelRegistryContext.Provider value={state}>
98
+ {children}
99
+ </ModelRegistryContext.Provider>
100
+ );
101
+ };
102
+ }
11
103
 
12
104
  describe("useModelRegistry", () => {
13
105
  describe("unified mode (no harness)", () => {
14
106
  it("excludes DISABLED_PROVIDERS from models", () => {
15
- const { result } = renderHook(() => useModelRegistry());
107
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
16
108
  for (const model of result.current.models) {
17
109
  expect(DISABLED_PROVIDERS.has(model.provider)).toBe(false);
18
110
  }
19
111
  });
20
112
 
21
113
  it("includes models from both native and cursor harnesses", () => {
22
- const { result } = renderHook(() => useModelRegistry());
114
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
23
115
  const harnesses = new Set(result.current.models.map((m) => m.harness));
24
116
  expect(harnesses.has("native")).toBe(true);
25
117
  expect(harnesses.has("cursor")).toBe(true);
26
118
  });
27
119
 
28
- it("includes all non-disabled models from MODEL_REGISTRY", () => {
29
- const { result } = renderHook(() => useModelRegistry());
30
- const expected = MODEL_REGISTRY.filter(
120
+ it("includes all non-disabled models", () => {
121
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
122
+ const expected = TEST_MODELS.filter(
31
123
  (m) => !DISABLED_PROVIDERS.has(m.provider),
32
124
  );
33
125
  expect(result.current.models).toHaveLength(expected.length);
34
126
  });
35
127
 
36
128
  it("resolves defaultModel to DEFAULT_MODEL_ID", () => {
37
- const { result } = renderHook(() => useModelRegistry());
38
- expect(result.current.defaultModel.modelId).toBe(DEFAULT_MODEL_ID);
129
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
130
+ expect(result.current.defaultModel!.modelId).toBe(DEFAULT_MODEL_ID);
39
131
  });
40
132
 
41
133
  it("groups models by provider in byProvider map", () => {
42
- const { result } = renderHook(() => useModelRegistry());
134
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
43
135
  for (const [provider, models] of result.current.byProvider) {
44
136
  for (const m of models) {
45
137
  expect(m.provider).toBe(provider);
@@ -48,21 +140,21 @@ describe("useModelRegistry", () => {
48
140
  });
49
141
 
50
142
  it("returns providers matching byProvider keys in order", () => {
51
- const { result } = renderHook(() => useModelRegistry());
143
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
52
144
  const fromMap = Array.from(result.current.byProvider.keys());
53
145
  expect(result.current.providers).toEqual(fromMap);
54
146
  });
55
147
 
56
148
  it("looks up enabled models by getModel", () => {
57
- const { result } = renderHook(() => useModelRegistry());
149
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
58
150
  const model = result.current.getModel(DEFAULT_MODEL_ID);
59
151
  expect(model).toBeDefined();
60
152
  expect(model!.modelId).toBe(DEFAULT_MODEL_ID);
61
153
  });
62
154
 
63
155
  it("returns undefined for disabled provider models via getModel", () => {
64
- const { result } = renderHook(() => useModelRegistry());
65
- const disabledModel = MODEL_REGISTRY.find((m) =>
156
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
157
+ const disabledModel = TEST_MODELS.find((m) =>
66
158
  DISABLED_PROVIDERS.has(m.provider),
67
159
  );
68
160
  if (disabledModel) {
@@ -71,12 +163,12 @@ describe("useModelRegistry", () => {
71
163
  });
72
164
 
73
165
  it("returns undefined for unknown model IDs via getModel", () => {
74
- const { result } = renderHook(() => useModelRegistry());
166
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
75
167
  expect(result.current.getModel("nonexistent-model")).toBeUndefined();
76
168
  });
77
169
 
78
170
  it("returns featured models subset", () => {
79
- const { result } = renderHook(() => useModelRegistry());
171
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
80
172
  expect(result.current.featured.length).toBeGreaterThan(0);
81
173
  for (const model of result.current.featured) {
82
174
  expect(model.featured).toBe(true);
@@ -84,7 +176,7 @@ describe("useModelRegistry", () => {
84
176
  });
85
177
 
86
178
  it("featured models are a subset of all models", () => {
87
- const { result } = renderHook(() => useModelRegistry());
179
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
88
180
  const allKeys = new Set(
89
181
  result.current.models.map((m) => modelKey(m.harness, m.modelId)),
90
182
  );
@@ -94,7 +186,7 @@ describe("useModelRegistry", () => {
94
186
  });
95
187
 
96
188
  it("resolves models by compound key via getByKey", () => {
97
- const { result } = renderHook(() => useModelRegistry());
189
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
98
190
  const key = modelKey("native", DEFAULT_MODEL_ID);
99
191
  const model = result.current.getByKey(key);
100
192
  expect(model).toBeDefined();
@@ -103,7 +195,7 @@ describe("useModelRegistry", () => {
103
195
  });
104
196
 
105
197
  it("resolves cursor models by compound key via getByKey", () => {
106
- const { result } = renderHook(() => useModelRegistry());
198
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
107
199
  const key = modelKey("cursor", DEFAULT_CURSOR_MODEL_ID);
108
200
  const model = result.current.getByKey(key);
109
201
  expect(model).toBeDefined();
@@ -112,7 +204,7 @@ describe("useModelRegistry", () => {
112
204
  });
113
205
 
114
206
  it("returns undefined for unknown compound keys via getByKey", () => {
115
- const { result } = renderHook(() => useModelRegistry());
207
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
116
208
  expect(result.current.getByKey("native/nonexistent")).toBeUndefined();
117
209
  });
118
210
  });
@@ -121,7 +213,7 @@ describe("useModelRegistry", () => {
121
213
  it("shows only native-harness models", () => {
122
214
  const { result } = renderHook(() =>
123
215
  useModelRegistry({ harness: "native" }),
124
- );
216
+ { wrapper: createWrapper() });
125
217
  for (const model of result.current.models) {
126
218
  expect(model.harness).toBe("native");
127
219
  }
@@ -130,7 +222,7 @@ describe("useModelRegistry", () => {
130
222
  it("excludes cursor-harness models", () => {
131
223
  const { result } = renderHook(() =>
132
224
  useModelRegistry({ harness: "native" }),
133
- );
225
+ { wrapper: createWrapper() });
134
226
  const cursorModels = result.current.models.filter(
135
227
  (m) => m.harness === "cursor",
136
228
  );
@@ -140,10 +232,10 @@ describe("useModelRegistry", () => {
140
232
  it("resolves defaultModel to the first featured native model", () => {
141
233
  const { result } = renderHook(() =>
142
234
  useModelRegistry({ harness: "native" }),
143
- );
235
+ { wrapper: createWrapper() });
144
236
  const featured = result.current.featured;
145
237
  expect(featured.length).toBeGreaterThan(0);
146
- expect(result.current.defaultModel.modelId).toBe(featured[0].modelId);
238
+ expect(result.current.defaultModel!.modelId).toBe(featured[0].modelId);
147
239
  });
148
240
  });
149
241
 
@@ -151,7 +243,7 @@ describe("useModelRegistry", () => {
151
243
  it("shows only cursor-harness models", () => {
152
244
  const { result } = renderHook(() =>
153
245
  useModelRegistry({ harness: "cursor" }),
154
- );
246
+ { wrapper: createWrapper() });
155
247
  for (const model of result.current.models) {
156
248
  expect(model.harness).toBe("cursor");
157
249
  }
@@ -160,26 +252,16 @@ describe("useModelRegistry", () => {
160
252
  it("includes cursor-harness models from multiple providers", () => {
161
253
  const { result } = renderHook(() =>
162
254
  useModelRegistry({ harness: "cursor" }),
163
- );
255
+ { wrapper: createWrapper() });
164
256
  const providers = new Set(result.current.models.map((m) => m.provider));
165
257
  expect(providers.size).toBeGreaterThan(1);
166
258
  });
167
259
 
168
- it("includes all cursor-harness models from MODEL_REGISTRY", () => {
169
- const { result } = renderHook(() =>
170
- useModelRegistry({ harness: "cursor" }),
171
- );
172
- const cursorModels = MODEL_REGISTRY.filter(
173
- (m) => m.harness === "cursor",
174
- );
175
- expect(result.current.models).toHaveLength(cursorModels.length);
176
- });
177
-
178
260
  it("resolves defaultModel to DEFAULT_CURSOR_MODEL_ID", () => {
179
261
  const { result } = renderHook(() =>
180
262
  useModelRegistry({ harness: "cursor" }),
181
- );
182
- expect(result.current.defaultModel.modelId).toBe(
263
+ { wrapper: createWrapper() });
264
+ expect(result.current.defaultModel!.modelId).toBe(
183
265
  DEFAULT_CURSOR_MODEL_ID,
184
266
  );
185
267
  });
@@ -187,7 +269,7 @@ describe("useModelRegistry", () => {
187
269
  it("looks up cursor models via getModel", () => {
188
270
  const { result } = renderHook(() =>
189
271
  useModelRegistry({ harness: "cursor" }),
190
- );
272
+ { wrapper: createWrapper() });
191
273
  expect(
192
274
  result.current.getModel(DEFAULT_CURSOR_MODEL_ID),
193
275
  ).toBeDefined();
@@ -196,14 +278,41 @@ describe("useModelRegistry", () => {
196
278
  it("cannot look up native-only models via getModel", () => {
197
279
  const { result } = renderHook(() =>
198
280
  useModelRegistry({ harness: "cursor" }),
199
- );
281
+ { wrapper: createWrapper() });
200
282
  expect(result.current.getModel(DEFAULT_MODEL_ID)).toBeUndefined();
201
283
  });
202
284
  });
203
285
 
286
+ describe("loading state", () => {
287
+ it("exposes isLoading from context", () => {
288
+ const loadingState: ModelRegistryState = { models: [], isLoading: true, error: null };
289
+ const wrapper = ({ children }: { children: ReactNode }) => (
290
+ <ModelRegistryContext.Provider value={loadingState}>
291
+ {children}
292
+ </ModelRegistryContext.Provider>
293
+ );
294
+ const { result } = renderHook(() => useModelRegistry(), { wrapper });
295
+ expect(result.current.isLoading).toBe(true);
296
+ expect(result.current.models).toHaveLength(0);
297
+ });
298
+
299
+ it("exposes error from context", () => {
300
+ const err = new Error("fetch failed");
301
+ const errorState: ModelRegistryState = { models: [], isLoading: false, error: err };
302
+ const wrapper = ({ children }: { children: ReactNode }) => (
303
+ <ModelRegistryContext.Provider value={errorState}>
304
+ {children}
305
+ </ModelRegistryContext.Provider>
306
+ );
307
+ const { result } = renderHook(() => useModelRegistry(), { wrapper });
308
+ expect(result.current.error).toBe(err);
309
+ expect(result.current.isLoading).toBe(false);
310
+ });
311
+ });
312
+
204
313
  describe("defaultModel fallback", () => {
205
314
  it("falls back to the first enabled model when default ID is missing", () => {
206
- const { result } = renderHook(() => useModelRegistry());
315
+ const { result } = renderHook(() => useModelRegistry(), { wrapper: createWrapper() });
207
316
  expect(result.current.defaultModel).toBeDefined();
208
317
  expect(result.current.models).toContain(result.current.defaultModel);
209
318
  });
@@ -1,8 +1,10 @@
1
- export { MODEL_REGISTRY, DEFAULT_MODEL_ID, DEFAULT_CURSOR_MODEL_ID, DISABLED_PROVIDERS, modelKey, parseModelKey, resolveDefaultModelId } from "./registry";
1
+ export { DEFAULT_MODEL_ID, DEFAULT_CURSOR_MODEL_ID, DISABLED_PROVIDERS, modelKey, parseModelKey, resolveDefaultModelId, fetchModelRegistry, parseRegistryJson } from "./registry";
2
2
  export type { ParsedModelKey, DefaultModelResolution, DefaultModelSource } from "./registry";
3
3
  export type { ModelInfo, Provider, CostTier, SpeedTier } from "./registry";
4
4
  export { useModelRegistry } from "./useModelRegistry";
5
5
  export type { UseModelRegistryReturn, UseModelRegistryOptions } from "./useModelRegistry";
6
+ export { ModelRegistryContext, useModelRegistryContext } from "./ModelRegistryContext";
7
+ export type { ModelRegistryState } from "./ModelRegistryContext";
6
8
  export { ModelSelector } from "./ModelSelector";
7
9
  export type { ModelSelectorProps } from "./ModelSelector";
8
10
  export { HarnessSelector } from "./HarnessSelector";