@sciol/xyzen 0.2.8 → 0.2.10

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.
Files changed (32) hide show
  1. package/dist/app/App.d.ts +1 -2
  2. package/dist/app/AppFullscreen.d.ts +5 -0
  3. package/dist/components/features/LayoutToggle.d.ts +5 -0
  4. package/dist/components/features/SettingsButton.d.ts +5 -0
  5. package/dist/components/features/index.d.ts +2 -0
  6. package/dist/components/layouts/XyzenAgent.d.ts +1 -0
  7. package/dist/components/layouts/XyzenTopics.d.ts +5 -0
  8. package/dist/components/modals/ConfirmationModal.d.ts +9 -0
  9. package/dist/components/modals/EditMcpServerModal.d.ts +1 -0
  10. package/dist/components/modals/SettingsModal.d.ts +1 -0
  11. package/dist/components/modals/settings/ProviderConfigForm.d.ts +1 -0
  12. package/dist/components/modals/settings/ProviderList.d.ts +1 -0
  13. package/dist/components/modals/settings/StyleSettings.d.ts +1 -0
  14. package/dist/components/modals/settings/ThemeSettings.d.ts +1 -0
  15. package/dist/components/modals/settings/UiSettings.d.ts +2 -0
  16. package/dist/components/modals/settings/index.d.ts +5 -0
  17. package/dist/hooks/useTheme.d.ts +1 -0
  18. package/dist/service/llmProviderService.d.ts +34 -10
  19. package/dist/service/mcpService.d.ts +2 -2
  20. package/dist/store/slices/agentSlice.d.ts +1 -0
  21. package/dist/store/slices/chatSlice.d.ts +1 -0
  22. package/dist/store/slices/mcpSlice.d.ts +6 -2
  23. package/dist/store/slices/providerSlice.d.ts +12 -6
  24. package/dist/store/slices/uiSlice.d.ts +12 -1
  25. package/dist/store/types.d.ts +2 -0
  26. package/dist/types/llmProvider.d.ts +40 -25
  27. package/dist/types/mcp.d.ts +1 -0
  28. package/dist/utils/providerColors.d.ts +32 -0
  29. package/dist/utils/toolMessageParser.d.ts +31 -0
  30. package/dist/xyzen.es.js +18764 -30480
  31. package/dist/xyzen.umd.js +66 -70
  32. package/package.json +2 -2
package/dist/app/App.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  export interface XyzenProps {
2
2
  backendUrl?: string;
3
- showThemeToggle?: boolean;
4
3
  showLlmProvider?: boolean;
5
4
  }
