@agent-native/dispatch 0.40.0 → 0.40.3
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/CHANGELOG.md +48 -19
- package/dist/actions/provider-api-register.d.ts +7 -7
- package/dist/components/app-open-actions.d.ts +1 -1
- package/dist/components/app-open-actions.d.ts.map +1 -1
- package/dist/components/app-open-actions.js +1 -1
- package/dist/components/app-open-actions.js.map +1 -1
- package/dist/components/app-row-settings.js +1 -1
- package/dist/components/app-row-settings.js.map +1 -1
- package/dist/components/automation-create-dialog.js +2 -2
- package/dist/components/automation-create-dialog.js.map +1 -1
- package/dist/components/automation-details-panel.js +1 -1
- package/dist/components/automation-details-panel.js.map +1 -1
- package/dist/components/chat-home-apps.js +1 -1
- package/dist/components/chat-home-apps.js.map +1 -1
- package/dist/components/create-app-popover.js +3 -3
- package/dist/components/create-app-popover.js.map +1 -1
- package/dist/components/dispatch-control-plane.d.ts.map +1 -1
- package/dist/components/dispatch-control-plane.js +9 -30
- package/dist/components/dispatch-control-plane.js.map +1 -1
- package/dist/components/layout/Header.js +2 -2
- package/dist/components/layout/Header.js.map +1 -1
- package/dist/components/layout/Layout.d.ts +6 -5
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +73 -113
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/components/layout/workspace-apps-rail.d.ts.map +1 -1
- package/dist/components/layout/workspace-apps-rail.js +7 -19
- package/dist/components/layout/workspace-apps-rail.js.map +1 -1
- package/dist/components/messaging-setup-panel.js +2 -1
- package/dist/components/messaging-setup-panel.js.map +1 -1
- package/dist/components/workspace-app-card.js +2 -2
- package/dist/components/workspace-app-card.js.map +1 -1
- package/dist/components/workspace-app-host.d.ts +1 -1
- package/dist/components/workspace-app-host.d.ts.map +1 -1
- package/dist/components/workspace-app-host.js +7 -74
- package/dist/components/workspace-app-host.js.map +1 -1
- package/dist/hooks/use-navigation-state.js +1 -1
- package/dist/hooks/use-navigation-state.js.map +1 -1
- package/dist/lib/workspace-apps.js +1 -1
- package/dist/lib/workspace-apps.js.map +1 -1
- package/dist/routes/pages/$appId.js +1 -1
- package/dist/routes/pages/$appId.js.map +1 -1
- package/dist/routes/pages/_index.js +1 -1
- package/dist/routes/pages/_index.js.map +1 -1
- package/dist/routes/pages/admin._index.js +1 -1
- package/dist/routes/pages/admin._index.js.map +1 -1
- package/dist/routes/pages/agent-integrations.js +1 -1
- package/dist/routes/pages/agent-integrations.js.map +1 -1
- package/dist/routes/pages/apps.d.ts.map +1 -1
- package/dist/routes/pages/apps.js +3 -43
- package/dist/routes/pages/apps.js.map +1 -1
- package/dist/routes/pages/browser-chat.js +1 -1
- package/dist/routes/pages/browser-chat.js.map +1 -1
- package/dist/routes/pages/chat.d.ts.map +1 -1
- package/dist/routes/pages/chat.js +24 -43
- package/dist/routes/pages/chat.js.map +1 -1
- package/dist/routes/pages/extensions.$id.js +1 -1
- package/dist/routes/pages/extensions.$id.js.map +1 -1
- package/dist/routes/pages/extensions._index.js +1 -1
- package/dist/routes/pages/extensions._index.js.map +1 -1
- package/dist/routes/pages/integrations.js +1 -1
- package/dist/routes/pages/integrations.js.map +1 -1
- package/dist/routes/pages/new-app.js +1 -1
- package/dist/routes/pages/new-app.js.map +1 -1
- package/dist/routes/pages/operations.js +2 -2
- package/dist/routes/pages/operations.js.map +1 -1
- package/dist/routes/pages/overview.d.ts +2 -2
- package/dist/routes/pages/settings-page.d.ts +10 -0
- package/dist/routes/pages/settings-page.d.ts.map +1 -0
- package/dist/routes/pages/settings-page.js +104 -0
- package/dist/routes/pages/settings-page.js.map +1 -0
- package/dist/routes/pages/settings.d.ts +4 -12
- package/dist/routes/pages/settings.d.ts.map +1 -1
- package/dist/routes/pages/settings.js +4 -88
- package/dist/routes/pages/settings.js.map +1 -1
- package/dist/routes/pages/tools.$id.js +1 -1
- package/dist/routes/pages/tools.$id.js.map +1 -1
- package/dist/routes/pages/tools._index.js +1 -1
- package/dist/routes/pages/tools._index.js.map +1 -1
- package/dist/routes/pages/vault.d.ts +1 -1
- package/dist/routes/pages/vault.js +1 -1
- package/dist/routes/pages/vault.js.map +1 -1
- package/dist/shared/app-roles.js.map +1 -1
- package/package.json +3 -3
- package/src/components/app-open-actions.tsx +1 -1
- package/src/components/app-row-settings.tsx +1 -1
- package/src/components/automation-create-dialog.tsx +7 -7
- package/src/components/automation-details-panel.tsx +1 -1
- package/src/components/chat-home-apps.tsx +1 -1
- package/src/components/create-app-popover.spec.tsx +5 -7
- package/src/components/create-app-popover.tsx +3 -3
- package/src/components/dispatch-control-plane.spec.tsx +12 -19
- package/src/components/dispatch-control-plane.tsx +10 -84
- package/src/components/layout/Header.tsx +2 -2
- package/src/components/layout/Layout.app-chat.spec.ts +1 -0
- package/src/components/layout/Layout.spec.tsx +49 -30
- package/src/components/layout/Layout.tsx +153 -205
- package/src/components/layout/workspace-apps-rail.spec.tsx +79 -0
- package/src/components/layout/workspace-apps-rail.tsx +6 -30
- package/src/components/messaging-setup-panel.tsx +1 -1
- package/src/components/workspace-app-card.tsx +2 -2
- package/src/components/workspace-app-chat-rail.spec.tsx +2 -2
- package/src/components/workspace-app-host.spec.tsx +19 -19
- package/src/components/workspace-app-host.tsx +12 -129
- package/src/hooks/use-navigation-state.ts +1 -1
- package/src/lib/workspace-apps.ts +1 -1
- package/src/routes/pages/$appId.tsx +1 -1
- package/src/routes/pages/_index.tsx +1 -1
- package/src/routes/pages/admin._index.tsx +1 -1
- package/src/routes/pages/agent-integrations.tsx +1 -1
- package/src/routes/pages/apps.tsx +2 -86
- package/src/routes/pages/automations.spec.tsx +1 -1
- package/src/routes/pages/browser-chat.spec.tsx +1 -1
- package/src/routes/pages/browser-chat.tsx +1 -1
- package/src/routes/pages/chat.spec.tsx +23 -46
- package/src/routes/pages/chat.tsx +20 -57
- package/src/routes/pages/extensions.$id.tsx +1 -1
- package/src/routes/pages/extensions._index.tsx +1 -1
- package/src/routes/pages/integrations.tsx +1 -1
- package/src/routes/pages/new-app.tsx +1 -1
- package/src/routes/pages/operations.tsx +2 -2
- package/src/routes/pages/settings-page.tsx +250 -0
- package/src/routes/pages/settings.spec.tsx +30 -8
- package/src/routes/pages/settings.tsx +4 -184
- package/src/routes/pages/tools.$id.tsx +1 -1
- package/src/routes/pages/tools._index.tsx +1 -1
- package/src/routes/pages/vault.tsx +1 -1
- package/src/shared/app-roles.ts +1 -1
|
@@ -3,16 +3,18 @@ import {
|
|
|
3
3
|
navigateWithAgentChatViewTransition,
|
|
4
4
|
useChatModels,
|
|
5
5
|
} from "@agent-native/core/client/agent-chat";
|
|
6
|
-
import { PromptBar, PromptComposer } from "@agent-native/core/client/composer";
|
|
7
6
|
import { useActionQuery } from "@agent-native/core/client/hooks";
|
|
8
7
|
import { useT } from "@agent-native/core/client/i18n";
|
|
9
8
|
import { useOrgRole } from "@agent-native/core/client/org";
|
|
9
|
+
import {
|
|
10
|
+
PromptBar,
|
|
11
|
+
PromptComposer,
|
|
12
|
+
} from "@agent-native/toolkit/app/chat/composer/index";
|
|
10
13
|
import { IconChevronDown, IconClockHour4, IconPlus } from "@tabler/icons-react";
|
|
11
14
|
import type { ReactNode } from "react";
|
|
12
15
|
import { useState } from "react";
|
|
13
16
|
import { Link, useNavigate } from "react-router";
|
|
14
17
|
|
|
15
|
-
import type { ConnectedAppSummary } from "../lib/other-apps";
|
|
16
18
|
import { cn } from "../lib/utils";
|
|
17
19
|
import {
|
|
18
20
|
orderWorkspaceApps,
|
|
@@ -31,11 +33,6 @@ import {
|
|
|
31
33
|
} from "./app-list-row";
|
|
32
34
|
import { CreateAppPopover } from "./create-app-popover";
|
|
33
35
|
import { useSetPageTitle } from "./layout/HeaderActions";
|
|
34
|
-
import {
|
|
35
|
-
filterOtherAppEntries,
|
|
36
|
-
mergeOtherAppEntries,
|
|
37
|
-
OtherAppsSection,
|
|
38
|
-
} from "./other-apps-section";
|
|
39
36
|
import { Button } from "./ui/button";
|
|
40
37
|
import {
|
|
41
38
|
Collapsible,
|
|
@@ -48,7 +45,6 @@ import {
|
|
|
48
45
|
WorkspaceAppSearch,
|
|
49
46
|
WorkspaceAppSearchEmpty,
|
|
50
47
|
} from "./workspace-app-search";
|
|
51
|
-
import type { CuratedWorkspaceTemplatesResult } from "./workspace-template-card";
|
|
52
48
|
|
|
53
49
|
function SectionHeader({
|
|
54
50
|
title,
|
|
@@ -163,25 +159,9 @@ function CommandPanel() {
|
|
|
163
159
|
function AppsPanel({
|
|
164
160
|
apps,
|
|
165
161
|
isLoading,
|
|
166
|
-
connectedApps,
|
|
167
|
-
connectedAppsError,
|
|
168
|
-
connectedAppsLoading,
|
|
169
|
-
onRetryConnectedApps,
|
|
170
|
-
curatedTemplates,
|
|
171
|
-
curatedTemplatesError,
|
|
172
|
-
curatedTemplatesLoading,
|
|
173
|
-
onRetryCuratedTemplates,
|
|
174
162
|
}: {
|
|
175
163
|
apps: WorkspaceAppSummary[];
|
|
176
164
|
isLoading: boolean;
|
|
177
|
-
connectedApps: ConnectedAppSummary[];
|
|
178
|
-
connectedAppsError?: Error | null;
|
|
179
|
-
connectedAppsLoading: boolean;
|
|
180
|
-
onRetryConnectedApps: () => void;
|
|
181
|
-
curatedTemplates?: CuratedWorkspaceTemplatesResult;
|
|
182
|
-
curatedTemplatesError?: Error | null;
|
|
183
|
-
curatedTemplatesLoading: boolean;
|
|
184
|
-
onRetryCuratedTemplates: () => void;
|
|
185
165
|
}) {
|
|
186
166
|
const t = useT();
|
|
187
167
|
const [showPending, setShowPending] = useState(false);
|
|
@@ -200,20 +180,8 @@ function AppsPanel({
|
|
|
200
180
|
const filteredPendingApps = orderedPendingApps.filter((app) =>
|
|
201
181
|
workspaceAppMatchesQuery(app, searchQuery),
|
|
202
182
|
);
|
|
203
|
-
const otherAppEntries = filterOtherAppEntries(
|
|
204
|
-
mergeOtherAppEntries({
|
|
205
|
-
templates: curatedTemplates,
|
|
206
|
-
connectedApps,
|
|
207
|
-
workspaceApps: apps,
|
|
208
|
-
}),
|
|
209
|
-
searchQuery,
|
|
210
|
-
);
|
|
211
183
|
const hasSearchResults =
|
|
212
|
-
filteredActiveApps.length > 0 ||
|
|
213
|
-
filteredPendingApps.length > 0 ||
|
|
214
|
-
otherAppEntries.length > 0;
|
|
215
|
-
const otherAppsLoading = curatedTemplatesLoading || connectedAppsLoading;
|
|
216
|
-
const otherAppsError = curatedTemplatesError || connectedAppsError;
|
|
184
|
+
filteredActiveApps.length > 0 || filteredPendingApps.length > 0;
|
|
217
185
|
const showSkeletons =
|
|
218
186
|
isLoading && activeApps.length === 0 && pendingApps.length === 0;
|
|
219
187
|
|
|
@@ -229,9 +197,7 @@ function AppsPanel({
|
|
|
229
197
|
</Link>
|
|
230
198
|
</Button>
|
|
231
199
|
{!showSkeletons &&
|
|
232
|
-
(visibleApps.length > 0 ||
|
|
233
|
-
otherAppEntries.length > 0 ||
|
|
234
|
-
Boolean(searchQuery.trim())) ? (
|
|
200
|
+
(visibleApps.length > 0 || Boolean(searchQuery.trim())) ? (
|
|
235
201
|
<WorkspaceAppSearch
|
|
236
202
|
className="w-[220px]"
|
|
237
203
|
query={searchQuery}
|
|
@@ -263,10 +229,7 @@ function AppsPanel({
|
|
|
263
229
|
) : null}
|
|
264
230
|
{showSkeletons ? (
|
|
265
231
|
<OverviewAppsSkeleton />
|
|
266
|
-
) : searchQuery.trim() &&
|
|
267
|
-
!hasSearchResults &&
|
|
268
|
-
!otherAppsLoading &&
|
|
269
|
-
!otherAppsError ? (
|
|
232
|
+
) : searchQuery.trim() && !hasSearchResults ? (
|
|
270
233
|
<WorkspaceAppSearchEmpty
|
|
271
234
|
query={searchQuery}
|
|
272
235
|
onClear={() => setSearchQuery("")}
|
|
@@ -284,32 +247,14 @@ function AppsPanel({
|
|
|
284
247
|
/>
|
|
285
248
|
))}
|
|
286
249
|
{filteredActiveApps.length === 0 &&
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
!curatedTemplatesLoading &&
|
|
290
|
-
!connectedAppsLoading &&
|
|
291
|
-
!curatedTemplatesError &&
|
|
292
|
-
!connectedAppsError ? (
|
|
250
|
+
pendingApps.length === 0 &&
|
|
251
|
+
!searchQuery.trim() ? (
|
|
293
252
|
<p className="px-4 py-3 text-sm text-muted-foreground">
|
|
294
253
|
{t("dispatch.pages.noApps", {
|
|
295
254
|
defaultValue: "No apps yet.",
|
|
296
255
|
})}
|
|
297
256
|
</p>
|
|
298
257
|
) : null}
|
|
299
|
-
<OtherAppsSection
|
|
300
|
-
templates={curatedTemplates}
|
|
301
|
-
connectedApps={connectedApps}
|
|
302
|
-
workspaceApps={apps}
|
|
303
|
-
templatesLoading={curatedTemplatesLoading}
|
|
304
|
-
connectedAppsLoading={connectedAppsLoading}
|
|
305
|
-
templatesError={curatedTemplatesError}
|
|
306
|
-
connectedAppsError={connectedAppsError}
|
|
307
|
-
query={searchQuery}
|
|
308
|
-
onRetryTemplates={onRetryCuratedTemplates}
|
|
309
|
-
onRetryConnectedApps={onRetryConnectedApps}
|
|
310
|
-
heading={null}
|
|
311
|
-
embeddedInList
|
|
312
|
-
/>
|
|
313
258
|
</AppList>
|
|
314
259
|
</>
|
|
315
260
|
)}
|
|
@@ -405,14 +350,6 @@ export function DispatchControlPlane() {
|
|
|
405
350
|
"list-workspace-apps",
|
|
406
351
|
{ includeAgentCards: false, includeArchived: true },
|
|
407
352
|
);
|
|
408
|
-
const connectedAppsQuery = useActionQuery<ConnectedAppSummary[]>(
|
|
409
|
-
"list-connected-agents",
|
|
410
|
-
{},
|
|
411
|
-
);
|
|
412
|
-
const curatedTemplatesQuery = useActionQuery<CuratedWorkspaceTemplatesResult>(
|
|
413
|
-
"list-curated-workspace-templates",
|
|
414
|
-
{},
|
|
415
|
-
);
|
|
416
353
|
const { data: workspaceApps = [], isLoading: appsLoading } = appsQuery;
|
|
417
354
|
|
|
418
355
|
return (
|
|
@@ -424,18 +361,7 @@ export function DispatchControlPlane() {
|
|
|
424
361
|
onRetry={() => void appsQuery.refetch()}
|
|
425
362
|
/>
|
|
426
363
|
) : (
|
|
427
|
-
<AppsPanel
|
|
428
|
-
apps={workspaceApps ?? []}
|
|
429
|
-
isLoading={appsLoading}
|
|
430
|
-
connectedApps={connectedAppsQuery.data ?? []}
|
|
431
|
-
connectedAppsError={connectedAppsQuery.error}
|
|
432
|
-
connectedAppsLoading={connectedAppsQuery.isLoading}
|
|
433
|
-
onRetryConnectedApps={() => void connectedAppsQuery.refetch()}
|
|
434
|
-
curatedTemplates={curatedTemplatesQuery.data}
|
|
435
|
-
curatedTemplatesError={curatedTemplatesQuery.error}
|
|
436
|
-
curatedTemplatesLoading={curatedTemplatesQuery.isLoading}
|
|
437
|
-
onRetryCuratedTemplates={() => void curatedTemplatesQuery.refetch()}
|
|
438
|
-
/>
|
|
364
|
+
<AppsPanel apps={workspaceApps ?? []} isLoading={appsLoading} />
|
|
439
365
|
)}
|
|
440
366
|
</div>
|
|
441
367
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AgentToggleButton } from "@agent-native/
|
|
2
|
-
import { RunsTray } from "@agent-native/
|
|
1
|
+
import { AgentToggleButton } from "@agent-native/toolkit/app/chat";
|
|
2
|
+
import { RunsTray } from "@agent-native/toolkit/app/progress";
|
|
3
3
|
import { IconLayoutSidebar } from "@tabler/icons-react";
|
|
4
4
|
import { useLocation, useNavigate } from "react-router";
|
|
5
5
|
|
|
@@ -30,6 +30,7 @@ describe("Dispatch layout scrolling", () => {
|
|
|
30
30
|
describe("Dispatch workspace app chat rail", () => {
|
|
31
31
|
it("routes the open-app rail through the shared app-chat component", () => {
|
|
32
32
|
expect(layoutSource).toContain("<WorkspaceAppChatRail");
|
|
33
|
+
expect(layoutSource).toContain("workspaceAppChatRegistration ? (");
|
|
33
34
|
expect(layoutSource).toContain("data-dispatch-workspace-app-frame");
|
|
34
35
|
expect(layoutSource).toContain('new Event("agent-panel:toggle")');
|
|
35
36
|
expect(layoutSource).toContain('new CustomEvent("agent-panel:toggle"');
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isSettingsPathname } from "@agent-native/toolkit/app/settings";
|
|
1
2
|
// @vitest-environment happy-dom
|
|
2
3
|
import React, { act } from "react";
|
|
3
4
|
import { createRoot, type Root } from "react-dom/client";
|
|
@@ -12,7 +13,6 @@ import {
|
|
|
12
13
|
dispatchNavLinkTarget,
|
|
13
14
|
formatThreadAge,
|
|
14
15
|
isElectronEmbeddedSearch,
|
|
15
|
-
isSettingsShellPath,
|
|
16
16
|
NavContent,
|
|
17
17
|
renderChatFirstAppSurfaceTab,
|
|
18
18
|
shouldAutoCollapseDispatchSidebar,
|
|
@@ -30,18 +30,27 @@ const clientState = vi.hoisted(() => ({
|
|
|
30
30
|
.mockResolvedValue({ startUrl: "about:blank" }),
|
|
31
31
|
}));
|
|
32
32
|
|
|
33
|
-
vi.mock("@agent-native/core/client/agent-chat", () => ({
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
),
|
|
37
|
-
ExternalAgentNudge: () => null,
|
|
38
|
-
focusAgentChat: vi.fn(),
|
|
33
|
+
vi.mock("@agent-native/core/client/agent-chat", async (importOriginal) => ({
|
|
34
|
+
...(await importOriginal<
|
|
35
|
+
typeof import("@agent-native/core/client/agent-chat")
|
|
36
|
+
>()),
|
|
39
37
|
navigateWithAgentChatViewTransition: (
|
|
40
38
|
navigate: (path: string) => void,
|
|
41
39
|
path: string,
|
|
42
40
|
) => navigate(path),
|
|
43
41
|
useAgentChatHomeHandoff: () => false,
|
|
44
42
|
useAgentChatHomeHandoffLinks: vi.fn(),
|
|
43
|
+
useChatModels: () => ({
|
|
44
|
+
availableModels: [],
|
|
45
|
+
defaultModel: "auto",
|
|
46
|
+
selectedModel: "auto",
|
|
47
|
+
selectedEngine: "",
|
|
48
|
+
selectedEffort: "medium" as const,
|
|
49
|
+
isLoading: false,
|
|
50
|
+
onModelChange: vi.fn(),
|
|
51
|
+
onEffortChange: vi.fn(),
|
|
52
|
+
refreshEngines: vi.fn(),
|
|
53
|
+
}),
|
|
45
54
|
useChatThreads: () => ({
|
|
46
55
|
threads: clientState.threads,
|
|
47
56
|
activeThreadId: "active-thread",
|
|
@@ -53,6 +62,14 @@ vi.mock("@agent-native/core/client/agent-chat", () => ({
|
|
|
53
62
|
}),
|
|
54
63
|
}));
|
|
55
64
|
|
|
65
|
+
vi.mock("@agent-native/toolkit/app/chat", async (importOriginal) => ({
|
|
66
|
+
...(await importOriginal<typeof import("@agent-native/toolkit/app/chat")>()),
|
|
67
|
+
AgentSidebar: ({ children }: { children: React.ReactNode }) => (
|
|
68
|
+
<div data-agent-sidebar>{children}</div>
|
|
69
|
+
),
|
|
70
|
+
focusAgentChat: vi.fn(),
|
|
71
|
+
}));
|
|
72
|
+
|
|
56
73
|
vi.mock("@agent-native/core/client/api-path", () => ({
|
|
57
74
|
agentNativePath: (path: string) => path,
|
|
58
75
|
appBasePath: () => clientState.basePath,
|
|
@@ -62,9 +79,11 @@ vi.mock("@agent-native/core/client/api-path", () => ({
|
|
|
62
79
|
clientState.basePath && path.startsWith("/")
|
|
63
80
|
? `${clientState.basePath}${path}`
|
|
64
81
|
: path,
|
|
82
|
+
frameworkRoutePrefix: () => "",
|
|
65
83
|
}));
|
|
66
84
|
|
|
67
|
-
vi.mock("@agent-native/core/client/hooks", () => ({
|
|
85
|
+
vi.mock("@agent-native/core/client/hooks", async (importOriginal) => ({
|
|
86
|
+
...(await importOriginal<typeof import("@agent-native/core/client/hooks")>()),
|
|
68
87
|
useActionQuery: (action: string) => ({
|
|
69
88
|
data:
|
|
70
89
|
action === "list-workspace-apps" ? clientState.workspaceApps : undefined,
|
|
@@ -84,6 +103,7 @@ vi.mock("next-themes", () => ({
|
|
|
84
103
|
}));
|
|
85
104
|
|
|
86
105
|
vi.mock("@agent-native/core/client/i18n", () => ({
|
|
106
|
+
useFormatters: () => ({ formatNumber: (value: number) => String(value) }),
|
|
87
107
|
useT: () => (key: string, values?: Record<string, unknown>) => {
|
|
88
108
|
const messages: Record<string, string> = {
|
|
89
109
|
"dispatch.nav.chat": "Chat",
|
|
@@ -105,23 +125,22 @@ vi.mock("@agent-native/core/client/i18n", () => ({
|
|
|
105
125
|
},
|
|
106
126
|
}));
|
|
107
127
|
|
|
108
|
-
vi.mock("@agent-native/
|
|
128
|
+
vi.mock("@agent-native/toolkit/app/shared", async (importOriginal) => ({
|
|
129
|
+
...(await importOriginal<
|
|
130
|
+
typeof import("@agent-native/toolkit/app/shared")
|
|
131
|
+
>()),
|
|
109
132
|
openCommandMenu: vi.fn(),
|
|
110
133
|
}));
|
|
111
134
|
|
|
112
|
-
vi.mock("
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
),
|
|
120
|
-
FeedbackButton: () => <div>Feedback</div>,
|
|
121
|
-
};
|
|
122
|
-
});
|
|
135
|
+
vi.mock("../create-app-popover", () => ({
|
|
136
|
+
CreateAppPopover: () => null,
|
|
137
|
+
}));
|
|
138
|
+
|
|
139
|
+
vi.mock("@agent-native/toolkit/app/feedback", () => ({
|
|
140
|
+
FeedbackButton: () => <div>Feedback</div>,
|
|
141
|
+
}));
|
|
123
142
|
|
|
124
|
-
vi.mock("@agent-native/
|
|
143
|
+
vi.mock("@agent-native/toolkit/app/org", () => ({
|
|
125
144
|
InvitationBanner: () => null,
|
|
126
145
|
OrgSwitcher: () => <div>Organization</div>,
|
|
127
146
|
}));
|
|
@@ -206,14 +225,14 @@ describe("Dispatch workspace app sidebar", () => {
|
|
|
206
225
|
|
|
207
226
|
describe("Dispatch Settings frame", () => {
|
|
208
227
|
it("drops the Dispatch chrome on Settings", () => {
|
|
209
|
-
expect(
|
|
210
|
-
expect(
|
|
211
|
-
expect(
|
|
228
|
+
expect(isSettingsPathname("/settings")).toBe(true);
|
|
229
|
+
expect(isSettingsPathname("/settings/members")).toBe(true);
|
|
230
|
+
expect(isSettingsPathname("/settings/app")).toBe(true);
|
|
212
231
|
});
|
|
213
232
|
|
|
214
233
|
it("keeps the Dispatch chrome off Settings", () => {
|
|
215
|
-
expect(
|
|
216
|
-
expect(
|
|
234
|
+
expect(isSettingsPathname("/admin")).toBe(false);
|
|
235
|
+
expect(isSettingsPathname("/apps/mail/settings")).toBe(false);
|
|
217
236
|
});
|
|
218
237
|
});
|
|
219
238
|
|
|
@@ -750,10 +769,10 @@ describe("chat-first surface panel toggle stacking", () => {
|
|
|
750
769
|
it("keeps the toggle above the mobile full-screen surface panel overlay", async () => {
|
|
751
770
|
const { ChatFirstSurfacePanelToggle: RealChatFirstSurfacePanelToggle } =
|
|
752
771
|
await vi.importActual<
|
|
753
|
-
typeof import("@agent-native/
|
|
754
|
-
>("@agent-native/
|
|
772
|
+
typeof import("@agent-native/toolkit/app/chat/chat-first")
|
|
773
|
+
>("@agent-native/toolkit/app/chat/chat-first");
|
|
755
774
|
const { ChatFirstSurfacePanel } =
|
|
756
|
-
await import("@agent-native/
|
|
775
|
+
await import("@agent-native/toolkit/app/chat/chat-first");
|
|
757
776
|
|
|
758
777
|
const container = document.createElement("div");
|
|
759
778
|
document.body.appendChild(container);
|
|
@@ -805,7 +824,7 @@ describe("chat-first app surface tab chat rail", () => {
|
|
|
805
824
|
|
|
806
825
|
async function renderAppTab(isMobileSurface: boolean) {
|
|
807
826
|
const { defaultChatFirstCopy } =
|
|
808
|
-
await import("@agent-native/
|
|
827
|
+
await import("@agent-native/toolkit/app/chat/chat-first");
|
|
809
828
|
vi.stubGlobal(
|
|
810
829
|
"fetch",
|
|
811
830
|
vi.fn().mockResolvedValue(new Response("{}", { status: 200 })),
|