@smarter.sh/ui-widgets 0.36.4-alpha.1 → 0.36.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ui-widgets.es.js","names":["_jsx","_Fragment","Fragment","packageJson","_Fragment","_Fragment","DOCS","STEPS","_Fragment","DOCS_BASE_URL","_Fragment","DOCS","wordpressLogo","drupalLogo","shopifyLogo","docusaurusLogo","materialformkdocsLogo","sphinxLogo","vitepressLogo","_Fragment","_Fragment","nodedotjsLogo","goLogo","_Fragment","_Fragment","dockerLogo","kubernetesLogo","terraformLogo","_Fragment","FEATURES","_Fragment","_Fragment","Fragment$1","PLACEHOLDER","catalog","gettext","django","msgid","ngettext","singular","plural","count","interpolate","message","value","values","name","placeholder","interpolateNodes","parts","last","match","index","jsx","Fragment","part","package_default","\"private\"","\"import\"","\"require\"","\"types\"","\"clean\"","\"build\"","\"lint\"","\"storybook\"","\"typecheck\"","\"test\"","\"react\"","\"eslint\"","\"globals\"","\"typescript\"","\"vitest\"","packageName","packageVersion","SESSION","Cli","className","line","WAYS_TO_HELP","BADGES","Contribute","way","badge","DOCS$2","EXTENSIONS","STEPS$1","Extensions","step","extension","DOCS_BASE_URL$1","CATALOG","STATS","COURSES","FORMATS","CourseChips","hidden","courses","course","Instructors","stat","row","format","docusaurus_default","drupal_default","materialformkdocs_default","shopify_default","sphinx_default","vitepress_default","wordpress_default","DOCS$1","INTEGRATIONS","Integrations","integration","MCP_SERVER_PATH","TOOLS","defaultServerUrl","McpServer","serverUrl","tool","go_default","nodedotjs_default","OPENAPI_URL","SDKS","Sdk","sdk","openapiUrl","DOCS","RESOURCES","PLUGIN_KINDS","kindInfo","kind","ResourceCard","info","node","locked","opens","classes","isRoot","childId","parent","ROOT_ID","countResources","seen","anonymous","visit","tree","depth","branchIds","ids","id","child","Branch","hasChildren","open","collapsed","childrenId","onToggle","ResourceTree","ownCollapsed","setOwnCollapsed","useState","defaultCollapsed","label","next","current","STEPS","SelfHost","MARKETPLACE","FEATURES$1","VSCodeExtension","feature","DOCS_BASE_URL","FEATURES","WhatsNew"],"sources":["../../smarter-common/dist/lib/i18n.js","../../smarter-common/package.json","../../smarter-common/dist/lib/const.js","../../smarter-common/dist/components/TabbedListView/cookie.js","../../smarter-common/dist/lib/cache.js","../src/components/Cli/Component.tsx","../src/components/Contribute/Component.tsx","../src/components/Extensions/Component.tsx","../src/components/Instructors/Component.tsx","../src/assets/docusaurus.svg","../src/assets/drupal.svg","../src/assets/materialformkdocs.svg","../src/assets/shopify.svg","../src/assets/sphinx.svg","../src/assets/vitepress.svg","../src/assets/wordpress.svg","../src/components/Integrations/Component.tsx","../src/components/McpServer/Component.tsx","../src/assets/go.svg","../src/assets/nodedotjs.svg","../src/components/Sdk/Component.tsx","../src/components/ResourceTree/kinds.ts","../src/components/ResourceTree/ResourceCard.tsx","../src/components/ResourceTree/tree.ts","../src/components/ResourceTree/Component.tsx","../src/assets/docker.svg","../src/assets/kubernetes.svg","../src/assets/terraform.svg","../src/components/SelfHost/Component.tsx","../src/components/VSCodeExtension/Component.tsx","../src/components/WhatsNew/Component.tsx"],"sourcesContent":["import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Translation functions for the web console's React apps.\n *\n * The web console is translated with gettext. Django renders each page in the\n * user's language, and dashboard/base.html loads that language's message\n * catalog for the React apps from Django's JavaScriptCatalog view (the djangojs\n * domain), which defines window.django.gettext() and friends. These functions\n * call it, and fall back to the English source text when no catalog is loaded,\n * e.g. in tests and Storybook.\n *\n * Every message is English source text, and must be a string literal, so that\n * `npm run i18n:extract` can find it. Interpolate values afterwards, with\n * Python-style named placeholders, so that a translator can move them:\n *\n * @example\n * gettext(\"Secrets\");\n * interpolate(gettext(\"Rename secret %(name)s.\"), { name: secret.name });\n * ngettext(\"%(count)s secret\", \"%(count)s secrets\", n);\n * pgettext(\"verb\", \"Clone\");\n * // a React element inside a sentence:\n * interpolateNodes(gettext(\"Delete secret %(name)s?\"), { name: <strong>{secret.name}</strong> });\n *\n * A comment that begins with \"Translators:\" on the line before a call is copied\n * into the message catalog for the translator.\n */\nimport { Fragment } from \"react\";\nconst PLACEHOLDER = /%\\(([A-Za-z_][A-Za-z0-9_]*)\\)s/g;\nconst catalog = () => (typeof window === \"undefined\" ? undefined : window.django);\n/** Translates a message. */\nexport function gettext(msgid) {\n const django = catalog();\n return django?.gettext ? django.gettext(msgid) : msgid;\n}\n/** Translates a message that has a singular and a plural form, chosen by count. */\nexport function ngettext(singular, plural, count) {\n const django = catalog();\n if (django?.ngettext)\n return django.ngettext(singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/** Translates a message in a context, which tells apart two messages with the same English text. */\nexport function pgettext(context, msgid) {\n const django = catalog();\n return django?.pgettext ? django.pgettext(context, msgid) : msgid;\n}\n/** ngettext() in a context. */\nexport function npgettext(context, singular, plural, count) {\n const django = catalog();\n if (django?.npgettext)\n return django.npgettext(context, singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/**\n * Replaces each %(name)s placeholder in a translated message with values[name].\n * A placeholder with no value is left as it is, so that the mistake shows.\n */\nexport function interpolate(message, values) {\n return message.replace(PLACEHOLDER, (placeholder, name) => {\n const value = values[name];\n return value === undefined || value === null ? placeholder : String(value);\n });\n}\n/**\n * interpolate() for values that are React nodes, e.g. a name in <strong> inside a\n * sentence. Returns a fragment of the message's text and the values, in the order\n * that the (translated) message puts them.\n */\nexport function interpolateNodes(message, values) {\n const parts = [];\n let last = 0;\n for (const match of message.matchAll(PLACEHOLDER)) {\n const [placeholder, name] = match;\n const index = match.index ?? 0;\n if (index > last)\n parts.push(message.slice(last, index));\n parts.push(name in values ? values[name] : placeholder);\n last = index + placeholder.length;\n }\n if (last < message.length)\n parts.push(message.slice(last));\n return (_jsx(_Fragment, { children: parts.map((part, index) => (_jsx(Fragment, { children: part }, index))) }));\n}\n/** The language of the page, from the lang attribute that Django renders on <html>, e.g. \"en\". */\nexport function currentLanguage() {\n if (typeof document === \"undefined\")\n return \"en\";\n return document.documentElement.lang || \"en\";\n}\n//# sourceMappingURL=i18n.js.map","{\n \"name\": \"@smarter/common\",\n \"private\": true,\n \"version\": \"0.2.0\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"npm run clean && tsc -p tsconfig.build.json && rsync -a --prune-empty-dirs --include='/' --include='.css' --exclude='*' src/ dist/\",\n \"build:dist-manifest\": \"node --input-type=module -e \\\"import fs from 'node:fs'; const pkg = JSON.parse(fs.readFileSync('package.json','utf8')); const out = { name: pkg.name, version: pkg.version, type: pkg.type, main: './index.js', types: './index.d.ts', peerDependencies: pkg.peerDependencies ?? {}, dependencies: pkg.dependencies ?? {} }; fs.writeFileSync('dist/package.json', JSON.stringify(out, null, 2) + '\\\\n');\\\"\",\n \"pack:tgz\": \"npm pack --ignore-scripts\",\n \"lint\": \"eslint .\",\n \"storybook\": \"storybook dev -p 6006\",\n \"build-storybook\": \"storybook build\",\n \"typecheck\": \"tsc -b\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\"\n },\n \"peerDependencies\": {\n \"react\": \"^19\",\n \"react-dom\": \"^19\"\n },\n \"dependencies\": {\n \"date-fns\": \"^4.4.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@storybook/addon-a11y\": \"^10.6.1\",\n \"@storybook/addon-docs\": \"^10.6.1\",\n \"@storybook/react-vite\": \"^10.6.1\",\n \"@types/node\": \"^26.6.3\",\n \"@types/react\": \"^19.3.0\",\n \"@types/react-dom\": \"^19.3.0\",\n \"eslint\": \"^10.11.0\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-storybook\": \"^10.6.1\",\n \"globals\": \"^17.13.0\",\n \"react\": \"^19.3.0\",\n \"react-dom\": \"^19.3.0\",\n \"storybook\": \"^10.6.1\",\n \"typescript\": \"~6.0.2\",\n \"typescript-eslint\": \"^8.71.0\",\n \"vitest\": \"^5.0.3\"\n }\n}\n","import packageJson from \"../../package.json\" with { type: \"json\" };\nexport const packageName = packageJson.name;\nexport const packageVersion = packageJson.version;\nexport const loggerPrefix = `[Smarter ${packageName} v${packageVersion}]`;\n//# sourceMappingURL=const.js.map","import { loggerPrefix } from \"../../lib/const\";\nimport { packageName, packageVersion } from \"../../lib/const\";\nconst COOKIE_NAME_PREFIX = `${packageName}_v${packageVersion}`;\nconst getUrlOrigin = () => {\n if (typeof window !== \"undefined\" && typeof window.location?.origin === \"string\") {\n return window.location.origin;\n }\n return \"http://localhost\";\n};\nexport const getUrlPath = (url) => {\n console.debug(loggerPrefix, `getUrlPath(): Extracting path from URL: ${url}`);\n return new URL(url, getUrlOrigin()).pathname;\n};\n/**\n * Sets a cookie to store the llmclient count for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @param llmclientCount - The number of llmclients to store.\n * @param days - Number of days until the cookie expires.\n */\nexport const setCookieForUrl = (url, llmclientCount, days) => {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n const expires = new Date(Date.now() + days * MS_PER_DAY).toUTCString();\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookieValue = `${cookieName}=${llmclientCount}; path=/; expires=${expires};`;\n try {\n document.cookie = cookieValue;\n console.debug(loggerPrefix, `setCookieForUrl(): ${cookieValue}`);\n }\n catch (e) {\n console.warn(loggerPrefix, \"setCookieForUrl(): Unable to set llmclient count cookie\", e);\n }\n};\n/**\n * Retrieves the llmclient count stored in a cookie for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @returns The number of llmclients stored in the cookie, or undefined if not found or invalid.\n */\nexport const getCookieForUrl = (url) => {\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookies = document.cookie.split(\";\").map((c) => c.trim());\n for (const cookie of cookies) {\n if (cookie.startsWith(cookieName + \"=\")) {\n const strVal = cookie.substring(cookieName.length + 1);\n const numVal = parseInt(strVal, 10);\n const retVal = isNaN(numVal) ? undefined : numVal;\n console.debug(loggerPrefix, `getCookieForUrl(): Retrieved cookie for ${cookieName}:`, retVal);\n return retVal;\n }\n }\n console.warn(loggerPrefix, `getCookieForUrl(): Cookie for ${cookieName} not found. If you are not under /, it may not be visible due to cookie path restrictions.`);\n return undefined;\n};\n//# sourceMappingURL=cookie.js.map","/**\n * Tabbed list cache utilities.\n *\n * Stores plugin objects in sessionStorage using a key scoped by API URL and slug,\n * with a one-week TTL and automatic cleanup of expired entries.\n */\nimport { loggerPrefix } from \"./const\";\nimport { packageName, packageVersion } from \"./const\";\nconst CACHE_PREFIX = `${packageName}_v${packageVersion}_objects_v1`;\nconst CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 1 week\n/**\n * Builds a stable sessionStorage key for a specific API endpoint and tab slug.\n *\n * @param apiUrl Base API URL used to scope cache entries by backend.\n * @param slug Tab or list identifier to isolate cached objects per view.\n * @returns A deterministic sessionStorage key.\n * @throws This function does not throw under normal operation.\n */\nexport const makeCacheKey = (apiUrl, slug) => {\n return `${CACHE_PREFIX}:${apiUrl}${slug}`;\n};\n/**\n * Reads and validates cached llmclient objects.\n *\n * Returns null for missing, invalid, or expired entries and removes expired\n * data to keep storage clean.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @returns The cached llmclient array when present and valid; otherwise `null`.\n * @throws No exceptions are propagated. JSON parse errors, sessionStorage access\n * failures, and other runtime errors are caught and treated as a cache miss.\n */\nexport const readCache = (key) => {\n try {\n const raw = sessionStorage.getItem(key);\n if (!raw) {\n console.debug(`${loggerPrefix} readCache() cache miss for`, key);\n return null;\n }\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed.ts !== \"number\" || !Array.isArray(parsed.objects)) {\n console.debug(`${loggerPrefix} readCache() cache invalid for`, key);\n return null;\n }\n if (Date.now() - parsed.ts > CACHE_TTL_MS) {\n console.debug(`${loggerPrefix} readCache() cache expired for`, key);\n sessionStorage.removeItem(key);\n return null;\n }\n console.debug(`${loggerPrefix} readCache() cache hit for`, key, \"with\", parsed.objects);\n return parsed.objects;\n }\n catch {\n return null;\n }\n};\n/**\n * Persists llmclient objects to sessionStorage with a write timestamp.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @param objects LLMClient objects to cache for subsequent reads.\n * @returns `void`.\n * @throws No exceptions are propagated. sessionStorage write failures (for\n * example quota exceeded or private mode restrictions) are caught and ignored.\n */\nexport const writeCache = (key, objects) => {\n try {\n console.debug(`${loggerPrefix} writeCache() writing sessionStorage cache for`, key, \"with\", objects.length, \"objects\");\n const payload = { ts: Date.now(), objects };\n sessionStorage.setItem(key, JSON.stringify(payload));\n }\n catch {\n // ignore quota/private-mode errors\n }\n};\n//# sourceMappingURL=cache.js.map","/**\n * Cli dashboard widget.\n *\n * This component renders a dashboard call-to-action card for the Smarter\n * command-line interface, styled as a terminal window that shows a typical\n * session (install, configure, apply, deploy, list), followed by links to\n * download the CLI and open its documentation.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the CLI promotion widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Cli />\n * <Cli className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst SESSION = [\n { command: \"brew install smarter\", comment: gettext(\"or apt, choco, docker\") },\n { command: \"smarter configure\" },\n { command: \"smarter apply -f llmclient.yaml\" },\n { command: \"smarter deploy llmclient customer_support\" },\n { command: \"smarter get llmclients\" },\n];\n\nexport interface CliProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Cli({ className = \"col-xl-4\" }: CliProps) {\n return (\n <>\n <section id=\"cli\" aria-label={gettext(\"CLI\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Engage widget 4 */}\n <div className=\"card border-transparent h-100 cli-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n {/* begin::Title */}\n <div className=\"fs-2x fw-bold text-white mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Smarter %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"CLI%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-success border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-400 fs-6 mb-7\">{gettext(\"Powerful tools for managing your AI resources.\")}</p>\n {/* end::Title */}\n {/* begin::Terminal */}\n <div className=\"cli-terminal\" aria-label={gettext(\"Example CLI session\")}>\n <div className=\"cli-terminal-bar\">\n <span className=\"cli-dot cli-dot-red\"></span>\n <span className=\"cli-dot cli-dot-yellow\"></span>\n <span className=\"cli-dot cli-dot-green\"></span>\n </div>\n <pre className=\"cli-terminal-body\">\n {SESSION.map((line) => (\n <div key={line.command}>\n <span className=\"cli-prompt\">$ </span>\n {line.command}\n {line.comment && <span className=\"cli-comment\"> # {line.comment}</span>}\n </div>\n ))}\n <div>\n <span className=\"cli-prompt\">$ </span>\n <span className=\"cli-cursor\"></span>\n </div>\n </pre>\n </div>\n {/* end::Terminal */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7\">\n <a href=\"https://smarter.sh/cli/\" target=\"_blank\" className=\"btn btn-sm btn-success fw-semibold me-2\">\n {gettext(\"Download\")}\n </a>\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/smarter-cli.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Engage widget 4 */}\n </section>\n </>\n );\n}\n\nexport default Cli;\n","/**\n * Contribute dashboard widget.\n *\n * This component renders a dashboard contribution-focused card that encourages community\n * participation in the Smarter project: a few ways to help, the repository's activity\n * badges, links to the contributing guide and the open issues, and a supporting\n * illustration.\n *\n * :returns: A JSX fragment containing the contribution engagement widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Contribute />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst WAYS_TO_HELP = [\n gettext(\"Fix a bug\"),\n gettext(\"Improve the docs\"),\n gettext(\"Write a test\"),\n gettext(\"Build an extension\"),\n];\n\nconst BADGES = [\n {\n href: \"https://github.com/smarter-sh/smarter/releases\",\n src: \"https://img.shields.io/github/v/release/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"Latest Release\"),\n },\n {\n href: \"https://github.com/smarter-sh/smarter/stargazers\",\n src: \"https://img.shields.io/github/stars/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"GitHub Stars\"),\n },\n {\n href: \"https://github.com/smarter-sh/smarter/network/members\",\n src: \"https://img.shields.io/github/forks/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"GitHub Forks\"),\n },\n];\n\nfunction Contribute() {\n return (\n <>\n {/* begin::Engage widget 4 */}\n <section\n id=\"contribute\"\n aria-label={gettext(\"Contribute\")}\n className=\"card border-transparent h-100 contribute-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n {/* The Keen theme's illustration, which the page serves along with the Keen stylesheet. */}\n <img\n src=\"/static/assets/media/illustrations/dozzy-1/13.png\"\n className=\"position-absolute bottom-0 end-0 me-3 h-250px d-none d-md-block contribute-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-gray-900 mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Contribute to %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"Smarter%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 contribute-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-5 z-index-2 contribute-lede\">\n {gettext(\n \"Start small, learn by doing, and help improve Smarter while you discover how real Python projects work.\",\n )}\n </p>\n {/* end::Title */}\n {/* begin::Ways to help */}\n <ul className=\"contribute-chips z-index-2\" aria-label={gettext(\"Ways to help\")}>\n {WAYS_TO_HELP.map((way) => (\n <li key={way} className=\"contribute-chip\">\n {way}\n </li>\n ))}\n </ul>\n {/* end::Ways to help */}\n {/* begin::Badges */}\n <ul className=\"contribute-badges z-index-2\">\n {BADGES.map((badge) => (\n <li key={badge.alt}>\n <a href={badge.href} target=\"_blank\" rel=\"noopener noreferrer\">\n <img src={badge.src} alt={badge.alt} />\n </a>\n </li>\n ))}\n </ul>\n {/* end::Badges */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/guides/contributing.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold me-2 contribute-btn\"\n >\n {gettext(\"Contributing guide\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh/smarter/issues\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Open issues\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </section>\n {/* end::Engage widget 4 */}\n </>\n );\n}\n\nexport default Contribute;\n","/**\n * Extensions dashboard widget.\n *\n * This component renders a card about Smarter Extensions: Python packages\n * that add tools to a platform's LLMs, installed by superusers from the\n * signed Smarter Extension registry without a redeploy, and listed in an\n * LLMClient's ``spec.extensions``. It shows the three official extensions\n * with their trust badge and a link to its GitHub repository, a manifest that uses one, and links to the\n * documentation, the registry, and the guide to building an extension.\n *\n * :returns: A JSX fragment containing the Extensions widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Extensions />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst DOCS = \"https://docs.smarter.sh/en/latest\";\n\nconst EXTENSIONS = [\n {\n slug: \"weather\",\n name: \"Weather\",\n description: gettext(\"Current weather and a 24-hour forecast for any location.\"),\n icon: \"ki-cloud\",\n },\n {\n slug: \"calculator\",\n name: \"Calculator\",\n description: gettext(\"Evaluates math expressions exactly, so that LLMs don't guess.\"),\n icon: \"ki-calculator\",\n },\n {\n slug: \"date-calculator\",\n name: \"Date Calculator\",\n description: gettext(\"Date arithmetic: differences, adding and subtracting days.\"),\n icon: \"ki-calendar\",\n },\n];\n\nconst STEPS = [\n gettext(\"Browse the registry\"),\n gettext(\"Install, signature-checked\"),\n gettext(\"Enable, then list it in a manifest\"),\n];\n\nfunction Extensions() {\n return (\n <>\n <section\n id=\"extensions\"\n aria-label={gettext(\"Extensions\")}\n className=\"card border-transparent h-100 extensions-card\"\n data-bs-theme=\"light\"\n >\n <div className=\"card-body ps-xl-15\">\n <div className=\"row g-7 align-items-center\">\n {/* begin::Pitch */}\n <div className=\"col-md-6\">\n <span className=\"extensions-eyebrow\">{gettext(\"New in 0.27\")}</span>\n <div className=\"fs-2x fw-bold text-gray-900 mt-3 mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Add tools with %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"Extensions%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 extensions-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-4\">\n {gettext(\n \"Python packages that give your LLMs new tools, installed from the signed Smarter Extension registry without a redeploy.\",\n )}\n </p>\n <ol className=\"extensions-steps\">\n {STEPS.map((step, index) => (\n <li key={step}>\n <span className=\"extensions-step-number\">{index + 1}</span>\n {step}\n </li>\n ))}\n </ol>\n <div className=\"d-flex flex-wrap gap-2 mt-5\">\n <a\n href={`${DOCS}/smarter-platform/extensions.html`}\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold extensions-btn\"\n >\n {gettext(\"How extensions work\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh/extensions-registry\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Browse the registry\")}\n </a>\n <a\n href={`${DOCS}/smarter-framework/smarter-extensions.html`}\n target=\"_blank\"\n className=\"align-self-center fw-semibold extensions-link\"\n >\n {gettext(\"Build one →\")}\n </a>\n </div>\n </div>\n {/* end::Pitch */}\n {/* begin::Registry */}\n <div className=\"col-md-6\">\n <ul className=\"extensions-list\" aria-label={gettext(\"Official extensions\")}>\n {EXTENSIONS.map((extension) => (\n <li key={extension.slug}>\n <a\n href={`https://github.com/smarter-sh/smarter-extension-${extension.slug}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"extensions-item\"\n >\n <span className=\"extensions-icon\">\n <i className={`ki-outline ${extension.icon} fs-2`}></i>\n </span>\n <span className=\"extensions-text\">\n <span className=\"extensions-name\">\n {extension.name}\n <span className=\"extensions-badge\">{gettext(\"Official\")}</span>\n </span>\n <span className=\"extensions-description\">{extension.description}</span>\n </span>\n </a>\n </li>\n ))}\n </ul>\n <pre className=\"extensions-manifest\" aria-label={gettext(\"An LLMClient manifest that uses an extension\")}>\n <span className=\"extensions-key\">kind</span>: <span className=\"extensions-str\">LLMClient</span>\n {\"\\n\"}\n <span className=\"extensions-key\">spec</span>:{\"\\n\"}\n {\" \"}\n <span className=\"extensions-key\">extensions</span>:{\"\\n\"}\n {\" \"}- <span className=\"extensions-str\">weather</span>\n </pre>\n </div>\n {/* end::Registry */}\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default Extensions;\n","/**\n * Instructors dashboard widget.\n *\n * This component renders a promotional card for teaching with Smarter: the\n * Smarter Instructor Guide and the Free Course Designs, 21 ready-to-teach\n * course designs (19 micro courses and 2 master classes) that are free and\n * open source. It shows the catalog's headline numbers, two scrolling\n * ribbons of every course, each linked to its course design, the three\n * formats of a micro course, and links to the catalog and the guide.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the instructors call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Instructors />\n * <Instructors className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst DOCS_BASE_URL = \"https://docs.smarter.sh\";\nconst CATALOG = `${DOCS_BASE_URL}/smarter-instructors/example-courses`;\n\ninterface Course {\n name: string;\n path: string;\n}\n\nconst STATS = [\n { value: \"21\", label: gettext(\"course designs\") },\n { value: \"19\", label: gettext(\"micro courses\") },\n { value: \"2\", label: gettext(\"master classes\") },\n { value: \"$0\", label: gettext(\"license fees\") },\n];\n\nconst COURSES: Course[] = [\n { name: gettext(\"Prompt Engineering\"), path: \"micro-courses/prompt-engineering\" },\n { name: gettext(\"Building AI Applications\"), path: \"micro-courses/ai-applications\" },\n { name: gettext(\"Agentic Development\"), path: \"micro-courses/agentic-development\" },\n { name: \"Kubernetes\", path: \"micro-courses/kubernetes\" },\n { name: gettext(\"Django Master Class\"), path: \"master-classes/django-master-class\" },\n { name: gettext(\"The Economics of AI\"), path: \"micro-courses/ai-economics\" },\n { name: gettext(\"AI Governance\"), path: \"micro-courses/ai-governance\" },\n { name: gettext(\"API Design\"), path: \"micro-courses/api-design\" },\n { name: gettext(\"Backend Development\"), path: \"micro-courses/backend-development\" },\n { name: \"Docker\", path: \"micro-courses/docker\" },\n { name: gettext(\"AI Application Development Master Class\"), path: \"master-classes/ai-application-development\" },\n { name: gettext(\"Extension Development\"), path: \"micro-courses/extension-development\" },\n { name: gettext(\"Front End Development\"), path: \"micro-courses/frontend-development\" },\n { name: gettext(\"Full Stack Development\"), path: \"micro-courses/full-stack-development\" },\n { name: gettext(\"Infrastructure as Code\"), path: \"micro-courses/infrastructure-as-code\" },\n { name: gettext(\"Open Source Participation\"), path: \"micro-courses/open-source\" },\n { name: gettext(\"Secure Software\"), path: \"micro-courses/secure-software\" },\n { name: gettext(\"Self-Hosting Open Models\"), path: \"micro-courses/self-hosted-models\" },\n { name: gettext(\"Software Architecture\"), path: \"micro-courses/software-architecture\" },\n { name: gettext(\"Software Quality\"), path: \"micro-courses/software-quality\" },\n { name: gettext(\"Documentation with Sphinx\"), path: \"micro-courses/sphinx-documentation\" },\n];\n\nconst FORMATS = [\n { value: \"8 hours\", label: gettext(\"classroom bootcamp\") },\n { value: \"2 weeks\", label: gettext(\"online course\") },\n { value: \"4 weeks\", label: gettext(\"online course\") },\n];\n\nfunction CourseChips({ courses, hidden }: { courses: Course[]; hidden?: boolean }) {\n return (\n <ul className=\"instructors-ribbon-set\" aria-hidden={hidden || undefined}>\n {courses.map((course) => (\n <li key={course.path}>\n <a\n href={`${CATALOG}/${course.path}.html`}\n target=\"_blank\"\n className=\"instructors-chip\"\n tabIndex={hidden ? -1 : undefined}\n >\n {course.name}\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\nexport interface InstructorsProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Instructors({ className = \"col-xl-6\" }: InstructorsProps) {\n return (\n <>\n <section id=\"instructors\" aria-label={gettext(\"Instructors\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Instructors widget */}\n <div className=\"card border-transparent h-100 instructors-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n {/* The Keen theme's illustration, which the page serves along with the Keen stylesheet. */}\n <img\n src=\"/static/assets/media/illustrations/sigma-1/2.png\"\n className=\"position-absolute top-0 end-0 h-175px me-5 mt-5 d-none d-md-block instructors-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <span className=\"instructors-eyebrow z-index-2\">{gettext(\"Free for instructors\")}</span>\n <div className=\"fs-2x fw-bold text-white mt-3 mb-2 z-index-2 instructors-headline\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Teach AI with a %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"real platform%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 instructors-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-6 z-index-2 instructors-lede\">\n {gettext(\n \"Ready-to-teach course designs, from prompt engineering for non-programmers to Kubernetes for platform engineers, with schedules, graded assignments, rubrics and capstone projects.\",\n )}\n </p>\n {/* end::Title */}\n {/* begin::Stats */}\n <dl className=\"instructors-stats z-index-2\">\n {STATS.map((stat) => (\n <div key={stat.label} className=\"instructors-stat\">\n <dt>{stat.label}</dt>\n <dd>{stat.value}</dd>\n </div>\n ))}\n </dl>\n {/* end::Stats */}\n {/* begin::Courses */}\n <nav className=\"instructors-ribbons z-index-2\" aria-label={gettext(\"Free courses\")}>\n {[COURSES.slice(0, 11), COURSES.slice(11)].map((courses, row) => (\n <div key={row} className=\"instructors-ribbon\">\n <div className={`instructors-ribbon-track${row ? \" instructors-ribbon-reverse\" : \"\"}`}>\n <CourseChips courses={courses} />\n <CourseChips courses={courses} hidden />\n </div>\n </div>\n ))}\n </nav>\n {/* end::Courses */}\n {/* begin::Formats */}\n <div className=\"instructors-formats z-index-2\">\n <span className=\"instructors-formats-label\">{gettext(\"Every micro course, three ways\")}</span>\n <ul>\n {FORMATS.map((format) => (\n <li key={format.value}>\n <strong>{format.value}</strong> {format.label}\n </li>\n ))}\n </ul>\n </div>\n {/* end::Courses */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a href={`${CATALOG}/index.html`} target=\"_blank\" className=\"btn btn-sm fw-semibold me-2 instructors-btn\">\n {gettext(\"Browse the free courses\")}\n </a>\n <a\n href={`${DOCS_BASE_URL}/smarter-instructor.html`}\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Instructor Guide\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Instructors widget */}\n </section>\n </>\n );\n}\n\nexport default Instructors;\n","export default \"data:image/svg+xml,%3csvg%20fill='%233ECC5F'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDocusaurus%3c/title%3e%3cpath%20d='M2.462%2022.201h12.321a2.466%202.466%200%200%200%202.369-1.854c.026.004.052.008.079.008a.621.621%200%200%200%20.615-.615.621.621%200%200%200-.615-.615c-.027%200-.053.004-.079.007l-.014-.055a.62.62%200%200%200%20.378-.568.621.621%200%200%200-.615-.615.608.608%200%200%200-.371.127l-.042-.041a.606.606%200%200%200%20.125-.368c0-.67-.919-.858-1.181-.241l-.055-.014c.003-.026.008-.052.008-.079a.622.622%200%200%200-.616-.615.621.621%200%200%200-.615.615h-.096a.617.617%200%200%200-1.033%200h-.717v-2.461h2.461c.115%200%20.226-.017.331-.047a.307.307%200%201%200%20.529-.304l.02-.021c.052.04.116.064.186.064h.002c.337%200%20.428-.463.117-.591l.007-.028c.013.001.026.004.039.004a.31.31%200%200%200%20.308-.308.31.31%200%200%200-.308-.308c-.013%200-.026.003-.039.004a.28.28%200%200%201-.007-.027c.327-.13-.028-.745-.305-.528l-.02-.021a.307.307%200%200%200%20.062-.184c-.011-.326-.454-.416-.591-.12a1.238%201.238%200%200%200-.32-.047h-2.143a2.465%202.465%200%200%201%202.132-1.23h7.385V9.894l-8.618-.539a1.315%201.315%200%200%201-1.229-1.308c0-.688.542-1.265%201.229-1.307l8.618-.539v-1.23a2.473%202.473%200%200%200-2.462-2.462H8.615l-.307-.533a.356.356%200%200%200-.616%200l-.307.533-.308-.533a.355.355%200%200%200-.615%200l-.308.533-.308-.533a.355.355%200%200%200-.615%200l-.308.533-.008.001-.51-.51a.354.354%200%200%200-.594.159l-.168.628-.639-.171a.357.357%200%200%200-.436.435l.172.639-.628.169a.356.356%200%200%200-.16.594l.51.51v.008l-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308a2.463%202.463%200%200%201-2.13-1.231A2.465%202.465%200%200%200%200%2019.74c0%201.35%201.112%202.46%202.462%202.461zm19.692-5.204v2.743a2.473%202.473%200%200%201-2.461%202.461h-.001%201.231a2.466%202.466%200%200%200%202.383-1.854c.026.004.052.008.079.008A.621.621%200%200%200%2024%2019.74a.621.621%200%200%200-.615-.615c-.027%200-.053.004-.079.007l-.014-.055a.62.62%200%200%200%20.378-.568.621.621%200%200%200-.615-.615.608.608%200%200%200-.371.127l-.042-.041a.612.612%200%200%200%20.125-.368.623.623%200%200%200-.613-.615zm-4.067%202.62h2.223c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-2.223a.845.845%200%200%200%200-.246zm-.33-1.231h2.553c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-2.553a.845.845%200%200%200%200-.246zm-1.026-1.231h3.579c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-3.474a.85.85%200%200%200-.105-.246zm3.579-.984h-6.159a.126.126%200%200%201-.123-.123c0-.068.056-.123.123-.123h6.159c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123zm1.844-3.816v2.462c.115%200%20.225-.017.331-.047a.308.308%200%201%200%20.528-.304l.021-.021c.052.04.116.064.186.064a.312.312%200%200%200%20.307-.308.306.306%200%200%200-.189-.283l.007-.028c.013.001.026.004.04.004a.312.312%200%200%200%20.307-.308.312.312%200%200%200-.307-.308c-.014%200-.027.003-.04.004l-.007-.027a.31.31%200%200%200-.118-.592.306.306%200%200%200-.186.064l-.021-.021a.3.3%200%200%200%20.063-.184c-.011-.326-.454-.416-.591-.12a1.24%201.24%200%200%200-.321-.047zm-6.059%202.339h4.215c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-4.451a.564.564%200%200%200%20.073-.19.553.553%200%200%200%20.163-.056zm.454-1.208h3.761c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-3.772a.552.552%200%200%200%20.011-.246zm5.605-6.225h-.004c-.381.013-.561.393-.719.729-.166.35-.294.578-.504.572-.233-.009-.366-.271-.506-.549-.162-.32-.347-.682-.734-.668-.375.013-.556.344-.715.636-.169.311-.285.5-.507.491-.237-.008-.363-.222-.509-.469-.163-.275-.351-.585-.731-.574-.368.013-.549.294-.709.542-.169.262-.287.421-.513.412-.243-.009-.368-.186-.513-.391-.163-.231-.347-.491-.726-.479-.36.013-.541.243-.701.446-.151.192-.27.344-.52.335h-.005a.126.126%200%200%200-.123.123c0%20.066.053.121.119.123.371.012.559-.222.723-.429.145-.184.27-.343.516-.352.237-.01.348.138.516.375.16.226.341.482.705.495.382.013.566-.273.729-.525.145-.226.271-.421.511-.429.22-.008.34.166.51.453.159.271.34.577.712.59.385.014.57-.322.732-.619.14-.257.273-.5.507-.508.221-.005.336.196.506.533.159.314.339.67.717.684h.021c.377%200%20.556-.378.714-.713.14-.297.273-.576.501-.588zM7.385%206.509a.312.312%200%200%201-.308-.308c-.01-.532-.378-.911-.927-.922-.528-.011-.888.432-.919.922-.011.168-.139.307-.308.308a.31.31%200%200%201-.308-.308c0-.848.69-1.538%201.539-1.538.848%200%201.538.69%201.538%201.538a.312.312%200%200%201-.307.308zm9.846-2.308a.31.31%200%200%201%20.308.308.31.31%200%200%201-.308.308.31.31%200%200%201-.308-.308.31.31%200%200%201%20.308-.308zm2.461-.153a.31.31%200%200%201%20.307.308.31.31%200%200%201-.308.308h-.001a.31.31%200%200%201-.307-.308.31.31%200%200%201%20.308-.308z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%230678BE'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDrupal%3c/title%3e%3cpath%20d='M15.78%205.113C14.09%203.425%2012.48%201.815%2011.998%200c-.48%201.815-2.09%203.425-3.778%205.113-2.534%202.53-5.405%205.4-5.405%209.702a9.184%209.185%200%201018.368%200c0-4.303-2.871-7.171-5.405-9.702M6.72%2016.954c-.563-.019-2.64-3.6%201.215-7.416l2.55%202.788a.218.218%200%2001-.016.325c-.61.625-3.204%203.227-3.527%204.126-.066.186-.164.18-.222.177M12%2021.677a3.158%203.158%200%2001-3.158-3.159%203.291%203.291%200%2001.787-2.087c.57-.696%202.37-2.655%202.37-2.655s1.774%201.988%202.367%202.649a3.09%203.09%200%2001.792%202.093A3.158%203.158%200%200112%2021.677m6.046-5.123c-.068.15-.223.398-.431.405-.371.014-.411-.177-.686-.583-.604-.892-5.864-6.39-6.848-7.455-.866-.935-.122-1.595.223-1.94C10.736%206.547%2012%205.285%2012%205.285s3.766%203.574%205.336%206.016c1.57%202.443%201.029%204.556.71%205.253'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23526CFE'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eMaterial%20for%20MkDocs%3c/title%3e%3cpath%20d='m17.029%2018.772.777%201.166-5.417%202.709L0%2016.451V4.063l5.417-2.709%205.298%207.948%207.867-5.24L24%201.354V16.84l-5.417%202.709zm2.023-13.827v13.253l3.949-1.975V2.97zM5.076%202.642%201.458%204.45%2012.73%2021.358l3.618-1.809z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%237AB55C'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eShopify%3c/title%3e%3cpath%20d='M15.337%2023.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136-1.275-1.274-1.439-1.411c-.045-.037-.075-.057-.121-.074l-.914%2021.104h.023zM11.71%2011.305s-.81-.424-1.774-.424c-1.447%200-1.504.906-1.504%201.141%200%201.232%203.24%201.715%203.24%204.629%200%202.295-1.44%203.76-3.406%203.76-2.354%200-3.54-1.465-3.54-1.465l.646-2.086s1.245%201.066%202.28%201.066c.675%200%20.975-.545.975-.932%200-1.619-2.654-1.694-2.654-4.359-.034-2.237%201.571-4.416%204.827-4.416%201.257%200%201.875.361%201.875.361l-.945%202.715-.02.01zM11.17.83c.136%200%20.271.038.405.135-.984.465-2.064%201.639-2.508%203.992-.656.213-1.293.405-1.889.578C7.697%203.75%208.951.84%2011.17.84V.83zm1.235%202.949v.135c-.754.232-1.583.484-2.394.736.466-1.777%201.333-2.645%202.085-2.971.193.501.309%201.176.309%202.1zm.539-2.234c.694.074%201.141.867%201.429%201.755-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871v.002zm2.992%201.289c-.02%200-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209%2011.669%200%2011.265%200%208.159%200%206.675%203.877%206.21%205.846c-1.194.365-2.063.636-2.16.674-.675.213-.694.232-.772.87-.075.462-1.83%2014.063-1.83%2014.063L15.009%2024l.927-21.166z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23000000'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eSphinx%3c/title%3e%3cpath%20d='M16.284%2019.861c0-.654.177-1.834.393-2.623.499-1.822.774-4.079.497-4.079-.116%200-.959.762-1.873%201.694-3.472%203.54-7.197%205.543-10.312%205.543-1.778%200-2.987-.45-4.154-1.545C.128%2018.186%200%2017.858%200%2016.703c0-1.188.117-1.468.909-2.175.718-.642%201.171-.813%202.157-.813.76.171%201.21.16%201.457.461.251.296.338%201.265.035%201.832-.162.303-.585.491-1.105.491-.49%200-.77-.116-.669-.278.315-.511-.135-.857-.713-.548-.699.374-.711%201.698-.021%202.322.969.878%203.65%201.208%205.262.648%201.743-.605%204.022-2.061%205.841-3.732l1.6-1.469-2.088-.013c-2.186-.012-3.608-.273-8.211-1.506-1.531-.41-3.003-.765-3.271-.789-.304-.026-.503-.274-.487-.656.027-.646.378-1.127.793-1.308.249-.109%201.977-.274%203.809-.761%207.136-1.898%207.569-1.629%2012.323-.426%201.553.393%203.351.821%204.147.835%201.227.022%201.493.124%201.74.666.16.351.291.686.291.745%200%20.058-.695.424-1.545.813-3.12%201.428-4.104%202.185-3.088%203.635.421.602.412.666-.14%201.052-.323.227-.59.687-.593%201.022-.009.908-.583%202.856-1.417%203.624l-.732.675v-1.189Zm1.594-8.328c1.242-.346%201.994-.738%203.539-1.562-1.272-.372-4.462-.895-4.462-.895-2.354-.472-2.108-.448-2.214.071a3.475%203.475%200%200%201-.45%201.105c-.541.848-2.521%201.026-3.656.483-.356-.171-.714-.821-.709-1.283.007-.65-.362-.801-.598-.714-.191.07-.813.079-2.179.448-4.514%201.217-5.132%201.078-2.189%201.495.353.05%202.223.572%203.136.815%202.239.597%202.658.641%205.556.581%202.015-.042%202.858-.163%204.226-.544ZM.732%206.258c.056-.577.088-.702%201.692-1.025.919-.185%203.185-.785%205.036-1.333%204.254-1.26%205.462-1.263%209.873-.026%201.904.535%204.037.973%204.74.975%201.097.002%201.668.487%201.668.487.505%201.16.412%201.24-1.558%201.24-1.374%200-2.558-.232-4.385-.857-1.389-.476-3.369-.923-4.451-1.004-1.974-.149-1.971-.15-8.072%201.529-1.072.295-2.553.624-3.29.732l-1.342.196.089-.914Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%235C73E7'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eVitePress%3c/title%3e%3cpath%20d='M17.029.0014a1.8382%201.8382%200%200%200-.1875.0176L4.0845%201.8334C3.0779%201.9767%202.3767%202.9196%202.518%203.939l2.5604%2018.457c.1415%201.0193%201.0735%201.7292%202.08%201.586l12.757-1.8165c1.0066-.1433%201.7078-1.0861%201.5664-2.1054L18.9215%201.6049C18.7889.6493%2017.961-.035%2017.029.0014Zm.127.9316c.4271.027.7915.3549.8534.8008l2.5604%2018.457c.0707.5097-.28.9812-.7831%201.0528L7.0296%2023.058c-.5033.0717-.9683-.2833-1.039-.793L3.4302%203.81c-.0707-.5097.2799-.9811.7832-1.0528L16.9704.9408A.9066.9066%200%200%201%2017.156.933zm-3.6443%205.3541L9.9668%207.5215a.1364.1364%200%200%200-.0898.1406l.3183%203.8692c.0075.0911.0994.1497.1836.1171l.9824-.3789c.092-.0355.1894.0373.1836.1368l-.0898%201.539c-.006.1036.1005.1763.1933.1328l.5997-.2812c.093-.0435.1976.031.1914.1347l-.1465%202.418c-.0092.1513.195.2037.2578.0664l.041-.0918%202.123-6.4238c.0355-.1076-.0658-.2104-.1718-.1738l-1.0176.3515c-.0955.033-.1917-.0491-.1777-.1504l.3437-2.4902a.1368.1368%200%200%200-.1426-.1562c-.016-.001-.0422.0084-.037.0058zm2.8223.7988a.2717.2717%200%200%200-.0801.0137L14%207.8496l-.0762.5606.4551-.1563c.5074-.1627.973.2955.8106.8027l-2.131%206.4493-.0526.1171c-.1268.2776-.4416.4304-.7383.3516-.2904-.077-.4911-.353-.4727-.6562l.1094-1.8086c-.5057.2578-.9731-.1473-.9473-.5938l.0567-.9765-.4532.1757c-.4144.1536-.8298-.1366-.8632-.543L9.453%208.5997l-3.0625-.123c-.2294-.0093-.3635.2552-.2226.4394l6.291%208.2305c.1293.169.391.1302.4668-.0684l3.668-9.6191c.072-.1889-.0765-.377-.2598-.373z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%2321759B'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eWordPress%3c/title%3e%3cpath%20d='M21.469%206.825c.84%201.537%201.318%203.3%201.318%205.175%200%203.979-2.156%207.456-5.363%209.325l3.295-9.527c.615-1.54.82-2.771.82-3.864%200-.405-.026-.78-.07-1.11m-7.981.105c.647-.03%201.232-.105%201.232-.105.582-.075.514-.93-.067-.899%200%200-1.755.135-2.88.135-1.064%200-2.85-.15-2.85-.15-.585-.03-.661.855-.075.885%200%200%20.54.061%201.125.09l1.68%204.605-2.37%207.08L5.354%206.9c.649-.03%201.234-.1%201.234-.1.585-.075.516-.93-.065-.896%200%200-1.746.138-2.874.138-.2%200-.438-.008-.69-.015C4.911%203.15%208.235%201.215%2012%201.215c2.809%200%205.365%201.072%207.286%202.833-.046-.003-.091-.009-.141-.009-1.06%200-1.812.923-1.812%201.914%200%20.89.513%201.643%201.06%202.531.411.72.89%201.643.89%202.977%200%20.915-.354%201.994-.821%203.479l-1.075%203.585-3.9-11.61.001.014zM12%2022.784c-1.059%200-2.081-.153-3.048-.437l3.237-9.406%203.315%209.087c.024.053.05.101.078.149-1.12.393-2.325.609-3.582.609M1.211%2012c0-1.564.336-3.05.935-4.39L7.29%2021.709C3.694%2019.96%201.212%2016.271%201.211%2012M12%200C5.385%200%200%205.385%200%2012s5.385%2012%2012%2012%2012-5.385%2012-12S18.615%200%2012%200'/%3e%3c/svg%3e\"","/**\n * Integrations dashboard widget.\n *\n * This component renders a promotional card for the Smarter Chat\n * integrations, which add a deployed LLMClient's chat to a third-party\n * platform with @smarter.sh/ui-chat's embed script: the WordPress plugin, the\n * Drupal module, the Shopify app, the Google Tag Manager template, and the\n * plugins for the Docusaurus, MkDocs, Sphinx and VitePress documentation site\n * generators. Each integration is a logo tile that links to its\n * documentation, followed by links to the embedding guide and the source code.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the integrations call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Integrations />\n * <Integrations className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport docusaurusLogo from \"../../assets/docusaurus.svg\";\nimport drupalLogo from \"../../assets/drupal.svg\";\nimport materialformkdocsLogo from \"../../assets/materialformkdocs.svg\";\nimport shopifyLogo from \"../../assets/shopify.svg\";\nimport sphinxLogo from \"../../assets/sphinx.svg\";\nimport vitepressLogo from \"../../assets/vitepress.svg\";\nimport wordpressLogo from \"../../assets/wordpress.svg\";\n\n// The Google Tag Manager logo and the illustration are the Keen theme's. They stay at their\n// /static/assets/ paths, which the page serves along with the Keen stylesheet.\nconst DOCS = \"https://docs.smarter.sh/en/latest/smarter-framework\";\n\nconst INTEGRATIONS = [\n {\n name: \"WordPress\",\n logo: wordpressLogo,\n docs: `${DOCS}/smarter-wordpress.html`,\n },\n {\n name: \"Drupal\",\n logo: drupalLogo,\n docs: `${DOCS}/smarter-drupal.html`,\n },\n {\n name: \"Shopify\",\n logo: shopifyLogo,\n docs: `${DOCS}/smarter-shopify.html`,\n },\n {\n name: \"Google Tag Manager\",\n logo: \"/static/assets/media/svg/brand-logos/google-tag-manager.svg\",\n docs: `${DOCS}/smarter-gtm.html`,\n },\n {\n name: \"Docusaurus\",\n logo: docusaurusLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"MkDocs\",\n logo: materialformkdocsLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"Sphinx\",\n logo: sphinxLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"VitePress\",\n logo: vitepressLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n];\n\nexport interface IntegrationsProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Integrations({ className = \"col-xl-4\" }: IntegrationsProps) {\n return (\n <>\n <section id=\"integrations\" aria-label={gettext(\"Integrations\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Integrations widget */}\n <div className=\"card border-transparent h-100 integrations-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n <img\n src=\"/static/assets/media/illustrations/sketchy-1/17-dark.png\"\n className=\"position-absolute top-0 end-0 h-125px me-3 mt-3 integrations-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-white mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Put your chatbot %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"everywhere%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-warning border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-white opacity-75 fs-6 mb-7 z-index-2 integrations-lede\">\n {gettext(\"Add Smarter Chat to the sites your users already visit, with one setting.\")}\n </p>\n {/* end::Title */}\n {/* begin::Logos */}\n <ul className=\"integrations-grid z-index-2\">\n {INTEGRATIONS.map((integration) => (\n <li key={integration.name}>\n <a\n href={integration.docs}\n target=\"_blank\"\n className=\"integrations-tile hover-elevate-up\"\n title={integration.name}\n >\n <span className=\"integrations-logo\">\n <img src={integration.logo} alt=\"\" />\n </span>\n <span className=\"integrations-name\">{integration.name}</span>\n </a>\n </li>\n ))}\n </ul>\n {/* end::Logos */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a\n href={`${DOCS}/smarter-chat/embedding.html`}\n target=\"_blank\"\n className=\"btn btn-sm btn-warning fw-semibold me-2\"\n >\n {gettext(\"Embedding guide\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n aria-label={gettext(\"Integrations source code\")}\n >\n {gettext(\"GitHub\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Integrations widget */}\n </section>\n </>\n );\n}\n\nexport default Integrations;\n","/**\n * McpServer dashboard widget.\n *\n * This component renders a promotional card for the Smarter Project MCP\n * Server, which every platform runs at ``/api/v1/mcp/smarter-project/``: a\n * read-only Model Context Protocol server, without authentication, that answers\n * questions about The Smarter Project from its own code and documentation. It\n * shows the command that adds this platform's server to Claude Code, its main\n * tools, and a link to its documentation.\n *\n * :param serverUrl: The MCP server's url, in the command. Defaults to this platform's, on the page's\n * own domain. A page outside the web console, such as smarter.sh, passes a platform's absolute url.\n * :type serverUrl: str\n * :returns: A JSX fragment containing the MCP server call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <McpServer />\n * <McpServer serverUrl=\"https://platform.smarter.sh/api/v1/mcp/smarter-project/\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\n/** The server's path, on this platform's own domain. */\nconst MCP_SERVER_PATH = \"/api/v1/mcp/smarter-project/\";\n\nconst TOOLS = [\"search_documentation\", \"search_code\", \"read_file\"];\n\nexport interface McpServerProps {\n /** The MCP server's url, in the command. */\n serverUrl?: string;\n}\n\n/** This platform's server, on the page's own domain. Rendered without a browser, the path alone. */\nconst defaultServerUrl = () =>\n typeof window === \"undefined\" ? MCP_SERVER_PATH : `${window.location.origin}${MCP_SERVER_PATH}`;\n\nfunction McpServer({ serverUrl = defaultServerUrl() }: McpServerProps) {\n return (\n <>\n <section id=\"mcp-server\" aria-label={gettext(\"MCP Server\")} className=\"card border-transparent h-100 mcp-card\">\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n <span className=\"mcp-eyebrow\">{gettext(\"Smarter MCP Server\")}</span>\n <div className=\"fs-2x fw-bold mt-3 mb-2 mcp-headline\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Ask your %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"AI assistant%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 mcp-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-5 mcp-lede\">\n {gettext(\"This platform answers questions about itself from its own code and docs, for any MCP client.\")}\n </p>\n <pre className=\"mcp-command\" aria-label={gettext(\"Add this platform's MCP server to Claude Code\")}>\n <span className=\"mcp-prompt\">$ </span>claude mcp add --transport http smarter-project {serverUrl}\n </pre>\n <ul className=\"mcp-tools\" aria-label={gettext(\"Tools\")}>\n {TOOLS.map((tool) => (\n <li key={tool}>{tool}</li>\n ))}\n </ul>\n <div className=\"mt-auto pt-6\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-platform/smarter-project-mcp-server.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold mcp-btn\"\n >\n {gettext(\"Documentation\")}\n </a>\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default McpServer;\n","export default \"data:image/svg+xml,%3csvg%20fill='%2300ADD8'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eGo%3c/title%3e%3cpath%20d='M1.811%2010.231c-.047%200-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046%200%20.058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047%2011.306c-.047%200-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047%200%20.07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828%201.075c-.047%200-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047%200%20.07.035.07.082l-.023.28c0%20.047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204%201.274-1.192%202.22.011.935.654%201.706%201.577%201.835.795.105%201.46-.175%201.987-.77.105-.13.198-.27.315-.434H10.47c-.245%200-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315%200%2001.292-.187h4.253c-.023.316-.023.631-.07.947a4.983%204.983%200%2001-.958%202.29c-.841%201.11-1.94%201.8-3.33%201.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086%201.928-1.776%203.272-2.02%201.098-.2%202.15-.07%203.096.571.62.41%201.063.97%201.356%201.648.07.105.023.164-.117.2m3.868%206.461c-1.064-.024-2.034-.328-2.852-1.029a3.665%203.665%200%2001-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122%201.881-1.706%203.272-1.95%201.192-.21%202.314-.095%203.33.595.923.63%201.496%201.484%201.648%202.605.198%201.578-.257%202.863-1.344%203.962-.771.783-1.718%201.273-2.805%201.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045%202.033-.21.912.234%201.835%201.075%202.21.643.28%201.285.244%201.905-.07.923-.48%201.425-1.228%201.484-2.233z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%235FA04E'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eNode.js%3c/title%3e%3cpath%20d='M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383%20c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076%20c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0%20L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392%20c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021%20c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921%20c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603%20v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z%20M19.099,13.993%20c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233%20c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081%20c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833%20c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402%20c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253%20c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z'/%3e%3c/svg%3e\"","/**\n * Sdk dashboard widget.\n *\n * This component renders a promotional card for the Smarter developer SDKs:\n * the smarter-chat NPM package (@smarter.sh/ui-chat), the Node.js SDK\n * (@smarter.sh/api), the Python PyPI library (smarter-api) and the Go module\n * (github.com/smarter-sh/smarter-golang). Each SDK shows its logo, links to its\n * package registry, and shows its install command, followed by links to the\n * APIs and SDKs documentation and to a platform's OpenAPI document.\n *\n * :param openapiUrl: The OpenAPI document that the API reference button opens. Defaults to this\n * platform's, which every web console serves. A page outside the web console, such as\n * smarter.sh, passes a platform's absolute url.\n * :type openapiUrl: str\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the SDK call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Sdk />\n * <Sdk openapiUrl=\"https://platform.smarter.sh/docs/openapi/\" className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport goLogo from \"../../assets/go.svg\";\nimport nodedotjsLogo from \"../../assets/nodedotjs.svg\";\n\n/** This platform's OpenAPI document, which every platform serves in its web console. */\nconst OPENAPI_URL = \"/docs/openapi/\";\n\nexport interface SdkProps {\n /** The OpenAPI document that the API reference button opens. */\n openapiUrl?: string;\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\n// The React and Python logos, and the illustration below, are the Keen theme's. They stay at their\n// /static/assets/ paths, which the page serves along with the Keen stylesheet.\nconst SDKS = [\n {\n name: \"smarter-chat NPM Package\",\n href: \"https://www.npmjs.com/package/@smarter.sh/ui-chat\",\n logo: \"/static/assets/media/svg/brand-logos/react.svg\",\n install: \"npm install @smarter.sh/ui-chat\",\n },\n {\n name: \"Node.js SDK\",\n href: \"https://www.npmjs.com/package/@smarter.sh/api\",\n logo: nodedotjsLogo,\n install: \"npm install @smarter.sh/api\",\n },\n {\n name: \"Python PyPi Library\",\n href: \"https://pypi.org/project/smarter-api/\",\n logo: \"/static/assets/media/svg/brand-logos/python-5.svg\",\n install: \"pip install smarter-api\",\n },\n {\n name: \"Go SDK\",\n href: \"https://pkg.go.dev/github.com/smarter-sh/smarter-golang\",\n logo: goLogo,\n install: \"go get github.com/smarter-sh/smarter-golang\",\n },\n];\n\nfunction Sdk({ openapiUrl = OPENAPI_URL, className = \"col-xl-4\" }: SdkProps) {\n return (\n <>\n <section id=\"sdk\" aria-label={gettext(\"SDK\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::SDKs widget */}\n <div className=\"card border-transparent h-100 sdk-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n <img\n src=\"/static/assets/media/illustrations/dozzy-1/4.png\"\n className=\"position-absolute top-0 end-0 h-100px me-1 mt-1\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-gray-900 mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Build with the %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"SDKs%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-danger border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-7 z-index-2 sdk-lede\">\n {gettext(\"Typed access to your Smarter resources, in the language you already use.\")}\n </p>\n {/* end::Title */}\n {/* begin::SDKs */}\n <ul className=\"sdk-list z-index-2\">\n {SDKS.map((sdk) => (\n <li key={sdk.name} className=\"sdk-item\">\n <span className=\"sdk-logo\">\n <img src={sdk.logo} alt=\"\" />\n </span>\n <span className=\"sdk-text\">\n <a href={sdk.href} target=\"_blank\" className=\"sdk-name\">\n {sdk.name}\n </a>\n <span className=\"sdk-install\">{sdk.install}</span>\n </span>\n </li>\n ))}\n </ul>\n {/* end::SDKs */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap gap-2 mt-auto pt-7 z-index-2\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/apis-and-sdks.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-danger fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n <a href={openapiUrl} className=\"btn btn-sm btn-light-danger fw-semibold\">\n {gettext(\"API reference\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh\"\n target=\"_blank\"\n className=\"btn btn-sm btn-dark fw-semibold\"\n aria-label={gettext(\"SDK source code\")}\n >\n {gettext(\"GitHub\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::SDKs widget */}\n </section>\n </>\n );\n}\n\nexport default Sdk;\n","/**\n * How the tree presents each kind of SAM resource: its color, what it does for the LLMClient, in a few words, and\n * its page in the documentation. Kinds of the same family, e.g. the plugins, share them. Each kind's icon is the\n * backend's, in the tree's nodes: see SAMKinds.icon() in smarter.apps.api.v1.manifests.enum.\n */\nimport { gettext } from \"@smarter/common\";\n\n/** The documentation that the cards link to. */\nexport const DOCS = \"https://docs.smarter.sh/en/latest\";\n\n/** A Bootstrap color of the web console's theme, for a kind's icon and the accent of its card. */\nexport type Tone = \"primary\" | \"info\" | \"success\" | \"warning\" | \"danger\" | \"dark\" | \"secondary\";\n\nexport interface KindInfo {\n tone: Tone;\n /** What the resource does for the LLMClient that uses it, in a few words. */\n role: string;\n /** The kind's page in the documentation. */\n docsUrl: string;\n}\n\nconst RESOURCES = `${DOCS}/smarter-resources`;\n/** The kinds of plugin, which share a presentation. */\nexport const PLUGIN_KINDS = [\n \"Plugin\",\n \"StaticPlugin\",\n \"ApiPlugin\",\n \"SkillPlugin\",\n \"SqlPlugin\",\n \"WebsearchPlugin\",\n \"ImageSearchPlugin\",\n];\n\n/**\n * The presentation of a kind of resource. A kind that the tree doesn't know, e.g. a new one, has a neutral color\n * and the documentation of the manifests.\n *\n * @param kind - The SAM kind, e.g. \"SqlPlugin\", or \"Extension\", which is not a SAM kind.\n */\nexport function kindInfo(kind: string): KindInfo {\n if (PLUGIN_KINDS.includes(kind)) {\n return {\n tone: \"success\",\n role: gettext(\"A tool that the LLM can call\"),\n docsUrl: `${RESOURCES}/smarter-llmtool.html`,\n };\n }\n switch (kind) {\n case \"LLMClient\":\n return {\n tone: \"primary\",\n role: gettext(\"A chat with an LLM, its tools, and its rules\"),\n docsUrl: `${RESOURCES}/smarter-llmclient.html`,\n };\n case \"Provider\":\n return {\n tone: \"info\",\n role: gettext(\"The LLM provider whose models it prompts\"),\n docsUrl: `${RESOURCES}/smarter-provider.html`,\n };\n case \"MCPClient\":\n return {\n tone: \"info\",\n role: gettext(\"The tools of a remote MCP server\"),\n docsUrl: `${RESOURCES}/smarter-mcpclient.html`,\n };\n case \"Extension\":\n return {\n tone: \"success\",\n role: gettext(\"Tools installed from an extension package\"),\n docsUrl: `${DOCS}/smarter-framework/smarter-extensions.html`,\n };\n case \"Guardrail\":\n return {\n tone: \"dark\",\n role: gettext(\"Screens prompts and responses\"),\n docsUrl: `${RESOURCES}/smarter-guardrail.html`,\n };\n case \"ApiConnection\":\n return {\n tone: \"warning\",\n role: gettext(\"How a plugin reaches a remote api\"),\n docsUrl: `${RESOURCES}/smarter-connection.html`,\n };\n case \"SqlConnection\":\n return {\n tone: \"warning\",\n role: gettext(\"How a plugin reaches a database\"),\n docsUrl: `${RESOURCES}/smarter-connection.html`,\n };\n case \"Secret\":\n return {\n tone: \"danger\",\n role: gettext(\"An encrypted credential\"),\n docsUrl: `${RESOURCES}/smarter-secret.html`,\n };\n case \"SmarterAuthToken\":\n return {\n tone: \"warning\",\n role: gettext(\"The api key that its url requires\"),\n docsUrl: `${RESOURCES}/smarter-authtoken.html`,\n };\n case \"CustomDomain\":\n return {\n tone: \"info\",\n role: gettext(\"The domain that it is served from\"),\n docsUrl: `${RESOURCES}/smarter-custom-domain.html`,\n };\n case \"LLMHost\":\n case \"LLMHostCompute\":\n return {\n tone: \"secondary\",\n role: gettext(\"Compute that hosts an LLM\"),\n docsUrl: `${RESOURCES}/smarter-llmhost.html`,\n };\n case \"Orchestrator\":\n return {\n tone: \"primary\",\n role: gettext(\"Coordinates several LLMClients\"),\n docsUrl: `${RESOURCES}/smarter-orchestrator.html`,\n };\n case \"Proxy\":\n return {\n tone: \"secondary\",\n role: gettext(\"Forwards requests to an LLM provider\"),\n docsUrl: `${RESOURCES}/smarter-proxy.html`,\n };\n case \"Vectorstore\":\n return {\n tone: \"info\",\n role: gettext(\"Documents, indexed for search\"),\n docsUrl: `${RESOURCES}/smarter-vectorstore.html`,\n };\n case \"Vectorsearch\":\n return {\n tone: \"info\",\n role: gettext(\"Searches a vector store\"),\n docsUrl: `${RESOURCES}/smarter-vectorsearch.html`,\n };\n case \"Budget\":\n return {\n tone: \"secondary\",\n role: gettext(\"Limits what it may spend\"),\n docsUrl: `${RESOURCES}/smarter-budget.html`,\n };\n default:\n return {\n tone: \"secondary\",\n role: gettext(\"A SAM resource\"),\n docsUrl: `${DOCS}/smarter-framework/smarter-manifests.html`,\n };\n }\n}\n","/**\n * One resource of the tree, as a card: its kind, its name and its owner. The card opens the resource's manifest\n * page, where its manifest can be edited, in a new tab. A resource that the user may not read is a locked card,\n * with its kind and record locator only.\n */\nimport { gettext, interpolate } from \"@smarter/common\";\n\nimport { kindInfo } from \"./kinds\";\nimport type { ResourceTreeNode } from \"./types\";\n\ninterface ResourceCardProps {\n node: ResourceTreeNode;\n /** The LLMClient itself, at the root of the tree, whose card stands out. */\n isRoot?: boolean;\n}\n\nexport default function ResourceCard({ node, isRoot = false }: ResourceCardProps) {\n const info = kindInfo(node.kind);\n const locked = !node.readable;\n const opens = !locked && !!node.url;\n const name = node.name ?? node.recordLocator ?? node.kind;\n const classes = [\n \"architecture-card\",\n `architecture-card-${info.tone}`,\n isRoot ? \"architecture-card-root\" : \"\",\n locked ? \"architecture-card-locked\" : \"\",\n opens ? \"architecture-card-link\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <article className={classes} aria-label={`${node.kind} ${name}`}>\n <span className={`architecture-card-icon text-${info.tone} bg-light-${info.tone}`} aria-hidden=\"true\">\n <i className={`ki-outline ki-${locked ? \"lock-3\" : node.icon}`} data-testid=\"architecture-card-icon\" />\n </span>\n <div className=\"architecture-card-body\">\n <div className=\"d-flex align-items-center gap-2\">\n {/* the kind is a product term, e.g. SqlPlugin, which isn't translated. */}\n <span className={`architecture-card-kind text-${info.tone}`}>{node.kind}</span>\n <a\n href={info.docsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"architecture-card-docs text-gray-500 text-hover-primary\"\n title={interpolate(gettext(\"About %(kind)s, in the documentation\"), { kind: node.kind })}\n >\n <i className=\"ki-outline ki-information-5 fs-7\" aria-hidden=\"true\" />\n <span className=\"visually-hidden\">\n {interpolate(gettext(\"About %(kind)s, in the documentation\"), { kind: node.kind })}\n </span>\n </a>\n </div>\n {locked ? (\n <>\n <div className=\"architecture-card-name text-gray-600\">{gettext(\"You can't read this resource\")}</div>\n <div className=\"architecture-card-meta\">\n <code className=\"architecture-card-locator\">{node.recordLocator}</code>\n </div>\n </>\n ) : (\n <>\n {opens ? (\n <a\n href={node.url ?? undefined}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"architecture-card-name stretched-link\"\n title={interpolate(gettext(\"Open the manifest of %(name)s in a new tab\"), { name })}\n >\n {name}\n </a>\n ) : (\n <div className=\"architecture-card-name\">{name}</div>\n )}\n <div className=\"architecture-card-meta\" title={info.role}>\n <span className=\"text-truncate\">{info.role}</span>\n </div>\n {node.owner && (\n <div className=\"architecture-card-meta\">\n <i className=\"ki-outline ki-profile-circle fs-7 me-1\" aria-hidden=\"true\" />\n <span className=\"visually-hidden\">{gettext(\"Owner\")}: </span>\n <span className=\"text-truncate\">{node.owner}</span>\n </div>\n )}\n </>\n )}\n </div>\n {opens && (\n <span className=\"architecture-card-open text-gray-400\" aria-hidden=\"true\">\n <i className=\"ki-outline ki-arrow-up-right\" />\n </span>\n )}\n </article>\n );\n}\n","/** The tree's arithmetic: what the toolbar counts, and which nodes the Collapse all button closes. */\nimport type { ResourceTreeNode } from \"./types\";\n\n/** A node's id in the tree: the indexes of its ancestors and itself, e.g. \"0.2.1\", since a resource can appear twice. */\nexport type NodeId = string;\n\n/** The id of a node's child. */\nexport const childId = (parent: NodeId, index: number): NodeId => `${parent}.${index}`;\n\n/** The root's id. */\nexport const ROOT_ID: NodeId = \"0\";\n\n/** The number of resources in the tree, counting a resource that appears twice once. */\nexport function countResources(tree: ResourceTreeNode): number {\n const seen = new Set<string>();\n let anonymous = 0;\n const visit = (node: ResourceTreeNode) => {\n if (node.recordLocator) seen.add(node.recordLocator);\n else anonymous += 1;\n node.children.forEach(visit);\n };\n visit(tree);\n return seen.size + anonymous;\n}\n\n/** The number of levels below the root: 0 for an LLMClient that uses nothing. */\nexport function depth(tree: ResourceTreeNode): number {\n return tree.children.length ? 1 + Math.max(...tree.children.map(depth)) : 0;\n}\n\n/** The ids of the nodes that have children, except the root, which is always open. */\nexport function branchIds(tree: ResourceTreeNode): NodeId[] {\n const ids: NodeId[] = [];\n const visit = (node: ResourceTreeNode, id: NodeId) => {\n if (id !== ROOT_ID && node.children.length) ids.push(id);\n node.children.forEach((child, index) => visit(child, childId(id, index)));\n };\n visit(tree, ROOT_ID);\n return ids;\n}\n","/**\n * ResourceTree widget: an LLMClient's architecture, the tree of the SAM resources that it is built from. Each\n * resource is a card, and beneath it, joined by lines, are the cards of the resources that it uses. A resource that\n * uses others has a button that hides them, or shows them again. The web console's Architecture tab\n * (@smarter/llmclient-architecture) renders it with its toolbar, and smarter.sh beside each assistant's live chat.\n *\n * The tree is controlled, with collapsed and onToggle, or keeps which resources are collapsed itself.\n *\n * :param tree: The tree, as the web console's architecture view returns it.\n * :type tree: ResourceTreeNode\n * :param collapsed: The ids of the resources whose children are hidden, for a controlled tree.\n * :type collapsed: ReadonlySet<NodeId>\n * :param onToggle: Hides or shows a resource's children, for a controlled tree.\n * :type onToggle: (id: NodeId) => void\n * :param label: The tree's accessible name. Defaults to \"The resources that this LLMClient is built from\".\n * :type label: str\n * :param defaultCollapsed: For a tree that isn't controlled: whether it opens with every resource's children hidden,\n * but the root's, so that it shows the LLMClient and the resources that it uses directly.\n * :type defaultCollapsed: bool\n *\n * :example:\n *\n * <ResourceTree tree={tree} />\n * <ResourceTree tree={tree} defaultCollapsed />\n */\nimport { useState } from \"react\";\nimport { gettext, interpolate, ngettext } from \"@smarter/common\";\n\nimport \"./styles.css\";\nimport ResourceCard from \"./ResourceCard\";\nimport { branchIds, childId, ROOT_ID, type NodeId } from \"./tree\";\nimport type { ResourceTreeNode } from \"./types\";\n\ninterface BranchProps {\n node: ResourceTreeNode;\n id: NodeId;\n collapsed: ReadonlySet<NodeId>;\n onToggle: (id: NodeId) => void;\n}\n\nfunction Branch({ node, id, collapsed, onToggle }: BranchProps) {\n const isRoot = id === ROOT_ID;\n const hasChildren = node.children.length > 0;\n const open = isRoot || !collapsed.has(id);\n const name = node.name ?? node.kind;\n const childrenId = `architecture-children-${id.replaceAll(\".\", \"-\")}`;\n return (\n <li className={`architecture-node${isRoot ? \" architecture-node-root\" : \"\"}`}>\n <div className=\"architecture-row\">\n {!isRoot &&\n (hasChildren ? (\n <button\n type=\"button\"\n className=\"architecture-toggle btn btn-icon btn-sm btn-light\"\n aria-expanded={open}\n aria-controls={childrenId}\n title={\n open\n ? interpolate(gettext(\"Hide what %(name)s uses\"), { name })\n : interpolate(gettext(\"Show what %(name)s uses\"), { name })\n }\n onClick={() => onToggle(id)}\n >\n <i className={`ki-outline ki-${open ? \"minus-square\" : \"plus-square\"} fs-4`} aria-hidden=\"true\" />\n <span className=\"visually-hidden\">\n {open\n ? interpolate(gettext(\"Hide what %(name)s uses\"), { name })\n : interpolate(gettext(\"Show what %(name)s uses\"), { name })}\n </span>\n </button>\n ) : (\n <span className=\"architecture-toggle-spacer\" aria-hidden=\"true\" />\n ))}\n <ResourceCard node={node} isRoot={isRoot} />\n {hasChildren && !open && (\n <span className=\"architecture-hidden-count badge badge-light-secondary text-gray-700\">\n {interpolate(ngettext(\"%(count)s more\", \"%(count)s more\", node.children.length), {\n count: node.children.length,\n })}\n </span>\n )}\n </div>\n {hasChildren && open && (\n <ul className=\"architecture-children\" id={childrenId}>\n {node.children.map((child, index) => (\n <Branch\n key={childId(id, index)}\n node={child}\n id={childId(id, index)}\n collapsed={collapsed}\n onToggle={onToggle}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\nexport interface ResourceTreeProps {\n tree: ResourceTreeNode;\n /** The ids of the resources whose children are hidden, for a controlled tree. */\n collapsed?: ReadonlySet<NodeId>;\n /** Hides or shows a resource's children, for a controlled tree. */\n onToggle?: (id: NodeId) => void;\n /** The tree's accessible name. */\n label?: string;\n /** For a tree that isn't controlled: whether it opens with every resource's children hidden, but the root's. */\n defaultCollapsed?: boolean;\n}\n\nexport default function ResourceTree({\n tree,\n collapsed,\n onToggle,\n label,\n defaultCollapsed = false,\n}: ResourceTreeProps) {\n const [ownCollapsed, setOwnCollapsed] = useState<ReadonlySet<NodeId>>(\n () => new Set(defaultCollapsed ? branchIds(tree) : []),\n );\n const toggleOwn = (id: NodeId) =>\n setOwnCollapsed((current) => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n return (\n <ul className=\"architecture-tree\" aria-label={label ?? gettext(\"The resources that this LLMClient is built from\")}>\n <Branch node={tree} id={ROOT_ID} collapsed={collapsed ?? ownCollapsed} onToggle={onToggle ?? toggleOwn} />\n </ul>\n );\n}\n","export default \"data:image/svg+xml,%3csvg%20fill='%232496ED'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDocker%3c/title%3e%3cpath%20d='M13.983%2011.078h2.119a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.119a.185.185%200%2000-.185.185v1.888c0%20.102.083.185.185.185m-2.954-5.43h2.118a.186.186%200%2000.186-.186V3.574a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m0%202.716h2.118a.187.187%200%2000.186-.186V6.29a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.887c0%20.102.082.185.185.186m-2.93%200h2.12a.186.186%200%2000.184-.186V6.29a.185.185%200%2000-.185-.185H8.1a.185.185%200%2000-.185.185v1.887c0%20.102.083.185.185.186m-2.964%200h2.119a.186.186%200%2000.185-.186V6.29a.185.185%200%2000-.185-.185H5.136a.186.186%200%2000-.186.185v1.887c0%20.102.084.185.186.186m5.893%202.715h2.118a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m-2.93%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.083.185.185.185m-2.964%200h2.119a.185.185%200%2000.185-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.186.186%200%2000-.186.186v1.887c0%20.102.084.185.186.185m-2.92%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.082.185.185.185M23.763%209.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612%201.43-.23.97-.09%201.882.403%202.661-.595.332-1.55.413-1.744.42H.751a.751.751%200%2000-.75.748%2011.376%2011.376%200%2000.692%204.062c.545%201.428%201.355%202.48%202.41%203.124%201.18.723%203.1%201.137%205.275%201.137.983.003%201.963-.086%202.93-.266a12.248%2012.248%200%20003.823-1.389c.98-.567%201.86-1.288%202.61-2.136%201.252-1.418%201.998-2.997%202.553-4.4h.221c1.372%200%202.215-.549%202.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23326CE5'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eKubernetes%3c/title%3e%3cpath%20d='M10.204%2014.35l.007.01-.999%202.413a5.171%205.171%200%200%201-2.075-2.597l2.578-.437.004.005a.44.44%200%200%201%20.484.606zm-.833-2.129a.44.44%200%200%200%20.173-.756l.002-.011L7.585%209.7a5.143%205.143%200%200%200-.73%203.255l2.514-.725.002-.009zm1.145-1.98a.44.44%200%200%200%20.699-.337l.01-.005.15-2.62a5.144%205.144%200%200%200-3.01%201.442l2.147%201.523.004-.002zm.76%202.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44%200%200%200%20.7.336l.008.003%202.134-1.513a5.188%205.188%200%200%200-2.992-1.442l.148%202.615.002.001zm10.876%205.97l-5.773%207.181a1.6%201.6%200%200%201-1.248.594l-9.261.003a1.6%201.6%200%200%201-1.247-.596l-5.776-7.18a1.583%201.583%200%200%201-.307-1.34L2.1%205.573c.108-.47.425-.864.863-1.073L11.305.513a1.606%201.606%200%200%201%201.385%200l8.345%203.985c.438.209.755.604.863%201.073l2.062%208.955c.108.47-.005.963-.308%201.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45%206.45%200%200%200-.105-2.332%206.465%206.465%200%200%200-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545%206.545%200%200%200-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142%200-.306-.224-.555-.5-.555-.275%200-.499.249-.499.555l.001.014c0%20.041-.002.092%200%20.128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545%200%200%201-.162.258l-.012.211a6.424%206.424%200%200%200-4.166%202.003%208.373%208.373%200%200%201-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594%200%200%200-.348-.132.481.481%200%200%200-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462%206.462%200%200%200-1.02%204.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5%206.5%200%200%200%202.88%203.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453%206.453%200%200%200%204.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499%206.499%200%200%200%202.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4%209.701l-1.95%201.746v.005a.44.44%200%200%200%20.173.757l.003.01%202.526.728a5.199%205.199%200%200%200-.108-1.674A5.208%205.208%200%200%200%2016.4%209.7zm-4.013%205.325a.437.437%200%200%200-.404-.232.44.44%200%200%200-.372.233h-.002l-1.268%202.292a5.164%205.164%200%200%200%203.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44%200%200%200-.27.036.44.44%200%200%200-.214.572l-.003.004%201.01%202.438a5.15%205.15%200%200%200%202.081-2.615l-2.6-.44-.004.005z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23844FBA'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eTerraform%3c/title%3e%3cpath%20d='M1.44%200v7.575l6.561%203.79V3.787zm21.12%204.227l-6.561%203.791v7.574l6.56-3.787zM8.72%204.23v7.575l6.561%203.787V8.018zm0%208.405v7.575L15.28%2024v-7.578z'/%3e%3c/svg%3e\"","/**\n * SelfHost dashboard widget.\n *\n * This component renders a promotional card for self-hosting Smarter, as a\n * three-step path from a laptop to production: the Docker Compose Quick Start\n * (smarter-deploy), the official Helm chart for Kubernetes, and the official\n * Terraform modules for AWS (smarter-infrastructure). Each step links to its\n * resource, followed by a link to the installation guide.\n *\n * :returns: A JSX fragment containing the self-host call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <SelfHost />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport dockerLogo from \"../../assets/docker.svg\";\nimport kubernetesLogo from \"../../assets/kubernetes.svg\";\nimport terraformLogo from \"../../assets/terraform.svg\";\n\nconst STEPS = [\n {\n name: \"Docker\",\n where: gettext(\"Your laptop\"),\n description: gettext(\"Quick Start with Docker Compose\"),\n logo: dockerLogo,\n href: \"https://github.com/smarter-sh/smarter-deploy\",\n },\n {\n name: \"Kubernetes\",\n where: gettext(\"Your cluster\"),\n description: gettext(\"The official Helm chart\"),\n logo: kubernetesLogo,\n href: \"https://artifacthub.io/packages/helm/project-smarter/smarter\",\n },\n {\n name: \"Terraform\",\n where: gettext(\"Your AWS cloud\"),\n description: gettext(\"The official Terraform modules\"),\n logo: terraformLogo,\n href: \"https://github.com/smarter-sh/smarter-infrastructure\",\n },\n];\n\nfunction SelfHost() {\n return (\n <>\n {/* begin::Engage widget 4 */}\n <section\n id=\"self-host\"\n aria-label={gettext(\"Self Host\")}\n className=\"card border-transparent h-100 selfhost-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n {/* begin::Title */}\n <span className=\"selfhost-eyebrow\">{gettext(\"Self-host Smarter\")}</span>\n <div className=\"fs-2x fw-bold text-white mt-3 mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Run it %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"anywhere%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 selfhost-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-7 selfhost-lede\">\n {gettext(\"The same open source platform, from your laptop to production. No license fees, no seat counts.\")}\n </p>\n {/* end::Title */}\n {/* begin::Steps */}\n <ol className=\"selfhost-steps\">\n {STEPS.map((step, index) => (\n <li key={step.name} className=\"selfhost-step\">\n <a href={step.href} target=\"_blank\" className=\"selfhost-step-link hover-elevate-up\">\n <span className=\"selfhost-logo\">\n <img src={step.logo} alt=\"\" />\n <span className=\"selfhost-number\">{index + 1}</span>\n </span>\n <span className=\"selfhost-where\">{step.where}</span>\n <span className=\"selfhost-name\">{step.name}</span>\n <span className=\"selfhost-description\">{step.description}</span>\n </a>\n </li>\n ))}\n </ol>\n {/* end::Steps */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap align-items-center gap-3 mt-auto pt-7\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-platform/installation.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold selfhost-btn\"\n >\n {gettext(\"Installation Guide\")}\n </a>\n <span className=\"selfhost-license\">{gettext(\"Open source · AGPL-3.0\")}</span>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </section>\n {/* end::Engage widget 4 */}\n </>\n );\n}\n\nexport default SelfHost;\n","/**\n * VSCodeExtension dashboard widget.\n *\n * This component renders a promotional card for the Smarter Manifest VS Code\n * extension: its main features, direct links to the Visual Studio Marketplace\n * listing and official documentation, its install count, and a mock editor\n * that shows the extension flagging a misspelled key in a manifest.\n *\n * :returns: A JSX fragment containing the VS Code extension call-to-action\n * widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <VSCodeExtension />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst MARKETPLACE = \"https://marketplace.visualstudio.com/items?itemName=Querium.smarter-manifest\";\n\nconst FEATURES = [\n gettext(\"Validation as you type\"),\n gettext(\"Quick fixes for misspelled keys\"),\n gettext(\"Completion and hover help\"),\n gettext(\"Apply and deploy from the editor\"),\n];\n\nfunction VSCodeExtension() {\n return (\n <>\n {/* begin::Download VS Code Extension widget 4 */}\n <div\n id=\"vscode-extension\"\n aria-label={gettext(\"VS Code Extension\")}\n className=\"card border-transparent h-100 vscode-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body ps-xl-15\">\n <div className=\"row g-7 align-items-center\">\n {/* begin::Pitch */}\n <div className=\"col-md-6\">\n {/* begin::Title */}\n <div className=\"fs-2x fw-bold text-white mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Get the %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n <a href={MARKETPLACE} className=\"vscode-title-link\">\n {gettext(\"VS Code Extension\")}\n </a>\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 vscode-underline\"></span>\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-400 fs-6 mb-5\">\n {interpolateNodes(\n gettext(\n \"Write Smarter manifests with the same validation that %(code)s uses, before you apply them.\",\n ),\n { code: <code className=\"vscode-inline\">smarter apply</code> },\n )}\n </p>\n {/* end::Title */}\n {/* begin::Features */}\n <ul className=\"vscode-features\" aria-label={gettext(\"Features\")}>\n {FEATURES.map((feature) => (\n <li key={feature}>\n <span className=\"vscode-check\">&#10003;</span>\n {feature}\n </li>\n ))}\n </ul>\n {/* end::Features */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap align-items-center gap-2 mt-6\">\n <a href={MARKETPLACE} target=\"_blank\" className=\"btn btn-sm fw-semibold vscode-btn\">\n {gettext(\"Install\")}\n </a>\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/vs-code-extension.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n <a href={MARKETPLACE} target=\"_blank\" className=\"ms-2\">\n <img\n src=\"https://vsmarketplacebadges.dev/installs-short/Querium.smarter-manifest.svg\"\n alt={gettext(\"Installs\")}\n />\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Pitch */}\n {/* begin::Editor */}\n <div className=\"col-md-6\">\n <div className=\"vscode-editor\" aria-label={gettext(\"Example manifest with a validation problem\")}>\n <div className=\"vscode-editor-bar\">\n <span className=\"vscode-dot vscode-dot-red\"></span>\n <span className=\"vscode-dot vscode-dot-yellow\"></span>\n <span className=\"vscode-dot vscode-dot-green\"></span>\n <span className=\"vscode-tab\">\n {/* Served by the page: library mode would inline it, and it is 115 kB. */}\n <img src=\"/static/images/vs-code-logo.png\" alt=\"\" />\n {gettext(\"secret.yaml\")}\n </span>\n </div>\n <pre className=\"vscode-code\">\n <div>\n <span className=\"vscode-ln\">1</span>\n <span className=\"vscode-key\">apiVersion</span>: <span className=\"vscode-str\">smarter.sh/v1</span>\n </div>\n <div>\n <span className=\"vscode-ln\">2</span>\n <span className=\"vscode-key\">kind</span>: <span className=\"vscode-str\">Secret</span>\n </div>\n <div>\n <span className=\"vscode-ln\">3</span>\n <span className=\"vscode-key\">metadata</span>:\n </div>\n <div>\n <span className=\"vscode-ln\">4</span>\n {\" \"}\n <span className=\"vscode-key\">name</span>: <span className=\"vscode-str\">openai_api_key</span>\n </div>\n <div>\n <span className=\"vscode-ln\">5</span>\n {\" \"}\n <span className=\"vscode-key vscode-squiggle\">descripton</span>:{\" \"}\n <span className=\"vscode-str\">The OpenAI API key</span>\n <span className=\"vscode-hover\" role=\"note\">\n Unknown key &apos;descripton&apos; in metadata. Did you mean &apos;description&apos;?\n </span>\n </div>\n <div>\n <span className=\"vscode-ln\">6</span>\n {\" \"}\n <span className=\"vscode-key\">version</span>: <span className=\"vscode-str\">1.0.0</span>\n </div>\n <div>\n <span className=\"vscode-ln\">7</span>\n <span className=\"vscode-key\">spec</span>:\n </div>\n </pre>\n </div>\n </div>\n {/* end::Editor */}\n </div>\n </div>\n {/* end::Body */}\n </div>\n {/* end::Download VS Code Extension widget 4 */}\n </>\n );\n}\n\nexport default VSCodeExtension;\n","/**\n * WhatsNew dashboard widget.\n *\n * This component renders a card that highlights notable features added in\n * recent Smarter releases, with each entry linking to its documentation page\n * on docs.smarter.sh.\n *\n * :returns: A JSX fragment containing the new features widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <WhatsNew />\n */\nimport \"./styles.css\";\nimport { gettext } from \"@smarter/common\";\n\ninterface Feature {\n name: string;\n version: string;\n description: string;\n docsPath: string;\n}\n\nconst DOCS_BASE_URL = \"https://docs.smarter.sh\";\n\nconst FEATURES: Feature[] = [\n {\n name: gettext(\"Extensions\"),\n version: \"0.27\",\n description: gettext(\"Install signed, third-party LLM tools from the Smarter Extension registry\"),\n docsPath: \"smarter-platform/extensions.html\",\n },\n {\n name: \"Smarter MCP Server\",\n version: \"0.24\",\n description: gettext(\"Answers about The Smarter Project, from its own code and docs, for any MCP client\"),\n docsPath: \"smarter-platform/smarter-project-mcp-server.html\",\n },\n {\n name: \"OpenAPI\",\n version: \"0.22\",\n description: gettext(\"An OpenAPI document and JSON Schemas for the Smarter api, served by every platform\"),\n docsPath: \"smarter-framework/smarter-openapi.html\",\n },\n {\n name: gettext(\"Themable Chat\"),\n version: \"0.21\",\n description: gettext(\"Brand your LLMClient's chat with your own logo, colors, fonts and avatar\"),\n docsPath: \"smarter-resources/llmclient/styles.html\",\n },\n {\n name: \"ImageSearchPlugin\",\n version: \"0.19\",\n description: gettext(\"Let LLMs find and show images from the web\"),\n docsPath: \"smarter-resources/llmtool/plugin/image-search.html\",\n },\n {\n name: gettext(\"Infrastructure Manager\"),\n version: \"0.18\",\n description: gettext(\"Manage and monitor your cloud infrastructure from the web console\"),\n docsPath: \"smarter-framework/technologies/infrastructure.html\",\n },\n {\n name: gettext(\"Custom Domains\"),\n version: \"0.18\",\n description: gettext(\"Serve LLMClients from your own branded domain, managed with a SAM manifest\"),\n docsPath: \"smarter-resources/smarter-custom-domain.html\",\n },\n {\n name: gettext(\"Manifest Editor\"),\n version: \"0.17\",\n description: gettext(\"Edit, validate, save, clone and delete manifests in the web console\"),\n docsPath: \"smarter-platform/smarter-web-console.html\",\n },\n {\n name: gettext(\"Budgets\"),\n version: \"0.16\",\n description: gettext(\"Enforce spending limits on any resource, with budget vs actual charts\"),\n docsPath: \"smarter-resources/smarter-budget.html\",\n },\n {\n name: \"LLMHosts\",\n version: \"0.16\",\n description: gettext(\"Run open-weight LLMs on your own Kubernetes cluster\"),\n docsPath: \"smarter-resources/smarter-llmhost.html\",\n },\n {\n name: gettext(\"Proxies\"),\n version: \"0.16\",\n description: gettext(\"Pass requests through to LLM provider APIs, with keys kept as Smarter Secrets\"),\n docsPath: \"smarter-resources/smarter-proxy.html\",\n },\n {\n name: \"VectorStores\",\n version: \"0.16\",\n description: gettext(\"Manage RAG vector databases: self-hosted Qdrant, Qdrant Cloud and Pinecone\"),\n docsPath: \"smarter-resources/smarter-vectorstore.html\",\n },\n];\n\nfunction WhatsNew() {\n return (\n <>\n {/* begin::What's New widget */}\n <section id=\"whats-new\" aria-label={gettext(\"What's New\")} className=\"card border-transparent h-xl-100\">\n {/* begin::Header */}\n <div className=\"card-header border-0 pt-5\">\n <h3 className=\"card-title align-items-start flex-column\">\n <span className=\"card-label fw-bold text-gray-900\">{gettext(\"What's New\")}</span>\n <span className=\"text-muted mt-1 fw-semibold fs-7\">{gettext(\"Recently added Smarter features\")}</span>\n </h3>\n </div>\n {/* end::Header */}\n {/* begin::Body */}\n <div className=\"card-body pt-3\">\n <ul className=\"whats-new-list list-unstyled row g-4 mb-0\">\n {FEATURES.map((feature) => (\n <li key={feature.name} className=\"col-md-6 d-flex align-items-start\">\n <span className=\"badge badge-light-primary fw-bold me-3 mt-1\">{feature.version}</span>\n <div>\n <a\n href={`${DOCS_BASE_URL}/${feature.docsPath}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-gray-900 text-hover-primary fw-bold fs-6\"\n >\n {feature.name}\n </a>\n <div className=\"text-gray-600 fs-7\">{feature.description}</div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n {/* end::Body */}\n </section>\n {/* end::What's New widget */}\n </>\n );\n}\n\nexport default WhatsNew;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ui-widgets.es.js","names":["_jsx","_Fragment","Fragment","packageJson","_Fragment","_Fragment","DidYouKnow","_jsxs","_jsx","_Fragment","DOCS","DidYouKnowNote","DOCS","STEPS","_Fragment","DOCS_BASE_URL","_Fragment","DOCS","wordpressLogo","drupalLogo","shopifyLogo","docusaurusLogo","materialformkdocsLogo","sphinxLogo","vitepressLogo","_Fragment","_Fragment","nodedotjsLogo","goLogo","_Fragment","_Fragment","dockerLogo","kubernetesLogo","terraformLogo","_Fragment","FEATURES","_Fragment","_Fragment","Fragment$1","PLACEHOLDER","catalog","gettext","django","msgid","ngettext","singular","plural","count","interpolate","message","value","values","name","placeholder","interpolateNodes","parts","last","match","index","jsx","Fragment","part","package_default","\"private\"","\"import\"","\"require\"","\"types\"","\"clean\"","\"build\"","\"lint\"","\"storybook\"","\"typecheck\"","\"test\"","\"react\"","\"eslint\"","\"globals\"","\"typescript\"","\"vitest\"","packageName","packageVersion","SESSION","Cli","className","line","WAYS_TO_HELP","BADGES","Contribute","way","badge","DidYouKnow$1","title","jsxs","classNames","icon","fact","linkIcon","DOCS$3","DOCS_URLS","GITHUB_URLS","BLOG_URLS","NPM_URLS","SITE_URLS","didYouKnowFacts","DAY_MS","factOfTheDay","facts","date","Lightbulb","DidYouKnow","DOCS$2","EXTENSIONS","STEPS$1","Extensions","step","extension","DOCS_BASE_URL$1","CATALOG","STATS","COURSES","FORMATS","CourseChips","hidden","courses","course","Instructors","stat","row","format","docusaurus_default","drupal_default","materialformkdocs_default","shopify_default","sphinx_default","vitepress_default","wordpress_default","DOCS$1","INTEGRATIONS","Integrations","integration","MCP_SERVER_PATH","TOOLS","defaultServerUrl","McpServer","serverUrl","tool","go_default","nodedotjs_default","OPENAPI_URL","SDKS","Sdk","sdk","openapiUrl","DOCS","RESOURCES","PLUGIN_KINDS","kindInfo","kind","ResourceCard","info","node","locked","opens","classes","isRoot","childId","parent","ROOT_ID","countResources","seen","anonymous","visit","tree","depth","branchIds","ids","id","child","Branch","hasChildren","open","collapsed","childrenId","onToggle","ResourceTree","ownCollapsed","setOwnCollapsed","useState","defaultCollapsed","label","next","current","STEPS","SelfHost","MARKETPLACE","FEATURES$1","VSCodeExtension","feature","DOCS_BASE_URL","FEATURES","WhatsNew"],"sources":["../../smarter-common/dist/lib/i18n.js","../../smarter-common/package.json","../../smarter-common/dist/lib/const.js","../../smarter-common/dist/components/TabbedListView/cookie.js","../../smarter-common/dist/lib/cache.js","../src/components/Cli/Component.tsx","../src/components/Contribute/Component.tsx","../../smarter-didyouknow/dist/components/DidYouKnow/Component.js","../../smarter-didyouknow/dist/lib/const.js","../../smarter-didyouknow/dist/lib/facts.js","../src/components/DidYouKnow/Component.tsx","../src/components/Extensions/Component.tsx","../src/components/Instructors/Component.tsx","../src/assets/docusaurus.svg","../src/assets/drupal.svg","../src/assets/materialformkdocs.svg","../src/assets/shopify.svg","../src/assets/sphinx.svg","../src/assets/vitepress.svg","../src/assets/wordpress.svg","../src/components/Integrations/Component.tsx","../src/components/McpServer/Component.tsx","../src/assets/go.svg","../src/assets/nodedotjs.svg","../src/components/Sdk/Component.tsx","../src/components/ResourceTree/kinds.ts","../src/components/ResourceTree/ResourceCard.tsx","../src/components/ResourceTree/tree.ts","../src/components/ResourceTree/Component.tsx","../src/assets/docker.svg","../src/assets/kubernetes.svg","../src/assets/terraform.svg","../src/components/SelfHost/Component.tsx","../src/components/VSCodeExtension/Component.tsx","../src/components/WhatsNew/Component.tsx"],"sourcesContent":["import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Translation functions for the web console's React apps.\n *\n * The web console is translated with gettext. Django renders each page in the\n * user's language, and dashboard/base.html loads that language's message\n * catalog for the React apps from Django's JavaScriptCatalog view (the djangojs\n * domain), which defines window.django.gettext() and friends. These functions\n * call it, and fall back to the English source text when no catalog is loaded,\n * e.g. in tests and Storybook.\n *\n * Every message is English source text, and must be a string literal, so that\n * `npm run i18n:extract` can find it. Interpolate values afterwards, with\n * Python-style named placeholders, so that a translator can move them:\n *\n * @example\n * gettext(\"Secrets\");\n * interpolate(gettext(\"Rename secret %(name)s.\"), { name: secret.name });\n * ngettext(\"%(count)s secret\", \"%(count)s secrets\", n);\n * pgettext(\"verb\", \"Clone\");\n * // a React element inside a sentence:\n * interpolateNodes(gettext(\"Delete secret %(name)s?\"), { name: <strong>{secret.name}</strong> });\n *\n * A comment that begins with \"Translators:\" on the line before a call is copied\n * into the message catalog for the translator.\n */\nimport { Fragment } from \"react\";\nconst PLACEHOLDER = /%\\(([A-Za-z_][A-Za-z0-9_]*)\\)s/g;\nconst catalog = () => (typeof window === \"undefined\" ? undefined : window.django);\n/** Translates a message. */\nexport function gettext(msgid) {\n const django = catalog();\n return django?.gettext ? django.gettext(msgid) : msgid;\n}\n/** Translates a message that has a singular and a plural form, chosen by count. */\nexport function ngettext(singular, plural, count) {\n const django = catalog();\n if (django?.ngettext)\n return django.ngettext(singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/** Translates a message in a context, which tells apart two messages with the same English text. */\nexport function pgettext(context, msgid) {\n const django = catalog();\n return django?.pgettext ? django.pgettext(context, msgid) : msgid;\n}\n/** ngettext() in a context. */\nexport function npgettext(context, singular, plural, count) {\n const django = catalog();\n if (django?.npgettext)\n return django.npgettext(context, singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/**\n * Replaces each %(name)s placeholder in a translated message with values[name].\n * A placeholder with no value is left as it is, so that the mistake shows.\n */\nexport function interpolate(message, values) {\n return message.replace(PLACEHOLDER, (placeholder, name) => {\n const value = values[name];\n return value === undefined || value === null ? placeholder : String(value);\n });\n}\n/**\n * interpolate() for values that are React nodes, e.g. a name in <strong> inside a\n * sentence. Returns a fragment of the message's text and the values, in the order\n * that the (translated) message puts them.\n */\nexport function interpolateNodes(message, values) {\n const parts = [];\n let last = 0;\n for (const match of message.matchAll(PLACEHOLDER)) {\n const [placeholder, name] = match;\n const index = match.index ?? 0;\n if (index > last)\n parts.push(message.slice(last, index));\n parts.push(name in values ? values[name] : placeholder);\n last = index + placeholder.length;\n }\n if (last < message.length)\n parts.push(message.slice(last));\n return (_jsx(_Fragment, { children: parts.map((part, index) => (_jsx(Fragment, { children: part }, index))) }));\n}\n/** The language of the page, from the lang attribute that Django renders on <html>, e.g. \"en\". */\nexport function currentLanguage() {\n if (typeof document === \"undefined\")\n return \"en\";\n return document.documentElement.lang || \"en\";\n}\n//# sourceMappingURL=i18n.js.map","{\n \"name\": \"@smarter/common\",\n \"private\": true,\n \"version\": \"0.2.0\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"npm run clean && tsc -p tsconfig.build.json && rsync -a --prune-empty-dirs --include='/' --include='.css' --exclude='*' src/ dist/\",\n \"build:dist-manifest\": \"node --input-type=module -e \\\"import fs from 'node:fs'; const pkg = JSON.parse(fs.readFileSync('package.json','utf8')); const out = { name: pkg.name, version: pkg.version, type: pkg.type, main: './index.js', types: './index.d.ts', peerDependencies: pkg.peerDependencies ?? {}, dependencies: pkg.dependencies ?? {} }; fs.writeFileSync('dist/package.json', JSON.stringify(out, null, 2) + '\\\\n');\\\"\",\n \"pack:tgz\": \"npm pack --ignore-scripts\",\n \"lint\": \"eslint .\",\n \"storybook\": \"storybook dev -p 6006\",\n \"build-storybook\": \"storybook build\",\n \"typecheck\": \"tsc -b\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\"\n },\n \"peerDependencies\": {\n \"react\": \"^19\",\n \"react-dom\": \"^19\"\n },\n \"dependencies\": {\n \"date-fns\": \"^4.4.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@storybook/addon-a11y\": \"^10.6.1\",\n \"@storybook/addon-docs\": \"^10.6.1\",\n \"@storybook/react-vite\": \"^10.6.1\",\n \"@types/node\": \"^26.6.3\",\n \"@types/react\": \"^19.3.0\",\n \"@types/react-dom\": \"^19.3.0\",\n \"eslint\": \"^10.11.0\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-storybook\": \"^10.6.1\",\n \"globals\": \"^17.13.0\",\n \"react\": \"^19.3.0\",\n \"react-dom\": \"^19.3.0\",\n \"storybook\": \"^10.6.1\",\n \"typescript\": \"~6.0.2\",\n \"typescript-eslint\": \"^8.71.0\",\n \"vitest\": \"^5.0.3\"\n }\n}\n","import packageJson from \"../../package.json\" with { type: \"json\" };\nexport const packageName = packageJson.name;\nexport const packageVersion = packageJson.version;\nexport const loggerPrefix = `[Smarter ${packageName} v${packageVersion}]`;\n//# sourceMappingURL=const.js.map","import { loggerPrefix } from \"../../lib/const\";\nimport { packageName, packageVersion } from \"../../lib/const\";\nconst COOKIE_NAME_PREFIX = `${packageName}_v${packageVersion}`;\nconst getUrlOrigin = () => {\n if (typeof window !== \"undefined\" && typeof window.location?.origin === \"string\") {\n return window.location.origin;\n }\n return \"http://localhost\";\n};\nexport const getUrlPath = (url) => {\n console.debug(loggerPrefix, `getUrlPath(): Extracting path from URL: ${url}`);\n return new URL(url, getUrlOrigin()).pathname;\n};\n/**\n * Sets a cookie to store the llmclient count for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @param llmclientCount - The number of llmclients to store.\n * @param days - Number of days until the cookie expires.\n */\nexport const setCookieForUrl = (url, llmclientCount, days) => {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n const expires = new Date(Date.now() + days * MS_PER_DAY).toUTCString();\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookieValue = `${cookieName}=${llmclientCount}; path=/; expires=${expires};`;\n try {\n document.cookie = cookieValue;\n console.debug(loggerPrefix, `setCookieForUrl(): ${cookieValue}`);\n }\n catch (e) {\n console.warn(loggerPrefix, \"setCookieForUrl(): Unable to set llmclient count cookie\", e);\n }\n};\n/**\n * Retrieves the llmclient count stored in a cookie for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @returns The number of llmclients stored in the cookie, or undefined if not found or invalid.\n */\nexport const getCookieForUrl = (url) => {\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookies = document.cookie.split(\";\").map((c) => c.trim());\n for (const cookie of cookies) {\n if (cookie.startsWith(cookieName + \"=\")) {\n const strVal = cookie.substring(cookieName.length + 1);\n const numVal = parseInt(strVal, 10);\n const retVal = isNaN(numVal) ? undefined : numVal;\n console.debug(loggerPrefix, `getCookieForUrl(): Retrieved cookie for ${cookieName}:`, retVal);\n return retVal;\n }\n }\n console.warn(loggerPrefix, `getCookieForUrl(): Cookie for ${cookieName} not found. If you are not under /, it may not be visible due to cookie path restrictions.`);\n return undefined;\n};\n//# sourceMappingURL=cookie.js.map","/**\n * Tabbed list cache utilities.\n *\n * Stores plugin objects in sessionStorage using a key scoped by API URL and slug,\n * with a one-week TTL and automatic cleanup of expired entries.\n */\nimport { loggerPrefix } from \"./const\";\nimport { packageName, packageVersion } from \"./const\";\nconst CACHE_PREFIX = `${packageName}_v${packageVersion}_objects_v1`;\nconst CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 1 week\n/**\n * Builds a stable sessionStorage key for a specific API endpoint and tab slug.\n *\n * @param apiUrl Base API URL used to scope cache entries by backend.\n * @param slug Tab or list identifier to isolate cached objects per view.\n * @returns A deterministic sessionStorage key.\n * @throws This function does not throw under normal operation.\n */\nexport const makeCacheKey = (apiUrl, slug) => {\n return `${CACHE_PREFIX}:${apiUrl}${slug}`;\n};\n/**\n * Reads and validates cached llmclient objects.\n *\n * Returns null for missing, invalid, or expired entries and removes expired\n * data to keep storage clean.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @returns The cached llmclient array when present and valid; otherwise `null`.\n * @throws No exceptions are propagated. JSON parse errors, sessionStorage access\n * failures, and other runtime errors are caught and treated as a cache miss.\n */\nexport const readCache = (key) => {\n try {\n const raw = sessionStorage.getItem(key);\n if (!raw) {\n console.debug(`${loggerPrefix} readCache() cache miss for`, key);\n return null;\n }\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed.ts !== \"number\" || !Array.isArray(parsed.objects)) {\n console.debug(`${loggerPrefix} readCache() cache invalid for`, key);\n return null;\n }\n if (Date.now() - parsed.ts > CACHE_TTL_MS) {\n console.debug(`${loggerPrefix} readCache() cache expired for`, key);\n sessionStorage.removeItem(key);\n return null;\n }\n console.debug(`${loggerPrefix} readCache() cache hit for`, key, \"with\", parsed.objects);\n return parsed.objects;\n }\n catch {\n return null;\n }\n};\n/**\n * Persists llmclient objects to sessionStorage with a write timestamp.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @param objects LLMClient objects to cache for subsequent reads.\n * @returns `void`.\n * @throws No exceptions are propagated. sessionStorage write failures (for\n * example quota exceeded or private mode restrictions) are caught and ignored.\n */\nexport const writeCache = (key, objects) => {\n try {\n console.debug(`${loggerPrefix} writeCache() writing sessionStorage cache for`, key, \"with\", objects.length, \"objects\");\n const payload = { ts: Date.now(), objects };\n sessionStorage.setItem(key, JSON.stringify(payload));\n }\n catch {\n // ignore quota/private-mode errors\n }\n};\n//# sourceMappingURL=cache.js.map","/**\n * Cli dashboard widget.\n *\n * This component renders a dashboard call-to-action card for the Smarter\n * command-line interface, styled as a terminal window that shows a typical\n * session (install, configure, apply, deploy, list), followed by links to\n * download the CLI and open its documentation.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the CLI promotion widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Cli />\n * <Cli className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst SESSION = [\n { command: \"brew install smarter\", comment: gettext(\"or apt, choco, docker\") },\n { command: \"smarter configure\" },\n { command: \"smarter apply -f llmclient.yaml\" },\n { command: \"smarter deploy llmclient customer_support\" },\n { command: \"smarter get llmclients\" },\n];\n\nexport interface CliProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Cli({ className = \"col-xl-4\" }: CliProps) {\n return (\n <>\n <section id=\"cli\" aria-label={gettext(\"CLI\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Engage widget 4 */}\n <div className=\"card border-transparent h-100 cli-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n {/* begin::Title */}\n <div className=\"fs-2x fw-bold text-white mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Smarter %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"CLI%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-success border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-400 fs-6 mb-7\">{gettext(\"Powerful tools for managing your AI resources.\")}</p>\n {/* end::Title */}\n {/* begin::Terminal */}\n <div className=\"cli-terminal\" aria-label={gettext(\"Example CLI session\")}>\n <div className=\"cli-terminal-bar\">\n <span className=\"cli-dot cli-dot-red\"></span>\n <span className=\"cli-dot cli-dot-yellow\"></span>\n <span className=\"cli-dot cli-dot-green\"></span>\n </div>\n <pre className=\"cli-terminal-body\">\n {SESSION.map((line) => (\n <div key={line.command}>\n <span className=\"cli-prompt\">$ </span>\n {line.command}\n {line.comment && <span className=\"cli-comment\"> # {line.comment}</span>}\n </div>\n ))}\n <div>\n <span className=\"cli-prompt\">$ </span>\n <span className=\"cli-cursor\"></span>\n </div>\n </pre>\n </div>\n {/* end::Terminal */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7\">\n <a href=\"https://smarter.sh/cli/\" target=\"_blank\" className=\"btn btn-sm btn-success fw-semibold me-2\">\n {gettext(\"Download\")}\n </a>\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/smarter-cli.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Engage widget 4 */}\n </section>\n </>\n );\n}\n\nexport default Cli;\n","/**\n * Contribute dashboard widget.\n *\n * This component renders a dashboard contribution-focused card that encourages community\n * participation in the Smarter project: a few ways to help, the repository's activity\n * badges, links to the contributing guide and the open issues, and a supporting\n * illustration.\n *\n * :returns: A JSX fragment containing the contribution engagement widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Contribute />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst WAYS_TO_HELP = [\n gettext(\"Fix a bug\"),\n gettext(\"Improve the docs\"),\n gettext(\"Write a test\"),\n gettext(\"Build an extension\"),\n];\n\nconst BADGES = [\n {\n href: \"https://github.com/smarter-sh/smarter/releases\",\n src: \"https://img.shields.io/github/v/release/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"Latest Release\"),\n },\n {\n href: \"https://github.com/smarter-sh/smarter/stargazers\",\n src: \"https://img.shields.io/github/stars/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"GitHub Stars\"),\n },\n {\n href: \"https://github.com/smarter-sh/smarter/network/members\",\n src: \"https://img.shields.io/github/forks/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"GitHub Forks\"),\n },\n];\n\nfunction Contribute() {\n return (\n <>\n {/* begin::Engage widget 4 */}\n <section\n id=\"contribute\"\n aria-label={gettext(\"Contribute\")}\n className=\"card border-transparent h-100 contribute-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n {/* The Keen theme's illustration, which the page serves along with the Keen stylesheet. */}\n <img\n src=\"/static/assets/media/illustrations/dozzy-1/13.png\"\n className=\"position-absolute bottom-0 end-0 me-3 h-250px d-none d-md-block contribute-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-gray-900 mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Contribute to %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"Smarter%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 contribute-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-5 z-index-2 contribute-lede\">\n {gettext(\n \"Start small, learn by doing, and help improve Smarter while you discover how real Python projects work.\",\n )}\n </p>\n {/* end::Title */}\n {/* begin::Ways to help */}\n <ul className=\"contribute-chips z-index-2\" aria-label={gettext(\"Ways to help\")}>\n {WAYS_TO_HELP.map((way) => (\n <li key={way} className=\"contribute-chip\">\n {way}\n </li>\n ))}\n </ul>\n {/* end::Ways to help */}\n {/* begin::Badges */}\n <ul className=\"contribute-badges z-index-2\">\n {BADGES.map((badge) => (\n <li key={badge.alt}>\n <a href={badge.href} target=\"_blank\" rel=\"noopener noreferrer\">\n <img src={badge.src} alt={badge.alt} />\n </a>\n </li>\n ))}\n </ul>\n {/* end::Badges */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/guides/contributing.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold me-2 contribute-btn\"\n >\n {gettext(\"Contributing guide\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh/smarter/issues\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Open issues\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </section>\n {/* end::Engage widget 4 */}\n </>\n );\n}\n\nexport default Contribute;\n","import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { gettext } from \"@smarter/common\";\nfunction DidYouKnow({ fact, classNames = {}, icon, linkIcon }) {\n const title = gettext(\"Did you know?\");\n return (_jsxs(\"aside\", { className: classNames.root, \"aria-label\": title, children: [_jsxs(\"span\", { className: classNames.title, children: [icon, title] }), \" \", _jsx(\"span\", { className: classNames.text, title: fact.text, children: fact.text }), fact.link && (_jsxs(_Fragment, { children: [\" \", _jsxs(\"a\", { href: fact.link.url, className: classNames.link, target: \"_blank\", rel: \"noopener noreferrer\", children: [fact.link.label, linkIcon] })] }))] }));\n}\nexport default DidYouKnow;\n//# sourceMappingURL=Component.js.map","/** The documentation, repositories and packages that the facts link to. */\nconst DOCS = \"https://docs.smarter.sh/en/latest\";\nexport const DOCS_URLS = {\n home: `${DOCS}/`,\n adr: `${DOCS}/adr.html`,\n adrDocker: `${DOCS}/adr/002-docker.html`,\n adrTwelveFactor: `${DOCS}/adr/004-12-factor.html`,\n cacheResults: `${DOCS}/smarter-framework/developer-reference/lib/caching/cache_results.html`,\n pydantic: `${DOCS}/adr/031-pydantic-over-json.html`,\n chat: `${DOCS}/smarter-framework/smarter-chat.html`,\n cli: `${DOCS}/smarter-framework/smarter-cli.html`,\n contributing: `${DOCS}/smarter-framework/guides/contributing.html`,\n gettingStarted: `${DOCS}/smarter-framework/getting-started.html`,\n extensionGuide: `${DOCS}/smarter-framework/extensions/developer-guide.html`,\n imageSearch: `${DOCS}/smarter-resources/llmtool/plugin/image-search.html`,\n instructors: `${DOCS}/smarter-instructor.html`,\n logging: `${DOCS}/smarter-framework/developer-reference/lib/logging/logging-style-guide.html`,\n translations: `${DOCS}/smarter-framework/developer-reference/translations.html`,\n vscode: `${DOCS}/smarter-framework/vs-code-extension.html`,\n waffle: `${DOCS}/smarter-framework/developer-reference/lib/django/waffle.html`,\n manifests: `${DOCS}/smarter-framework/smarter-manifests.html`,\n mcpServer: `${DOCS}/smarter-platform/smarter-project-mcp-server.html`,\n openapi: `${DOCS}/smarter-framework/smarter-openapi.html`,\n react: `${DOCS}/smarter-framework/developer-reference/react-integration.html`,\n sdks: `${DOCS}/smarter-framework/apis-and-sdks.html`,\n serverLogs: `${DOCS}/smarter-platform/smarter-web-console.html#live-server-logs`,\n technologies: `${DOCS}/smarter-framework/technologies.html`,\n};\nexport const GITHUB_URLS = {\n organization: \"https://github.com/smarter-sh\",\n smarter: \"https://github.com/smarter-sh/smarter\",\n skills: \"https://github.com/smarter-sh/smarter/tree/main/skills\",\n releases: \"https://github.com/smarter-sh/smarter/releases\",\n ownershipModel: \"https://github.com/smarter-sh/smarter/blob/main/smarter/smarter/apps/account/models/metadata_with_ownership.py\",\n extensionsRegistry: \"https://github.com/smarter-sh/extensions-registry\",\n};\nexport const BLOG_URLS = {\n agenticAi: \"https://blog.smarter.sh/2026/10/10/claude-code-large-django-codebase/\",\n};\nexport const NPM_URLS = {\n chat: \"https://www.npmjs.com/package/@smarter.sh/ui-chat\",\n};\n/** Pages of smarter.sh, the project's web site. */\nexport const SITE_URLS = {\n stackademyCaseStudy: \"https://smarter.sh/case-studies/stackademy\",\n};\n//# sourceMappingURL=const.js.map","/**\n * The Did you know? facts: trivia about The Smarter Project, and the two ways to pick one, at random\n * (the welcome dialog) or the fact of the day (the note below the web console's title).\n *\n * Each fact is something that the project's repositories show, so that it stays true: keep them that\n * way when you add one. A fact that mentions a resource, such as a docs page, links to it.\n */\nimport { gettext } from \"@smarter/common\";\nimport { BLOG_URLS, DOCS_URLS, GITHUB_URLS, NPM_URLS, SITE_URLS } from \"./const\";\n/** The facts, in the order that the fact of the day goes through them. */\nexport function didYouKnowFacts() {\n return [\n {\n text: gettext(\"The Smarter Project is coded in part using Agentic AI techniques that you can learn about by following this project on GitHub.\"),\n link: { label: gettext(\"Follow Smarter on GitHub\"), url: GITHUB_URLS.smarter },\n },\n {\n text: gettext(\"The Smarter Project has around 500,000 lines of code, across two dozen repositories.\"),\n link: { label: gettext(\"Browse the repositories\"), url: GITHUB_URLS.organization },\n },\n {\n text: gettext(\"The main Smarter repository alone has about 400,000 lines of code, including about 180,000 lines of Python and 45,000 of TypeScript.\"),\n link: { label: gettext(\"Browse the repository\"), url: GITHUB_URLS.smarter },\n },\n {\n text: gettext(\"Smarter is written in Python, with Django and Django REST Framework, and its web console is written in React.\"),\n link: { label: gettext(\"Read about its technologies\"), url: DOCS_URLS.technologies },\n },\n {\n text: gettext(\"In October 2026, Claude Code wrote Smarter's source code at almost 30 times the long-run pace of its author, a senior developer.\"),\n link: { label: gettext(\"Read the story\"), url: BLOG_URLS.agenticAi },\n },\n {\n text: gettext(\"More than 95% of Smarter's code is covered by its automated tests.\"),\n link: { label: gettext(\"Read how it got there\"), url: BLOG_URLS.agenticAi },\n },\n {\n text: gettext(\"Smarter is a Docker application that runs on Debian Linux, so it can run anywhere, from your own laptop to any data center in the world.\"),\n link: { label: gettext(\"Read why Smarter uses Docker\"), url: DOCS_URLS.adrDocker },\n },\n {\n text: gettext(\"You can install Smarter on your own laptop in around 20 minutes.\"),\n link: { label: gettext(\"Get started\"), url: DOCS_URLS.gettingStarted },\n },\n {\n text: gettext(\"Smarter closely follows the 12-Factor App methodology, a set of principles for building software that runs in the cloud.\"),\n link: { label: gettext(\"Read the 12-Factor App decision\"), url: DOCS_URLS.adrTwelveFactor },\n },\n {\n text: gettext(\"Smarter's web console users can watch the real server logs of their own prompts, live, as the server writes them.\"),\n link: { label: gettext(\"Read about the live server logs\"), url: DOCS_URLS.serverLogs },\n },\n {\n text: gettext(\"Smarter's major design decisions, from Django and Kubernetes to Pydantic, are written down as Architecture Decision Records in its documentation.\"),\n link: { label: gettext(\"Read the Architecture Decision Records\"), url: DOCS_URLS.adr },\n },\n {\n text: gettext(\"Every Smarter platform runs an MCP server that answers questions about The Smarter Project from its own source code and documentation.\"),\n link: { label: gettext(\"Read about the MCP server\"), url: DOCS_URLS.mcpServer },\n },\n {\n text: gettext(\"Smarter has SDKs for Python, Node.js and Go, a command-line interface written in Go, and a VS Code extension for its YAML manifests.\"),\n link: { label: gettext(\"See the APIs and SDKs\"), url: DOCS_URLS.sdks },\n },\n {\n text: gettext(\"The Smarter Project was inspired by the Kubernetes Project, which is open source software for declarative cloud infrastructure management.\"),\n link: { label: gettext(\"Read about manifests\"), url: DOCS_URLS.manifests },\n },\n {\n text: gettext(\"Smarter's manifests are programmed with Pydantic, the popular open source Python data validation library on PyPI.\"),\n link: { label: gettext(\"Read why Smarter uses Pydantic\"), url: DOCS_URLS.pydantic },\n },\n {\n text: gettext(\"Smarter's repository has Agent Skills: instructions that teach AI coding agents its conventions, from its tests to its translations.\"),\n link: { label: gettext(\"Browse the skills\"), url: GITHUB_URLS.skills },\n },\n {\n text: gettext(\"Smarter was first used in a classroom in January 2026, by AI students at the University of British Columbia.\"),\n link: { label: gettext(\"Read the Instructor Guide\"), url: DOCS_URLS.instructors },\n },\n {\n text: gettext(\"Smarter has a Free Course Catalog of ready-to-teach courses, from prompt engineering for non-programmers to Kubernetes for platform engineers.\"),\n link: { label: gettext(\"Read the Instructor Guide\"), url: DOCS_URLS.instructors },\n },\n {\n text: gettext(\"Every Smarter account starts with two course advisors, stackademy_sql and stackademy_api, that answer from a private database and a web API with no code. A case study on smarter.sh teaches how they work.\"),\n link: { label: gettext(\"Read the case study\"), url: SITE_URLS.stackademyCaseStudy },\n },\n {\n text: gettext(\"The chat in the Prompt Engineer's Workbench is its own open source npm package, @smarter.sh/ui-chat, which you can embed in any website.\"),\n link: { label: gettext(\"See it on npm\"), url: NPM_URLS.chat },\n },\n {\n text: gettext(\"Claude Code translated Smarter's web console into Spanish, French and Brazilian Portuguese in a single day, October 16, 2026.\"),\n link: { label: gettext(\"Read about the translations\"), url: DOCS_URLS.translations },\n },\n {\n text: gettext(\"Smarter's ImageSearchPlugin was written by Claude Code during a live, in-class demonstration for AI students at the University of British Columbia. It went into production the following day.\"),\n link: { label: gettext(\"Read about the ImageSearchPlugin\"), url: DOCS_URLS.imageSearch },\n },\n {\n text: gettext(\"The web console speaks English, Spanish, French and Brazilian Portuguese. You can choose a language from the user menu.\"),\n },\n {\n text: gettext(\"Smarter Chat has a WordPress plugin, a Drupal module and a Shopify app block, which put a deployed LLMClient on your site.\"),\n link: { label: gettext(\"Read about Smarter Chat\"), url: DOCS_URLS.chat },\n },\n {\n text: gettext(\"Smarter's manifests can be edited not only in the web console, but also in code editors such as VS Code.\"),\n link: { label: gettext(\"Read about the VS Code extension\"), url: DOCS_URLS.vscode },\n },\n {\n text: gettext(\"Smarter's VS Code extension checks your YAML manifests as you type, completes their keys and values, and fixes common mistakes.\"),\n link: { label: gettext(\"Read about the VS Code extension\"), url: DOCS_URLS.vscode },\n },\n {\n text: gettext(\"Smarter's command-line interface works much like kubectl and runs on Windows, macOS and Linux. Like the aws cli, you set it up with one command: smarter configure.\"),\n link: { label: gettext(\"Read about the command-line interface\"), url: DOCS_URLS.cli },\n },\n {\n text: gettext(\"On a Mac, you can install the smarter command-line interface with Homebrew.\"),\n link: { label: gettext(\"Read about the command-line interface\"), url: DOCS_URLS.cli },\n },\n {\n text: gettext(\"Every Smarter platform publishes an OpenAPI document of its REST API, which SDKs and AI agents can read.\"),\n link: { label: gettext(\"Read about the OpenAPI document\"), url: DOCS_URLS.openapi },\n },\n {\n text: gettext(\"Smarter's server log messages are designed to help AI agents diagnose run-time errors: each one starts with the dotted path of the code that wrote it, so it reads like a stack trace.\"),\n link: { label: gettext(\"Read the logging style guide\"), url: DOCS_URLS.logging },\n },\n {\n text: gettext(\"Smarter has more than 50 Waffle switches that turn optional features and logging on and off, including whether these Did you know? notes appear.\"),\n link: { label: gettext(\"Read about the Waffle switches\"), url: DOCS_URLS.waffle },\n },\n {\n text: gettext(\"Smarter's authors invented their own object caching system, the @cache_results() decorator, which builds each cache key from the arguments of the function that it caches.\"),\n link: { label: gettext(\"Read about @cache_results()\"), url: DOCS_URLS.cacheResults },\n },\n {\n text: gettext(\"Smarter's authors created their own Django base model, MetaDataWithOwnershipModel, which gives each AI resource its name, description, version, tags and owner.\"),\n link: { label: gettext(\"Read its source code\"), url: GITHUB_URLS.ownershipModel },\n },\n {\n text: gettext(\"Smarter's version numbers and changelogs are generated from its commit messages, by semantic-release.\"),\n link: { label: gettext(\"See the releases\"), url: GITHUB_URLS.releases },\n },\n {\n text: gettext(\"Smarter's authors designed their own Django-React integration: Vite builds each page's React app, and a Django template tag mounts it.\"),\n link: { label: gettext(\"Read about the React integration\"), url: DOCS_URLS.react },\n },\n {\n text: gettext(\"Most pages of this web console are small React apps that Django hosts, and every one of their Storybook stories also runs as a unit test.\"),\n link: { label: gettext(\"Read about the React integration\"), url: DOCS_URLS.react },\n },\n {\n text: gettext(\"Smarter is an open source project, and anyone can contribute to it, including you.\"),\n link: { label: gettext(\"Read how to contribute\"), url: DOCS_URLS.contributing },\n },\n {\n text: gettext(\"The Get Weather LLMClient's tool is a Smarter Extension written in Python. Beginning Python programmers can write extensions too.\"),\n link: { label: gettext(\"Read the extension developer guide\"), url: DOCS_URLS.extensionGuide },\n },\n {\n text: gettext(\"Smarter Extensions, such as weather, calculator and date-calculator, are published in a public registry on GitHub.\"),\n link: { label: gettext(\"Browse the extensions registry\"), url: GITHUB_URLS.extensionsRegistry },\n },\n {\n text: gettext(\"Smarter's Python docstrings are published, by Sphinx, as the technical reference of its documentation.\"),\n link: { label: gettext(\"Read the documentation\"), url: DOCS_URLS.home },\n },\n {\n text: gettext(\"The first drafts of the Sphinx docstrings of Smarter's Python modules, classes and functions were written with GitHub Copilot.\"),\n link: { label: gettext(\"Read the documentation\"), url: DOCS_URLS.home },\n },\n {\n text: gettext(\"Agentic AI wrote more than 70% of Smarter's unit tests.\"),\n link: { label: gettext(\"Read the story\"), url: BLOG_URLS.agenticAi },\n },\n {\n text: gettext(\"Smarter's first commit was made in February 2023.\"),\n },\n ];\n}\n/**\n * Picks a fact at random.\n *\n * :param random: A function that returns a number from 0 up to, but not including, 1.\n * :returns: The fact.\n */\nexport function randomFact(random = Math.random) {\n const facts = didYouKnowFacts();\n return facts[Math.floor(random() * facts.length)];\n}\nconst DAY_MS = 24 * 60 * 60 * 1000;\n/**\n * The fact of the day: the same fact for everyone, from midnight to midnight UTC, and the next one\n * the next day.\n *\n * :param date: The moment whose day picks the fact.\n * :returns: The fact.\n */\nexport function factOfTheDay(date = new Date()) {\n const facts = didYouKnowFacts();\n const day = Math.floor(date.getTime() / DAY_MS);\n return facts[((day % facts.length) + facts.length) % facts.length];\n}\n//# sourceMappingURL=facts.js.map","/**\n * DidYouKnow dashboard widget.\n *\n * This component renders the fact of the day, a piece of trivia about The Smarter Project from\n * @smarter/didyouknow, as a slim card: a lightbulb, Did you know?, the fact, and its link. The fact\n * of the day is the same for everyone, from midnight to midnight UTC, and is the one that the note\n * below the web console's title shows, so smarter.sh and the web console show the same fact.\n *\n * :param date: The moment whose day picks the fact. Now, by default.\n * :type date: Date\n * :returns: A JSX element containing the Did you know? card.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <DidYouKnow />\n */\nimport \"./styles.css\";\nimport { DidYouKnow as DidYouKnowNote, factOfTheDay } from \"@smarter/didyouknow\";\n\nexport interface DidYouKnowProps {\n /** The moment whose day picks the fact. */\n date?: Date;\n}\n\n/** A lightbulb, inlined, as the widgets' other icons are. */\nconst Lightbulb = () => (\n <svg\n className=\"didyouknow-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\" />\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n </svg>\n);\n\nfunction DidYouKnow({ date = new Date() }: DidYouKnowProps) {\n return (\n <DidYouKnowNote\n fact={factOfTheDay(date)}\n classNames={{\n root: \"card border-transparent didyouknow-card\",\n title: \"didyouknow-title\",\n text: \"didyouknow-text\",\n link: \"didyouknow-link\",\n }}\n icon={<Lightbulb />}\n />\n );\n}\n\nexport default DidYouKnow;\n","/**\n * Extensions dashboard widget.\n *\n * This component renders a card about Smarter Extensions: Python packages\n * that add tools to a platform's LLMs, installed by superusers from the\n * signed Smarter Extension registry without a redeploy, and listed in an\n * LLMClient's ``spec.extensions``. It shows the three official extensions\n * with their trust badge and a link to its GitHub repository, a manifest that uses one, and links to the\n * documentation, the registry, and the guide to building an extension.\n *\n * :returns: A JSX fragment containing the Extensions widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Extensions />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst DOCS = \"https://docs.smarter.sh/en/latest\";\n\nconst EXTENSIONS = [\n {\n slug: \"weather\",\n name: \"Weather\",\n description: gettext(\"Current weather and a 24-hour forecast for any location.\"),\n icon: \"ki-cloud\",\n },\n {\n slug: \"calculator\",\n name: \"Calculator\",\n description: gettext(\"Evaluates math expressions exactly, so that LLMs don't guess.\"),\n icon: \"ki-calculator\",\n },\n {\n slug: \"date-calculator\",\n name: \"Date Calculator\",\n description: gettext(\"Date arithmetic: differences, adding and subtracting days.\"),\n icon: \"ki-calendar\",\n },\n];\n\nconst STEPS = [\n gettext(\"Browse the registry\"),\n gettext(\"Install, signature-checked\"),\n gettext(\"Enable, then list it in a manifest\"),\n];\n\nfunction Extensions() {\n return (\n <>\n <section\n id=\"extensions\"\n aria-label={gettext(\"Extensions\")}\n className=\"card border-transparent h-100 extensions-card\"\n data-bs-theme=\"light\"\n >\n <div className=\"card-body ps-xl-15\">\n <div className=\"row g-7 align-items-center\">\n {/* begin::Pitch */}\n <div className=\"col-md-6\">\n <span className=\"extensions-eyebrow\">{gettext(\"New in 0.27\")}</span>\n <div className=\"fs-2x fw-bold text-gray-900 mt-3 mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Add tools with %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"Extensions%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 extensions-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-4\">\n {gettext(\n \"Python packages that give your LLMs new tools, installed from the signed Smarter Extension registry without a redeploy.\",\n )}\n </p>\n <ol className=\"extensions-steps\">\n {STEPS.map((step, index) => (\n <li key={step}>\n <span className=\"extensions-step-number\">{index + 1}</span>\n {step}\n </li>\n ))}\n </ol>\n <div className=\"d-flex flex-wrap gap-2 mt-5\">\n <a\n href={`${DOCS}/smarter-platform/extensions.html`}\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold extensions-btn\"\n >\n {gettext(\"How extensions work\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh/extensions-registry\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Browse the registry\")}\n </a>\n <a\n href={`${DOCS}/smarter-framework/smarter-extensions.html`}\n target=\"_blank\"\n className=\"align-self-center fw-semibold extensions-link\"\n >\n {gettext(\"Build one →\")}\n </a>\n </div>\n </div>\n {/* end::Pitch */}\n {/* begin::Registry */}\n <div className=\"col-md-6\">\n <ul className=\"extensions-list\" aria-label={gettext(\"Official extensions\")}>\n {EXTENSIONS.map((extension) => (\n <li key={extension.slug}>\n <a\n href={`https://github.com/smarter-sh/smarter-extension-${extension.slug}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"extensions-item\"\n >\n <span className=\"extensions-icon\">\n <i className={`ki-outline ${extension.icon} fs-2`}></i>\n </span>\n <span className=\"extensions-text\">\n <span className=\"extensions-name\">\n {extension.name}\n <span className=\"extensions-badge\">{gettext(\"Official\")}</span>\n </span>\n <span className=\"extensions-description\">{extension.description}</span>\n </span>\n </a>\n </li>\n ))}\n </ul>\n <pre className=\"extensions-manifest\" aria-label={gettext(\"An LLMClient manifest that uses an extension\")}>\n <span className=\"extensions-key\">kind</span>: <span className=\"extensions-str\">LLMClient</span>\n {\"\\n\"}\n <span className=\"extensions-key\">spec</span>:{\"\\n\"}\n {\" \"}\n <span className=\"extensions-key\">extensions</span>:{\"\\n\"}\n {\" \"}- <span className=\"extensions-str\">weather</span>\n </pre>\n </div>\n {/* end::Registry */}\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default Extensions;\n","/**\n * Instructors dashboard widget.\n *\n * This component renders a promotional card for teaching with Smarter: the\n * Smarter Instructor Guide and the Free Course Designs, 21 ready-to-teach\n * course designs (19 micro courses and 2 master classes) that are free and\n * open source. It shows the catalog's headline numbers, two scrolling\n * ribbons of every course, each linked to its course design, the three\n * formats of a micro course, and links to the catalog and the guide.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the instructors call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Instructors />\n * <Instructors className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst DOCS_BASE_URL = \"https://docs.smarter.sh\";\nconst CATALOG = `${DOCS_BASE_URL}/smarter-instructors/example-courses`;\n\ninterface Course {\n name: string;\n path: string;\n}\n\nconst STATS = [\n { value: \"21\", label: gettext(\"course designs\") },\n { value: \"19\", label: gettext(\"micro courses\") },\n { value: \"2\", label: gettext(\"master classes\") },\n { value: \"$0\", label: gettext(\"license fees\") },\n];\n\nconst COURSES: Course[] = [\n { name: gettext(\"Prompt Engineering\"), path: \"micro-courses/prompt-engineering\" },\n { name: gettext(\"Building AI Applications\"), path: \"micro-courses/ai-applications\" },\n { name: gettext(\"Agentic Development\"), path: \"micro-courses/agentic-development\" },\n { name: \"Kubernetes\", path: \"micro-courses/kubernetes\" },\n { name: gettext(\"Django Master Class\"), path: \"master-classes/django-master-class\" },\n { name: gettext(\"The Economics of AI\"), path: \"micro-courses/ai-economics\" },\n { name: gettext(\"AI Governance\"), path: \"micro-courses/ai-governance\" },\n { name: gettext(\"API Design\"), path: \"micro-courses/api-design\" },\n { name: gettext(\"Backend Development\"), path: \"micro-courses/backend-development\" },\n { name: \"Docker\", path: \"micro-courses/docker\" },\n { name: gettext(\"AI Application Development Master Class\"), path: \"master-classes/ai-application-development\" },\n { name: gettext(\"Extension Development\"), path: \"micro-courses/extension-development\" },\n { name: gettext(\"Front End Development\"), path: \"micro-courses/frontend-development\" },\n { name: gettext(\"Full Stack Development\"), path: \"micro-courses/full-stack-development\" },\n { name: gettext(\"Infrastructure as Code\"), path: \"micro-courses/infrastructure-as-code\" },\n { name: gettext(\"Open Source Participation\"), path: \"micro-courses/open-source\" },\n { name: gettext(\"Secure Software\"), path: \"micro-courses/secure-software\" },\n { name: gettext(\"Self-Hosting Open Models\"), path: \"micro-courses/self-hosted-models\" },\n { name: gettext(\"Software Architecture\"), path: \"micro-courses/software-architecture\" },\n { name: gettext(\"Software Quality\"), path: \"micro-courses/software-quality\" },\n { name: gettext(\"Documentation with Sphinx\"), path: \"micro-courses/sphinx-documentation\" },\n];\n\nconst FORMATS = [\n { value: \"8 hours\", label: gettext(\"classroom bootcamp\") },\n { value: \"2 weeks\", label: gettext(\"online course\") },\n { value: \"4 weeks\", label: gettext(\"online course\") },\n];\n\nfunction CourseChips({ courses, hidden }: { courses: Course[]; hidden?: boolean }) {\n return (\n <ul className=\"instructors-ribbon-set\" aria-hidden={hidden || undefined}>\n {courses.map((course) => (\n <li key={course.path}>\n <a\n href={`${CATALOG}/${course.path}.html`}\n target=\"_blank\"\n className=\"instructors-chip\"\n tabIndex={hidden ? -1 : undefined}\n >\n {course.name}\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\nexport interface InstructorsProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Instructors({ className = \"col-xl-6\" }: InstructorsProps) {\n return (\n <>\n <section id=\"instructors\" aria-label={gettext(\"Instructors\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Instructors widget */}\n <div className=\"card border-transparent h-100 instructors-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n {/* The Keen theme's illustration, which the page serves along with the Keen stylesheet. */}\n <img\n src=\"/static/assets/media/illustrations/sigma-1/2.png\"\n className=\"position-absolute top-0 end-0 h-175px me-5 mt-5 d-none d-md-block instructors-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <span className=\"instructors-eyebrow z-index-2\">{gettext(\"Free for instructors\")}</span>\n <div className=\"fs-2x fw-bold text-white mt-3 mb-2 z-index-2 instructors-headline\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Teach AI with a %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"real platform%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 instructors-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-6 z-index-2 instructors-lede\">\n {gettext(\n \"Ready-to-teach course designs, from prompt engineering for non-programmers to Kubernetes for platform engineers, with schedules, graded assignments, rubrics and capstone projects.\",\n )}\n </p>\n {/* end::Title */}\n {/* begin::Stats */}\n <dl className=\"instructors-stats z-index-2\">\n {STATS.map((stat) => (\n <div key={stat.label} className=\"instructors-stat\">\n <dt>{stat.label}</dt>\n <dd>{stat.value}</dd>\n </div>\n ))}\n </dl>\n {/* end::Stats */}\n {/* begin::Courses */}\n <nav className=\"instructors-ribbons z-index-2\" aria-label={gettext(\"Free courses\")}>\n {[COURSES.slice(0, 11), COURSES.slice(11)].map((courses, row) => (\n <div key={row} className=\"instructors-ribbon\">\n <div className={`instructors-ribbon-track${row ? \" instructors-ribbon-reverse\" : \"\"}`}>\n <CourseChips courses={courses} />\n <CourseChips courses={courses} hidden />\n </div>\n </div>\n ))}\n </nav>\n {/* end::Courses */}\n {/* begin::Formats */}\n <div className=\"instructors-formats z-index-2\">\n <span className=\"instructors-formats-label\">{gettext(\"Every micro course, three ways\")}</span>\n <ul>\n {FORMATS.map((format) => (\n <li key={format.value}>\n <strong>{format.value}</strong> {format.label}\n </li>\n ))}\n </ul>\n </div>\n {/* end::Courses */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a href={`${CATALOG}/index.html`} target=\"_blank\" className=\"btn btn-sm fw-semibold me-2 instructors-btn\">\n {gettext(\"Browse the free courses\")}\n </a>\n <a\n href={`${DOCS_BASE_URL}/smarter-instructor.html`}\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Instructor Guide\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Instructors widget */}\n </section>\n </>\n );\n}\n\nexport default Instructors;\n","export default \"data:image/svg+xml,%3csvg%20fill='%233ECC5F'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDocusaurus%3c/title%3e%3cpath%20d='M2.462%2022.201h12.321a2.466%202.466%200%200%200%202.369-1.854c.026.004.052.008.079.008a.621.621%200%200%200%20.615-.615.621.621%200%200%200-.615-.615c-.027%200-.053.004-.079.007l-.014-.055a.62.62%200%200%200%20.378-.568.621.621%200%200%200-.615-.615.608.608%200%200%200-.371.127l-.042-.041a.606.606%200%200%200%20.125-.368c0-.67-.919-.858-1.181-.241l-.055-.014c.003-.026.008-.052.008-.079a.622.622%200%200%200-.616-.615.621.621%200%200%200-.615.615h-.096a.617.617%200%200%200-1.033%200h-.717v-2.461h2.461c.115%200%20.226-.017.331-.047a.307.307%200%201%200%20.529-.304l.02-.021c.052.04.116.064.186.064h.002c.337%200%20.428-.463.117-.591l.007-.028c.013.001.026.004.039.004a.31.31%200%200%200%20.308-.308.31.31%200%200%200-.308-.308c-.013%200-.026.003-.039.004a.28.28%200%200%201-.007-.027c.327-.13-.028-.745-.305-.528l-.02-.021a.307.307%200%200%200%20.062-.184c-.011-.326-.454-.416-.591-.12a1.238%201.238%200%200%200-.32-.047h-2.143a2.465%202.465%200%200%201%202.132-1.23h7.385V9.894l-8.618-.539a1.315%201.315%200%200%201-1.229-1.308c0-.688.542-1.265%201.229-1.307l8.618-.539v-1.23a2.473%202.473%200%200%200-2.462-2.462H8.615l-.307-.533a.356.356%200%200%200-.616%200l-.307.533-.308-.533a.355.355%200%200%200-.615%200l-.308.533-.308-.533a.355.355%200%200%200-.615%200l-.308.533-.008.001-.51-.51a.354.354%200%200%200-.594.159l-.168.628-.639-.171a.357.357%200%200%200-.436.435l.172.639-.628.169a.356.356%200%200%200-.16.594l.51.51v.008l-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308a2.463%202.463%200%200%201-2.13-1.231A2.465%202.465%200%200%200%200%2019.74c0%201.35%201.112%202.46%202.462%202.461zm19.692-5.204v2.743a2.473%202.473%200%200%201-2.461%202.461h-.001%201.231a2.466%202.466%200%200%200%202.383-1.854c.026.004.052.008.079.008A.621.621%200%200%200%2024%2019.74a.621.621%200%200%200-.615-.615c-.027%200-.053.004-.079.007l-.014-.055a.62.62%200%200%200%20.378-.568.621.621%200%200%200-.615-.615.608.608%200%200%200-.371.127l-.042-.041a.612.612%200%200%200%20.125-.368.623.623%200%200%200-.613-.615zm-4.067%202.62h2.223c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-2.223a.845.845%200%200%200%200-.246zm-.33-1.231h2.553c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-2.553a.845.845%200%200%200%200-.246zm-1.026-1.231h3.579c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-3.474a.85.85%200%200%200-.105-.246zm3.579-.984h-6.159a.126.126%200%200%201-.123-.123c0-.068.056-.123.123-.123h6.159c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123zm1.844-3.816v2.462c.115%200%20.225-.017.331-.047a.308.308%200%201%200%20.528-.304l.021-.021c.052.04.116.064.186.064a.312.312%200%200%200%20.307-.308.306.306%200%200%200-.189-.283l.007-.028c.013.001.026.004.04.004a.312.312%200%200%200%20.307-.308.312.312%200%200%200-.307-.308c-.014%200-.027.003-.04.004l-.007-.027a.31.31%200%200%200-.118-.592.306.306%200%200%200-.186.064l-.021-.021a.3.3%200%200%200%20.063-.184c-.011-.326-.454-.416-.591-.12a1.24%201.24%200%200%200-.321-.047zm-6.059%202.339h4.215c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-4.451a.564.564%200%200%200%20.073-.19.553.553%200%200%200%20.163-.056zm.454-1.208h3.761c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-3.772a.552.552%200%200%200%20.011-.246zm5.605-6.225h-.004c-.381.013-.561.393-.719.729-.166.35-.294.578-.504.572-.233-.009-.366-.271-.506-.549-.162-.32-.347-.682-.734-.668-.375.013-.556.344-.715.636-.169.311-.285.5-.507.491-.237-.008-.363-.222-.509-.469-.163-.275-.351-.585-.731-.574-.368.013-.549.294-.709.542-.169.262-.287.421-.513.412-.243-.009-.368-.186-.513-.391-.163-.231-.347-.491-.726-.479-.36.013-.541.243-.701.446-.151.192-.27.344-.52.335h-.005a.126.126%200%200%200-.123.123c0%20.066.053.121.119.123.371.012.559-.222.723-.429.145-.184.27-.343.516-.352.237-.01.348.138.516.375.16.226.341.482.705.495.382.013.566-.273.729-.525.145-.226.271-.421.511-.429.22-.008.34.166.51.453.159.271.34.577.712.59.385.014.57-.322.732-.619.14-.257.273-.5.507-.508.221-.005.336.196.506.533.159.314.339.67.717.684h.021c.377%200%20.556-.378.714-.713.14-.297.273-.576.501-.588zM7.385%206.509a.312.312%200%200%201-.308-.308c-.01-.532-.378-.911-.927-.922-.528-.011-.888.432-.919.922-.011.168-.139.307-.308.308a.31.31%200%200%201-.308-.308c0-.848.69-1.538%201.539-1.538.848%200%201.538.69%201.538%201.538a.312.312%200%200%201-.307.308zm9.846-2.308a.31.31%200%200%201%20.308.308.31.31%200%200%201-.308.308.31.31%200%200%201-.308-.308.31.31%200%200%201%20.308-.308zm2.461-.153a.31.31%200%200%201%20.307.308.31.31%200%200%201-.308.308h-.001a.31.31%200%200%201-.307-.308.31.31%200%200%201%20.308-.308z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%230678BE'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDrupal%3c/title%3e%3cpath%20d='M15.78%205.113C14.09%203.425%2012.48%201.815%2011.998%200c-.48%201.815-2.09%203.425-3.778%205.113-2.534%202.53-5.405%205.4-5.405%209.702a9.184%209.185%200%201018.368%200c0-4.303-2.871-7.171-5.405-9.702M6.72%2016.954c-.563-.019-2.64-3.6%201.215-7.416l2.55%202.788a.218.218%200%2001-.016.325c-.61.625-3.204%203.227-3.527%204.126-.066.186-.164.18-.222.177M12%2021.677a3.158%203.158%200%2001-3.158-3.159%203.291%203.291%200%2001.787-2.087c.57-.696%202.37-2.655%202.37-2.655s1.774%201.988%202.367%202.649a3.09%203.09%200%2001.792%202.093A3.158%203.158%200%200112%2021.677m6.046-5.123c-.068.15-.223.398-.431.405-.371.014-.411-.177-.686-.583-.604-.892-5.864-6.39-6.848-7.455-.866-.935-.122-1.595.223-1.94C10.736%206.547%2012%205.285%2012%205.285s3.766%203.574%205.336%206.016c1.57%202.443%201.029%204.556.71%205.253'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23526CFE'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eMaterial%20for%20MkDocs%3c/title%3e%3cpath%20d='m17.029%2018.772.777%201.166-5.417%202.709L0%2016.451V4.063l5.417-2.709%205.298%207.948%207.867-5.24L24%201.354V16.84l-5.417%202.709zm2.023-13.827v13.253l3.949-1.975V2.97zM5.076%202.642%201.458%204.45%2012.73%2021.358l3.618-1.809z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%237AB55C'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eShopify%3c/title%3e%3cpath%20d='M15.337%2023.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136-1.275-1.274-1.439-1.411c-.045-.037-.075-.057-.121-.074l-.914%2021.104h.023zM11.71%2011.305s-.81-.424-1.774-.424c-1.447%200-1.504.906-1.504%201.141%200%201.232%203.24%201.715%203.24%204.629%200%202.295-1.44%203.76-3.406%203.76-2.354%200-3.54-1.465-3.54-1.465l.646-2.086s1.245%201.066%202.28%201.066c.675%200%20.975-.545.975-.932%200-1.619-2.654-1.694-2.654-4.359-.034-2.237%201.571-4.416%204.827-4.416%201.257%200%201.875.361%201.875.361l-.945%202.715-.02.01zM11.17.83c.136%200%20.271.038.405.135-.984.465-2.064%201.639-2.508%203.992-.656.213-1.293.405-1.889.578C7.697%203.75%208.951.84%2011.17.84V.83zm1.235%202.949v.135c-.754.232-1.583.484-2.394.736.466-1.777%201.333-2.645%202.085-2.971.193.501.309%201.176.309%202.1zm.539-2.234c.694.074%201.141.867%201.429%201.755-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871v.002zm2.992%201.289c-.02%200-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209%2011.669%200%2011.265%200%208.159%200%206.675%203.877%206.21%205.846c-1.194.365-2.063.636-2.16.674-.675.213-.694.232-.772.87-.075.462-1.83%2014.063-1.83%2014.063L15.009%2024l.927-21.166z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23000000'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eSphinx%3c/title%3e%3cpath%20d='M16.284%2019.861c0-.654.177-1.834.393-2.623.499-1.822.774-4.079.497-4.079-.116%200-.959.762-1.873%201.694-3.472%203.54-7.197%205.543-10.312%205.543-1.778%200-2.987-.45-4.154-1.545C.128%2018.186%200%2017.858%200%2016.703c0-1.188.117-1.468.909-2.175.718-.642%201.171-.813%202.157-.813.76.171%201.21.16%201.457.461.251.296.338%201.265.035%201.832-.162.303-.585.491-1.105.491-.49%200-.77-.116-.669-.278.315-.511-.135-.857-.713-.548-.699.374-.711%201.698-.021%202.322.969.878%203.65%201.208%205.262.648%201.743-.605%204.022-2.061%205.841-3.732l1.6-1.469-2.088-.013c-2.186-.012-3.608-.273-8.211-1.506-1.531-.41-3.003-.765-3.271-.789-.304-.026-.503-.274-.487-.656.027-.646.378-1.127.793-1.308.249-.109%201.977-.274%203.809-.761%207.136-1.898%207.569-1.629%2012.323-.426%201.553.393%203.351.821%204.147.835%201.227.022%201.493.124%201.74.666.16.351.291.686.291.745%200%20.058-.695.424-1.545.813-3.12%201.428-4.104%202.185-3.088%203.635.421.602.412.666-.14%201.052-.323.227-.59.687-.593%201.022-.009.908-.583%202.856-1.417%203.624l-.732.675v-1.189Zm1.594-8.328c1.242-.346%201.994-.738%203.539-1.562-1.272-.372-4.462-.895-4.462-.895-2.354-.472-2.108-.448-2.214.071a3.475%203.475%200%200%201-.45%201.105c-.541.848-2.521%201.026-3.656.483-.356-.171-.714-.821-.709-1.283.007-.65-.362-.801-.598-.714-.191.07-.813.079-2.179.448-4.514%201.217-5.132%201.078-2.189%201.495.353.05%202.223.572%203.136.815%202.239.597%202.658.641%205.556.581%202.015-.042%202.858-.163%204.226-.544ZM.732%206.258c.056-.577.088-.702%201.692-1.025.919-.185%203.185-.785%205.036-1.333%204.254-1.26%205.462-1.263%209.873-.026%201.904.535%204.037.973%204.74.975%201.097.002%201.668.487%201.668.487.505%201.16.412%201.24-1.558%201.24-1.374%200-2.558-.232-4.385-.857-1.389-.476-3.369-.923-4.451-1.004-1.974-.149-1.971-.15-8.072%201.529-1.072.295-2.553.624-3.29.732l-1.342.196.089-.914Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%235C73E7'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eVitePress%3c/title%3e%3cpath%20d='M17.029.0014a1.8382%201.8382%200%200%200-.1875.0176L4.0845%201.8334C3.0779%201.9767%202.3767%202.9196%202.518%203.939l2.5604%2018.457c.1415%201.0193%201.0735%201.7292%202.08%201.586l12.757-1.8165c1.0066-.1433%201.7078-1.0861%201.5664-2.1054L18.9215%201.6049C18.7889.6493%2017.961-.035%2017.029.0014Zm.127.9316c.4271.027.7915.3549.8534.8008l2.5604%2018.457c.0707.5097-.28.9812-.7831%201.0528L7.0296%2023.058c-.5033.0717-.9683-.2833-1.039-.793L3.4302%203.81c-.0707-.5097.2799-.9811.7832-1.0528L16.9704.9408A.9066.9066%200%200%201%2017.156.933zm-3.6443%205.3541L9.9668%207.5215a.1364.1364%200%200%200-.0898.1406l.3183%203.8692c.0075.0911.0994.1497.1836.1171l.9824-.3789c.092-.0355.1894.0373.1836.1368l-.0898%201.539c-.006.1036.1005.1763.1933.1328l.5997-.2812c.093-.0435.1976.031.1914.1347l-.1465%202.418c-.0092.1513.195.2037.2578.0664l.041-.0918%202.123-6.4238c.0355-.1076-.0658-.2104-.1718-.1738l-1.0176.3515c-.0955.033-.1917-.0491-.1777-.1504l.3437-2.4902a.1368.1368%200%200%200-.1426-.1562c-.016-.001-.0422.0084-.037.0058zm2.8223.7988a.2717.2717%200%200%200-.0801.0137L14%207.8496l-.0762.5606.4551-.1563c.5074-.1627.973.2955.8106.8027l-2.131%206.4493-.0526.1171c-.1268.2776-.4416.4304-.7383.3516-.2904-.077-.4911-.353-.4727-.6562l.1094-1.8086c-.5057.2578-.9731-.1473-.9473-.5938l.0567-.9765-.4532.1757c-.4144.1536-.8298-.1366-.8632-.543L9.453%208.5997l-3.0625-.123c-.2294-.0093-.3635.2552-.2226.4394l6.291%208.2305c.1293.169.391.1302.4668-.0684l3.668-9.6191c.072-.1889-.0765-.377-.2598-.373z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%2321759B'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eWordPress%3c/title%3e%3cpath%20d='M21.469%206.825c.84%201.537%201.318%203.3%201.318%205.175%200%203.979-2.156%207.456-5.363%209.325l3.295-9.527c.615-1.54.82-2.771.82-3.864%200-.405-.026-.78-.07-1.11m-7.981.105c.647-.03%201.232-.105%201.232-.105.582-.075.514-.93-.067-.899%200%200-1.755.135-2.88.135-1.064%200-2.85-.15-2.85-.15-.585-.03-.661.855-.075.885%200%200%20.54.061%201.125.09l1.68%204.605-2.37%207.08L5.354%206.9c.649-.03%201.234-.1%201.234-.1.585-.075.516-.93-.065-.896%200%200-1.746.138-2.874.138-.2%200-.438-.008-.69-.015C4.911%203.15%208.235%201.215%2012%201.215c2.809%200%205.365%201.072%207.286%202.833-.046-.003-.091-.009-.141-.009-1.06%200-1.812.923-1.812%201.914%200%20.89.513%201.643%201.06%202.531.411.72.89%201.643.89%202.977%200%20.915-.354%201.994-.821%203.479l-1.075%203.585-3.9-11.61.001.014zM12%2022.784c-1.059%200-2.081-.153-3.048-.437l3.237-9.406%203.315%209.087c.024.053.05.101.078.149-1.12.393-2.325.609-3.582.609M1.211%2012c0-1.564.336-3.05.935-4.39L7.29%2021.709C3.694%2019.96%201.212%2016.271%201.211%2012M12%200C5.385%200%200%205.385%200%2012s5.385%2012%2012%2012%2012-5.385%2012-12S18.615%200%2012%200'/%3e%3c/svg%3e\"","/**\n * Integrations dashboard widget.\n *\n * This component renders a promotional card for the Smarter Chat\n * integrations, which add a deployed LLMClient's chat to a third-party\n * platform with @smarter.sh/ui-chat's embed script: the WordPress plugin, the\n * Drupal module, the Shopify app, the Google Tag Manager template, and the\n * plugins for the Docusaurus, MkDocs, Sphinx and VitePress documentation site\n * generators. Each integration is a logo tile that links to its\n * documentation, followed by links to the embedding guide and the source code.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the integrations call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Integrations />\n * <Integrations className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport docusaurusLogo from \"../../assets/docusaurus.svg\";\nimport drupalLogo from \"../../assets/drupal.svg\";\nimport materialformkdocsLogo from \"../../assets/materialformkdocs.svg\";\nimport shopifyLogo from \"../../assets/shopify.svg\";\nimport sphinxLogo from \"../../assets/sphinx.svg\";\nimport vitepressLogo from \"../../assets/vitepress.svg\";\nimport wordpressLogo from \"../../assets/wordpress.svg\";\n\n// The Google Tag Manager logo and the illustration are the Keen theme's. They stay at their\n// /static/assets/ paths, which the page serves along with the Keen stylesheet.\nconst DOCS = \"https://docs.smarter.sh/en/latest/smarter-framework\";\n\nconst INTEGRATIONS = [\n {\n name: \"WordPress\",\n logo: wordpressLogo,\n docs: `${DOCS}/smarter-wordpress.html`,\n },\n {\n name: \"Drupal\",\n logo: drupalLogo,\n docs: `${DOCS}/smarter-drupal.html`,\n },\n {\n name: \"Shopify\",\n logo: shopifyLogo,\n docs: `${DOCS}/smarter-shopify.html`,\n },\n {\n name: \"Google Tag Manager\",\n logo: \"/static/assets/media/svg/brand-logos/google-tag-manager.svg\",\n docs: `${DOCS}/smarter-gtm.html`,\n },\n {\n name: \"Docusaurus\",\n logo: docusaurusLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"MkDocs\",\n logo: materialformkdocsLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"Sphinx\",\n logo: sphinxLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"VitePress\",\n logo: vitepressLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n];\n\nexport interface IntegrationsProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Integrations({ className = \"col-xl-4\" }: IntegrationsProps) {\n return (\n <>\n <section id=\"integrations\" aria-label={gettext(\"Integrations\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Integrations widget */}\n <div className=\"card border-transparent h-100 integrations-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n <img\n src=\"/static/assets/media/illustrations/sketchy-1/17-dark.png\"\n className=\"position-absolute top-0 end-0 h-125px me-3 mt-3 integrations-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-white mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Put your chatbot %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"everywhere%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-warning border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-white opacity-75 fs-6 mb-7 z-index-2 integrations-lede\">\n {gettext(\"Add Smarter Chat to the sites your users already visit, with one setting.\")}\n </p>\n {/* end::Title */}\n {/* begin::Logos */}\n <ul className=\"integrations-grid z-index-2\">\n {INTEGRATIONS.map((integration) => (\n <li key={integration.name}>\n <a\n href={integration.docs}\n target=\"_blank\"\n className=\"integrations-tile hover-elevate-up\"\n title={integration.name}\n >\n <span className=\"integrations-logo\">\n <img src={integration.logo} alt=\"\" />\n </span>\n <span className=\"integrations-name\">{integration.name}</span>\n </a>\n </li>\n ))}\n </ul>\n {/* end::Logos */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a\n href={`${DOCS}/smarter-chat/embedding.html`}\n target=\"_blank\"\n className=\"btn btn-sm btn-warning fw-semibold me-2\"\n >\n {gettext(\"Embedding guide\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n aria-label={gettext(\"Integrations source code\")}\n >\n {gettext(\"GitHub\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Integrations widget */}\n </section>\n </>\n );\n}\n\nexport default Integrations;\n","/**\n * McpServer dashboard widget.\n *\n * This component renders a promotional card for the Smarter Project MCP\n * Server, which every platform runs at ``/api/v1/mcp/smarter-project/``: a\n * read-only Model Context Protocol server, without authentication, that answers\n * questions about The Smarter Project from its own code and documentation. It\n * shows the command that adds this platform's server to Claude Code, its main\n * tools, and a link to its documentation.\n *\n * :param serverUrl: The MCP server's url, in the command. Defaults to this platform's, on the page's\n * own domain. A page outside the web console, such as smarter.sh, passes a platform's absolute url.\n * :type serverUrl: str\n * :returns: A JSX fragment containing the MCP server call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <McpServer />\n * <McpServer serverUrl=\"https://platform.smarter.sh/api/v1/mcp/smarter-project/\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\n/** The server's path, on this platform's own domain. */\nconst MCP_SERVER_PATH = \"/api/v1/mcp/smarter-project/\";\n\nconst TOOLS = [\"search_documentation\", \"search_code\", \"read_file\"];\n\nexport interface McpServerProps {\n /** The MCP server's url, in the command. */\n serverUrl?: string;\n}\n\n/** This platform's server, on the page's own domain. Rendered without a browser, the path alone. */\nconst defaultServerUrl = () =>\n typeof window === \"undefined\" ? MCP_SERVER_PATH : `${window.location.origin}${MCP_SERVER_PATH}`;\n\nfunction McpServer({ serverUrl = defaultServerUrl() }: McpServerProps) {\n return (\n <>\n <section id=\"mcp-server\" aria-label={gettext(\"MCP Server\")} className=\"card border-transparent h-100 mcp-card\">\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n <span className=\"mcp-eyebrow\">{gettext(\"Smarter MCP Server\")}</span>\n <div className=\"fs-2x fw-bold mt-3 mb-2 mcp-headline\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Ask your %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"AI assistant%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 mcp-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-5 mcp-lede\">\n {gettext(\"This platform answers questions about itself from its own code and docs, for any MCP client.\")}\n </p>\n <pre className=\"mcp-command\" aria-label={gettext(\"Add this platform's MCP server to Claude Code\")}>\n <span className=\"mcp-prompt\">$ </span>claude mcp add --transport http smarter-project {serverUrl}\n </pre>\n <ul className=\"mcp-tools\" aria-label={gettext(\"Tools\")}>\n {TOOLS.map((tool) => (\n <li key={tool}>{tool}</li>\n ))}\n </ul>\n <div className=\"mt-auto pt-6\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-platform/smarter-project-mcp-server.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold mcp-btn\"\n >\n {gettext(\"Documentation\")}\n </a>\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default McpServer;\n","export default \"data:image/svg+xml,%3csvg%20fill='%2300ADD8'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eGo%3c/title%3e%3cpath%20d='M1.811%2010.231c-.047%200-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046%200%20.058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047%2011.306c-.047%200-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047%200%20.07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828%201.075c-.047%200-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047%200%20.07.035.07.082l-.023.28c0%20.047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204%201.274-1.192%202.22.011.935.654%201.706%201.577%201.835.795.105%201.46-.175%201.987-.77.105-.13.198-.27.315-.434H10.47c-.245%200-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315%200%2001.292-.187h4.253c-.023.316-.023.631-.07.947a4.983%204.983%200%2001-.958%202.29c-.841%201.11-1.94%201.8-3.33%201.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086%201.928-1.776%203.272-2.02%201.098-.2%202.15-.07%203.096.571.62.41%201.063.97%201.356%201.648.07.105.023.164-.117.2m3.868%206.461c-1.064-.024-2.034-.328-2.852-1.029a3.665%203.665%200%2001-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122%201.881-1.706%203.272-1.95%201.192-.21%202.314-.095%203.33.595.923.63%201.496%201.484%201.648%202.605.198%201.578-.257%202.863-1.344%203.962-.771.783-1.718%201.273-2.805%201.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045%202.033-.21.912.234%201.835%201.075%202.21.643.28%201.285.244%201.905-.07.923-.48%201.425-1.228%201.484-2.233z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%235FA04E'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eNode.js%3c/title%3e%3cpath%20d='M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383%20c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076%20c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0%20L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392%20c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021%20c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921%20c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603%20v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z%20M19.099,13.993%20c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233%20c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081%20c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833%20c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402%20c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253%20c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z'/%3e%3c/svg%3e\"","/**\n * Sdk dashboard widget.\n *\n * This component renders a promotional card for the Smarter developer SDKs:\n * the smarter-chat NPM package (@smarter.sh/ui-chat), the Node.js SDK\n * (@smarter.sh/api), the Python PyPI library (smarter-api) and the Go module\n * (github.com/smarter-sh/smarter-golang). Each SDK shows its logo, links to its\n * package registry, and shows its install command, followed by links to the\n * APIs and SDKs documentation and to a platform's OpenAPI document.\n *\n * :param openapiUrl: The OpenAPI document that the API reference button opens. Defaults to this\n * platform's, which every web console serves. A page outside the web console, such as\n * smarter.sh, passes a platform's absolute url.\n * :type openapiUrl: str\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the SDK call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Sdk />\n * <Sdk openapiUrl=\"https://platform.smarter.sh/docs/openapi/\" className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport goLogo from \"../../assets/go.svg\";\nimport nodedotjsLogo from \"../../assets/nodedotjs.svg\";\n\n/** This platform's OpenAPI document, which every platform serves in its web console. */\nconst OPENAPI_URL = \"/docs/openapi/\";\n\nexport interface SdkProps {\n /** The OpenAPI document that the API reference button opens. */\n openapiUrl?: string;\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\n// The React and Python logos, and the illustration below, are the Keen theme's. They stay at their\n// /static/assets/ paths, which the page serves along with the Keen stylesheet.\nconst SDKS = [\n {\n name: \"smarter-chat NPM Package\",\n href: \"https://www.npmjs.com/package/@smarter.sh/ui-chat\",\n logo: \"/static/assets/media/svg/brand-logos/react.svg\",\n install: \"npm install @smarter.sh/ui-chat\",\n },\n {\n name: \"Node.js SDK\",\n href: \"https://www.npmjs.com/package/@smarter.sh/api\",\n logo: nodedotjsLogo,\n install: \"npm install @smarter.sh/api\",\n },\n {\n name: \"Python PyPi Library\",\n href: \"https://pypi.org/project/smarter-api/\",\n logo: \"/static/assets/media/svg/brand-logos/python-5.svg\",\n install: \"pip install smarter-api\",\n },\n {\n name: \"Go SDK\",\n href: \"https://pkg.go.dev/github.com/smarter-sh/smarter-golang\",\n logo: goLogo,\n install: \"go get github.com/smarter-sh/smarter-golang\",\n },\n];\n\nfunction Sdk({ openapiUrl = OPENAPI_URL, className = \"col-xl-4\" }: SdkProps) {\n return (\n <>\n <section id=\"sdk\" aria-label={gettext(\"SDK\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::SDKs widget */}\n <div className=\"card border-transparent h-100 sdk-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n <img\n src=\"/static/assets/media/illustrations/dozzy-1/4.png\"\n className=\"position-absolute top-0 end-0 h-100px me-1 mt-1\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-gray-900 mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Build with the %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"SDKs%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-danger border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-7 z-index-2 sdk-lede\">\n {gettext(\"Typed access to your Smarter resources, in the language you already use.\")}\n </p>\n {/* end::Title */}\n {/* begin::SDKs */}\n <ul className=\"sdk-list z-index-2\">\n {SDKS.map((sdk) => (\n <li key={sdk.name} className=\"sdk-item\">\n <span className=\"sdk-logo\">\n <img src={sdk.logo} alt=\"\" />\n </span>\n <span className=\"sdk-text\">\n <a href={sdk.href} target=\"_blank\" className=\"sdk-name\">\n {sdk.name}\n </a>\n <span className=\"sdk-install\">{sdk.install}</span>\n </span>\n </li>\n ))}\n </ul>\n {/* end::SDKs */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap gap-2 mt-auto pt-7 z-index-2\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/apis-and-sdks.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-danger fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n <a href={openapiUrl} className=\"btn btn-sm btn-light-danger fw-semibold\">\n {gettext(\"API reference\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh\"\n target=\"_blank\"\n className=\"btn btn-sm btn-dark fw-semibold\"\n aria-label={gettext(\"SDK source code\")}\n >\n {gettext(\"GitHub\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::SDKs widget */}\n </section>\n </>\n );\n}\n\nexport default Sdk;\n","/**\n * How the tree presents each kind of SAM resource: its color, what it does for the LLMClient, in a few words, and\n * its page in the documentation. Kinds of the same family, e.g. the plugins, share them. Each kind's icon is the\n * backend's, in the tree's nodes: see SAMKinds.icon() in smarter.apps.api.v1.manifests.enum.\n */\nimport { gettext } from \"@smarter/common\";\n\n/** The documentation that the cards link to. */\nexport const DOCS = \"https://docs.smarter.sh/en/latest\";\n\n/** A Bootstrap color of the web console's theme, for a kind's icon and the accent of its card. */\nexport type Tone = \"primary\" | \"info\" | \"success\" | \"warning\" | \"danger\" | \"dark\" | \"secondary\";\n\nexport interface KindInfo {\n tone: Tone;\n /** What the resource does for the LLMClient that uses it, in a few words. */\n role: string;\n /** The kind's page in the documentation. */\n docsUrl: string;\n}\n\nconst RESOURCES = `${DOCS}/smarter-resources`;\n/** The kinds of plugin, which share a presentation. */\nexport const PLUGIN_KINDS = [\n \"Plugin\",\n \"StaticPlugin\",\n \"ApiPlugin\",\n \"SkillPlugin\",\n \"SqlPlugin\",\n \"WebsearchPlugin\",\n \"ImageSearchPlugin\",\n];\n\n/**\n * The presentation of a kind of resource. A kind that the tree doesn't know, e.g. a new one, has a neutral color\n * and the documentation of the manifests.\n *\n * @param kind - The SAM kind, e.g. \"SqlPlugin\", or \"Extension\", which is not a SAM kind.\n */\nexport function kindInfo(kind: string): KindInfo {\n if (PLUGIN_KINDS.includes(kind)) {\n return {\n tone: \"success\",\n role: gettext(\"A tool that the LLM can call\"),\n docsUrl: `${RESOURCES}/smarter-llmtool.html`,\n };\n }\n switch (kind) {\n case \"LLMClient\":\n return {\n tone: \"primary\",\n role: gettext(\"A chat with an LLM, its tools, and its rules\"),\n docsUrl: `${RESOURCES}/smarter-llmclient.html`,\n };\n case \"Provider\":\n return {\n tone: \"info\",\n role: gettext(\"The LLM provider whose models it prompts\"),\n docsUrl: `${RESOURCES}/smarter-provider.html`,\n };\n case \"MCPClient\":\n return {\n tone: \"info\",\n role: gettext(\"The tools of a remote MCP server\"),\n docsUrl: `${RESOURCES}/smarter-mcpclient.html`,\n };\n case \"Extension\":\n return {\n tone: \"success\",\n role: gettext(\"Tools installed from an extension package\"),\n docsUrl: `${DOCS}/smarter-framework/smarter-extensions.html`,\n };\n case \"Guardrail\":\n return {\n tone: \"dark\",\n role: gettext(\"Screens prompts and responses\"),\n docsUrl: `${RESOURCES}/smarter-guardrail.html`,\n };\n case \"ApiConnection\":\n return {\n tone: \"warning\",\n role: gettext(\"How a plugin reaches a remote api\"),\n docsUrl: `${RESOURCES}/smarter-connection.html`,\n };\n case \"SqlConnection\":\n return {\n tone: \"warning\",\n role: gettext(\"How a plugin reaches a database\"),\n docsUrl: `${RESOURCES}/smarter-connection.html`,\n };\n case \"Secret\":\n return {\n tone: \"danger\",\n role: gettext(\"An encrypted credential\"),\n docsUrl: `${RESOURCES}/smarter-secret.html`,\n };\n case \"SmarterAuthToken\":\n return {\n tone: \"warning\",\n role: gettext(\"The api key that its url requires\"),\n docsUrl: `${RESOURCES}/smarter-authtoken.html`,\n };\n case \"CustomDomain\":\n return {\n tone: \"info\",\n role: gettext(\"The domain that it is served from\"),\n docsUrl: `${RESOURCES}/smarter-custom-domain.html`,\n };\n case \"LLMHost\":\n case \"LLMHostCompute\":\n return {\n tone: \"secondary\",\n role: gettext(\"Compute that hosts an LLM\"),\n docsUrl: `${RESOURCES}/smarter-llmhost.html`,\n };\n case \"Orchestrator\":\n return {\n tone: \"primary\",\n role: gettext(\"Coordinates several LLMClients\"),\n docsUrl: `${RESOURCES}/smarter-orchestrator.html`,\n };\n case \"Proxy\":\n return {\n tone: \"secondary\",\n role: gettext(\"Forwards requests to an LLM provider\"),\n docsUrl: `${RESOURCES}/smarter-proxy.html`,\n };\n case \"Vectorstore\":\n return {\n tone: \"info\",\n role: gettext(\"Documents, indexed for search\"),\n docsUrl: `${RESOURCES}/smarter-vectorstore.html`,\n };\n case \"Vectorsearch\":\n return {\n tone: \"info\",\n role: gettext(\"Searches a vector store\"),\n docsUrl: `${RESOURCES}/smarter-vectorsearch.html`,\n };\n case \"Budget\":\n return {\n tone: \"secondary\",\n role: gettext(\"Limits what it may spend\"),\n docsUrl: `${RESOURCES}/smarter-budget.html`,\n };\n default:\n return {\n tone: \"secondary\",\n role: gettext(\"A SAM resource\"),\n docsUrl: `${DOCS}/smarter-framework/smarter-manifests.html`,\n };\n }\n}\n","/**\n * One resource of the tree, as a card: its kind, its name and its owner. The card opens the resource's manifest\n * page, where its manifest can be edited, in a new tab. A resource that the user may not read is a locked card,\n * with its kind and record locator only.\n */\nimport { gettext, interpolate } from \"@smarter/common\";\n\nimport { kindInfo } from \"./kinds\";\nimport type { ResourceTreeNode } from \"./types\";\n\ninterface ResourceCardProps {\n node: ResourceTreeNode;\n /** The LLMClient itself, at the root of the tree, whose card stands out. */\n isRoot?: boolean;\n}\n\nexport default function ResourceCard({ node, isRoot = false }: ResourceCardProps) {\n const info = kindInfo(node.kind);\n const locked = !node.readable;\n const opens = !locked && !!node.url;\n const name = node.name ?? node.recordLocator ?? node.kind;\n const classes = [\n \"architecture-card\",\n `architecture-card-${info.tone}`,\n isRoot ? \"architecture-card-root\" : \"\",\n locked ? \"architecture-card-locked\" : \"\",\n opens ? \"architecture-card-link\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <article className={classes} aria-label={`${node.kind} ${name}`}>\n <span className={`architecture-card-icon text-${info.tone} bg-light-${info.tone}`} aria-hidden=\"true\">\n <i className={`ki-outline ki-${locked ? \"lock-3\" : node.icon}`} data-testid=\"architecture-card-icon\" />\n </span>\n <div className=\"architecture-card-body\">\n <div className=\"d-flex align-items-center gap-2\">\n {/* the kind is a product term, e.g. SqlPlugin, which isn't translated. */}\n <span className={`architecture-card-kind text-${info.tone}`}>{node.kind}</span>\n <a\n href={info.docsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"architecture-card-docs text-gray-500 text-hover-primary\"\n title={interpolate(gettext(\"About %(kind)s, in the documentation\"), { kind: node.kind })}\n >\n <i className=\"ki-outline ki-information-5 fs-7\" aria-hidden=\"true\" />\n <span className=\"visually-hidden\">\n {interpolate(gettext(\"About %(kind)s, in the documentation\"), { kind: node.kind })}\n </span>\n </a>\n </div>\n {locked ? (\n <>\n <div className=\"architecture-card-name text-gray-600\">{gettext(\"You can't read this resource\")}</div>\n <div className=\"architecture-card-meta\">\n <code className=\"architecture-card-locator\">{node.recordLocator}</code>\n </div>\n </>\n ) : (\n <>\n {opens ? (\n <a\n href={node.url ?? undefined}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"architecture-card-name stretched-link\"\n title={interpolate(gettext(\"Open the manifest of %(name)s in a new tab\"), { name })}\n >\n {name}\n </a>\n ) : (\n <div className=\"architecture-card-name\">{name}</div>\n )}\n <div className=\"architecture-card-meta\" title={info.role}>\n <span className=\"text-truncate\">{info.role}</span>\n </div>\n {node.owner && (\n <div className=\"architecture-card-meta\">\n <i className=\"ki-outline ki-profile-circle fs-7 me-1\" aria-hidden=\"true\" />\n <span className=\"visually-hidden\">{gettext(\"Owner\")}: </span>\n <span className=\"text-truncate\">{node.owner}</span>\n </div>\n )}\n </>\n )}\n </div>\n {opens && (\n <span className=\"architecture-card-open text-gray-400\" aria-hidden=\"true\">\n <i className=\"ki-outline ki-arrow-up-right\" />\n </span>\n )}\n </article>\n );\n}\n","/** The tree's arithmetic: what the toolbar counts, and which nodes the Collapse all button closes. */\nimport type { ResourceTreeNode } from \"./types\";\n\n/** A node's id in the tree: the indexes of its ancestors and itself, e.g. \"0.2.1\", since a resource can appear twice. */\nexport type NodeId = string;\n\n/** The id of a node's child. */\nexport const childId = (parent: NodeId, index: number): NodeId => `${parent}.${index}`;\n\n/** The root's id. */\nexport const ROOT_ID: NodeId = \"0\";\n\n/** The number of resources in the tree, counting a resource that appears twice once. */\nexport function countResources(tree: ResourceTreeNode): number {\n const seen = new Set<string>();\n let anonymous = 0;\n const visit = (node: ResourceTreeNode) => {\n if (node.recordLocator) seen.add(node.recordLocator);\n else anonymous += 1;\n node.children.forEach(visit);\n };\n visit(tree);\n return seen.size + anonymous;\n}\n\n/** The number of levels below the root: 0 for an LLMClient that uses nothing. */\nexport function depth(tree: ResourceTreeNode): number {\n return tree.children.length ? 1 + Math.max(...tree.children.map(depth)) : 0;\n}\n\n/** The ids of the nodes that have children, except the root, which is always open. */\nexport function branchIds(tree: ResourceTreeNode): NodeId[] {\n const ids: NodeId[] = [];\n const visit = (node: ResourceTreeNode, id: NodeId) => {\n if (id !== ROOT_ID && node.children.length) ids.push(id);\n node.children.forEach((child, index) => visit(child, childId(id, index)));\n };\n visit(tree, ROOT_ID);\n return ids;\n}\n","/**\n * ResourceTree widget: an LLMClient's architecture, the tree of the SAM resources that it is built from. Each\n * resource is a card, and beneath it, joined by lines, are the cards of the resources that it uses. A resource that\n * uses others has a button that hides them, or shows them again. The web console's Architecture tab\n * (@smarter/llmclient-architecture) renders it with its toolbar, and smarter.sh beside each assistant's live chat.\n *\n * The tree is controlled, with collapsed and onToggle, or keeps which resources are collapsed itself.\n *\n * :param tree: The tree, as the web console's architecture view returns it.\n * :type tree: ResourceTreeNode\n * :param collapsed: The ids of the resources whose children are hidden, for a controlled tree.\n * :type collapsed: ReadonlySet<NodeId>\n * :param onToggle: Hides or shows a resource's children, for a controlled tree.\n * :type onToggle: (id: NodeId) => void\n * :param label: The tree's accessible name. Defaults to \"The resources that this LLMClient is built from\".\n * :type label: str\n * :param defaultCollapsed: For a tree that isn't controlled: whether it opens with every resource's children hidden,\n * but the root's, so that it shows the LLMClient and the resources that it uses directly.\n * :type defaultCollapsed: bool\n *\n * :example:\n *\n * <ResourceTree tree={tree} />\n * <ResourceTree tree={tree} defaultCollapsed />\n */\nimport { useState } from \"react\";\nimport { gettext, interpolate, ngettext } from \"@smarter/common\";\n\nimport \"./styles.css\";\nimport ResourceCard from \"./ResourceCard\";\nimport { branchIds, childId, ROOT_ID, type NodeId } from \"./tree\";\nimport type { ResourceTreeNode } from \"./types\";\n\ninterface BranchProps {\n node: ResourceTreeNode;\n id: NodeId;\n collapsed: ReadonlySet<NodeId>;\n onToggle: (id: NodeId) => void;\n}\n\nfunction Branch({ node, id, collapsed, onToggle }: BranchProps) {\n const isRoot = id === ROOT_ID;\n const hasChildren = node.children.length > 0;\n const open = isRoot || !collapsed.has(id);\n const name = node.name ?? node.kind;\n const childrenId = `architecture-children-${id.replaceAll(\".\", \"-\")}`;\n return (\n <li className={`architecture-node${isRoot ? \" architecture-node-root\" : \"\"}`}>\n <div className=\"architecture-row\">\n {!isRoot &&\n (hasChildren ? (\n <button\n type=\"button\"\n className=\"architecture-toggle btn btn-icon btn-sm btn-light\"\n aria-expanded={open}\n aria-controls={childrenId}\n title={\n open\n ? interpolate(gettext(\"Hide what %(name)s uses\"), { name })\n : interpolate(gettext(\"Show what %(name)s uses\"), { name })\n }\n onClick={() => onToggle(id)}\n >\n <i className={`ki-outline ki-${open ? \"minus-square\" : \"plus-square\"} fs-4`} aria-hidden=\"true\" />\n <span className=\"visually-hidden\">\n {open\n ? interpolate(gettext(\"Hide what %(name)s uses\"), { name })\n : interpolate(gettext(\"Show what %(name)s uses\"), { name })}\n </span>\n </button>\n ) : (\n <span className=\"architecture-toggle-spacer\" aria-hidden=\"true\" />\n ))}\n <ResourceCard node={node} isRoot={isRoot} />\n {hasChildren && !open && (\n <span className=\"architecture-hidden-count badge badge-light-secondary text-gray-700\">\n {interpolate(ngettext(\"%(count)s more\", \"%(count)s more\", node.children.length), {\n count: node.children.length,\n })}\n </span>\n )}\n </div>\n {hasChildren && open && (\n <ul className=\"architecture-children\" id={childrenId}>\n {node.children.map((child, index) => (\n <Branch\n key={childId(id, index)}\n node={child}\n id={childId(id, index)}\n collapsed={collapsed}\n onToggle={onToggle}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\nexport interface ResourceTreeProps {\n tree: ResourceTreeNode;\n /** The ids of the resources whose children are hidden, for a controlled tree. */\n collapsed?: ReadonlySet<NodeId>;\n /** Hides or shows a resource's children, for a controlled tree. */\n onToggle?: (id: NodeId) => void;\n /** The tree's accessible name. */\n label?: string;\n /** For a tree that isn't controlled: whether it opens with every resource's children hidden, but the root's. */\n defaultCollapsed?: boolean;\n}\n\nexport default function ResourceTree({\n tree,\n collapsed,\n onToggle,\n label,\n defaultCollapsed = false,\n}: ResourceTreeProps) {\n const [ownCollapsed, setOwnCollapsed] = useState<ReadonlySet<NodeId>>(\n () => new Set(defaultCollapsed ? branchIds(tree) : []),\n );\n const toggleOwn = (id: NodeId) =>\n setOwnCollapsed((current) => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n return (\n <ul className=\"architecture-tree\" aria-label={label ?? gettext(\"The resources that this LLMClient is built from\")}>\n <Branch node={tree} id={ROOT_ID} collapsed={collapsed ?? ownCollapsed} onToggle={onToggle ?? toggleOwn} />\n </ul>\n );\n}\n","export default \"data:image/svg+xml,%3csvg%20fill='%232496ED'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDocker%3c/title%3e%3cpath%20d='M13.983%2011.078h2.119a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.119a.185.185%200%2000-.185.185v1.888c0%20.102.083.185.185.185m-2.954-5.43h2.118a.186.186%200%2000.186-.186V3.574a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m0%202.716h2.118a.187.187%200%2000.186-.186V6.29a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.887c0%20.102.082.185.185.186m-2.93%200h2.12a.186.186%200%2000.184-.186V6.29a.185.185%200%2000-.185-.185H8.1a.185.185%200%2000-.185.185v1.887c0%20.102.083.185.185.186m-2.964%200h2.119a.186.186%200%2000.185-.186V6.29a.185.185%200%2000-.185-.185H5.136a.186.186%200%2000-.186.185v1.887c0%20.102.084.185.186.186m5.893%202.715h2.118a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m-2.93%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.083.185.185.185m-2.964%200h2.119a.185.185%200%2000.185-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.186.186%200%2000-.186.186v1.887c0%20.102.084.185.186.185m-2.92%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.082.185.185.185M23.763%209.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612%201.43-.23.97-.09%201.882.403%202.661-.595.332-1.55.413-1.744.42H.751a.751.751%200%2000-.75.748%2011.376%2011.376%200%2000.692%204.062c.545%201.428%201.355%202.48%202.41%203.124%201.18.723%203.1%201.137%205.275%201.137.983.003%201.963-.086%202.93-.266a12.248%2012.248%200%20003.823-1.389c.98-.567%201.86-1.288%202.61-2.136%201.252-1.418%201.998-2.997%202.553-4.4h.221c1.372%200%202.215-.549%202.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23326CE5'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eKubernetes%3c/title%3e%3cpath%20d='M10.204%2014.35l.007.01-.999%202.413a5.171%205.171%200%200%201-2.075-2.597l2.578-.437.004.005a.44.44%200%200%201%20.484.606zm-.833-2.129a.44.44%200%200%200%20.173-.756l.002-.011L7.585%209.7a5.143%205.143%200%200%200-.73%203.255l2.514-.725.002-.009zm1.145-1.98a.44.44%200%200%200%20.699-.337l.01-.005.15-2.62a5.144%205.144%200%200%200-3.01%201.442l2.147%201.523.004-.002zm.76%202.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44%200%200%200%20.7.336l.008.003%202.134-1.513a5.188%205.188%200%200%200-2.992-1.442l.148%202.615.002.001zm10.876%205.97l-5.773%207.181a1.6%201.6%200%200%201-1.248.594l-9.261.003a1.6%201.6%200%200%201-1.247-.596l-5.776-7.18a1.583%201.583%200%200%201-.307-1.34L2.1%205.573c.108-.47.425-.864.863-1.073L11.305.513a1.606%201.606%200%200%201%201.385%200l8.345%203.985c.438.209.755.604.863%201.073l2.062%208.955c.108.47-.005.963-.308%201.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45%206.45%200%200%200-.105-2.332%206.465%206.465%200%200%200-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545%206.545%200%200%200-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142%200-.306-.224-.555-.5-.555-.275%200-.499.249-.499.555l.001.014c0%20.041-.002.092%200%20.128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545%200%200%201-.162.258l-.012.211a6.424%206.424%200%200%200-4.166%202.003%208.373%208.373%200%200%201-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594%200%200%200-.348-.132.481.481%200%200%200-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462%206.462%200%200%200-1.02%204.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5%206.5%200%200%200%202.88%203.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453%206.453%200%200%200%204.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499%206.499%200%200%200%202.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4%209.701l-1.95%201.746v.005a.44.44%200%200%200%20.173.757l.003.01%202.526.728a5.199%205.199%200%200%200-.108-1.674A5.208%205.208%200%200%200%2016.4%209.7zm-4.013%205.325a.437.437%200%200%200-.404-.232.44.44%200%200%200-.372.233h-.002l-1.268%202.292a5.164%205.164%200%200%200%203.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44%200%200%200-.27.036.44.44%200%200%200-.214.572l-.003.004%201.01%202.438a5.15%205.15%200%200%200%202.081-2.615l-2.6-.44-.004.005z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23844FBA'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eTerraform%3c/title%3e%3cpath%20d='M1.44%200v7.575l6.561%203.79V3.787zm21.12%204.227l-6.561%203.791v7.574l6.56-3.787zM8.72%204.23v7.575l6.561%203.787V8.018zm0%208.405v7.575L15.28%2024v-7.578z'/%3e%3c/svg%3e\"","/**\n * SelfHost dashboard widget.\n *\n * This component renders a promotional card for self-hosting Smarter, as a\n * three-step path from a laptop to production: the Docker Compose Quick Start\n * (smarter-deploy), the official Helm chart for Kubernetes, and the official\n * Terraform modules for AWS (smarter-infrastructure). Each step links to its\n * resource, followed by a link to the installation guide.\n *\n * :returns: A JSX fragment containing the self-host call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <SelfHost />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport dockerLogo from \"../../assets/docker.svg\";\nimport kubernetesLogo from \"../../assets/kubernetes.svg\";\nimport terraformLogo from \"../../assets/terraform.svg\";\n\nconst STEPS = [\n {\n name: \"Docker\",\n where: gettext(\"Your laptop\"),\n description: gettext(\"Quick Start with Docker Compose\"),\n logo: dockerLogo,\n href: \"https://github.com/smarter-sh/smarter-deploy\",\n },\n {\n name: \"Kubernetes\",\n where: gettext(\"Your cluster\"),\n description: gettext(\"The official Helm chart\"),\n logo: kubernetesLogo,\n href: \"https://artifacthub.io/packages/helm/project-smarter/smarter\",\n },\n {\n name: \"Terraform\",\n where: gettext(\"Your AWS cloud\"),\n description: gettext(\"The official Terraform modules\"),\n logo: terraformLogo,\n href: \"https://github.com/smarter-sh/smarter-infrastructure\",\n },\n];\n\nfunction SelfHost() {\n return (\n <>\n {/* begin::Engage widget 4 */}\n <section\n id=\"self-host\"\n aria-label={gettext(\"Self Host\")}\n className=\"card border-transparent h-100 selfhost-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n {/* begin::Title */}\n <span className=\"selfhost-eyebrow\">{gettext(\"Self-host Smarter\")}</span>\n <div className=\"fs-2x fw-bold text-white mt-3 mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Run it %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"anywhere%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 selfhost-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-7 selfhost-lede\">\n {gettext(\"The same open source platform, from your laptop to production. No license fees, no seat counts.\")}\n </p>\n {/* end::Title */}\n {/* begin::Steps */}\n <ol className=\"selfhost-steps\">\n {STEPS.map((step, index) => (\n <li key={step.name} className=\"selfhost-step\">\n <a href={step.href} target=\"_blank\" className=\"selfhost-step-link hover-elevate-up\">\n <span className=\"selfhost-logo\">\n <img src={step.logo} alt=\"\" />\n <span className=\"selfhost-number\">{index + 1}</span>\n </span>\n <span className=\"selfhost-where\">{step.where}</span>\n <span className=\"selfhost-name\">{step.name}</span>\n <span className=\"selfhost-description\">{step.description}</span>\n </a>\n </li>\n ))}\n </ol>\n {/* end::Steps */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap align-items-center gap-3 mt-auto pt-7\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-platform/installation.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold selfhost-btn\"\n >\n {gettext(\"Installation Guide\")}\n </a>\n <span className=\"selfhost-license\">{gettext(\"Open source · AGPL-3.0\")}</span>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </section>\n {/* end::Engage widget 4 */}\n </>\n );\n}\n\nexport default SelfHost;\n","/**\n * VSCodeExtension dashboard widget.\n *\n * This component renders a promotional card for the Smarter Manifest VS Code\n * extension: its main features, direct links to the Visual Studio Marketplace\n * listing and official documentation, its install count, and a mock editor\n * that shows the extension flagging a misspelled key in a manifest.\n *\n * :returns: A JSX fragment containing the VS Code extension call-to-action\n * widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <VSCodeExtension />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst MARKETPLACE = \"https://marketplace.visualstudio.com/items?itemName=Querium.smarter-manifest\";\n\nconst FEATURES = [\n gettext(\"Validation as you type\"),\n gettext(\"Quick fixes for misspelled keys\"),\n gettext(\"Completion and hover help\"),\n gettext(\"Apply and deploy from the editor\"),\n];\n\nfunction VSCodeExtension() {\n return (\n <>\n {/* begin::Download VS Code Extension widget 4 */}\n <div\n id=\"vscode-extension\"\n aria-label={gettext(\"VS Code Extension\")}\n className=\"card border-transparent h-100 vscode-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body ps-xl-15\">\n <div className=\"row g-7 align-items-center\">\n {/* begin::Pitch */}\n <div className=\"col-md-6\">\n {/* begin::Title */}\n <div className=\"fs-2x fw-bold text-white mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Get the %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n <a href={MARKETPLACE} className=\"vscode-title-link\">\n {gettext(\"VS Code Extension\")}\n </a>\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 vscode-underline\"></span>\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-400 fs-6 mb-5\">\n {interpolateNodes(\n gettext(\n \"Write Smarter manifests with the same validation that %(code)s uses, before you apply them.\",\n ),\n { code: <code className=\"vscode-inline\">smarter apply</code> },\n )}\n </p>\n {/* end::Title */}\n {/* begin::Features */}\n <ul className=\"vscode-features\" aria-label={gettext(\"Features\")}>\n {FEATURES.map((feature) => (\n <li key={feature}>\n <span className=\"vscode-check\">&#10003;</span>\n {feature}\n </li>\n ))}\n </ul>\n {/* end::Features */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap align-items-center gap-2 mt-6\">\n <a href={MARKETPLACE} target=\"_blank\" className=\"btn btn-sm fw-semibold vscode-btn\">\n {gettext(\"Install\")}\n </a>\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/vs-code-extension.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n <a href={MARKETPLACE} target=\"_blank\" className=\"ms-2\">\n <img\n src=\"https://vsmarketplacebadges.dev/installs-short/Querium.smarter-manifest.svg\"\n alt={gettext(\"Installs\")}\n />\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Pitch */}\n {/* begin::Editor */}\n <div className=\"col-md-6\">\n <div className=\"vscode-editor\" aria-label={gettext(\"Example manifest with a validation problem\")}>\n <div className=\"vscode-editor-bar\">\n <span className=\"vscode-dot vscode-dot-red\"></span>\n <span className=\"vscode-dot vscode-dot-yellow\"></span>\n <span className=\"vscode-dot vscode-dot-green\"></span>\n <span className=\"vscode-tab\">\n {/* Served by the page: library mode would inline it, and it is 115 kB. */}\n <img src=\"/static/images/vs-code-logo.png\" alt=\"\" />\n {gettext(\"secret.yaml\")}\n </span>\n </div>\n <pre className=\"vscode-code\">\n <div>\n <span className=\"vscode-ln\">1</span>\n <span className=\"vscode-key\">apiVersion</span>: <span className=\"vscode-str\">smarter.sh/v1</span>\n </div>\n <div>\n <span className=\"vscode-ln\">2</span>\n <span className=\"vscode-key\">kind</span>: <span className=\"vscode-str\">Secret</span>\n </div>\n <div>\n <span className=\"vscode-ln\">3</span>\n <span className=\"vscode-key\">metadata</span>:\n </div>\n <div>\n <span className=\"vscode-ln\">4</span>\n {\" \"}\n <span className=\"vscode-key\">name</span>: <span className=\"vscode-str\">openai_api_key</span>\n </div>\n <div>\n <span className=\"vscode-ln\">5</span>\n {\" \"}\n <span className=\"vscode-key vscode-squiggle\">descripton</span>:{\" \"}\n <span className=\"vscode-str\">The OpenAI API key</span>\n <span className=\"vscode-hover\" role=\"note\">\n Unknown key &apos;descripton&apos; in metadata. Did you mean &apos;description&apos;?\n </span>\n </div>\n <div>\n <span className=\"vscode-ln\">6</span>\n {\" \"}\n <span className=\"vscode-key\">version</span>: <span className=\"vscode-str\">1.0.0</span>\n </div>\n <div>\n <span className=\"vscode-ln\">7</span>\n <span className=\"vscode-key\">spec</span>:\n </div>\n </pre>\n </div>\n </div>\n {/* end::Editor */}\n </div>\n </div>\n {/* end::Body */}\n </div>\n {/* end::Download VS Code Extension widget 4 */}\n </>\n );\n}\n\nexport default VSCodeExtension;\n","/**\n * WhatsNew dashboard widget.\n *\n * This component renders a card that highlights notable features added in\n * recent Smarter releases, with each entry linking to its documentation page\n * on docs.smarter.sh.\n *\n * :returns: A JSX fragment containing the new features widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <WhatsNew />\n */\nimport \"./styles.css\";\nimport { gettext } from \"@smarter/common\";\n\ninterface Feature {\n name: string;\n version: string;\n description: string;\n docsPath: string;\n}\n\nconst DOCS_BASE_URL = \"https://docs.smarter.sh\";\n\nconst FEATURES: Feature[] = [\n {\n name: gettext(\"Extensions\"),\n version: \"0.27\",\n description: gettext(\"Install signed, third-party LLM tools from the Smarter Extension registry\"),\n docsPath: \"smarter-platform/extensions.html\",\n },\n {\n name: \"Smarter MCP Server\",\n version: \"0.24\",\n description: gettext(\"Answers about The Smarter Project, from its own code and docs, for any MCP client\"),\n docsPath: \"smarter-platform/smarter-project-mcp-server.html\",\n },\n {\n name: \"OpenAPI\",\n version: \"0.22\",\n description: gettext(\"An OpenAPI document and JSON Schemas for the Smarter api, served by every platform\"),\n docsPath: \"smarter-framework/smarter-openapi.html\",\n },\n {\n name: gettext(\"Themable Chat\"),\n version: \"0.21\",\n description: gettext(\"Brand your LLMClient's chat with your own logo, colors, fonts and avatar\"),\n docsPath: \"smarter-resources/llmclient/styles.html\",\n },\n {\n name: \"ImageSearchPlugin\",\n version: \"0.19\",\n description: gettext(\"Let LLMs find and show images from the web\"),\n docsPath: \"smarter-resources/llmtool/plugin/image-search.html\",\n },\n {\n name: gettext(\"Infrastructure Manager\"),\n version: \"0.18\",\n description: gettext(\"Manage and monitor your cloud infrastructure from the web console\"),\n docsPath: \"smarter-framework/technologies/infrastructure.html\",\n },\n {\n name: gettext(\"Custom Domains\"),\n version: \"0.18\",\n description: gettext(\"Serve LLMClients from your own branded domain, managed with a SAM manifest\"),\n docsPath: \"smarter-resources/smarter-custom-domain.html\",\n },\n {\n name: gettext(\"Manifest Editor\"),\n version: \"0.17\",\n description: gettext(\"Edit, validate, save, clone and delete manifests in the web console\"),\n docsPath: \"smarter-platform/smarter-web-console.html\",\n },\n {\n name: gettext(\"Budgets\"),\n version: \"0.16\",\n description: gettext(\"Enforce spending limits on any resource, with budget vs actual charts\"),\n docsPath: \"smarter-resources/smarter-budget.html\",\n },\n {\n name: \"LLMHosts\",\n version: \"0.16\",\n description: gettext(\"Run open-weight LLMs on your own Kubernetes cluster\"),\n docsPath: \"smarter-resources/smarter-llmhost.html\",\n },\n {\n name: gettext(\"Proxies\"),\n version: \"0.16\",\n description: gettext(\"Pass requests through to LLM provider APIs, with keys kept as Smarter Secrets\"),\n docsPath: \"smarter-resources/smarter-proxy.html\",\n },\n {\n name: \"VectorStores\",\n version: \"0.16\",\n description: gettext(\"Manage RAG vector databases: self-hosted Qdrant, Qdrant Cloud and Pinecone\"),\n docsPath: \"smarter-resources/smarter-vectorstore.html\",\n },\n];\n\nfunction WhatsNew() {\n return (\n <>\n {/* begin::What's New widget */}\n <section id=\"whats-new\" aria-label={gettext(\"What's New\")} className=\"card border-transparent h-xl-100\">\n {/* begin::Header */}\n <div className=\"card-header border-0 pt-5\">\n <h3 className=\"card-title align-items-start flex-column\">\n <span className=\"card-label fw-bold text-gray-900\">{gettext(\"What's New\")}</span>\n <span className=\"text-muted mt-1 fw-semibold fs-7\">{gettext(\"Recently added Smarter features\")}</span>\n </h3>\n </div>\n {/* end::Header */}\n {/* begin::Body */}\n <div className=\"card-body pt-3\">\n <ul className=\"whats-new-list list-unstyled row g-4 mb-0\">\n {FEATURES.map((feature) => (\n <li key={feature.name} className=\"col-md-6 d-flex align-items-start\">\n <span className=\"badge badge-light-primary fw-bold me-3 mt-1\">{feature.version}</span>\n <div>\n <a\n href={`${DOCS_BASE_URL}/${feature.docsPath}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-gray-900 text-hover-primary fw-bold fs-6\"\n >\n {feature.name}\n </a>\n <div className=\"text-gray-600 fs-7\">{feature.description}</div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n {/* end::Body */}\n </section>\n {/* end::What's New widget */}\n </>\n );\n}\n\nexport default WhatsNew;\n"],"mappings":"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"}