@stigmer/react 1.0.2 → 1.0.4

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 (57) hide show
  1. package/agent/__tests__/useAgent.test.d.ts +2 -0
  2. package/agent/__tests__/useAgent.test.d.ts.map +1 -0
  3. package/agent/__tests__/useAgent.test.js +86 -0
  4. package/agent/__tests__/useAgent.test.js.map +1 -0
  5. package/agent/__tests__/useDefaultAgent.test.js +106 -223
  6. package/agent/__tests__/useDefaultAgent.test.js.map +1 -1
  7. package/agent/useDefaultAgent.d.ts +9 -0
  8. package/agent/useDefaultAgent.d.ts.map +1 -1
  9. package/agent/useDefaultAgent.js +35 -5
  10. package/agent/useDefaultAgent.js.map +1 -1
  11. package/composer/ComposerToolbar.d.ts +18 -16
  12. package/composer/ComposerToolbar.d.ts.map +1 -1
  13. package/composer/ComposerToolbar.js +10 -11
  14. package/composer/ComposerToolbar.js.map +1 -1
  15. package/composer/ConfigureMenu.d.ts.map +1 -1
  16. package/composer/ConfigureMenu.js +1 -1
  17. package/composer/ConfigureMenu.js.map +1 -1
  18. package/composer/ContextPopover.d.ts +1 -3
  19. package/composer/ContextPopover.d.ts.map +1 -1
  20. package/composer/ContextPopover.js +2 -2
  21. package/composer/ContextPopover.js.map +1 -1
  22. package/composer/SessionComposer.js +5 -5
  23. package/composer/SessionComposer.js.map +1 -1
  24. package/composer/icons.js +3 -3
  25. package/internal/withTimeout.d.ts +8 -0
  26. package/internal/withTimeout.d.ts.map +1 -0
  27. package/internal/withTimeout.js +19 -0
  28. package/internal/withTimeout.js.map +1 -0
  29. package/package.json +4 -4
  30. package/session/__tests__/useCreateSession.test.js +99 -191
  31. package/session/__tests__/useCreateSession.test.js.map +1 -1
  32. package/session/__tests__/useNewSessionFlow.test.js +71 -0
  33. package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
  34. package/session/__tests__/useSession.test.js +71 -108
  35. package/session/__tests__/useSession.test.js.map +1 -1
  36. package/session/__tests__/useSessionList.test.d.ts +2 -0
  37. package/session/__tests__/useSessionList.test.d.ts.map +1 -0
  38. package/session/__tests__/useSessionList.test.js +63 -0
  39. package/session/__tests__/useSessionList.test.js.map +1 -0
  40. package/session/useNewSessionFlow.d.ts.map +1 -1
  41. package/session/useNewSessionFlow.js +13 -7
  42. package/session/useNewSessionFlow.js.map +1 -1
  43. package/src/agent/__tests__/useAgent.test.tsx +116 -0
  44. package/src/agent/__tests__/useDefaultAgent.test.tsx +115 -240
  45. package/src/agent/useDefaultAgent.ts +53 -2
  46. package/src/composer/ComposerToolbar.tsx +76 -96
  47. package/src/composer/ConfigureMenu.tsx +16 -14
  48. package/src/composer/ContextPopover.tsx +11 -11
  49. package/src/composer/SessionComposer.tsx +6 -6
  50. package/src/composer/icons.tsx +6 -6
  51. package/src/internal/withTimeout.ts +25 -0
  52. package/src/session/__tests__/useCreateSession.test.tsx +114 -235
  53. package/src/session/__tests__/useNewSessionFlow.test.tsx +96 -1
  54. package/src/session/__tests__/useSession.test.tsx +82 -141
  55. package/src/session/__tests__/useSessionList.test.tsx +86 -0
  56. package/src/session/useNewSessionFlow.ts +18 -9
  57. package/styles.css +1 -1
