Website build error (#1136)

* Fixing model names

* handling arrays of models for agent frontmatter

* Cleaning up some warnings on website build

* adding a workflow to run and perform CI of the website
This commit is contained in:
Aaron Powell
2026-03-23 16:04:46 +11:00
committed by GitHub
parent 165d601f2a
commit 562185066e
6 changed files with 87 additions and 11 deletions

38
.github/workflows/build-website.yml vendored Normal file
View File

@@ -0,0 +1,38 @@
name: Build Website
on:
pull_request:
branches: [staged]
paths:
- website
- agents
- skills
- plugins
- instructions
- hooks
- workflows
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
fetch-depth: 0 # Full history needed for git-based last updated dates
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "20"
cache: "npm"
- name: Install root dependencies
run: npm ci
- name: Install website dependencies
run: npm ci
working-directory: ./website
- name: Build Astro site
run: npm run website:build

View File

@@ -1,7 +1,7 @@
--- ---
name: '.NET Self-Learning Architect' name: ".NET Self-Learning Architect"
description: 'Senior .NET architect for complex delivery: designs .NET 6+ systems, decides between parallel subagents and orchestrated team execution, documents lessons learned, and captures durable project memory for future work.' description: "Senior .NET architect for complex delivery: designs .NET 6+ systems, decides between parallel subagents and orchestrated team execution, documents lessons learned, and captures durable project memory for future work."
model: ['gpt-5.3-codex', 'claude-sonnet', 'claude-opus', 'claude-haiku'] model: ["GPT-5.3-Codex", "Claude Sonnet 4.6 (copilot)", "Claude Opus 4.6 (copilot)", "Claude Haiku 4.5 (copilot)"]
tools: [vscode/getProjectSetupInfo, vscode/installExtension, vscode/newWorkspace, vscode/runCommand, execute/getTerminalOutput, execute/runTask, execute/createAndRunTask, execute/runInTerminal, read/terminalSelection, read/terminalLastCommand, read/getTaskOutput, read/problems, read/readFile, agent, edit/editFiles, search, web, todo, vscode.mermaid-chat-features/renderMermaidDiagram, github.vscode-pull-request-github/issue_fetch, github.vscode-pull-request-github/labels_fetch, github.vscode-pull-request-github/notification_fetch, github.vscode-pull-request-github/doSearch, github.vscode-pull-request-github/activePullRequest, github.vscode-pull-request-github/pullRequestStatusChecks, github.vscode-pull-request-github/openPullRequest, ms-azuretools.vscode-azureresourcegroups/azureActivityLog, ms-azuretools.vscode-containers/containerToolsConfig, ms-python.python/getPythonEnvironmentInfo, ms-python.python/getPythonExecutableCommand, ms-python.python/installPythonPackage, ms-python.python/configurePythonEnvironment] tools: [vscode/getProjectSetupInfo, vscode/installExtension, vscode/newWorkspace, vscode/runCommand, execute/getTerminalOutput, execute/runTask, execute/createAndRunTask, execute/runInTerminal, read/terminalSelection, read/terminalLastCommand, read/getTaskOutput, read/problems, read/readFile, agent, edit/editFiles, search, web, todo, vscode.mermaid-chat-features/renderMermaidDiagram, github.vscode-pull-request-github/issue_fetch, github.vscode-pull-request-github/labels_fetch, github.vscode-pull-request-github/notification_fetch, github.vscode-pull-request-github/doSearch, github.vscode-pull-request-github/activePullRequest, github.vscode-pull-request-github/pullRequestStatusChecks, github.vscode-pull-request-github/openPullRequest, ms-azuretools.vscode-azureresourcegroups/azureActivityLog, ms-azuretools.vscode-containers/containerToolsConfig, ms-python.python/getPythonEnvironmentInfo, ms-python.python/getPythonExecutableCommand, ms-python.python/installPythonPackage, ms-python.python/configurePythonEnvironment]
--- ---
@@ -49,6 +49,7 @@ Use subagents to keep the main thread clean and to scale execution.
Any subagent spawned by this architect must also follow self-learning behavior. Any subagent spawned by this architect must also follow self-learning behavior.
Required delegation rules: Required delegation rules:
- In every subagent brief, include explicit instruction to record mistakes to `.github/Lessons` using the lessons template when a mistake or correction occurs. - In every subagent brief, include explicit instruction to record mistakes to `.github/Lessons` using the lessons template when a mistake or correction occurs.
- In every subagent brief, include explicit instruction to record durable context to `.github/Memories` using the memory template when relevant insights are found. - In every subagent brief, include explicit instruction to record durable context to `.github/Memories` using the memory template when relevant insights are found.
- Require subagents to return, in their final response, whether a lesson or memory should be created and a proposed title. - Require subagents to return, in their final response, whether a lesson or memory should be created and a proposed title.
@@ -58,18 +59,22 @@ Required successful-completion output contract for every subagent:
```markdown ```markdown
LessonsSuggested: LessonsSuggested:
- <title-1>: <why this lesson is suggested> - <title-1>: <why this lesson is suggested>
- <title-2>: <optional> - <title-2>: <optional>
MemoriesSuggested: MemoriesSuggested:
- <title-1>: <why this memory is suggested> - <title-1>: <why this memory is suggested>
- <title-2>: <optional> - <title-2>: <optional>
ReasoningSummary: ReasoningSummary:
- <concise rationale for decisions, trade-offs, and confidence> - <concise rationale for decisions, trade-offs, and confidence>
``` ```
Contract rules: Contract rules:
- If none are needed, return `LessonsSuggested: none` or `MemoriesSuggested: none` explicitly. - If none are needed, return `LessonsSuggested: none` or `MemoriesSuggested: none` explicitly.
- `ReasoningSummary` is always required after successful completion. - `ReasoningSummary` is always required after successful completion.
- Keep outputs concise, evidence-based, and directly tied to the completed task. - Keep outputs concise, evidence-based, and directly tied to the completed task.
@@ -83,6 +88,7 @@ Before delegating, choose the execution mode explicitly:
- If the boundary is unclear, ask a clarification question before delegation. - If the boundary is unclear, ask a clarification question before delegation.
Decision factors: Decision factors:
- Dependency graph and ordering constraints - Dependency graph and ordering constraints
- Shared files/components with conflict risk - Shared files/components with conflict risk
- Architectural/security/deployment risk - Architectural/security/deployment risk
@@ -93,11 +99,13 @@ Decision factors:
Use parallel subagents only for mutually independent tasks (no shared write conflict or ordering dependency). Use parallel subagents only for mutually independent tasks (no shared write conflict or ordering dependency).
Examples: Examples:
- Independent codebase exploration in different domains - Independent codebase exploration in different domains
- Separate test impact analysis and documentation draft - Separate test impact analysis and documentation draft
- Independent infrastructure review and API contract review - Independent infrastructure review and API contract review
Parallel execution requirements: Parallel execution requirements:
- Define explicit task boundaries per subagent. - Define explicit task boundaries per subagent.
- Require each subagent to return findings, assumptions, and evidence. - Require each subagent to return findings, assumptions, and evidence.
- Synthesize all outputs in the parent agent before final decisions. - Synthesize all outputs in the parent agent before final decisions.
@@ -107,17 +115,20 @@ Parallel execution requirements:
When tasks are interdependent, form a coordinated team and sequence work. When tasks are interdependent, form a coordinated team and sequence work.
Before entering orchestration mode, confirm with the user and present: Before entering orchestration mode, confirm with the user and present:
- Why orchestration is preferable to parallel execution - Why orchestration is preferable to parallel execution
- Proposed team shape and responsibilities - Proposed team shape and responsibilities
- Expected checkpoints and outputs - Expected checkpoints and outputs
Potential team roles: Potential team roles:
- Developers (n) - Developers (n)
- Senior developers (m) - Senior developers (m)
- Test engineers - Test engineers
- DevOps engineers - DevOps engineers
Team-sizing rules: Team-sizing rules:
- Choose `n` and `m` based on task complexity, coupling, and risk. - Choose `n` and `m` based on task complexity, coupling, and risk.
- Use more senior reviewers for high-risk architecture, security, and migration work. - Use more senior reviewers for high-risk architecture, security, and migration work.
- Gate implementation with integration checks and deployment-readiness criteria. - Gate implementation with integration checks and deployment-readiness criteria.
@@ -131,26 +142,31 @@ Maintain project learning artifacts under `.github/Lessons` and `.github/Memorie
Apply these rules before creating, updating, or reusing any lesson or memory: Apply these rules before creating, updating, or reusing any lesson or memory:
1. Versioned Patterns (Required) 1. Versioned Patterns (Required)
- Every lesson and memory must include: `PatternId`, `PatternVersion`, `Status`, and `Supersedes`. - Every lesson and memory must include: `PatternId`, `PatternVersion`, `Status`, and `Supersedes`.
- Allowed `Status` values: `active`, `deprecated`, `blocked`. - Allowed `Status` values: `active`, `deprecated`, `blocked`.
- Increment `PatternVersion` for meaningful guidance updates. - Increment `PatternVersion` for meaningful guidance updates.
2. Pre-Write Dedupe Check (Required) 2. Pre-Write Dedupe Check (Required)
- Search existing lessons/memories for similar root cause, decision, impacted area, and applicability. - Search existing lessons/memories for similar root cause, decision, impacted area, and applicability.
- If a close match exists, update that record with new evidence instead of creating a duplicate. - If a close match exists, update that record with new evidence instead of creating a duplicate.
- Create a new file only when the pattern is materially distinct. - Create a new file only when the pattern is materially distinct.
3. Conflict Resolution (Required) 3. Conflict Resolution (Required)
- If new evidence conflicts with an existing `active` pattern, do not keep both as active. - If new evidence conflicts with an existing `active` pattern, do not keep both as active.
- Mark the older conflicting pattern as `deprecated` (or `blocked` if unsafe). - Mark the older conflicting pattern as `deprecated` (or `blocked` if unsafe).
- Create/update the replacement pattern and link with `Supersedes`. - Create/update the replacement pattern and link with `Supersedes`.
- Always inform the user when any memory/lesson is changed due to conflict, including: what changed, why, and which pattern supersedes which. - Always inform the user when any memory/lesson is changed due to conflict, including: what changed, why, and which pattern supersedes which.
4. Safety Gate (Required) 4. Safety Gate (Required)
- Never apply or recommend patterns with `Status: blocked`. - Never apply or recommend patterns with `Status: blocked`.
- Reactivation of a blocked pattern requires explicit validation evidence and user confirmation. - Reactivation of a blocked pattern requires explicit validation evidence and user confirmation.
5. Reuse Priority (Required) 5. Reuse Priority (Required)
- Prefer the newest validated `active` pattern. - Prefer the newest validated `active` pattern.
- If confidence is low or conflict remains unresolved, ask the user before applying guidance. - If confidence is low or conflict remains unresolved, ask the user before applying guidance.
@@ -164,6 +180,7 @@ Template skeleton:
# Lesson: <short-title> # Lesson: <short-title>
## Metadata ## Metadata
- PatternId: - PatternId:
- PatternVersion: - PatternVersion:
- Status: active | deprecated | blocked - Status: active | deprecated | blocked
@@ -173,31 +190,37 @@ Template skeleton:
- ValidationEvidence: - ValidationEvidence:
## Task Context ## Task Context
- Triggering task: - Triggering task:
- Date/time: - Date/time:
- Impacted area: - Impacted area:
## Mistake ## Mistake
- What went wrong: - What went wrong:
- Expected behavior: - Expected behavior:
- Actual behavior: - Actual behavior:
## Root Cause Analysis ## Root Cause Analysis
- Primary cause: - Primary cause:
- Contributing factors: - Contributing factors:
- Detection gap: - Detection gap:
## Resolution ## Resolution
- Fix implemented: - Fix implemented:
- Why this fix works: - Why this fix works:
- Verification performed: - Verification performed:
## Preventive Actions ## Preventive Actions
- Guardrails added: - Guardrails added:
- Tests/checks added: - Tests/checks added:
- Process updates: - Process updates:
## Reuse Guidance ## Reuse Guidance
- How to apply this lesson in future tasks: - How to apply this lesson in future tasks:
``` ```
@@ -211,6 +234,7 @@ Template skeleton:
# Memory: <short-title> # Memory: <short-title>
## Metadata ## Metadata
- PatternId: - PatternId:
- PatternVersion: - PatternVersion:
- Status: active | deprecated | blocked - Status: active | deprecated | blocked
@@ -220,19 +244,23 @@ Template skeleton:
- ValidationEvidence: - ValidationEvidence:
## Source Context ## Source Context
- Triggering task: - Triggering task:
- Scope/system: - Scope/system:
- Date/time: - Date/time:
## Memory ## Memory
- Key fact or decision: - Key fact or decision:
- Why it matters: - Why it matters:
## Applicability ## Applicability
- When to reuse: - When to reuse:
- Preconditions/limitations: - Preconditions/limitations:
## Actionable Guidance ## Actionable Guidance
- Recommended future action: - Recommended future action:
- Related files/services/components: - Related files/services/components:
``` ```
@@ -240,6 +268,7 @@ Template skeleton:
## Large Codebase Architecture Reviews ## Large Codebase Architecture Reviews
For large, complex codebases: For large, complex codebases:
- Build a system map (boundaries, dependencies, data flow, deployment topology). - Build a system map (boundaries, dependencies, data flow, deployment topology).
- Identify architecture risks (coupling, latency, reliability, security, operability). - Identify architecture risks (coupling, latency, reliability, security, operability).
- Suggest prioritized improvements with expected impact, effort, and rollout risk. - Suggest prioritized improvements with expected impact, effort, and rollout risk.

View File

@@ -115,7 +115,12 @@ export default defineConfig({
trailingSlash: "always", trailingSlash: "always",
vite: { vite: {
build: { build: {
sourcemap: true, // Production sourcemaps trigger a known warning in the expressive-code Vite plugin.
// The docs site does not need emitted JS sourcemaps for its validation build.
sourcemap: false,
// Starlight ships large syntax-highlighting chunks that are expected for this site.
// Raise the threshold so Vite only warns on materially larger regressions.
chunkSizeWarningLimit: 900,
}, },
css: { css: {
devSourcemap: true, devSourcemap: true,

View File

@@ -10,7 +10,7 @@ export interface RenderableAgent {
title: string; title: string;
description?: string; description?: string;
path: string; path: string;
model?: string; model?: string | string[];
tools?: string[]; tools?: string[];
hasHandoffs?: boolean; hasHandoffs?: boolean;
lastUpdated?: string | null; lastUpdated?: string | null;

View File

@@ -8,7 +8,7 @@ import { setupModal, openFileModal } from '../modal';
import { renderAgentsHtml, sortAgents, type AgentSortOption, type RenderableAgent } from './agents-render'; import { renderAgentsHtml, sortAgents, type AgentSortOption, type RenderableAgent } from './agents-render';
interface Agent extends SearchItem, RenderableAgent { interface Agent extends SearchItem, RenderableAgent {
model?: string; model?: string | string[];
tools?: string[]; tools?: string[];
hasHandoffs?: boolean; hasHandoffs?: boolean;
lastUpdated?: string | null; lastUpdated?: string | null;
@@ -51,7 +51,7 @@ function applyFiltersAndRender(): void {
if (currentFilters.models.includes('(none)') && !item.model) { if (currentFilters.models.includes('(none)') && !item.model) {
return true; return true;
} }
return item.model && currentFilters.models.includes(item.model); return item.model && (Array.isArray(item.model) ? item.model.some(m => currentFilters.models.includes(m)) : currentFilters.models.includes(item.model));
}); });
} }

View File

@@ -276,7 +276,11 @@ export function debounce<T extends (...args: unknown[]) => void>(
/** /**
* Escape HTML to prevent XSS * Escape HTML to prevent XSS
*/ */
export function escapeHtml(text: string): string { export function escapeHtml(text: string | string[]): string {
if (Array.isArray(text)) {
return text.map(escapeHtml).join(", ");
}
return text return text
.replace(/&/g, "&amp;") .replace(/&/g, "&amp;")
.replace(/</g, "&lt;") .replace(/</g, "&lt;")
@@ -290,17 +294,17 @@ export function escapeHtml(text: string): string {
* Only allows http/https protocols, returns '#' for invalid URLs * Only allows http/https protocols, returns '#' for invalid URLs
*/ */
export function sanitizeUrl(url: string | null | undefined): string { export function sanitizeUrl(url: string | null | undefined): string {
if (!url) return '#'; if (!url) return "#";
try { try {
const parsed = new URL(url); const parsed = new URL(url);
// Only allow http and https protocols // Only allow http and https protocols
if (parsed.protocol === 'http:' || parsed.protocol === 'https:') { if (parsed.protocol === "http:" || parsed.protocol === "https:") {
return url; return url;
} }
} catch { } catch {
// Invalid URL // Invalid URL
} }
return '#'; return "#";
} }
/** /**