@axiom-lattice/react-sdk 4.1.4 → 4.1.5

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 (70) hide show
  1. package/dist/{AgentDetailSideApp-KVL27KAF.mjs → AgentDetailSideApp-EBS7FGQS.mjs} +8 -8
  2. package/dist/AgentGovernanceWorkbench-IHYEFXEU.mjs +20 -0
  3. package/dist/{MessageGraph-LOSAZQ2V.mjs → MessageGraph-CU7TPJJI.mjs} +3 -3
  4. package/dist/{ReactChart-NDLIHCJJ.mjs → ReactChart-INAST7XW.mjs} +3 -3
  5. package/dist/{SkillFlow-OVKEKBOL.mjs → SkillFlow-TBKF765E.mjs} +4 -4
  6. package/dist/{TasksSideApp-37YKH7HV.mjs → TasksSideApp-IN46CQ4D.mjs} +4 -4
  7. package/dist/{TeamWorkspace-EAFZU3KS.mjs → TeamWorkspace-IH6F5QYO.mjs} +3 -3
  8. package/dist/{TopologyRuntimeView-53OCKDYA.mjs → TopologyRuntimeView-LR3YQQIU.mjs} +4 -4
  9. package/dist/{WorkflowAutomationView-R4EHXT7I.mjs → WorkflowAutomationView-GWBROX7L.mjs} +6 -6
  10. package/dist/{chunk-SLXJAOF2.mjs → chunk-4PV75HKR.mjs} +2 -2
  11. package/dist/{chunk-YYP5ASCR.mjs → chunk-EOBSSJ2W.mjs} +5 -5
  12. package/dist/{chunk-LEEQPRDB.mjs → chunk-HMBSH53V.mjs} +102 -33
  13. package/dist/chunk-HMBSH53V.mjs.map +1 -0
  14. package/dist/{chunk-NHD2XFH4.mjs → chunk-K7WBURGK.mjs} +3 -3
  15. package/dist/{chunk-AMIVRDYB.mjs → chunk-MFAPAXZ2.mjs} +2 -2
  16. package/dist/{chunk-WQBBDRPU.mjs → chunk-MSQON5ZR.mjs} +32 -28
  17. package/dist/chunk-MSQON5ZR.mjs.map +1 -0
  18. package/dist/{chunk-OT7IZRSM.mjs → chunk-O7PTPMW2.mjs} +2 -2
  19. package/dist/{chunk-EWLXRAWY.mjs → chunk-PBKPYK27.mjs} +237 -298
  20. package/dist/chunk-PBKPYK27.mjs.map +1 -0
  21. package/dist/{chunk-N4C7TX7T.mjs → chunk-R4XGQTDJ.mjs} +3 -3
  22. package/dist/{chunk-FKK4AXDU.mjs → chunk-YRPBTDOU.mjs} +5 -5
  23. package/dist/{embed-page-AgentDetailSideApp-3LBCEKFU.js → embed-page-AgentDetailSideApp-YPN3NDEA.js} +1 -1
  24. package/dist/{embed-page-AgentGovernanceWorkbench-K3JUQNBW.js → embed-page-AgentGovernanceWorkbench-FAZQNPAM.js} +1 -1
  25. package/dist/{embed-page-MessageGraph-3X4ROEN6.js → embed-page-MessageGraph-CEOPX4GM.js} +1 -1
  26. package/dist/{embed-page-ReactChart-F6VYCIYY.js → embed-page-ReactChart-NZAYQOQH.js} +1 -1
  27. package/dist/{embed-page-SkillFlow-3CF7R3CW.js → embed-page-SkillFlow-TPESM4DI.js} +1 -1
  28. package/dist/{embed-page-TasksSideApp-3WRDBZU3.js → embed-page-TasksSideApp-3EAPMISU.js} +1 -1
  29. package/dist/{embed-page-TeamWorkspace-6JSMZYUF.js → embed-page-TeamWorkspace-HB7ER45L.js} +1 -1
  30. package/dist/{embed-page-TopologyRuntimeView-YDFENLHH.js → embed-page-TopologyRuntimeView-O7JPR22B.js} +1 -1
  31. package/dist/{embed-page-WorkflowAutomationView-MP5B7Q2Q.js → embed-page-WorkflowAutomationView-OUXOBHXC.js} +1 -1
  32. package/dist/{embed-page-chunk-YMJGPA3F.js → embed-page-chunk-4SKSUBXL.js} +93 -102
  33. package/dist/{embed-page-chunk-B2E2XOH2.js → embed-page-chunk-5XKUKLZQ.js} +1 -1
  34. package/dist/{embed-page-chunk-UOL6CUAL.js → embed-page-chunk-6C2UZV63.js} +1 -1
  35. package/dist/{embed-page-chunk-IRP6JSSX.js → embed-page-chunk-GCDGRO6A.js} +1 -1
  36. package/dist/{embed-page-chunk-GDTBDOUE.js → embed-page-chunk-ILNGM4RN.js} +38 -38
  37. package/dist/embed-page-chunk-KFUAWYJ7.js +5 -0
  38. package/dist/{embed-page-chunk-FFO7CAYL.js → embed-page-chunk-RTVQJYET.js} +1 -1
  39. package/dist/{embed-page-chunk-QEYWJHEK.js → embed-page-chunk-TQPMRDLI.js} +1 -1
  40. package/dist/{embed-page-chunk-PAJ5NG2Z.js → embed-page-chunk-U6JBLAYD.js} +1 -1
  41. package/dist/{embed-page-chunk-RVXX5HKF.js → embed-page-chunk-ZTRCHYWV.js} +1 -1
  42. package/dist/embed-page.js +1 -1
  43. package/dist/index.d.mts +31 -6
  44. package/dist/index.d.ts +31 -6
  45. package/dist/index.js +224 -194
  46. package/dist/index.js.map +1 -1
  47. package/dist/index.mjs +26 -14
  48. package/dist/index.mjs.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/AgentGovernanceWorkbench-I6S4XU3T.mjs +0 -20
  51. package/dist/chunk-EWLXRAWY.mjs.map +0 -1
  52. package/dist/chunk-LEEQPRDB.mjs.map +0 -1
  53. package/dist/chunk-WQBBDRPU.mjs.map +0 -1
  54. package/dist/embed-page-chunk-URNZX66S.js +0 -5
  55. /package/dist/{AgentDetailSideApp-KVL27KAF.mjs.map → AgentDetailSideApp-EBS7FGQS.mjs.map} +0 -0
  56. /package/dist/{AgentGovernanceWorkbench-I6S4XU3T.mjs.map → AgentGovernanceWorkbench-IHYEFXEU.mjs.map} +0 -0
  57. /package/dist/{MessageGraph-LOSAZQ2V.mjs.map → MessageGraph-CU7TPJJI.mjs.map} +0 -0
  58. /package/dist/{ReactChart-NDLIHCJJ.mjs.map → ReactChart-INAST7XW.mjs.map} +0 -0
  59. /package/dist/{SkillFlow-OVKEKBOL.mjs.map → SkillFlow-TBKF765E.mjs.map} +0 -0
  60. /package/dist/{TasksSideApp-37YKH7HV.mjs.map → TasksSideApp-IN46CQ4D.mjs.map} +0 -0
  61. /package/dist/{TeamWorkspace-EAFZU3KS.mjs.map → TeamWorkspace-IH6F5QYO.mjs.map} +0 -0
  62. /package/dist/{TopologyRuntimeView-53OCKDYA.mjs.map → TopologyRuntimeView-LR3YQQIU.mjs.map} +0 -0
  63. /package/dist/{WorkflowAutomationView-R4EHXT7I.mjs.map → WorkflowAutomationView-GWBROX7L.mjs.map} +0 -0
  64. /package/dist/{chunk-SLXJAOF2.mjs.map → chunk-4PV75HKR.mjs.map} +0 -0
  65. /package/dist/{chunk-YYP5ASCR.mjs.map → chunk-EOBSSJ2W.mjs.map} +0 -0
  66. /package/dist/{chunk-NHD2XFH4.mjs.map → chunk-K7WBURGK.mjs.map} +0 -0
  67. /package/dist/{chunk-AMIVRDYB.mjs.map → chunk-MFAPAXZ2.mjs.map} +0 -0
  68. /package/dist/{chunk-OT7IZRSM.mjs.map → chunk-O7PTPMW2.mjs.map} +0 -0
  69. /package/dist/{chunk-N4C7TX7T.mjs.map → chunk-R4XGQTDJ.mjs.map} +0 -0
  70. /package/dist/{chunk-FKK4AXDU.mjs.map → chunk-YRPBTDOU.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context/AuthContext.tsx","../src/context.tsx","../src/components/Chat/LatticeChatShellContext.tsx","../src/hooks/useApi.ts"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useEffect, useRef, ReactNode } from \"react\";\nimport { User, Tenant } from \"@axiom-lattice/protocols\";\n\nexport interface UserTenantInfo {\n tenantId: string;\n role: string;\n tenant?: Tenant;\n}\n\nexport interface PersonalAssistantInfo {\n assistantId: string;\n projectId: string;\n workspaceId: string;\n /** tenantId for debugging cross-tenant leakage */\n tenantId?: string | null;\n}\n\nexport interface AuthContextValue {\n user: User | null;\n tenants: UserTenantInfo[];\n currentTenant: Tenant | null;\n personalAssistant: PersonalAssistantInfo | null;\n setPersonalAssistant: (info: PersonalAssistantInfo | null) => void;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: string | null;\n /** Gateway API base URL (from AuthProvider props). */\n baseURL: string;\n login: (email: string, password: string) => Promise<{ requiresTenantSelection: boolean; hasTenants: boolean }>;\n register: (email: string, password: string, name: string) => Promise<{ message: string; token?: string }>;\n logout: () => void;\n selectTenant: (tenantId: string) => Promise<void>;\n fetchUserTenants: () => Promise<void>;\n refreshUser: () => Promise<void>;\n clearError: () => void;\n changePassword: (currentPassword: string, newPassword: string) => Promise<void>;\n}\n\nexport const AuthContext = createContext<AuthContextValue | null>(null);\n\n/**\n * Hook to access authentication context. Must be used within an {@link AuthProvider}.\n *\n * @description\n * Provides the full auth state and all auth operations (login, register, logout, tenant selection, etc.).\n * Throws an error if no {@link AuthProvider} is found in the component tree. For optional auth,\n * use {@link useAuthOptional} instead.\n *\n * @returns The current {@link AuthContextValue} containing user, tenants, auth state, and auth actions.\n *\n * @throws {Error} If used outside of an {@link AuthProvider}.\n *\n * @example\n * ```tsx\n * const { user, isAuthenticated, login, logout } = useAuth();\n *\n * const handleLogin = async () => {\n * const result = await login('user@example.com', 'password');\n * if (result.requiresTenantSelection) {\n * // Show tenant picker\n * }\n * };\n * ```\n */\nexport const useAuth = (): AuthContextValue => {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n return context;\n};\n\n/**\n * Optional version of useAuth that returns null instead of throwing when AuthProvider is not present.\n * Use this when authentication is optional for the component.\n *\n * @example\n * // For required auth - throws if no provider\n * const { user } = useAuth();\n *\n * // For optional auth - returns null if no provider\n * const user = useAuthOptional()?.user;\n */\nexport const useAuthOptional = (): AuthContextValue | null => {\n const context = useContext(AuthContext);\n return context;\n};\n\n/**\n * Props for {@link AuthProvider}.\n */\ninterface AuthProviderProps {\n /** Child components that will have access to the auth context. */\n children: ReactNode;\n /** Base URL of the gateway API (e.g., `http://localhost:3000`). */\n baseURL: string;\n /** Called after a successful login with the user and their tenant memberships. */\n onLoginSuccess?: (user: User, tenants: UserTenantInfo[]) => void;\n /** Called after a tenant is successfully selected, passing the selected tenant. */\n onTenantSelected?: (tenant: Tenant) => void;\n /** Called after the user logs out. */\n onLogout?: () => void;\n}\n\n/**\n * Authentication context provider. Wraps the application to provide auth state and operations\n * to all descendant components via {@link useAuth} and {@link useAuthOptional}.\n *\n * @description\n * Manages the full authentication lifecycle including:\n * - **Login / Register**: Sends credentials to the gateway API and stores the returned user, tenants, and token in `sessionStorage`.\n * - **Session restoration**: On mount, reads previously stored user data from `sessionStorage` and also refreshes the tenant list to catch any admin-side role assignments.\n * - **Tenant selection**: Calls the gateway API to select a tenant and stores the tenant data.\n * - **Logout**: Clears all auth state and `sessionStorage`.\n * - **Change password**: Proxies to the gateway password change endpoint.\n * - **Token expiration**: Automatically logs out when the gateway returns a 401 with an expired token message.\n *\n * @param props - {@link AuthProviderProps}\n * @param props.children - React children to render within the auth context.\n * @param props.baseURL - Base URL of the gateway API.\n * @param props.onLoginSuccess - Optional callback invoked after a successful login.\n * @param props.onTenantSelected - Optional callback invoked after tenant selection.\n * @param props.onLogout - Optional callback invoked on logout.\n *\n * @returns A React context provider wrapping children with {@link AuthContext.Provider}.\n *\n * @example\n * ```tsx\n * <AuthProvider\n * baseURL=\"http://localhost:3000\"\n * onLoginSuccess={(user) => console.log('Logged in:', user.email)}\n * onLogout={() => window.location.reload()}\n * >\n * <App />\n * </AuthProvider>\n * ```\n */\nexport const AuthProvider: React.FC<AuthProviderProps> = ({\n children,\n baseURL,\n onLoginSuccess,\n onTenantSelected,\n onLogout,\n}) => {\n const [user, setUser] = useState<User | null>(null);\n const [tenants, setTenants] = useState<UserTenantInfo[]>([]);\n const [currentTenant, setCurrentTenant] = useState<Tenant | null>(null);\n const [personalAssistant, setPersonalAssistant] = useState<PersonalAssistantInfo | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // tenant-scoped key for personal assistant to prevent cross-tenant leakage\n const getPAKey = (tenantId?: string | null) =>\n tenantId ? `lattice_personal_assistant_${tenantId}` : \"lattice_personal_assistant\";\n\n // keep a ref for the wrapped setter (which has stable deps)\n const currentTenantRef = useRef(currentTenant);\n currentTenantRef.current = currentTenant;\n\n // Restore auth state from sessionStorage on mount\n useEffect(() => {\n const storedUser = sessionStorage.getItem(\"lattice_user\");\n const storedTenants = sessionStorage.getItem(\"lattice_tenants\");\n const storedCurrentTenant = sessionStorage.getItem(\"lattice_current_tenant\");\n\n if (storedUser) {\n try {\n const userData = JSON.parse(storedUser);\n setUser(userData);\n if (storedTenants) setTenants(JSON.parse(storedTenants));\n if (storedCurrentTenant) {\n const ct = JSON.parse(storedCurrentTenant);\n setCurrentTenant(ct);\n // Restore personal assistant scoped to the restored tenant\n const storedPA = sessionStorage.getItem(getPAKey(ct.id));\n if (storedPA) setPersonalAssistant(JSON.parse(storedPA));\n }\n } catch {\n sessionStorage.removeItem(\"lattice_user\");\n sessionStorage.removeItem(\"lattice_tenants\");\n sessionStorage.removeItem(\"lattice_current_tenant\");\n sessionStorage.removeItem(\"lattice_personal_assistant\");\n }\n }\n }, []);\n\n // Fetch fresh tenant list when user is restored (to catch admin assignments)\n useEffect(() => {\n if (user && !isLoading) {\n fetchUserTenants();\n }\n }, [user?.id]);\n\n const login = useCallback(async (email: string, password: string) => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await fetch(`${baseURL}/api/auth/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email, password }),\n });\n\n if (!response.ok) {\n const data = await response.json();\n throw new Error(data.error || \"Login failed\");\n }\n\n const result = await response.json();\n const { user: userData, tenants: tenantList, token, requiresTenantSelection, hasTenants } = result.data;\n\n setUser(userData);\n setTenants(tenantList || []);\n\n sessionStorage.setItem(\"lattice_user\", JSON.stringify(userData));\n sessionStorage.setItem(\"lattice_tenants\", JSON.stringify(tenantList || []));\n\n if (token) {\n sessionStorage.setItem(\"lattice_token\", token);\n }\n\n onLoginSuccess?.(userData, tenantList || []);\n\n return { requiresTenantSelection, hasTenants };\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Login failed\";\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, [baseURL, onLoginSuccess]);\n\n const register = useCallback(async (email: string, password: string, name: string) => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await fetch(`${baseURL}/api/auth/register`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email, password, name }),\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n throw new Error(data.error || \"Registration failed\");\n }\n\n if (data.data?.token) {\n sessionStorage.setItem(\"lattice_token\", data.data.token);\n }\n\n return { message: data.message || \"Registration successful!\", token: data.data?.token };\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Registration failed\";\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, [baseURL]);\n\n const logout = useCallback(() => {\n setUser(null);\n setTenants([]);\n setCurrentTenant(null);\n setPersonalAssistant(null);\n // Clear all sessionStorage items\n sessionStorage.clear();\n onLogout?.();\n }, [onLogout]);\n\n useEffect(() => {\n const handler = () => logout();\n window.addEventListener(\"lattice:unauthorized\", handler);\n return () => window.removeEventListener(\"lattice:unauthorized\", handler);\n }, [logout]);\n\n const handleUnauthorized = useCallback(() => {\n logout();\n }, [logout]);\n\n const selectTenant = useCallback(async (tenantId: string) => {\n if (!user) return;\n setIsLoading(true);\n try {\n const response = await fetch(`${baseURL}/api/auth/select-tenant`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(sessionStorage.getItem(\"lattice_token\") && {\n Authorization: `Bearer ${sessionStorage.getItem(\"lattice_token\")}`,\n }),\n },\n body: JSON.stringify({ tenantId }),\n });\n\n if (response.status === 401) {\n const data: unknown = await response.json().catch(() => null);\n handleUnauthorized();\n const message =\n data &&\n typeof data === \"object\" &&\n \"error\" in data &&\n typeof data.error === \"string\"\n ? data.error\n : \"Unauthorized\";\n throw new Error(message);\n }\n\n if (!response.ok) {\n const data = await response.json();\n throw new Error(data.error || \"Failed to select tenant\");\n }\n\n const result = await response.json();\n const tenantData = result.data.tenant;\n\n // clean up personal assistant key for the old tenant\n const oldTenantId = currentTenantRef.current?.id;\n if (oldTenantId) {\n sessionStorage.removeItem(getPAKey(oldTenantId));\n }\n\n setCurrentTenant(tenantData);\n sessionStorage.setItem(\"lattice_current_tenant\", JSON.stringify(tenantData));\n\n setPersonalAssistant(result.data.personalAssistant || null);\n if (result.data.personalAssistant) {\n const paWithTenant = { ...result.data.personalAssistant, tenantId: tenantData.id };\n sessionStorage.setItem(getPAKey(tenantData.id), JSON.stringify(paWithTenant));\n } else {\n sessionStorage.removeItem(getPAKey(tenantData.id));\n }\n\n if (result.data.token) {\n sessionStorage.setItem(\"lattice_token\", result.data.token);\n }\n\n onTenantSelected?.(tenantData);\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to select tenant\";\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, [baseURL, user, onTenantSelected, handleUnauthorized]);\n\n const fetchUserTenants = useCallback(async () => {\n if (!user) return;\n setIsLoading(true);\n try {\n const response = await fetch(`${baseURL}/api/auth/tenants`, {\n headers: {\n ...(sessionStorage.getItem(\"lattice_token\") && {\n Authorization: `Bearer ${sessionStorage.getItem(\"lattice_token\")}`,\n }),\n },\n });\n\n if (response.status === 401) {\n const data = await response.json().catch(() => ({}));\n if (data.error?.includes(\"Token expired\")) {\n handleUnauthorized();\n return;\n }\n }\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch tenants\");\n }\n\n const result = await response.json();\n const tenantList = result.data.map((item: any) => ({\n tenantId: item.tenantId,\n role: item.role,\n tenant: item.tenant,\n }));\n\n setTenants(tenantList);\n sessionStorage.setItem(\"lattice_tenants\", JSON.stringify(tenantList));\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to fetch tenants\";\n setError(message);\n } finally {\n setIsLoading(false);\n }\n }, [baseURL, user]);\n\n const refreshUser = useCallback(async () => {\n if (!user) return;\n setIsLoading(true);\n try {\n const response = await fetch(`${baseURL}/api/users/${user.id}`, {\n headers: {\n ...(sessionStorage.getItem(\"lattice_token\") && {\n Authorization: `Bearer ${sessionStorage.getItem(\"lattice_token\")}`,\n }),\n },\n });\n\n if (response.status === 401) {\n const data = await response.json().catch(() => ({}));\n if (data.error?.includes(\"Token expired\")) {\n handleUnauthorized();\n return;\n }\n }\n\n if (!response.ok) {\n throw new Error(\"Failed to refresh user\");\n }\n\n const { data } = await response.json();\n setUser(data);\n sessionStorage.setItem(\"lattice_user\", JSON.stringify(data));\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to refresh user\";\n setError(message);\n } finally {\n setIsLoading(false);\n }\n }, [baseURL, user]);\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const changePassword = useCallback(async (currentPassword: string, newPassword: string) => {\n setIsLoading(true);\n setError(null);\n try {\n const response = await fetch(`${baseURL}/api/auth/change-password`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(sessionStorage.getItem(\"lattice_token\") && {\n Authorization: `Bearer ${sessionStorage.getItem(\"lattice_token\")}`,\n }),\n },\n body: JSON.stringify({ currentPassword, newPassword }),\n });\n\n if (response.status === 401) {\n const data = await response.json().catch(() => ({}));\n if (data.error?.includes(\"Token expired\")) {\n handleUnauthorized();\n return;\n }\n }\n\n if (!response.ok) {\n const data = await response.json();\n throw new Error(data.error || \"Failed to change password\");\n }\n\n const result = await response.json();\n return result;\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to change password\";\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, [baseURL]);\n\n const wrappedSetPersonalAssistant = useCallback((info: PersonalAssistantInfo | null) => {\n setPersonalAssistant(info);\n const tenantId = currentTenantRef.current?.id;\n if (info) {\n const paWithTenant = { ...info, tenantId: tenantId || info.tenantId };\n sessionStorage.setItem(getPAKey(tenantId), JSON.stringify(paWithTenant));\n } else {\n if (tenantId) {\n sessionStorage.removeItem(getPAKey(tenantId));\n }\n // also clean up legacy un-scoped key for migration\n sessionStorage.removeItem(\"lattice_personal_assistant\");\n }\n }, []);\n\n const value: AuthContextValue = {\n user,\n tenants,\n currentTenant,\n personalAssistant,\n setPersonalAssistant: wrappedSetPersonalAssistant,\n isAuthenticated: !!user,\n isLoading,\n error,\n baseURL,\n login,\n register,\n logout,\n selectTenant,\n fetchUserTenants,\n refreshUser,\n clearError,\n changePassword,\n };\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n","import { App } from \"antd\";\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { AxiomLatticeProviderProps, ClientConfig } from \"./types\";\nimport { Client } from \"@axiom-lattice/client-sdk\";\nimport { AuthContext } from \"@context/AuthContext\";\n\n/**\n * Context for the Axiom Lattice client\n */\ninterface AxiomLatticeContextValue {\n /**\n * 获取或创建指定 assistantId 的 client(同步)\n */\n getClient: (assistantId: string) => Client;\n}\n\n/**\n * Context object for the Axiom Lattice client\n */\nconst AxiomLatticeContext = createContext<AxiomLatticeContextValue>({\n getClient: () => {\n throw new Error(\"getClient must be used within AxiomLatticeProvider\");\n },\n});\n\n/**\n * Provider component for the Axiom Lattice client\n * @param props - Provider props\n * @returns Provider component\n */\nexport function AxiomLatticeProvider({\n config,\n onUnauthorized,\n createClient,\n children,\n}: AxiomLatticeProviderProps) {\n const authContext = useContext(AuthContext);\n const tenantId = authContext?.currentTenant?.id;\n\n // Derive apiKey from AuthContext when available, fall back to config.apiKey\n const effectiveApiKey = useMemo(() => {\n if (authContext?.isAuthenticated) {\n return sessionStorage.getItem(\"lattice_token\") || config.apiKey;\n }\n return config.apiKey;\n }, [authContext?.isAuthenticated, authContext?.currentTenant?.id, config.apiKey]);\n\n // 使用 ref 存储 client 缓存\n const clientCacheRef = useRef<Map<string, Client>>(new Map());\n\n // 基础配置(使用占位符 assistantId)\n const baseConfig = useMemo(\n () => ({\n baseURL: config.baseURL,\n apiKey: effectiveApiKey,\n assistantId: \"__BASE__\", // 占位符,不会被直接使用\n transport: config.transport,\n }),\n [config.baseURL, effectiveApiKey, config.transport]\n );\n\n // 创建基础 client\n const baseClient = useMemo(() => {\n const client = createClient ? createClient(baseConfig) : new Client(baseConfig);\n if (tenantId) {\n client.setTenantId(tenantId);\n }\n if (onUnauthorized) {\n client.setUnauthorizedHandler(onUnauthorized);\n }\n return client;\n }, [baseConfig, tenantId, onUnauthorized, createClient]);\n\n // 清理缓存函数(当配置变化时)\n const clearClientCache = useCallback((): void => {\n clientCacheRef.current.clear();\n }, []);\n\n // 配置变化时清理缓存\n useEffect(() => {\n clearClientCache();\n }, [\n baseConfig.baseURL,\n baseConfig.apiKey,\n baseConfig.transport,\n clearClientCache,\n ]);\n\n // getClient 函数\n const getClient = useCallback(\n (assistantId: string): Client => {\n const cached = clientCacheRef.current.get(assistantId);\n if (cached) {\n return cached;\n }\n\n const newClient = baseClient.clone({ assistantId }) as Client;\n clientCacheRef.current.set(assistantId, newClient);\n return newClient;\n },\n [baseClient]\n );\n\n const value = useMemo(\n () => ({\n getClient,\n }),\n [getClient]\n );\n\n return (\n <App component={false}>\n <AxiomLatticeContext.Provider value={value}>\n {children}\n </AxiomLatticeContext.Provider>\n </App>\n );\n}\n\nexport interface UseAxiomLatticeOptions {\n assistantId?: string | null;\n}\n\n/**\n * Hook to get a client for a specific assistant\n * @param assistantId - The assistant ID\n * @returns Client instance for the assistant\n * @throws Error if used outside of AxiomLatticeProvider\n */\nexport function useClient(assistantId: string): Client {\n const context = useContext(AxiomLatticeContext);\n\n if (!context) {\n throw new Error(\n \"useClient must be used within an AxiomLatticeProvider\"\n );\n }\n\n return useMemo(() => context.getClient(assistantId), [context, assistantId]);\n}\n\n/**\n * Hook to access the Axiom Lattice client\n * @returns The Axiom Lattice client\n * @throws Error if used outside of AxiomLatticeProvider\n * @deprecated Use useClient(assistantId) instead\n */\nexport function useAxiomLattice({\n assistantId,\n}: UseAxiomLatticeOptions = {}): Client {\n const context = useContext(AxiomLatticeContext);\n\n if (!context) {\n throw new Error(\n \"useAxiomLattice must be used within an AxiomLatticeProvider\"\n );\n }\n\n if (!assistantId) {\n throw new Error(\n \"useAxiomLattice requires assistantId parameter. Use useClient(assistantId) instead.\"\n );\n }\n\n return useMemo(() => context.getClient(assistantId), [context, assistantId]);\n}\n","import React from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useState,\n ReactNode,\n} from \"react\";\nimport type { SlotConfigType } from \"@ant-design/x/es/sender/interface\";\n\n/**\n * Quick prompt item for quick prompt components\n */\nexport interface QuickPromptItem {\n key: string;\n icon?: ReactNode;\n label: string;\n description?: string;\n content: SlotConfigType[];\n}\n\n/**\n * Quick prompt category for organizing prompt items\n */\nexport interface QuickPromptCategory {\n key: string;\n title: string;\n icon?: ReactNode;\n color?: string;\n items: QuickPromptItem[];\n}\n\n/**\n * Middleware tool definition\n */\nexport interface MiddlewareToolDefinition {\n id: string;\n name: string;\n description: string;\n}\n\n/**\n * JSON Schema property definition for middleware config\n */\nexport interface MiddlewareConfigSchemaProperty {\n type: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"object\" | \"array\";\n title?: string;\n description?: string;\n default?: any;\n enum?: string[];\n enumLabels?: Record<string, string>;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: string;\n widget?: \"input\" | \"textarea\" | \"select\" | \"segmented\" | \"switch\" | \"numberInput\" | \"skillSelect\" | \"databaseSelect\" | \"metricsSelect\" | \"topologyEdgeBuilder\" | \"collectionSelect\" | \"connectionSelect\";\n items?: { type: string };\n}\n\n/**\n * JSON Schema for middleware configuration\n */\nexport interface MiddlewareConfigSchema {\n type: \"object\";\n title?: string;\n description?: string;\n required?: string[];\n properties: Record<string, MiddlewareConfigSchemaProperty>;\n}\n\n/**\n * Middleware type definition\n */\nexport interface MiddlewareTypeDefinition {\n type: string;\n name: string;\n description: string;\n icon?: ReactNode;\n schema?: MiddlewareConfigSchema;\n defaultConfig?: Record<string, any>;\n tools?: MiddlewareToolDefinition[];\n connectionSchema?: {\n fields: Record<string, unknown>;\n hasTest?: boolean;\n hasDiscover?: boolean;\n resourceLabel?: string;\n };\n /**\n * Capability category declared by the plugin itself (data | execution | workflow | assistant).\n * Unknown/missing values fall into \"Other\" in the Capabilities section.\n */\n category?: string;\n /** Whether the plugin explicitly permits inclusion in capability bundles. */\n capabilityBundleEligible?: boolean;\n}\n\n/**\n * Middleware type for configuration\n */\nexport interface MiddlewareConfigDefinition {\n id: string;\n type: string;\n name: string;\n description: string;\n enabled: boolean;\n config: Record<string, any>;\n /** 可选:限制该中间件暴露的工具列表。不配置则默认暴露所有工具 */\n allowedTools?: string[];\n tools?: MiddlewareToolDefinition[];\n}\n\n/**\n * Sidebar menu item type\n */\nexport type SideMenuItemType = \"drawer\" | \"route\" | \"action\";\n\nexport interface ResourceFolderConfig {\n name: string;\n displayName?: string;\n allowUpload: boolean;\n}\n\n/**\n * Sidebar menu item configuration\n */\n/**\n * Sidebar menu item configuration.\n *\n * Three item types:\n * - `\"action\"` — clickable button, set `builtin` for predefined behaviors\n * - `\"drawer\"` — opens a slide-out panel, set `content` + `title`\n * - `\"route\"` — opens a GenUI-registered component in the SideApp area\n *\n * When providing `sideMenuItems` or `workspaceMenuItems` to `LatticeChatShellConfig`,\n * your array **completely replaces** the defaults. Import `DEFAULT_MENU_ITEMS` or\n * `DEFAULT_WORKSPACE_MENU_ITEMS` to selectively include built-in items:\n * ```\n * sideMenuItems: DEFAULT_MENU_ITEMS.filter(i => i.id === \"thread-history\")\n * ```\n */\nexport interface SideMenuItemConfig {\n /** Unique identifier for the menu item */\n id: string;\n /** Type of the menu item - drawer or route (SideApp) */\n type: SideMenuItemType;\n /** Display name of the menu item */\n name: string;\n /** Icon component for the menu item */\n icon?: ReactNode;\n /** Order for sorting menu items (lower values first) */\n order?: number;\n /** Whether this is a builtin menu item (new-analysis, thread-history, assistants, skill, skills, tools, workspace, settings, database, metrics, mcp, projects, logout, switch-tenant) */\n builtin?: \"new-analysis\" | \"thread-history\" | \"assistants\" | \"skill\" | \"skills\" | \"tools\" | \"workspace\" | \"settings\" | \"database\" | \"metrics\" | \"mcp\" | \"projects\" | \"logout\" | \"switch-tenant\" | \"connections\";\n /**\n * Menu group for organizing items\n */\n group?: string;\n /**\n * Whether the menu item is enabled (can be toggled)\n * Defaults to true\n */\n enabled?: boolean;\n /** Content config from DB (for custom menu items) */\n contentConfig?: Record<string, unknown>;\n\n // drawer type specific (workspace only)\n /** Content to display inside the drawer (for drawer type) */\n content?: ReactNode;\n /** Drawer title (for drawer type) */\n title?: string;\n /** Drawer width in pixels or percentage (for drawer type) */\n width?: string | number;\n /**\n * Whether to display drawer content inline in expanded sidebar mode\n * When true, content shows below the menu item instead of in a drawer\n * Defaults to false, but true for \"workspace\" builtin\n */\n inline?: boolean;\n /**\n * Maximum height for inline drawer content in pixels\n * Only applies when inline is true\n * Defaults to 400\n */\n inlineMaxHeight?: number;\n /**\n * Whether inline drawer is expanded by default\n * Only applies when inline is true\n * Defaults to false\n */\n inlineDefaultExpanded?: boolean;\n\n // route type specific (opens in SideApp)\n /** Component to render in SideApp (for route type) */\n sideAppComponent?: ReactNode;\n /** Badge indicator for the menu item (true = dot, number = count) */\n badge?: boolean | number;\n}\n\n/**\n * Lattice Chat Shell configuration interface\n */\nexport interface LatticeChatShellConfig {\n /**\n * Base URL for the API\n */\n baseURL: string;\n /**\n * API key for authentication (optional)\n */\n apiKey?: string;\n /**\n * Transport method (Server-Sent Events or WebSocket)\n */\n transport?: \"sse\" | \"ws\";\n /**\n * Request timeout in milliseconds (optional)\n */\n timeout?: number;\n /**\n * Additional headers to include in requests (optional)\n */\n headers?: Record<string, string>;\n /**\n * Whether users can create new threads from the UI\n * Defaults to true\n */\n enableThreadCreation?: boolean;\n /**\n * Whether users can view the thread list in the sidebar\n * Defaults to true\n */\n enableThreadList?: boolean;\n\n assistantId?: string;\n\n showSideMenu?: boolean;\n\n /**\n * URL of the global shared sandbox, this is used to access the global shared sandbox\n * if not provided, sandbox will be created in the agent's sandbox\n */\n globalSharedSandboxURL?: string;\n\n /**\n * Available middleware types that can be configured for agents\n * Each middleware type defines its name, description, and default configuration\n * If not provided, default middleware types will be used\n */\n availableMiddlewareTypes?: MiddlewareTypeDefinition[];\n\n /**\n * Whether users can create new assistants\n * Defaults to true\n */\n enableAssistantCreation?: boolean;\n\n /**\n * Whether users can edit existing assistants\n * Defaults to true\n */\n enableAssistantEditing?: boolean;\n\n /**\n * Whether to enable workspace and project management\n * When enabled, shows workspace selector in header and file browser\n * Defaults to false\n */\n enableWorkspace?: boolean;\n\n /**\n * Whether to load custom menu items from the database (API /api/menu-items).\n * When enabled, WorkspaceResourceManager fetches per-tenant custom menu items\n * and merges them with built-in defaults.\n * Defaults to true.\n */\n enableCustomMenu?: boolean;\n\n /**\n * Resource folders configuration for workspace\n * Each folder represents a section in the workspace assets panel\n * If not provided, defaults to a single root folder with upload enabled\n */\n resourceFolders?: ResourceFolderConfig[];\n\n /**\n * Chat sidebar menu items. When provided, completely replaces the\n * default built-in items (New Thread, History).\n *\n * To selectively include built-in items, import and filter `DEFAULT_MENU_ITEMS`:\n * ```\n * sideMenuItems: DEFAULT_MENU_ITEMS.filter(i => i.id === \"thread-history\")\n * ```\n * Omit this field to use all defaults.\n */\n sideMenuItems?: SideMenuItemConfig[];\n\n /**\n * Workspace menu items. When provided, completely replaces the\n * default workspace items (Projects, Metrics, Database, etc.).\n *\n * To selectively include built-in items, import and filter `DEFAULT_WORKSPACE_MENU_ITEMS`:\n * ```\n * workspaceMenuItems: DEFAULT_WORKSPACE_MENU_ITEMS.filter(\n * i => [\"workspace_projects\", \"assistants\"].includes(i.id)\n * )\n * ```\n * Omit this field to use all defaults.\n */\n workspaceMenuItems?: SideMenuItemConfig[];\n\n /**\n * Whether to enable the database picker slot in the chat sender\n * When enabled, shows a database selection button in the sender footer\n * Defaults to true\n */\n enableDatabaseSlot?: boolean;\n\n /**\n * Whether to enable the skill picker slot in the chat sender\n * When enabled, shows a skill selection button in the sender footer\n * Defaults to true\n */\n enableSkillSlot?: boolean;\n\n /**\n * Whether to enable the agent picker slot in the chat sender\n * When enabled, shows an agent selection button in the sender footer\n * Defaults to true\n */\n enableAgentSlot?: boolean;\n\n /**\n * Whether to enable the metrics datasource picker slot in the chat sender\n * When enabled, shows a metrics datasource selection button in the sender footer\n * Defaults to true\n */\n enableMetricsDataSourceSlot?: boolean;\n\n /**\n * Whether to enable the model selector in the chat sender\n * When enabled, shows a model selection dropdown in the sender footer\n * Defaults to false\n */\n enableModelSelector?: boolean;\n\n /**\n * Whether to offer the execution-trace graph view toggle in chat\n * When enabled, the chat header shows a \"对话 / 过程\" segmented control\n * Defaults to false\n */\n enableTraceView?: boolean;\n\n /**\n * Sidebar display mode\n * - \"icon\": Show only icons (default)\n * - \"expanded\": Show icons with labels and groups\n * Defaults to \"icon\"\n */\n sidebarMode?: \"icon\" | \"expanded\";\n\n /**\n * Whether sidebar is expanded by default (only applies when sidebarMode is \"expanded\")\n * Defaults to true\n */\n sidebarDefaultExpanded?: boolean;\n\n /**\n * Whether workspace menu is expanded by default\n * Defaults to true\n */\n workspaceMenuDefaultExpanded?: boolean;\n\n /**\n * Whether to show the expand/collapse toggle button\n * Defaults to true\n */\n sidebarShowToggle?: boolean;\n\n /**\n * Whether to show the \"New Thread\" button in expanded sidebar\n * Defaults to true\n */\n sidebarShowNewAnalysis?: boolean;\n\n /**\n * Endpoint for fetching middleware type definitions from API.\n * Falls back to DEFAULT_MIDDLEWARE_TYPES on failure.\n */\n middlewareTypesEndpoint?: string;\n\n /**\n * Logo text displayed in expanded sidebar\n * Defaults to \"Lattice\"\n */\n sidebarLogoText?: string;\n\n /**\n * Custom logo icon component\n * If not provided, defaults to Cpu icon\n */\n sidebarLogoIcon?: React.ReactNode;\n\n /**\n * Custom quick prompts data for quick prompt components\n * Allows registering custom prompt categories and items via shell config\n * If not provided, default prompt data will be used\n */\n quickPromptsData?: QuickPromptCategory[];\n }\n\n/**\n * Lattice Chat Shell context value interface\n */\nexport interface LatticeChatShellContextValue {\n /**\n * Current configuration\n */\n config: LatticeChatShellConfig;\n /**\n * Update the entire configuration\n */\n updateConfig: (config: Partial<LatticeChatShellConfig>) => void;\n /**\n * Update a specific configuration value\n */\n updateConfigValue: <K extends keyof LatticeChatShellConfig>(\n key: K,\n value: LatticeChatShellConfig[K]\n ) => void;\n /**\n * Reset configuration to defaults\n */\n resetConfig: () => void;\n /**\n * Whether the settings modal is open\n */\n settingsModalOpen: boolean;\n /**\n * Set the settings modal open state\n */\n setSettingsModalOpen: (open: boolean) => void;\n}\n\n/**\n * Default middleware type definitions with JSON Schema for configuration\n */\nexport const DEFAULT_MIDDLEWARE_TYPES: MiddlewareTypeDefinition[] = [\n {\n type: \"filesystem\",\n category: \"execution\",\n name: \"Filesystem\",\n description: \"Provides file system operations for reading, writing, and managing files\",\n schema: {\n type: \"object\",\n title: \"Filesystem Configuration\",\n description: \"Configure filesystem isolation and access settings\",\n required: [\"vmIsolation\"],\n properties: {\n vmIsolation: {\n type: \"string\",\n title: \"VM Isolation\",\n description: \"Controls how filesystem access is isolated between agents and projects\",\n enum: [\"global\", \"agent\", \"project\"],\n default: \"global\",\n widget: \"segmented\",\n },\n },\n },\n defaultConfig: {\n vmIsolation: \"global\",\n },\n tools: [\n { id: \"ls\", name: \"ls\", description: \"List files and directories\" },\n { id: \"read_file\", name: \"read_file\", description: \"Read file contents\" },\n { id: \"write_file\", name: \"write_file\", description: \"Write or create a file\" },\n { id: \"edit_file\", name: \"edit_file\", description: \"Edit file with find-and-replace\" },\n { id: \"delete_file\", name: \"delete_file\", description: \"Permanently delete a regular file\" },\n { id: \"glob\", name: \"glob\", description: \"Find files by pattern\" },\n { id: \"grep\", name: \"grep\", description: \"Search file contents with regex\" },\n ],\n },\n {\n type: \"code_eval\",\n category: \"execution\",\n name: \"Code Evaluation\",\n description: \"Enables safe code execution\",\n schema: {\n type: \"object\",\n title: \"Code Evaluation Configuration\",\n description: \"Configure code execution sandbox settings\",\n required: [\"vmIsolation\"],\n properties: {\n vmIsolation: {\n type: \"string\",\n title: \"VM Isolation\",\n description: \"Controls how code execution is isolated between agents and projects\",\n enum: [\"global\", \"agent\", \"project\"],\n default: \"global\",\n widget: \"segmented\",\n },\n },\n },\n defaultConfig: {\n vmIsolation: \"global\",\n },\n tools: [\n { id: \"shell_exec\", name: \"shell_exec\", description: \"Execute shell commands in a sandbox\" },\n ],\n },\n {\n type: \"browser\",\n category: \"execution\",\n name: \"Browser\",\n description: \"Provides browser automation capabilities\",\n schema: {\n type: \"object\",\n title: \"Browser Configuration\",\n description: \"Configure browser automation settings\",\n required: [\"vmIsolation\"],\n properties: {\n vmIsolation: {\n type: \"string\",\n title: \"VM Isolation\",\n description: \"Controls how browser instances are isolated between agents and projects\",\n enum: [\"global\", \"agent\", \"project\"],\n default: \"agent\",\n widget: \"segmented\",\n },\n },\n },\n defaultConfig: {\n vmIsolation: \"agent\",\n headless: true,\n },\n tools: [\n { id: \"browser_navigate\", name: \"browser_navigate\", description: \"Navigate to a URL\" },\n { id: \"browser_click\", name: \"browser_click\", description: \"Click an element on the page\" },\n { id: \"browser_get_text\", name: \"browser_get_text\", description: \"Get visible text from the page\" },\n { id: \"browser_get_markdown\", name: \"browser_get_markdown\", description: \"Get page content as markdown\" },\n { id: \"browser_evaluate\", name: \"browser_evaluate\", description: \"Execute JavaScript in the page\" },\n { id: \"browser_screenshot\", name: \"browser_screenshot\", description: \"Take a screenshot of the page\" },\n { id: \"browser_scroll\", name: \"browser_scroll\", description: \"Scroll the page\" },\n { id: \"browser_form_input_fill\", name: \"browser_form_input_fill\", description: \"Fill form input fields\" },\n { id: \"browser_select\", name: \"browser_select\", description: \"Select an option from a dropdown\" },\n { id: \"browser_hover\", name: \"browser_hover\", description: \"Hover over an element\" },\n { id: \"browser_go_back\", name: \"browser_go_back\", description: \"Navigate back in history\" },\n { id: \"browser_go_forward\", name: \"browser_go_forward\", description: \"Navigate forward in history\" },\n { id: \"browser_new_tab\", name: \"browser_new_tab\", description: \"Open a new browser tab\" },\n { id: \"browser_tab_list\", name: \"browser_tab_list\", description: \"List all open tabs\" },\n { id: \"browser_switch_tab\", name: \"browser_switch_tab\", description: \"Switch to a different tab\" },\n { id: \"browser_close_tab\", name: \"browser_close_tab\", description: \"Close a browser tab\" },\n { id: \"browser_close\", name: \"browser_close\", description: \"Close the browser\" },\n { id: \"browser_press_key\", name: \"browser_press_key\", description: \"Press a keyboard key\" },\n { id: \"browser_read_links\", name: \"browser_read_links\", description: \"Get all links on the page\" },\n { id: \"browser_get_clickable_elements\", name: \"browser_get_clickable_elements\", description: \"Get clickable elements\" },\n { id: \"browser_get_download_list\", name: \"browser_get_download_list\", description: \"Get list of downloaded files\" },\n { id: \"browser_get_info\", name: \"browser_get_info\", description: \"Get browser status and info\" },\n ],\n },\n {\n type: \"sql\",\n category: \"data\",\n name: \"SQL Database\",\n description: \"Provides SQL database query capabilities\",\n schema: {\n type: \"object\",\n title: \"SQL Configuration\",\n description: \"Configure database connection settings\",\n required: [\"databaseKeys\"],\n properties: {\n databaseKeys: {\n type: \"array\",\n title: \"Select Databases\",\n description: \"Select databases this agent can access (multi-select from registered databases)\",\n items: { type: \"string\" },\n widget: \"databaseSelect\",\n },\n },\n },\n defaultConfig: {\n databaseKeys: [],\n },\n tools: [\n { id: \"list_tables_sql\", name: \"list_tables_sql\", description: \"List all database tables\" },\n { id: \"info_sql\", name: \"info_sql\", description: \"Get table schema and info\" },\n { id: \"query_checker_sql\", name: \"query_checker_sql\", description: \"Validate SQL query before execution\" },\n { id: \"query_sql\", name: \"query_sql\", description: \"Execute a SQL query\" },\n ],\n },\n {\n type: \"skill\",\n category: \"data\",\n name: \"Skills\",\n description: \"Provides skill loading capabilities for the agent\",\n schema: {\n type: \"object\",\n title: \"Skills Configuration\",\n description: \"Configure which skills this agent can use\",\n properties: {\n readAll: {\n type: \"boolean\",\n title: \"Read All Skills\",\n description: \"When enabled, the agent will have access to all available skills automatically\",\n default: false,\n widget: \"switch\",\n },\n skills: {\n type: \"array\",\n title: \"Select Skills\",\n description: \"Select which skills this agent can use (ignored if 'Read All Skills' is enabled)\",\n items: { type: \"string\" },\n widget: \"skillSelect\",\n },\n },\n },\n defaultConfig: {\n readAll: false,\n skills: [],\n },\n tools: [\n { id: \"skill\", name: \"skill\", description: \"Invoke a skill by name\" },\n ],\n},\n{\n type: \"metrics\",\n name: \"Metrics\",\n description: \"Provides metrics querying capabilities for monitoring and observability\",\n schema: {\n type: \"object\",\n title: \"Metrics Configuration\",\n description: \"Configure metrics server access settings\",\n properties: {\n connectAll: {\n type: \"boolean\",\n title: \"Connect All Servers\",\n description: \"When enabled, the agent will connect to all available metrics servers automatically\",\n default: false,\n widget: \"switch\",\n },\n serverKeys: {\n type: \"array\",\n title: \"Select Metrics Servers\",\n description: \"Select metrics servers this agent can query (ignored if 'Connect All Servers' is enabled)\",\n items: { type: \"string\" },\n widget: \"metricsSelect\",\n },\n },\n },\n defaultConfig: {\n connectAll: false,\n serverKeys: [],\n },\n tools: [\n { id: \"list_datasources\", name: \"list_datasources\", description: \"List available data sources\" },\n { id: \"query_metrics_list\", name: \"query_metrics_list\", description: \"Query list of available metrics\" },\n { id: \"query_metric_definition\", name: \"query_metric_definition\", description: \"Get metric definition and metadata\" },\n { id: \"query_semantic_metric_data\", name: \"query_semantic_metric_data\", description: \"Query semantic metric data\" },\n { id: \"query_tables_list\", name: \"query_tables_list\", description: \"List available query tables\" },\n { id: \"query_table_definition\", name: \"query_table_definition\", description: \"Get table definition\" },\n { id: \"execute_sql_query\", name: \"execute_sql_query\", description: \"Execute raw SQL query\" },\n ],\n},\n{\n type: \"ask_user_to_clarify\",\n name: \"Ask User To Clarify\",\n description: \"Enables the agent to ask users clarifying questions with predefined options and free-text input\",\n schema: {\n type: \"object\",\n title: \"Ask User To Clarify Configuration\",\n description: \"Configure user clarification settings\",\n properties: {},\n },\n defaultConfig: {},\n tools: [\n { id: \"ask_user_to_clarify\", name: \"Ask User To Clarify\", description: \"Ask user clarifying questions with options\" },\n ],\n},\n{\n type: \"widget\",\n name: \"Widget\",\n description: \"Enables the agent to render interactive HTML widgets and visualizations\",\n schema: {\n type: \"object\",\n title: \"Widget Configuration\",\n description: \"Configure widget rendering capabilities (zero configuration required)\",\n properties: {},\n },\n defaultConfig: {},\n tools: [\n { id: \"load_guidelines\", name: \"Load Guidelines\", description: \"Load widget development guidelines for specific modules\" },\n { id: \"show_widget\", name: \"Show Widget\", description: \"Render interactive HTML widgets or SVG diagrams\" },\n ],\n},\n{\n type: \"claw\",\n name: \"Memory\",\n description: \"Injects and manages memory/bootstrap files (such as AGENTS.md and USER.md) in the runtime workspace\",\n schema: {\n type: \"object\",\n title: \"Memory Configuration\",\n description: \"Configure bootstrap file injection behavior\",\n properties: {\n injectBootstrapFiles: {\n type: \"boolean\",\n title: \"Inject Bootstrap Files\",\n description: \"Automatically inject default bootstrap files into the workspace context\",\n default: true,\n widget: \"switch\",\n },\n },\n },\n defaultConfig: {\n injectBootstrapFiles: true,\n },\n tools: [],\n},\n{\n type: \"date\",\n name: \"Current Date\",\n description: \"Injects the current date into the agent's system prompt for time awareness\",\n schema: {\n type: \"object\",\n title: \"Date Configuration\",\n description: \"Configure timezone for the current date\",\n properties: {\n timezone: {\n type: \"string\",\n title: \"Timezone\",\n description: \"Select timezone for displaying the current date\",\n default: \"UTC\",\n enumLabels: {\n \"UTC\": \"UTC (Coordinated Universal Time)\",\n \"America/New_York\": \"New York (EST/EDT)\",\n \"America/Chicago\": \"Chicago (CST/CDT)\",\n \"America/Denver\": \"Denver (MST/MDT)\",\n \"America/Los_Angeles\": \"Los Angeles (PST/PDT)\",\n \"America/Toronto\": \"Toronto (EST/EDT)\",\n \"America/Sao_Paulo\": \"São Paulo (BRT)\",\n \"Europe/London\": \"London (GMT/BST)\",\n \"Europe/Paris\": \"Paris (CET/CEST)\",\n \"Europe/Berlin\": \"Berlin (CET/CEST)\",\n \"Europe/Moscow\": \"Moscow (MSK)\",\n \"Asia/Dubai\": \"Dubai (GST)\",\n \"Asia/Kolkata\": \"Kolkata (IST)\",\n \"Asia/Shanghai\": \"Shanghai (CST)\",\n \"Asia/Hong_Kong\": \"Hong Kong (HKT)\",\n \"Asia/Singapore\": \"Singapore (SGT)\",\n \"Asia/Tokyo\": \"Tokyo (JST)\",\n \"Asia/Seoul\": \"Seoul (KST)\",\n \"Australia/Sydney\": \"Sydney (AEDT/AEST)\",\n \"Pacific/Auckland\": \"Auckland (NZDT/NZST)\"\n },\n widget: \"select\",\n },\n },\n },\n defaultConfig: {\n timezone: \"UTC\",\n },\n tools: [\n { id: \"get_current_date_time\", name: \"get_current_date_time\", description: \"Get the current date and time\" },\n ],\n},\n{\n type: \"scheduler\",\n name: \"Scheduler\",\n description: \"Enables the agent to schedule future work that re-enters through addMessage\",\n schema: {\n type: \"object\",\n title: \"Scheduler Configuration\",\n description: \"Configure retry behavior for scheduled tasks\",\n properties: {\n defaultMaxRetries: {\n type: \"integer\",\n title: \"Default Max Retries\",\n description: \"Default retry count for scheduled tasks created through the middleware\",\n default: 0,\n minimum: 0,\n widget: \"numberInput\",\n },\n },\n },\n defaultConfig: {\n defaultMaxRetries: 0,\n },\n tools: [\n { id: \"schedule_at\", name: \"Schedule At\", description: \"Schedule a task for an absolute time\" },\n { id: \"schedule_after\", name: \"Schedule After\", description: \"Schedule a task after a relative delay\" },\n { id: \"schedule_recurring\", name: \"Schedule Recurring\", description: \"Schedule a recurring task with a cron expression\" },\n { id: \"cancel_scheduled_task\", name: \"Cancel Scheduled Task\", description: \"Cancel an existing scheduled task\" },\n { id: \"list_scheduled_tasks\", name: \"List Scheduled Tasks\", description: \"List scheduled tasks in the current agent context\" },\n ],\n},\n{\n type: \"topology\",\n name: \"Topology\",\n description: \"Restricts which agents can delegate to which other agents. Define edges with purpose descriptions for non-technical readability.\",\n schema: {\n type: \"object\",\n title: \"Topology Configuration\",\n description: \"Define delegation edges between agents. Each edge represents an allowed delegation path with a human-readable purpose.\",\n properties: {\n edges: {\n type: \"array\",\n title: \"Topology Edges\",\n description: \"Define which agents can delegate to which other agents and why\",\n default: [],\n items: { type: \"object\" },\n widget: \"topologyEdgeBuilder\",\n },\n },\n },\n defaultConfig: {\n edges: [],\n },\n tools: [],\n},\n{\n type: \"task\",\n name: \"Task Management\",\n description: \"Enables the agent to manage persistent tasks with delegation and tracking\",\n schema: {\n type: \"object\",\n title: \"Task Management Configuration\",\n description: \"Zero-configuration task management\",\n properties: {},\n },\n defaultConfig: {},\n tools: [\n { id: \"manage_task\", name: \"manage_task\", description: \"Create, update, delegate, or query tasks\" },\n ],\n},\n{\n type: \"collection\",\n name: \"Collection\",\n description: \"Provides vector search and full CRUD access to knowledge collections. Agent can search, list, create, and manage collection entries.\",\n schema: {\n type: \"object\",\n title: \"Collection Configuration\",\n description: \"Configure collection access for this agent\",\n properties: {\n connectAll: {\n type: \"boolean\",\n title: \"Connect All Collections\",\n description: \"When enabled, the agent will have access to all collections automatically\",\n default: false,\n widget: \"switch\",\n },\n collectionKeys: {\n type: \"array\",\n title: \"Select Collections\",\n description: \"Select which collections this agent can access\",\n items: { type: \"string\" },\n widget: \"collectionSelect\",\n },\n },\n },\n defaultConfig: {\n connectAll: false,\n collectionKeys: [],\n },\n tools: [\n { id: \"list_collections\", name: \"list_collections\", description: \"List available collections\" },\n { id: \"search_collection\", name: \"search_collection\", description: \"Semantic search within a collection\" },\n { id: \"get_collection\", name: \"get_collection\", description: \"Get collection details\" },\n { id: \"list_entries\", name: \"list_entries\", description: \"List entries in a collection\" },\n { id: \"create_collection\", name: \"create_collection\", description: \"Create a new collection\" },\n { id: \"update_collection\", name: \"update_collection\", description: \"Update collection settings\" },\n { id: \"delete_collection\", name: \"delete_collection\", description: \"Delete a collection\" },\n { id: \"add_entries\", name: \"add_entries\", description: \"Add entries to a collection in batches\" },\n { id: \"update_entry\", name: \"update_entry\", description: \"Update an existing entry\" },\n { id: \"delete_entry\", name: \"delete_entry\", description: \"Delete an entry from a collection\" },\n ],\n},\n{\n type: \"eval\",\n name: \"Agent Eval\",\n description: \"Governance and testing: design test suites, run evaluations, analyze results. Best paired with the Skill plugin.\",\n schema: {\n type: \"object\",\n title: \"Agent Eval Configuration\",\n description: \"Enable agent evaluation capabilities\",\n properties: {},\n },\n defaultConfig: {},\n tools: [\n { id: \"read_eval\", name: \"read_eval\", description: \"Read-only: list/get projects, suites, cases, runs, results, reports\" },\n { id: \"manage_eval\", name: \"manage_eval\", description: \"Create, update, delete eval projects, suites, and test cases\" },\n { id: \"run_eval\", name: \"run_eval\", description: \"Start, abort, status, and resume evaluation runs\" },\n ],\n},\n];\n\n/**\n * Default configuration values\n */\nconst DEFAULT_CONFIG: LatticeChatShellConfig = {\n baseURL: \"http://localhost:4001\",\n apiKey: \"\",\n transport: \"sse\",\n timeout: 300000,\n headers: {},\n enableThreadCreation: true,\n enableThreadList: true,\n showSideMenu: true,\n enableAssistantCreation: true,\n enableAssistantEditing: true,\n availableMiddlewareTypes: undefined,\n enableWorkspace: false,\n enableDatabaseSlot: true,\n enableSkillSlot: true,\n enableAgentSlot: true,\n enableMetricsDataSourceSlot: true,\n enableModelSelector: false,\n enableTraceView: false,\n sidebarMode: \"icon\",\n sidebarDefaultExpanded: true,\n workspaceMenuDefaultExpanded: true,\n sidebarShowToggle: true,\n sidebarShowNewAnalysis: true,\n sidebarLogoText: \"Lattice\",\n enableCustomMenu: true,\n};\n\n/**\n * Lattice Chat Shell context\n */\nexport const LatticeChatShellContext =\n createContext<LatticeChatShellContextValue>({\n config: DEFAULT_CONFIG,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n updateConfig: () => { },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n updateConfigValue: () => { },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n resetConfig: () => { },\n settingsModalOpen: false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setSettingsModalOpen: () => { },\n });\n\n/**\n * Props for LatticeChatShellContextProvider\n */\nexport interface LatticeChatShellContextProviderProps {\n /**\n * Children components\n */\n children: ReactNode;\n /**\n * Initial configuration (optional)\n */\n initialConfig?: Partial<LatticeChatShellConfig>;\n /**\n * Whether to persist configuration to localStorage (optional, default: false)\n */\n persistToLocalStorage?: boolean;\n /**\n * LocalStorage key for persisting configuration (optional, default: \"lattice_chat_shell_config\")\n */\n localStorageKey?: string;\n}\n\n/**\n * Provider component for LatticeChatShellContext\n * Manages Lattice Chat Shell configuration\n */\nexport const LatticeChatShellContextProvider = ({\n children,\n initialConfig = {},\n persistToLocalStorage = false,\n localStorageKey = \"lattice_chat_shell_config\",\n}: LatticeChatShellContextProviderProps) => {\n // Load initial config from localStorage if persistence is enabled\n const loadInitialConfig = useCallback((): LatticeChatShellConfig => {\n if (persistToLocalStorage && typeof window !== \"undefined\") {\n try {\n const stored = localStorage.getItem(localStorageKey);\n if (stored) {\n const parsed = JSON.parse(stored);\n return { ...DEFAULT_CONFIG, ...parsed, ...initialConfig };\n }\n } catch (error) {\n console.warn(\"Failed to load config from localStorage:\", error);\n }\n }\n return { ...DEFAULT_CONFIG, ...initialConfig };\n }, [persistToLocalStorage, localStorageKey, initialConfig]);\n\n const [config, setConfig] =\n useState<LatticeChatShellConfig>(loadInitialConfig);\n const [settingsModalOpen, setSettingsModalOpen] = useState(false);\n\n // Save config to localStorage if persistence is enabled\n const saveToLocalStorage = useCallback(\n (newConfig: LatticeChatShellConfig) => {\n if (persistToLocalStorage && typeof window !== \"undefined\") {\n try {\n localStorage.setItem(localStorageKey, JSON.stringify(newConfig));\n } catch (error) {\n console.warn(\"Failed to save config to localStorage:\", error);\n }\n }\n },\n [persistToLocalStorage, localStorageKey]\n );\n\n /**\n * Update the entire configuration\n */\n const updateConfig = useCallback(\n (updates: Partial<LatticeChatShellConfig>) => {\n setConfig((prev) => {\n const newConfig = { ...prev, ...updates };\n saveToLocalStorage(newConfig);\n return newConfig;\n });\n },\n [saveToLocalStorage]\n );\n\n /**\n * Update a specific configuration value\n */\n const updateConfigValue = useCallback(\n <K extends keyof LatticeChatShellConfig>(\n key: K,\n value: LatticeChatShellConfig[K]\n ) => {\n setConfig((prev) => {\n const newConfig = { ...prev, [key]: value };\n saveToLocalStorage(newConfig);\n return newConfig;\n });\n },\n [saveToLocalStorage]\n );\n\n /**\n * Reset configuration to defaults\n */\n const resetConfig = useCallback(() => {\n const defaultConfig = { ...DEFAULT_CONFIG, ...initialConfig };\n setConfig(defaultConfig);\n saveToLocalStorage(defaultConfig);\n }, [initialConfig, saveToLocalStorage]);\n\n return (\n <LatticeChatShellContext.Provider\n value={{\n config,\n updateConfig,\n updateConfigValue,\n resetConfig,\n settingsModalOpen,\n setSettingsModalOpen,\n }}\n >\n {children}\n </LatticeChatShellContext.Provider>\n );\n};\n\n/**\n * Hook to access LatticeChatShellContext\n * @returns Lattice Chat Shell context value\n * @throws Error if used outside of LatticeChatShellContextProvider\n */\nexport const useLatticeChatShellContext = (): LatticeChatShellContextValue => {\n const context = useContext(LatticeChatShellContext);\n\n if (!context) {\n throw new Error(\n \"useLatticeChatShellContext must be used within a LatticeChatShellContextProvider\"\n );\n }\n\n return context;\n};\n","import { useState, useCallback } from \"react\";\nimport { AuthenticationError } from \"@axiom-lattice/client-sdk\";\nimport { useClient } from \"../context\";\nimport type { UseApiOptions, UseApiReturn } from \"../types\";\n\n/**\n * Hook for making API requests with automatic header handling and 401 error handling\n * @param options - Hook options\n * @returns Object with request methods and state\n */\nexport function useApi(options?: UseApiOptions): UseApiReturn {\n // API operations don't need a specific assistant, using placeholder\n const client = useClient(\"__GLOBAL__\");\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const handleUnauthorized = useCallback(() => {\n // Use component-level handler if provided, otherwise use global handler\n if (options?.onUnauthorized) {\n options.onUnauthorized();\n } else {\n // Dispatch global event as fallback\n window.dispatchEvent(new CustomEvent(\"lattice:unauthorized\"));\n }\n }, [options?.onUnauthorized]);\n\n const request = useCallback(\n async <T,>(\n method: string,\n url: string,\n body?: any,\n requestOptions?: RequestInit\n ): Promise<T> => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.request<T>(url, {\n method,\n body,\n headers: requestOptions?.headers as Record<string, string>,\n });\n return result;\n } catch (err) {\n if (err instanceof AuthenticationError) {\n handleUnauthorized();\n }\n setError(err as Error);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client, handleUnauthorized]\n );\n\n const get = useCallback(\n <T,>(url: string, options?: RequestInit) =>\n request<T>(\"GET\", url, undefined, options),\n [request]\n );\n\n const post = useCallback(\n <T,>(url: string, body?: any, options?: RequestInit) =>\n request<T>(\"POST\", url, body, options),\n [request]\n );\n\n const put = useCallback(\n <T,>(url: string, body?: any, options?: RequestInit) =>\n request<T>(\"PUT\", url, body, options),\n [request]\n );\n\n const del = useCallback(\n <T,>(url: string, options?: RequestInit) =>\n request<T>(\"DELETE\", url, undefined, options),\n [request]\n );\n\n return {\n get,\n post,\n put,\n del,\n isLoading,\n error,\n };\n}\n"],"mappings":"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","names":["data","createContext","useCallback","useContext","useEffect","useRef","jsx","createContext","useContext","useRef","useCallback","useEffect","createContext","useCallback","useContext","useState","jsx","useState","useCallback","useState","useCallback","options"]}