diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 17aad19231c..b5290867f78 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -25,8 +25,6 @@ }, "vscode": { "extensions": [ - "GitHub.copilot", - "GitHub.copilot-chat", "ms-dotnettools.csharp", "ms-dotnettools.csdevkit", "ms-azuretools.vscode-docker", diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 8fd7df2a95d..07d0b3f8317 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -46,13 +46,13 @@ ## Rules **RULE 1:** If a task (question, code modification or review) involves the use of bit BlazorUI components (e.g., `BitButton`, `BitTooltip`, `BitTextField`), -or refers to `bitplatform`, `bit Bswup`, `bit Butil`, `bit Besql`, or `bit Boilerplate`, or involves UI components without explicitly specifying their UI toolkit, -you **MUST** use the deepwiki's `ask_question` mcp tool to find the correct implementation and usage patterns of `bitfoundation/bitplatform` deep wiki before writing or changing any code. +or refers to `bitplatform`, `bit Bswup`, `bit Butil`, `bit Bmotion`, `bit Brouter`, or `bit Boilerplate`, or involves UI components without explicitly specifying their UI toolkit, +you **MUST** use the `bitplatform` MCP server's tools - start with the matching `Search` tool (e.g. `SearchBitBlazorUI`, `SearchBswup`, `SearchButil`, `SearchBmotion`, `SearchBrouter`) and follow the calls it names - to find the correct implementation and usage patterns before writing or changing any code. **End of RULE 1** **RULE 2:** If a task (question, code modification, or review) involves Microsoft technologies such as C#, F#, ASP.NET Core, Microsoft.Extensions, NuGet, Entity Framework, Blazor or the `dotnet` runtime, -you **MUST** use the `microsoft.docs.mcp` server to search Microsoft's latest official documentation for detailed and up-to-date information before responding to specific or narrowly defined questions. +you **MUST** use the `microsoft_docs_search`, `microsoft_docs_fetch` and `microsoft_code_sample_search` tools of the `bitplatform` MCP server to search Microsoft's latest official documentation for detailed and up-to-date information before responding to specific or narrowly defined questions. **End of RULE 2** diff --git a/.github/workflows/wiki.sh b/.github/workflows/wiki.sh deleted file mode 100644 index ade68c0a9cc..00000000000 --- a/.github/workflows/wiki.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -# This script performs the full MCP query and prints the final URL as its output. - -set -euo pipefail - -# Combine issue title and body from environment variables provided by the workflow. -QUESTION="Title: $ISSUE_TITLE. Body: $ISSUE_BODY" - -# The URL of the MCP tool endpoint. -url="https://mcp.deepwiki.com/mcp" - -# The server runs in stateless mode, so no initialize/initialized handshake is needed. -# Use jq to safely construct the JSON payload, passing the question as an argument -# to avoid shell interpretation issues. -JSON_PAYLOAD=$(jq -n \ - --arg question "$QUESTION" \ - '{ - "jsonrpc": "2.0", - "id": 2, - "method": "tools/call", - "params": { - "name": "ask_question", - "arguments": { - "repoName": "bitfoundation/bitplatform", - "question": $question - } - } - }') - -# Send the query. A transport level failure here fails the whole step. -RESPONSE=$(curl -s --fail-with-body -X POST \ - -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \ - -d "$JSON_PAYLOAD" \ - "$url") - -# Extract the first URL and replace the domain. -# The URL is embedded in a JSON string, so stop at the first quote or backslash -# (the response terminates the URL with an escaped newline). -# An empty result is not an error, it just means no comment gets posted. -# The trailing `|| true` keeps a no-match grep from tripping `pipefail`. -echo "$RESPONSE" \ - | { grep -o 'https://deepwiki\.com/search/[^"\\]*' || true; } \ - | head -n 1 \ - | sed 's|https://deepwiki.com|https://wiki.bitplatform.dev|' diff --git a/.github/workflows/wiki.yml b/.github/workflows/wiki.yml deleted file mode 100644 index c9f479c4c1a..00000000000 --- a/.github/workflows/wiki.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: 'bitplatform wiki' - -on: - issues: - types: [opened] - discussion: - types: [created] - -jobs: - build-and-comment: - runs-on: ubuntu-24.04 - permissions: - issues: write - discussions: write - - steps: - - name: Checkout repository - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - persist-credentials: false - - - name: Install jq - run: sudo apt-get update && sudo apt-get install -y jq - - - name: Run wiki query script - id: run-mcp-query - run: | - chmod +x ./.github/workflows/wiki.sh - # Assign first so a failing script fails this step instead of silently - # producing an empty output and skipping the comment. - wiki_url=$(./.github/workflows/wiki.sh) - echo "wiki_url=$wiki_url" >> $GITHUB_OUTPUT - env: - ISSUE_TITLE: ${{ github.event.issue.title || github.event.discussion.title }} - ISSUE_BODY: ${{ github.event.issue.body || github.event.discussion.body }} - - - name: Write comment - if: steps.run-mcp-query.outputs.wiki_url - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const commentBody = ` - Hello there! I'm a wiki πŸ€–. - - Based on the content of this thread, I've found a potentially relevant wiki page for you! - - **✨ [View Wiki Page](${{ steps.run-mcp-query.outputs.wiki_url }})** - - I hope this helps! - `; - - if (context.eventName === 'issues') { - await github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: commentBody - }); - } else if (context.eventName === 'discussion') { - const discussionId = context.payload.discussion.node_id; - - await github.graphql( - `mutation($discussionId: ID!, $body: String!) { - addDiscussionComment(input: {discussionId: $discussionId, body: $body}) { - comment { - id - } - } - }`, - { - discussionId: discussionId, - body: commentBody - } - ); - } diff --git a/.vscode/mcp.json b/.vscode/mcp.json index 3f0fe488029..83823e38c8c 100644 --- a/.vscode/mcp.json +++ b/.vscode/mcp.json @@ -1,12 +1,8 @@ { "servers": { - "DeepWiki": { - "type": "sse", - "url": "https://mcp.deepwiki.com/mcp" - }, - "microsoft.docs.mcp": { + "bitplatform": { "type": "http", - "url": "https://learn.microsoft.com/api/mcp" + "url": "https://bitplatform.dev/mcp" }, "github": { "type": "http", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/ai-dlc/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/ai-dlc/SKILL.md new file mode 100644 index 00000000000..7b43bab47ba --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/ai-dlc/SKILL.md @@ -0,0 +1,6 @@ +--- +name: ai-dlc +description: Drives a feature end-to-end using the AI-Driven Development Lifecycle - requirements elaboration, planning and task decomposition, design, implementation, then validation - with explicit user approval before any code is written. Use when the user asks to build a feature properly/end-to-end, wants a structured dev cycle, asks for requirements-then-plan-then-implement, or says "run ai-dlc". +--- + +Read `.github/agents/ai-dlc.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/bitify-ui/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/bitify-ui/SKILL.md new file mode 100644 index 00000000000..3284ede7490 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/bitify-ui/SKILL.md @@ -0,0 +1,6 @@ +--- +name: bitify-ui +description: Modernizes Blazor pages by replacing raw HTML elements and custom CSS with Bit.BlazorUI components and theme-aware styling, using the bit BlazorUI MCP tools to discover components and verify their exact APIs. Use when the user asks to bitify a page, replace HTML/div/button/input markup with Bit components, remove hardcoded colors, make a page theme-aware or dark-mode ready, or says "run bitify". +--- + +Read `.github/agents/bitify-ui.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/code-reviewer/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/code-reviewer/SKILL.md new file mode 100644 index 00000000000..04b2ed4bcdb --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/code-reviewer/SKILL.md @@ -0,0 +1,7 @@ +--- +name: code-reviewer +description: Reviews code changes against this project's conventions - Bit.BlazorUI usage, theming, enhanced lifecycle methods, WrapHandled, Mapperly, OData, structured logging, nullable awareness, security and concurrency. Reports findings only and never modifies code. Use when the user asks to review changes, review a diff or PR, check code against project conventions, or says "run code review". +context: fork +--- + +Read `.github/agents/code-reviewer.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/localize-strings/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/localize-strings/SKILL.md new file mode 100644 index 00000000000..4ab9f1c0114 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/localize-strings/SKILL.md @@ -0,0 +1,6 @@ +--- +name: localize-strings +description: Moves hardcoded user-facing strings out of Razor/C# files into AppStrings.resx and rewrites the call sites to use IStringLocalizer with nameof(AppStrings.Key). Use when the user explicitly asks to localize a page or component, extract hardcoded text, apply translations, fix missing resource strings, or says "run resx" / "move these strings to resx". +--- + +Read `.github/agents/localize-strings.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/scaffold-entity/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/scaffold-entity/SKILL.md new file mode 100644 index 00000000000..ce25fd84051 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.agents/skills/scaffold-entity/SKILL.md @@ -0,0 +1,6 @@ +--- +name: scaffold-entity +description: Scaffolds a complete CRUD entity across every layer of the Boilerplate solution - entity model, EF Core configuration and migration, DTO, Mapperly mapper, API controller, IAppController interface, AppStrings resource entries, Blazor grid and add/edit pages, and navigation integration. Use when the user asks to add a new entity, add a new feature with CRUD, scaffold a table/model, or says "run scaffold" / "scaffold Product". +--- + +Read `.github/agents/scaffold-entity.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/ai-dlc/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/ai-dlc/SKILL.md new file mode 100644 index 00000000000..7b43bab47ba --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/ai-dlc/SKILL.md @@ -0,0 +1,6 @@ +--- +name: ai-dlc +description: Drives a feature end-to-end using the AI-Driven Development Lifecycle - requirements elaboration, planning and task decomposition, design, implementation, then validation - with explicit user approval before any code is written. Use when the user asks to build a feature properly/end-to-end, wants a structured dev cycle, asks for requirements-then-plan-then-implement, or says "run ai-dlc". +--- + +Read `.github/agents/ai-dlc.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/bitify-ui/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/bitify-ui/SKILL.md new file mode 100644 index 00000000000..3284ede7490 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/bitify-ui/SKILL.md @@ -0,0 +1,6 @@ +--- +name: bitify-ui +description: Modernizes Blazor pages by replacing raw HTML elements and custom CSS with Bit.BlazorUI components and theme-aware styling, using the bit BlazorUI MCP tools to discover components and verify their exact APIs. Use when the user asks to bitify a page, replace HTML/div/button/input markup with Bit components, remove hardcoded colors, make a page theme-aware or dark-mode ready, or says "run bitify". +--- + +Read `.github/agents/bitify-ui.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/code-reviewer/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/code-reviewer/SKILL.md new file mode 100644 index 00000000000..04b2ed4bcdb --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/code-reviewer/SKILL.md @@ -0,0 +1,7 @@ +--- +name: code-reviewer +description: Reviews code changes against this project's conventions - Bit.BlazorUI usage, theming, enhanced lifecycle methods, WrapHandled, Mapperly, OData, structured logging, nullable awareness, security and concurrency. Reports findings only and never modifies code. Use when the user asks to review changes, review a diff or PR, check code against project conventions, or says "run code review". +context: fork +--- + +Read `.github/agents/code-reviewer.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/localize-strings/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/localize-strings/SKILL.md new file mode 100644 index 00000000000..4ab9f1c0114 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/localize-strings/SKILL.md @@ -0,0 +1,6 @@ +--- +name: localize-strings +description: Moves hardcoded user-facing strings out of Razor/C# files into AppStrings.resx and rewrites the call sites to use IStringLocalizer with nameof(AppStrings.Key). Use when the user explicitly asks to localize a page or component, extract hardcoded text, apply translations, fix missing resource strings, or says "run resx" / "move these strings to resx". +--- + +Read `.github/agents/localize-strings.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/scaffold-entity/SKILL.md b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/scaffold-entity/SKILL.md new file mode 100644 index 00000000000..ce25fd84051 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.claude/skills/scaffold-entity/SKILL.md @@ -0,0 +1,6 @@ +--- +name: scaffold-entity +description: Scaffolds a complete CRUD entity across every layer of the Boilerplate solution - entity model, EF Core configuration and migration, DTO, Mapperly mapper, API controller, IAppController interface, AppStrings resource entries, Blazor grid and add/edit pages, and navigation integration. Use when the user asks to add a new entity, add a new feature with CRUD, scaffold a table/model, or says "run scaffold" / "scaffold Product". +--- + +Read `.github/agents/scaffold-entity.agent.md` (relative to the repository root) and follow it exactly. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json new file mode 100644 index 00000000000..794658f9d28 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json @@ -0,0 +1,25 @@ +{ + "mcpServers": { + "bitplatform": { + "url": "https://bitplatform.dev/mcp" + }, + "aspire": { + "command": "aspire", + "args": [ + "agent", + "mcp" + ] + }, + "playwright": { + "command": "npx", + "args": [ + "-y", + "@playwright/mcp@latest", + "--output-dir", + ".playwright-mcp", + "--output-max-size", + "52428800" + ] + } + } +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/rules/agents.mdc b/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/rules/agents.mdc deleted file mode 100644 index 71034ff26d1..00000000000 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/rules/agents.mdc +++ /dev/null @@ -1,10 +0,0 @@ ---- -description: Project coding conventions, structure and behavioral directives -alwaysApply: true ---- - -# Cursor Rules - -This project uses @AGENTS.md (at the repository root) as the single source of truth for all coding conventions, project structure, technology stack, and behavioral directives. - -**Before performing any task, read the full content of `/AGENTS.md`.** diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json b/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json index 76fbd377645..e6bec4684ee 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json @@ -4,7 +4,6 @@ "hostRequirements": { "cpus": 4 }, - "onCreateCommand": "dotnet workload install wasm-tools", "waitFor": "onCreateCommand", "postCreateCommand": "dotnet dev-certs https --trust", "customizations": { @@ -15,8 +14,6 @@ }, "vscode": { "extensions": [ - "GitHub.copilot", - "GitHub.copilot-chat", "ms-dotnettools.csharp", "Anthropic.claude-code", "ms-dotnettools.csdevkit", @@ -38,10 +35,11 @@ ], "features": { "ghcr.io/microsoft/aspire-devcontainer-feature/aspire:2": {}, - "ghcr.io/devcontainers/features/python:1": {}, "ghcr.io/devcontainers/features/powershell:2": {}, "ghcr.io/devcontainers/features/docker-in-docker:4": {}, - "ghcr.io/devcontainers/features/node:2": { "version": "24" }, + "ghcr.io/devcontainers/features/node:2": { + "version": "24" + }, "ghcr.io/devcontainers/features/kubectl-helm-minikube:1": { "version": "1", "helm": "3", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/00- Wiki.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/00- Wiki.md index f9c570c4355..e7185834d31 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/00- Wiki.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/00- Wiki.md @@ -10,12 +10,12 @@ This project includes **25 comprehensive documentation files** in the `.docs/` f If you have questions or need assistance: -### 1. πŸ€– **GitHub Copilot (Agent Mode)** - - Ask questions directly in your IDE using GitHub Copilot in Agent Mode +### 1. πŸ€– **Your AI Coding Agent** + - Ask questions directly in your IDE using GitHub Copilot (Agent Mode), Claude Code, Cursor, Gemini, Antigravity, Codex, Junie or Windsurf - this project ships shared instructions (`AGENTS.md`) and Agent Skills (`.agents/skills/`) that all of them understand - Get instant, context-aware answers about the project -### 2. 🌐 **Interactive Wiki** - - Visit: **[https://wiki.bitplatform.dev](https://wiki.bitplatform.dev)** +### 2. 🌐 **Ask AI on bitplatform.dev** + - Visit: **[https://bitplatform.dev/ask](https://bitplatform.dev/ask)** - Ask questions and get AI-powered answers ### 3. πŸ› **GitHub Issues** diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md index 736331ae480..aa6e1159d8b 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md @@ -476,6 +476,8 @@ For comprehensive information about the client-side offline database, including: --- -Ask your question [here](https://wiki.bitplatform.dev) +### AI Wiki ---- \ No newline at end of file +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/02- DTOs, Mappers, and Mapperly.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/02- DTOs, Mappers, and Mapperly.md index 2657a5663c6..d5ed15555c0 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/02- DTOs, Mappers, and Mapperly.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/02- DTOs, Mappers, and Mapperly.md @@ -366,3 +366,9 @@ private async Task SaveProfile() ``` --- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/03- API Controllers and OData.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/03- API Controllers and OData.md index 8472182fedc..58559da1a06 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/03- API Controllers and OData.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/03- API Controllers and OData.md @@ -895,3 +895,9 @@ While the architecture is simple, the backend still includes many advanced featu Feel free to restructure the backend however you see fit. The template provides a solid foundation and advanced features, but you're in control of the architecture. --- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/04- Background Jobs and CancellationToken Management.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/04- Background Jobs and CancellationToken Management.md index 3aa31a629d2..136d76ff9ac 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/04- Background Jobs and CancellationToken Management.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/04- Background Jobs and CancellationToken Management.md @@ -448,6 +448,8 @@ The job runner is registered as a scoped service so it has access to all the sam --- -Ask your own question [here](https://wiki.bitplatform.dev) +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) --- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/05- Localization and Multi-language Support.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/05- Localization and Multi-language Support.md index 42d40d10297..577db8d7949 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/05- Localization and Multi-language Support.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/05- Localization and Multi-language Support.md @@ -696,3 +696,9 @@ from the URL first, then the stored preference, then the OS/browser settings (se `AppClientCoordinator.ConfigureUISetup`). --- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/06- Exception Handling and Error Management.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/06- Exception Handling and Error Management.md index 48e6fc8d033..89d62c8de8b 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/06- Exception Handling and Error Management.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/06- Exception Handling and Error Management.md @@ -610,8 +610,8 @@ and pre-rendering. --- -### AI Wiki: Answered Questions +### AI Wiki -Ask your own question [here](https://wiki.bitplatform.dev) +Ask your own question [here](https://bitplatform.dev/ask) --- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/07- ASP.NET Core Identity - Authentication & Authorization.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/07- ASP.NET Core Identity - Authentication & Authorization.md index 61be73a6b15..2e04e019fdb 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/07- ASP.NET Core Identity - Authentication & Authorization.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/07- ASP.NET Core Identity - Authentication & Authorization.md @@ -362,8 +362,8 @@ Run the project and walk through these - it is faster than reading: password and OTP sign-in, 2FA, session management and revocation, password reset, roles and permissions, external providers, privileged sessions and elevated access. -### AI Wiki: answered questions +### AI Wiki -Ask your own question [here](https://wiki.bitplatform.dev). +Ask your own question [here](https://bitplatform.dev/ask) --- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/08- Blazor Pages, Components, Styling & Navigation.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/08- Blazor Pages, Components, Styling & Navigation.md index cb1cad03c7f..6f81dcad030 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/08- Blazor Pages, Components, Styling & Navigation.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/08- Blazor Pages, Components, Styling & Navigation.md @@ -491,22 +491,22 @@ The documentation includes: - Usage patterns - Styling guides -### Automatic DeepWiki Integration +### Automatic MCP Integration -**You don't need to manually search the documentation!** +**You don't need to manually search the documentation!** -When you ask questions in **GitHub Copilot Chat** or give commands related to UI components, the system **automatically queries the DeepWiki knowledge base** for `bitfoundation/bitplatform` to find relevant information. +This project ships the **bitplatform MCP server** configuration for every supported AI coding tool, and `AGENTS.md` directs the agent to its tools (`SearchBitBlazorUI`, `GetBitBlazorUIComponent`, `GetBitBlazorUIComponentExamples`, `GetBitBlazorUIType`, `GetBitBlazorUIThemingGuide`, `FindBitBlazorUIIcons`). When you ask questions or give commands related to UI components, the agent **automatically queries these tools**, which answer from the shipped assemblies and documentation pages rather than from memory. **Example interactions:** - **You ask:** "How do I add a filter to BitDataGrid?" - - **Copilot:** Automatically searches DeepWiki and provides the answer with code examples + - **Agent:** Calls `SearchBitBlazorUI` / `GetBitBlazorUIComponentExamples` and provides the answer with real code examples - **You ask:** "How to customize BitButton colors?" - - **Copilot:** Retrieves information about `BitColor` enum and styling options + - **Agent:** Retrieves the `BitColor` enum and styling options via `GetBitBlazorUIType` and the theming guide - **You command:** "Add a BitDatePicker with validation" - - **Copilot:** Finds the correct implementation pattern and creates the code + - **Agent:** Finds the correct implementation pattern and creates the code **You can ask naturally:** - "How do I make a BitModal full screen?" @@ -515,7 +515,7 @@ When you ask questions in **GitHub Copilot Chat** or give commands related to UI - "What properties does BitChart have?" - "How can I implement a Grid System and layout using BitGrid and BitStack components, especially if I'm familiar with the Bootstrap grid system?" -The DeepWiki system handles the documentation lookup automatically! +The MCP tools handle the documentation lookup automatically! --- @@ -698,8 +698,8 @@ public partial class ProductsPage --- -### AI Wiki: Answered Questions +### AI Wiki -Ask your own question [here](https://wiki.bitplatform.dev) +Ask your own question [here](https://bitplatform.dev/ask) --- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/09- Dependency Injection & Service Registration.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/09- Dependency Injection & Service Registration.md index 4bfa5972767..9b71129e511 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/09- Dependency Injection & Service Registration.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/09- Dependency Injection & Service Registration.md @@ -300,8 +300,8 @@ protected override async ValueTask DisposeAsync(bool disposing) ``` --- -### AI Wiki: Answered Questions +### AI Wiki -Ask your own question [here](https://wiki.bitplatform.dev) +Ask your own question [here](https://bitplatform.dev/ask) --- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/10- Configuration (appsettings.json).md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/10- Configuration (appsettings.json).md index 061966f3814..d2d3f4d9e66 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/10- Configuration (appsettings.json).md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/10- Configuration (appsettings.json).md @@ -418,4 +418,10 @@ Environment is determined by `AppEnvironment.Current` which is set during build See [`Directory.Build.props`](/src/Directory.Build.props) for environment configuration and [`src/Shared/Infrastructure/Services/AppEnvironment.cs`](/src/Shared/Infrastructure/Services/AppEnvironment.cs) for the environment service. ---- \ No newline at end of file +--- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/11- TypeScript, Build Process & JavaScript Interop.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/11- TypeScript, Build Process & JavaScript Interop.md index 86cc8b9283d..eff8ad904c7 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/11- TypeScript, Build Process & JavaScript Interop.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/11- TypeScript, Build Process & JavaScript Interop.md @@ -359,3 +359,9 @@ The build process will: 4. Build the project - TypeScript compiler and esbuild will handle it automatically --- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/12- Blazor Modes, PreRendering & PWA.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/12- Blazor Modes, PreRendering & PWA.md index 2e0c805e233..d6ff4df0dc9 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/12- Blazor Modes, PreRendering & PWA.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/12- Blazor Modes, PreRendering & PWA.md @@ -399,3 +399,9 @@ self.addEventListener('notificationclick', function (event) { 4. When user clicks notification, app opens to specified `pageUrl` (If applicable) --- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/13- Force Update System.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/13- Force Update System.md index 7088fd52172..4daee54cd7e 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/13- Force Update System.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/13- Force Update System.md @@ -481,4 +481,10 @@ This allows you to: 2. Test with web users before forcing mobile users to update 3. Give mobile users more time to update (app store approval delays) ---- \ No newline at end of file +--- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/14- Response Caching System.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/14- Response Caching System.md index 6b878d9da21..d6ed89fc6c9 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/14- Response Caching System.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/14- Response Caching System.md @@ -697,8 +697,8 @@ announced earlier in the request. --- -### AI Wiki: Answered Questions +### AI Wiki -Ask your own question [here](https://wiki.bitplatform.dev) +Ask your own question [here](https://bitplatform.dev/ask) --- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/15- Logging, OpenTelemetry and Health Checks.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/15- Logging, OpenTelemetry and Health Checks.md index 8bcfded3a1b..925daaf22c5 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/15- Logging, OpenTelemetry and Health Checks.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/15- Logging, OpenTelemetry and Health Checks.md @@ -307,10 +307,16 @@ response. ### Registered Checks -`AddDefaultHealthChecks` contributes the disk-space check (at least **5 GB** free), which is the only one tagged +`AddDefaultHealthChecks` contributes the disk-space check (at least **2 GB** free), which is the only one tagged `"live"`. `AddServerApiHealthChecks` adds the database, Hangfire, the user-profile-images blob storage and - when SMS is configured - Twilio. The last two reach a remote dependency, so they carry a timeout and report **Degraded** rather than Unhealthy: a storage or SMS-provider outage must not take an otherwise healthy instance out of the load balancer. Anything you add that a request path genuinely depends on should report Unhealthy; anything external should not. --- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md index 011cbcbdc09..df5c3b1389d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md @@ -709,3 +709,9 @@ Enabling/Disabling AOT during `dotnet publish` command has the most impact. `dot --- - **iOS/macOS** => 120MB to 130MB --- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md index ed305c344a1..26919c68188 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md @@ -349,4 +349,10 @@ The project includes GitHub Actions workflows that run tests automatically: path: ./src/Tests/TestResults ``` ---- \ No newline at end of file +--- + +### AI Wiki + +Ask your own question [here](https://bitplatform.dev/ask) + +--- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/18- Available Agent Skills.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/18- Available Agent Skills.md new file mode 100644 index 00000000000..aa0abbfc965 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/18- Available Agent Skills.md @@ -0,0 +1,156 @@ +# Stage 18: Available Agent Skills + +This project ships several specialized **Agent Skills** designed to help you with specific development tasks. Each skill is carefully crafted to follow the project's conventions and best practices, and each one works across every major AI coding tool - GitHub Copilot (VS Code, Visual Studio, github.com, CLI), Claude Code, Cursor, Gemini CLI, Gemini Code Assist, Google Antigravity, OpenAI Codex, JetBrains Junie and Windsurf - without duplicating their content per tool. + +## How skills work + +An [Agent Skill](https://agentskills.io) is a folder containing a `SKILL.md` file with YAML frontmatter (`name` and `description`) followed by markdown instructions. Agents load skills through **progressive disclosure**: + +1. Only the `description` of each skill is preloaded at session start (roughly 100 tokens each), so the agent knows *that* the skill exists and *when* it applies. +2. The body is read only when the agent decides the skill is relevant, or when you invoke it explicitly with `/`. + +That means adding skills costs almost nothing in context until one is actually needed - the opposite of putting the same instructions in `AGENTS.md`, which loads in full on every single prompt. + +## Where the files live + +The full instructions live once, in `.github/agents/`, and every other location is a thin pointer at them: + +| Path | Purpose | +| --- | --- | +| `.github/agents/.agent.md` | **The canonical file with the actual body. Edit this one.** Listed directly in Visual Studio's agent picker and `@` menu (and as an `@` agent in VS Code), which show agents but not skills. | +| `.agents/skills//SKILL.md` | Discovery stub for the tool-neutral Agent Skills location, read natively by GitHub Copilot (VS Code, Visual Studio, github.com coding agent, Copilot CLI, JetBrains agent mode), Cursor, OpenAI Codex, JetBrains Junie, Windsurf, Google Antigravity and Gemini CLI. It mirrors the canonical frontmatter and delegates to the canonical file - keep only the frontmatter in sync. | +| `.claude/skills//SKILL.md` | Bridge stub for Claude Code, which only discovers skills under `.claude/skills/`. Same delegation rule. | +| `.gemini/commands/.toml` | Command shim that guarantees `/` in Gemini CLI and Gemini Code Assist agent mode, where Agent Skills discovery may not be enabled yet. It injects the canonical file via `@{...}`. | + +The instructions themselves follow the same single-source pattern: every tool that reads `AGENTS.md` natively (Copilot, Cursor, Codex, Junie, Windsurf, Antigravity) gets it directly, while `CLAUDE.md` and `GEMINI.md` are two-line entry points that inline it with an `@AGENTS.md` import for Claude Code and Gemini. Section 7 of `AGENTS.md` indexes the skills for anything that reads none of the skill locations. + +To add a new skill: create `.github/agents/.agent.md` with the full instructions, add the matching `.agents` and `.claude` stubs and the `.gemini` shim, and add a row to the `AGENTS.md` section 7 index. The `description` is the most important field - write it as *"...Use when the user asks to X, Y, or says Z"*, because that sentence is the only thing the agent sees when deciding whether to load the skill. + +--- + +## Available Skills + +### 1. Scaffold Entity (`scaffold-entity`) + +**Canonical file**: `.github/agents/scaffold-entity.agent.md` + +**What it does**: Generates a complete CRUD (Create, Read, Update, Delete) implementation for a new entity in your project, including all necessary layers from database to UI. + +**When to use it**: When you need to add a new data entity to your application with full CRUD functionality. + +**Key capabilities**: +- Creates Entity Type Configuration for EF Core +- Generates DTO (Data Transfer Object) with validation attributes +- Creates Mapper using Mapperly for high-performance object mapping +- Generates API Controller with OData support +- Creates IAppController Interface for strongly-typed HTTP client +- Adds Resource Strings to AppStrings.resx for localization +- Creates Data Grid Page for listing records +- Creates Add/Edit Page for creating and updating records +- Integrates with navigation (PageUrls.cs, NavBar, MainLayout items) +- Updates AppJsonContext for JSON serialization +- Generates EF Core migration + +**Example usage**: `/scaffold-entity Product with Name, Description, Price and CategoryId properties` + +--- + +### 2. Localize Strings (`localize-strings`) + +**Canonical file**: `.github/agents/localize-strings.agent.md` + +**What it does**: Identifies hardcoded strings in your code and moves them to resource files (.resx) for proper localization support. + +**When to use it**: When you explicitly want hardcoded user-facing text in your Blazor components, pages, or controllers moved into `AppStrings.resx` - for example as a dedicated translation pass before a release. (Day-to-day, new text stays in the `Localizer["..."]` literal indexer per `AGENTS.md` section 5, because `.resx` edits break hot reload.) + +**Key capabilities**: +- Identifies hardcoded user-facing strings in selected code +- Adds new entries to `AppStrings.resx` with appropriate resource keys +- Generates strongly-typed resource classes +- Updates code to use `IStringLocalizer` pattern +- Uses `nameof(AppStrings.ResourceKey)` for type-safe resource access +- Preserves string formatting with placeholders (e.g., `{0}`, `{1}`) +- Follows naming conventions with descriptive resource keys + +**What it won't move**: +- CSS class names or IDs +- Configuration keys +- API endpoints or URLs +- Technical constants (file extensions, mime types) +- Log messages + +**Example usage**: `/localize-strings Dashboard.razor` + +--- + +### 3. Bitify UI (`bitify-ui`) + +**Canonical file**: `.github/agents/bitify-ui.agent.md` + +**What it does**: Modernizes your Blazor pages by replacing standard HTML elements and custom CSS with Bit.BlazorUI components and theme-aware styling. + +**When to use it**: When you have pages using generic HTML elements (like `