@agent-native/toolkit 0.198.2 → 0.198.3-nightly-20260930154911
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.
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +13 -5
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +20 -6
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +211 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +147 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +147 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +147 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +163 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +163 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +147 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +131 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +131 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +163 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +131 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +131 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/observability/ObservabilityDashboard.d.ts.map +1 -1
- package/dist/app/observability/ObservabilityDashboard.js +101 -109
- package/dist/app/observability/ObservabilityDashboard.js.map +1 -1
- package/dist/app/observability/RunInsights.d.ts +22 -0
- package/dist/app/observability/RunInsights.d.ts.map +1 -0
- package/dist/app/observability/RunInsights.js +658 -0
- package/dist/app/observability/RunInsights.js.map +1 -0
- package/dist/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/composer/RealtimeVoiceMode.js +1 -1
- package/dist/composer/RealtimeVoiceMode.js.map +1 -1
- package/package.json +5 -5
- package/src/app/agent-page/ConnectionsTab.spec.tsx +0 -3
- package/src/app/agentkit/react/components.spec.tsx +2 -1
- package/src/app/agentkit/react/components.tsx +14 -5
- package/src/app/agentkit/react/composer-context.spec.tsx +4 -1
- package/src/app/agentkit/react/suggestions.spec.tsx +51 -1
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +57 -0
- package/src/app/chat/AgentKitAssistantChat.tsx +44 -8
- package/src/app/chat/AgentPanel.header.spec.ts +22 -22
- package/src/app/chat/agentkit-chat/action-widget.spec.tsx +17 -2
- package/src/app/chat/agentkit-chat/approval-card.spec.tsx +2 -2
- package/src/app/chat/agentkit-chat/connections.spec.tsx +1 -1
- package/src/app/chat/chat/markdown-renderer.spec.tsx +1 -1
- package/src/app/chat/chat/tool-call-display.spec.tsx +25 -2
- package/src/app/chat/chat/widgets/DataTableWidget.spec.tsx +38 -26
- package/src/app/chat/chat/widgets/agent-team-progress-widget.spec.tsx +7 -1
- package/src/app/chat/chat/widgets/builtin-connect-required-renderer.spec.tsx +24 -1
- package/src/app/chat/chat/widgets/record-change-widget.spec.tsx +16 -1
- package/src/app/chat/thinking-display.spec.tsx +1 -1
- package/src/app/db-admin/useAgentSync.spec.tsx +1 -1
- package/src/app/extensions/ExtensionViewer.spec.tsx +2 -1
- package/src/app/i18n/catalogs/ar-SA.ts +282 -0
- package/src/app/i18n/catalogs/de-DE.ts +198 -0
- package/src/app/i18n/catalogs/en-US.ts +187 -0
- package/src/app/i18n/catalogs/es-ES.ts +221 -0
- package/src/app/i18n/catalogs/fr-FR.ts +219 -0
- package/src/app/i18n/catalogs/hi-IN.ts +182 -0
- package/src/app/i18n/catalogs/ja-JP.ts +160 -0
- package/src/app/i18n/catalogs/ko-KR.ts +160 -0
- package/src/app/i18n/catalogs/pt-BR.ts +220 -0
- package/src/app/i18n/catalogs/zh-CN.ts +154 -0
- package/src/app/i18n/catalogs/zh-TW.ts +154 -0
- package/src/app/integrations/BuilderIntegrationPage.spec.tsx +3 -3
- package/src/app/integrations/ChannelsPage.spec.tsx +3 -3
- package/src/app/integrations/IntegrationsPage.spec.tsx +3 -3
- package/src/app/integrations/IntegrationsPanel.spec.tsx +7 -4
- package/src/app/observability/ObservabilityDashboard.review.spec.tsx +211 -52
- package/src/app/observability/ObservabilityDashboard.spec.tsx +80 -20
- package/src/app/observability/ObservabilityDashboard.tsx +240 -400
- package/src/app/observability/RunInsights.tsx +1603 -0
- package/src/app/observability/ThumbsFeedback.spec.tsx +29 -12
- package/src/app/onboarding/FirstRunOnboarding.spec.tsx +25 -5
- package/src/app/onboarding/first-run-startup-gate.spec.tsx +12 -7
- package/src/app/resources/McpConnectionSuggestion.render.spec.tsx +43 -5
- package/src/app/resources/McpIntegrationDialog.spec.tsx +20 -14
- package/src/app/resources/ResourcesPanel.spec.ts +9 -7
- package/src/app/review/ReviewThreadPanel.spec.tsx +2 -2
- package/src/app/settings/SecretsSection.spec.tsx +12 -3
- package/src/app/settings/SettingsTabsPage.spec.tsx +4 -1
- package/src/app/settings/VoiceTranscriptionSection.spec.tsx +12 -1
- package/src/app/settings/account/PreferencesSettings.spec.tsx +13 -1
- package/src/app/settings/account/ProfileSettings.spec.tsx +13 -1
- package/src/app/settings/account/SecuritySettings.spec.tsx +12 -1
- package/src/app/settings/shell/SettingsShell.spec.tsx +35 -15
- package/src/app/settings/shell/pages/app-group-pages.spec.tsx +7 -0
- package/src/app/settings/shell/pages/audit.spec.tsx +5 -2
- package/src/app/settings/shell/pages/resource-pages.spec.tsx +25 -16
- package/src/app/settings/shell/pages/sub-agents.spec.tsx +24 -15
- package/src/app/settings/usage/UsagePage.spec.tsx +4 -0
- package/src/app/setup-connections/BuilderConnectCard.spec.tsx +27 -8
- package/src/app/sharing/ShareButton.spec.tsx +7 -3
- package/src/app/sharing/ShareDialog.spec.tsx +4 -4
- package/src/app/sharing/useShareButtonController.spec.tsx +1 -1
- package/src/app/sharing/useShareDialogController.spec.tsx +2 -2
- package/src/app/transcription/BuilderTranscriptionCta.spec.tsx +1 -1
- package/src/composer/RealtimeVoiceMode.spec.tsx +1 -0
- package/src/composer/RealtimeVoiceMode.tsx +1 -5
|
@@ -27,7 +27,7 @@ vi.mock("@agent-native/core/client/labs/use-lab", () => ({
|
|
|
27
27
|
vi.mock("@agent-native/core/client/feature-flags/use-feature-flag", () => ({
|
|
28
28
|
useFeatureFlags: () => ({}),
|
|
29
29
|
}));
|
|
30
|
-
vi.mock("../../AgentSidebar.js", () => ({
|
|
30
|
+
vi.mock("../../chat/AgentSidebar.js", () => ({
|
|
31
31
|
AgentToggleButton: () => <button type="button">agent</button>,
|
|
32
32
|
}));
|
|
33
33
|
|
|
@@ -40,6 +40,9 @@ vi.mock("@agent-native/core/client/application-state", () => ({
|
|
|
40
40
|
deleteClientAppState: appState.remove,
|
|
41
41
|
}));
|
|
42
42
|
|
|
43
|
+
import { AgentNativeI18nProvider } from "@agent-native/core/client/i18n";
|
|
44
|
+
|
|
45
|
+
import { createToolkitI18nCatalog } from "../../i18n.js";
|
|
43
46
|
import { useSettingsPageHeader, useSettingsShell } from "./context.js";
|
|
44
47
|
import { CORE_SETTINGS_PAGES } from "./core-pages.js";
|
|
45
48
|
import {
|
|
@@ -53,6 +56,19 @@ import {
|
|
|
53
56
|
} from "./return-path.js";
|
|
54
57
|
import { SettingsShell, type SettingsShellProps } from "./SettingsShell.js";
|
|
55
58
|
|
|
59
|
+
const toolkitI18nCatalog = createToolkitI18nCatalog({ messages: {} });
|
|
60
|
+
|
|
61
|
+
function renderWithToolkitI18n(children: React.ReactNode) {
|
|
62
|
+
return (
|
|
63
|
+
<AgentNativeI18nProvider
|
|
64
|
+
catalog={toolkitI18nCatalog}
|
|
65
|
+
persistPreference={false}
|
|
66
|
+
>
|
|
67
|
+
{children}
|
|
68
|
+
</AgentNativeI18nProvider>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
56
72
|
function StubPage({ pageId, sub }: SettingsPageProps) {
|
|
57
73
|
return (
|
|
58
74
|
<div data-testid="page">
|
|
@@ -113,7 +129,9 @@ describe("SettingsShell", () => {
|
|
|
113
129
|
|
|
114
130
|
async function render(props: SettingsShellProps = {}) {
|
|
115
131
|
await act(async () => {
|
|
116
|
-
root.render(
|
|
132
|
+
root.render(
|
|
133
|
+
renderWithToolkitI18n(<SettingsShell appName="Clips" {...props} />),
|
|
134
|
+
);
|
|
117
135
|
});
|
|
118
136
|
await flush();
|
|
119
137
|
}
|
|
@@ -183,7 +201,7 @@ describe("SettingsShell", () => {
|
|
|
183
201
|
pages: ["org", "members", "usage"],
|
|
184
202
|
},
|
|
185
203
|
]);
|
|
186
|
-
expect(container.textContent).toContain("Back to
|
|
204
|
+
expect(container.textContent).toContain("Back to Clips");
|
|
187
205
|
});
|
|
188
206
|
|
|
189
207
|
it("shows Notifications and What's new when the app passes them", async () => {
|
|
@@ -294,7 +312,7 @@ describe("SettingsShell", () => {
|
|
|
294
312
|
},
|
|
295
313
|
);
|
|
296
314
|
await act(async () => {
|
|
297
|
-
root.render(<RouterProvider router={router} />);
|
|
315
|
+
root.render(renderWithToolkitI18n(<RouterProvider router={router} />));
|
|
298
316
|
});
|
|
299
317
|
await waitFor(() => location === "/settings/api-keys");
|
|
300
318
|
expect(container.querySelector('[data-testid="page"]')?.textContent).toBe(
|
|
@@ -349,7 +367,7 @@ describe("SettingsShell", () => {
|
|
|
349
367
|
{ initialEntries: [`/settings?section=${section}`] },
|
|
350
368
|
);
|
|
351
369
|
await act(async () => {
|
|
352
|
-
root.render(<RouterProvider router={router} />);
|
|
370
|
+
root.render(renderWithToolkitI18n(<RouterProvider router={router} />));
|
|
353
371
|
});
|
|
354
372
|
await waitFor(
|
|
355
373
|
() =>
|
|
@@ -495,7 +513,7 @@ describe("SettingsShell", () => {
|
|
|
495
513
|
labs: [{ key: "clips.meetings", displayName: "Meetings lab" }],
|
|
496
514
|
});
|
|
497
515
|
expect(search("recordings")[0]).toBe("RecordingsClips › General");
|
|
498
|
-
expect(search("meetings lab")[0]).toBe("Meetings
|
|
516
|
+
expect(search("meetings lab")[0]).toBe("Meetings labClips › Labs");
|
|
499
517
|
search("playback speed");
|
|
500
518
|
press("Enter");
|
|
501
519
|
await flush();
|
|
@@ -590,12 +608,14 @@ describe("SettingsShell", () => {
|
|
|
590
608
|
|
|
591
609
|
await act(async () => {
|
|
592
610
|
root.render(
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
611
|
+
renderWithToolkitI18n(
|
|
612
|
+
<SettingsShell
|
|
613
|
+
appName="Clips"
|
|
614
|
+
extraTabs={tabs}
|
|
615
|
+
value="drafting"
|
|
616
|
+
onValueChange={onValueChange}
|
|
617
|
+
/>,
|
|
618
|
+
),
|
|
599
619
|
);
|
|
600
620
|
});
|
|
601
621
|
await flush();
|
|
@@ -616,7 +636,7 @@ describe("SettingsShell", () => {
|
|
|
616
636
|
rememberSettingsReturnPath("/library", "?view=grid");
|
|
617
637
|
await render();
|
|
618
638
|
const back = [...rail().querySelectorAll("a")].find((link) =>
|
|
619
|
-
link.textContent?.includes("Back to
|
|
639
|
+
link.textContent?.includes("Back to Clips"),
|
|
620
640
|
);
|
|
621
641
|
expect(back?.getAttribute("href")).toBe("/library?view=grid");
|
|
622
642
|
});
|
|
@@ -692,7 +712,7 @@ describe("SettingsShell", () => {
|
|
|
692
712
|
{ initialEntries: ["/settings"] },
|
|
693
713
|
);
|
|
694
714
|
await act(async () => {
|
|
695
|
-
root.render(<RouterProvider router={router} />);
|
|
715
|
+
root.render(renderWithToolkitI18n(<RouterProvider router={router} />));
|
|
696
716
|
});
|
|
697
717
|
await flush();
|
|
698
718
|
clickPage("model");
|
|
@@ -729,7 +749,7 @@ describe("SettingsShell", () => {
|
|
|
729
749
|
{ initialEntries: ["/settings/infra"] },
|
|
730
750
|
);
|
|
731
751
|
await act(async () => {
|
|
732
|
-
root.render(<RouterProvider router={router} />);
|
|
752
|
+
root.render(renderWithToolkitI18n(<RouterProvider router={router} />));
|
|
733
753
|
});
|
|
734
754
|
await waitFor(() => location === "/settings/profile", 400);
|
|
735
755
|
clickPage("org");
|
|
@@ -38,6 +38,13 @@ const labsActions = vi.hoisted(() => ({
|
|
|
38
38
|
}));
|
|
39
39
|
vi.mock("@agent-native/core/client/hooks", () => ({
|
|
40
40
|
useChangeVersions: () => 0,
|
|
41
|
+
useDemoModeStatus: () => ({
|
|
42
|
+
enabled: false,
|
|
43
|
+
forced: false,
|
|
44
|
+
isLoading: false,
|
|
45
|
+
}),
|
|
46
|
+
}));
|
|
47
|
+
vi.mock("@agent-native/core/client/use-action", () => ({
|
|
41
48
|
useActionQuery: () => ({
|
|
42
49
|
data: labsActions.query.data,
|
|
43
50
|
isLoading: labsActions.query.data === undefined && !labsActions.isError,
|
|
@@ -14,8 +14,6 @@ const queriedActions = vi.hoisted(() => [] as Array<[string, unknown]>);
|
|
|
14
14
|
|
|
15
15
|
vi.mock("@agent-native/core/client/hooks", () => ({
|
|
16
16
|
callAction: callActionMock,
|
|
17
|
-
defaultActionQueryRetry: () => false,
|
|
18
|
-
defaultActionQueryRetryDelay: () => 0,
|
|
19
17
|
useActionQuery: (name: string, params: unknown, options?: any) => {
|
|
20
18
|
queriedActions.push([name, params]);
|
|
21
19
|
if (name === "list-audit-events") {
|
|
@@ -30,6 +28,11 @@ vi.mock("@agent-native/core/client/hooks", () => ({
|
|
|
30
28
|
},
|
|
31
29
|
}));
|
|
32
30
|
|
|
31
|
+
vi.mock("@agent-native/core/client/use-action", () => ({
|
|
32
|
+
defaultActionQueryRetry: () => false,
|
|
33
|
+
defaultActionQueryRetryDelay: () => 0,
|
|
34
|
+
}));
|
|
35
|
+
|
|
33
36
|
vi.mock("@agent-native/core/client/i18n", () => ({
|
|
34
37
|
useT:
|
|
35
38
|
() =>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @vitest-environment happy-dom
|
|
2
2
|
|
|
3
|
+
import { AgentNativeI18nProvider } from "@agent-native/core/client/i18n";
|
|
3
4
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
4
5
|
import React, { act, type ComponentType } from "react";
|
|
5
6
|
import { createRoot, type Root } from "react-dom/client";
|
|
@@ -9,7 +10,7 @@ const orgState = vi.hoisted(() => ({
|
|
|
9
10
|
value: { orgId: "org-1", orgName: "Acme", role: "member" as string },
|
|
10
11
|
}));
|
|
11
12
|
|
|
12
|
-
vi.mock("@agent-native/core/client/org", () => ({
|
|
13
|
+
vi.mock("@agent-native/core/client/org/hooks", () => ({
|
|
13
14
|
useOrg: () => ({ data: orgState.value, isLoading: false }),
|
|
14
15
|
}));
|
|
15
16
|
vi.mock("../../../org/workspace-app-links.js", () => ({
|
|
@@ -26,12 +27,15 @@ vi.mock("@agent-native/core/client/api-path", () => ({
|
|
|
26
27
|
import type { TreeNode } from "@agent-native/core/client/resources/use-resources";
|
|
27
28
|
import { TooltipProvider } from "@agent-native/toolkit/ui/tooltip";
|
|
28
29
|
|
|
30
|
+
import { createToolkitI18nCatalog } from "../../../i18n.js";
|
|
29
31
|
import { SettingsShellProvider, type SettingsPageHeader } from "../context.js";
|
|
30
32
|
import FilesSettingsPage from "./files.js";
|
|
31
33
|
import InstructionsSettingsPage from "./instructions.js";
|
|
32
34
|
import MemorySettingsPage from "./memory.js";
|
|
33
35
|
import SkillsSettingsPage from "./skills.js";
|
|
34
36
|
|
|
37
|
+
const toolkitI18nCatalog = createToolkitI18nCatalog({ messages: {} });
|
|
38
|
+
|
|
35
39
|
function leaf(
|
|
36
40
|
path: string,
|
|
37
41
|
owner: string,
|
|
@@ -109,21 +113,26 @@ async function renderPage(Page: ComponentType) {
|
|
|
109
113
|
header = null;
|
|
110
114
|
await act(async () => {
|
|
111
115
|
root.render(
|
|
112
|
-
<
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
116
|
+
<AgentNativeI18nProvider
|
|
117
|
+
catalog={toolkitI18nCatalog}
|
|
118
|
+
persistPreference={false}
|
|
119
|
+
>
|
|
120
|
+
<QueryClientProvider client={queryClient}>
|
|
121
|
+
<TooltipProvider>
|
|
122
|
+
<SettingsShellProvider
|
|
123
|
+
value={{
|
|
124
|
+
route: { page: "skills", sub: null },
|
|
125
|
+
navigate: () => {},
|
|
126
|
+
setHeader: (next) => {
|
|
127
|
+
header = next;
|
|
128
|
+
},
|
|
129
|
+
}}
|
|
130
|
+
>
|
|
131
|
+
<Page />
|
|
132
|
+
</SettingsShellProvider>
|
|
133
|
+
</TooltipProvider>
|
|
134
|
+
</QueryClientProvider>
|
|
135
|
+
</AgentNativeI18nProvider>,
|
|
127
136
|
);
|
|
128
137
|
});
|
|
129
138
|
for (let attempt = 0; attempt < 50; attempt += 1) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @vitest-environment happy-dom
|
|
2
2
|
|
|
3
|
+
import { AgentNativeI18nProvider } from "@agent-native/core/client/i18n";
|
|
3
4
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
4
5
|
import React, { act } from "react";
|
|
5
6
|
import { createRoot, type Root } from "react-dom/client";
|
|
@@ -34,10 +35,13 @@ vi.mock("@agent-native/core/client/api-path", () => ({
|
|
|
34
35
|
|
|
35
36
|
import { TooltipProvider } from "@agent-native/toolkit/ui/tooltip";
|
|
36
37
|
|
|
38
|
+
import { createToolkitI18nCatalog } from "../../../i18n.js";
|
|
37
39
|
import type { RemoteAgentInfo } from "../../AgentsSection.js";
|
|
38
40
|
import { SettingsShellProvider, type SettingsPageHeader } from "../context.js";
|
|
39
41
|
import SubAgentsSettingsPage, { groupSubAgents } from "./sub-agents.js";
|
|
40
42
|
|
|
43
|
+
const toolkitI18nCatalog = createToolkitI18nCatalog({ messages: {} });
|
|
44
|
+
|
|
41
45
|
// Seeded first-party apps and a connected external agent. `mail` also keeps
|
|
42
46
|
// its pre-migration `agents/` row, which must not list it twice.
|
|
43
47
|
const resources = [
|
|
@@ -123,21 +127,26 @@ async function renderPage() {
|
|
|
123
127
|
header = null;
|
|
124
128
|
await act(async () => {
|
|
125
129
|
root.render(
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
130
|
+
<AgentNativeI18nProvider
|
|
131
|
+
catalog={toolkitI18nCatalog}
|
|
132
|
+
persistPreference={false}
|
|
133
|
+
>
|
|
134
|
+
<QueryClientProvider client={queryClient}>
|
|
135
|
+
<TooltipProvider>
|
|
136
|
+
<SettingsShellProvider
|
|
137
|
+
value={{
|
|
138
|
+
route: { page: "sub-agents", sub: null },
|
|
139
|
+
navigate: () => {},
|
|
140
|
+
setHeader: (next) => {
|
|
141
|
+
header = next;
|
|
142
|
+
},
|
|
143
|
+
}}
|
|
144
|
+
>
|
|
145
|
+
<SubAgentsSettingsPage />
|
|
146
|
+
</SettingsShellProvider>
|
|
147
|
+
</TooltipProvider>
|
|
148
|
+
</QueryClientProvider>
|
|
149
|
+
</AgentNativeI18nProvider>,
|
|
141
150
|
);
|
|
142
151
|
});
|
|
143
152
|
await settle();
|
|
@@ -54,6 +54,10 @@ vi.mock("@agent-native/core/client/hooks", () => ({
|
|
|
54
54
|
}),
|
|
55
55
|
}));
|
|
56
56
|
|
|
57
|
+
vi.mock("@agent-native/core/client/use-action", () => ({
|
|
58
|
+
useActionQuery: () => ({ data: null, isError: false, isLoading: false }),
|
|
59
|
+
}));
|
|
60
|
+
|
|
57
61
|
vi.mock("@agent-native/core/client/i18n", () => ({
|
|
58
62
|
useT:
|
|
59
63
|
() =>
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
// @vitest-environment happy-dom
|
|
2
2
|
|
|
3
|
+
import { AgentNativeI18nProvider } from "@agent-native/core/client/i18n";
|
|
3
4
|
import React, { act } from "react";
|
|
4
5
|
import { createRoot, type Root } from "react-dom/client";
|
|
5
6
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
7
|
|
|
8
|
+
import { createToolkitI18nCatalog } from "../i18n.js";
|
|
7
9
|
import { BuilderConnectCard } from "./BuilderConnectCard.js";
|
|
8
10
|
import type { BuilderConnectCardViewModel } from "./useBuilderConnectCardController.js";
|
|
9
11
|
|
|
12
|
+
const toolkitI18nCatalog = createToolkitI18nCatalog({ messages: {} });
|
|
13
|
+
|
|
10
14
|
const mocks = vi.hoisted(() => ({
|
|
11
15
|
useBuilderConnectCardController: vi.fn(),
|
|
12
16
|
semanticActionProps: undefined as Record<string, unknown> | undefined,
|
|
@@ -80,6 +84,17 @@ describe("BuilderConnectCard", () => {
|
|
|
80
84
|
root = createRoot(container);
|
|
81
85
|
});
|
|
82
86
|
|
|
87
|
+
function renderWithToolkitI18n(children: React.ReactNode) {
|
|
88
|
+
root.render(
|
|
89
|
+
<AgentNativeI18nProvider
|
|
90
|
+
catalog={toolkitI18nCatalog}
|
|
91
|
+
persistPreference={false}
|
|
92
|
+
>
|
|
93
|
+
{children}
|
|
94
|
+
</AgentNativeI18nProvider>,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
83
98
|
afterEach(() => {
|
|
84
99
|
act(() => root.unmount());
|
|
85
100
|
container.remove();
|
|
@@ -88,7 +103,9 @@ describe("BuilderConnectCard", () => {
|
|
|
88
103
|
});
|
|
89
104
|
|
|
90
105
|
it("keeps the default view and action on the shared controller", () => {
|
|
91
|
-
act(() =>
|
|
106
|
+
act(() =>
|
|
107
|
+
renderWithToolkitI18n(<BuilderConnectCard trackingSource="settings" />),
|
|
108
|
+
);
|
|
92
109
|
|
|
93
110
|
expect(mocks.useBuilderConnectCardController).toHaveBeenCalledOnce();
|
|
94
111
|
expect(mocks.useBuilderConnectCardController).toHaveBeenCalledWith(
|
|
@@ -121,7 +138,9 @@ describe("BuilderConnectCard", () => {
|
|
|
121
138
|
);
|
|
122
139
|
|
|
123
140
|
act(() =>
|
|
124
|
-
|
|
141
|
+
renderWithToolkitI18n(
|
|
142
|
+
<BuilderConnectCard className="host-card" render={render} />,
|
|
143
|
+
),
|
|
125
144
|
);
|
|
126
145
|
|
|
127
146
|
expect(mocks.useBuilderConnectCardController).toHaveBeenCalledOnce();
|
|
@@ -140,7 +159,7 @@ describe("BuilderConnectCard", () => {
|
|
|
140
159
|
disabled: true,
|
|
141
160
|
};
|
|
142
161
|
|
|
143
|
-
act(() =>
|
|
162
|
+
act(() => renderWithToolkitI18n(<BuilderConnectCard />));
|
|
144
163
|
|
|
145
164
|
expect(container.querySelector("[data-semantic-action]")).not.toBeNull();
|
|
146
165
|
expect(mocks.semanticActionProps).toMatchObject({
|
|
@@ -183,7 +202,7 @@ describe("BuilderConnectCard", () => {
|
|
|
183
202
|
mocks.useBuilderConnectCardController.mockReturnValue(viewModel);
|
|
184
203
|
|
|
185
204
|
act(() =>
|
|
186
|
-
|
|
205
|
+
renderWithToolkitI18n(
|
|
187
206
|
<BuilderConnectCard showManage trackingSource="settings_connections" />,
|
|
188
207
|
),
|
|
189
208
|
);
|
|
@@ -229,7 +248,7 @@ describe("BuilderConnectCard", () => {
|
|
|
229
248
|
};
|
|
230
249
|
mocks.useBuilderConnectCardController.mockReturnValue(viewModel);
|
|
231
250
|
|
|
232
|
-
act(() =>
|
|
251
|
+
act(() => renderWithToolkitI18n(<BuilderConnectCard showManage />));
|
|
233
252
|
act(() => {
|
|
234
253
|
(
|
|
235
254
|
container.querySelector(
|
|
@@ -281,7 +300,7 @@ describe("BuilderConnectCard", () => {
|
|
|
281
300
|
mocks.useBuilderConnectCardController.mockReturnValue(viewModel);
|
|
282
301
|
|
|
283
302
|
act(() => {
|
|
284
|
-
|
|
303
|
+
renderWithToolkitI18n(
|
|
285
304
|
<BuilderConnectCard showManage trackingSource="settings_connections" />,
|
|
286
305
|
);
|
|
287
306
|
});
|
|
@@ -343,7 +362,7 @@ describe("BuilderConnectCard", () => {
|
|
|
343
362
|
...(scope ? { scope } : {}),
|
|
344
363
|
};
|
|
345
364
|
mocks.useBuilderConnectCardController.mockReturnValue(viewModel);
|
|
346
|
-
act(() =>
|
|
365
|
+
act(() => renderWithToolkitI18n(<BuilderConnectCard showManage />));
|
|
347
366
|
}
|
|
348
367
|
|
|
349
368
|
function openMenu() {
|
|
@@ -519,7 +538,7 @@ describe("BuilderConnectCard", () => {
|
|
|
519
538
|
vi.spyOn(console, "error").mockImplementation(() => {});
|
|
520
539
|
|
|
521
540
|
act(() =>
|
|
522
|
-
|
|
541
|
+
renderWithToolkitI18n(
|
|
523
542
|
<BuilderConnectCard
|
|
524
543
|
render={() => {
|
|
525
544
|
throw new Error("broken company card");
|
|
@@ -6,8 +6,11 @@ import React, { act } from "react";
|
|
|
6
6
|
import { createRoot, type Root } from "react-dom/client";
|
|
7
7
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
8
8
|
|
|
9
|
+
import { createToolkitI18nCatalog } from "../i18n.js";
|
|
9
10
|
import { ShareButton } from "./ShareButton.js";
|
|
10
11
|
|
|
12
|
+
const toolkitI18nCatalog = createToolkitI18nCatalog({ messages: {} });
|
|
13
|
+
|
|
11
14
|
const shareMutate = vi.hoisted(() => vi.fn());
|
|
12
15
|
const otherMutate = vi.hoisted(() => vi.fn());
|
|
13
16
|
const refetchShares = vi.hoisted(() => vi.fn(async () => undefined));
|
|
@@ -46,7 +49,7 @@ const sharesData = vi.hoisted(() => ({
|
|
|
46
49
|
},
|
|
47
50
|
}));
|
|
48
51
|
|
|
49
|
-
vi.mock("
|
|
52
|
+
vi.mock("@agent-native/core/client/use-action", () => ({
|
|
50
53
|
useActionQuery: () => ({
|
|
51
54
|
data: sharesData.current,
|
|
52
55
|
isError: sharesError.current,
|
|
@@ -57,7 +60,7 @@ vi.mock("../use-action.js", () => ({
|
|
|
57
60
|
}),
|
|
58
61
|
}));
|
|
59
62
|
|
|
60
|
-
vi.mock("
|
|
63
|
+
vi.mock("@agent-native/toolkit/ui/popover", () => {
|
|
61
64
|
const PopoverOpenContext = React.createContext(true);
|
|
62
65
|
const isOuterSharePopover = (node: React.ReactNode): boolean =>
|
|
63
66
|
React.Children.toArray(node).some((child) => {
|
|
@@ -129,7 +132,7 @@ vi.mock("../components/ui/popover.js", () => {
|
|
|
129
132
|
};
|
|
130
133
|
});
|
|
131
134
|
|
|
132
|
-
vi.mock("
|
|
135
|
+
vi.mock("@agent-native/toolkit/ui/sheet", () => ({
|
|
133
136
|
Sheet: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
|
134
137
|
SheetTrigger: ({ children }: { children: React.ReactNode }) => (
|
|
135
138
|
<>{children}</>
|
|
@@ -1211,6 +1214,7 @@ describe("ShareButton", () => {
|
|
|
1211
1214
|
await act(async () => {
|
|
1212
1215
|
root.render(
|
|
1213
1216
|
<AgentNativeI18nProvider
|
|
1217
|
+
catalog={toolkitI18nCatalog}
|
|
1214
1218
|
initialLocale="de-DE"
|
|
1215
1219
|
initialPreference="de-DE"
|
|
1216
1220
|
persistPreference={false}
|
|
@@ -19,11 +19,11 @@ const sharesQuery = {
|
|
|
19
19
|
refetch: vi.fn(),
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
-
vi.mock("
|
|
22
|
+
vi.mock("@agent-native/core/client/use-action", () => ({
|
|
23
23
|
useActionQuery: () => sharesQuery,
|
|
24
|
-
useActionMutation: () => ({ mutate: vi.fn() }),
|
|
24
|
+
useActionMutation: () => ({ mutate: vi.fn(), isPending: false }),
|
|
25
25
|
}));
|
|
26
|
-
vi.mock("
|
|
26
|
+
vi.mock("@agent-native/core/client/i18n", () => ({
|
|
27
27
|
useT: () => (key: string, values?: Record<string, string>) =>
|
|
28
28
|
values?.title ?? values?.type ?? key,
|
|
29
29
|
}));
|
|
@@ -85,7 +85,7 @@ async function renderDialog(
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
describe("ShareDialog primitive normalization", () => {
|
|
88
|
-
const source = readFileSync(resolve("src/
|
|
88
|
+
const source = readFileSync(resolve("src/app/sharing/ShareDialog.tsx"), {
|
|
89
89
|
encoding: "utf8",
|
|
90
90
|
});
|
|
91
91
|
|
|
@@ -21,7 +21,7 @@ const mocks = vi.hoisted(() => ({
|
|
|
21
21
|
unshare: { mutate: vi.fn() },
|
|
22
22
|
}));
|
|
23
23
|
|
|
24
|
-
vi.mock("
|
|
24
|
+
vi.mock("@agent-native/core/client/use-action", () => ({
|
|
25
25
|
useActionQuery: vi.fn(() => mocks.query),
|
|
26
26
|
useActionMutation: vi.fn((name: string) => {
|
|
27
27
|
if (name === "set-resource-visibility") return mocks.setVisibility;
|
|
@@ -24,7 +24,7 @@ const mocks = vi.hoisted(() => ({
|
|
|
24
24
|
writeClipboardText: vi.fn(),
|
|
25
25
|
}));
|
|
26
26
|
|
|
27
|
-
vi.mock("
|
|
27
|
+
vi.mock("@agent-native/core/client/use-action", () => ({
|
|
28
28
|
useActionQuery: vi.fn(() => mocks.query),
|
|
29
29
|
useActionMutation: vi.fn((name: string) => {
|
|
30
30
|
if (name === "share-resource") return mocks.share;
|
|
@@ -32,7 +32,7 @@ vi.mock("../../../../core/src/client/use-action.ts", () => ({
|
|
|
32
32
|
return mocks.visibility;
|
|
33
33
|
}),
|
|
34
34
|
}));
|
|
35
|
-
vi.mock("
|
|
35
|
+
vi.mock("@agent-native/core/client/i18n", () => ({
|
|
36
36
|
useT: () => (key: string, values?: Record<string, string>) => {
|
|
37
37
|
if (values?.title) return `${key}:${values.title}`;
|
|
38
38
|
if (values?.type) return `${key}:${values.type}`;
|
|
@@ -12,7 +12,7 @@ const mocks = vi.hoisted(() => ({
|
|
|
12
12
|
vi.mock("../settings/useBuilderStatus.js", () => ({
|
|
13
13
|
useBuilderConnectFlow: mocks.useBuilderConnectFlow,
|
|
14
14
|
}));
|
|
15
|
-
vi.mock("
|
|
15
|
+
vi.mock("@agent-native/core/client/i18n", () => ({
|
|
16
16
|
useT: () => (key: string) => key,
|
|
17
17
|
}));
|
|
18
18
|
|
|
@@ -197,6 +197,7 @@ describe("RealtimeVoiceMode", () => {
|
|
|
197
197
|
document.querySelectorAll<HTMLButtonElement>("button"),
|
|
198
198
|
).find((button) => button.textContent?.includes("Start voice chat"));
|
|
199
199
|
expect(startVoiceMode?.disabled).toBe(true);
|
|
200
|
+
expect(document.querySelector(".animate-spin")).toBeNull();
|
|
200
201
|
act(() => startVoiceMode?.click());
|
|
201
202
|
expect(onStartVoiceMode).not.toHaveBeenCalled();
|
|
202
203
|
|
|
@@ -350,11 +350,7 @@ export function RealtimeVoiceModeEntry({
|
|
|
350
350
|
disabled={providerStatusPending}
|
|
351
351
|
onClick={() => choose("realtime", onStartVoiceMode)}
|
|
352
352
|
>
|
|
353
|
-
|
|
354
|
-
<IconLoader2 className="animate-spin" />
|
|
355
|
-
) : (
|
|
356
|
-
<IconMicrophone />
|
|
357
|
-
)}
|
|
353
|
+
<IconMicrophone />
|
|
358
354
|
{copy.startVoiceMode}
|
|
359
355
|
</Button>
|
|
360
356
|
<Button
|