@allbluecn/web-app 0.10.2 → 0.11.0
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/package.json +26 -11
- package/public/favicon.ico +0 -0
- package/public/logo/allblue-logo-app-icon.svg +7 -0
- package/public/logo/allblue-logo-dark-square.svg +4 -0
- package/public/logo/allblue-logo-dark.svg +4 -0
- package/public/logo/allblue-logo-light-square.svg +4 -0
- package/public/logo/allblue-logo-light.svg +4 -0
- package/src/__tests__/bench/baselines/format-timestamp.json +44 -0
- package/src/__tests__/bench/core-hot-path.bench.ts +71 -0
- package/src/__tests__/integration/db-crud.integration.test.ts +79 -0
- package/src/__tests__/rejects-tothrow-regression.test.ts +31 -0
- package/src/__tests__/security/ai/prompt-injection.test.ts +105 -0
- package/src/__tests__/security/ssrf-url-whitelist.test.ts +54 -0
- package/src/__tests__/security/xss-sanitize.test.ts +99 -0
- package/src/__tests__/setup.ts +9 -0
- package/src/__tests__/visual/__screenshots__/theme-surface.vrt.test.tsx/theme-surface-dark-baseline-1-chromium-darwin.png +0 -0
- package/src/__tests__/visual/__screenshots__/theme-surface.vrt.test.tsx/theme-surface-light-baseline-1-chromium-darwin.png +0 -0
- package/src/__tests__/visual/__screenshots__/user-avatar.vrt.test.tsx/user-avatar-initial-fallback-baseline-1-chromium-darwin.png +0 -0
- package/src/__tests__/visual/theme-surface.vrt.test.tsx +54 -0
- package/src/__tests__/visual/user-avatar.vrt.test.tsx +32 -0
- package/src/components/error/global-error-boundary.tsx +2 -2
- package/src/components/knowledge/general-groups.ts +15 -0
- package/src/components/knowledge/kb-filter-popover.tsx +143 -0
- package/src/components/knowledge-public/legal-compliance-editor.tsx +4 -2
- package/src/components/layout/sidebar-03/__tests__/nav-workspace.test.tsx +9 -6
- package/src/components/layout/sidebar-03/nav-knowledge.tsx +19 -17
- package/src/components/layout/sidebar-03/nav-secondary.tsx +57 -47
- package/src/components/layout/sidebar-03/nav-workspace.tsx +20 -22
- package/src/components/mdx.tsx +9 -0
- package/src/components/shared-kit/avatars/notion-avatar.tsx +2 -1
- package/src/components/shared-kit/icons/__tests__/lucide-curated-icons.test.ts +2 -2
- package/src/components/shared-kit/icons/__tests__/lucide-icon-picker.test.tsx +3 -2
- package/src/components/shared-kit/icons/lucide-icon-picker/curated-icons.ts +5 -10
- package/src/components/shared-kit/icons/lucide-icon-picker/lucide-icon-by-name.tsx +3 -3
- package/src/components/shared-kit/theme/theme-surface.tsx +52 -0
- package/src/components/story/relations/general-groups.ts +1 -15
- package/src/components/story/relations/knowledge-select-dialog.tsx +13 -87
- package/src/components/story/story-list-view.tsx +7 -1
- package/src/components/tiptap/node/table-node/ui/table-move-row-column-button/use-table-move-row-column.ts +0 -2
- package/src/components/workspace/__tests__/activity/workspace-activity-card.test.tsx +36 -0
- package/src/components/workspace/__tests__/contribution/workspace-contribution-card.test.tsx +17 -0
- package/src/components/workspace/__tests__/dialogs/create-workspace-dialog.test.tsx +63 -0
- package/src/components/workspace/__tests__/dialogs/delete-workspace-options.test.tsx +89 -0
- package/src/components/workspace/__tests__/dialogs/edit-workspace-dialog.test.tsx +68 -0
- package/src/components/workspace/__tests__/header/workspace-header.test.tsx +40 -0
- package/src/components/workspace/__tests__/kb/workspace-kb-card.test.tsx +154 -0
- package/src/components/workspace/__tests__/members/workspace-member-item.test.tsx +24 -0
- package/src/components/workspace/__tests__/members/workspace-members-manager.test.tsx +51 -0
- package/src/components/workspace/__tests__/projects/workspace-project-list.test.tsx +46 -0
- package/src/components/workspace/{create-workspace-dialog.tsx → dialogs/create-workspace-dialog.tsx} +1 -1
- package/src/components/workspace/{edit-workspace-dialog.tsx → dialogs/edit-workspace-dialog.tsx} +1 -1
- package/src/components/workspace/kb/workspace-kb-card.tsx +594 -0
- package/src/components/workspace/kb/workspace-kb-manage-dialog.tsx +174 -0
- package/src/components/workspace/kb/workspace-quick-doc-dialog.tsx +431 -0
- package/src/components/workspace/{workspace-members-manager.tsx → members/workspace-members-manager.tsx} +78 -40
- package/src/lib/__tests__/msw-sample.test.ts +68 -0
- package/src/lib/__tests__/pgvector.test.ts +2 -2
- package/src/lib/changelog/sdk-versions.ts +21 -21
- package/src/lib/collections/knowledge/knowledge-bases-collection.ts +3 -1
- package/src/lib/collections/reference/workspaces-collection.ts +3 -1
- package/src/lib/fetch-json.ts +23 -0
- package/src/lib/fumadocs-i18n.ts +7 -0
- package/src/{components/workspace/workspace-kb-card.tsx → lib/i18n/resolver.ts} +6 -12
- package/src/lib/layout.shared.tsx +40 -0
- package/src/lib/sanitize.ts +14 -1
- package/src/lib/session.ts +9 -1
- package/src/lib/source.ts +15 -0
- package/src/lib/vector-store/__tests__/factory.test.ts +1 -1
- package/src/lib/vector-store/__tests__/sqlite-vec-store.test.ts +2 -2
- package/src/plugins/core/tags/__tests__/tags.test.ts +10 -10
- package/src/routeTree.gen.ts +65 -0
- package/src/routes/$lang/docs/$/route.lazy.tsx +62 -0
- package/src/routes/$lang/docs/$/route.tsx +52 -0
- package/src/routes/-tests/docs-redirect.test.ts +45 -0
- package/src/routes/__root.tsx +13 -7
- package/src/routes/__tests__/-edition-routing.test.tsx +4 -4
- package/src/routes/__tests__/route-tree-structure.test.ts +65 -0
- package/src/routes/_nav/knowledge/compliance/index.lazy.tsx +5 -2
- package/src/routes/_nav/knowledge/index.lazy.tsx +1 -1
- package/src/routes/_nav/knowledge/laws/index.lazy.tsx +5 -2
- package/src/routes/_nav/route.tsx +21 -0
- package/src/routes/_nav/workspaces/$workspaceId/route.lazy.tsx +13 -11
- package/src/routes/_nav/workspaces/$workspaceId/route.tsx +4 -2
- package/src/routes/_nav/workspaces/$workspaceId/settings/route.lazy.tsx +1 -1
- package/src/routes/_nav/workspaces/index.lazy.tsx +3 -3
- package/src/routes/api/search.ts +13 -0
- package/src/routes/docs.tsx +9 -0
- package/src/server/__tests__/agent-crud.test.ts +4 -4
- package/src/server/__tests__/chat-conversations.test.ts +1 -3
- package/src/server/__tests__/fetch-guard.test.ts +99 -0
- package/src/server/__tests__/permissions.test.ts +1 -3
- package/src/server/__tests__/resources.team-seats.test.ts +2 -0
- package/src/server/__tests__/skill-crud.test.ts +3 -3
- package/src/server/ai-gateway/__tests__/ai-output-guard.test.ts +95 -0
- package/src/server/ai-gateway/__tests__/kb-context-guard.test.ts +136 -0
- package/src/server/ai-gateway/__tests__/knowledge-search-fence.test.ts +240 -0
- package/src/server/ai-gateway/__tests__/llm-fence.test.ts +125 -0
- package/src/server/ai-gateway/__tests__/run-store.test.ts +52 -0
- package/src/server/ai-gateway/ai-output-guard.ts +77 -0
- package/src/server/ai-gateway/index.ts +5 -0
- package/src/server/ai-gateway/kb-context-guard.ts +46 -0
- package/src/server/ai-gateway/llm-fence.ts +82 -0
- package/src/server/ai-gateway/persistence/run-store.ts +19 -0
- package/src/server/ai-gateway/story-prompt.ts +4 -2
- package/src/server/ai-gateway/tools/definitions.ts +12 -6
- package/src/server/ai-gateway/tools/server.ts +97 -54
- package/src/server/builtin-project.ts +21 -0
- package/src/server/email/sender.ts +8 -2
- package/src/server/fetch-guard.ts +170 -0
- package/src/server/middlewares/security-headers.ts +113 -0
- package/src/server/serverFns/__tests__/billing.test.ts +263 -0
- package/src/server/serverFns/__tests__/link-preview.test.ts +239 -0
- package/src/server/serverFns/__tests__/project-kb.test.ts +3 -3
- package/src/server/serverFns/__tests__/project-team-assign.test.ts +1 -1
- package/src/server/serverFns/__tests__/story-comments.test.ts +265 -0
- package/src/server/serverFns/__tests__/story-crud-archive-detail.test.ts +266 -0
- package/src/server/serverFns/__tests__/story-crud-labels-users.test.ts +227 -0
- package/src/server/serverFns/__tests__/story-crud.test.ts +526 -0
- package/src/server/serverFns/__tests__/story-links.test.ts +262 -0
- package/src/server/serverFns/__tests__/story-list-query.test.ts +259 -0
- package/src/server/serverFns/__tests__/story-reactions.test.ts +230 -0
- package/src/server/serverFns/__tests__/story-tree.test.ts +317 -0
- package/src/server/serverFns/__tests__/story-types.test.ts +294 -0
- package/src/server/serverFns/__tests__/team-accept.test.ts +6 -6
- package/src/server/serverFns/__tests__/team-invitation.test.ts +3 -3
- package/src/server/serverFns/__tests__/team-join-request.test.ts +8 -8
- package/src/server/serverFns/__tests__/update-seats.test.ts +4 -4
- package/src/server/serverFns/__tests__/workspace-kb-idor.test.ts +160 -0
- package/src/server/serverFns/__tests__/workspace-kb-utils.test.ts +54 -0
- package/src/server/serverFns/__tests__/workspace-kb.test.ts +348 -0
- package/src/server/serverFns/__tests__/workspace.test.ts +28 -8
- package/src/server/serverFns/iteration/__tests__/iteration-crud.test.ts +3 -5
- package/src/server/serverFns/iteration/__tests__/iteration-stories.test.ts +1 -1
- package/src/server/serverFns/iteration/__tests__/iteration-transfer.test.ts +2 -2
- package/src/server/serverFns/kb-doc-search.ts +111 -0
- package/src/server/serverFns/knowledge-public/compliance/create.ts +2 -1
- package/src/server/serverFns/knowledge-public/legal/create.ts +2 -1
- package/src/server/serverFns/story/__tests__/bulk.test.ts +1 -1
- package/src/server/serverFns/story/__tests__/label-suggest-fn.test.ts +2 -6
- package/src/server/serverFns/story/__tests__/story-assoc.test.ts +2 -4
- package/src/server/serverFns/story/__tests__/story-dependencies.test.ts +2 -2
- package/src/server/serverFns/story/__tests__/story-groups.test.ts +2 -2
- package/src/server/serverFns/story/kb-general-consts.ts +39 -0
- package/src/server/serverFns/story/kb-general.ts +30 -17
- package/src/server/serverFns/story/story-assoc.ts +13 -103
- package/src/server/serverFns/story/story-crud.ts +2 -5
- package/src/server/serverFns/story/story-groups.ts +4 -13
- package/src/server/serverFns/team.ts +1 -1
- package/src/server/serverFns/workspace-kb-utils.ts +138 -0
- package/src/server/serverFns/workspace-kb.ts +403 -0
- package/src/server/serverFns/workspace.ts +4 -1
- package/src/shared/ai-cli/__tests__/adapter.test.ts +67 -0
- package/src/shared/ai-cli/__tests__/cli-detector.test.ts +99 -0
- package/src/shared/ai-cli/adapter.ts +2 -2
- package/src/shared/ai-cli/cli-detector.ts +18 -9
- package/src/start.ts +2 -1
- package/src/styles/globals.css +116 -0
- package/src/types/jest-dom-vitest.d.ts +8 -7
- package/vite.shared.ts +18 -1
- package/public/file.svg +0 -1
- package/public/globe.svg +0 -1
- package/public/window.svg +0 -1
- package/src/lib/__tests__/cli-detector.test.ts +0 -80
- /package/src/components/workspace/{workspace-activity-card.tsx → activity/workspace-activity-card.tsx} +0 -0
- /package/src/components/workspace/{workspace-contribution-card.tsx → contribution/workspace-contribution-card.tsx} +0 -0
- /package/src/components/workspace/{delete-workspace-options.tsx → dialogs/delete-workspace-options.tsx} +0 -0
- /package/src/components/workspace/{workspace-header.tsx → header/workspace-header.tsx} +0 -0
- /package/src/components/workspace/{workspace-member-item.tsx → members/workspace-member-item.tsx} +0 -0
- /package/src/components/workspace/{workspace-project-list.tsx → projects/workspace-project-list.tsx} +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { WorkspaceMembersManager } from "../../members/workspace-members-manager";
|
|
4
|
+
|
|
5
|
+
vi.mock("@/components/ui/button", () => ({
|
|
6
|
+
Button: ({ children, ...props }: any) => <button {...props}>{children}</button>,
|
|
7
|
+
}));
|
|
8
|
+
|
|
9
|
+
vi.mock("@/components/ui/input", () => ({
|
|
10
|
+
Input: (props: any) => <input {...props} />,
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
vi.mock("@/components/ui/dialog", () => ({
|
|
14
|
+
Dialog: ({ children }: any) => <div>{children}</div>,
|
|
15
|
+
DialogContent: ({ children }: any) => <div>{children}</div>,
|
|
16
|
+
DialogFooter: ({ children }: any) => <div>{children}</div>,
|
|
17
|
+
DialogHeader: ({ children }: any) => <div>{children}</div>,
|
|
18
|
+
DialogTitle: ({ children }: any) => <h2>{children}</h2>,
|
|
19
|
+
DialogDescription: ({ children }: any) => <p>{children}</p>,
|
|
20
|
+
}));
|
|
21
|
+
|
|
22
|
+
vi.mock("@/components/ui/sonner", () => ({
|
|
23
|
+
toast: { error: vi.fn(), success: vi.fn() },
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
vi.mock("@/components/ui/tooltip", () => ({
|
|
27
|
+
TooltipProvider: ({ children }: any) => <div>{children}</div>,
|
|
28
|
+
Tooltip: ({ children }: any) => <div>{children}</div>,
|
|
29
|
+
TooltipTrigger: ({ children }: any) => <div>{children}</div>,
|
|
30
|
+
TooltipContent: ({ children }: any) => <div>{children}</div>,
|
|
31
|
+
}));
|
|
32
|
+
|
|
33
|
+
vi.mock("@/server/serverFns/workspace", () => ({
|
|
34
|
+
listWorkspaceMembersFn: vi.fn().mockResolvedValue([]),
|
|
35
|
+
inviteWorkspaceMemberFn: vi.fn().mockResolvedValue({}),
|
|
36
|
+
removeWorkspaceMemberFn: vi.fn().mockResolvedValue({}),
|
|
37
|
+
}));
|
|
38
|
+
|
|
39
|
+
describe("WorkspaceMembersManager", () => {
|
|
40
|
+
it("渲染组件不崩溃", () => {
|
|
41
|
+
render(
|
|
42
|
+
<WorkspaceMembersManager
|
|
43
|
+
workspaceId="ws1"
|
|
44
|
+
workspaceOwnerId="owner1"
|
|
45
|
+
members={[]}
|
|
46
|
+
onMembersUpdated={() => {}}
|
|
47
|
+
/>,
|
|
48
|
+
);
|
|
49
|
+
expect(screen.getAllByText(/成员/).length).toBeGreaterThan(0);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { WorkspaceProjectList } from "../../projects/workspace-project-list";
|
|
4
|
+
|
|
5
|
+
vi.mock("@/components/ui/button", () => ({
|
|
6
|
+
Button: ({ children, ...props }: any) => <button {...props}>{children}</button>,
|
|
7
|
+
}));
|
|
8
|
+
|
|
9
|
+
vi.mock("@/components/ui/card", () => ({
|
|
10
|
+
Card: ({ children, className, ...props }: any) => <div className={className} {...props}>{children}</div>,
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
vi.mock("@/components/shared-kit/icons/lucide-icon-picker/lucide-icon-by-name", () => ({
|
|
14
|
+
LucideIconByName: () => <div data-testid="icon" />,
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
vi.mock("@/components/project/create-project-dialog", () => ({
|
|
18
|
+
CreateProjectDialog: () => null,
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
vi.mock("@tanstack/react-router", () => ({
|
|
22
|
+
Link: ({ children }: any) => <a>{children}</a>,
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
const PROJECTS = [
|
|
26
|
+
{
|
|
27
|
+
id: "p1",
|
|
28
|
+
name: "产品需求",
|
|
29
|
+
description: "PRD 管理项目",
|
|
30
|
+
icon: "lightbulb",
|
|
31
|
+
updatedAt: new Date("2024-01-15"),
|
|
32
|
+
_count: { members: 3 },
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
describe("WorkspaceProjectList", () => {
|
|
37
|
+
it("空状态显示提示卡片", () => {
|
|
38
|
+
render(<WorkspaceProjectList projects={[]} workspaceId="ws1" workspaceName="测试" />);
|
|
39
|
+
expect(screen.getByText(/暂无项目/)).toBeInTheDocument();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("有项目时显示项目列表", () => {
|
|
43
|
+
render(<WorkspaceProjectList projects={PROJECTS} workspaceId="ws1" workspaceName="测试" />);
|
|
44
|
+
expect(screen.getByText("产品需求")).toBeInTheDocument();
|
|
45
|
+
});
|
|
46
|
+
});
|
package/src/components/workspace/{create-workspace-dialog.tsx → dialogs/create-workspace-dialog.tsx}
RENAMED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
} from "@/components/ui/dialog";
|
|
30
30
|
import { LucideIconPicker } from "@/components/shared-kit/icons/lucide-icon-picker";
|
|
31
31
|
import { createWorkspaceFn } from "@/server/serverFns/workspace";
|
|
32
|
-
import { createWorkspaceSchema, type CreateWorkspaceValues } from "
|
|
32
|
+
import { createWorkspaceSchema, type CreateWorkspaceValues } from "../schemas/create-workspace";
|
|
33
33
|
import { m } from "@/paraglide/messages.js";
|
|
34
34
|
|
|
35
35
|
interface CreateWorkspaceDialogProps {
|
package/src/components/workspace/{edit-workspace-dialog.tsx → dialogs/edit-workspace-dialog.tsx}
RENAMED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
} from "@/components/ui/dialog";
|
|
30
30
|
import { LucideIconPicker } from "@/components/shared-kit/icons/lucide-icon-picker";
|
|
31
31
|
import { updateWorkspaceFn } from "@/server/serverFns/workspace";
|
|
32
|
-
import { createWorkspaceSchema, type CreateWorkspaceValues } from "
|
|
32
|
+
import { createWorkspaceSchema, type CreateWorkspaceValues } from "../schemas/create-workspace";
|
|
33
33
|
import { m } from "@/paraglide/messages.js";
|
|
34
34
|
|
|
35
35
|
interface EditWorkspaceDialogProps {
|