feat(kernel): complete tree-first graph tasks 074-080

This commit is contained in:
lix-2026
2026-04-16 22:01:51 +08:00
parent 2ff10fa86c
commit b1d5d97142
65 changed files with 11579 additions and 4606 deletions
@@ -6,7 +6,9 @@ describe("useAiAgentUiStore", () => {
useAiAgentUiStore.setState({
documentAgentAvailable: false,
documentAgentOpen: false,
documentAgentActivated: false,
globalAgentOpen: false,
globalAgentActivated: false,
});
});
@@ -15,8 +17,10 @@ describe("useAiAgentUiStore", () => {
state.toggleGlobalAgentOpen();
expect(useAiAgentUiStore.getState().globalAgentOpen).toBe(true);
expect(useAiAgentUiStore.getState().globalAgentActivated).toBe(true);
state.toggleGlobalAgentOpen();
expect(useAiAgentUiStore.getState().globalAgentOpen).toBe(false);
expect(useAiAgentUiStore.getState().globalAgentActivated).toBe(true);
});
});
+22 -4
View File
@@ -4,8 +4,10 @@ import { create } from "zustand";
type AiAgentUiState = {
globalAgentOpen: boolean;
globalAgentActivated: boolean;
documentAgentAvailable: boolean;
documentAgentOpen: boolean;
documentAgentActivated: boolean;
setGlobalAgentOpen: (open: boolean) => void;
toggleGlobalAgentOpen: () => void;
setDocumentAgentAvailable: (available: boolean) => void;
@@ -15,18 +17,34 @@ type AiAgentUiState = {
export const useAiAgentUiStore = create<AiAgentUiState>((set, get) => ({
globalAgentOpen: false,
globalAgentActivated: false,
documentAgentAvailable: false,
documentAgentOpen: false,
setGlobalAgentOpen: (open) => set({ globalAgentOpen: open }),
documentAgentActivated: false,
setGlobalAgentOpen: (open) =>
set((state) => ({
globalAgentOpen: open,
globalAgentActivated: state.globalAgentActivated || open,
})),
toggleGlobalAgentOpen: () => {
const s = get();
set({ globalAgentOpen: !s.globalAgentOpen });
set({
globalAgentOpen: !s.globalAgentOpen,
globalAgentActivated: s.globalAgentActivated || !s.globalAgentOpen,
});
},
setDocumentAgentAvailable: (available) => set({ documentAgentAvailable: available }),
setDocumentAgentOpen: (open) => set({ documentAgentOpen: open }),
setDocumentAgentOpen: (open) =>
set((state) => ({
documentAgentOpen: open,
documentAgentActivated: state.documentAgentActivated || open,
})),
toggleDocumentAgentOpen: () => {
const s = get();
if (!s.documentAgentAvailable) return;
set({ documentAgentOpen: !s.documentAgentOpen });
set({
documentAgentOpen: !s.documentAgentOpen,
documentAgentActivated: s.documentAgentActivated || !s.documentAgentOpen,
});
},
}));
@@ -0,0 +1,33 @@
"use client";
import { create } from "zustand";
type OnlyOfficeAiBridgeState = {
pluginReady: boolean;
targetOrigin: string;
targetWindow: Window | null;
lastReadyAt: number | null;
captureReady: (payload: { targetOrigin: string; targetWindow: Window | null }) => void;
reset: () => void;
};
export const useOnlyOfficeAiBridgeStore = create<OnlyOfficeAiBridgeState>((set) => ({
pluginReady: false,
targetOrigin: "*",
targetWindow: null,
lastReadyAt: null,
captureReady: ({ targetOrigin, targetWindow }) =>
set({
pluginReady: Boolean(targetWindow),
targetOrigin: targetOrigin || "*",
targetWindow,
lastReadyAt: Date.now(),
}),
reset: () =>
set({
pluginReady: false,
targetOrigin: "*",
targetWindow: null,
lastReadyAt: null,
}),
}));
@@ -14,6 +14,7 @@ export type FilterKey = "titleOnly" | "exact" | "onlyCurrentPage" | "includeOcr"
interface SearchPaletteState {
open: boolean;
activated: boolean;
mode: SearchPaletteMode;
query: string;
filters: Omit<DocumentSearchFilters, "timeRange">;
@@ -47,6 +48,7 @@ const defaultFilters: Omit<DocumentSearchFilters, "timeRange"> = {
export const useSearchPaletteStore = create<SearchPaletteState>((set) => ({
open: false,
activated: false,
mode: "search",
query: "",
filters: { ...defaultFilters },
@@ -58,12 +60,14 @@ export const useSearchPaletteStore = create<SearchPaletteState>((set) => ({
openSearch: () =>
set((state) => ({
open: true,
activated: true,
mode: "search",
query: state.query,
})),
openReference: (options) =>
set({
open: true,
activated: true,
mode: "reference",
referenceMode: options?.referenceMode ?? "inline",
alias: options?.aliasSeed ?? "",