6
- export declare function Xyzen({ backendUrl, showThemeToggle, showLlmProvider, }: XyzenProps): import("react/jsx-runtime").JSX.Element | null;
5
+ export declare function Xyzen({ backendUrl, showLlmProvider, }: XyzenProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ export interface AppFullscreenProps {
2
+ backendUrl?: string;
3
+ showLlmProvider?: boolean;
4
+ }
5
+ export declare function AppFullscreen({ backendUrl, showLlmProvider, }: AppFullscreenProps): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,5 @@
1
+ export type LayoutToggleProps = {
2
+ className?: string;
3
+ title?: string;
4
+ };
5
+ export declare const LayoutToggle: ({ className, title, }: LayoutToggleProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ export type SettingsButtonProps = {
2
+ className?: string;
3
+ title?: string;
4
+ };
5
+ export declare const SettingsButton: ({ className, title, }: SettingsButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,4 @@
1
1
  export { AuthStatus } from './AuthStatus';
2
+ export { SettingsButton } from './SettingsButton';
2
3
  export { ThemeToggle } from './ThemeToggle';
4
+ export { LayoutToggle } from './LayoutToggle';
@@ -9,5 +9,6 @@ export type Agent = {
9
9
  mcp_server_ids?: string[];
10
10
  user_id: string;
11
11
  require_tool_confirmation?: boolean;
12
+ provider_id?: string | null;
12
13
  };
13
14
  export default function XyzenAgent(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * XyzenTopics - Topic/Session list component for fullscreen layout
3
+ * Displays topics grouped by sessions with management capabilities
4
+ */
5
+ export default function XyzenTopics(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ interface ConfirmationModalProps {
2
+ isOpen: boolean;
3
+ onClose: () => void;
4
+ onConfirm: () => void;
5
+ title: string;
6
+ message: string;
7
+ }
8
+ declare const ConfirmationModal: React.FC<ConfirmationModalProps>;
9
+ export default ConfirmationModal;
@@ -0,0 +1 @@
1
+ export declare function EditMcpServerModal(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function SettingsModal(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ProviderConfigForm: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ProviderList: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function StyleSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function ThemeSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export type UiSettingType = "theme" | "style";
2
+ export declare function UiSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ export { ProviderConfigForm } from './ProviderConfigForm';
2
+ export { ProviderList } from './ProviderList';
3
+ export { UiSettings } from './UiSettings';
4
+ export { ThemeSettings } from './ThemeSettings';
5
+ export { StyleSettings } from './StyleSettings';
@@ -2,5 +2,6 @@ type Theme = "light" | "dark" | "system";
2
2
  declare const useTheme: () => {
3
3
  theme: Theme;
4
4
  cycleTheme: () => void;
5
+ setTheme: (newTheme: Theme) => void;
5
6
  };
6
7
  export default useTheme;
@@ -1,15 +1,39 @@
1
- import { LlmProviderCreate, LlmProviderResponse, SupportedProviderType, SwitchProviderRequest } from '../types/llmProvider';
1
+ import { LlmProviderCreate, LlmProviderResponse, LlmProviderUpdate, ProviderTemplate } from '../types/llmProvider';
2
2
  declare class LlmProviderService {
3
3
  private getBackendUrl;
4
- getLlmProviders(): Promise<LlmProviderResponse[]>;
5
- createLlmProvider(provider: LlmProviderCreate): Promise<LlmProviderResponse>;
6
- getLlmProvider(id: number): Promise<LlmProviderResponse>;
7
- updateLlmProvider(id: number, provider: Partial<LlmProviderCreate>): Promise<LlmProviderResponse>;
8
- deleteLlmProvider(id: number): Promise<void>;
9
- switchActiveProvider(request: SwitchProviderRequest): Promise<{
10
- message: string;
11
- }>;
12
- getSupportedTypes(): Promise<SupportedProviderType[]>;
4
+ private createAuthHeaders;
5
+ /**
6
+ * Get provider templates for UI
7
+ */
8
+ getProviderTemplates(): Promise<ProviderTemplate[]>;
9
+ /**
10
+ * Get current user's providers
11
+ */
12
+ getMyProviders(): Promise<LlmProviderResponse[]>;
13
+ /**
14
+ * Get current user's default provider
15
+ */
16
+ getMyDefaultProvider(): Promise<LlmProviderResponse>;
17
+ /**
18
+ * Set a provider as default
19
+ */
20
+ setDefaultProvider(providerId: string): Promise<LlmProviderResponse>;
21
+ /**
22
+ * Create a new provider
23
+ */
24
+ createProvider(provider: LlmProviderCreate): Promise<LlmProviderResponse>;
25
+ /**
26
+ * Get a single provider by ID
27
+ */
28
+ getProvider(id: string): Promise<LlmProviderResponse>;
29
+ /**
30
+ * Update a provider
31
+ */
32
+ updateProvider(id: string, provider: LlmProviderUpdate): Promise<LlmProviderResponse>;
33
+ /**
34
+ * Delete a provider
35
+ */
36
+ deleteProvider(id: string): Promise<void>;
13
37
  }
14
38
  export declare const llmProviderService: LlmProviderService;
15
39
  export {};
@@ -1,8 +1,8 @@
1
- import { McpServer, McpServerCreate } from '../types/mcp';
1
+ import { McpServer, McpServerCreate, McpServerUpdate } from '../types/mcp';
2
2
  export declare const mcpService: {
3
3
  getMcpServers(): Promise<McpServer[]>;
4
4
  createMcpServer(server: McpServerCreate): Promise<McpServer>;
5
- updateMcpServer(id: string, server: Partial<McpServerCreate>): Promise<McpServer>;
5
+ updateMcpServer(id: string, server: McpServerUpdate): Promise<McpServer>;
6
6
  deleteMcpServer(id: string): Promise<void>;
7
7
  refreshMcpServers(): Promise<void>;
8
8
  };
@@ -7,6 +7,7 @@ export interface AgentSlice {
7
7
  fetchAgents: () => Promise<void>;
8
8
  createAgent: (agent: Omit<Agent, "id">) => Promise<void>;
9
9
  updateAgent: (agent: Agent) => Promise<void>;
10
+ updateAgentProvider: (agentId: string, providerId: string | null) => Promise<void>;
10
11
  deleteAgent: (id: string) => Promise<void>;
11
12
  }
12
13
  export declare const createAgentSlice: StateCreator<XyzenState, [
@@ -14,6 +14,7 @@ export interface ChatSlice {
14
14
  sendMessage: (message: string) => void;
15
15
  createDefaultChannel: (agentId?: string) => Promise<void>;
16
16
  updateTopicName: (topicId: string, newName: string) => Promise<void>;
17
+ deleteTopic: (topicId: string) => Promise<void>;
17
18
  confirmToolCall: (channelId: string, toolCallId: string) => void;
18
19
  cancelToolCall: (channelId: string, toolCallId: string) => void;
19
20
  }
@@ -1,15 +1,19 @@
1
- import { McpServer, McpServerCreate } from '../../types/mcp';
1
+ import { McpServer, McpServerCreate, McpServerUpdate } from '../../types/mcp';
2
2
  import { StateCreator } from 'zustand';
3
3
  import { XyzenState } from '../types';
4
4
  export interface McpSlice {
5
5
  mcpServers: McpServer[];
6
6
  lastFetchTime: number;
7
+ isEditMcpServerModalOpen: boolean;
8
+ editingMcpServer: McpServer | null;
7
9
  fetchMcpServers: () => Promise<void>;
8
10
  refreshMcpServers: () => Promise<void>;
9
11
  addMcpServer: (server: McpServerCreate) => Promise<void>;
10
- editMcpServer: (id: string, server: Partial<McpServerCreate>) => Promise<void>;
12
+ editMcpServer: (id: string, server: McpServerUpdate) => Promise<void>;
11
13
  removeMcpServer: (id: string) => Promise<void>;
12
14
  updateMcpServerInList: (server: McpServer) => void;
15
+ openEditMcpServerModal: (server: McpServer) => void;
16
+ closeEditMcpServerModal: () => void;
13
17
  }
14
18
  export declare const createMcpSlice: StateCreator<XyzenState, [
15
19
  ["zustand/immer", never]
@@ -1,14 +1,20 @@
1
- import { LlmProviderCreate, LlmProviderResponse } from '../../types/llmProvider';
1
+ import { LlmProviderCreate, LlmProviderResponse, LlmProviderUpdate, ProviderTemplate } from '../../types/llmProvider';
2
2
  import { StateCreator } from 'zustand';
3
3
  import { XyzenState } from '../types';
4
4
  export interface ProviderSlice {
5
5
  llmProviders: LlmProviderResponse[];
6
6
  llmProvidersLoading: boolean;
7
- fetchLlmProviders: () => Promise<void>;
8
- addLlmProvider: (provider: LlmProviderCreate) => Promise<void>;
9
- editLlmProvider: (id: number, provider: Partial<LlmProviderCreate>) => Promise<void>;
10
- removeLlmProvider: (id: number) => Promise<void>;
11
- switchActiveProvider: (id: number) => Promise<void>;
7
+ providerTemplates: ProviderTemplate[];
8
+ templatesLoading: boolean;
9
+ defaultProvider: LlmProviderResponse | null;
10
+ defaultProviderLoading: boolean;
11
+ fetchProviderTemplates: () => Promise<void>;
12
+ fetchMyProviders: () => Promise<void>;
13
+ fetchDefaultProvider: () => Promise<void>;
14
+ addProvider: (provider: LlmProviderCreate) => Promise<void>;
15
+ updateProvider: (id: string, provider: LlmProviderUpdate) => Promise<void>;
16
+ removeProvider: (id: string) => Promise<void>;
17
+ setAsDefault: (id: string) => Promise<void>;
12
18
  }
13
19
  export declare const createProviderSlice: StateCreator<XyzenState, [
14
20
  ["zustand/immer", never]
@@ -1,24 +1,35 @@
1
1
  import { StateCreator } from 'zustand';
2
- import { Theme, XyzenState } from '../types';
2
+ import { Theme, XyzenState, LayoutStyle, UiSettingType } from '../types';
3
3
  export interface UiSlice {
4
4
  backendUrl: string;
5
5
  isXyzenOpen: boolean;
6
6
  panelWidth: number;
7
7
  activeTabIndex: number;
8
8
  theme: Theme;
9
+ layoutStyle: LayoutStyle;
9
10
  isAddMcpServerModalOpen: boolean;
10
11
  isAddLlmProviderModalOpen: boolean;
12
+ isSettingsModalOpen: boolean;
13
+ activeSettingsCategory: string;
14
+ activeUiSetting: UiSettingType;
15
+ selectedProviderId: string | null;
11
16
  toggleXyzen: () => void;
12
17
  openXyzen: () => void;
13
18
  closeXyzen: () => void;
14
19
  setPanelWidth: (width: number) => void;
15
20
  setTabIndex: (index: number) => void;
16
21
  setTheme: (theme: Theme) => void;
22
+ setLayoutStyle: (style: LayoutStyle) => void;
17
23
  setBackendUrl: (url: string) => void;
18
24
  openAddMcpServerModal: () => void;
19
25
  closeAddMcpServerModal: () => void;
20
26
  openAddLlmProviderModal: () => void;
21
27
  closeAddLlmProviderModal: () => void;
28
+ openSettingsModal: (category?: string) => void;
29
+ closeSettingsModal: () => void;
30
+ setActiveSettingsCategory: (category: string) => void;
31
+ setActiveUiSetting: (setting: UiSettingType) => void;
32
+ setSelectedProvider: (id: string | null) => void;
22
33
  }
23
34
  export declare const createUiSlice: StateCreator<XyzenState, [
24
35
  ["zustand/immer", never]
@@ -44,6 +44,8 @@ export interface User {
44
44
  avatar: string;
45
45
  }
46
46
  export type Theme = "light" | "dark" | "system";
47
+ export type LayoutStyle = "sidebar" | "fullscreen";
48
+ export type UiSettingType = "theme" | "style";
47
49
  export interface TopicResponse {
48
50
  id: string;
49
51
  name: string;
@@ -1,34 +1,49 @@
1
1
  export interface LlmProvider {
2
- id: number;
3
- Name: string;
4
- Api: string;
5
- Key: string;
6
- Model: string;
7
- MaxTokens: number | null;
8
- Temperature: number | null;
9
- Timeout: number | null;
10
- is_active?: boolean;
11
- is_available?: boolean;
12
- provider_type?: string;
2
+ id: string;
3
+ name: string;
4
+ api: string;
5
+ key: string;
6
+ model: string;
7
+ provider_type: string;
8
+ max_tokens: number;
9
+ temperature: number;
10
+ timeout: number;
11
+ is_default: boolean;
12
+ is_system: boolean;
13
+ user_id: string;
13
14
  }
14
15
  export interface LlmProviderCreate {
15
- Name: string;
16
- Api: string;
17
- Key: string;
18
- Model: string;
19
- MaxTokens?: number | null;
20
- Temperature?: number | null;
21
- Timeout?: number | null;
22
- }
23
- export interface LlmProviderResponse extends LlmProvider {
24
- is_active: boolean;
25
- is_available: boolean;
16
+ name: string;
17
+ api: string;
18
+ key: string;
19
+ model: string;
26
20
  provider_type: string;
21
+ max_tokens?: number;
22
+ temperature?: number;
23
+ timeout?: number;
24
+ user_id: string;
25
+ is_default?: boolean;
26
+ }
27
+ export interface LlmProviderUpdate {
28
+ name?: string;
29
+ api?: string;
30
+ key?: string;
31
+ model?: string;
32
+ provider_type?: string;
33
+ max_tokens?: number;
34
+ temperature?: number;
35
+ timeout?: number;
36
+ is_default?: boolean;
27
37
  }
28
- export interface SwitchProviderRequest {
29
- provider_id: number;
38
+ export type LlmProviderResponse = LlmProvider;
39
+ export interface SetDefaultProviderRequest {
40
+ provider_id: string;
30
41
  }
31
- export interface SupportedProviderType {
42
+ export interface ProviderTemplate {
32
43
  type: string;
44
+ display_name: string;
33
45
  description: string;
46
+ required_fields: string[];
47
+ optional_fields: string[];
48
+ default_config: Record<string, string | number | boolean>;
34
49
  }
@@ -12,3 +12,4 @@ export interface McpServer {
12
12
  user_id: string;
13
13
  }
14
14
  export type McpServerCreate = Omit<McpServer, "id" | "status" | "tools" | "user_id">;
15
+ export type McpServerUpdate = Partial<Omit<McpServer, "id" | "tools" | "user_id">>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Simple color scheme for provider selection
3
+ * Blue for selected, grey for unselected
4
+ */
5
+ export declare const PROVIDER_COLORS: {
6
+ readonly selected: {
7
+ readonly bg: "bg-blue-100 dark:bg-blue-900/30";
8
+ readonly text: "text-blue-700 dark:text-blue-400";
9
+ readonly icon: "text-blue-600 dark:text-blue-500";
10
+ readonly badge: "bg-blue-500";
11
+ };
12
+ readonly unselected: {
13
+ readonly bg: "bg-neutral-100 dark:bg-neutral-800/30";
14
+ readonly text: "text-neutral-700 dark:text-neutral-400";
15
+ readonly icon: "text-neutral-600 dark:text-neutral-500";
16
+ readonly badge: "bg-neutral-500";
17
+ };
18
+ };
19
+ /**
20
+ * Get color classes based on selection state
21
+ */
22
+ export declare function getProviderColor(isSelected: boolean): {
23
+ readonly bg: "bg-blue-100 dark:bg-blue-900/30";
24
+ readonly text: "text-blue-700 dark:text-blue-400";
25
+ readonly icon: "text-blue-600 dark:text-blue-500";
26
+ readonly badge: "bg-blue-500";
27
+ } | {
28
+ readonly bg: "bg-neutral-100 dark:bg-neutral-800/30";
29
+ readonly text: "text-neutral-700 dark:text-neutral-400";
30
+ readonly icon: "text-neutral-600 dark:text-neutral-500";
31
+ readonly badge: "bg-neutral-500";
32
+ };
@@ -0,0 +1,31 @@
1
+ import { ToolCall } from '../store/types';
2
+ /**
3
+ * Parsed tool event from backend message content
4
+ */
5
+ interface ParsedToolEvent {
6
+ event: "tool_call_request" | "tool_call_response";
7
+ id?: string;
8
+ toolCallId?: string;
9
+ name?: string;
10
+ description?: string;
11
+ arguments?: Record<string, unknown>;
12
+ status?: string;
13
+ result?: unknown;
14
+ error?: string;
15
+ timestamp?: number;
16
+ }
17
+ /**
18
+ * Parse JSON content from a tool message
19
+ */
20
+ export declare function parseToolMessage(content: string): ParsedToolEvent | null;
21
+ /**
22
+ * Convert parsed tool event to ToolCall interface
23
+ */
24
+ export declare function toolEventToToolCall(event: ParsedToolEvent): ToolCall | null;
25
+ /**
26
+ * Group tool messages to merge request/response pairs
27
+ * Returns a map of toolCallId -> merged ToolCall
28
+ * For history display, tool calls are shown as completed with arguments and results together
29
+ */
30
+ export declare function groupToolEvents(events: ParsedToolEvent[]): Map<string, ToolCall>;
31
+ export {};