diff --git a/.impeccable.md b/.impeccable.md deleted file mode 100644 index 0c24a32b..00000000 --- a/.impeccable.md +++ /dev/null @@ -1,21 +0,0 @@ -## Design Context - -### Users - -OOMOL 的主要用户是希望把真实任务做成自动化流程的开发者、技术型团队成员和 AI 工作流重度用户。对文档页来说,用户通常处在“我现在就要完成一个任务”的上下文里,不是为了系统性学习平台而来,而是为了快速找到下一步动作。 - -### Brand Personality - -品牌应当给人这几种感受:直接、可靠、专业。表达上优先强调可执行性和工程感,而不是夸张营销。页面应该让用户感到“这个产品能立刻帮我做事”,而不是“我还要先花很多时间学习它”。 - -### Aesthetic Direction - -延续当前官网和文档站已经建立的方向:冷静的技术产品气质、浅色阅读界面、克制的品牌紫色点缀、较高的信息密度和清晰的层级。避免花哨的大面积营销视觉,优先让关键结论、操作路径和演示内容在首屏就被看见。 - -### Design Principles - -1. 首屏先给结论,再给解释。 -2. 所有视觉强调都必须服务于“下一步做什么”。 -3. 保持工程产品的可信感,避免过度装饰。 -4. 文档体验优先可扫描、可定位、可回看,而不是追求页面表演感。 -5. 在延续现有站点语言的前提下,用更直接的结构减少阅读负担。 diff --git a/docusaurus.config.js b/docusaurus.config.js index 12cf0011..4b1eaedf 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,7 +10,7 @@ const darkTheme = themes.dracula; /** @type {import('@docusaurus/types').Config} */ const config = { title: "OOMOL", - tagline: "Write a function. Ship a service.", + tagline: "Build cloud skills. Keep the code.", favicon: "img/favicon.ico", // Set the production url of your site here @@ -70,12 +70,10 @@ const config = { "@context": "https://schema.org", "@type": "Organization", name: "OOMOL", - tagline: "Write a function. Ship a service.", - favicon: "img/favicon.ico", + description: "Build cloud skills. Keep the code.", url: "https://oomol.com", + logo: "https://oomol.com/img/logo2x.png", sameAs: ["https://hub.oomol.com"], - // TODO: add logo to the website - // logo: "https://oomol.com/logo.svg", }), }, ], @@ -153,12 +151,25 @@ const config = { { name: "keywords", content: - "function to service, ai-native developer tools, local validation, api publishing, mcp tools, automation tasks, containerized development, function delivery, OOMOL", + "cloud skill, skill distribution, closed-source skill delivery, ai-native developer tools, local validation, oo-cli, mcp tools, automation tasks, containerized development, OOMOL", }, { name: "description", content: - "Generate functions in a real coding environment, validate locally, and publish the same capability as an API, MCP tool, or automation task.", + "Build cloud skills in a real coding environment, validate locally, and publish them for oo-cli, agents, APIs, and automation without exposing your source code.", + }, + { property: "og:site_name", content: "OOMOL" }, + { property: "og:type", content: "website" }, + { + property: "og:image", + content: "https://oomol.com/img/og-default.png", + }, + { property: "og:image:width", content: "1200" }, + { property: "og:image:height", content: "630" }, + { name: "twitter:card", content: "summary_large_image" }, + { + name: "twitter:image", + content: "https://oomol.com/img/og-default.png", }, ], @@ -176,13 +187,40 @@ const config = { srcDark: "img/logo-en-dark.svg", }, items: [ + { + label: "Product", + position: "left", + className: "productDropdown", + items: [ + { + to: "/docs/cloud-services/cli", + label: "navbar.oo-cli", + className: "productDropdownItem productDropdownItemCli", + }, + { + to: "/studio", + label: "navbar.oomol-studio", + className: "productDropdownItem productDropdownItemStudio", + }, + { + to: "/cloud", + label: "navbar.oomol-cloud", + className: "productDropdownItem productDropdownItemCloud", + }, + { + to: "/app", + label: "navbar.oomol-ai", + className: "productDropdownItem productDropdownItemAi", + }, + ], + }, + { to: "/downloads", label: "navbar.download", position: "left" }, { type: "doc", docId: "overview", position: "left", label: "Docs", }, - { to: "/downloads", label: "navbar.download", position: "left" }, { to: "/pricing", label: "navbar.pricing", position: "left" }, { to: "/updates", label: "Updates", position: "left" }, { to: "/blog", label: "Blog", position: "left" }, diff --git a/i18n/en/code.json b/i18n/en/code.json index 40912342..43f9ab1a 100644 --- a/i18n/en/code.json +++ b/i18n/en/code.json @@ -27,16 +27,40 @@ "message": "Community" }, "HOME.page.title": { - "message": "OOMOL - Write Functions in Studio and Let AI Use Them" + "message": "OOMOL - Build and publish cloud skills" + }, + "HOME.page.description": { + "message": "Build cloud skills in a real coding environment, validate locally, and publish them for oo-cli, agents, APIs, and automation without exposing your source code." }, "HOME.FirstScreen.slogan": { - "message": "Write Function. Deliver Service." + "message": "Build and Deliver Capabilities for Agents" }, "HOME.FirstScreen.kicker": { - "message": "A Studio + CLI workflow for developers" + "message": "A capability production and delivery path for developers" }, "HOME.FirstScreen.script": { - "message": "Write functions in Studio, validate them locally, then publish them to OOMOL Cloud. After that, sign in with the OOMOL CLI so Codex or Claude Code can call those cloud functions directly, while the same capability remains available as an API, MCP tool, or automation task." + "message": "Start with ready-made capabilities in oo-cli, create your own blocks in OOMOL Studio, then deploy and deliver them privately through Cloud." + }, + "HOME.FirstScreen.heroTitle": { + "message": "Let agents use your skill.\nYou stay in control of the code." + }, + "HOME.FirstScreen.heroSubtitle": { + "message": "We call this a cloud skill: a capability that runs in the cloud and can be used directly from terminals and agent workflows." + }, + "HOME.FirstScreen.heroLead": { + "message": "A skill generated with OOMOL runs its underlying tool functions reliably in the cloud;\nonce users install oo-cli, they can use it directly in Codex and Claude Code." + }, + "HOME.FirstScreen.heroAdvantage": { + "message": "Open source or closed source," + }, + "HOME.FirstScreen.heroAdvantageHighlight": { + "message": "it is your call." + }, + "HOME.FirstScreen.video.playAriaLabel": { + "message": "Play demo video" + }, + "HOME.FirstScreen.video.playLabel": { + "message": "Play demo" }, "HOME.FirstScreen.pill1": { "message": "No new DSL" @@ -56,32 +80,29 @@ "HOME.FirstScreen.offer2": { "message": "200 free Cloud Task minutes each month" }, - "HOME.DeliveryGap.badge": { - "message": "Why Delivery Breaks" - }, - "HOME.DeliveryGap.title": { - "message": "The real cost starts after the function works." + "HOME.PainPoints.badge": { + "message": "Why go cloud" }, - "HOME.DeliveryGap.subtitle": { - "message": "Once you want a capability to be called reliably by AI, APIs, and automations, the work that grows is usually wrapping interfaces, aligning environments, shipping to production, and keeping the whole path stable." + "HOME.PainPoints.title": { + "message": "Your code shouldn't leak when you deliver it" }, - "HOME.DeliveryGap.problem1.title": { - "message": "Function Done. Backend Work Begins." + "HOME.PainPoints.card1.title": { + "message": "Local execution = code exposure" }, - "HOME.DeliveryGap.problem1.description": { - "message": "The implementation already exists, but publishing it as an API or task still means rebuilding interfaces, deployment steps, and runtime wrappers." + "HOME.PainPoints.card1.description": { + "message": "Today, when Codex or Claude Code calls your skill, it pulls the code to local and runs it there. Your algorithms, business logic, and call chains are fully exposed to the consumer." }, - "HOME.DeliveryGap.problem2.title": { - "message": "Local Runs Do Not Guarantee Delivery" + "HOME.PainPoints.card1.solution": { + "message": "A cloud skill runs in the cloud. Users call the interface; your code stays with you." }, - "HOME.DeliveryGap.problem2.description": { - "message": "Development, dependency, and deployment environments drift apart. The problem is often not the code itself, but whether it still holds once it leaves your machine." + "HOME.PainPoints.card2.title": { + "message": "You just want to deliver a skill, not build an entire backend" }, - "HOME.DeliveryGap.problem3.title": { - "message": "One Capability Gets Wrapped Repeatedly" + "HOME.PainPoints.card2.description": { + "message": "Servers, auto-scaling, billing, subscription management, secrets, usage analytics… Writing the core logic is 20% of the work. The other 80% is delivery infrastructure." }, - "HOME.DeliveryGap.problem3.description": { - "message": "Teams often wrap the same implementation separately for APIs, MCP tools, and automation tasks, multiplying delivery cost without adding capability." + "HOME.PainPoints.card2.solution": { + "message": "Cloud handles runtime, subscriptions, configuration, and data. You just write the logic." }, "HOME.ProofLayer.badge": { "message": "Real Use Cases" @@ -177,7 +198,7 @@ "message": "only supports x64" }, "HOME.FirstScreen.cta.secondary": { - "message": "Start Building" + "message": "Start with oo-cli" }, "HOME.ValueProps.localCompute.title": { "message": "Turn Local Compute Into Your Private AI Cloud" @@ -873,10 +894,10 @@ "message": "//#region generated meta\ntype Inputs = {\n};\ntype Outputs = {\n};\n//#endregion\n\nimport type { Context } from \"@oomol/types/oocana\";\n\nexport default async function(\n params: Inputs,\n context: Context\n): Promise | undefined | void> {\n // Fusion API Base URL\n const api_url = \"https://fusion-api.oomol.com/v1/fal-nano-banana-edit/submit\"\n\n // LLM Base URL, can use openai sdk\n const llm_base_url = \"https://llm.oomol.com/v1\"\n\n // Get OOMOL token from context (no need for manual API key input)\n const api_token = await context.getOomolToken()\n // return { output: \"output_value\" };\n};" }, "HOME.GetStartedPrompt.title": { - "message": "Start with your next function and let AI use it" + "message": "Get the first path working" }, "HOME.GetStartedPrompt.subtitle": { - "message": "Download OOMOL Studio, write and validate your function locally, publish it to OOMOL Cloud, then sign in with the OOMOL CLI to use it from Codex or Claude Code, or keep delivering it as an API, MCP tool, or automation task." + "message": "Start with oo-cli to run published cloud skills. When you need your own, generate and validate it in OOMOL Studio, then publish it through Cloud." }, "HOME.Pricing.title": { "message": "Pricing" @@ -921,13 +942,13 @@ "message": "CLI" }, "HOME.Downloads.cli.title": { - "message": "Prefer the terminal? Use oo-cli to consume cloud functions directly." + "message": "Prefer terminal workflows? Start with oo-cli." }, "HOME.Downloads.cli.subtitle": { - "message": "Install oo-cli in Codex, Claude Code, or any local terminal to search packages, inspect inputs, run cloud functions, and fetch results without wiring API or MCP first." + "message": "Install oo-cli in Codex, Claude Code, or any local terminal to search packages, inspect inputs, run cloud skills, and fetch results without wiring API or MCP first." }, "HOME.Downloads.cli.action.guide": { - "message": "Open CLI Guide" + "message": "Open oo-cli Guide" }, "HOME.Downloads.cli.action.github": { "message": "View oo-cli on GitHub" @@ -1476,7 +1497,7 @@ "message": "Questions & Answers" }, "PRICING.question.subtitle": { - "message": "If You Have Any Other Questions, Please\u00A0" + "message": "If You Have Any Other Questions, Please " }, "PRICING.question.link": { "message": "Contact Us" @@ -1957,7 +1978,7 @@ "message": "Workflow Tools Redesigned for Developers" }, "STUDIO.hero.description": { - "message": "We heard developers' voices: traditional workflow platforms make simple things complicated. OOMOL Studio changes everything." + "message": "Local development environment for developers, VSCode-based visual programming tool with FRP protocol for P2P computing power sharing" }, "STUDIO.painPoints.title": { "message": "Three Pain Points of Traditional Workflow Tools" @@ -2467,10 +2488,10 @@ "message": "Containerized deployment to private cloud or K8s clusters, supporting CI/CD pipelines for continuous delivery and operations of enterprise-grade API services." }, "HOME.ProductComparison.title": { - "message": "Cloud keeps the function running reliably online" + "message": "Cloud is where a skill becomes deliverable" }, "HOME.ProductComparison.subtitle": { - "message": "If Studio is where you write the function, then OOMOL Cloud is the shared runtime and delivery layer. After sign-in, the CLI calls the cloud functions deployed there from Codex or Claude Code." + "message": "OOMOL Cloud is not just runtime. It is the delivery layer that turns a validated implementation into a cloud skill you can provide privately to yourself, your team, or your customers." }, "HOME.ChatAgent.title": { "message": "OOMOL Chat & Agent Ecosystem" @@ -2515,73 +2536,73 @@ "message": "Install locally and use immediately, with a built-in container environment that keeps development and validation in one place." }, "HOME.ProductComparison.cloud.stage": { - "message": "Launch faster, manage less" + "message": "Deploy and deliver" }, "HOME.ProductComparison.cloud.capability": { - "message": "Turn a validated function into a shared online capability for CLI, APIs, and automation without rebuilding interfaces, runtimes, and scaling layers." + "message": "Deploy validated blocks as cloud skills that run remotely, so users get the capability without receiving your source code." }, "HOME.ProductComparison.cloud.scenario": { - "message": "For developers and small teams that want to provide functions reliably to AI tools, applications, or automation tasks." + "message": "For developers and small teams that want to share, sell, or operate reusable skills without rebuilding a separate SaaS around each one." }, "HOME.ProductComparison.cloud.tech": { - "message": "Reuse the implementation you already validated in Studio while OOMOL Cloud handles runtime, auth, and external delivery. The CLI signs in and calls the cloud functions from this layer." + "message": "Reuse the implementation you already validated in Studio while OOMOL Cloud handles runtime, access, and external delivery. When needed, the same cloud skill can still expand through API or MCP." }, "HOME.ProductComparison.cta": { - "message": "Explore OOMOL Cloud" + "message": "Explore Cloud" }, "HOME.ProductComparison.outputIntro": { - "message": "Delivery Targets" + "message": "One cloud skill, multiple surfaces" }, "HOME.ProductComparison.outputSummary": { - "message": "The same validated function can keep shipping as an API, MCP tool, or automation task, acting as one stable capability layer for both AI tools and applications." + "message": "The same validated implementation can be consumed through terminal, apps, agents, and automation without splitting into separate products." }, "HOME.ProductComparison.output1.title": { - "message": "API Services" + "message": "CLI and Agents" }, "HOME.ProductComparison.output1.description": { - "message": "Expose the function directly as a callable API without building a separate service framework or runtime layer." + "message": "Search, inspect, and run deployed cloud skills directly through oo-cli and agent terminal workflows." }, "HOME.ProductComparison.output2.title": { - "message": "MCP Tools" + "message": "API and App Integration" }, "HOME.ProductComparison.output2.description": { - "message": "Let the same implementation enter the call chain of agents and AI apps directly instead of maintaining a second tool service." + "message": "Carry the same cloud skill into your own application surfaces, backend services, or product integrations." }, "HOME.ProductComparison.output3.title": { - "message": "Automation Tasks" + "message": "MCP and Automation" }, "HOME.ProductComparison.output3.description": { - "message": "Turn the same implementation into scheduled jobs or automation flows so online runs and later iteration keep reusing one capability." + "message": "Expose the same cloud skill to agent ecosystems or keep it running on schedules and triggers." }, "HOME.ProductComparison.benefit1.label": { - "message": "Delivery Overhead" + "message": "Commercialization Path" }, "HOME.ProductComparison.benefit1.value": { - "message": "Less service rebuilding" + "message": "Ship the skill, keep the code" }, "HOME.ProductComparison.benefit1.description": { - "message": "Cloud takes over the online runtime and delivery layer so you do not need to rebuild another interface stack around the same function." + "message": "Cloud lets you provide the capability without shipping the implementation, so distribution does not force you into open-sourcing or rebuilding the product as SaaS." }, "HOME.ProductComparison.benefit2.label": { - "message": "Runtime Overhead" + "message": "Delivery Overhead" }, "HOME.ProductComparison.benefit2.value": { - "message": "More stable online usage" + "message": "Less product rebuilding" }, "HOME.ProductComparison.benefit2.description": { - "message": "Stay focused on the function itself instead of spending more time on environments, scheduling, scaling, and production maintenance." + "message": "Stay focused on the skill itself instead of rebuilding auth, hosting, scheduling, and interface layers around the same implementation." }, "HOME.DeveloperBenefits.badge": { - "message": "Developer Benefits" + "message": "Free for Developers" }, "HOME.DeveloperBenefits.title": { - "message": "Get the path working before you optimize cost" + "message": "Start at zero cost, get the full loop running" }, "HOME.DeveloperBenefits.subtitle": { - "message": "Keep the pricing discussion later. First remove the blockers around model access and lightweight task validation so the Studio-to-CLI-to-production loop is easier to complete." + "message": "No upfront payment. Bring your own model plus 200 free Cloud Task minutes each month — enough to complete your first Studio-to-production delivery cycle." }, "HOME.DeveloperBenefits.card1.eyebrow": { - "message": "Studio Benefit" + "message": "Studio Free" }, "HOME.DeveloperBenefits.card1.tag": { "message": "Recommended" @@ -2593,19 +2614,19 @@ "message": "Use your own model" }, "HOME.DeveloperBenefits.card1.title": { - "message": "Use Your Own Model and Start at Lower Cost" + "message": "Bring Your Own Model and Get Studio Running" }, "HOME.DeveloperBenefits.card1.description": { - "message": "OOMOL Studio lets you configure your own AI model. If you already have model quota elsewhere, you do not need another paid model service just to get local development running. We currently recommend GLM-5." + "message": "If you already have model quota, connect it directly instead of paying for another service. We recommend starting with GLM-5." }, "HOME.DeveloperBenefits.card1.note": { - "message": "If you already have model quota, the setup guide is usually enough to get Studio running and finish local validation." + "message": "Follow the guide and you can usually finish local validation first." }, "HOME.DeveloperBenefits.card1.cta": { "message": "View Setup Guide" }, "HOME.DeveloperBenefits.card2.eyebrow": { - "message": "Cloud Benefit" + "message": "Cloud Free" }, "HOME.DeveloperBenefits.card2.tag": { "message": "Monthly Included" @@ -2617,25 +2638,37 @@ "message": "Free Cloud Task time" }, "HOME.DeveloperBenefits.card2.title": { - "message": "200 Free Cloud Task Minutes Each Month for Lightweight Jobs" + "message": "200 Free Minutes Each Month for Lightweight Jobs" }, "HOME.DeveloperBenefits.card2.description": { - "message": "We give developers 200 minutes of Cloud Task usage every month. For scheduled jobs, lightweight automation, and validation flows, that is often enough to get real online tasks running." + "message": "The free Cloud Task quota is often enough for scheduled jobs, lightweight automation, and delivery validation." }, "HOME.DeveloperBenefits.card2.note": { - "message": "For a lightweight app or workflow, the free quota is often enough to get tasks running before you pay anything." + "message": "Use the free quota to validate the flow before you spend more." }, "HOME.DeveloperBenefits.card2.cta": { "message": "Explore OOMOL Cloud" }, "HOME.CliEntry.badge": { - "message": "CLI QUICKSTART" + "message": "CLI FIRST" }, "HOME.CliEntry.title": { - "message": "Install oo-cli, sign in once, then start calling published functions." + "message": "oo-cli is the default way to discover and run cloud skills" }, "HOME.CliEntry.subtitle": { - "message": "Install the CLI, then get the first search and run working." + "message": "Install once in Codex, Claude Code, or any terminal. Search packages, inspect inputs, run cloud skills, and get results before you wire API or MCP." + }, + "HOME.CliEntry.benefit1.label": { + "message": "Start from published skills" + }, + "HOME.CliEntry.benefit1.description": { + "message": "Search, inspect, and run skills other developers have already published instead of building your own path on day one." + }, + "HOME.CliEntry.benefit2.label": { + "message": "Publish your own when needed" + }, + "HOME.CliEntry.benefit2.description": { + "message": "When existing skills are not enough, use Studio to generate, validate, and publish your own cloud skill." }, "HOME.CliEntry.bridge": { "message": "Publish the function to OOMOL Cloud first. Then let CLI handle sign-in, discovery, and execution. That relationship only needs to be stated once." @@ -2644,31 +2677,31 @@ "message": "Install oo-cli" }, "HOME.CliEntry.step1.description": { - "message": "Set up the CLI entry point." + "message": "Install the default entry point for using published cloud skills." }, "HOME.CliEntry.step2.title": { "message": "Sign in to your account" }, "HOME.CliEntry.step2.description": { - "message": "Run oo login." + "message": "Sign in, then start searching and running cloud skills." }, "HOME.CliEntry.step3.title": { - "message": "Search and run a published function" + "message": "Search and run a skill" }, "HOME.CliEntry.step3.description": { - "message": "Search, then run." + "message": "Check what it does and what input it needs, then run it directly from the terminal." }, "HOME.CliEntry.action.primary": { - "message": "Open CLI Quickstart" + "message": "Open oo-cli" }, "HOME.CliEntry.action.secondary": { - "message": "See How Cloud Delivery Works" + "message": "See Cloud Delivery" }, "HOME.CliEntry.setup.eyebrow": { "message": "INSTALL ONCE" }, "HOME.CliEntry.setup.title": { - "message": "Two commands to install and sign in" + "message": "Two commands to install and sign in to oo-cli" }, "HOME.CliEntry.setup.pill": { "message": "30 sec" @@ -2680,7 +2713,7 @@ "message": "FIRST RUN DEMO" }, "HOME.CliEntry.demo.title": { - "message": "Compress the first run into search, inspect, and run" + "message": "Reduce the first run to three steps" }, "HOME.CliEntry.demo.badge": { "message": "Usage Flow" @@ -2710,7 +2743,7 @@ "message": "Run" }, "HOME.CliEntry.demo.stage3.title": { - "message": "Run and fetch result" + "message": "Run and get the result" }, "HOME.CliEntry.demo.stage3.description": { "message": "Cloud executes the function. CLI is the layer that sends the task and pulls the result back into the current workflow." @@ -2724,14 +2757,80 @@ "HOME.CliEntry.terminal.note": { "message": "CLI is not just another entry point. After sign-in, it is the layer that connects cloud functions deployed on OOMOL Cloud to Codex, Claude Code, and other terminal workflows in a stable way." }, + "HOME.CodexBlocks.badge": { + "message": "CODEX EXAMPLES" + }, + "HOME.CodexBlocks.title": { + "message": "Start with representative blocks in Codex" + }, + "HOME.CodexBlocks.subtitle": { + "message": "Instead of the old proof section, show the kinds of blocks that better define OOMOL's capability surface. Search, inspect, and run them in Codex first, then decide whether you need to build your own." + }, + "HOME.CodexBlocks.action.primary": { + "message": "Open oo-cli" + }, + "HOME.CodexBlocks.action.secondary": { + "message": "Explore Cloud Function" + }, + "HOME.CodexBlocks.terminal": { + "message": "Run in Codex" + }, + "HOME.CodexBlocks.video": { + "message": "Video demo" + }, + "HOME.CodexBlocks.card1.eyebrow": { + "message": "Comic" + }, + "HOME.CodexBlocks.card1.title": { + "message": "Comic Translation and Redraw" + }, + "HOME.CodexBlocks.card1.description": { + "message": "Call a block from Codex to translate a full comic page, clean text, reflow layout, and return a readable result for serialized pages or promo art." + }, + "HOME.CodexBlocks.card1.previewTitle": { + "message": "Comic Translation Demo" + }, + "HOME.CodexBlocks.card1.previewNote": { + "message": "This area will be replaced with video to show the full path from a Codex call to the translated output." + }, + "HOME.CodexBlocks.card2.eyebrow": { + "message": "Paper Figure" + }, + "HOME.CodexBlocks.card2.title": { + "message": "PaperBanana Illustrations" + }, + "HOME.CodexBlocks.card2.description": { + "message": "Generate paper-style figures from method descriptions, notes, or rough sketches for papers, slides, and technical writing." + }, + "HOME.CodexBlocks.card2.previewTitle": { + "message": "PaperBanana Demo" + }, + "HOME.CodexBlocks.card2.previewNote": { + "message": "This area will be replaced with video to show the full path from method description to generated paper figure." + }, + "HOME.CodexBlocks.card3.eyebrow": { + "message": "Books" + }, + "HOME.CodexBlocks.card3.title": { + "message": "PDF / EPUB Translation" + }, + "HOME.CodexBlocks.card3.description": { + "message": "Translate long-form documents into bilingual EPUB or Markdown outputs that stay usable for reading instead of returning only raw text." + }, "CLOUD.hero.title": { - "message": "OOMOL Cloud" + "message": "Publish private cloud skills" }, "CLOUD.hero.description": { - "message": "Turn the function you already validated locally into a service, without rebuilding backend scaffolding, deployment flow, and operations from scratch." + "message": "Take the skill you already validated locally and run it in the cloud, so users can use the capability without getting your source code or a custom service stack." + }, + "CLOUD.hero.kicker": { + "message": "Cloud Skill Runtime" + }, + "CLOUD.hero.note": { + "message": "Users get the skill through oo-cli, apps, or agents. Your implementation stays on the server." }, "CLOUD.hero.stat1": { - "message": "Direct Publish" + "message": "Private Delivery" }, "CLOUD.hero.stat2": { "message": "Pay-as-you-go" @@ -2740,61 +2839,76 @@ "message": "Less Ops" }, "CLOUD.hero.cta.start": { - "message": "Start Building" + "message": "Build a Cloud Skill" }, "CLOUD.hero.cta.docs": { "message": "Learn More" }, + "CLOUD.hero.cta.console": { + "message": "Open Cloud Console" + }, "CLOUD.painPoints.title": { - "message": "Delivery Shouldn't Be Torture" + "message": "Shipping a skill should not mean rebuilding a SaaS" }, "CLOUD.painPoints.subtitle": { "message": "We know the struggle as developers" }, "CLOUD.painPoints.description": { - "message": "What slows delivery is usually not the function itself, but the repeated work required to wrap it as a service: building interfaces, preparing environments, scaling it, and keeping it available. Cloud is built to compress that part." + "message": "What slows delivery is usually not the skill itself, but the work around it: packaging a user surface, hosting it reliably, handling access, and keeping operations stable. Cloud is built to compress that layer." }, "CLOUD.solution.title": { - "message": "One Function, Three Delivery Paths" + "message": "One skill, three consumption paths" }, "CLOUD.solution.subtitle": { - "message": "The same capability can be delivered as an API, an MCP tool, or an automation task." + "message": "The same cloud skill can be consumed through API, MCP, or automation while staying backed by one implementation." + }, + "CLOUD.solution.kicker": { + "message": "Consumption Paths" }, "CLOUD.modes.library.title": { - "message": "Publish as Automation" + "message": "Run as Automation" }, "CLOUD.modes.library.description": { - "message": "Run the same function on triggers or schedules so it keeps working as an ongoing task instead of staying local and manual." + "message": "Run the same cloud skill on triggers or schedules so it keeps delivering value beyond local and manual execution." }, "CLOUD.modes.serverless.title": { - "message": "Publish as API Service" + "message": "Use through API" }, "CLOUD.modes.serverless.description": { - "message": "Deliver the function directly as a callable API without building a separate service framework, while OOMOL handles runtime and scaling." + "message": "Give applications direct API access to the same cloud skill without rebuilding a separate backend surface." }, "CLOUD.modes.mcp.title": { - "message": "Publish as MCP Tool" + "message": "Use through MCP" }, "CLOUD.modes.mcp.description": { - "message": "Expose the function as an MCP tool for agents and AI apps so the same implementation enters the call chain directly." + "message": "Expose the same cloud skill to agents and AI apps as an MCP tool when agent-native integration matters." }, "CLOUD.pricing.title": { - "message": "Pay Per Call, No Upfront Cost" + "message": "Start small, pay when the skill is used" }, "CLOUD.pricing.description": { - "message": "No expensive server fees, no complex prepaid plans. We charge by call count. Save money, save effort, and focus on the joy of programming." + "message": "You do not need dedicated servers just to test distribution. Publish first, validate demand, and pay as usage grows." + }, + "CLOUD.pricing.kicker": { + "message": "Pricing" }, "CLOUD.pricing.cta": { "message": "View Pricing" }, + "CLOUD.cta.primary": { + "message": "Start in Studio" + }, + "CLOUD.cta.secondary": { + "message": "Open Cloud Console" + }, "CLOUD.opensource.title": { - "message": "Open Source Infrastructure" + "message": "Open runtime, flexible deployment" }, "CLOUD.opensource.subtitle": { - "message": "OOMOL's underlying runtime kernel is fully open source, giving you complete control over your deployment environment" + "message": "The runtime foundation stays open source even when the cloud skill you publish stays private." }, "CLOUD.opensource.description": { - "message": "We believe in the power of open source. OOMOL's virtual machine and runtime core code are completely open source, allowing you to freely view, modify, and deploy. Whether it's a personal NAS, private server, or public cloud, you have complete deployment freedom." + "message": "OOMOL's virtual machine and runtime core stay open source, so you keep deployment freedom across personal servers, private infrastructure, or public cloud environments while choosing how each skill is delivered." }, "CLOUD.opensource.projects.title": { "message": "Open Source Projects" @@ -2823,57 +2937,74 @@ "CLOUD.opensource.ovm-mac.description": { "message": "OVM implementation for macOS platform, based on Apple Virtualization Framework" }, - "STUDIO.hero.description": { - "message": "Local development environment for developers, VSCode-based visual programming tool with FRP protocol for P2P computing power sharing" + "APP.new.hero.title": { + "message": "OOMOL App Surfaces" }, - "APP.new.hero.title": { "message": "OOMOL App" }, "APP.new.hero.subtitle": { - "message": "Direct Product Surfaces for Your Functions" + "message": "Product surfaces for cloud skills" }, "APP.new.hero.description": { - "message": "Turn function capabilities directly into Chat skills or Applet entry points, without building separate UI from scratch." + "message": "A single cloud skill can be delivered through chat or structured applets, without building separate product surfaces from scratch." + }, + "APP.new.concept.title": { + "message": "One skill, different surfaces" }, - "APP.new.concept.title": { "message": "Code is Product" }, "APP.new.concept.description": { - "message": "OOMOL wraps function capabilities into usable product surfaces. You focus on the function; we connect it to the user." + "message": "OOMOL turns the same cloud skill into usable entry points. You focus on the implementation; we connect it to the user." + }, + "APP.new.chat.pill": { + "message": "Chat Surface · Skill" + }, + "APP.new.chat.title": { + "message": "OOMOL Chat" }, - "APP.new.chat.pill": { "message": "Chat Surface · Skill" }, - "APP.new.chat.title": { "message": "OOMOL Chat" }, "APP.new.chat.subtitle": { "message": "AI Assistant · Exploratory Interaction" }, "APP.new.chat.description": { - "message": "When user intent is still vague, let AI choose and call your function capabilities through conversation." + "message": "When user intent is still vague, let AI choose and run the right cloud skill through conversation." + }, + "APP.new.chat.meta1.label": { + "message": "For Whom" }, - "APP.new.chat.meta1.label": { "message": "For Whom" }, "APP.new.chat.meta1.value": { - "message": "Best when capabilities need to be exposed through conversation and intent needs clarification first" + "message": "Best when a cloud skill should be used through conversation and intent needs clarification first" + }, + "APP.new.chat.meta2.label": { + "message": "Core Experience" }, - "APP.new.chat.meta2.label": { "message": "Core Experience" }, "APP.new.chat.meta2.value": { - "message": "Understand intent first, then call the right service with less user setup" + "message": "Understand intent first, then call the right cloud skill with less setup" }, "APP.new.chat.devValue": { - "message": "Functions as Skills: your functions become AI-callable capabilities." + "message": "Cloud skill as agent tool: the same implementation becomes an AI-callable surface." + }, + "APP.new.applet.pill": { + "message": "Structured Surface · Applet" + }, + "APP.new.applet.title": { + "message": "OOMOL Applet" }, - "APP.new.applet.pill": { "message": "Parameterized Surface · Applet" }, - "APP.new.applet.title": { "message": "OOMOL Applet" }, "APP.new.applet.subtitle": { "message": "Form Applet · Deterministic Interaction" }, "APP.new.applet.description": { - "message": "When inputs are clear, call the function directly through structured parameters for more reliable delivery." + "message": "When inputs are clear, run the same cloud skill through structured parameters for more reliable delivery." + }, + "APP.new.applet.meta1.label": { + "message": "For Whom" }, - "APP.new.applet.meta1.label": { "message": "For Whom" }, "APP.new.applet.meta1.value": { - "message": "Best for teams delivering fixed-input function capabilities to internal or external users" + "message": "Best for teams delivering fixed-input cloud skills to internal or external users" + }, + "APP.new.applet.meta2.label": { + "message": "Core Experience" }, - "APP.new.applet.meta2.label": { "message": "Core Experience" }, "APP.new.applet.meta2.value": { - "message": "Wrap a function as a fillable, executable, and reusable product entry point" + "message": "Wrap the same cloud skill as a fillable, executable, and reusable entry point" }, "APP.new.applet.devValue": { - "message": "Function as App: auto-generated parameter UI with less frontend boilerplate." + "message": "Cloud skill as app: auto-generated parameter UI with less frontend boilerplate." }, "APP.new.hero.cta.web": { "message": "Use in Web" @@ -2881,8 +3012,12 @@ "APP.new.hero.cta.studio": { "message": "Use in OOMOL Studio" }, - "APP.new.cta.download": { "message": "Download" }, - "APP.new.cta.docs": { "message": "View Docs" }, + "APP.new.cta.download": { + "message": "Download" + }, + "APP.new.cta.docs": { + "message": "View Docs" + }, "STUDIO.page.title": { "message": "OOMOL Studio - Generate and Validate Functions in a Real Coding Environment" }, @@ -2895,6 +3030,36 @@ "STUDIO.manifesto.subtitle": { "message": "A real coding environment where AI helps generate functions, validate them locally, and deliver them as APIs, MCP tools, or automation tasks." }, + "STUDIO.manifesto.cta.download": { + "message": "Download OOMOL Studio" + }, + "STUDIO.product.hero.kicker": { + "message": "OOMOL Studio" + }, + "STUDIO.product.hero.secondary": { + "message": "View Downloads" + }, + "STUDIO.product.story.kicker": { + "message": "Real developer environment" + }, + "STUDIO.product.story.title": { + "message": "Not another platform that asks developers to adapt" + }, + "STUDIO.product.principles.kicker": { + "message": "Core principles" + }, + "STUDIO.product.principles.title": { + "message": "Why Studio works better for building blocks" + }, + "STUDIO.product.cta.title": { + "message": "Start with your next block" + }, + "STUDIO.product.cta.description": { + "message": "Write, debug, and validate your own blocks in a real coding environment. When you are ready to deliver, carry them forward through Cloud." + }, + "STUDIO.product.cta.secondary": { + "message": "Explore Cloud" + }, "STUDIO.story.paragraph1": { "message": "What we want is not another tool that asks developers to adapt to the platform, but a working environment where you can actually write functions, orchestrate nodes, debug dependencies, and validate results." }, @@ -2913,6 +3078,51 @@ "STUDIO.story.paragraph3": { "message": "So Studio has a clear role: not to replace engineering workflow, but to bring function generation, local validation, and delivery back inside it." }, + "HOME.StudioChain.title": { + "message": "From idea to cloud skill" + }, + "HOME.StudioChain.subtitle": { + "message": "When ready-made skills are not enough, OOMOL gives you one continuous path: generate in Studio, validate locally, publish through Cloud, and deliver through oo-cli." + }, + "HOME.StudioChain.lead": { + "message": "Do not stop at local automation. Build a skill people can actually use." + }, + "HOME.StudioChain.summary": { + "message": "In OOMOL, you can start with ready-made skills, create your own implementation in Studio, validate it locally, then publish it privately to yourself, your team, or your customers." + }, + "HOME.StudioChain.card1.title": { + "message": "OOMOL Studio" + }, + "HOME.StudioChain.card1.description": { + "message": "Describe, write, debug, and validate your own skill in a real coding environment for code, dependencies, and inputs." + }, + "HOME.StudioChain.card2.title": { + "message": "Cloud" + }, + "HOME.StudioChain.card2.description": { + "message": "Publish the validated implementation as a cloud skill and keep serving it without exposing your source code." + }, + "HOME.StudioChain.action.studio": { + "message": "Explore Studio" + }, + "HOME.StudioChain.action.cloud": { + "message": "Explore Cloud" + }, + "Theme.Navbar.product.studio.description": { + "message": "Generate and validate your own cloud skills" + }, + "Theme.Navbar.product.cli.description": { + "message": "Install in Codex or Claude Code and use skills directly" + }, + "Theme.Navbar.product.cloud.description": { + "message": "Run, subscribe, and manage cloud skills in the cloud" + }, + "Theme.Navbar.product.ai.description": { + "message": "Use the official GUI agent for the same skills" + }, + "Theme.Navbar.product.label": { + "message": "Product" + }, "STUDIO.principle1.title": { "message": "1. Nodes Are Functions. Flows Are Composition." }, @@ -3077,5 +3287,11 @@ }, "SDK.fusion.feature3": { "message": "Support text-to-image, TTS and more services" + }, + "HOME.Downloads.page.title": { + "message": "Download OOMOL Studio — macOS & Windows" + }, + "HOME.Downloads.page.description": { + "message": "Download OOMOL Studio for macOS (Apple Silicon) or Windows. Build, validate, and publish cloud skills locally." } } diff --git a/i18n/en/docusaurus-theme-classic/footer.json b/i18n/en/docusaurus-theme-classic/footer.json index 2da859f0..693e8e1b 100644 --- a/i18n/en/docusaurus-theme-classic/footer.json +++ b/i18n/en/docusaurus-theme-classic/footer.json @@ -1,11 +1,11 @@ { - "link.title.Product": { - "message": "Product", - "description": "The title of the footer links column with title=Product in the footer" + "link.title.Platform": { + "message": "Platform", + "description": "The title of the footer links column with title=Platform in the footer" }, - "link.title.Resources": { - "message": "Resources", - "description": "The title of the footer links column with title=Resources in the footer" + "link.title.Support": { + "message": "Support", + "description": "The title of the footer links column with title=Support in the footer" }, "link.title.Developers": { "message": "Developers", diff --git a/i18n/zh-CN/code.json b/i18n/zh-CN/code.json index 5353670d..86f59d2a 100644 --- a/i18n/zh-CN/code.json +++ b/i18n/zh-CN/code.json @@ -24,19 +24,40 @@ "message": "控制台" }, "Theme.Navbar.community": { - "message": "社区" + "message": "Skills 社区" }, "HOME.page.title": { - "message": "OOMOL - 用 Studio 写函数,让 AI 直接调用" + "message": "OOMOL - 构建并发布 cloud skill" }, "HOME.FirstScreen.slogan": { - "message": "写好函数,直接交付" + "message": "为 agent 构建并交付你的能力" }, "HOME.FirstScreen.kicker": { - "message": "给开发者的 Studio + CLI 函数工作流" + "message": "给开发者的能力生产与交付链路" }, "HOME.FirstScreen.script": { - "message": "用 OOMOL Studio 的 AI Agent 写好业务函数,发布到 Cloud 后,再通过 oo-cli 在 Codex 或 Claude Code 中直接调用这些能力。" + "message": "先通过 oo-cli 使用现成能力,再在 OOMOL Studio 中编写自己的 block,最后通过 Cloud 私有部署并交付出去。" + }, + "HOME.FirstScreen.heroTitle": { + "message": "让 Agent 用上你的 Skill\n代码依然由你掌控" + }, + "HOME.FirstScreen.heroSubtitle": { + "message": "我们把这种运行在云端、可被终端和 agent 工作流直接使用的能力,叫做 cloud skill。" + }, + "HOME.FirstScreen.heroLead": { + "message": "用 OOMOL 生成的 Skill,背后的工具函数在云端稳定执行;\n用户安装 oo-cli 后即可直接在 Codex 和 Claude Code 中使用。" + }, + "HOME.FirstScreen.heroAdvantage": { + "message": "开源还是闭源," + }, + "HOME.FirstScreen.heroAdvantageHighlight": { + "message": "都由你自己决定。" + }, + "HOME.FirstScreen.video.playAriaLabel": { + "message": "播放演示视频" + }, + "HOME.FirstScreen.video.playLabel": { + "message": "点击播放演示" }, "HOME.FirstScreen.pill1": { "message": "不学新 DSL" @@ -56,116 +77,29 @@ "HOME.FirstScreen.offer2": { "message": "每月赠送 200 分钟 Cloud Task" }, - "HOME.DeliveryGap.badge": { - "message": "为什么交付会卡住" - }, - "HOME.DeliveryGap.title": { - "message": "真正费时间的,不是把函数写出来" - }, - "HOME.DeliveryGap.subtitle": { - "message": "一旦你希望能力能被 AI、API 和自动化任务稳定调用,真正开始膨胀的往往是接口封装、环境对齐、部署上线和后续维护。" - }, - "HOME.DeliveryGap.problem1.title": { - "message": "写完业务,还要再搭一套后端" - }, - "HOME.DeliveryGap.problem1.description": { - "message": "实现已经有了,但为了对外提供 API 或任务能力,还要重新封装接口、部署流程和运行方式。" - }, - "HOME.DeliveryGap.problem2.title": { - "message": "本地能跑,不等于交付能跑" - }, - "HOME.DeliveryGap.problem2.description": { - "message": "开发环境、依赖环境和发布环境脱节,问题往往不是代码本身,而是它换了地方就不成立。" - }, - "HOME.DeliveryGap.problem3.title": { - "message": "同一份能力,被重复包装" - }, - "HOME.DeliveryGap.problem3.description": { - "message": "为了 API、MCP 工具和自动化任务,团队经常围着同一份实现反复改造,交付成本被重复放大。" - }, - "Suggested Media Slot": { - "message": "建议素材位" - }, - "Use motion here to explain why delivery work expands after the function already works. This slot should show process change, not UI detail alone.": { - "message": "这里更适合用动态素材解释函数已经跑通之后,为什么交付工作还会继续膨胀。这一位要讲“流程变化”,而不是单纯展示界面细节。" - }, - "GIF OR SHORT VIDEO": { - "message": "GIF 或短视频" - }, - "Delivery Gap": { - "message": "交付断层" - }, - "Flow Demo": { - "message": "流程演示" - }, - "6-10s loop. 16:9. Show delivery work multiplying.": { - "message": "建议 6-10 秒循环,16:9 横向,重点展示交付工作如何不断叠加。" - }, - "Loop": { - "message": "循环" - }, - "Function works": { - "message": "函数已跑通" - }, - "Start from a validated local run.": { - "message": "从本地已经验证成功的运行开始。" - }, - "Delivery work appears": { - "message": "交付工作开始出现" - }, - "Show wrappers, deploy, env, scheduling.": { - "message": "展示接口包装、部署、环境与调度配置。" - }, - "Outputs split": { - "message": "交付出口分叉" - }, - "End at API, MCP, and Task branches.": { - "message": "最后落到 API、MCP 和任务三个分支。" - }, - "Replace with real capture: code-to-delivery-gap.mp4": { - "message": "后续替换真实素材:code-to-delivery-gap.mp4" - }, - "Primary Demo Slot": { - "message": "主演示位" + "HOME.PainPoints.badge": { + "message": "为什么要上云" }, - "This should become the homepage's main product demo. Show one validated capability being published to multiple delivery targets in a single flow.": { - "message": "这里应该成为首页的主演示。建议用一段完整流程,展示同一个已验证能力如何被发布到多个交付出口。" + "HOME.PainPoints.title": { + "message": "你写的能力,不该在交付时失控" }, - "VIDEO PREFERRED": { - "message": "视频优先" + "HOME.PainPoints.card1.title": { + "message": "本地执行 = 代码泄露" }, - "One Function": { - "message": "一份函数" + "HOME.PainPoints.card1.description": { + "message": "现在 Codex、Claude Code 要调用你的能力,就得把代码拉到本地跑。你的算法、商业逻辑、调用链路,全部暴露给使用方。" }, - "Multiple Outputs": { - "message": "多个出口" + "HOME.PainPoints.card1.solution": { + "message": "Cloud Skill 让能力在云端执行,用户只调用接口,代码始终在你手里。" }, - "10-15s loop. 16:10. Publish to API, MCP, and Tasks.": { - "message": "建议 10-15 秒循环,16:10,展示如何发布成 API、MCP 和自动化任务。" + "HOME.PainPoints.card2.title": { + "message": "想交付一个 Skill,却要搭一整套后端" }, - "Video": { - "message": "视频" + "HOME.PainPoints.card2.description": { + "message": "服务器、扩缩容、计费系统、订阅管理、Secrets 配置、使用数据……写核心逻辑只占 20%,剩下 80% 都在搭基础设施。" }, - "Select validated flow": { - "message": "选中已验证流程" - }, - "Begin from something already proven locally.": { - "message": "从已经在本地验证过的能力开始。" - }, - "Switch delivery target": { - "message": "切换交付目标" - }, - "Move between API, MCP, and automation output.": { - "message": "在 API、MCP 与自动化任务之间切换。" - }, - "Show live result": { - "message": "看到线上结果" - }, - "End with endpoint, tool entry, or task status.": { - "message": "结尾落到接口地址、工具入口或任务状态。" - }, - "Replace with real capture: publish-to-api-mcp-task.mp4": { - "message": "后续替换真实素材:publish-to-api-mcp-task.mp4" + "HOME.PainPoints.card2.solution": { + "message": "Cloud 把运行时、订阅、配置和数据全部承接,你只管写核心逻辑。" }, "HOME.ProofLayer.badge": { "message": "真实案例" @@ -242,7 +176,6 @@ "HOME.ProofLayer.case3.cta": { "message": "查看阅读体验" }, - "HOME.FirstScreen.download-macos": { "message": "下载适用于 macOS 的版本" }, @@ -262,7 +195,7 @@ "message": "仅支持 x64 版本" }, "HOME.FirstScreen.cta.secondary": { - "message": "开始构建" + "message": "先用 oo-cli" }, "HOME.ValueProps.localCompute.title": { "message": "将本地算力转化为你的私有 AI 云" @@ -958,10 +891,10 @@ "message": "//#region generated meta\ntype Inputs = {\n};\ntype Outputs = {\n};\n//#endregion\n\nimport type { Context } from \"@oomol/types/oocana\";\n\nexport default async function(\n params: Inputs,\n context: Context\n): Promise | undefined | void> {\n // 融合 API 基础地址\n const api_url = \"https://fusion-api.oomol.com/v1/fal-nano-banana-edit/submit\"\n\n // 大模型基础地址,可使用 openai sdk\n const llm_base_url = \"https://llm.oomol.com/v1\"\n\n // 从 context 获取 OOMOL token(无需手动输入 API key)\n const api_token = await context.getOomolToken()\n // return { output: \"output_value\" };\n};" }, "HOME.GetStartedPrompt.title": { - "message": "从下一个函数开始,让 AI 直接调用" + "message": "先把第一条链路跑通" }, "HOME.GetStartedPrompt.subtitle": { - "message": "下载 OOMOL Studio,用 AI Agent 写好业务函数并发布到 Cloud,再通过 oo-cli 在 Codex 或 Claude Code 中直接调用。" + "message": "先通过 oo-cli 运行已经发布好的 cloud skill。需要时,再回到 OOMOL Studio 里生成并验证自己的实现,再通过 Cloud 发布出去。" }, "HOME.Pricing.title": { "message": "价格" @@ -1006,13 +939,13 @@ "message": "CLI" }, "HOME.Downloads.cli.title": { - "message": "更想直接在终端里用?通过 oo-cli 直接消费云函数。" + "message": "更偏终端工作流?先从 oo-cli 开始。" }, "HOME.Downloads.cli.subtitle": { - "message": "在 Codex、Claude Code 或任意本地终端中安装 oo-cli,就可以先搜包、看输入、执行云函数,再拿结果,不必一开始就接 API 或 MCP。" + "message": "在 Codex、Claude Code 或任意本地终端中安装 oo-cli,就可以先搜包、看输入、执行 cloud skill,再拿结果,不必一开始就接 API 或 MCP。" }, "HOME.Downloads.cli.action.guide": { - "message": "打开 CLI 指南" + "message": "打开 oo-cli 指南" }, "HOME.Downloads.cli.action.github": { "message": "查看 oo-cli GitHub" @@ -1044,7 +977,6 @@ "HOME.Community.open-source.subtitle": { "message": "这些项目承接了 OOMOL 在运行时、部署和真实场景工具上的持续投入。" }, - "FEATURES.title": { "message": "涵盖你所需的全部功能" }, @@ -1582,7 +1514,6 @@ "PRICING.buttonText": { "message": "开始体验" }, - "CREATE.title": { "message": "OOMOL Studio" }, @@ -1593,7 +1524,7 @@ "message": "为开发者重新设计的工作流工具" }, "STUDIO.hero.description": { - "message": "我们听到了开发者的声音:传统工作流平台让简单的事情变复杂。OOMOL Studio 改变这一切。" + "message": "面向开发者的本地开发环境,基于 VSCode 的可视化编程工具,结合 FRP 协议实现 P2P 算力共享" }, "STUDIO.painPoints.title": { "message": "传统工作流工具的三大痛点" @@ -2554,10 +2485,10 @@ "message": "容器化部署到私有云或 K8s 集群,支持 CI/CD 流水线,实现企业级 API 服务的持续交付和运维。" }, "HOME.ProductComparison.title": { - "message": "Cloud 负责把函数稳定跑在线上" + "message": "Cloud 不是托管层,而是 skill 的交付层" }, "HOME.ProductComparison.subtitle": { - "message": "如果 Studio 负责把函数写出来,那么 OOMOL Cloud 就是统一的运行和交付层。CLI 登录之后,Codex / Claude Code 实际调用的也是这里部署的云函数。" + "message": "OOMOL Cloud 不只是代码运行的地方,而是把已经验证过的实现变成 cloud skill,并私有交付给自己、团队或客户的那一层。" }, "HOME.ChatAgent.title": { "message": "OOMOL Chat & Agent 生态" @@ -2602,73 +2533,73 @@ "message": "本地安装即用,内置容器环境,适合把开发和验证先收拢在一处。" }, "HOME.ProductComparison.cloud.stage": { - "message": "更快上线,更少运维" + "message": "部署并交付" }, "HOME.ProductComparison.cloud.capability": { - "message": "把已经跑通的函数托管成统一的线上能力,作为 CLI、API 和自动化任务共用的运行层,不必再重搭接口、运行时和扩缩容。" + "message": "把已经验证过的 block 发布为 cloud skill,让用户拿到能力,而不是拿到你的源码。" }, "HOME.ProductComparison.cloud.scenario": { - "message": "适合希望把函数稳定提供给 AI、应用或自动化任务的开发者和小团队。" + "message": "适合想把 skill 共享、售卖或持续运营出去,但又不想围着每个能力重做一层 SaaS 的开发者和小团队。" }, "HOME.ProductComparison.cloud.tech": { - "message": "沿用 Studio 中已经跑通的实现,由 OOMOL Cloud 承接运行、鉴权和对外交付,CLI 登录后调用的也是这里的云函数。" + "message": "沿用 Studio 中已经跑通的实现,由 OOMOL Cloud 承接运行、访问控制和对外交付;如果需要,同一份 cloud skill 也可以继续通过 API 或 MCP 接出去。" }, "HOME.ProductComparison.cta": { - "message": "查看 OOMOL Cloud" + "message": "了解 Cloud" }, "HOME.ProductComparison.outputIntro": { - "message": "云端交付" + "message": "一个 cloud skill,多种消费面" }, "HOME.ProductComparison.outputSummary": { - "message": "同一份已经验证过的函数实现,可以继续交付为 API、MCP 工具或自动化任务,作为 AI 和应用都能稳定调用的统一能力层。" + "message": "同一份已经验证过的实现,可以继续被终端、应用、agent 和自动化消费,而不用拆成多个产品。" }, "HOME.ProductComparison.output1.title": { - "message": "API 服务" + "message": "CLI 与 Agent" }, "HOME.ProductComparison.output1.description": { - "message": "把函数直接交付成可调用的接口,不必单独搭服务框架和运行层。" + "message": "通过 oo-cli 和 agent 终端工作流,直接搜索、查看和运行已经部署好的 cloud skill。" }, "HOME.ProductComparison.output2.title": { - "message": "MCP 工具" + "message": "API 与应用接入" }, "HOME.ProductComparison.output2.description": { - "message": "让同一份实现直接进入 Agent 和 AI 应用的调用链,而不是另外维护一套工具服务。" + "message": "把同一份 cloud skill 接进自己的应用界面、后端服务或产品集成里。" }, "HOME.ProductComparison.output3.title": { - "message": "自动化任务" + "message": "MCP 与自动化" }, "HOME.ProductComparison.output3.description": { - "message": "把同一份实现继续交付为定时任务或自动化流程,让线上运行和后续迭代复用同一份能力。" + "message": "在需要时,把同一份 cloud skill 接入 agent 生态,或让它持续按触发器和定时器运行。" }, "HOME.ProductComparison.benefit1.label": { - "message": "交付负担" + "message": "商业化路径" }, "HOME.ProductComparison.benefit1.value": { - "message": "少补一层服务" + "message": "交付 skill,不交付源码" }, "HOME.ProductComparison.benefit1.description": { - "message": "Cloud 承接函数的线上运行和对外交付,让你不用再围着同一份能力重做一套接口工程。" + "message": "Cloud 让你交付能力而不交付实现,分发不再逼着你不是开源,就是重做成完整 SaaS。" }, "HOME.ProductComparison.benefit2.label": { - "message": "运行负担" + "message": "交付负担" }, "HOME.ProductComparison.benefit2.value": { - "message": "更稳定地在线上用" + "message": "少重做产品外壳" }, "HOME.ProductComparison.benefit2.description": { - "message": "把精力放回函数本身,而不是持续处理环境、调度、扩缩容和线上维护。" + "message": "把精力放回 skill 本身,而不是持续重做鉴权、托管、调度和交互外壳。" }, "HOME.DeveloperBenefits.badge": { - "message": "开发者福利" + "message": "开发者免费方案" }, "HOME.DeveloperBenefits.title": { - "message": "先把链路跑通,再决定投入多少" + "message": "零成本起步,先把产品跑起来" }, "HOME.DeveloperBenefits.subtitle": { - "message": "把成本说明放在后面。先解决模型接入和轻量任务验证,让你更容易完成从 Studio 到 CLI 再到线上交付的第一次闭环。" + "message": "不用先付费。接入自有模型 + 每月 200 分钟免费 Cloud Task,足够你从 Studio 走到第一次线上交付。" }, "HOME.DeveloperBenefits.card1.eyebrow": { - "message": "Studio 福利" + "message": "Studio 免费" }, "HOME.DeveloperBenefits.card1.tag": { "message": "当前推荐" @@ -2680,19 +2611,19 @@ "message": "支持接入自有模型" }, "HOME.DeveloperBenefits.card1.title": { - "message": "接入你自己的模型,Studio 起步成本更低" + "message": "接入自有模型,先把 Studio 跑起来" }, "HOME.DeveloperBenefits.card1.description": { - "message": "OOMOL Studio 支持配置你自己的 AI 模型。如果你已经有现成的模型额度,就不需要再为本地开发额外购买一套模型服务。目前我们更推荐开发者直接接入 GLM-5。" + "message": "已有模型额度就直接接入,不用再额外买服务。推荐先用 GLM-5。" }, "HOME.DeveloperBenefits.card1.note": { - "message": "如果你已经有现成模型额度,按教程配好之后,通常就够先把 Studio 跑起来并完成本地验证。" + "message": "按教程配好后,通常就能完成本地验证。" }, "HOME.DeveloperBenefits.card1.cta": { "message": "查看配置教程" }, "HOME.DeveloperBenefits.card2.eyebrow": { - "message": "Cloud 福利" + "message": "Cloud 免费" }, "HOME.DeveloperBenefits.card2.tag": { "message": "每月赠送" @@ -2704,25 +2635,37 @@ "message": "Cloud Task 免费时长" }, "HOME.DeveloperBenefits.card2.title": { - "message": "每月赠送 200 分钟 Cloud Task,先把轻量任务跑起来" + "message": "每月送 200 分钟,轻量任务先跑起来" }, "HOME.DeveloperBenefits.card2.description": { - "message": "我们每个月都会赠送 200 分钟 Cloud Task 使用时长。对定时任务、轻量自动化、个人验证这类场景来说,通常已经够你把真实线上任务先跑起来。" + "message": "200 分钟免费 Cloud Task,通常够你先跑定时任务、轻量自动化和交付验证。" }, "HOME.DeveloperBenefits.card2.note": { - "message": "如果你在做个人项目或轻量应用,可以先用免费额度验证交付链路,再决定是否继续投入。" + "message": "先用免费额度跑一遍,再决定是否继续投入。" }, "HOME.DeveloperBenefits.card2.cta": { "message": "查看 Cloud 交付" }, "HOME.CliEntry.badge": { - "message": "CLI QUICKSTART" + "message": "CLI FIRST" }, "HOME.CliEntry.title": { - "message": "安装 oo-cli,登录后开始调用已发布函数。" + "message": "oo-cli 是发现和运行 cloud skill 的默认入口" }, "HOME.CliEntry.subtitle": { - "message": "先装上 CLI,再把第一次搜索和运行跑通。" + "message": "在 Codex、Claude Code 或任意终端里装一次,就可以搜索包、查看输入、运行 cloud skill,再决定要不要接 API 或 MCP。" + }, + "HOME.CliEntry.benefit1.label": { + "message": "先用现成 skill" + }, + "HOME.CliEntry.benefit1.description": { + "message": "先从别人已经发布好的 skill 开始搜索、查看和运行,不必第一天就自己重做一套。" + }, + "HOME.CliEntry.benefit2.label": { + "message": "需要时再发布自己的" + }, + "HOME.CliEntry.benefit2.description": { + "message": "如果现成 skill 不够,就回到 Studio 里生成、验证并发布自己的 cloud skill。" }, "HOME.CliEntry.bridge": { "message": "函数先发布到 OOMOL Cloud,CLI 再负责登录、搜索和调用。这层关系说一遍就够,重点是让你第一次跑通。" @@ -2731,31 +2674,31 @@ "message": "安装 oo-cli" }, "HOME.CliEntry.step1.description": { - "message": "先装好命令行入口。" + "message": "先把使用已发布 cloud skill 的默认入口装好。" }, "HOME.CliEntry.step2.title": { "message": "登录账号" }, "HOME.CliEntry.step2.description": { - "message": "执行 oo login。" + "message": "登录后开始搜索和运行已发布的 cloud skill。" }, "HOME.CliEntry.step3.title": { - "message": "搜索并运行已发布函数" + "message": "搜索并运行 skill" }, "HOME.CliEntry.step3.description": { - "message": "先搜,再跑。" + "message": "先看清楚 skill 做什么、需要什么输入,再直接在终端里运行。" }, "HOME.CliEntry.action.primary": { - "message": "查看 CLI 快速开始" + "message": "查看 oo-cli" }, "HOME.CliEntry.action.secondary": { - "message": "查看如何发布到 Cloud" + "message": "了解 Cloud 交付" }, "HOME.CliEntry.setup.eyebrow": { "message": "INSTALL ONCE" }, "HOME.CliEntry.setup.title": { - "message": "两条命令,先把 CLI 装好并登录" + "message": "两条命令,先把 oo-cli 装好并登录" }, "HOME.CliEntry.setup.pill": { "message": "30 秒" @@ -2767,7 +2710,7 @@ "message": "FIRST RUN DEMO" }, "HOME.CliEntry.demo.title": { - "message": "把第一次使用压缩成搜索、检查、运行三段" + "message": "把第一次使用压缩成搜索、查看、运行三步" }, "HOME.CliEntry.demo.badge": { "message": "Usage Flow" @@ -2797,7 +2740,7 @@ "message": "Run" }, "HOME.CliEntry.demo.stage3.title": { - "message": "运行并取回结果" + "message": "运行并获取结果" }, "HOME.CliEntry.demo.stage3.description": { "message": "函数交给 Cloud 执行,CLI 负责把任务发出去,并在当前工作流里把结果取回来。" @@ -2811,14 +2754,80 @@ "HOME.CliEntry.terminal.note": { "message": "CLI 不只是另一个入口。它是在登录之后,把部署在 OOMOL Cloud 上的云函数稳定接到 Codex、Claude Code 和其他终端工作流里的那一层。" }, + "HOME.CodexBlocks.badge": { + "message": "CODEX EXAMPLES" + }, + "HOME.CodexBlocks.title": { + "message": "在 Codex 里先调用这些代表性 block" + }, + "HOME.CodexBlocks.subtitle": { + "message": "这里不再展示旧案例说明,而是直接展示几类更能代表 OOMOL 能力边界的 block。先在 Codex 里搜、看、跑,再决定要不要继续扩展自己的能力。" + }, + "HOME.CodexBlocks.action.primary": { + "message": "查看 oo-cli" + }, + "HOME.CodexBlocks.action.secondary": { + "message": "查看 Cloud Function" + }, + "HOME.CodexBlocks.terminal": { + "message": "在 Codex 中调用" + }, + "HOME.CodexBlocks.video": { + "message": "视频演示" + }, + "HOME.CodexBlocks.card1.eyebrow": { + "message": "Comic" + }, + "HOME.CodexBlocks.card1.title": { + "message": "漫画翻译与重绘" + }, + "HOME.CodexBlocks.card1.description": { + "message": "在 Codex 里直接调用 block,把整页漫画翻译、擦字、重排并输出可读版本。适合翻译连载页、宣传图和嵌字内容。" + }, + "HOME.CodexBlocks.card1.previewTitle": { + "message": "漫画翻译 Demo" + }, + "HOME.CodexBlocks.card1.previewNote": { + "message": "这里会替换成视频,用来展示从 Codex 发起调用到返回翻译结果的完整过程。" + }, + "HOME.CodexBlocks.card2.eyebrow": { + "message": "Paper Figure" + }, + "HOME.CodexBlocks.card2.title": { + "message": "PaperBanana 论文插图" + }, + "HOME.CodexBlocks.card2.description": { + "message": "根据论文段落、方法说明或草图生成统一风格的论文配图,用于 paper、slides 和技术博客。" + }, + "HOME.CodexBlocks.card2.previewTitle": { + "message": "PaperBanana Demo" + }, + "HOME.CodexBlocks.card2.previewNote": { + "message": "这里会替换成视频,用来展示从方法描述到论文插图生成的完整调用过程。" + }, + "HOME.CodexBlocks.card3.eyebrow": { + "message": "Books" + }, + "HOME.CodexBlocks.card3.title": { + "message": "PDF / EPUB 翻译" + }, + "HOME.CodexBlocks.card3.description": { + "message": "把长文档翻译成可继续阅读的双语 EPUB 或 Markdown 输出,而不是只拿回一段文本结果。" + }, "CLOUD.hero.title": { - "message": "OOMOL Cloud" + "message": "发布私有的 cloud skill" }, "CLOUD.hero.description": { - "message": "把已经在本地跑通的函数直接交付成服务,不必再重搭后端、部署框架和运维流程。" + "message": "把已经在本地验证过的 skill 放到云端运行,让用户用到能力,而不用拿到你的源码或一套单独搭出来的服务。" + }, + "CLOUD.hero.kicker": { + "message": "Cloud Skill Runtime" + }, + "CLOUD.hero.note": { + "message": "用户通过 oo-cli、应用或 agent 使用 skill,而你的实现继续留在服务器端。" }, "CLOUD.hero.stat1": { - "message": "直接发布" + "message": "私有交付" }, "CLOUD.hero.stat2": { "message": "按量计费" @@ -2827,61 +2836,76 @@ "message": "少管运维" }, "CLOUD.hero.cta.start": { - "message": "开始使用" + "message": "开始构建 Cloud Skill" }, "CLOUD.hero.cta.docs": { "message": "了解更多" }, + "CLOUD.hero.cta.console": { + "message": "打开 Cloud 控制台" + }, "CLOUD.painPoints.title": { - "message": "交付代码不该是折磨" + "message": "交付一个 skill,不该等于重做一个 SaaS" }, "CLOUD.painPoints.subtitle": { "message": "作为开发者,我们深知你的苦恼" }, "CLOUD.painPoints.description": { - "message": "真正拖慢交付的,往往不是函数本身,而是把它包成服务的那一大段重复工作:准备接口、部署环境、配置扩缩容、维护可用性。Cloud 的目标就是把这段工作缩到最短。" + "message": "真正拖慢交付的,往往不是 skill 本身,而是围绕它补出来的那层东西:给用户做入口、让它稳定在线、控制访问、承担运维。Cloud 的目标就是把这一层压到最短。" }, "CLOUD.solution.title": { - "message": "同一份函数,三种交付方式" + "message": "一个 skill,三种消费路径" }, "CLOUD.solution.subtitle": { - "message": "写好的函数能力,可以继续交付为 API、MCP 工具或自动化任务。" + "message": "同一个 cloud skill 可以继续通过 API、MCP 或自动化被消费,同时仍然只维护一份实现。" + }, + "CLOUD.solution.kicker": { + "message": "消费路径" }, "CLOUD.modes.library.title": { - "message": "发布成自动化任务" + "message": "作为自动化运行" }, "CLOUD.modes.library.description": { - "message": "按触发器或定时器运行同一份函数能力,让它持续执行,而不是停留在本地手动运行。" + "message": "让同一个 cloud skill 按触发器或定时器持续运行,而不是只停留在本地手动执行。" }, "CLOUD.modes.serverless.title": { - "message": "发布成 API 服务" + "message": "通过 API 使用" }, "CLOUD.modes.serverless.description": { - "message": "不必再单独搭服务框架,直接把函数交付为可调用 API,并由 OOMOL 负责运行和扩缩容。" + "message": "让应用直接通过 API 调用同一个 cloud skill,而不用围绕它再补一层独立后端。" }, "CLOUD.modes.mcp.title": { - "message": "发布成 MCP 工具" + "message": "通过 MCP 使用" }, "CLOUD.modes.mcp.description": { - "message": "把函数能力作为 MCP Tool 暴露给 Agent 和 AI 应用,让同一份实现直接进入调用链。" + "message": "当 agent-native 集成更重要时,把同一个 cloud skill 作为 MCP Tool 暴露给 Agent 和 AI 应用。" }, "CLOUD.pricing.title": { - "message": "按调用收费,不用预支" + "message": "先发布,按使用增长再付费" }, "CLOUD.pricing.description": { - "message": "没有昂贵的服务器租用费,没有复杂的预付费套餐。我们按调用次数收取费用,真正做到省钱省力,让你专注于享受编程的乐趣。" + "message": "你不需要为了验证分发这件事先养一台服务器。先把 skill 发布出去,验证需求,再随着使用量增长付费。" + }, + "CLOUD.pricing.kicker": { + "message": "价格" }, "CLOUD.pricing.cta": { "message": "查看详细价格" }, + "CLOUD.cta.primary": { + "message": "在 Studio 中开始" + }, + "CLOUD.cta.secondary": { + "message": "打开 Cloud 控制台" + }, "CLOUD.opensource.title": { - "message": "开源基础设施" + "message": "开放运行时,灵活部署" }, "CLOUD.opensource.subtitle": { - "message": "OOMOL 的底层运行时内核全部开源,让你完全掌控部署环境" + "message": "即使你发布的 cloud skill 是私有的,底层运行时基础仍然保持开源。" }, "CLOUD.opensource.description": { - "message": "我们坚信开源的力量。OOMOL 的虚拟机和运行时核心代码完全开源,你可以自由查看、修改和部署。无论是个人 NAS、私有服务器还是公有云,你都拥有完全的部署自由。" + "message": "OOMOL 的虚拟机和运行时核心持续开源,所以无论你用个人服务器、私有基础设施还是公有云,都依然保有部署自由,同时为每个 skill 单独决定如何交付。" }, "CLOUD.opensource.projects.title": { "message": "开源项目" @@ -2910,51 +2934,74 @@ "CLOUD.opensource.ovm-mac.description": { "message": "macOS 平台的 OVM 实现,基于 Apple Virtualization Framework" }, - "STUDIO.hero.description": { - "message": "面向开发者的本地开发环境,基于 VSCode 的可视化编程工具,结合 FRP 协议实现 P2P 算力共享" + "APP.new.hero.title": { + "message": "OOMOL App Surfaces" + }, + "APP.new.hero.subtitle": { + "message": "cloud skill 的产品化入口" }, - "APP.new.hero.title": { "message": "OOMOL App" }, - "APP.new.hero.subtitle": { "message": "把函数直接交付给用户" }, "APP.new.hero.description": { - "message": "无需单独开发 UI,把函数能力直接交付为 Chat 技能或 Applet 入口,让用户立刻可以使用。" + "message": "一个 cloud skill 可以继续通过对话入口或结构化 applet 被使用,而不用为每种产品形态重做一套界面。" + }, + "APP.new.concept.title": { + "message": "一个 skill,多种入口" }, - "APP.new.concept.title": { "message": "代码即产品" }, "APP.new.concept.description": { - "message": "OOMOL 把函数能力封装成可直接使用的产品入口。你专注写函数,我们负责把它连接到用户。" + "message": "OOMOL 把同一个 cloud skill 包装成不同的可用入口。你专注实现本身,我们负责把它连接到用户。" + }, + "APP.new.chat.pill": { + "message": "对话入口 · Chat Skill" + }, + "APP.new.chat.title": { + "message": "OOMOL Chat" + }, + "APP.new.chat.subtitle": { + "message": "AI 助手 · 探索性交互" }, - "APP.new.chat.pill": { "message": "对话入口 · Chat Skill" }, - "APP.new.chat.title": { "message": "OOMOL Chat" }, - "APP.new.chat.subtitle": { "message": "AI 助手 · 探索性交互" }, "APP.new.chat.description": { - "message": "当用户需求还不够明确时,让 AI 在对话中选择并调用你的函数能力。" + "message": "当用户意图还不够明确时,让 AI 在对话中选择并运行合适的 cloud skill。" + }, + "APP.new.chat.meta1.label": { + "message": "适合谁" }, - "APP.new.chat.meta1.label": { "message": "适合谁" }, "APP.new.chat.meta1.value": { - "message": "适合通过对话暴露函数能力、逐步澄清需求的场景" + "message": "适合通过对话暴露 cloud skill,并先逐步澄清用户意图的场景" + }, + "APP.new.chat.meta2.label": { + "message": "核心体验" }, - "APP.new.chat.meta2.label": { "message": "核心体验" }, "APP.new.chat.meta2.value": { - "message": "先理解意图,再调用服务,降低用户上手门槛" + "message": "先理解意图,再调用正确的 cloud skill,降低用户上手门槛" }, "APP.new.chat.devValue": { - "message": "函数即技能:你的函数就是 AI 可调用的能力" + "message": "cloud skill 即 agent tool:同一份实现可以直接变成 AI 可调用入口" + }, + "APP.new.applet.pill": { + "message": "结构化入口 · Applet" + }, + "APP.new.applet.title": { + "message": "OOMOL Applet" + }, + "APP.new.applet.subtitle": { + "message": "表单小程序 · 确定性交互" }, - "APP.new.applet.pill": { "message": "参数入口 · Applet" }, - "APP.new.applet.title": { "message": "OOMOL Applet" }, - "APP.new.applet.subtitle": { "message": "表单小程序 · 确定性交互" }, "APP.new.applet.description": { - "message": "当用户输入明确时,用结构化参数直接调用函数能力,交付更稳定。" + "message": "当用户输入明确时,用结构化参数运行同一个 cloud skill,交付更稳定。" + }, + "APP.new.applet.meta1.label": { + "message": "适合谁" }, - "APP.new.applet.meta1.label": { "message": "适合谁" }, "APP.new.applet.meta1.value": { - "message": "适合把固定输入输出的函数能力交付给团队或最终用户" + "message": "适合把固定输入输出的 cloud skill 交付给团队或最终用户" + }, + "APP.new.applet.meta2.label": { + "message": "核心体验" }, - "APP.new.applet.meta2.label": { "message": "核心体验" }, "APP.new.applet.meta2.value": { - "message": "把函数包装成可填写、可执行、可复用的产品入口" + "message": "把同一个 cloud skill 包装成可填写、可执行、可复用的产品入口" }, "APP.new.applet.devValue": { - "message": "函数即应用:自动生成参数入口,减少前端样板" + "message": "cloud skill 即应用:自动生成参数入口,减少前端样板" }, "APP.new.hero.cta.web": { "message": "在网页中使用" @@ -2962,8 +3009,12 @@ "APP.new.hero.cta.studio": { "message": "在 OOMOL Studio 中使用" }, - "APP.new.cta.download": { "message": "下载体验" }, - "APP.new.cta.docs": { "message": "查看文档" }, + "APP.new.cta.download": { + "message": "下载体验" + }, + "APP.new.cta.docs": { + "message": "查看文档" + }, "STUDIO.page.title": { "message": "OOMOL Studio - 在真实 coding 环境里生成和验证函数" }, @@ -2979,6 +3030,33 @@ "STUDIO.manifesto.cta.download": { "message": "下载 OOMOL Studio" }, + "STUDIO.product.hero.kicker": { + "message": "OOMOL Studio" + }, + "STUDIO.product.hero.secondary": { + "message": "查看下载" + }, + "STUDIO.product.story.kicker": { + "message": "真实开发环境" + }, + "STUDIO.product.story.title": { + "message": "不是另一个要求开发者迁就的平台" + }, + "STUDIO.product.principles.kicker": { + "message": "核心原则" + }, + "STUDIO.product.principles.title": { + "message": "Studio 为什么更适合生产 block" + }, + "STUDIO.product.cta.title": { + "message": "从下一个 block 开始" + }, + "STUDIO.product.cta.description": { + "message": "在真实 coding 环境里写、调试和验证自己的 block。需要交付时,再继续通过 Cloud 部署出去。" + }, + "STUDIO.product.cta.secondary": { + "message": "查看 Cloud" + }, "STUDIO.story.paragraph1": { "message": "我们想要的,不是另一个要求开发者迁就平台的工具,而是一个能真正写函数、编排节点、调试依赖、验证结果的工作环境。" }, @@ -2997,6 +3075,51 @@ "STUDIO.story.paragraph3": { "message": "所以 Studio 的角色很明确:它不是为了替代工程环境,而是把函数生成、本地验证和后续交付重新放回工程环境里。" }, + "HOME.StudioChain.title": { + "message": "从想法,到 cloud skill" + }, + "HOME.StudioChain.subtitle": { + "message": "当现成 skill 不够时,OOMOL 给你一条连续的路径:在 Studio 里生成,在本地验证,通过 Cloud 发布,再由 oo-cli 交付出去。" + }, + "HOME.StudioChain.lead": { + "message": "不要停在本地自动化,把它做成别人真的能用的 skill。" + }, + "HOME.StudioChain.summary": { + "message": "在 OOMOL 里,你可以先使用现成 skill,再在 Studio 里生成并验证自己的实现,最后通过 Cloud 私有发布给自己、团队或客户使用。" + }, + "HOME.StudioChain.card1.title": { + "message": "OOMOL Studio" + }, + "HOME.StudioChain.card1.description": { + "message": "在 Studio 里描述、编写、调试和验证自己的 skill,用真实工程环境管理代码、依赖和输入输出。" + }, + "HOME.StudioChain.card2.title": { + "message": "Cloud" + }, + "HOME.StudioChain.card2.description": { + "message": "把已经验证过的实现发布为 cloud skill,持续提供给自己、团队或客户使用,而不暴露源码。" + }, + "HOME.StudioChain.action.studio": { + "message": "了解 Studio" + }, + "HOME.StudioChain.action.cloud": { + "message": "了解 Cloud" + }, + "Theme.Navbar.product.studio.description": { + "message": "生成并验证你自己的 cloud skill" + }, + "Theme.Navbar.product.cli.description": { + "message": "装进 Codex 或 Claude Code,直接使用 Skill" + }, + "Theme.Navbar.product.cloud.description": { + "message": "在云端运行、订阅和管理 cloud skill" + }, + "Theme.Navbar.product.ai.description": { + "message": "用官方 GUI Agent 直接使用同一套 Skill" + }, + "Theme.Navbar.product.label": { + "message": "产品" + }, "STUDIO.principle1.title": { "message": "1. 节点即函数,编排即组合" }, @@ -3161,5 +3284,14 @@ }, "SDK.fusion.feature3": { "message": "支持文生图、语音合成等多种服务" + }, + "HOME.page.description": { + "message": "在真实编码环境中构建云技能,本地验证,然后发布到 oo-cli、智能体、API 和自动化任务中,无需暴露源代码。" + }, + "HOME.Downloads.page.title": { + "message": "下载 OOMOL Studio — macOS 和 Windows" + }, + "HOME.Downloads.page.description": { + "message": "下载适用于 macOS (Apple Silicon) 或 Windows 的 OOMOL Studio,在本地构建、验证和发布云技能。" } } diff --git a/i18n/zh-CN/docusaurus-theme-classic/footer.json b/i18n/zh-CN/docusaurus-theme-classic/footer.json index eaeaa27d..6ee26d86 100644 --- a/i18n/zh-CN/docusaurus-theme-classic/footer.json +++ b/i18n/zh-CN/docusaurus-theme-classic/footer.json @@ -1,11 +1,11 @@ { - "link.title.Product": { - "message": "产品", - "description": "The title of the footer links column with title=Product in the footer" + "link.title.Platform": { + "message": "平台", + "description": "The title of the footer links column with title=Platform in the footer" }, - "link.title.Resources": { - "message": "资源", - "description": "The title of the footer links column with title=Resources in the footer" + "link.title.Support": { + "message": "支持", + "description": "The title of the footer links column with title=Support in the footer" }, "link.title.Developers": { "message": "开发者", diff --git a/package-lock.json b/package-lock.json index e3fb5c70..434f7b9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -262,7 +262,6 @@ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.44.0.tgz", "integrity": "sha512-/FRKUM1G4xn3vV8+9xH1WJ9XknU8rkBGlefruq9jDhYUAvYozKimhrmC2pRqw/RyHhPivmgZCRuC8jHP8piz4Q==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/client-common": "5.44.0", "@algolia/requester-browser-xhr": "5.44.0", @@ -463,7 +462,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2322,7 +2320,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2345,7 +2342,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2455,7 +2451,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2877,7 +2872,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3583,7 +3577,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/babel": "3.9.2", "@docusaurus/bundler": "3.9.2", @@ -3660,7 +3653,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/faster/-/faster-3.9.2.tgz", "integrity": "sha512-DEVIwhbrZZ4ir31X+qQNEQqDWkgCJUV6kiPPAd2MGTY8n5/n0c4B8qA5k1ipF2izwH00JEf0h6Daaut71zzkyw==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/types": "3.9.2", "@rspack/core": "^1.5.0", @@ -3789,7 +3781,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -4340,6 +4331,7 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } @@ -4357,6 +4349,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -4374,6 +4367,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -4391,6 +4385,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -4408,6 +4403,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -4425,6 +4421,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -4442,6 +4439,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4459,6 +4457,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4476,6 +4475,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4493,6 +4493,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4510,6 +4511,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4527,6 +4529,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4544,6 +4547,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4561,6 +4565,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4578,6 +4583,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4595,6 +4601,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4612,6 +4619,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4629,6 +4637,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4646,6 +4655,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4663,6 +4673,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4680,6 +4691,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4697,6 +4709,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": ">=18" } @@ -4714,6 +4727,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } @@ -4731,6 +4745,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -4748,6 +4763,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -4765,6 +4781,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -5432,7 +5449,6 @@ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "license": "MIT", - "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -5570,6 +5586,7 @@ "hasInstallScript": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -5611,6 +5628,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5631,6 +5649,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5651,6 +5670,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5671,6 +5691,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5691,6 +5712,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5711,6 +5733,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5731,6 +5754,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5751,6 +5775,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5771,6 +5796,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5791,6 +5817,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5811,6 +5838,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5831,6 +5859,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5851,6 +5880,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -5865,6 +5895,7 @@ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "license": "Apache-2.0", "optional": true, + "peer": true, "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -8524,7 +8555,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.53.2", @@ -8538,7 +8570,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.53.2", @@ -8552,7 +8585,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.53.2", @@ -8566,7 +8600,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.53.2", @@ -8580,7 +8615,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.53.2", @@ -8594,7 +8630,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.53.2", @@ -8608,7 +8645,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.53.2", @@ -8622,7 +8660,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.53.2", @@ -8636,7 +8675,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.53.2", @@ -8650,7 +8690,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.53.2", @@ -8664,7 +8705,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.53.2", @@ -8678,7 +8720,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.53.2", @@ -8692,7 +8735,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.53.2", @@ -8706,7 +8750,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.53.2", @@ -8720,7 +8765,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.53.2", @@ -8734,7 +8780,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.53.2", @@ -8748,7 +8795,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.53.2", @@ -8762,7 +8810,8 @@ "optional": true, "os": [ "openharmony" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.53.2", @@ -8776,7 +8825,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.53.2", @@ -8790,7 +8840,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.53.2", @@ -8804,7 +8855,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.53.2", @@ -8818,7 +8870,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rspack/binding": { "version": "1.6.3", @@ -9218,7 +9271,6 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -9323,7 +9375,6 @@ "integrity": "sha512-OQm+yJdXxvSjqGeaWhP6Ia264ogifwAO7Q12uTDVYj/Ks4jBTI4JknlcjDRAXtRhqbWsfbZyK/5RtuIPyptk3w==", "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" @@ -10266,7 +10317,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -10309,7 +10359,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.26.tgz", "integrity": "sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==", "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -10483,7 +10532,6 @@ "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.1", "@typescript-eslint/types": "8.48.1", @@ -11160,7 +11208,6 @@ "integrity": "sha512-1beHBCRkWEaV3FghSEX6Bx0Luzz0+59iWa4dUo/KhReB7elVPaZfpFrsq1u28RkCo4NwSSxhnVtIxVfdjwk2cA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.5", "@unocss/config": "66.5.6", @@ -11395,7 +11442,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -11481,7 +11527,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11546,7 +11591,6 @@ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.44.0.tgz", "integrity": "sha512-f8IpsbdQjzTjr/4mJ/jv5UplrtyMnnciGax6/B0OnLCs2/GJTK13O4Y7Ff1AvJVAaztanH+m5nzPoUq6EAy+aA==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/abtesting": "1.10.0", "@algolia/client-abtesting": "5.44.0", @@ -12187,7 +12231,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -12506,7 +12549,6 @@ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", @@ -13289,7 +13331,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13609,7 +13650,6 @@ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10" } @@ -14031,7 +14071,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -14948,6 +14987,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -15028,7 +15068,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -17220,7 +17259,8 @@ "version": "5.1.4", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/import-fresh": { "version": "3.3.1", @@ -18084,7 +18124,6 @@ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "devOptional": true, "license": "MIT", - "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -21363,7 +21402,8 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/node-emoji": { "version": "2.2.0", @@ -22280,7 +22320,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -23302,7 +23341,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -24148,7 +24186,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -24184,7 +24221,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -24264,7 +24300,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/react": "*" }, @@ -24340,7 +24375,6 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -25043,6 +25077,7 @@ "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -25311,6 +25346,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "license": "MIT", + "peer": true, "dependencies": { "readdirp": "^4.0.1" }, @@ -25326,6 +25362,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -25379,7 +25416,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -26507,7 +26543,6 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -26787,7 +26822,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -26979,8 +27013,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", @@ -27134,7 +27167,6 @@ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -27932,6 +27964,7 @@ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12.0.0" }, @@ -28051,7 +28084,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -28836,7 +28868,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/components/DownloadButton/index.tsx b/src/components/DownloadButton/index.tsx index cdf87fa0..286b112b 100644 --- a/src/components/DownloadButton/index.tsx +++ b/src/components/DownloadButton/index.tsx @@ -27,19 +27,41 @@ function detectOSAndArchitecture(): OS { export interface DownloadButtonProps { stableTag?: boolean; + centered?: boolean; + showNote?: boolean; + noteTone?: "default" | "inverse"; } -export const DownloadButton = ({ stableTag }: DownloadButtonProps) => { +export const DownloadButton = ({ + stableTag, + centered, + showNote = true, + noteTone = "default", +}: DownloadButtonProps) => { const downloadIcon = (