- 10 9月, 2025 1 次提交
-
-
由 Will Chen 提交于
… provider) <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Enables 1M-token context for Anthropic Claude 4 Sonnet and marks AWS Bedrock as a secondary provider. Adds the required Anthropic beta header and updates model metadata and pricing indicator. - **New Features** - Send header anthropic-beta: context-1m-2025-08-07 when using the Anthropic provider. - Update Claude 4 Sonnet configs: contextWindow to 1,000,000; add cost warning; increase pricing tier to 5 (applies to Anthropic and Bedrock model IDs). - Set AWS Bedrock as a secondary provider. <!-- End of auto-generated description by cubic. -->
-
- 09 9月, 2025 6 次提交
-
-
由 Will Chen 提交于
Based on https://github.com/dyad-sh/dyad/pull/1116 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds a fast chat search dialog (Command Palette) to find and jump between chats. Open via the sidebar button or Ctrl/Cmd+K, with title and message text search plus inline snippets. - New Features - Command palette using cmdk with keyboard shortcut (Ctrl/Cmd+K). - Searches within the selected app across chat titles and message content via a new IPC route (search-chats). - Debounced queries (150ms) with React Query; results de-duplicated and sorted by newest. - Snippet preview with highlighted matches and custom ranking; selecting a result navigates and closes the dialog. - Search button added to ChatList; basic e2e tests added (currently skipped). - Dependencies - Added cmdk@1.1.1. - Bumped @radix-ui/react-dialog to ^1.1.15 and updated Dialog to support an optional close button. <!-- End of auto-generated description by cubic. --> --------- Co-authored-by:
Evans Obeng <iamevansobeng@outlook.com> Co-authored-by:
Evans Obeng <60653146+iamevansobeng@users.noreply.github.com>
-
由 Will Chen 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Regenerated package-lock.json to fix inconsistencies and align with package.json. This restores reproducible installs locally and in CI. - **Migration** - Run npm ci to install with the updated lockfile. - If install issues persist, delete node_modules and retry. <!-- End of auto-generated description by cubic. -->
-
由 Adeniji Adekunle James 提交于
# Add xAI (Grok) Provider Support ## Overview This PR adds support for xAI's Grok models as an AI provider, focusing on coding-optimized models. ## Changes Made ### Provider Configuration (`language_model_helpers.ts`) - Added xAI to `MODEL_OPTIONS` with 3 coding-focused models: - `grok-code-fast-1`: Fast, economical coding model (256k context) - `grok-4`: Most capable flagship model (256k context) - `grok-3`: Powerful coding model (131k context) <img width="805" height="592" alt="image" src="https://github.com/user-attachments/assets/a99b9495-e90e-40f3-a772-be9807b24501" /> <img width="805" height="653" alt="image" src="https://github.com/user-attachments/assets/aad7b333-ee74-457a-b5b7-5d20bd54d7e0" /> ## Dependencies - Requires `@ai-sdk/xai` package (already imported) - Uses existing provider pattern and infrastructure ## Why xAI for Coding? xAI's Grok models have shown impressive results in coding benchmarks: - Trained on high-quality programming datasets reflecting real-world tasks - Excels at agentic coding workflows with fast reasoning capabilities - Strong performance across multiple programming languages (TypeScript, Python, Java, Rust, C++, Go) - Achieved 70.8% on SWE-Bench-Verified using internal evaluation - Optimized for rapid iteration in development environments <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds xAI (Grok) as a provider so users can pick Grok coding models in the app. Integrates provider config, client wiring, and schema updates. - **New Features** - Added xAI provider with env var mapping (XAI_API_KEY) and provider metadata. - Exposed models: grok-code-fast-1 (256k), grok-4 (256k), grok-3 (131k). - Hooked up get_model_client to use @ai-sdk/xai (createXai). - Included "xai" in validation schemas and model options. - **Migration** - Set XAI_API_KEY to enable xAI. <!-- End of auto-generated description by cubic. --> --------- Co-authored-by:
Will Chen <willchen90@gmail.com>
-
由 Samrat Jha 提交于
- follows existing patterns for AI SDK to provide Bedrock integration - Uses Bedrock's API token feature for authentication which provides a standard experience - bedrock provided models match the Anthropic provided models (for now) **Disclaimer**: The contributing docs are extremely sparse. I don't actually know how to build this and get this running in Electron ## Testing - AWS Bedrock provider is available for selection <img width="994" height="496" alt="image" src="https://github.com/user-attachments/assets/3cb21fed-9826-40e5-8019-b2b5df5e873b" /> - The provider settings also show the right models and offer the right env variable to use <img width="949" height="862" alt="image" src="https://github.com/user-attachments/assets/8c23d5c8-d84d-4bf7-856a-8dc8d9d6c4b4" /> <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds AWS Bedrock as a provider so users can run Claude models via Bedrock with API token authentication. The settings now list Bedrock with supported models and a new env var. - New Features - New provider: bedrock using @ai-sdk/amazon-bedrock, wired into model client and schemas. - Models: Claude 4 Sonnet, Claude 3.7 Sonnet, Claude 3.5 Sonnet (Bedrock model IDs). - Settings: shows AWS Bedrock with correct models and env var AWS_BEARER_TOKEN_BEDROCK. - Default region: us-east-1. - Migration - Set AWS_BEARER_TOKEN_BEDROCK with your Bedrock API token. - Select AWS Bedrock in settings and pick a model. <!-- End of auto-generated description by cubic. --> Co-authored-by:
Samrat Jha <samratj@amazon.com> Co-authored-by:
Will Chen <willchen90@gmail.com>
-
由 Md Rakibul Islam Rocky 提交于
# Summary * Adds first-class **Google Vertex AI provider** using `@ai-sdk/google-vertex`. * Supports **Gemini 2.5** models and partner **MaaS (Model Garden)** models via full publisher IDs. * New **Vertex-specific settings UI** for Project, Location, and Service Account JSON. * Implements a **“thinking” toggle** for Gemini 2.5 Flash * Pro: always on * Flash: toggleable * Flash Lite: none * Fixes *“AI not found”* for Vertex built-ins by mapping to `publishers/google` paths. * Hardens **cross-platform file ops** and ensures all tests pass. --- # What’s New ### Vertex AI Provider * Uses `@ai-sdk/google-vertex` with `googleAuthOptions.credentials` from pasted Service Account JSON. * Configurable **project** and **location**. * Base URL → `/projects/{project}/locations/{location}` * Built-ins: `publishers/google/models/<id>` * Partner MaaS: `publishers/<partner>/models/...` ### Built-in Vertex Models * `gemini-2.5-pro` * `gemini-2.5-flash` * `gemini-2.5-flash-lite` ### Thinking Behavior * Vertex + Google marked as thinking-capable. * Pro: always thinking * Flash: toggle in UI * Flash Lite: none ### Vertex Settings UI * New **Google Vertex AI panel** for Project ID, Location, Service Account JSON. * Keys encrypted like other secrets. --- # Fixes * **Model resolution:** built-ins auto-map to `publishers/google/models/<id>`. * **Partner MaaS support:** full publisher IDs work directly (e.g. DeepSeek). * **Cross-platform paths:** normalize file ops with `toPosixPath`, preserve `safeJoin` semantics. --- # Why This Is Better * Users can select **Vertex alongside other providers**. * **More models** available through Model Garden. * **Dedicated setup UI** reduces misconfig. * **Thinking toggle** gives control over cost vs. reasoning depth. --- # Files Changed * **Provider & Models**: `language_model_helpers.ts`, `get_model_client.ts` * **Streaming**: `chat_stream_handlers.ts` * **Schemas & Encryption**: `schemas.ts`, `settings.ts` * **Settings UI**: `VertexConfiguration.tsx`, `ApiKeyConfiguration.tsx` * **Models UI**: `ModelsSection.tsx` (Flash toggle) * **Setup Detection**: `useLanguageModelProviders.ts` * **Path Utils**: `path_utils.ts`, `response_processor.ts` * **Deps**: `package.json` → `@ai-sdk/google-vertex@3.0.16` --- # Tests & Validation * **TypeScript**: `npm run ts` →✅ * **Lint**: `npm run lint` →✅ * **Unit tests**: `npm test` →✅ 231 passed, 0 failed --- # Migration / Notes * No breaking changes. * For Vertex usage: * Ensure Vertex AI API is enabled. * Service Account needs `roles/aiplatform.user`. * Region must support model (e.g. `us-central1`). * Thinking toggle currently affects **only** Gemini 2.5 Flash. --- # Manual QA 1. Configure Vertex with Project/Location/Service Account JSON. 2. Test built-ins: * `gemini-2.5-pro` * `gemini-2.5-flash` (toggle on/off) * `gemini-2.5-flash-lite` 3. Test MaaS partner model (e.g., DeepSeek) via full publisher ID. 4. Verify other providers remain unaffected. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds a first-class Google Vertex AI provider with Gemini 2.5 models, a Vertex settings panel, and a “thinking” toggle for Gemini 2.5 Flash. Also fixes model resolution for Vertex and hardens cross-platform file operations. - **New Features** - Vertex AI provider via @ai-sdk/google-vertex with project, location, and service account JSON. - Built-in models: gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite. - “Thinking” support: Pro always on; Flash toggle in Models UI; Flash Lite none. - MaaS partners supported via full publisher paths (e.g., publishers/<partner>/models/...). - Vertex settings UI with encrypted service account key storage. - **Bug Fixes** - Built-in Vertex models auto-map to publishers/google/models/<id>. - Consistent file ops across platforms using toPosixPath. - Vertex readiness detection requires project/location/service account JSON. - Streaming “thinking” behavior respects Vertex Flash toggle and Pro always-on. <!-- End of auto-generated description by cubic. --> --------- Co-authored-by:Md Rakibul Islam Rocky <mdrirocky08@gmail.com> Co-authored-by:
graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com> Co-authored-by:
Will Chen <willchen90@gmail.com>
-
由 Will Chen 提交于
-
- 06 9月, 2025 4 次提交
-
-
由 Mohamed Aziz Mejri 提交于
This PR solves issue #1194 by setting a minimum height and width <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Set a minimum window size to prevent UI breakage when the app is resized too small. The BrowserWindow now enforces minWidth 800 and minHeight 500 so layouts stay stable and controls remain accessible. <!-- End of auto-generated description by cubic. --> -
由 Mohamed Aziz Mejri 提交于
This PR introduces a new keyboard shortcut to improve the efficiency of selecting components in the app. Users can now quickly select components using Meta + Shift + C for Mac and Ctrl + Shift + C for Other devices (Windows/Linux) <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Add a shortcut to quickly activate the component selector from the preview. Use Meta+Shift+C on macOS and Ctrl+Shift+C on Windows/Linux. - **New Features** - Added useShortcut hook to handle key combos and prevent default on match. - Wired shortcut in PreviewIframe with OS detection for Meta vs Ctrl. - Forwarded keydown events from the iframe to the parent via postMessage (dyad-shortcut-triggered) so the shortcut works inside preview content. <!-- End of auto-generated description by cubic. --> -
由 Adeniji Adekunle James 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Fix typo in CONTRIBUTING.md by correcting "pull requet" to "pull request" in the setup section, improving clarity for contributors. <!-- End of auto-generated description by cubic. -->
-
由 Adeniji Adekunle James 提交于
Hovering over the turbo edit code block previously showed a pointer cursor, and clicking inside would collapse/expand the accordion. This PR updates the DyadEdit component to use cursor-text and adds e.stopPropagation() so clicks inside the code block no longer toggle the accordion. https://github.com/user-attachments/assets/1b23be66-6d8f-4e4b-a390-d59f9a2bcee8 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Prevented the Turbo Edit accordion from toggling when clicking inside the code block and updated the cursor to text to signal editing. - **Bug Fixes** - Stop click propagation inside the code block to avoid accordion toggle. - Apply cursor-text on the code container for proper text-selection affordance. <!-- End of auto-generated description by cubic. -->
-
- 05 9月, 2025 1 次提交
-
-
由 Will Chen 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Set “balanced” as the default smart context mode. Users now get balanced when Smart Files Context is enabled and no mode is set; “conservative” must be explicitly selected. - **Refactors** - Default fallback to balanced in UI and engine (proSmartContextOption undefined -> "balanced"). - ProModeSelector saves "conservative" explicitly; selector reads undefined as balanced. - Updated schema and types to allow "balanced" | "conservative". - Engine payload now includes smart_context_mode with "balanced" by default; e2e tests and snapshots updated. - **Migration** - No action needed. Existing users without an explicit mode will use balanced by default; selecting conservative persists. <!-- End of auto-generated description by cubic. -->
-
- 04 9月, 2025 5 次提交
-
-
由 Will Chen 提交于
1. Show less common AI providers (secondary) in submenu 2. Show $ signs for rough cost guide 3. Show "Pro" for supported AI providers with Pro is enabled <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Improves the Model Picker UX by grouping less-used providers under an “Other AI providers” submenu and adding clear cost and Pro indicators. This makes picking models faster and more informative. - **New Features** - Grouped secondary providers under “Other AI providers” using a new provider.secondary flag (Azure marked secondary). - Added rough cost hints: models can set dollarSigns and the UI shows a “$” badge accordingly. - Shows a “Pro” badge on supported cloud providers when Pro is enabled; added a “Custom” badge for custom providers. - Extended types: LanguageModelProvider.secondary and LanguageModel.dollarSigns; populated values across OpenAI, Anthropic, Google, and OpenRouter. <!-- End of auto-generated description by cubic. --> -
由 Will Chen 提交于
-
由 顾颢 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Make npm scripts work on Windows by replacing rm -rf with rimraf and using cross-env for environment variables. This enables local dev and packaging on Windows without WSL. - **Refactors** - Changed clean to use rimraf and delete out and scaffold/node_modules. - Prefixed dev:engine, staging:engine, and staging:gateway with cross-env. - **Dependencies** - Added rimraf ^6.0.1. Run npm install. <!-- End of auto-generated description by cubic. --> Co-authored-by:顾颢 <guhao@dayee.com>
-
由 Adeniji Adekunle James 提交于
### Summary This PR hides `<dyad-command type="refresh"></dyad-command>` tags from generated text outputs. These elements are not intended for end users and clutter the response text. ### Changes - Filter out `<dyad-command>` tags from generated text. - Ensure no regressions in rendering or formatting of user-visible output. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Hide dyad-command tags from chat output so internal commands never appear in user-visible text. Updates DyadMarkdownParser to detect and drop these tags during preprocessing, parsing, and rendering. <!-- End of auto-generated description by cubic. --> -
由 Will Chen 提交于
This allows almost all the iframe sandbox tokens https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe#sandbox except notably for allow-top-navigation* Note: allow-same-origin should be OK because the main window is under the `file://` origin while the iframe window is served on `localhost:####` <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Enable sandboxing on the preview iframe to isolate preview content while preserving needed capabilities (allow-same-origin, scripts, forms, popups, modals, orientation/pointer lock, presentation, downloads). Top-level navigation remains disallowed; allow-same-origin is safe because the app is file:// and the iframe runs on localhost. <!-- End of auto-generated description by cubic. -->
-
- 03 9月, 2025 2 次提交
- 02 9月, 2025 2 次提交
-
-
由 Will Chen 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Updates app branding to icon set v2 and switches the in-app logo to SVG for sharper rendering. - **Refactors** - Use assets/logo.svg in TitleBar instead of logo_transparent.png. - Add assets/logo.svg; remove legacy PNGs (logo.png, logo_transparent.png). - Refresh platform icon files (logo.icns, logo.ico, assets/icon/logo.png). <!-- End of auto-generated description by cubic. -->
-
由 Toluwap 提交于
Update the doc for missing userData for the database. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Add a setup step in CONTRIBUTING.md to create the userData directory required by the database. This prevents migration commands from failing on fresh installs. <!-- End of auto-generated description by cubic. -->
-
- 31 8月, 2025 1 次提交
-
-
由 Tanner-Maasen 提交于
Fixes #710 This PR implements comprehensive Azure OpenAI integration for Dyad, enabling users to leverage Azure OpenAI models through proper environment variable configuration. The implementation adds Azure as a supported provider with full integration into the existing language model architecture, including support for GPT-5 models. Key features include environment-based configuration using `AZURE_API_KEY` and `AZURE_RESOURCE_NAME`, specialized UI components that provide clear setup instructions and status indicators, and seamless integration with Dyad's existing provider system. The Azure provider leverages the @ai-sdk/azure package (v1.3.25) for compatibility with the current TypeScript language model interfaces. The implementation includes robust error handling for missing configuration, comprehensive test coverage with 9 new unit tests covering critical functionality like model client creation and error scenarios, and an E2E test for the Azure-specific settings UI. <img width="1510" height="908" alt="Screenshot 2025-08-18 at 9 14 32 PM" src="https://github.com/user-attachments/assets/04aa99e1-1590-4bb0-86c9-a67b97bc7500" /> --------- Co-authored-by:
graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com> Co-authored-by:
Will Chen <willchen90@gmail.com>
-
- 30 8月, 2025 4 次提交
-
-
由 Will Chen 提交于
-
由 Will Chen 提交于
-
由 Will Chen 提交于
-
由 Will Chen 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Switches the duplicate-issues GitHub Action from anthropic/claude-sonnet-4-20250514 to openai/gpt-5 to reduce cost. Updates the workflow to use OPENAI_API_KEY instead of ANTHROPIC_API_KEY. <!-- End of auto-generated description by cubic. -->
-
- 29 8月, 2025 2 次提交
-
-
由 Will Chen 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Adds a GitHub Action to detect and comment on potential duplicate issues when a new issue is opened. This reduces triage time and keeps issue lists clean. - **New Features** - Adds .github/workflows/duplicate-issues.yml triggered on issues: opened. - Uses opencode with Anthropic Claude Sonnet 4 to scan existing issues and comment with links if duplicates are likely; stays silent otherwise. - Runs with minimal permissions; allows gh issue commands and denies webfetch. - **Migration** - Create the ai-bots environment and add the ANTHROPIC_API_KEY secret (GITHUB_TOKEN is provided by GitHub). <!-- End of auto-generated description by cubic. -->
-
由 Will Chen 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Adds an explicit Husky pre-commit setup to run the formatter and linter before each commit. Replaces the auto-run prepare hook with a manual npm run init-precommit command. - **Migration** - Run npm run init-precommit once in your repo to install the pre-commit hook. <!-- End of auto-generated description by cubic. -->
-
- 28 8月, 2025 1 次提交
-
-
由 顾颢 提交于
fixes #1109 https://github.com/WiseLibs/better-sqlite3/blob/master/docs/api.md#transactionfunction---function > Transaction functions do not work with async functions. Technically speaking, async functions always return after the first await, which means the transaction will already be committed before any async code executes. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Fixes a runtime error when deleting the first custom provider by using a synchronous DB transaction. Ensures associated models and the provider are removed atomically without failing. - **Bug Fixes** - Replace async transaction callback with a synchronous one and remove awaits on tx operations to match the DB API and prevent the first-delete error. <!-- End of auto-generated description by cubic. --> Co-authored-by:
顾颢 <hao.gu@factchina.com>
-
- 27 8月, 2025 4 次提交
-
-
由 Will Chen 提交于
-
由 Will Chen 提交于
TODOs: - [ ] clean-up docker images https://claude.ai/chat/13b2c5d3-0d46-49e3-a771-d10edf1e29f4
-
由 Toni Alatalo 提交于
The prompt text says: > - Use TypeScript. But in the examples there are .jsx files. I got errors sometimes (in my fork with other changes too) that JSX got generated instead of TSX. This seems to have fixed it for me. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Updated system prompt examples to use .tsx/.ts instead of .jsx/.js, matching the “Use TypeScript” instruction. This prevents JSX drift and reduces cases where generated code uses JSX instead of TSX. <!-- End of auto-generated description by cubic. --> -
由 Will Chen 提交于
Fixes #1037 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Enable JSON file support in codebase scanning so common configs and data (e.g., package.json, vercel.json, translations) are included. Adds .json to the allowed extensions and removes special-casing for package.json/vercel.json. <!-- End of auto-generated description by cubic. -->
-
- 26 8月, 2025 7 次提交
-
-
由 Will Chen 提交于
Fixes #554 #1049 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Stop mutating package.json when reading files. readFileWithCache now returns raw content so all fields are preserved (e.g., packageManager). Fixes #554 and #1049. - **Bug Fixes** - Removed package.json "cleaning" logic and the cleanContent helper. - Return and cache unmodified file content from both fs and virtualFileSystem. <!-- End of auto-generated description by cubic. --> -
由 Will Chen 提交于
fixes #1010 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Disable automatic JWT verification for Supabase Edge Functions and update prompts/templates to require and demonstrate manual auth handling. Fixes #1010. - **Bug Fixes** - Set verify_jwt: false in function deployment. - Updated Supabase prompt with an Authentication section and guidance to manually verify tokens. - Adjusted the hello function template to check the Authorization header and return 401 when missing. <!-- End of auto-generated description by cubic. --> -
由 Will Chen 提交于
<!-- This is an auto-generated description by cubic. --> ## Summary by cubic Parameterized the system prompt and tokenized it in e2e dumps to make snapshots smaller and stable. No runtime behavior changes; future prompt edits won’t churn tests. - **Refactors** - Exported BUILD_SYSTEM_PREFIX and BUILD_SYSTEM_POSTFIX from system_prompt.ts. - Updated test_helper to replace the full prompt with ${BUILD_SYSTEM_PREFIX}/${BUILD_SYSTEM_POSTFIX} tokens in message dumps. - Regenerated e2e snapshots to use tokens, reducing ~270 lines per snapshot. <!-- End of auto-generated description by cubic. --> -
由 Will Chen 提交于
-
由 顾颢 提交于
Fixes #1077 <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Fix the SetupBanner being cut off in the empty chat state. The placeholder message now uses flex-1 instead of h-full so the banner renders fully. <!-- End of auto-generated description by cubic. --> Co-authored-by:顾颢 <guhao@dayee.com>
-
由 Mohamed Aziz Mejri 提交于
This PR fixes the issue #1072 where long words in chat messages overflow outside the message container. The fix applies Tailwind’s `break-words` utility to ensure that overly long words wrap properly within the chat bubble. <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Fixes text overflow in chat messages by adding Tailwind’s break-words to the message content. Long words and URLs now wrap inside the bubble instead of spilling out. <!-- End of auto-generated description by cubic. --> -
由 Mohamed Aziz Mejri 提交于
This PR adds a reference to the architecture doc in contributing.md . <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Added a link to the Architecture Guide in CONTRIBUTING.md to give contributors a high-level overview and ensure changes align with the project architecture. <!-- End of auto-generated description by cubic. -->
-