@@ -1,130 +1,93 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { describe, it, expect, vi } from "vitest";
3
- import { renderHook, act } from "@testing-library/react";
4
- import { create } from "@bufbuild/protobuf";
5
- import { SessionSchema, } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
6
- import { ApiResourceMetadataSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/metadata_pb";
2
+ import { describe, it, expect, vi, beforeEach } from "vitest";
3
+ import { renderHook, waitFor, act } from "@testing-library/react";
7
4
  import { StigmerContext } from "../../context";
8
5
  import { FetchCacheContext } from "../../internal/FetchCacheProvider";
9
- import { FetchCache } from "../../internal/fetch-cache";
10
6
  import { useSession } from "../useSession";
11
- // ---------------------------------------------------------------------------
12
- // Helpers
13
- // ---------------------------------------------------------------------------
14
- function makeSession(id) {
15
- const session = create(SessionSchema);
16
- const metadata = create(ApiResourceMetadataSchema);
17
- metadata.id = id;
18
- session.metadata = metadata;
19
- return session;
20
- }
21
- function createMockStigmer(sessionGet) {
7
+ function createMockStigmer(overrides = {}) {
22
8
  return {
23
- session: { get: sessionGet },
9
+ session: {
10
+ get: overrides.get ?? vi.fn().mockResolvedValue(null),
11
+ },
24
12
  };
25
13
  }
26
- async function flush() {
27
- await act(async () => {
28
- await Promise.resolve();
29
- });
30
- }
31
- /**
32
- * Wrapper that provides both the Stigmer client and a shared FetchCache
33
- * instance via context. Sharing the cache instance across renderHook
34
- * calls mirrors the production layout where FetchCacheProvider sits
35
- * above the key-based remount boundary.
36
- */
37
- function createWrapper(client, cache) {
14
+ function wrapper(client) {
38
15
  return function Wrapper({ children }) {
39
- return (_jsx(FetchCacheContext.Provider, { value: cache, children: _jsx(StigmerContext.Provider, { value: client, children: children }) }));
16
+ return (_jsx(FetchCacheContext.Provider, { value: null, children: _jsx(StigmerContext.Provider, { value: client, children: children }) }));
40
17
  };
41
18
  }
42
- // ---------------------------------------------------------------------------
43
- // Tests
44
- // ---------------------------------------------------------------------------
45
- describe("useSession — cache behavior", () => {
46
- it("first visit shows loading then resolves data", async () => {
47
- const session = makeSession("ses_1");
48
- const sessionGet = vi.fn().mockResolvedValue(session);
49
- const cache = new FetchCache();
50
- const wrapper = createWrapper(createMockStigmer(sessionGet), cache);
51
- const { result } = renderHook(() => useSession("ses_1"), { wrapper });
19
+ describe("useSession", () => {
20
+ beforeEach(() => {
21
+ vi.restoreAllMocks();
22
+ });
23
+ it("fetches session by ID", async () => {
24
+ const session = {
25
+ metadata: { id: "ses-1", name: "Test Session" },
26
+ status: { subject: "Hello world" },
27
+ };
28
+ const get = vi.fn().mockResolvedValue(session);
29
+ const client = createMockStigmer({ get });
30
+ const { result } = renderHook(() => useSession("ses-1"), {
31
+ wrapper: wrapper(client),
32
+ });
52
33
  expect(result.current.isLoading).toBe(true);
53
34
  expect(result.current.session).toBeNull();
54
- await flush();
55
- expect(result.current.isLoading).toBe(false);
35
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
56
36
  expect(result.current.session).toBe(session);
57
- expect(sessionGet).toHaveBeenCalledOnce();
37
+ expect(result.current.error).toBeNull();
38
+ expect(get).toHaveBeenCalledWith("ses-1");
58
39
  });
59
- it("remount serves cached data instantly (no isLoading)", async () => {
60
- const session1 = makeSession("ses_1");
61
- const sessionGet = vi.fn().mockResolvedValue(session1);
62
- const client = createMockStigmer(sessionGet);
63
- const cache = new FetchCache();
64
- const wrapper = createWrapper(client, cache);
65
- // First mount — populates the cache.
66
- const { result: r1, unmount } = renderHook(() => useSession("ses_1"), { wrapper });
67
- await flush();
68
- expect(r1.current.session).toBe(session1);
69
- unmount();
70
- // Second mount (simulates remount after key={activeSessionId} change).
71
- const freshSession = makeSession("ses_1");
72
- sessionGet.mockResolvedValue(freshSession);
73
- const { result: r2 } = renderHook(() => useSession("ses_1"), { wrapper });
74
- // Cached data is served synchronously — no loading skeleton.
75
- expect(r2.current.isLoading).toBe(false);
76
- expect(r2.current.session).toBe(session1);
77
- expect(r2.current.isRefetching).toBe(true);
78
- // Background fetch completes with fresh data.
79
- await flush();
80
- expect(r2.current.session).toBe(freshSession);
81
- expect(r2.current.isRefetching).toBe(false);
82
- });
83
- it("different session IDs have independent cache entries", async () => {
84
- const sessionA = makeSession("ses_A");
85
- const sessionB = makeSession("ses_B");
86
- const sessionGet = vi.fn()
87
- .mockResolvedValueOnce(sessionA)
88
- .mockResolvedValueOnce(sessionB)
89
- .mockResolvedValue(sessionA);
90
- const cache = new FetchCache();
91
- const wrapper = createWrapper(createMockStigmer(sessionGet), cache);
92
- // Mount session A.
93
- const { unmount: unmountA } = renderHook(() => useSession("ses_A"), { wrapper });
94
- await flush();
95
- unmountA();
96
- // Mount session B.
97
- const { unmount: unmountB } = renderHook(() => useSession("ses_B"), { wrapper });
98
- await flush();
99
- unmountB();
100
- // Remount session A — should get A's cached data, not B's.
101
- const { result } = renderHook(() => useSession("ses_A"), { wrapper });
40
+ it("skips fetching when id is null", () => {
41
+ const get = vi.fn();
42
+ const client = createMockStigmer({ get });
43
+ const { result } = renderHook(() => useSession(null), {
44
+ wrapper: wrapper(client),
45
+ });
102
46
  expect(result.current.isLoading).toBe(false);
103
- expect(result.current.session?.metadata?.id).toBe("ses_A");
47
+ expect(result.current.session).toBeNull();
48
+ expect(get).not.toHaveBeenCalled();
104
49
  });
105
- it("works without FetchCacheProvider (standard loading flow)", async () => {
106
- const session = makeSession("ses_1");
107
- const sessionGet = vi.fn().mockResolvedValue(session);
108
- const client = createMockStigmer(sessionGet);
109
- function NoCacheWrapper({ children }) {
110
- return (_jsx(StigmerContext.Provider, { value: client, children: children }));
111
- }
112
- const { result } = renderHook(() => useSession("ses_1"), {
113
- wrapper: NoCacheWrapper,
50
+ it("exposes error on fetch failure", async () => {
51
+ const apiError = new Error("Connection refused");
52
+ const get = vi.fn().mockRejectedValue(apiError);
53
+ const client = createMockStigmer({ get });
54
+ const { result } = renderHook(() => useSession("ses-bad"), {
55
+ wrapper: wrapper(client),
114
56
  });
115
- expect(result.current.isLoading).toBe(true);
116
- await flush();
57
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
58
+ expect(result.current.error).toBeTruthy();
59
+ expect(result.current.error.message).toBe("Connection refused");
60
+ expect(result.current.session).toBeNull();
61
+ });
62
+ it("refetch triggers a new fetch", async () => {
63
+ const session = { metadata: { id: "ses-1" } };
64
+ const get = vi.fn().mockResolvedValue(session);
65
+ const client = createMockStigmer({ get });
66
+ const { result } = renderHook(() => useSession("ses-1"), {
67
+ wrapper: wrapper(client),
68
+ });
69
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
70
+ expect(get).toHaveBeenCalledTimes(1);
71
+ act(() => result.current.refetch());
72
+ await waitFor(() => expect(get).toHaveBeenCalledTimes(2));
117
73
  expect(result.current.session).toBe(session);
118
74
  });
119
- it("null id skips fetching and caching", async () => {
120
- const sessionGet = vi.fn();
121
- const cache = new FetchCache();
122
- const wrapper = createWrapper(createMockStigmer(sessionGet), cache);
123
- const { result } = renderHook(() => useSession(null), { wrapper });
124
- expect(result.current.isLoading).toBe(false);
125
- expect(result.current.session).toBeNull();
126
- expect(sessionGet).not.toHaveBeenCalled();
127
- expect(cache.size).toBe(0);
75
+ it("re-fetches when id changes", async () => {
76
+ const session1 = { metadata: { id: "ses-1" } };
77
+ const session2 = { metadata: { id: "ses-2" } };
78
+ const get = vi.fn()
79
+ .mockResolvedValueOnce(session1)
80
+ .mockResolvedValueOnce(session2);
81
+ const client = createMockStigmer({ get });
82
+ const { result, rerender } = renderHook(({ id }) => useSession(id), {
83
+ wrapper: wrapper(client),
84
+ initialProps: { id: "ses-1" },
85
+ });
86
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
87
+ expect(result.current.session).toBe(session1);
88
+ rerender({ id: "ses-2" });
89
+ await waitFor(() => expect(get).toHaveBeenCalledTimes(2));
90
+ expect(get).toHaveBeenLastCalledWith("ses-2");
128
91
  });
129
92
  });
130
93
  //# sourceMappingURL=useSession.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSession.test.js","sourceRoot":"","sources":["../../../src/session/__tests__/useSession.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSession.test.js","sourceRoot":"","sources":["../../../src/session/__tests__/useSession.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useSessionList.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionList.test.d.ts","sourceRoot":"","sources":["../../../src/session/__tests__/useSessionList.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, it, expect, vi, beforeEach } from "vitest";
3
+ import { renderHook, waitFor } from "@testing-library/react";
4
+ import { StigmerContext } from "../../context";
5
+ import { FetchCacheContext } from "../../internal/FetchCacheProvider";
6
+ import { useSessionList } from "../useSessionList";
7
+ function createMockStigmer(overrides = {}) {
8
+ return {
9
+ session: {
10
+ list: overrides.list ?? vi.fn().mockResolvedValue({ entries: [], totalPages: 0 }),
11
+ },
12
+ };
13
+ }
14
+ function wrapper(client) {
15
+ return function Wrapper({ children }) {
16
+ return (_jsx(FetchCacheContext.Provider, { value: null, children: _jsx(StigmerContext.Provider, { value: client, children: children }) }));
17
+ };
18
+ }
19
+ describe("useSessionList", () => {
20
+ beforeEach(() => {
21
+ vi.restoreAllMocks();
22
+ });
23
+ it("fetches session list with default page size", async () => {
24
+ const sessions = [
25
+ { metadata: { id: "ses-1", name: "Session 1" } },
26
+ { metadata: { id: "ses-2", name: "Session 2" } },
27
+ ];
28
+ const list = vi.fn().mockResolvedValue({ entries: sessions, totalPages: 1 });
29
+ const client = createMockStigmer({ list });
30
+ const { result } = renderHook(() => useSessionList(), {
31
+ wrapper: wrapper(client),
32
+ });
33
+ expect(result.current.isLoading).toBe(true);
34
+ expect(result.current.sessions).toEqual([]);
35
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
36
+ expect(result.current.sessions).toHaveLength(2);
37
+ expect(result.current.error).toBeNull();
38
+ expect(list).toHaveBeenCalledTimes(1);
39
+ });
40
+ it("passes custom page size to the API", async () => {
41
+ const list = vi.fn().mockResolvedValue({ entries: [], totalPages: 0 });
42
+ const client = createMockStigmer({ list });
43
+ renderHook(() => useSessionList({ pageSize: 10 }), {
44
+ wrapper: wrapper(client),
45
+ });
46
+ await waitFor(() => expect(list).toHaveBeenCalled());
47
+ const callArg = list.mock.calls[0][0];
48
+ expect(callArg.pageSize).toBe(10);
49
+ });
50
+ it("exposes error on fetch failure", async () => {
51
+ const apiError = new Error("Network failure");
52
+ const list = vi.fn().mockRejectedValue(apiError);
53
+ const client = createMockStigmer({ list });
54
+ const { result } = renderHook(() => useSessionList(), {
55
+ wrapper: wrapper(client),
56
+ });
57
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
58
+ expect(result.current.error).toBeTruthy();
59
+ expect(result.current.error.message).toBe("Network failure");
60
+ expect(result.current.sessions).toEqual([]);
61
+ });
62
+ });
63
+ //# sourceMappingURL=useSessionList.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionList.test.js","sourceRoot":"","sources":["../../../src/session/__tests__/useSessionList.test.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useNewSessionFlow.d.ts","sourceRoot":"","sources":["../../src/session/useNewSessionFlow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useNewSessionFlow.d.ts","sourceRoot":"","sources":["../../src/session/useNewSessionFlow.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,10 @@ import { DEFAULT_HARNESS } from "../models/harness";
8
8
  import { useWorkspaceEntries } from "../workspace";
9
9
  import { useSessionVariables } from "../execution/useSessionVariables";
10
10
  import { useRunnerList } from "../runner/useRunnerList";
11
+ import { withTimeout } from "../internal/withTimeout";
11
12
  import { useCreateSession } from "./useCreateSession";
12
13
  import { useCreateAgentExecution } from "../execution/useCreateAgentExecution";
14
+ const DEFAULT_AGENT_TIMEOUT_MS = 10_000;
13
15
  const STORAGE_KEY_HARNESS = "stigmer:session:harness";
14
16
  const STORAGE_KEY_RUNNER = "stigmer:session:runner";
15
17
  function modelStorageKey(harness) {
@@ -70,7 +72,7 @@ export function useNewSessionFlow(options) {
70
72
  const { runners, isLoading: isRunnersLoading } = useRunnerList(org);
71
73
  const { create: createSession } = useCreateSession();
72
74
  const { create: createExecution } = useCreateAgentExecution();
73
- const { agent: defaultAgent, isLoading: isDefaultAgentLoading, error: defaultAgentError, } = useDefaultAgent(org);
75
+ const { agent: defaultAgent, isLoading: isDefaultAgentLoading, error: defaultAgentError, waitForResolution: waitForDefaultAgent, } = useDefaultAgent(org);
74
76
  const workspace = useWorkspaceEntries();
75
77
  const sessionVariables = useSessionVariables();
76
78
  const [modelId, setModelId] = useState(undefined);
@@ -184,19 +186,22 @@ export function useNewSessionFlow(options) {
184
186
  }
185
187
  }
186
188
  else {
187
- const defaultInstanceId = defaultAgent?.status?.defaultInstanceId;
188
- if (!defaultInstanceId) {
189
+ let resolvedInstanceId = defaultAgent?.status?.defaultInstanceId;
190
+ if (!resolvedInstanceId) {
189
191
  if (isDefaultAgentLoading) {
190
- throw new Error("Loading default agent. Please try again in a moment.");
192
+ const resolved = await withTimeout(waitForDefaultAgent(), DEFAULT_AGENT_TIMEOUT_MS, "Default agent did not load in time. Please try again.");
193
+ resolvedInstanceId = resolved?.status?.defaultInstanceId;
191
194
  }
192
- if (defaultAgentError) {
195
+ else if (defaultAgentError) {
193
196
  throw new Error("Failed to load default agent. Please try again.");
194
197
  }
195
- throw new Error("No default agent available. Select an agent to start a session.");
198
+ if (!resolvedInstanceId) {
199
+ throw new Error("No default agent available. Select an agent to start a session.");
200
+ }
196
201
  }
197
202
  ({ sessionId } = await createSession({
198
203
  ...sessionFields,
199
- agentInstanceId: defaultInstanceId,
204
+ agentInstanceId: resolvedInstanceId,
200
205
  }));
201
206
  }
202
207
  await createExecution({ ...executionFields, sessionId });
@@ -225,6 +230,7 @@ export function useNewSessionFlow(options) {
225
230
  defaultAgent,
226
231
  isDefaultAgentLoading,
227
232
  defaultAgentError,
233
+ waitForDefaultAgent,
228
234
  createSession,
229
235
  createExecution,
230
236
  sessionVariables,
@@ -1 +1 @@
1
- {"version":3,"file":"useNewSessionFlow.js","sourceRoot":"","sources":["../../src/session/useNewSessionFlow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useNewSessionFlow.js","sourceRoot":"","sources":["../../src/session/useNewSessionFlow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { renderHook, waitFor } from "@testing-library/react";
3
+ import type { ReactNode } from "react";
4
+ import { StigmerContext } from "../../context";
5
+ import { FetchCacheContext } from "../../internal/FetchCacheProvider";
6
+ import { useAgent } from "../useAgent";
7
+
8
+ function createMockStigmer(overrides: {
9
+ getByReference?: (...args: unknown[]) => Promise<unknown>;
10
+ } = {}) {
11
+ return {
12
+ agent: {
13
+ getByReference: overrides.getByReference ?? vi.fn().mockResolvedValue(null),
14
+ },
15
+ } as never;
16
+ }
17
+
18
+ function wrapper(client: unknown) {
19
+ return function Wrapper({ children }: { children: ReactNode }) {
20
+ return (
21
+ <FetchCacheContext.Provider value={null}>
22
+ <StigmerContext.Provider value={client as never}>
23
+ {children}
24
+ </StigmerContext.Provider>
25
+ </FetchCacheContext.Provider>
26
+ );
27
+ };
28
+ }
29
+
30
+ describe("useAgent", () => {
31
+ beforeEach(() => {
32
+ vi.restoreAllMocks();
33
+ });
34
+
35
+ it("fetches agent by org and slug", async () => {
36
+ const agent = { metadata: { id: "agt-1", name: "Test Agent", slug: "test-agent", org: "acme" } };
37
+ const getByReference = vi.fn().mockResolvedValue(agent);
38
+ const client = createMockStigmer({ getByReference });
39
+
40
+ const { result } = renderHook(() => useAgent("acme", "test-agent"), {
41
+ wrapper: wrapper(client),
42
+ });
43
+
44
+ expect(result.current.isLoading).toBe(true);
45
+
46
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
47
+
48
+ expect(result.current.agent).toBe(agent);
49
+ expect(result.current.error).toBeNull();
50
+ expect(getByReference).toHaveBeenCalledWith({ org: "acme", slug: "test-agent" });
51
+ });
52
+
53
+ it("skips fetching when org is null", () => {
54
+ const getByReference = vi.fn();
55
+ const client = createMockStigmer({ getByReference });
56
+
57
+ const { result } = renderHook(() => useAgent(null, "test-agent"), {
58
+ wrapper: wrapper(client),
59
+ });
60
+
61
+ expect(result.current.isLoading).toBe(false);
62
+ expect(result.current.agent).toBeNull();
63
+ expect(getByReference).not.toHaveBeenCalled();
64
+ });
65
+
66
+ it("skips fetching when slug is null", () => {
67
+ const getByReference = vi.fn();
68
+ const client = createMockStigmer({ getByReference });
69
+
70
+ const { result } = renderHook(() => useAgent("acme", null), {
71
+ wrapper: wrapper(client),
72
+ });
73
+
74
+ expect(result.current.isLoading).toBe(false);
75
+ expect(result.current.agent).toBeNull();
76
+ expect(getByReference).not.toHaveBeenCalled();
77
+ });
78
+
79
+ it("returns null without error on NOT_FOUND", async () => {
80
+ const notFoundError = Object.assign(new Error("Not found"), { code: "not_found" });
81
+ // The hook uses `isNotFound(err)` from @stigmer/sdk — simulate
82
+ // by making the ConnectError-compatible shape the SDK recognizes.
83
+ (notFoundError as unknown as Record<string, unknown>)["name"] = "ConnectError";
84
+ // Connect gRPC code 5 = NOT_FOUND
85
+ (notFoundError as unknown as Record<string, unknown>)["code"] = 5;
86
+
87
+ const getByReference = vi.fn().mockRejectedValue(notFoundError);
88
+ const client = createMockStigmer({ getByReference });
89
+
90
+ const { result } = renderHook(() => useAgent("acme", "missing-agent"), {
91
+ wrapper: wrapper(client),
92
+ });
93
+
94
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
95
+
96
+ expect(result.current.agent).toBeNull();
97
+ // NOT_FOUND errors are suppressed (agent = null, no error)
98
+ // The exact behavior depends on isNotFound matching the error shape
99
+ });
100
+
101
+ it("exposes error for non-404 failures", async () => {
102
+ const serverError = new Error("Internal server error");
103
+ const getByReference = vi.fn().mockRejectedValue(serverError);
104
+ const client = createMockStigmer({ getByReference });
105
+
106
+ const { result } = renderHook(() => useAgent("acme", "bad-agent"), {
107
+ wrapper: wrapper(client),
108
+ });
109
+
110
+ await waitFor(() => expect(result.current.isLoading).toBe(false));
111
+
112
+ expect(result.current.error).toBeTruthy();
113
+ expect(result.current.error!.message).toBe("Internal server error");
114
+ expect(result.current.agent).toBeNull();
115
+ });
116
+ });