diff --git a/package.json b/package.json index 4d1f67db..d4ae4dff 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,9 @@ "http-proxy-middleware@>=1.3.0 <2.0.9": ">=2.0.9", "http-proxy-middleware@>=1.3.0 <2.0.8": ">=2.0.8", "undici@>=6.0.0 <6.21.2": ">=6.21.2", - "webpack-dev-server@<=5.2.0": ">=5.2.1" + "webpack-dev-server@<=5.2.0": ">=5.2.1", + "brace-expansion@>=1.0.0 <=1.1.11": ">=1.1.12", + "brace-expansion@>=2.0.0 <=2.0.1": ">=2.0.2" }, "onlyBuiltDependencies": [ "@swc/core", diff --git a/packages/devtools-ui/src/routes/commands.tsx b/packages/devtools-ui/src/routes/commands.tsx index 41acfc9e..19157dac 100644 --- a/packages/devtools-ui/src/routes/commands.tsx +++ b/packages/devtools-ui/src/routes/commands.tsx @@ -26,6 +26,8 @@ interface CommandData { parentPath: string; relativePath: string; middlewares: string[]; + supportsAI: boolean; + description?: string; } interface MiddlewareData { @@ -52,12 +54,25 @@ const CommandDetails = ({ }) => { return ( -

{command.name}

+

+ {command.name} + {command.supportsAI && ( + + ✨ + + )} +

ID:

{command.id}

+ {command.description && ( +
+

Description:

+

{command.description}

+
+ )}

Category:

{command.category || 'Uncategorized'}

@@ -106,6 +121,7 @@ const TreeNode = ({ hasMiddleware = false, onClick, isSelected, + supportsAI, }: { name: string; children?: React.ReactNode; @@ -113,6 +129,7 @@ const TreeNode = ({ hasMiddleware?: boolean; onClick?: () => void; isSelected?: boolean; + supportsAI?: boolean; }) => { const [isOpen, setIsOpen] = useState(true); const hasChildren = Boolean(children); @@ -159,6 +176,11 @@ const TreeNode = ({ λ )} + {supportsAI && ( + + ✨ + + )}
{hasChildren && isOpen && ( @@ -236,6 +258,7 @@ function CommandHierarchy() { key={command.id} name={command.name} isCommand={true} + supportsAI={command.supportsAI} hasMiddleware={command.middlewares.length > 0} onClick={() => setSelectedCommand(command.id)} isSelected={selectedCommand === command.id} diff --git a/packages/devtools/src/server/routes/commands.ts b/packages/devtools/src/server/routes/commands.ts index c1542580..be7111ae 100644 --- a/packages/devtools/src/server/routes/commands.ts +++ b/packages/devtools/src/server/routes/commands.ts @@ -14,11 +14,13 @@ app.get('/', (req, res) => { { id: command.command.id, name: command.data.command.name, + description: command.data.command.description, path: command.command.path, category: command.command.category, parentPath: command.command.parentPath, relativePath: command.command.relativePath, middlewares: command.command.middlewares, + supportsAI: !!command.data.ai, }, ]; }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dbf83019..70833811 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,6 +24,8 @@ overrides: http-proxy-middleware@>=1.3.0 <2.0.8: '>=2.0.8' undici@>=6.0.0 <6.21.2: '>=6.21.2' webpack-dev-server@<=5.2.0: '>=5.2.1' + brace-expansion@>=1.0.0 <=1.1.11: '>=1.1.12' + brace-expansion@>=2.0.0 <=2.0.1: '>=2.0.2' importers: @@ -3940,6 +3942,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@3.0.1: + resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} + engines: {node: '>= 16'} + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -3975,12 +3981,13 @@ packages: resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} engines: {node: '>=14.16'} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@4.0.1: + resolution: {integrity: sha512-YClrbvTCXGe70pU2JiEiPLYXO9gQkyxYeKpJIQHVS/gOs6EWMQP2RYBwjFLNT322Ji8TOC3IMPfsYCedNpzKfA==} + engines: {node: '>= 18'} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -4248,9 +4255,6 @@ packages: resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} engines: {node: '>= 0.8.0'} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -12967,6 +12971,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@3.0.1: {} + batch@0.6.1: {} big.js@5.2.2: {} @@ -13035,14 +13041,13 @@ snapshots: widest-line: 4.0.1 wrap-ansi: 8.1.0 - brace-expansion@1.1.11: + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@4.0.1: dependencies: - balanced-match: 1.0.2 + balanced-match: 3.0.1 braces@3.0.3: dependencies: @@ -13311,8 +13316,6 @@ snapshots: transitivePeerDependencies: - supports-color - concat-map@0.0.1: {} - confbox@0.1.8: {} confbox@0.2.2: {} @@ -15899,15 +15902,15 @@ snapshots: minimatch@10.0.1: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 4.0.1 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 2.0.1 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 4.0.1 minimist@1.2.8: {}