From 20b0dff5520f793ee372ce32b10a97404c091dbe Mon Sep 17 00:00:00 2001 From: Noah Waldner Date: Tue, 6 Oct 2026 15:48:51 +0200 Subject: [PATCH 1/4] feat(storybook-docs): serve llms.txt and deprecate the Storybook MCP Generate /llms.txt (and an /agents.txt alias) from the SDK usage guide so agents landing on the docs site are pointed at the Fondue skill and SDK. Replace the hosted Storybook MCP with a stub that answers every request with a deprecation notice linking to /llms.txt. Co-Authored-By: Claude Opus 5.5 --- pnpm-lock.yaml | 208 +++++++++++++++++---- storybook-docs/.gitignore | 1 + storybook-docs/.storybook/main.ts | 2 +- storybook-docs/netlify-functions/mcp.ts | 107 +++++++++-- storybook-docs/package.json | 3 +- storybook-docs/scripts/generateLlmsTxt.mjs | 62 ++++++ 6 files changed, 334 insertions(+), 49 deletions(-) create mode 100644 storybook-docs/scripts/generateLlmsTxt.mjs diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7069da7697..570c163fc1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1370,13 +1370,13 @@ importers: devDependencies: '@babel/core': specifier: ^7.29.7 - version: 7.29.7(supports-color@8.1.1) + version: 7.29.7 '@etchteam/storybook-addon-status': specifier: ^8.1.0 version: 8.1.0(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1)) '@frontify/eslint-config-react': specifier: ^1.0.16 - version: 1.0.16(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(prettier@3.9.6)(react@18.3.1)(supports-color@8.1.1)(typescript@5.9.3) + version: 1.0.16(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(prettier@3.9.6)(react@18.3.1)(typescript@5.9.3) '@storybook/addon-a11y': specifier: ^10.6.0 version: 10.6.0(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1)) @@ -1386,9 +1386,6 @@ importers: '@storybook/addon-links': specifier: ^10.6.0 version: 10.6.0(@types/react@18.3.31)(react@18.3.1)(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1)) - '@storybook/mcp': - specifier: ^10.6.0 - version: 10.6.0(typescript@5.9.3) '@storybook/react-vite': specifier: ^10.6.0 version: 10.6.0(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.62.4)(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1))(typescript@5.9.3)(vite@6.4.3(@types/node@22.20.1)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) @@ -4713,9 +4710,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@storybook/mcp@10.6.0': - resolution: {integrity: sha512-TXcZkE8NxtFKl8dgRbAf/aOLlBqNffzAi9WVX5A6OoESAmyAuEzGslnRdHMcOwTtzxkcFFQLIzPOK7HStBQ3/Q==} - '@storybook/react-dom-shim@10.6.0': resolution: {integrity: sha512-ZE0l4xL6d00rKFeJhRDuh0t3r+/2ffhx47lIyaSWrTD5kuM3nDjKDxCIWwX4E3gLV+oNX8E1prXRMuEWJUJwJg==} peerDependencies: @@ -10294,6 +10288,26 @@ snapshots: '@babel/compat-data@7.29.7': {} + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/core@7.29.7(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.29.7 @@ -10378,17 +10392,17 @@ snapshots: '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.8(supports-color@8.1.1) + '@babel/traverse': 7.29.8 '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.8(supports-color@8.1.1) + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -11125,6 +11139,18 @@ snapshots: '@babel/parser': 7.29.8 '@babel/types': 7.29.8 + '@babel/traverse@7.29.8': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/traverse@7.29.8(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.29.7 @@ -11892,7 +11918,7 @@ snapshots: '@eslint/config-array@0.23.5': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 minimatch: 10.2.6 transitivePeerDependencies: - supports-color @@ -12041,6 +12067,38 @@ snapshots: - eslint-plugin-import - supports-color + '@frontify/eslint-config-basic@1.0.16(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(prettier@3.9.6)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@10.8.1(jiti@2.7.0)) + '@eslint/js': 10.0.1(eslint@10.8.1(jiti@2.7.0)) + '@eslint/markdown': 8.0.1 + '@stylistic/eslint-plugin': 5.10.0(eslint@10.8.1(jiti@2.7.0)) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.8.1(jiti@2.7.0) + eslint-config-prettier: 10.1.8(eslint@10.8.1(jiti@2.7.0)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0)))(eslint@10.8.1(jiti@2.7.0)) + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0)) + eslint-plugin-jsonc: 3.2.0(eslint@10.8.1(jiti@2.7.0)) + eslint-plugin-lodash: 8.0.0(eslint@10.8.1(jiti@2.7.0)) + eslint-plugin-no-only-tests: 3.4.0 + eslint-plugin-prettier: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.8.1(jiti@2.7.0)))(eslint@10.8.1(jiti@2.7.0))(prettier@3.9.6) + eslint-plugin-promise: 7.3.0(eslint@10.8.1(jiti@2.7.0)) + eslint-plugin-unicorn: 64.0.0(eslint@10.8.1(jiti@2.7.0)) + eslint-plugin-yml: 3.4.0(eslint@10.8.1(jiti@2.7.0)) + globals: 17.6.0 + prettier: 3.9.6 + typescript: 5.9.3 + typescript-eslint: 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + yaml-eslint-parser: 2.0.0 + transitivePeerDependencies: + - '@eslint/json' + - '@types/eslint' + - '@typescript-eslint/utils' + - eslint-import-resolver-node + - eslint-plugin-import + - supports-color + '@frontify/eslint-config-react@1.0.16(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(prettier@3.9.6)(react@18.3.1)(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@eslint-react/eslint-plugin': 5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) @@ -12061,6 +12119,26 @@ snapshots: - eslint-plugin-import - supports-color + '@frontify/eslint-config-react@1.0.16(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(prettier@3.9.6)(react@18.3.1)(typescript@5.9.3)': + dependencies: + '@eslint-react/eslint-plugin': 5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/kit': 5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@frontify/eslint-config-basic': 1.0.16(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(prettier@3.9.6)(typescript@5.9.3) + eslint: 10.8.1(jiti@2.7.0) + eslint-plugin-jsx-a11y-x: 0.1.1(eslint@10.8.1(jiti@2.7.0)) + globals: 17.6.0 + prettier: 3.9.6 + react: 18.3.1 + typescript: 5.9.3 + typescript-eslint: 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + transitivePeerDependencies: + - '@eslint/json' + - '@types/eslint' + - '@typescript-eslint/utils' + - eslint-import-resolver-node + - eslint-plugin-import + - supports-color + '@frontify/oxfmt-config@0.0.2(oxfmt@0.52.0)': dependencies: oxfmt: 0.52.0 @@ -13878,16 +13956,6 @@ snapshots: dependencies: react: 18.3.1 - '@storybook/mcp@10.6.0(typescript@5.9.3)': - dependencies: - '@tmcp/adapter-valibot': 0.1.5(tmcp@1.20.0(typescript@5.9.3))(valibot@1.5.0(typescript@5.9.3)) - '@tmcp/transport-http': 0.8.5(tmcp@1.20.0(typescript@5.9.3)) - tmcp: 1.20.0(typescript@5.9.3) - valibot: 1.5.0(typescript@5.9.3) - transitivePeerDependencies: - - '@tmcp/auth' - - typescript - '@storybook/react-dom-shim@10.6.0(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1))': dependencies: react: 18.3.1 @@ -14441,13 +14509,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.3 + eslint: 10.8.1(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 eslint: 10.8.1(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: @@ -14457,7 +14541,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) '@typescript-eslint/types': 8.60.1 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -14466,7 +14550,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) '@typescript-eslint/types': 8.60.1 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -14501,6 +14585,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.8.1(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.60.1(eslint@10.8.1(jiti@1.21.7))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.60.1 @@ -14518,7 +14614,7 @@ snapshots: '@typescript-eslint/types': 8.60.1 '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) '@typescript-eslint/utils': 8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 eslint: 10.8.1(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 @@ -14535,7 +14631,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) '@typescript-eslint/types': 8.59.3 '@typescript-eslint/visitor-keys': 8.59.3 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 minimatch: 10.2.6 semver: 7.8.5 tinyglobby: 0.2.17 @@ -14550,7 +14646,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) '@typescript-eslint/types': 8.60.1 '@typescript-eslint/visitor-keys': 8.60.1 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 minimatch: 10.2.6 semver: 7.8.5 tinyglobby: 0.2.17 @@ -16132,6 +16228,10 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.4.3: + dependencies: + ms: 2.1.3 + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -16466,6 +16566,21 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0)))(eslint@10.8.1(jiti@2.7.0)): + dependencies: + debug: 4.4.3 + eslint: 10.8.1(jiti@2.7.0) + eslint-import-context: 0.1.9(unrs-resolver@1.11.1) + get-tsconfig: 4.13.1 + is-bun-module: 2.0.0 + stable-hash-x: 0.2.0 + tinyglobby: 0.2.17 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0)) + transitivePeerDependencies: + - supports-color + eslint-json-compat-utils@0.2.3(eslint@10.8.1(jiti@1.21.7))(jsonc-eslint-parser@3.1.0): dependencies: eslint: 10.8.1(jiti@1.21.7) @@ -16478,6 +16593,24 @@ snapshots: esquery: 1.7.0 jsonc-eslint-parser: 3.1.0 + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0)): + dependencies: + '@package-json/types': 0.0.12 + '@typescript-eslint/types': 8.60.1 + comment-parser: 1.4.6 + debug: 4.4.3 + eslint: 10.8.1(jiti@2.7.0) + eslint-import-context: 0.1.9(unrs-resolver@1.11.1) + is-glob: 4.0.3 + minimatch: 10.2.6 + semver: 7.8.5 + stable-hash-x: 0.2.0 + unrs-resolver: 1.11.1 + optionalDependencies: + '@typescript-eslint/utils': 8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(supports-color@8.1.1): dependencies: '@package-json/types': 0.0.12 @@ -16862,7 +16995,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -18361,7 +18494,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3 decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -19043,8 +19176,8 @@ snapshots: react-docgen@8.0.3: dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) - '@babel/traverse': 7.29.8(supports-color@8.1.1) + '@babel/core': 7.29.7 + '@babel/traverse': 7.29.8 '@babel/types': 7.29.8 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 @@ -19916,6 +20049,17 @@ snapshots: transitivePeerDependencies: - supports-color + typescript-eslint@8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3))(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.8.1(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@5.9.3: {} ufo@1.6.1: {} diff --git a/storybook-docs/.gitignore b/storybook-docs/.gitignore index 45f84e0d42..d5bcb16b0a 100644 --- a/storybook-docs/.gitignore +++ b/storybook-docs/.gitignore @@ -1,3 +1,4 @@ storybook-static node_modules stories/guides/ +static diff --git a/storybook-docs/.storybook/main.ts b/storybook-docs/.storybook/main.ts index 504f3c88c7..00ecef39fb 100644 --- a/storybook-docs/.storybook/main.ts +++ b/storybook-docs/.storybook/main.ts @@ -25,7 +25,7 @@ const config: StorybookConfig = { '@etchteam/storybook-addon-status', '@storybook/addon-docs', ], - staticDirs: ['assets'], + staticDirs: ['assets', '../static'], framework: { name: '@storybook/react-vite', options: {}, diff --git a/storybook-docs/netlify-functions/mcp.ts b/storybook-docs/netlify-functions/mcp.ts index 5b87c4475d..99c5e9d236 100644 --- a/storybook-docs/netlify-functions/mcp.ts +++ b/storybook-docs/netlify-functions/mcp.ts @@ -1,24 +1,103 @@ /* (c) Copyright Frontify Ltd., all rights reserved. */ -import { basename } from 'node:path'; +/** + * Deprecated MCP endpoint. The Storybook MCP that used to live here was replaced by + * the Fondue agent skill, which queries the locally installed `@frontify/fondue/sdk`. + * This stub stays so existing client configs get a pointer to the skill instead of a 404. + */ -import { createStorybookMcpHandler } from '@storybook/mcp'; +const DEPRECATION_MESSAGE = [ + 'The Fondue Storybook MCP server has been deprecated and no longer serves component documentation.', + 'Use the Fondue agent skill instead. It queries the `@frontify/fondue` version installed in your project:', + '', + ' npx skills add frontify/fondue/packages/sdk', + '', + 'Then remove this MCP server from your agent configuration.', + 'Docs: https://fondue-components.frontify.com/llms.txt', +].join('\n'); -const MANIFESTS_BASE = 'https://components.fondue-components.frontify.com/manifests'; +// Kept under the names the Storybook MCP exposed, so agents calling them get the notice. +const TOOL_NAMES = ['docs-list', 'docs-show', 'docs-show-story']; -const handler = await createStorybookMcpHandler({ - manifestProvider: async (_request: Request | undefined, path: string): Promise => { - const url = `${MANIFESTS_BASE}/${basename(path)}`; - const response = await fetch(url); - if (!response.ok) { - throw new Error(`Failed to fetch ${url}: ${response.status}`); - } - return await response.text(); - }, -}); +const PROTOCOL_VERSION = '2025-06-18'; + +const CORS_HEADERS = { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type, Accept, Mcp-Session-Id, Mcp-Protocol-Version', +}; + +type JsonRpcRequest = { + jsonrpc: '2.0'; + id?: string | number | null; + method: string; + params?: { protocolVersion?: string }; +}; + +const handleRequest = ({ id, method, params }: JsonRpcRequest) => { + switch (method) { + case 'initialize': + return { + jsonrpc: '2.0', + id, + result: { + protocolVersion: params?.protocolVersion ?? PROTOCOL_VERSION, + capabilities: { tools: {} }, + serverInfo: { name: 'fondue-storybook-mcp (deprecated)', version: '0.0.0' }, + instructions: DEPRECATION_MESSAGE, + }, + }; + case 'ping': + return { jsonrpc: '2.0', id, result: {} }; + case 'tools/list': + return { + jsonrpc: '2.0', + id, + result: { + tools: TOOL_NAMES.map((name) => ({ + name, + description: `Deprecated. ${DEPRECATION_MESSAGE}`, + inputSchema: { type: 'object', properties: {}, additionalProperties: true }, + })), + }, + }; + case 'tools/call': + return { + jsonrpc: '2.0', + id, + result: { content: [{ type: 'text', text: DEPRECATION_MESSAGE }], isError: true }, + }; + default: + return { jsonrpc: '2.0', id, error: { code: -32601, message: `Method not found: ${method}` } }; + } +}; + +const json = (body: unknown, status = 200) => + new Response(JSON.stringify(body), { status, headers: { ...CORS_HEADERS, 'Content-Type': 'application/json' } }); export default async (req: Request): Promise => { - return await handler(req); + if (req.method === 'OPTIONS') { + return new Response(null, { status: 204, headers: CORS_HEADERS }); + } + if (req.method !== 'POST') { + return new Response(DEPRECATION_MESSAGE, { status: 405, headers: { ...CORS_HEADERS, Allow: 'POST, OPTIONS' } }); + } + + let body: JsonRpcRequest | JsonRpcRequest[]; + try { + body = (await req.json()) as JsonRpcRequest | JsonRpcRequest[]; + } catch { + return json({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } }, 400); + } + + // Notifications (no id) get no response body. + const responses = (Array.isArray(body) ? body : [body]) + .filter((message) => message.id !== undefined && message.id !== null) + .map(handleRequest); + if (responses.length === 0) { + return new Response(null, { status: 202, headers: CORS_HEADERS }); + } + return json(Array.isArray(body) ? responses : responses[0]); }; export const config = { diff --git a/storybook-docs/package.json b/storybook-docs/package.json index dd64fb1bc5..e16942cd86 100644 --- a/storybook-docs/package.json +++ b/storybook-docs/package.json @@ -4,7 +4,7 @@ "version": "0.0.2", "private": true, "scripts": { - "generate:guides": "node ./scripts/generateGuideStories.mjs", + "generate:guides": "node ./scripts/generateGuideStories.mjs && node ./scripts/generateLlmsTxt.mjs", "storybook": "pnpm generate:guides && storybook dev -p 6010", "build:storybook": "pnpm generate:guides && storybook build", "lint": "eslint .", @@ -23,7 +23,6 @@ "@storybook/addon-a11y": "^10.6.0", "@storybook/addon-docs": "^10.6.0", "@storybook/addon-links": "^10.6.0", - "@storybook/mcp": "^10.6.0", "@storybook/react-vite": "^10.6.0", "@tony.ganchev/eslint-plugin-header": "^3.4.4", "@types/node": "^22.20.1", diff --git a/storybook-docs/scripts/generateLlmsTxt.mjs b/storybook-docs/scripts/generateLlmsTxt.mjs new file mode 100644 index 0000000000..a92a23d3b4 --- /dev/null +++ b/storybook-docs/scripts/generateLlmsTxt.mjs @@ -0,0 +1,62 @@ +/* (c) Copyright Frontify Ltd., all rights reserved. */ + +// Generates /llms.txt (https://llmstxt.org) and an /agents.txt alias for the +// deployed Storybook. Both serve the SDK usage guide, so an agent landing on +// the docs site learns to install the Fondue skill or query the SDK. + +import { mkdirSync, rmSync, writeFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { guides } from '@frontify/fondue-sdk'; + +const outDir = join(dirname(fileURLToPath(import.meta.url)), '../static'); + +const usage = guides.get('sdk/Usage'); +if (!usage) { + throw new Error('Guide "sdk/Usage" not found in @frontify/fondue-sdk'); +} + +/** + * Pushes every markdown heading one level down so the guide nests under the + * llms.txt H1. Fenced code blocks are left alone. + * @param {string} markdown + */ +const demoteHeadings = (markdown) => { + let inFence = false; + return markdown + .split('\n') + .map((line) => { + if (line.startsWith('```')) { + inFence = !inFence; + } + return !inFence && /^#{1,5} /.test(line) ? `#${line}` : line; + }) + .join('\n'); +}; + +const otherGuides = guides + .list() + .filter((guide) => guide.id !== usage.id) + .map((guide) => `- \`${guide.id}\`: ${guide.title}`) + .join('\n'); + +const content = `# Fondue + +> Fondue is Frontify's React design system: components, icons and design tokens, published as \`@frontify/fondue\`. Don't scrape this Storybook. Install the Fondue agent skill, or query \`@frontify/fondue/sdk\` from the project, which describes the exact version installed there. + +${demoteHeadings(usage.content).trim()} + +## All guides + +Read any of these from code with \`guides.get('')?.content\` (\`import { guides } from '@frontify/fondue/sdk'\`): + +${otherGuides} +`; + +rmSync(outDir, { recursive: true, force: true }); +mkdirSync(outDir, { recursive: true }); +writeFileSync(join(outDir, 'llms.txt'), content); +writeFileSync(join(outDir, 'agents.txt'), content); + +console.log('Generated static/llms.txt and static/agents.txt'); From ca505222bdf3345e396f8b4c511c7f862952aed5 Mon Sep 17 00:00:00 2001 From: Noah Waldner Date: Tue, 6 Oct 2026 15:56:45 +0200 Subject: [PATCH 2/4] chore(components): drop Storybook MCP addon and components manifest The hosted Storybook MCP was the only consumer of the Storybook-generated manifests/components.json. Agents now use the Fondue skill and SDK, which read the package's own dist/manifests instead. Co-Authored-By: Claude Opus 5.5 --- packages/components/.storybook/main.ts | 2 - packages/components/package.json | 1 - pnpm-lock.yaml | 299 +++++++++++-------------- 3 files changed, 133 insertions(+), 169 deletions(-) diff --git a/packages/components/.storybook/main.ts b/packages/components/.storybook/main.ts index d7dbdb7928..0e008f8e5b 100644 --- a/packages/components/.storybook/main.ts +++ b/packages/components/.storybook/main.ts @@ -17,7 +17,6 @@ export default { '@storybook/addon-links', '@storybook/addon-a11y', '@storybook/addon-docs', - '@storybook/addon-mcp', ], framework: { name: '@storybook/react-vite', @@ -27,7 +26,6 @@ export default { backgrounds: false, outline: false, measure: false, - componentsManifest: true, experimentalCodeExamples: true, }, docs: { diff --git a/packages/components/package.json b/packages/components/package.json index 1eb98c5844..b3b9bf2026 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -92,7 +92,6 @@ "@storybook/addon-a11y": "^10.6.0", "@storybook/addon-docs": "^10.6.0", "@storybook/addon-links": "^10.6.0", - "@storybook/addon-mcp": "^10.6.0", "@storybook/react-vite": "^10.6.0", "@tailwindcss/forms": "^0.5.11", "@testing-library/dom": "^10.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 570c163fc1..3fcc6070bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -294,10 +294,10 @@ importers: version: 0.0.2(oxfmt@0.52.0) '@frontify/oxlint-config-basic': specifier: ^0.0.2 - version: 0.0.2(eslint@10.8.1(jiti@2.7.0))(oxlint@1.67.0(oxlint-tsgolint@0.23.0)) + version: 0.0.2(eslint@10.8.1(jiti@1.21.7))(oxlint@1.67.0(oxlint-tsgolint@0.23.0)) '@frontify/oxlint-config-react': specifier: ^0.0.2 - version: 0.0.2(eslint@10.8.1(jiti@2.7.0))(oxlint@1.67.0(oxlint-tsgolint@0.23.0))(typescript@5.9.3) + version: 0.0.2(eslint@10.8.1(jiti@1.21.7))(oxlint@1.67.0(oxlint-tsgolint@0.23.0))(typescript@5.9.3) '@playwright/experimental-ct-react': specifier: ^1.60.0 version: 1.60.0(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0))(yaml@2.9.0) @@ -313,9 +313,6 @@ importers: '@storybook/addon-links': specifier: ^10.6.0 version: 10.6.0(@types/react@18.3.31)(react@18.3.1)(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1)) - '@storybook/addon-mcp': - specifier: ^10.6.0 - version: 10.6.0(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1))(typescript@5.9.3) '@storybook/react-vite': specifier: ^10.6.0 version: 10.6.0(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.62.4)(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1))(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) @@ -336,7 +333,7 @@ importers: version: 14.6.3(@testing-library/dom@10.4.1) '@tony.ganchev/eslint-plugin-header': specifier: ^3.4.4 - version: 3.4.4(eslint@10.8.1(jiti@2.7.0)) + version: 3.4.4(eslint@10.8.1(jiti@1.21.7)) '@types/node': specifier: ^24.13.3 version: 24.13.3 @@ -423,10 +420,10 @@ importers: version: 6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@24.13.3)(rollup@4.62.4)(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 4.5.4(@types/node@24.13.3)(rollup@4.62.4)(supports-color@8.1.1)(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) + version: 5.1.4(supports-color@8.1.1)(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) vitest: specifier: ^5.0.0 version: 5.0.0(@types/node@24.13.3)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.11.2)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) @@ -4687,15 +4684,6 @@ packages: react: optional: true - '@storybook/addon-mcp@10.6.0': - resolution: {integrity: sha512-aQza4iMVgB3OXPMJvcnA193xMdt0sG/0+otGCQu8il6LIuFDP60jD5BXWlQiaVog+swqHrjJCFzuUPE+azz7Kg==} - peerDependencies: - '@storybook/addon-vitest': ^10.6.0 - storybook: ^10.6.0 - peerDependenciesMeta: - '@storybook/addon-vitest': - optional: true - '@storybook/builder-vite@10.6.0': resolution: {integrity: sha512-7zt8tYB6dnSO8fbjUz91MHexGDpf9HrLlA3FAmlVb+2ZL3eWUs499L3I6BDUymcWu7oW5WCBJlB8ERj8ZLLzig==} peerDependencies: @@ -4892,26 +4880,6 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tmcp/adapter-valibot@0.1.5': - resolution: {integrity: sha512-9P2wrVYPngemNK0UvPb/opC722/jfd09QxXmme1TRp/wPsl98vpSk/MXt24BCMqBRv4Dvs0xxJH4KHDcjXW52Q==} - peerDependencies: - tmcp: ^1.17.0 - valibot: ^1.1.0 - - '@tmcp/session-manager@0.2.1': - resolution: {integrity: sha512-DOGy9LfufXCy1wfpGHZ6qPSDQtRnTVwOb71+41ffovTqzLMZlK3iLK/LIsekHxIiku+iIAUiqEKN+DHbqEm8IA==} - peerDependencies: - tmcp: ^1.16.3 - - '@tmcp/transport-http@0.8.5': - resolution: {integrity: sha512-qQLqiCTtbxtTSswqOn/782df7O57RxI/yLUtCDQ++kHEhbmDUc8glmmtGJ3mrb7yPSPoM5VF2Pc2Q5cA6quzLA==} - peerDependencies: - '@tmcp/auth': ^0.3.3 || ^0.4.0 - tmcp: ^1.18.0 - peerDependenciesMeta: - '@tmcp/auth': - optional: true - '@tony.ganchev/eslint-plugin-header@3.4.4': resolution: {integrity: sha512-O3PDvjikVWECu078bLdRb2HwjVgR+wa7D0GX8gN1A8axlgEc7tordHOoEYcKRVxGcAw7bxXjwiKGXaY17qXD+Q==} peerDependencies: @@ -5639,11 +5607,6 @@ packages: cpu: [x64] os: [win32] - '@valibot/to-json-schema@1.5.0': - resolution: {integrity: sha512-GE7DmSr1C2UCWPiV0upRH6mv0cCPsqYGs819fb6srCS1tWhyXrkGGe+zxUiwzn/L1BOfADH4sNjY/YHCuP8phQ==} - peerDependencies: - valibot: ^1.2.0 - '@visx/annotation@4.0.0': resolution: {integrity: sha512-+ZZVyEqtUuMxKb3C2yN30/lPybao9+B733nnG+raW9ztFE9/Z3M+vAT0X/lxZiTc3uL6ZJlP7xzZN2+LcydWsQ==} peerDependencies: @@ -7109,9 +7072,6 @@ packages: jiti: optional: true - esm-env@1.2.2: - resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - espree@10.4.0: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7822,9 +7782,6 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-rpc-2.0@1.7.1: - resolution: {integrity: sha512-JqZjhjAanbpkXIzFE7u8mE/iFblawwlXtONaCvRqI+pyABVz7B4M1EUNpyVW+dZjqgQ2L5HFmZCmOCgUKm00hg==} - json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -9351,9 +9308,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sqids@0.3.0: - resolution: {integrity: sha512-lOQK1ucVg+W6n3FhRwwSeUijxe93b51Bfz5PMRMihVf1iVkl82ePQG7V5vwrhzB11v0NtsR25PSZRGiSomJaJw==} - sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -9600,9 +9554,6 @@ packages: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tmcp@1.20.0: - resolution: {integrity: sha512-dcDximKQBGqLP/aEAVA26HcWRHhKipstg1w0fbDDJ0HcFZ6lolLU1YYmStYEn/73f534i7WrDNcjRfRYdV9CoA==} - tmp@0.2.7: resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} engines: {node: '>=14.14'} @@ -9819,9 +9770,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - uri-template-matcher@1.1.2: - resolution: {integrity: sha512-uZc1h12jdO3m/R77SfTEOuo6VbMhgWznaawKpBjRGSJb7i91x5PgI37NQJtG+Cerxkk0yr1pylBY2qG1kQ+aEQ==} - url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -9913,22 +9861,6 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - valibot@1.2.0: - resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - - valibot@1.5.0: - resolution: {integrity: sha512-nil6AkP2TChWL43Z5uJ6GTxX01CUA+g8LWUM+N/rB9NBbkUMaUsi9PUNzlUPgoKASgmx9f7eGOYpJ04/fSa6FQ==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - verkit@0.3.2: resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==} engines: {node: '>=18.12.0'} @@ -10293,15 +10225,15 @@ snapshots: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.8 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@8.1.1)) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.8 + '@babel/traverse': 7.29.8(supports-color@8.1.1) '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -10392,17 +10324,26 @@ snapshots: '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.8 + '@babel/traverse': 7.29.8(supports-color@8.1.1) '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.8 + '@babel/traverse': 7.29.8(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -10915,11 +10856,21 @@ snapshots: '@babel/helper-plugin-utils': 7.29.7 optional: true + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.7(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.7(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7(supports-color@8.1.1) @@ -11139,18 +11090,6 @@ snapshots: '@babel/parser': 7.29.8 '@babel/types': 7.29.8 - '@babel/traverse@7.29.8': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.8 - '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.8 - '@babel/template': 7.29.7 - '@babel/types': 7.29.8 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.29.8(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.29.7 @@ -11783,6 +11722,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint-react/eslint-plugin@5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@eslint-react/shared': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + eslint: 10.8.1(jiti@1.21.7) + eslint-plugin-react-dom: 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-jsx: 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-naming-convention: 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-rsc: 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-web-api: 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + eslint-plugin-react-x: 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@eslint-react/eslint-plugin@5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-react/shared': 5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) @@ -11918,7 +11871,7 @@ snapshots: '@eslint/config-array@0.23.5': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.6 transitivePeerDependencies: - supports-color @@ -12179,6 +12132,18 @@ snapshots: - supports-color - typescript + '@frontify/oxlint-config-react@0.0.2(eslint@10.8.1(jiti@1.21.7))(oxlint@1.67.0(oxlint-tsgolint@0.23.0))(typescript@5.9.3)': + dependencies: + '@eslint-react/eslint-plugin': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/kit': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@frontify/oxlint-config-basic': 0.0.2(eslint@10.8.1(jiti@1.21.7))(oxlint@1.67.0(oxlint-tsgolint@0.23.0)) + oxlint: 1.67.0(oxlint-tsgolint@0.23.0) + transitivePeerDependencies: + - '@eslint/json' + - eslint + - supports-color + - typescript + '@frontify/oxlint-config-react@0.0.2(eslint@10.8.1(jiti@2.7.0))(oxlint@1.67.0(oxlint-tsgolint@0.23.0))(typescript@5.9.3)': dependencies: '@eslint-react/eslint-plugin': 5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) @@ -13921,17 +13886,6 @@ snapshots: '@types/react': 18.3.31 react: 18.3.1 - '@storybook/addon-mcp@10.6.0(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1))(typescript@5.9.3)': - dependencies: - '@tmcp/adapter-valibot': 0.1.5(tmcp@1.20.0(typescript@5.9.3))(valibot@1.5.0(typescript@5.9.3)) - '@tmcp/transport-http': 0.8.5(tmcp@1.20.0(typescript@5.9.3)) - storybook: 10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1) - tmcp: 1.20.0(typescript@5.9.3) - valibot: 1.5.0(typescript@5.9.3) - transitivePeerDependencies: - - '@tmcp/auth' - - typescript - '@storybook/builder-vite@10.6.0(storybook@10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1))(vite@6.4.3(@types/node@22.20.1)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0))': dependencies: storybook: 10.6.0(@types/react@18.3.31)(prettier@3.9.6)(react@18.3.1) @@ -14259,23 +14213,6 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tmcp/adapter-valibot@0.1.5(tmcp@1.20.0(typescript@5.9.3))(valibot@1.5.0(typescript@5.9.3))': - dependencies: - '@standard-schema/spec': 1.1.0 - '@valibot/to-json-schema': 1.5.0(valibot@1.5.0(typescript@5.9.3)) - tmcp: 1.20.0(typescript@5.9.3) - valibot: 1.5.0(typescript@5.9.3) - - '@tmcp/session-manager@0.2.1(tmcp@1.20.0(typescript@5.9.3))': - dependencies: - tmcp: 1.20.0(typescript@5.9.3) - - '@tmcp/transport-http@0.8.5(tmcp@1.20.0(typescript@5.9.3))': - dependencies: - '@tmcp/session-manager': 0.2.1(tmcp@1.20.0(typescript@5.9.3)) - esm-env: 1.2.2 - tmcp: 1.20.0(typescript@5.9.3) - '@tony.ganchev/eslint-plugin-header@3.4.4(eslint@10.8.1(jiti@1.21.7))': dependencies: eslint: 10.8.1(jiti@1.21.7) @@ -14550,7 +14487,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) '@typescript-eslint/types': 8.60.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -14609,6 +14546,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.60.1(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.8.1(jiti@1.21.7) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.60.1(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.60.1 @@ -14646,7 +14595,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) '@typescript-eslint/types': 8.60.1 '@typescript-eslint/visitor-keys': 8.60.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.6 semver: 7.8.5 tinyglobby: 0.2.17 @@ -15128,10 +15077,6 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@valibot/to-json-schema@1.5.0(valibot@1.5.0(typescript@5.9.3))': - dependencies: - valibot: 1.5.0(typescript@5.9.3) - '@visx/annotation@4.0.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@visx/drag': 4.0.0(@types/react@18.3.31)(react@18.3.1) @@ -15355,9 +15300,9 @@ snapshots: '@vitejs/plugin-react@4.7.0(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0))': dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7) + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7(supports-color@8.1.1)) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7(supports-color@8.1.1)) '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 @@ -15367,9 +15312,9 @@ snapshots: '@vitejs/plugin-react@5.2.0(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0))': dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7) + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7(supports-color@8.1.1)) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7(supports-color@8.1.1)) '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 @@ -15387,7 +15332,7 @@ snapshots: obug: 2.1.4 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 5.0.0(@types/node@24.13.3)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.11.2)(vite@6.4.3(@types/node@24.13.3)(jiti@1.21.7)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) + vitest: 5.0.0(@types/node@24.13.3)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.11.2)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) '@vitest/expect@3.2.4': dependencies: @@ -15443,7 +15388,7 @@ snapshots: pathe: 2.0.3 sirv: 3.0.2 tinyrainbow: 3.1.1 - vitest: 5.0.0(@types/node@24.13.3)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.11.2)(vite@6.4.3(@types/node@24.13.3)(jiti@1.21.7)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) + vitest: 5.0.0(@types/node@24.13.3)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.11.2)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)) '@vitest/utils@3.2.4': dependencies: @@ -15506,10 +15451,6 @@ snapshots: '@zip.js/zip.js@2.8.11': {} - acorn-jsx@5.3.2(acorn@8.16.0): - dependencies: - acorn: 8.16.0 - acorn-jsx@5.3.2(acorn@8.18.0): dependencies: acorn: 8.18.0 @@ -16859,6 +16800,28 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-react-x@5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3): + dependencies: + '@eslint-react/ast': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/core': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/eslint': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/jsx': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/shared': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@eslint-react/var': 5.8.10(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.60.1 + '@typescript-eslint/type-utils': 8.60.1(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@10.8.1(jiti@1.21.7))(typescript@5.9.3) + compare-versions: 6.1.1 + eslint: 10.8.1(jiti@1.21.7) + string-ts: 2.3.1 + ts-api-utils: 2.5.0(typescript@5.9.3) + ts-pattern: 5.9.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + eslint-plugin-react-x@5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3): dependencies: '@eslint-react/ast': 5.8.10(eslint@10.8.1(jiti@2.7.0))(typescript@5.9.3) @@ -17018,8 +16981,6 @@ snapshots: transitivePeerDependencies: - supports-color - esm-env@1.2.2: {} - espree@10.4.0: dependencies: acorn: 8.18.0 @@ -17028,8 +16989,8 @@ snapshots: espree@11.2.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) eslint-visitor-keys: 5.0.1 esprima@4.0.1: {} @@ -17682,8 +17643,6 @@ snapshots: json-parse-even-better-errors@2.3.1: {} - json-rpc-2.0@1.7.1: {} - json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -19177,7 +19136,7 @@ snapshots: react-docgen@8.0.3: dependencies: '@babel/core': 7.29.7 - '@babel/traverse': 7.29.8 + '@babel/traverse': 7.29.8(supports-color@8.1.1) '@babel/types': 7.29.8 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 @@ -19653,8 +19612,6 @@ snapshots: sprintf-js@1.0.3: {} - sqids@0.3.0: {} - sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -19944,16 +19901,6 @@ snapshots: dependencies: tldts-core: 6.1.86 - tmcp@1.20.0(typescript@5.9.3): - dependencies: - '@standard-schema/spec': 1.1.0 - json-rpc-2.0: 1.7.1 - sqids: 0.3.0 - uri-template-matcher: 1.1.2 - valibot: 1.2.0(typescript@5.9.3) - transitivePeerDependencies: - - typescript - tmp@0.2.7: {} to-regex-range@5.0.1: @@ -20200,8 +20147,6 @@ snapshots: dependencies: punycode: 2.3.1 - uri-template-matcher@1.1.2: {} - url@0.11.4: dependencies: punycode: 1.4.1 @@ -20280,14 +20225,6 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - valibot@1.2.0(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - - valibot@1.5.0(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - verkit@0.3.2: {} verror@1.10.0: @@ -20327,6 +20264,25 @@ snapshots: - rollup - supports-color + vite-plugin-dts@4.5.4(@types/node@24.13.3)(rollup@4.62.4)(supports-color@8.1.1)(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)): + dependencies: + '@microsoft/api-extractor': 7.59.0(@types/node@24.13.3) + '@rollup/pluginutils': 5.3.0(rollup@4.62.4) + '@volar/typescript': 2.4.27 + '@vue/language-core': 2.2.0(typescript@5.9.3) + compare-versions: 6.1.1 + debug: 4.4.3(supports-color@8.1.1) + kolorist: 1.8.0 + local-pkg: 1.1.2 + magic-string: 0.30.21 + typescript: 5.9.3 + optionalDependencies: + vite: 6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + vite-plugin-dts@4.5.4(@types/node@24.13.3)(rollup@4.62.4)(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)): dependencies: '@microsoft/api-extractor': 7.59.0(@types/node@24.13.3) @@ -20374,6 +20330,17 @@ snapshots: - supports-color - typescript + vite-tsconfig-paths@5.1.4(supports-color@8.1.1)(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + globrex: 0.1.2 + tsconfck: 3.1.6(typescript@5.9.3) + optionalDependencies: + vite: 6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0) + transitivePeerDependencies: + - supports-color + - typescript + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.3(@types/node@24.13.3)(jiti@2.7.0)(sass@1.102.0)(tsx@4.23.11)(yaml@2.9.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) From 87002a9e64a7d5319d420d79e80ddcf0e1b5cdb0 Mon Sep 17 00:00:00 2001 From: Noah Waldner Date: Tue, 6 Oct 2026 16:34:31 +0200 Subject: [PATCH 3/4] add pointer for agents in head --- storybook-docs/.storybook/manager-head.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/storybook-docs/.storybook/manager-head.html b/storybook-docs/.storybook/manager-head.html index ebf6b4043e..1cbeb5d5aa 100644 --- a/storybook-docs/.storybook/manager-head.html +++ b/storybook-docs/.storybook/manager-head.html @@ -1,3 +1,14 @@ + + + +