mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-27 05:38:51 +01:00
bugfix: Enhance Agent and AgentCategory schemas with new fields for category, support contact, and promotion status refactored and moved agent category methods and schema to data-schema package 🔧 fix: Merge and Rebase Conflicts - Move AgentCategory from api/models to @packages/data-schemas structure - Add schema, types, methods, and model following codebase conventions - Implement auto-seeding of default categories during AppService startup - Update marketplace controller to use new data-schemas methods - Remove old model file and standalone seed script refactor: unify agent marketplace to single endpoint with cursor pagination - Replace multiple marketplace routes with unified /marketplace endpoint - Add query string controls: category, search, limit, cursor, promoted, requiredPermission - Implement cursor-based pagination replacing page-based system - Integrate ACL permissions for proper access control - Fix ObjectId constructor error in Agent model - Update React components to use unified useGetMarketplaceAgentsQuery hook - Enhance type safety and remove deprecated useDynamicAgentQuery - Update tests for new marketplace architecture -Known issues: see more button after category switching + Unit tests feat: add icon property to ProcessedAgentCategory interface - Add useMarketplaceAgentsInfiniteQuery and useGetAgentCategoriesQuery to client/src/data-provider/Agents/ - Replace manual pagination in AgentGrid with infinite query pattern - Update imports to use local data provider instead of librechat-data-provider - Add proper permission handling with PERMISSION_BITS.VIEW/EDIT constants - Improve agent access control by adding requiredPermission validation in backend - Remove manual cursor/state management in favor of infinite query built-ins - Maintain existing search and category filtering functionality refactor: consolidate agent marketplace endpoints into main agents API and improve data management consistency - Remove dedicated marketplace controller and routes, merging functionality into main agents v1 API - Add countPromotedAgents function to Agent model for promoted agents count - Enhance getListAgents handler with marketplace filtering (category, search, promoted status) - Move getAgentCategories from marketplace to v1 controller with same functionality - Update agent mutations to invalidate marketplace queries and handle multiple permission levels - Improve cache management by updating all agent query variants (VIEW/EDIT permissions) - Consolidate agent data access patterns for better maintainability and consistency - Remove duplicate marketplace route definitions and middleware selected view only agents injected in the drop down fix: remove minlength validation for support contact name in agent schema feat: add validation and error messages for agent name in AgentConfig and AgentPanel fix: update agent permission check logic in AgentPanel to simplify condition Fix linting WIP Fix Unit tests WIP ESLint fixes eslint fix refactor: enhance isDuplicateVersion function in Agent model for improved comparison logic - Introduced handling for undefined/null values in array and object comparisons. - Normalized array comparisons to treat undefined/null as empty arrays. - Added deep comparison for objects and improved handling of primitive values. - Enhanced projectIds comparison to ensure consistent MongoDB ObjectId handling. refactor: remove redundant properties from IAgent interface in agent schema chore: update localization for agent detail component and clean up imports ci: update access middleware tests chore: remove unused PermissionTypes import from Role model ci: update AclEntry model tests ci: update button accessibility labels in AgentDetail tests refactor: update exhaustive dep. lint warning 🔧 fix: Fixed agent actions access feat: Add role-level permissions for agent sharing people picker - Add PEOPLE_PICKER permission type with VIEW_USERS and VIEW_GROUPS permissions - Create custom middleware for query-aware permission validation - Implement permission-based type filtering in PeoplePicker component - Hide people picker UI when user lacks permissions, show only public toggle - Support granular access: users-only, groups-only, or mixed search modes refactor: Replace marketplace interface config with permission-based system - Add MARKETPLACE permission type to handle marketplace access control - Update interface configuration to use role-based marketplace settings (admin/user) - Replace direct marketplace boolean config with permission-based checks - Modify frontend components to use marketplace permissions instead of interface config - Update agent query hooks to use marketplace permissions for determining permission levels - Add marketplace configuration structure similar to peoplePicker in YAML config - Backend now sets MARKETPLACE permissions based on interface configuration - When marketplace enabled: users get agents with EDIT permissions in dropdown lists (builder mode) - When marketplace disabled: users get agents with VIEW permissions in dropdown lists (browse mode) 🔧 fix: Redirect to New Chat if No Marketplace Access and Required Agent Name Placeholder (#8213) * Fix: Fix the redirect to new chat page if access to marketplace is denied * Fixed the required agent name placeholder --------- Co-authored-by: Atef Bellaaj <slalom.bellaaj@external.daimlertruck.com> chore: fix tests, remove unnecessary imports refactor: Implement permission checks for file access via agents - Updated `hasAccessToFilesViaAgent` to utilize permission checks for VIEW and EDIT access. - Replaced project-based access validation with permission-based checks. - Enhanced tests to cover new permission logic and ensure proper access control for files associated with agents. - Cleaned up imports and initialized models in test files for consistency. refactor: Enhance test setup and cleanup for file access control - Introduced modelsToCleanup array to track models added during tests for proper cleanup. - Updated afterAll hooks in test files to ensure all collections are cleared and only added models are deleted. - Improved consistency in model initialization across test files. - Added comments for clarity on cleanup processes and test data management. chore: Update Jest configuration and test setup for improved timeout handling - Added a global test timeout of 30 seconds in jest.config.js. - Configured jest.setTimeout in jestSetup.js to allow individual test overrides if needed. - Enhanced test reliability by ensuring consistent timeout settings across all tests. refactor: Implement file access filtering based on agent permissions - Introduced `filterFilesByAgentAccess` function to filter files based on user access through agents. - Updated `getFiles` and `primeFiles` functions to utilize the new filtering logic. - Moved `hasAccessToFilesViaAgent` function from the File model to permission services, adjusting imports accordingly - Enhanced tests to ensure proper access control and filtering behavior for files associated with agents. fix: make support_contact field a nested object rather than a sub-document refactor: Update support_contact field initialization in agent model - Removed handling for empty support_contact object in createAgent function. - Changed default value of support_contact in agent schema to undefined. test: Add comprehensive tests for support_contact field handling and versioning refactor: remove unused avatar upload mutation field and add informational toast for success chore: add missing SidePanelProvider for AgentMarketplace and organize imports fix: resolve agent selection race condition in marketplace HandleStartChat - Set agent in localStorage before newConversation to prevent useSelectorEffects from auto-selecting previous agent fix: resolve agent dropdown showing raw ID instead of agent info from URL - Add proactive agent fetching when agent_id is present in URL parameters - Inject fetched agent into agents cache so dropdowns display proper name/avatar - Use useAgentsMap dependency to ensure proper cache initialization timing - Prevents raw agent IDs from showing in UI when visiting shared agent links Fix: Agents endpoint renamed to "My Agent" for less confusion with the Marketplace agents. chore: fix ESLint issues and Test Mocks ci: update permissions structure in loadDefaultInterface tests - Refactored permissions for MEMORY and added new permissions for MARKETPLACE and PEOPLE_PICKER. - Ensured consistent structure for permissions across different types. feat: support_contact validation to allow empty email strings
154 lines
6.7 KiB
JSON
154 lines
6.7 KiB
JSON
{
|
|
"name": "LibreChat",
|
|
"version": "v0.8.0-rc2",
|
|
"description": "",
|
|
"workspaces": [
|
|
"api",
|
|
"client",
|
|
"packages/*"
|
|
],
|
|
"scripts": {
|
|
"update": "node config/update.js",
|
|
"add-balance": "node config/add-balance.js",
|
|
"set-balance": "node config/set-balance.js",
|
|
"list-balances": "node config/list-balances.js",
|
|
"user-stats": "node config/user-stats.js",
|
|
"rebuild:package-lock": "node config/packages",
|
|
"reinstall": "node config/update.js -l -g",
|
|
"b:reinstall": "bun config/update.js -b -l -g",
|
|
"reinstall:docker": "node config/update.js -d -g",
|
|
"update:local": "node config/update.js -l",
|
|
"update:docker": "node config/update.js -d",
|
|
"update:single": "node config/update.js -s",
|
|
"update:sudo": "node config/update.js --sudo",
|
|
"update:deployed": "node config/deployed-update.js",
|
|
"rebase:deployed": "node config/deployed-update.js --rebase",
|
|
"start:deployed": "docker compose -f ./deploy-compose.yml up -d || docker-compose -f ./deploy-compose.yml up -d",
|
|
"stop:deployed": "docker compose -f ./deploy-compose.yml down || docker-compose -f ./deploy-compose.yml down",
|
|
"upgrade": "node config/upgrade.js",
|
|
"create-user": "node config/create-user.js",
|
|
"invite-user": "node config/invite-user.js",
|
|
"list-users": "node config/list-users.js",
|
|
"reset-password": "node config/reset-password.js",
|
|
"ban-user": "node config/ban-user.js",
|
|
"delete-user": "node config/delete-user.js",
|
|
"reset-meili-sync": "node config/reset-meili-sync.js",
|
|
"update-banner": "node config/update-banner.js",
|
|
"delete-banner": "node config/delete-banner.js",
|
|
"backend": "cross-env NODE_ENV=production node api/server/index.js",
|
|
"backend:dev": "cross-env NODE_ENV=development npx nodemon api/server/index.js",
|
|
"backend:stop": "node config/stop-backend.js",
|
|
"build:data-provider": "cd packages/data-provider && npm run build",
|
|
"build:api": "cd packages/api && npm run build",
|
|
"build:data-schemas": "cd packages/data-schemas && npm run build",
|
|
"build:client-package": "cd packages/client && npm run build",
|
|
"frontend": "npm run build:data-provider && npm run build:data-schemas && npm run build:api && npm run build:client-package && cd client && npm run build",
|
|
"frontend:ci": "npm run build:data-provider && npm run build:client-package && cd client && npm run build:ci",
|
|
"frontend:dev": "cd client && npm run dev",
|
|
"e2e": "playwright test --config=e2e/playwright.config.local.ts",
|
|
"e2e:headed": "playwright test --config=e2e/playwright.config.local.ts --headed",
|
|
"e2e:a11y": "playwright test --config=e2e/playwright.config.a11y.ts --headed",
|
|
"e2e:ci": "playwright test --config=e2e/playwright.config.ts",
|
|
"e2e:debug": "cross-env PWDEBUG=1 playwright test --config=e2e/playwright.config.local.ts",
|
|
"e2e:codegen": "npx playwright codegen --load-storage=e2e/storageState.json http://localhost:3080/c/new",
|
|
"e2e:login": "npx playwright codegen --save-storage=e2e/auth.json http://localhost:3080/login",
|
|
"e2e:github": "act -W .github/workflows/playwright.yml --secret-file my.secrets",
|
|
"test:client": "cd client && npm run test:ci",
|
|
"test:api": "cd api && npm run test:ci",
|
|
"e2e:update": "playwright test --config=e2e/playwright.config.js --update-snapshots",
|
|
"e2e:report": "npx playwright show-report e2e/playwright-report",
|
|
"lint:fix": "eslint --fix \"{,!(node_modules|venv)/**/}*.{js,jsx,ts,tsx}\"",
|
|
"lint": "eslint \"{,!(node_modules|venv)/**/}*.{js,jsx,ts,tsx}\"",
|
|
"format": "npx prettier --write \"{,!(node_modules|venv)/**/}*.{js,jsx,ts,tsx}\"",
|
|
"b:api": "NODE_ENV=production bun run api/server/index.js",
|
|
"b:api-inspect": "NODE_ENV=production bun --inspect run api/server/index.js",
|
|
"b:api:dev": "NODE_ENV=production bun run --watch api/server/index.js",
|
|
"b:data": "cd packages/data-provider && bun run b:build",
|
|
"b:mcp": "cd packages/api && bun run b:build",
|
|
"b:data-schemas": "cd packages/data-schemas && bun run b:build",
|
|
"b:build:api": "cd packages/api && bun run b:build",
|
|
"b:client": "bun --bun run b:data && bun --bun run b:mcp && bun --bun run b:data-schemas && cd client && bun --bun run b:build",
|
|
"b:client:dev": "cd client && bun run b:dev",
|
|
"b:test:client": "cd client && bun run b:test",
|
|
"b:test:api": "cd api && bun run b:test",
|
|
"b:balance": "bun config/add-balance.js",
|
|
"b:list-balances": "bun config/list-balances.js",
|
|
"reset-terms": "node config/reset-terms.js",
|
|
"flush-cache": "node config/flush-cache.js",
|
|
"migrate:agent-permissions:dry-run": "node config/migrate-agent-permissions.js --dry-run",
|
|
"migrate:agent-permissions": "node config/migrate-agent-permissions.js",
|
|
"migrate:agent-permissions:batch": "node config/migrate-agent-permissions.js --batch-size=50"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/danny-avila/LibreChat.git"
|
|
},
|
|
"author": "",
|
|
"license": "ISC",
|
|
"bugs": {
|
|
"url": "https://github.com/danny-avila/LibreChat/issues"
|
|
},
|
|
"homepage": "https://librechat.ai/",
|
|
"devDependencies": {
|
|
"@axe-core/playwright": "^4.10.1",
|
|
"@eslint/compat": "^1.2.6",
|
|
"@eslint/eslintrc": "^3.2.0",
|
|
"@eslint/js": "^9.20.0",
|
|
"@microsoft/eslint-formatter-sarif": "^3.1.0",
|
|
"@playwright/test": "^1.50.1",
|
|
"@types/react-virtualized": "^9.22.0",
|
|
"cross-env": "^7.0.3",
|
|
"elliptic": "^6.6.1",
|
|
"eslint": "^9.20.1",
|
|
"eslint-config-prettier": "^10.0.1",
|
|
"eslint-import-resolver-typescript": "^3.7.0",
|
|
"eslint-plugin-i18next": "^6.1.1",
|
|
"eslint-plugin-import": "^2.31.0",
|
|
"eslint-plugin-jest": "^28.11.0",
|
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
"eslint-plugin-perfectionist": "^4.8.0",
|
|
"eslint-plugin-prettier": "^5.2.3",
|
|
"eslint-plugin-react": "^7.37.4",
|
|
"eslint-plugin-react-hooks": "^5.1.0",
|
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
"globals": "^15.14.0",
|
|
"husky": "^9.1.7",
|
|
"jest": "^29.7.0",
|
|
"lint-staged": "^15.4.3",
|
|
"prettier": "^3.5.0",
|
|
"prettier-eslint": "^16.3.0",
|
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
|
"typescript-eslint": "^8.24.0"
|
|
},
|
|
"overrides": {
|
|
"@langchain/openai": "0.5.18",
|
|
"axios": "1.8.2",
|
|
"elliptic": "^6.6.1",
|
|
"form-data": "^4.0.4",
|
|
"mdast-util-gfm-autolink-literal": "2.0.0",
|
|
"remark-gfm": {
|
|
"mdast-util-gfm-autolink-literal": "2.0.0"
|
|
},
|
|
"mdast-util-gfm": {
|
|
"mdast-util-gfm-autolink-literal": "2.0.0"
|
|
},
|
|
"katex": "^0.16.21",
|
|
"rehype-katex": {
|
|
"katex": "^0.16.21"
|
|
},
|
|
"remark-math": {
|
|
"micromark-extension-math": {
|
|
"katex": "^0.16.21"
|
|
}
|
|
}
|
|
},
|
|
"nodemonConfig": {
|
|
"ignore": [
|
|
"api/data/",
|
|
"data/",
|
|
"client/",
|
|
"admin/",
|
|
"packages/"
|
|
]
|
|
}
|
|
}
|