@agent-native/dispatch 0.13.13 → 0.14.1
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/actions/delete-destination.d.ts +12 -12
- package/dist/actions/navigate.js +1 -1
- package/dist/actions/navigate.js.map +1 -1
- package/dist/actions/provider-api-audit.d.ts +7 -0
- package/dist/actions/provider-api-audit.d.ts.map +1 -0
- package/dist/actions/provider-api-audit.js +74 -0
- package/dist/actions/provider-api-audit.js.map +1 -0
- package/dist/actions/provider-api-catalog.d.ts +1 -1
- package/dist/actions/provider-api-request.js +10 -0
- package/dist/actions/provider-api-request.js.map +1 -1
- package/dist/actions/send-platform-message.d.ts +1 -0
- package/dist/actions/send-platform-message.js +43 -22
- package/dist/actions/send-platform-message.js.map +1 -1
- package/dist/actions/view-screen.js +9 -0
- package/dist/actions/view-screen.js.map +1 -1
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +75 -70
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/components/messaging-setup-panel.d.ts.map +1 -1
- package/dist/components/messaging-setup-panel.js +203 -127
- package/dist/components/messaging-setup-panel.js.map +1 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/pages/messaging.js +1 -1
- package/dist/routes/pages/messaging.js.map +1 -1
- package/dist/routes/pages/operations.d.ts +5 -0
- package/dist/routes/pages/operations.d.ts.map +1 -0
- package/dist/routes/pages/operations.js +51 -0
- package/dist/routes/pages/operations.js.map +1 -0
- package/dist/routes/pages/overview.d.ts +2 -2
- package/dist/server/lib/dispatch-integrations.d.ts +7 -1
- package/dist/server/lib/dispatch-integrations.d.ts.map +1 -1
- package/dist/server/lib/dispatch-integrations.js +178 -8
- package/dist/server/lib/dispatch-integrations.js.map +1 -1
- package/dist/server/lib/dispatch-routing.d.ts +6 -0
- package/dist/server/lib/dispatch-routing.d.ts.map +1 -0
- package/dist/server/lib/dispatch-routing.js +30 -0
- package/dist/server/lib/dispatch-routing.js.map +1 -0
- package/dist/server/lib/env-config.d.ts.map +1 -1
- package/dist/server/lib/env-config.js +50 -0
- package/dist/server/lib/env-config.js.map +1 -1
- package/dist/server/lib/onboarding-steps.d.ts.map +1 -1
- package/dist/server/lib/onboarding-steps.js +25 -0
- package/dist/server/lib/onboarding-steps.js.map +1 -1
- package/dist/server/lib/provider-api.d.ts +2 -2
- package/dist/server/lib/provider-api.d.ts.map +1 -1
- package/dist/server/plugins/integrations.d.ts.map +1 -1
- package/dist/server/plugins/integrations.js +5 -2
- package/dist/server/plugins/integrations.js.map +1 -1
- package/package.json +2 -2
- package/src/actions/navigate.ts +1 -1
- package/src/actions/provider-api-audit.spec.ts +52 -0
- package/src/actions/provider-api-audit.ts +88 -0
- package/src/actions/provider-api-request.ts +10 -0
- package/src/actions/send-platform-message.spec.ts +108 -0
- package/src/actions/send-platform-message.ts +73 -25
- package/src/actions/view-screen.ts +11 -0
- package/src/components/layout/Layout.spec.tsx +154 -0
- package/src/components/layout/Layout.tsx +196 -189
- package/src/components/messaging-setup-panel.spec.tsx +191 -0
- package/src/components/messaging-setup-panel.tsx +472 -193
- package/src/routes/index.spec.ts +23 -0
- package/src/routes/index.ts +1 -0
- package/src/routes/pages/messaging.tsx +1 -1
- package/src/routes/pages/operations.tsx +134 -0
- package/src/server/lib/dispatch-integrations.spec.ts +113 -0
- package/src/server/lib/dispatch-integrations.ts +239 -6
- package/src/server/lib/dispatch-routing.spec.ts +44 -0
- package/src/server/lib/dispatch-routing.ts +42 -0
- package/src/server/lib/env-config.ts +50 -0
- package/src/server/lib/onboarding-steps.ts +32 -0
- package/src/server/plugins/integrations.ts +5 -2
- package/src/styles/dispatch-css.spec.ts +11 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import React, { act } from "react";
|
|
3
|
+
import { createRoot, type Root } from "react-dom/client";
|
|
4
|
+
import { MemoryRouter } from "react-router";
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
|
|
7
|
+
import { TooltipProvider } from "../ui/tooltip";
|
|
8
|
+
import { NavContent } from "./Layout";
|
|
9
|
+
|
|
10
|
+
const clientState = vi.hoisted(() => ({
|
|
11
|
+
createThread: vi.fn<() => Promise<string | null>>(),
|
|
12
|
+
switchThread: vi.fn(),
|
|
13
|
+
threads: [] as Array<Record<string, unknown>>,
|
|
14
|
+
}));
|
|
15
|
+
|
|
16
|
+
vi.mock("@agent-native/core/client", () => ({
|
|
17
|
+
AgentSidebar: ({ children }: { children: React.ReactNode }) => children,
|
|
18
|
+
FeedbackButton: () => <div>Feedback</div>,
|
|
19
|
+
appBasePath: () => "",
|
|
20
|
+
appPath: (path: string) => path,
|
|
21
|
+
focusAgentChat: vi.fn(),
|
|
22
|
+
navigateWithAgentChatViewTransition: (
|
|
23
|
+
navigate: (path: string) => void,
|
|
24
|
+
path: string,
|
|
25
|
+
) => navigate(path),
|
|
26
|
+
useActionQuery: () => ({ data: undefined }),
|
|
27
|
+
useAgentChatHomeHandoff: () => false,
|
|
28
|
+
useAgentChatHomeHandoffLinks: vi.fn(),
|
|
29
|
+
useChatThreads: () => ({
|
|
30
|
+
threads: clientState.threads,
|
|
31
|
+
activeThreadId: "active-thread",
|
|
32
|
+
isLoading: false,
|
|
33
|
+
createThread: clientState.createThread,
|
|
34
|
+
switchThread: clientState.switchThread,
|
|
35
|
+
renameThread: vi.fn(),
|
|
36
|
+
refreshThreads: vi.fn(),
|
|
37
|
+
}),
|
|
38
|
+
useFormatters: () => ({
|
|
39
|
+
formatDate: () => "Jan 1",
|
|
40
|
+
}),
|
|
41
|
+
useT: () => (key: string, values?: Record<string, unknown>) => {
|
|
42
|
+
const messages: Record<string, string> = {
|
|
43
|
+
"dispatch.nav.chat": "Chat",
|
|
44
|
+
"dispatch.nav.overview": "Overview",
|
|
45
|
+
"dispatch.nav.apps": "Apps",
|
|
46
|
+
"dispatch.nav.operate": "Operate",
|
|
47
|
+
"dispatch.nav.advanced": "Advanced",
|
|
48
|
+
"dispatch.sidebar.newChat": "New chat",
|
|
49
|
+
"dispatch.sidebar.newDispatchChat": "New Dispatch chat",
|
|
50
|
+
"dispatch.sidebar.renameChat": "Rename chat",
|
|
51
|
+
"dispatch.sidebar.chatOptions": `Options for ${values?.title ?? ""}`,
|
|
52
|
+
"dispatch.sidebar.renameThread": `Rename ${values?.title ?? ""}`,
|
|
53
|
+
"sidebar.collapseSidebar": "Collapse sidebar",
|
|
54
|
+
"sidebar.expandSidebar": "Expand sidebar",
|
|
55
|
+
};
|
|
56
|
+
return messages[key] ?? String(values?.defaultValue ?? key);
|
|
57
|
+
},
|
|
58
|
+
}));
|
|
59
|
+
|
|
60
|
+
vi.mock("@agent-native/core/client/extensions", () => ({
|
|
61
|
+
ExtensionsSidebarSection: () => <div>Extensions</div>,
|
|
62
|
+
}));
|
|
63
|
+
|
|
64
|
+
vi.mock("@agent-native/core/client/org", () => ({
|
|
65
|
+
InvitationBanner: () => null,
|
|
66
|
+
OrgSwitcher: () => <div>Organization</div>,
|
|
67
|
+
}));
|
|
68
|
+
|
|
69
|
+
describe("Dispatch NavContent", () => {
|
|
70
|
+
let container: HTMLDivElement;
|
|
71
|
+
let root: Root;
|
|
72
|
+
|
|
73
|
+
beforeEach(() => {
|
|
74
|
+
vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
|
|
75
|
+
vi.stubGlobal("requestAnimationFrame", (callback: FrameRequestCallback) => {
|
|
76
|
+
callback(0);
|
|
77
|
+
return 0;
|
|
78
|
+
});
|
|
79
|
+
clientState.createThread.mockResolvedValue("new-thread");
|
|
80
|
+
clientState.switchThread.mockReset();
|
|
81
|
+
clientState.threads = [
|
|
82
|
+
{
|
|
83
|
+
id: "active-thread",
|
|
84
|
+
title: "Current Dispatch work",
|
|
85
|
+
messageCount: 2,
|
|
86
|
+
updatedAt: Date.now(),
|
|
87
|
+
createdAt: Date.now(),
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: "older-thread",
|
|
91
|
+
title: "Earlier Dispatch work",
|
|
92
|
+
messageCount: 1,
|
|
93
|
+
updatedAt: Date.now() - 5 * 60_000,
|
|
94
|
+
createdAt: Date.now() - 5 * 60_000,
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
container = document.createElement("div");
|
|
98
|
+
document.body.appendChild(container);
|
|
99
|
+
root = createRoot(container);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
afterEach(() => {
|
|
103
|
+
act(() => root.unmount());
|
|
104
|
+
container.remove();
|
|
105
|
+
vi.unstubAllGlobals();
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("uses the quieter Analytics-style chat history and retains thread actions", async () => {
|
|
109
|
+
await act(async () => {
|
|
110
|
+
root.render(
|
|
111
|
+
<MemoryRouter initialEntries={["/chat/active-thread"]}>
|
|
112
|
+
<TooltipProvider>
|
|
113
|
+
<NavContent />
|
|
114
|
+
</TooltipProvider>
|
|
115
|
+
</MemoryRouter>,
|
|
116
|
+
);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
expect(container.textContent).not.toContain("Chats");
|
|
120
|
+
expect(container.textContent).toContain("Current Dispatch work");
|
|
121
|
+
expect(container.textContent).toContain("Earlier Dispatch work");
|
|
122
|
+
expect(container.textContent).toContain("New chat");
|
|
123
|
+
expect(container.textContent).toContain("5m");
|
|
124
|
+
expect(
|
|
125
|
+
[...container.querySelectorAll("div")].some((element) =>
|
|
126
|
+
element.className.includes("group/item"),
|
|
127
|
+
),
|
|
128
|
+
).toBe(true);
|
|
129
|
+
expect(
|
|
130
|
+
container.querySelector('img[src="/agent-native-icon-light.svg"]')
|
|
131
|
+
?.parentElement?.className,
|
|
132
|
+
).not.toContain("border");
|
|
133
|
+
expect(container.textContent).not.toContain("Workspace control plane");
|
|
134
|
+
|
|
135
|
+
const threadButton = [...container.querySelectorAll("button")].find(
|
|
136
|
+
(button) => button.textContent === "Earlier Dispatch work",
|
|
137
|
+
);
|
|
138
|
+
expect(threadButton).toBeDefined();
|
|
139
|
+
await act(async () => {
|
|
140
|
+
threadButton?.click();
|
|
141
|
+
});
|
|
142
|
+
expect(clientState.switchThread).toHaveBeenCalledWith("older-thread");
|
|
143
|
+
|
|
144
|
+
const newChatButton = [...container.querySelectorAll("button")].find(
|
|
145
|
+
(button) => button.textContent?.includes("New chat"),
|
|
146
|
+
);
|
|
147
|
+
expect(newChatButton).toBeDefined();
|
|
148
|
+
await act(async () => {
|
|
149
|
+
newChatButton?.click();
|
|
150
|
+
});
|
|
151
|
+
expect(clientState.createThread).toHaveBeenCalledOnce();
|
|
152
|
+
expect(clientState.switchThread).toHaveBeenCalledWith("new-thread");
|
|
153
|
+
});
|
|
154
|
+
});
|